41554 blogs · [ { "id": "01a0950c-59e7-71e2-84e1-c934eb6c41e5", "title": "Abort a Fetch Request in React on Unmount", "url": "https://jaketrent.com/post/abort-fetch-react-unmount", "published_at": "2026-09-10T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a61dfc4bef", "title": "Losing Our Grip with AI", "url": "https://jaketrent.com/post/losing-our-grip-ai", "published_at": "2026-09-04T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a679b04557", "title": "Rebuild a Static Site on Netlify on a Schedule", "url": "https://jaketrent.com/post/rebuild-netlify-static-site-schedule", "published_at": "2026-09-03T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3526b65698c", "title": "Git Config User Per Repo", "url": "https://jaketrent.com/post/git-config-user-per-repo", "published_at": "2026-09-03T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a617b14c1e", "title": "Local-only OCR", "url": "https://jaketrent.com/post/local-only-ocr", "published_at": "2026-08-24T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a62ce0ec08", "title": "Local-only Voice Dictation", "url": "https://jaketrent.com/post/local-only-voice-dictation", "published_at": "2026-08-20T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3529918f066", "title": "Set Desktop Color Scheme with Pywal", "url": "https://jaketrent.com/post/set-desktop-color-scheme-pywal", "published_at": "2026-08-14T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e351fe0be165", "title": "Make Nvidia GPU Available to Docker Container", "url": "https://jaketrent.com/post/gpu-available-docker-container", "published_at": "2026-07-28T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3520a49cd32", "title": "Git Write Author", "url": "https://jaketrent.com/post/git-write-author", "published_at": "2026-06-18T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3527a75273b", "title": "Printing via CUPS in the Terminal", "url": "https://jaketrent.com/post/printing-cups-terminal", "published_at": "2026-06-12T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352a9ad824c", "title": "Developer Public Relations", "url": "https://jaketrent.com/post/developer-public-relations", "published_at": "2026-05-27T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a640376847", "title": "Put Localhost on HTTPS with Nginx", "url": "https://jaketrent.com/post/localhost-https-nginx", "published_at": "2026-04-28T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a62648b592", "title": "Humans, Keep the Initiative", "url": "https://jaketrent.com/post/humans-keep-initiative", "published_at": "2026-04-27T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35203a24599", "title": "Set Battery Charge Threshold in Linux", "url": "https://jaketrent.com/post/set-battery-charge-threshold-linux", "published_at": "2026-03-17T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a613020a0b", "title": "Command Check in Bash", "url": "https://jaketrent.com/post/command-check-bash", "published_at": "2026-03-16T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a6aef239ce", "title": "A Week of AI Maxxing", "url": "https://jaketrent.com/post/week-ai-maxxing", "published_at": "2026-03-16T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3523cbd7d6e", "title": "SSH Into a Machine on Your Local Network", "url": "https://jaketrent.com/post/ssh-machine-local-network", "published_at": "2026-03-07T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a692c84b77", "title": "Get Video Dimensions in the Terminal", "url": "https://jaketrent.com/post/video-dimensions-terminal", "published_at": "2026-03-02T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a617a2a213", "title": "AI Horizons", "url": "https://jaketrent.com/post/ai-horizons", "published_at": "2026-02-20T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35202b8f6c8", "title": "Take My Info", "url": "https://jaketrent.com/post/take-my-info", "published_at": "2026-02-19T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3522955aed5", "title": "Centralized Knowledge", "url": "https://jaketrent.com/post/centralized-knowledge", "published_at": "2026-02-19T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352b6b31db1", "title": "Enable Figma MCP on Opencode", "url": "https://jaketrent.com/post/enable-figma-mcp-opencode", "published_at": "2026-02-18T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a667ee8b32", "title": "Run an LLM Model Locally", "url": "https://jaketrent.com/post/run-llm-model-locally", "published_at": "2026-02-17T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3524ca34354", "title": "Ignore an NPM Audit CVE", "url": "https://jaketrent.com/post/ignore-npm-audit-cve", "published_at": "2026-02-17T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35282463406", "title": "X Startup Scripts", "url": "https://jaketrent.com/post/x-startup-scripts", "published_at": "2026-02-17T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3526debb7ca", "title": "How to Apply a Software Patch", "url": "https://jaketrent.com/post/apply-software-patch", "published_at": "2026-02-13T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a61edbe798", "title": "Some Layers of the Linux Desktop", "url": "https://jaketrent.com/post/layers-linux-desktop", "published_at": "2026-02-12T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3529db93f49", "title": "Map Hotkeys in X11", "url": "https://jaketrent.com/post/map-hotkeys-x11", "published_at": "2026-02-12T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352a88b6363", "title": "Poll with Promises", "url": "https://jaketrent.com/post/poll-promises", "published_at": "2026-02-11T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e351fd62d9dc", "title": "The Art is You", "url": "https://jaketrent.com/post/art-you", "published_at": "2026-02-04T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35275b0ccfa", "title": "Post Form to Google Spreadsheet", "url": "https://jaketrent.com/post/form-post-google-spreadsheet", "published_at": "2026-01-28T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3526aa11729", "title": "Install picom 12 on Ubuntu 24", "url": "https://jaketrent.com/post/install-picom-12-ubuntu-24", "published_at": "2026-01-21T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a66aaffcbe", "title": "Track Ecto Migrations", "url": "https://jaketrent.com/post/track-ecto-migrations", "published_at": "2026-01-15T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352026b8c84", "title": "Change Audio Output to HDMI in the Terminal", "url": "https://jaketrent.com/post/change-audio-output-hdmi-terminal", "published_at": "2026-01-02T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3524b65ac4a", "title": "Create VPN Exception for Local Network Devices", "url": "https://jaketrent.com/post/create-vpn-exception-local-network-devices", "published_at": "2026-01-02T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3520af974af", "title": "Output to a Bluetooth Speaker from the Terminal", "url": "https://jaketrent.com/post/output-bluetooth-speaker-terminal", "published_at": "2025-12-31T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35259c68759", "title": "Show Git Log Before Move", "url": "https://jaketrent.com/post/show-git-log-before-move", "published_at": "2025-12-15T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a667b69d39", "title": "Play an Audio CD in Terminal", "url": "https://jaketrent.com/post/play-audio-cd-terminal", "published_at": "2025-10-16T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35259638ebd", "title": "Specifying a Timezone on the Client", "url": "https://jaketrent.com/post/specifying-timezone-client", "published_at": "2025-09-18T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a656b6553c", "title": "Define a Graphql Enum Type in Ash", "url": "https://jaketrent.com/post/define-graphql-enum-type-ash", "published_at": "2025-09-15T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a66e372050", "title": "Ash Query Time Expressions", "url": "https://jaketrent.com/post/ash-query-time-expressions", "published_at": "2025-09-15T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e351f3c117f5", "title": "Ash Embedded Union Type Attributes", "url": "https://jaketrent.com/post/ash-embedded-union-type-attributes", "published_at": "2025-09-15T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a60a1058e3", "title": "How'd They Do That?", "url": "https://jaketrent.com/post/howd-the-do-that", "published_at": "2025-09-10T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352138cb0e5", "title": "Query Embedded Jsonb in Ash", "url": "https://jaketrent.com/post/query-embedded-jsonb-ash", "published_at": "2025-08-26T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3524346dc3c", "title": "Proxy Backend Requests in Next.js", "url": "https://jaketrent.com/post/proxy-backend-request-nextjs", "published_at": "2025-08-22T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a62dab9f09", "title": "Wrap Instrumentation Around Results", "url": "https://jaketrent.com/post/wrap-instrumentation-around-results", "published_at": "2025-08-21T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a6aa8a3304", "title": "Ash Policies Gotchas", "url": "https://jaketrent.com/post/ash-policies-gotchas", "published_at": "2025-08-07T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352adfe408e", "title": "Celebrating Liability", "url": "https://jaketrent.com/post/celebrating-liability", "published_at": "2025-08-07T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352c291ad5e", "title": "Get Image Dimensions from the Terminal", "url": "https://jaketrent.com/post/image-dimensions-cli", "published_at": "2025-08-04T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e351f7e13a2c", "title": "Convert Google.Protobuf.Timestamp to DateTime in Elixir", "url": "https://jaketrent.com/post/convert-google-protobuf-timestamp-datetime-elixir", "published_at": "2025-07-30T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3524fcb313c", "title": "Return a Related Resource via Calculation in Ash", "url": "https://jaketrent.com/post/return-related-resource-calculation-ash", "published_at": "2025-07-29T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a6681c0b39", "title": "Test Ash Validation", "url": "https://jaketrent.com/post/test-ash-validation", "published_at": "2025-07-15T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a6082a1e7b", "title": "Git Unstage Before First Commit", "url": "https://jaketrent.com/post/git-unstage-before-first-commit", "published_at": "2025-07-02T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a684970378", "title": "Read Text to Speech in Terminal", "url": "https://jaketrent.com/post/text-to-speech-terminal", "published_at": "2025-06-18T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a6984652b1", "title": "Suddenly, There's More", "url": "https://jaketrent.com/post/suddenly-theres-more", "published_at": "2025-06-16T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a6a9709bc3", "title": "Search Over All Project Files in Telescope Live Grep", "url": "https://jaketrent.com/post/search-all-files-telescope-live-grep", "published_at": "2025-06-13T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a6b2249af7", "title": "Find and Replace Multiple Files in Telescope", "url": "https://jaketrent.com/post/find-replace-multiple-files-telescope", "published_at": "2025-06-11T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3524e153dc9", "title": "Run Docker on Linux Without Docker Desktop", "url": "https://jaketrent.com/post/run-docker-linux-without-docker-desktop", "published_at": "2025-05-28T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a60ce3a197", "title": "Clean up React Form with useActionState", "url": "https://jaketrent.com/post/clean-up-react-form-use-action-state", "published_at": "2025-05-27T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352594eae4f", "title": "AI Goldrush", "url": "https://jaketrent.com/post/ai-goldrush", "published_at": "2025-05-16T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3527d1fdc29", "title": "Change Favicon Based on Color Scheme", "url": "https://jaketrent.com/post/change-favicon-color-scheme", "published_at": "2025-05-16T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a690bedaa2", "title": "Owners Do it Best", "url": "https://jaketrent.com/post/owners-do-it-best", "published_at": "2025-05-15T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e351f6305cad", "title": "useReducer in TypeScript", "url": "https://jaketrent.com/post/use-reducer-typescript", "published_at": "2025-05-14T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3525496bcfc", "title": "Engaging as a Human", "url": "https://jaketrent.com/post/engaging-human", "published_at": "2025-05-14T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3525c5b70a5", "title": "The Moral Use of Tools", "url": "https://jaketrent.com/post/moral-use-tools", "published_at": "2025-05-12T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35225048c18", "title": "Map Naming Convention", "url": "https://jaketrent.com/post/map-naming-convention", "published_at": "2025-05-09T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a65d7100f5", "title": "Disable Pagination in Ash", "url": "https://jaketrent.com/post/disable-pagination-ash", "published_at": "2025-05-07T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a6095cfc62", "title": "Actual Intelligence", "url": "https://jaketrent.com/post/actual-intelligence", "published_at": "2025-04-29T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35217d74683", "title": "Hiring Boxed Programmers", "url": "https://jaketrent.com/post/hiring-boxed-programmers", "published_at": "2025-04-29T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3521ec6907a", "title": "AI-mediated Business", "url": "https://jaketrent.com/post/ai-mediated-business", "published_at": "2025-04-23T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a67c4b646c", "title": "AI Ads", "url": "https://jaketrent.com/post/ai-ads", "published_at": "2025-04-18T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35262a9b097", "title": "Turn Off Phoenix Access Logger", "url": "https://jaketrent.com/post/turn-off-phoenix-access-logger", "published_at": "2025-04-16T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35294b50adc", "title": "The Cost of AI on the Cutting Edge", "url": "https://jaketrent.com/post/cost-ai-cutting-edge", "published_at": "2025-04-11T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352b0b0766a", "title": "Mock HTTP Calls in Elixir Tests", "url": "https://jaketrent.com/post/mock-http-elixir-tests", "published_at": "2025-04-11T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a65dcf7ad2", "title": "Wrapping Something That's Not Yours", "url": "https://jaketrent.com/post/wrapping-something-not-yours", "published_at": "2025-04-10T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a697612c4d", "title": "The Flattening & Reshaping of Experience", "url": "https://jaketrent.com/post/flattening-reshaping-experience", "published_at": "2025-04-08T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3521da7adca", "title": "IRC Client in Terminal", "url": "https://jaketrent.com/post/irc-terminal", "published_at": "2025-04-04T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352aa9446ed", "title": "Accept JSON Object in Ash Graphql", "url": "https://jaketrent.com/post/accept-json-object-ash-graphql", "published_at": "2025-04-04T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352b74c2417", "title": "Npm Install is Easy", "url": "https://jaketrent.com/post/npm-install-easy", "published_at": "2025-04-01T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a6a58a0da8", "title": "Reviewing AI-generated Code", "url": "https://jaketrent.com/post/reviewing-ai-generated-code", "published_at": "2025-03-31T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352bb289a78", "title": "Set Default Browser in i3", "url": "https://jaketrent.com/post/set-default-browser-i3", "published_at": "2025-03-14T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a681529b42", "title": "Dull the Cutting Edge with AI", "url": "https://jaketrent.com/post/dull-cutting-edge-ai", "published_at": "2025-03-13T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35284565576", "title": "AI Mainstreams Plagiarism", "url": "https://jaketrent.com/post/ai-mainstreams-plagiarism", "published_at": "2025-03-13T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35298df3f18", "title": "Share Setup Data in ExUnit", "url": "https://jaketrent.com/post/share-setup-data-exunit", "published_at": "2025-03-07T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352100be71f", "title": "See your PR from the git cli", "url": "https://jaketrent.com/post/see-pr-from-git-cli", "published_at": "2025-03-06T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3522234f03a", "title": "Follow Project Patterns", "url": "https://jaketrent.com/post/follow-project-patterns", "published_at": "2025-03-05T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a693405ee3", "title": "CSS-only Modal Dialog", "url": "https://jaketrent.com/post/css-only-modal-dialog", "published_at": "2025-03-04T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a63a5d2e9f", "title": "Thread in Arbitrary Position in Clojure", "url": "https://jaketrent.com/post/thread-arbitrary-position-clojure", "published_at": "2025-03-01T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a634c74a13", "title": "AI or Not, Understand, then Commit", "url": "https://jaketrent.com/post/ai-or-not-understand-then-commit", "published_at": "2025-02-28T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3527b7fdf38", "title": "Install Elixir LS Lexical for Nvim", "url": "https://jaketrent.com/post/install-elixir-ls-lexical-nvim", "published_at": "2025-02-26T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e3527a75ebd4", "title": "Elixir In-Memory Cache", "url": "https://jaketrent.com/post/elixir-in-memory-cache", "published_at": "2025-02-24T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a659cb82c4", "title": "SQL Order of Null", "url": "https://jaketrent.com/post/sql-order-null", "published_at": "2025-02-10T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e352a16a7fbb", "title": "AI Inspiration", "url": "https://jaketrent.com/post/ai-inspiration", "published_at": "2025-02-03T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35205d26749", "title": "Select Hunks to Stage in Git", "url": "https://jaketrent.com/post/select-hunks-stage-git", "published_at": "2025-01-31T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a60cad75f5", "title": "How AI Iterates", "url": "https://jaketrent.com/post/how-ai-iterates", "published_at": "2025-01-29T00:00:00+00:00" }, { "id": "01a0821c-c1e1-7163-89dc-e35218406a3a", "title": "Performance Review by AI", "url": "https://jaketrent.com/post/ai-performance-reviews", "published_at": "2025-01-24T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a6a2c9bdcc", "title": "CSS-only Toast", "url": "https://jaketrent.com/post/css-only-toast", "published_at": "2025-01-21T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a6b81024c6", "title": "What We Are When We Use AI", "url": "https://jaketrent.com/post/what-we-are-when-using-ai", "published_at": "2025-01-21T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a68707e9a6", "title": "Rank Score Rows Returned in SQL", "url": "https://jaketrent.com/post/rank_score_rows_sql", "published_at": "2025-01-13T00:00:00+00:00" }, { "id": "01a0821c-c1e0-7021-aeaa-62a691b2d1ee", "title": "Map a Postgrex Row to a Struct", "url": "https://jaketrent.com/post/map_postgrex_row_struct", "published_at": "2025-01-13T00:00:00+00:00" } ] posts Claim your blog
Back to Jake Trent
Blog · corpus.blog/blogs/jaketrent.com/posts

Jake Trent

jaketrent.com

2026

2025