I looked into 11ty today to see if it could be worth migrating away from hugo, which is how (at the time of this post) I build my blog. After a bit of research and browsing, I setup this template and copied over some posts. Some over my older posts were using Hugo’s markup for syntax highlighting. I converted these to standard markdown code fences (which was worthwhile regardless). I also needed to adjust linking between posts. In Hugo, I use ref. In 11ty, these need to be relative links, e.g. /posts/2023/future-of-personal-knowledge. In Hugo, this approach works as well, so I may move to it.

I would love if OpenAI added support for presetting a max_tokens url parameter in the Playground. Something as simple as this:

https://platform.openai.com/playground?mode=chat&model=gpt-4-1106-preview&max_tokens=1024

My most common workflow (mistake):

  • Press my hotkey to open the playground
  • Type in a prompt
  • Submit with cmd+enter
  • Cancel the request
  • Increase the “Maximum Length” to something that won’t get truncated
  • Submit the request again

2023-11-25

A thoroughly enjoyable and inspiring read by Omar about his 20 year journey to date.

Quantity was important. Quantity led to emergent of quality.

Read the documentation: I can’t emphasize how useful this is. There are gems upon gems in the documentation. A good documentation gives a glimpse of the mind of the authors, and a glimpse of their experience.

I’m betting OpenAI will soon have a Cloud Storage product like Google Drive or iCloud for ChatGPT Plus users. Having your personal data available in the context of a language model is a massive value add. With a product like, OpenAI can fully support use cases like “summarize my notes for the week” or “create action item reminders from this recording”. They’re already dipped their toe in the water with the Files API. I expect a more feature complete offering is on the way.

I did more exploration with Copilot, mainly for writing unit tests. Copilot is a pretty good at bootstraping unit tests, particularly in Java, where initializing the right types may take several lines and there is a large standard library. In doing this, the Copilot-written code was close enough that it saved me time relative to writing the tests from scratch. I learned that Copilot can show a ranked list of completion in a separate window in the IDE, which is helpful and can also be invoked with a hotkey (option+\ in IntelliJ), which is useful as well.

I’ve been integrating Copilot into my workflow the past few days. From my understanding, it uses OpenAI’s Codex model, which is part of the GPT-3 model series. I believe this also predates the chat models, gpt-3.5-turbo and gpt-4. As someone who has been using Cursor for my personal work for several months now, the core completion functionality of Copilot feels like a step back compared to Cursor’s cmd+k (to say nothing of chat, which both have and other features). In general, when writing code, I’ve found I don’t really want line completion, I want idea completion. Copilot can do this, but you have to set it up in the right way, with a comment or a well named function stub

I finished migrating my site to the latest release of Hugo today. It’s been quite a while since I’d pulled the latest changes but most of the fixes were straightforward. A number of the partials had been updated, so I need to port my custom components to incorporate the changes. I also migrated what I’d previously kept in a static directory to assets.


I looked further into using hidutil to replace Karabiner. It looks like the utility can’t map a single keypress to multiple keys, so it can’t directly substitute for how I use Karabiner. Along the way, I found this useful tool for generating a plist file to load a startup to persist hotkeys across system restarts. I was considering switching to use the right command key, but it looks like Hammerspoon may not provide hotkey support for that according to this issue. I might be able to put something together in combination with skhd, but this idea is going to the backburner for now.

I’ve been looking into hidutil to potentially replace Karabiner for overriding my capslock behavior. My first attempt, follow instructions similar to this post, was close but unsuccessful. I was able to remap the capslock key, but it wasn’t trigger the key combo I had hoped for – I use cmd+option+ctrl+shift. Caplock wasn’t performing it’s normal function and the key light wasn’t turning on but it also wasn’t triggering my hotkeys. Hopefully I will have something workable after a bit more time with this.

I’ve been working on a Next.js app with a Leaflet map component. Using this combination of technologies has not gone smoothly. I’ve been running into an issue trying to make the Leaflet component render client side. From my understanding, Next.js renders React server-side by default, but this is easy to change with the 'use client' directive. After a bit of work, I was able to get a map component rendering on the page by importing it with

2023-10-18

I spent some time experiementing with Inngest, cloud software for running async jobs, workflows, crons and more. It’s quite similar to Temporal, which I am big advocate for for running durable workflows and gracefully handling failures. There are some drawbacks, but it feels simpler to get started than Temporal and has a most of the same topline capabilities. The main feature deficiencies I noticed in about an hour of research were lack of as granular retry configurations and timeouts and no support for query handlers to inspect the status of a running function/workflow. The list of supported features is impressive, notably