#DevTO published an article I wrote on “5 Tips On Finding A Mobile Job In Toronto”. Probably tips 1-4 are location agnostic. It’s an insight about how I made the transition from Flash Platform to Native Android developer. Have a read and let me know if I am on point or dead wrong.
Java Tip: Use Treemap for sorted Hashmap

Treemaps are great to use if the key of the map already implements Comparable. For example, you can have a map with dates for keys. Insertion into the map will auto sort the newly inserted value by date, so when you need to extract what you need via .values(), it’s already in the ordered by date.
Source: StackOverflow
VIDEO: Hardware Accelerated Android Emulator
Android Engineering Team is making making huge strides in emulating the ARM stack on x86. I’ve been developing on API 10 x86 Atom image since it was released 2 weeks ago and it has dramatically changed my productivity. It’s great to see Honeycomb/ICS rendered in x86 OpenGL. It’s so cool to bring the Android emulator to first-class citizen for developing apps
The news can be found at http://android-developers.blogspot.ca/2012/04/faster-emulator-with-better-hardware.html
Sunny Weekly Planner Deluxe Edition Coming Soon
I released Sunny Weekly Planner Basic Edition 2 months ago hoping that I would land a job. Once I got that job, I totally neglected to release the paid-for Deluxe Edition. I’ve spent the last 5 hours working on the last 5%. I just need to do a youtube video and upload it to the marketplace before the end of this weekend. TPT Community, thanks for your interest in this app.
Notes on MultiTouch
- MotionEvent.getAction() & MotionEvent.ACTION_MASK will yield additional pointer specific data. MotionEvent.getAction() alone will yield the basic ACTION_DOWN, ACTION_UP, ACTION_MOVE, and ACTION_CANCEL events
- When an ACTION_DOWN has already occured, the next subsequent touch down before the previous touch goes up, will register as ACTION_POINTER_DOWN instead of ACTION_DOWN
- MotionEvent.ACTION_POINTER_DOWN & MotionEvent.ACTION_MASK will yield the index of the pointer that went down
- MotionEvent.ACTION_POINTER_UP & MotionEvent.ACTION_MASK will yield the index of the pointer that went down
- During a MotionEvent.ACTION_POINTER_UP or MotionEvent.ACTION_POINTER_DOWN, use this to derive the identity of the pointer for this event:
final int pointerIndex = (mEvt.getAction & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
final int pointerId = ev.getPointerId(pointerIndex);
Source: Making Sense of Multitouch
RANT: Staples Canada Would Rather Be Undersold + Reject My Money
On Tuesday March 13th, I visited the Staples at the Stock Yards, 5452 Keele Street, Toronto to buy a Canon ELPH 300 HS. I asked a sales rep for assistance in getting me this digital camera from their stockroom. When he came out, I mentioned that Dell.ca was selling this at a lower price for one day only with free shipping. You can see a record of this sale mentioned here on Redflagdeals.com under Day 10 Electronics and Accessories.
The sales rep refused to honor the advertised guarantee that Staples will not be undersold. His claim was that they will only price match Canadian competitors who only have a brick & mortar store like Futures Shop, Best Buy, TigerDirect etc. He added that even if he wanted to do the price match, there is no overriding computer code that would allow him to honor Dell’s price.
I argued that “You would rather have Dell Canada take my money than you guys?” He responded in defense that he did not make these policies. I argued back that the policy does not make any sense and that if Staples doesn’t want to take my money, I will take it somewhere else. I was under the impression that Staples would have been happy to have my money directed towards them rather than go into a competitor’s pocket.
I came into your store for the customer service and this is the disappointment I get. Staples failed to offer a competitive price to begin with retailing the camera for $219.99 when most stores have laid it out for clearance at $169.99. Their customer rep is completely incompetent in regards that his company has a policy regarding the price match of online stores that do not have brick & mortar locations. How could a company as big and allegedly reputable like Staples not price match Dell? Are they considered an un-authorized dealer who never honors returns or warranties? As a potential customer, I felt my visit to Staples was a complete waste of time.
Video + Post-Morterm: #devTO for Android
When I used to lead a team, I would hold post-mortems at the end of Sprints to focus on what we did good and what we could do better. I figure I should do one on the latest app I have done which applies my latest knowledge on Native Android.
Things I Did Good:
- Core functionality was completed in 1 week
- Skinning the app took 1 week; learned how to create a number of reusuable scalable drawables like the < layer-list > to wrap < shape > ‘s with gradients and drop shadows
- I was fortunate to use the TEDxToronto android app as a template; it allowed me to built upon it to add other features like landscape support and backwards compatibility with v1.6+ devices, Google maps integration
- I am not a designer but I have an intermediate understanding of Photoshop to redesign the #devTO logo for the purposes of catching the eye in the Marketplace
- Implemented naming conventions on drawables and layouts to manage the complex collection of View artifacts
- Threading: Used a non-UI thread to download tweets, used a non-UI thread to queue and download profile pics. This adds to a more streamlined user experience rather than waiting for the app to come a screeching halt, waiting for all the data to be downloaded on the main UI thread, locking up the view
- This app implements ActionBar Sherlock which provides backwards compatibility of Android 3.0′s Honeycomb’s Action Bar to < v3.0 devices .
- This app implements the twitter and itinerary views as list fragments so that they may be reused in the same view in a tablet app. Fragments were originally available only for newer devices but backwards compatibility libraries like ActionBar Sherlock make new features like this available to older devices (1.6+)
- Out of the 3 apps I have done so far, I invested a lot of time to make this the prettiest and most accessible (1.6+). The stylus based app I did before was exclusive to one device (Lenovo Thinkpad Tablet 3.1+). The vocal tweet app had minimal UI because it was an audio app
Things I Could Do Better:
- Even though I have a deployment checklist, there is at least a day between code complete to public ” final ‘final’ ” release. It’s like once it’s up there and you download it, there is the smallest thing which causes me to apply the fix, test it, export a release build and then upload it. The build is available to the public the same day but a couple of hours after deployment. Annoying and a time sink.
- I ran out of time to fit the tablet version in. It’s a matter of creating an optimized view for the same data. The same non-UI components can supply the data for the tablet version of the views
- I design the app to be extensible to create another instance of the app for another brand. However when I tested this, I ran into some errors that require some time to investigate.
- Even though the app is out there, people will not download it unless they know about it. Learning how to market an app is equally as challenging as developing it
- I wish I had enough time (or another resource) to make the content for the Itinerary section server-side driven
Just read the Adobe roadmap…dismal
Just read the Adobe roadmap….dismal. There is nothing in there to win me back. Macromedia used to be so awesome. Adobe screwed everybody in the end. There are changes announced “to meet the needs of developers over the next five to 10 years”. Honestly, I believe 5 years from now there will be 50% (or less) users using the Flash Platform and 75% less people developing for it. Mobile devices are surpassing the sale of desktops. The growth and the users are there. AIR continues to struggle in mobile as a contender among a plethora of options.
I have some strong doubts about the strategic direction chosen will not lead them anywhere to the head of the pack where they used to be. I have been riding the Flash Player wave as early as version 3 (1998). It has been a great ride. I really enjoyed the developer relations and previous announcements of innovation over the years which forged a strong relationship between developers and the Flash Platform engineering teams. It’s 2012. It’s not foreseeable for them to regain this trust because the extensive time it took to build it. The Flex and Flash evangelists they have in place today (or recently) are total strangers to me because I wonder what happened to the ones I used to deal with or reached out to developers like me. Who can you trust these days?
Macromedia made some great tools and really did a great job of getting it to where the users are. In the long-term, Adobe has re-aligned it’s commitments to go where the majority of users are not. This retreat into gaming and premium video looks to be the Flash Player’s final resting place.
Video Demo: Generic Event Application for Android Mobile + Tablets
This is an app I have been working on for the past week that lets users know who is talking at an event, what are they talking about, when is the event happening, and what are other people saying about the event. The general layout and idea is based on the TEDxToronto app.
This app will work on any Android 1.6+ phone and down the road will have an optimized layout on Honeycomb 3.x tablets using the same code base. Actionbar Sherlock makes it possible to use fragments in older devices making it possible to do app development like this available to wide range of devices, making the fragmentation a non-issue.
The business case for this app is that it can be subclassed and skinned for conferences, monthly meetups, or any special event for that matter.




Recent Comments