Tuesday, May 04, 2010

"Firefox just got better"

May 4, 2010 -Roderick Brentnall
________________________________________
A while back, a major feature was added to the pre-release versions of Firefox 3.1, called Private Browsing. I've been working for quite some time on this, so I thought it may be a good time to write about what this feature is and how to use it.
As you may know, while you browse the web, your browser usually records a lot of data which will later be used to improve your browsing experience. For example, it records a history of all the web pages you have visited, so that later if you need help remembering a site you visited a while back, it can assist you in finding that site. Now, that is great, but there is a downside: those data can be used to trace your online activities. For example, if your coworker sits at your computer, she can view all of your browsing history, which may not be what you want. This feature comes in real handy for online banking too.
Now,don't you feel just a little better already?
Suppose you're doing something online, and you don't want your coworkers to know about it. An example scenario would be looking for a new employer while at work! One option would be to do your work, and then clear the data that Firefox has stored for you, such as history, cookies, cache, .... But the problem is that this action will also remove the parts of your online activities data which you don't want to hide, so the history that Firefox records can no longer be used to find a web site you had visited a month before. Private Browsing will help you here.
Private Browsing aims to help you make sure that your web browsing activities don't leave any trace on your own computer. It is very important to note that Private Browsing is not a tool to keep you anonymous from websites or your ISP, or for example protect you from all kinds of spyware applications which use sophisticated techniques to intercept your online traffic. Private Browsing is only about making sure that Firefox doesn't store any data which can be used to trace your online activities, no more, no less.
So how does one actually use this feature? It couldn't be simpler! To start, just select Private Browsing from the Tools menu.














You will see a dialog box which asks you whether you want to save and close all of your current windows and tabs, and start the Private Browsing mode. Click Start Private Browsing to start your private session.



After you do this, your non-private browsing session is closed and a new private session is opened,
showing you the screen below. (Before you mention, the ugly icon you see there is something
I created as a placeholder! This icon will be replaced in the final release of Firefox 3.1.)













As you see, not much is different in the Firefox window inside the Private Browsing mode, except for the (Private Browsing) text added to the title bar at the top of the window. That is intentional: after all, if you're doing something online that you don't want your coworkers to know about, you don't want to raise their attention with a big sign saying PRIVATE as they pass by and glance over your shoulder.
At this stage, you can start browsing web sites, without ever having to worry that Firefox might store something on your computer which can be used to tell which pages you have visited. Once you're done, just uncheck the same menu item in the Tools menu to close your private session.This action discards all of the data from your private session, and will restore your non-private browsing session, just like it was before entering the Private Browsing mode.

Now, as I mentioned at the top of this post, this feature is available in pre-release versions of Firefox 3.1 (what we geeks call nightly builds). This feature will be included in Firefox 3.1 Beta 2 which will be released soon, so if you want to try it, you can give it a shot then. And of course, it will appear in the final release of Firefox 3.1, so if you're not the type who test beta software, you can wait until Firefox 3.1 is released.

Update: As many people seem interested in knowing this, there is a way to make Firefox always start in Private Browsing mode. Go to the about:config page, click I'll be careful, I promise, type browser.privatebrowsing.autostart in the Filter text box, double click the entry to make its value true. After doing this, the next time you start Firefox, it will start in private browsing mode automatically. To turn this off, use the same steps to change the value of this preference to false. There is a plan to provide an easier method to set this option in the final release of Firefox 3.1.You gotta Love Firefox! See ya Now!

Wednesday, March 10, 2010

The do's and don't of Contractors




Many, many moons ago I posted a list of five basic rules contractors should follow. I just stumbled across it, added a sixth rule and decided I should probably re-post it on my new weblog. Now, before anyone thinks me a bitter contractor ranting about clients, how I approached this needs to be explained.
First off, I view every miscommunication, dissatisfied client, and broken relationship as my fault. At a very basic level I believe that there’s always something I can do to avoid or mitigate problems in a working environment. Even if the client turns out to be Attila the Hun, I go back and look at how I could have performed better. Sometimes that means I should have never taken the job. Other times I may conclude that despite doing everything a reasonable person would, there were still things that could have been done and I should have at least given them a try. That doesn’t mean that I’m a martyr. I’m just one of those people who believe that for every problem there’s a solution. Now, I may decide that the solution isn’t feasible but I want to at least figure out the course of action that would have brought about a better result.
Second, I think a lot of projects/contracts go wrong because the consultant doesn’t manage the relationship well. As you can see in Rule #2, the contractor often sets the stage for conflict by trying to be a nice guy/gal. If they simply did what they were contracted to do they could avoid this kind of potential relationship killer. The purpose of this list of rules is not to provoke confrontation but to avoid it.
Lastly, if you’re a customer of contract services, you should understand that while you may be the most ethical and honest client in the world, the fact of the matter is that a significant number of customers/clients aren’t. As much as you fear an unethical contractor, contractors fear clients who stiff them or take advantage of their desire to just do a good job. I don’t believe that any of my rules advocate anything more than protecting the interests of both parties. Several of the rules are specifically designed to help contractors avoid putting themselves into situations where they may expose themselves to undue legal and other risk. As they say, an ounce of prevention is worth a pound of cure.

1. Never take on a client who has fired more than one previous contractor to do the same job.
There’s only one constant in this equation; the client. I had a client who during the negotiation process began showing me some of the work done by a graphic artist that he had hired so I could get an idea about the look and feel he was going for. When I asked if I could contact the artist about obtaining the images he said that it probably wasn’t a good idea and went on to explain how he offered to pay the artist to do some mock-ups but he really wasn’t 100% happy with the work and wanted the artist to make some more changes before he paid him. He also briefly mentioned another artist who he had hired to do the same work and had similar results with who he also didn’t pay. Needless to say, when we delivered the final product to specifications, the client wasn’t 100% happy (he had come up with new requirements after the contract was signed) and refused to pay for the work.

2. Never agree to do any work that is outside the scope of your agreement.
First off, this doesn’t mean be a jerk about it. It simply means that if you’ve been contracted to do one thing and the client needs additional services, you should work out a separate agreement for the new services. Many clients (and some might argue all clients) have a tendency to view you as one of their employees. They don’t really understand where the contract ends and the freebies begin. Of course, you do and every time you do something above and beyond the terms of your contract you think you’re throwing in a freebie with the goal of either earning more business down the road or keeping the client happy (or both). This mostly pertains to contractors doing work on a fixed bid but could apply to hourly contractors who decide not to charge the client 15 minutes here or an hour there for things outside of the scope of what the client has agreed to pay for. The problem comes up when the account becomes too far out of balance. Since you’ve never said no to the client’s request many clients will take advantage of that and keep asking for more and more. Eventually, any smart businessman is going to see that they’re losing money on the client and become frustrated. That frustration will grow, especially if you have employees or sub-contractors who become increasingly frustrated with the extra work and begin taking their frustrations out on you. So, you eventually have to say “no” and not just to the current request but to all future requests. Now you’ve materially changed the relationship. You’ve made the client feel like you’re angry with them (otherwise, why such a drastic change in policy?) and since this is more likely to come near the end of the project than the beginning this may significantly impact the prospects for future work with the client.
Another danger is that this may expose you to confusion about what constitutes a deliverable for contract purposes or leave you open to legal responsibilities that you were unaware of. Whether it was actually your fault or not, you’re now facing a whole laundry list of possible problems for something you were not under contract to do. The client could claim that your entire work product is defective and refuse to pay for it. They could also demand that you fix any problems with not included which could prove to be a time consuming task to diagnose and remedy, for which you’re not being paid. But had you said to the client “We have no problem doing that but it does fall outside of the scope of this agreement. Perhaps we should work out a separate agreement at an hourly rate for one-off type of tasks like this so there’s no confusion later.”
The bottom line is that the saying that “no good deed goes unpunished” is applicable for most contractors. You need not nickel and dime a client but do make a distinction between what the contract requires you to do and what the client is asking you to do. Any client who balks at that will usually prove to be more trouble than they are worth.

3. Bill in 1/4 payments.
I’ll be the first to admit that I’ve been burned more often than I care to share on this one. I used to do 50% up front and 50% on delivery but the risk you take is if they refuse to pay for the last 50%. You have 50% of the job costs floating out there, which puts the client in a very powerful position. Most clients are honest but there is a large enough percentage of dishonest people out there to make it imperative that you never put yourself in a position where the client has that much power over you. Some would argue that you can just withhold delivery or stipulate in the contract that they cannot use your work until it’s paid for and I would argue that neither of those two will protect you sufficiently from a dishonest client. For one, if you withhold delivery, you’ve still invested the time in creating it. You can’t get that time back (and that’s what you sell) and you usually can’t turn around and find another buyer for it. You may run into dishonest clients who figure out at some point during development that they completely screwed up the requirements and the final product is of no concern to them. They’ve just found a way to eliminate 50% of their cost. You’re stuck with it. The other major danger is that they take your work and have someone duplicate it at a fraction of the cost. Your code or configuration files or other work are now a very solid blueprint for a less experienced contractor to come in and knock-off as easy as a Gucci bag in Hong Kong. You have very little legal protection there.
Instead of exposing yourself like that, develop project milestones and break them out into 4 parts. Bill ¼ upon signing of the contract, ¼ at milestone 1, another ¼ at milestone 2, and the last ¼ on delivery. If they balk at paying any of the milestones, you can either remedy the problem or walk away with minimal loss. Your honest clients will appreciate not having to come up with ½ or 1/3 up front and your dishonest clients will be kept in check.

4. Never discount your rates for a new client in the hopes of getting future business down the road at full rate.
There’s really no bigger sucker’s bet. Once you establish precedent for discounts the client will always expect them. Once you do a job for the client at a particular price they know that you can do the work for that price. If something costs X then charge X for it and be willing to walk away unless the client is able to give you a reason for discounting the price. You can explain to the client that having a steady workflow for the next 12 months is worth something to you and if they give you the business now instead of making you bid out 6 two month contracts you can bring your rates down but don’t offer to do it on the promise there will be more work down the road because you’ll probably still be jumping through hoops and competing against other vendors who are just as willing to undercut you in order to get their foot in the door and make the same mistake. If this is your first project with the client and they don’t want to enter into a long-term agreement until you’ve proven yourself, at least get a letter of intent or better yet, word the contract in such a way that they commit to the entire work package but can end the agreement after any time if they do not feel the work meets their standards.

5. Never let the client take critical processes out of the contract in order to save money.
We all know the drill. The client looks at your budget and asks why QA is three weeks or why you feel you need so many days to complete something that, to them, looks so simple. Sometimes the client will even offer to take on certain responsibilities themselves in order to get the cost to fit into their budget. Be very, very wary of this. The only thing this leads to is you doing more work for the same amount of money. If QA takes three weeks showing it on the schedule as two weeks only means that you’ll have to do three weeks of work in two weeks. Worse yet is the fact most people underestimate contracts to begin with so it will probably end up being closer to three and a half weeks and now you’ve promised close to four weeks of work in two weeks. If the client needs to cut the budget cut features not process. And never allow the client to take on roles just for the sake of cutting the budget. Not only do you have the issues previously mentioned but you also now have to manage your client as if they were an employee. If they fail to deliver and hold up other parts of your schedule there’s only so much pressure you can apply since they’re the client.

6. Be very careful in lending a helping hand.
This caution might be a sub-warning from several of the previous rules but I think it needs to be separated out for clarity. I once had a client who insisted that they would take on the task of setting up the servers on a software development project. Over a two-week period, I received, literally, over 100 emails asking me configuration questions. How do you do this? How do you do that? The worst part was that when I pointed the client to the documentation that would answer their questions they got a little huffy with me mentioning in their reply that I had told them that I was an expert on the job they were having problems with and that they expected me to give them the answer instead of pointing them to documentation. I am an expert on that building, but I wasn’t being paid to offer that service. In fact, I was specifically not tasked with that portion of the job because the client wanted to save money. In the end, I spent more time educating the client on things that I was not responsible for than I did on the actual paying portion of the assignment.
Final thought: Obviously I can’t offer advice on every situation one may encounter but I do plan on expanding this list as I think of things that may be useful..