Archive for Apple

Swift on Android

SwiftRumor has it that Google may be considering making Apple’s Swift a first class language for Android development. Predictably, the internet has been pretty excited about this possibility. My lack of enthusiasm for Swift has been fairly well document, so I’m going to keep my comments to a minimum.  Swift on Android shares the same API problem as Swift on iOS and this likely has more to do with legal wrangling than technology.

Java and Objective-C are very object oriented languages and the Android SDK and Cocoa Touch APIs reflect that. Swift is a far more functional language than either of them. “Good Swift”, which I have been told is functional and not just “Objective-C in Swift” doesn’t really go so well with a OO designed API on Apple’s platform. Why should that problem not exist on Android as well? Maybe Google and Apple will rewrite their SDKs to be more functional, but that’s not where they are right now.

Oracle is suing Google and has been suing Google for Android’s use of the Java programming language, which Oracle acquired in its acquisition of Sun. The lawsuit is ridiculous and a destructive waste of resources, but that’s a pretty fair description of the US legal system, so it is likely to continue to be an ongoing concern for Google. If Google were to stop using Java on Android, that might put them in a better position regarding the suit and it’s pretty clear that the licensing on Swift would prevent any similar issue from cropping up between Apple and Google.

Yes, I’m admittedly bias, but it’s important to think about the practical and ulterior motives that Google might have for adopting Swift and not just blindly jump aboard the hype train. Swift is a decent programming language, but it’s not the right solution to every problem and we should only make changes when it makes sense to do so. Let me know what you think on Twitter or Google+.

TarDisk Review

My dev machine is a “Late 2013” 13 inch Macbook Pro. The machine has more or less been serving me well, despite the occasional kernel panic — these crashes tend to happen when I need to have Android Studio and an Xcode project with a substantial storyboard open at the same time. If you’re interested in more detailed specs, take a look below:

My one major problem since about three months after I got the Macbook has been the insuficient amount of storage that I speced it with at the time purchase. After finding out that Apple will no longer perform a harddisk upgrade as a service at the Genius bar and I didn’t feel particularly confident in opening up my machine myself, so I started looking for alternate solution. After hearing about TarDisk on Twitter, I decided to order one of their 128GB kits and give upgrading my Mac a shot.

Right off the bat, I got a less than great feeling about the product. It came in pretty cheap looking packaging and the instructions looked like they were printed out on a home class inkjet printer. The device itself is a non-descript silver wedge, meant to go in the SD slot of the computer. To be honest, after unpacking the device I sat at my desk with it and the packing out for a few minutes and considered just sending it back. After my few minutes of doubt, I decided to go for it.

After following the instructions that basically amount to closing all applications nad restarting my Mac, I attempted to inster the device into my Macbook — it got stuck. I had to power down and get a thumbtack to wedge the device out. Again, I considered just bailing out on this process but ultimately decided to give it another go, because I’m crazy apparently. After finally getting the TarDisk into the mac and waiting about forty-five seconds and again remove it, since the device was not recognized by MacOS which is what the instructions state should happen automatically on insertion.

Inserting it a second time got MacOS to recognize the TarDisk and I was able to run the tool as described in the instructions. After a few minutes, the process was complete:

As you can see, I do indeed have the additional hard disk storage. Despite the rough installation, the TarDisk does seem to work as advertised and, though it will take some months to tell for sure, seems to not have had any adverse effect on the general stability of the system.

While I won’t go as far as to recommend TarDisk just yet, I can say that it’s an affordable option worth taking a look at if you don’t mind taking a bit of risk. Obviously, there’s plenty of room for the team at TarDisk to improve the installation process and it might be interesting to see a revised version of this product with some of the rough edges smooted out a bit.

Update: For those concerned about benchmarks, there’s been no noticeable degredation in performance on regular use but my needs are not particulary high-end. However, if you’re doing video encoding or something like this, you probably want a different solution. Take a look at this review from Digital Trends where they benchmark it but again if you care at all about disk IO performance beyond your system drive, I’d still contend you’re better off just doing the full SSD upgrade.

2015 Year in Review: Apple

Now that we are just dabbing our toes into 2016, it’s given me some time and cause to look back at the year that was. A lot of things were happening in 2015 but they broadly break down into who was involved: Apple, Google, Microsoft, VC Startups. Today, we start with Apple.

Swift: Arguably, the largest and most positive impact Apple has had on the take space this year was in releasing and open-sourcing their new programming language Swift. Swift is on track to take the development world by storm and benefits greatly from the success of the iOS development platform with the general development community.

IBM Partnership: Apple is not historically the easiest company to partner with but this year they’ve unveiled a partnership with IBM to bring the iOS platform deeper into the enterprise space. This might have some impact but my bet is that most enterprises who are interested in mobile are going to focus on Cordova or other HTML5 based solutions for their line of business development needs. Even in the worst case, the deal with IBM gives Apple some well needed good press.

Sub Apple-Par Products: The Apple Watch was well hyped, enthusiastically covered, and basically a disappointment. Apple Music is… well… not exactly what anyone had hoped and let’s not even talk about the battery case. Their product launches this year have run counter to the usual level of quality we’ve come to expect in terms of fucntional design and user interface design. Also, they still have some serious issues when it comes to cloud services.

Successful as they may be, Apple seems to be have been stumbling in 2015 in terms of product launches while making significant strides with Swift. The Watch felt rushed and I’m hopeful that version two will be a lot more stylish and functional. All in all, Apple might want to revert back to their previous focus and take just a little more care in polishing products before launching them in 2016.

The King’s Mores

The recent tragedy in South Carolina has brought questions of the Confederate flag being used on government buildings and other placaes that it might be offensive. Personally, I agree with the critics that it was wildly inappropriate for the US flag to be flown at half mast out of respect for the lives lost while the Confederate one was not lowered. In response to the tragedy, a number of retailers have decide to stop selling memorobilia with the flag on it and the flags themseleves. One unlikely follower in this trend was Apple with their App Store.

Apple has decided to begin enforcing rule 19.1: “Apps containing references or commentary about a religious, cultural or ethnic group that are defamatory, offensive, mean-spirited or likely to expose the targeted group to harm or violence will be rejected”. Basically, they are asserting that the Confederate flag is inherently damaging. The issue is that many of the apps in question are games that focus on the historical aspects of the Civil War. I persnally find this to be a gross over-application of that rule but even if you agree with teh decision, there is a wider issue at play that shoud be of concerned to every developer working on Apple’s platfoms.

Apple is no longer shy about using its absolute power over the App Store to enforce what might be considered its own preferences / world view. This is well beyond just protecting users from poorly coded apps or security flaws in third-party software. Apple is now enforcing their tastes and mores on every iOS user and (more frightenly) every iOS developer.

It’s been a long time coming but I think this is the last straw for me in terms of control from Apple. I just can’t justify having so much of my life and livelyhood be based on a platform whose owner has no issue with enforces their mores on its users and developer community.

A Swift Softening

enter image description here Listeners to last week’s Coder Radio know that during the live feed WWDC coverage, I was less than enthused with the announcement of Swift, Apple’s new programming language for iOS and OS X. My initial reaction was based on the somewhat unclear way they announced Swift; it was not very clear what they wanted us developers to use Swift for and that led me to the wrong conclusion that Swift is designed to be a near to medium term 100% replacement for Objective-C – this simply is not the case. So far, I’ve read through the Swift book on iBooks and the documentation publicly available twice and found something very surprising – Swift reminds of QML in QT.

This might sound a bit odd, given that in a lot of significant ways Swift and QML are very different languages, but they actually share a kindred spirit and will likely take the same place in my tool-chain – layouts. Yes, both Swift and QML are technically capable of so much more than layouts but really they are both well suited for that task in particular. Why do you think the WWDC demo was so UI / visuals heavy?

So the bottom line is no I don’t hate Swift and no I don’t think it will be the end of Apple development as we know it. And yes, I will be using it but, at least for the next year or so, in the same capacity as QML and its relationship with Objective-C will be same as QML’s with C++ in my QT code-bases.

Questions? Comments? Find me on Twitter.

WWDC 2014 Predictions

WWDC 2014

Well, it is that time of year again – when the tech space goes crazy with Apple fever and starts to have dancing iTVs and iWatches in their heads. From the Apple developer perspective, this is (like the WWDC of 2012) being preceded by increasing frustrations from the community regarding Apple’s tools but more their practices – these complaints have been grumbling under the surface and indeed I’ve been at the forefront of sounding the alarm, but some fights have already been lost and if history is any indicator the prominent Apple devs will be placated by pretty much whatever they get on Monday. Still, to be fair, if Apple could address a few core areas of developer pain, then there would be legitimate cause to celebrate.

Contracts / Intents: Windows Phone and Android both have viable solutions to interapp communication that work very well for the developer communities on those platforms, the platform vendors, and of course the end user. iOS, however, has no real solution to this problem; I don’t consider and a reasonable person would probably agree that the current URL schemes tricks are all just really sloppy hacks that should never be shipped and no sane developer would use them by choice if there were a better alternative. There is no technical reason that this can’t be done and at this point Apple’s stubbornness is doing a huge disservice to the developer community and the end user.

App Test Distribution: One of the most annoying aspects of being an Apple developer is that whenever a customer or even a teammate gets a new iOS device, we have to go through the whole rigmarole of getting the devices UUID, adding the UUID to our developer portal, regenerating a provisioning profile, and making making a whole new binary just to get that one new device into the testing pool. This is absurd. Apple for good reasons wants to limit how apps are distributed outside of the App Store but at this point, there system is too much of an inconvenience to developers (a group I strongly feel is important to their long-term success) to be tolerated one day longer. There is some hope – a few months ago Apple purchased Testflight and that suggests that they intend to streamline the test distribution system.

Mac Mini Refresh: I’ve been careful not to put oo many consumer / new product requests in these sort of posts but I am willing to make an exception for the Mac Mini. Though the mini is probably the least sexy device that Apple sells, it is extremely important for the developer community at large, as a ton of little shops are almost 100% Mac Mini shops. At this point, it is pretty hard to justify the purchase of a Mini given how old the tech in the device is and the somewhat poor value proposition – at least compared with the iMac or an equivalent Windows PC.

That’s it. I don’t think these items are too crazy but am not so sure that we are going see anything of significance in any of these areas. My guess is that we will see nothing the way of interapp communication, a half step toward an easier test distribution, and little more than a spec bump or price drop on the Mini.

If you want to troll me when I inevitably proven wrong on Monday, then please follow me on Twitter.

2014 Predictions

I hope that you have all had an awesome New Year’s Eve! I’ve decided that I’ll start off 2014 by making a fool of myself by trying to make some predictions for the tech industry for the new year. This is not a what you will see list, but nor is it a what you won’t see one; in reality, I am trying to focus more on trends than anything else. Overall, 2014 is looking to be a transition year rather than a real game-changer. This is in no way a bad thing and makes sense for where we are in what is usually a twenty year tech cycle; it is important to remember that the mobile revolution is not even half way done and there are still a lot of incremental advancements that need to be made in that area before it can be considered complete. Still, this article will not focus on mobile exclusively but will rather jump around with no other aim than what I find interesting.

Docker: Docker is the darling of the developer community right now and for good reason — it solves a problem that (outside of the BSD community) hasn’t really been properly addressed. There is however a risk of certain segments of the community drinking a little too much of the Koop-Aide and using Docker in ways that it wasn’t intended to be used; just think about what we saw with Rails a few years ago and the hype surrounding that and you will have a good idea of what I am concerned with. Still, at the end of the day Dockery is going to be a major tool in a lot developers’ (including this one’s) toolboxes for 2014 and probably beyond.

Windows 8: In the consumer market, Windows 8’s RT offering is in a lot of trouble — that is undeniable at this point. Windows Phone suffers much the same fate as Windows RT, though Windows Phone does enjoy a good holding in South America and some other parts of the world. Microsoft has already hinted strongly that they plan to merge WinRT and Windows Phone into one mobile operating system alla iOS. This is a great Idea but is several years too late. It also undermines the “one Windows” pitch that Microsoft has been making for Windows 8 over the last few years. In 2014, Microsoft will still be dealing with the fallout of their bumbling launch and marketing of Windows 8.

Azure: Azure has grown far beyond Windows in the cloud and at the close of 2013 is a rival to Amazon Web Services and pretty much every other cloud offering. I’ve used Azure several times myself over the year and am pretty impressed on the whole; there were some bumps in the beginning and middle of the year, but these have largely been addressed and it looks like Microsoft has some ambitious plans for Azure in 2014. Over the last month or so something called Midori has been leaking out of Microsoft and, though the pundits seem to think it is something to do with Windows on the client-side, my bet is that this is some sort of evolution of Microsoft’s cloud offerings. Either way, 2014 is going to be a good year for Microsoft in the cloud and for Azure.

Mac OS X: Twelve months ago it looked like OS X was veering dangerously toward an iOSification that would have proven intolerable for professional users. With Mavericks however Apple has found a good balance between their desire for control and the reality that the pro-market has been driven to OS X due to its being a UNIX system that has a late vendor for support and an attractive user interface. Despite the apparent back peddling, it is important to note that Apple has gotten one major change in the OS and managed to implement it in a way that is both useful to the average consumer and acceptable to the pro users — this feature is called Gatekeeper. In Mavericks, Gatekeeper does not allowed unsigned applications (to sign an application one needs to be an approved Apple developer) to be installed on the system by default. The key is that this is a default that any sophisticated user can change. However, I must admit that I have kept this default. Going forward, Apple’s belief in signed applications (or perhaps some slightly watered-down version of it) makes a lot for sense for the future of computing and I actively support refusing to install unsigned applications from untrusted sources. If the current path holds, Apple will be balancing making OS X simpler for average users and new users who came over due to the halo effect of iOS while balancing the needs of the professional user market.

Ubuntu / Linux: Canonical has done an amazing job of sullying the Ubuntu name over the 2013 and has done little more than make a fool of themselves with their naïve attempt at breaking into the mobile space. Ubuntu will still be a very popular desktop Linux operating system among new Linux users and will continue to be a major player on the server-side. Canonical the company however will fail to monetize their offerings in any significant way. The only ray of hope would be some sort of re-focusing of the company to be an enterprise focused organization much like Red Hat. Even in that case, Canonical will not be able to be a true challenger to Red Hat in 2014 and it is unlikely that they will even decide to try. The continued flailing of Canonical will contribute to a “brain drain” of passionate and talented Linux enthusiasts out of the Ubuntu community and into other Linux communities. Another side of effect this is that desktop Linux will continue to be the proverbial tempest in a teapot that it has always been. This internal discord will guarantee that 2014 will not be the year of the Linux desktop in any significant way.

That’s it! Those are my foolish predictions for 2014 — foolish as they may be, I am pretty confident that most of them will be, if not correct, then on the right track. I know they are not earth shattering and basically boil down to 2014 will more or less maintain the status quo. In a way, that’s a good thing. If we are constantly reinventing new technologies and never refining the technologies we are already have, then we will always be using unstable and half baked first generation technology. Have a happy new year and feel free to comment on Twitter.

MDNetworking: My Little Networking Lib

Disclaimer: This is in no way a 1.0 codebase and I strongly recommend against you using this in production.

Summary: MDNetworking is a small Apache 2.0 licensed Cocoa / Cocoa Touch library. It is intended to be suitable for use on iOS7+ and Mac OS X 10.8+ but it may in fact be possible to get it working on older version of iOS and OS X. My intention in creating this library is not to make yet another heavy Cocoa networking framework that is going to solve the meaning of life and the world’s problems. I merely want to present a relatively simple and easy to use facade of NSURLConnection and the like.

Contributing: I’m open and welcome contributions from the community, however, any contributions that don’t adhere to the present code-style will be rejected.

Programming Pitfalls: iOS Simulator and Audio Codecs

PitfallThere are some bugs that you fix and brag about to your friends afterward, then there are the ones that are just plain embarrassing. Unfortunately, I’m writing about one of the latter today rather than the former.  You see this pitfall, though no more or less annoying than the others I cover in this series, is made all the more worse by the fact that I should have known better. If you’ve ever listened to an episode of Coder Radio in which I mention the iOS Simulator, then you know that I always warn developers to never trust it; the reason for this is that your code isn’t really running on iOS but rather a pseudo-OS X platform. Never ever trust the simulator. Ever.

Taking a step back, let’s look at the issue. I have a number of audio files and they all play just fine on the iOS Simulator, but my beta testers are reporting that they can’t hear any audio files at all on their devices. This is odd to say the least. I scoured my AVAudio implementation looking for the most obscure of bugs but still found nothing. The good news, using “good” very loosely, is that I was able to delete the app and reproduce the bug myself.

After a few hours of pouring over LLDB and various Test Flight logs, I found that everything looked fine: the audio URLs (the audio is coming from a server) all looked fine, there didn’t appear to be any NSZombie related issues, and the audio files themselves seemed fine.  I was totally lost.

Then I remembered something based on an offhand comment I found on a StackOverflow post — the simulator uses OS X’s audio subsystems which differ from iOS’s. In particular, OS X has access to a few more audio codecs than iOS. As it turns out, the API I  was interacting with has different calls that request the audio in different formats. I changed the call to request the MP3 formatted files and was good to go. Facepalm.

I hope you’ve enjoyed taking a look at another programming pitfall and please do leave any comments on Google+ or Twitter. Also, please keep in mind that I am always available for consulting projects.

Play Means War

google-play-logo11Google IO fever is in full swing and, though there are a lot of interesting things coming out of this year’s IO, but there is only one real threat to Apple’s leading position in mobile Monetization. This is Play Games. Play Games functions a lot like Game Center with a bit more and (naturally) a focus on Google+. Play Games allows many of the features that Game Center does but has one killer feature: it is cross platform, supporting Android and iOS. You might wonder why this matters, but the truth is (according to the Apple App Store top grossing and top paid charts) the developers that are making the most money are the game developers. It has been argued that one of the big advantages that iOS has is that it is the prefered platform for mobile game developers — meaning that they release on iOS only or iOS first.

Play Games looks really impressive, but the most attractive aspect of it is that it is a backed Game Center like service that is not run by Apple. Let’s be honest, Apple makes great devices and some pretty good client-side software, but their backend services leave a lot to be desired. Game Center in particular was crippled when Letterpress — one of the first games to actually take advantage some of Game Center’s more advanced functionality — was released and became an overnight success. The reality is that Apple left this door open by not focussing on backend-technologies and now Google is going to be able walk through it.

If Android is able to generate roughly the same revenue as iOS for developers, Apple will have to act quickly to preempt an exodus of developers. This might sound a little overboard, but there is a frustration in the iOS community in all but the most hardcore Apple fans that Apple’s policies are increasingly hostile toward independant developers, but as long as the business case is strongly in Apple’s favor, Apple can do whatever it wants. If Google was able to change the business story, they’d be changing the entire landscape.