Monday, January 31, 2011

Thursday, January 27, 2011

The phenomenon of portability

Since an Android smart phone entered my picture, I've generally noticed a few things.

  1. I still hate talking on the phone.
  2. When I'm home, it's often more handy for e-mail and facebook than alt tabbing to chrome just to do a ^T{start typing url}^M and read/enter something. It's just so portable.
  3. Having next to no signal in my office rocks.
  4. Access to a clock, calendar, and a calculator without having to ^Zcal^M and the like, is great.
  5. FBReader and Project Gutenberg make a great pair.
  6. At least 17 years later, I still hate earbuds.

Hmm, I wonder if I could rig a desktop version of fbreader to share the same book/page information as my phone, by way of Dropboxes mobile client.
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 ->

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.

Monday, January 24, 2011

I really can't help but wonder if Dian Fossey and the hair dryer bit from Guerrillas in the Mist is what inspired them dragging a hair dryer through the desert in Space Balls.

Like come on, like you really need a hair dryer in either of those locales?

Friday, January 14, 2011

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.

Tuesday, January 11, 2011

I guess an interview with the creator of C++, is worth a showing of the slashdot effect, especially when it involves C++0x?

What I want to know is when the flubber will every major compile support C++0x tolerably, and will it happen before 2020 rolls around lol.

Why ice is dangerous

The weather has had the state shut down so much, that my brain is starting to visualize ways to make simulated mines and grenades for airsoft :-/.

I wonder if Radio Shack is still open...

Monday, January 10, 2011

Sigh, the ice storm still has me cooped up here instead of at work. I do appreciate the "Break" from having to be on the road so early, but, eh, work is a good thing (tm) in my books.

I've spent most of my time putting in research efforts after last Saturday's airsoft game as to what the ideal course of action would be, long term. My MP5 performed excellently and it ought to serve me for as it is now, for however long the parts last but if I'm stuck here, I may as well plan a head. I'm thinking the best return on investment would be to acquire a full sized G36A/G36E type AEG, probably one of SRC/TSD make. I could get a good G36A/E quite cheaply, even with this months pocket money, but being a stingy son of a bitch, I'm not going to do it until at least Feburary lol. Just about everything that I ain't saving this month, I'm reserving for a GED.

In terms of upgrading my MP5, whatever month it is when I get a second weapon, I'll likely disassemble my MP5 and see how it works, and what might be doable to `improve it`. O.K. so sue me \o/. What I'm thinking on the externals at least, is to get a claw mount that puts a picatinny rail over the top of the receiver and a pair of rails on the sides. Then mount a mil-dot scope on the top rail and a bright LED torch on either side.

My thinking here is that assuming the referees have no objections: I could put the torch on the right and engage it when I have to shoot around a corner against a known threat—making it harder for other players to get a clean shot at me with the light shining in their eyes, hehe. Then transition it over to the left rail when I've got to swap to firing off the left shoulder. Ditty trick for just an "Airsoft" game perhaps, but arguably more effective then simulated flash bangs.

I am not convinced that Thunder B's or similar items offer more ROI then throwing an empty soda can. Well, compared to a *real* stun grenade or using a torch anyway. Price wise a simulated fragmentation grenade is probably more useful at CQB field than a simulated stun grenade. For the kind of range Airdogs fields offer, a mil-dot scope would be more useful to me at longer ranges (i.e. outside or far down the corridor) then the more popular 1X red dot sights, because within that range, I scarcely need my weapons sights let along a scope, and when I do need to be precise an adjustable mil-dot offers me more utility. Especially since it could be mounted on another weapon. For the internals, I can't really say yet. Will cross that bridge when things come to it. Perhaps an M4 or G36C might have been a more well rounded weapon to have started with but I rather like the MP5 for use in doors. It also fits in my pack better.

A spring action sniper rifle would be a good second/alternative weapon, if it's capable of enough precision for what I would call sniping but IMHO a full sized G36 (not a C or K variant) would be a better investment for the cash. Or at least, it should give the range my MP5 lacks for the hill next to the woodsball field, and save me the trouble of having to drag the little H&K behind me, lol. Since most people use a G&G GR16 or comparable M4 kit, the barrel length of a G36K would probably be alright but I think a full sized G36 would offer the best possible result down range.

When I can get a few slings, it would also be easy to rig things to carry both. Use the MP5 as primary in doors and the G36 outdoors, but really a scope would do alright for increasing the effective range. It's just that getting a G36 costs about as much as putting a scope on my MP5, lol. Two AEGs also has a better insurance against failure/dead batteries than just mounting a scope.


Just posted this on Facebook.

As of 30 minutes ago the office is officially closed tomorrow. Damn fucking gum it, it's only a state of emergency out there.... not night of the living dead!

Wednesday, January 5, 2011

Georgia Clay

Ain’t it funny how some things take you back?
And the here and now just fades to black
When I pull that blue tarp off of that time machine
Man, it hits me

Seventeen years old running on dumb luck
Spent the whole damn summer
Living in that truck
Them old tires still covered in that mud
Like it sticks with me, in my blood

When life was nothing more than living for the night
Just trying to steal a kiss on a tailgate of that ride
Good old days don’t wash away
Just like that Georgia Clay

Only one of my friends with a Fake I.D.
It made the hometown celebrity
Used to put her in park in a vacant lot
And I still can’t believe we never got caught

When life was nothing more than living for the night
Just trying to steal a kiss on a tailgate of that ride
Good old days don’t wash away
Just like that Georgia clay

All over everything, every last memory
Man it’s all coming back to me…

Ain’t it funny how some things take you back?

When life was nothing more than living for the night
Just trying to steal a kiss on a tailgate of that ride
Good old days don’t wash away
Man, some things they just don’t change
Just like that Georgia clay

All over everything, every last memory,
It’s all coming back to me
Georgia Clay—Josh Kelly

Monday, January 3, 2011

Today was a good change: back to work!!! Like being thankful the holidays are over and it's back to business.

Out of the holiday torture, I broke out $5 (steam sale, hehe) for a copy of Tomb Raider: Anniversary, which is essentially a remake of the original and legendary Tomb Raider. I haven't really played the games since '96, and didn't care much for II and III. The first game was really, the only one I ever liked—because it was more about the tomb raiding than the gun fights. Years later it ain't all that different, except Lara Croft looks more like a woman than a collection of square panels.

Some things are different, like working with the grappling hook (I don't ever remember that) and some puzzles but it is close enough to the original, that I could probably dig up an old TR1 strategy guide and figure it out lol. For the most part though, I prefer solving and exploring on  my own.

It's been my way to de-stress.

Saturday, January 1, 2011

Getting old fast

After scanning a bar code off my computer screen and opening a novel on my cell phone, I can just see myself in the 2070s trying to explain to some youngster that once upon a time books used to come in something called paper.

Then when something breaks down, I'll shake my cane and politely point out that even in the future, nothing works. Will anybody still get the quote?

Water and Land

After doing a bit of research, I've not only found the name of a song that I've been looking for, but also, that it comes from this bit of poetry:

Avidamente allargo la mia mano: 
dammi dolore cibo cotidiano.

Desiderio delle tue mani chiare 
nella penombra della fiamma: 
sapevano di rovere e di rose; 
di morte . Antico inverno .

Dolore di cose che ignoro 
mi nasce: non basta una morte 
se ecco più volte mi pesa 
con l' erba , sul cuore , una zolla.

E quel gettarmi alla terra , 
quel gridare alto il nome del silenzio , 
era dolcezza di sentirmi vivo.

Fatica d' amore , tristezza , 
tu chiami una vita 
che dentro, profonda, ha nomi 
di cieli e giardini. 
E fosse mia carne 
che dono di male trasforma.

Mi trovi deserto, Signore, 
nel tuo giorno, 
serrato ad ogni luce . 
Di te privo spauro, 
perduta strada d'amore, 
e non m'è grazia 
nemmeno trepido cantarmi 
che fa secche mie voglie.

Se mi desti t'ascolto, 
e ogni pausa è cielo in cui mi perdo, 
serenità d'alberi a chiaro della notte .

Si china il giorno 
e colgo ombre dai cieli: 
che tristezza il mio cuore 
di carne!

S'udivano stagioni aeree passare, 
nudità di mattini, 
labili raggi urtarsi.

Tindari, mite ti so 
fra larghi colli pensile sull'acque 
dell'isole dolci del dio, 
oggi m'assali 
e ti chini in cuore. ( Vento a Tindari )

Ti rivedo. Parole 
avevi chiuse e rapide, 
che mettevano cuore 
nel peso di una vita 
che sapeva di circo.

Un po' di sole , una raggera d' angelo , 
e poi la nebbia ; e gli alberi, 
e noi fatti d'aria al mattino .

Acque e terre—Salvatore Quasimodo