Monday, August 31, 2015

Speaker outreach: Your turn

I launched a grassroots campaign to bring more women to the stage of Droidcon NYC, because I was sick and tired of conference organizers saying that they tried to diversify their speaker lineup, only to see the same composition over and over again. I did it to prove a point, that it is possible.

Proof of concept

The proof of concept was a great success: we had 22% women at Droidcon NYC. But it was also a lot of work. A LOT of work. I published what I did so others can use it as a blueprint to do the same, because I cannot go make this happen again and again for other conferences. It is not scalable.

I need you to step up.

Up the ante

Conference organizers, you are not off the hook. The fact that I did it as a grassroots effort means that you need to do better. It does not mean that you can now offload the responsibility.

There are so many more things you can do in an official capacity:

  1. Clear guidelines. To diversify your speaker lineup, you need to encourage more first-time speakers, whose default is to believe that they don’t have anything worth talking about. However, if you give a concrete list of topics and provide the schedule and description to previous editions, chances are they will see something that matches what they do, and be more compelled to submit a proposal.
  2. Official feedback. An outside mentor can only guess how the conference curates content. As the organizer, you can work with the potential speakers to tweak their proposals so that they are more appropriate for the audience and avoid clashing with other proposals.
  3. Find more sponsors.To level the playing field for people from underprivileged backgrounds, cover the travel expenses for the speakers. This removes a major roadblock for many people, and is much more difficult for a grassroots effort to provide.

Doing is caring

Lip service is not enough to move the needle. You need to put in the effort, and keep at it. I hope my example at Droidcon NYC motivates you to step up and take action!

Reference: blog.sqisland.com/2015/08/droidcon-nyc-22-percent-female-speakers.html

Monday, August 24, 2015

Friend Spell with Google Nearby API

Google recently rolled out Nearby API, allowing nearby devices to message to each other. When I saw that, I thought, party game!

Friend Spell

The goal of Friend Spell is to spell different words with the first letters of the names of your friends. In the example, Chris, Amy and Rae spell the word CAR. If you need to spell TAXI but Xavier isn't in the room, you can find any 4 people instead.

Download from Google Play:

play.google.com/store/apps/details?id=com.sqisland.friendspell

Open source

I have decided to open source the game so people can study an end-to-end app, complete with tests.

github.com/chiuki/friendspell

I did not check in my Nearby API and Google Plus credentials though, so you'll have to add your own com.google.android.nearby.messages.API_KEY in AndroidManifest.xml as well as app/google-services.json file. Refer to the Nearby API and Google Plus documentation for more information.

Technologies used in the project:

Droidcon NYC

Please download Friend Spell and try it out, especially if you are attending Droidcon NYC this week. I'd love to see it in action at a conference!

Tuesday, August 18, 2015

Droidcon NYC: 22% women speakers

I meet a lot of my fellow Android developers at conferences, but I don't see too many women at these events, especially on stage. Organizers claim that they try to get more female speakers, but it is too difficult. So I thought, hey, let's get all the female Android devs I know to submit to a single conference, and see what happens.

Get organized

I got this idea in March, and started a Google Doc to co-ordinate the efforts. We picked Droidcon NYC as the conference for everyone to submit, because it is a good location for people from North America and Europe, and we will have a lot of time to rally people. At that point the conference date was not even announced yet! I invited everyone I know, and ask them to add more people. Corey also did a LinkedIn search to expand the list to folks outside of our social circles.

No excuses

When I asked people to submit a talk, there are a few common concerns:

  • I have nothing to talk about
  • No one wants to listen to me
  • I have no money to travel to the conference

Fortunately I have answers to all of them.

Brainstorming Hangouts

To help people come up with talk ideas, we met on Google Hangout to brainstorm. The funny thing is, most people has come up with an idea or two before showing up at the Hangout, so there wasn't much brainstorming going on. The Hangout is mostly a commitment device for people to set aside some time to think about what they can talk about.

Feedback on the proposals

To convince people that they have something important to say, everyone post their talk ideas on the shared Google doc.

We offer feedback on how to make the abstract better, and also comments on talks that we want to hear. For some reason most people believe that no one wants to hear from them, so it is very reassuring to know that others actually want to learn more.

There are ways to get funding

Money is always a concern. A lot of people just assume that they cannot afford to speak at an out-of-town conference, but us speakers know it is not true.

While a lot of conferences don't have the budget to cover the travel expense for all speakers, many do have a little bit of leeway to help those in need. Ask for help if you need it. There are ways to make it work.

In the case of Droidcon, Intel has set up a female developer sponsorship program. Having a source of funding helped tremendously - people don't immediately dismiss the conference as unreachable.

Q&A with the organizers

To address any other concerns, I arranged a Hangout with the Droidcon organizers:

It is much more convincing when the conference organizer tells you that, yes, we want you to speak!

Nagging

A huge part of this process is sending reminders: email blast to remind everyone of the submission deadline, but also nagging people individually until they submit. I think this is the part where most conferences fall short.

Announcing call for proposals to mailing lists is only the first step. Most people assume that they are not the target, and you have to repeatedly tell them that you indeed want them to speak, help them along the way, and remind them to take action.

People are busy, and if you want results, you have to insist.

Results

We have 14 out of 64 female speaker froms at Droidcon NYC, making 21.875%. While I was hoping for 50%, this is a respectable result, especially since I was leading a grassroot effort, not an official one.

Also, one of the keynotes will be by Corey Latislaw, who proposed the keynote as a part of this effort!

Lessons learned

  1. Start early. It takes a lot of time to rally and nurture potential speakers.
  2. Provide mentorship. Be ready to answer questions about everything from topic ideas to how to fund the travels. Mentorship can be from experienced speakers, but peer support is very powerful too.
  3. Offer to help. I was not an organizer, yet just by telling people about the Intel sponsorship I was able to ease the minds of many people who thought they will not have the money to travel to the conference. For organizers, even if you cannot cover everyone, stating that travel assistance is available on a case-by-case basis can go a long way.
  4. Keep at it. Most importantly, follow through! Asking once is not enough. Monitor the whole process to make sure no one drops off. Send reminders. Nag!

Saturday, August 8, 2015

AT&T IoT Hackathon Boulder

Last week I went to the AT&T Internet of Things Hackathon in Boulder with Brenda, Sepideh and Joan from Android Atelier. After a very intense 24 hours, we won!

A part of Android Atelier is to encourage everyone to document what we do. For this event, we recorded it three ways: blog, sketchnote and video!

Blog

Sepideh wrote a very detailed account right after she got back, and then a follow-up on how to control the Harman speakers once our prizes arrived!

Sketchnote

I wanted to visualize the ups-and-downs we went through at the hackathon, so I made an annotated graph.

Video

Brenda made a video with our demo, the winning announcement, bloopers and various tidbits from the hackathon.

Source code

github.com/AndroidAtelier/nfc-hunt

The sound only works with Harman speakers, but the NFC part should work as is. I got some NFC tags as swag from conferences. If you don't have them, try hotel key cards or luggage tags. Let me know if they work.

Wednesday, August 5, 2015

Keeping up with side projects

I have so many side projects that I launched a newsletter to track them:

tinyletter.com/sqisland
I got some really nice responses:

Well indeed, how do I find the time?

Freelancing

I am a freelancer, and my workload fluctuates a lot. During the slow times I can devote my energy to longer projects like Pluralsight courses.

Work from home

Working from home means I don't commute. That saves me at least an hour day. Also, my clients are all in California, and I work remotely from my home in Colorado. This means I am one hour ahead of them. I start my day at 9am Mountain time, and have one hour to do my own things before they get into the office.

It is quite nice to give myself time first, before I get busy with client work.

Incorporate sharing into my workflow

Many of my blog posts come directly from client work. I encounter a problem, figure it out on client time, and then write my findings on my own time. I often need to isolate the problem into a separate project, which gets shared afterwards. Read more on my workflow.

Taking notes at events

A great way to amplify your efforts is to record everything. You probably go to meetups like me, but do you write about it? If not, you are just an attendee, not a part of the event.

When I go to events, I live tweet or sketchnote, and then share them. For instance, I went to this awesome Bluetooth Beacons talk, made notes on the spot, and posted it:

Looks like I did a lot, right? I was taking notes while the speaker was talking, so no extra time there. I then spend 10 minutes or so when I get home to scan it on my flatbed scanner and run "Colors → Auto → White Balance" on GIMP, but you don't need to. Just snap a photo on your phone.

Alternatively, tweet during the event, snap some photos, then write a trip report. Here is the formula I use.

Go swimming

Taking notes during events is one way I multitask. Another one is swimming. You see, when I am in the pool, I get to think. I can come up with an outline for a blog post, compose a talk proposal, and in general organize my thoughts. By the time I am back at my computer, I can write much more quickly.

Have a schedule

One trick to make sure you allocate time to your side project is to have a schedule. We publish Technically Speaking every Tuesday, which means that I need to find CFPs, links and videos by Monday. It's a mind trick, but having a real deadline makes it much easier to find time to get it done.

Have a conspirator

To maintain that schedule, it really helps to have another person on the project. You feel bad about not putting in the effort, and also, when you are busy the other person can pick up the slack. I work with Cate Huston on Technically Speaking, and Huyen Tue Dao on Android Dialogs. They keep me on schedule, and make it way more fun!

Summary

Here are the tricks I use:

  • Allocate time for side projects (for me it's 9am to 10am)
  • Use writing formulae
  • Multitask by taking notes at events and thinking while exercising
  • Have a schedule
  • Have a conspirator

Tuesday, August 4, 2015

Testing SharedPreferences with Dagger and Espresso

Back in April I asked if people are interested in an Espresso book. The responses are very encouraging, but I am still intimidated by the idea of writing a whole book. Rather than wait until I muster enough courage (and time) to take on a book project, I decided to start with bite-sized courses.

The first course

Testing with SharedPreferences with Dagger and Espresso covers dependency injection with Dagger for testing, and walk through a sample app to use it to test SharedPreferences. The course includes 8 videos, plus the source code.

I hope you find it useful!

Tuesday, July 28, 2015

Espresso: Wait for dialog to dismiss

Did you complete the Espresso Idling Resource quiz? Here comes the solution!

DialogFragmentIdlingResource

In the quiz, the test fails because we were verifying the text before the loading dialog dismisses. To make it pass, we can add an idling resource that is only idle when the dialog is not shown.

public DialogFragmentIdlingResource(
    FragmentManager manager, String tag) {
  this.manager = manager;
  this.tag = tag;
}

@Override
public boolean isIdleNow() {
  boolean idle = (manager.findFragmentByTag(tag) == null);
  if (idle) {
    resourceCallback.onTransitionToIdle();
  }
  return idle;
}

The idea is to query the FragmentManager with the tag of the loading dialog. If it is null, the DialogFragment is not there, and we consider the app idle.

Using the idling resource in test

@Test
public void done() {
  IdlingResource idlingResource = new DialogFragmentIdlingResource(
      activityRule.getActivity().getSupportFragmentManager(),
      LoadingDialogFragment.TAG);

  Espresso.registerIdlingResources(idlingResource);

  onView(withId(R.id.text))
      .check(matches(withText(R.string.done)));

  Espresso.unregisterIdlingResources(idlingResource);
}

We create an DialogFragmentIdlingResource with the tag from the loading dialog so that it knows what to wait for. With that, the test will wait until the loading dialog dismisses before proceeding. And now the test passes!

Source code

https://github.com/chiuki/espresso-samples/ under idling-resource-dialog-fragment on the solution branch.

Like this article? Take a look at the outline of my Espresso book and fill in this form to push me to write it! Also check out the published courses: https://gumroad.com/chiuki