My Interview with Bullish

I'm a huge fan of Jen Dziura's work on her Bullish column, and have corresponded with her a few times. I reached out to her a couple of months ago to share my story of sending myself to school to learn to program, as I wish I had read a similar story years ago. Check it out, and please forward it to any ladies you know who are wasting away in some soul-sucking administrative gig.

Learning Binary Numbers

During gSchool, we did Ruby warm-up exercises each morning, and this was a primary way I learned throughout the program. Since graduating, I've really missed these daily challenges. I've decided to go back and re-do the exercises, but now I have the luxury of being able to spend more time on one challenge and repeat it like a drill (which is how I learn best).

Besides the actual coding solutions, a lot of the warm-ups presented new subjects I had never faced before, having no computer science background. One of the more interesting subjects introduced was binary numbers.

I really want to understand binary numbers and feel comfortable with them, so today I outlined a simple learning plan to teach myself. Basically, I'm starting out with daily drills and exercises, then tapering off over the next couple of weeks. After that, I'll revisit binaries here and there to make sure I'm retaining them.

Throughout the next few weeks, while I'll focus on working with the numbers themselves, I'll also do some coding challenges so that I'm getting my Ruby practice in as well. I think the combination of some written work and the coding solutions will really help me learn binaries better than just one method or the other. Here are the resources I'm starting with:


Daily writing drills I'm practicing:

Counting in binary, trying to write out the binary equivalent of random decimals (& vice versa), basic addition, &c.

Ruby Warm-Ups by Jumpstart Lab:

BinaryTrinary & Binary Secret Handshake

Great video that explains the basics:

I Code for Democracy: My First Week at TurboVote

I just finished my first week as an Apprentice Software Developer with TurboVote, based in Brooklyn, New York. We're a non-partisan, non-profit startup. We make voting easy, from helping you register to sending you reminders about upcoming elections where you live.

I'm really excited about the work we're doing, helping to improve democracy and voter participation as well as the technology pieces. I'm starting to learn Clojure and ClojureScript while continuing to grow my Ruby and Rails chops. I work with two senior developers and another apprentice, and it's really nice having someone else at my skill level. We pair often but can spend some time working independently, which is a balance I enjoy. 

It's been great to see how the work habits ingrained during gSchool are transferring seamlessly to my first position as a professional developer. Pairing, TDD and all manner of agile practices have allowed me to step in and contribute immediately. I made my first git commit on day one, and my first pull request on day three. It's so nice to focus on the new code base before me and feature development instead of working out all the little kinks in how to step into an experienced team.

I'm so grateful to join TurboVote's team in Denver and start my new journey as a professional developer! 


Final Project: Text-to-911

Tonight I largely wrapped up my final gSchool individual project. My mother had some really great ideas for tools to allow 911 dispatch centers to take and manage text messages, which right now is only available in around ten cities nationwide. I decided to use this as my final project and create a prototype. It was a lot of fun and very motivating to have a real-life product owner, and someone who has put a lot of thought into it. She had great ideas and was able to articulate them clearly. When I asked her for user stories, instead of the usual (and SO dry) "when a user sends a message, then blah, blah, blah..." she drew the story. I come from visual people, ya'll. I wish all user stories came in the form of storyboards. 

There is so much more I want to do with this app, one week just wasn't enough time to get through it all. At one point I felt like I was playing whack-a-mole with my ideas, trying to suppress them as they constantly cropped up. Although gSchool's demo is tomorrow, my *real* demo is next week in Bellingham. I'm going to present this prototype to the Bellingham Fire Department, where my mother is Communications Operations Officer. Something I really want to include before the demo is the ability for citizens to send photos and videos. The Twilio API doesn't allow MMS, so I'm going to have to rip that out and use another service. If I don't get a new service integrated (I will be on vacation, after all) I'm hoping to at least throw some in the seed data so people can see what it would look like. I think that would really take this app up a notch and would be a lot more impressive than the current beta. 

Other future features I envision: keyword statistics/data visualization, mapping messages, attaching messages to incidents, and creating incident-specific dashboards. Imagine firefighters are responding to an incident and can pull up all the messages associated with that one call en route. If people have sent photos, they could get a better sense of the scene, location details, types of injuries, &c. There are just so many possibilities, which is why I enjoyed working on this so much. To be able to demo it for a team that will use something like it in the future is pretty cool too. 

Update July 18: What the dashboard looks like with photo messages 

How RailsBridge Opened the Door For Me

Last weekend I attended the 100th RailsBridge workshop, held in Louisville, Colorado. I helped teach people who were either completely new to programming, or just new to Ruby.  This was a lot of fun and a big confidence builder for me, because the last time I went to a Railsbridge workshop, I didn't even know what Ruby or Rails was

Learning what a string is for the first time, December 1, 2012

At the workshop in December, I met several people who would later become my mentors and teachers, including Jeff Casimir of Jumpstart Lab and gSchool. He told us about the program and really encouraged us all to apply, but the catch was we had to do it in a day, because we were already up against the deadline. I had so much fun learning Ruby at RailsBridge that I spent the entire next day putting together my application for gSchool. Just two weeks later, I interviewed and was accepted. I was so excited and admittedly a little in shock, the reality that I was going to go back to school full-time felt too good to be true. I'd never gone to college (because - skiing - duh) and it had been a dream for a long time to continue my education.

Teaching at RailsBridge, June 22, 2013 (far left)

Going back to RailsBridge this weekend felt very full-circle. Although I'm still just a student myself, I was able to help others learn, and see their excitement as they embark on their new journey.

The weekend also ended in the best way possible. First thing Monday morning, I received a job offer from TurboVote!!!!! I'll be going to work there at the end of July as an apprentice, and I could not possibly be more excited or grateful.

Beth Medina, a software engineer at Comverge, made this kick-ass cake

Thank you Sarah Allen, Sarah Mei and everyone else who helped make RailsBridge happen. I will forever be indebted to this organization, and will never forget how RailsBridge swung the programming door wide open for me. 

The End is Near

Only FIVE WEEKS left for gSchool[0]! The weeks keep clipping by quickly, and before we know it we'll be starting our new jobs across the country.  

This week we started our last group project, using Service Oriented Architecture. My group is building a chat application for tech conferences, and I'm responsible for the main Rails app that will deal with logging in users with Twitter and displaying all the details, from schedule to live chats. I'll be using a lot of Ajax and jQuery, and spent last night studying how to properly test drive it. I'm trying Jasmine, and I really like it so far. 

I've been interviewing a lot these past two weeks, and am glad to see there are promising opportunities out there. It feels really good to be in this place, to already have most of the program complete and planning what I'll be doing when it's over. I thought I'd be really worn down by now and desperately dreaming of camping with a view of the Tetons or on Vancouver Island, but I don't feel that way at all. I've found my sweet spot, am in the flow and am trying to relish these last few weeks. Of course I *do* look forward to camping and being outside again! 

And now for some weekend inspiration! We don't do this just for the love of passing specs, we do this because we can solve really cool problems that absolutely improve lives: 

Temple Grandin - One of Colorado's Finest Humans

"Autism is a spectrum where on one end, you have half of Silicon Valley and the other end is someone who is non-verbal." - Temple Grandin

Last night, my mom tipped me off to a talk by Temple Grandin being aired by KUOW in Seattle. I found video of the talk here, and really enjoyed watching her and seeing her slides. If anyone could be described as having true grit, it's Temple.

Ms. Grandin spoke not only about the autistic brain, but about how different brains are necessary in programming. She described Steve Jobs as an artist who created the UI, but needed engineers to make the inside of the devices work. "You need both kinds of minds."

The software world talks a lot about diversity, and besides sex, race and cultural background, in my opinion equally important is having diversity of brains/thinking.

Recently I've heard a few stories about apps freeing non-verbal people to communicate for the first time. One story, about a young lady who now is a writer, was particularly touching. I choked up when her parents talked about how they'd spoken in front of their daughter for her entire life assuming she didn't understand a word they were saying. When she started using an iPad to communicate, she had almost perfect English, stunning her parents. She'd somehow learned a language without having ever communicated back to anyone, or even being taught. What would it be like to have that experience? Did she feel trapped in her own body? I can't even imagine.

Another quote from Temple that I really loved: "Less than 2% of your DNA actually codes for making a person. So what does all the other DNA do? Well a big part of that is going to be the operating system. It tells coding DNA what to do."  

I hope you'll make time to watch her speak, it's riveting!


Twilio API Tutorial - Sending Text Messages

This week I used a gem to integrate with the Twilio API for SMS text messages, and it was really easy to implement. Once I knew what to do, it only took a few minutes to get it up and running. This would be a great API for a first-timer, so if you've wanted to use an API but wasn't sure which one to pick or how to do it, read on!

1. Create Account & Obtain Phone Number

Visit Twilio's site and create a trial account. Follow the instructions to verify your account. Twilio will present you with several phone numbers to choose from, pick a number you like and click "Get Started."

2. Get your Key & Auth Token

Once you have a Twilio phone number, click on Go To Your Account where you'll see your account dashboard.  Right in the middle of the page, you should see your Account SID and Auth Token. The Auth Token might be hidden, if you click on the lock icon, it will display. Keep this page open, you're going to come back to these in a few minutes.

3. Add Gem 

Add Twilio's Ruby gem to your gemfile, and run bundler to install.


4.  Write Your Test

Here is a screen shot of what my model test for sending a text looks like, but of course yours will look different because it will be specific to your code and the way your project is configured. I've mainly included it here because I've found most tutorials completely ignore testing, and if nothing else I wanted to reinforce that you should be testing first. I'm using VCR so I don't hit the Twilio API each time I run my tests, and Factory Girl to build my patient objects. Run your test, and follow the failures to guide the implementation. Below is the code I had to write to get this gem to work in my project.

5. Controller

Decide what action you want to trigger the text message. In my project, it was when a new patient was created and saved to the database. My create action is doing some other things, but you can see that on line 31, I'm just calling a method I defined over in the model. Very simple!

6. Model

Finally, here are the guts that really make this thing work. I'm going to show you my code, but check out the Twilio documentation as well. The client_number is the number you want to send your text messages to. During development, I hard coded my own phone number, but I've added a comment with some code I would use if I was, for example, sending a text to a patient when they were created. The twilio_phone_number is the number they gave me, the number your text messages will be sent from. 

The next step is to add the SID and Auth Token. You can hardcode these as well, and if you want to try that first just to get things working, go for it. Hardcoding them is ultimately a security issue, as someone could get a hold of them (especially if you're pushing your code to a public repo on Github). To keep them private, create a file named ".env" in the root of your project's directory and add them there. Add .env to your .gitignore file, that way this other file won't get pushed up to Github - which would totally defeat the purpose of saving them to a hidden file.

With the SID and Token stored safely in variables tucked away, we just have to point to them with the environment variables in our model.

7. Try it out!

With all this code in place, make sure your test is passing and that texts are going out. Hopefully things will go smoothly as they did for me, if not, please leave a question and I'll try to help you out. 

This is my first tutorial, I hope you found it useful. Please let me know if I missed any steps or didn't explain anything clearly. Shout out to Erin for helping me get my project set up with Twilio!