"Proactive" is one of those over-used words that you come to hate, even at the same time feeling that it has a rightful spot in the language. The 7 Habits of Highly Effective People provides a nice definition for "proactive", one that I felt captured what it should mean, elegantly and directly. (For all I know, maybe the author coined the word himself.)
In the world of things that you care about, you can only affect some percent of that. Having a proactive mindset means working to expand your influence over as many areas of concern as possible.
A side aspect of this definition: if someone you work with isn't proactive enough, maybe they haven't figured out why they should care? (And if that's something that concerns you, maybe you need to try to influence them.)
Monday, January 25, 2010
Thursday, January 21, 2010
Would you be happy to skip your review?
At my friend's company, no one had mentioned anything about having a review this year. Finally, my friend asked his boss, "Are we having reviews?" The response: "Well, last year, we did all the reviews, and HR was supposed to signoff on them all so we could pass them out, but they never even returned them. So I figure, why bother?"
See anything wrong here?
If the manager values the review only for the HR documentation, then the manager's response was perfectly rational. But, the only value of an HR signoff on a review is for disciplinary purposes. 99% of your reviews, therefore, won't really need an HR signoff.
The real value of a review is feedback, thereby helping people grow their skills. One of the most productive review comments follows the lines of "you are good at X, and are ready for the next step, X+1 or Y". A good review enlightens and energizes the recipient at best, and focuses them at the least.
Of course, we don't always have managers who are good at giving reviews.
Learning to do that is a critical skill that a manager should develop, and that takes practice. (Hopefully, the manager gets that feedback in their review!)
You could also argue that you don't need an official review, that you could and should provide feedback everyday. Which is true. But 1) what are the odds that someone who doesn't give a productive annual review is going to be good at giving regular, on-the-spot feedback? And 2) just as people go to church / mosque / etc to pray (they could be equally spiritual in their own home anytime), blocking out time away from the daily fire-fighting and distractions helps you focus on the subject at hand.
I thought about telling my friend that he should say to his boss, "Even though we're not having reviews, could you give me some feedback on how I'm doing, what I did well, and what I could do better?" Better still, he could write up his own thoughts, give them to his boss, and ask for comments. But given his boss's view of what a review is, why bother?
See anything wrong here?
If the manager values the review only for the HR documentation, then the manager's response was perfectly rational. But, the only value of an HR signoff on a review is for disciplinary purposes. 99% of your reviews, therefore, won't really need an HR signoff.
The real value of a review is feedback, thereby helping people grow their skills. One of the most productive review comments follows the lines of "you are good at X, and are ready for the next step, X+1 or Y". A good review enlightens and energizes the recipient at best, and focuses them at the least.
Of course, we don't always have managers who are good at giving reviews.
Learning to do that is a critical skill that a manager should develop, and that takes practice. (Hopefully, the manager gets that feedback in their review!)
You could also argue that you don't need an official review, that you could and should provide feedback everyday. Which is true. But 1) what are the odds that someone who doesn't give a productive annual review is going to be good at giving regular, on-the-spot feedback? And 2) just as people go to church / mosque / etc to pray (they could be equally spiritual in their own home anytime), blocking out time away from the daily fire-fighting and distractions helps you focus on the subject at hand.
I thought about telling my friend that he should say to his boss, "Even though we're not having reviews, could you give me some feedback on how I'm doing, what I did well, and what I could do better?" Better still, he could write up his own thoughts, give them to his boss, and ask for comments. But given his boss's view of what a review is, why bother?
Wednesday, January 20, 2010
Interesting thoughts
It's so easy to have interesting thoughts these days: the thoughts of the greatest and most interesting minds on the planet are, for the first time in history, available to us in near real-time. To read them is to have them.
The richest man on the planet tackling the world's biggest problems.
Nobel prize winners on the economy, incentives, environment.
The top experts in any field you care about.
In the past, we'd have to pay thousands of dollars or buy a book of dated thoughts or know someone who knew someone. Today, you can get the vast majority of it for free.
In a sense, expertise is becoming rampant. How are you going to compete in such a world?
The good news for you is that you only need one job. Expertise in the current job will lead to the next opportunity. Repeat.
Tailor your solutions to the situation. In that domain, however narrowly defined, you can be the expert. It will still require a great deal of knowledge, diplomacy, effort, risk-taking, commitment, and discipline... among other things.
At the same time that it's never been easier to have access to expertise, it's never been easier to be your own expert. Think about your unique domain, your unique job situation, and come up with your own interesting thoughts.
The richest man on the planet tackling the world's biggest problems.
Nobel prize winners on the economy, incentives, environment.
The top experts in any field you care about.
In the past, we'd have to pay thousands of dollars or buy a book of dated thoughts or know someone who knew someone. Today, you can get the vast majority of it for free.
In a sense, expertise is becoming rampant. How are you going to compete in such a world?
The good news for you is that you only need one job. Expertise in the current job will lead to the next opportunity. Repeat.
Tailor your solutions to the situation. In that domain, however narrowly defined, you can be the expert. It will still require a great deal of knowledge, diplomacy, effort, risk-taking, commitment, and discipline... among other things.
At the same time that it's never been easier to have access to expertise, it's never been easier to be your own expert. Think about your unique domain, your unique job situation, and come up with your own interesting thoughts.
Tuesday, January 19, 2010
Portable dev env, cont'd
So far, the portability has been very useful. I dropped the whole thing onto my work computer in a couple mins. On the whole, saved me a lot of hassle.
The main tweaks I've made so far:
1. Environment variables. For Java you need JAVA_HOME, etc. Typically, the installer creates system vars, so you could manually do this, but I do something even better: create small shell files that sets it as a temporary user var. Then you add a call to this file anywhere you need it. For example, instead of executing Eclipse directly, create a shell file that first calls the file to set the vars, then executes Eclipse. The beauty is that you can run multiple environments at the same time. For example, because you're using user vars and not using system vars, you can run your app with JAVA_HOME pointed to 1.5 version, and then run it again with JAVA_HOME pointed to 1.6.
You need versions for each OS you run on, but that is pretty basic shell writing.
2. Registration settings. The installer typically sets the extension to automatically invoke the executable; i.e., .rb files can be run directly, without pre-pending with "ruby". Minor issue to me, though you could easily write a script to registers the association wherever you are, but you might compromise your ability to run multiple environments.
A bigger deal is that in Windows, you lose right-click shortcuts. In some cases, like 7zip and Vim, it's an inconvenience, but some others, like gitTortoise, you're out of luck. No gitTortoise for you, just the git command line or built-in UI. I do like Tortoise from my SVN days, so you could go with a mixed strategy: install locally where you can, but keep the portable version as part of the env in case you find yourself in a situation where you can't install an app.
3. gVim settings. One of the pleasant surprises with Vim is that everything seems to be configurable, and thus it supports every feature I've thrown at it. Here's the ones I've added to my default settings, critical to me for usability:
4. network drives. If you keep the portable env on a local drive, you won't have the problem discussed here. Because you don't ever know whether you'll be dropping the env on the C: or the J:, on the root or in "/dev/my env/dir/subdir", you have to use relative paths and directory variables when. So far, this has never been insurmountable, but the most difficult challenge was when I dropped the env on a Windows network directory.
If you run a .bat file on a network drive, it can't change directory to there, so it defaults to the local Windows system directory, and all your relative paths are messed up. Here's some good documentation on it, but the quick answer was using
-----
It might seem that getting the portable environment right sucks up a bunch of time. That's true, but actually whenever you want a good personalized environment, you spend quite a bit of time installing and configuring your tools. The great part about a portable environment is that you won't have to do it again!
The main tweaks I've made so far:
1. Environment variables. For Java you need JAVA_HOME, etc. Typically, the installer creates system vars, so you could manually do this, but I do something even better: create small shell files that sets it as a temporary user var. Then you add a call to this file anywhere you need it. For example, instead of executing Eclipse directly, create a shell file that first calls the file to set the vars, then executes Eclipse. The beauty is that you can run multiple environments at the same time. For example, because you're using user vars and not using system vars, you can run your app with JAVA_HOME pointed to 1.5 version, and then run it again with JAVA_HOME pointed to 1.6.
You need versions for each OS you run on, but that is pretty basic shell writing.
2. Registration settings. The installer typically sets the extension to automatically invoke the executable; i.e., .rb files can be run directly, without pre-pending with "ruby". Minor issue to me, though you could easily write a script to registers the association wherever you are, but you might compromise your ability to run multiple environments.
A bigger deal is that in Windows, you lose right-click shortcuts. In some cases, like 7zip and Vim, it's an inconvenience, but some others, like gitTortoise, you're out of luck. No gitTortoise for you, just the git command line or built-in UI. I do like Tortoise from my SVN days, so you could go with a mixed strategy: install locally where you can, but keep the portable version as part of the env in case you find yourself in a situation where you can't install an app.
3. gVim settings. One of the pleasant surprises with Vim is that everything seems to be configurable, and thus it supports every feature I've thrown at it. Here's the ones I've added to my default settings, critical to me for usability:
colorscheme murphy " you can get very granular, but I just chose one of the included themesset number " turn on line numbers for all doc typesset expandtab " convert tabs into spacesset tabstop=2 " set tab widthset shiftwidth=2 " indentationset lines=60 " width of Vim windowset columns=80 " height of Vim windowset directory=..\..\temp " location of backup filesset backupdir=..\..\temp " location of temporary filesvnoremap < " de-indentation of highlighted text block using <vnoremap > >gv " indentation of highlighted text block using >4. network drives. If you keep the portable env on a local drive, you won't have the problem discussed here. Because you don't ever know whether you'll be dropping the env on the C: or the J:, on the root or in "/dev/my env/dir/subdir", you have to use relative paths and directory variables when. So far, this has never been insurmountable, but the most difficult challenge was when I dropped the env on a Windows network directory.
If you run a .bat file on a network drive, it can't change directory to there, so it defaults to the local Windows system directory, and all your relative paths are messed up. Here's some good documentation on it, but the quick answer was using
pushd "%~dp0" at the beginning of the batch file. This creates a drive letter and points to the dir that you're executing the batch file in. Now all your relatives paths are intact. -----
It might seem that getting the portable environment right sucks up a bunch of time. That's true, but actually whenever you want a good personalized environment, you spend quite a bit of time installing and configuring your tools. The great part about a portable environment is that you won't have to do it again!
Monday, January 18, 2010
Killer handheld tools
The Palm was almost the first killer handheld tool. As a glorified datebook / contact manager, it ran out of steam fairly quickly.
Blackberry was the first real killer handheld. It married the power of email (the first killer network app) with a phone, and did it so well that you bought the thing just for that. As a professional tool, it still has legs, though its reached the end of its consumer market.
iPod was the next. It married your Walkman / mp3 player with access to online music. No more disks. It did it so well, you bought it just for that.
iPhone was an easy next step. It married your iPod to your phone to a bunch of mini-apps. Truly revolutionary. It was also brilliant as a build-on strategy for iPod: even if you don't want the phone, you might still want some of the apps.
The Kindle is a hot tool right now, but you wonder whether reading books will be a narrow market like contact management. Amazon (the book web site) with Kindle is functionally the same as iTunes with iPod. The question is whether Amazon has an iPhone up its sleeve, which would bring the hammer down on all the wannabes. Amazon's iPhone might not necessarily be a product; it could also be a service. I just don't see what that is, though I suppose if I did, I would have a much different position in life.
A lot of phones are trying to marry themselves to online apps, again looking for that iPod + iTunes magic combo. That was a big selling point of the Palm Pre, with its Facebook connection. Dave Winer suggests a Twitter camera. These are all well and good, but in the age of mini-apps, it's hard for a single company to defeat the rest of the market. As long as Facebook and Twitter remain independent, a single vendor will have difficulty obtaining an advantage. Apple owned iTunes.
Google has the best shot. They have a very hot set of online applications -- email, docs. They have the hottest OS, which means more features and more mini-apps. And they have their own phones, which will work seamlessly with their products. So, they own the whole chain, which they can turn into a great user experience.
Squeezing into this mix is the upcoming Apple Tablet. I suspect this will mostly be an iMac tablet notebook with lots of multi-touch. Is that enough to make it a winner? As a build-on strategy to iPhone, it's a good chance to take, and this is the time to do it. But with Android coming on strong, iPhone may not have the coattails.
Blackberry was the first real killer handheld. It married the power of email (the first killer network app) with a phone, and did it so well that you bought the thing just for that. As a professional tool, it still has legs, though its reached the end of its consumer market.
iPod was the next. It married your Walkman / mp3 player with access to online music. No more disks. It did it so well, you bought it just for that.
iPhone was an easy next step. It married your iPod to your phone to a bunch of mini-apps. Truly revolutionary. It was also brilliant as a build-on strategy for iPod: even if you don't want the phone, you might still want some of the apps.
The Kindle is a hot tool right now, but you wonder whether reading books will be a narrow market like contact management. Amazon (the book web site) with Kindle is functionally the same as iTunes with iPod. The question is whether Amazon has an iPhone up its sleeve, which would bring the hammer down on all the wannabes. Amazon's iPhone might not necessarily be a product; it could also be a service. I just don't see what that is, though I suppose if I did, I would have a much different position in life.
A lot of phones are trying to marry themselves to online apps, again looking for that iPod + iTunes magic combo. That was a big selling point of the Palm Pre, with its Facebook connection. Dave Winer suggests a Twitter camera. These are all well and good, but in the age of mini-apps, it's hard for a single company to defeat the rest of the market. As long as Facebook and Twitter remain independent, a single vendor will have difficulty obtaining an advantage. Apple owned iTunes.
Google has the best shot. They have a very hot set of online applications -- email, docs. They have the hottest OS, which means more features and more mini-apps. And they have their own phones, which will work seamlessly with their products. So, they own the whole chain, which they can turn into a great user experience.
Squeezing into this mix is the upcoming Apple Tablet. I suspect this will mostly be an iMac tablet notebook with lots of multi-touch. Is that enough to make it a winner? As a build-on strategy to iPhone, it's a good chance to take, and this is the time to do it. But with Android coming on strong, iPhone may not have the coattails.
Wednesday, January 13, 2010
50% tax on bankers, US
I didn't think we'd see it, but someone will actually propose a 50% tax on banker bonuses.
I give this no chance of passing, if for no other reason than it's too late in the cycle. The bonuses are practically out the door. You don't want a situation where you have to clawback the money, or if it's the banks that would pay, they have a big unexpected bill suddenly due.
But, I'm still surprised to see it raised as a possibility.
Rep. Peter Welch (D., Vt.) introduced legislation Tuesday to slap a 50% tax on bonuses in excess of $50,000 paid to employees of any bank that received bailout money. The proceeds would be lent to small businesses struggling to find loans from commercial banks.
I give this no chance of passing, if for no other reason than it's too late in the cycle. The bonuses are practically out the door. You don't want a situation where you have to clawback the money, or if it's the banks that would pay, they have a big unexpected bill suddenly due.
But, I'm still surprised to see it raised as a possibility.
Tuesday, January 12, 2010
Out of business
I passed by an empty store front that used to be a restaurant. Above the front door and window, they had a big awning with the word "RESTARANT".
Maybe they had the best food in the world there. Maybe the nicest wait staff, and the most organized owners. Maybe.
But I'd be willing to bet no. Even if they hadn't been out of business, I would hesitate to go there just based on the sign. Can one typo really mean that much? Well, if they can't bother to spell correctly a few words that they're paying thousands of dollars for, what are the odds they're going to do the $10 dinner really well? Sure, if all my friends ate there and assured me it was delicious, I'd give it a shot. But chances are they won't get that shot from my friends either.
One reason I like to give code exercises on job interviews is to see the coding grammar of the applicant. Basically, I want to know how easy to read their code is. So I also look to see if they've modularized, or they just have one big function.
I also want to see how complete it is. What kinds of errors did they anticipate? How robust is the solution? Is it extensible?
What I don't do is give knowledge tests. In fact, I like to sit someone at a computer, and they can have all the time they want to google up however much help they need to finish the code. Because, frankly, if you can walk in not knowing the language and write me a very small mini-app in a few hours, well, you're probably the right kind of person we want to hire anyway.
But, more importantly, even with the time constraint removed, and knowing that this work will be reviewed, it is surprising how many people will sloppily have typos and lazy naming. All single-letter variables. No naming convention. Very basic words misspelled. No indenting.
Does this stuff matter? Some might say no, but I think if you can't bother to get this right when you have no time constraint, and your own money and career are on the line, what are the odds you'll do it under pressure and it's someone else's (the company's) money at risk?
Maybe they had the best food in the world there. Maybe the nicest wait staff, and the most organized owners. Maybe.
But I'd be willing to bet no. Even if they hadn't been out of business, I would hesitate to go there just based on the sign. Can one typo really mean that much? Well, if they can't bother to spell correctly a few words that they're paying thousands of dollars for, what are the odds they're going to do the $10 dinner really well? Sure, if all my friends ate there and assured me it was delicious, I'd give it a shot. But chances are they won't get that shot from my friends either.
One reason I like to give code exercises on job interviews is to see the coding grammar of the applicant. Basically, I want to know how easy to read their code is. So I also look to see if they've modularized, or they just have one big function.
I also want to see how complete it is. What kinds of errors did they anticipate? How robust is the solution? Is it extensible?
What I don't do is give knowledge tests. In fact, I like to sit someone at a computer, and they can have all the time they want to google up however much help they need to finish the code. Because, frankly, if you can walk in not knowing the language and write me a very small mini-app in a few hours, well, you're probably the right kind of person we want to hire anyway.
But, more importantly, even with the time constraint removed, and knowing that this work will be reviewed, it is surprising how many people will sloppily have typos and lazy naming. All single-letter variables. No naming convention. Very basic words misspelled. No indenting.
Does this stuff matter? Some might say no, but I think if you can't bother to get this right when you have no time constraint, and your own money and career are on the line, what are the odds you'll do it under pressure and it's someone else's (the company's) money at risk?
Thursday, January 7, 2010
40 things all working together
A friend of mine is a high school inner city principal. Inner city meaning Newark, NJ, a pretty tough area.
We were discussing what works at his school, and I asked him whether uniforms had an effect, given the studies that showed that they didn't. He replied, "Uniforms by themselves don't do anything, but as part of the overall picture, they're vital. They're one of 40 things that you have to do right. Working together, they make all the difference."
That reminded me of Agile practices. I've known several teams where a decision was made to hold a daily scrum. Didn't do a lot. People grumbled about the pointlessness and hype.
Like many big institutions, my bank is not Agile, and so I introduced pieces of it slowly. I found weak to no benefit until I had a decent list in place:
* daily scrum
* strictly focused discussion during scrum
* burndown charts
* self-organized teams of 3 to 4 developers
* 2- to 3-week sprints
* automated daily builds and at check-in
* product backlog
* iteration planning with the product manager
* team iteration reviews
* product demos with the product manager and users
* decision to have release or another sprint after each iteration
* cross-functional skills
Once I had these things in place, I really noticed clear improvement.
But if you had added any one or two of them to our previous team and structure, no, it wouldn't have made any difference.
We were discussing what works at his school, and I asked him whether uniforms had an effect, given the studies that showed that they didn't. He replied, "Uniforms by themselves don't do anything, but as part of the overall picture, they're vital. They're one of 40 things that you have to do right. Working together, they make all the difference."
That reminded me of Agile practices. I've known several teams where a decision was made to hold a daily scrum. Didn't do a lot. People grumbled about the pointlessness and hype.
Like many big institutions, my bank is not Agile, and so I introduced pieces of it slowly. I found weak to no benefit until I had a decent list in place:
* daily scrum
* strictly focused discussion during scrum
* burndown charts
* self-organized teams of 3 to 4 developers
* 2- to 3-week sprints
* automated daily builds and at check-in
* product backlog
* iteration planning with the product manager
* team iteration reviews
* product demos with the product manager and users
* decision to have release or another sprint after each iteration
* cross-functional skills
Once I had these things in place, I really noticed clear improvement.
But if you had added any one or two of them to our previous team and structure, no, it wouldn't have made any difference.
Tuesday, January 5, 2010
The Year in Ideas
Toward the end of every year, the New York Times publishes a magazine dedicated to interesting ideas of the past 12 months. It's a wide-ranging list, with lots of things you'd never think about. Here were my favorites from this year:
* Randomly promoting people gives better results than the system you have.
* Printable batteries. And you thought e-ink was pretty impressive.
* Older workers are just as productive. Equally important: age-mixed workforces outperform homogeneous ones. So don't staff that start-up with just college kids!
* What Google search teaches us about species preservation.
* Your yearbook photo predicts your likelihood of divorce.
* "I will regard the experiment as a success," he wrote, "if [comments on my blog] leads to anything that could count as genuine progress toward an understanding of the problem." Six weeks later, the theorem was proved.
* Randomly promoting people gives better results than the system you have.
* Printable batteries. And you thought e-ink was pretty impressive.
* Older workers are just as productive. Equally important: age-mixed workforces outperform homogeneous ones. So don't staff that start-up with just college kids!
* What Google search teaches us about species preservation.
* Your yearbook photo predicts your likelihood of divorce.
* "I will regard the experiment as a success," he wrote, "if [comments on my blog] leads to anything that could count as genuine progress toward an understanding of the problem." Six weeks later, the theorem was proved.
Sunday, January 3, 2010
Building a portable dev environment
I started a little coding side-project, and came to the idea of putting the whole dev environment on a usb drive. That way, I could plug it in wherever I am, on any computer, and have all the tools I needed without any additional setup.
An additional benefit: to bring another developer onto the project, I could just drop the contents of the drive on their computer. They'd be instantly ready to roll, with close to zero start-up effort.
I have a 8GB drive, but so far the environment uses only about 500MB. Here's what I installed:
* JRuby. The project calls for Ruby, and I went with JRuby because it's extremely portable: just extract the binary zip to wherever you need it. You might be able to setup Ruby on a flash drive, but the options sounded more experimental.
* Java SDK. Turns out you can direct the java installer to point right at your USB drive. Here's more detailed instructions. Very easy, ran across only one bug -- closed by Sun though not fixed -- that didn't have any effect on performance / function.
* Eventually, I'll need a j2ee container, but I feel pretty confident I could get resin or tomcat or glassfish working on a drive. Installing webapps on a j2ee container involve nothing more than just a .war file drop, of course, so dropping in Rails should be a snap. I don't need Rails just yet, but I'll post an update when I try that.
* Git. Git offers a portable version, and is more appropriate for distributed source control than something like subversion. If I used subversion, that would mess up the whole goal of keeping it on a flash drive. I wouldn't be able to drop the env to a friend at a moment's notice, and then we'd need a central server stored somewhere. Git might need some additional config if others join, but for now it's just me.
Of course, using Git might seem like overkill to some. I like to save versions frequently, and I quickly get tired of and confused by all the .old and .dated files and directories lying around. Git will eliminate all that clutter.
* Firefox. While coding, you always end up with a ton of reference and investigation links. I thought taking my browser with me would be better than storing links on a 3rd party site, which I've never really liked. IE is not a possibility, and I prefer Firefox for the add-ins anyway. This ended up working very well (as long as you bump up the cache, which defaults at 0), except for one problem, which might be considered serious. If you run the portable version, with all your dev-related links, and then you try to run your local version, Firefox just runs another instance of the portable version. So, you can't get to any locally-installed links without closing the portable version. One workaround would be to store all links on all your Firefox installations, but I wasn't really looking to store, for example, my company's HR website on my dev env, especially if I want to drop the whole thing to another developer at some point. Will have to think about this one a bit more.
* gVim. I want to use the same code / text editor on any computer; your productivity increases as your expertise increases. Yes, going to gVim feels a little like using WordPerfect on the dawn of Word's impending domination, but gVim is much more robust than Notepad++, which might be the only other possible contender meeting these two criteria: free and portable. Frankly, I found very few features that gVim didn't have or couldn't be added to the default configuration. A robust text editor decreases the likelihood of needing to fall back to a full-blown IDE, which I'm not sure would run well on a flash drive (though some say it works).
That's where I am so far. Other than the remaining Firefox issue, the results have exceeded what I thought was possible. I'll provide updates as my env requirements grow or unexpected issues pop up.
An additional benefit: to bring another developer onto the project, I could just drop the contents of the drive on their computer. They'd be instantly ready to roll, with close to zero start-up effort.
I have a 8GB drive, but so far the environment uses only about 500MB. Here's what I installed:
* JRuby. The project calls for Ruby, and I went with JRuby because it's extremely portable: just extract the binary zip to wherever you need it. You might be able to setup Ruby on a flash drive, but the options sounded more experimental.
* Java SDK. Turns out you can direct the java installer to point right at your USB drive. Here's more detailed instructions. Very easy, ran across only one bug -- closed by Sun though not fixed -- that didn't have any effect on performance / function.
* Eventually, I'll need a j2ee container, but I feel pretty confident I could get resin or tomcat or glassfish working on a drive. Installing webapps on a j2ee container involve nothing more than just a .war file drop, of course, so dropping in Rails should be a snap. I don't need Rails just yet, but I'll post an update when I try that.
* Git. Git offers a portable version, and is more appropriate for distributed source control than something like subversion. If I used subversion, that would mess up the whole goal of keeping it on a flash drive. I wouldn't be able to drop the env to a friend at a moment's notice, and then we'd need a central server stored somewhere. Git might need some additional config if others join, but for now it's just me.
Of course, using Git might seem like overkill to some. I like to save versions frequently, and I quickly get tired of and confused by all the .old and .dated files and directories lying around. Git will eliminate all that clutter.
* Firefox. While coding, you always end up with a ton of reference and investigation links. I thought taking my browser with me would be better than storing links on a 3rd party site, which I've never really liked. IE is not a possibility, and I prefer Firefox for the add-ins anyway. This ended up working very well (as long as you bump up the cache, which defaults at 0), except for one problem, which might be considered serious. If you run the portable version, with all your dev-related links, and then you try to run your local version, Firefox just runs another instance of the portable version. So, you can't get to any locally-installed links without closing the portable version. One workaround would be to store all links on all your Firefox installations, but I wasn't really looking to store, for example, my company's HR website on my dev env, especially if I want to drop the whole thing to another developer at some point. Will have to think about this one a bit more.
* gVim. I want to use the same code / text editor on any computer; your productivity increases as your expertise increases. Yes, going to gVim feels a little like using WordPerfect on the dawn of Word's impending domination, but gVim is much more robust than Notepad++, which might be the only other possible contender meeting these two criteria: free and portable. Frankly, I found very few features that gVim didn't have or couldn't be added to the default configuration. A robust text editor decreases the likelihood of needing to fall back to a full-blown IDE, which I'm not sure would run well on a flash drive (though some say it works).
That's where I am so far. Other than the remaining Firefox issue, the results have exceeded what I thought was possible. I'll provide updates as my env requirements grow or unexpected issues pop up.
