{ "version": "https://jsonfeed.org/version/1.1", "title": "Maddie Schipper", "description": "My slice of the internet", "home_page_url": "https://maddiesch.com/", "feed_url": "https://maddiesch.com/feed.json", "favicon": "https://maddiesch.com/favicon.ico", "authors": [ { "name": "Maddie Schipper" } ], "items": [ { "id": "https://maddiesch.com//posts/switching-to-ghostty/", "url": "https://maddiesch.com//posts/switching-to-ghostty/", "title": "Switching to Ghostty", "summary": "Why I switched from Terminal.app to Ghostty after 18 years.", "content_html": "\u003cp\u003eI\u0026rsquo;ve been using macOS \u003ccode\u003eTerminal.app\u003c/code\u003e since I got my first MacBook Pro in 2006. It felt like home, I developed muscle memory with it, and it was always \u0026ldquo;just there\u0026rdquo; on any Mac I sat down at. But over the years, my tooling became more personalized. I built up custom aliases, scripts, and workflows that exist only on my machines. Now Terminal no longer feels like home when I sit down at any Mac.\u003c/p\u003e\n\u003cp\u003eWhat I want is shared configuration I can sync across my computers, preferably checked into git. I also want a native app with reasonable memory usage (looking at you, Electron).\u003c/p\u003e\n\u003cp\u003eEnter \u003ca href=\"https://ghostty.org\"\u003eGhostty\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eMy reason for choosing Ghostty is simple: the entire configuration lives in a single plaintext file at \u003ccode\u003e~/.config/ghostty/config\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003efont-family = Monaspace Krypton Var\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003efont-size = 13\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003etheme = Dracula+\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ecursor-style = block\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emouse-hide-while-typing = true\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ebackground-opacity = 0.95\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ebackground-blur = 25\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003elink-url = true\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ewindow-save-state = never\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ewindow-height = 38\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ewindow-width = 140\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emacos-icon = xray\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003edesktop-notifications = true\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eI already have a repository that manages my dotfiles. I can add the Ghostty config file to the correct directory and update my install script to symlink it from the repo to the expected location. Now any changes I make can be shared between my work and personal machines with a simple \u003ccode\u003egit push\u003c/code\u003e and \u003ccode\u003egit pull\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eAnother feature I wanted was the ability to have clickable links in the output. When I create a pull request using the \u003ccode\u003egh\u003c/code\u003e CLI, I can click the PR URL that \u003ccode\u003egh\u003c/code\u003e prints to the terminal to open it in the browser. Ghostty\u0026rsquo;s configuration can enable this behavior with \u003ccode\u003elink-url = true\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eIt\u0026rsquo;s only been a couple of days, and other than breaking my \u003ccode\u003ecmd-space\u003c/code\u003e, type \u003ccode\u003eterm\u003c/code\u003e, hit return, \u003cem\u003ecurse at myself under my breath\u003c/em\u003e, \u003ccode\u003ecmd-q\u003c/code\u003e, \u003ccode\u003ecmd-space\u003c/code\u003e, type \u003ccode\u003egho\u003c/code\u003e, hit return routine, I\u0026rsquo;m really liking it. At the end of the day, it\u0026rsquo;s a terminal app. I can type stuff in, and it does what I expect. But it gives me native performance and a single config file.\u003c/p\u003e\n", "date_published": "2025-08-22T00:00:00Z", "tags": ["terminal","ghostty","macos","dotfiles","configuration" ], "authors": [ { "name": "Maddie Schipper" } ] }, { "id": "https://maddiesch.com//posts/using-claude-code-for-fun-and-profit/", "url": "https://maddiesch.com//posts/using-claude-code-for-fun-and-profit/", "title": "Using Claude Code for Fun and Profit", "summary": "A practical look at how I\u0026rsquo;m using Claude Code to automate tedious tasks, improve my workflow, and focus on the parts of development I actually enjoy.", "content_html": "\u003cp\u003eI\u0026rsquo;ll start by saying I don\u0026rsquo;t think we\u0026rsquo;re \u0026ldquo;just days away from general AI.\u0026rdquo; I also think LLMs are being sold as a round peg for a square hole. But it\u0026rsquo;s a tech hype train, and everyone wants a ticket.\u003c/p\u003e\n\u003cp\u003eNow, with that out of the way, let\u0026rsquo;s hop onto my personal Claude Code hype train. Choo Chooo!!\u003c/p\u003e\n\u003cp\u003eOver the last couple of months, I\u0026rsquo;ve been leaning more on \u003ca href=\"https://www.anthropic.com/claude-code\"\u003eClaude Code\u003c/a\u003e for everyday tasks. I wanted to write about how I\u0026rsquo;m using it currently. I think of this more as a \u0026ldquo;snapshot of my current usage\u0026rdquo; rather than a definitive guide to using Claude Code.\u003c/p\u003e\n\u003ch4 id=\"using-claude-in-practice\"\u003eUsing Claude in Practice\u003c/h4\u003e\n\u003cp\u003eI use several commands and agents to work with Claude Code. I\u0026rsquo;ve had success with Claude Code \u0026ldquo;one-shotting\u0026rdquo; simple tasks like implementing a test for a specific edge case. For more complex tasks, I use plan mode to iterate back and forth to nail down exactly what I want. While iterating in plan mode, I\u0026rsquo;ve had success telling Claude to search the web for docs. That has cut down on hallucinations quite a bit. Opus excels at reasoning through complex task steps, then I pass that plan to Sonnet for execution. I use auto-accept edits, then review changes with git diffs when it\u0026rsquo;s done. I\u0026rsquo;ve found that it will iterate effectively if I\u0026rsquo;m not reviewing every change as it happens.\u003c/p\u003e\n\u003cp\u003eI find myself more willing to tackle tasks I\u0026rsquo;d normally avoid. Lots of boilerplate setup and similar tedious work.\u003c/p\u003e\n\u003cp\u003eClaude will want to \u0026ldquo;create comprehensive tests\u0026rdquo; for every function, and things go off the rails quickly if you let it run wild. Instead, I have Claude write \u0026ldquo;golden path\u0026rdquo; tests, then either manually write edge case tests or prompt Claude to cover edge cases with small, focused tests.\u003c/p\u003e\n\u003ch4 id=\"my-setup\"\u003eMy Setup\u003c/h4\u003e\n\u003cp\u003eThe \u003ccode\u003e~/.claude\u003c/code\u003e folder is a git repo to track the \u003ccode\u003eCLAUDE.md\u003c/code\u003e, \u003ccode\u003esettings.json\u003c/code\u003e, \u003ccode\u003eoutput-styles\u003c/code\u003e, \u003ccode\u003eagents\u003c/code\u003e, and \u003ccode\u003ecommands\u003c/code\u003e.\u003c/p\u003e\n\u003ch5 id=\"claudemd\"\u003eCLAUDE.md\u003c/h5\u003e\n\u003cp\u003eThe \u003ccode\u003eCLAUDE.md\u003c/code\u003e file contains basic info on my preferred coding style and patterns in Go and Ruby (the languages I use every day), along with some basic information on how to respond to me. I\u0026rsquo;ll probably remove much of that thanks to the new \u003ccode\u003e/output-style\u003c/code\u003e. There are also sections on writing Git commit messages, but those have been primarily replaced with a custom \u003ccode\u003e/commit\u003c/code\u003e command.\u003c/p\u003e\n\u003ch5 id=\"status-line\"\u003eStatus Line\u003c/h5\u003e\n\u003cp\u003e\u003cimg src=\"status-line.png\" alt=\"Status Line Screenshot\"\u003e\u003c/p\u003e\n\u003cp\u003eI recently set up my custom status line to match my primary terminal prompt.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003efile:\u003c/em\u003e \u003ccode\u003e~/.claude/statusline.sh\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Color codes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eCLR_ORANGE\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\\033[1;33m\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eCLR_PINK\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\\033[1;95m\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eCLR_GREEN\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\\033[92m\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eCLR_RESET\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\\033[0m\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Read stdin\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003einput\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e$(\u003c/span\u003ecat\u003cspan style=\"color:#66d9ef\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eMODEL_DISPLAY\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e$(\u003c/span\u003eecho \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e$input\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e | jq -r \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;.model.display_name\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eCURRENT_DIR\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e$(\u003c/span\u003eecho \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e$input\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e | jq -r \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;.workspace.current_dir\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eGIT_BRANCH\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e git rev-parse --git-dir \u0026gt; /dev/null 2\u0026gt;\u0026amp;1; \u003cspan style=\"color:#66d9ef\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e BRANCH\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e$(\u003c/span\u003egit branch --show-current 2\u0026gt;/dev/null\u003cspan style=\"color:#66d9ef\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e -n \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e$BRANCH\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e; \u003cspan style=\"color:#66d9ef\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e GIT_BRANCH\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;(\u003c/span\u003e$BRANCH\u003cspan style=\"color:#e6db74\"\u003e)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#66d9ef\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eecho -e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003eCLR_RESET\u003cspan style=\"color:#e6db74\"\u003e}${\u003c/span\u003eCLR_PINK\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e$MODEL_DISPLAY\u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003eCLR_RESET\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e \u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003eCLR_ORANGE\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003eCURRENT_DIR##*/\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e]\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003eCLR_RESET\u003cspan style=\"color:#e6db74\"\u003e}${\u003c/span\u003eCLR_GREEN\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e$GIT_BRANCH\u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003eCLR_RESET\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cem\u003efile:\u003c/em\u003e \u003ccode\u003e~/.claude/settings.json\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-json\" data-lang=\"json\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e{\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026#34;statusLine\u0026#34;\u003c/span\u003e: {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;command\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026#34;command\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;~/.claude/statusline.sh\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026#34;padding\u0026#34;\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch5 id=\"commands\"\u003eCommands\u003c/h5\u003e\n\u003ch6 id=\"commit\"\u003e\u003ccode\u003e/commit\u003c/code\u003e\u003c/h6\u003e\n\u003cp\u003eI use Claude to write most of my commit messages with a custom \u003ccode\u003e/commit\u003c/code\u003e command.\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"commit-message.png\" alt=\"Example Commit Message\"\u003e\n\u003cem\u003eAn example commit message created by Claude Code\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://gist.github.com/maddiesch/1c44160a55be4f6f6db30b074de6ab25#file-commit-md\"\u003eGet the command file here\u003c/a\u003e\u003c/p\u003e\n\u003ch6 id=\"create-pr\"\u003e\u003ccode\u003e/create-pr\u003c/code\u003e\u003c/h6\u003e\n\u003cp\u003eClaude writes my draft PRs, then I update them to add missing context.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://gist.github.com/maddiesch/1c44160a55be4f6f6db30b074de6ab25#file-create-pr-md\"\u003eGet the command file here\u003c/a\u003e\u003c/p\u003e\n\u003ch5 id=\"agents\"\u003eAgents\u003c/h5\u003e\n\u003cp\u003eI\u0026rsquo;ve only recently started experimenting with agents. This blog post was copy-edited by an agent.\u003c/p\u003e\n\u003ch6 id=\"agent-copy-editor\"\u003e@agent-copy-editor\u003c/h6\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ename: copy-editor\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003edescription: Use this agent when you need professional copy editing and proofreading for blog posts, articles, or written content. Examples: \u0026lt;\u003cspan style=\"color:#f92672\"\u003eexample\u003c/span\u003e\u0026gt;Context: User has finished writing a blog post and wants it reviewed for clarity, grammar, and style before publishing. user: \u0026#39;I just finished writing a post about Go performance optimization. Can you review it for any issues?\u0026#39; assistant: \u0026#39;I\u0026#39;ll use the copy-editor agent to thoroughly proofread and edit your post for grammar, clarity, style, and overall readability.\u0026#39; \u0026lt;\u003cspan style=\"color:#f92672\"\u003ecommentary\u003c/span\u003e\u0026gt;Since the user wants their written content reviewed and polished, use the copy-editor agent to provide professional editing services.\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ecommentary\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003eexample\u003c/span\u003e\u0026gt; \u0026lt;\u003cspan style=\"color:#f92672\"\u003eexample\u003c/span\u003e\u0026gt;Context: User is preparing to publish content and wants to ensure it meets professional standards. user: \u0026#39;Here\u0026#39;s my draft post on Hugo static sites. I want to make sure it\u0026#39;s polished before I publish it.\u0026#39; assistant: \u0026#39;Let me use the copy-editor agent to review your Hugo post for any editing improvements.\u0026#39; \u0026lt;\u003cspan style=\"color:#f92672\"\u003ecommentary\u003c/span\u003e\u0026gt;The user wants their content professionally edited, so use the copy-editor agent to review for grammar, style, and clarity.\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ecommentary\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003eexample\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003etools: Glob, Grep, LS, Read, WebFetch, TodoWrite, WebSearch, BashOutput, KillBash, ListMcpResourcesTool, ReadMcpResourceTool, Edit, MultiEdit, Write, NotebookEdit\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emodel: sonnet\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eYou are an expert copy editor with extensive experience in technical writing, blog content, and digital publishing. Your expertise spans grammar, style, clarity, flow, and audience engagement. You have a keen eye for detail and understand how to maintain the author\u0026#39;s voice while improving readability and impact.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eWhen reviewing content, you will:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"font-weight:bold\"\u003e**Primary Editing Focus:**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Correct grammar, punctuation, and spelling errors\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Improve sentence structure and flow for better readability\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Enhance clarity by eliminating ambiguity and wordiness\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Ensure consistent tone and style throughout the piece\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Verify proper use of technical terminology and jargon\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Check for logical organization and smooth transitions between ideas\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"font-weight:bold\"\u003e**Technical Content Considerations:**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Maintain accuracy of technical concepts while improving explanation clarity\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Ensure code examples and technical references are properly formatted\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Verify that technical explanations are accessible to the intended audience\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Check for consistency in technical terminology usage\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"font-weight:bold\"\u003e**Style and Voice:**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Preserve the author\u0026#39;s unique voice and personality\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Adapt editing suggestions to match the intended audience and publication context\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Ensure the tone is appropriate for the content type (blog post, article, documentation)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Maintain consistency with any established style guidelines\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"font-weight:bold\"\u003e**Output Format:**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eProvide your feedback in this structure:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e \u003cspan style=\"font-weight:bold\"\u003e**Overall Assessment**\u003c/span\u003e: Brief summary of the content\u0026#39;s strengths and main areas for improvement\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e \u003cspan style=\"font-weight:bold\"\u003e**Detailed Edits**\u003c/span\u003e: Line-by-line or section-by-section suggestions with explanations\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e \u003cspan style=\"font-weight:bold\"\u003e**Style \u0026amp; Flow Recommendations**\u003c/span\u003e: Broader suggestions for improving readability and engagement\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e \u003cspan style=\"font-weight:bold\"\u003e**Final Polish**\u003c/span\u003e: Any additional recommendations for enhancing the piece\u0026#39;s impact\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eFor each edit suggestion, explain why the change improves the content. Focus on substantial improvements rather than minor stylistic preferences. If the content is already well-written, acknowledge this and focus on fine-tuning rather than major overhauls.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eAlways maintain a constructive and supportive tone, treating the author\u0026#39;s work with respect while providing honest, actionable feedback that will genuinely improve the final piece.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThere are many agents available online, but I haven\u0026rsquo;t used them enough to recommend specific must-haves.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eI have been quite happy with Claude and I think it has made my job easier by allowing me to focus on the things I enjoy and pass off the things I hate (writing commit messages and docs). I\u0026rsquo;m still working to fine tune the prompts and get things dialed in. But I\u0026rsquo;m excited to see the future of LLMs, at least until we hit the tipping point where they\u0026rsquo;re all trained on AI-generated slop.\u003c/p\u003e\n", "date_published": "2025-08-20T00:00:00Z", "tags": ["claude","ai","productivity","automation" ], "authors": [ { "name": "Maddie Schipper" } ] }, { "id": "https://maddiesch.com//posts/new-static-blog-2025-edition/", "url": "https://maddiesch.com//posts/new-static-blog-2025-edition/", "title": "New Static Blog (2025 Edition)", "summary": "Rebuilding my blog with Hugo for simpler maintenance and faster deployments", "content_html": "\u003cp\u003e\u003cem\u003eSigh.\u003c/em\u003e Here we are again. Over a year with no new content and yet another blog rebuild. Why? Managing a VPS running Ghost made little sense for something I rarely update, especially when I wanted this project to be hands-off. So instead of managing an entire server, I\u0026rsquo;m returning to a static site.\u003c/p\u003e\n\u003cp\u003eSo what does this version look like? It\u0026rsquo;s powered by \u003ca href=\"https://gohugo.io\"\u003eHugo\u003c/a\u003e. All posts are written in Markdown, and the site builds using GitHub Actions whenever I push to GitHub. It\u0026rsquo;s hosted on AWS S3 with CloudFront as the CDN. Like my \u003ca href=\"/posts/static-site/\"\u003eprevious static site implementation\u003c/a\u003e, I\u0026rsquo;m using a CloudFront viewer request function that automatically appends \u003ccode\u003e/index.html\u003c/code\u003e to clean URLs. This allows the site to serve clean URLs while maintaining the underlying static file structure.\u003c/p\u003e\n\u003cp\u003eHere\u0026rsquo;s the GitHub Actions workflow I use to deploy the site:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003ename\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eStatic Site Deployment\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eon\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003eworkflow_dispatch\u003c/span\u003e: \u003cspan style=\"color:#75715e\"\u003e# Allow manual trigger\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003epush\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003ebranches\u003c/span\u003e: [\u003cspan style=\"color:#ae81ff\"\u003emain]\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# Auto-deploy on push to main\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003ejobs\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003edeploy\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003ename\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eBuild and Deploy\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003eruns-on\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eubuntu-latest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003epermissions\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003eid-token\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003ewrite\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# Required for AWS OIDC authentication\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003econtents\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eread\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003eenvironment\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003ename\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e${{ github.ref_name }}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003esteps\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e - \u003cspan style=\"color:#f92672\"\u003ename\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e🛒 Checkout\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003euses\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eactions/checkout@v5\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e - \u003cspan style=\"color:#f92672\"\u003ename\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e✨ Setup Hugo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003eenv\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003eHUGO_VERSION\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e0.148.2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003erun\u003c/span\u003e: |\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e # Download and install Hugo binary\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e mkdir ~/hugo\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e cd ~/hugo\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e curl -L \u0026#34;https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.tar.gz\u0026#34; --output hugo.tar.gz\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e tar -xvzf hugo.tar.gz\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e sudo mv hugo /usr/local/bin\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e - \u003cspan style=\"color:#f92672\"\u003euses\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003eaws-actions/configure-aws-credentials@v4.3.1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003ewith\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#75715e\"\u003e# Authenticate with AWS using OIDC (no long-lived credentials needed)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003eaws-region\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e${{ vars.AWS_REGION }}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003erole-to-assume\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e${{ secrets.AWS_ROLE_ARN }}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e - \u003cspan style=\"color:#f92672\"\u003ename\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e🛠️ Build\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003erun\u003c/span\u003e: |\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e # Generate the static site to public/ directory\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e hugo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e - \u003cspan style=\"color:#f92672\"\u003ename\u003c/span\u003e: \u003cspan style=\"color:#ae81ff\"\u003e📦 Upload to S3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#f92672\"\u003erun\u003c/span\u003e: |\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e # Sync the built site to S3, deleting removed files\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e aws s3 sync public/ s3://${{ vars.STATIC_SITE_BUCKET_NAME }}${{ vars.STATIC_SITE_KEY_PREFIX }} --delete\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNew content typically goes live within 30 seconds of pushing to GitHub. Simple, fast, and maintenance-free, exactly what I wanted.\u003c/p\u003e\n", "date_published": "2025-08-18T17:22:05Z", "tags": ["meta-post","github-actions","aws" ], "authors": [ { "name": "Maddie Schipper" } ] }, { "id": "https://maddiesch.com//posts/replacing-my-primary-laptop/", "url": "https://maddiesch.com//posts/replacing-my-primary-laptop/", "title": "Replacing My Primary Laptop", "summary": "I am a heavy user of my Mac. I love it. I use two nearly daily: an M2 MacBook Air for work and an M1 MacBook Pro for personal use. The M1 is a great m\u0026hellip;", "content_html": "\u003cp\u003eI am a heavy user of my Mac. I love it. I use two nearly daily: an M2 MacBook Air for work and an M1 MacBook Pro for personal use. The M1 is a great machine. It\u0026rsquo;s got solid specs, and while it\u0026rsquo;s getting older, it does an excellent job for my personal use.\u003c/p\u003e\n\u003cp\u003eBut it is getting older, and I have been considering replacing it since the M3 chipset was released. Then Apple throws a wrench in the works with the new M4 iPad Pro. It\u0026rsquo;s a sexy device. Even a few years ago, I couldn\u0026rsquo;t have considered an iPad a primary computer. But with a combination of the massive 13\u0026quot; screen and Magic Keyboard, I\u0026rsquo;m giving it a shot.\u003c/p\u003e\n\u003cp\u003eI have spent a few days with a 13\u0026quot; iPad Pro as my primary computer. And I\u0026rsquo;m not hating it. The Magic Keyboard with trackpad is a game changer for me. For decades, I have used a laptop with a trackpad as my primary computer; it has become second nature. The Magic Keyboard is expensive but worth the money. Its build quality feels superb, even considering what I expect from an Apple device. The trackpad feels like my expensive MacBook. I can get about 80% of what I need with iPad native apps. I\u0026rsquo;m writing this in \u003ca href=\"https://apps.apple.com/us/app/ia-writer/id775737172\"\u003eiA Writer\u003c/a\u003e, committing the changes to the git repository using \u003ca href=\"https://apps.apple.com/us/app/working-copy-git-client/id896694807\"\u003eWorking Copy\u003c/a\u003e. The site was built and published by AWS using a GitHub Action.\u003c/p\u003e\n\u003cp\u003eI have a cloud-based Linux box I connect to for heavier development using \u003ca href=\"https://apps.apple.com/us/app/prompt-3/id1594420480\"\u003ePrompt 3\u003c/a\u003e. That doesn\u0026rsquo;t give me VS Code, but I have been experimenting with GitHub Codespaces and am reasonably impressed. Using a web-based text editor can be clunky at times. My muscle memory wants to hit command-w to close an open file, but Safari closes the tab.\u003c/p\u003e\n\u003cp\u003eAs for non-development-related items, they are all native apps or Safari, like those on my Mac. The screen looks incredible, and the speakers for music and movies are great. It\u0026rsquo;s a solid device.\u003c/p\u003e\n\u003cp\u003eIt\u0026rsquo;s not all sunshine and roses, though. iPadOS feels like the limiting factor for a device with so much power. There was a lot of discussion during WWDC this year about the need for significant improvements to iPadOS. I remember reading a toot on Mastodon: \u0026ldquo;Let me run MacOS on it, you cowards.\u0026rdquo; (I was not able to find the toot for a link.) I couldn\u0026rsquo;t agree more. With the Magic Keyboard, I cannot think of any good reason not to allow it. Its chipset is the best Apple offers. It has to be a business decision for Apple. Can\u0026rsquo;t let the iPad cannibalize the Mac.\u003c/p\u003e\n\u003cp\u003eThe lack of Xcode feels strange, given that Final Cut Pro and Logic are available. I hope that Xcode will be coming soon. That would solve the last major roadblock for me.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;m reaching the end of my return window on this iPad and considering returning it. Not because I don\u0026rsquo;t love it or foresee my usage declining, but because I\u0026rsquo;m thinking about trading it in for a model with increased storage.\u003c/p\u003e\n\u003cp\u003eUsing an iPad as a primary computer will only work for some, but I have yet to hit many issues that make me reach for my laptop.\u003c/p\u003e\n", "date_published": "2024-07-19T18:00:54Z", "tags": ["ipad","macos","productivity" ], "image": "https://images.unsplash.com/photo-1638153534717-fb17b6d19040?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI4fHxpcGFkfGVufDB8fHx8MTcyMDY1Mzg3Mnww\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=2000", "authors": [ { "name": "Maddie Schipper" } ] }, { "id": "https://maddiesch.com//posts/ford-f-450-the-10000-mile-review/", "url": "https://maddiesch.com//posts/ford-f-450-the-10000-mile-review/", "title": "Ford F-450: The 10,000 Mile Review", "summary": "In July 2023, I ordered a 2024 Ford F-450, slated to replace my 2021 F-350. In January, I got the call that the truck was at the dealership and ready \u0026hellip;", "content_html": "\u003cp\u003eIn July 2023, I ordered a 2024 Ford F-450, slated to replace my 2021 F-350. In January, I got the call that the truck was at the dealership and ready to be picked up.\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"IMG_2334.jpeg\" alt=\"\"\u003e\n\u003cem\u003e\u003cspan style=\"white-space: pre-wrap;\"\u003eDelivery day was dumping snow.\u003c/span\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eIt\u0026rsquo;s been seven months since delivery day, and I have hit 10,000 miles on the odometer.\u003c/p\u003e\n\u003cp\u003eThe truck is a 2024 Ford F-450 Lariat Ultimate with a 6.7 High Output Powerstroke. I decided on the Ultimate package over bumping up to a Platinum because it got me the \u0026lsquo;heads-up display\u0026rsquo; I wanted and still saved me about $5,000 on the truck\u0026rsquo;s price. I regret that the Lariat doesn\u0026rsquo;t have the option for projector LED headlights; instead, it has reflector LEDs. But that feature alone wasn\u0026rsquo;t worth the $5k bump in price.\u003c/p\u003e\n\u003cp\u003eWhy an F-450 over the F-350? I chose the 450 for a few reasons, but the primary one is the wide-track front end. The wide front end gives the truck excellent maneuverability. In addition, the 19.5-inch commercial truck wheels allow Ford to fit larger brakes.\u003c/p\u003e\n\u003cp\u003ePeople\u0026rsquo;s primary complaint about the 450 is that it rides rough. The commercial tires don\u0026rsquo;t provide much forgiveness for bumps. But I can\u0026rsquo;t tell the difference between my 2021 F-350 and the 450 in day-to-day driving.\u003c/p\u003e\n\u003cp\u003eThe high-output 6.7 Powerstroke pairs well with the 10-speed automatic transmission, which gives the truck more options for finding the right gear when pulling uphill. The 4.30 rear-end gearing provides the truck with plenty of grunt when rolling. That low gearing does hurt when it comes time to stop at the diesel pump. The truck gets around 15mpg when driving a mix of city and highway. Towing my 14,000-lb fifth wheel averages 10mpg.\u003c/p\u003e\n\u003cp\u003eThe first truck I ever towed a camper with was a half-ton Chevy Silverado, and I got the whole \u0026ldquo;white-knuckle\u0026rdquo; experience towing in the mountains of Southern California. The 5th wheel doesn\u0026rsquo;t come close to the truck\u0026rsquo;s 36,000+ lb towing capacity. So, no white-knuckle towing.\u003c/p\u003e\n\u003cp\u003eThe onboard truck scales are a nice feature for verifying the payload capacity when the trailer is hooked up (I still have about 1700 lbs of headroom). The air-conditioned seats make getting into the truck on super hot days bearable. And the heated steering wheel is nice on those super cold mornings.\u003c/p\u003e\n\u003cp\u003eIt\u0026rsquo;s not all sunshine and roses. Commercial-grade tires limit the number of places that can work on them. On a road trip to Denver, Colorado, I got a nail in a front tire. I ended up going to a truck stop service center because Discount Tire couldn\u0026rsquo;t/wouldn\u0026rsquo;t work on it. Ford also doesn\u0026rsquo;t provide the F-450 with integrated TPMS, and I\u0026rsquo;m still researching after-market options.\u003c/p\u003e\n\u003cp\u003eOverall, I\u0026rsquo;m pleased with the truck. It\u0026rsquo;s performed well and has already taken me on some fun trips.\u003c/p\u003e\n", "date_published": "2024-07-12T18:00:27Z", "tags": ["ford","truck","diesel","towing" ], "image": "https://maddiesch.com//posts/ford-f-450-the-10000-mile-review/IMG_2576-1.jpeg", "authors": [ { "name": "Maddie Schipper" } ] }, { "id": "https://maddiesch.com//posts/new-blog/", "url": "https://maddiesch.com//posts/new-blog/", "title": "New Blog", "summary": "Over the years, I have had several different iterations of a personal blog. The [most recent was a static site built using GitHub actions](/static-sit\u0026hellip;", "content_html": "\u003cp\u003eOver the years, I have had several different iterations of a personal blog. The \u003ca href=\"/static-site/\"\u003emost recent was a static site built using GitHub actions\u003c/a\u003e. This current iteration is a \u003ca href=\"https://ghost.org\"\u003eGhost self-hosted instance\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eI use \u003ca href=\"https://docs.docker.com/compose/\"\u003eDocker Compose\u003c/a\u003e to manage the Ghost instance, MySQL database, and Caddy proxy server. This allows me to run everything on a single VPC with 3 vCPU and 4GB of RAM.\u003c/p\u003e\n\u003cp\u003eWhy move away from a static site?\u003c/p\u003e\n\u003cp\u003eI wanted to have an excuse to tinker with something. I have been using my iPad more and more, and the workflow for publishing to the static site wasn\u0026rsquo;t as simple as I would like it to be. So now I have a nice, web-based UI for writing and publishing.\u003c/p\u003e\n", "date_published": "2024-07-11T02:45:00Z", "tags": ["ghost","docker","hosting" ], "image": "https://images.unsplash.com/photo-1486312338219-ce68d2c6f44d?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=M3wxMTc3M3wwfDF8c2VhcmNofDV8fHdyaXRpbmd8ZW58MHx8fHwxNzIwNjI4NzM1fDA\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=2000", "authors": [ { "name": "Maddie Schipper" } ] }, { "id": "https://maddiesch.com//posts/bundler-inline/", "url": "https://maddiesch.com//posts/bundler-inline/", "title": "Bundler Inline", "summary": "I like Ruby. It\u0026rsquo;s a great language.", "content_html": "\u003cp\u003eI like Ruby. It\u0026rsquo;s a great language.\u003c/p\u003e\n\u003cp\u003eI especially like writing shell scripts. There are a ton of super great features built right into the language. The major drawback I see from people is it\u0026rsquo;s not installed everywhere. So, for \u0026ldquo;public\u0026rdquo; scripts, use Python. But for most of my work, I\u0026rsquo;m either writing a script that will only ever run on my machines, or if it\u0026rsquo;s for work, we all have Ruby installed.\u003c/p\u003e\n\u003cp\u003eThe feature that makes it stand out so well is \u003ca href=\"https://bundler.io/guides/bundler_in_a_single_file_ruby_script.html\"\u003eBundler Inline\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eWith Bundler Inline, I can install any gem my script might need, and the user running the script doesn\u0026rsquo;t have to do anything but execute the script.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-ruby\" data-lang=\"ruby\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#!/usr/bin/env ruby\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003erequire \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;bundler/inline\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Adding `true` will print the standard output of \u0026#34;bundle install\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# I like doing that so it doesn\u0026#39;t look like the script is hung while instaling\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# large gems or native extensions.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003egemfile(\u003cspan style=\"color:#66d9ef\"\u003etrue\u003c/span\u003e) \u003cspan style=\"color:#66d9ef\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e source \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;https://rubygems.org\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e gem \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;sinatra\u0026#39;\u003c/span\u003e, require: \u003cspan style=\"color:#66d9ef\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e gem \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;rackup\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e gem \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;puma\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eend\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003erequire \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;sinatra/base\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eclass\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eApp\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eSinatra\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e::\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003eBase\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e get \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;/\u0026#39;\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;Hello, world!\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#66d9ef\"\u003eend\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eend\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eApp\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003erun!\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThat\u0026rsquo;s it. That\u0026rsquo;s all you need.\u003c/p\u003e\n", "date_published": "2024-06-23T00:00:00Z", "tags": ["ruby","scripting","bundler" ], "image": "https://images.unsplash.com/photo-1556244573-c3686c0f0e78?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=M3wxMTc3M3wwfDF8c2VhcmNofDIwfHxjb2RlfGVufDB8fHx8MTcyMDYzMTQzM3ww\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=2000", "authors": [ { "name": "Maddie Schipper" } ] }, { "id": "https://maddiesch.com//posts/life-update/", "url": "https://maddiesch.com//posts/life-update/", "title": "Life Update", "summary": "Long time no see. I will admit I’m terrible about keeping this blog updated. Since we last talked, the Ram 3500 got totaled (we’re fine). I’m onto my \u0026hellip;", "content_html": "\u003cp\u003eLong time no see. I will admit I’m terrible about keeping this blog updated. Since we last talked, the Ram 3500 got totaled (we’re fine). I’m onto my second truck since the Ram. I’m gearing up to spend some time in New Mexico to see what it would take to make a more permanent RV base camp on my land.\u003c/p\u003e\n\u003cp\u003eUnfortunately, the state of the world hasn’t done the best things to my mental health over the last couple of years. But I have an excellent therapist and an amazing best friend. I don’t know what state I would be in without those two.\u003c/p\u003e\n\u003cp\u003eSterling is doing great. He’s still as lovable and cuddly as ever. And the best boy, even if he has figured out that licking me on the face in the middle of the night will wake me up for scratches.\u003c/p\u003e\n\u003cp\u003eAnyway, that’s about it. I plan to write a few more things in the next days/weeks/months. So here’s to hoping that actually happens.\u003c/p\u003e\n", "date_published": "2024-06-19T00:00:00Z", "tags": ["personal","mental health","travel" ], "image": "https://maddiesch.com//posts/life-update/IMG_1938.jpeg", "authors": [ { "name": "Maddie Schipper" } ] }, { "id": "https://maddiesch.com//posts/time-for-a-change/", "url": "https://maddiesch.com//posts/time-for-a-change/", "title": "Time for a Change", "summary": "Over seven years ago, I decided I was tired of being fat and tired. So I made a change. I started eating better and working out. Over a nine-month per\u0026hellip;", "content_html": "\u003cp\u003eOver seven years ago, I decided I was tired of being fat and tired. So I made a change. I started eating better and working out. Over a nine-month period, I lost just over 100 lbs. Then, I hit the road full-time in an RV. This significant life change threw me out of my routine, and I stopped working out and rigorously counting calories. Six years later, I\u0026rsquo;m back to my starting weight, where I knew I needed to make the change. So we\u0026rsquo;re back to square one. And I\u0026rsquo;m ready to get going again.\u003c/p\u003e\n\u003cp\u003eSo, starting now, I will get back on the calorie-counting train. I plan on writing about the progress here because I need some accountability. And even if no one ever reads this or follows along, that\u0026rsquo;s fine. Just putting it out into the public will be enough for me.\u003c/p\u003e\n", "date_published": "2024-02-07T19:00:00Z", "tags": ["fitness","health","accountability" ], "image": "https://images.unsplash.com/photo-1448043552756-e747b7a2b2b8?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE5fHxmb29kfGVufDB8fHx8MTcyMzU3NDE0NXww\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=2000", "authors": [ { "name": "Maddie Schipper" } ] }, { "id": "https://maddiesch.com//posts/new-house-who-this/", "url": "https://maddiesch.com//posts/new-house-who-this/", "title": "New House, Who This?", "summary": "I have lived in a travel trailer since February 2018. I spent two weeks in an RV park in San Diego as a safeguard that if I hated it immediately, I co\u0026hellip;", "content_html": "\u003cp\u003eI have lived in a travel trailer since February 2018. I spent two weeks in an RV park in San Diego as a safeguard that if I hated it immediately, I could pull the ripcord and find an apartment.\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"open-range.jpg\" alt=\"\"\u003e\n\u003cem\u003e\u003cspan style=\"white-space: pre-wrap;\"\u003eMy first truck and trailer\u003c/span\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eAt the end of the two weeks, I picked up my Dad at the airport, met my friend Nikki at a rest stop on the 15 to pick up my new 8-week-old puppy Sterling, then we headed for Texas.\u003c/p\u003e\n\u003cp\u003eSince that first road trip, Sterling and I have been to 46 of the lower 48 states and traveled over 130,000 miles. We have seen some spectacular scenery.\n\u003cimg src=\"colorado.jpeg\" alt=\"\"\u003e\n\u003cem\u003e\u003cspan style=\"white-space: pre-wrap;\"\u003eHigh-altitude lake with snowcapped peaks in Colorado\u003c/span\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"bend-snow.jpeg\" alt=\"\"\u003e\n\u003cem\u003e\u003cspan style=\"white-space: pre-wrap;\"\u003eSnow \u0026amp; ice-covered trees in Bend, Oregon.\u003c/span\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eThe Open Range was a great weekend trip camper. But the miles began to build up, and living inside full-time took its toll on the interior. Finally, after a hail storm in May 2022 that broke the bathroom skylight, I had had enough. I called a Grand Design dealer in Texas and worked out a deal on a new Reflection 341RDS over the phone. From watching many YouTube RVers, I knew I wanted a Grand Design. I have walked through enough of them that I felt comfortable purchasing a trailer sight unseen.\n\u003cimg src=\"reflection.jpeg\" alt=\"\"\u003e\n\u003cem\u003e\u003cspan style=\"white-space: pre-wrap;\"\u003eGrand Design Reflection 5th wheel hooked up to a dually Ram.\u003c/span\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eSterling and I are excited to begin this new chapter of our lives in a new, \u003cem\u003emuch\u003c/em\u003e larger home.\u003c/p\u003e\n", "date_published": "2022-06-09T00:00:00Z", "tags": ["fifth wheel","grand design","full-time rv" ], "image": "https://maddiesch.com//posts/new-house-who-this/sterling-truck-1.jpg", "authors": [ { "name": "Maddie Schipper" } ] }, { "id": "https://maddiesch.com//posts/static-site/", "url": "https://maddiesch.com//posts/static-site/", "title": "Static Site", "summary": "This blog has had many forms over the years. Previous renditions have been powered by Jekyll, WordPress, and Moveable Type. When Ghost was released, I\u0026hellip;", "content_html": "\u003cp\u003eThis blog has had many forms over the years. Previous renditions have been powered by Jekyll, WordPress, and Moveable Type. When Ghost was released, I immediately moved to a self-hosted instance. Ghost is great, and I really like it. However, I have started reducing subscription services I do not use regularly. Because the last post to the blog was in April of last year, paying for Ghost every year seemed like a no-brainer subscription to cancel.\u003c/p\u003e\n\u003cp\u003eWhile I didn\u0026rsquo;t want to pay for Ghost anymore, I still aspire to write things and put them on the internet, even if it\u0026rsquo;s infrequent. I needed a new option for my rare writing. So, I began looking at static website generators. There are many options, and they all do the same thing. I settled on \u003ca href=\"https://gohugo.io\"\u003eHugo\u003c/a\u003e. A static site generator that bills itself as being super fast. It\u0026rsquo;s written in Go (a language I love) and has many templates ready to be used. Posts are written in Markdown, with metadata supplied by YAML frontmatter.\u003c/p\u003e\n\u003cp\u003eHosting is an S3 bucket behind a CloudFront distribution, giving me excellent uptime for an insignificant cost. The hosting will scale from a couple views in a month to hundreds of thousands of views per day without batting an eye. The site is built and deployed automatically by a GitHub Action whenever a new commit is pushed to the main branch. The automation allows me to use the GitHub web UI as an online editor. And I have the full suite of editors available on my laptop.\u003c/p\u003e\n\u003cp\u003eI moved over the last couple of posts from my old site and got everything up and running in less than 3 hours one evening. I recommend Hugo to anyone looking for an easy-to-set-up and use static website generator.\u003c/p\u003e\n", "date_published": "2022-06-08T00:00:00Z", "tags": ["hugo","s3","cloudfront" ], "authors": [ { "name": "Maddie Schipper" } ] }, { "id": "https://maddiesch.com//posts/margaret-hamilton/", "url": "https://maddiesch.com//posts/margaret-hamilton/", "title": "Margaret Hamilton", "summary": "Margaret Hamilton is the O.G. software engineer. And when I say the O.G., I mean it. She coined the term during her time leading a team at MIT. In \u0026ldquo;Fl\u0026hellip;", "content_html": "\u003cp\u003eMargaret Hamilton is the O.G. software engineer. And when I say the O.G., I mean it. She coined the term during her time leading a team at MIT. In \u0026ldquo;Fluency With Information Technology, 7th Edition,\u0026rdquo; she says, \u0026ldquo;They liked to kid me about my radical ideas. It was a memorable day when one of the most respected hardware gurus explained to everyone in a meeting that he agreed with me that the process of building software should also be considered an engineering discipline.\u0026rdquo; Before Margaret\u0026rsquo;s influence, computer science was not considered one of the academic sciences. She fought to legitimize it in the eyes of the stereotypical STEM fields at the time. That\u0026rsquo;s what I find so fascinating about her career. She did groundbreaking work while setting the stage for a future generation of women in computer science.\u003c/p\u003e\n\u003cp\u003eMargaret\u0026rsquo;s career was only part of moon landings and rocket flight. She got her start in 1959 in MIT\u0026rsquo;s meteorology department. She primarily focused on writing software for DARPA\u0026rsquo;s Project MAC. Project MAC led groundbreaking research on operating systems, artificial intelligence, and the theory of computation. After only two years, she moved to MIT\u0026rsquo;s Lincoln Lab, where she worked on the SAGE project. The U.S. Air Force used this project to track enemy aircraft and predict intercept points for their planes. Her work at Lincoln Lab allowed her to lead the team on NASA\u0026rsquo;s new guidance software.\u003c/p\u003e\n\u003cp\u003eDuring her time with the Apollo Program, Margaret led the team in building the guidance systems. These systems were responsible for the safe navigation to and from the moon, landing the lunar module on the surface, and returning the astronauts to the orbiting Apollo spacecraft. She pioneered systems for fault tolerance and error handling and new techniques in systems processing and priority processing of tasks in a computer system.\u003c/p\u003e\n\u003cp\u003eThe Priority Display system developed by Margaret is responsible for saving the Apollo 11 landing. It took over valuable real estate on the cramped spaceship\u0026rsquo;s control panel to surface faults and errors to the astronauts. It allowed the people in space and ground teams precious seconds to diagnose a problem before aborting. In the past, primitive flight computers would have auto-aborted with the most negligible unexpected errors.\u003c/p\u003e\n\u003cp\u003eDuring the final descent to the lunar surface, the guidance computer was overwhelmed by the number of jobs it needed to process. One of the astronauts had inadvertently left the spacecraft\u0026rsquo;s rendezvous radar-powered. The build-up of extra jobs from that radar overwhelmed the guidance computer, causing it to fall back to asynchronous processing. Before the priority display, a fault like that during landing would have been an immediate abort. However, the priority display was able to surface the fault immediately to the astronauts and ground control. Because the ground engineers had those precious seconds, one recognized the issue and told the astronauts to proceed with the landing. This human interaction instructed the guidance computer to process only the most critical tasks about landing the spacecraft. And allowed humanity to take one giant leap onto the lunar regolith.\u003c/p\u003e\n\u003cp\u003eAfter Apollo in 1976, Margaret left MIT to found her own company, Higher Order Software. The company primarily worked on furthering her ideas in error handling and fault tolerance, which she developed while working on the Apollo Program. Their research would influence work at the U.S. Air Force and other government programs. She left HOS in 1985. The following year, she founded Hamilton Technologies, Inc., where she continued working on her Universal Systems Language.\u003c/p\u003e\n\u003cp\u003eThroughout her career, Margaret Hamilton helped set the stage for women in software engineering. She helped shape the field into what it is today. She confronted the old guard and demanded respect for her profession. Her software has saved lives with storm detection, landed humans on the moon, and changed modern operating systems. The groundwork she laid with her work in error handling and fault tolerance is still being used today at SpaceX, NASA, Boeing, and others, where the cost of an error isn\u0026rsquo;t a Bugsnag email or possible support ticket but human life.\u003c/p\u003e\n", "date_published": "2021-04-03T00:00:00Z", "tags": ["apollo","nasa","software engineering","women in tech" ], "authors": [ { "name": "Maddie Schipper" } ] }, { "id": "https://maddiesch.com//posts/hello-darkness-my-old-friend/", "url": "https://maddiesch.com//posts/hello-darkness-my-old-friend/", "title": "Hello, darkness, my old friend", "summary": "I have struggled with depression since my late teens. At first, I didn\u0026rsquo;t recognize it as what it was. I assumed everyone was faking happiness. You may\u0026hellip;", "content_html": "\u003cp\u003eI have struggled with depression since my late teens. At first, I didn’t recognize it as what it was. I assumed everyone was faking happiness. You may notice a theme if you have been following along for a while. Whenever there is something in my life I don’t want to deal with, I will assume that everyone thinks/behaves/feels the same way. It’s a real problem.\u003c/p\u003e\n\u003cp\u003eWhen I began dealing with my gender dysphoria and began getting it under control with my transition, the depression became front and center. Moving that large, all-consuming gender dysphoria left a hole in my brain, and the depression was able to surface. Because I have a great therapist, I was able to talk through those new feelings with her. Talking helped me realize what those feelings were and then devise a plan for dealing with them. For me, it was medication. I visited my primary care physician, and he got me on Lexapro.\u003c/p\u003e\n\u003cp\u003eThe meds have made a vast difference in my life. Sure, I still have bad days and slumps. But those slumps are much shorter, and the bad days are less harmful to my psyche. Meds have moved the baseline.\u003c/p\u003e\n\u003cp\u003eI don’t think meds are for everyone. Some people need someone to listen and work through the issues. For others, meds will be the answer. No one can “just be happy” when they’re dealing with depression.\u003c/p\u003e\n\u003cp\u003eSo, if you’re sitting at home wondering if everyone is faking happiness, they’re not. I encourage you to find someone willing to listen and preferably has some training to help you work through whatever issues you’re currently facing.\u003c/p\u003e\n", "date_published": "2020-02-21T00:00:00Z", "tags": ["depression","therapy","medication" ], "image": "https://images.unsplash.com/photo-1506967534058-2dc0162a83d6?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=M3wxMTc3M3wwfDF8c2VhcmNofDl8fERhcmtuZXNzfGVufDB8fHx8MTcyMDY1MzY1M3ww\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=2000", "authors": [ { "name": "Maddie Schipper" } ] } ] }