I can’t say enough good things about this Android commercial ad that played a few times during the Oscars.
Stephen Wilkes is a professional photographer who gave a talk at TED last week on his day to night photography project. Wilkes sets up at a location for an entire day or more capturing the same shot repeatedly. He then heads back into his studio and stitches the moments together into single photograph that captures the activity of that location over a single day. The photos are incredibly mesmerizing.
I probably will have more to say about my experience at TED. Probably.
In case you weren’t aware, Twitter is doomed! Like, Apple levels of doomed. User growth has been stalled for years. Advertising isn’t picking up nearly as well as they’d hoped. And the stock price is trading at less than my high school allowance because Wall Street is losing faith. I would personally prefer they regain their faith in Twitter, because I bought the stock at $45. I’d like to recoup that investment.
Ever since Jack came back to save his flailing company, people have been waiting for him to sprinkle pixie dust on Market St and suddenly solve all of Twitter’s problems. Sadly, not even Steve Jobs’s spiritual son can perform this kind of magic in just a few months. There have been a few different product launches since last fall and another round of #ExecutiveShuffle, but the ultimate problems of Twitter still remain. Twitter is too damn hard. Not for you, the fine person reading this article. Not for me certainly. I’ve been on it for a decade this July. But for those other people out there in the world? The “normals”? They don’t get it.
How do I know? I am @justin on Twitter and this has been my mentions tab for at least half a decade.
You’ll notice that most of these tweets aren’t necessarily for me. I am constantly inundated with tweets to “@Justin Bieber”, “@Justin Trudeau”, “@Justin Timberlake”, and maybe once even “@Justin Guarini.” The examples above are just a few random people who were confused while tweeting. It gets worse when someone like TMZ (3.69 million followers) tweets about “@Justin Bieber” instead of “@JustinBieber” and I can’t use Twitter for a few days without wanting to switch back to Pownce. When Bieber himself tweets I am well aware, because my mentions stream blows up even worse than this.
More than annoying, it can also be somewhat sad. I’ve seen teen girls confess their undying love to Bieber. I know when they cry because he wore a green shirt. I’ve even seen people threaten to cut themselves if he doesn’t reply to them. Am I supposed to reply to that tweet? It was sent to me (@justin bieber), and not Bieber (@justinbieber), after all. I ultimately end up spending an inordinate amount of time blocking these accounts to try to keep my mentions at some sort of sane level. At last check, I’ve blocked well over 60,000 accounts. That’s at least 1/3 of Twitter’s 4th quarter monthly active users!
Because of this, I don’t really enjoy Twitter that much anymore. This is also why I don’t use it nearly as much as I used to. It’s bad enough that the culture of Twitter is centered around abuse, actually-ing people, and making it way too easy for dumb people to try to sound smart. Add on top of it that most people don’t understand the product and I have to spend part of my life doing manual labor trying to make the service usable for me. No better way to spend a Saturday night than Twitter Block Button and Chill.
The fundamental tenents of Twitter are obviously broken for most people and they have been for years. Based on the currently super confusing interface the product offers, Twitter’s conversational nature lets me gauge where Bieber is still most popular (South America, Southeast Asia) and how Justin Trudeau is doing up in Canada (pretty great!). The product does not enable people to successfully talk to their favorite celebrities or #brands. Instead they end up talking to an iOS developer in Colorado who really doesn’t want to know them. Why would I want to keep using a product that enables this exactly?
Twitter the the company seems aware of this based on their last shareholder letter.
We are going to fix the broken windows and confusing parts, like the .@name syntax and @reply rules, that we know inhibit usage and drive people away. We’re going to improve the timeline to make sure you see the best Tweets, while preserving the timeliness we are known for. The timeline improvement we announced just this morning has grown usage across the board (including Tweeting and Retweeting). We’re going to improve onboarding flows to make sure you easily find both your contacts and your interests. We’re going to make Tweeting faster while making Tweets more expressive with both text and visual media. We’re going to help people come together around a particular topic, such as our @NBA timelines experiences. Relentlessly refining Twitter will enable more people to get more out of Twitter faster.
Whether this is just lip service to shareholders to try and quell another mass sell-off after a disappointing quarter, or something actually will change remains to be seen. I personally welcome the algorithmic timeline, because I no longer check Twitter more than once a day or so. I don’t want to see every tweet from every person I follow and since my mentions are usually a dumpster fire I don’t have much to look for in there either.
If @jack is looking for a fuzzy metric to determine whether Twitter is getting easier to use, take a peek at my mentions every couple months and gauge my misery level. The happier I am, the easier Twitter is becoming to use most likely.
For the longest time I have been using Meslo as my monospaced font of choice in Xcode, Atom, and Terminal. I couldn’t resist the urge to give Hoefler & Co’s Operator release as a replacement. I don’t really have issue spending money on tools that make me more productive in my day to day work. I never truly considered buying a font for development work though. For $179, I could have spent that money on at least 150 iOS apps!
After rolling my eyes at the absurdity of that thought, I transferred $179 from my bank account to Mr Hoefler’s, installed the font, and updated my Xcode theme to use it at 16pt universally.
My quick verdict? I like it. I don’t starch my plaid shirts nearly enough to offer a critique on the baselines and kerning of a font. I’ll leave that to the designers. But, it’s pleasant on my eyes and I can easily tell the difference between a capital O and a zero.
Is a new font going to make you more productive? Doubtful, unless you’re using something like Papyrus. I like it though, and you might too.
Check out Operator from Hoefler & Co
I am a sucker for an interesting set of playing cards, despite actually being terrible at Las Vegas.
I ordered a pack of these programming language cards few days ago to add to my collection. Each class of card uses a different programming language to represent its value. It’s criminal they don’t include Swift, but at least Objective-C is represented.
Buy at Varianto:25
A short note to let you know that if RSS isn’t your thing, you can now get updated on new posts to this site via Twitter.
Follow @carpeaqua on Twitter.
I’ll eventually get around to putting out an email version of the site as well, but that’s not a short-term goal.
This is probably one of the most engaging and interesting talks I’ve sat through. If you want to have a really good idea of the size of business the Gang of Four (Facebook, Amazon, Apple, and Google) are doing I doubt you’re going to find a better resource.
There’s so many quotable things in it as well.
On their growth as a media company:
Advertising is becoming a tax only poor people pay.
On generating profits and why Amazon doesn’t:
Profits are heroin to investors. They love them. They get addicted to them. And when you take them away, they get very irritable.
We truly are living in Larry, Mark, Jeff, and Tim’s world.
If you can read this, then everything has moved successfully. I’m now hosting the site on a server at DigitalOcean rather than on Azure. Why? Predominantly performance. Azure is notoriously slow when it comes to MySQL, apparently because it’s outsourcing the database to a third-party company rather than hosting it themselves. I was faced with either running my own virtual machine instance of MySQL myself or moving somewhere else. I used that as my opportunity to evaluate other options.
I settled on DigitalOcean based off referrals from friends, but also their one-click WordPress install and ample documentation. I haven’t run my own VPS in a while, so I was a bit rusty in remembering all the nooks and crannies I needed to cover to secure a Linux system. Thankfully, there are plenty of first-party tutorials provided.
- One-Click Install WordPress on Ubuntu 14.04 with DigitalOcean
- How To Install an SSL Certificate from a Commercial Certificate Authority
- How To Configure Secure Updates and Installations in WordPress on Ubuntu
- Initial Server Setup with Ubuntu 14.04
- Additional Recommended Steps for New Ubuntu 14.04 Servers
Hopefully the speed increase of carpeaqua will motivate me to write more than I do. Every time I sat down to write something before, I’d get annoyed at how long it was taking for a request to process. Now things are instantaneous. I’m running out of excuses.
If you want to check out DigitalOcean, click or tap on this referral link. You get $10 in credit and I get a little kickback too.
If you surveyed me annually, you’d likely find that my toolkit for building Mac and iOS applications changes a bit year over year. This year, however, the changes seem to be even bigger than before. With Swift 2’s release, I made the full transition from Objective-C to Apple’s new language du jour.
The transition has not been without growing pains (hello, constantly crashing debugger!), but overall I am writing better, more idiomatic code. And this is coming from someone who spent the last decade happily writing Objective-C. Since I’m making the transition, I’ve also used it as an opportunity to re-evaluate the third-party libraries I am using in my client applications.
I tend to have a fairly reserved stance on third-party dependencies. I am not vehemently against them like some, but I also don’t want to turn my app into a Lego set where I’m merely piecing together library after library that I don’t fully understand. The tools below are things I have used and successfully deployed to production.
In the Dependency Wars, I have tried them all. I started with vanilla Git submodules, and did a brief tour of duty with Cocoapods. Submodules didn’t offer nearly enough wins for the management overhead I seem to have. Cocoapods worked for the most part, but I have fundamental disagreements with how they package and build their products.
Carthage seemed like a happy medium for me. I get the wins of using some sort of dependency management system, and it sticks with using the shared Xcode schemes that are bundled with the project itself.
This is the most recent addition to my list, but it’s one I’m growing to enjoy most. Functional programming is what all the hipster developers are doing these days, so I am trying to wrap my head around it. I may not understand why they wear wood framed glasses, tight jeans, and so much flannel, but I am starting to come around to the idea of building things functionally.
RxSwift is from the same folks who do Rx.net, RxJava, and a host of other implementations, which may or may not be appealing to you. When learning something new, documentation is important and I’ve found the docs for RxSwift to be pretty well done. There’s still cases where the generic ReactiveX documents are “TBD” in terms of RxSwift, but having the header docs fills in many of those gaps.
My biggest complaint with RxSwift isn’t so much a complaint with the library as it is with the idea of functional programming. It is a major change in how you think, so I spent most of my first few weeks re-reading docs, cursing and trying to understand what was actually happening. Eventually it will click, and when it does it’s a really nice way to build iOS libraries.
RxSwift includes a library for making UIKit more reactive, but I’m shying away from it presently. Right now I have limited RxSwift mostly to integration with network modules I build. I reserve the right to change my mind about this in the future, but right now delegates and data sources don’t bother me that much.
It is a toss-up whether there are more Swift JSON parsing libraries or Republican presidential candidates in the US. I don’t really have anything negative to say about SwiftyJSON. It works and saves me from writing JSON parsing code over and over again.
You can likely choose one of the other 107 libraries and it will do pretty much the same thing: just like a Republican presidential candidate!
I have used Core Data since it was introduced way back in OS X 10.4. I have never loved Core Data, but it has always gotten the job done and proved better than raw SQLite queries (I’m that much of a masochist).
I interviewed the Realm folks way back when on my CocoaRadio podcast and found it to be an interesting project. I just didn’t have anything to implement it in since I was already successfully deploying Core Data in my existing client projects. With a new project that ramped up early last year, I decided to give it a shot.
I’m having a hard time convincing myself to go back to Core Data for anything right now. Core Data has always felt bloated to me, especially when trying to bring up the stack in an application. I also have many battle wounds to show for Core Data threading issues over the years. All things of the past with Realm. I can query the same Realm from any thread and bringing up a new one is at most three lines of code.
Apple is working to improve Core Data each year, but I’m starting to believe they should just reboot the framework like a comic book movie and start over. Or keep it as is, and I’ll keep using Realm.
I was a longtime user of CocoaLumberjack, but was running into a issues when starting to migrate an existing client application to use Swift in some places. I also started having issues where there updates to the library would just fail to work in the application without me spending a few hours each release debugging things.
I decided to use that as a chance to write my own clean room logging implementation that does everything I need: which isn’t that much. I call it Aspen, and you probably shouldn’t use it.
It works for me and is deployed on millions of iOS devices, but it’s also something that I don’t really see growing beyond the scope of the project as is. I’d like to add log rolling and ASL support, but after that there’s not much else I need in a logging framework. If your needs are greater, any other solution will probably work better for you.
The newest piece of my kit is Fastlane, a suite of Ruby scripts from Twitter’s development folks. I am using Fastlane to help run unit tests from the command line, build releases and automatically upload them to TestFlight. The suite can do a lot more, but my needs are fairly simple.
The next piece to my Fastlane puzzle will be getting some sort of continuous integration component. Maybe next year.
Plain Old NSURLSession
You’ll notice that I’m not using a networking library like AlamoFire or similar. For most of the projects I am working on, I don’t need the extra overhead those libraries offer me. I tend to put each network request in its own Swift class and make them return an RxSwift Observable. I then have a parent class that will vend those request classes out. I may write about this more in the future, if enough people ask nicely.
The iPad Pro went on sale this week. I picked one up at my local store, though my Pencil and keyboard case won’t ship for another few weeks.
I haven’t been this fascinated by a new device since the original iPad was released back in 2010. That is the device that got me re-energized to build my own iOS products after frustrations with the original incarnations of the iPhone App Store. My mind has been racing for weeks about ideas for this thing. There’s just one problem: I don’t understand why the device exists.
I use my iPad mini 4 every single day in the morning and evening as my primary method for reading, watching TV in bed, and sniping at people on Twitter. I keep no work-related apps on it. It is my personal device that is designed to let me focus on things that don’t involve my day-to-day duties as a software developer.
According to interviews with Tim Cook over the last few days, Apple is positing the iPad Pro as a full-on replacement for a PC or Mac for “many, many people.”
“I think if you’re looking at a PC, why would you buy a PC anymore? No really, why would you buy one?”
“Yes, the iPad Pro is a replacement for a notebook or a desktop for many, many people. They will start using it and conclude they no longer need to use anything else, other than their phones.”
Apple wants to cast the larger iPad as where the puck is going when it comes to knowledge workers. The days of carrying around a laptop or having an iMac or Dell on your desk to do your job are a thing of the past with the powerful iPad Pro.
No doubt if you are someone at the executive level who spends most of his or her time in email or browsing the web, the iPad Pro will likely be a great product. With anyone outside of that email and browser bubble, I struggle with seeing how the device fits without a tanker ship of compromises.
The Legacy Problem
I went home a few weeks ago, and my brother showed me his new MacBook he purchased for his online classes. His day job is managing a retail store, so his computing needs aren’t that heavy. An iPad sounds like it could be a great fit for him, right? Sadly, it was a nonstarter when he found out that the course required Silverlight in the browser.
I’ve looked at this software. All of it could be rebuilt on iOS and likely offer a better experience for students. Apple has provided all the APIs you need. What’s the financial incentive, however? iPad sales have been sluggish the last few quarters, and the iPad Pro has a giant question mark over it as to whether or not the general public will embrace it.
This isn’t a new problem. Apple faced something similar with the transition from MacOS to OS X in the late ‘90s and early 2000s. The biggest difference between then and now is that OS X isn’t going anywhere. Convincing someone who is getting by building web apps in Silverlight they should scrap all their existing code and build something natively on the iPad is a much harder sell than telling Adobe they need to embrace Carbon to get Photoshop running on Mac OS X.
The Ecosystem Problem
The majority of productivity apps that I have on my iPad Pro fall into three camps: first-party tools from Apple, a productivity suite from Microsoft, or $5 apps from hobbyist developers.
This is likely where you expect to read the same excuses about app sustainability and the lack of trials and upgrade pricing on the App Store. I’ll spare you rehashing those arguments for the millionth time.
The overarching reality is that, like any business, selling software is hard. The mythical App Store — where just building something means you will be swimming in a pool of money — still hasn’t surfaced after seven years of people promising it was coming.
What has shown up, however, is a world where the top grossing apps on the store are free-to-play games from two or three major game publishers. Game of War and Candy Crush have dominated the top grossing chart of the App Store for years at this point. They are likely raking in six figures (or more) a day just from the App Store. Add Google Play on to that, and now you know who actually has the swimming pool of money.
Compare that to the podcast app market, which is now switching to the tip cup model — used by panhandlers around the world for decades. These are “premium” apps that used to sell for the outrageous price of $4.99 and now have now switched to the “pay if you can be bothered” model because getting people to pay for software today is an even more difficult proposition than it was a decade ago.
Trials and upgrades aren’t going to solve the problem of developers shooting themselves in the foot or continuing to refuse to understand fundamental business concepts like marketing.
As a thought exercise recommend your favorite paid app to someone that is not a nerd. I have friends who are allergic to exercise that will run for the first time ever to avoid paying even $.99 for something on their phone. You’re telling me those folks are going to spend $39.99, even if the app can make them more organized and likely help them do their job better?
Omni makes it work, though. They have dozens of employees and don’t sell their software at bargain basement prices. The sad reality is there aren’t enough Omnis in the ecosystem right now to make the iPad Pro a viable productivity platform for anyone but those executives, retired folks, and masochist bloggers who jump through more hoops than a circus elephant to use an iPad instead of a Mac.
The app ecosystem isn’t the only problem. As I mentioned previously, iOS looks somewhat out of place on the iPad Pro. Visual oddities like the amount of spacing between app icons on a 13” screen seem like something that has to be resolved in iOS 10 with a re-imagined home screen of some sort.
Split-screen support doesn’t solve any of the interconnectivity problems apps still have where it’s not a trivial task to move a chart or spreadsheet from one document and insert it in another. These are problems that a mouse and drag-and-drop solved decades ago but are still a chore to do on iOS.
New features like extensions, app groups, and enhanced URL scheme support have helped make iOS a better overall platform. Having links from Twitter open directly in the Twitter app versus Safari is a great experience.
A lot of those improvements to iOS are related to helping individual apps be more extensible versus enabling Vendor A’s app to talk to Vendor B’s in a sane way.
To improve this sharing, iOS 8 added the concept of document providers. The feature has been available for nearly a year, and I can count on my left hand the number of apps I’ve used that have implemented it in a meaningful way. Even my favorite Omni apps consider document providers “beta” in favor of their own OmniPresence sync solution.
The apps that I have used a document picker with haven’t exactly been easy to use either. Most have copied the file from the document picker into their own app sandbox, which now gives me two different versions of a document in two different places. The future!
Smart people have worked out ways around a lot of these issues using apps like Workflow or writing scripts in apps like Editorial. To argue that writing scripts is a viable solution for anyone but the hairiest of neckbeards is insane.
I have no doubt Apple is aware of iOS’s limitations, and presumably working on solutions for it. As of today, however, I can’t imagine doing more than the most basic things on iOS without feeling like I am paddling upstream.
Why Does the iPad Pro Exist?
Like the Apple Watch, I’m having a hard time understanding why the iPad Pro exists right now. In a lot of ways, it feels like they threw this out as a reactionary tactic to slumping sales to see what happens.
Each new platform or device Apple releases is met with the same “We can’t wait to see what you develop for this” message to developers. With the iPad Pro, that invitation is feeling more hollow than ever, given the state of everything I’ve outlined above.
It’s possible that I’m overanalyzing all of this and the target is really schools or enterprise deployments. Selling 50,000 iPad Pro tablets to someone like IBM so they can load their own in-house software on the device makes a lot of sense.
I’m fine with the fact that I will always be a “Mac person.” I build software for a living, so I am someone who will likely always need all that OS X affords me to do my job. It’s for people like my brother, who just dropped nearly $2,000 on that new MacBook just for his online coursework, that I want to see something like an iPad Pro succeed — and become what technology is for the majority of people.
With all the legacy software out there, the lack of financial incentive to rebuild it for a new platform, and iOS’s current limitations, I am hesitant to say that is going to happen anytime soon.
P.S. I wrote and published this on my 27” iMac with 32GB of RAM, a 1TB SSD, and a 4GB GPU.