Posts tagged ‘uoft’
The Shoulders of Tall, Smart People
Recently, I came to the realization that I’ve been writing computer programs in one form or another since I was about 6 or 7 years old.
Along the way, I’ve had plenty of people to influence the way I think about code, and how I write it. Sure, there have been plenty of textbooks along the way too, but I want to give some thanks to the people who have directly affected my abilities to do what I do.
And what better way of doing that then by listing them?
A Chronological List of People Who Have Influenced My Coding
- My parents, for bringing home our first family computer. It was an 8088XT IBM Clone – no hard drive, 640K of RAM, dual 5 1/4 floppies…it was awesome. This is the computer I started coding on – but I couldn’t have started without…
- My Uncle Mark and my Aunt Soo. Both have degrees in Computer Science from the University of Waterloo (that’s where they met). My recollection is pretty vague, but I’m pretty sure that a lot of the programming texts in my house (a big blue QuickBasic manual comes to mind) surely didn’t come from my parents – must have been those two. With the book in one hand, and the 8088 in the other, I cranked out stupid little programs, little text adventure games, quizzes, etc.
- The online QB community from the late 1990′s to the early 2000′s. When my family got online, I soon found myself hanging out at NeoZones, in the #quickbasic IRC channel on EFNet… actually, a lot of crazy stuff was being done with QuickBasic back then – I remember when DirectQB came out, and somebody was able to code a raytracer…in BASIC. It was awesome. I’d say these were my foundation years, when I learned all of my programming fundamentals.
- My friends Nick Braun, Joel Beck, and Doug McQuiggan – these three guys and I used to come up with crazy ideas for games, and I’d try to program them. I’d come home from school, and pound out code for a computer game for a few hours in the basement. More often then not, these projects would simply be abandoned, but still, a lot was learned here.
Joel, Doug, our friend Julian and myself were also members of a band in highschool. It was my job to build and maintain the band website, and this is when I learned to write HTML, basic Perl, and simple JavaScript. - After highschool, I went into Electrical and Computer Engineering at the University of Toronto. I didn’t do too well at the Electrical bits, but I could handle myself at the Computer bits. I learned OOP, Java, and basic design patterns from Prof. James McLean.
- I also learned a great deal from Prof. McLean’s course text – Introduction to Computer Science Using Java by Prof. John Carter. I know I said I wasn’t going to mention textbooks, but I also got taught Discrete Mathematics from Prof. Carter, so I thought I’d toss him in too.
- My second (and last) semester in ECE had me taking Programming Fundamentals with Prof. Tarak Abdelrahman. I learned basic C++ from Prof. Abdelrahman, and how to deal with large systems of code.
- After my move to the Arts & Science Faculty, I took my first Computer Science course with Dr. Jim Clarke. I learned about Unit Testing, and more design patterns. I also eventually learned some basic Python from him, but I think it was in another course.
- I took CSC258 with Prof. Eric Hehner, and learned about the structure of computer processors. Physically, this was a low-level as I’d ever gotten to computers. I was familiar with writing Assembly from my QB days, but Prof. Hehner’s Opcode exercises were really quite challenging – in a pleasant way. Also, check out his concept of Quote Notation…
- After that year, I spent the first of three summers working for the District School Board of Niagara. Ken Pidgen was my manager, Mila Shostak was my supervisor. Ken gave me incredible freedom to work, and soon I was developing web applications, as opposed to just fixing up department websites (as I originally thought I would be doing). Mila gave me guidance, and showed me how to use CSS to style a website. She also got me started using PHP and MySQL to create basic web applications.
- While working at the Board, I had the pleasure of sitting across from Jong Lee. Jong and I would bounce ideas off of one another when we’d get stuck on a programming problem. He was very experienced, and I learned lots of practical programming techniques from him.
- Michael Langlois and Ken Redekop acted as my clients at the Board, and always gave me interesting jobs and challenges to perform.Everyone at the Board was always very positive with me, and I’ll always be grateful that they took a newbie undergrad under their wing! I was given a ridiculous amount of freedom at the Board, and was allowed to experiment with various technologies to get the job done. Through my three summers there, I learned bits about Rails, CakePHP, MVC, network security, how to deploy an application remotely, how to run a local server, how to develop locally and post to remote, ORM, Flash, web security…so many things. The list is huge.
- Karen Reid and Greg Wilson have been the latest influences on me. The MarkUs Project was the first project I’ve ever worked on with a team. It was my first time seriously using version control, my first time using a project management portal (Dr. Project), my first time learning Ruby, and my first time working on an open source project. I’ve also learned plenty about time management, people, the business of software, and how to get things done. Again, I’ve been given lots of freedom to learn, experiment, and hone my craft.
Anyhow, these are the people who come to mind. I might add to this list if I remember anyone else.
But in the mean time, for the people listed above: thank you.
Courses for Graduate School
With summer coming to a close, my upcoming school year is starting to piece itself together. I’ve been assigned my research supervisor, and I just selected my courses:
Fall:
- CSC2125F: Topics in Software Engineering: Government 2.0
- CSC2526F: HCI: Topics in Ubiquitous Computing
Winter:
- CSC2431S: Topics in Computational Molecular Biology
- CSC2511S: Natural Language Computing
Psyched.
Summer Work: Week 1
For this summer, the Computer Science Department at UofT has hired me to continue my work on the OLM project. Click on that link, or check out my other post about OLM to see what it’s all about.
I just finished my first week of work, and it finished with a long weekend. Not bad.
And I’ve got a great team – I’m working with Severin Gehwolf and Nelle Varoquaux, both excellent thinkers, programmers, and collaborators. Severin is a UofT student like myself, and Nelle has flown in specially from France (!) to work with us. They’re great, and we’re going to get a lot done.
So what have we to show for our first week of work?
Well for starters, we’ve gutted the entire database schema of OLM. We started right from the bottom, and worked our way through every component of the database, trying to figure out what we could cut, trim, expand, and refactor.
And there was plenty to do. This version of OLM has been in the works for a while now, and there have been plenty of awesome people working on it – but there’s been a variety of Ruby/Rails/JavaScript experience, and the cracks show.
I, myself, came into this project with no Rails experience whatsoever, and while I think I now more or less get the drift, I’m still by no means an expert. Anyhow, I’m looking at my old code too, and kind of grimacing.
But the ideas are all there. It’s like a big hunk of marble that a whole lot of people gnawed and chiseled at for a little bit, trying to make a sculpture. After the big DB schema refactor, I think the whole team can sort of see the rough form of what this thing is trying to become, and now we just need to carve it out. Luckily, instead of a few hours per week like the last few semesters, we get a full summer to focus on it.
So, with the DB refactor done, the first thing has been to redesign the models/controllers to play nice with our new database tables. It was scary, because after the refactor, everything broke – but we’re working on it, and it’s slowly starting to come back.
We’ve also decided to switch the file storage back-end. Up until now, we were using Ruby to organize a file system back-end to do simple versioning of submitted files. One of our goals this summer, is to build an abstraction layer that will allow us to choose different options for this versioned storage back-end. In particular, we aim to support Subversion. That’s right – a web-based Subversion front-end that supports commits, and catches (but doesn’t resolve) conflicts. It’s a fun thought.
I have a feeling this is going to be a very interesting part of our project, and I’ll probably report on it more as it develops – but as it stands, it’s still being conceived on wipe-boards and scrap paper.
Anyhow, I’ll try to keep this blog up to date with what we’re doing. Or maybe I’ll keep this blog up to date. I’m conflicted.
Who knows, maybe this will be my last blog post of the summer. I won’t lie – after working 8 hours on a computer, the last thing I want to do is come home and write a blog post. If anything, my posts will probably wait until the weekends.
But we’ll see.
That’s All Folks! Now for Celebration Rituals…
Today, I wrote my first and last final exam for this semester.
So my undergraduate career appears to be finished. I’ve gotten confirmations of program completion from both the Computer Science and Drama departments. New College is holding out on me with their blessing, but I think it’ll arrive in the mail soon.
I won’t be going to convocation – I’ll be in Poland. I’m not that upset about it – Poland is totally worth it.
Besides, I have a Masters degree to complete now – my parents can go to THAT convocation.
Now For Celebration Rituals…
I’ve completed many a school year with my friends, and over time, rituals have formed to celebrate the end of the work.
In grade school and high school, it usually consisted of a symbolic “note toast” (the burning of our most hated assignments) along with a barbeque, and camp-out party.
Somewhere along the line, things changed for University. Now, when one of us completes their last final exam, we’re given license to crank Sisqo’s Thong Song (usually restricted in our household for just this event) and dance up and down the halls.
If you’d like to celebrate with me, feel free to crank this wherever you are (NSFW):
Alternatively, the Thong Song can be replaced with either:
MOP’s Ante Up (NSFW):
Or Michael Jackson’s Don’t Stop ‘Till You Get Enough:
Since I’m finishing my undergrad degree, I’m totally going to rock out to all three.
Feel free to join me, remotely.
In Defense of Grad School
I’ve received lots of praise and pats-on-the-back for my acceptance into Grad School here at UofT for Computer Science.
However, there’s another side of the coin. While I was still mulling the decision, I mentioned it to a few people here and there, and sometimes I got a strange look…like I’d agreed to have a lobotomy, or take experimental medication or something.
Believe it or not, I’m still getting it from time to time. It’s strange.
At one point, I posted my Grad School status on Twitter, and got back the response “Don’t! It’s a trap!” Trap? Really? Have aliens taken over the school? Am I unwittingly joining some bizarre cult? Am I going to get pushed down an empty elevator shaft on my first day? Awful hazing rituals? What’s going on?
What’s wrong with Grad School? I’ve asked a few people this question, and gotten the following (paraphrased) responses:
- You’ve been in school too long. Get out now and enter the work force! Don’t you want to have fun?
- Grad School is expensive. You’re going to go deeper into debt.
- If you choose a thesis/subject that you end up disliking, it will be an awful experience
- Work first. Then go to Grad School. Just trust me.
- You’re educated enough – you don’t need a Masters degree. You’ll learn everything you need in the field.
- The courses are super hard and boring.
Here are my responses, in defense of Grad School – they’re numbered to correspond.
- Who says Grad School isn’t fun? I really enjoy the field of Computer Science, and this is my opportunity to do some cutting edge research. The whole point of a thesis (I believe) is to focus on something in the field and make it my own – to master it. This means background research, thesis, experiments, conclusion, the whole bit. That’s the science part.
Also, there’s a self-serving economic payoff: Bachelors degrees are going down in value. Lots of people have a B.Sc. A Master’s degree stands out, and will bring higher pay and more interesting jobs.
My uncle once said that his days in Grad School were the most educational because of the people that surrounded him, and the conversations that he had. I think I’ll find that here, and it’s exciting. - Believe it or not, I’m actually getting paid to do this. Sure, I owe the University a chunk of money. Thankfully, the Department of Computer Science is paying for it, and I should have enough left over to live a modest lifestyle. Living like a student for one more year isn’t so bad – it could certainly be worse.
- Why would I choose a thesis or subject that I don’t like? From what I’m told, the first few weeks of Grad School are spent scouring around with a supervisor, trying to nail down a thesis subject. I plan to do one better, and try to nail a thesis subject down this summer. Once I’ve got it nailed down, I’ll do the background reading, and try to figure out some interesting experiments. It’s easier said than done, but I’m not going to be stupid enough to pick a thesis on something I really can’t stand. Am I going to do my thesis on complexity theory? No, of course not. Am I going to do it on how to teach software engineering students design patterns in a more visual, animated way? Who knows, maybe.
- This answer assumes that I haven’t worked before. I’ve worked. I’ve been out there. “You haven’t seen the real working world”…well, maybe I haven’t, but I’ve seen something that’s probably pretty close. Working three summers at the school board hasn’t been a cakewalk.
Some might argue that working for a while before going to Grad School will help me to gain the discipline necessary to work in an unsupervised environment. Well, I have to tell you, I was barely supervised at the school board. They gave me a task, and I did it to the best of my ability, with little-to-no oversight. I set my own schedules, I dealt with clients directly. I can work on my own. I can manage my time. I know how to work hard. Don’t give me that “real world” crap. - Like I said in #1, a B.Sc. isn’t what it used to be. Lots of people have them, and it’s probably becoming less useful as a marker for separating the wheat from the chaff. It’s only 17 months more work, but I think the payoff is going to be considerable.
- Maybe. Thankfully, I’m only taking two a maximum of three per semester. Workload does not frighten me anymore – I’ve been overloading myself for years, and I’m fine. I’m not at all saying that Graduate School courses are going to be a breeze – but, and I hope I don’t sound arrogant, I’m more-or-less used to doing the practically impossible.
Have I missed any reasons for not going to Grad School? Do my rebuttals miss something entirely? It’s a bit of a moot point now – I’ve already accepted the offer. But if there are any interesting reasons that I missed, I’d love to hear them.
Hello Graduate School
Well, it’s official. Today, I handed in my acceptance form for Graduate Studies here at the University of Toronto in the Computer Science Department!
Now I just need to keep my cGPA above 3.2…
Assuming that I get my B.Sc. without incident (because who knows, maybe the University will fight me for it…citing missing courses, insufficient credits, etc. I’ve checked all of this with New College and the Drama/CS departments, but I’ve been here too long not to be ready for bureaucratic tom-foolery…), I think I’ve got an interesting year or so ahead of me.
This summer is already looking quite busy, but here’s what I’m looking forward to next year:
Interesting Courses
I’ve been leafing through the Graduate course calendar, looking for courses that sound good and fulfill my breadth requirement. Here are the courses I’ve underlined as “interesting”. Note that I haven’t checked the timetable at all to see if these conflict with one another. They just sound interesting:
- 2125H – Software Development Tools and Practices:
This course is an introduction to software consulting practices. Students will be paired with clients whose problems require advanced knowledge of computer science to solve, and will then work under the direction of the course instructor to develop and deliver useful results. Topics will include requirements elicitation, scope negotiations, deployment concerns, and disaster recovery. - 2412H – Computer Algebra
Algebraic theory that underlies symbolic and algebraic manipulation by computer. Chinese Remainder and interpolation theory, fast algorithms for computations with integers, polynomials and power series. Newton and Hensel iteration, polynomial and integer gcd algorithms, factorization of polynomials, the fast Fourier transform, solving systems of polynomial equations, Gröbner bases. The Maple computer algebra system. - 2426H – Fundamentals of Cryptography
Rigorous definitions of security for pseudo-random generators, digital signature schemes, secure hash families, and public-key encryption.. Methods (including number-theoretic conjectures) for constructing these secure cryptographic primitives. Methods for using secure primitives to achieve secure session-key exchange and secure sessions. - 2511H – Natural Language Computing
Introduction to techniques involving natural language and speech in applications such as information retrieval, extraction, and filtering; intelligent Web searching; spelling and grammar checking; speech recognition and synthesis; and multi-lingual systems including machine translation. N-grams, POS-tagging, semantic distance metrics, indexing, on-line lexicons and thesauri, markup languages, collections of on-line documents, corpus analysis. Python software. - 2529H – Computer Animation
The primary focus of this course is on kinematic and dynamic techniques for character animation. Topics include physical modeling and simulation, motion planning, control and learning algorithms, locomotion, motion trajectory optimization, scripting languages, motion capture, and motion editing. Students will implement algorithms and interactive animation tools and then use these to produce motion for animations. - KMDI1001 – Fundamental Concepts in Knowledge Media Design
Knowledge media are systems incorporating computer and communications technology that enhance human thinking, creativity, communication, collaboration, and learning. Examples include the Web, email, instant messaging, knowledge management systems, digital libraries, collaborative virtual environments, video conferencing environments, and webcasting systems.
This course reviews the emerging field of knowledge media design, and the use of digital media for communications, collaboration, and learning.
I’m also looking into the possibility of hopping (back) over to the Computer Engineering Department to see if I can take ECE568H1 – Computer Security. My general dislike for engineering courses notwithstanding, this still sounds like an interesting possibility.
(Note to self: the word “notwithstanding” just felt right to put there, but is that correct usage? I have no idea…)
Thesis
Well, it’s no surprise – a Master’s student is expected to produce a paper in order to graduate. I have absolutely no idea what I’ll be doing my thesis on, but the number of possibilities is exciting.
It’d be nice to somehow merge Drama and Computer Science into a thesis – and I think it’d be an appropriate finale for my career here at UofT. It’s something to mull over while I have time, anyhow.
Launching OLM
OLM is going up in the fall. Whether or not I work on it this summer, as a TA, I’ll probably be using the software to mark and return student code. “Eating one’s own dog-food” might be appropriate here – though I prefer, “eating the sandwich I just helped to make”.
Drama
A lot of my friends from the Drama department are either graduating in June, or staying on for one more year. A bunch who are graduating are staying in the city, and the prospect of doing some work with them outside of school is exciting.
We’re all very spoiled here at the UCDP – modest budget, multiple rehearsal spaces, etc… working on our own stuff outside of school might be a very humbling experience. Humbling as in, rehearsing in alley ways or rooftops, and using an audience holding flashlights instead of our own lighting grid. Cool.
Operation: Party Mansion
This one is still in the works. Some buddies of mine from highschool (who are also my roommates) are looking to buy some property in, or around downtown Toronto.
This may sound ambitious, foolhardy, and naive, but we’re serious, and a lot of legwork has already been done in order to get this moving.
Ideal scenario? Next year, I’ll be living in a big house with my highschool buddies. And isn’t that living the dream?
Anyhow, as I was saying, my Grad school papers are in, so my brain is going to put that on the backburner for a while. Now I have to focus on my CSC301 midterm for this Wednesday, and an evidentiary analysis on CIA/JFK Assassination links for INI304.
Hilarious / Embarrassing Student Protest at NYU
Thanks to Ian Malone for showing me this.
So, there was a time when I was a naive, idealistic university student. I thought big, greedy, evil corporations were driving the state of the planet into a tailspin. I also thought that the University of Toronto was an unfeeling people destroyer.
Maybe some of this is true, but I think I’ve mellowed out.
Anyhow, here’s some video footage of an embarrassing student protest at NYU. I think these guys were looking for some kind of revolution, but it just makes me cringe and giggle at the hilarity of it. I’m all for the protest of worthy causes, but this video is a great guide on how not to cause an uprising.
To quote the article that I found this video on,
“You may not come in here. This is student’s free space,” says the cameraman, as a security guard pulls apart the flimsy barricade that the administration had chosen to leave in place for the past two days. As soon as the guard sets foot in the food court: “Excuse me, brutality here. You are on camera…Do not use brutality. You may not detain us, you are on camera!” This, as two security guard were moving away from him. “We deserve to be explained what is going on,” he says to several bored-looking cops. Here’s what’s going on dude: you’re not actually allowed to take over buildings. Believe it or not.
Enjoy!
Bonus: Here’s a link to the protest group’s website, where they seem to have claimed victory.
Attention GSS Students Auditioning for the UCDP!
Quick note here while I’m in between classes:
If you’re planning on auditioning for the University College Drama Program at UofT for next year, you must follow these instructions before March 13, 2009.
Tell everyone you know who is interested, because if you don’t get the forms in before that date, it gets a lot more complicated to be considered. A lot.
CodeSprint ’09: What Happened?
For those of you who don’t know, this past Thursday, Friday, and Saturday, I’ve had my face planted into a laptop, working 8 hour days on the OLM project.
And I wasn’t alone.
I was in a room with plenty of other Computer Science students – some even coming from as far as the West coast to join us. Good people, good times, interesting problems, and free food – all care of Greg Wilson, Karen Reid, and the other support within the department. It was really fun, and I learned a lot.
And we coded our asses off. Literally. It was awesome.
So what did I end up actually doing? Well, when TA’s are marking code, there are little menus that let them attach pre-built annotations to highlighted sections of code. I’ve also replaced the ugly Javascript Prompt dialog that asks for new annotations with a nice, modal dialog, using LivePipe UI. The team also got the rubric listed next to the code, and we now have the ability to apply grades on the rubric! Awesome! We’re almost there! There are plenty of tickets, plenty of ways this code and interface can get cleaned up, but we almost have the behaviour we want. And that’s something.
If I get a chance, there are two things I’d like to do:
- Replace the SyntaxHighlighter Javascript code with something a little less client-heavy. Maybe we can syntax highlight the code on the server side before we send it to the client for viewing? That doesn’t sound too bad… does anybody know of a Ruby gem that’ll do that?
- Refactor the annotations code. Right now, it’s a lot of Javascript. A lot. I’d like to shave it down, simplify it, streamline it. But that’s what refactoring is all about, right?
Oh, and, in other news, I’m considering graduate school, and doing Google Summer of Code. Just something I’m mulling over in my head…
Update: Coding for three days straight brought sooooo much tension back into my shoulders…this is where Movement class exercises become very handy…








