This blog is inactive. Visit www.outofscope.com for new content.

Keys to a productive environment

Ever notice how some teams can churn out code at an incredible pace while other teams struggle to release features on a regular basis? Sometimes a star programmer can make the rest of the team look very good, but more often than not, a productive team is the result of... read more

Survvit: my weekend project

A couple of weekends ago, I decided to build a simple app using Ruby on Rails, just to learn more about the framework. For the project, I decided to build a simple survey application that people could use to send custom surveys to people they know. The twist here is... read more

Introducing CSharpSharp

Ever since C# 3.0 was released, I've been thinking about the possibilities opened by the extension methods. Extension methods allow developers to extend existing classes by providing them with additional methods. The beauty of this is that we can now create beautiful code APIs on existing classes without compromising its... read more

Stuck with bad code? Wrap it up

I recently had to work with a library that was very difficult to understand and use. The documentation was poor, there were not many samples online to help me do what I needed to do and nothing was predictable. That means I had to resort to trial-and-error for tweaks and... read more

How to track your inactive domains

I have a confession to make: I'm addicted to purchasing domain names. Whenever I get an idea for a project, I can't stop thinking about how to name it and when I find a good enough name, I have to purchase the domain for it. The result? About a dozen... read more

Afraid of the Cloud

Nowadays, you can manage a software company almost entirely with online services. Whether you want to manage projects, emails, repositories, bugs, or anything else, you've got plenty of options. Most of the time, in addition to being time savers, using Cloud services also help you save quite a bit of... read more

Things you should know when interviewing for a programming job

I was browsing through the Programmers stack exchange Q&A website yesterday and I stumbled upon a question about the fairness or unfairness of some interview questions that the candidate was asked to answer. Basically, the candidate was asked to answer questions out of his field of competence and felt cheated... read more

Does your project have a style guide?

Style guides aren't new, the printing industry has been using them for a long time, but we don't see them nearly often enough on web projects. Just as a coding guide is useful for programmers, a style guide is useful for front-end developers. A style guide is useful for all... read more

An introduction to web development frameworks

Last week I wrote an introductory guide about how to develop web applications. I kept it short and simple on purpose because an in-depth description of the topic would fit in a book. I'd rather give an overview and then selectively dig in each step as I see fit. Today,... read more

How to develop web applications

This is a question that comes up a lot and for good reason. As a programmer, how the hell am I supposed to learn how to develop web applications? There's no easy answer and even learning institutions don't seem to know exactly how to do it; the university I went... read more

eBay's bidding strategy mystery

I've always be fascinated by the way most eBay auctions end. Most of the time, in the first few days of an auction (they generally last 7 days) a 2 or 3 people will put modest bids, then in the last 1-3 seconds of the auction, 5 people will rush... read more

What's wrong with touch typing?

Touch typing has been the standard input method for computers (and typewriters) for a very long time now (since 1888 according to Wikipedia). Ever since we started shrinking the computer to fit in our hands, we've been looking at different ways to input text simply because touch typing is not... read more

How to print a Google Wave

(click to go directly to the solution if you're not interested in the story) Google Wave is not for everyone, but it's definitely a decent tool for collaborating on documents and for planning vacations or other events. One important thing missing from the standard set of features is the ability... read more

Ideas are worthless

Back in May, I had an idea for a killer web application. It would revolutionize the world and bring me fame. If you don't remember, Facebook was getting a lot of heat about privacy concerns at the time and many users were starting to feel the need to leave. I... read more

Embracing users with multiple personality disorder

As people use the web and the available services more and more, some users sometimes need more than one account for a single service. However, switching between two accounts is annoying: first, the service's "remember me" functionnality is useless. Second you have to log out and sign back in, re-entering... read more

How to save Subversion (SVN)

In the last few months, Subversion has been heavily criticized by the software development community, with reason. While Subversion was a great replacement to the old versioning systems like CVS and Visual Source Safe, the newer alternatives are really starting to demonstrate how bad Subversion really is. Merging This is... read more

What is Dropbox?

If you haven't heard of Dropbox yet, I strongly encourage you to go check out their website immediately. Essentially, Dropbox transforms a normal folder on your computer into one that syncs automatically online. If you install Dropbox on multiple computers, all those computers will share the folder and you'll have... read more

Blaming never solved anything

Many individuals make the mistake of trying to find the culprit before fixing the error whenever a problem arises. There are several ways to deal with a problem when it comes up and the first step is always to fix it. Maybe you can fix it yourself or maybe you... read more

Persisting information across requests

Fact: The web is stateless. The World Wide Web, on the other hand, is intrinsically stateless because each request for a new Web page is processed without any knowledge of previous pages requested. This is one of the chief drawbacks to the HTTP protocol. Because maintaining state is extremely useful,... read more

My experience with web hosting

I recently decided to change my hosting provider. I didn't really need to move, but as with everything, you don't really know if something better is out there until you actually go search for it. I first noticed how saturated the hosting market is, there are tons of available hosting... read more

Synergy in software

synergy is when different entities cooperate advantageously for a final outcome. Simply defined, it means that the effect of the whole is greater than the sum of the effects of the individual parts. In software, that means that multiple programs or tools work together to accomplish something that wouldn't have... read more

Analyze what you read, never assume it's the truth

A recent event which lead to the loss of ALL the data for the popular programming blog Coding Horror and Stack Overflow blog brought up an interesting discussion over at reddit. The discussion talks about whether Jeff Atwood and Joel Spolsky (co-founder of Stack Overflow) really are the gurus some... read more

Switching to new technologies

Ever since I started programming with ASP.NET, I've been using Web Forms. The Web Forms framework wraps the whole web page in a single form and handles everything via post backs and events from there. Wiring the navigation between pages can become a mess quite quickly. It also provides a... read more

You can only go as fast as the slowest component

We recently came across a performance wall for one of our application. The application required us to display a massive table and depending on the situation the table would reach over 200 rows and it has about 40 columns. There's also a lot of client-side activity (the rows are draggable... read more

Making yourself indispensable

There are two ways to make yourself indispensable for your employer (as a programmer): Write code so obscure and undocumented as possible, making it impossible to fire you since no one knows how to do the things you do Write code so clean and easy to understand that anyone can... read more

Unloading your brain stack

It's quite difficult to get anything done when you're thinking about the ton of things you need to do. Just remembering everything takes most of your mental energy and focusing on one task is problematic. The solution? To-Do lists. I'm a big fan of To-Do lists because I have trouble... read more

If we can't trust Wikipedia, who can we trust?

Wikipedia is a great source of information. It contains over 3 million articles about various subjects covering almost everything you could be interested in. The content is written by people like you and me, by professionals and amateurs, experts and novices. In addition to creating content, the information is watched,... read more

Stop counting sick days

Do you or your employees have a fixed number of sick days allowed per year? Do you really want to limit the number of sick days? No, you don't, even if you think you do. You don't want sick employees at work First of all, a sick employee is not... read more

Using FriendFeed to automatically Twitter your new blog posts

I never gave too much attention to FriendFeed until today. I was looking for a list of all social networking sites and I knew FriendFeed aggregated feeds from a selection of social networks. I did find what I was looking for, I also found a bit more. I had some... read more

The non-designer's guide to Web design

When developing Web applications or websites, it is not always possible to get help from a professional graphical designer. Maybe you don't have the resources (for a personal project for example) or the designer(s) in your company are already working full-time for more important projects/designs. Good news! You don't have... read more

Maximum level of incompetence

Are you familiar with the Peter Principle? The Peter Principle is the principle that "In a Hierarchy Every Employee Tends to Rise to His Level of Incompetence". The principle is based on the fact that promotions are given to competent employees. When an employee stops being promoted, it means that... read more

Being too good for your own good

What happens when you finish a project or task ahead of time and better than what was asked? A "Good work!" from your boss and a new project with less time to do it since you're so efficient? If you're work for a decent company you'll get a raise or... read more

Is your development process feature-proof?

Can your software survive the addition of new features? Does adding feature actually make the software more interesting or does it just make the marketing team add another tagline to the description of the product? Feature creep is a real problem many developers face and the problems that might arise... read more

One browser can't rule them all

Nothing good can come out of having a single winner in a browser war. The last time a single browser won, it was IE6 and we all know how things turned out. Benefits Healthy competition Of course, there are plenty benefits with a healthy competition, it forces every player to... read more

The encouraged behavior

Before we talk about the point of this post, let me introduce you to the story that triggered it: Laboratory dangers There was a little incident at the laboratory where my girlfriend works, fortunately no one was harmed. While working with dangerous liquids, she spilled some of it on herself... read more

Stop worrying, start doing

Purists A purist is someone who knows how things should be and shouldn't be done. For them, there's a correct way of doing things and plenty of wrong ways. A typical Web purist knows how to use the H1 tag properly and will laugh at anyone that uses a tables... read more

Web engineering

A definition With the emergence and improvements of Web technologies such as Ajax as well as better support for Web standards, the Web has become the goto place for young software engineers. However, software engineering graduates were not trained to build web applications, most of them lack certain skills required... read more

Getting forms right

Forms are an important part of any Web application requiring users to register. Registration forms are especially important because they're the first thing the user sees and not doing it right can (and will) make them leave before completing the registration. Here are a few tips for getting forms right:... read more

The right to complain

When you keep complaining about a situation, but don't do anything to change it, you lose the right to complain. Almost everyone does it (I do too), but when your complaining irritates others, it's time to stop complaining and act to improve your situation. When people notice that you complain... read more

Internet Explorer: Always One Step Behind

You probably have seen that Microsoft recently started a campaign to promote IE8. Microsoft is being very aggressive with this campaign and is raising a lot of controversy. One of the campaign, Get the facts, compares IE8 with two other popular browsers: Firefox 3.0 and Google Chrome (will anyone ever... read more

6 Things You Should Know About CSS

There are a few things people doing CSS styling should know when styling a web page. This is a list of things that I consider mandatory knowledge, not because they are basics, but because not knowing them causes too many headaches and knowing them makes styling so much easier. Inline... read more

IE6: To support or not to support

Situation It's not news for anyone, Internet Explorer does not support CSS standards. It's a pain to develop websites that work for all major browsers especially because IE6 is one of them (for now). Developing for IE6 means that you have to spend time to change the markup to make... read more

Handling Users

Chances are that if you have a website, you want users to participate. They either create your content (forums, Digg, Reddit, ...) or help promote your content (blogs, review sites, ...). Users are important for a successful website and you need to make them be able to contribute as easily... read more

Password Management 101

Passwords are an important part of the Internet. We all manage a multitude of accounts and each one of them requires a password. The greater the number of accounts to manage, the harder it gets to have a unique password for each. Here are a few tips for you if... read more

Process Usability

In my previous post about code usability, I mentioned that usability applied to anything that can be used and doesn’t need to be something that can be seen. So today, I'll talk about that second part: making intangible things more usable. I'm talking about process usability. What kinds of processes?... read more

Show me the anchor text for referral links

There is something missing in the data of web analytics. We know where the traffic comes from, but we don't know how it came here (beside the fact that a link was clicked on a page). We already know what people searched for when the traffic came from a search... read more

Code Usability

Most of the time, when people talk about usability, they're talking about usability of a user interface, about how to design the user interface to make it user-friendly. However, as the name implies, it applies to anything that can be used and doesn't need to be something that can be... read more

A Firefox extension for grammar Nazis

Grammar Nazi Someone who believes it's their duty to attempt to correct any grammar and/or spelling mistakes they observe. Usually found hanging around Irc chatrooms hounding "n00bs". From the Grammar Nazi entry of the Urban Dictionary An extension? Yes, there are plenty of grammar Nazis on the Web, commenting about... read more

Why You Should Get Your Own Domain Now

Even if you don't plan on having a website. Having your own domain has a lot of advantages. It gives you plenty of freedom and also helps you stay secured. Why? Infinite email addresses The most important use you can make with your own domain is having access to an... read more

Correctly parsing numbers

Problem People from different cultures don't write numbers the same way. Another problem? People from a culture sometimes write numbers the way another culture does. There are two things causing these problems: the decimal separator and the digit group separator (commonly named the thousands separator because most cultures split the... read more

Internet Explorer box model is not a bug

We often blame Microsoft and the team behind Internet Explorer for its lack of support (or misinterpretation) for standard CSS properties. However, there is at least one property that Microsoft interpreted correctly in my opinion and it's the box model. Here's a picture of the W3C box model compared to... read more

A long overdue refactoring for CompareTo

We've all used the CompareTo method to sort elements or to compare strings for some reason. It's also possible that you've implemented your own CompareTo by implementing the IComparable interface (or its generic version IComparable<T>). There's one thing that always bugs me when using or implementing that method. Why does... read more

A smarter find-and-replace

We use find-and-replace almost every day to copy a functionality from another object or when working with templates. At work, we use templates to help kick start multiple kinds of projects and we have to perform project-wide string replacements using a very useful tool appropriately called Actual Search & Replace.... read more

Learn revision control, it's good for you

Call it what you want, versioning, revision control, source control, etc., revision control is one of the most important skills a developer should master. It should be as natural as hitting ctrl + S obsessively while writing code. Nowadays, every self-respecting development company uses a revision control system. However, there's... read more

The need for a cross-browser false

The issue A few months back I came across a rather unusual bug. I was using image buttons on which I had registered client-side onclick events. However, I did not want the buttons to initiate a postback when the user did not confirm the action so I used the usual... read more

The 3 virtues and vices of a programmer

I've always liked that quote by Larry Wall: "We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris." He later defined those terms in a book as follows: Laziness The quality that makes you go to great effort to reduce overall energy expenditure.... read more

Blog Scope

I have a formation in Software Engineering and my work is my passion. Everyday, all the time my mind analyzes the world around me through my programmer's eyes. There are many things I think about that I would just forget if I didn't write about them so I might as... read more