About MeI'm super passionate about what I work on. I stay away from working on things that are hard to be passionate about. Over the years, I've learned that nothing is more important and satisfying than making the customer happy. Teamwork, testing, focus, learning, simplicity. These are all spokes in the happy customer wheel. These are the things I've mastered. These are the things I can bring to your project/team in spades.
AI / Chat Bots
Facebook Messenger Bot
This Facebook Messenger bot asks for ingredients and makes recipe suggestions based on the users responses. Responses do not need to be structured. As long as the user mentions an ingredient and a positive or negative sentiment, it will return recipes that include or exclude those ingredients. "I really love artichoke" will look for recipes with artichoke. "I'm allergic to peanuts" will return recipes without peanuts.
A Slack chat bot I built using Go. Domain is workplace acknowledgment. Can handle many different tasks, including asking surveys, pulses and propping getting team members talking positively about each other. Functionality also includes mentioning team members, communicating results to an API, and handling edge cases like preventing a user from mentioning a channel when they didn't intend to.
CalveticaCalvetica was the first 3rd party calendar app on the App Store. I built the first version as a personal project with a friend in 2010. Over the years it has done $550,000 in sales. At one point it ranked #50 in top paid apps. We invented infinite scrolling month view that you now see in the default Calendar app.
Day OneI worked as an employee on Day One, the iOS and Mac App. Day One is massively successful and the Mac App won an Apple Design Award.
EventBoardYou'll find EventBoard on iPad displays outside the conference rooms of tens of thousand of companies including Uber, Dropbox, Twitter, Stripe, Slack, Yelp and Airbnb. I did the "Find a Room" feature on the displays and later co-led the overhaul of the authenticated front-end in Ember.js. I emphasized testing and set up a deploy pipeline that never pushed broken code.
Objective-C / Swift
|Touch Forms||The forms framework that should come with UIKit|
|Fake Events||Allows you to add lots of test event data to an iOS simulator or device using EKEventKit framework|
|Xcode Plugin||An Xcode plugin for aligning code so it's more readable.|
|FamilySearchCocoa||An easy to use library for interacting with the FamilySearch.org API on iOS or OS X|
|AutoKhan||Auto plays Khan Academy videos one after another.|
|Big Splash tvOS||Unsplash Client For Apple tvOS|
|MTAnimation||Animate UIView with 25+ timing functions. (Bounce, elastic, exponential, etc.)|
|MTPDF||Objective-C PDF objects. Doing my part to help us stay out of the headache that is Core Foundation.|
|MTPocket||Cocoa Web Requests|
|Jumper||Time and date library in Swift (Work in progress).|
|MTGeometry||An extension to Core Graphics Geometry. Intersections, scaling, etc.|
|MTDates||A thread safe date calculation library with all the date functions you'll ever need.|
|MYSForms||Easy forms for iOS|
|MYSRuntime||Obj-C Library that makes runtime self-inspection and class modification dead easy.|
|MTStringAttributes||Easier way to create an attributes dictionary for NSAttributedString|
|MTQueue||Add blocks to queues in a super terse and readable way!|
|MTPencil||Draw animated lines (like an invisible pencil) with Core Graphics. (Prototype, will get much better).|
|MYSCoreText||An Objective-C wrapper around Apple's Core Text framework.|
|MTTimer||An Objective-C timer that restricts firing to a time range. If it's called BEFORE min, it waits for min. If it's called AFTER max, it's called at max.|
|MTFittedScrollView||A UIScrollView subclass that resizes itself to fit around its content.|
|EKEventToiCal||Returns a string in iCal format for an EKEvent object.|
|Flunk||A gem for testing Ruby on Rails web APIs by simulating a client.|
TeamsI love to work in a team and the strategies that help a team work efficiently. As we see in large corporations, 2 heads aren't always better than 1. When done correctly though, 2 heads can be as good as 3.
TestingWhen I first got started programming, I remember the anxiety of pushing code to production. Since then, I've learned to love testing and the safety and peace of mind it provides. There's no greater feeling than seeing all green with 100% test coverage. Pushing to production with confidence is very satisfying. I also really enjoy the challenge of finding ways to test things that are particularly hard to test.
BusinessI love to study business and, in particular, startups.
Solution: To be a successful business, there has to be a real problem that people want a solution for. Even if they don't realize they have the problem until they see the solution.
Execution Provide a solution for which the experience of using is better than experiencing the problem. Hopefully, much better.
Distribution Spend less money finding, converting and fulfilling a buyer than you make from that single buyer.
Obviously, I love to help the businesses I work for execute an amazing experience that makes customers not only keep coming back, but love the product emotionally.