Monday, January 14, 2008

Customizing my work environment.

I'm continuing to get more familiar with working with a Macbook Pro and am starting to customize it to suit my working style. The first thing was to get some parity with what I was used to in Windows. At work, I have two machines (Macbook Pro notebook and a Linux workstation) and two monitors (24" LCD and 17" LCD). I previously had a Windows notebook instead of the Macbook and had configured my system to be a three monitor system. The Windows notebook was on the far left and connected into a docking station. I used the notebook's LCD for Thunderbird, IM buddies, etc.

To the right of the notebook, I had the large monitor which is the extension of the Windows desktop and what I'm staring at most of the day (when I'm at my desk that is). Next to large monitor is the 17" monitor that is connected to my Linux work station.

There is only a single keyboard and mouse, and both are connected to the Linux workstation. By running a VNC Server on the Windows machine and a program call x2vnc on the Linux machine, I can move the mouse/keyboard cursor across all three monitors as if they were one and even copy-and-paste between UNIX-Windows apps. The only limitation is that Linux apps can't be moved off the the 17" screen and Windows apps can't be on the 17" screen, but effectively my one keyboard and mouse controls both computers.

Being so used to VNC, I tried to do the same thing with OSX. Imagine the above system except with the Macbook instead of the Windows notebook. At first I tried using Apple's Remote Desktop which is suppose to be basically a VNC Server. The problem is that x2vnc or any other vnc client I tried could connect to OSX. I then downloaded a VNC Server for OSX, but that didn't recognize the dual monitor display of the notebook+external monitor.

Fortunately, the solution was the open-source Synergy tool which does much of the same thing as x2vnc and has both a server and client for Linux and OSX. Basically, on the Linux workstation, I run the Synergy "server". On the Macbook, I run the Synergy "client" and now I can do what exactly the same thing as before with one mouse and keyboard.

Installing Synergy was a snap. On Linux, use whatever your app management tool might be (i.e. "yum install synergy") and on OSX use Macports (i.e. sudo port install synergy). The Synergy site has instruction on what the configuration file should be and then it's just a matter of running the programs on each machine.

With my physical environment ready, I started to tackle trying to get a good ToDo app for OSX. For me, a todo utility must be easy to access. I'm too lazy to have to move my hands from the keyboard to the mouse. ^^; I also want the data to be presented simply and non-obtrusively. It's surprisingly hard to find this combo. Even on Windows, I didn't have a great solution: I used Google Desktop's todo widget which required that I use the mouse to select the widget before I can type into it, but the look was simple and basic.

I tried a few Mac Todo lists and was going to go with DoIt since it had Quicksilver integration that allowed me to write items to the list with keyboard strokes... almost. The problem was that DoIt also requires you select a category from a drop down list before it adds the todo item, and for the life of me I couldn't figure out how to select the category without using the mouse.

I finally came across a mixed low-tech/high-tech solution. Quicksilver has an action called "Append to text file". Using a simple text file (i.e. todo.txt), I created a trigger and keyboard shortcut that when hit, let's me type a todo item that gets appended directly into the text file. To see my changes, I used a very neat little app called Geektool that display a transparent window containing the text output of anything log file, script output or image.

Todo List

One limitation of this setup was that I used Geektool's file type to handle the display of the todo file. This only works when the file is appended to at the end like typical log files. This means that if you edit the file with another application, the change doesn't show up. The solution is to not use "file" but use a Geektool "command" with a refresh timer. By using the command, "curl " every 30 seconds, it'll regularly update the window with whatever is in the text file. Not as good as detecting a change automatically, but works well.


  1. Excellent. As someone not familiar with unix commands, could you tell me how to use the "curl" command to display a text file?

  2. Actually, I'm not sure why I went with curl. Instead you can use the basic 'cat' command to display the text file.

    Simply use:



    cat //Users//Document/todolist.txt