Iceland Day One

I’ve made it to Reykjavik.

Icelandair was a good experience. Comfortable seats with decent leg room and they give you pillows. I actually managed to sleep for around 3 hours which is the longest I have ever slept on a flight.

I decided to walk to my hostel from the bus terminal rather than pay extra to get a bus to drop me off. The temperature was fine – 8 c – and there was only really light drizzle. The wind though. It’s enough that you have to actually physically fight with it.

I ran into these swans floating around in the pond.

After dropping a bag off at my hostel I decided to go for walk to find some food. Even though it was 10am most of the grocery stores were still closed – probably because the sun was nowhere to be seen. The closest one open was right next to Hallgrimskirkja, the famous and very large church in Reykjavik. By this point the wind had only strengthened and the rain much bolder. I battled my way down the (beautiful) street. Just as my will was fading I noticed that the church’s doors were open so I stumbled inside.

Looking down one of the main streets with Hallgrimskirkja in the distance


The second I made it through the doors the organ music started filling the exquisitely minimalist structure. I’m not a religious person but it was a powerful experience. I just sat there for a little while. Unable or unwilling to go back to the bitter cold.

I could spend hours here listening to the organ

Look at those pipes

Iceland is expensive. You’ve probably heard this before. Flights to get there are probably the most reasonable part. It costs about 25.000 ISK (~$30 CAD) to take a bus to downtown from the airport. Restaurants seem to range from 20.000 ISK to 80.000 ISK for a meal. On the low side though we are mostly talking simple soups/sandwiches, not really huge filling meals. To get a filling meal at a sit-down restaurant I’m guessing $35 CAD is a minimum.

Grocery stores are a bit better. As long as you stay away from things that are difficult to import to Iceland (fruit etc.) it’s expensive but not completely ridiculous. I’m sure you could throw together a big sandwich for around 6.000 ISK.

After leaving the sanctuary of the church I raced to the hostel, had a small lunch (an 8.000 ISK pre-made sandwich from a grocery store if you are wondering), signed up for a “free” walking tour, and then promptly dozed off in the hostel lounge for an hour.

The walking tour was really interesting. Everything from Iceland’s interesting political situation (numerous peaceful protests that forced governments to resign) to its gender equality (“We are the best of a dismal field. We still have a lot of work to do”) and elf rocks (“Icelanders don’t broadly believe in them, but we tolerate people who do”). The best part – the wind only got worse!

This building is bland

After relaxing at the hostel, writing some of this blog, and finding out that my tour for tomorrow is cancelled I decided it was time to relax the proper Icelandic way: at a thermal pool. I’m completely sold on Icelandic pool culture. Alternating between laps in a “cool” pool, relaxing in an outdoor hot pool with snow falling on my head, and the steam room is glorious. Once I’m back in Toronto I want to get back into swimming although I know the experience won’t quite be the same.

I also ate a world-famous hot dog.

Bonus: Harpa!


It’s been a long time since I’ve posted anything on this blog.

I feel aimless. After three years of focus on my computer science degree and software development I now have the degree and a good software development job. The problem is that I now have a lot more time than I ever did while in school. I actually have evenings and weekends free to do whatever I want. It’s crazy.

While I definitely needed some time to de-compress after three crazy years, I am beginning to feel adrift. I need some goals.

On this blog in the past I’ve set goals in a very structured way. This is great for actually achieving them but I don’t feel like I am at that point yet. For now this is just a public brain dump of some of the things I want to accomplish with the hopes that putting it out there will push me to actually work towards them.

So in no particular order here are some things I want to accomplish in the next year and a half.

Health and Fitness

  • Find a regular GP
    •  It’s been probably 15 years since I last had a regular doctor to talk to. I mostly stayed away from the healthcare system (very bad idea) but that is increasingly difficult. Walk-in clinics have been uniformly terrible experiences so far.
  • Intense workouts 5 days a week (lifting, running, swimming etc.)
  • Physical activity every day of the week though
  • A comprehensive plan to deal with injuries that always come up when I try to get fit.
    • Use the fact that I am privileged enough to have extended health that can get physiotherapy etc.
  • Respond proactively to pain/soreness
  • Learn to run
    • Run a 10k
    • Run a half-marathon
    • Remember that you hate running but feel good that you persevered through that
    • Maybe run a marathon depending on how much you remember that you hate running


  • – Get outside for many hours every weekend
    • I still don’t know how bad Toronto winters get so this may be put on hold at some point
  • Do social things
    • Don’t have friends because you just moved to a new city? Too bad, go be social and make friends. Apparently that’s a thing people do
  • Go places
    • Virtually everywhere in southern Ontario, Quebec, and northeastern U.S. is new to you and none of it is that far away.
    • Backpack, camp, hostel or whatever to be able to travel frequently
  • Put experiences above things
  • Cook new and tasty things
  • Do things by hand that few people do anymore because it’s soo easy to buy the grocery store version of it
    • Not always, but some times


  • Read lots of books
    • Try to read at least 45 minutes every night before bed
    • Read WHATEVER
    • Read things you disagree with
    • Read things from people who have had a very different life to your own
  • Learn french
  • Continue using duolingo to build up vocabulary
  • Later
    • read in french
    • watch tvs/movies in french
    • find people to speak with in french
  • (re-)learn the guitar
    • Find some cheap used acoustic guitar

Get involved

  • Listen to people and help
    • The last thing the world needs is another cis-gendered straight white male defining the important problems and solutions
  • Get involved in politics
    • Yes it sucks and you hate it but its important
    •  Soo few people do anything other than vote (and many don’t even do that) so doing almost anything else can give you surprising influence
    • But remember that others have it far worse off and to use my effort to make it things better for other people

*** note ***
I’m extremely fortunate that I can even think about doing all of these things beyond simply putting a roof over my head and eating. NEVER forget that and remember to get involved to bring more people to my situation rather than to just make my situation better.

Final Thoughts on UBC’s BCS Program

If you stumbled onto this page looking for information about UBC’s BCS program I recommend starting at my first post here.

One and a half years have passed since I last wrote an update on the BCS program. Two and a half years since starting the program. With graduation imminent I figured it was time to give my final update on what I have been doing and my thoughts on the overall quality of the program.

Since my last update, I did 3 four-month internships. I mostly did backend web-development in NodeJS, Rails, and Python. A lot of the work I ended up doing straddled the line between development and dev-ops, with significant portions of each internship focusing on performance, scalability, and infrastructure improvements.

These internships offered me excellent opportunities to work on important projects, with both real business impacts and lots of interesting technical challenges. Many of my colleagues had other internships that were every bit as good. Internships are really one of the strongest parts of the program and I highly recommend focusing significant effort on preparing for them (personal projects and interview prep).

School alone would not have prepared me for this work. If you want to have the chance to really dive in to interesting projects on your internships you need to prepare yourself outside of school.

After a year of having proper weekends and remembering what it was like to get paid rather than give all my money to UBC, I was back at school for my final two terms. First term I loaded myself up with courses. Five 300 level CS courses and a technical writing class which is a BCS requirement (a completely stupid one…). All of this while preparing for technical interviews and beginning to apply for jobs. The whole term was exhausting and stressful. For most of the term I don’t think I had a single day off with most weekends spend working on assignments.

Second term started just as bad. While I only had 4 classes, I was determined to get a job lined up as fast as possible so I spent a lot of the first few weeks interviewing/prepping. It paid off because I now have an exciting job lined up for when I graduate. However, even with the pressure of finding a job gone, 4 upper year courses continued to have me working most weekends.

Final thoughts on the program:

If you want to finish the BCS program in the “standard” 5 terms the last few terms will be very intensive. If you can get most of your bridging modules done in the first 2 terms while you have fewer intense CS courses things won’t be quite as bad. If your last 2 terms are full schedules of mostly 300 and 400 level CS or other tough disciplines expect 7 day weeks to be the standard.

You can get an internship/full-time position at most of the “top” big employers (Google, Facebook, Microsoft etc.) with this degree. However, the courses you take won’t prepare you for the interviews. You need to put ~10 hours a week into preparing for programming interviews for at least a few months ahead of these interviews. If you are aiming to get a “top” internship for your second summer you should begin preparing a full year before. Hiring starts around 8 months before the internships begin.

Local startups (and to a lesser extent startups in other Canadian cities) hire lots of UBC students. They will generally care more about practical knowledge with the languages and frameworks they use. For web development JavaScript is a must know. Ruby on Rails and NodeJS are both very common for backend work. For mobile development iOS is a good choice, although there are Android positions if that is your preference. Make demoable apps that you can link to in your resume and show off to interviewers. Being able to link to a simple app that you published in the app store puts you ahead of 95% of applicants.

The most important aspect in course quality is the professor. Generally the professors in the CS department are good, but there are a few to avoid. With the fast BCS schedule you likely won’t be able to get to every 300/400 level class you want. You won’t have a choice of best professors for most upper year courses.

My bridging module was statistics and I am very happy with that choice. The classes are far from easy but in my experience the statistics professors are great and the courses are well structured.

Overall I am very happy with the BCS program. I feel like the classes have provided me with a solid basis in computer science fundamentals. The advanced classes are really interesting and get you digging deep into specific areas in computer science and building non-trivial programs.

From a career perspective, I’ve been even happier. Within a year of starting the program I had an internship that I enjoyed. Finding a new graduate position was reasonable (although still very stressful). After my first degree I searched for months with few interviews until finally I took a job that didn’t even require my degree. For this degree most of the stress came from keeping my standards very high, rather than from inability to find any related job.

Probably the best part of the program is the people you will meet. BCS students come from a fairly wide range of backgrounds and differ in many ways. However, BCS students are almost always mature, hard-working, and humble. These qualities really stand out against the average first degree CS student.

How did I do with my Summer Goals?

Here are the results for my Summer OKR’s.

Objective: Maintain strong academic achievement (0.875)

Key Results:

  • 9X% in CPSC 213 (1)

  • 9X% in CPSC 221 (1)

  • 9X% in CPSC 310 (0.5)

  • 8X% in CPSC 320 (1)

Part way through most of these courses I was sure I wasn’t going to make any of these goals. Luckily for me, summer classes seem to be marked a little more leniently and I ended up doing very well.

Objective: Personal enrichment and learning (0.58)

Key Results:

  • Make major improvements to my Android app: SS Log (0)

  • Create a MEAN (MongoDB, Express, AngularJS, node.js) stack web application (0.5)

  • Read 5 books (not for a class) (1)

  • Average one blog post a week (0.5)

  • Apply for an average of 5 jobs a week until I get one (1)

  • Do something “interesting” once a week (0.5)

My score for this category was a little low, and that’s even with my slightly charitable 0.5 score for creating a MEAN stack application. I did absolutely nothing for my Android app, largely because an injury pushed me towards other forms of exercise so I had no personal reasons to improve an app I wasn’t using. This may change in the future if I get back to lifting. I never made an entire MEAN stack application but I’ve done enough on various projects that I gave myself 0.5.

I finished reading two books, Gödel, Escher, Bach: An Eternal Golden Braid and The Pragmatic Programmerthe first of which I highly recommend. I then read almost all of Isaac Asimov’s Foundation series which may be my favourite science fiction series. I wrote a bit less than half as many blog posts as my goal, so I rounded that up to 0.5.

I applied to exactly 15 jobs over the 3 weeks before I got my job. My last key result was poorly designed (which I knew from the beginning) but I wanted something to push me towards enjoying summer a little more. I did okay on that front, with something I would categorize as “interesting” on about half of the weeks.

Objective: Improve health and fitness (0.56)

Key Results:

  • Average four 20+ minute fitness sessions a week (1)

  • Walk 8,000 steps at least 5 days per week (0.9)

  • Bike 30 minutes a week (0.1)

  • Average 7:45 of sleep a night (0.25)

While injuries from earlier in the year changed the type of exercise I did, I was quite good at exercising frequently. There was only on week that I didn’t walk 8,000 steps 5 days of the week. I barely used my bike though. Only 4 times the entire summer. Basically, the reason is that it never made sense to bike over other options. Almost everything I did was either on campus, which is too close to warrant biking in my opinion, or far from campus, where the distance to bike is too much in my opinion.

I wasn’t really sure what to give myself for the sleeping score. My basis fitness watch gives me automatic weekly sleep reports. The problem is that I just don’t think it works probably every night. Once a week or so it records phantom “wake-ups” where it insists that I was awake for an hour or two in the middle of the night when I have zero memory of that. The sleep reports put my average around 7 hours. They are probably a little on the low end but I am still going to give myself a fairly low score.

Overall (0.66)

I probably won’t be doing new OKRs for this term. I am doing a co-op work term where I will be setting some work specific OKRs, and for personal goals I need to rethink how I set the key results.

Thoughts on UBC’s BCS Program (after 3 terms)

I’ve done this after each term so if you stumbled on this one first I would recommend starting at the first post here.

I’ve not been looking forward to writing this. Two of my four summer classes were frustrating and stressful. In general my summer was busy, stressful, and exhausting. This will be a quick update.

Don’t take 4 intense classes during the summer while also TAing, especially if you are going to be applying for co-op jobs. Like me, you could have easily taken one of them in your next study term without really losing anything.

In the first summer term I took 310: “Introduction to Software Engineering” and 221 “Basic Algorithms and Data Structures”. 221 is a great course and our instructor was excellent. The material was presented really well and if you are into core CS topics it is a great introduction.

310 was not as good. The material presented in the lectures was artificial and generally not clear. I feel like a better use of time would be to read a software design practices book yourself than to sit through those lectures. The group project where you build a website in teams of 4 had the potential to be a really great learning experience but it fell a little flat. We were forced to use Google Web Toolkit which was absolutely not the right tool for what we were doing and beyond that is just not well documented and there are few resources available. It also works fairly differently than most web frameworks and hides important details so the skills aren’t even very transferable to more reasonable frameworks. If you can, take this course outside of summer when they usually let you use other web frameworks.

In the second summer term I took 213: “Introduction to Computer Systems” and 320: “Intermediate Algorithm Design and Analysis”. 213 was generally a very good course. About half of it focuses on how C and Java code gets compiled down to a machine language that your CPU can actually run. I really enjoyed learning about this and I felt it makes you a better programmer to have this understanding. The second part deals with different aspects of how a CPU and connected components work. Once again, this knowledge is really good to know, even if you mostly program in languages that extract away most of the machine level stuff from you.

320 was probably one of the worst course experience I had at UBC. I should say that thanks to some scaling it was actually my best mark of the summer, and that in the end I learnt a lot, but very little of what I learnt came from lectures or course materials provided by my instructor. Lecture were more confusing than helpful. Expectations for quizzes and assignments were rarely clear. Ultimately I got a lot out of it, only because I feared doing poorly so I spent a lot of time studying the concepts from various textbooks and watching lectures from similar courses at schools like Stanford and MIT online.

Applying for co-op jobs at the start of the summer took a lot of time. I applied for quite a few jobs before I heard anything back. Ultimately I ended up getting a really awesome job at a company full of smart motivated people. In general, people in the BCS program seemed to do pretty well in finding jobs although there was enormous variance. Having some sort of demoable project that you could show employers seemed to be the most important thing to getting a job. Good grades may have helped but were nowhere near enough.

Ultimately with an excellent internship starting and courses lined up that look quite interesting I am feeling good about my choice to do BCS. It’s a program that forces you to learn a lot yourself in order to do well in co-ops, but absolutely gives you the chance, within a year or two of starting, to be doing interesting work in an exciting tech company.

Surface Pro 3, Part 2

Part One can be found here. I recommend reading it first.

Part Two focuses on the aspects less specifically useful for students.


The 12-inch screen size is a well thought out compromise between the needs of a device in laptop mode and the needs of a device as a tablet. It is really close to the size of a notebook with standard letter size paper, and in terms of weight it probably isn’t much more. While using it as a laptop, the size is large enough that two windows can be comfortably placed side by side. Windows 8 also has a handy feature that allows up to 3 apps or the desktop to be placed side by side (in fact I wrote this part on about 1/3rd of the screen while using the rest to watch a video). In comparison to my much older 13 inch Macbook Air I would say the reduced screen size is negligible and the higher resolution actually makes the Surface have more useful space.

I would have thought that 12 inches is far too big for a tablet, but the Surface has completely changed my mind. I have never previously owned a tablet but I have used both the 10 inch iPad and 7 inch Nexus enough that I can say that the larger size works a lot better for most uses of a tablet. Web browsing gives you a full experience. Apps that do a good job scaling up like Facebook, OneNote, the Weather app and many others look great. But like I mentioned above, the ability to split screen apps, and generally have them intelligently adjust to different sizes adds a lot of value to a tablet.


I can’t say I love Windows 8. Some elements of it are growing on me though. You can tell that the designers certainly had something like the Surface in mind when designing the metro part and it makes a lot more sense with a touchscreen and in tablet form then with simply a keyboard and mouse. Elements like being able to really quickly swipe from the left side of the screen to either replace what I am currently doing with a previously opened app or to split screen my current app with a previously opened one make working with the Surface really smooth. If I am working on a project for class and messaging back and forth with my group, I can put Facebook messenger on the side, only taking up about an 1/8th of the screen and easily message while still working on the project.

I’m still a *NIX guy and I don’t see the Surface changing that. For basic media consumption, note-taking and other things, I am happy with Windows 8 so far. For any kind of development though, I am hating the experience. For some things, it probably wouldn’t be so bad, but I am used to unix command line tools and the general tools and experience of a unix command line. I’m still waiting for Ubuntu to work properly with the Surface and I will definitely put Linux on a microSD card when it does.

Metro style apps are generally decent, but the selection is still mediocre. A lot of the big apps have excellent metro versions such as Facebook, Google Search, Reddit, Netflix and others. These apps are good, with clean and usually minimal interfaces. The metro design language leaves something to be desired at times though. It can be difficult to find the way to do what you want in many apps. For instance in a Reddit app it can be difficult to figure out search and other functions. Unlike iOS and Android you can’t always be certain that if you need an app to do something, it will exist. Major categories like fitness, maps, PDF readers and others will all have at least a few selections, but the quality will not usually be on par with the choices on other platforms.

Normal Windows apps all work but many have no idea how to properly handle the high pixel density. Many will have tiny fonts and buttons that make them really hard to use. Other applications will scale to reasonable sizes but end up looking really fuzzy. Even more bizarre is some apps that will alternate between fuzzy and sharp text (mostly Google Chrome). If you are far-sighted this may be an issue as text is small. Some applications, like the Office suite handle the high density fine and look really good. As high resolution laptops continue to become more common this issue will likely be fixed in more applications but at the moment it can be jarring to constantly switch from crisp well designed applications to fuzzy ugly applications all the time.

Hardware Design:

The Surface feels solid and sturdy. It is weighty enough at 1.75 pounds that it feels solid but light enough that you can handle it as a tablet. Both the body and the screen seem scratch resistant and while you definitely don’t want to drop it, It feels like it can handle basic bumps and scratches.

Microsoft invented a word, “lapability”, to describe how well the design of a laptop allows for its use on one’s lap. I think the fact that no one else thought of a name for this tells you that most laptops all handle this pretty well. The Surface works well on a lap. The adjustable kickstand makes it work. In some ways it is better than a regular laptop. Because only a small portion of the Surface actually touches your legs, heat is never an issue. However, the kickstand digs into bare legs and I wouldn’t want to use it for hours at a time. It does work quite well to balance on knees which allows the Surface to be useable in all sorts of positions that laptops don’t work well in like in leaned back seating positions.

The kickstand is completely adjustable from a slight inclination all the way down to almost flat. This feature, more than anything, really helps make the Surface a completely versatile machine. I am constantly using different levels depending on whether I am typing, writing with the stylus, reading a textbook, or using a touch focused app. Unlike most tablets without a stand, it can easily be placed on a desk or a table and propped towards you. Even for things like cooking, it is easy to put the Surface on the corner of a counter to show you a recipe.


The Surface Pro 3 is snappy and responsive. My version, with the Intel Core i5 processor and 4gb of ram easily handles every general computing task I throw at it. Applications open almost instantly, swipe gestures that switch between apps happen as fast as I can swipe my finger. I haven’t done any photo or video editing, and I probably won’t, but it should handle that about as well as any slim laptop.

Gaming on the Surface works surprisingly well. I’ve only played Civilization 5 and SWTOR but they both run fine at the full resolution of the screen and at low graphics settings. This is impressive given that the resolution is so high. Some games, like CIV 5 are tablet optimized so they can be played with touch only, and for that game at least it works well. There have been reports of heavy throttling when the device heats up however that hasn’t been much of an issue for me. I generally have a fan pointed at my desk though so that may help. If gaming is hugely important to you, maybe look for a different device, but if you just want to be able to play some games occasionally, this will work for you.


While I can’t wholeheartedly recommend the Surface Pro 3 to most people, I can say that Microsoft is really close to making the best all-round device there is. If you need to get lots of work done in places where you can’t connect a mouse (and maybe a keyboard for lots of typing) then this probably isn’t for you. If you mostly want a Facebook/email/internet machine than an iPad or Android tablet might be a better choice. If you want something that is excellent for media consumption, great for note-taking and reading textbooks, and still decent for getting work done then the Surface will do a lot more for you than anything else out there.

Surface Pro 3 Review, Part 1

For the month that I have had the Surface Pro 3 I have been thinking a lot about how I would review it. Amongst friends and people in my program there is considerable interest in it, but also a lot of concern about how well it would work overall. Before purchasing the Surface I read countless reviews and thoughts from early owners but most reviews stuck to the facts, which aren’t that illuminating when determining how well a device will work, or they reviewed the device from the perspective of a professional tech writer/reviewer often without making this bias clear. As someone who isn’t a tech writer, I often felt that the reviews weren’t very informative.

The Surface Pro 3 with red typecover. The screen on the tablet is 12 inches which is roughly the size of a standard letter size paper.

The Surface Pro 3 with red typecover. The screen on the tablet is 12 inches which is roughly the size of a standard letter size paper.

My review will be biased towards what I need, and how I use this but I will do my best to make it clear what those biases are so that anyone reading this can get an idea of whether the Surface might be a good choice for them.

Ultimately I bought the Surface Pro 3 because I was having trouble taking useful notes, studying, and generally effectively learning in my courses. For context I am a Computer Science undergraduate student taking mostly math and CS courses. Most of the CS courses are “mathy” rather than programming heavy. In many of these courses the instructors will give large pdf lecture slides, and then supplement them with lots of discussion or writing extra things on the board. Printing off hundreds of pages of notes a week in order to have them to annotate on was looking costly and not particularly environmentally friendly. Simply taking notes in a notebook was difficult because there was no time to copy slides and then annotate them. Using my old laptop was useless because too often I needed to draw, annotate, or write lots of mathematical symbols.

Surface Pro 3

From the side you can see how thin it is. The stand is at its most upright position and bends until the tablet lies close to flat.

The main thing I wanted was a tablet that excelled at solving this issue, all while being a good computer when I needed it. There are definitely better pure laptops at the price of the Surface, but for my needs they are mostly rubbish at helping me study. There are also much cheaper tablets that excel at running basic apps and surfing the web but are not built around using a pen. I’m going to write two posts, this one about my thoughts on the Surface as a study machine, and a second one soon after about how it works as a laptop/tablet outside of class.

The Surface, combined with the excellent n-trig pen technology, and Microsoft’s note-taking software OneNote make for a powerful note-taking and studying package. Since receiving the Surface, all my notes have been written in OneNote, mostly by pasting slides in (which is quick and easy to do) and then annotating over them and writing extended notes to the side. To prepare for tests it is easy to make a study sheet by pasting in important bits from my notes, from electronic versions of textbooks, and any other internet resources and making connections and extensions to any of them using the pen. This is really powerful for studying and the combination of Surface and OneNote make it simple. The high resolution screen also makes it easy to put a textbook or some other resource on the side and still have enough room to write notes.

Taking notes “live” in a lecture also works well. The pen feels just as good as writing on paper, possibly even better in some ways. My writing is not very good on paper, and while the Surface doesn’t improve it, it doesn’t make it much worse. I probably write just a bit slower, but the increased versatility of being able to quickly erase things, select and move around parts of sentences and quickly select other colours makes the experience better. The almost completely adjustable stand also helps put the device in whatever angle is best for whatever you are doing, although I wish it was a bit firmer as sometimes as I write it sinks to a lower position. And with all this I get my entire notebook in one device that is smaller than and weighs less than a physical notebook. Unlike a real notebook where I need to worry about bringing it with me, and not losing it, my OneNote notes get synced to the cloud and can then be viewed on any other device including my phone.

The Surface is also an excellent e-reader for textbooks, although the default app isn’t very good. After downloading Drawboard PDF though, the Surface becomes a smooth textbook reader that is easy to write notes in, highlight or copy parts to OneNote. It works really well to copy questions from a textbook or a course website to OneNote and then you can easily add space to actually answer the questions. The 12-inch high resolution screen is about the perfect size to read a textbook, and the resolution makes reading it as good of an experience as an actual book. Trying to read a textbook on my old laptop, with a slightly larger but lower resolution screen just didn’t work well.

The other main use people have for a school laptop is writing assignments and papers. While I haven’t written a paper with it, and probably won’t any time soon because Computer Science is not a paper heavy degree, I will talk a bit about how well the keyboard works. Despite the fairly compressed size the keyboard is excellent. The keys have a satisfying give and produce a fairly nice, although somewhat loud click. Typing is accurate and fast. OneNote seems like it would work well for tracking sources, annotating researching, and generally organizing thoughts and creating a draft.

Purely as a study machine, the Surface is excellent. Considerably better than any laptop I have had, and better than any tablet I have used for taking notes or reading textbooks. If it was less than $500 it would easily be worth it for a student to save money on textbooks, notebooks, paper, and ink all while improving their studying. But the Surface Pro 3 in any reasonable combination of model and accessories is over $1000. Very few people can afford that just for school, so it also has to work well as a general purpose laptop and tablet. Part 2 of this review will talk about how well it does that.

Part Two can be found here.

Rethinking Density

Since reading Jane Jacob’s classic The Death and Life of the Great American City and the much more recent Happy City by Charles Montgomery, my perception of Vancouver, and the structure of cities in general, has changed a lot. I have a lot of thoughts, many probably quite simplistic, and many more probably fairly naive. However, the act of thinking about them enough to make a post will hopefully have some value. I welcome comments or suggestions on further reading

One thing I noticed about Vancouver is the bimodal distribution between low-density (which thanks to Vancouver’s small plot sizes and frequent renting is at least still far above suburban levels) and high-density. Below you can see a map of the density per residential zoned hectare. You can see that Vancouver fairly distinctly separates into the high density of downtown and surrounding areas, with high-rises on most blocks and the lower density of most of the rest of Vancouver characterized by standard single family lots.

Population Desnity

And this seems to strongly influence debates on Vancouver’s future. Most people arguing against density seem to be reacting mostly against the type of density they see downtown and in a few other hub areas like metrotown. After living in high-rise buildings for the last few years I understand why there is often pretty strong negative reaction against this form of living. Apartments are isolating. In these two years of living in an apartment the longest interaction I had with someone in my building was when I broke up a fight between my neighbour and his son-in-law.

The issue though is that there are other options that is rarely mentioned in Vancouver. When I was traveling through Europe, one of the most remarkable things I noticed was that most of the cities I visited were statistically very dense, with more people per square km than Vancouver, and yet they generally had very little like Vancouver’s extremely dense downtown area with multiple 10+ story buildings. Despite having little of this more extreme density, most areas were extremely walk-able and had excellent public transit.

I think the city should seriously consider zoning the blocks around most major streets (which for most of Vancouver is every 8 blocks) for medium-density with a strong mixed-used component. Obviously there are a lot of specifics to work out to ensure that lower-income Vancouverites will have their access to housing improved, and to keep the character of neighbourhoods in tact, but I believe these are solvable problems while a lot more people can live in the city.

A Good Start

Greater Vancouver’s Mayors have finally hashed out their differences and come together to create a reasonable plan for the region’s transportation priorities over the next 10 years and beyond. On top of being reasonable it is considerably more ambitious than I was expecting. I’m going to focus on the changes to Vancouver and Surrey/Langley as those are the locations I know about, and care about the most.

Investments In the Next 10 Years

Red is new rapid transit, green is new or expanded B-Line bus, faint pink shows normal bus lines with increased service

As you can see in the image above, they are proposing a 5km long underground extension of the millennium line extended from the current VCC-Clark station along broadway to Arbutus st. Considering this is currently the busiest bus-route in North America this can’t come soon enough. I’m pretty disappointed they aren’t extending it all the way to UBC but given the political difficulty of spending the extra billion or so to get it the rest of the way, I understand why they are making the compromise. In terms of time, I doubt things will be dramatically improved for UBC commuters, but there will at least probably be fewer full buses passing people.

The rest of the improvements in Vancouver are mostly about improving the connection between Vancouver and the rest of the region. SeaBus capacity is rising, Westcoast Express is getting extra cars and one extra locomotive, the various Skytrain lines are all getting major capacity increases to allow for thousands of extra passengers every day. Altogether the improvements should significantly improve transit access in and out of Vancouver.

Another proposal is 300 km of new separated bike lanes throughout the region as well as thousands of km other forms of bike lanes. I don’t have much experience cycling around Vancouver so it is difficult for me to comment on how much of an improvement this will be, but it sounds to me like a decent start over 10 years.

Surrey will probably see the most extensive improvements with this plan, and deservedly so. As the second largest, and fastest growing municipality in the lower mainland, they need a good transportation system to avoid crippling gridlock. According to the report, 200,000 new people will live within walking distance of rapid transit in Surrey and Langley, which has the potential to take thousands of cars off the road.

Details on the new light rail lines are sparse. They appear similar in length to the expo line which is 30km long. However, I wasn’t able to find any concrete information on implementation. If people are going to switch to light rail the system needs complete right of way and high average speeds. It will also need to stop in dense areas or at major transit exchanges. In many areas along the route to Langley City this is going to be a difficult proposition. The good news is that the Langley route is at least 12 years out so there is plenty of time for both Surrey and Langley to shape development along and around the route.

The plan also includes a replacement to the aging and quite frankly dangerous Pattullo bridge. Thankfully in the end New Westminster won the argument and the bridge will still be four lanes and tolled, providing much needed revenue to fund its replacement, as well as incentivizing people to use the expanding public transit network.

The plan also includes shifting some carbon tax revenue to transit improvements, and slowly introducing road pricing around metro Vancouver. These changes deserve a post of their own which I may try to do in the future but for now I just want to mention that according to the mayor’s report, all the proposed investments alone will not get the region to the goal of 4,250 annual km’s driven per capita. Investments and other measures like road pricing will bring the region closer to the goal.

I’m glad the region’s mayor’s finally completed a comprehensive plan, but the implementation will require the cooperation of both the provincial and federal governments. What could possibly go wrong there? That may be the subject of my next post…

Updated Thoughts on UBC’s Bachelor of Computer Science Program (after two terms)

If you are thinking about applying to the program and looking for my full thoughts, I would recommend reading my first part here as this will build on what I wrote there.

As I said in part one, my main goal with the B.C.S. program was to learn “algorithms, data structures, design patterns, and to improve my mathematics and statistics”.  My goal with the program was not to learn specific languages, frameworks, or technologies. On that front, I have mostly sought to teach myself on the side, as CS courses here, quite rightly, do not focus on teaching the latest frameworks or technologies.

Now that I am two terms ( 8 months ) in and I am applying for co-op jobs I have to say that I am a little disappointed in the progress I have made on these topics through the courses I have taken. Algorithms and data structures have only been touched on in a limited way in the basic CS courses. 110 talks a little about trees, recursion, and search but fails ( due to the focus of the course being on software construction ) to discuss these topics above a superficial level. 210 discusses a few of the basic data structures, but does not go into the type of detail that allows someone to reason through their uses in the types of problems asked in technical interviews.

It is a little better for design patterns, with 210 covering some of the core ones, although I wish the course had a project to implement one or two of them. On the math and stats side I probably have learnt the most of any of these topics. This term I took Math 221, which was a good course that provides a good introduction to linear algebra and Stat 302, which is a great introduction to probability.

Overall my opinion on the program hasn’t changed much. I still highly recommend taking CPSC 110 on Coursera before starting the program, and then challenging the final in the first week of class. The fact of that matter is that the pre-requisite structure for computer science courses just doesn’t work well for B.C.S. On the standard timetable of the program you will start applying for co-op jobs with only some java knowledge, maybe python, some software development practices, and only a few very basic projects without putting significant time in on top of your classes. Co-op still has a very high placement rate, so you will likely get a job, but if you are like me and want to aim a little higher, having your school hold you back over arbitrary pre-requisites is a little annoying.

So far instructors in my computer science courses have been well above what I expected based on my experience from my first degree, and I hear largely good things about professors that teach the upper year courses.

While there has been a lot of good and bad I am still very hopeful and even somewhat excited about the rest of the program. The classes I am doing this summer are finally starting to bite into the core Computer Science topics that I have been wanting to get to from day one. In the first summer term I will do another software engineering course that will hopefully culminate in an interesting project, and my first course on algorithms and data structures. In the second term I will do a computer hardware course and hopefully the next level of algorithms and data structures (if they can find someone to teach the course).

You can now read part three here.