sshfs + svn != fast

While one of my main gripes about Subversion in the past, has always been “It’s slow”, I just found a real way to snailify it. Try running svn diff on a nice (~80M) chunk of source tree that’s mounted over sshfs.

It probably doesn’t help either, that the server has quad, quads, and  my systems a lowly dual, hehe.

Hmm, finally a chance to kick back and update my journal, before dinner ^_^. Something that’s been on my mind, is task management and record keeping, or more broadly the issue of “Productivity”.

When it comes to general coding or computing tasks, I stopped worrying years and years ago. I’m noted as a VIM user who loves its editing efficiency, and I would take something like vi or emacs any day of the week over a glorified Notepad, which is a class of code editor that excels at inserting efficiency. Likewise, I spend much of my time in a command line environment—which is far more productive for me than what most `normal` people use on their computer. Being at home in a terminal is also kind of a necessity where I work, hehehe.

So what does concern me, is at it’s essence Getting Shit Done and Keeping Track of Shit Done. Over the past couple months, I’ve extended my natural workflow to something more effective for a working environment. In the end, it’s still the same objective though, GSD and KToSD.

Traditionally, by project I would usually keep a set of notes: in the project root, either in a file called TODO or buf; which is a convenient name when your editing source code and want to write out a scratch buffer. Technical and personal notes would generally fall somewhere under ~/Documents with temporary notes and snippets in ~/tmp or ~/misc, depending on how long I need to cache it. Obviously, most of the interesting things would get converted to HTML and blogged here! My vim setup also defines an “Outline” mode that I utilize for brain storming and various other things that belong in a .outline file.

At the present, I’m utilizing a note taking program called TomBoy, which has become quite the useful notebooking tool! While it has a few things I find irksome or overly minimalist, it also has a few that I quite like, and fits the #0 rule: it just works. TomBoy is written in C# and works great on every platform I’ve tried it, including Windows. The main lack to it, is having to fumble about to find which window on screen belongs to my current note. I would like to find the time someday to write plugins for interfacing it with other software in my workflow but that’s more so for use outside of work. My systems all run the TomBoy client and utilize one of the many backends for synchronization, so I always have an up to date set, which is good because (*groan*) sometimes I may have to work from home.

What I do with TomBoy, is maintain a set of notes: the Current Action List and . Whatever is most relevant to the here and now gets scribbled into the current action list. So for example, if I’m implementing some change to a program I will have outlined the phases needed to do it as a set of bulleted lists in my Current Action List note, which is saved in a notebook named after the company I work for. During a `change of gears`, or as certain information becomes less associated to the Here And Now of what I am working on, it gets cut and pasted into a note named after the project in the same notebook—so I know exactly where to find things. If a note becomes overly concentrated, becoming more like a multi-section collection, the notes get split and prefixed by the project name. I also have a “Programming” notebok for things that are of a more general programming nature, like comments about APIs or how to use certain tools. Today I added a “Personal” notebook, which will probably gain a Current Action List note of its own someday.

An example of this workflow in practice, earlier in the month I was focused on writing code to model a problem and code to test that for correctness. Kind of like an individual Test Driven Development. But I didn’t have time to review things very well, yet I had gotten into this sweet work flow between coding, noting, and testing.  It got done and so did the code that needed to use it.

I outline what I need to do in TomBoy, using as little or as much detail as necessary, then I do it and adjust the note as necessary. It’s for insurance: in case doing X takes N*4 times as long, or I suddenly have to take a shit in the middle of something, I won’t forget to do the Xth thing. Out of convention, I prefix completed “Tasklets” with a ‘-‘ and highlight problem areas or WIP’s with a ‘+’ prefix, e.g.

     

  • – change A
  •  

  • – change B
  •  

  • + change C
  •  

  • change D

Where D is still to be done, C is giving me more overhead, and A and B have been hashed out.

This is helpful because for example, you might think of something Important(tm) that you don’t need to focus on *now* but will need to _soon_. Or at least, it is helpful to me. I’ve been doing this for a while now and it’s really meshing well. When a subject get hammered out, like A, B, C, and D all completed, tested, and committed; then I either delete the note text or transition it out of Current Action List and into Project Name. Just depends on whether or not the info needs to be retained.

Something that proved the utility of all this to me, was when I decided to take a step back and focus on examining the work I had done. So I took a couple hours to go over the programs code base, subject by subject, and making corrections as I saw preferable. To do that, I created two indented sections in my Current Action List: one for notes on application code and one for enumerating what the test cases actually cover. For each significant element that had changed during that cycle of development (probably ~50 commits), I did two things: review the test cases from the outside in, writing down what they actually tested (the assumptions), and an occasional (highlighted) comment about what needed to be tested for or changed. Then I opened the associated source code, and went through it and made any practical comments, in a form of super-short-review. This resulted in a Current Action List that looked like this:

Subject A tc ->
  * tests quux domain
    + includes ...
    + excludes ...
    + how it deals with X possiblity
  * and so on as appropriate, covering:
    + domains and ranges
    + state assumptions
    + error
    + and dealing with 'wtf was that?'
Subject B tc ->
  * ditto

Subject A ->
  Short, concise reviews
  * including comments with pointing out
  * and areas for change

Subject B ->
  ditto.

Looking at the assumptions the test cases make rather than the code it tests, showed me areas where the tests needed to expand, which showed me places that needed to be changed. To keep myself “Fresh”, I paused after each subject/module to play “Fix it” to the flaws that I found in examining the tests and code, then update the note contents accordingly. Then I moved that chunk out of Current Action List and into Project Name. So if for example, before moving onto compiling the stuff for B, I would make the corrections to A that compiling the notes had found, then cut/paste it into the note for the project. I think this is a good thing, kind of like the old UNIX guys. I think it was DMR, who once commented on writing the BUGS section of a man page, only to go fix it rather than release it.

Doing that check the tests, check the code, fix the code cycle, allowed me to cover a lot of ground fast without having to worry about keeping track of minute details. I also didn’t space out from reading to much code and writing to little, and still have it saved in case I need to reference it later.  After everything was done and I was ready to start the next phase of what I was working on, I transitioned all that stuff out of my Project Name note and into a note named “Project Name Test and Code Review”, and left a line in “Project Name” to see that file for that. Clear, clean, and simple as eating.

Two reasons I love TomBoy: it has *excellent* support for lists and indentation. It totally and completely blows away software like gmail and Word in that regard, and provides the ease of use that my outline modelet in VIM was created to fill. It is incredibly easy to manage and manipulate info in a TomBoy note, and adapt it using list or indentation structure to organize a note in such a way that you can parse it at a glance. I generally use indents for sectioning, lists for enumerations. The second thing I love, is that whenever you write the name of a note or a file path it becomes a clickable hyperlink, very much like a wiki. But unlike the majority of wiki’s it is tied to the name of an actual note (entry) rather than a SillyNamingConvention. There’s also great support for renaming notes.

The thing that TomBoy is really Not So Good At, is managing TASKS instead of NOTES. It just wasn’t designed to do more serious task stuff then a sheet of paper. Yet it is pretty damn good at the whole notebooking thing.

There is a program called Tasque but for my needs, it is much to simplisitic to be useful. In fact, Google Tasks in GMail is probably as good (and sucks). I gave Tasque a wurl because it had both a TomBoy plugin and a RTM backend. In testing that out, I found the TomBoy side of Tasque really ain’t that spectacular either. In point of fact, just integrating RTM back into my work flow as proven useful. My usage of Remember The Milk has totally gotten overhauled, and it would be worth while to someday write a TomBoy plugin to help associate their notes/tasks.

I’ve basically replaced what fixed (and standard issue) lists I had with purely “Smart” lists, letting tagging and inheritance do the organizational leg work for me. This suits me, because I can set myself a task with tags that will make it show up in each list I want it to, so e.g. a task can be in both my list for work tasks and my list of people to contact, be readily searchable, and have a way of associating notes, due dates, and all sorts of handy stuff with it. Basically all the good stuff for tasks that TomBoy lacks.

That’s the thing of it though,

  • Just Work without Kicking.
  • Let the software do the house keeping.
  • Allow me to focus on working rather than structuring
And I’m quite happy, lol.

Hmm, it seems that updating Xfce4 has borked the install—in so much as none of the panel plugins work. Xfce4 itself seems to be O.K. but I can’t even get the Xfce Menu to appear in the panel, after using the option to migrate my panel settings almost nothing works o/. Guess whoever it was on the Zenwalk mailing list was right about the new Xfce not being ready for the lime light.

Giving KDE 4.5.4 a clean shot, results in an almost two minute wait to load, before it finally crashes back out to my XDM screen. To be fair on a second run (after rm -rf ~/.kde && sudo reboot) it is closer to 1 minute >_>.

Next up, using GNOME. Less than 30 seconds for the *first* run and I had a usable desktop. At least, something in this world works. After rebooting, going from log in to a usable desktop was approximately the same time frame. That’s cool.

I have never been a big fan of the old GNOME but I will usually be the first to admit, it gets the fuck out of your way and lets you get shit done. But Xfce4 is faster!!!

So I guess for right now, the old GNOME is my defacto-standard desktop :-/. Hey, if it works. Hell, all I really use the “Desktop” for amounts to a system tray, wall paper, and a way to switch between windows. 90% of what I do, is done in an X Terminal anyway.

The thing that I do care about, is that It Just Works and Doesn’t Annoy Me Constantly.

Something about sorting through receipts made me vaguely think that I need a filing cabinet and I should likely print out my digital receipts where applicable. Then I remembered I hate paper, and I mean I really hate paper. That is when it hit me.

I don’t need no freaking file cabinet, I can just store files in a secure dropbox and be done with it. Plus it’s possible to effectively “Scan” papers off my phone by using the camera and uploading them. Victory is mine on the war against wasting valuable trees  :-).

Now the real question is with the sorry state of our traditionally decrepit power grid, what does more damage to the earth lol—more paper or more PC usage.

How to tell if your phone is female, or if Linux is smarter than Windows XP

O.K. so my phone has been giving me a message every time I plug it in, asking whether I want to turn on USB mass storage for mounting or charge her off the USB. So today I plugged it into my desktop, and I’m scratching my head trying to figure out where I turn it on because it just starts charging.

You know that your phone is female, if you plug her in and she starts to CHARGE instead of asking you to MOUNT her >_>.

Conversely you know that Linux must be smarter than XP, when the phone does ask about mounting if plugged into a Linux laptop instead of a Windows XP machine <_<.

Yeah, lol.

I’ve been experimenting with window managers lately: fluxbox, openbox, awesome, and musca. Fluxbox and openbox, are pretty much just generic window managers, at least in my eyes. That said, they are well worth using, for most peopel. Awesome and Musca are tiling window managers, and a lot more, eh, minimalist. While I used to collect window managers, among quite a few other odds and ends back when I had time for it: but I have never done the “Tiling thing” beyond a very brief test drive of dwm.

Awesome and Musca create an interesting experience: you create the windows, the window manager, manages them. It’s almost alien lol. Normally you create a window, the window manager figures out where to draw it. You do the rest, e.g. by resizing and moving it around as necessary. In these tiling window managers however, newly created windows are automatically arranged and sized by dividing containers.

Launching your first window is like maximising, lauching a second window causes everything to resize and give each program half the screen, and so on based on some tiling pattern. The most used seems to be 1 half sized window left and 2 quarter sized windows right; works better than you might think. Rather than resizing the windows individual, you resize the containers. So if the screen is laid out as:



|         | term |
| Firefox |------|
|         | chat |


>

Selecting either the term or chat window and attempting to resize will resize all three windows. Try to enlarge the chat window horizontally, and Firefox will shrink and term grow, horizontally. Try to shrink the term window vertically and the chat window grows vertically, and so on.

It’s mind blowingly better than what the style of window management people are used to these days, which dates back to like Mac OS 2 or Mac OS 3 back in the ’80s. It is also a little bit awkward to let the computer take care of something, that you’ve been doing by hand for almost twenty years!

Relishing the experience however, has made me think of something different. I was just experimenting with the MinOverlapPlacementPenalties and MinOverlapPercentPlacementPenalties settings in FVWM, and it hit me. What if you could dynamically define what windows are important? I.e. what screen space should have more “Don’t cover this up unless necessary”, and how big a frame (i.e. for auto-tiling) should be, and so on?

It is technically possible, if perhaps computationally ‘interesting’ to figure out at the machine level. The windows that spend the most time focused or are most often gaining the focus, would be prime candidates. If the user ‘uses’ the window more than others, give it a larger chunk of available space scaled to its idea of how much space it needs, then prefer minimising the percentage of those windows being covered over or shrunken to absorb other windows in the same screen space.

It is food for thought!

Since for (network) testing purposes I’ve rigged a spare partition on my desktop as a virtual duplicate of my laptop, but obviously s/ati/nv/ and Linux is smart enough to take care of the rest. To make the most of it, I also swapped a few things around to the latest packages. For dependency reasons Gnome is installed; like wise KDE for old times sake and Xfce for completeness. I decided that since I needed a desktop session to test the ‘common’ web browsers, that I may as well take KDE for a spin.

So far, I’ve tried about four or five versions of KDE since 4 went public, all but one of them was a release version. Taking a count from the moment the KDM wall paper is replaced by my blanked Xfce one, my meagre laptop loads Xfce into a usable state by “The count of three”, and has Dropbox and some applets loaded by five seconds. By contrast, on my waaay more powerful desktop, not only did I give up counting at the second mark of the startup splash screen: I dropped my water bottle and had to fish around in the dark to retrieve it from under the table. By then, KDE still had not gotten half way through it’s start up splash srcreen 8=). I like KDE, I’ve even used some versions of 3.4 on a piddly 500Mhz system once upon a time. But KDE 4 is just slow, freaking slow!

However, I must admit that KDE offers a very pleasant and polished visual appearance. Its like looking at a sleek sports car, only better. Their new desktop metaphor as it were, is likely a grand improvement over the traditional desktop. Compared to wrapping ones noodle around Deskmate or living with the UI that has plagued Windows for the last 15, if not 25 years, it is also argubly easier to use. No doubt about it, a first load of KDE is a hell of a lot more straight forward than a straight load of modern (or classic) Windows.

While it’s all so well done now, and as much as I remember enjoying KDE(3), if KDE(4) is the way the future desktop will be, me thinks that I will be continuing to use a keyboard and terminal emulator more often than a mouse, keyboard, and GUI applications!

It’s nice stuff, but hell, if it’s going to be that slow, why even use more than an xterm?

Hmm I must admit that custom configuring a Linux kernel, seems to offer three possibilities:

  • Lean, mean, and sexy kernel build
  • More modules than you can shake a stick at
  • Major headaches

I’m tempted to configure for a balance between the first and second, it is an interesting idea though. If I tuned a kernel build for my very specific system, it would strip out most of the usual bloat. The downside is there are so many configuration options, that making the config might take longer than compiling Linux!