How I Generally Reduced Sugar Consumption

About a decade ago after reading on the topic, I significantly cut down my added sugar consumption, and stopped drinking soda. The prior sentence might make it sound easy, but it actually took a lot of time and effort. Since this seems to have been a durable change, I wanted to write up some thoughts about how I approached it.

Benefits:

  • weight loss (about 10 pounds in my case, as an already pretty lean person)
  • better metabolic health
  • more stable moods and energy due to less blood sugar fluctuation

The general thought that motivated me was that having basically any added refined sugar is not a positive thing, and so I wanted to limit this as much as possible. There is basically no nutritional benefit to added sugars, and it has many negative effects like metabolic dysfunctions, obesity, diabetes, inflammation, and cardiovascular disease. Since my grandfather had type 2 diabetes, this was something that I wanted to avoid.

For a while, I was pretty hardcore about this, and would try to avoid fruits and generally go low/no carb. I have softened to basically eat fruit as it's available or desired, and have been eating rice and bread fairly liberally.

My general approach now is to eliminate the obviously bad, moderate the questionable, and still enjoy treats from time to time.

Read on →

PlainErrors: Streamlined Rails Error Pages for LLM Agents

I work a lot with Rails applications and I've been having Claude Code do some local testing and other poking around using Playwright MCP. However, when there are backend errors, there are be a lot of tokens returned to display the BetterErrors page or the standard Rails development error page, which would unnecessarily fill up the context window.

So… I worked with Claude Code to build a new gem (PlainErrors) that is a Rack Middleware that gives streamlined error reports for LLMs.

In practice, this should let the agent do more debugging and iterating without filling up the context.

Read on →

Set A Minimum Daily Step Goal

I had some major lower back and leg issues in 2015 that lasted at least a year. After doing some physical therapy, I was much better off, enough so that I could play Ultimate competitively again.

On Father's Day weekend 2020, I tweaked my back again. This was a true Father's Day weekend. My wife was working so I watched the kids the whole weekend. I was fairly deconditioned due to skipping the gym to try to avoid getting the then-novel Covid-19. Biking was sketchy for my back since the initial injury, but that weekend I took the kids around town in a bike trailer. The weight of the kids and their stuff, combined with the fact that I was minimally exercising at the time, was too much for my back to handle. I felt it tighten up, and then kept pushing. By the time we made it home, I knew I was in trouble.

Stress may play a role in pain (see On Pain and Hope), and 2020 was a stressful time for me personally (two young children, helping run a startup that just had its sales pipeline dry up and a cofounder leave), and the world (U.S. election, pandemic, etc.)

My back wasn't quite as bad off as the first time, but with the pain that I had, most days I was hardly getting out of the house. By December of that year, after starting to see the physical therapist again, I was feeling marginally better, and I decided to get a step tracker to try to walk more consistently to avoid future injury.

Now that I've kept it up for several years and feeling better than ever, I wanted to write up some thoughts and tips. If you're looking to do something like this, I hope that this article gets you off to a good start.

Read on →

How I Fix Issues On Open Source Projects

Here's a post detailing how I typically think about fixing issues for open source projects.

Identify an issue

There are two main ways that I identify issues on code repos.

When I evaluate a new (to me) project, I need to figure out whether it will meet my needs. Often this will be functionality, but I also want to determine how well supported the project is. I will usually look at:

  • the README / wiki
  • when the repo was created and when it was last updated
  • a few of the most recent commits
  • the repo's issues / pull requests tab (including recently closed ones)
Read on →

Caching OpenAI Embeddings API Calls In-memory

I recently posted about a job posting search engine I prototyped that used OpenAI's Embeddings API.

As I tested this out in a Google Colab notebook, I guessed that the same text would always result in the same embedding. I compared embeddings of the same text and found that they were indeed identical. I also added a space or words to the text and saw that it resulted in a different embedding.

I started by saving the embeddings in the dataframe. This worked, but I would have to call the API again if I wanted the same embedding again (which happened a couple of times as my code was not robust enough the first couple of runs.) I also wanted a way to also have search queries that were previously requested return faster.

Since I was going to embed many job postings and might run the notebook multiple times, I wanted to cache the results to save a little money and increase the speed of future runs. This was helpful when I was iterating on the code and running over many postings, since some of the postings caused my code to error.

One solution to this is to store the embeddings in a database, perhaps a vector database. This would be more persistent, and would be a more production-friendly approach. For the time being, I decided to keep things simple and just cache the results in memory until I saw that the overall approach would work.

Read on →