How I Use OpenClaw
OpenClaw tutorial: my setup for an AI assistant that handles tasks, calendar, finances, and more
155 articles
OpenClaw tutorial: my setup for an AI assistant that handles tasks, calendar, finances, and more
A brief exploration of how I write code in 2026.
A link to the slides and a brief overview of what I talked about at Hono Conference 2025.
Reflections on one of my 2025 projects, and why it didn't work out
Getting started with hledger for bookkeeping
Notes on considering AV1 encoding for my Plex library
My experience with a robot lawn mower
Four practical ideas for getting more out of Claude Code, from planning workflows to memory and tool usage.
Using Proxmox, Docker, and Tailscale to self-host TeslaMate in your home network
Claude Code's coding agent is great for meaningful but non-essential code rewrites
Documenting my WIP experience building a home service business
Reflections on giving up 𝕏 for Lent
How to use Cloudflare Images bindings in Workers to watermark and transform images on your site.
A cool AI prompt to help you make decisions.
Thoughts on application facelifts.
Using Workers to generate weather SVGs for my newsletter
Building a DIY error monitor for serverless applications using Cloudflare Tail Workers, DeepSeek, and Slack
Building a local newsletter for San Marcos, TX.
My recipe for tea at nighttime.
I switched everything in my life to Linear - here's why.
Building an AI-powered caching layer for "smarter" (this is questionable) content delivery
How to integrate Workers Assets, service bindings, and full-stack apps
A quick script for recursively transcoding lossless FLAC files to MP3
My morning coffee routine.
Reflections on my big, overarching goal for 2025
About Kristian Freeman
My 2024 in review
A list of date and time numbers that all programmers should know
Learn how to generate types for a Supabase project using the Supabase CLI.
Embracing the Unix philosophy and some basic grep tricks to easily scan noisy logs.
A minimal configuration for running a Ruby on Rails application in Nix
Why Coca-Cola may be better than water.
What I used on a new macOS machine to write and publish this post.
More about my Obsidian process: themes, plugins, styling, best practices.
Different ways to implement the 'Message of the Day' in Unix machines
Maybe the trick is just to write about and document things you actually care about.
How to install most fonts in a single command, using Homebrew.
How to make custom clipping templates with Obsidian Web Clipper
An introduction to 𝕏 AI and the Grok foundational models, with sample code.
How to use child selectors in Tailwind CSS 3.1+.
A description of my process for recording videos for software developers, in 2024.
Some brief thoughts on the new Mac hardware announced this week.
A Cloudflare Workers application can have multiple entrypoints, allowing for different usage patterns.
How to get started with a great new feature in Cloudflare's developer platform.
A rundown of three icon libraries I recommend for React/webdev projects.
A plugin for Astro to automatically generate redirects using Cloudflare's _redirects file specification.
A tax-advantaged investment vehicle for charitable donations.
An open-source solution for indexing your site.
Strategies for improving your site's SEO and indexing.
Migrating my blog from bearblog.dev to Astro.
Improving this site with tweaks inspired by McMaster-Carr.
A look at the vulnerabilities in ShipFast.
Building a localhost radio empire.
How to use one of Astro's most powerful features for static site generation.
Some performance tricks for improving the Lighthouse score of this site.
A Chrome extension for navigating bearblog.
How to defer CSS loading with one line of code.
A terribly convoluted way to add syntax highlighting to bearblog.
Adding protection to your Rails app with Cloudflare Turnstile.
An in-depth look at how to use Astro's powerful content system.
A simple way to use Lucide icons in situations where you can't use NPM.
Sourcing high quality aspirin powder.
An introduction to Zustand, a great state management library for React.
Details on how to deploy full-stack Astro apps to Cloudflare.
A quick review of an excellent React UI library.
A quick way to commit early, and often.
A tricky hack for adding backlinks to a GitHub repo.
How to add custom pages to bearblog for a specific tag.
A running list of health products I'm using, primarily around eliminating toxic PUFAs.
Fixing one of zellij's annoying quirks.
Reflections on the summer of 2024.
Some tools I've discovered recently that have improved my development experience.
A thought on the value of newsletters.
Collecting physical media, versus staying fully digital.
Developers: invest in full-stack development skills.
A great way to replay one of the greatest video games ever made.
A look at the next step in developing with AI.
What if we don't need a second brain?
Reviewing a modern terminal multiplexer.
A look at how to use LLMs with voice.
What is the value of a starter kit for builders?
A review of the WHOOP fitness tracker.
Some unstructured thoughts on working as a Developer Advocate in 2024.
A look at how I built tools for managing my home using QR codes.
A fix for a crucial feature in 𝕏.
Thoughts on Obsidian and the "second brain" process.
A continuous experiment to increase the domain ranking of this site.
The common JavaScript error "Cannot use import statement outside a module" indicates issues in importing modules and occurs in non-ECMAScript Module (ESM). Here’s a quick solution for both Browser and Node.js (sometimes
Understanding your Node.js version is crucial for managing your software environment. Check it with these steps: Launch your Command Line Interface (CLI), be it Command Prompt, PowerShell, or Terminal. Type the following
In our blog post "How to check the installed version of Node.js" , we covered situations where your CLI could run a command from an unexpected place: Check where the node command is coming from If you’re expecting that p
Threads is Facebook's new social media platform similar to Twitter. In this blog post, I’ll show you how to interact with the private API via a Python package called threads-net (check it out here ). Note that this API i
Picking an open-source shell framework is a great way to rapidly improve your productivity and workflow while working in the terminal. All of the shell setups I’ll describe in this post offer: – Prompt customization (the
I recently bought a new Mac Studio. I needed a fast and organized way to set it up, and also wanted to keep a track of the software I was installing. I wanted to create a system that would allow me to easily replicate th
Downloading ROMs at scale.
A process for collecting music from YouTube, for the completionists.
Last week, I shared what I’ve been working on recently — an up-to-date “codethrough” of freeCodeCamp’s curriculum: walking through every exercise, lesson, and challenge, and adding my own spin on it where possible. I als
“How do you learn to code?” When I started coding about a decade ago, that was a difficult question to answer. Projects like Codecademy were just around the corner, but because there weren’t as many interactive resources
How to build a workflow similar to the Windows app ShareX on macOS, including uploads, custom hostnames, and clean URLs.
🎓 What is it? React Native is a tool for building desktop and mobile apps using React, the world’s most popular JavaScript framework. In a super competitive space versus tools like Flutter , Ionic , and Cordova , React
Use const whenever possible const sets constant variables in JavaScript. This is useful when you don’t want variables to be able to change! Below, we use var to set up a name variable. We can change that variable at any
Recently, the Git team announced a vulnerability in Git’s cloning mechanism. To mitigate this vulnerability, the team released version 2.30.2. I use Windows Subsystem for Linux (WSL), specifically the Ubuntu distribution
🎓 What is it? Exception monitoring provides insight into why your application is failing. Unlike normal metrics, exception monitoring worries about error states—often including support for line-by-line code errors, user
Heard about Gatsby 3.0, gatsby-plugin-image, or any of the other big announcements from GatsbyConf 2021? Check out my recap of the conference in ten minutes or less. <figure class="kg-card kg-embed-card"><iframe allow="a
If you’re using Windows for your development work like I am, you’ll want to quickly customize your Windows Terminal application to have a better color scheme combination. Here’s a quick video on how to do it 📺 <figure c
<figure class="kg-card kg-embed-card"><iframe allowfullscreen="allowfullscreen" frameborder="0" loading="lazy" src="https://www.youtube.com/embed/gqt8UFaIa5Q?feature=oembed"></iframe></figure> DDG Bangs DuckDuckGo (DDG)
In this video, I’ll show you how to deploy lilredirector , my open-source redirect engine built for Cloudflare Workers . After six months of testing different architectures, it’s finally ready to deploy on your sites! <f
Redis is a powerful key-value database, perfect for caching and in-memory (ephemeral) storage of data. In this issue of Bytesized, we’ll dig into the what , the why , and the how of Redis, and give you the tools you need
The FileList API is used when working with HTML inputs of type file . Let’s start with a basic HTML input, with an id set to file and type set to file : Traditionally, you would target the input (using jQuery or vanilla
Tailwind is a utility-first CSS framework. Unlike comprehensive frameworks like Bootstrap or Foundation , which provide solutions for things like cards , forms , and buttons , Tailwind allows you to compose your UI out o
--- Back in November of 2020, I wrote the first issue of Bytesized on human-computer interfaces . That issue was informed a great deal by two things I had been exploring deeply at that time. The first was an excellent bo
[Emacs](https://www.gnu.org/software/emacs/) is an incredibly customizable text editor built on top of Lisp. It has an infamous reputation among programmers and writers as being one of the most daunting tools you can pic
This blog is powered by Ghost , a great open-source blogging platform. (Editor note: this blog is no longer powered by Ghost, but this blog post is useful, so I’ve retained it.) Recently, I moved the Bytesized newsletter
Vim (Vi IMproved) was first released in 1991 by Bram Moolenaar . It started as a clone of vi , a Unix text editor initially released in 1976. Vim (and Vi) are modal text editors: they have contextual “modes” that allow y
VSCode is the [most popular](https://www.software.com/src/ranking-the-top-5-code-editors-2019) text editor in the world. That’s a remarkable stat on its own, but even more so when you consider how new it is: the first re
🎓 What is it? Software and services that enable you to build projects (or parts of projects) without writing code. 🤔 Why it matters No-code tooling allows you to do more with less (or, as you might guess, none — in som
🎓 What is it? \ *\*JavaScript, APIs, Markup.\*\ * A new (but also old) way of building apps on the web. Per Colby Fayock, who wrote the Jamstack Handbook earlier this year: The Jamstack is a modern architecture that rev
🎓 What is it? A query language for your API . GraphQL allows you to query any of your application’s data from a single endpoint, using a typed query language. GraphQL \ *\*queries\*\ *, which allow you to \ *\*request\*
🎓 What is it? Native applications for mobile, web and desktop, from a single codebase. 📌 Right now Flutter is written in a language called Dart . It’s a bit like a strongly-typed JavaScript, and like Flutter, it’s mana
🎓 What is it? Serverless computing is a new architecture pattern allowing developers to deploy highly-scalable code to be run on demand, often as functions. ⌛ The past Software is written to run on a computer. That much
🎓 What is it? Cybernetically enhanced web apps . Svelte is a JavaScript framework for building declarative user interfaces. ⌛ The past The frontend development world is dominated right now by frameworks. React is the mo
He could correct the computer’s data, instruct the machine via flow diagrams, and in general interact with it very much as he would with another engineer, except that the “other engineer” would be a precise draftsman, a
You can capitalize the first letter of a string in JavaScript by using some simple string and array functions. Here’s the complete code sample, followed by an explanation of how it works: How it works — slices and spread
You can target an HTML element with JavaScript by using document.querySelector . This API is similar to jQuery’s basic $ function. Using document.querySelector You can use document.querySelector to target an element, suc
Press escape, type :q (colon q), and press enter. It’s a long-standing joke that quitting Vim is *incredibly* hard, but the above should work in pretty much every situation. Let’s unpack it. Pressing escape to return to
I've been missing taking notes. GTD practitioners will tell you that one of the healthiest things you can do to remove stress is to use an "external" system to capture all your thoughts and goals. For a long time I've us
I've seen a lot of posts on rooting the HTC One M8, but everything is either on Windows or assumes a fairly non-technical background. This guide is for *OS X* and people who aren't scared to open up a command prompt. Pre
The short version: **Feeling** , my app for keeping a record of your feelings over time, is now on the iOS App Store .. I've been a believer of quantified self tools in a long time, but find them to be horrendously compl
Thought I'd quickly share a comment I posted on /r/rails in the post "What are the first steps you take when starting a new project?" : First things first – new tmux instance! Crucial. Then... Thorough README, including
I spent some time over the last couple days pushing a new redesign of my site, and one of the things I've been meaning to do is set up a better live development process. By that, I mean that when you're writing code, the
The Kindle is one of those understated devices that has a bunch of cool features underneath. HowToGeek has a couple here , but they're out of scope. So quickly, my favorite feature as a gift, but mostly as future referen
I've written on the site before about Boxen , GitHub's deployment tool for Macs. While I used it successfully on my personal computer, when it came time for a new work laptop, I threw Boxen out the window as fast as I co
Update: Since most browsers won't load a non-HTTPS link on a HTTPS-enabled site (including this one), I'm going to continue to use the Heroku link for this project until I resolve the HTTPS issues. A quick announcement a
Quickly, on Christmas Eve: I've had an interest in making some kind of game for a long time. I was going to participate in Ludum Dare 24, but I had some personal stuff come up and couldn't get started on it. I still, how
Today, as some sort of early Christmas present from the overworked employees of delivery services nationwide, four MacBook Pros arrived at work. Upgrading from a 2009 iMac without an SSD, I was expecting the rMBP to be a
<blockquote class="twitter-tweet" lang="en"><p>ruby on rails, hardcore mode: class ActiveRecord::Base def method missing(name, *args, &block) self.class.destroy all end end</p>— Jake
I've been thinking of ways to improve as a programmer recently. One of my weak points is testing - while I think I test pretty well (my normal stack is RSpec and Cucumber; I use Jenkins and Simplecov), I would love to be
I've been reading "Metaprogramming Ruby" the last couple days, and realizing that a lot of what makes Rspec amazing is its usage of metaprogramming. I thought it would be interesting to try and write my own test framewor
Vi IMproved, or Vim , is my favorite text editor. It has a big learning curve, and it's certainly not beautiful, but it is tough as nails and is installed on almost every \*nix system by default. I want you to learn Vim
I've been running the GM of OS X 10.9 Mavericks for about a week now. I don't expect much to change between now and the actual release, so I thought I'd write up a couple thoughts quickly. This is by no means a [Siracusa
I've been eagerly awaiting [OS X Mavericks][mavericks][^1] as it promises [better battery life](http://www.apple.com/osx/preview/advanced-technologies.html) - especially for the newest MacBook Air. The problem with upgra
I thought I'd take a bit of time today to secure my website for both readers and myself. HTTPS certificates have a reputation for being somewhat expensive, and complicated. Complicated doesn't bother me, but expensive do
Like most [Jekyll] sites, this site is written in [Markdown]. There's a lot of differing opinions on the "right" way to write Markdown, because some portions of it have multiple syntax options. I thought I'd write down m
I use a 'now playing' script for seeing my last played artist in tmux. Here's what it looks like: It's in a loop because I use the [daemons] gem to run it in the background. The documentation is quite good and it has com
The usage of dotfiles is quite common with programmers. For a long time, I used other people's dotfiles - [Zach Holman][holman] from Github, [Ryan Bates][bates] from Railscasts, and a couple others. These worked pretty w
I often have situations in Rails where I'm calling a method that either returns a single object or an array of many objects. Take, for example, an ActiveRecord query that will return a User based on certain specification
As I mentioned in my previous post, I switched to Android at the end of last week. I'm still working on a fairly lengthy post about my thoughts on the Android OS, but I thought I'd post quickly about a tool I'm really en
I recently set up a Jenkins instance for my own personal projects under a subdomain of this website. This involved a little tweaking with some Nginx configs to get it to work. I decided to document this because while it
I've started to dig into Hipchat because of its killer free plan and I discovered pretty quickly that it has an awesome API, along with an awesome Ruby gem . The really cool part about Hipchat's API is that it has the op
I recently switched my Jekyll site from a Github pages repo to self-hosted on my DigitalOcean server (warning: referral link). The deployment process is not as easy, but I thought it would be a good learning experience.
*tl;dr: at_most is a Ruby gem for limiting the number of AR model instances in your Rails apps* I've found that if I'm repeating a use-case or functionality over multiple apps, it's probably worth extracting into a reusa
I've been curious about Android recently -- Google Now as a kind of souped-up Siri was the first to stir my interest, then the promise of implementing my own systems to create a *real* smart phone pushed me over the edge
I've been searching for the right todo app for a long time. At this point, I think I've used all the "big apps": OmniFocus , Things , RTM , Reminders.app , Evernote , Wunderlist , The Hit List , Clear , and so on (seriou
I've written about tmux before, and I still find it unabashedly awesome. As I've been gluing pieces of status-bar code together, I've been on the lookout for something a bit more organized -- thus discovering tmux-powerl
Octopress has a number of handy rake tasks, which can be easily found with rake -T . My favorite is rake new_post , which bootstraps a Markdown file (much like the one I am currently writing) with the metadata needed to
After a short time with Rails, I'm beginning to find that my tastes in testing frameworks and databases don't exactly match "The Rails Way". While in my beginning studies, I don't plan to make a habit of breaking from tr