Redirect timewaster sites with 3 Chrome extensions

I have a lot of sites that by themselves, aren’t terrible for me. I won’t spend hours on Facebook or Buzzfeed or Twitter or Gawker or Huffington Post…but I have found myself spending hours on Facebook AND Buzzfeed AND Twitter AND Gawker AND Huffpo.

I looked at some helpful productivity extensions, and I like this combination:

1. New Tab Redirect automatically redirects all new tabs to my fitness website instead of showing me my most visited sites in Chrome, which was distracting and sometimes led to Facebooking where none was intended.

2. StayFocusd gives me a time limit for how much time in a day I can spend on a collection of timewaster sites. Here’s my list of sites on which I can only spend 10 COLLECTIVE minutes per day. Yes, this means I have to compose my tweets before I go sit on Hootsuite for an hour mindlessly clicking.


3. After StayFocusd ticks over for the day, trying to go to those sites lands me on a StayFocusd ad page. So, I use Switcheroo Redirector to selectively redirect any URL to another URL. I fed in the StayFocusd ad page and now when I try to mindlessly hit Facebook after the time limit is up for the day, I land on the NOAA astronomy page looking at a current picture of the sky.


How to become a web application developer: #TarahTalks in first live broadcast

I am starting a webinar series this Wednesday from 3:30PM-4:00PM Pacific on Google Hangout. The first topic is: How to transition into web application development. I’ll take questions via the Q&A application. The first 15 minutes will be a discussion of how to specialize in web applications and how to be recruited by companies looking for web app developers, with a focus on startups and open source technologies. I’ll then take questions for 15 minutes. I am really looking forward to this!

I’ll be making this an ongoing series. I’ll do one each Wednesday at 3:30PM, and you can find my Google+ page here with upcoming events. Next Wednesday, April 30th, will be How To Get A Startup CEO To Recruit YOU, and May 7th will be How To Recruit A Mentor. You can see upcoming events in the sidebar of my blog here as well. After spending a lot of time helping folks with mentorship and tech, I tend to get asked many of the same questions in different ways. Some of these questions are:

  1. How do I get a tech mentor that actually cares about my career?
  2. How do I transition from college/junior dev status into web application development/front end development/DBA/operations/DevOps?
  3. How do I have an online presence when I don’t feel safe putting my contact information online?
  4. How do I build a brand around myself?
  5. How do I move from programming and hardcore technical work into tech management and executive status?
  6. How do I handle cyberbullying, keep my temper in the face of brogrammer provocation, and stay classy? [I have an opinion on this but possibly haven’t quite managed the ‘staying classy’ bit…]
  7. How do I make recruiters come to me instead of the other way around?

I end up giving the same 15-minute speech repeatedly to the people who ask these questions, and I’m getting pretty glib at it. So, it makes some sense to start making this knowledge available to more people, since folks want to know. In addition, I’ll be able to take questions and interact with more people, and I love efficiency just as much as Seven Of Nine. My YouTube channel is here, with the older Hack The People long seminars and these new webinars.

My last name is correct, and your DB validation is stupid.

My name is Tarah Wheeler Van Vlack. My name matters, and no, you cannot just leave some of it out if you don’t feel like using all of it, spelling part of it wrong, or if your system doesn’t handle names as long as mine. I have the same number of letters and one syllable less in my name than Hillary Rodham Clinton. She doesn’t hyphenate either.

I added my husband’s name onto mine when I got married. I didn’t change my name or hyphenate–first, because I didn’t bloody well feel like it, second, because hyphenation can change search results and destroy SEO, and third, because hyphenation can indicate spamminess when found in URLs–like those that would have made up my name.

Last year, San Diego Comicon’s registration system couldn’t process
names with hyphens, special punctuation, or spaces.
I joined my voice to those saying that if there had been even one single woman on the SDCC tech team or handling the database, the thought would have been raised that perchance, just possibly, women might also want to come to Comicon, and that they sometimes have hyphens and spaces in their last names.

Recently, I switched over my personal email and site from to I wasn’t really sure what to do about that. My name isn’t just Tarah Wheeler anymore, but DAMN, would have been one hellacious email address. Liz Dahlstrom, my co-founder and business partner, was talking to me one day, and I was hemming over trying to get a new email address. Just my first name is already taken. She said, “Why don’t you get TheTarah.Com? It’s short, easy to remember, and no one will misspell it.” Twelve or thirteen minutes later,
I was switching the MX records over on Such a short email address–you have to love it.

We talk about branding as a woman in technology, and I do worry about search results. There’s a more serious problem, however. As of right now, Enterprise Car Rentals, Bank Of America, Bellevue College, the US government’s student loans processing, Puget Sound Energy (my power bill), the Oregon and Washington Secretary of State’s office (my company tax and registrations), my health care provider, Verizon, and many other major service providers that I have no choice but to do business with simply do not allow for spaces or punctuation in names. I am not usually one to pitch a fit over something that seems to be small, and there are matters in the world that are greater and more important than validity checking in SQL. Still, in so many places on the Internet, I don’t get to use my name. Every time I have to edit or change my name because someone didn’t think about the fact that women have to
have multiple names is another time that I have to track or elide or alter my online identity.

UPDATE: Fourteen hours after I originally posted this, I went to order a new debit card. AAARRGHH. Click on the image below to embiggen. I have to go into a branch now; I cannot order a card online.

Bank of America   Alaska Airlines® Debit Card   Your Information

This isn’t just a female problem; people with apostrophes and commas in their names all have this problem. I have it extra because I also have a
Dutch last name. Maybe it just seems a little more unfair because so many people say, “I’ll just put down Tarah Wheeler” when I tell them my whole name. I say “No, my full name is Tarah Wheeler Van Vlack, and you’ll put my full name down,” but there’s only so much bitchiness that even I can contain and exude in one day, and I shouldn’t have to do so to defend my name. I also shouldn’t have to call it ‘bitchiness’, but that’s basically what it feels like. It’s the same thing that happened to Quvenzhané Wallis at the Oscars, when she was instantly dubbed “Little Q” rather than being given the respect of being called her name. Having your name taken away from you is enraging, dismissive, and is an assertion that you have less power than the person to whom you’re speaking. This isn’t something that often happens to men. It happens to me about once every three phone conversations.

Imagine “Benjamin Frederickson” on
the phone with Comcast and scheduling a repair visit. He’s asked to give his name and number. “Wow, buddy, that’s a hell of a long name. I’ll just put down Ben Freds for the repairman to call.” Benjamin Frederickson has the same number of letters and one more syllable in his name than I do, but doesn’t this seem like an absurdity to you? Like something that simply doesn’t happen? In fact, I just went and Googled Benjamin Frederickson to entertain myself. Turns out, there actually is a Benjamin Fredrickson (one fewer ‘e’). I think I’m going to ping him to see what he has to say about this.

The internet is my home, and I do not like feeling like an unwelcome guest. At each site I visit where I must change my name or squish it down or lose my capitalizations or remove the spaces or–and for some reason this really jerks my chain–when I see that hyphens are automatically added in where I have put in spaces, I wonder who carelessly thought that no one would need to enter a name in that wasn’t a
heteronormative single capitalized word. One day, I am going to have zero problems adding my full name on a car rental or government website. I am going to go to the About Us page, and I am going to see that the database engineer’s name is Ms. Destinnee Chang-O’Driscoll. Then, I am going to paste a giant grin on my face, take a selfie, email it to that woman, and thank her for kicking ass at SQL.

Look, the way it works is this. I am identified by several names. My first name is me. My second name is my dad. My third name is my husband. I live in a world where this is the way it works. I love my dad, I love my husband, and I love me. I am fine with my name, I made my choices, and I’m not going to engage in a giant war to have us all get a UUID. I have a better war to fight. I do, however, want you to permit me to spell my name the right way in your first and last names fields on your website. Show some respect, and stop taking my name away from me.

Apache Virtual Hosts with SNI and SSL on Ubuntu 12.04 in Rackspace

Here’s a little howto: I was having the devil of a time earlier today configuring an SSL cert for a site Lorraine and I are working on right now. My problem is that I’ve never configured an SSL cert before, and proceeded to jump right on in with a whole lot of enthusiasm and zero knowhow.

It turns out that because the site we’re working on is on a Rackspace cloud server, and we’re hosting several sites on the same server using Apache virtual hosts to configure http requests via hostname as opposed to IP address, there is some extra configuration to be done. Add to that the fact that we’re serving secure and insecure content at the same hostname, and you have a recipe for a headache. So, here’s the way I did it.

First, let me list the useful tutorials and links, and then I’ll post the config files and examples that worked.

The most useful:

Read this to understand why you’re doing this and what a certificate is:

Pro tips:

  1. You don’t need to turn on the ”
    Listen 443″ switch in apache2.conf; that’s already on and enabled with mod_ssl, the Apache module that handles SSL.
  2. If you keep seeing people telling you to edit your ssl.conf, what they mean in Ubuntu is /etc/apache2/sites-available/default-ssl. There’s already the stub there.
  3. Generate a CSR easily and simply by pasting this into a bash shell: openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key
  4. You have to create a symbolic link between the default-ssl in sites-available and sites-enabled like this:
  5. sudo ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/000-default-ssl

Ok, now here’s the example default-ssl file:

ServerAdmin webmaster@localhost
DocumentRoot /path/to/your/website/root/

Options FollowSymLinks
AllowOverride None

Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined

Alias /doc/ "/usr/share/doc/"

Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from ::1/128

SSLEngine on
SSLCertificateFile /path/to/cert
SSLCertificateKeyFile /path/to/key/generated/from/CSR
SSLCertificateChainFile /path/to/bundled/certs/

SSLOptions +StdEnvVars

SSLOptions +StdEnvVars

BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

And here’s the trippy part: you actually don’t need to edit your current virtual host file (presuming you have it correctly configured to serve nonsecure content via port 80) which should be living in sites-available. I have the feeling that if I was trying to serve more than one secure site on this server that I’d need to configure a NameVirtualHost, but since I don’t, all requests on port 443 can just get shoved to the document root of the secured site. I’ll explore that later, I suppose.

How To Build A Ruby Server With RVM On Kubuntu 12.10

So I’m building a Ruby server right now for the first time. I’m going to list out here the resources I used as a skilled web dev to get this up and running right away. These links do assume that you know what you’re doing in the cloud, but if so, they’re the best way to get running fast.
This is the best link:

And here are the steps:
Update, upgrade, dist-upgrade
ufw default deny and add 80 and ssh port
apt-get install build-essential git-core curl
bash -s stable < <(curl -s echo '[[ -s "/home/andre/.rvm/scripts/rvm" ]] && source "/home/andre/.rvm/scripts/rvm"' >> ~/.bashrc
source ~/.bashrc
sudo apt-get install libsqlite3-dev
rvm pkg install zlib
rvm reinstall $(rvm list strings | tr "\n" ',')
rvm reinstall 1.9.3 --with-openssl-dir=/usr/local
rvm all-gemsets do rvm gemset pristine
gem install sqlite3-ruby -- --with-sqlite3-dir=/usr/local/lib
rvm gemset create rails31
rvm gemset use rails31
rvm current
gem list
echo "gem: --no-rdoc --no-ri" > ~/.gemrc
rvm pkg install openssl
sudo apt-get install -y libssl-dev
rvm reinstall $(rvm list strings | tr "\n" ',')
rvm all-gemsets do rvm gemset pristine
gem install rails
bundle install
rails new NewProject -d sqlite3
echo "gem '
therubyracer'" >> Gemfile

HOWTO: set up a cloud server with WordPress at Rackspace

You’re probably here because you are finally at the point where you need root access to your web server so that you can install applications like MediaWiki or WordPress or Joomla or any other CMS. If you have a website that you want to move away from a hosted environment, this is how to set yourself up so that you control every aspect of your site.

    1. Create an account at Go to Cloud Servers and create a new server. If you need help with this, though it’s very self-explanatory and easy on their site, you can always chat with their 24-7 online chat support. Note the administrative password and the IP address of the server you have created.
    2. Open a bash terminal and SSH into your shiny new server. “ssh root@YOURSERVERSIPADDRESS”. Enter the password.
    3. Create a user for yourself. “useradd -m -s /bin/bash yourname” and create a password for yourself  “passwd yourname”.
    4. Enter “su
      yourname”. Now, you are logged in under your name and not as root.
    5. Enter the following:
      sudo apt-get update
      sudo apt-get upgrade
      sudo apt-get install tasksel
      sudo tasksel install lamp-server
      sudo apt-get install php-mail python-software-properties unzip
      sudo a2enmod rewrite
      sudo apt-get autoclean
      sudo apt-get autoremove
      mkdir /home/yourname/yourwebsitename
      mkdir /home/yourname/yourwebsitename/blog
      cd /home/yourname/yourwebsitename/blogsudo
      sudo tar -zxvf latest.tar.gz .
    6. That has cleaned up your server and installed a web server as well as WordPress. Enter passwords for your MySQL database and record them.
    7. “sudo service apache2 restart” #You will get an error that local server has not been set up.
      echo “ServerName localhost” | sudo tee /etc/apache2/conf.d/$servername
      sudo service apache2 restart #Should be no error now
    8. r

    9. cd /etc/apache2/sites-available/
      sudo nano yourwebsitename
    10. Copy this with CTRL+SHIFT+V into the terminal:
    11. ServerAdmin webmaster@localhost
      ServerAlias *
      DocumentRoot /home/yourname/yourwebsitename/
      php_value upload_max_filesize 1M

      Options +FollowSymLinks
      AllowOverride All
      Order allow,deny
      allow from all

      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      allow from all

      ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

      AllowOverride None
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
      Order allow,deny
      Allow from all

      ErrorLog ${APACHE_LOG_DIR}/error.log

      # Possible values include: debug, info, notice, warn, error, crit,
      # alert, emerg.
      LogLevel warn

      CustomLog ${APACHE_LOG_DIR}/access.log combined

      Alias /doc/ “/usr/share/doc/”

      Options Indexes
      MultiViews FollowSymLinks
      AllowOverride None
      Order deny,allow
      Deny from all
      Allow from ::1/128



    12. CTRL+X and save the file as
    13. cd /etc/apache2/sites-enabled/

sudo ln -s /etc/apache2/sites-available/ /etc/apache2/sites-enabled/
sudo service apache2 restart

    1. Where have you created your domain name account? If it’s with GoDaddy, login to your GoDaddy account and click on Domain Manager. Click on the website name and enter the dashboard (or follow whatever practice your domain registrar uses to get to where you can edit the zone file). Click on “Edit Zone File”.
    2. Replace the IP address in the zone file with the IP address of your cloud server. Save the zone file.
    3. “nano /home/yourname/yourwebsitename/index.php” and copy this into the file.

Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
* @package WordPress
* Tells WordPress to load the WordPress theme and output it.
* @var bool
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */

  • In a few minutes, you should be able to enter your URL into any browser, and see the WordPress installation page. Install using the database name and password you’ve created in PHPMyAdmin or in command line for MySQL.
  • I recommend Elegant Themes to get a beautiful and professional look for your site instantly.


Why Gossip Girl needs better faux techspeak.

It’s been my experience that when TV shows and movies get software development and web development wrong, they get it REALLY wrong.

A week ago, I rewatched The Dark Knight with two of my gaming buddies, both of whom are skilled developers. While we loved the movie, popcorn was thrown when Christian Bale rasped that a certain database was null-key encrypted. NKE is total fiction. It turns “Hello World” into “Hello World”, in case you were wondering. At least in the movies, they bother to invent some techno-jargon.

Now for the painful admission: I watch Gossip Girl. It is a vapid soap opera that I positively adore, and part of the major season story arc is the loss of control over the Gossip Girl website by the original (anonymous) owner, voiced by Kristen Bell of Veronica Mars fame. [See? I have legitimate geeky reasons for watching GG!] Any developer can see that there’s some sort of CMS that is used to post information; it’s likely the TV equivalent of WordPress. In a moment of brainmeat-deadness, Serena is IMed by Gossip Girl, and asked to return “the password to my site.”

Now, this is totally imbecilic on several fronts. First, if you’re the person who set up the CMS, you have administrator rights on an account that is different than your posting account. All GG would have to do is login using the alternate CMS admin account and change the password herself. Second, if she’s lost the admin account, she can tunnel to the server and change the authentication for any account through either the MySQL (or whatever DB) admin prompt or PHPMyAdmin if you’re as lazy as me. Third, if she’s the one who set up the
site, all she has to do is nuke the site at the server level after copying or exporting the DB and template files, and rebuild it (or talk to the hosting company). Fourth, and the worst-case scenario, if her hosting account or cloud server itself has been hacked, she can simply build another server and redirect the DNS to that location. In none of these cases does she ever lose control of the URL itself.

I am irritated here because I see Gossip Girl as a show that is primarily targeted to women and young people; I know I’m stirring up a tempest in a teapot, but I would like to see the same level of effort put in to creating fake technobabble in shows directed at young women as when they’re pointed towards a male demographic. I guess that may be unreasonable, but the truth is that we all absorb messages from pop culture, and the lack of care taken in shows like these betray a feeling amongst the show writers that no femmes would notice the difference anyway.

Well, I did. So there.

To Gossip Girl; I can hook a sister up with RSA-encryption and a 4096-bit key. That would keep nosy socialites out of your site. Also, more Bass, please.

XOXO, Cowgirl Coder.

How to move WordPress sites between cloud servers using Ubuntu 11.10 and PHPMyAdmin

Here’s a quick howto:

I use Rackspace as my cloud service; I was moving a few sites from one server using Ubuntu 10.04 LTS (Lucid Lynx) to a new one using 11.10 (Oneiric Ocelot). I hit a few issues, so I thought I’d tell you how to export a WordPress site in its entirety and move it between two LAMP servers.

  1. Open a file manager on your local machine, and open both remote locations.
  2. Copy the root and all files of the site to your new server in the same location.
  3. Copy the sites-available virtual host file from /etc/apache2/sites-available/ directory to the same location on your new server.
  4. Create the symbolic link in sites-enabled by changing into /etc/apache2/sites-enabled/ and using this command: “sudo ln -s /etc/apache2/sites-available/yourhostfile yourhostfile”.
  5. Open PHPMyAdmin for your old server in a browser window. Login, and open the database for the site you want to move.
  6. Go to the Export tab. Assuming you’re using UTF-8 encoding (and that’s a very safe bet), all you have to do is ensure that the Add DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT box is checked under Structure, and that all options are highlighted in the Export box. Export the uncompressed database and save to a convenient location.
  7. Open PHPMyAdmin in your new server, login, and create a new database with the same name as the one you’re importing.
  8. Import the database you exported.
  9. Create a user on that database with the same name and password.
  10. Edit the DNS zone file for your site to point to the new IP address for your new server.
  11. SSH into your server, and use this command: “sudo service apache2 restart”.

Hit Ctrl+F5 once you think the DNS records will have propagated, and ensure it worked.


How to recruit a software developer. (Part 2)

We’ll continue with the problem of incentivization for recruiters.

Recruiting must be the most outsourced, underfunded, middleman-heavy profession there is. There are several frustrations that go along with being heavily recruited by people who do not know or care whether you fit a given job description, and they range from the merely careless and time-profligate to the truly unethical.

(1) CARELESS: Recruiters who mass email everyone on CareerFinder and Monster with the word “Ruby” in their profile for an Austin, Texas-based junior web developer 3-month contract gig specializing in Ruby on Rails.

I am not a Ruby developer, I will not move to Austin, Texas, especially for a three month contract, and I’m not a junior ANYTHING. I have some skills with Ruby, meaning that I can install the necessary scripts, edit them, run them to operate a site, and I know enough to know when I need to call a specialist. This makes me able to list
Ruby as a general low-level skill on my resume, but does not in any way qualify me for a development job on a site that solely uses Ruby for an environment. However, that keyword hits big with recruiters, and I get probably 15 emails a day from recruiters trying to get me to take a job for which I am unqualified and in a location to which I would not move. A simple glance at my resume with the words “Senior Development Manager and Web Architect” emblazoned across the top and a brief scan of my skillset tells anyone I am a skilled coder who has been moved up the chain to management, and would likely help those recruiters to target me far more efficiently.

(2) CARELESS: Recruiters who speak such poor English that their emails are unreadable–and that sometimes includes native English speakers.

I am glad that you’re “pleased for making time and hoping you will be helping me networking to fill VERY IMPORTANT positino immediatly in NEW YORKCITY as JAVA DEVELOPAR” [not a joke; I seem to be
perpetually emailed by the recruiter version of Paul Christoforo], but I don’t need it filling my day. At the very minimum, have your job posts reviewed for content and grammar before sending them to thousands of developers.

(3) UNETHICAL: Recruiters who are paid by the emails they generate, not by the positions they fill.

This is a common problem among firms that have outsourced to the Philippines, India, Bangladesh, Malaysia…in fact, name your popular outsourcing destination in Asia, and you’ll find these recruiters, who are paid to send out as many emails as possible. They’re no better than spam, but because they’re targeted to you and have your email address, you can’t filter them the way you would filter a Cialis or pr0n ad.

(4) CARELESS: Recruiters who have not paid attention to your preferred location–and don’t care.

I will not take a job in South Dakota; I’m sorry. I’ve lived in several midwest states and think that South Dakota is quite eerily beautiful. I
will not be transferring my life, my career, and my love of well-produced opera to Sioux Falls any time soon.

(5) UNETHICAL: Recruiters who expect you to do their job for them.

My final post will be the most egregious example I’ve found, combined with a horrific example of #6. The most common variety is this:

To better represent you, kindly fill out the skills inventory below. Thank you

1) Agile/Scrum (Beginner/Intermediate/Expert) (Years of experience/Date Last used)
2) Software Development Proj Mgmt (Beginner/Intermediate/Expert) (Years of experience/Date Last used)
3) Web-Based Application architecture knowledge (Beginner/Intermediate/Expert) (Years of experience/Date Last used)
4) Test Driven
Development / XP (Beginner/Intermediate/Expert) (Years of experience/Date Last used)
5) Java development principals (Beginner/Intermediate/Expert) (Years of experience/Date Last used)
6) Release Management (Beginner/Intermediate/Expert) (Years of experience/Date Last used)


Remember that I get about 50 or so of these emails per day; this person doesn’t even want to read my resume, and instead wants me to fill out his paperwork for him. Note: this was for a position in California, making it irrelevant anyway.

(6) UNETHICAL: Recruiters who expect you to prep and interview with no information about the company.

This is the worst one. How can I know if I want to take a position if I’m not told: (1)
what the salary will be, (2) where the company is physically located, (3) what benefits are available, and (4) to whom I would be reporting? This is just another version of wasting my time. I don’t talk anymore to recruiters who are secretive; they are occasionally fronts for disreputable companies who want a chance to sell you before you find out what their online reputation looks like.

Next, the traits of successful recruiters.

What is it like to be a freelance web developer?

I want to take a moment away from my usual howtos and commentary to offer some encouragement and etiquette tips for my fellow web developers, especially the ladies starting out.

Doing freelance work with the occasional longer contract is difficult to break into, requires a thick skin, and demands careful reputation-gardening. Before I reached the point where I was getting contract requests and recruiter emails on a daily basis, work was thin on the ground. I did IC (individual contributor) work, and it’s taken a lot of time and effort to reach the systems architect and senior management positions for which I am now being recruited.

I maintained three principles which I use every day, especially when I have to deal with aggressive recruiters, tight-lipped company reps, and the inevitable professional relationship snafus.

(1) Say something nice about someone every day.

In late 2009, I had a tough personal situation to deal
with, and after it was over, I knew I could react one of two ways. I could be angry and sour to anyone who asked, with the excuse that I was having a tough time, or I could find a way to turn the situation into personal development. I started looking over my friends list on Facebook, and made a point to say something nice about a friend every day. It got me back in contact with people I hadn’t talked to in quite a while, provided encouragement, and sparked memories. Likewise, when I’m dealing with professional issues, I write recommendations for my colleagues on LinkedIn. Many people I know work extremely hard without a great deal of positive reinforcement or top-down encouragement due to the nature of contracting and freelancing. No one ever tells them that they have serious skills, that they’re a pleasure to work with, and that you’re glad to have them on your IM contacts list for sticky coding questions. Nearly every company has a policy of never giving any feedback whatsoever on performance to anyone
who’s not an FTE–this is to avoid legal issues. That’s good for the legal department, but doesn’t provide much in the way of constructive criticism for personal growth and improvement in skills. This is my way of helping others with this problem. Say nice things about your colleagues and professional contacts; it draws you together and provides opportunities to turn sometimes difficult situations into networking goldmines.

(2) Be courteous to recruiters, but do not let them run your life.

I am deluged with emails from recruiters on a daily basis. This is the very definition of a high-class problem; I am quite aware. Still, imagine getting a variant on this email about five times a day:

“Hi! My name is XXXX, and I am from XXXX Consulting, Inc. I came across your resume, and believe that you may be absolutely perfect for this (.NET, C#, Java, OSS, MS, frontend, backend, lead/IC/senior/junior, DBA, FTE/Contract) development position I have. Please send me an updated copy of your
resume as well as current contact information, salary requirements, availability and geographical location, and a point-by-point answer to each of the ten questions below which will determine your suitability for this position.”

Now, these people are overworked, underpaid, and are dealing with a paradox whereby the people most likely to respond to them are not currently employed at high-paying and prestigious positions. However, almost all of my best contracts have come from recruiters. This means that I absolutely do want to talk to them, if they have something I need to know–but answering them all in detail would be more than 10% of my day.

I’ve come up with the perfect solution. I send a Gmail canned response to all recruiters thanking them for their interest in me, giving them a quick rundown on the positions I will accept, my base salary/equity/wage/benefit requirements, a link to my website where my resumes live in pdf and txt format (the pretty version and the text-searchable version),
and my geographical location. I ask them to please send me the job description, geographical location down to the city block of the company for which they’re attempting to recruit (often they cannot give out the name of the company, but I need to know what transportation/commute will be like), and the salary.I let them know (as courteously as possible) that I will not respond to any reply that does not contain that information.

So far, it’s worked like a charm without sucking my time the way recruiting emails used to do.

(3) Maintain your relationships with the people with whom you have worked.

Facebook your friends, and LinkedIn your colleagues. Every nerd hates to hear it, but the people you know and with whom you collaborate are the best resource for gigs, recommendations, inside news, and a heads-up when you need it. THANK THE PEOPLE WHO HAVE HELPED YOU. When people point me to gigs, recommend me, help me out, and provide me with information, I thank them
thoroughly and in written/gift form. Get a case of decent wine and send a bottle and a thank you card to the people who have helped you professionally. This isn’t because you want something from them; it is because you are grateful for their help without expecting that they’ll do so again. I mean it; sincere gratitude is important for its own sake.

Those three principles help me out when I am in contracts and looking for new ones, as well as closing down old contracts. Probably the biggest piece of advice I can give is this: take the time to be courteous to those who are helping you and supporting you, whether you know them or not.