Skip to content

I AM @FAHRNI

Windows 10 is a great alternative

November 20th, 2016

Rob Fahrni

Marco Arment: “Microsoft is boldly experimenting with PC hardware, but Windows and everything around Windows is woefully inferior to macOS and the Mac software ecosystem. Even if Microsoft did everything right, it would take Windows at least a decade to catch up — and they won’t do everything right.”

Bringing in the HarvestI doubt Marco will see this, and this is definitely not an attack, this is something I’d say to my friends. In the nicest of ways, to say it would take Windows at least a decade to catch up, is a bit hyperbolic.

I’m a fan of Microsoft’s Windows, I have been for years. It helped me get my start in this industry. I switched to the Mac around 2006 and haven’t looked back, I really do love the experience.

If we’re talking about performance, which seems to be the point of your piece, keep in mind that Windows can run on all kinds of hardware. Windows 10 can support up to 256 cores and 512GB of memory. That’s pretty nice. We know that some high end video production shops are abandoning the Mac in favor of Windows boxes because they need the horse power, another great example of why we need a new Mac Pro. But Windows as a tool of choice is very viable.

The development tools on Windows are quite good. Visual Studio is a great IDE. Microsoft’s .Net has become the standard way to develop for Windows, especially for backend services, but you can create beautiful client applications with it all the same. If you’d like you can still write C++ code to the Windows API, like Photoshop or the Microsoft Office apps.

I’m not sure what Marco’s primary complaint about Windows is? Is it just the general usability? Is it a stylistic thing? Maybe he can’t easily run his favorite tools on the platform? That’s a really big deal. I’d love to hear him go into detail about the issues with the platform.

I tell folks all the time. Microsoft’s NT Kernel is a beautifully designed Kernel. It can, and does, underpin different hardware. When it began life it ran on Dec Alpha, MIPS, x86, and eventually came to the PowerPC. Since that time the other architectures fell out of favor and it mainly became an Intel based platform, but it still powers other architectures.

In the end I’d never attempt to tell someone which platform they should choose, it’s all a matter of personal preference. Apple and Microsoft both provide great solutions in software and hardware form. This is great for us, the customer.

Passion Project: Mixing C++, Objective-C++, and Swift

November 20th, 2016

Rob Fahrni

I know a lot of folks have had to go through the process of bridging to C++ so you can use it from Objective-C or Swift. In my case I’m using it from Swift, so I thought I’d share what the middle Objective-C++ layer looks like. If you’ve done any Objective-C it will look like straight Objective-C, until you look a little closer. That’s when you’ll notice a C++ namespace, new, and delete statement. This code is a straight passthrough to the underlying C++ code — it’s here so Swift code can communicate with the C++ code.

Here’s the code that bridges to our Creatinine Clearance calculation.

You’ll notice a class called PKMConvert that has a class method called genderFromPKMGender. I created a set of mirror enums. One on the iOS side the enums use NS_ENUM syntax, on the C++ side they’re straight C style enums, so this code converts between the two. It’s just a simple mapping.

Another thing you’ll notice is I’m still using “old” C++ syntax to create and destroy objects. I’ve been thinking about updating the syntax to C++11 so I’d use unique_ptr instead. We’ll see if that happens. It’s not a big deal.

Something I’ve been mulling over is releasing the entire PKMath C++ Library as an open source project once I have it working for iOS/Mac, Android, and Windows. I don’t know that it would be overly useful for anyone, but there you go.

Since I haven’t actually written any Swift code in the new RxCalc to use the Objective-C++ code I thought I’d share one of my unit tests for the Creatinine Clearance example above.

Here’s how the different layers look from 30,000 feet. I like pictures, don’t you?rxcalc2layers

Passion Project: Update One

November 20th, 2016

Rob Fahrni

I’ve made a couple runs at the freelance iOS developer life. The first time things went really well, but I was offered a gig by one of my clients and it too good to pass up. A couple years into that position — leading a team developing a Windows video decoding SDK — I got the itch to go back to iOS and the Mac. Around the same time our oldest daughter decided she wanted to move back to California. I took a week off to help move here, and think on this idea of going back out on my own. I decided to give it a go. This time around I failed, miserably.

My attempts to go indie have always been predicated by a desire to develop a product. I thought I could bootstrap my indie life doing freelance work. This was definitely a mistake. Once you start doing client work you’re on that hamster wheel of how do I get my next client? Drumming up work is difficult. I failed at that and I’m also a slow developer. I don’t crank out code quickly, which you need to be an effective freelancer. Get it done so you can move on to the next deal.

When I finally found a full time job I decided I’d work on passion projects and see how that worked out. I’ve had many starts and stops on various projects, but I keep coming back to RxCalc. It was my first iOS app. My brother, Jerry, and I worked on it together. Jerry is a clinical Pharmacist and wanted an iOS app to help him do Pharmacokinetics Calculations. He did all the math and designed the workflow and I turned both into Objective-C. We shipped in June 2009 and RxCalc went live in the store July 4, 2009 (nice bonus.)

I’ve been slowly working on a rewrite of RxCalc. My first iOS app was messy, but it has proven stable — I haven’t had a crash report since the 1.0 release in 2009 — but the code is cringeworthy. I’ve cleaned it a bit over the years as well as shipping a 1.2 release that included some new functionality. That release included much cleaner code, but I’ve wanted to add IAP to it for additional calculation models and port it to Android, and maybe even a Universal Windows App.

When Jerry and I originally started developing what was to become RxCalc it began life as a Palm app in C++ and the Pharmacokinetics math library was portable C++. It built on Palm, Windows, and iOS — it built first time on iOS with zero change. When I was learning Objective-C I decided it would be best to port PKMath from C++ to Objective-C. That was really easy. It didn’t take long at all.

Here we are in 2016 and I decided I’d better get started with my grand plan to make PKMath portable, again, and build for iOS, Android, and Windows. Why? Just because. Remember, this is a passion project. I don’t make any money on RxCalc, but I do have a plan to change that with this new version.

Will write C/C++ for foodThe new C++ PKMath library is written. I’ve built a small layer of Objective-C++ over the top of it so I can write the new UI in Swift. The old RxCalc was 100% Objective-C, the new one will be a mix of C++, Objective-C++, and Swift. That sounds kind of weird, but there is a means to an end.

Android is my next target. I’ve started working on JNI wrappers around the PKMath library. This has proven to be extremely difficult. It’s going to take some time to wrap my brain around how this all works. I’ve managed to write a simple sample that uses PKMath to calculate an Ideal Body Weight and display it in an Android view, but that’s as far as I’ve gotten.

As for Windows it’s the thing I’m most familiar with. I’ve spent most of my 25+ years as a developer building Windows applications. The downside is I’ve never built a Universal Windows App and I’m not sure how to properly build PKMath for it. I’ll figure that one out and I imagine it will be as easy as wrapping C++ in Objective-C++.

Progress is slow and I’m easily distracted. We’ll see how it goes. More updates to come.

P.S. — I find Swift to be the most enjoyable language I’ve ever used. Doing the new RxCalc UI has been a lot of fun.

Project Management

November 19th, 2016

Rob Fahrni

Signal v. Noise: “Once a six week cycle is over, we take one or two weeks off of scheduled projects so everyone can roam independently, fix stuff up, pick up some pet projects we’ve wanted to do, and generally wind down prior to starting the next six week cycle. Ample time for context switching. We also use this time to firm up ideas that we’ll be tackling next cycle.”

Get your tools!One of the benefits of having a successful product is not having to hustle work. I always loved this about my early days at Visio. We were on a one year cycle. We would release a version, spend the next few months going over what was next, working casually on fixes or new features, then we’d launch into building the next version. It felt perfect and as a company we were always on time.

I love what Basecamp is doing. They’re obviously a highly capable team that understands what they’re able to deliver in a six week cycle. A lot of us attempt to practice Scrum and fail miserably at it, so we never know how long something is going to take. This team is actually pulling it off with their own “methodology”, and that’s all that matters.

I would encourage you to read the entire article. It’s full of all kinds of little gems.

Swift, on Windows?

November 2nd, 2016

Rob Fahrni

Brent Simmons: “What if — and it’s a big if — Microsoft made Swift a peer with C# and provided some good app frameworks?”

When I published What Ifs and Why Nots I hadn’t read Brent’s piece. He’s actually asking the same questions. What would it take to pull Mac developers to Windows? It would take more than Swift, I’m pretty certain. In a Microsoft .Net world where would Swift fit? Would Microsoft just create a version of Swift that works with the .Net garbage collector, or would it be a compiled language? I’d bet on the former given Microsoft’s all-in on .Net and garbage collection.

The bigger questions is Frameworks. Let’s just say Microsoft does a .Net version of Swift. To create a Windows application you’d have to embrace WinRT. You could use your knowledge of Swift, but you’d have to learn a completely new way of writing applications.

Think about all the things Foundation does for you. If you were to move to Windows and Swift on Windows was all .Net based you couldn’t even reuse your non-UI based classes. You could, of course, reimplement your shared classes to use .Net stuff and maintain your interfaces, but you’d have to do a considerable amount of coding to fit on the platform.

Maybe you don’t make Swift a .Net language. Maybe you bring Foundation over to Windows using the Windows API, which is very different from a development standpoint, and not the preferred way to code new apps on Windows. This could also work. You would have a compiled Swift that could natively link to Foundation, which in turn uses Windows API’s to do any platform level stuff. You could then reuse some of your code investment, like those shared non-UI classes and work on creation of a native Windows UI for your application.

Also, of note. Microsoft already has a great set of Frameworks to use, just use them. It would be like coming to the Mac from Windows and saying “Apple needs to provide some good app frameworks.” They already do, you just need to learn to use them to make the best experience for your users. That is the biggest hurdle for any developer.

Learning the new frameworks and a new OS can be quite daunting. When I came to iOS from doing Windows and Linux based UI’s (using Qt mind) I fought with Interface Builder and decided I had to do everything in code because I couldn’t figure it out. Later I made my peace with it. I still think Visual Studio is the better development environment, but Xcode is a very close second, maybe tied, at this point.

Eat your own dog food.I’m kind of a knucklehead. I spent almost 20-years doing native Windows API based applications so I was very comfortable with Visual Studio and that entire ecosystem. If I can learn to write iOS Applications and embrace the tools, then anyone doing Mac or iOS apps could learn to do Windows based stuff today. Just embrace it, don’t try to force your tools into the platform. Now, if you have some code that can easily come over, you might as well use it, but we all know the best apps feel right on the platform. Embrace the platform.

The new Surface Studio is the first bit of Windows based hardware that has excited me this much about the platform in a very long time. I’d love to work on a new design app for Windows, if I could. Maybe even one that works on both platforms; Windows and Mac. Why not? I mean besides time and money, what else does one need to do something so ambitious? 😀

What Ifs and Why Nots

October 29th, 2016

Rob Fahrni

Apple announces new MacBooks to the world this week and geeks aren’t overly impressed. It’s OK. My gut reaction wasn’t overly positive, but what the heck did I expect? There were enough leaks in the press to warn us about what to expect.

As a Professional Software Developer I don’t need a thinner, lighter, laptop with an integrated touchscreen on the keyboard, but it also doesn’t cause any damage to have those things. I am definitely more interested in having a great piece of hardware that serves my needs.

My Needs

Will write C/C++ for foodI’m not obsessed with the looks of Apple products. They are beautifully designed. I’m a bit more pragmatic. I want my hardware to be fast and dependable. Apple makes fast and dependable hardware. I will never understand their obsession with “thin and light” but that’s ok. It’s their thing.

In the end I’ve been very happy, and I’m still happy, with my late 2011 15in. MacBook Pro. Work provided me with a 2014 15in. MacBook Pro and I can imagine it will work just fine for years to come. At some point down the road macOS will outgrow the hardware and I’ll upgrade. Until that day, I’m fine with what I have.

What If?

It’s too early to tell but what if Apple is in the middle of a transformation from macOS based devices to completely iOS based device? If we were to base that question solely on this weeks announcements it might be a completely reasonable guess, but what if they’re not done announcing new macOS based devices?

It sounds like, based on recent reporting, that Apple is out of the display business. I know that’s sad for a lot of folks, but for me it adds a ring of truth to the idea of Apple moving away from the desktop. Based on that one rumor I half expect Apple to mothball the Mac Pro, Mac Mini, and iMac. What if they do that? It’s fine, they don’t need to make desktop devices any longer. They’re moving to a completely mobile world driven by iOS and the iPhone. Yes, people do real work using just their iOS devices.

That brings us to this; Apple will continue to push the iPad as a professional device for most people. They concede the desktop to everyone else, including Microsoft (who owns the productivity worker space anyway.) That leaves them with the consumer and prosumer markets, which is a perfect fit for them.

Where does that leave professional developers, designers, illustrators, and artists of all kinds? Like I said before, I don’t need a Mac Pro to do my job, but some people do, or at a minimum believe they do (which by extension means they do.) We’ve seen some cases in the high end video production world where shops have abandoned the Mac in favor of more powerful Windows based computers. Designers, illustrators, and artists have the option of the iPad Pro, MacBook Pro, and Microsoft’s recent entrance into this market with Surface Studio. Will a lack of a Mac desktop offering hurt these professions? In some ways it probably will, in others I honestly believe folks will adapt if the software can meet their needs head on. As far as high end workflows go, I’m not so sure. What do folks at Pixar use? Are they completely tied to their Macs or do they depend on Cintiq’s for their daily workflow? I don’t have the slightest clue, but this is where Apple could really disappoint a professional market. I’d love to hear from someone inside Pixar, ILM, Disney, or DreamWorks to see how this could effect them. Remember, outside of the software development and power user communities, most people see their computers as a carpenter would see their hammer. It’s an essential tool and they may have a preference, but a compute is a means to an end.

Why Not?

AHHHHHH!If Apple decides to abandon the desktop in favor of an iOS world, why not create a hardware specification to allow licensed third-party hardware vendors to sale computers with macOS? At a minimum spec out supported hardware configurations and allow people to buy a macOS license to run on their Hackintosh computers.

Another controversial why not. Why not port Xcode to Windows and offer an alternative, lesser expensive, choice to developers that could also let people buy super fast computers to code with? I know, it’s a crazy idea, but as of this writing I’d prefer a Windows computer over an iPad as my primary development computer if I couldn’t get updated desktop or laptop hardware directly from Apple.

Since Microsoft is moving to LLVM why not get Objective-C and Swift running in that environment and provide the iOS simulator on Windows? This also seems like a decent alternative to an all iPad development environment.

All crazy ideas, I know, but things I think about.

Then again, Apple could surprise us in the spring with a brand new Mac Pro and iMac that blows all these crazy ideas right out of the water.

Hello, Surface Studio

October 28th, 2016

Rob Fahrni

Hot buttered popcorn and a movie, ahhh!Not to be outdone by Apple, Microsoft announced Surface Studio a few days back. It looks like a winner.

Ars Technica: “And as is Microsoft’s habit, there’s human interaction novelty, too, with the Surface Dial. This is a Bluetooth spinner and clicker with haptic feedback. Spinning the wheel can invoke either system functionality (such as changing the volume) or application features (such as the amount of red, green, or blue used by the current paintbrush in a painting app); there’s an API to allow third-party software to provide Dial-specific capabilities. Its unusual feature is that it can be used off the screen, or, when in studio mode, on the screen. When used on the screen, the Surface Studio knows exactly where the dial is and can draw radial menus or other controls around the device.”

JavaScript Scene: “That’s a huge amount of gorgeous screen real-estate for only $2,999. And it’s a touch screen. And it has an amazing interactive dial that you can place directly on the screen. You can draw on it with pens.”

CNet: “Really, though, this is all about the Surface Dial, a wild new idea that instantly excited people from its on-stage demos. The metal dial can be an on-screen tool as much as a desktop one, and looks like the other-hand tool designed to work alongside the Pen in everyday Surface creative use.”

I want one. It makes we want to create desktop software for Windows again.

It looks like Microsoft has hit one out of the park.

Designer Neven Mrgan took a trip to his local Microsoft Store to check one out. He seems impressed.

Can you imagine using Photoshop with the Surface Dial? Yeah, it could be awesome for designers.

Hey Mac

October 28th, 2016

Rob Fahrni

Bringing in the HarvestJust some quick takes from around the web on Apple’s new MacBook Pro lineup.

iMore: “So, is this new 13-inch really a lean and mean upgrade for MacBook Air owners, or is it just an artificially crippled MacBook Pro meant to lower the cost of entry?

A bit of both, depending on your point of view.”

Charged: “Touch Bar is a great example of this. First, it feels like an excuse to not just add touch to the Mac in the first place. While Microsoft is busy letting you touch the entire display, Apple’s making you look down at your keyboard to interact instead — bizarre.”

JavaScript Scene: “People are losing their minds. Like many MacBook fans, I’m feeling seriously let down. I’ve been waiting a long time for a great MacBook Pro with touch screen.”

512 Pixels: “Desktop Macs didn’t get a single mention, or a silent hardware update after the announcements were done. While last-minute rumors claimed that the iMac wouldn’t be ready in time, it — and the Mac mini — would have been well-served with CPU bumps and Thunderbolt 3. The 27-inch iMac has become a workhorse for professionals like me, and in a world where the Mac Pro is in the shape its in, annual updates should be a must on Apple’s part.”

Ars Technica: “Phil Schiller quickly breezed by the Apple T1 during the presentation yesterday, but the company later confirmed to us that it was its first custom-designed SoC built for the Mac. And developers who have dug into the software and documentation (particularly the tireless Steve Troughton-Smith, whose recent Twitter sabbatical made my feed much more boring) have confirmed that it has an ARMv7 CPU core and is actually running an offshoot of watchOS, all of which helps it interact with the rest of the Mac.”

I was a bit hard on the announcement yesterday, of course I’d like to have a new MacBook Pro 15in even if one of its main features is thinner and lighter. The Touch Bar is going to be fun for developers to play with and I have a feeling some apps will do some amazing and creative implementations. I mainly develop stuff all day and touch type so I don’t see how this helps me in any way, but that’s ok. It’s not for me to use, it’s there so I can create for it. That’s a good thing.

Also, what is James Thomson up to?

Indie Itch

October 23rd, 2016

Rob Fahrni

AHHHHHH!I’m getting that itch again. I have so many ideas and never enough time to execute on them. I have a feeling this is a fairly common trait in people. We have big dreams but don’t possess the skill, patience, or business acumen to pull it off. It can be quite frustrating and lead to unnecessary stress in your life.

Distracted. That’s me. I have too many ideas and seem to like bouncing around a bit too much. Besides thinking about too many projects I also value an occasional side job that pays a little bit. When I find those jobs they’re prioritized over my own work, but never over the day job.

Lately I’ve been focused on the day job, one side gig I’m advising on (a startup), and my weird obsession to make RxCalc‘s Pharmakokinetics math library cross platform. Ultimately I’d call the last two a distraction from what I’d really like to do, which brings us back to the Indie itch.

I still dream of having a small company, say one to five folks, all dedicated to creating a business graphics like Visio or OmniGraffle

Why? Because I love those apps. I loved my time contributing to Visio and there is plenty of room on the platform for more great productivity tools.

There is, of course, another great option. Go to work for Microsoft or The Omni Group and contribute to these awesome apps. 

This ties neatly back into a post from earlier today. Yeah, I’d love to to to work at Microsoft working on the Mac and iOS versions of Visio, but I kind of doubt Microsoft cares much about porting Visio to either (I’ve heard rumor of an iOS viewer for Visio, which would be great.) 

Sorry for the stream of consciousness dump. Had to get these thoughts off my chest today. I’m felling really restless, this helped calm my mind.

Aging

October 23rd, 2016

Rob Fahrni

Hello, Dr. Jones.Garret P. Vreeland: “Ageism is starting to raise its ugly head – people are judging based on wrinkles and hair color (none) now. That totally sucks. Yet my photography skills are burgeoning, and I’m up to my eyeballs in video and video editing again (yay, FCPX!). Got some good web contracts in as well. Yet I’m not comfortable yet. Goal one for my 57th year – achieve satisfaction.”

Then there’s this from a developer I have a lot of respect for.

A couple years back I went through an interview with a company I’d still love to work for. I didn’t get the gig and to this day I still don’t know why. It’s totally possible I did something completely wrong during my interviews but in the end I was told “You’re a good developer and a great communicator, but you’re not a good fit.” I was crushed. At the time I was in a bad place mentally and physically. A lot going on in life at that point in time. I didn’t handle the rejection well. That is my fault of course, but the only reason I could find that fit was I was too old for their group. Sour grapes I suppose.

I have a feeling getting a gig with Google, Microsoft, Amazon, Facebook, and Apple will come down to your ability to do the work. I’ve interviewed with Microsoft and worked for them. I’ve interviewed with Apple and didn’t get through the interview. I know for a fact that Google interviews are notoriously difficult to get through.

The best companies hire the best people. I have no doubt James Thomson could work for any of these companies. He’d probably have to prepare for the interview process, but he could do it.