My Blog Returns

June 22, 2009Andrew 1 Comment »

The blog has been down for over a month now, thanks to Karan deleting my wordpress installation and me being too busy (read: Lazy) to fix it.   However, it’s back!  Expect updates on Android, Blackberry, and Symbian development.


Final Exam Update

April 14, 2009Andrew 2 Comments »

Algebra 135 exam was yesterday.  It went well, although I messed up what should have been a straight forward proof.  Macro Economics exam is in a few hours, and I’m still procrasting from studying by writing this post.  Computer Science exam is tomorrow morning.  I’m not terribly worried about that one, although I haven’t programmed in scheme in a few months.  I hope the test is mostly C++.  On Thursday I’ve got calculus, which will be difficult, but I’ll be ready.  Then next week it’s Digital Circuits and Management Science.  Those should be interesting because I stopped going to classes sometime after the midterms.  I’ve got a lot of catching up to do :-( .

If you’re bored, spend some time at Star Trek Tweets, my newest creation!  It’s an experiment in using the Twitter API and making cross-domain AJAX calls.  No server-side code required!

Also, putting Google AdSense on Find the Hotties as made me almost $1 so far.  Awesome! (well, 50 cents because I suppose I should give half to Noah).


New Apps

April 6, 2009Andrew No Comments »

I’ve finally had some time to write some new and exciting code.  Firstly, I’ve created a AJAX chat room at http://www.findthehotties.com/chat/.  The eventual goal is to integrate the chat room with Find the Hotties.  Please don’t kill it right now.  It’s open to XSS attacks and spam bots :( .  Speaking of that, what’s the best way to stop bots from posting, besides requiring logging in?

Secondly, I whipped up a quiz application at http://www.findthehotties.com/quiz/ for Thor’s UI class.  Hopefully that will prove useful to somebody.  The XML document I got the questions from was rather difficult to parse.  It contained some odd characters that MySQL didn’t like.  To resolve the issue we were forced to convert the file to ANSI, then back to UTF-8.  I hate encodings.  Even Joel’s famous article on encodings didn’t prepare me for this.  On the plus side, I got to learn to use one of Python’s XML parsers.


Larry Smith Concluded

April 1, 2009Andrew No Comments »

Last night I attended my final lecture with Larry Smith in Econ 102.  Larry is a professor perhaps most famous for his advising of RIM and long tenture as an introductory economics professor at Waterloo.  Our final lecture was an historical event because one of the students in attendance was Larry’s 27,000th.  As a result, Larry called the lucky student down to the front and gave him a t-shirt which said “Larry’s 27000th student”.

Anyway, Larry Smith is awesome in almost every respect.  He has a commanding presence and you will rarely be bored in his class, all though he does tend to repeat certain things too many times for my liking, but that’s part of his teaching style.  I absolutely recommend Econ 102 with Larry Smith to all UW students.  As a result of taking his course, I finally understand the international banking system, the central banks, and currency exchange.  I also know why the economic stimulus in the US and abroad is necessary, and why Ron Paul is not only wrong, he’s really a major dumbass.

Larry also gave us advice about how to be successful in our careers.   He suggested with today’s tough international competition and software automation, we must focus on careers that required creativity or innovation.  It is rather obvious, but that doesn’t make it less true.  As software Engineers, we need to strive to be more than just a coders and hackers who understand the Waterfall Model.  We need cross domain knowledge and communication skills to market ourselves as valuable.  I think my friend Andrew Russell might be on to something.  He’s going to attempt to get a dual degree in SE and bioinformatics.


Michael Malcolm

March 24, 2009Andrew 8 Comments »

Today I attended a presentation by Michael Malcolm, serial entrepreneur and former Waterloo professor.  I know him best for founding Kaleidescape; a company I recently interviewed with. Michael is a fascinating man with lots of good advice. He recommended the following entrepreneurial books:

It’s a good reading list if your goal is to build a great company that stands the test of time. Michael pointed out that his goal was always to build great companies, and not to be quickly acquired. He must be on to something, because his other two companies, NetApp and Blue Coat Systems, Inc both had successful IPOs in the 90′.


I’m still here

March 17, 2009Andrew 4 Comments »

Sorry for the lack of updates lately.  I’m beginning to look at Ruby + Rails.  At some point I’ll write a comparison between Python/Django and RoR.

My current laptop’s battery fails within a minute of removing the plug, and the 120 GB hard drive is really constricting.  I figure I’ll stick with this computer for a while more because I want to wait until Core  i7 chips are in laptops.  Also, I’m considering moving to a Macbook because that way I could do iPhone development.  However, there are a few things I’m worried about:

  • OS X cannot write to a NTFS formatted drive, which would make it impossible for me to use my external hard drive with my macbook without some third-party software.
  • It is probably easier to pirate software for windows such as Photoshop and Flash.
  • The screen resolution on the current Macbooks is too low.  I’ve been spoiled by my 1680 x 1050 15.4″ screen.  The Macbook pro 15.4″ is only 1440 x 900.  The 17″ is a nice 1920 x 1200, but the Macbook Pro is so expensive, it’s simply out of the equation.
  • The Macbook’s video card is a crappy Geforce 9400m.  The Pros at least have a GeForce 9600m m, but again, waaaay to expensive.
  • I need 4 GB of RAM, and Apple charges too much to upgrade from the default 2 GB.  I’d need to buy a couple SO-DIMMs from NewEgg.  Not a huge deal, actually.
  • Finally Mac’s have a price premium that would be really hard for me to swallow.

Wow, I’m really stingy!  The current plan is to wait until Steve unveils the new macbooks (whenever that is), and make my decision then.


Xtreeeme Labs!

March 2, 2009Andrew 1 Comment »

This summer I’ll be Co-Op’ing with Extreme labs in downtown Toronto.  Before I tell you more about them, I’d like to thank all the other companies I recieved offers from.  I’d have liked to work for each and every one, but Extreme Labs seems like the most exciting experience because it’s a small start up specializing in rapid, agile web and mobile development.  Plus, they have a Microsoft Surface :P .

I’ll be doing Ruby on Rails, Blackberry, and Iphone development.  I haven’t done any of those, so I should learn a lot.  Some of you know that I’m mainly a Python and Django guy, so trying out Rails will be like going to the other side of the tracks, so to speak.  But, don’t think I have some sort of Python bias!  I hope Rails is better than Django, simply because I’m always looking for the most productive, powerful development stack.

I haven’t lived in the city in 12 years, so I’m really looking forward to living and working in Toronto.


Inkblotter Technology

February 20, 2009Andrew No Comments »

If you’re interested in the technology behind inkblotter, checkout this post I made on the inkblotter development blog!


New Technologies

February 15, 2009Andrew 3 Comments »

I’ve always maintained that programming is an exercise in managing complexity.  Once a project grows too large, it becomes impossible to maintain an image of the entire source in one’s head.  Not only that, but today there are huge frameworks with thousands of objects and methods, like .NET or Java.  Therefore, the biggest obstacle any programmer faces is trying to comprehend the complexity of a project when extending or modifying the code base.  This is why it takes Microsoft’s large team of smart software engineers years to make what many would consider “superficial” changes to the windows code base.

Unfortunately, the challenge of managing complexity isn’t something that only effects large projects.  I’m feeling the overload of trying to comprehend all the pieces that fit into inkblotter.  On the surface, inkblotter is a simple web 2.0 app – we have user generated content that we must present – but, the way we implement the system has many pieces.  Most of the pieces are 3rd party libraries, many of them not yet at version 1.0.  The documentation is often light to non-existent.

For example, we have experimented with CouchDB, but ultimately decided against its use because it was not yet stable or tested enough.  To connect CouchDB with python, we had to use a thin wrapper written by some guy on Google Code. It took valuable time to figure these systems out.  So when we decided against using Couch, I had learned some APIs for nothing.  The same thing happened when we experimented with Pinax.

Now we are using Git, Gitosis, Gitweb, GitPython, and Git-Django, Beautiful Soup, HTML Purifier, and a host of other markup  language libraries.  I have to learn how to use all these tools.  Don’t get me wrong – I can’t complain about learning new technologies, but these programs and libraries add to the complexity of inkblotter immensely.  We need to get each of them working together in a seamless, efficient, and bug free way.

So, would it be better to roll our own tools?  Make our own version control system? Our own HTML validator? Our own markdown to HTML converter?  Absolutely not.  We don’t have the time, and I suspect the authors of these tools have spent more time and energy in creating these great tools than we even spend on inkblotter; given our school load.

We have no reasonable choice, but to use these tools to make inkblotter as good as it can be.  It just means I’ll spend a lot more time thinking about the code I’m going to write than actually writing it.


Linked Lists

February 11, 2009Andrew No Comments »

I had five interviews on Tuesday and one today (Wednesday).  I’ll refrain from talking about them at this point because I’ve decided that discussing the interviews before I’ve been ranked or I’ve made my rankings is probably unwise.  Despite this, I want to discuss a programming question I was asked:

Given a singly linked list, in sorted order, how do you remove duplicates?

During the interview I brain-farted because I forgot that the list was sorted, so I suggested a horrible solution involving keeping another linked list of all unique elements that had appeared and then checking each new element in the original list to see if it appeared in the second.  Clearly, this algorithm has a O(n^2) run time, and O(n) memory usage (I think?).  If I had remembered the list was sorted, I would have suggested simply keeping a copy of the previous element as you advance in the list, and removing the current element if it is the same as the previous.

Maybe it’s my inexperience with these kind of interview questions, but it seems like most of them have a little “trick” to them, and you either get it or you don’t.  If you do get it, great, but if not, well you might not get the job.  Once the interviewer points out the correct method, it often seems obvious.  I understand this is testing whether the candidate understands programming intuitively, but that doesn’t mean the candidate is actually a good software engineer.  I’d explain what I mean here, but I’m hungry… and I might be wrong.

In conclusion, I’m bitter that I fumbled at an interview :-)

EDIT: Karan suggested this solution that removes the next element if it’s the same as the current one.