My app was rejected from review. First independent Apple submission in years.

Guideline 4.2: not enough app.

I spent a night contemplating the meaning of life.

I made a small change.

The app was approved.

I had an existential crisis for no reason, and will never understand why.


A Forgotten Gem

Wading through my GitHub repositories, checking if there was any detritus beyond the, look ma, I can fork this, type of thing, I uncovered an artifact from January 2016.

I am proud to share with you, fine readers, the Soundsmitten Outline Compiler v0.0.0.

Write JavaScript code in your favorite OPML editor (OmniOutliner, etc.). Then compile it into some squeaky-clean Standard Style JavaScript.

Inspiration comes from Brent Simmons’s post:

I wrote most of my code in an outliner for eight years (when I was working on UserLand Frontier). And I miss it every day. Writing code in an outliner is the exact opposite of horrible. It’s marvelous.

With roadmap:

  • Maybe add more languages?
  • Add in some Keyboard Maestro/JXA/Hazel/TextExpander magic to make this a feasible workflow.

This is a very nice loop:

for (var i = 0; i < lines.length; i++) {
    var line = lines[i]
    if (!line.match(/.*{/) && !line.match(/.*}/) && !line.match(/^(.*:.*)/)) {
      line = line.concat(';')
    } else if ((i < lines.length) && line.match(/.*:.*/) && i !== lines.length - 1) {
      line = line.concat(',')
    }
    if (line.match(/.*:.*/) && getLevel(line) > getLevel(line + 1)) {
      line = line.concat('}')
    }
    this.output += line
    if (i !== lines.length - 1) {
      this.output += '\n'
    }
}

getLevel(line + 1) catches the eye.

function getLevel (line) {
  var count = 0
  for (var i = 0; i < line.length; i++) {
    if (line.charAt(i) === SPACE_CHAR) {
      count += (1 / NUMBER_OF_SPACE_CHARS)
    } else {
      break
    }
  }
  return count
}

The repository remains private. Anyone near it loses brain cells.

Thanks, Brent.


Flex

Consistency feels good, but sometimes inputs do not support it. Then it’s inconsistent, and that might not be sexy.


Webs

The Intellectual Dark Web, the canceled, have become the cancelers. Having a conversation in hushed tones to just ask questions is only OK if you are within bounds. Step outside and you lose your UK visa.

RM Brown will keep making drops.


Toothpaste

If I could, I’d put the mid-2020s AI toothpaste back in the tube.

The loss of craft/expression slant is well trodden. After private grief, I’ve come to terms with it. Agentic tools do have value.

I can’t shake impending dread as the wider AI experiment is conducted on us. There are no guiding principles, guardrails, protections, or incentives to be humane. The messaging is hyperbolic. The profits are huge.

As momentum increases, I can still dream about finding the right syringe to clean it up a bit.


Hello

I blogged several years ago as I learned how to program. I thought out loud, trying to figure out life in my mid-to-late twenties, vulnerable, a bit of a chip on my shoulder, breathlessly sharing discoveries in a new field after chucking away a lifelong career path that was never a deliberate choice.

I’d post about my journey from music to frontend to iOS work. I’d highlight niche macOS apps, allude to MPU episodes and mention my beginner’s coding podcast where my cohost and I would discuss our progress as well as first-job horror stories. And people actually read it: Once my RSS feed broke and someone pinged me on Twitter to ask what happened to my posts. At least one person read it.

I’ve disappeared in this aspect. Nuked my blog and feeds a couple times over the years because the content felt cringey. I’m not sure I’ll post much anymore, but I felt like putting out a ramble.

A lot has changed, in life and in the industry. I might post some thoughts here. I might not.

Just checking in after a decade. Still building things. Still passionate (for the most part) and learning.