Index | Archives | Atom Feed

iPhone 6

Overall, the iPhone 6 is a very nice evolution of the iPhone 5s with a bigger screen. It outperforms the iPhone 5s in almost every single way. Here are some things I noticed in my first few days of use.

  • Compared to the iPhone 5s, the iPhone 6 is big. This really changes how it can be used. I've found the iPhone 6 harder to use one-handed while lying down. I can't imagine using an iPhone 6 Plus one-handed at all.
  • The larger screen has made two-handed typing better/easier, but again, one-handed typing suffers here. The swipe keyboards in iOS 8 help, but suffer from other usability issues due to API limitations. The key one for me being 3rd party keyboards not having access to the native keyboard picker/switcher. The native switcher allows you to drag up from the key to pick a specific keyboard, whereas the 3rd party keyboards can only switch to the next keyboard. I hope this changes with future SDK changes.
  • The rounded shape is really nice and comfortable to hold. The rounded glass on the front lends itself well to the edge-based gestures in iOS 7/8 (such as when navigating back by dragging from the left edge of the screen). The shape is very original iPhone-esque. I love it.
  • The screen is gorgeous. It may be partially due to the rounded glass, but the screen also feels closer to the surface than before, making interaction feel even more direct. The screen seems cooler in color temperature compared to the iPhone 5s, with a yellow tint on the iPhone 5s relative to the iPhone 6 when viewed side by side.
  • The protruding camera is an aberration on an otherwise very sleek device. It does provide near-bulletproof focusing (using phase detection autofocus), and the video features (240fps slo-mo and stabilization) are nice. There's also less noise under low light conditions compared to the iPhone 5s. It's getting harder to justify carrying around even my Fujifilm X100 when on-the-go/traveling.
  • To get rid of the protruding camera, I opted for Apple's leather case. I liked the one I had for the iPhone 5s, and the case for the iPhone 6 is very similar. I'm glad Apple made all the colors darker to avoid the "dirty" look the iPhone 5s leather cases would get after a couple months of use. The more open bottom also means my fatter headphone plugs can fit without an extra adapter. The only con is the raised lip around the screen breaks the flow of the rounded glass, and can make some edge-based interactions more difficult. The most obvious one to me is when trying to move apps between screens.
  • Speaker seems louder and slightly better, which is nice for podcast listening while doing chores. The vibrate motor also seems stronger to me.
  • Too many apps aren't ready for the big screens, and run in a zoomed mode. The biggest problem here is how the keyboard becomes taller, and is noticabely jarring when switching between scaled and non-scaled apps. I can't imagine how much more ridiculous this must be on an iPhone 6 Plus. This is almost as bad as a pre-iOS 6 app not getting updated. It looks like some of my main daily driver apps are getting updates out very soon, so this may improve very quickly.
  • With a bigger screen, it's even more crucial to have edge-based gestures available for app navigation. Reaching up to the corners is a chore. Reachability (tapping, not pressing, the home button twice) helps, but swinging the thumb down isn't always easy depending on how the phone is held. It feels like some apps do need to adapt their UI to be more big-screen friendly, as reaching for the top corner is less viable now.

Foreign Language

I've been trying to make reservations at some restaurants for my upcoming trip to Japan. Many top restaurants in Japan understandably don't take reservations from foreigners directly. Instead, I'm coordinating with the hotel concierge at each of my destinations to make all the necessary reservations. It wasn't until now did I realize how much of a barrier language can be, even with concierge who most likely interacts with foreigners frequently.

In retrospect, I've been living a fairly sheltered life linguistically. I've generally lived in and traveled to countries where I have a decent command of the de facto language. This trip to Japan will be a big step outside of my language comfort zone, even with the occasional help due to kanji's overlap with Chinese.

I'm doing what I can to learn some very basic Japanese before my visit. If anything, it would make finding some restaurants that only have signage in Japanese easier. This should be a great learning experience, and I'm definitely looking forward to it.

P.S. Feel free to share any tips with me on tourist attractions and food in Tokyo, Kyoto, and Osaka.


Be Careful Typing Swiftly

By default, Swift does not implicitly cast number types for arithmetic operators. For example, you'll get a compiler error for the following code in Swift:

var anInt: Int = 10
var aFloat: Float = 20.0
var result = aFloat / anInt

Instead you have to cast one of them to match the other, like so:

var anInt: Int = 10
var aFloat: Float = 20.0
var result = aFloat / Float(anInt)

I discovered this when I first sat down to play with Swift in the labs, but it quickly made sense to me as a design choice. It made me think a lot more explicitly about the underlying types and what I really want from the operation. This bit of code on GitHub would make the first code snippet work. I know it's tempting to use something like it to make life easier, but part of the beauty of Swift is the language forces you to think about types more explicitly. Doing so should result in better code, and will help get rid of a whole class of problems you may have down the road.


WWDC 2014

WWDC has come and gone. While the iOS 8 and OS X Yosemite announcements were great, and will change how we use Apple devices along side each other, the really big announcements were for once truly for developers. This included Swift (a new programming language), tools in Xcode (visual debugging, async testing, performance testing, etc.), beta distribution (TestFlight!), and so much more. I'm still only half way through the WWDC sessions I want to watch. It's going to take some time to digest everything. There's so much new stuff; it's truly mind-boggling. I'm sure all developers on Apple's platforms are very happy with this WWDC.

Most of all, this WWDC has shown us a new Apple. It's one that has finally been able to emerge from Jobs's shadow, and with more confidence and openness than ever. The keynote was bursting with confidence, and Craig Federighi is at the forefront of that. Apple even took Craig's hair and poked fun at it during the keynote. Apple's traditionally been very secretive. In previous years, WWDC videos and pre-release documentation were always under NDAs. This is the first time anyone can read up on and learn about all the new things. There are also more collaboration and openness between workgroups within Apple. Otherwise, features like Handoff between iOS and OS X wouldn't have been possible. Overall, I'm looking forward to using all the new tools and exploring all the new APIs, but most of all, I'm excited to see where Apple will take us in the next 3-5 years.

P.S. Given the advent of Swift, it's probably time to change my placeholder logo that's referencing Objective-C.


On Writing

I've decided to start writing more. Part of the motivation grew from reading blogs of other developers, such as Brent Simmons's amazing inessential. Writing has since grown on me and has become a lot more.

Writing, especially publishing on the web, was very difficult initially, but it has gotten progressively easier. Part of it may be due to more practice, but I feel most of the improvement from building rewriting into my writing workflow. For me, a thought rarely comes out right the first time and almost always needs rewriting.

I've started carrying a pen and notebook with me, as I noticed I solve some coding issues better on papers first. It is the same for writing. Writing the old school way removes the distraction of a computer and helps me focus better. It also forces me to do a rewrite when I transcribe it into my draft document on Dropbox.

As a result, I'm much happier with the final result compared to the first draft, and I'm also much more willing to publish it. I'm looking forward to writing and sharing more in the future.

P.S. My new found obsession of fountain pens may also be contributing to this. Maybe I'll write about it one day.


Website Migration, Again

In my previous post, I detailed my new setup. I initially chose to use the most popular distribution of linux, Ubuntu, for my DigitalOcean VPS. I made this decision because any problem or question I may ever have about Ubuntu has probably been answered on the web. It probably made some things easier for me on my first VPS, but after a bit of reading, I've decided to switch over to CentOS. CentOS is designed for enterprise use, and focuses on stability of the OS, which is perfect for servers. There are a few drawbacks, such as some packages being older, but nothing that isn't impossible to work around. With the announcement and patching of the Heartbleed bug/exploit, this is as good of a time as any to make this move. Even though I am not serving anything through SSL, I may in the future and don't want it to bite me later.

I started with taking a snapshot of the current Ubuntu server using DigitalOcean's web panel. I wanted to make sure I had a known-good configuration that I can fall back to if everything went to crap for some reason. I then created the new droplet, logged in as root, and started installing packages using yum. The only big issue I had to resolve was that CentOS only has Python 2.6.6, while I needed 2.7.* for Pelican. Since yum and some other things in the system rely on the system python, I had to install python2.7 in /usr/local/ Thankfully it was fairly straightforward to install using the make altinstall command.

Everything was smooth sailing from there. I updated my DNS entries to point to the new droplet. After that propagated sufficiently (I had a TTL of 30 minutes), I stopped the old droplet, took a final snapshot of it, and destroyed it. While it took a little bit of time for the migration, it was all very simple.

© Simon Yang. Built using Pelican. Theme by Giulio Fidente on github. .