A penny for thoughts?

About the correct valuation

Archive for January, 2007

Don’t forget to dress

leave a comment

National Gorilla Suit Day Banner

Written by Smokinn

January 31st, 2007 at 3:15 am

Posted in Uncategorized

CUSEC 2007 Day 3: Geoff Guenther edition

leave a comment

Geoff is an employee of Direct Energy. His talk was about a database-centered system they developed that has given them a major edge over their competitors even though they work on a much smaller budget. He says they have an advantage because all their systems are developed in-house and linked together whereas their competitors’ systems basically operate independently of each other since most buy off-the-shelf software for their various needs. When they need to make decisions on what to buy, when to buy/sell, etc. their information is all concentrated together and their traders don’t need to go fishing around multiple spots to try and deduce a logical whole from the various parts.

He also talked about the architectural decisions they had to make when designing their system. Whereas most applications are task-oriented, this system was going to be very data-oriented and therefore was going to be organized differently. They designed it in basically 3 big modules. The first was two-fold and represented the data itself. They have a large database for weather information and a large database with customer information. The weather database is constantly updated with the current weather and the best predictions their meteorologists have and therefore indexing is a major issue. Customer information on the other hand isn’t updated as frequently. The next module down the road deals with syncing the data and the last module has some complex algorithms that deal with the synchronized data and report it back to the traders.

After his talk I was really interested in what the company does and they had a booth so I went to go talk to them. Sadly though, one of the CUSEC organizers made a big announcement that Direct Energy was giving out 128mb USB keys so everyone should head over there right away to grab some. So it was pretty packed for a short while until everyone got their keys. One of the representatives stuck one in my hand even though I didn’t really want one (I have bigger one on my key chain) so I ended up getting one as well. Their HR rep told me a couple of stories of some stuff they did and the stories were so cool that I added them to my list of companies to apply to.

The first story she related was of a university in Ontario (can’t remember which) that replaced their entire heating and ventilation system. To convince a school to do that is no small feat. How Direct Energy did it is they approached the school and said our changes will save you 30 million dollars a year. If they don’t you don’t have to pay us. So the school figured it was a good deal and went with them. They installed a system that can do things as sophisticated as monitor the CO2 levels in each classroom and pump in fresh air when they reach a certain threshold. Sure beats the “we turn on the furnace on november 11th and turn it off march 23rd because that’s our policy and weather be damned” method of environment control.

The second story is even better. They sold a system to Famous Players that ties into their ticket sales. This way, the temperature of the room will be adjusted according to how many tickets were sold for (and therefore how many people will be in) the room. Isn’t that cool?

So I applied and the HR lady (I wish I could remember her name, I’m so bad with names) told me they were going to be interviewing today and to sign up if I wanted an interview. They interviewed a TON of people with really simple questions so I’m not getting my hopes up as to actually getting a call back from them in march. How they can possibly expect to differentiate candidates based on the questions they were asking is beyond me. And they’re only hiring two people. Sigh. She told me that if I get called in march there’s only one more interview. After that interview I’ll either have a job offer or not. We’ll see what happens in march.

Written by Smokinn

January 29th, 2007 at 9:41 pm

Posted in Uncategorized

SciTE proves I’m an idiot (like I needed the reminder)


So, I’m using ruby’s sleep for the first time in my life. Just as a test I want to spawn three threads, each of them printing some text, sleeping and then printing some more text.

I wrote something like this:

count = 0
threads = Array.new
3.times do
	count += 1
	threads < < Thread.new do
		thread_count = count
		puts "before sleep: #{thread_count}"
		puts "after sleep: #{thread_count}"

threads.each do |thread|

Don't look over that too closely to find the error. It's fine. (And pretty too! I just added code highlighting with this plugin.) The problem was that I was using SciTE to run this.

Thing is, I'm a lazy person. That's why when I'm just writing a simple one file script I'm not going to be using radrails or any other huge editor. I'm going to use SciTE because it boots up super fast and I can lazily press F5 to run my script. My problem however is that SciTE does not give real time results. I was fulling expecting to see, on the right in the results panel, the lines appearing one by one. But no. They always appeared in one big plop once the script ended. I couldn't understand. Does ruby's sleep act in some weird way that would cause this? Nope.

This code runs just as expected from a console window. It prints a line, pauses a little, prints another, etc. SciTE however, only gives you the console results when the script is done running. Meanwhile I spent at least 30 mins if not an hour trying to figure out how sleep worked in ruby when I had it right all along.

Written by Smokinn

January 28th, 2007 at 8:01 pm

Posted in Uncategorized

CUSEC 2007: The end of Day 2


I was talking to Nick Landry when someone came up to me and asked if I wanted to be on the panel. The panel? I thought that was only for the keynotes. I’d forgotten that they put students up there with the speakers. So I got railroaded into being up there. There were some very interesting answers and I have some minor changes I would’ve made to my answers. For example, which is my favourite book? I said code complete. It’s a very good book so it’s not like that’s a bad answer but I probably should’ve mentioned my current bible that is saving my ass in 490: Agile Web Development in Rails. I also could’ve mentioned a book that, in my opinion, every student should read when they’re going to graduate soon: Coder to Developer. Or perhaps Hackers and Painters. Too many good books.

I learned some interesting things about friends that were on the panel (Skrud the eng lit major?) and there was some nice discussion. Even though there wasn’t much participation (most of the delegates had left to who knows where), I hope the cusec team keeps the panel in future CUSECs.

That night there was a party in John Kopanas’ penthouse suite. There was DDR, Wii and poker. I again managed to get out of a DDR party without playing and have kept my 23 year record of no DDR. Hopefully that streak will continue. I didn’t play Wii either because there were a ton of people that wanted to play and I didn’t care enough to wait forever for a turn. Instead I played poker. Now, anyone who knows me knows that I love texas hold’em. I’m pretty good at it and I often win. We played poker at CUSEC 2005 and it was a lot of fun. This year however I played the absolutely most boring poker game of my entire life. I’m not going to get into it, suffice to say that the only person at that table I would ever play with again is Emery from McMaster U. I eventually just went back to the hotel room and wrote up the first really long blog post before going to sleep. Sleep I needed since I probably wouldn’t last the third day if I got as little sleep as the first night.

Day two is finally over. Could you imagine if I hadn’t split that up? ;)

Written by Smokinn

January 27th, 2007 at 2:23 am

Posted in Uncategorized


leave a comment

I’ve always had a terrible time believing in romance. When I was 9 or 10 years old I remember giving my parents a little survey to figure out what they had in common–I truly didn’t understand what kept them together. I came to the conclusion that they stayed together because they both liked to play cards.

Mrs. Kennedy

Written by Smokinn

January 26th, 2007 at 2:27 am

Posted in Uncategorized

CUSEC 2007 Day 2: Ralph Johnson edition

one comment

It’s debatable whether Ralph Johnson or Dave Thomas was the most “famous” person there. Whereas Dave is prominent as the pragmatic programmer, everyone has heard of the Gang of Four (Or should have. If you haven’t and are in software engineering please start studying design patterns asap!) but not everyone knows all four names. Ralph Johnson is one of the four, obviously, and gave a presentation mainly focused on software maintenance.

The first problem with software maintenance is the name. Specifically the second half of the name. When we think of maintenance we think of, as he had on his slide, janitors or anonymous repair men. Generally, when you think of maintenance, you think of something not as well respected as “design”, “development” or anything related to creation. He may very well be right that the single most limiting thing we do that hinders software quality is de-value software maintenance in favour of software development.

What is the definition of maintenance anyway? Like he said, if it’s anything that’s done once you have a working product, then in XP circles, you enter maintenance after a couple of weeks. In iterative development you enter maintenance a little later but not much. In any software project that actually works, the vast majority of the time is spent in maintenance according to this definition. Instead of calling this process maintenance, it would perhaps be better to call it evolution. As software progresses, adds features, removes functionality, changes functionality over time, you get a mature product that works well. He gave the example of Microsoft Word. Word has been around since before Windows 95. Word keeps evolving but each version of Word is not a throw-away product that is re-written for the next release.

If there is only one thing to remember from his talk, it’s that software maintenance needs to be valued. It’s ridiculous that we throw a project to the maintenance team with usually little to no communication and, depending on the companies/teams, often very little to no documentation. The best people to work on maintenance are the ones who developed the program. The ones who know the code and the reasoning behind it. If we had a culture that valued our products more, if we wanted to see the product itself succeed and get better and better instead of moving on to a cool new project, software quality would vastly increase. Management is just as guilty of this as us. The “star coders” are all on the “development team” and, as Dr. Johnson put it, usually dead-weight employees and less experienced employees such as students end up with the less prestigious task of maintenance.

I actually have a little experience with this since it happened to me last summer. I worked on a project that was developed by several students over the course of several internships. Each student worked on it for only 4 months and then left. Another student came in and had to pick up where the other left off. Normally there would be a transition period where the parting student would train and give some bearings to the incoming student but I didn’t get that. When I showed up the other student had already left. And a new project manager and just been assigned. In all, only one employee had ever worked on anything related to the project and she worked on a part of the project completely unrelated to mine (I did the coding, she worked on speech science and accuracy tuning) and therefore wouldn’t be able to help me with the code base. So I was basically thrown to the wolves which made my first month very unproductive. I eventually got up to speed but in the meantime project development time was wasted.

So keeping the same team through the entire project life cycle is one of the most effective ways, in my opinion, of ensuring higher quality software than before. It will be a difficult change since it is the mindset of people that has to change but if we try moving towards it now, individually, and provide actual results, more will catch on and hopefully, eventually, it will permeate our culture.

Written by Smokinn

January 24th, 2007 at 6:13 pm

Posted in Uncategorized

CUSEC 2007 Day 2: Nick Landry edition


Nick is a conference presenter, organizer, magazine article writer, demo maker and all around interesting guy. He was the only person at the conference completely sold on Microsoft products. Lately he’s been working a lot with Windows Mobile devices and been doing prototype development for the platform. He works for Infusion Development (see first CUSEC post about Greg Brill, the CEO) which is a Microsoft Certified Partner. Lots of companies are MCP of course but Infusion gets to do some really cool stuff. They are often hired to make working, full-scale products as demos of Microsoft’s very latest technology so that when it’s released, Microsoft can point and say look at how great you can be if you use our stuff because you’ll be able to be as good as them.

If you’re interested in Windows Mobile, he has a huge set of incredibly informative and detailed slides he said he’d put up on his blog. They’re not there as of the writing of this post but I assume they will be up once he gets back to New York.

Not only was his presentation really interesting, he was a lot of fun to have around. I find he also has one of the best quotes from CUSEC. As we were walking towards John Kopanas’ penthouse, he told Skrud and I (as Skrud has already quoted): “This conference renewed my faith in the future generation of software engineers.” That was incredibly flattering. I don’t know why he lost faith in the first place, but Kathy Sierra had similar comments about CUSEC last year. I think it was Pete McBreen or possibly Dave Thomas (if anyone knows, please correct me) that also said: “Thank God there are 300 students that care enough about the disciple to come to a conference like this one”. I say thank God there are a dozen (well, a few more) students that care enough to organize it. Makes you feel all nice inside to be complimented like that. =)

One of the best things about CUSEC is that not only do you get great presentations from amazing people, but you also get to interact with them outside of the prepared talks. Nick was at every party and very open and interesting. Given that he was advocating Microsoft not everyone agreed with everything he said but that was the best part. If everyone agreed on everything the world would be an incredibly dull place and I’m happy that there was a strong voice for a different viewpoint present. The last two CUSECs have had a definite ruby bent (which I’m not complaining about since I love ruby!) so it was very nice to have him there.

I spoke a lot about Nick but the entire Infusion group that came to CUSEC was great and fun to be around. Some people know my plan right now is to apply to a very short list of companies and, if I get an awesome job I think I’ll love I’m heading wherever they’re based (location does matter a little, but it’s only a drop in the bucket compared to job interest). If I don’t, I’m going for grad studies. Because of how much fun and how well the entire Infusion gang sells their company, they made my list. I had a nice surprise later on in CUSEC (post will show up in a few days) but after I saw Greg Brill for the first time at CUTC I had already planned on applying and now, after meeting even more people from Infusion I’m more sold on them more than ever before. Hopefully I’ll be able to sell them on me.

Written by Smokinn

January 22nd, 2007 at 11:44 pm

Posted in Uncategorized

CUSEC 2007 Day 2: Dave Thomas edition

one comment

I only half realized the length of the last entry. It was when I posted it and had to scroll down really far that I realized it’s so long that people probably won’t read it (tltr). So I’m changing up the format a little. Each day from now on I’m going to post about something I loved at CUSEC. I figure I’ll easily have a week or two of posts so check back often!

Dave Thomas

Terrorism. It’s bad. This we already know. When we think of terrorism we think of radical violent groups, but Dave showed us that it’s also present in software engineering. And he’s exactly right. Terrorism is simply coercion by fear. Fear of change, fear of blame, and most of all, fear of risk. When someone asks if some technology is “enterprise ready”, Dave says that the best answer is another question: is the enterprise ready for that technology. Because really, firms are all about minimizing risk. Minimizing risk is a good thing. Paul Graham agrees:

The average big company grows at about ten percent a year. So if you’re running a big company and you do everything the way the average big company does it, you can expect to do as well as the average big company– that is, to grow about ten percent a year.

Beating the averages – Paul Graham

But right now, average is incredibly bad. The average project is not only of very low quality but it’s of very low quality all the way to the end which is usually failure, not release. How would be one way to fix this? It’s a topic James Cordy talked about but Dave has a different solution. Make risk your friend. Embrace it. You don’t even have to be personally in charge of the risk. He mentioned a friend of his who has a consulting company. Every time a client asks for a quote on a project, they give the client 2 quotes: one for ruby and one for java. The ruby quote usually runs about 70 or 80% of the java quote and in the end is more profitable because the company get more productivity out of ruby. But the percieved risk is now managed by the client and that’s something big companies have lots of experience in so why not let them deal with it? It’s a great idea and I think more small companies should try this approach. It doesn’t have to be ruby of course, it could be whatever your developers like, are good at and is suitable to the project. It could be O’Caml or Python or anything other than Java and other standard solutions.

There is much more that Dave Thomas talked about such as releasing all his books without any sort of DRM and other forms of risk but I promised I would keep my posts shorter from now on and will wrap up with a few comments about his presentation style. If you ever have the chance to see him speak, jump at it. He’s engaging and gives his presentation like a great story. He didn’t use a single powerpoint slide, instead simply being the presentation himself. Nearly all the best presenters use very few slides but it’s now rare to see someone who is both a great presenter and shuns powerpoint. I love trying to figure out what makes someone a good presenter and try to apply that to my tutorials so he (and many others at CUSEC) was a great learning opportunity.

In the next few days many photos will be appearing on flickr tagged with “CUSEC2007″ so if you’re interested you can check them out.

I’m heading back to my RSS feeds now since I’ve accumulated quite a stack of posts to read during the 3 days I was mostly off the internet. See you tomorrow.

Written by Smokinn

January 20th, 2007 at 11:48 pm

Posted in Uncategorized

CUSEC is still awesome

leave a comment

Day 2 has now ended. I will only talk about day 2 later however since this post is going to be about day 1 of CUSEC.

First, the reason I didn’t post about day 1 yesterday was because I was in no state to do so. I stumbled into the hotel room around 3:30 or 4 am and probably went to sleep somewhere between 4 and 5, getting up the next morning for the first keynote. That’s why I’m in a hotel even though I live in Montreal.

Anyway, back to CUSEC.

The first keynote was Pete McBreen. This guy is inspiring. I’ve chatted with him a lot over these past few days and he’s the kind of guy I want to be. What is truly amazing is the amount of books he reads. He used to go through 5 books a week! I really should read more.

His presentation was titled “Software Engineering: Do you want fries with that?” He discussed how our education path is heading toward a brick wall. Software Engineering tries really hard to make programming so easy that anyone could do it with very little training. The key word in that last sentence is tries. We try and try but it doesn’t work. He thinks it never will and I definitely agree. It reminded me of Joel Spolsky’s Law of Leaky Abstractions. Abstractions are great. They make life easier, they make you more productive and they let you develop systems of such complexity that was previously impossible. But they occasionally leak. And when they do you have to be able to get down into the guts and fix the problem yourself.

Pete McBreen says that software development is a craft and one that every developer should be personally responsible for. Whenever you write code and someone else runs it, that other person should be able to very easily find who you are and have recourse for complaint when something goes wrong AND you should fix it! One of the reason why linux is of such high quality and why Ruby is good is that Linus and Matz are accessible. If they screw up they have tons of people that are going to call them on it. So when you develop your software you should both feel and BE personally responsible for it. I also got a good reading list out of his talk so that was a nice little bonus!

The next keynote was James Cordy. But before we get to him I want to talk about someone who is, in my opinion, the best presenter I have ever physically witnessed. I’m talking about Greg Brill, the CEO of Infusion Development. This guy is amazing. He’s loud and alive and engaging and you just love to see him go. Perhaps the most memorable moment in his talk was when he was discussing his “Talented Children” theory. He says that companies stick us in cubes and give us a bunch of toys and basically treat us like kids. And while that’s fun for a few years, you reach your late 20s or perhaps early 30s and hit a big career wall because you’re still treated like a kid. You may not have the toys anymore but your role is defined in such a narrow scope and you’re not trusted to take on any business aspects or give input on marketing or domain knowledge or anything of the sort because you’re the software guy. You just write code and are not capable of doing anything else.

To illustrate the talented child theory he said does anyone have any of those slinkees IBM was handing out? THROW THEM UP HERE! THROW THEM NOW! And a few people chucked their slinkees to the stage. Then he takes one and says see? This is how they see you! Sadly he ran out of time and had to cut the talk short. If I organized a conference I’d plan a disposable event right after him for an hour and tell him you’ve got an hour but take as much time as you need. If he cuts into half the event it wouldn’t matter.

Now to the second keynote. James Cordy spoke about software and engineering and how to possible create true software engineering, not whatever it is we have now. Because now what we’re doing is we’re trying to re-invent engineering from scratch. And that’s completely insane. Engineering is simple. You take a look at what works, you take a look at what doesn’t and you create best practices out of that. And his idea of best practices is not the “industry best practice” software design process/methodologies we’re used to. His best practices are much simpler. First, he took the idea of formal verification from the space software that is developed. If you want good software you can use formal verification. It works. Second, he took the idea of massive amounts of testing from the banking software. If you want good software you can test it like crazy. This software is also built with testing in mind, is very modular and very well managed. Finally, he took the idea of inspection from linux. If you want good software, get lots of people to look at it.

The evening party was crazy kareoke and tons of fun.

Tomorrow’s preview: Dave Thomas, the pragmatic programmer, Ralph Johnson, the design pattern guru and a really cool guy called Nick.

Written by Smokinn

January 20th, 2007 at 1:01 am

Posted in Uncategorized

Debate: is this a ruby bug?


puts @name unless @name.nil?

That will output all names unless name is nil.

puts @name.to_s unless @name.nil?

That will always output @name whether it’s nil or not because ruby will change @name to “nil” before the evaluation of @name.nil? which means that any previously nil value is no longer nil. Not what I expected.

Written by Smokinn

January 17th, 2007 at 6:25 pm

Posted in Uncategorized