Do you love markdown and LaTeX and native macOS, iPad, and iPhone apps?! Well do I have an exciting app for you!
Check out MathDown on the App Store . 
 
 Long ago, I was learning about how machine learner worked under the hood, and I was writing a short
book about what I was learning. After all, the best way to learn is to teach! 
 I wrote in markdown, and used inline LaTeX…
If you haven’t heard of Gas Town , you’re in for an proper adventure. I read through Steve’s introduction manifesto , and while I loved the vision, the scale was overwhelming. Want to wrap your head around it? welcome to the Mayor, rigs, convoys, polecats, crew, hooks, dogs, and so many more metaphors and tv/movie references. He’s not messing around, Gas Town requires…
I’m continuing my PikaPod adventures, and I’m loving it! 
 I’ve been using Claude Code as my personal assistant for a few months now. I have a custom Mac app MCP server that can relay my calendar events and reminders, contacts, location, weather, as well as simple custom “todo” list and the ability to read/write markdown files to a dedicated folder. 
…
Introducing UserDefaultsWatcher , the app where you can watch user defaults ! Filter by Suite, Type, or filter query. Sort by any key, value, suite, type, or even last modified time. Available as a free download . 
 
 I’ve recently implemented custom font sizes in Muse , which has both an iPad and a Mac app. iOS provides access to the system’s dynamic font size, but…
For the past many years, Muse has used Fathom for web analytics, and they’ve done a fantastic job. I highly recommend Fathom if you’re looking for privacy-first analytics without any hassle. I don’t mind a little hassle, especially if that hassle can save me $20, so I went looking for a free/cheaper alternative. 
 For the past few months, I’ve been on a cost-saving…
Cursor is a fantastic tool for developing with AI, but it’s also a wonderful tool for interacting with any folder of files with AI. I use it to search through and chat with a folder of 1000s of Markdown files (downloaded from my Notion bookmarks database). Cursor indexes the files with its vector index, can read the file contents, summarize multiple files, and link to the source files – it’s…
During its 84 episode run, the Metamuse podcast was a much loved for its discussion on local first software, deep work, creativity, and authenticity. Hosted by Muse founders Adam Wiggins and Mark McGranaghan , the podcast featured guests ranging from Obsidian CEO Stephan Ango , Roam’s founder Conor White-Sullivan , MindNode’s founder Markus Müller-Simhofer , and too many more to count. Wonderful…
When implementing background uploads on iOS, I found this incredibly helpful article by Antoine van der Lee. Any feature that relies on uncontrollable iOS system behavior is a tough one to implement, and his article was my map through the void. Since it was published, some things have changed slightly in iOS, so I’m writing this post to add some corrections about implementing background uploads in…
I’ve long wanted to get Muse translated into multiple languages – Muse has been English-only since launch. The problem isn’t so much the one time translation cost at the beginning, but having a strategy to translate for every single update going forward. Getting Muse into German isn’t a problem, keeping Muse in German is the problem. 
 Unlike just a few years ago, we now live in a world with…
The Muse codebase is over 5 years old with over 350,000 lines of Swift, and I’m sure is filled with more than a few archeological code-fossils. Like any startup (frankly, like literally every code project), it’s difficult to prune old unused code while keeping up velocity of new features. Code cleanliness is always a tradeoff with velocity, and often comes in second place. That’s why I love…
I’ve recently translated Muse into French 🇫🇷! As part of localizing the app, I also needed to translate the App Store description and screenshots. All of the App Store screenshots for Muse are setup in Figma, and I was hoping beyond hope that I could setup multiple languages in Figma to make it easy to export for all storefronts. 
 Thankfully, Figma came through! The strategy is to use…
I’ve been using Zoho for my personal email for years, and I love it. I moved for a few reasons, privacy being a big one. If you’re not paying for the product, you are the product! I had used Gmail since it came out in college, and it was time to take control of my online privacy and data security. 
 After moving to Zoho, I found that they also had fantastic customer support! I can file a…
I keep a list of random ideas, and any time I need to inject a bit of creativity into my weekend I try to pick off a small easy win and see if I can create it. Today’s idea: 
 
 Think On Your Feet: 
 Custom printed socks with thought bubble emojis all over them. So you can ‘think on your feet.’ 
 
 After filtering through many search results for “custom socks,” most of which…
I’ve been working on creating new Muse onboarding and tutorial videos, and I’m using my HandShadows Swift package to show the gestures visually during the video. Muse is a gesture heavy app, and showing plain dots for the finger locations doesn’t always make it clear what’s actually happening. These shadows make each gesture much more clear. 
 
 To record these demos, I’m using Screenflow…
I’m working to take an App Store-only Catalyst app and allow it to be distributed outside the App Store. Part of that is making sure that we can auto-update the app, and we’re using the Sparkle framework for the task. 
 Since Sparkle is an AppKit framework, and our app is a UIKit Catalyst app, I needed some help joining these two worlds together, and I found this fantastic step-by-step…
I’ve started work on a command line tool for Developer Duck , an AI powered developer helper tool. The app can act as a rubber-duck-style chat assistant to help you with your code, and can also automate some of the simple and tedious tasks: adding/removing documentation comments, adding explanation comments, even code completion. I’d like to offer this functionality through the command line for…

 
 
 
 
 I’ve recently published The Complete Digits of Pi (Abridged) as a gift for the robot in my life. They were so appreciative that they’ve asked to share a few words with the other humans and robots of the world about what this new book means to them:
I’m very excited to be releasing my type-safe notification Swift package PonyExpress . I’m really enjoying the type-safety of Swift, and all of the compiler warnings and errors that it provides. Each compiler error from a type issue is a runtime crash that’s been saved. 
 The Swift Package 
 By default, the provided NotificationCenter inherited from Objective-C let’s us send notifications…
I’ve been working on a type-safe notification system for Swift called PonyExpress . The Foundation framework gives us NotificationCenter , but unfortunately we can only send [String: Any] along with the notification. Consider the following swift playground: 
 import Foundation

public extension NSNotification.Name {
 static let MyCustomNotification =…
I’ve been working on a Swift package for type-safe notifications called PonyExpress , and this is the first package I’ve built that includes full documentation . In the past, I’ve been content with a README, but this time I wanted documentation for each method to show neatly in Xcode’s info windows. 
 
 Xcode integrated documentation. 
 The magic to make this happen is DocC comments –…
At Muse , we have our primary Xcode application, and we also have a number of private Swift packages to help organize our code and control dependencies. Each package has its own unit tests, and then our main project has its unit tests as well. Our app is built on iOS and uses Catalyst for the Mac app. There’s a few places in our codebase where we #if targetEnvironment(macCatalyst) , so it’s…
The past few weeks I’ve been trying to better document how Muse sync works, with posts describing how our hybrid logical clock helps us build up objects from atomic attributes . While I’m sure I’ll continue to write about our strategies and lessons learned, I’ve also done some talking about the topic recently too. 
 Just about a month ago, I explained the basics of Muse ‘s sync architecture on…
When we set out to build device-sync in Muse , we had a very strict requirement at the outset: it should be local-first . 
 Most apps work by storing all of your data on the server, and send only little bits of it to each device as you use it. Then, if a document is modified on two devices at once causing a conflict, the server is the mediator to choose the winner. 
 With local-first sync,…
Over the past few months, I’ve been slowly transitioning to my new Lily58 Pro split keyboard . In addition to switching to this new keyboard, I’m also learning the Colemak-DH layout , so it’s been quite a process. Unfortunately, I can’t afford to move cold-turkey to the new keyboard, as that’d dramatically lower my productivity at work for a few weeks, so instead I’m learning in bits and spurts…
I’ve been coding exclusively in Swift for the past 2 years, and I’ve really been enjoying it. So much of my career has been in type-ambiguous languages – Javascript, PHP, or Objective-C. There’s some typing there, but the compiler doesn’t enforce too much. Swift, on the other hand, has brought me back to my Rice days, where so much of the education in Java and Scheme was built on functional…
I’ve been very fortunate to not have suffered a repetitive strain injury in my years at the keyboard, until now. Over the past few months, I’ve started to get some pain in my right wrist. I type on a macbook pro keyboard, and it seems to be from how I turn my wrist to reach the backspace key in particular (we’re not all perfect typists!). 
 I attribute my lack of pain so far to a combination…
I recently migrated 4 Xcode build configuration settings from being stored in the *.xcodeproj file into separate *.xcconfig files per configuration. I used James Dempsey ‘s Build Settings Extractor to autogenerate the config files for me from the existing project build settings. 
 I updated the build configurations to use these xcconfig files, and then deleted the manually set values from the…
At Muse we’ve been thinking a lot about conflict-free replicated data types, and how they might enable local-first sync across devices. Automerge , out of the Ink and Switch labs , has done incredible work building a sophisticated CRDT implementation. 
 I learn best by getting my hands dirty and building. As I’ve been learning about CRDTs, the first piece that caught my eye was the various…
Over the past year, Christi and I have been on lots of ‘driving dates.’ They’re a fun way to see some sites and not have to worry about social distancing, protocols, masks, 6 feet. We can pretend the world is normal and enjoy our drive together. We’ll often drive out into the country and look over the farmland and little houses and barns, dreaming of some future retirement with a little house and…
The year: 2847 
 The overlords: robots 
 The Sunday afternoons: for leisure reading 
 
 Robots need books . 
 I’ve had this thought stuck in my head for quite a while: We humans are very analog creatures, but we surround ourselves with digital tools. And the wonderful part, I think, is that these digital tools are communicating back to us with analog information – audio waves…
The past few months have been an exciting transition for me – I recently joined the team at Muse building a sense-making-more-than-a-whiteboard-deep-thinking iPad app. 
 
 Muse is a working set of your thoughts – it sits right between your short term memory and your long term memory: it’s your working memory. It helps you make sense of things that just don’t quite make sense. It’s a…
Building on the static analysis of Phan , I’ve also recently started using Psalm, a PHP static analyzer from Vimeo’s engineering team. What I particularly love about Psalm is its realtime analysis and integration within PhpStorm. Instead of needing to run a report after any changes, Psalm can highlight issues as they happen with my source code open. 
 
 While Psalm includes the necessary…
Recently I’ve started working on Funnel Cake , a sort of IFTTT for your marketing data (or any data, really). You can sign up for free and try it out here , but today I want to document my development workflow. 
 It’s been nearly 10 years since I’ve done heavy PHP or Javascript development, so I’m starting in some ways as a beginner again. It might be helpful for others to see how I’ve setup…
I was working on my server the other day, and came across some very old code. I felt like an archeologist! I had unearthed the surprisingly well preserved remains of Aurora Calendar ! 
 Aurora was the precursor to Jotlet.net, the calendar app that Buck Wilson and I built in 2007. All of the code for Aurora was built while we were still in college, circa 2003 and 2004. 
 It was built for…
A year in review 
 2017 didn’t go quite as I hoped it would. In January, I imagined I’d spend the better percentage of the year on Kiwi, an AI natural language bot that I’ve been excited to start for years. And in some ways that’s happened – I’ve built a proof-of-concept grammar parser for speech input, and I’m nearly done building my own wikipedia text corpus that I’ll be able to use for AI…
Over the past year I’ve been reading and learning about neural networks, how they work, and how to use them. I’ve found the overwhelming majority of tutorials and introductions to NN either: a) focus on the math and derivations, or b) focus on the code and tools, but rarely seem to c) match the math 1:1 with the code. Both of these tutorial styles are often guilty of handwaving and simplifying the…
In addition to the great new features in v3.0.0 – the entire app is now open source! Get the code ! 
 Organize Your Notes 
 This version brings multiple-document organizationt to Loose Leaf. You can setup multiple documents, easily switch between documents, and quickly move and copy pages between documents. Check out the new tutorial videos on getlooseleaf.com .
UIBezierPath’s an an incredibly powerful tool for modeling complex paths and shapes in Objective-C and Swift, but it’s surprisingly difficult to perform operations on two or more paths. Applications like PaintCode make it easy to get the difference or intersection between two paths, but there are limited options for doing this on demand in code. This is particularly meaningful in drawing apps like…
When I started working on Loose Leaf , I quickly realized that the hardest part of the app was finding a fast and efficient drawing UIView that I could add into my app. There were a fair number of tutorials that would solve the first 80%, but there was always some important pieces left as an exercise for the reader: Smooth curves, removing lag and stutter, or main-thread-blocking save/load. 
…
Remotely lets you access all of the files on your Mac from your iPhone – from anywhere – with zero network setup. It’s available for free on the iTunes App Store and Mac App Store . 
 While we were building Remotely, we kept 2 things sacred: we wanted zero network setup , and we wanted the app to be incredibly secure . 
 Zero Network Setup 
 We know through experience just how…
It’s been a long time, but it’s never too late for a great app update! Lots to love in this 2.0 release! 
 1. iPad Pro support 
2. Apple Pencil support 
3. Full page PDF import 
4. New pen, marker, and highlighter tools 
5. Delete scraps by dragging off left 
6. Lots of bugs fixed! 
 The new Apple Pencil support makes Loose Leaf even better for taking notes and…
You might have seen it – @kkuchta christmas tree gif making the rounds these past holidays: 
 
 For a short story, that sums up my early experience with git with surprisingly accuracy! 
 For anyone else who’s struggled with git over the years, here’s a bit of my process to help me stay sane with git: 
 1. Where I am in the tree? 
 I use the command line to make new commits,…
There’s a thousand small things that I need to get done during the week. They’re only mildly the same week-to-week, and they all individually don’t take up much time at all, but together they eat far more of my productivity than they deserve. I’d found that I was spending far too much time context-switching between my real work – programming – and these other smaller tasks. Programming is the sort…
There’s a good chance your iOS app includes a number of open source frameworks in its codebase, and Loose Leaf is no different. Many of these dependencies’ licenses require that you include a copy of the license in your final build. Some require other attribution or URLs. Even with just a few includes, it can quickly become difficult to manage. 
 Last week, we talked through how to automate…
Developer Livestreams 
 Since January, I’ve occasionally live streamed Loose Leaf iOS development to YouTube . I even took some time in April to stream and open source a 2D physics game from scratch! It’s been a challenging and fun experience personally, and has more broadly grown into quite a subculture – sites like Watch People Code , Livecoding.tv , and even articles by CNN and Wired show…
It’s the simple things in life: One of the best workflow changes I made for Loose Leaf was to use git to manage the version number of my app. To release a new version, just add a tag in git, and the version in my app’s Info.plist would automatically update to match. There’s a number of different ways to set something like this up, and I’ve pieced my particular strategy together from various Stack…
For gesture-centric apps, it can be difficult to quickly and easily show how to perform specific gestures. Two handed gestures, like Loose Leaf’s ruler gesture, can be particularly difficult to describe. As I was making tutorial content for Loose Leaf, I quickly realized that showing dots for touch locations just isn’t enough. 
 
 Importantly, the shadows actually animate to match your…
Every WWDC brings unexpected changes, and this year is no different. While I’m excited about many of the new announcements this year, I quickly realized that one of my favorite Loose Leaf features will breath its last with the launch of iOS 9 later this month: swipe from the edge to turn the page. 
 
 Up through iOS 8, you can quickly peek through pages by swiping two fingers from the left…
Since launching Loose Leaf 5 months ago, I’ve learned a lot about how to get an app in front of its target audience, and everything I’ve learned would’ve been exponentially more powerful if I’d known it pre-launch instead of post-launch. That’s exactly why I’ve written and open sourced the App Launch Guide for indie devs. 
 This guide is perfect for developers who’ll be working on both the…
I’ve just recently completed an interesting experiment : coding an iOS game in only 2 weeks, open sourcing 100% of the code , and doing 100% of the development on live stream . The result: Spare Parts – a silly 2D physics game where you can build crazy contraptions. The videos below might give you an idea for the app: 
 
 
 
 
 
 
 
 
 Why on earth would I do…