Monday, November 18, 2013

AnDevCon SF

It's AnDevCon time again! This time I did something slightly different. Instead of giving lectures, I gave a workshop. It was a hands-on session to build a custom view called FractionView.

My most popular talk is Android Custom Components. I have given it many times already, and people are still requesting it, so I know the material is very much in demand. But since I offered it during the past 3 AnDevCon already, I thought I'd change it up a bit and go deep with a workshop. I want people to come in not knowing anything about custom view and walk out with one built from scratch.

The challenge of a hands-on workshop is pacing. I allowed plenty of time for people to complete the exercises, stressing that they should interrupt and ask questions. Some of the exercises were copy-and-paste, others were tasks with guidelines only. This way people had a chance to apply the knowledge right away, hit some of the common mistakes, recover, learn and remember.

I also added an extra-credit exercise for people who were ahead to keep busy. It was very well received. In fact some people wanted more! I will do that in my next workshop.


Workshops happened on Tuesday, the day before the conference started. That meant I could enjoy the rest of the conference without distractions from getting ready to deliver my own sessions. Cool!

Reto Meier from Google opened the conference with a wonderful keynote. He urged us to push the boundaries of the system, not only by claiming the benefits, but also showing us why we were not doing it already.

Engineers have two time assessments for tasks: 5 minute or forever. Incremental improvements are often seen as "taking only 5 minutes", and it feels good to get things done. Going into the unknown, however, is daunting. For instance a lot of developers have been putting of in-app purchase, because "it will take forever". Turns out "forever" could end up being just 2 hours. So take the plunge and try something new. Make a big change. It may not be as daunting as you presumed.


I have always learned a lot from the talks at AnDevCon, so I was a bit surprised to find that I felt I was going to fewer deep-dive sessions than before. Looking into it a bit more, I realized there were still a lot of advance topics on the schedule, but I attended quite a few of them at previous AnDevCons already, and there were some slots with multiple talks I wanted to go. The conference is so much more than just the talks, though. I had many great conversions over lunch, at social breaks, after sessions chatting with other attendees, etc etc. And of course, at the women luncheon as well.

Women luncheon

I have attended the women luncheons at every AnDevCon, and it was always fun to hang out with fellow women attendees. This time I was hosting the luncheon with Sonia Sharma from Google, and I was actually a bit stressed about it, almost more than my workshop. I felt that the fun came from spontaneity, not something I could plan or practice. So we went for table topics, hoping to seed the conversations and let the attendees take it from there. I am happy to report that it worked quite well!

Sunday, September 22, 2013

Strange Loop: Go beyond your day-to-day

When I first heard of the Strange Loop conference, my immediate reaction was, "that is not a conference for me". I was under the impression that it was for language designers to discuss DSLs, type systems, variable binding etc, and not application developers like me.

I was not planning to attend the conference, let alone submit a talk proposal, until I saw an email on the DevChix mailing list. It was an invitation to join a Google Hangout with the Strange Loop organizer to learn more about the conference. Curious, I went and asked questions about the kind of talks they were looking for, and decided to submit a proposal after all. Two, in fact, a deep-dive talk and a overview talk, since I was still not sure what works best for this conference. A few weeks later, I got an email from Strange Loop, telling me they'd like to hear me Bust the Android Fragmentation Myth.

When I boarded the plane for St Louis, I was still not sure if Strange Loop is for me. It seems so far away from what I do. But coming back, I realized that being far away from what I do turns out to be a good thing. It gives me a chance to sample various exciting developments in my field, and it was a lot of fun to step back the day-to-day tasks and look at the big picture.

Opening keynote

Strange Loop opened with a keynote by Jenny Finkel from Prismatic.

Before I get into the talk, please take a moment to admire the venue. Yup, it was an opera house! Such a beautiful place.

The keynote was wonderful, with enough technical details to let us peek behind the curtains of the Prismatic recommendation engine, but not too much to be dry. I enjoyed it a lot.

That was a perfect opening to the rest of the conference. Over the two days I went to many different talks, and listened to great variety of topics. Here are some of them.

Visualization Driven Development

It is common to visualize data after we deployed our software. But in the Visualization Driven Development talk, the speaker argued that we should use visualization during development as well, as a tool like printing log statements and examining state via the debugger. Relying solely on text during development is like picking music by reading its score. (Edit: the example was picking wedding music for an engaged couple, not professional musicians)

Learnfun and Playfun

How do you teach the computer to play video game? Tom 7 went for a pretty simple metric: bits should go up! It was a really light-hearted talk, with lots of cool demos. Check out the videos on his web site.

Natural Language Processing

I studied NLP in grad school, but haven't used it for a long long while. The NLP talk was a nice trip down the memory lane, but also showed me the power of open source. There are so many tools for text processing now! I am especially impressed by nltk, a python library. Reminds me of import antigravity from xkcd.

Bust the Android Fragmentation Myth

My talk was in the late afternoon on the first day.

This is the second time I gave this talk, the first time being OSCON. As usual, I polled my audience before starting, and the Strange Loop crowd had a lot more mobile developers. As a result I sped past the hello world fairly quickly, and spent more time on resource folders.

Afternoon keynote

In the afternoon keynote, Jen Myers gave a passionate speech on making software accessible to everyone. She viewed the current status as a legacy system, and showed us how to improve it by small focused refactoring. She shared stories from Girl Develop It, of empowerment through inclusion. She also emphasized the importance of role models, with wonderful examples such as Sally Ride, Neil deGrasse Tyson and Nichelle Nichols.

The Birth and Depth of Javascript

Strange Loop offers an opportunity to look into the future, and in this talk, the speaker took it quite literally: it was given from the perspective of 2035! In this future, Javascript, together with asm.js, would allow any language to be compiled to run in the browser. Not only the talk itself was entertaining, but the audience also asked questions in the same spirit, one even asked the speaker to predict the future, seeing that this was a "historical" talk.

Java Puzzlers

I have seen the Java Puzzlers talk a few years ago at Google, and totally loved it. It was given in the style of Click and Clack from CarTalk, complete with overalls for the speakers. The puzzles exposed some unexpected behaviors of the Java language, and offers suggestions to avoid the pitfalls. This talk has a completely new set of puzzles, and is as delightful as always.

City Museum

On top of all these wonderful talks, Strange Loop has another cool offering: the conference party at the City Museum. Instead of a museum, it is better to think of it as a giant playground, with lots of secret passageways, multi-storey slides, cages and spirals, and suspended vehicles like a school bus and a plane.

I was having fun exploring the different nooks and crannies on the first three floors, and then heard someone talking about the roof top garden. What, there is more? I found the elevator up, and was treated to a nice cityscape. Plus lots of slides, including one that went all the way down to the third floor. As looked around, I realized that there were more playground outside the building, with a big ball pit, an airplane, and lots of caged passageways.

Given the size of some of the openings this is clearly designed for children, but that did not stop the hundreds of geeks from exploring the place, including yours truly. I had so much fun!

Friday, September 13, 2013


Did you know how I got started in iOS development? At a iOS workshop at Devoxx, a java conference. I have always wanted to learn about iOS, so I went to the workshop, and from there I went on to publish my first iOS app, Heart Collage.

A few months after I published Heart Collage, I saw the call for speakers for 360|iDev, an iOS conference. Thinking about my experience at Devoxx, I decided to submit an introduction to Android session. And it was accepted!

Intro to Android for iOS developers

It was quite challenging to condense the vast sea of Android knowledge into a 50-minute talk, so I focussed on providing a framework for people to explore further. I mapped parallel concepts between iOS and Android to quickly get people up to speed, and then went on to explain two aspects that are rather different on Android: layouts and intents.

I was a little bit worried to be an Android developer among an iOS crowd, but people were super friendly, and my session was very well attended. For the rest of the conference I kept sitting next to people who were at my session, and they said they enjoyed it a lot, gaining an appreciation for the Android platform. This makes me very happy, to help break down the artificial segregation of technologies.

iOS talks

I went to many different talks, soaking up as much iOS knowledge as I can. I learned about custom controls, computer vision, auto layout, UIKit Dynamics, the Objective-C runtime etc etc. Some of it totally went over my head (method swizzling I'm looking at you), but I walked away with lots of concrete knowledge, and got so excited that I played with it right away, at Game Jam.

Game Jam

On Tuesday night there was Game Jam, for people to get together and write games. Initially I wasn't going to participate, but after going to the computer vision talk, I decided to see if I can implement the prototype of a game idea that I had for a while: Color Hunt.

Color Hunt randomly generates a color for you to find it with the camera. For the longest time I thought I needed some complex algorithm to compare colors, and then I saw the Rubik's Cube solver example from the computer vision talk, which uses hue for color detection. So I took the camera code from Heart Collage, grabbed the pixels in the middle of the screen, extracted the hue value and compared it to the target color. It worked!


I had a great time at 360|iDev. The organizers, John and Nicole Wilker, put in a lot of effects to foster the community. The quality of the talks were very high, but more importantly there was a lot of opportunities to mingle with everybody, at lunch, at the evening receptions, at game jam. I have met many people that I know I will keep in touch with, and that is the best part of conferences. On top of that I also came home with a prototype for my game! How awesome is that?

Monday, July 29, 2013


I just came back from a wonderful week in Portland, attending OSCON, the open source conference.

Presentation Aikido

Presentation Aikido
Presentation Aikido

I started the conference by attending the Presentation Aikido workshop. Damian covered many aspects of a good presentation, from material selection to storyline formation to slide design to handling questions. He pointed out that talks are rarely a primary information source. Rather, it connects the new material with what the audience already knows, providing a structure for understanding.

So many topics!

Besides public speaking skills, I explored many different topics during OSCON. There were more than ten sessions going on at the same time, and it was a bit overwhelming to decide which ones to attend. My daily routine focuses on mobile development, but instead of going to mobile talks I decided to use this opportunity to expand my horizons.

Making waves

In the HTML5 game workshop I learned to make sound by mixing sine waves, square waves and saw waves, and adjusting the sound envelope.

My first Arduino circuit
My first Arduino circuit

In the Arduino workshop I made my very first Arduino circuit, and took home a starter kit with enough components to build various projects.

Object-oriented programming vs functional programming
Object-oriented programming vs functional programming

In the Functional Thinking talk I realized that I have already dipped my toes in functional programming by using list comprehension in python and ruby, and learned about interesting concepts like memoization with pure functions.

Bust the Android fragmentation myth

I had so much fun going to all the different sessions that I almost forgot I needed to give a talk as well!

My talk covers the techniques to develop Android apps that works on all devices, no matter what screen sizes, aspect ratios and OS versions. Android borrows a lot of concepts from the web, so I used a lot of analogies with html, css and javascript. I did not realize that when I prepared the talk, but I was making connections for my audience, just as Damian said in Presentation Aikido.

Awesome speakers

The side effect of kicking off the conference with the Presentation Aikido workshop was the I became acutely aware of the presentation techniques of various speakers.

Are Corporations Evil?
Are Corporations Evil?

For instance, I really enjoyed the talk by Simon Phipps, Can Evil Corporations Embrace Open Source? He started by asking the question "Are Corporations Evil?", and compared them to lawnmowers. Lawnmowers cut. If you put your hand in a lawnmower, it gets cut. Because that's what lawnmowers do, not because they are evil. To change the direction of a lawnmower, you do not put your hand in it. Instead, you steer it from behind. Much like lawnmowers, corporations do not think or feel, and cannot be evil.

Later in the presentation he mentioned that people used to question his role pushing open source within Sun Microsystems. How can he pretend to embrace open source while working for a corporation, they asked. To which Simon replied, he was steering the lawnmower. There were many cross references like the throughout the talk, giving it consistency and structure. I loved it.

OSCON concluded with a fabulous talk by Paul Fenwick, titled "Fear, Uncertainty, and Dopamine". He showed us lots of interesting research on motivation, and suggested ways to apply them to the open source community. Paul was extremely eloquent, and his talk was informative, entertaining and inspiring. You should check it out.


OSCON was not just about workshops and session. I got to hang out with lots of cool people, explore Portland, and eat yummy food.

Bread at Nicholas restaurant
Bread at Nicholas restaurant

Monday night I went to Nicholas for some delicious Lebanese food. We had baba ghanoug, toum, lamb kebab, fried veggies and Lebanese pizza, and everything was so tasty.

8:36pm: was out at Nicholas with these amazing women (Rose, Rupa, Julia, and Chiu-Ki), in town for #oscon!
The gang at Nicholas: Rose, Rupa, Julia and me. Liene was holding the camera.

Wednesday night Rupa and I decided to pay a visit to the legendary Powell's Bookstore. We went to straight up to the top floor for the Rare Book Room.

Bookends in the Rare Book Room at Powell
Bookends in the Rare Book Room at Powell

After that we wandered around a bit. We stumbled upon the popup books in the children's section, which were really fun.

Popup book
Popup book

Thursday night we went out in search for yummy food again. This time we went to Bamboo Sushi.

Shrimp tempura roll
Shrimp tempura roll

We were going to get ice cream from Salt & Straw next door, but alas, the line was really really long.

On the last day we joined a tour to check out the food carts.

Food cart tour
Food cart tour

We sampled 9 carts in total:

  1. Empanada
  2. Bulgogi taco
  3. Falafel
  4. Bacon almond dates
  5. Salmon chowder
  6. Beer battered mushrooms
  7. Chilled basil sweet corn soup
  8. Chinese dumplings
  9. Liège waffles

After the food cart tour I met up with a friend who moved from the SF Bay Area to Portland a few years ago, eager to hear more about the Portland lifestyle. Portland strikes me as a very livable place - excellent public transportation, affordable real estate, thriving tech community. I am seriously tempted to move there!

Monday, June 24, 2013

The Importance of Being Whimsical

What makes a good app? Sure, it should do what it claims to do, intuitively and efficiently. But that is just the base line. How do you stand out from the sea of apps? You need to go above and beyond, and whimsy may just be the secret ingredient you need.


At the keynote at AnDevCon Boston, Chris Haseman and Zack Sultan showed us how they designed and implemented the Tumblr app. They shared many tips and tricks to make your app look good and work well, but the recurring theme is to delight your user.

There are many whimsical touches to Tumblr, one being the pull-to-refresh animation:

Tumblr could have gone with a loading text or a standard spinny, but this custom animation brings the app a notch above others. It entices users to refresh more, increasing engagement. This is the power of whimsy.

Welcome animations

Animation is a great way to add whimsy to your app. At AltWWDC, Ben Johnson showcased many different apps with effective animations.

This is the welcome page of the Just Landed app. The subtle movement of the plane and the clouds hints to the users that there is more to come, encouraging them to try it out. You can argue that this is gratuitous, nothing more than eye candy. It adds no functionality to the app. But apps are not just about functionality. You need to connect with your users, make them feel good using your app. A delightful welcome page sets the stage for the rest of the app, and helps them stay engaged.

Reward your users

What’s happening here? You’re in the Zappos app, thought these sneakers look good, and pressed the "add to cart" button. A cat floated out, dropping the shoes into your cart Mary-Poppins style. What’s your reaction? Cool, I want to see that again. How? By adding more stuff to your cart! A whimsical gesture that directly increases the bottom line. I doubt anyone can call that gratuitous.

Whimsy everywhere

So you want to be whimsical. What to do? Whimsy hinges on unexpectedness, so it's a bit of an oxymoron to provide a formula. Fortunately, you have already taken the first step - awareness. Once you start paying attention, you will see whimsy everywhere, adding them to your repertoire, ready to inspire your own.

The other day I found whimsy in the most boring place of all - airplane safety video.

The video caught my eyes with a teeny tiny suitcase that got stowed under the seat. I found myself looking forward to more funny shots, and paying attention throughout. If you graph the whimsical moments, you can see that they frontload them to set the tone:

Once you are hooked, they get down to business and show you some serious content. Just before you get bored, they sprinkle a bit of whimsy again, keeping you on your toes, watching the whole video looking for more.

Unpredictable delights

It was said that we are addicted to emails because they are like slot machines. Most of the time you get nothing, but once in a while you get something awesome, and so you keep playing, in hope of hitting jackpot. Whimsy does the same trick to your app. It delights users in unpredictable ways, keeping them engaged, and separates your app from the herd.

Saturday, June 22, 2013

DevConf Russia

It all started with a tweet:

My first reaction was, woah, Moscow? Not quite sure if I'd like to make the journey all the way from Silicon Valley. But after thinking about it for a while I decided, hey, why not. Initially I was going to make visit both Moscow and St Petersburg, but I was a bit daunted by the task of acquiring train tickets in Moscow, so I ended up just going to Moscow.

I arrived Moscow the day before DevConf, and the organizer was kind enough to come pick me up from the airport. I saw the beautiful Moscow metro on my way to the hotel.

Mosaic at Mayakovskaya station
Mosaic at Mayakovskaya station

Moscow metro
Moscow metro

In the evening I had dinner with other out-of-town speakers, and then the organizers took us for a talk.

St Basil's Cathedral
St Basil's Cathedral

GUM department store
GUM department store

State Historical Museum
State Historical Museum

Conference Day

The conference is from June 14 to 15, but the organizers told me that the second day was all Russian workshops, so I could go sightseeing that day. I assumed then the first day was talks in English, but when I showed up I discovered that all but three talks were in Russian. One was mine, the other two were on the same slot.

I gave my Android Custom Components talk. Here I was, explaining Canvas using the flip board:

Photo Credit: Antony Dovgal

After that I went the Android productivity talk by Alexandre Thomas:

And that was it. The rest of the conference were all in Russian. I ended up going for a walk with Alex and his girlfriend. There was a market right behind the hotel, with lots of interesting buildings:

And then we went to this really big park next door.

For dinner, we found two restaurants next to the hotel. One serves everything with fries, the other one is a Japanese restaurant. So we had sushi for dinner!

Turns out sushi is rather popular in Moscow, to the point where I recognized it in Cyrillic - суши.


Saturday the organizers took us all around Moscow. First we went for a river cruise.

Russian Academy of Sciences
Russian Academy of Sciences

Ministry of Defence
Ministry of Defence

Peter the Great Statue
Peter the Great Statue

Next we went to the Kremlin.


The Trinity Tower
The Trinity Tower

The Assumption Cathedral
The Assumption Cathedral

For lunch with went to Sanduny for tradition Russian food. It was so nice that I forgot to take photos!

After lunch we went for a walk. Saw the Bolshoi Theatre, GUM department store, St Basil's Cathedral and the Arbat area.

Bolshoi Theatre
Bolshoi Theatre

St Basil's Cathedral
St Basil's Cathedral

The DevConf Russia organizers took such good care of us it was quite amazing. They showed us around town, paid for everything, and even carried water bottles for us! I felt bad for not spending too much time at the conference, but it was really difficult to sit in sessions conducted in a foreign language. Hope the people who came to my talk found it useful!

Monday, June 10, 2013

AnDevCon Boston

Last week I was in Boston, attending AnDevCon Boston. Previous AnDevCon happens in the SF Bay Area, but it is branching out, alternating between east west coasts every six months. Very smart move to bring Android goodness to more people!

Glass Galore

One thing that jumped out at this AnDevCon was the prominence of the Glass Explorers. Quite a few attendees were wearing Google Glass, with a circle of people around them, asking questions, borrowing them for a test drive. Here is my friend Corey trying Glass:

Session highlights

There were so many interesting topics at AnDevCon that often they were scheduled at the same time, which meant I had to pick one at any given time. Fortunately many people were live tweeting, so there was a treasure grove of information to explore afterwards. Here are some highlights:

My sessions

I gave the same talks as AnDevCon IV: Beautiful Android on a Shoestring and Android Custom Components. They were scheduled back to back, at the last slots of the last day. I was very disappointed when I saw the program. My favorite part of speaking at conferences is talking to people, which often happens at lunch and coffee breaks. People who came to my talk spot me in the crowd, and we'd chat about my session and swap some coding stories. No chance to do that when my sessions happen at the end of the conference!

I was also worried that people would go home early, and no one would be around to come to my sessions. Fortunately that wasn't the case. Both of my talks were quite well attended, and people stayed behind a little bit to chat. Still, next time I would check the conference schedule as soon as it is published, and try to move my talk earlier. That way I get more time to hang out with people afterwards.

Hanging out

As always, I love hanging out with fellow Android developers at AnDevCon. Here is a group of us enjoying some seafood.

The next AnDevCon is back in Burlingame, from November 12 to 15. Hope to see you there!

Wednesday, May 1, 2013

Droidcon Tunis

My friend Corey Latislaw spoke at Droidcon Tunis last year, and really enjoyed it. This year she couldn't make it, but recommended me to the organizer. After a few email exchanges, I made the leap and bought a plane ticket to Tunis!

Mainz layover

There are not a lot of flights from San Francisco to Tunis, and I booked mine with Lufthansa, which had a 11-hour layover in Frankfurt. I took advantage of the time and visited Mainz, the birthplace of Gutenberg.

Gutenberg Museum
Gutenberg Museum

The Gutenberg Museum showcases the history of printing, with a few rare specimens of the Gutenberg bible. It also covered the printing techniques from East Asia, and there is circular movable type storage stand for Chinese newspaper printing with rows and rows of neatly sorted characters. I had always wanted to see that since a little kid, so it was quite a pleasant surprise to bump into it in Germany.

Tunis sightseeing

I arrived Tunis around midnight, and went for some sightseeing the next day. My first destination was the Bardo Museum, which is famous for its collection of Roman mosaics.

Roman mosaic at Bardo Museum
Roman mosaic at Bardo Museum

I really enjoyed the mosaics. They were made from tiny pieces of colored tiles, depicting the Roman life and mythology in a durable format. Some of the pieces were put on the floor, where they were meant to be, but I still feel like I should not tread on such beautiful art.

After the museum I headed to the medina, the old town of Tunis.

Tunis medina
Tunis medina

The medina is a maze alleyways lined with blue-and-white houses, traditional markets and towering minarets. I got quite lost in the beginning. Fortunately I found a walking tour map on the wall to orient myself.

Map for the medina
Map for the medina

It was a lot of fun exploring the nooks and crannies of the medina, stumbling upon an ornate door, a snack vendor hawking traditional sweets, or a group of cats sleeping.

Carthage and Sidi Bou Said

The next day I took a train to visit Carthage and Sidi Bou Said.

My first stop was the Carthage Museum. Not a lot to see here, since most of the mosaics were moved to Tunis. However I really liked the Acropolium next door.


Didn't look like much from the outside, but I love the style inside.


I then walked to the Roman theater and the Roman villa, before ending my tour at Antonine Baths.

Antonine Baths
Antonine Baths

The sheer size of the ruins were mind-boggling. The Romans sure loved their baths!

After Carthage I took the train further to Sidi Bou Said, a picturesque little town in blue and white.

Sidi Bou Said
Sidi Bou Said

It was such a joy to walk around and soak in all the blue and white. Every corner was stunningly pretty.

Sidi Bou Said
Sidi Bou Said

In the evening I went back to Tunis for a nice traditional meal: couscous.

Couscous with fish
Couscous with fish

I had a set dinner with appetizer, main course and dessert, only 7.5 dinars. That's less than 5 USD!

Droidcon Tunis

On Saturday I headed to the science city for Droidcon Tunis.

Droidcon Tunis poster
Droidcon Tunis poster

The conference opened with a violin performance. Classy!

After a full day of workshops, the organizers made us a nice traditional barbecue.

BBQ dinner
BBQ dinner

I gave my talk on the next day. The Tunisian crowd is really energetic, and we had lots of audience participation. That's the way I like my talks!

I was going to attend some other talks, but ended up doing some pair programming with a fellow attendee in the hallway.

Pair programming
Pair programming

I managed to go to the USB talk by Miki, which was quite a blast. Literally - he brought a missile launcher!

Miki demoing the USB missile launcher
Miki demoing the USB missile launcher

The conference concluded with a rock-and-roll performance. Yup, the Tunisians sure know how to have fun. They are such a friendly crowd, but also very driven to advance their technical skills. The energy made all the difference. Thank you Taher and the volunteers for putting this together!


After the conference we all went out for coffee. And then the organizers wanted to show us some traditional food, so we drove around town in the middle of the night, finally found a place still open, for some phenomenal ojja merguez. It was so yummy that we simply could not stop eating!

Ojja merguez
Ojja merguez

Bonus link: more photos from the trip.