Categories
Development Uncategorized

Native Development on Windows

Yesterday I asked on Twitter…

I got one serious answer and some fun poked at the question, which is fine, but I think it points to a real problem on the Windows Desktop. 

Has Microsoft given up on native applications at a time when native on Apple Platforms and Android have never been more popular?

On Apple Platforms we have clear, well defined, native development tools for creating serious desktop applications. Think of apps like Photoshop, or more modern takes on graphics like Sketch, Acorn, Pixelmator, or OmniGraffle. Most of these applications are written in Objective-C against Cocoa (Apple’s Framework for writing applications.) Sure, Photoshop is the old guy in the mix and is built on a custom framework written in C++ that communicates down to Cocoa (and possibly some Carbon API’s?) also worth noting, with the exception of Photoshop, not a single app mentioned above is cross platform (I’m not including Mac to iOS as cross platform, many of the API’s are the same and the act of going from one to the other is much easier than going to a completely different platform.)

All that brings me back to the question of developing native applications in the vein of Visio or Photoshop on the Windows Desktop. I’ve seen plenty of talk about creating Universal Apps, but those seem geared toward a lighter weight style of application, singular purpose apps focused on lightweight tasks, like Twitter or Facebooks clients, not hard core productivity applications that need to perform well and provide their best experience on the Desktop.

We still have Visual Studio, C++, and the Windows API, as a development platform but it feels somewhat abandoned. I know the folks working on the C++ compiler would probably argue against that statement because Microsoft is definitely investing in C++, but what about OS level API’s? That is the level that sort of feels abandoned. We have WinRT today, which seems like it might be part of the story for native desktop development, but do you mix and match that with the Windows API to build a great native application, do you use WinRT alone, or do you just continue to plug away with the Windows API?

It seems that apps built for the modern Metro look should use WinRT? Based on that it seems the old tried and try combination of C++ and the Windows API would still be the best choice for hard core desktop development.

But what about C# and XAML? Maybe those are a good choice for serious desktop development? I’m unclear on that subject. I’ve heard that the Visual Studio IDE was rewritten in C# for Visual Studion 2012, but I don’t know if that’s true or not. If someone reads this post and can point to MS Office, Visual studio, or Photoshop class applications written in C#/.NET I’d love to hear about them. Worth noting is the wonderful toolset by the folks at Xamarin, it makes C#/.NET app development truly cross platform.

Being a long time C++/Windows API guy I still gravitate toward that toolset. Hey, I have a lightweight class library I wrote in 1993-94 that still works today; it builds with Visual Studio 2015 and runs fine on Windows 10, but it could certainly use some refactoring given the state of modern C++. Think C++14.

I’ve been working on a cross platform project recently using Qt, which has me think about portable C++ for Mac, iOS, Windows, and Android. Given C++14 as a starting point for most OS level services; file I/O, threading and synchronization, etc, what would it take to build a modern C++ library that handled native user interface creation and interaction and didn’t feel too constraining on the platform? Remember, most cross platform tools come at a price. They’re always a little behind, they tend to be least common denominator, and can feel non-native. Qt, for instance, doesn’t use native controls on Windows (NOTE: this may not be true today. This was true around 2008, the last time I looked), I find that terribly annoying. I’m sure any Mac, iOS, or Android developer worth their salt would also find it annoying. 

A nice new C++ framework for building native OS level user interfaces using modern C++ as a base would be great to see. I really wonder how long it would take to build such a thing?

Categories
Business Indie

Vesper Pricing

A wonderful bouquet of flowers.Q Branch: “Now that Vesper supports all iOS device layouts, we’re raising the regular price for the app to $9.99. With fast, reliable, unlimited sync, we think that’s a great value.

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.

The idea of apps is wrong footed, it’s about services. Mobile and Web are the two important clients in that equation. Sure, having a native Mac app would be fantastic, but Web is a better choice to spend your time on, especially for a note taking application.

Here’s an example; Evernote. The value of Evernote is the ability to not only take notes, but get to them from Mobile and Web. We pay for the backend service to keep our data secure and easily accessible. At $45 per year it’s a real deal.

A better play for apps like Vesper is an annual subscription service.

Categories
Apple

AppKit is to the Windows API…

OMG NEW FRAMEWORK!

Will write C/C++ for foodThere was a lot of buzz generated around the discovery of a private framework, called UXKit, that shipped with Apple’s upcoming Photos for Mac app. Like many others I initially thought “It’s about time.” Then I started thinking about the transition that happened when Microsoft created C# and .Net. At the time we had the Windows API and our trusty C/C++ compiler. At the time .Net shipped in early 2002 we were still building desktop applications, the web was moving forward, but not at the pace it is today. Microsoft shipped WinForms, which was pretty much a straight wrapping of the Windows API’s for .Net developers. The point is, Microsoft gave developers a way to do stuff with the new language and runtime that could get them up and running quickly. The environment was different, but the API’s felt familiar.

Moving Forward

In 2006 Microsoft released a new framework called WPF (Windows Presentation Foundation.) This new framework made use of DirectX so rendering the user interface was hardware accelerated, along with other nifty stuff. As far as I know this was the last major framework Microsoft created for desktop developers. Since that time web development and Surface (Metro) seem to be their primary focus. (Someone please correct me here, if this is not accurate. I’m not that dialed in to Windows desktop API’s any longer.)

The point is, Microsoft went through this weird transition from the Windows API to a intermediate (WinForms) to their final desktop UI framework over the course of four years. Creating new technologies and frameworks is hard. They take time, but Microsoft is good at API’s, and they’re very good at maintaining them and providing developers an upgrade path. This is, I believe, where Apple is today. They’re in that awkward period between AppKit and whatever is next.

Enter Swift

In the summer of 2014 Apple gave developers a great surprise at WWDC. They introduced us to a new language; Swift. Since that time Apple has created a weblog dedicated to the language and shipped Xcode 6 with full Swift support. At this point in time it seems like Apple is pushing hard for iOS and Mac developers to adopt Swift as their primary development language. They seem to be “all in.”

Get to the point

Long story short. Do I believe UXKit is a future version of UIKit for Mac development? No, I don’t. I believe it’s a private framework created by the Photo’s team (or another team) to allow them to share a bunch of code with the iOS counterpart. It makes sense. Apple traditionally operates very lean. They have very small teams, so they need to work as fast and smart as they can. If they have a framework that allows them to share more code, it may allow them to move more quickly.

Ultimately I believe we will get an entirely new framework. Built from the ground up using Swift. I suspect that framework will aim to share code between iOS and Mac where it makes sense, and diverge where it doesn’t. The overall feel will be the same for both platforms. It will be unified.

I love thinking and writing about future technologies. I’m rarely ever right in my guesses (see my musings on WinRT), but it doesn’t stop me from dreaming.

Categories
Life

My New Job

I’m happy to say I’ve landed a new full time iOS Development position with a great company; Agrian. They’re a smart and fun bunch focused on creating useful solutions for the Agricultural industry. We live in the great San Joaquin Valley of California, it’s the richest agricultural land in the world. At Agrian we’re “…dedicated to helping all participants in the agrifood industry to grow and harvest crops that are safe, profitable, and comply with a host of state and federal government regulations.” It’s all about making things better for farmers, which in turn, will benefit all of us.

Agrian understands web scale solutions and realizes it’s all about services. Mobile is one tiny cog in that machine and I’m happy to be a part of it.

On the technical side of things I’ll get to use all kinds of nifty stuff day-to-day. We are, of course, using a lot of Objective-C but there is a nice little mix of Swift in the code base, I’m sure that will increase as we move forward. We’re also using some very interesting frameworks. I hope to share more on those later.

The group of developers I’m working with are top notch, all of them. I hope I can live up to expectations.

Categories
Development Uncategorized

Regarding Swift

ZDNet: “In essence, Apple had one job — create a new baseline tooling for iOS and show a sympatico approach with how the rest of the industry actually operates — and they blew it.”

I don’t know anything about the author, but based on his statements I have to conclude he’s never written a line of production quality code in his life.

The last thing we need is a lowest common denominator language to allow iOS developers to make code that runs on other platforms. Ridiculous. We have the web for that. If you want a lowest common denominator experience, create a “responsive” website with JavaScript and be done with it. If you want the best experience, go native, with native tools.

Would C# be great on the platform? Yes, but there is no need for the .Net runtime because Cocoa gives us everything we need and it’s not garbage collected. No need for the additional overhead.

If you’re ok with the Xamarin approach, which is very nice, then you should, by all means use it. There may come a day when I’ll have to create an app that works for both iOS and Android and that may be the best approach, until then I’ll focus on learning the native platform tools so I can provide the best experience for my users.

Categories
Apple Mobile

All kinds of crazy

Microsoft Cash Cow.Macworld: “While I was visiting the Microsoft campus a few weeks ago—in suburban Redmond, just across Lake Washington from my beloved Seattle—I kept thinking of the old Vulcan proverb: “Only Nixon can go to China.”

If Microsoft is China, then that makes me Nixon in this story, I realize.”

Quick thought.

Apple should buy Microsoft.

Yes, you read that right. Apple should buy Microsoft for their web services; Azure Mobile Services. Maybe, just maybe, they could leverage it to make iCloud what it could be.

Categories
Business Mobile

Mobile, definitely a passing fad

VentureBeat: “Starbucks has now processed more than 26 million mobile payments since January, Adam Brotman, vice president and general manager of digital ventures at Starbucks, told VentureBeat.”

In a word, WOW! Do you think Peet’s and other big names will soon follow suit?

Peet’s, I’m here to help. (I know, shameless, but a guys gotta try, right?)

Categories
Life

My Favorite iOS Apps

I was trying to convince someone at work that we needed to do some iOS Apps. During the conversation I said something I always say about native iOS Apps. They provide the best chance at a great user experience. He asked to give him some examples of great iOS Applications, so I thought I’d share them here.

  1. Twitterrific
  2. Instapaper
  3. Instagram
  4. Camera+
  5. Evernote

I use the applications above more than any others on my phone, but I have a few from some other companies that I really appreciate. Enjoy.

  1. Tapbots
  2. Appcubby
Categories
Apple

Atwood on Apple

Red SockJeff Atwood: “But as a software developer, I am deeply ambivalent about an Apple dominated future. Apple isn’t shy about cultivating the experience around their new iOS products and the App Store. There are unusually strict, often mysterious rules around what software developers can and cannot do — at least if they want entry into the App Store. And once you’re in, the rules can and will change at any time. Apple has cracked down several times already:”

Jeff, it’s ok to feel this way. You have other vendors to choose from. Android and Windows Phone 7 to name a couple of great ones.

I’m an iOS developer, not a popular one like Marco Arment, but an iOS developer all the same. I’m ok with giving Apple a 30% cut of my revenues. It’s a part of doing business. I benefit from their infrastructure. They’ve given me store space, server space, they’ve provided a way to install applications and manage upgrades, and they collect money for me so I don’t have to deal with credit card companies and the like. It’s not such a bad deal.

Now, I’m not disparaging Jeff for his opinion on the matter. It’s like a lot of things in life. We have different opinions. He just can’t live with the idea, and that’s perfectly fine. Jeff has contributed a lot to computing and computer science and I look forward to reading his insightful articles for a long time to come. I just may not agree with him. (Psssst, that’s ok.)

Categories
Apple Development Objective-C

ARC

ARCMike Ash: “That, in essence, is what ARC is. The memory management rules are baked into the compiler, but instead of using them to help the programmer find mistakes, it simply inserts the necessary calls on its own.”

Reference counting is a pain in the keister, until you understand the rules. ARC is going to become an important tool in the quest to creating error free code. If you’ve ever written ref counted code you know how careful you need to be so you don’t leak memory or double-release something and cause a crash. It can be frustrating if you don’t pay attention.

This is a welcome change and one I’m looking forward to.

I think it’s time for an RxCalc refresh anyway. Plus some other nifty things I’ve been working on, that will definitely be ARC’d and Mac OS X Lion / iOS 5 only.