Skip to content

I AM @FAHRNI

Vesper: A Post Mortem

August 24th, 2016

Rob Fahrni

A wonderful bouquet of flowers.John Gruber: “What went wrong was very simple. We never made enough money. Why we didn’t make enough money, what we should have done differently to make more money — those are complex questions (which I’ll tackle below). But what actually sunk Vesper was not complicated. Even as a relatively popular app at a relatively high price (for iOS), revenue was never high enough. Brent took a job at the excellent Omni Group in September 2014, and from that point onward the writing was on the wall. We could have, and probably should have, shut Vesper down a year ago. But we loved it too much. Or at least I did.”

Brent Simmons: “This is the last app on the App Store where I wrote all (or almost all) of the code. Odds are excellent that there will never be another app written largely by me on any app store.”

It’s hard to make decisions like this. Vesper was the result of a lot of hard work by a small group of dedicated people. Vesper will be missed, by them the most.

The most fascinating part of this entire post mortem from John and Brent is the belief that creating a Mac App first may have lead to success. Obviously these guys know their Mac brethren better than I, but I always thought a subscription model was a better option for them, and I wrote about it in 2015.

I think the idea of a sustainable business is the right way to look at this, but pricing an app at $9.99 isn’t the proper solution. The proper solution is to charge for their “fast, reliable, unlimited sync.” That’s the value, the app is just a way to get to your data.

Obviously there are a few really great companies out there making a go of it but the market has changed so dramatically from the time Brent started Ranchero. At the time the Mac wasn’t nearly as popular as it is today and the App Store model didn’t exist. Sure, you still needed a great product and had to work hard to get the word out, but people still understood the value of software. Today iOS and Mac Apps have been reduced to commodities and commodity pricing. Most people expect free and get it from companies that make their money other ways, including services, which is why I think the service is the most valuable component. Does it mean you should only do services and not native clients, no. The client side provides the great experience and the service opens the door to the magic of data flowing from one point to another. Without both sides you can still have a great experience but it may not be as great as it could be.

Thanks John, Brent, and Dave for giving us Vesper.

iPad as MacBook Pro Replacement

August 9th, 2016

Rob Fahrni

On a Slack channel some friends were having a discussion about using the iPad as a daily driver replacement for a MacBook Pro. This is how I feel about the idea. Is it an impossible notion? No, not at all, but it would have to be a true replacement, it would have to change to fit me, not the other way around.

“If I could get an iPad Pro (9.7) that was as powerful as my 15in MacBook Pro, could run Xcode fine, and would detect proximity to a full size keyboard, monitor, and mouse and let me use them? Sign me up.

Until then. Can’t use it as a daily driver.”

That’s it in a nutshell.

Post Mac Apple

August 6th, 2016

Rob Fahrni

Recently Vivek Wadhwa of The Washington Post wrote:

Apple should release a version of iOS for non-Apple devices. This suggestion will seem like heresy to the brand’s loyalists, but it may be necessary for the success of the company.

Imagine those Samsung, LG, and Xiaomi smartphones having an original Apple operating system on them rather than the imitations they are presently running. Offered the choice, users would upgrade in droves. And those users would download new applications and sign up for Apple’s subscription services, giving the company a cut of everything they purchased, as well as valuable data and marketing opportunities. Google’s Android business would finally have a formidable rival.

First off, I don’t think Apple is in bad shape because they own less of the mobile market than Android. In fact, they make more money than all Android devices combined. So the thought of being a formidable rival is kind of moot, but that’s not what I wanted to write about, just an observation.

I think macOS would be a much better OS to OEM. Why? Well, Apple is paying so much attention to iOS based devices, the iPhone in particular, they’ve ignored their laptop and desktop computers for a very long time. In fact most of their computers are rated Don’t Buy by Mac Rumors.

Mac Rumors

Mac Rumors

Of course they’ve tried this before. Before Steve Jobs returned in 1997 Apple had OEM’d Mac OS to a few partners. Those partners were doing fine at the expense of Apple. When Jobs returned it was one of the first things he killed so Apple could focus on their core business, the Mac. Fast forward 20 years and Apple is as unfocused as ever. They’re building all kinds of stuff looking for the next iPhone. Here’s a hint Wall Street, I don’t think you’ll get another iPhone-like success for many, many, years.

Anywho, back to macOS on other hardware. Since Apple hasn’t shipped new Mac hardware for professionals in a long time professionals have either created their own solutions or switched to Windows or Linux. Yes, people are switching to Windows because their Macs are not up to the task. Those of us that live on the platform feel strongly about it. I love using the Mac and macOS to do my work but most people just see it as a hammer. They don’t have an attachment to the OS or the hardware. If you can get a PC with Windows that blows the doors off a Mac Pro and your production software runs fine on Windows, why not switch?

What if there were another solution to the problem? What if Apple selected a single OEM and allowed them to create high end hardware that runs macOS? That’s what I’d prefer to OEM’ing iOS to other mobile phone makers. The professional market may appreciate it too.

I know the iPhone and iOS are killing it revenue wise. That idea seems to be the driving force behind Mr. Wadhwa’s piece, but it would be really nice to have alternative hardware designs that don’t focus purely on thinness and lightness. I still love my SUPER FAT 15in 2011 MacBook Pro. It’s perfectly suitable for people creating iOS Apps or small Mac Apps. Folks editing Audio and Video or making movie magic the likes of Pixar and ILM need powerful computers. I’m sure they’d appreciate faster Macs every year or an OEM that could deliver faster, specialized, expandable, repairable, Mac alternatives running macOS.

Twitter + Tumblr

August 6th, 2016

Rob Fahrni

A wonderful bouquet of flowers.Imagine, if you will, Verizon purchasing Twitter now that they own Yahoo.

I don’t really want that, but at times I’ve wanted Twitter to have the ability to go beyond the 140 characters it allows. What if Verizon bought Twitter then did an interesting integration between Twitter and Tumblr so anything longer than 140 characters became a Tumblr post with a really nice embed for the tweet? Maybe Twitter could adapt Tumblr’s post types?

While they were at it they could use Tumblr for photo storage and allow at least a little bit of markup in the Twitter stream. I’d start with italic, bold, and native links. Oh, I’d also allow folks to use Markdown (yes, this is the Canonical Markdown) as an editing choice. Maybe just provide a rich editor that supports italic, bold, and links and a basic text editor for those of us that would prefer Markdown? The point is it would be nice to have some very basic formatting for a tweet.

Video has become so important to the web. Making it easy to record video, store it on Tumblr, and adding an embed to a tweet would be quite nice. It could be the next evolution in video from Twitter. First we had Vine, then Periscope. Tumblr could be the final version. It could complete with Facebook’s Live Video.

It feels like there is an interesting product in that mix somewhere.

Big Co Podcasting

July 17th, 2016

Rob Fahrni

This morning I was listening to Recode Media’s show with Jacob Weinberg of Slate. I was listening mainly because I agree with Mr. Weinberg when he says “I think this guy’s a menace and a danger to democracy”, but that’s not what I’m going to write about.

AHHHHHH!There were two things that stood out in the interview. First off Mr. Weinberg mentioned he was working with a company called Panoply, a podcasting network. That’s great, we need more podcasting networks, but something he said didn’t sit well. Mr. Weinberg said part of what Panoply was doing was “tracking and advertising”. It sounds like this is going to become a reality. While checking into Panoply I also discovered ART19. Both sound like they’re creating systems that report back to them. How much of the show you’ve listened to, did you fast forward, rewind, or skip over the ads. It looks like ART19 has a way to update ads in a podcast episode so they never go stale. If this is something they can do using open standards, more power to them. If they have to create closed systems to pull it off, that’s not good for anyone, except them of course.

Another thing Mr. Weinberg said was “Apple was the gateway to podcasting.” This simply isn’t true. Apple provides a free podcast directory service built on open standards. Apple is not a gateway to podcasting.

To make a podcast is really, really, simple. You record something, upload it, and make an RSS feed so people can subscribe and you’re done. That’s the 20,000 foot view, but that’s how you do it in a nutshell. You don’t need Apple to publish a podcast. Let me say that again. You don’t need Apple to publish a podcast. You need some shared drive space; Dropbox, Google Drive, your own web host, any number of companies can provide you cloud space to keep files and share them.

Having Apple’s Podcast Directory is super nice. They supported podcasting long before it was popular and chose to use open standards, like RSS. RSS supports namespace extensions, so Apple created their own. They used an open standard and an open extension mechanism to create their directory.

Knowing that, can you call Apple the gateway to podcasting? No. Definitely not. Anyone can create their own podcast directory using RSS feeds. In fact, others have, like iPodder. It just so happens Apple’s directory became super popular once they had a built in audience due to the popularity of the iPhone.

Having said all that. If you want to get into podcasting, go for it. You will probably want to list your podcast on a few different directories, including Apple’s, but that’s something for you to decide. Just make sure you know what you’re getting into.

One Photographer’s Take

July 15th, 2016

Rob Fahrni

Dave Rogers: “Allow me to vent my spleen here briefly on what an utter piece of crap Apple’s Photos app is on iOS, and the Photos iCloud architecture. The MacOS app is slightly better, but it’s still crap too.”

RibbitBeing a fan of Apple can be frustrating in the modern era. It’s no longer focused on creating the best tools for professionals like it once was. We’ve entered the 800lb Gorilla phase in Apple’s life. They’ve switched focus to creating the best experience for the lowest common denominator, they are now the everybody company. This isn’t a bad thing overall, it’s just different. Apple still creates the best integrated hardware and software experience on the planet, but it’s aimed squarely at the masses, not professionals or, as in the case above, power users. We’ve seen this with the abandonment of Aperture and the lack of hardware upgrades in the Professional Mac hardware lineup (the flip side to this is my 2011 MacBook Pro is still plenty of computer for iOS development.)

The land rush that has been iOS App Development is beginning to lose its luster. The market is full of crummy games that milk users for cash to buy their way past levels. That market is really designed for the attention deficit. I’d love to find the time, money, and energy to focus on the Professional Mac using market. I really believe there is something to be had there as a developer and a user.

MacBook Pro Wishlist

July 15th, 2016

Rob Fahrni

I’m not a crazy spec guy any longer. But Apple’s continued obsession with making everything thinner and lighter kind of bothers me. The thing that really pushed my BS-O-Meter was something posted by John Gruber.

“Any laptop thick enough for an Ethernet port is too thick.”

countSmallWhen I read that I thought “Too thick for who?” Don’t get me wrong, I love John’s work. I’m a fan of Darning Fireball and The Talk Show. He’s one of the top Apple technology writers in the world, if not the best. But that quote feels empty, like a cheap line on a marketing brochure. Apple’s obsession with thinness smacks of razor manufacturers that hail the creation of a razor with five, count ’em, five blades! Not one, not two, not three, not four, but five, five blades!

I’m composing this on MacBook Pro (Retina, 15-inch, Mid 2014.) It’s a great computer, it’s very thin, I don’t need a thinner computer. I develop iOS Apps for a living and this machine is plenty fast enough for my use. It’s not like 20 plus years back when I was writing Windows Code on a 486 with 4MB or RAM. In those days it took so long to compile we’d get “build wander”, you know, you wander around long enough for your build to complete. Thinner doesn’t matter to me. I’d prefer something else.

ULTIMATE POWER

What I do want is not something Apple typically gives us. A powerful computer I can easily upgrade. It would be nice to get a new MacBook Pro in the Fall with the best CPU, GPU, memory, and SSD money can buy. A year after getting that lovely new beast it will be old and crusty (at least for a lot of people.) Wouldn’t it be nice if you could crack the case open and add RAM and possibly a new CPU? For me, the answer is yes, that would be really nice.

Do I expect to get it? No, I don’t. My only hope is they don’t give it the horrible tapered look of the MacBook Air.

When you hear “Thinner and lighter” think “Five blades instead of four.”

Game of Thrones, Season 6, Episode 10

June 26th, 2016

Rob Fahrni

  • Young guy gets star carved into his forehead
  • Upsets old guy
  • Kid held back by knight
  • Lady with short red hair drinks wine
  • Old guy gets stabbed to death by kids
  • Young kid with star in forehead gets stabbed by child
  • Wine cellar full of barrels with antifreeze in them
  • Antifreeze blows up and destroys giant building
  • Young king slayer asks old king slayer, Mr Filch, why they need him
  • Young guy is let into big library
  • Lady tells dude they burned someone at the stake
  • Old guy pissed girl was killed
  • Lady wants to die
  • Young man lets lady go. Tells her to ride south
  • Old guy threatens lady, she rides off in the snow
  • Young man and young lady talk about a bedroom and trust
  • Old woman and young woman talk vengeance.
  • Ex Machina lady talks about marriage to dude
  • She blows him off
  • Angry Elf talks to Ex Machina lady
  • Ex Machina lady gives angry Elf a pendant
  • Young servant girl slashes Mr. Filch’s neck. He dies.
  • Dude talks about sitting on the iron throne with lady at his side 
  • Zombie looking dude drops off kids in forest
  • Tree has a face with bleeding eyes
  • Kid touches tree face has dream of young woman dying. Blood everywhere 
  • Whispers into mans ear
  • Man takes baby
  • Young man and lady talk to hall full of men talk war
  • Child shames other men
  • Shamed men grow a pair
  • Dude on horse arrives in city where antifreeze explosion occurred. Looks pissed
  • Lady with short red hair is named queen. Dude looks unhappy
  • Bunch of ships sailing
  • Dragons fly by
  • The End

My Watch

June 12th, 2016

Rob Fahrni

I’ve worn my Apple Watch Sport (Darth Vader Style) every day since Father’s Day 2015 and I absolutely love the thing. I didn’t expect to own one quite so quickly, but my daughters and wife decided they’d gift me with one. It was a wonderful, unexpected, gift.

After a few weeks with the watch I decided it wasn’t worth owning if I didn’t wear it like any other watch I’ve ever owned. That means keeping it on when I’m working in rough environments, getting it wet, whatever. I have a few watches in my collection. Six in total. None of them are expensive watches. I’ve always bought watches with link bracelets and every one I’ve every one of them is broken where the band attaches. I broken them all while doing something a bit rough. Mechanically they’re all fine. They just need replacement pins for the bracelet.

As I was saying. When I got the new Apple Watch I eventually decided I shouldn’t baby the darned thing even though it’s terribly expensive, I should wear it like any other watch I’ve ever worn or why have darned thing?

To that end it’s been submerged in water a lot and banged around while working on bikes, cars, and my yard. I know, nothing terribly brutal, but it’s held up quite well.

A while back I wore it while cutting down a dead tree in our yard. I wish I had taken a picture of it before wiping off the face. It was covered in sawdust and dirt. Before I thought to grab the picture I wiped it off to check the time. This is how it looked.

Sawdust Watch

Sawdust Watch

A couple weeks back I was working in the yard. It’s time to turn the sprinklers back on and I was doing repairs in our front and back yard. When I got to the back yard I had a sprinkler that was busted off under ground, so I had to dig it up to repair it. As I was working on it I happened to completely submerge my watch in an icky, muddy, mess. This is what it looked like afterward.
Muddy Watch

Muddy Watch

When I showed this picture to my brother he was surprised it survived. I wasn’t, but I’ve been beating it up for quite some time and it’s bee terrific.

When I was finished with the sprinkler repair all I did was pull off my watch and rinse it off under the garden hose. When all was said and done it worked perfectly and looked as it did before caking it with mud.

Clean Watch

Clean Watch

Oh, and yes, I’m still using a green iPhone 5c as you can tell by the reflection in the watch face.

Overall I’m really pleased with the durability of my Apple Watch. Hey, is there a web site, or web sites, that feature Apple Watch action shots? If you know of any, drop me a line at rob.fahrni@gmail.com or leave a comment. Thanks!

What I want in watchOS 3.0

So, what would I like to see in watchOS 3.0? Simplification and performance improvements. I’ve written before that I use very few Watch Apps — two in fact; Dark Sky and Beer Timer. I’m not counting Apple’s apps in that. I really like glances and complications. I’d love to see apps embrace those two things in particular. I use the Dark Sky complication on my watch face, you can see it in lower left of the pictures above.

Performance, performance, performance. The one downside to launching an app is how long it takes to startup. When I tap on the Dark Sky complication it takes so long to load my watch face will often turn off. That’s clearly no good. I’d like to see that improved. At the very least keep the watch face on until it’s loaded up and give me time to view it.

Another annoying thing. When I bring the watch up to look at the time it’s off most of the time. That’s pretty frustrating. It means I have to tap the face with my other hand. If that could be sorted out it would make the watch that much better for daily use. I typically have 50% batter life when I go to charge it at night, so batter life is not an issue. Figure out a way to light the display more often.

What’s the one thing I want more than any other thing? Custom Watch Faces. I would be fine with Apple requiring a stringent review process for custom faces. I don’t want one that misbehaves and sucks batter. Come to think of it I’d be fine with that if it looked extremely cool! Let me decide which faces to use. I bet they would be the most popular item in the Watch App Store if you did it.

I’d love for someone to make a Dumbledore Watch Face! I’d have that thing day one! Yes, I have a pocket watch with this watch face. It’s a work of art.

Here’s hoping we get simplification, performance, and custom watch faces in watchOS 3.0.

Old C++ Code

May 27th, 2016

Rob Fahrni

I was inspired by a recent post by Brent Simmons to write about some ancient C++ code I wrote back in the min-90’s. At that time I was just learning to develop Windows applications in C and C++ was just starting to get some traction, not unlike Swift in the Mac and iOS community today.

When you created a Windows application you’d have to write a WindowProc (Windows Procedure) that would process all messages for a particular window. A Window Proc would receive a message and other parameters. You’d switch on the message and the WPARAM and LPARAM parameters would contain other information specific to a particular message. It was well documented, but it was quite ugly.

Believe it or not this is how a lot of your favorite Windows applications were originally written. Giant switch statements that dissected two other values to determine how to respond to different types of messages.

When I started learning C++ I was trying to find a way to create a Window Proc that didn’t have to implement every Windows message in the system, there must be thousands of them. Could you imagine a base C++ class that responded to every Windows API message in the system? I can’t. It would be a real mess to deal with.

It took me quite a while to come up with a way to do it. I happened upon the answer in the C++ FAQ. This would allow me to create a base class that provided one Window Proc that would look in a dispatch table (a map) to see if the Windows Message was handled by the Window in question.

Here’s what it looked like. I hope this gets the point across.

When you implemented a Window Proc class you would derive from a base class and provide it with a message dispatch table (at the top of the above gist.) The dispatch table would direct the base classes Window Proc to call the correct handler for a specific message.

Notice that this Window Proc is a straight C function. That’s how the Windows API operates. It’s a C based API, but it provides a mechanism to attach user provided data to a Window Procedure. That’s how this operates. When the Windows WM_CREATE message is sent it includes a this pointer to derived Window Class, which can be looked up later based on the HWND identifier.

In the gist above the code that calls pWindow->DispatchMessage knows how to look at the dispatch table and direct the message to the appropriate pointer to a method.

The code that knows how to send a message to a particular method is (this->*pHandler)(wParam, lParam). This is dereferencing a pointer to a method. All methods have the same signature, which is consistent with how the Windows API works.

Will Code C++ for Food

By the way. This code still builds and runs with up to date versions of Visual Studio on Windows 10. A lot of this code was written in 1995 and has been tweaked over time to keep it up to date with changes to the Windows API.

As I’ve said before, old code never dies.

If you’re feeling really brave you’re welcome to grab my crusty old C++ library and build the simple sample application on your Windows box. Please note, the code is provided as is without warranty, expressed or implied.