Gettings things done and working from home

I have been a freelance consultant for the last year or so, and people ask me where I work from. At first I was trying very hard to work from home, but I couldn’t get any work done. Then I tried jumping from one cafe to another, and a bit more was getting done but still not quite as productive as I would like it to be.

Several months ago, I rented an office at a great place right in the center of Tel Aviv. I love it, and it seems to enable work as well .

— draft
– “productive” just means finishing tasks that are on a todo list, which means you first have to have a list.
– “productive day” is finishing as many tasks from the list as possible
– “procrastination” is when you are not working on a task in the list but doing other things instead
– by doing nothing at all, for example where you don’t have other stuff to do (library, office, cafe) you are forced to work on the task at hand (on the list)
– loud offices with lots of social interaction don’t help get things done, quite the opposite.

I think I really dislike Python

Ruby:

> irb
irb(main):001:0> a = [1, remedy 2, case 3]
=> [1, 2, 3]
irb(main):002:0> a[10] = 20
=> 20
irb(main):003:0> a
=> [1, 2, 3, nil, nil, nil, nil, nil, nil, nil, 20]

Perl:

> perl
@a = (1,2,3);
$a[10] = 20;
use Data::Dumper;
print Dumper(@a);
$VAR1 = 1;
$VAR2 = 2;
$VAR3 = 3;
$VAR4 = undef;
$VAR5 = undef;
$VAR6 = undef;
$VAR7 = undef;
$VAR8 = undef;
$VAR9 = undef;
$VAR10 = undef;
$VAR11 = 20;

Python:

> python
>>> a = [1,2,3]
>>> a[10] = 20
Traceback (most recent call last):
File "", line 1, in ?
IndexError: list assignment index out of range
>>> a
[1, 2, 3]

A bright idea in the middle of the day

I was reading a blog yesterday about “The sad state of open source monitoring tools” and was thinking about it for some time. Coincidently today I had a chance to look at my CruiseControl configuration files, which I wrote quite a long time ago.

I really love the DSL that CruiseControl is using for it’s configuration, it’s extremely powerful at describing how to build projects. Especially powerful are the variables, that unlike in Ant are not immutable, and the way plugins can be pre-configured with your own defaults, as well as renamed to other names. It’s really easy to configure it in such a way that adding a new version for a project is just 1-3 lines of XML, for example

<xxx-project name="XXX v6.66">
  <property name="version" value="6.66"/>
</xxx-project>

Just in those 3 lines, the pre-configuration already includes all the information about the project. Where it is at, who to send e-mail to, where is the version control, EVERYTHING! If the only variable that changes over time is the version number, then that is all you need to leave as a variable … everything else is just a template that can be re-used. And these templates are extremely easy to combine from smaller templates, it’s a template-in-the-template kind of configuration.

IMHO this would very much apply to configuration of monitoring software, like nagios for example. And the way the (CC) plugins are written in java – adding new plugins that check all kinds of esoteric things is really easy to do.

If it would also have the XML/XSLT configuration of how the web-interface looks like (the way CruiseControl does), and the super-easy installation (again like in CruiseControl). It would be a really really really great product, extremely powerful, easy to configure, and potentially great looking.

If only ThoughtWorks would write such a thing … I would be thrilled!

Actually nagios is already extremely similar to what I described, but for some strange reason I find the rigid configuration of nagios a large PITA. Maybe some-day when time stops and I will have unlimited time to code, I will do it myself.