Hack the North

This time last weekend, I was on the other side of Canada in Waterloo, ON, hacking away. Maybe it has something to do with the distance traveled to get there, but it seems like a long time ago. I almost feel like I’m moving backward taking this weekend easy (and by easy, I mean getting more than 6 hours of sleep total from Friday to Sunday).

Hack the North is Canada’s largest student hackathon and this year’s inaugural event held last weekend had about 1000 students attending from countries all across the world. Generous sponsorship meant flight tickets were significantly reimbursed 80%+ of the cost, and so students from as far away as Amsterdam and Shanghai were in attendance.

There wasn’t any specific theme to the event, other than to build something cool that worked – no one said as much but I surmise that’s the aim of every hackathon. Lots of cool hardware was available to work on as well, from Myos to Pebbles and Oculus Rifts.

Getting to the event from Vancouver was an event in itself, a crazy early start, then waiting at the airport on the other side for the shuttle to Waterloo, and then the trip on the shuttle itself. Who knew that the traffic in Toronto, where everyone flies into, would be so bad.

There was a little dinner left when we arrived and then we got to hear some amazing speakers open the event. We had Chamath Palihapitiya who was formerly in charge of growth at Facebook and is now in VC, starting the fund The Social+Capital Partnership  He spoke about startups and gave realistic advice about what life in tech is like. Chamath was extremely confident and charismatic, and it’s easy to say that he is one of the best orators I’ve ever heard. Check out his talk here (the video is still not up but I’ll update this post when it is!).

image

The hacking started at midnight and my friend Daniel and I got to work building a travel optimization app. It uses Yelp’s API to get a list of attractions in a city and Routific’s routing optimization API to provide an efficient route to visit the attractions in a single day if one exists. A quick way for tourists to determine how much they can get the most bang for their buck on their vacation.

There were chips and soda aplenty to keep people powered through the event, and there was even a small sleeping area. Unfortunately the sleeping area wasn’t really too well organized, it was brightly lit and far too small so I guess they didn’t expect many hackers to sleep much during the event. Daniel and I ended up finding chairs in a random room on the Waterloo Campus on Saturday morning for a couple of hours of sleep.

Saturday night/Sunday morning was probably the most interesting. People were definitely starting to feel the burn by that point and this was the scene at 4am

image

image

Every team got a chance to pitch their app in 100 seconds in front of a selected group of the judges, so there was definitely something to aim for during the hackathon. It’s all a bit of a blur but I spent most of Sunday morning trying to finalize the general flow and look of the app – I am definitely not a designer.

In terms of the stack, we built our app using Angular and had a Rails back-end for interfacing with the various APIs. Neither of us had used Angular before so that definitely made the hackathon interesting to say the least. We figured if you can’t try out some new tech in a hackathon, when else can you!

One of the things we found is that Angular, a JavaScript front end framework, is very domineering. You either use it completely for the front end, or prepare for some unexpected behavior if you try to mix in some regular JavaScript in there. We definitely ended up finding ourselves in the latter position, as we moved to get things working even if that meant doing things in less than the Angular way.

Another thing I learned this weekend was about OAuth, an authentication protocol which we used to communicate with the Yelp API. Since it uses tokens and secret keys, it wasn’t possible to have just a front end, we needed a back-end as well to prevent exposing our keys. This is different from something like the Google Maps API which we used as a map and for geocoding in our app (since Yelp doesn’t always return an attraction’s latitude and longitude) where client exposed keys are OK.

By the time hacking stopped at 10am, I’d been up for more than 24 hours, with little sleep before that period(!), so I managed to get a quick nap before we pitched in front of the judges.

Our app lacked the design polish of other teams, but the judges found our app pretty interesting, as did the engineers from Yelp who we pitched to separately (main prize vs API specific prizes basically). I thought we did decently for a team of two who were using a different stack than normal and it was great to find out later that Yelp had awarded us the prize for best app to use their API at the event!

We are getting 4 leap motions between the two of us. I’ll make a post once those arrive in the mail! Definitely interested to see what can be done with the hardware. Hardware hacks are not something I’ve really explored before.

But yeah, what an experience. Daniel and I work at the same company as coop software engineers, Axiom Zen, and it was great that we got the Friday off to travel to the hackathon and that we got so much support from them. They were pretty stoked that we managed to bring home a prize as well, using an API from a company they are helping accelerate. It’s great to work somewhere which gets as excited about things like hackathons as you are.

So what next? Work is super busy, there’s always lots to do but I’m enjoying it – more on that soon. I saw some interesting apps built in Node.js at the hackathon so that’s on the agenda this weekend! I’ll post if I build anything half decent 🙂

And if you’re wondering how you can get involved in hackathons, ChallengePost is a great website to start off with. They list hackathons going on around the world, both offline and online.

Hello there – A postface to the summer

Time flies. It really does.

One of the things I discovered when I first started this blog is that I really enjoy writing, and as much as the writing, the thinking about and reflecting. I haven’t taken the most direct route into coding by any means and so when I first started, I figured it would be a good idea to write down the little things that can help speed up a coder’s learning – partly for you, the reader who may be anywhere in their journey to coding mastery, but also for me, we tend to forget things if we don’t write them down and think about them!

And yet, it’s been a while since my last post simply because I’ve been too busy doing, and haven’t had a chance to come up for air and think, well, what have I learned the last few months? What would I tell past Jeremy to help him learn better.

Over the last few months I have:

  1. Done summer school for the first time and the last – I’m in an accelerated program so we’re pretty much in school year round!
  2. Completed the “interview courses” at UBC in Algorithms and Computer Systems – i.e. the ones that are meant to provide the foundational theory for answering most interview questions
  3. Built a web application for locating bike racks in Vancouver using Google Web Toolkit for a class project
  4. Started a four-month internship (a co-op really) at Axiom Zen, a startup in Vancouver downtown
  5. Coded a LOT during my internship
  6. Convinced myself (again) that I could definitely work as a software engineer (as a decent one too, I think – but then again I’m biased)


Classes, classes, classes…

The first three points in the list above kept me pretty busy all through summer, taking 4 courses at one time is no mean feat. I was super excited to take the courses that everyone said would prepare me really well for interviews for my next co-op and for a full-time job after graduation, but to be honest, I realized that the profs mostly covered the theory in a somewhat abstract way, and it was left to you to connect the dots come interview time. A typical university education some might say, but with the wealth of resources available out there, and if your one and only goal is to get the best software engineering gig as possible, I feel confident enough to say that learning CS theory in a university setting is not strictly necessary by any means. Helpful yes, but meeting up/being mentored by someone who already knows the stuff and thinking about the own problems – which university sometimes gives you little time to do – is more important. When learning about computation systems or algorithms at university, it’s easy to take little diversions into long and complex areas of the field which, while academically interesting, are not things anyone expects you to know in the real world 🙂

Some of the things I learned this summer were definitely interesting though. Particularly the intermediate algorithms course, which covered different approaches one can take to designing an algorithm for a particular problem – everything from stable matching to the debate over P vs NP.


An internship

I finished my last set of exams in late August, took a weekend off (can I even say that? Weekends are default holidays right?) and started my four-month software engineering internship at Axiom Zen. It’s technically a co-op since it’s coordinated through UBC and my university program, but there’s not much difference – I’ll call it an internship from here on in, just because it’s probably a lot clearer to anyone who’s not studied in Canada!

Before starting at Axiom Zen, I’d visited the office and the people a couple of times and really hit it off, so I was pretty much raring to go and started the Monday after classes were over. The company works with clients to develop web and mobile apps as well as incubates its own in-house startups, so it’s definitely a very interesting environment to work in. There is a pretty much flat hierarchy, so that’s definitely been a change from my last job where it was very clear who answered to whom and when (not the why so much, they always left that part out).

Learning and working/coding in the real world is a new stage to my coding journey, and one that I’m looking forward to sharing with you over the next few months. The plan is to write short posts with the little nuggets of wisdom that I’ve gleaned from working at the coalface of the industry, things you don’t or can’t generally pick up at school or working as an independent.

Since I started at Axiom Zen, I’ve been treated pretty much like a full-time software engineer and have written lots of code, and just generally gotten involved! That’s definitely something special – we’ve all heard of those internships where you do little more than fetch coffee and sneakily check facebook – so I’m having a good time and learning lots which I hope to translate into a collection of posts. Stay tuned!