“Don’t wait.” Waiting for something always takes more time than I thought it would, so whenever I notice myself waiting, I switch to doing something useful in the meanwhile and push the waiting task into the background. Installing the habit took a little bit of effort, but by now it’s automatic.
Could you elaborate a bit on that?
I noticed that I often wait for small tasks that end up taking a lot of time. For example, I need to compile a library or finish a download and estimate that it won’t take long, maybe a few minutes at most. But I find it really hard to just do something else instead of waiting. I can’t just go read a book or do some Anki reps. Whenever I tried that, I either have the urge to constantly check up on the blocking task or I get caught up in the replacement (or on reddit). So I end up staring at a screen, doing nothing, just so I don’t lose my mental context. At worst, I can sit for half an hour and get really frustrated with myself.
I find that I worry a lot less about checking up on background tasks (compiles, laundry, baking pies, brewing tea, etc.) if I know I’ll get a clear notification when the process is complete. If it’s something that takes a fixed amount of time I’ll usually just set a timer on my phone — this is a new habit that works well for tea in particular. Incidentally, owning an iPhone has done a surprising amount for my effectiveness just by reducing trivial inconveniences for this sort of thing.
For compiles, do something like
$ make; growlnotify -m “compile done!”
or run a script that sends you an SMS or something. This is something that I’m not in the habit of doing, but I just wrote myself a note to figure something out when I get into work on Monday.[1] (For most of my builds it’s already taken care of, since it brings up a window when it’s done. This would be for things like building the server, which runs in a terminal, and for svn updates, which are often glacial.)
[1] This is another thing that helps me a lot. Write things down in a place that you look at regularly. Could be a calendar app, could be a text file in Dropbox, whatever.
Not necessarily true. git and svn are suited to slightly different applications.
For one thing—sometimes you want One Source of Truth… which svn gives you, and git does not.
If you have a central git repository to which all contributors have write privileges, you can treat it a lot like a svn-style centralized VCS that just happens to be git. Is there a significant advantage of svn over this kind of git setup?
If it’s something that takes a fixed amount of time I’ll usually just set a timer on my phone
Consider…
<ctrl><space> invokes Quicksilver.app . enters text mode <message> <tab> to action pane Large Type <ctrl><enter> to make a compound object Run after Delay… or Run at Time…
… and Quicksilver.app does this very nicely without your fingers ever leaving the keyboard (if you’re making tea… your fingers probably already left the keyboard).
Consider also
<ctrl><space> invokes Quicksilver.app . enters text mode <message> <tab> to action pane Speak Text (Say) …
(These suggestions live in mac land. If you live in Windows land, consider moving. If you live in Linux land you’ll probably figure our how to do this yourself pretty quickly :)
I couldn’t get growlnotify to work reliably on my Snow Leopard. And some of Growl’s preference panes are absurd. And Growl insists on growling at you every time it auto-updates itself, with no way to turn that off. My friend Darius dislikes it, too.
I’ll tell you what I do even though it is far from ideal.
I have the program play a sound file to notify me. Sound is not the best way for a program to notify me because I have a habit of taking off my headphones, but leaving them plugged in.
After you install the free app “Adium” you can find some nice chimes in /Applications/Adium.app/Contents/Resources/Sounds/
I use the following command line to play a chime:
open -a VLC /Applications/Adium.app/Contents/Resources/Sounds//TokyoTrainStation.AdiumSoundset/Contact_On.m4a
Of course this presupposes you have VLC installed. And the first time I play a chime, there’s a delay of a few seconds while VLC loads the chime.
ADDED. I also use a visual signal as follows. In the “Hearing” tab on the Universal Access system pref pane, I check the box “Flash the screen when an alert sound occurs”. I use the Emacs function DING to generate the aforementioned alert sound. Sorry, I do not know how to generate an alert sound from the shell.
Could you elaborate a bit on that?
I noticed that I often wait for small tasks that end up taking a lot of time. For example, I need to compile a library or finish a download and estimate that it won’t take long, maybe a few minutes at most. But I find it really hard to just do something else instead of waiting. I can’t just go read a book or do some Anki reps. Whenever I tried that, I either have the urge to constantly check up on the blocking task or I get caught up in the replacement (or on reddit). So I end up staring at a screen, doing nothing, just so I don’t lose my mental context. At worst, I can sit for half an hour and get really frustrated with myself.
I find that I worry a lot less about checking up on background tasks (compiles, laundry, baking pies, brewing tea, etc.) if I know I’ll get a clear notification when the process is complete. If it’s something that takes a fixed amount of time I’ll usually just set a timer on my phone — this is a new habit that works well for tea in particular. Incidentally, owning an iPhone has done a surprising amount for my effectiveness just by reducing trivial inconveniences for this sort of thing.
For compiles, do something like
or run a script that sends you an SMS or something. This is something that I’m not in the habit of doing, but I just wrote myself a note to figure something out when I get into work on Monday.[1] (For most of my builds it’s already taken care of, since it brings up a window when it’s done. This would be for things like building the server, which runs in a terminal, and for svn updates, which are often glacial.)
[1] This is another thing that helps me a lot. Write things down in a place that you look at regularly. Could be a calendar app, could be a text file in Dropbox, whatever.
I assume someone’s already told you you’ll be better off with Git?
Not necessarily true. git and svn are suited to slightly different applications. For one thing—sometimes you want One Source of Truth… which svn gives you, and git does not.
If you have a central git repository to which all contributors have write privileges, you can treat it a lot like a svn-style centralized VCS that just happens to be git. Is there a significant advantage of svn over this kind of git setup?
Consider…
… and Quicksilver.app does this very nicely without your fingers ever leaving the keyboard (if you’re making tea… your fingers probably already left the keyboard).
Consider also
(These suggestions live in mac land. If you live in Windows land, consider moving. If you live in Linux land you’ll probably figure our how to do this yourself pretty quickly :)
I couldn’t get growlnotify to work reliably on my Snow Leopard. And some of Growl’s preference panes are absurd. And Growl insists on growling at you every time it auto-updates itself, with no way to turn that off. My friend Darius dislikes it, too.
Is there a better alternative?
I’ll tell you what I do even though it is far from ideal.
I have the program play a sound file to notify me. Sound is not the best way for a program to notify me because I have a habit of taking off my headphones, but leaving them plugged in.
After you install the free app “Adium” you can find some nice chimes in /Applications/Adium.app/Contents/Resources/Sounds/
I use the following command line to play a chime:
open -a VLC /Applications/Adium.app/Contents/Resources/Sounds//TokyoTrainStation.AdiumSoundset/Contact_On.m4a
Of course this presupposes you have VLC installed. And the first time I play a chime, there’s a delay of a few seconds while VLC loads the chime.
ADDED. I also use a visual signal as follows. In the “Hearing” tab on the Universal Access system pref pane, I check the box “Flash the screen when an alert sound occurs”. I use the Emacs function DING to generate the aforementioned alert sound. Sorry, I do not know how to generate an alert sound from the shell.
why not use mplayer for the sound?
These days I use /usr/bin/afplay. The advantages are (1) lightweight program that loads quickly, (2) installed by default on all Macs.
Just to follow up: there is indeed a Growl for Windows, and it comes bundled with a growlnotify.exe that I can run from a cygwin bash shell. Rejoice!
I usually continue coding during long recompiles (over a minute or so), just don’t save the my edits until it’s finished.
You could also make a version control commit before compiling and then use “git stash” or equivalent to save your while-compiling edits.