Tuesday, January 1, 2013

2012: Year of Speaking

Happy New Year! 2012 has been wonderful to me. I started out with the goal of becoming a public speaker, with the specific goal of 5 lightning talks and 3 full-length lectures. While I came short on the lightning talks (4 instead of 5), I went way beyond on the lectures (13 instead of 3), speaking at far away places like London, Bucharest and Antwerp. You can see all my talks at my speaking profile. (Yup, I have a speaker profile!)

Besides giving talks, I also wrote a few blog posts on speaking:

All in all, I consider it mission accomplished!

New Resolution?

I really enjoy public speaking, and will continue to do so in 2013 and beyond. I wanted to set a new goal for the new year, but I couldn't come up with a crisp one like last year. Here are a few of my candidates:

  1. Mentor others to speak at tech conferences
  2. Give a keynote speech
  3. Write a book

Mentoring

Mentoring others is a great goal, but I have difficulty coming up with a measurable result. Initially I thought, "put 3 people on stage", but I suspect I won't be the sole reason someone is speaking, so it is really hard to quantify.

Keynote

Keynote speech is an interesting goal. Keynotes open conferences, address to a large crowd with a diverse background, and have everybody take home a learning or two. It is quite a daunting task. My aspiration would be to give a keynote speech that is deeply rooted in my technical knowledge, but unveil general life lessons. I have no idea how I would write a speech like that, and even if I do, keynotes don't have open call for speakers, so I have no idea how I would be invited to deliver one. The lack of a game plan makes me uneasy, but perhaps that's the kind of goal I should shoot for?

Book

For the book, I'd like to write an advanced Android book that expands on my various talks. The main holdback for this goal is the time. I have spoken to many tech book authors, and all of them told me it is a lot of work. More work than you think, and then some more. I have so many projects going on that I am not sure if I should take on such a big goal.

No Resolution

In the end I decided I won't have a new year resolution. I will still mentor others to speak, think about my pie-in-the-sky keynote, and test the writing waters with a chapter or two. But I won't have a resolution with a font-size: 1.8em measurable result like last time ^_^

Sunday, December 9, 2012

AnDevCon IV

It's AnDevCon time again! My Android Custom Components talk was really popular at AnDevCon III, so I decided to give it again. On top of that, I had to a two-part session to discuss Android UI, both lecture and hands-on workshop.

Murphy's Law

I prepared my talks a few weeks ahead of time, so I was pretty chill about the conference. But as Murphy's Law dictates, anything that can go wrong will go wrong. On Monday of the conference week, my laptop died. My talks were on Wednesday and Thursday. Needlessly to say, I was completely thrown off course. I was so stressed that I had nightmares on Monday night.

Tuesday I took the laptop to the Apple Store, and they had to ship it out for the repairs. My slides were all online, but I still needed a machine to project them. Fortunately I found a friend who lent me a laptop, and I installed Photoshop trial for the demo in my session.

Since I didn't want to install too many new programs on my friend's computer, I took a break from programming on Tuesday night. Instead, I baked cookies to bring to the conference.

Same as AnDevCon III, I gave away bugdroid-shaped cookies to encourage participation, and people loved it.

Beautiful Android on a Shoestring

My first session was Beautiful Android on a Shoestring. I shared my experience in creating beautiful Android apps without knowing how to draw, introducing concepts like xml drawable, text shadow, shaders, custom fonts etc. I am especially proud of using icon fonts for scalable icons, a concept I borrowed from the web.

After showing the Android techniques, I switched gears and showcased my favorite website to get color schemes, fonts, icons etc:

I recorded the talk with my phone:

Unfortunately the video did not capture the slides. But fear not, I used Popcorn.js to embed the video to the slide deck. Play the embedded video on the top right corner, and the slides will advance automatically to match. Check it out: http://bit.ly/BeautifulAndroid

Hands-on Icon Creation

I led a hands-on Photoshop workshop right after Beautiful Android on a Shoestring. I know very little about Photoshop, but I felt that what I learnt from the Graphic Design for Engineers workshop was super useful, and I want to share that with other developers. I had a relatively small class, which was great because I could check and make sure everyone was following along.

Android Custom Components

The next day I gave my Android Custom Components talk. This is my fourth time giving this talk, so I was very comfortable with the material. Still, every talk is a live performance, and the audience is always different. I really enjoyed the interaction.

Since I already recorded the talk at AnDevCon III, I did not set up my video taping this time. Here is the recording from May:

Attending sessions

My three talks were clashing with a lot of the other sessions I wanted to attend, and I was a bit disappointed about it. Fortunately I managed to catch the Android concurrency talk, which was jam packed with information. I was live tweeting since it is too good to keep to myself! Here are a few of the tweets:

Great conference

Once again I had a great time at AnDevCon. It's really cool to hang out with so many Android developers. Definitely check it out if you work with Android!

Monday, December 3, 2012

Why Do I Speak At Conferences?

I have been asked by many people why I speak at conferences. I know I enjoy it tremendously, but it took me a while to pinpoint why. Here are my top three reasons.

Share Knowledge

First and foremost, I want to share what I know. As a developer I face new challenges every day, often scouring the internet for hours to figure out how to implement a new feature or get rid of that mysterious bug. I don't want my effects to go wasted. I keep a blog to share my findings, but sometimes I feel like I am talking to the void.

At a conference I have a live audience. I get instant feedback, perhaps a puzzled look that nudges me to explain in a different way, or a knowing smile that tells me I struck a chord. It is truly rewarding to see that sparkle of understanding, to know that you have made a difference.

Network effortlessly

After you give a talk, people come to you during lunch and coffee breaks. They heard you speak, thank you for the great talk, and want to discuss more. These conversations are way more interesting than your typical small talk, and I have met many wonderful people this way. As a speaker, networking becomes effortless because people come to me, and focused too, because they come to me knowing my interests. No more wandering aimlessly, shaking hands and collecting business cards without knowing why.

Be visible

As much as you would like to believe in a meritocratic society, unseen achievements are, by definition, not recognized. By stepping on stage and sharing your knowledge, you are seen as an expert. I know this at the back of my head, but I am still amazed by the wonderful opportunities that presented themselves to me since I started speaking.

One thing I did not expect about my visibility was that it was not just about me. I did not set out to defy the coder stereotype, but the truth is, I am not white, and I am not male. Every time I step on stage, I assert my identity as a software engineer, as a woman, as a speaker with a Cantonese-British-American accent, as someone who laughs at the smallest little thing, as myself. By being visible, I make it a bit easier for the next person who is working against the subconscious assumptions of what it means to be a software engineer, I push the envelope a little bit forward, towards a more diverse workforce in our industry.

Wanna speak?

I cannot believe that I only started speaking this year. And I cannot figure out why I never thought of doing it before. Perhaps you would like to give it a shot as well? Who knows, you may love it as much as I do.

There are many resources out there, We Are All Awesome and speakup.io being two. I have given a talk on how to come up with talk topics, and also written a blog post on how to be a confident speaker. I'd love to share more, so let me know if there is something specific you want to hear about!

Technically Speaking

Edit: I started the Technically Speaking newsletter with Cate Huston two years after writing this blog post. Great resources delivered to your inbox every week!

View archive on TinyLetter

Thursday, November 22, 2012

Android: Jelly Bean forward locks paid apps

Today, a Monkey Write user complained that sound wasn't working on the workbooks he bought. I sell workbooks as separate paid apps on Google Play, which supplies data to the main app. Most of the data is retrieved via a ContentProvider, but for the sound the main app simply reaches out to the other apk and loads the sound file from its assets:

Context workbookContext = context.createPackageContext(
    packageName, 0);
AssetFileDescriptor afd = workbookContext.getAssets().openFd(
    "pronunciations/" + soundFile + ".ogg");

This depends on the resources and assets of an app being world-readable. But from the logcat, it seems that the main app could not find the sound file in the asset folder of the workbook app:

java.io.FileNotFoundException: pronunciations/kou3.ogg
 at android.content.res.AssetManager.openAssetFd(Native Method)
 at android.content.res.AssetManager.openFd(AssetManager.java:331)

I searched and searched on the internet to no avail, until I verified with the user that sound works fine for the free workbooks he downloaded. By including the word "paid" in my queries, I found a StackOverflow post with this critical bit of information:

Paid apps on JB devices are 'forward locked'. This means that the APK is split in two parts -- one with public resources, and one with private ones and code, which is not readable by other apps. I haven't looked into how files are split in detail, but the problem you are seeing suggests that assets are part of the private APK.

More importantly, he provided a way to test forward locking without going through Google Play: adb install -l myapp.apk

With that, I managed to reproduce and fix the problem. Since the assets of the paid app is no longer world-readable, I use a ContentProvider to read the sound file and have the main app query for it. The user has downloaded the updates from Google Play and verified that sound now works for paid workbooks. Yay!

Sunday, November 18, 2012

Devoxx

The grand finale for my Europe speaking tour is Devoxx. And grand is the right word for it.

A grand conference

Devoxx took place in Metropolis, the second largest cinema complex in Europe. The AV system is amazing. Gorgeous floor to ceiling projection with live video of the speaker on the left and slides on the right, plus a beautiful outer space background. Just stunning.

As if that is not grand enough, Stephan and team sprinkled the conference with panache. A troupe of Nao robots opened the conference with a dance, a motorcyle vroomed on stage in the middle of a keynote, celebrity speakers wearing giant hats... really good fun.


Nao robots

Java Posse with their signature hats

Android talks

I first heard about Devoxx from watching an Android talk on Parleys by Romain and Chet. Seems to cover many difference facets of Java, Android being one of them. In May I saw Romain and Chet in person at AnDevCon III, and asked them about Devoxx. That's when I decided to apply to speak there. Lo and behold, I got accepted!

Google delivered many awesome Android sessions at Devoxx, with Nick and Rich holding a hands-on workshop on the SDK, Romain and Chet talking about Jelly Bean, Xavier and Tor talking about the build system.


Chet and Romain talking about the developer options in Android 4.2

There were many great talks from non-Googlers as well. Pierre-Yves Ricau talked about Android Annotations, Jake Wharton showed us the open source libraries used at Square etc.


Jake talking about open source Android libraries

And then there is me, the ex-Googler! I talked about Android Custom Components, and people really liked it.

(Side note: did you know that Storify was started by Belgians?)

Awesome hallway

Although there were many wonderful Android talks, there were spread over 5 days, so for some time slots I ended up sitting out. Which is not a bad thing, because Devoxx has an awesome hallway setup.

There were two rows of tables with power strips in the middle. As we all know, developers swarm towards sockets to charge our gadgets, so this is like the well in the village square, where people gather and socialize. On top of that there was no special speaker preparation room, so everyone hang out here, igniting many interesting conversations. This is a brillant setup that every conference should copy!

Off-season Google I/O

As an Android developer, this tweet sums it up pretty well:

Great sessions, great people, great venue. Yes, it's far away, but I took advantage of that to enjoy some Belgian chocolate and beer. All in all, I'd love to speak at Devoxx again!

Tuesday, November 6, 2012

Droidcon Bucharest

After Droidcon London, I headed to Romania to speak at Droidcon Bucharest.

Droidcon Bucharest has a very strong community feel to it. There were about 80 people attending, and each of us introduced ourselves. It started in English, but then people slipped into Romanian. I could guess who were the students since the word in Romanian was really close to English, but it was great when they switched back to English.

From the introductions I gathered that Android is up and coming here in Romania, since there were quite a few student attendees. Around half of the audience said they have never done Android programming. I suppose they would be going to the 3-hour basic Android training in the afternoon.

Barcamp

Just like Droidcon London, we had Barcamp on the first day. I was a bit shocked when I saw the schedule.

15-minute per session? You need to run them with an iron fist to make sure everybody starts and ends on time. Turns out the schedule was merely a guideline. People talked for as long as they wanted, and the audience could asked as many questions as they had. And that's how a barcamp should be - it's over when it's over, no need to be fixated on the timing. I was just amused that they bothered printing time slots in the schedule when they had no plan to follow it.

Conference

Second day is conference day. I was the first speaker, and as usual I polled the audience before I started. Here only a few people made a custom view before, so I spent a lot of time covering the basics.

I noticed that Europeans are not as eager to shout from the audience when I ask questions, but I still wanted some participation, so I was throwing questions at them left and right. By the end they warmed up a bit, and I got a few people to answer loud and clear rather than mumble noncommittally. That made me happy, because it showed me that people are learning.

There was quite a variety of talks at the conference. I really enjoyed the UI makeover by Eugen Arbuleac and Andrei Catinean.

Roman Mazur gave an excellent talk on Android REST best practices. I will definitely be studying his open source project to learn a trick or two.

Regional event

At the end of Droidcon Bucharest the organizers gathered people from different cities to discuss how to foster the Android community in the region. There seems to be a lot of interests from students, and with some professional developers scattered here and there. With events like Droidcon bringing people together, I am sure the Eastern European Android community will flourish.

Here is a picture of me with some awesome Android ladies from Timişoara. It was great fun hanging out with them!

More Droidcon Bucharest coverage

Sunday, November 4, 2012

Droidcon London

The first stop of my European speaking tour is Droidcon London.

I absolutely loved the conference icons with the droid at London landmarks, and was very happy to see them adorning the venue.

Barcamp

The first day was Barcamp. I was astonished by the number of people that got on stage to propose a session. What was more amazing was that there were all super high quality. My experience at unconferences was that people come up with ideas on the spot, gather interested parties and hold an informal discussion. But at Droidcon London, people gave well-prepared, full-length presentations.

For instance I heard about RoboSpice, a library for asynchronous network requests. Stéphane brought a complete deck, pretty much treating it as a proper conference talk. I was impressed.

Conference

Second day was conference day, and once again it was jam-packed with great talks. There is a lot of tribal knowledge in Android, and at Droidcon London I felt that I was among the village elders, telling us creation myths and war stories.


SoundCloud jumped through lots of hoops to make streaming work

At my talk I shared my experience using custom components in Monkey Write. It was a mash-up from my Fluid Android Layouts and Android Custom Components talk, and I was very proud that I managed to trim the 1 hour and 45 minutes of material down to 45 minutes. Imagine my surprise when I got an email from the organizers a few days before the conference, informing us that our talks should be 35 minutes long. I stared at my presentation, unable to chop off any more slides, so I decided to go with the full deck.


Giving my talk. Photo credit: Alexandre Gherschon

At the beginning of my talk I polled the audience for their experience in custom components. As I expected most of them had written one already, allowing me to jump over the basics and went straight for the deep dive. I finished on time, and people came to me afterwards thanking me for sharing the advanced material. Yay!

Awesome people

As always my favorite part of conferences is meeting awesome people, and Droidcon London definitely delivered on that front. Most the attendees I met care deeply about perfecting their craft, and we had many interesting technical discussions in the hallway. I got to hang out with quite a few speakers as well. It was like going to Hollywood and casually chatting with celebrities. Totally awesome.

Droidcon London has a great vibe, and I attribute it to the enthusiastic organizers. The amazing lineup attracted developers from all over Europe, and it was rather magical to hang out with so many awesome people. Thank you very much for such a great conference!


Droidcon London organizers