Categories
Development Indie iOS Life Mac Weblogging Windows

Focus, Rob

It’s Christmas morning, early. The house is quiet but my brain is going crazy with thoughts of projects I should work on. The thing is, I don’t need any additional projects to work on.

AHHHHHH! When I decided to build Stream it was because I wanted to do something small. I had originally started building a blog editor that would post to WordPress and Tumblr. The core of the app was being written in C++ so I could share that core between iOS, macOS, and Windows apps. It was going to be a lot of work. More work than I had the time to invest.

So, I did my little app: Stream. That took over two years to complete. I spent a lot of time on the guts of the app. Mainly around discovery of feeds and parsing those feeds. As a result I have a decent set of code for dealing with RSS, Atom, JSON Feed, OPML, and HTML. It was a real joy to finally ship.

The bottom line is this, I’m slow. Couple that with limited time to work on stuff and it takes forever to complete a project.

This morning my brain is spinning on the idea of that blogging app. As much as I’d like to do it, I really do love blogging, it’s not the project I really need to pour my efforts into.

The project I need to work on is going to be a many year effort. It’s something I’ve wanted to do for at least 15-years. The target OS has changed and morphed over those years but the app idea hasn’t, and I’m getting help from a longtime friend who just happens to be a really great developer.

Focus, Rob. Focus.

Categories
Apple Hardware Iconfactory Indie iOS Stream

My Apple Products

Ribbit Like many in the Apple geek world I listen to a few Apple podcasts. I love ‘em. I get to hear about their latest Apple purchases, mostly about the new phones they purchase every year, but occasionally we get to hear about something different. Recently it’s been M1 Mac purchases. I admit I’m green with envy. I have FOMO like a MOFO.

But these are the hyper fans. It’s why they write and talk about Apple products. They’re deeply invested in the Apple ecosystem. They’ve managed to turn their love of a company into a business. It doesn’t get much better than that.

I became a fan of Apple when Windows 3.0 released. I’m weird that way. It wasn’t until 2006 that I was able to switch to a Mac at work. That led to purchasing a Mac for our oldest daughter and my wife. I wrote my first couple iOS Apps on her white MacBook because I didn’t have one. Now we’re very much an Apple Family.

Back to my FOMO. If I had the means to purchase the new thing every year, I would. No doubt. But do I really need to buy the new thing every year? No.

Over the course of the iPhones existence I’ve had four.
• iPhone 4
• iPhone 5c
• iPhone 7
• iPhone 11

I upgraded to an iPhone 11 after the announcement of the iPhone 12. It’s purple and I love it. I’m typing this post on it right now (using Tot from The Iconfactory.)

As a developer of iOS Apps you’d think “I bet he has a really nice setup.” I do, but probably not what you’d expect. I’ve had two personal MacBook Pros.
• MacBook Pro – 2011 15in
• MacBook Pro – 2015 15in

I remember purchasing that 2011. It was my Christmas present that year. I did a bunch of consulting work on that machine and it’s still in operation to this day. My wife uses it on occasion. I replaced the batter a couple years back. It’s still a great computer. One with a spinning hard drive I might add.

The 2015 MacBook Pro was a complete surprise. It too was a Christmas present but I had no clue I was getting it. It’s a great little device. It sits on a stand right next to my 24in Dell display. I really love the setup. It’s more than enough screen real estate for me. Plenty of space for Xcode, a few shells, and BBEdit. I use the laptop display for the browser and other non-development apps. It’s the setup I used to write Stream.

Here’s the thing about Apple hardware. It’s really good! I don’t need to replace it very often because Apple has been great about supporting old hardware.

Some folks may ask “How can you deal with such a slow machine?” Maybe because it’s what I know? I use a 2019(?) MacBook Pro at work and I don’t notice a speed difference between it and my 2015. I don’t base this on any speed tests or measure performance in any way. It’s just by feel. That feel is how quickly Xcode builds stuff. I don’t use anything else in my day to day work that needs more horsepower than that. The only thing I do notice is how much my fingers don’t like the 2019’s keyboard when I use it on occasion. Oh, I’ve also been running Big Sur on it and it’s absolutely fine performance wise.

Here’s another reason why it’s fine for me. I work on iOS Apps. They’re small. It’s not like I’m building Photoshop or Xcode itself. Just little iOS Apps.

When the time comes for a new computer I may go with an Intel MacBook Pro with the crummy keyboard because the pricing may make it affordable enough for my tastes.

I also have a Series One Apple Watch. I wear it everyday and have since I got it. The OS is no longer updating, but this watch doesn’t have the ability to use new features and it’s perfect for my needs. My use? Text, Slack, and phone notifications. I also have a couple weather app complications; the built in Weather and Dark Sky (which will go away at some point.) Again, when the time comes for a new watch I will probably get a Series Three or Four because the price will be much better.

On the iPad front I still have a Gen One iPad Mini. It’s amazing it still holds a charge for a really long time and it’s small and light. The perfect reading device. The display is non Retina but it works. I hardly ever use it. I’m not much of a book reader. Shameful, I know.

Let’s wrap this up. Here’s my everyday list of personal Apple devices I use.
• Apple Watch – Series One
• iPhone 11
• MacBook Pro – 2015 15in

The Watch and MacBook Pro speak to Apple’s focus on high quality design.

They just keep working.

Categories
Development Indie iOS RSS Stream

Stream 1.0

Hayseed: “Stream is a different take on feed readers. It displays your feeds in a timeline, similar to Twitter.”

Yes, I finally shipped Stream 1.0!

The response has been so overwhelming, not in a OMG 100,000 people downloaded it, more of OMG the Mac and iOS community are so supportive. When I started on Stream I was really excited to share it with everyone. Over time that enthusiasm waned because it was taking so long to finish. I worked on it an hour here an hour there over the course of two years. Yes, two years.

I’ve received some really excellent feedback via Twitter and email. I hope that continues and I hope to incorporate some, if not all, of that feedback into Stream, but it could take quite a long time before I’m able to do it. I just want to get that out there. Stream is a labor of love. If I could make a living from it I would definitely pump out features at a much quicker pace. Please bear with me.

Thanks again for your support and encouragement. It means loads to me.

Categories
Apple Indie iOS

I didn’t withdraw from the program. They withdrew me. 😂

Categories
Development Indie iOS RSS Stream

Stream Update

I feel like I’ve been working on this app forever. 😀

But, I haven’t. It’s been a couple years of fits-and-starts. The last TestFlight build I sent out was, I believe, back in late February.

I only have a few new items to add then it’s all about bug fixes.

## What’s left?

### Import and Export OPML

I have the core of importing and exporting working fine. It’s what I worked on today.

The one stumbling block I have is where it fits in the UI, like it’s a little thing. I have some ideas, of course, but I’m not thrilled about any of them. I’ll probably pick the least icky idea and do that.

Once that’s done I’d imagine the Export feature will live next to it.

### Sharing

This goes two ways. I’d like to add an extension that will allow someone to _Add to Stream_ from a web browser and I’d like to allow folks to share out of the article view. This should allow folks to start a blog post of their own or post to their favorite social media site.

## Nice to haves

### Extra Icons

I have some beautiful icons to share with everyone and I really hope you all enjoy them as much as I do.

### Tip Jar

I’ve struggled with this one a bit. Stream is going to be free. It’s not going to be something folks just gotta have. I did this for me. I wanted an app that was simple and felt more like a Twitter feed. I think it hits both marks.

The reason I’ve struggled with the idea of having a tip jar is I don’t want folks to feel like they have to pay anything for it. I would appreciate it but it’s not necessary.

### Wrapping up

I have a few bugs I’m aware of, mostly around stripping of HTML tags.

Thanks for following along.

Categories
Indie iOS

Brutally Honest

A wonderful bouquet of flowers.Becky Hansmeyer: “My code sucks. It just does. I’m inexperienced, I’ve had no mentors or code reviews (by choice—I’ve had offers from many great people!), and there are fundamental concepts of programming that I only have a tenuous grasp of, at best. Despite my best efforts, I’ve utterly failed at using the MVC model. My views are all up in my model’s business, I probably have delegates where I don’t need them, or, on the flip side, other weird hacky ways of communicating between view controllers (like via viewWillDisappear and unwind segues, and all sorts of odd places) where I should have just used a delegate.”

You know what, Becky. My code sucks too. I’ve been doing this professionally for 30-years and my code is still crap. I work really hard at honing my craft. Continually learning is the key to longevity in this business so just keep plugin away.

Becky here’s something to keep in mind. You’ve shipped a successful product. Nobody cares what your code looks like. You shipped! In the end that’s all that matters.

Remember this: the only bad code is code that never ships.

Categories
App Store Apple Indie iOS

App Stores

A snowflakeEvery once in a while developers drop interesting nuggets of information on Twitter or their weblogs on the state of Apple App Stores and how they relate to their businesses.

In late November longtime Mac and iOS developer, Panic, announced they would discontinue Status Board.

“First, we had hoped to find a sweet spot between consumer and pro users, but the market for Status Board turned out to be almost entirely pro, which limits potential sales on iOS — as we’ve learned the hard way over the past couple of years, there’s not a lot of overlap right now between “pro” and “iOS”.”

Panic is a shop I look to for direction and inspiration. They build solid, beautiful, easy to use applications. Their ratio of Mac to iOS Apps is pretty interesting. Their main Mac applications; Coda and Transmit, are aimed squarely at professionals. If you look at their remaining iOS applications two are complimentary to their Mac counterparts; Coda and Transmit, and the third, Prompt, is most likely built using code and knowledge gained from their other apps. That is not meant as a criticism. It makes total sense. Coda and Transmit are their big dogs, why not make iOS versions of them? I’m looking forward to Panic’s year end report. The last two have been amazing reads.

This morning as I was scrolling through my Twitter timeline, trying to avoid political talk, I noticed an exchange between Michael Love and David Barnard. As suspected, iPhone is the money maker and iPad is not pulling its weight.

Not long after that exchange I saw a nice tweet from James Thomson, of PCalc fame. It looks like the iOS App Store is his primary source of income.

Depending on the podcast I’m listening to, Core Intuition vs. Accidental Tech Podcast, I’m either excited about the state of the Mac or completely bummed about it. Regardless, it feels like Apple is pushing the iPad toward the Prosumer market and keeping the Mac alive for Professionals, mainly those creating iOS Apps (Hey, we need a platform for creating apps, right?)

Having said all that, I’d still like to take a shot at the Mac software market. I don’t need to make millions, but it would be nice to make hundreds. 😀

Categories
Apple Core Labs Design Development Indie iOS Mac Windows

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

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

Categories
Apple Core Labs Business Indie iOS

Passion Project: Update One

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.

Categories
Indie Life Uncategorized

Indie Itch

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.