Fear and Light

It's remained that way because I've been afraid.

Always, always in the pit of my stomach, deep down in the back of my lizard brain, there's this nagging voice when it comes to the low-level work, the real work, the type of code that real developers write

You're not good enough. You can't make it work. You're not smart enough to figure it out.

So I keep punting on the work. I keep pushing that bug fix further and further out and just hope that my code keeps working and that a random macOS point release doesn't bring it all crashing down.

But two nights ago I sat down in my office. And just fucking did it. I told myself “no” was not an acceptable answer and dove into every arcane, unmaintained bit of Apple documentation I could find. Searched old Cocoa mailing lists for sample code, and finally, finally have a working solution.

After thirteen, years I finally got past my own shit and mental demons and made it happen. I guess I was just fed up with myself constantly ducking out of doing the hard work. That, plus a looming deadline I have to meet, finally held my feet to the fire on this particular feature in a way that has never been done before. So many features. So many bug fixes. Thousands of customer emails and replies. Brainstorming sessions. UI mockups on the back up napkins at bars or doodling on a notepad while at my real job. But this one damn bug was always out of reach. And now it’s done.

To my future self ten years from now: this post is for you.

Read More »


Fastmail Wrapper for macOS

I keep looking through my archives of old, private coding projects - the ones that I built just for myself to solve a particular need - to see if I can find any that other folks might find useful. So, here’s another one I spent a few hours cleaning up recently.

It's a native macOS app (wrapper) around the fastmail.com website that supports:

  • Multiple Fastmail accounts.
  • Native macOS notifications (and sounds).
  • Customizable Dock icon badges.
  • Keyboard shortcuts (⌘1 - ⌘9) to quickly open specific accounts.

Read More »


Roland is a Static Website Generator Written in Swift

If there's one thing I'm good at, it's reinventing wheels. So here's Roland - an open source, blog-aware, static website generator written in Swift that also uses PHP under the hood because PHP is still the best template language.

Read More »


A Quick Shell Script to Keep a LAN File Server Mounted All the Time

Now that we're all stuck at home practicing social distancing, my children's mood depends on their favorite TV shows and movies always being available during their iPad free time. And my sanity depends on not hearing the awful clicking noise of the external drive our video library is stored on while I'm working at my desk. Moving it to a networked file server running off a Raspberry Pi was simple enough and solved the problem. But after trying a few 3rd party apps to keep the network share always mounted, here's the simple shell script I wrote instead.

Read More »


Spotish for macOS

Spotish is a dead-simple Mac menu bar app for Spotify – there are many like it, but this one is mine. Here’s why.

Read More »


Three Things Today

Every task management app has a feature that will let you postpone, delay, or snooze a task. You can tell them to push a todo item out by a day or a week, etc. But I like to think Three Things is smarter than that. It's designed to be flexible and forgiving - pragmatic and realistic. When you defer a task, it won’t accidentally reschedule it for a day that’s already overflowing with commitments. It literally will not allow you to schedule more than three tasks per day.

It fits my brain. Maybe it’ll fit yours, too.

Read More »


The Stack View is a Liar

...Firing up Xcode’s wonderful view debugger, however, completely blew my mind and shattered any remaining self-confidence I had as an app developer. And then nearly an hour later I’m really questioning everything I thought I knew about ones and zeroes until a google search leads me to this page. And, sure enough, my bug is spelled out right there.

Read More »


DefaultApp

DefaultApp is an open source starting point – a template. I maintained it in Objective-C for over a decade before finally porting it to Swift in 2018. Anytime I start a new app – big or small, whether or not it’s something I plan on releasing publicly or if it’s just a small prototype or utility app I’m building for myself – I start with this project.

With DefaultApp I can go from initial idea to writing actual code in thirty seconds.

That said, I would't use this as the basis for a billion dollar corporation’s enterprise app. Or with a team of “100 engineers” “solving hard problems”. But if you’re a one-person development shop or a team of just two or three engineers building a typical macOS shoebox or document based app? Please take a look.

Read More »


Deactivated

I’m filled with rage and despair and also just sad thinking about what we in the tech industry unintentionally unleashed upon the world – and then willfully made worse through greed and arrogance. This is my small contribution to make things better. It likely won’t matter. But it does give me some relief to have done something. Anything.

Read More »


How to Set Custom Display Values and Localize NSPredicateEditor

Maybe the documentation has disappeared online, or maybe it was only ever available via word-of-mouth fifteen years ago, but I lost about four hours the other night trying to figure out how to make the dropdown choices in my NSPredicateEditor show user-friendly names instead their actual key paths.

Read More »


Categories
macOS Development

A ridiculously dumb brute-force approach to getting around macOS's security UI and making my software a better experience for my customers

Until Apple gives 3rd party developers a way to properly request the permissions we need to build the apps our customers want, hacks like these are going to be the norm.

Read More »


Triage Your Email in the Car with Siri

With this script, Siri will speak a summary of your unread emails and then allow you to take action on each individual message. You can listen to the full email body. Or, you can archive, delete, mark as spam, mark as read or unread, and send a reply.

Read More »


Rebecca Stand and the phone reason

If you saw my tweet from earlier today then you'll already know the punchline to this particular bug report. But for those of you who don't follow my every dumb online comment, I present to you the strangest corner case I've come across in fifteen years of professional development. The app...

Read More »


Categories
iOS Development

A Stupid-Simple Automated iOS Build Script

I've worked with a bunch of different automated iOS build systems over the years at the various companies I've worked for and with my own apps. In the early days of the App Store, many of these were completely home grown. As the toolchain matured, I've dealt with Xcode bots...

Read More »


Why Many of my Apps Failed And What Comes Next

I've started building something new. I'm about four weeks in and already finding it incredibly useful in my day-to-day. I've built many different apps over the years, thrown them against the wall, and excitedly watched which ones developed a following and which ones failed miserably. Most of my apps have fallen into two...

Read More »


Finder Folder Actions not being triggered when files are added with rsync

A couple weeks ago I wrote about how I was automatically capturing the photos and videos my kids' daycare emails to me and importing them into Photos.app. The major pieces of that script worked fine - parsing the emails, downloading the images, and then rsync'ing them down to my Mac...

Read More »


Creating GitHub Issues (with image attachments!) From an Email

I'm very meticulous about logging all of the feedback I receive from my customers. Whether it's a bug report or a feature request, I want all of that information captured in a single place where I can plan and act on it. For me, that place is the Issues section...

Read More »


Categories
Indie Business PHP

Fixing a Broken Service With a Tiny Bit of Automation

This post is a nice, unintentional follow-up to yesterday's one about backing up all of my family's photos and home videos. Anyway... My kids go to a fantastic daycare. My wife and I couldn't be happier. The teachers are wonderful, they love our children, and our kids adore them, too. But,...

Read More »


A Simple, Open-Source URL Shortener

tl;dr One evening last week, I built pretty much the simplest URL shortening service possible. It's simple, fast, opinionated, keeps track of click-thru stats, and does everything I need. It's all self-contained in a single PHP script (and .htaccess file). No dependencies, no frameworks to install, etc. Just upload the...

Read More »


Categories
PHP Open Source

Coding on My iPad Pro

Last month, my 9-5 job was kind enough to gift me an iPad Pro and its new keyboard. I've had a few iPads in the past, but they've always ended up stashed away, unused, in a drawer somewhere. I simply never got hooked on their utility. I never found that...

Read More »


Day One Journal Total Word Count

After my previous post I got curious as to the total number of words I've written in Day One so far. A quick Google search didn't turn up any obvious solutions, so here's a short PHP script that gives you a total. Just pass it a path to your .dayone...

Read More »


Categories
Productivity PHP

Rockwell - Sort of like a private Foursquare meets Fire Eagle

Back in 2008, when I worked for Yahoo!, I had the good fortune of chatting with Tom Coates a few times about the now defunct Fire Eagle location brokerage service. Fire Eagle was my absolute favorite product to come out of Yahoo! during my time there. I've always been fascinated...

Read More »


Importing Jekyll Posts into WordPress

Nearly four years ago I switched my main site over to Jekyll. It's been great. But late last year I decided to make that site and its blog purely about my software business and move all of my non-work posts over to my tyler.io domain so I could have a...

Read More »


Categories
Jekyll PHP

Nostalgia - Rename Your Photos

I have a problem. Half of my photos come from my iPhone (via the Dropbox uploader), which creates filenames based on the date they were taken. But all the photos from my awesome DSLR are named BLAHBLAH_7001.jpg and BLAHBLAH_7002.jpg. That annoys me. I want all of my filenames to be...

Read More »


Finding Related Messages in Apple Mail

After migrating my company's email away from Gmail a few years ago, I've become firmly entrenched with Apple's Mail.app on the desktop. Everything works great, but I do miss having access to Rapportive's Gmail extension. It's great at providing extra information related to the person you're emailing with. To make...

Read More »


Setting Up NSOutlineView Drag and Drop with Core Data in Cocoa

Last week, I finally got around to building the number-one VirtualHostX feature request – groups/folders in the sidebar. I had put off implementing this feature for years because I never knew quite where to start when it came to Core Data and NSOutlineView. But, with VHX 5.0 coming out later...

Read More »


Categories
macOS Development

Guessing a User's Location on iOS

A few months ago at work we ran into an odd user experience problem. The home screen for one of our iPad apps included a small icon in the navigation bar showing the current weather. Normally it displays the weather for the user's current location or any location they've saved....

Read More »


Categories
iOS Development

Automatically Reposition the iOS Simulator on Screen

If you work with two monitors of different sizes, Xcode has an annoying bug of launching the iOS Simulator partially off screen — forcing you to manually drag it into position using the mouse. It's not that bad the first time, but after a full eight hour working day with...

Read More »


Categories
Xcode AppleScript

Creating a Universal Binary With Xcode 3.2.6

Last week I released a minor update to VirtualHostX. Shortly thereafter, my inbox was flooded with reports of an "unsupported architecture" error on launch. After a quick lipo test I verified that somehow I had managed to build and ship the app as Intel only — no PowerPC support. I went...

Read More »


Unsupported Architecture When Submitting to Mac App Store

For any Mac developers out there who are seeing the following rejection notice when submitting to the Mac App Store: Unsupported Architecture - Application executables may support either or both of the Intel architectures Make sure you verify that any included frameworks are Intel only. You can do this using the lipo...

Read More »


Sosumi for Mac - Find Your iPhone From Your Deskop

Every holiday, between the food and family, I always seem to find time for a quick project. Last year I built the first version of Nottingham over the Thanksgiving break. This year was no exception, and I found myself putting the final touches on Sosumi for Mac after an...

Read More »


Automatically Compressing Your Amazon S3 Images Using Yahoo!'s Smush.it Service

I'm totally obsessed with web site performance. It's one of those nerd niches that really appeal to me. I've blogged a few times previously on the topic. Two years ago, (has it really been that long?) I talked about my experiences rebuilding this site following the best practices of YSlow....

Read More »


Generating Strong, User Friendly Passwords in PHP

For an upcoming project, I needed a quick PHP function that would generate strong passwords. It's an easy problem on the surface, but it has some quirky nuances that appear if you spend any length of time thinking about it. For example, it's not enough to merely pick characters at random...

Read More »


Categories
PHP

Open Source Updates

On this lazy Sunday afternoon I thought I'd take the opportunity to mention a few open source projects I've recently updated. GitHub makes sharing code so ridiculously easy, it's a shame not to call attention to it occasionally in case other people might find something useful. Sosumi 2.0 First up is Sosumi...

Read More »


Categories
PHP Open Source

OpenFeedback Part Deux

A year and a half ago I wrote about OpenFeedback, an open source Cocoa framework for gathering feedback from your users. Initially, it was a sister project to Appcaster, my indie dashboard web app. Since then, Appcaster has grown up and morphed into Shine, but OpenFeedback remained unchanged. Tonight, though,...

Read More »


Shine - An Indie Mac Dashboard

Two years ago, shortly after I released VirtualHostX 1.0, I wrote about Appcaster - a web dashboard for Mac developers I built that manages my application updates, payment processing, etc. With the release of VHX 2.0 and Incoming!, I decided it was time to rewrite Appcaster as the original code...

Read More »


Sosumi - A MobileMe Scraper

Sosumi is a PHP script that scrapes MobileMe and exposes Apple's Find My iPhone functionality to the command line or your own web application. This lets you pull your phone's current location and push messages and alarms to the device. Like my previous blog post that dealt with AT&T's Family Map...

Read More »


Categories
Hacks PHP Open Source

Persistant Location Updates From iPhone to Fire Eagle

Location Based Services are hot. They add an extra layer of usefulness on top of the web sites and products we're already using. The trick is keeping your location updated in the cloud as frequently, comfortably, and securely as possible. Fire Eagle fulfills the security requirement — brokering your whereabouts only...

Read More »


Categories
Hacks PHP

Google Voice Dialer

Last year I posted...

Read More »


Categories
Hacks PHP Open Source

PHP Wrapper for Yahoo! GeoPlanet

Earlier this month I wrote a quick PHP wrapper for Yahoo!'s GeoPlanet API. It's a super useful service for querying geographical information about nearly any place on earth — addresses, landmarks, colloquial locations, etc. Or, as the official description says GeoPlanet helps bridge the gap between the real and virtual worlds...

Read More »


Categories
PHP Yahoo! Open Source

Serving Static Content on Amazon S3 with s3up

I've written twice about using Amazon S3 to host your website's static content. It's a great solution for small websites without access to a real content delivery network. And now that Amazon has launched CloudFront on top of S3, it's even better. But there are still ways we can improve the...

Read More »


Download All of Your Flickr Photos and Sets

iLife '09 was released today. And with it came a much improved version of iPhoto with facial recognition, geotagging, and Flickr and Facebook support. With so many new ways to slice and dice my photos, I wanted to start over with a clean slate and get everything organized in iPhoto...

Read More »


Categories
PHP Yahoo! Photography

Amazon S3 Improvements in PHP-AWS

Two and a half years ago I began working with Amazon Web Services — first with S3 and then SQS and EC2. The code was eventually cleaned up and released as an open source project called PHP-AWS. Since then, it has remained relatively unchanged. Just bug fixes and the occasional...

Read More »


Parse Command Line Arguments in PHP

This afternoon I needed an easy way to upload files to Amazon S3 and set specific headers on them. I've built one-off scripts like this in the past, but this time I wanted to generalize the problem into a reusable shell command. I pulled in some code from PHP-AWS and got...

Read More »


Categories
PHP Open Source

Dial a Phone Number Using Grand Central and PHP

If you're lucky enough to have a Grand Central account, here's a quick PHP class that will login to your account and dial a phone number. This is probably one of the more random bits of code I've ever written, but I think it's useful. <?PHP $gc =...

Read More »


Let Google Do The Work For You

One of the major challenges in web scraping is figuring out which page to scrape in the first place. Here's a scenario: Say you need to pull some information for the film 30 Days of Night off IMDB. It would be great if you knew in advance what the URL...

Read More »


Categories
PHP

Introducing Appcaster + OpenFeedback

Today I'm proud to announce the release of two new open source projects: Appcaster and OpenFeedback. I've been working on them off and on for over nine months, so I'm very excited to finally see them out the door. Appcaster, which I've written about before, is a web-based dashboard for indie...

Read More »


Scraping IMDB With PHP

For an upcoming project, I need to pull in metadata about movies and TV shows — genres, plot summaries, actors, etc. The de-facto source is, of course, IMDB. Unfortunately, they're behind the times and don't offer an API to access their data. (At least not one that I've ever found.) So,...

Read More »


Categories
Hacks PHP

Using Amazon S3 as a Content Delivery Network

[Update: You might also be interested in s3up for storing static content in Amazon S3.] Earlier this week I posted about my experience redesigning this site, focusing on optimizing my page load times using YSlow. A large part of that process involved storing static content (images, stylesheets, JavaScript) on Amazon S3...

Read More »


Holy Crap! Mint Plugin

Here's a quick Pepper plugin called Holy Crap! I wrote for Shaun Inman's Mint software. The idea is simple: it sends you an email alert whenever it detects your site has become popular on del.icio.us, Digg, etc. Think of it as an early warning system. It's easy to add your own...

Read More »


Categories
PHP Open Source

Bank of America RSS Feeds

Bank of America has a great online banking system. It's why I switched to them three years ago. I've often wanted them to provide an RSS feed of recent transactions on my account — I've emailed them multiple times, but no such luck. So, today I finally got around to doing what I always...

Read More »


Categories
Hacks PHP

Managing Exchange Invites in Apple's iCal

For better or worse, most of my coworkers live and die by their Exchange calendars. Unfortunately, as a developer working on a Mac 24/7, there aren't many options for dealing with the barrage of Outlook invites I receive each day. I can either use Entourage which only kinda-sorta-works, or I...

Read More »


Categories
Hacks macOS AppleScript

How To Install PEAR in Mac OS X Leopard

Unlike previous version of OS X, Leopard doesn't come with PHP's PEAR repository installed by default. Luckily, installing is quick and painless. From a command line: curl http://pear.php.net/go-pear > go-pear.php sudo php -q go-pear.php Just press enter to select all the default choices except for the installation directory. For that, use /usr/local. (Thanks,...

Read More »


Categories
macOS PHP

50 States Programming Puzzle

Anders Pearson posted an interesting programming puzzle today on Thraxil.org: Take the names of two U.S. States, mix them all together, then rearrange the letters to form the names of two other U.S. States. What states are these? He found out about it from Mark Nelson who, in turn, heard it on...

Read More »


Categories
PHP

How to Enable PHP5 In Mac OS X Leopard

I've seen a lot of visitors searching for information on enabling PHP5 in Mac OS X Leopard. It turns out to be quite easy. Leopard ships with Apache 2 and PHP 5 pre-installed. To enable PHP simply: Open your favorite text editor and edit /private/etc/apache2/httpd.conf Uncomment line number 114. It should read LoadModule php5_module ...

Read More »


Categories
macOS PHP

foo9 URL Shortener

I was out of town for a couple days last week and had a lot of time to kill at my hotel. Needing something to do I decided to write my own URL shortening service. This is hardly an original idea - TinyURL.com has been around for a long time....

Read More »


Categories
PHP