Totally off-topic but totally bad-ass!
I got my new iPhone 5S Saturday! It’s a beauty and I spent a lot of time getting rid of apps that I only have around for reference. I’ll keeep them on the 4S for awhile. Now I have a nice testing array: 3GS, 4S, 5S, and iPad2. I am planning to get the iPad Air for Christmas. You have to have something to look forward to! Anyway, I was not able to get a signal in my grocery store, and I was with the 4S. The fingerprint scanner fails far too often. I will see if I can retrain it. It probably fails 50% of the time. I haven’t used the camera yet, but I love the fact that there are 5 different icons for different photo types. And I love the control center slider. I am quickly growing to prefer the flat iOS7 look over the 3D gradients of previous releases.
I guess I should see about getting a state of the art Android also. Maybe a tablet. Right now I have two Android devices for testing: an pay per month LG running Froyo, and my husband’s previous phone, a Galaxy S3 running Gingerbread. I will probably upgrade it to Ice Cream Sandwich. Still, it’s a couple of years old. I had an issue a couple of weeks ago that was only occurring on newer devices due to hardware acceleration.
Last week, I decided to do something about the losing the datePicker on rotation in my HotelPlanner Android app. Fragments to the rescue! I used the Big Nerd Ranch Android book, which explains the versatility and advantages of fragments very well.
I will gradually turn all my activities into fragments in preparation for making a tablet version. I’m still trying to decide how far to go with fragments before releasing the next update. I have one activity and its datePicker turned into Fragments now. There is a progress dialog in this activity, as well as a regular diaglog that I will probably do as well. Then I will let that soak a while before I go further.
Sometimes it’s hard to stop once the momentum gets going, so it’s important to draw boundaries up front. And it is so much fun, and rewarding, to keep implementing something that is improving your code and moving you forward.
I submitted an update to the RhythmId app due to customer feedback emails, and to make it look nice for iOS7. I used the automatic migration to ARC which worked pretty well. I had some C structs that I had to turn into classes, and it turned a couple of pointers into weak pointers where they should have been strong, but all in all it was pretty painless. Definitely easier going forward, especially in an app that is resource heavy.
You may think I haven’t been very productive lately due to the lack of announcements here, but I have been spending a lot of time making iOS lectures and learning KeyNote and iMovie to create videos from them. What I’ve discovered is that it’s more time-consuming than I bargained for, but I am learning so many fundamental programming facts that I didn’t know that I believe it is worth continuing with. I will not post a link though, since they are not very good yet.
I finally upgraded my Eclipse SDK so I could install the Genymobile Emulator, and I am so glad I did! The Android emulators bundled with Eclipse are painfully slow, and suck all the joy out of programming. The Genymobile is even faster than an actual device! Definitely worth spending half a day upgrading Eclipse and installing Genymobile. It’s not as easy as it should be, but nothing with Eclipse ever is, is it?
I made a half-hearted attempt to port my project over to the Android Studio, but that process is still too buggy for my patience level. Besides, the bundled emulators are still reported to be slow, and I’m wary of all the Beta warnings. I think it’s going to be a much nicer SDK once they finally get it ready for prime time.
Today I submitted a new app promoting my husband’s books. He’s published a sci-fi novel, and has a couple of others in the works. It was an interesting foray into the world of sharing with Google+ and Facebook. This one is obviously a promotional tool for his own use. I don’t think anyone is looking for sci-fi authors in the app store!
This weekend, I uploaded an update to my existing Puppydogs storybook app so that it runs on the iPhone as well as the iPad, and has an option to turn the sound off in-app. I also put it in the kids category and put a parent gate on all the places where you click to leave the app (review, recommend us, website).
I also submitted a new app that is a free ad-supported version of the PuppyDogs storybook. There are no parental gates on clicking the ads so I’m curious to see whether it passes approval. Both Apple’s and Google’s ad networks have flags to indicate the app is for kids. But the book wasn’t selling worth a darn, so I thought maybe a try before you buy option was warranted.
The last six weeks or so I have localized the HotelPlanner iPhone app in around 15 languages! There’s a fair amount of work to localize an app. First of course, you have to get all your string names from a dictionary instead of just hard-coding them. All the strings that had existed only in your layout files need to be pulled into the code and populated from there. Then you have to test all the languages to find button sizes, font sizes, label sizes that look the best for each language. I had a couple of images with words that I adapted to a background that I could overlay with a label with localized text.
Then it took a week to generate all the metadata and upload it to the app store. Tedious and error-prone. I am so looking forward to the spike in downloads we should get when the app gets approved!
This month I worked through a book called Unity Game Development Essentials. I totally love this book and it makes me think that Unity 3D is the way to go. It’s fun to develop with the way that Photoshop and Maya are, with lots of graphical interfaces and immediate visual feedback. After I finish the last couple of chapters, I will work through some tutorials on how Unity works with IOS and Android. After my disappointing experience with Sencha Touch, Unity 3D has turned out to be a nice surprise. The irony is that because 3D is so complex, they have developed tools for working with it so that it is actually easier to work with than 2D.
Sencha Touch seems like a great idea, but I was totally not able to fall in love with it. It feels like I’m writing JSON code, lots and lots of configuration. And really difficult to figure out why things do not work. The official tutorials are buggy and miss key pieces of information that are required to get the samples to work.
So I will be keeping with maintaining three separate code versions for Hotelplanner: IOS, Android, and the Web App. We are using Sencha Ext for the real-time downloading of hotel offers. To do the entire search before presenting a web page takes over 10 seconds! Ouch. With Sencha, we can start downloading immediately, and replace existing entries in the DOM with better offers since we check about half a dozen sites for these offers. Owen is working on doing the same for the mobile web version with Sencha Touch. I will happily leave the Sencha code in his talented hands.
I just finished reading Brain Rules by John Medina. This is a very well written and fun to read book full of things we know about the brain, primarily from psychological studies. What affects our ability to learn and memorize things? What happens to our brains when we sleep? How the brain processes vision and smell. Fascinating stuff that is written in a style that evokes the wonder that it deserves!
Unlike “How to Create a Brain,” which I love but mainly appeals to computer scientists. And unlike “Connectome,” which would appeal to anyone who loves science. I think “Brain Rules” would be fun to read for just about anybody. But then my brain is wired completely differently from yours, so what do I know?
IBM just made a movie by moving atoms around. Seriously. Atoms.
Every Friday I get Dave Verwer’s iOS Dev Weekly newsletter, and it often has useful information in it. This week he turned me onto appstorerankings.net.
AppStoreRankings.net is a really cool site for SEO. It lets you compare your App with your competitors in reference to ranking for a particular keyword. It gives lots of great stats on keywords, such as how many people are searching using that keyword and how difficult it is to rank highly with that keyword. It gives you suggestions on how to improve your rankings based on keywords. It lets you see your competitors’ keywords.
And it does all this in an intuitive interface with nice charts and graphics.
This page shows how we’ve ranked for the keyword “Booking” over time as compared with Expedia. Notice that it also shows that 952 iphone apps use the keyword “Booking.” The traffic value of 6.8 tells you a lot of people search with this term. The difficulty of 5.1 measures how hard it is to place well with this keyword on a scale from 1 to 10.
There’s a keyword optimizer, a keyword suggestor, and the paid version lets you track multiple apps and multiple competitors, among other things.
Overall, this site is very well done. I think it is going to be very useful for improving our rankings. I’m looking forward to putting it into practice.
I was so excited Wednesday when my boss said he would send me to WWDC! Oddly, my Safari browser shut itself down at 5 minutes until 1:00. I fired it back up and tried to log back on, but the screen said the site was down for maintenance! So I sat here refreshing the WWDC site until it said “Sign on to get your tickets!” which I happily did. The next screen I saw said ‘Sold Out!’ Unbelievable. So bummed out.
I have just finished what is probably the best science book I have ever read… Connectome by Dr. Sebastian Seung. Dr. Seung is professor of neuroscience computation and physics at MIT. He is also a brilliant writer, explaining complex research in easy-to-understand terms. Filled with analogies, metaphors, poetry, history, and the kitchen sink, Dr. Seung ties a tremendous amount of information together perfectly. It was a delight to read.
Utlimately, Connectome is about how neurons are connected… what we know, what we conjecture, how we know what we do, what we can expect to know with future developments. He speaks of the 4 R’s: Regeneration, reconnection, reweighting, and rewiring as fundamental processes of connectomics. He conjectures about “connectopathies” of certain diseases. He describes the tools used on living and dead brains, and the resolution of the information gathered by each. He even delves into the fantastical realms of Kurzweillian brain uploading.
I cannot begin to recommend this book enough to anyone with the slightest interest in how the brain works. Get it. Read it! Thank me later.
I have declared the next few weeks Sencha Touch Month. I just completed reading “Sencha Touch Up and Running” and it seems like a great book. One of our other senior developers uses Sencha Ext. extensively, so it seems only natural to explore this route for the mobile site. But first, I will develop a personal app with it. I am going to create a “promo” app for my dancer and writer artist friends. It’s simple, reuseable, and data driven. It’s high time I start a new app also.
Sencha Touch is a MVC framework that leverages HTML5 and CSS3 webkit. You can package the website as an iPhone or an Android app. So this is my plan for the next few weekends.
Oh… and I still loooovvveee my Dell hi-res monitor.
My new Dell U2713HM-IPS-LED monitor came in last night and I am thrilled!! I can make things as tiny as I want and the text is still crystal clear. The difference in a 1080 versus a 2560 resolution is whether you want to magnify your existing screen, or whether you want the same size windows with more desktop space. Since I am a developer, I have lots of windows and emulators and browsers up and running, and I needed more space. The Dell is beautiful, really well made, non-glossy, and the stand adjusts in all directions. For me, this is total perfection. The resolution is gorgeous. I love this monitor.
I bought a thunderbolt adaptor for it so I could get the highest resolution, and once I realized there was a menu that you activate with the side buttons to select your input, it worked right away. No issues. It comes with several cables, but not one that would give the Macbook hi-res.
I’m in love! After making myself crazy comparing specs over the weekend on different monitors, I stopped by Best Buy on the way home today and walked out with an LG 1080p 27″ IPS Cinema Display monitor. I simply connected it via HDMI to my macbook and had instant mirroring. I pulled up the display settings in the settings, and changing it to side-by-side displays was very intuitive, giving me more than twice the desktop space. I should have done this long ago. The 17″ macbook was barely sufficient. The 15″ is hard to work with when you are developing. Plus it’s very nice to have a matte display back. More later…
Update: The next day I returned this monitor. It turns out that a 1080p monitor doesn’t give you more desktop space because it magnifies your windows much bigger than you would like them. When I use cmd-minus to make text smaller to see more of it, it is so pixelated I cannot read it at all. So today I ordered a Dell U2713HM-IPS-LED CVN85 27-Inch Screen LED-lit Monitor from Amazon. I’ll let you know how things go Tuesday when it arrives.
I admire Ray Kurzweil. He is one of my greatest inspirations. Ray is the author of “The Singularity is Near,” and more recently, “How to Create a Mind.” Google has just hired him to see what he can do with natural language search. Here is a ten-minute interview conducted on his second day on the job, discussing his vision.
You can sign up for Ray’s newsletter at KurzweilAI.Net. It is always full of amazing state-of-the-art research.
So after I replaced all my button images, I had a lot of unused resources. How do you know if it’s safe to delete the image file? If you download this script, drop it in your project folder, open a terminal window, cd to your project directory, and type in “sh unusedImages.sh png >> MyUnusedPngs” it will list all the unused pngs in the MyUnusedPngs file. I’ve copied the script below for reference. Be careful if you create image filenames in code … these will be flagged as not being used even though they are.
# Usage sh unusedImages.sh (jpg|png|gif)
# 1 -
# NSString *imageName = [NSString stringWithFormat:@"image_%d.png", 1];
# This script would incorrectly list these images as unreferenced. For example, you might have
# This script will incorrectly think image_1.png is unreferenced.
# 2 - If you have a method, or variable with the same name as the image it won't pick it up
PROJ=`find . -name '*.xib' -o -name '*.[mh]' -o -name '*.storyboard' -o -name '*.plist'`
for imageName in `find . -name '*.'$1`
name=`basename -s .$1 $imageName`
name=`basename -s @2x $name`
name=`basename -s ~ipad $name`
name=`basename -s @iPad $name`
if ! grep -q $name $PROJ; then