Friday, April 30, 2010

It has been a bit of a long day, but at least I managed to sleep an extra hour... lol. Today, I began work on my memoirs, most portions relating to 2004-2005 are sorted along with part of 2006, leaving the years 2007-2010 worth.

Been thinking a bit about the people I've met, and how they've impacted my life. I've encountered countless people, standing in the front line trenches all these years, and have developed some important relationships along the way. As my memoirs are reaching the time he was a recruit, I can't help but look back, and see how far we've come since then, a certain friend and I. Man, 2006? Has it really been that dang long... feels like just yesterday, that we stood shoulder to shoulder in [SAS]'s service. My good right arm during his tenor, and a trusted friend through thick and thin, even after all these years. Some how, I've always known if we ended up in jail or something, he'd be the one sitting next to me, saying we screwed up, not the one to come bail me out lol.

Man, I feel old. It's like feeling that I pre-date mountains \o/. For how long I was an integral fixture in [SAS] life, and just a worker bee before that, I spent so many years there, I have seen mountains climb and tumble.... I am that old.

It's a whole lotta history, and I can still see so much of it in my mind. I remember a friend, one much more recently developed, once asking if I "Forget anything". Really, I rarely forget anything important: I might let things rest out of respect rather then bring it up again, but I that's as close as I get. I can see the years behind me, like a trail of stepping stones in the cliff face.

A lot of people fairly close to me, don't quite understand why I am 'wasting' time writing these memoirs, that at least, has been the widest consensus. Perhaps, no one can truly understand that, not without being inside my head; which isn't an experience I'd recommend even if it were possible lol.

This was part of my life, an important one, even if much to voluminous in both those respects. I can look back down the trail, and see who I was when I came to [SAS], and see ahead further down the path to where I am going. It's important for me, to be able to do that. I have always said, those who forget their history, tend to repeat it. I spent many years of my life, finding myself, and the paths one walks, reflects in part, who you are. It's not us, who shapes are experiences, but our experiences who shapes us.

My life has been far from sweet flowers, it's had plenty of hills and valleys to carve through; as I have said for years, when people ask "How are you" --> I'm still breathing, never known it to get better than that. Yet just the same, it has not been without it's gems, those rare diamonds that make it worth the journey.

Tonight, I'm listening to one of my favourite songs, it's one of the two songs that I once sang on [SAS] TeamSpeak; heh, wonder if JB remembers that :-P. I am, still after all these years, even able to remember the map I was playing on, the kit I was using. My brains just a huge hash table.

Most of the best moments in the past six or seven years, have all been around [SAS]. Perhaps that is a terrible thing (I truly think that it is), but it is also a wonderful thing. Just think,  how miserable a chapter it would have been, to have lived it solo.

You can't walk forward, if you forget how to move your feet.

Best summary of why I resigned from [SAS]

10:45:42) Malty: Spidey...I gotta ask tho, why didn't you keep your Tags, and just resign your duties as WO
(10:46:36) Spidey01: My personal code of conduct does not allow me to hold a position that I'm unable to fulfill, even if it is my superiors who make it so.
(10:47:11) Malty: Yeah, but why not remain an SAS member, but just a trooper, or apply to be Vet or something
(10:48:11) Spidey01: That was the original plan drafted several weeks ago, Randoms attempt to stave it off yet still do nothing, changes the equation
(10:48:16) Spidey01: s/changes/changed/
(10:48:45) Malty: Ahh ok..
(10:49:03) Spidey01: and if you don't mind, I think I'd like to post this little excert on my journal as a summery of my 'why', lol
(10:49:51) Malty: yeah sure
(10:49:55) Spidey01: thanks
The past couple of days, I've been thinking about how best to go about writing my memoirs. I've known [SAS] since 2004, with my entry to the selection course being 2005-08-07 and my completion of the Selection Course being 2005-09-14. So it has been a long time, lol.

I've long planned to write some form of memoir about my times in [SAS], to be published posthumously, after retirement, expulsion, or forced resignation. Both being someone who hears or sees just about everything, and having been placed in positions of power, I know a considerable some about [SAS]. My ethical code on the other hand, ensures that what is trusted secret, remains on until death. People have often told me thngs in confidence, and although I have few secrets of my own, I never will violate those of others. However much of my life and times in [SAS], are not classified material: but instead something you can only learn by having been there, or through someone who was there first hand. That's what my memoirs will contain: a reminiscence of my experiences there.

What's weighed on my mind, is more so the effort of writing them then for the contents. I've always decided on most of the omissions, for obvious reasons that I'm both morally and honour bound to make about [SAS] internal affairs. The finished materal will of course end up on my journal, in one form or another. Odds are I'll either write it in gdocs, or I'll expand my XSL stylesheet for the occasion and mate it with a macro pre processor. I have stylesheets that allow me to write in DocBook, then convert to forum or blog posts as desired; but it doesn't (at this time) handle interlinked footnotes/references as well as I desire.

Damn it, I feel old....
So far, I've been adjusting well to life outside of [SAS]. The only thing that irks me, is still being unable to access my forum account. It was finally unsuspended a couple days ago, but it is still impossible to log in. I've e-mailed the webmaster about it two days ago, and again today since there was no response; just now, I've even sent a more detailed debugging analysis to aid the 'webmaster'.

There's no way that I can reply to any threads in Chit Chat or Clan Topics, until my account is in proper working order. Unlike certain people (gives Snipe and Ithen the evil eye), I don't believe in setting up other accounts unless necessary.

Just about everything of real interest on the [SAS] Forum, lives in the NCOs part of the board, but at least the Publicly accessible forum provides an avenue to stay in touch. That's principally why I registered, and visit NTFs public forum regularly.

Thursday, April 29, 2010

This one's just for the geeks...

A man is flying in a hot air balloon and realizes he is lost. He reduces height and spots a man down below. He lowers the balloon further and shouts, "Excuse me, can you tell me where I am?"

The man below says: "Yes. You're in a hot air balloon, hovering 30 feet above this field."

"You must work in Information Technology" says the balloonist.

"I do" replies the man. "How did you know?"

"Well" says the balloonist, "Everything you have told me is technically correct, but it's no use to anyone."

The man below says, "You must work in business."

"I do" replies the balloonist, "but how did you know?"

"Well," says the man, "You don't know where you are, or where you're going, but you expect me to be able to help. You're in the same position you were before we met, but now it's my fault."
 -- Business Partners
Sometimes trying to figure out ways to make others laugh for a few moments, is a good way to spend an afternoon.

Threading upon years of memories

I've just completed the first round of cleaning $HOME, like any chronic organizer / pack rat / cataloger, over the years I have accumulated large quantities of files. ~/Documents/SAS and ~/Projects/SAS alone were over 100 megs, and I had *thinned* them out last year, by purging many old files. I still have almost 5 GB of files saved else wheres but most of it can either be digitally shredded or kept, like the sources to the SAS skins.

I'm really not sure what to do with the SAS Skins from SWAT 4:TSS. I have backups of everything from that project: texture sources, installation files, and finished product. That goes for both the old version 2 skin and the current version 3 skins.  The SAS skins were never officially adapted by GCHQ, so in real effect, they effectively go with me... lol. Although the download links will go dead, I'll gladly give a copy of of the installer to any [SAS] Member or Recruit who requests them. I also have a copy of Dukes skin saved.

My own skin, will likely continue on with the next version of it having the [SAS] elements removed.

Most of the files that I've elected to keep, are either moments like Miles' scorecard, or old software manuals (I never throw out manuals lol). For right now, I still have some of my old lesson plans, even one dated June 2006! That would place it during the June 5th to September 9th period that I held the rank of Lance Corporal. Perhaps I'll hang on the my lesson plans, or I'll burn them, not sure just yet.

So many files, so many memories. It has often been my way to keep detailed records, or at least enough to reconstruct ones from memory. With my iron clad memory, or as a friend once posed it, "Dont u forget anything??", I can remember much about how many of these files came to be. So for me personally, there is a lot of history here... even if now, much of it gets the PC equivalent of a being thrown into a lit fireplace.

A few of the files that I have archived, such as those pertaining to the [SAS] admin team and server management, will be handed over to GCHQ before I shred them: thus giving [SAS] the only versions of those files. Whatever the required level of paranoia about former admins in [SAS] is in the post James situation, I'm a fully ethical one. In however many years I was involved with the [SAS] Admin Team, I have always operated honestly and professionally. The trust that was placed in me, was never miss used: to the point that GCHQ often expressed signs of exasperation over the e-paper work this added into the loop. Things that I was given standing orders for sorting, or that fell upon my own scope, I took care of autonomously and reported the actions as necessary: most things however, being deemed (by me, to be) outside my authority as merely an admin, were first OK'd through GCHQ, except when emergency response required otherwise. I wonder just how many memos I did send... hahaha.

I have a personal code, that dictates the way I conduct myself, and I break it for no one.

Wednesday, April 28, 2010

Chuckle of the day, 2010-04-28

(15:49:34) dkg: I hereby conclude, however reluctantly, that you take things too seriously.
(15:49:40) dkg: EOF
(15:49:42) Spidey01: lol
(15:50:00) Spidey01: Thank you for the laugh of my day, may I blog this? :-D
(15:50:13) dkg: I'd be flattered :P
(15:50:41) Spidey01: thx xD

Thoughts on life outside of [SAS]

Since the last card in the hand I was dealt, has finally landed, I reckon it's time to plot the course where I'll go from here.

Game wise, whenever I play Raven Shield or SWAT 4, my primary stomping grounds will likely remain the [SAS] servers, because they're the best servers you'll find anywhere. Sometimes I visit other clans servers, but usually it's ones I'm friendly with or when ours are having an outage. One of the things I have always liked about being in clans and friends with various clans, people know your name when you setup roots: and I have roots here. Before joining SW years and years ago during my MW4 career, I maintained friendly relationships with much of SW, OTC, and the leadership of the GSA branches of CGB and CSV. Even after becoming a Shadow Warrior, I kept those up, when possible even continuing to the present. Like wise that goes for most people who have passed through [SAS], I've kept up contact with many of them over the years, especially those closest to me. Most memorable people to cross our servers these past years, have known me in some form.

How much I'll play of either game, I dunno. There is now less to weigh me down, so I can play more freely, and I can also work more as needed. I don't plan to become a stranger though.

Really, I feel naked without my uniform: no more SAS_Rank_Spidey01 written all over the place. Obviously I have some things to change :-/. Spidey01 however is and always has been my name. Formal clan prefixes of DEx and [SAS]_Rank, having been groups close enough to my heart, to become a virtual part of my identity. On the other hand, being the *intelligent* sort of person, most of my stuff doesn't revolve around [SAS]. For example my IM usernames don't reference SAS, this has been a conscious decision from the vary start (cica 2005). The idea being, that my IM would become known, and if should anything ever happen, changing it would be a major pain: so I've avoided it all these years. Except for FreeNode, which now comes back to bite me in the arse lol. On the upside, I don't have to constantly remind myself to omit the '01' in RvS!

 Most of the changes are trivial, updating signatures, shredding old files, closing old photo albums, and so on. The main gripe is waiting for my forum account to be returned to me.

On the subject of military tactics and their applications, I started learning about such things around 1995, and joined [SAS] during a chapter of my life, where I wished to focus in on close quarters combat. It remains to be seen, whether I'll continue my studies, there really isn't much more I can learn without firing an MP5, but it is a chapter of my life that I'll never forget.

I'm still gonna be found naturally stacking up on doors lol.

Tuesday, April 27, 2010

In a couple days, several [SAS] members will find a copy of my various contact data in their email, to help stay in touch.

Resigning My Warrant: Spidey01's original

Before dinner, this post was made by me in Clan Topics at approximately 00:29 UTC on

 On March 24th an important issue arose between [SAS]_Maj_WIZ and myself, in regard to his apparent countermanding of established [SAS] SOP and long standing orders of [SAS]_Capt_En4cer. In dealing with both [SAS]_Maj_WIZ and [SAS]_CO_Random, to properly clarify and document the final outcome of this for it's obvious *immeidate* impact on our training affairs, I have generally been screwed in one ear and out the other, or run around one three and six more blocks trying to resolve this.

For over a month I have been patient, whilst my CO has left my hands tied, unable to furfil my duties as a [SAS] Member, and I've met everything from the Major short of threatening my dogs life. Well gentlemen, I believe it is time to call this farce over. [b]If I cannot be allowed to furfil my duties, then I shall not hold my rank[/b].

It is with that in mind, that I hear by resign my Warrant.

I have served this team almost self sacrificially since the very moment that I landed foot on these hollow grounds... only to suffer countless incidences of the same over my years. Random, WIZ, En4cer, Rouge, Valroe, Sniper, Timbo, and Medic have all been apart of doing this to me over my many years, when I'm screwed a month straight by the Commanding Officer, I think it is time for a man to draw the line.

[color=yellow]It is my first ever and my parting order, that this post is not to be edited, nor is this thread to be moved.[/color]

That post was written as a text file on my laptop, and copy/pasted into the forums, just as it has been copy/pasted into this journal entry. What you see in the above quote, is exactly how I wrote it: it is the authoritative copy.

[SAS]_Maj_WIZ has since moved it: but I expect, has not edited it. After dinner, I addressed a private e-mail to [SAS]_CO_Random notifying him accordingly of this action, and putting my effects in order: namely that I expect my forum account returned to me once the locks are changed, and that I explicitly turn over all express legal rights to any code that I've contributed to [SAS], to any acting CO of the team past/present/future and for all time. Legally because of the U.S. involvement (on Randoms side), the code in question already belongs to [SAS]'s commanding officer, same as the draft documents Rouge and company submitted before leaving [SAS].

Having been sufficiently been further insulted and verbally threatened by the good Major, I've placed him on my IM clients temporary block list. I'll not waste further breath with him on the issue.

Since this is my turf and not [SAS] private property, I will add a few details to my above post. The issue in question, I will explain it here.

In the public view (as of this time of writing, although I wouldn't be surprised if [SAS] will remove it from public view, or *finally* edit the damn thing in response to this), on in the tactics section is an Raven Shield V-Comms SOP page that was authored by [SAS]_Capt_En4cer in 2007.

One of it's entries says this:

V-4-6 =Objective Reached.
This command is issued by any elemental member. This command is most often heard following a 'Reform On My Position' command by the EL or once a member has reached their respective Point Of Domination (POD) during a dynamic entry, and lastly if the elemental member has been assigned to locate a specific location critical to mission success. Most often this location will be beyond the visual scope of the EL and this command acknowledges that the element member is alive, in the correct position for the task at hand and is able to engage threats as required. When the element initially forms up on the EL the only member that MUST say this command would be the Rear Guard for all other members this command is optional during initial form up.

This use of calling "Objective Reached" when taking your Point of Domination, is something that [SAS]_Capt_En4cer pushed down the necks of [SAS]_SSM_Spidey01 and [SAS]_SSM_Rasa years ago, and that we in turn pushed it out to the rest of the clan. In SWAT 4, we have used "On it" IAW the GCHQs approval. You can't pass by our SWAT server without picking that up.

On the night of March 24th, in a private conversation with [SAS]_Maj_WIZ, the major countermanded this [SAS] SOP, and blatantly refused to notify the membership.

Since then, I have pushed very hard that if the MAJOR has just threw out that SOP, then every one must be informed that it has been null-n-voided. Other wise, the Major is wrong and has failed to keep up to date with [SAS] Tactical matters. My private conversations with the Major on the issue have had very brutal moments: as WIZ has admitted and spoken to me about over the years, what he has done to members (in particular the occasional cracker, people now residing in NTF, and ex SAS members not in good standing with SAS or NTF), I do not consider myself bound by [SAS] CoH in our private chats, any more than he has demonstrated his own obedience to it. As the Major only kept himself CoH bound (in that regard) when using [SAS] forum and VoIP systems, I followed the same conduct, having heard nothing from Random about it: not a peep over 6 years.

During my shoving to have the issue resolved, I also noted that if GCHQ would fail to notify the membership of this important (and sudden) change to active SOP, that as WO1, I must either issue an order of my own, notifying the membership, or I must give up my Warrant.

In doing so, I have had my honour and integrity questioned, accused of being an NTF agent (it's WIZ's job to do so in both those cases), and in effect, having my physical person threatened with bodily harm. I have also had to tolerate enumerable "Mind games", which we all know how highly I consider those a disrespect for my intelligence.

[SAS]_CO_Random was contacted and asked to deal with this, as he is the only one with authority above Major. I was made to wait several weeks to receive so much as a word from Random on the issue, who has since done nothing -- I have not been informed. Worse then that, it was only after (as friends rather then colleagues) notifying WIZ with a draft post, issuing the aforementioned order and requesting to GCHQ that I be demoted to [SAS]_Trp_Spidey01 -- as that is the most value Randoms inaction has allowed me to contribute. Only after sending WIZ that message, did I hear from Random. I have not received further notification of this since then! This effectively made my position as WO1, totally pointless.

Today, I was notified by a LCpl about training still being conducted with "On it", and noted this to [SAS]_Maj_WIZ in private: who summery brushed it off, after which I noted either the membership still needs notification or the LCpl in question needs a wuppin' for the foul up. I was still met with the same run around.

Thus, I have resigned my warrant, and so conclude my responsibility as an [SAS] member.

Most of the past and present members in my Clan Topics post, have also had a huge impact (IMHO) in damaging the [SAS] I joined,  among other things: causing damage to the eliteness (WIZ has fought against this), and something I hear NTF members grip about their leadership over! Every action I've taken or planned to curb that problem in [SAS] in the years leading up to the recent falling out of several members, has been met with my superiors tying my hands, or delegating it to incompetents. So this was just the biggest insult of them all.

So at this point: I do not feel, that I have left the [SAS] that I joined, I feel that the team I have loved all these years, is being or has been pushed over the edge of existence.

Monday, April 26, 2010

Lately in my spare time, as one might guess: I've been picking up C#. That, and reading about electrical wiring and stuff, but I always new I'd light myself up one day xD.

Before bed, I was experimenting with building and structuring assemblies. Being my typical self, this of course means playing with the command line csc (MS) and mcs/gmcs (Mono) compilers, as well as their associated tools. IDE wise, I experimented with MonoDevelop under FreeBSD and the express edition of Visual C# 2010 under XP.  I must admit that as far as IDEs go, MonoDevelop is a pretty good one: the only negative things that I can say about it, being the vi mode is very minimalist (G doesn't even take a count), and it's not the most responsive program when the computers under heavy load: but still knocks Mozillas socks off by 9 warp factors :-P. Visual C# on the other hand, I can't say how the 2010 version differs from the 2008 one: only that it's not nice. To be honest, my first encounters with the express editions for Visual Studio 2010, shows me that Microshaft seems to have a policy of (yet again) hiding much of the tools from the user. Just starting Visual C# makes me remember how long Windows has hidden file permissions from the user by default. Perhaps most Windows users are to damn stupid to understand the concept of "Privacy", but any jackinape permitted to touch source code, should at least be made to understand the concept of debug and release builds (a heck of a lot better then VS's new defaults).

In my experiments using MonoDevelop and Visual C#, it only took a few seconds before I became glad that Vi IMproved doesn't emulate Intellisense; but it is fair to say that I'm a freak: my customised vim setup even disables syntax highlighting lololol.

And considering how much this build of Firefox has Flash burning through CPU cycles, I think my laptop is going to heat, if I don't call this a morning :-S.

Sunday, April 25, 2010

Oy gevalt, this port is compiling gcc44 as a build dependency. What is this, karmic retribution for my refusal to upgrade gcc45 today? HAHAHAHA
Lately I've noticed with getting up so early, now that I'm averaging like 0300-0700 local:  a couple hours nap in the afternoon really rocks!

It's like, the sun isn't up yet, but I'm ready to run a marathon. I've found enjoyably, that I'm naturally falling asleep earlier, which gives my mind less time to drift at night, and that I'm getting up early enough to be able to get more work done than killing myself burning the midnight oils. By the afternoon or late morning (if I got up urber early), I tend to plunk out, more like how I used to get a few hours before I would have to raise a crash to pillow exception whilst coding. Just dropping off for a nap, I find very regenerating. Setup the laptop on the ground to play my radio stream, put something on the TV: so that I'll have a point of reference for how much time as passed (clocks suck). Then settle down for a nice nap at the foot of the bed \o/.

Perhaps, I should officially call this my concept of a siesta! Either way, my waking hours are still something like 19-21 hours a day... if I don't pass out eventually lol. Today I had like a nice two hour nap, feels great; especially combined with sleeping *late* until 0500 this morning.

One of the reasons I've desired a conversion from night owl to early bird, is I've noticed after numerous hacking runs, like running 3-days straight cycles of coding from 1100 to 0700 (exhausting itself), that if I don't sleep at night, I'm terrible in the 'morning'. It's like, if I skip sleep, or just stay up 'til dawn, that I have a heavy pressure in my chest: and I don't like that. Strangely while I'm arguably sleeping less, my current sleep patterns actually have me feeling in better health/strength, than I have felt in over a lustrum.

I'm at a loss to explain it, except to think that my body likes the new (more natural) rhythm a lot more than the old one lol. It's kind of like I'm finding a new and better form of time sharing between activeness and sleepiness.

Saturday, April 24, 2010

Fell asleep only to get woken up a few hours later, because ma couldn't decided whether or not to crate the bosses dog (which we're watching here for a bit) during the coming storm. Went back to sleep, only to be waken up in a couple hours, once the storm hit full force.

After waking up from a nightmare around 10:00, and no luck in going back to sleep..... I'm stuck wide awake \o/.

Friday, April 23, 2010

Old MechWarriors never die, we just go back to the scrapheap

Spent some time playing MW4 again, and finding myself slipping into old grooves like they never left.

Still was able to dance around, targeting a Cauldron-Born while keeping it between me and a heavier Templer. No problems zipping my Centurion into position to hammer away at the enemy 'Mech, while scooting out of their firing envelope by the time their guns reload, maximum turn and burn.

I even found myself tactically directing the lance, more soundly than in times past actually, because of how much experience I've got as an Element Leader in [SAS]. That, and I still remember almost every tactical trick in the 'Meching game lol.

Thursday, April 22, 2010

My dumbest python moment ever....

In cleaning up tmk's cache related code for a fresh commit, I wrote an expand2str() method that encapsulates the issue of dealing with expand() returning a list of expansions, and a properly converted string being desired anyway.

Suddenly I noticed this backtrace:

Traceback (most recent call last):
  File "", line 929, in 
  File "", line 742, in process_recipe
  File "", line 276, in parse
    if not self.eval_pproc_directive(p):
AttributeError: Recipe instance has no attribute 'eval_pproc_directive'

Which is totally ridiculous, because eval_pproc_directive and parse are both methods of the same class. While the former is defined after the latter, by the time the instance (self) exists, the class is fully defined. Making a short test case, proved that the act of one in a billion hadn't changed Pythons rules about this stuff.

In poking around to see what changed introduced during this commit, may have popped the magic cork, I noticed removing the reference caused the same type of error, successively on methods defined after they were invoked.

Then I saw it!

I had accidentally indented the expand2str() method one short, there by making it a function rather then a class method, and there by doing like wise and making them nested methods inside expand2str().

Sometimes Python really irks the typoist in me!

Life proves my calculations right.... yet again dear mother!

While perusing the developer documentation for Chromes extensions system, ma gave me a summery of a phone call she just had: namely that she is now looking at an $80/month loss in revenue. As their own business is going under, one of the clients that we've worked for, must be at least three or four years now, won't be able to maintain regular cleaning. Thus things are tight all round.

I pointed out to my mother on Tuesday, and again on Wednesday, and numerous times before this, that if it wasn't for her shafting me over driving, that I would likely have been gainfully employed outside her business by now... which would have been darn handy in light of today's news! My families been allotted inklings of my plans since at least '09, and they've done nothing but screw me over every which way: looks like I was right, doing so wasn't in anyone best interests ^_^.

The massive time delays ma has already forced on my short term plans, has caused me to miss the ideal hiring point for my original business plan, and I've already shoved (and reaffirmed!), that I ain't doing jack until I've got my Class C and it's been proven that I'll have sufficient use of the car, to be able to hold down a steady job. Should we say, over the last ~twenty years, my family has given me enough cause, that I don't trust them as far as I can throw an Atlas.

My war policy is unconditional victory.

Wednesday, April 21, 2010

Today at work, I was thinking over my next agenda with tmk, namely implementing the checksum based method of checking whether or not targets are up to date, and recipe caching.

Implementing the checksums are actually pretty easy, the hardest part is just adding a command line option and a method for changing the checksum algorithm to be used.

Doing the cache on the other hand, is a bit more 'thought' required in the solving. Because tmk currently does variable expansions on rules, it's impossible to correctly cache for any rule or variable assignment involving an environment variable. The principal reason for the variable expansions, was so to help ensure the uniqueness of a rule. So obviously, the proper thing to do is to delay the variable expansions until they are needed, there by making the data store completely cacheable.

The obstacle of course, is that rule definitions can no longer have the chance to be a way in which the rules become unique, which rules out the possibility that variable assignments can occur after the top level: which encourages me to push the spec in the direction I had originally planned. Another option, would be to just leave it as is, and note the issue around environment variables in the manual. Of course, a third possible solution is making the processing step more aware of line numbers.

Since I'd rather have it that way, I'm opting for the first: delaying the variable expansions so that the entire result of the parsing phase can be cached.

I also feel like a chicken with it's head cut off atm :-S
Got up for less than two minutes, and Coco starts to jet off to steal my spot on the couch... so I sit down before she can snatch it. When I suggested that she try "Sharing" the couch, you would think from the look on that dogs face, that I said a dirty word!

Back on the road.... finally

After enough effort at coercion and airing close at a drop to DEFCON 1, I got to do the driving to work today.

The trip was about 35-minutes each way, making it about three times longer then any other time I've been able to drive. There was only about 3 foul ups and an error, not bad for an inexperienced noob whose also been denied road time for at least a week and a half, if not longer \o/.

First issue was about 30m down from where we live, mostly because of a certain someone opening her wide mouth and trying to tell me what to do ^_^. Once I reminded her, she finally took the order and let me be at peace.

Second was about half way there, when I cut one of the turns at to high a speed for my taste, but things were always under complete control. It still was faster then I had wanted to take the angle, so I personally consider it an error on my part. I have seen a heck of a lot of other drivers, taking that turn about twice as fast as that, but I prefer a wider margin just in case I've got to stop in a hurry (it's usually a busy spot).

Third was running a red light in the middle of no where. I couldn't see what colour the traffic light was coming around the bend, so I brought the speed down, and by the time I could see it was red, there wasn't enough time to bring the car to a proper halt, so I just went on through as it was clear; it was just a speed control, not a junction point. Well, technically I could have stopped the car in time if it was absolutely needed, but my mother would've yelled at me more for the hammering on the breaks than for going through the light ^_^. I need to watch that corner: I take effort not to repeat my mistakes.

Forth was a minor synchronization issue going into the sub division. Kind of like being caught in the middle of ants-in-the pants drivers and me being doubly cautious of the traffic involved. I always count on every other driver to have no clue what so freaking ever what they are doing, so there was never any danger. Still, it was a bit of a hairy spot, more than I'm comfortable with, but the only way to get that area more smooth, is going to be more laps on through it.

The return trip on the other hand, was smooth as a babies bottom. I thanked ma for letting me drive, rather than telling me how to drive. Carrying on a conversation or something doesn't even bother me, not in the least; but I prefer to exercise my right of being in the driver seat.  Simply put, it's driving a car, not disarming a bomb... I might no what I'm doing ;).

I also noticed last time I was allowed to drive, that I have a tendency to not bleed off enough speed before the last drop on the way home. Today I was almost able to calculate it perfectly, but intend to kick myself into taking it slower in that area. I'd rather consciously decide to take it easy, rather than computate where the inverse will lead to.

My favourite part of the drive though, was being passed about four or five times: most of which occurred while I was going the speed limit, and right next to a big yellow sign that says, "NO PASSING", some how, when I was just telling a German friend the other day, that Georgia drivers will pass you on a dime, it brought a titbit of a smile to my face :-D.

Generally I air on the side of caution, because while I know what I'm doing, I am not an experienced driver. I go aim to keep the car within speed limit, and bleed off enough speed that I'll be able to bring the car to a safe halt in any tight spot that's coming; and I can see about as far as the road permits. I don't care if I could take things faster and sharper without compromising safety, because I know (from having done it) that I can do it if needed, but I'm not interesting in joining the rest of my family: in being lead footed.

+1 for design

I've just fixed the bug about tmk reporting the wrong filename when an included file contains an error. The thing that makes me smile, is because I designed the recipe parsing and processing code reasonably well, making that work correctly was trivial. At worst, I expected that I would have to modify the Recipe class to incorporate a separate data stack into the parser, but not even that was necessary. Most changes were (as hoped) just refining the data structures used for storage.

tmk is pretty simple, it does two passes at a recipe:

  • First it parses the recipe into an internal data store, most serious (e.g. syntax) errors are reported here. A minimal level of evaluation is done, namely we need to do some expansions or you can't use variable substitutions when defining a rule.
  • Secondly, it walks through the data store at processing time (e.g. doing the magic), conducts final expansions when needed, and carries out its mission in life.
One reason I chose the syntactic style that I did for tmk, it is both visually straight forward, and easy to code around. I like simple but effective, when it works.

My next (and real) task, will likely be making the rules relational to one another, exempli gratia to topologically enqueue rules in dependency order. Right still tmk is limited to sequentially executing the rules. That's actually good *enough*, but I'd rather have that tidbit taken care of by tmk, then having to address it in the recipe construction.

I must admit however, that adapting isnewer() by way of it's cmpfunc parameter, to cope with using file checksums instead of modification times, will be fun to implement :-D.

Tuesday, April 20, 2010

Family affairs now at Defcon 2

Today's agenda was spent, shoving Her Royal Pain on the driving issue: I reminded her vehemently that come June 1st, I'm charging her $15 for every hour missing from the required 40 hours (pg 22/12) that I'll be missing towards a full drivers license. I also reminded her that once June passes, if it's still not sorted, that I'll be sticking her with her choice of a huge bill representing about 1/3 (minimal) wages due for years of service,  or charging her fees for all time-wasted in her business after July 1st, at a level appropriate for someone with my coding experience.

I'm officially operating at DEFCON 2, and standing by for an elevation to DEFCON 1: all out family war.

In my experience, my family only understands two things: physical and financial violence. That obviously means my only avenue is to hit her, is where it hurts: in the money department. Simply put, if she wants to be a stick in the mud, it will cost her until it breaks her. There is no other way to deal with it, short of cutting my family entirely out of my life, for the rest of however long I live. I'm tired of the bullshit, from her throwing the cost of my glasses and medical issues in my face, both of which she had to pay for, for having pissed away every dollar I had saved up!

I got my permit during W2, it's now W16, and I have had less than 10 hours car time, and less than 5 hours road time, in some 14 weeks! If this is someones idea of a joke, I am not laughing. My mother has successfully wasted almost three months of my life, placing me massively behind schedule. At the rate things are going, probability factors suggest that completing my lowest objectives of a license and job, won't be achievable before the 2013-2015 range—and thus I arm for war. I see no reason why something that should take less than 2 weeks maximum (40 hours driving) should require calculating a span of 9-36 months: the margin being whether or not H.R.P. moves her ass at a constant rate, or the usual rate, which tends to approximate exponentiation by a small irrational constant. All I need is 40 hours, plus enough experience that I am competent enough. Considering present maths, I'll be dead before then.

My dead line goal of having at least my license sorted by June 2010, was set LAST YEAR, and I have spent the last FOUR years planning how to move forward without being bound deeper in chains... I'm not going to tolerate it. I've been denied peace for most of my life, I've been made miserable most of the last sixteen years, I've been unwillingly used as bitches bait in countless family wars, I've spent almost the last seven being used as slave labour, I've had almost every positive part of life removed, and I will not surrender. I spent most of my youth counting my families petty squabbles in terms of WWs, stopped around WWIX when I realised it would likely surpass the super bowl numbers before I hit thirty. I'll start one myself if that's what it takes.

The ultimatum of guaranteed financial destruction has been reissued, and the dead line is just that, a dead-line. Quite simply put, the only single excuse I'll except for failure, is if the United States enters World War III before 2010-06-01, anything else is strictly fuck you, get out of my way!

I've given almost seven years of my life to suffering to my mothers business, and almost all of my life showing my family patience with how I'm ground into the dirt: well guess what, being canonized a saint isn't on my bucket list. If DEFCON 1 is reached, then that is the end of everything, and I do mean, everything.

For almost as long as I can remember, I've had to put up with my mother and brothers relationship sucking the life out of me. Taking every possible effort to block my goals, of all but denying my right to life, will not be met with a nodding smile of cooperation!!! Push a person hard enough and eventually they will break, well guess what, I've been being pushed since at least '94, and I don't break, I take action.

In the words of Patrick Henry: "Give me liberty, or give me death!"

Monday, April 19, 2010

More arachnid weirdness

After spending a spell of working dawn to dusk on one program, how do I spend my afternoon to relax? By learning programming language I haven't inhaled yet!

The other night, I installed Mono on my laptop and desktop; the windows box already has express editions of Visual C# 2008 and 2010 setup. While it obviously tool a while to compile the full stack, it was still faster than most C++ applications I've grunted over build times about. The thing that really impressed me however, was how fast MonoDevelop compiled; while not a 'huge' program, it's large enough that the compile time was impressive.

Compared to my experiences with javac over the years, mcs was blazingly fast. Four reasons that I tend to avoid Java development: the tools tend to be make me tap my foot in impatience at the wait times, most Java apps I've crossed paths with are not fun, OOP is pushed down the coders throat, and doing Swing layouts by hand is a royal pain.

I'm not a fan of C#, but I do consider the whole CLI/.NET stuff to be a very attractive platform. Perhaps sometime when I've got a couple hours to burn, I might pick up Gtk# and write a systray'let to check my mail box or something.
I'm going to be dead tired before noon even approaches,  but I'm smiling now! The focus of my day, has been on getting tmk up to snuff enough that I can use it as a general purpose solution to my problem: cursing at the present 'generation' of such tools.

I worked on getting a base set of magic bound variables and teaching tmk that certain rules may be skipped, if a set of pre-conditions hold about the files involved. Getting that done was easy enough. The checking code is now more robust, properly handling an arbitrary set of input/output names, in as much is humanly possible ;). I'm smiling, because I spent most of the night being annoyed every which ways up, on top of an already splitting head. Ended up having to quit coding for a bit, and just hit RvS for a couple hours.

About two hours sleep, and still plenty of hours until sunrise, I woke up and got back to the codin' and now it's done!

So far, tmk is put together in a rather short amount of time, even if it's been on my dancing list for a few months; finally it's almost beta quality. Only show stopper that's come up in testing, is it fails to handle unexisting tmk variables correctly, but that's a one LOC fix. An outsanding issue, is that tmk variables with whitespace in them are improperly expanded, e.g. $(foo bar) expands to bar) even when a variable named 'foo bar' exists. That however is because of how the tokenization feeds the parsed data into the variable expansion system. Although for the sake of simplicity, I planned long ago to make the specs dictate such variable names as invalid whether or not tmk actually accepts them, so it's a lesser issue. The include processor directive, also reports the wrong (e.g. parent) filename but correct line number (e.g. from the included file), yet that bug can be fixed in a few minutes; so I haven't bothered yet.

Two features that remain to be done, is making rules relational (by dependency) rather then executing them in sequence, and to giving tmk the option of using checksums rather then modification times for minimising rebuilds.Which also comes into part of the leg work, for implementing a cache, hehe

Most of what needs doing, is some light polish and adding more builtin directives. Been thinking about making tmk understand a simple plugin system, that would allow it to load reasonably trusted bits of python code into part of the program, thus allowing new directives to be added at will, as well as replaced. I'll worry about that later though.

Sunday, April 18, 2010

What's worse then being overworked?


  • overworked
  • poked and prodded
  • and old!

A bit of fun with tmk

Yesterday I setup tmk to understand how to include files, by using a simple pre processing directive, making the syntax for tmk fairly simple:

variable = value

rule lhs -> rule rhs:
        command directive! word arguments

Where variable expansions and file name globbing is widely used as part of the design, while keeping the recipe parsing code fairly trivial. I designed it this way, both to be familiar with Make (although lhs/rhs are reversed), fairly obvious at a glance, and to be easy to implement. Now tmk also understands the concept of a (pre) processing directive. Since directive! is used within rules, the processing directives use the inverse, i.e. !directive. I believe that makes a better distinction then using a different symbol, especially since you can not use a command directive everywhere a processing directive is permitted. Right now there is only one directive, !include which slurps up it's argument list as the name of a recipe file to include within the current, before continuing of course. Some form of conditional will probably be added later on; even though the rule syntax gives a way to define certain looping behaviour.

Today's goal is to basically implement the concept of if the outputs (lhs) are more up to date then the inputs (rhs), the rule can be skipped. I don't expect that to take to long, since most of it is just screwing with the rule expansions in order to properly stat the files. If I can get it done expeditiously, I'll also have time to setup a few late binding `special` variables that will be useful, in proper Make fashion lol.

At which point, tmk will be effectively as good as a generic make implementation; and I can work on the parts that need to follow on. Namely the parallel support and portability aspects. The latter of course, being the main reason why CMake, SCons, and most every other such tool I've tried, has been rejected as more trouble then it's worth.

An idiosyncrasy no one else gets

Whenever someone asks me how I am, I often phrase 'and how are you?' as '&you ?', which is something usually lost on everyone. In the C programming language, the ampersand is used as an address-of operator used to create a reference of sorts, and is integer to utilising pointers. So litterally 'address-of you ?' makes a very explicitly reference while remaining a syntactically correct substitution of '&' for 'and', in English anyway.

If anyone finds that odd, just try not to think about how Lisp and Perl have impacted my brain over the years lol.

Saturday, April 17, 2010

One of those songs that just grows on you

This has been racking up the airwaves lately on 94.9:

You've been singing, that same old song
Far too long, far too long
Say you'll buy me a shiny ring
But your words don't mean a thing
No more calling me baby
No more loving like crazy

Til' you take me down (take me down)
You better take me down (take me down)
Take me down to the little white church
Take me down (take me down) Take me down (take me down)
Take me down to the little white church
Take me down...

You can't ride this gravy train,
Anymore, anyway
There's a price for keeping me
I might be cheap, but I ain't free
Now more calling me baby
No more loving like crazy

Til' you take me down (take me down)
You better take me down (take me down)
Take me down to the little white church
Take me down (take me down) Take me down (take me down)
Take me down to the little white church
Take me down...

Come on!

Charming devil, silver tongue
Had your fun, now you're done
Mama warned me 'bout your games
She don't like you anyways

No more calling me baby
No more loving like crazy
No more chicken and gravy
I ain't gonna have your baby!

Til' you take me down (take me down)
You better take me down (take me down)
Take me down to the little white church
Take me down (take me down) Take me down (take me down)
Take me down to the little white church
Take me down...

Take me down to the little white church, take me down,
Take me down, take me down to the little white church, take me down, take me down, take me down, take me down to the little white church, take me down to the little white church, take me down to the little white church
Little White Church—Little Big Town

Friday, April 16, 2010

So far in the past week'ish, I've had two days work, two days deep-coding dawn to dusk, and two days spent with a nose like a cherry bomb :-(.

At least on the positive side, 3-4 days worth of work split between December 2009 and April 2010, my on-the-back-burner build tool has almost reached the level of utility of an early make tool. If conditionals were supported, it would be able to handle building Stargella as easily as Microsoft NMake and GNU Make can. The next steps for tmk will likely be implementing local variable bindings (think $< and friends), and a mechanism for including other files.

With this habit of getting up so insanely early, I also find it more difficult to stay up all night, unless my brain *is* focused intently on something. In which case I barely sleep at all lol. I also seem to be able to throw more hours of labour behind projects on my days off, when I get up earlier rather than later.

Now if I could do something about being pushed a few months behind schedule \o/.

Tuesday, April 13, 2010

Visual C++ 2010 Express, new levels of weirdness...

As usual there is a redist.txt file in the Visual Studio root, that explains about what Microsoft supplied files you're allowed to redistribute with your applications. In MSVC9.0, the express edition only came with release and (non re-distributable) debug assemblies of the C, C++, and  managed code runtime libraries.

In looking at the files installed by the latest and strangest version yet, I see that there is no vc\redist folder... instead there is a vc\crt folder, that contains a mungle of C and C++ that appears to be source code for some type of MS C/C++ runtime libraries :-/.

You know RvS is brain damaged ....

when you've got three tangos shoulder to shoulder and shotgun aimed shells do nothing at point blank, except hit the snow directly behind them!

when you're running like a bat out of hell and can still snipe a tango 30m away with a snapped buckshot

when tangos can dance around a load of buck like Michael Jackson on stage

when hand guns are better short range weapons then a shotgun

when tangos are better dancers then shooters, are worse shooters then noobs, and more accurate then Hathcock, while sliding down a staircase backwards!

I could go on and on, but I'll just say Raven Shield demonstrates much brain damage.

Monday, April 12, 2010

+1 simple relationals

On my way to the head, I was thinking about ways to improve the robustness of a program  that I've been tinkering with on the side. Simply put it defines an ordered set of roughly hierarchical data, that is integral to processing later based on certain groupings of it. The set is such a collection of information, that recalling it later would best be done through an associative container, where in the keys may be any unique attribute of the data set being processed, rather then having to be any given accessor.

The obvious solution to bundling the data, is to create an abstract record representing the keys that need querying, e.g. each objects attributes are expected to correspond to an unique instance formed by the data set. In thinking about how such a thing might be implemented without losing the speed of a hashed table look up; the first thought to come to mind, of course was the most simple and straight forward idea. If the implementation language was C, it would be trivial to throw together a set of structures for representing items in the data set, and wrap them in an opaque record that binds together a group of hash tables or balancing BSTs for each key type we want, which would then look up a pointer to the individual records, through a structure tuned for minimal memory usage. Second to come to mind, was a rather interesting tree structure to minimise cost for retrieving any given node. In which of course I remembered that this particular implementation case dealt with a certain language that traded such memory conciousness for a garbage collector.

On my way back to my work station, I thunk to myself, "Well hell, I just defined a relational data structure!", and with the idea of running an SQLite database in process memory now floating through my mind, sure enough the API that I had envisioned, was little more then a relational algebra tuned to the problem domain being worked in.

The implementation language might lack an equivalent to Cs memory management, and gives no guarantee that the amount of copying and GC work involved wouldn't grow exponentially with the data set size... but it does have a binding to the SQLite database, which is fairly handy, hehehe. So the obvious question is which way handles things more efficiently: relying on the language implementation to avoid unnecessary copying of memory, or going through the overhead of a lite weight SQL database.

Sometimes I love how these kind of things are so simple to work out in the course of short trip down the hall, lol.

QOTD 2010-04-12

There is a reason soldering iron handles are bright yellow. It will still not stop you from picking it up by the hot bit at least once...
source: /. 
The two things I rely on the most, are a command shell and a web browser... yeah. Over the years, these have almost become like meta-user-interfaces for me. The CLI allows me a very effective way to manipulate the file system, and while cmd sucks at everything it does, modern unix shells throw in enough to create a very powerful environment. The main cost in learning how to use the command prompt, is learning how to say what you want, rather then point at it like a child. In all my years, I've still not seen a file manager application that can match a proper unix userland and scriptable Bourne style shell. Web browsers have been a huge part of my life, since the WebTV era lol. E-mail. calendaring, task management, keeping up with the news, bookmarking, even my journal, is all web centric for me. 

Both a terminal emulator and a browser, dominate my screen real estate. After that, basically comes instant messengering, which is arguably the only GUI+Desktop apps I really use all day. Other software like geeqie and mplayer fall into special use cases. 

When you use software a heck of a lot, you learn to leverage it for every ounce it is worth. For example, vim is an extremely powerful editor, but if you only use the delete and arrow keys, you are wasting everyone's time. I spend enormous amounts of time with text, so efficient editing of it matters to me: why spend an hour doing what software can do in seconds? Uh huh. My love for Bourne style shells, comes from the ease of scripting: whatever I can do in a script, I can do at the prompt; making arbitrarily complex tasks accessible. I'm sorry to say that Microsoft's cmd is a pile of junk. PowerShell is improved, but still lacking compared to most unix shells \o/. Web browsers are still very unevolved creatures, I enjoy chrome because it's unobtrusive and actually tries to get out of my way; it's also proven to be an order of magnitude more stable than Netscapes bastard has been over the years. 

I hope someday, before I'm blind and arthritis rittled, that web browsers eventually catch up. Short of (ab)using extensions, the only real way to improve upon the average web browser, is to abuse JavaScript extensively. Most web browsers still ship lacking basic amenities; and I don't believe in using extensions to solve "Oops, to lazy to do it right" problems.

Google recently blogged a video showing off new features in gdocs, and it looks like much of what has been missing, is now coming promptly to Google Docs :-D. They don't seem to have rolled out, at least to my level of access, but it's looking good on the tiny screen.

I really have no love remaining for local office suites: they tend to be big, slow, expensive or time consuming to compile. Web applications can be made to work just as well, and with considerably less groaning involved. So, it is fair to say that I've really come to like web based solutions like gdocs, even if I'm not a big fan of all the hype in recent years about migrating to the 'cloud'. Why should I put up with the bother of Microsoft, Gnome, Open, or K office, when most of the crap I care about, can be done on Google for almost zero maintenance?

When I have a document to get sorted out, I have the habit of selecting whatever method works best for the task at hand. Most often that is something I can hack at in vim, and then generate a suitable output for sharing. I don't send Word files, I normally send PDF files and sources. That is a much better way of doing it, when you want someone to view the file, not edit it and send it back. When I expect someone else to be editing the document, I tend to employ gdocs over an office suite, because of Google's sharing and collaborative features. Playing pass the pumpkin document is a morons errand compared to gdocs, and I reckon for some folks the publishing parts are handy. My interest is more so in the collab' features, because that was the big incentive that brought me to gdocs in the first place. Now that those features are growing again, you can bet I'll be putting them to use.

For me, Google Documents is just a means to an end: get the document done with minimal fuss. When I'm stuck dealing with people who wouldn't know a DocBook from a troff, let along what the heck version control means... it makes life a lot easier without complicating MINE! The level of control over HTML/CSS offered with the word processor, even makes it easier for me to integrate gdocs into my work flow when more power is required; I've yammered about that before. If anyone has ever had to feed Word files through pre or post processing phases, uh, you will enjoy living with Googles method lol. Since I rarely need to do rocket science with spreadsheets, I've never had much to complain about their spreadsheet app. Recently I've used gdocs word processor and spreadsheet on numerous projects, including dependency tracking for our EPI Core Services package, and it works darn good for what we need to do.

My only big gripe over the years has been the lack of Google Talk integration with gdocs, compared to GMail. In our spare time efforts with EPI, GTalk/XMPP actually became our norm for development meetings, after efforts to deal with AOL and Microsoft's solutions, only added extra interoperability problems. At least I can say 'gdocs' and people will usually know what I mean, if they know about Google Documents in the first place lol.

The video Google posted, demonstrates a much better way of dealing with the multiple editors problem then what's been classic with gdocs. I can still remember a time when it was virtually impossible for two people to edit the same file simultaneously, haha. I am very intently interested in seeing these changes rolled out, and definitely have to give the drawing tool a go. Normally I use Dia for any diagramatical needs, and the GIMP for heavy lifting; if Google's drawing app can get the job done, it really would save me the effort; we'll have to play and see, hehehe.

Now that gdocs can handle documents, presentations, spreadsheets, forms, and drawings. I reckon fwiw, it is almost a fully functional office suite. I can't say that I've used the presentations app, since I'm naturally against death by power point, but it would be my first stop if I needed to put something like that together.

Spending huge amounts of time draped over MS Word 2k2, taught me the value of using decent tools; where as learning how to use better tools, is what taught me the value of leverage software in general ^_^. Most of the time, I employ LaTeX or DocBook for large projects (the kind you don't want to see the inkjet taxes on), but I will occasionally use gdocs for simpler documents of my own. When it comes to word processors, Google Docs is no worse then the rest, and in  my experience has improved more over the past few years, then Microsoft and Suns/Oracles solution. The ease of sharing and editing the doc with others, has made it one of the few officewares that I actually enjoy, except for the lack of vi and emacs keystrokes of course \o/.

I've no real brand loyalty to Google, even though their software makes up a large part of routine. Sometimes it's simply the best glove available :-/. For as often as this software has helped me out, I'm happy to use it when it fits.

Dealing with side-seat drivers

My way is to actively test and annoy, until she learns the meaning of the words "Shut your gob"  ^_^.

I've been treated like an animal often enough, that I'm not interested in being treated like a machine.

Sunday, April 11, 2010

If only you could see my grin

*rubs hands together evilly*, oh this is going to be soooo good. If anyones got a copy of rvs, take a look at the server list, hehe.
Today was a refreshing change, I spent most of it glued to my desktop: three command prompts open, with pidgin tabs, chrome tabs, and mplayer occasionally filling in the rest of the space :-D.

I basically rewrote the recipe parser for tmk, bringing it up to the specification. Generally I'll avoid such leg work, except when it's a simple grammar or no suitable tools are available; and tmk is very simple. Command directives and much of the expansion system were also implemented today, making tmk almost complete enough to compile a project. What needs doing, is proper macro expansions (tmk vars don't work yet, but the rest of the expression syntax does), so that `magic` variables acline to makes automatics can be created. Once that is done, creating the desired directives is a fairly trivial process; hooking them up to language/tool independent and developer serviceable backends being a piece of cake.

While testing the directives code, I needed to come up with a temporary error message, one that had to be a bit absurd: being as it was intended for testing the domain in which the error applies, rather than an already iron clad reason to use any given message To that end, I came up with one that would really stick out among the other diagnostics: "{file name}:{line number}: the bad year blimp has landed". This, as some might instantly see (;), is a slight homage to Mel Brooks' Spaceballs, more specifically to the scene, "Uh oh, here comes the bad year blimp!", in which Lone Starr calls for the switch to "Secret hyper jets". And of course, I had to load that film into MPlayer and my DVD drive while I wrote code xD.

When developing something, I typically do a large amount of in flight testing to verify the codes behaviour. My efforts today have been no different, testing time perhpas, making up more than 60% of the time I spent working on tmk. It's not unheard of, to find XXX marked comments denoting details about some edge case that hasn't been covered, and a note to kick me in the head if that theoretical hotspot ever occurs; such things usually happen when I'm extremely pressed for think-time, due to (ofc) being interrupted every upteen times. At which point, priority is usually on implementation speed over perfection. Today, I was lucky enough to be able to work largely uninterrupted: a rare pleasure.

For me, programming is a very relaxing effort. It's one that I can absorb myself into the art and craft, designing programs bit by bit, constantly improving them with each iteration, until my aims have been achieved, or I've passed out. Despite being a very exhausting task to keep working at, I rarely find it to be an intellectually arduous one, so much as a test of endurance: to stay in the zone for long stretches and deal with the effort required for the, eh, shall we say more paltry and menial aspects of coding a decent program. There are some parts of programming that really do tax the brain, the fun stuff to work on solving ;). On the other side of the coin of course, is a lot of things are more straight forward to sort out. Many aspects of programming overlap both the engineering and the every day groan of getting ti done. Both are needed, in any non-trivial application, that you'll be seeing more than a couple hours of use with.

That being said, being able to look at things from several vastly different directives, does help a lot. Because of the amount work needed, it seriously helps if you can stay in the zone for a good 6-8 hours or more per sitting; but becoming tunnel visioned on the creative and problem solving parts, is generally a bad thing. One must slip gently through the mind of no mind, and know how to leave your box behind. There can be an insane amount of stuff to deal with in some programs, and I find that the level of such, increases both with the complexity of the problem and the pitfalls of the language utilised. For example, C, lisp, perl, and python can each express many problems quite well; yet each excels at expressing certain ideas more naturally, or with less effort, than the others. I actually was missing lisp for a good hour today lol.

Days where I can just sit and focus on getting stuff done (in peace) are terribly rare here. When I get into work mode, just get out of my way, or I'll be quickly annoyed. I don't like it when people waste my stack space.

Friday, April 9, 2010

In one of the rare moments that I actually stop to read my RSS feeds techy side, I noticed that WebKit2 has been announced. The only thing I can't help but wonder, is what the flub does a layout engine have to do with processes? Not a damn thing! Personally, I would appreciate a separate API/library for such separate of interest: in particular, one not tied directly to WebKit lol. Ok, so maybe I'm crazy.

Whether you are a user or a developer \o/, nether Xembed or the various (oft' fugly) incarnations of Microsoft COM really make anyones lives just easier. Under X based systems however, it is possible to mate separate processes running WebKit into a central controller without to much heartache; there are already some bare bones browsers out there worth looking into, and patching when they don't measure up. Non however have become common place, and even among PCs, there are really only a handful of common web browsers out of dozens of products to choose from.

Somethings are always going to be closely bound; first takes of an idea, even more so an idea geared for getting the current project done, tend to do that even more so. Personally, I will just be happy when there are less web browsers out there that suck... and keep on sucking.
Like clockwork it seems, I'm awake, and it was just a few minutes before 0700 local time. I had tried, and failed, to make it a habit last year, or waking up early; but recent stuff has cemented it into my internal ordering. It's like I just start waking up until my eyes flutter open wide awake.

I was dreaming that I was at church, and the helping the pastor look, until we finally found some important clicker that got lost lol.

RvS -= 1; SWAT4 += 1

I spent part of the playing around with Raven Shield and SWAT 4: TSS. Although to the best of my knowledge, Unreal Engine 2 did have support for joysticks, both these games shipped with that support half-assedly disabled 8=). In short, the games basically ignore all joystick input.

Never being one easily daunted, the three obvious solutions occurred: A/ configure the games for keyboard only operation and the joystick to emulate keyboard input; B/ use AHK; and C/ write a small toy to emulate a mouse by way of joystick input. I have already done A, and plan to test out B tomorrow (eh, today), if need be, perhaps play with C at some later date just for fun.

Under the Unreal Engine, or at least UE2: movement is a fairly simple thing. Basically you apply a positive or negative "Speed" factor to a given axis, resulting in some kind of movement: such as translating the players pawn(?) or moving the cursor. It's kind of simple, +/- base X and Y axises are more or less your walk. Where as the aBaseX and aBaseY axises correspond to the mouse. For SWAT, the task is basically as simple as binding a group of keys to apply +/- Speed to those axises. The bigger the speed, the more reaction you get per key press. In Raven Shield however, despite several methods tried, only positive and negative X (left/right) movement was fully working. Irregardless of change, only upward Y movement was possible in RvS \o/. After 6 years of it, I am often the first to call Raven Shield a pile of crap. Tuning my retired joystick to trigger those keys, is fairly simple: although the profiler lacks mapping JS to mouse aixses, sadly.

While it is possible to configure SWAT 4 for keyboard only operation, and thus JS based aiming; it creates somewhat of a problem. It's virtually impossible to both be able to turn/maneuver around obstacles and to aim and fire at targets. The reason for this is somewhat Unreals fault, that and the fact that "Keyboard acceleration" is not quite, eh, the same as mouse acceleration. In testing with my stick, I found values of +/- 3.75 to 4 tended to work good for aiming, where as +/- 5 to 8 work better for turning. Since a joystick should garner a form of movement more acline to that of mouse acceleration, rather than a keyboards uniformity, it causes a conflict of interest. Mouse acceleration works on the indea, of increasing the speed of mouse movement in proportion to the distance you move it, e.g. it gets faster as the further you move it; where as accelerated it always moves at a steady rate. Perhaps a good if incomplete explanation, for anyone whose played a Playstation with an analog controller: mouse = stick, keyboard = d-pad; thus mapping js to keyboard = d-pad != analog stick. Obviously to play an FPS with a joystick, you don't want it to behave like a sluggish 'd-pad'. One way to solve this, would be to dynamically modify the Speed= value used by the key, incrementing/decrementing it by some stepping per use; while not as elegant as it might sound to some, is also impossible. UE2s console and command system could only handle the ++ and -- operations by writing out the increment steppings using the pipe(|) operator, and following it up with an OnRelease operator to reset it back.

A better solution, obviously is just playing a ficken game with joystick support \^/.

As for the aforementioned method B, wouldn't you happen to know that it's already there. It would be the best solution, and AutoHotKey is a fine bit of software; one I've always wanted to find a good use for in games. Depending on how well it can be made to work at converting a JS into a mouse compatible HID, in particular with games in general, I might actually give up using the mouse for regular desktop usage. Thanks to my laptop and having encountered a fair bit of hardware in life's travels, I have no special attachment to PC mice: only hatred for ones without tails. Than again, I don't like wireless hardware for much, period.

The third method (C), well, is one that I would only consider worth the effort, because of the learning about Windows specifics that it would involve. I wouldn't be surprised if Microsoft had it as a sample app somewhere either. The libraries I rely on for input backends (e.g. in Stargella) have their own portable handling of joysticks as is, so I've no real reason to care lol.

Tweaking my noise at the old API

In fooling around with the Windows API, I've just had an enjoyable moment of guffawing. As a quick test of the JS stuff in winmm, I hooked up MM_JOY1MOVE to MessageBox() and ran the program under the debugger. It resulted in an endless stream of MessageBox(), resulting in the Windows task bar hanging, and taking at least 25-30 seconds to recover, after the program had finally overflowed the stack, been examined, and finally terminated manually.

I almost died laughing lol.

Thursday, April 8, 2010

A little fun with RSS

In a bit of experimentation, I've been thinking about ways to improve the way a certain popular web platform plays with the services I utilise. So, today I began playing with two new toys: FeedBurner and Yahoo! Pipes.

Feed burner offers a bit better control over ones RSS feeds, than most web services that I've encountered do; in particular, much better than both Live Journal and Blogger. For what it's worth, I've converted my blogger feed over to the burner, allowing me to trivially add a few things to the feeds without disturbing any existing subscribers. The main difference, is now I can tweak things for stuff that I feed my journals RSS into, hehehe.

One downside of FeedBurner, is that its ability to merge feeds with the "Link Spicer" feature is quite limited. In particular, it's little value beyond a limited set of common services. Enter Yahoo! Pipes: using it, I was able to (trivially) munge together several of my service feeds into a singular one, e.g. combing several photo album steams into one pipe. I've created several feeds, that I doubt anyone will be interested in; but allow me to route selected information sources into RSS aware entities.

Although Really Simple Syndication has been around for more or less, a solid decade: few people understand it's true value. Properly managed, web feeds whether built on RSS or not, can achieve part of that interoperability that certain keyword jugglers puddle about with XML, and it's been here for years. If you want to cram steams of data somewhere, odds are you should be looking to see if some type of web feed will fit the bill, rather then throwing together yet another obscure XML format to juggle. Bonus points include that decent libraries are already available, which can save some time and make easier to read web app code later ^_^.

Recharging time

As today marks the first in six days off work, my plan is to spend it on rest and relaxation, assuming no one has any more nukes to juggle 8=). If anything explodes, people can push a fix it task out to my RTM, but I'm taking it easy for a while lol.

The most stressful thing I'm doing this week, is moving over more old entries from Live Journal!

Sunday, April 4, 2010


I've noticed that if I place my screen window into copy mode while the compiler runs, Firefox doesn't become so massively unresponsive, slower, but no where near as slow. This makes me wonder a bit.

Either way, I can run less bloated web browsers on this meager laptop without any hiccups from a running compiler 8=).
My heart aches, and a drowsy numbness pains
My sense, as though of hemlock I had drunk,
Or emptied some dull opiate to the drains
One minute past, and Lethe-wards had sunk:
'Tis not through envy of thy happy lot,
But being too happy in thy happiness,—-
That thou, light-winged Dryad of the trees,
In some melodious plot
Of beechen green, and shadows numberless,
Singest of summer in full-throated ease.

O for a draught of vintage, that hath been
Cooled a long age in the deep-delved earth,
Tasting of Flora and the country green,
Dance, and Provencal song, and sun-burnt mirth!
O for a beaker full of the warm South,
Full of the true, the blushful Hippocrene,
With beaded bubbles winking at the brim,
And purple-stained mouth;
That I might drink, and leave the world unseen,
And with thee fade away into the forest dim:

Fade far away, dissolve, and quite forget
What thou among the leaves hast never known,
The weariness, the fever, and the fret
Here, where men sit and hear each other groan;
Where palsy shakes a few, sad, last gray hairs,
Where youth grows pale, and spectre-thin, and dies;
Where but to think is to be full of sorrow
And leaden-eyed despairs;
Where beauty cannot keep her lustrous eyes,
Or new love pine at them beyond tomorrow.

Away! away! for I will fly to thee,
Not charioted by Bacchus and his pards,
But on the viewless wings of Poesy,
Though the dull brain perplexes and retards:
Already with thee! tender is the night,
And haply the Queen-Moon is on her throne,
Clustered around by all her starry fays;
But here there is no light,
Save what from heaven is with the breezes blown
Through verdurous glooms and winding mossy ways.

I cannot see what flowers are at my feet,
Nor what soft incense hangs upon the boughs,
But, in embalmed darkness, guess each sweet
Wherewith the seasonable month endows
The grass, the thicket, and the fruit-tree wild;
White hawthorn, and the pastoral eglantine;
Fast-fading violets covered up in leaves;
And mid-May's eldest child,
The coming musk-rose, full of dewy wine,
The murmurous haunt of flies on summer eves.

Darkling I listen; and for many a time
I have been half in love with easeful Death,
Called him soft names in many a mused rhyme,
To take into the air my quiet breath;
Now more than ever seems it rich to die,
To cease upon the midnight with no pain,
While thou art pouring forth thy soul abroad
In such an ecstasy!
Still wouldst thou sing, and I have ears in vain—-
To thy high requiem become a sod

Thou wast not born for death, immortal Bird!
No hungry generations tread thee down;
The voice I hear this passing night was heard
In ancient days by emperor and clown:
Perhaps the self-same song that found a path
Through the sad heart of Ruth, when, sick for home,
She stood in tears amid the alien corn;
The same that oft-times hath
Charmed magic casements, opening on the foam
Of perilous seas, in faery lands forlorn.

Forlorn! the very word is like a bell
To toll me back from thee to my sole self!
Adieu! the fancy cannot cheat so well
As she is famed to do, deceiving elf.
Adieu! adieu! thy plaintive anthem fades
Past the near meadows, over the still stream,
Up the hill-side; and now 'tis buried deep
In the next valley-glades:
Was it a vision, or a waking dream?
Fled is that music:—-do I wake or sleep?
Ode To A Nightingale—John Keats, 1819

Saturday, April 3, 2010

So much for sleepin' in

Well, it seems that I am awake before the sun rises, yet again! Yesterday I woke up at just a bit past 0300, feeling like I had slept all morning long, actually had to triple check the alarm clock and look out the window, to make sure ma wasn't playing a joke. This morning, it's like having the brain switch on to far, in order to go back to sleep: been that way for a while, save nights where I've hardly slept at all.

From all the years I've spent working into the night, sometimes until after dawn: and usually having to be up for work. Last year, I reached the point where I rarely can sleep more then three or four hours at a time, like automatically waking up without any alarms chiming. Attempting to actually get into the habit of waking up 'early' having generally failed, as I like falling back asleep to much lol, that was never much of a problem. With a friends recent trip (which I'll just say, involved dangerous ground), and the impact it had on my dreams, I think has helped to cement it into my mind: to wake up, and to stay up. Something I've been unable to hammer into it for years lol.

Traditionally, I'd sleep straight through like a log, if ever waking up: just long enough to stagger off to relive myself of a pint or so lol. Working habits becoming more eratic, caused me to drift more in the habit of waking up at least 2 or 3 times every night, at fairly regular intervals \o/. For the past two and a half months or so, I've been waking up and generally, been reaching wide awake quite quickly.

While I reckon, not the way intended, I would say that's still an objective complete: getting into the habit of waking up early. Last time I was successfully in this habit, was when I was working shifts of 0400-2000 on a regular basis; where there was no real choice in the matter. Honestly I prefer getting up early, over sleeping in until which ever comes first: work or lunch time.

Maybe I might even learn to eat breakfast like the rest of the world lol.

Thursday, April 1, 2010

One that's been on the radio a lot lately

I know they say you can’t go home again
I just had to come back one last time
Ma’am I know you don’t know me from Adam
But these handprints on the front steps are mine

Up those stairs in that little back bedroom
Is where I did my homework and I learned to play guitar
I bet you didn’t know under that live oak
My favorite dog is buried in the yard

I thought if I could touch this place or feel it
This brokenness inside me might start healing
Out here it’s like I’m someone else
I thought that maybe I could find myself
If I could just come in I swear I’ll leave
Won’t take nothing but a memory
From the house that built me

Mama cut out pictures of houses for years
From Better Homes and Gardens magazine
Plans were drawn and concrete poured
Nail by nail and board by board
Daddy gave life to mama’s dream

I thought if I could touch this place or feel it
This brokenness inside me might start healing
Out here it’s like I’m someone else
I thought that maybe I could find myself
If I could just come in I swear I’ll leave
Won’t take nothing but a memory
From the house that built me

You leave home and you move on and you do the best you can
I got lost in this old world and forgot who I am

I thought if I could touch this place or feel it
This brokenness inside me might start healing
Out here it’s like I’m someone else
I thought that maybe I could find myself
If I could just come in I swear I’ll leave
Won’t take nothing but a memory
From the house that built me
The House That Built Me—Miranda Lambert

Although I have to admit, I've always feared in the long run, that I'd rather strike a match.