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.

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.

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/.

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.

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 "tmk.py", line 929, in
    process_recipe(recipe)
  File "tmk.py", line 742, in process_recipe
    recipe.parse()
  File "tmk.py", 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.

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.