Monday, 21 September 2015

Ten hackathons and counting…

Holy shit, it's been nearly a year since I've published anything on here. Guess this is a good time as ever to publish something, especially if it's fresh on my and a community I'm a part of's minds. Furthermore, I've been pretty unproductive this entire day (Sunday) so if this post is one item of productivity…

Said community includes those affiliated with Unhackathon, a hackathon I've sang the praises of and will continue to do so…more of that in a bit. What really got me tipped over to write this stems from two sources: a reflection after my time at MHacks VI, my tenth hackathon, and an unfortunate happening at Hack the North this past weekend, for which a fellow hacker community member wrote his own reflection on hacker culture on. I won't go into what exactly happened at Hack the North nor what Rodney wrote; you can check them out yourself.

On my side of things, I'm still gazing at this figure: ten hackathons since spring semester of freshman year. I didn't know what I was doing at HackPSU that spring semester freshman year, and to an extent, I still don't know what I'm doing even after a week or so removed from MHacks. And that's fucking okay; after taking the infamous Sociology 119 class at Penn State fall semester sophomore year, I realised that even a state of confusion over a subject is perfectly okay, especially when a complete picture of the subject has not yet been established. Furthermore, the company I interned at this past summer gave us all shirts with "never stop learning" on the backs.

If riding and racing my bikes (yes, that's plural) is considered pushing limits in physical ability and health, then going to hackathons and actually working on projects means pushing my limits in intellectual applications and health. That fateful HackPSU had me in a team with the then-president of our ACM chapter and two other first-time hackathon participants, one of whom the same semester as I and the current president of our ACM chapter. It really helped that we decided to work in PHP, something all of us knew at a semi-production level, for our hack that we, along with everybody else who submitted something at the end, demoed in front of the whole audience (because expo-style initial demos weren't a thing yet). I think that experience really showed how quickly I learnt how to apply the theoretical concepts from computer science classes into the various frameworks, APIs and programming languages I barely understood up until that point. But most importantly, it was a fun experience working with people I never had the chance to before even though we knew full well that we weren't anywhere close to "winning".

Fast forward to my first two PennApps, Fall 2013 and Spring 2014, respectively. The two hacks I worked on were still not even close to "winning" but that's still fine. The whole point was to work on stuff as a vehicle to apply classroom concepts and some wacko ideas to reality, ie frameworks, APIs, etc. Furthermore, other people actually cared about what we were making and how they could help! And when I say "other people", not only do I mean other hackathon participants, but even the sponsors came around to all the hacker spaces and struck up conversation even if it had nothing to do with hacking or what they sponsored the event for. This kind of coming together and interaction was what I had thought made hackathons magical.

My next hackathon, Unhackathon 2014, to this day is still my all-time favourite hackathon. Despite having everything that could possibly go wrong for the organisers, namely being unable to book coach buses from various areas and Stony Brook University (the hosting school) denying use of their facilities for the event (but then AlleyNYC coming thruuuu), I most definitely had the most complete experience out of all ten hackathons I've attended. Not only was the food plentiful and event shirts painted, everyone there, including the organisers, sponsors and regular participants, openly talked with one another about what they were working on and how to develop with various languages, frameworks and APIs. Despite my personal reservations regarding my abilities, I ended up helping another team with certain Python language features while the rest of my team took a nap. I even let a live-blogging hacker from Montreal use my Wacom (which died a few months later). Although I couldn't stay for the closing ceremony due to my ride back to school leaving during that time, the prizes were all non-monetary, which really discouraged much of the ulterior motives that permeates current hackathon culture.

Has this magical feeling changed? Oh hell yes. Starting this calendar year, PennApps Winter 2015 to be exact, I started exploring hardware hacking. I was having trouble sustaining the process of either coming up with my own ideas or working on my teammates' ideas for software hacks, but the other motivation stemmed from how an increasing proportion of winning hacks involved hardware hacking in some way. As a result, I started planning out hardware hack ideas in advance, partially out of a necessity to get parts or have access to them beforehand, and even trying to scrutinise who I would work with in advance. This was all part of trying to get to a formula of "placing" within the top ten. But after my two most recent hackathons, PennApps Fall 2015 and MHacks VI, where my teams didn't demo anything at the end of hacking, I'm starting to realise that this elaborate process of vetting potential teammates, sometimes idea planning but most definitely trying to decipher the "winning" formula in advance may be causing some burnout. Additionally, I'm seeing less of the spontaneous sponsor and organiser interactions and more entitlement to travel reimbursements, good hacking conditions and adequate free food. Perhaps certain hackathons are trying to grow too big, trying to attract too many people and too much sponsor money from megacorporations with desperation for return on investment, userbase and talented labour. And speaking of entitlement, it seems like sponsors providing API prizes are expecting teams to develop hacks that include them; consequently, some teams make it a point to include as many of them as possible in their hack.

I'm no developer evangelist and don't see me morphing into one anytime soon. I'm of the firm belief that not everyone should know how to program or anything beyond basic computer science concepts, but I will support those who possess their own motivation to break into this technology scene. With the amount of hackathons I've participated in and the experiences from them, there's a small obligation to help those much less experienced but as internally motivated as I at these events. Part of the reason why I enjoyed Unhackathon so much and the main reason why my MHacks VI experience didn't turn into a complete shitshow came from helping people on other teams. Apart from what I already described in a previous paragraph regarding Unhackathon, nearly everybody in my part of the hardware hacking room at MHacks asked me for help on how to set up their Raspberry Pis and used the $30 monitor I bring to pretty much every hackathon now. Helping others out is a good break from working on my own projects and it even provides insight on others' motivations, methods of attack, etc. Some of this stems from my teaching assistantship for a class, but that's besides the point.

A huge selling point of hackathons for me is meeting and working with people I had never heard of in an unfamiliar place. Every locale's hacker culture will feel different, not only by geographical location, but the people who make up that place's hacker culture, what needs they have and their accomplishments. It therefore angers me when I find out, by my own observations of hackathon organisers I know and from Rodney's post I linked earlier, certain hackathon participants take travel reimbursements to hang out with friends without intending to work on something there (I have no problem when they pay out of their personal budgets, without crowdfunding, etc). While I may have some carryovers from previous hackathon teams for other hackathons, I always strive to work with at least one person I've never worked with before. But apart from the participants, I also hope for interaction with the local technology companies, be them startups or medium-sized companies, so when the megacorporations and other companies from out-of-town sponsor hackathons with money and API prizes, the local feeling gets eroded.

Nonetheless, I'll probably be at HackGT this weekend and either Kent Hack Enough or HackNC in another two. Let's build stuff for the fun, not the bling. And while I have already made up my schedule for this semester, things can change if it's for the better. I will most definitely be on the lookout for smaller, more intimate hackathons for the remainder of this and the first half of next semester. (I hear Unhackathon will have another full edition then!)

Wednesday, 8 October 2014

Windoze 10: a preview

I'm still really bad at blogging. I have as many as four posts in queue at a time. Life is complicated.

So I downloaded the Windows 10 Preview and decided to mess around with it in VMware.

Tl;dr it took only ten minutes to install and it's not too interesting yet besides the new! Start Menu.
Carryover from Windows 8 installation.
Microsoft still want you to tell them about everything you do on your Windows.
They're so desperate that they make it as difficult as possible for you to create a local account.
VMware Tools does in fact work without a hitch.
Making sure the reborn Start Menu is enabled.
This is when it dawned on me that I should probably change the theme from the default, you know, personalise it a bit.
Successfully installed my custom-built (on Windows 8) Firefox 64-bit.
Installing 7-zip.
I guess Microsoft trimmed the window borders a bit, but they didn't finish the job just yet.
With the above screenshot, Microsoft just made it impossible via Task Scheduler to disable background system maintenance, which I've found (at least in my Windows 8 VMware instance) to reduce performance significantly by eating disk I/O. I guess since system maintenance includes automatic updates, it might be a good thing to leave it on for now.

Day two of testing had me installing and using some more stuff I used in previous Windows versions.
Blasting music in Windows Media Player 12 and reading my statistics textbook in Adobe Reader Touch.
Quite frankly, one major reason why I still occasionally boot into my Windows virtual machines is Windows Media Player. It simply puts every media player/organiser (so VLC is not in this set of software) I've used on Linux to shame. You just can't get those SRS WOW effects anywhere else.
Scrolling via the wheel now works almost as well as GTK+ ever has. Which means point in the box to scroll and it'll scroll without clicking in it beforehand. Yus!
I neglected to mention this at first, but what the hell are those check boxes that appear when selecting a Windows Shell icon supposed to mean? Oh, I guess in a list-like view it makes selecting multiple items easier than holding Ctrl whilst clicking each item. But it just looks totally stupid in large icons, which I usually have set as default (an old Windows 95 habit/tradition of mine).

That's all for now; the fact that I can post this means that Windows 10 hasn't burnt my virtual machine down yet.

Sunday, 5 October 2014

Unhacked

I took way too long to write this. This really should've been written the Monday or Tuesday after, but apparently I get swamped. No, swamped doesn't include getting in any byke rides other than the usual commuting/transport purposes.

After attending three hackathons previously, it was time to Unhack for hackathon #4.

If you were at Unhackathon and currently reading this, yes I was the guy with the green Penn State shirt, monitor rotated vertically, a buckling spring keyboard, stayed up all night but had to leave right at the end of the demos to catch the bus back to Penn State.

First, some credits. Have to give Hanne and the organising team and volunteers a major one for putting on a smooth-running event despite all the setbacks that occurred, ranging from the move from the Stony Brook University campus to AlleyNYC to finding that no buses were available to charter for the weekend. The fact that this was Unhackathon's first run is just icing on the cake. Had to be my favourite hackathon out of my four participated.

Also shoutout to my Carnegie Mellon peeps Alex, Brandon, (I'm gonna butcher your name spelling) and Kevin who I met first thing upon arrival and sat next to for the entire time. I think I'll have to consider getting an Oculus Rift now.

Anyway, enough of the credits. We made something like this:
Before I go into any implementation details and what purpose it serves, here's some background. Sometimes I pre-plan long road rides, so that includes at least one food/drink stop. Sometimes finding the right place(s) to stop is extremely tedious.

I didn't come into Unhackathon with any ideas on what to build; coming up with ideas isn't something I'm good at unless I have some problem that needs immediate fixing. However, during the opening, we got a demonstration/explanation of ordr.in and their API, so combine that with stuff sneaky bastards do and Coffeestop is born.
So I found Amy and Raymond from Columbia right after opening ended and got to work. We did some design and workflow diagrams to determine the best course of action afterward. Based on our diagramming, we decided on Flask (my third time in a row using this microframework in a hackathon) as the backend.
We originally wanted to use the Strava API to get the GPS route files from, but we quickly realised that just working with the raw .gpx files was easier when the final product is just a prototype.

Clearly we need a large enough dataset of coffee shops, cafés, etc to populate the results based on route, and we eventually found the Yelp API to be good enough for that purpose. It also helped that the API was able to return results based on a radius from a given geographic coordinate, which was gotten from the .gpx files.

And finally, we used the Google Maps JavaScript API to draw the damn map!

Now, the ordr.in integration wasn't as much fun as we thought. Since ordr.in's core service is in food delivery, not also just-in-time pickup, we had to plan on setting the delivery destination to the originating establishment. Okay. But in the end, we ran out of time and sanity to really get that capability even visible alongside the Yelp results.

While we are on the Yelp results, we also ended up with multiples of the same result(s) based on our coordinate-based searching. Since the coordinates that we fed into the Yelp API were relatively near one another, it is expected that in the aggregate results array there exist multiples of the same result. Again, we ran out of time and sanity to fix that, but then again doing the cleansing would have added to the processing time…

Other items claimed by erosion of time and sanity were map markers and info windows of each result, stuff relatively easy to implement. And, thinking about it post-hackathon, this would have allowed us to store the results in a Python Set data structure instead of a List.

All coding, designing, development work aside, I think the last-minute move to AlleyNYC was really for the better. I wouldn't have been able to work with my two Columbia teammates otherwise (they said they wouldn't have came if Unhackathon were still held on Stony Brook University campus), and the relevant, intimate feel of working in a rather small tech co-working space really made this my favourite hackathon yet.

But this hackathon's main purpose of existence wasn't so much to create the coolest, fanciest hack ever (though there certainly were cool ones there), but to encourage creation of brilliant code and helping one another out. And with that, it's been fun Unhacking. Now onto YHack in a few weeks!