Sunday, August 26, 2012

Browser extensions workshop

CodeChix held a Browser Extensions workshop, led by Sharon Minsuk. She described what browser extensions are, showed us a few demos, and then we had some hands-on coding exercises.

I toyed with browser extensions briefly, but stopped because I couldn't figure out how to include jquery. After the workshop today I got inspired again, and wrote my first extension to add tooltips for airport codes.

Say you are reading some forum post with lots of airport codes:

My extension will add an airplane icon after each 3-letter airport code. Hover over the airplane gives you the name and location of the airport:

The code is on github: You can also download the packaged extension directly.

The parsing is pretty crude, and I didn't use any jquery at the end.

It only took me an hour or so to make the extension, and I'm quite happy with the results. Thank you Sharon for the excellent workshop!

Saturday, August 25, 2012

Bash prompt

After attending the Cool Git Tricks talk by Carina Zona at Women Who Code Lightning Talk this Tuesday, I decided to add git status to my bash prompt.

Here is how it looks like in action:

chiuki@moomin 09:50 ~/github/android-square-view master $

  • username@hostname: Basic info.
  • Time: I show time in my prompt so I can start a long-running job and go to lunch. The prompt will be displayed the moment the job returns, so I can subtract and see how long it took.
  • Current directory: Gives me some context.
  • git branch: I show it in blue when I am in master, purple otherwise.
  • git status: I show a red star if the current directory is dirty.
  • $: The color indicates if the last command was successful. Green for success, red for failure.

So if I'm on the release branch, has pending changes, and the last command failed, my prompt would look like this:

chiuki@moomin 10:05 ~/github/android-square-view release* $

What do you show on your shell prompt?

Wednesday, August 22, 2012

Develop your voice

When I first started working, I was happily learning all kinds of new stuff: source control, working in a team, unit testing, etc, etc. After two years or so, I felt quite comfortable as a software engineer, but I had no idea how to grow further. I have since discovered that the most important thing is to develop your voice, and here is my lightning talk on the topic:


Voice is an interesting word, because it encompasses so many things. It's your vision, your direction, what you believe in and what you stand for. Voice also implies that it needs to projected, that you need to let other people know what you are trying to do.

Others don't know more than you

How many times were you in a conversation, forming an opinion, someone spoke and you discarded your thoughts? The distinguishing characteristic of someone who has found his voice is that he talks. He is using his voice, but that does not mean that he knows more than you. Be aware of that so you can listen critically and form your own opinion.

Delete "I think"

Email is a great way to build up your voice. Before you send out any emails, delete phrases like "I think", "I believe", "Maybe we should do it". They dampen your voice, and make you sound weaker than you actually are.

Reply to group emails

When someone poses a question to your team mailing list, reply. Don't go off and research for half an hour to come up with the perfect response. Just tell them the steps you were planning to take, and the expected outcome. As your name appears more and more on the mailing list, people think about you more, and will start asking for your opinion.

Sit at the table

Your team has regular meetings, right? Don't hide in the back row and bury your head behind your laptop. Sit at the table, and make a presence. Better yet, sit next to your boss. That takes courage, which sends a very strong signal. Also, your boss will probably turn around and ask you for your opinion, so you don't have to shout and wave to get your voice heard.

Learn to say no

To develop your voice, you need to focus on what matters the most, and stay on course. There are a million things that people want you to do, and you need to push back on the ones that don't matter. In the process you will learn to defend your position and vocalize your priorities.

Let your voice lead you

Realize that you have something to contribute, make a presence in emails and meetings, and defend your position. Slowly but surely your voice will emerge. Let that guide your career, with confidence and a sense of purpose.

Friday, August 17, 2012

That Conference

I have been actively seeking public speaking opportunities, which led me to places that I'll never visit otherwise. For instance, I was just in Wisconsin Dells, the venue of the inaugural That Conference.

Getting there

Since it was the first year, there wasn't much guideline for talk submission. The topic was "Web, Cloud and Mobile", so anything goes. I submitted a few Android talks, and got accepted. But since the conference has so many speakers, they don't have funds to cover the travel expense of the speakers. As an independent consultant, time is literally money, since I only bill the hours I work for my clients. To travel out-of-town and be at a conference is already quite expensive in terms of time, and I just couldn't get myself to pay for the flights and hotels as well.

I was going to withdraw from the speaker roster, then realized that I am probably not alone. I have been working hard to convince more women to step up and give tech talks, and I wonder how many of them hesitate because of travel costs. This is a problem money can solve, and a very concrete thing companies can do to support women in technology.

With that in mind, I started emailing various companies. I got worse than "no" for an answer, for they simply ignored me. Well, at least I tried, I told myself. Two months later, I got a response from Etsy Hacker Grants, saying that they would love to send women to speak at tech conferences! I was very pleasantly surprised.

At this point I have already given away my speaker slot at That Conference, but they are running Open Space sessions at the conference, and suggested that I came to present my Android talk there. Sure, I said, but I also asked them to put me on the backup speaker list in case there were cancellations. And sure enough, somebody cancelled, and I was back as a camp counselor aka official speaker.

The crowd

Given that the topics were "Web, Cloud and Mobile", I was really surprised that this turns out to be a very Microsoft heavy conference. I don't really get much exposure to Windows technologies in the Bay Area, so I took advantage of the situation and went to a session on building Metro applications. But as the day went on, I had this guilt feeling that I wasn't learning enough to justify taking time off to come to the conference.

That all changed in the evening. I went to dinner with a bunch of people, one of whom works on both iOS and Android. We discussed image caching on Android, geolocation on iOS, and just talked shop in general. And that was so much fun.

The next day I went to an Open Space session on Android game programming. I wanted to attend the session because of Android, but also because the guy who proposed the session shares a last name with a very good friend of mine back in the Bay Area. Turns out he is his brother!

I felt quite lonely as an Android developer in the sea of Windows folks, so this session was really cool. It brought the 8 of us together in this 600-person conference, and we had a great time exchanging tips on Android programming. Yay Open Space!

My talk was on the last day, and around 15 to 20 people attended, some from the Open Space session. I gave the same talk in Chicago already, but each crowd is different, and we drilled down to different parts of the talk. Overall it went really well.


That Conference was held in a waterpark, and it was reserved for the attendees on Tuesday night from 10:30pm to 1:30am. There was a long break from dinner until the waterpark party, so we went back to the Open Space room and played Race for the Galaxy.

It is a pretty hefty game to learn, but I had confidence in my fellow conference attendees, and I think everyone enjoyed the game.

10:30pm rolled along, and off to the waterpark we went. I haven't been to a waterpark for such a long time! I tried all the slides, and went on the vertical drop 3 times. It was tons of fun. I brought my diving camera and filmed one of the rides:


Overall I had a pretty good time at That Conference. The official sessions were not very appealing to me, but the people made up for it. I know I will be keeping in touch with a few of them, and that is what I call meaningful connections.

Saturday, August 4, 2012

Tally Counter for Smart Watch and Headset

I've been trying to come up with an app for my Sony Smart Wireless Headset pro, and like I mentioned in my Ignite talk, I often get new ideas when I swim. This time, however, it was quite literal. I was handing my pass to the clerk at the counter, and he clicked on his tally counter to keep track of how many people went swimming that day. That is perfect for the headset! It just needs one button to operate, which the headset has a big one in front, somewhere to show the counter, which the headset can do on its display.

After the made the app on the headset I decided to put it on the watch as well. Initially I used the same style, but then I realized the watch has a color screen, so I added some gradients to give it a background that looks like the dial on an odometer.

I did some user testing: gave the watch and headset to my husband to try. The headset was great, he said, because the button gave him tactile feedback, so he knew he clicked successfully without looking. Maybe I could add vibration to the watch? It was a really great idea. Besides giving tactile feedback, the vibration made a little buzz, and it happens to emulate the sound of a real tally counter. It was really satisfactory to tap on the watch and hear the count go up.

See it in action in this video:

Get this extension for free from Google Play: Tally Counter for SmartWatch.