Thursday, May 26, 2016

Tips on hosting Google Hangout on Air

My friend Yash is hosting an Ask Me Anything via Google Hangout, and asked me for some tips. Thought I'd share them with everyone!

Rule number one of Google Hangout: Anything that could go wrong, will.

That said, here are a few things you can do to make it better.

  1. Get on it 15 minutes before event time to get over technical difficulties.
  2. Go live 5 minutes before event time so people who come early can already see the live stream. Otherwise their window will stay static until they refresh i.e. they won't know the event has started. Also, by starting a bit early people can start posting questions already.
  3. Send reminder emails / tweet after you go live for the same reason as number 2.
  4. If you use the Q&A module, beware that it may or may not work. So you may need a different place to post questions e.g. the event comments.
  5. It's better to have another person to keep an eye on the questions so you can focus on talking. Have that person ask the questions for you to answer.

Here is an example of a Google Hangout on Air we did for 360|AnDev:

Sunday, April 3, 2016

Go Code Colorado

Go Code Colorado is a state-wide event to innovate on top of Colorado open data. Android Atelier went to Challenge Weekend in Fort Collins.

Preparation

We wanted to use CartoDB to visualize the geo data on the map, so we went to Maptime Boulder to learn about it.

Also, I baked cookies.

Data

How are we going to create value? By showing multiple sets of data on the same map.

The different layers made it very easy to parallelize the work. We looked at different data sets and scrubbed the geo data to put it on the map.

Here is our working demo:

Presentation

Go Code Colorado 2016 centers around the problem statement:

Create an app and business concept that helps businesses build a competitive strategy.

Our app shows agricultural, demographics and logistics data allowing businesses decide where to set up shop. Here is our presentation:

Winners

Two teams advances per location to the final round.

SWO

SWO, or Shop Women Owned, crosses the Colorado business entities with the Social Security Number gender data to showcase women-owned businesses in Colorado. They had a great pitch, and made us realize that we were taking the problem statement too literally.

At the end of the day, this is a business pitch competition. Helping businesses build a competitive strategy (Where will I play? How will I win? Is it worth it?) was not a hard requirement. As long as public data is used, any business plan is fine. In this case, SWO promotes women-owned businesses in bulk, without necessarily helping them build a competitive strategy individually.

Colorado Well Spot

Colorado Well Spot aggregates public data to help oil and gas companies figure out where they should operate. You would think that they would check and make sure not to drill too close to a school, or right of top of a pipeline. Turns out the data is scattered all over the place, and there is not really a good way to do a comprehensive check.

Emily Hueni, the leader of the team, is a GIS specialist with oil and gas experience, and really understands the problem. Once she started talking about the app, we knew they were going to win!

CartoDB

CartoDB is really nice. I like how I can extrapolate from my existing knowledge of SQL and CSS to customize my map. Even though we did not win, we had lots of fun exploring and visualizing the data.

Monday, March 21, 2016

How to make a podcast transcript

I really enjoyed my chat with Saron on the CodeNewbie podcast, and wanted to circulate the content more widely. Audio is great, but text is more searchable and thus more discoverable, so I wanted to transcribe the show.

Automatic transcript via YouTube

YouTube transcribes for free, all you need is a video. I took the podcast and made a video with a black screen, and uploaded to YouTube. The transcript got maybe 70% right, but not enough to actually understand the show without listening.

1
00:00:00,000 --> 00:00:12,259
welcome to the gurney podcast when we
talk to people on their current journey

2
00:00:12,259 --> 00:00:16,779
notes about being you on yours I'm your
house around today on the show I'm so

3
00:00:16,779 --> 00:00:21,060
excited to have to teach an independent
Android developer and creator of

4
00:00:21,060 --> 00:00:28,230
technically speaking to be on as a high
so you do a lot of stuff but the main

Correct the transcript via Fiverr

I did not want to correct the transcript myself, so I outsourced it on Fiverr. I provided the link to download the podcast, the .srt transcript from YouTube, and some extra information:

  1. The name of the show is CodeNewbie
  2. The host is Saron Yitbarek
  3. The guest is Chiu-Ki Chan (aka me!)
  4. Technically Speaking is the name of the newsletter we talked about. Please capitalize.

I got the cleaned transcript the next day, for $30 ($31.5 including fees):

1
00:00:00,000 --> 00:00:12,259
SARON: Welcome to the CodeNewbie podcast, where we
talk to people on their coding journey

2
00:00:12,259 --> 00:00:16,779
in hopes of helping you on yours. I'm your
host, Saron. Today on the show I'm so

3
00:00:16,779 --> 00:00:21,060
excited to have Chiu-Ki Chan, independent
Android developer and creator of

4
00:00:21,060 --> 00:00:28,230
Technically Speaking. Chiu-Ki, you want to say hi?
CHIU-KI: Hello! SARON: So you do a lot of stuff, but the main

Convert to HTML

The transcript has line breaks that makes it a bit hard to read. I wrote a Python script to convert that to Markdown, then open it in Atom to get the HTML.

Add links and Publish

This is optional, but when I pasted the HTML to my blog I added some links as well.

You can see the results here: blog.sqisland.com/2016/03/codenewbie-podcast-visibility.html

Sunday, March 20, 2016

CodeNewbie podcast: Visibility

I was on the CodeNewbie podcast a few weeks ago to talk about blogging, tweeting, speaking, and shared a some tips on how to promote yourself without feeling braggy. I would like to make the content more accessible, and decided to make a transcript of the show.

I used YouTube, Fiverr, plus my own python script to produce the transcript. Read how I did it: How to make a podcast transcript.

You can listen to the episode here: http://www.codenewbie.org/podcast/technically-speaking.


SARON: Welcome to the CodeNewbie podcast, where we talk to people on their coding journey in hopes of helping you on yours. I'm your host, Saron. Today on the show I'm so excited to have Chiu-Ki Chan, independent Android developer and creator of Technically Speaking. Chiu-Ki, you want to say hi?

CHIU-KI: Hello!

SARON: So you do a lot of stuff, but the main thing that I know about you, and the thing that people keep telling me about, is this thing called Technically Speaking. so tell us about what that is.

CHIU-KI: Technically Speaking is a newsletter about public speaking, and it's mostly targeted for people who want to speak at technical conferences, which is why "Technically Speaking." I was pretty proud of the name.

SARON: It's a good name.

CHIU-KI: Actually yeah, when I thought, I was like "Oh, but, but - maybe it's too generic. And it's OK. I think people got what I'm trying to get at.

SARON: Yeah.

CHIU-KI: And it actually got started when I was at a conference with my friend, Cate Huston, and we were talking about how it is very difficult to break into the speaking scene, but once you get started, it's actually not too difficult to keep going as a speaker. So we want to try to help people who are interested or just have an inkling that oh, maybe this is something that they want to do because it's good for their career or because that's something that they see other people do and they thought it's neat. Whatever reason it is, we just want to have a way for people to get started. And then we decided on a newsletter because we figured that if we have a website, we'll probably just forget to update it. A lot of the speaking stuff is very timely, right? A particular conferences is looking for people, and then you put it there, and then two years later people come back and look and say, "You know, this site is dead." So we didn't want that, which is why we went for the newsletter format.

SORAN: So what was the mission? Who are you trying to help? What are you trying to accomplish with this newsletter?

CHIU-KI: That's an interesting question, because the way it started out, we were just saying that, oh, you know, just people who are interested in speaking at conferences. But because both of us are women and we wanted to see more women on stage, we make it a point to include 50% content that is either about women or generated by women. And that ended up somehow branding us as something targeted for women, which is very interesting because we were not aiming for women; we were just aiming for balance.

SARON: Yes.

CHIU-KI: I guess our industry is so tilted towards men that having something 50-50 automatically gets you the label "Wow, it's for women."

SARON: Isn't that so interesting, how it works out that way?

CHIU-KI: Yeah.

SARON: That's not the point, but...

CHIU-KI: We never marketed ourselves as "Ooh, it's for technical women," but it ended up being that way. People look at us that way, which I mean, I don't mind, but I just find it very fascinating.

SARON: It's very telling of the industry more so than it is, you know, you and your product. It's an interesting observation.

CHIU-KI: Yeah.

SARON: So one of the things that I love about this is a lot of times when you hear about a CFP, like you said, it's very timely, right? You just so happen to have heard about it at the right time and the right situation, and hopefully you have an idea to submit. And if you don't know about it, then you kind of miss your opportunity. So you're making it more accessible to a lot of people, and I'm really excited and I'm really hoping that a lot of new speakers and new developers really take advantage of a lot of the legwork that you've already done. Every week in my inbox, I get a list of upcoming talks, and now I have no excuse to not speak and not submit. So have you seen people who wouldn't ordinarily speak, the people who are not regular speakers? Have you seen them take advantage of this opportunity?

CHIU-KI: Oh yeah, definitely. So actually last year - so the newsletter started in November 2014, so last November we celebrated our one-year anniversary.

SARON: Congratulations.

CHIU-KI: Thank you. And as part of the celebration, what we wanted to do was have people essentially submit their stories about - actually, no, I got it wrong. Let's take it back. That was our six-month anniversary. So I'm going to talk about both. The six-month anniversary, what we wanted to do is for people to write in and tell us what action, what concrete action they took as a result of the newsletter. So some of them wrote blog posts, some of them posted a tweet, and there are definitely people who told us that "Hey, I just gave my first conference talk. Thank you so much for just making it happen." Part of it just is something that you think - you know, you have to be an expert, you have to be someone that just knows everything. And having that newsletter, reading stories about what other people did, really removed that mystery of like, how do you become a speaker? A lot of people were more courageous to step, to take the first step. And then for our first year we did something slightly different, which is we did one-on-one coaching. So if you wrote a list of essentially your 2016 goals, like what do you want to do in terms of public speaking, and post it somewhere public, then we pair you up with someone who are already speaking and try to come up with a game plan with you. So that we don't know yet, because this just happened two months ago, so we don't have any - well, we should follow up and ask people, "So, what happened after the one-on-one sessions?" Yeah, so I'm definitely seeing action coming off the newsletter, which is really, really rewarding.

SARON: So what do you think are some of the advantages of speaking?

CHIU-KI: There are multiple. One is that I don't know about you, but when I go attend a conference, I really don't like the "networking," the small talk. Like, you're in a big room and you go around and you have to put yourself out there to introduce yourself. Because you know, right? You are at a conference to meet people, and there are a lot of good things that come out of meeting people. But just doing that little small talk, saying "Hey, my name is Chiu-Ki, I'm an Android developer" - for me, I don't like doing that. But if you're a speaker, you in a way introduce yourself in broadcast on stage, right? So you went on stage, you talked about a particular topic that, well, you have enough to talk about for 15 minutes or 50 minutes. So after that, when you run into people during coffee breaks or lunch or any of the social events, people will come up to you and say, "Hey, I went to your talk. It was really great, and I have a little bit of follow-up discussion that I want to have with you." So to skip all that, for me, annoying small talk and jump right into the interesting part - that's huge. In a way - I mean I am not in any way an introvert; I am still afraid of doing small talk, and I have also heard people who told me that. Like they'd rather go hide in a corner than put themselves out there. But doing that one lump of "Whoa, I'm so scared. I put myself out there," and give a talk - that, you can reap the benefits afterwards for the whole conference.

SARON: That is so interesting. I never thought of it that way. I never thought of it as a solution to, you know, to not...

CHIU-KI: Just get it done once and for all, right? Rather than repeat it 15 times.

SARON: Right. And, when you get it done once and for all, it's scripted. You get to prepare for it, you have your slides, you know exactly what you're going to say, when you're going to say it. You don't have to respond spontaneously to different people and react. So I can definitely see that as being a solution to small talk. That's a really great way to look at it. I like that, yeah.

CHIU-KI: Yeah, so for me that was almost a side benefit. Actually, I didn't start public speaking because I wanted to solve the small talk problem. I just noticed that once I started doing this, I was like "Oh hey, this is really nice! I don't have to bother with going around the room and trying to introduce myself, because people come to me." So when I started - and this is true, still - what I wanted to do is essentially make a name for myself. I mean, that sounds really egoistic.

SHARON: No, good for you. Make that name.

CHIU-KI: Yeah, because I'm an independent developer, so I go around and I have to go tell clients to hire me to write Android apps for them. And having some recorded talks out there and just saying "Hey look, I know what I'm talking about. Like, I literally know what I'm talking about. I talked about it for an hour" - that is really helpful. It's really concrete. Because a lot of the times - well, I guess sure, you look for a job with resumes, but resume in a way for me is keyword stuffing. You just put things in there, hoping that it catches someone's attention.

SARON: Right, something clicks.

CHIU-KI: Right. But if you are giving a full lecture on the topic, that really tells a lot about you as not just a developer. So you have to know your technology, but you also have to know how to communicate, how to express yourself, how to explain complex concepts. And they see more of you than just the two- dimensional you on a piece of paper. So for me, that was the initial goal. I wanted to be able to have essentially a living resume, almost. Like, "Hey, this is me. Look, you can watch me explain what I do." And that for me was really helpful for my career, but not in that sense - I don't know if you noticed a theme, a lot of things I started doing and then I saw the side effect and I liked the side effect better. So I didn't actually get any direct - what do you call it, leads out of speaking. I ended up having a lot of my clients as friends of friends, so not necessarily strangers that watch my talk. But by speaking I get to meet a lot of people at conferences and also I get to essentially share what I know. That helped establish myself as "Hey, she knows her Android things." So I think indirectly when I get hired by my clients, they know that "Oh OK, I think we can give her the benefit of the doubt that she can do what she claims she can do."

SARON: I like that. I like that a lot. I love the idea of speaking as your living resume.

CHIU-KI: I just came up with that, by the way.

SARON: Genius. So one of the things that you said a little bit earlier really stuck out to me, where you said "I want to do this to make a name for myself," and then you followed up by saying "Not to sound too egotistical." And I think that that feeling, that feeling of "I want to advance my career, I want to put myself out there, I want to build recognition and expertise... but at the same time, I'm hesitant to be a self-promoter, I'm hesitant to feel braggy" - and it sounds like something that you've dealt with too.

CHIU-KI: I think part of it is, I'm not sure if it's something specific to my upbringing or everybody faced that problem, but I grew up in Hong Kong, and our culture is a lot about don't stand out. Like for example, when I was in school, I remember I was maybe in 8th grade, and - I mean, it's kind of a Hermoine moment. As the teacher asked a question, I know the answer, so I raise my hand and answer the question. It sounds straightforward. But one of my really good friends pulled me aside one day and told me, "Look, even if you know the answer, you should not answer all the questions because people don't like it. People don't like people who show off." And at that point I didn't even realize that it's a problem. I guess I was just naive. But then after that, I was like "Oh, OK. This is something that people will view negatively if you are showing off, essentially." Also, the Chinese culture is a little bit different. We have very intricate protocols about - like basically you praise someone and then they say "No, it's nothing," and then you praise again. So it's not very easy to just come out and say, "I am the best." You don't do that, pretty much. And I guess I have carried that with me even though now I'm in America, which is a little bit different. At least when I was going through in my job, every six months or year or so you have to do a performance review and you have to write about the great thing you did for the company, and that is really uncomfortable that you have to list out all your accomplishments. So yeah, I mean, that's kind of my explanation why I feel that I should not brag. That other people don't like it, basically.

SARON: And I don't think that's just you. I know lots of people, a lot of friends of mine who I'll talk to and I'll say, "You should really put that on your profile, share that, tweet that, go on stage, talk," whatever it is, and there's a lot of "Oh, I just, you know, I don't want to be too promote-y." This idea of self-promotion is being seen as negative. So coming from a culture where that's how it is, how have you countered that? How have you dealt with those feelings of discomfort and still going out and speaking and making sure that people know about your work?

CHIU-KI: Well, I guess it comes in two stages. The first stage is, like I said, during company performance review, I feel like this is something I need to do. It's not a choice. I don't get to choose to write about my achievement or not. Because I don't want the company to view me as someone who is useless and just fire me either.

SARON: That's true.

CHIU-KI: So the first stage is I read a lot of self-help books. All the books about how to advance your career, how to speak up, how to toot your own horn without bragging. I think that's an actual title of a book; I'm not 100% sure. So I went through a big phase of just prepping myself and getting excited about telling other people how great I am. That worked to a certain extent. I wouldn't say that that was - I mean, that got the thought planted that it's okay.

SARON: It helps, yeah.

CHIU-KI: It's like, this is a big enough topic that there is a whole bookshelf of books about this, so it's something that I need to do and I'm not comfortable doing it. It's fine. It's something I need to learn. And I think that's a good way of putting it, is it's a skill that you need to learn, much like programming, much like learning to write almost. It's not natural. Nobody just knows how to tell others about the good works that they do. So once I got comfortable with the idea, then there's the execution. What exactly do you do? And that kind of came after I became independent. For some reason, once I left a corporate job and I know that I have to fend for myself in terms of just demonstrating that "Hey, I am good. You should hire me," then I'm much more comfortable in just writing on my blog or being visible on Twitter and just trying - I feel like once I make it a goal, then it's OK. Rather than I did something and then as a second thought "I should promote it," I make it really, really forefront of what I'm doing. I write code, but I also tell people what I wrote about. So that, I feel like it's almost a mind trick. I just told myself that, "Look, this is something you do now, so just go do it."

SARON: This is who you are, yes.

CHIU-KI: And also, one thing I realized is that when I first started, nobody's reading my blog. I have no Twitter followers. So I can brag all I want; it's not like anybody is listening. That's a very comforting thought. So that helped a lot, actually. I will try to post - I'll write a blog post and post it on my Twitter, which then my friends will come and like it, and I'm like "thank you!" But it's not really braggy, I feel like, because I felt like I'm just yelling in the air; there's nobody there, really, to judge me I guess.

SARON: That is so interesting, because I've heard from so many people that the reason why they don't want to blog and they don't want to tweet and they don't want to do that is because they say, "What's the point? No one's going to read it anyway." And instead, what you're saying is, "Great! I'm so happy no one is reading it because that gives me the freedom to put myself out there and to self-promote without worrying about people judging me as much." I really like the different take on that situation. Yeah.

CHIU-KI: For some reason, people are really afraid of people throwing rocks at them, almost, right? Because if I write a blog post about some technical topic and I'm wrong, oh, the horrors! There will be hoards of people coming after me and telling me that I'm wrong. But the truth is there's no one reading your blog.

SARON: So it's OK. It doesn't matter.

CHIU-KI: I'm sorry to tell you, but there will not be hoards of people to tell you that you're wrong. I mean sure, it's sad that you are just yelling in the air, but on the other hand, it's a great chance to experiment.

SARON: Yeah.

CHIU-KI: Just do something, write something, and then if some posts end up being read, great! Then you'll end up building your audience. And if not, well, try something different. There's, like I said, no one there to critique you.

SARON: I think another problem that I've heard in our community is this idea that the thing they did or accomplished isn't worth promoting. You learn something, and especially if you're at the very beginning of your journey, you go "Well everyone else already knows that, so what is there to celebrate?" Have you had those feelings before?

CHIU-KI: Hmm, that's interesting. Personally, when I first started doing all this blogging and tweeting and stuff, I do have - not necessarily that "Oh, whatever I have to say, somebody else already knows," but more like "I don't have anything to say period." It's not like I come up with something to say and then I silence myself because I feel like it's not worth saying. I feel like somehow I nip the idea even earlier, you know what I mean? And usually, by the time I come up with an idea, like I have invested enough time in it, then I will just go for it. So in a way it's a mindset. That's my personal experience. It's not like, "Oh, let's talk about X" and then my left hand says, "No, don't do that! That's stupid! Nobody wants to hear about that!" It's not like that. It stops even earlier than that. I don't even come to the idea generation phase. I would just sit back and say, "Why bother?"

SARON: Do you feel like that results in you possibly dismissing good ideas before you really give yourself a chance?"

CHIU-KI: I feel like it's so internalized. I didn't even get a chance to have that internal dialogue, like "Ooh, let's write about this." "No, don't do that, that's stupid." That just played itself without manifesting in concrete ideas in my head. Just, my brain just stifled itself, like "No, don't even bother thinking about it." Of course, you know this is all looking back in three years, I would say. I started blogging about three years ago. And it's almost like going to the gym: just keep doing it until it's like, "Hey, you know what? I can lift a lot more now." Which by the way I don't go to the gym. Just a metaphor. But for my blog, I definitely feel that way. In the beginning, in a way I was just forcing myself to go write this thing, and then it seems very clumsy, and I don't want to read it myself. But nowadays I actually enjoy my own reading, which is crazy right?

SARON: That's awesome.

CHIU-KI: I am so trained to not praise myself and not say anything good about myself that I feel embarrassed about telling you that I enjoy my own reading. I like the way I structure my articles. I have my own little formulas; I chunk things up into smaller paragraphs so that they are easier for me to write, but also easier to read. So I have my own bag of tricks by now, like building up. But you know, three years, is that a long time? I don't think so. It didn't feel like "Wow, it took me 20 years to come here from the beginning." I think I went from "Oh, I have nothing to say" to oh, OK, now I have a pretty good idea of how to structure a blog post. And when I'm coding, I'm actually paying attention to like, "Ooh, that could be something that is interesting to talk about." So it is really for me a mindset. Just switching from "Oh no, who am I? Why would I blog about anything?" to now I have a blog, I have a few articles out there; let me pay more attention. And it's not even intentional that I'm paying attention to things that I'm doing, always mining for opportunities to tweet or blog, but it's more like since I started doing that, my subconscious is just like "Oh OK boss, that's what you do, huh? I'll pay attention now." Which is cool.

SARON: That is cool.

CHIU-KI: I don't understand how the human mind works, but at least that's how it works for me, is once I started doing that, then I see things differently.

SARON: It sounds like a large part of you blogging consistently and speaking and doing all these things is not so much about being comfortable, it's not about wanting to do it and necessarily being excited about doing it; it's about recognizing that it's important and just being disciplined about doing it anyway and trusting that as long as you get in this rhythm and have a consistent process of just doing it, that eventually you'll be proud of it and you'll be able to self-promote without it feeling so squeamish.

CHIU-KI: Yeah. I think a large part is telling myself that it's about the quantity, not about the quality. Just write it. Write something; it doesn't really matter. Just do it. I mean, some people are even more vigorous than that. They actually keep a schedule. I don't. I think in the beginning maybe I did. I don't even remember. Because I have this vague notion that I should blog more if I want to be an independent and be known for my work. But even now, I will go sometimes to look at my blog and say "Oh, I didn't write at all last month. Oh well, too bad. I guess it was Christmas." I don't give myself a hard time not writing because I know that I am writing "enough," whatever that means. But when I first started, there were definitely moments when I'm like, "OK, this thing that seems remotely interesting, maybe I should write about it... ugh, are you kidding me? Do I have to do this?" There's definitely moments where you know what? Just go through the motion, figure out, type it up. And usually once I type it up and I'm reading it again, I'm like "You know what? This is not half bad. Let's just hit that submit button already." So convincing myself to do it.

SARON: Yes.

CHIU-KI: Usually once it comes out, then I look at it and say "that wasn't too bad." So I just really have to convince myself that, just do it. I actually sometimes tell myself, "If it's not good, throw it away." It never happened. Once I committed myself - I'm all about committing device. If I need to go exercise, I sign up for a class. Once I'm committed, I do it. So once I'm committed to writing it and I get started, then I will keep doing it. That has worked pretty well for me.

SARON: Yeah. So we talked about blogging, we talked about speaking; what are some other ways that you've been able to make your work more visible?

CHIU-KI: Tweeting is a lightweight way of blogging, in a sense. And again, tweeting for me was also actually really, really difficult to pick up in the beginning. I sign up for an account and I don't really have anything to say. It was kind of funny; like, "I know Twitter is very useful for connecting with other people in the industry," and I sign up and - it doesn't work the same way as blogging, is what I'm trying to get at. If you want to write an article, you can sit down, come up with a topic and just do it. Tweeting is much more nebulous. Like, how do I participate on Twitter? So for me, the breakthrough was actually going to a conference and just - usually when you go to a conference, they have a conference hashtag and people will post things that are related to that conference with the hashtag. So I started following and trying to see what other people do. I was like, "Oh, this is brilliant." I would see people, for example, they will listen to a lecture and write down some - not really catchphrases, but interesting points, and then other people will retweet those. I was like, "OK, that I can do." So I started off with just retweeting other people's things when I go to conferences, so it's a very, very specific little niche of how I used Twitter. And then I started - "Oh OK, this is the kind of thing that people will report, essentially, during a conference." Let me try that too. So if someone put up a slide that has an interesting quote, I'll type that up and put the hashtag in. So gradually that got me started on Twitter. Then nowadays, I apply the same lesson after a conference, or maybe I will be reading certain articles like, "Ooh, that's interesting." I'll post a link and just put the title of the article. I don't agonize too much over "Oh, I need to put something witty in it." But then much like blogging, I started noticing things. Actually, one thing that was really funny - at least I thought - so basically nowadays, tweeting to me is such a habit that I have tweetable moments in life. One day, it was maybe a year or two ago, we were at a supermarket and we were getting a jug of milk, and my husband said, "Wow, milk is more expensive than gasoline." Any normal person would just laugh, get the milk, and go on with life, but me, I was like, "Oh, that's a tweet! Wait!" So I stood there, took a picture of the milk jug and the price tag, and then I posted on Twitter. Actually I think I phrased it slightly differently; I put "OH" which is overheard, "I wish we can drink gasoline," and then there was just the milk and the price. But this is not something normal people do. Normal people will just make a comment to their wife and continue with life. But kind of going around the same theme is once you start doing it, then you pick up certain tricks and habits and things become much easier afterwards. So I really like that. Nowadays I'm pretty active on Twitter, but I mostly do a lot of technical tweets. If I read an interesting article, I will post a link. Or if I wrote one, I would definitely post it. That's actually another reason that I got more comfortable with promoting my stuff, is that I feel like I've built up my Twitter feed in such a way that it's not just me, me, me, me, me. I share other people's stuff. Last night I was cooking and I was using a cooking thermometer, which is a very nerdy thing to do, but hey, I'm a developer; it's okay. So I posted a picture of the cooking thermometer in my fish. So it's not just me talking about things that I do that is "Oh look at this crazy technique that I'm using so that my app is more responsive." It's not always just showing off how cool I am. I talk about other things. I share other people's content. So that helped a lot to too, just getting a good mix, essentially. Then I feel I'm just sneaking in my little braggy stuff among all the other things that I talk about. Which is life. I mean, that's how I am. A person. I don't walk around talking about what I do all day long; I talk about other things too. So I reflect that in my Twitter presence.

SORAN: Yeah, I like that. So what advice do you have for people who are a little bit newer? Because you learned to code many years ago, and you've been in tech for a while, and I'm wondering how can people who are just getting started, who are maybe a year into coding, hoping to get their first job - how can they share their progress and the work they're doing so that in the future it helps them get that job, make those connections, and really advance their career?

CHIU-KI: I think part of it is - I mean, even I'm struggling with that, is that I don't want to show my weakness, almost. For example, when I write a blog - it has evolved. In the beginning I would only write about my final solution, the perfect, all shiny "this is how this is done because I know what I'm doing." But nowadays I actually go through a little bit more storytelling, almost. So I always start my blog post with like "This is what I'm trying to do. I tried X, Y, and Z, and they don't work, and finally I tried this other thing and it worked." So I feel like getting comfortable with just telling it as a narrative of "this is what I am doing" - not necessarily phrase it as "this is the one and only way to do it" - that's very helpful, and I feel like you could do that whichever stage you are in your career. In the beginning, maybe that will be "I have ABCDEFG and I've tried a million things. They all don't work" and then your blog post just stops there. It's okay. It doesn't have to be everything is perfect, even though a lot of us would like to present ourselves as flawless and amazing. So I understand. I tell myself to do that and I can't get myself to do that 100% of the time, so I wouldn't necessarily say it's advice, but it's something that's worth trying. Just let go of the notion that it has to be perfect before you put it out to the world. But the important part is you're explaining that "This is what I'm trying and this doesn't work because of this." It's not just "Oh OK, I cannot do anything. Everything just failed." Don't phrase it that way, but it's more like "Wow, this thing is more complicated than I initially thought. I tried this and that." So that would be, like I said, not quite an advice, but I think it's worth trying and seeing where that takes you. Maybe you are super uncomfortable doing that, you don't like putting yourself out there, telling people that "Yeah, I walk into dead ends all the time." Which to be honest, that's how programming is. I feel like people will understand. If you're always painting a rosy picture, that's almost too fake in a way.

SARON: Yeah, people will definitely see right through that.

CHIU-KI: Yeah. And then also, like I was saying earlier, it doesn't always necessarily have to be something that you have done. Like conference is a great example, where you can report on what has happened. You can say that "Oh wow, I went to this talk and I wanted to try this thing." You don't even need to necessarily try it at that point in time. You can just say "I want to try it" and just put it out there and get the conversation going. I feel like at least that's how - I think that's how I transitioned from "I have nothing to say" to "Wow, OK, I regularly have something to say. It's like I broadened my sense of what I can share. Because for some reason, I really constrained myself in the beginning that it has to be finished, polished, and perfect before I show it to the world. But now I do a lot of "Oh, that thing looks interesting. I should look into that." Sometimes I even say I "should" look into that. I'm not even committing myself to looking into; I'm just saying that it looks interesting. And that has value. Even though maybe all you have is a link to something that you've never seen before, maybe other people have not seen that either. So just broadening to things that you wish you were doing, things that are half done, things that you started doing but did not finish because of various reasons. It's OK. It's OK to document all those things.

SARON: So next let's move on to some rapid-fire fill in the blanks. Are you ready?

CHIU-KI: Yep.

SARON: Number 1: "Worst advice I've ever received is..."

CHIU-KI: This is not specifically directed to me, but it's more in general, that you should go find a mentor.

SARON: Ooh, tell me about that.

CHIU-KI: So I picked this kind of on purpose because its controversial.

SARON: I was going to say, yeah.

CHIU-KI: Yeah. What I mean is that for some reason there's this notion that if I want to advance in my career, what I need to do is to find that one person, one special person that will hold my hand and lead me to my next level or the next thing I need to do. And I tried that. I tried that for years and that didn't bring me anywhere. There will be companies that have, for example - it's all in good intention - they'll have a corporate program that pair up people and have them mentor maybe junior people and help them. But the problem at least I personally experienced is that I walk in, I don't really know what I want out of it; the mentor doesn't know what he or she should be doing to help me. So in the end, we meet once a month and then we meet not really and then nothing happens. So that's the worst advice. But there's a very easy way to flip that. Basically all you need to do is find mentors.

SARON: Interesting.

CHIU-KI: Instead of one singular person. The way I look at it is instead of going into a fancy restaurant and getting a chef's choice and every course is laid out for you and you can just sit down and eat them all and be full, you're going a la carte, basically. You have to look at every single aspect of your career and decide what you want to do and then find a person that can help you. And it may be one person; it may be ten people for ten different things. Because at that point, then it's become much more focused. So maybe you want to start public speaking, and maybe you are an Android developer. So then you started going to the different conference websites and see what people do, and then maybe you'll find somebody that seems interesting. At that point, also mentorship is not a very - for me, not a very rigid concept. It's not necessarily "Oh, let's meet once a month and talk about what I need to do next." I will consider someone my mentor - actually I have a lot of mentors that don't know that they are my mentor because

SARON: I have a lot of those too.

CHIU-KI: Exactly. When I first started speaking I would go look for people that I feel like is what I always call 2 years ahead of me, essentially. They're 2 years ahead of me, they're already speaking, and I see what they do. I follow them on Twitter. It sounds really stalky, sounds kind of creepy. But what I do is I emulate. I find people that are doing things that I want to do myself, and I observe what they do and then I try it. Much like I was telling you about when I go to conferences, I see other people tweeting, I do that. There are a few people that I am observing very carefully what they do on Twitter and try to reverse engineer and figure it out. I never go to them and say "Hey, will you be my mentor?" No. But eventually usually what happened is that then I ended up replying to their tweets and seeing them at different events and we become friends, but I never actually come out and tell them that actually, secretly, you have been my mentor for all these years. I don't do that. But I do have many different people that I consider my mentor in the sense that OK, I want to figure out how to do this thing. How do I contribute to open source maybe. And I'll find some project that have people that are really active and see what they do, and then I'll figure it out. And sometimes I do reach out and specifically ask questions. But I never use the word "mentor." I'll reach out and say "Hey, I saw that you've been doing this for quite a while, and I want to get started on it," and I have a few really concrete questions that I would ask them and say maybe something very specific, like "How does a pull request work? How do you squash a commit -" something really super specific.

SARON: Very specific, yeah.

CHIU-KI: Right. That way they know how to help me, and I want to help them help me, essentially. Which I feel like when you just have this romantic notion that "if only I had a mentor, then my career would be all set," that is not going to help you. I mean, I know people that have that in their life, that they have this one person that really guided them and helped them move to the next stage. Great for them, but I feel like it's not something that you can pursue. If it happens to you, it's great but I - at least I tried and that didn't work, and I feel like finding multiple people is a much more reliable way of actually getting the mentorship that I need.

SARON: I like that. Number 2: "My first coding project was about..."

CHIU-KI: I actually started coding very early. So when I was eight, my mom brought home a computer that her company didn't want; they upgraded to something better. And I ended up learning BASIC programming, which is a programming language that is very close to assembly I would say. So it's kind of low-level. So I learned that; I went to - my mom signed me up for a community center course, so I was learning programming. I don't think she even knew I was learning programming; I think she thought it's a class to learn how to use the mouse and type and things like that. But I loved it. I really like - I was eight, so I really liked the fact that I can tell the computer to do something and it will do it. I think - I mean, I don't think that's the very, very first program that I wrote, but the very first that I remember was a hangman program. I gave it an array of words, and then it renders little dashes and then you can put letters and it will show which one you got right. And I was so excited, and I was forcing my cousin to play it and she was not interested at all. But my cousin was also much younger than me. I was eight; I don't know how old she was. She was maybe four. I don't think a 4-year-old is interested in hangman. Yeah, that's my very first programming project.

SARON: Very cool. Number 3: "One thing I wish I knew when I first started to code is..."

CHIU-KI: I wish I knew that it's okay to ask questions. I feel like when I've - it's not even when I first started. I've been working for a long time. But every time I have something that I want to ask someone about, I will research extensively. I'm making sure that I have all grounds covered before I reach out and ask someone because I don't want to waste their time. And what I've discovered is that the process of asking a question actually helps me clarify what I'm confused about.

SARON: Yes.

CHIU-KI: So what I have done instead - I don't walk up to people and ask questions just randomly just because that is really disruptive. What I try to do is try to write emails. I would start an email, I would type out basically what I couldn't do. "I'm trying to do this but it doesn't work." I have to explain myself, "I tried this, I tried that, I tried that." Usually I'll be like, "Oh, I didn't try that other thing yet." So I would save that draft, go try the other thing, come back and "Oh, OK. That's how it's done." So then I discard the draft. I didn't actually even need to send out the question. So just going through the motion of asking the question

SARON: The process.

CHIU-KI: Yeah, the process of formulating your question helped so much. And don't get me wrong; that's maybe 20% of the case. I do actually, the other 80%, do go out and ask my questions. It is very intimidating in the sense that once again, you're exposing your weakness. You're going out there and telling people that "No, I don't know what I'm doing." But actually this happened just last night. Last night I was on a Slack channel with some other Android developers, and I was using some library, and I could not figure out how to log the error. I know something went wrong; I need to debug it. So I was really reluctant. I was like, "Hm, should I ask this, should I not?" I ended up asking it. I asked, and yeah, it was a very obvious answer in the sense that there are two ways of doing it. I was doing it one way; it's the other way that I didn't try. So I felt a little bad about doing that. But then what happened was after that, after I figured out how to log my error, I went back to the Slack channel and I posted the error message, and somebody else was like, "Oh, that!" It turns out to be a very common problem that a lot of other people had and is on the GitHub issue. A lot of people have problems. It was really funny, because what I ended up triggering was that the dev that was on the project actually merged in a fix for that particular problem because he was like "So many people had this problem, I finally got my act together and just got this into the master." I was like, "Oh thank you! I wasn't expecting that." And afterwards I'm so glad that I asked that, even though it's very intimidating. Especially since I knew that the dev that is doing that library is in the channel, so I would appear very stupid if it is a very obvious question. So every time I ask a question, I still waver, like "Should I do it? Should I not do it?" But I am getting more and more telling myself that "no, do it." Because the times when it was so - basically the number of times that I have looked back and said "Look, you wasted so many people's hours, you were stupid" is zero. That never happened. Usually what happened is that OK, it was a quick answer, thank you, bye, life goes on. Or something like what I described: it actually ended up opening up opportunities for other people. So definitely it's OK to ask questions. I mean, it's scary, but you should do it anyways.

SARON: Next let's do some shoutouts. Do you have a couple for us?

CHIU-KI: Yeah. My first one is an Android one. This is an Android developer. It's called CodePath. I think what they call themselves is CodePath Android Cliffnotes. It is a wiki that is curated by people who are teaching Android, and it's really nice because it gives you a - well, it's cliffnotes, so it gives you a one-pager on various topics - for example, testing or how do you talk to the internet and things like that. What I like about it is that most of the time we want to get the official source. Like, oh, Android is written by Google; I should go to Google and read their documentation. But a lot of the times they are also other libraries out there that are built by the community, and Google don't necessarily want to endorse any particular one. So this is a third-party list which gives you, in my mind, a more holistic review of what's out there and what you should try. So I definitely recommend that.

SARON: Cool. What else you got?

CHIU-KI: The next one is also Android. I will say the first one is for everybody, whether you're a beginner or not; the second one is a little bit specific in the sense that I use it daily, almost, because I do a lot of - well, I write Android apps. And then what I need to do is I usually need to take a screenshot, either to upload it to Google Play or to show people what I have done. I use this app called Clean Status Bar. What it does is that when you activate that, it will cover up your existing status bar, and then it will only put the time and maybe just full wifi signal so that there's no clutter on it. Because I don't know about your phone, but my phone constantly has notifications on it. Usually what happens is there'll be like a Gmail icon, a little tweet bird on it, and then I will have a little Bluetooth icon. It's just very distracting on top. And I used to - either I'd be lazy and just post it as-is, or I would actually take out GIMP and manually rub out all the icons, which is really tedious. But this is a really good app because what you need to do is that you just activate this app and then you pick the status bar color - and then you can even change the time; you can choose the time that it shows - and then it has nothing else. It just has the time and the wifi icon and the status bar. So it still looks real, but it doesn't have the clutter. I highly, highly recommend everybody to do that, because now that I use it, I cannot tolerate screenshots with distracting notifications anymore.

SARON: Mmhm. Yeah.

CHIU-KI: Yeah. And then my final pick is not Android; I figured that I should give a shoutout to not-Android things as well, even though Android is a big part of my life. It's a website called Paletton. It's a bit hard to - I'm not sure how to pronounce it, because I've only ever seen it written in the URL bar. I guess you'll put it in the show notes. What it is is a color site. What you can do is you can go there and you can give the site a color - usually I do it by the hex value; for example, red - and then it will give you complementary colors. So it will give you multiple shades of red that is derived from the red that you gave and also the complementary color, which I cannot do on top of my head, which is why I need the site. Basically a color that goes well with it. So for example, maybe you will have to use the red as your primary color, and then you will use the secondary color for your buttons. I really like it because I have no sense of what colors go well together, and yet sometimes I'm doing my own little side project; I just need to have something that doesn't look awful.

SARON: It doesn't have to be good; just not bad.

CHIU-KI: Right, just not awful. So I'll go through that site, and I'll put in one color - usually purple, because I love purple - and then it will give me that purple and then a lighter shade and a darker shade so that I can use - for example, in Android usually what you do is that you have your app - the app has a toolbar which shows your app title that's a lighter shade of purple, and then the top status bar is a darker shade of purple, and they go well together. Rather than me randomly picking some color.

SARON: And hoping it turns out well.

CHIU-KI: Exactly. You still have to pick one color, which is OK. Maybe you pick green, and then it will generate a color scheme for you. I found that really nice. Just takes the guesswork out of it.

SARON: Yeah, that sounds really helpful. I have a couple shoutouts of my own. One is - I actually found this on your blog - is it Laura Hogan or Lara Hogan?

CHIU-KI: Oh, donuts!

SARON: Yes. Her donuts post is just amazing. She started - it looks like it was two years ago that she first started this. She started celebrating her career wins with donuts. And the problem that she was solving is that she works really hard, she does a lot of really great stuff, is very accomplished, but as soon as the good thing happens, it's "OK great. That's done, now let's move on to the next thing," without really taking the time to celebrate the accomplishment. And I'm very, very guilty of this too; as soon as the thing happens and it's over, it's "OK, what's next?" and you don't really get to appreciate it. And so what she started doing is buying herself a donut with every small or big career accomplishment that she gets, and it's really, really amazing - one, because I had no idea there were these many types of donuts. The diversity of donuts is absolutely incredible. But two, because it's a really nice, easy, simple, fun way to reward yourself, to literally treat yourself and acknowledge the things that you're doing. And her wins include speaking gigs and writing books and chapters and appearing and doing a bunch of things. I can definitely see a place for all of us, no matter how small our wins may feel, for us to celebrate with a little treat as well. So I loved that initiative, and you should all definitely take a look at it and read it. It's larahogan.me/donuts, and I'll post that on the website as well, so check it out. And the second, going back to speaking and Commons proposals - as you heard today, the first step in speaking is oftentimes submitting a proposal, and there's lots of really good blog posts out there that talk about how to write a really good proposal. And one that I really like, that is incredibly thorough, is by Sarah Mei, and it's called What Your Conference Proposal Is Missing. Sarah is part of Ruby Central and organizes RubyConf and RailsConf, and she's been reviewing conference proposals and organizing conferences for a very long time, and she wrote up this really, really good summary of the things you need to make sure that you do, the things that you should not do. There is an example of what a good talk proposal looks like. And she gives a very, very thorough review of all the things you should think about for your next proposal. So if you're thinking about it, if you're trying to figure out what makes a good pitch and what makes a good submission, definitely take a look at that blog post. It'll give you some really good ideas. If you want to join the conversation, you can join us on CodeNewbie Discourse, our online forum for people excited about code, or you can chat with us every week on the CodeNewbie Twitter chat. Just search for #CodeNewbie and tweet with us every Wednesday evening at 9 p.m. Eastern Time. You can learn more about that, as well as show notes on this episode, at codenewbie.org/podcast. If there's a topic you want to hear about or a guest you want to hear from, send us an email, hello@codenewbie.org. Thank you again, Chiu-Ki, so much for joining us. You want to say goodbye?

CHIU-KI: Bye.

SARON: Thanks for listening. See you next week.

Friday, March 18, 2016

ClipRect: Draw outside of the box

Do you know how to draw something like this in Android?

Yes, canvas.drawRoundRect()!

radius = height / 2;
rect.set(0, 0, width, height);
canvas.drawRoundRect(rect, radius, radius, paint);

How about something like this?

It kind of looks like the rectangle with rounded corners. If only there is a way to chop off the end! Well, there is: clipRect.

When you clip a canvas, you are telling Android to draw only inside that rectangle. This allows us to color outside of the box, so to speak, but only keep the part that is inside the box. In our case, we will draw a round rect with size width + height by height, but clip it to width by height so the rounded part on the right is "outside".

canvas.save();
canvas.clipRect(0, 0, width, height);

rect.set(0, 0, width + height, height);
canvas.drawRoundRect(rect, radius, radius, paint);

canvas.restore();

Remember to save and restore so the rest of your app can draw wherever it wants.

Challenge

The source code is in ClipRectActivity in android-graphics-demo.

Can you modify it to clip the rectangle on the other side?

Bonus: Try these other techniques!

Monday, March 7, 2016

Women Techmakers Lightning Talks

Last year GDG Boulder celebrated International Women's Day with a night of lightning talks. People loved it, so we did it again this year!

Host

I was speaking at DroidKaigi in Japan in February, and would not have too much bandwidth to organize the talks. Fortunately Amber Grimaldi kindly agreed to host the event. Just like I outlined in the report from last year, she reached out to individuals asking them to speak, followed up to make sure they prepared the slides on time, and of course, emceed on the night.

Twitter

We used 2 hashtags: #WTMBoulder to get a quick summary of our event, and #WTM16 to share the evening with the rest of the Women Techmakers community.

Recording

I was the camerawoman for the night. I followed my own instructions for recording talks: screen capture for slides, camcorder for face of the speakers, use audio to sync them up. There was a bit of post-processing to decide where to overlay the camcorder feed to avoid blocking the slide content, but otherwise the editing was pretty straight-forward.

Videos: https://www.youtube.com/playlist?list=PLjkBbfqbfeQZlDx-0Dj9k3-U7-eXz6H53
Slides: http://bit.ly/1TWYZGq

First-time speakers

A few of the speakers never gave a talk before, and would like to get started. A lightning talk is a great way to get your feet wet, and I was very happy to be able to record them. Now they have a sample online to apply to speak at other events!

Further reading

Tuesday, January 26, 2016

Daggerless Dependency Injection for Testing

I have written many articles about using Dagger to inject mocks into tests to remove external dependencies. But many people don't want to use Dagger, for a variety of reasons.

Dependency injection is a design pattern. The libraries are there to help you, but if you prefer you can definitely implement it yourself.

Remember I said I want to write a book on Espresso, but only if there is enough demand? For this particular topic there is definitely a lot of demand, so I went ahead and wrote a primer: Daggerless Dependency Injection for Testing.

It shows you how to how to set up your Android project and implement dependency injection from first principles. You will be refactoring a sample app to learn how to extract dependencies for injection purposes. And of course there are some Espresso tests as well.

Get it here: https://gum.co/DaggerlessDITesting.