So you're hosting a code review and Xcode is up on the projector (or screen-share via Skype). You look around and notice folks are squinting their eyes (most engineers won't admit their vision is getting worse from coding all those years).
There are a few options to get that font larger and sharper so that even the folks in the back of the room can see what you're talking about when you say "I created a pointer to a pointer of NSError so I can return it from my function as an additional parameter." My favorite option so far: The Xcode Presentation Theme.
To set Presentation Theme, open Xcode Preferences, go to Fonts & Colors, then select Presentation from the Theme list on the left. All appropriate fonts get larger, and the Xcode interface itself stays untouched. Here's a screenshot of the Preference setup:
It's really easy to revert this back to your previous Theme and not mess up your monitor settings, projector settings, or have to use screen zoom that can create blurry text. Now that's Gangnam style.
Saturday, September 29, 2012
Wednesday, June 27, 2012
iOS From HTML5 Back to Native
It's interesting to see the trend of iOS apps that moved from a pure native experience to an HTML5 hybrid experience and are now moving back to a pure native experience. Or in a few cases started out as an HTML5 hybrid experience first. Case in point is that Facebook has finally admitted how buggy and poor performing this exercise has been.
At Lolay we often get a first hand look at such bugs and performance issues with a hybrid experience. We often get asked to rewrite an HTML5 experience back to a native experience as the products just are not snappy enough of an experience for end users. Facebook is no exception, and we've often used the Facebook app as an example of what performance you can expect with a hybrid experience.
There are a number of issues we run into with hybrid experiences.
In all honesty, it's not that a hybrid application is bad. It's just that the HTML for a hybrid experience needs to be used strategically and as light as possible. Here are some our best guidelines for such an experience.
Following these guidelines can lead to a successful hybrid application, although it can be challenging for an organization to think in a lightweight manner.
At Lolay we often get a first hand look at such bugs and performance issues with a hybrid experience. We often get asked to rewrite an HTML5 experience back to a native experience as the products just are not snappy enough of an experience for end users. Facebook is no exception, and we've often used the Facebook app as an example of what performance you can expect with a hybrid experience.
There are a number of issues we run into with hybrid experiences.
- Too many applications try to replace the entire app logic with HTML5. They use the app as a shell rather than in key, strategic, critical places.
- HTML5 Javascript and CSS downloads are way to heavy and large to download over mobile.
- iOS WebView's have notoriously poor performance, and Android is not significantly better on a year old device.
- Caching to prevent excessive downloads of CSS and Javascript can cause a large amount of bugs as Javascript and server side are not necessarily updated at the same time. This takes a strong asset versioning approach to get around these issues.
In all honesty, it's not that a hybrid application is bad. It's just that the HTML for a hybrid experience needs to be used strategically and as light as possible. Here are some our best guidelines for such an experience.
- Abandon Javascript and a Web 2.0 interface in your apps. You're better off utilizing a very lightweight XHTML request/response interaction with minimal CSS and very minimal javascript (i.e. if it can't be inlined, then consider not using it).
- Perform all navigation natively. Keep the HTML for content only that needs to be updated easily without an app update. A great example of this is Urbanspoon or Zite.
- Perform no animations, scrolling, moving in the HTML itself. Keep that all native.
- For any button actions or similar perform this as an in-app scheme (i.e. your-app://) that is handled natively.
Following these guidelines can lead to a successful hybrid application, although it can be challenging for an organization to think in a lightweight manner.
Tuesday, February 21, 2012
iOS Custom UISwitch
On an iOS project we had the need to provide a custom UISwitch similar to the following.
With iOSS 5 there is quite a bit of support for interface customization. It's great for customizing almost every control in iOS, except... UISwitch. The only thing customizable with UISwitch is the tint color, which is pretty limited. So, iOS 5 is out for supporting this customization.
Next, we looked at several existing open source projects. There are several out there that support a customized look and feel, but none of these had the "feel" of the built in UISwitch control from Apple. Some would allow dragging, and some just clicking, but none allowed both a click and drag interaction.
There was a strong desire for the switch to behave just like the standard UISwitch that supports both a click and drag interaction. That led us to create our own. We were able to support the look and feel and mimic the behavior of UISwitch by implementing a custom drawRect as well as a custom touch handling. Check the Open Source implementation.
LolayUISwitch.h
LolayUISwitch.m
Next, we hope to extend this to support setting the "on" value with animation, and additionally adding in support for all the autoscale settings of iOS on a UIControl. Also, thoughts of supporting a UIView rather than just a UIImage.
With iOSS 5 there is quite a bit of support for interface customization. It's great for customizing almost every control in iOS, except... UISwitch. The only thing customizable with UISwitch is the tint color, which is pretty limited. So, iOS 5 is out for supporting this customization.
Next, we looked at several existing open source projects. There are several out there that support a customized look and feel, but none of these had the "feel" of the built in UISwitch control from Apple. Some would allow dragging, and some just clicking, but none allowed both a click and drag interaction.
There was a strong desire for the switch to behave just like the standard UISwitch that supports both a click and drag interaction. That led us to create our own. We were able to support the look and feel and mimic the behavior of UISwitch by implementing a custom drawRect as well as a custom touch handling. Check the Open Source implementation.
LolayUISwitch.h
LolayUISwitch.m
Next, we hope to extend this to support setting the "on" value with animation, and additionally adding in support for all the autoscale settings of iOS on a UIControl. Also, thoughts of supporting a UIView rather than just a UIImage.
Tuesday, December 20, 2011
MyLife Android
It was great partnering with MyLife to launch their Android application. Beyond the longstanding People Search of MyLife this contains a great way to see and post to all your social networks in one place. It makes "crossposting" and replying a breeze.
Or, if you like to see a tour, check out the YouTube video.
Wednesday, October 5, 2011
Dear Steve, we wouldn't have...
Dear Steve Jobs:
Thank you for being inspiring, innovative, and just an incredible person. Reading the blogs, news articles, and other press, we have to agree with all the positive statements about your life and contributions. Without those contributions, us and our family/friends:
- Wouldn't have had this revived industry to create our startup mobile software company
- Wouldn't have the ability to see to see loved ones realtime on business trips without a PC or Mac
- Wouldn't have had that amazing feeling when the brand new box from Cupertino showed up at our doors (too often sometimes)
- Wouldn't have realized that American ingenuity and passion can still mean something in the 21st century
- Wouldn't have missed you as much as we do
Sincerely,
Lolay, Inc.
Thursday, September 15, 2011
App Upgrade Adoption
Here's an interesting adoption plot of active users on a particular version of a major social networking app on the iOS App Store (In this case it was a Universal App). What it's interesting to point out is two different upgrade scenarios.
One scenario (Dark Green to Mustard) is where adoption is organic through the App Store and relying on the app store itself to notify the user. The second scenario (Mustard to Blue) utilizes an alert dialogue to let the user know a newer version is available with a direct link to the download in the app store. Here's the comparison.
In a nutshell App Upgrade Adoption is slow, but you can certainly speed it up with an Alert when the user launches the app to let them know to upgrade to a new version.
One scenario (Dark Green to Mustard) is where adoption is organic through the App Store and relying on the app store itself to notify the user. The second scenario (Mustard to Blue) utilizes an alert dialogue to let the user know a newer version is available with a direct link to the download in the app store. Here's the comparison.
| iOS Organic Adoption | iOS Alert Adoption | |
|---|---|---|
| 25% | 2 Days | 2 Days |
| 50% | 5 Days | 3 Days |
| 80% | 12 Days | 6 Days |
| 90% | 21Days | 14 Days |
| 95% | 23 Days | 15 Days |
In a nutshell App Upgrade Adoption is slow, but you can certainly speed it up with an Alert when the user launches the app to let them know to upgrade to a new version.
Monday, September 5, 2011
Cowardly Lion
Ok, so I upgraded to Lion. Faster, better, smarter, right? Wrong. Trying to run a mobile development efforts for our organization has been a bit of an effort. As a background, I have a MB Pro i7 with 8GB of memory.
Here are the trouble pinpoints:
- Crashes (Safari, Xcode, iCal, Mail and even the Preview app!)
- Slow and laggy (Safari and Xcode)
- CPU out of control. I've come back to my machine after 30 minutes to find 400% CPU utilization.
- Finder/Icons gone. Sometimes during Xcode development, my icons disappear from the dock and I have no feedback as to which apps are running.
Here is what I've tried:
- Clear Safari cache/history
- Reset PRAM (http://support.apple.com/kb/ht1379)
- Delete Library/Caches and ~/Library/Caches
So what worked?
- Clearing Safari and my cache definitely improved internet performance.
- Resetting the PRAM stopped my out of control processes (high CPU)
- Deleting my caches seems to have stabilized the icons disappearing and some of the caches.
Will update this blog as I continue to be the Lion Guinea pig!
Subscribe to:
Posts (Atom)


