Tools and Processes for Work

For the background on this, please read my first post – Tools and Processes

While my work includes a lot of email, con-calls, proposals and contracts, the relevant tools and processes are covered in the previous post.  Here I’m going to focus on the technical aspects of my work: writing code, managing servers, and troubleshooting Java applications.

Let’s start with Eclipse.  Eclipse is a Java based IDE (Integrated Development Environment) that I use for writing code, editing code, debugging code, interacting with SVN, analyzing JVM heap dumps for memory leaks, remote debugging applications and much much more.  Many people feel that Eclipse is too heavyweight but for large Java applications it is the best tool I’ve found for the many jobs involved with developing and maintaing applications.  I use many Eclipse plugins such as Subclipse for SVN support, eGIT for GIT support, Mylyn for task integration with Jira (and many other ticket systems), MyEclipse for lots of neat things, and many more.

For SSH I use iTerm which has several advantages over the built-in OS X Terminal application.  The one I use the most is the ability to send the same keystrokes to many tabs at once.  This means I can login to 15 servers, and run the same set of commands on all of them at the same time, and only have to type things once.  When you’re managing more than one box (say 300-400) this is a life saver.

I use Flint as a Campfire chatroom client for all of our company communication both internally and with clients.  I also use Skype, especially when traveling abroad.

I use the Thread Dump Analyzer for analyzing thread dumps from stuck or spinning JVMs.

I use Textmate for text editing and reading log files.   While Textmate can be a very powerful plugin driven development environment in its own right, I’m only scratching the surface and using it for basic text editing.  One feature I use frequently though is it’s regex support in the find and replace functionality.  Regexes can be an amazingly powerful tool for getting the data you need from a log file, or converting a spreadsheet into Apache redirects.  Having this all work in a GUI text editor with undo support, is nicer than using awk or sed on the command line, at least for me.

I use OpenVPN with a two factor auth system for securely accessing our systems from anywhere in the world.

There’s a lot more than I use but these are the big ones.

When I start my laptop it boots up the following: Dropbox, Evernote Helper, OpenVPN, Skitch Helper, RescueTime, CloudApp, Flux, Timebar, and Quicksilver.  On my Dock are Adium, Mail, Safari, Textmate, Calendar, OmniFocus, iTunes, Pages, ActivityMonitor, iTerm, Eclipse, Evernote, and Flint.

So there you have it.  How do you work best?  What tips have made a difference for you?  Let me know if the comments or just email me.

Tools and Processes

I’ve been working with computers since I was a kid.  The longer I’ve been using technology on a day to day basis, the more integral to my daily life it has become.  Laptops, cell phones, tablets, the internet, web applications, the cloud.  I am quite reliant on tech at this point, my I use a pen so infrequently that my handwriting, never good to begin with, has gotten so rusty I can barely read it.  But it’s also made many improvements in my life and work.  I am constantly refining my tools and processes to improve my work and life.

I want to document some of that here.  I’m going to break things into two sections: the first is work/life, around productivity, organization, and assistive technology; the second is the technical part of work, development, server management, etc…

Let’s start with the basics.  For many reasons, I’ve adopted an Apple-centric platform.  If you prefer Windows or Linux that’s fine too, I don’t want to argue about operating systems.  One thing I will say is don’t be cheap. Select the hardware and software which is the best for your needs.  It’s an investment that will pay off many times over.

I have a 15” MacBook Pro with 16 GB of RAM and a fast SSD drive.  At home and the office I have large external displays, wireless keyboards and trackpads.  The extra screen real estate of the external display is amazingly useful for many of the tasks I perform for work.  The laptop means I can travel easily, from the office to home, to San Francisco, to Mexico, to visit clients, etc…  The RAM and SSD make it possible for me to do what I need to do for work, effectively and quickly.

I also use an iPhone and iPad.  The Apple environment means I get lots of data and application synergies between my phone and my laptop, etc… iCloud, iWork, Keychain, and much more allow me to have the information and applications I need anywhere and everywhere.  My calendar, address book, web bookmarks, and more.

I use Apple’s default calendar, address book, and email applications.  They work well for me, sync between all devices, are available on the web if needed, and require no special installs.  I use OmniFocus for task management as my todo list.  OmniFocus isn’t cheap at $79, but it is a well written applicaiton which provides great support for the GTD workflow, or just works as a simple todo list.  I like the GTD approach of contexts and projects, with sequential tasks.  OmniFocus lets you flag high priority tasks and set due dates easily.  It syncs between my laptop, phone, and tablet, so I always have access to quickly add something I just remembered or to see what errands I need to run while I’m out.

I strongly believe in Inbox Zero, i.e. having no email in your inbox.  Whenever I have mails in my inbox it creates stress for me.  They represent tasks, todos, things that need to be read, replied to, handled, etc…  Having them sitting there creates a mental load, and is yet another place to manage my tasks.  If an email can be filed, or quickly replied to, I handle it immediately.  I need to work on limiting my email handling to only periodic checks, to reduce the level of interrupts during the day.  Anything that represents a task or todo list, goes into OmniFocus.  You can even file an email, and drag it to an OmniFocus task, so for instance if someone emails you and you need to write up a proposal and send it back to them, you can file the mail in the Sales folder, create a OmniFocus todo “Create and send Proposal”, drag the filed mail to the todo, and then when you work on the todo, you can just click on the mail icon on the todo item, and it will open the email for you to reply to.  It makes things very easy.

I file my email into many folders.  I don’t like Gmail and never really got into using tags.  Search is helpful, but I prefer folders so I can more easily find what I’m looking for even if I don’t know the right search string.  To make this easier I’ve just begun using MailHub, which analyses the contents of your mail folders, and then guesses where a new email should be filed, allowing you to file it correctly with one click instead of dragging to or selecting a mailbox manually.  It seems like a small thing, but when you’re handling 200+ email a day it saves a great deal of time.  It also has other features, but that’s the most important one for me.  It’s similar to the DevonThink auto sorting technology.

I use Evernote for note taking, web page clipping, blog post writing (like this one), and generally capturing and organizing information.  Again it syncs to all my devices so everything I need is available everywhere at anytime.  I use the Web Clipper all the time to capture blog posts I want to read later, grab technical how tos, and make PDF documentation easily searchable and available offline.  I take call notes that I can share with my team, I keep personal notes large and small, it’s currently full of almost 700 notes and growing quickly.

I use DevonThink for long term storage, and scanning towards a paperless life.  I scan all my bills, notices, etc… using a ScanSnap hooked up to my iMac, to suck everything that used to live in my filing cabinet or would live in my filing cabinet in the future into DevonThink.  It’s all OCRed, searchable, and auto-organized. It can also sync to my laptop and has a mobile app.

Evernote is short term information, things I want to read in the near term – and DevonThink is the long term archive.  A blog post about presentation techniques goes into Evernote, my paid electric bill goes into DevonThink.

I use Timebar for pomodoro style focus sprints where I’ll spend 30-60 minutes focused on a single task, and then get a break.

I also use RescueTime.  This application tracks everything you do on your computer and lets you know two important things:  How much time did you spend on your computer, and how productive was that time.  Facebook isn’t very productive, Email can be productive, writing a presentation/application/proposal is very productive.  Spending 14 hours a day on the computer if your’e only 50% productive means you could be doing an 8 hour day if you can be 87% productive.  I average 70-80% productive currently.  When I first started using RescueTime it was much worse.  You don’t realize how much time you waste online.  RescueTime makes the truth clear and is very motivating.  I love pushing that number up!

That’s a high level summary of how I manage email, todos, and information.  These tools and techniques are designed to reduce stress and increase my productivity.  I will talk about the work side of the house in another blog post.

Installing GitLab on RedHat Enterprise 5 RHEL 5

GitLab is a free (they also have a paid enterprise version) and open source software package to make managing a Git server easier.  It provides a nice web admin, detailed user and group permissions, and much more.  I looked at gitolite however I was unable to get it working correctly after several frustrating days, and GitLab looked like a more refined option with better documentation and support.

The only problem is that all the installation documentation is geared for Ubuntu, and doesn’t work well with RHEL 5.  I’ve fought through some of the issues and have it working.  I wanted to share some of the steps I had to take to get it playing nicely with RHEL 5.  Many of these steps may also apply to other Linux systems with older packages.

Python - The default Python install is too old

yum install python26
yum install python-docutils.noarch
unlink /usr/bin/python2
cd /usr/bin/
ln -s python26 python2

Ruby - The default Ruby install is too old

yum remove ruby
mkdir /tmp/ruby && cd /tmp/ruby
curl --progress | tar xz
cd ruby-2.0.0-p247
make install

rm /usr/bin/ruby
ln -s /usr/local/bin/ruby /usr/bin/ruby

gem install bundler --no-ri --no-rdoc
gem install rails

Install Gitlab-Shell

sudo su - git

git clone
cd gitlab-shell
git checkout v1.7.1
cp config.yml.example config.yml
# Edit config and replace gitlab_url with something like ‘‘  and change paths from /home/git to /opt/git
emacs config.yml

Install MySQL and Setup

yum install mysql-server mysql mysql-devel mysql-libs
/etc/init.d/mysqld start
mysql -u root
CREATE USER 'gitlab'@'localhost' IDENTIFIED BY ‘password';     
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';

Upgrade ICULIB (RHEL5 is too old)

as root:

yum install  gcc-c++
svn export
cd release-52-1/source
chmod +x runConfigureICU configure install-sh
./runConfigureICU Linux/gcc
make check
make install

Install GitLab

Follow the install docs and good luck!!!

Working from the Beach part 5 Wrap Up

I’ve returned from Mexico after working there for a month.  As you can tell, I didn’t keep up with the blog writing during the second half of my stay, but I wanted to write a bit of a wrap up about my first attempt at working from an exotic locale.  I settled into a generally good routine, waking with a swim, working in the morning either from the rental house or from the local coffee shop Choco Banana.  Lunch, another swim, and then working the afternoon on the patio of the house, watching the pool and fountain.

I was very productive and was able to work quite effectively.  I had to work within the limitations of the available bandwidth, but email, con-calls, SSH sessions, VPN, etc… all worked well.  If anything I worked too long days.  As a small company, growing fast, there’s always plenty to do and I have a hard time stopping sometimes.  I was more relaxed than I usually am at home.  Even though I was working normally, I didn’t have to worry about bills, household chores, fixing the cars, or the majority of the normal day to day stressors that we may not even think about AS stressors.  But the absence of them was very noticeable.  I also generally lost touch with most of my friends and family.  This left me with very little to think about or worry about day to day: work, eating, swimming, spending time with my wife, going to the beach, reading in the hammock.  It was generally all about the current moment.  As a result of having less stress and less worries in my head, I felt more focused, more productive, more creative, and happier than the normal day.
Coming home was a real mix of things I was looking forward to about home, things I’d been missing, and also not quite being ready to leave behind all of the wonderful aspects of living in Mexico.  I’m thrilled to have my own bed, my Xbox, FIOS, my car, to be going into the office, seeing my team and many more things.  I miss my pool, my relaxed attitude, and some of the best Mexican food I’ve ever had.
I’m looking forward to trying it again, somewhere else.  Possibly Bali, South Africa, or who knows where.  I’d like to try a city some day, although I know the costs will be higher.  If you have the ability to work from home, then I highly recommend that you give something like this a try.  Think it though, plan it out, but just TRY IT!
I’m happy to answer any questions about this type of working travel.


Working from the Beach part 4 – One Week In


Now that I’ve been working from Sayulita for the past week, I wanted to summarize some of the important things I’ve discovered so far:

  • If you turn on data roaming on your iPhone to use the Maps to get from the airport to your rental, be sure you’ don’t have the App Store auto-update turned on shortly after iOS7 is released, or you may rack up 1.2 GB in international data charges while you drive….
  • The internet here is SLOW.  Extremely slow.  It gets worse in the late afternoon and evening as people come home from work and get online in the town.  My early schedule is a benefit here.  Overall I’ve adapted to the lack of bandwidth, and it’s not a hindrance to most of my work.  I would be hard pressed to download an 8 GB heap dump for analysis, however email, SSH, SVN, Skype, Campfire, etc… all work fine (you just have a be a little patient sometimes).  Checking actual network speeds will be something I do for any future trips like this.  
  • I’ve switched from my cell phone to Skype for most of my day to day phone calls and con calls.  It’s worked well as far as I can tell and saved me a good bit of money.  It’s still not free however.  I may switch to using Bria on my iPhone and our VOIP account as it should be a little cheaper.
  • While my plan to start the days early has worked pretty well, the plan to end the day early as well has struggled.  There’s too many con-calls scheduled for 4 PM or 5 PM and too much going on to make it easy to knock off after 8 hours.  I need to be better about this.
  • It has been tough on my wife being essentially alone in a strange town while I’m busy working.
  • We lost power during a storm.  It wasn’t for very long and the same thing happens in Boston as well, but depending on where you’re going, and how time sensitive your work is, it’s something to be aware of.
  • Being able to jump in the pool and do a few laps does amazing things for refreshing your mind.  A short walk at home would probably do the same, but the office isn’t super conducive to that type of thing.  
  • I’m a lot better at putting the laptop away, and not compulsively checking email/etc… on the phone all night than I am at home.  I’m not sure why, but it’s great!
Overall I’m getting tons of work done, am focused and not distracted, and communication hasn’t been an issue.

Next Week

Going forward I want to try working from one of the coffee shops downtown for an hour or two at least a few days this week.  A change of pace would be nice, plus they make a great iced soy chai!  And for lunch I can walk down to the beach and get fish tacos and watch the waves.  Hard to argue with that.

I want to try to be better about quitting for the day after 8 hours (or less!?!?).