Jamming with squirrels at the Global Game Jam 2017

I wrote my last exam yesterday (April 25) and fully intended to write a new blog (seeing as it’s so out of date) … only to realize I drafted this one some time ago, but never published!

Tomorrow I’ll write about my experiences at nwHacks, preparing for co-op applications, and a term 2 review of the BCS program. Hope you find this helpful, future BCSers!

Squirrel Adventure screenshot
Our plucky protagonist perches on a platform, pondering what to plunder next. (It accidentally became alliterative and then I just went for it.)

I’ve officially completed my second hackathon! The Global Game Jam — I was at the one in Vancouver — is an amazing, 48-hour game dev bonanza in which artists, devs, designers, you-name-it all come together for a glorious weekend of coffee, coding, and calamity. (Calamity, like when my team and I realized that our game’s baddies defied the laws of physics and started flying uncontrollably around the screen when we accidentally adjusted the gravity settings.)

This hackathon was so. much. fun. A friend from the BCS program and I formed a team along with two other UBC students we randomly met in the registration line-up. None of us had much programming experience, the two other students weren’t even majoring in CS, but it was “ride or die” from about 7pm on Friday night until Sunday at 3pm.

We settled on using JavaScript and the Phaser game dev framework using the JetBrains WebStorm IDE. Phaser is a free open source HTML5 game dev framework that has a pretty fantastic community and regular newsletter that I’ve been reading ever since. They also have many cool, actual game examples of Phaser features, like how to use sprites, create scenes, do fun things with their arcade physics, and much more. I found these examples, and their quick tutorial, an intuitive and inspiring way to get to know the framework … at first. Unfortunately, Phaser’s biggest flaw is that its official documentation is quite sparse. Want to look up a method to see what it does and what its parameters are? Cool! Find it in the docs! … But frequently the docs would only give you the name of the method and the names of its parameters — no description of what it was for, what the parameters or options meant, etc. It made debugging a pretty frustrating experience at times — we essentially learned the entire platform by looking at the given examples and experimenting a lot.

The other downside to Phaser was that basically everyone else at the hackathon opted to use the Unity game engine instead, so we couldn’t ask others for help. There was one other group that used Phaser (and they came up with a fantastic and hilarious multiplayer game called Whales Hate Birds), but they were also new to the framework and, in fact, made up of fellow BCS students! So while we chatted a bit, we couldn’t help each other too much since both of our groups were new to Phaser.

On the other hand, I feel comfortable enough in Phaser — and its online community is friendly enough — that I think I could make my own game by myself now, which is neat! I don’t think of myself as a gamer (in spite of many years in middle and high school avoiding my problems with MMORPGs …), but game development requires such a fun combination of creativity, technical skill, and story-telling that I really got addicted. If I meet any artsy/designer friends in Vancouver (I now realize that good art and design is the key to a polished game — we had to get our sprite sheets from the web), I would totally make a game as a fun personal project.

The most fun part of all, though, was getting to know the other hackathon attendees and feeling inspired by their amazing creations. 48 hours allowed us enough time to mingle and explore other projects, and wow — they were all so cool! One game required the player to use the pitch/tone of their voice to navigate the character. Another game was a sumo wrestling simulation where the players had to shift their weight on a balance board to ‘bump’ off their opponent. A few teams also played with some neat virtual reality hardware. Everybody was so creative and had so much fun; the jam’s theme was “waves,” so some people ran with that, but others just did their own thing and rocked it anyway (like we did). There’s something really special about a ton of people giving up a whole weekend to create stuff with the sole purpose of spreading joy and silliness.

What was our game, you ask? We called it Squirrel Adventure: you play a perky little squirrel just trying to collect some acorns on UBC’s Main Mall (the busiest road on campus) while evil cyclists and longboarders are hellbent on running you over during classroom rush hour. In theory, sounds pretty cool; in practice, our graphics were preeeetty amateur since we didn’t have an artist, and our game mechanics accidentally turned into “Super Mario 2D platformer” because that was the easiest to implement. We bit off way more than we could chew!

Fortunately, my team decided to stay healthy and fresh, so we always went to bed at decent times and ate regularly. Other teams stayed overnight (I don’t think I could handle that). This meant I was ready to start up at school the following week without lagging too much.

We didn’t manage to deploy the game, so I can’t share it with you yet, although one of my team members and I plan to figure that out after we’re done our exams in April. Overall, I learned a lot more about JavaScript, working in a team of programmers, version control using git, and the importance of “planning first, coding later” (learned that the hard way this time around). I definitely plan on returning to Vancouver Game Jam 2018 — hopefully with a bigger skill set and maybe even a sleeping bag!

My very first hackathon: UBC Local Hack Day

After a wicked snow day resulting in a cancelled final exam, the unexpectedly highest GPA of my life (so much for “not being a math person”), and abandoning my darling doggo to a Vancouver kennel (my heart breaks for her), I am finally nestled in snowy Ontario with family for a short winter break. I promised in my last post that I would write a little more often while I had the chance, so I thought I’d share my experiences at my very first hackathon, UBC’s Local Hack Day on December 3, 2016.

UBC Local Hack Day is part of the Major League Hacking (MLH) Local Hack Days happening worldwide. Instead of the more typical grungy 24- or 48-hour coding sprint, MLH Local Hack Days are a humane 12 hours long — much better! The organizers provided us with free snacks and pizza, and I even got some shiny new stickers for my laptop:

GitHub and MLH stickers on my laptop.
Sweet stickery swag.

Major League Hacking (MLH) encourages high schools and universities around the world to organize their own Local Hack Day, and UBC hosted one of them. At the same time that I was plunking away at my laptop in Vancouver, BC, students all over the world were doing the same thing. MLH representatives were at some of the larger schools — I think they were in New York, for example — interviewing attendees and generally sharing upbeat quotations and photos. It was pretty fun and lighthearted.

I had the option of joining a team and presenting my final project at the end of the hackathon, but I chose not to. Part of the Hack Day’s appeal was its non-competitive, celebratory and beginner-friendly atmosphere — I wanted the chance to hunker down and work on a personal project in a dedicated environment, without any pressure to actually finish, so that I could continue working on it post-hackathon (indeed, I’ve spent most of today working on it! More on this later.). The introductory speeches included quite a lot of talk about the MLH code of conduct and kindness, which I appreciated.

A few speakers stopped by. Susan Ibach, a Tech Evangelist from Microsoft, was back to talk about Azure and, like the last time I saw her speak, was pretty hilarious. Some students from the UBC Game Developers’ Association gave a helpful talk about version control and GitHub.

In hindsight, I feel like I could have gotten even more out of the event, but I just got too excited by, well, coding. Instead of taking the time to learn from the talks, or chat with the professional mentors, I put my head down and worked for about 11 hours straight. My head was spinning by the end! I think an important aspect of these events, especially since I wasn’t aiming to win a competition, is simply found in the networking. I completely missed that part.

My biggest regret is not staying to hear my peers’ presentations, but I just couldn’t tolerate sitting in that auditorium any longer. Hack Day went from 9am to 9pm; I left at around 7:45pm, right before the presentations began. I needed a break (and a shower).

My next hackathon is the Vancouver Game Jam in January, which is more traditional in length (48 hours!) and definitely team-based. I hope to learn a lot at this one since I’ve never actually developed a game before, but after my experience at UBC Local Hack Day, I also know the importance of taking regular breaks.

BCS term 1 review: CPSC 121, STAT 200, MATH 200, and COGS 200

I’ll admit that my plans to blog weekly fell through in a pretty big way this term. My last exam is tomorrow morning (possibly I should be studying), but for all the potential BCS applicants out there, I did want to at least write a review of the 4 courses I’ve taken this term and my general impression of the program so far. I’ve got a couple weeks off over Christmas, too, so I hope to share more about what I got up to over the last three months during that time.

One of the very first things that UBC tells you about the BCS program is that

“We expect that, for many participants, the first eight months of the BCS (ICS) program will be an intense and challenging experience, immersing students in new ways of thinking, creating, and communicating.”

Emphasis mine. And they aren’t kidding.

I worked harder in the last four months than I did during my undergraduate or MA degrees. It was exhausting. For the first 8 weeks, particularly, I kept my head down and — apart from being out with Millie for 1-2 hours per day — essentially did homework and readings from morning until about 8pm at night, every day. I wasn’t even in the most labour-intensive course (that award has to go to CPSC 110, from which I was fortunately exempted). But the transition from a humanities background to a fast-paced, problem-solving environment — with labs, assignments, readings, quizzes and problem sets due every week — was a tough transition for me.

There have been moments of despair! Several moments, actually. Nobody talked much about this during the limited orientation we got to the program, but I went through (and am still going through…) a shock very similar to what I witnessed in first-years at Queen’s: the realization that just because we were pretty smart and capable back home, we aren’t necessarily going to get those same results here. (MATH 200, I’m looking at you.) All of the friends I’ve made here in Vancouver felt the same, at some point or another, although we only started sharing these dark feelings later in the term as we got to know each other better.

So, if you’re currently in the BCS program and feeling like garbage, let me tell you: you’re not alone. You’ll get through it!

(This is partly a pep talk on my behalf, too, in advance of final grades coming out in a week or two.)

If you’re curious about what exactly I took this term, here we go:

CPSC 121: Formal Models of Computation

This turned out to be my favourite course this term! We did a pretty fun variety of things in this class: playing with circuit boards in the lab, discrete math, easy proofs, propositional logic, weak and strong induction, the very, very basics of a working computer … I found the learning curve tough at the beginning. We had clicker questions in lecture, and I often felt like I was the only person out of everyone I sat with who struggled to get the right answer. Labs also occasionally drove me nuts; our labs always came together by the end of the session, but sometimes it was a struggle to figure out the wiring on our circuit board.

However, by the end of the course, I really started enjoying it. Proofs are great. Propositional logic is great. Hell, I find proving the validity of propositional logic statements very soothing, now. It felt like solving puzzles in its purest form! We did zero coding during the course, but we did examine algorithms to a small extent, and apparently this gets expanded on in CPSC 221 (which I’m taking next term).

The workload felt high at the beginning while I was still getting my bearings, but by the end of the course, it felt manageable. There’s a weekly lab, a weekly online quiz, 5 assignments (each one took me between 4-8 hours to do), two midterms, and a final exam.

STAT 200 – Elementary Statistics for Applications

I found STAT 200 very sneaky. For the first 6 weeks, it felt like my bird course: different types of experiments, parameters versus statistics, the very basics of probability, normal and uniform distributions. So far, so good. Things quickly escalated after the halfway point. I couldn’t even tell you exactly what was hard about it — the math was easy — but I found it tricky to apply the correct formula to a complex word problem. I wish I spent much more time on this class; the early weeks lulled me into a false sense of security. In hindsight, I wish I attended the professor’s office hours to clarify the concepts early on.

STAT 200 has a reputation for being an easy course, and I don’t know if I agree yet or not. It felt easy at the beginning, but we’ll see how the final went. (To be fair, I also had the stomach flu that day.) We had 2 assignments, weekly labs, a couple webwork questions per week, a midterm, and a final.

MATH 200 – Multivariable Calculus (Calculus III)

This course was a roller coaster of emotions. I spent almost every day doing practice problems, studying for the quizzes, or trying to get through the webwork each week. I got 3/9 on the first quiz (and contemplated dropping out of UBC and moving back home). Then I did much better on the next 5 quizzes. I also did very well on the midterm (especially considering our section’s average was 47% before scaling).

And then… the final. Oh, the final. It was tragic. I went into the final with an A in the class, but I blew a couple easy questions (I’ve come to realize I choke under math pressure!), so I am not feeling too great about my grade, barring scaling. I did well in Calculus I and II, but spherical and cylindrical coordinates escape me.

Unless visualizing three-dimensional shapes comes easily to you (and it certainly did not to me), you’ll probably find this course a lot of work to wrap your head around. It’s not an impossible course — previous grade distributions show that quite a few students wind up with 80 and 90+ grades (and a lot of students get under 60) — but I think, for those of us who can’t picture the shapes easily, the course remains un-intuitive and difficult. Part of it was the fast pace, for me — given more time to think about the material each week, I think I would have found it a lot easier. But our professor moved like lightening!

In this course, we had weekly web work, six quizzes, one midterm, and one final.

COGS 200 – Introduction to Cognitive Systems

Finally, COGS 200. I don’t even really know where to begin with this one. This course was all about the theory and design of cognitive systems, or artificial intellingence, and what that might tell us about our own consciousness, to.

It’s interdisciplinary, so we had three professors — a philosopher, a linguist, and a computer scientist — take turns lecturing the material. Coming from English literature, the philosophy and linguistics components were interesting but also pretty straightforward. The computer science was new to me, but I didn’t feel like the professor had enough time to share much in-depth or thought-provoking material.

The real doozy is the group work. 45% of your final grade ultimately comes from a research proposal that you and your three assigned group members have to come up with, research, and write. Our group did very well, but I often found it stressful balancing our different goals for the course as well as different experience levels in academic research (first-years could take COGS 200, after all). If you wind up with a terrible group, well, this course will not be very fun for you.

We had three individual written assignments (mainly short-answer questions, not research papers), a group midterm (terrible), a 1-page research proposal introduction, class presentation and poster, the final 5-page proposal, and a final exam.

Hope you found these course reviews helpful. Back to studying for CPSC 121 — wish me luck!