Making tech work for me (smartphone automation with Tasker)

I’ve made a few mentions of my fondness for MortScript during my time in the Windows Mobile world.  It was most useful when it came time to automate in-car tasks – resolve Bluetooth connectivity drops, dis/connect A2DP, keep the screen alive.  Other things were more general in nature, like emulating a Bluetooth “timed discoverable” feature and restoring the Normal ring profile after Silent had been active for a period of time.

All useful additions, features or fixes.  And I’m sure that I’ve given a shout-out to Tasker as my go-to-guy for giving me the same sort of hacking pleasure on Android.

Fortunately, my Tasker experience to-date has been more about adding functionality than fixing O/S problems.  And I’ve extended the functions I mentioned in this post to the point that I’m tickled pink (not literally, of course) over the added convenience that has been bestowed on my Android phone.

The aforementioned post has a section aptly named “Tasker” that basically talked about things which happen automagically when the phone is in the car.  Basically, when the car’s Bluetooth is detected, the phone can be in one of two states which we’ll call “Car In” and “Car Docked”.  It’s the latter which is of most interest, and it becomes active – as mentioned in that previous post – when external power is connected.

(it would be possible to sense the presence of an actual “car mode” cradle, but the Desire Z doesn’t have the requisite hardware.  I find it acceptable to consider the phone in a “car docked” mode if the car’s bluetooth is detected and the phone is plugged in – which pretty much means that the phone is sitting in a cradle)

Gone are the days of auto-launching Google Navigation – more on that later.  I definitely wanted a 3-foot user interface to come up when the phone entered Car Docked mode, but Google chose to deny access to the actual Car Home app on my phone.  So, I relied on Vlingo‘s “InCar” feature to emulate the Car Home app.  And this was… acceptable.  Vlingo’s usefulness as a Siri-like assistant was questionable, but I was digging the convenience of the InCar interface so I told Tasker to fire up this interface when Car Docked mode became active.  From there, I could launch Navigation or Maps or – if Vlingo was cooperative and background noise was low enough – speak a command to open any app of my choosing.

Vlingo’s usefulness fell significantly once it stopped being able to hear anything I tried to yell at it.  I think this happened shortly after I rooted the phone, but no matter; it was the kick in the pants that I needed to convince me that it was time to rid myself of this dysfunctional relationship with Vlingo.  Away it went.

It was subsequently replaced with a pure-Tasker solution, in which I could hold down the search key and up would pop a custom menu containing all of my useful in-car shortcuts.  So there was a link to Navigation, Opera Mobile, XiiaLive for streaming audio, and some other useful apps.  And this was… acceptable… but it was just wasn’t integrated enough.  What I really wanted was to hit the home key and have a real 3-ft interface appear.  What I really wanted was Google’s Car Home app.

My decision to root the phone was actually the ticket I needed to get Car Home installed, as it involves booting into recovery and installing a signed package file containing Car Home.  Anyhow, that was done, and so we arrive at the point where I am today – getting in the car and putting the phone in its cradle and connecting power automagically brings up the 3-ft interface of the Car Home app.

It may seem to you like I’ve spent a lot of time to get something going that’s trivial.  And on the face of it I’d agree with that perception.  But you have to keep in mind the how and why of it all.

The “how”, in this case, is Tasker.  And the “why”, in this case, is Tasker’s flexibility and power.  Car Home has the ability to launch itself whenever it detects a certain Bluetooth device – ie, the car – and that’s great.  But I want more to happen when my phone is “docked” in the car.  And this is why Tasker is important, and why I’d rather have Tasker launch Car Home at the appropriate time.  In actual fact, Tasker sets the phone’s “Car Mode” setting to true, which is a global setting which may have other (desired) ramifications.

Now… recall that I mentioned Tasker’s previous duty of starting Google Navigation whenever the Car Docked state became active.  I could tell you that it’s nice to have Navigation up when you’re driving, and to some extent that’s true, but my car has navigation built-in – and that screen is 2x the size of my phone’s screen.  I could tell you that Google Navigation shows semi-reliable traffic information, and that’s true too, but I don’t need that info for the entire drive.  Plus, I can always get there with two taps: one tap on the Home button to bring up the Car Home launcher, one tap on the Navigation icon to bring up navigation.

So why did I ever have Tasker launch Navigation as soon as the phone was docked in the car?

One word: Latitude.  Click the link.  Honestly, do it.  Then you’ll know why Latitude is important for me.  With Navigation active, GPS is also active, and when GPS is active the phone is aware of movement with more precision than it is when using WiFi and/or cell towers.

So Navigation was a useful means to a GPS-enabled end.  And while I still find Navigation useful, it’s really the Latitude updates that I wanted to occur while the phone is docked in the car.

Most obvious solution: tell Tasker to turn on GPS, and Bob’s your uncle.  Well, not so fast – even if Tasker can just turn on the GPS module and leave it turned on (which I doubt), you get into trouble with the opposite action: turning GPS off.  Suppose somebody is trying to use GPS when Tasker turns it off?

So my solution is somewhat more creative.  And this goes back to the “how” and “why” of using Tasker at all when Car Home seems suited to fulfilling your 3ft-interface needs.

Something else that I’ve had Tasker do is adjust my phone’s brightness dynamically.  And yes, the phone has an auto-brightness setting, but believe me when I say that the lowest brightness setting is still way too bright when you’re driving in darkness.  When the phone is docked, Tasker runs a task that loops and constantly measures the light-sensor’s reported ambient light level.  Then, in conjunction with the Screen Filter plugin, it is able to dim the screen to levels that would be un-achievable otherwise.  It can even take sunset/sunrise times into account, as those tend to be the trickiest times of day when it comes to suitable lighting.  This logic recently underwent a rewrite, and it’s not as straightforward as following the sensor’s (somewhat finicky and fluctuating) reported level.

Anyhow, this task is great because it’s an active loop that I can use to call other tasks.  And the lastest task is… one which attempts to get a GPS fix.  So every 60 seconds or so, Tasker asks the Android system for the most accurate location info possible.  Android dutifully obliges by determing which location services are permitted – GPS and/or “net” – and uses the most accurate one to get the requested information.  The beauty here is that it’s now Android which is determining what needs to be done to get the location data.  If Navigation is active and using GPS, then the location data is known and returned to Tasker.  Okay, Tasker doesn’t actually do anything with that information.  BUT… if GPS is not active, then Android will turn on GPS, get a fix, return the location data to Tasker, then turn off GPS if nobody else is using it.  Which completely solves Tasker’s  problem of determining when/if GPS should be active.

This is good news, because Latitude seems to be hooked into a system event notification that goes something like this: “if the phone determines that its location has changed, let me know.”  Well, because Tasker is asking for updated location info every minute, and its asking for the most accurate location info available, it’s necessarily the case that Latitude will get notified every minute if the phone has moved.  Meaning…

…all of my Latitude-dependent services will have precise, up-to-date location info.

I know what you’re thinking – what happens if I’m moving around and I’m not driving?  This is entirely possible.  And the short-answer is – nothing.  We’ll get the same old imprecise Latitude info and it may not be terribly relevant either.  BUT… and this is important… everything I’ve done re: Tasker and the “Car Docked” mode means that the special use case of having the phone docked in the car will result in precise, relevant Latitude info.  Period.  Even if I only drive one day a week, it’s now the case that the driving scenario is handled in a seamless, extensible, straightforward manner.  It requires no special user intervention that wouldn’t occur otherwise.  It doesn’t even require that Navigation is active.

And that’s the design philosophy that I aim for.  Look at a problem, find an elegant and workable solution.  Refine the solution.  And hopefully, extend the solution to resolve related problems.  If you can extend the solution, then you know you’ve come up with a solid foundation or approach.

That’s why I’m tickled pink.  I love to solve worthwhile problems 🙂

My ’11 Gift List

So the first thing you should know is that this post has been sitting in draft status since November 20.  Ya, there’s just been that much going on that I don’t even have the time/inclination to be selfish…

Anyhoo, the wifey is understandably anxious regarding what to get me for the dual-whammy of birthday and Christmas, so my hand is being forced – I have to publish this list.

In keeping to form we’ll first reminisce about those things that used to be desireables, but are now so passé… 🙂

  • An electric toothbrush.  This is dental hygiene we’re talking about people.  C’mon now.
  • White undershirts
  • Doorframe-mounted chin-up/exercise bar.  Father’s Day yo.

Okay, now the items that haven’t gotten any love yet:

And new for 2011:

  • Safety glasses – so I can use my compound mitre saw with something more durable than a pair of high-school chemistry goggles
  • Shop-vac – so I can do woodwork indoors without fear of coating everything in a fine layer of sawdust
  • A “How to get the most out of your digital camera” class – so that I can… you know… get the most out of my Rebel DSLR
  • A clear, concise and practical list of what to get for my wife, complete with any necessary additional information (like size, colour, model, etc)

And there you have it.

DP’s 2010 Gift-List

My my my… we haven’t been this early since 2006!

The only reason I’m posting so early is because Shelly recently (ie, yesterdy) asked me what I want for Christmas.  And although she bemoaned the traditionally high-roller nature of the items on this list, I calmly reminder her that all of these lists have featured items as cheap as a pair of socks.  And some even cheaper (again, 2006… not so good of a year?)

I also can’t believe that there was no list for 2009???  Very odd, that one.  Perhaps the arrival of a son was gift enough 🙂

Anyhow, time to reflect on things that have dropped off the list because they’ve been acquired by yours truly:

  • Canon EOS Rebel DSLR.  Yup, took the plunge and picked this up after it was on sale for $210 off.  Shelly thought it would have been a good idea to wait for Boxing Day sales, but in my books you can’t argue a 23% discount.  That, and having realized that Mr. Man (ie, the aforementioned son) is growing by leaps and bounds, I no longer wanted to let good photo opportunities pass by.
  • New laptop.  This news isn’t so new, but it was on the 2008 list.  Completeness, you know?

Okay, on to the good stuff!

(as always, this list is subject to change)

From previous lists, and in no particular order:

  • An electric toothbrush, with induction recharging.  Yes, I’m still using Mr. Whiny
  • Dress socks, assorted colors (including black) (no brown either, I picked these up recently – I guess that leaves blue..?)
  • White undershirts and vests
  • Winter scarf/scarves: black, grey, blue, brown… RECEIVED!!!
  • Casual and/or dress belts; last time I checked ye olde waist is in the 32-34 range

Staples:

  • Clothing (ask Shelly, she knows more about this than I do apparently).
  • Kicks (ie, sneaks… you know sneakers.  Again, ask Shelly.  Size 11 1/2 or 12).

New for 2010:

  • a 55mm-200+mm Canon EF-mount IS zoom lens.  This would have to fit a Canon EOS Rebel T1i (hence the EF mount).
  • A camera bag with shoulder strap, capable of holding an SLR camera w/ attached lens, plus one additional lens.  Nothing too huge, just large enough for the mentioned items – plus the obligatory (slim-) pockets for stuff like memory cards.
    [Edit: This is nice, in form if not in price]
  • Door-frame-mounted chin-up/exercise bar.  Shelly has a good idea what this is all about, so you bettah axe somebody.
  • A storage shed (!) for the backyard.  Hey, why not.  It would get used, trust me.
  • An Apple iPad.  Oh my goodness, did I just say that?  It’s not so much that I want an iPad – rather, it’s that I want a touch-optimized tablet.  The Win7-based bad boys are too $$$ and lame.  The Android guys are either too small (7″ and smaller) or have resistive touchscreens (blyech) or are running some 1.x variant of Android (too old).  Perhaps Google will have released Chromium OS by Christmas time, in which case a 10″ Chromium tablet with a capacitive touchscreen and WiFi (no 3G) would be purrfect.  ***NOTE*** – I’ve changed my mind on the 7″ Android tablet, after having done some reading on the Samsung Galaxy Tab.  I like it so much (in reviews) that I’d burn my Rogers Hardware Upgrade on it.  So ya, holla at ya boy if this gift fits your bill.
    I’ve since decided that a tablet will not work – but the HTC Desire Z certainly would! Unfortunately Rogers sucks large grapes re: worthwhile Android phones so I guess I’ll be holding on to my HUP for a little longer.  Somebody on the Interwebs suggested HUP’ing to an iPhone4 and selling it, which would then offset the cost of a no-contract Desire Z from Bell – but apparently i4’s aren’t selling so well…?  I dunno… if you have a Bell hardware upgrade that you have no use for, well, consider gift-wrapping it and sending it my way – I’ll slap some Benjamins on that bad boy and everybody’s happy! RECEIVED!!!
  • Some 1TB USB2.0 external hard drives, and a PCI USB 2.0 card.  I’ve given up on the TeraStation NAS, and I need the PCI card since my home server only supports USB 1.1. RECEIVED(1)!!!
  • An electric finish nailer (not pneumatic!).  Ideally, one that’s versatile enough for hardwood flooring as well as baseboards.  Otherwise, one that’s suitable for trim and general woodworking projects.  These things are plenty handy, I wish I had one.  A used unit from the Home Depot rental store would be just fine (hint – talk to somebody at a Home Depot rental store to get the 411 on these things)

Formula1 Montreal Grand Prix 2010

Shelly surprised me this past weekend and told me that we were going to Montreal.  This happened to coincide with the return of F1 to Montreal, after having been dropped off the calendar for the 2009 championship.

Yes, that’s two racing events in two weekends.  Except this time I drove the 5+ hours there and back with nary an adult to say “Yo, keep it between the white lines dawg”.

But that’s the means to the end.  And the end was the event itself.  For some time I had deliberated about attending an F1 race.  Montreal seemed like the most logical choice, given its proximity, but I always balked at the cost.  Grandstand seats seemed to be in the $500+ range, and by all accounts the general admission option was to be avoided unless you felt like becoming a sardine to see a sliver of race track.

So pricing kept me away.  But in this case Shelly set up the surprise, and it’s not often that she gets to surprise me – so I figured that this would be my one and only time attending an F1 race and, therefore, it was deserving of a grandstand seat.  Fortunately said seat was <$300 – which included Friday, Saturday and Sunday.

And I must say, I’m very happy that I was able to see, in person, this spectacle that I’ve been following on TV.  It puts things into a very different perspective.

The first thing that took me aback is the raw noise that F1 cars generate.  I had scoffed at the need for ear protection, but quickly ate crow as I felt that inner-ear pain was imminent every time a car drove by.  They’re crazy loud.

The second thing that surprised me is how narrow and close the Montreal track is.  And in fact, the Montreal facilities as a whole are something like 30 years old.  Canada is one of the “traditional” stops in the championship, and being there in person you completely lose the glamour factor that the sport tries  hard to promote.  I don’t know what to make of that, to be honest.  On the one hand it became very evident that F1 is motor racing, like any other form of motor racing.  On the other hand, the idea of F1 being the “pinnacle of motor racing” was diminished somewhat when you see these high-tech marvels in such a low-key environment.

And you hear the noise, and you smell the fuel… and you realize that regardless of how Bernie and co. promote the sport, on race day F1 really is about cars racing around a track.  That’s not a damning thing – it’s a fact of the matter.  And in some ways it’s good because the guys at the track – mechanics, drivers, team bosses, etc. – are in a competition.  They’re not worried about celebs, they’re not trying to prove anything to lesser formulas.  They’re racing, period.

So that’s cool.  You see the driver’s parade, you see Lewis hop out of his car on track and start pushing it, and ya, all of a sudden Formula1 actually seems accessible – despite its stuffy airs.  It puts various driver comments in perspective, when they talk about not caring about the politics and what-not and instead just wanting to race, on the track.

I imagine that some of the modern circuits might have a different spectator feel to them.  Something closer to what you witness on TV.  Abu Dhabi, Yas Marina… the bonus is that the cars are more in their element, what with aero efficiency becoming more important in long sweepers.  The downside is that the plush and pomp starts to creep back in and I suspect you lose that close connection to the race and the drivers.

But what do I know – given the chance to attend, I might find them just as enjoyable as Montreal.

The short of it all is that I enjoyed attending the race.  And even though the 3 CF-18’s also did two low speed passes over the track at the start of the event, I was definitely happier in Montreal than I was in Windsor.

Pics to follow.

Red Bull Air Race, Windsor 2010

I attended the Red Bull Air Race this past weekend.

Notwithstanding the unpredictable weather – complete with a tornado warning the previous night and 3-days worth of torrential downpours – the event itself was very ho-hum compared to my 2008 experience.

When I think Red Bull events, I think “extreme” and “spectacle”.  And so it was with great shock and awe that I witnessed a near-Mach1 demonstration by a fighter jet in the 2008 pre-race show… greater shock and awe when the filming helicopter ran the course and did things No Helicopter Should Do.  And finally, continual shock and awe as these propellor-driven planes raped the challenging course mere meters above the Detroit River.

I mean, that event was the s–t.

By comparison, this year’s event was s–t.

Even without the lame course adjustments that were made, the course layout itself paled in comparison to 2008.  The pre-race show had fighter jets, oh yes, but they did two low-altitude low-speed passes and bugged the heck out.  The helicopter didn’t run the course, and even the RB105 acrobatics seemed tamed down a few notches.

For a Red Bull event, I was not impressed.  Which really sucked, since I dragged my friend out to Windsor and he spent an unholy amount of money on a jacket to protect him from the elements.  Elements which, by the way, decided to remain at bay for the duration of the event.

So that will likely be it for my Red Bull Air Race attendance career.  This weekend I’m off to Montreal, rather unexpectedly too, to partake of the Canadian Formula 1 GP.  This will likely be the one and only time I ever go to a Formula 1 event, and I am looking forward to it – rain or shine, it will be fun just to be there and feel the atmosphere that goes along with an F1 race weekend.

Respect for the single mothers

Andrew and I kicked it bachelor-style for a couple of days last week while Mommy was out of town.

And while we had a good time together, I can’t begin to imagine how mothers raise a child on their own.  It’s not so much that the tasks themselves are difficult; rather it’s the repetition and the demands of the child that just sap you of your energy.  At least that’s what happened with me.

Oh sure, you can throw in a walk here or a park visit there just to spice things up.  But that’s when you’re not working – and therein lies the problem.  One, is that you might as well write-off any time you have after work, since that’s all about making dinner and giving a bath and getting things ready for the next day.  Two, is that a single mother may very well have to work two jobs just to make ends meet, meaning free time on the weekends is at a premium.

So like I said, ’nuff respect!

HTTP streaming done right

Oh Microsoft, why do you make the choices you do???

Fortunately in this day and age, Microsoft dominance isn’t what it once was – meaning we the little guys now have choice.  But unless you’re vigilant, it’s still so easy to caught up in the M$ trap and not realize there’s a Better Way(tm).

I’ve been using WinAMP as an MP3 player for eons, and one of the things I appreciate about WinAMP is that you can point it at a URL and stream an MP3 directly off of an HTTP server.  Wow, no big deal there.  But the big deal is that you can seek within that MP3 because WinAMP is smart enough to use HTTP/1.1 commands to tell the server what part of the file it wants to stream.

Contrast that to Windows Media Player, which insists on streaming a file from beginning to end.

While I don’t tend to use WinAMP much these days to play MP3 files directly (that’s what the Whole Home Audio system is for, what with its streaming “zones”), I do use Windows Media Player to play recorded TV shows on my lunch break every now and then.  Particularly these days, when downtime at home is at a premium and I don’t get to keep up with my favorite TV shows.

So it’s irked me that using Windows Media Player to stream WMV files from home has meant no seeking ability, since WMP will only stream the file from beginning to end.  I think WMV files store some key or index info in the end of the file as well, but still, I have to believe that it’s possible to start streaming from the middle of a WMV file in order to start watching from the middle of the WMV file.  It’s just not that hard.

VideoLAN Client to the rescue.  My goodness, talk about refreshing!  Like WinAMP, VLC can use HTTP/1.1 commands to tell the web server exactly what part of the file it wants to stream.  So yes, seeking is possible.

No more having to queue up a show first thing in the morning to ensure it’s fully downloaded (and seekable) by the time lunch rolls around.  Nope – now I can just copy the URL over to VLC and skip commercials at my heart’s content!

Misc network goings-on

Howdy!

Just a quick update to keep the masses apprised of some developments.  Not that they’re particularly interesting to the masses, and not like there are really any masses to speak of…. but whatever…

So for a Long Time(tm) I’ve been running Wireless-B at home.  Yes, laughable.  Truthfully I never really had a compelling need to opt for the higher throughput of Wireless-G and above.  That, and my Cisco Aironet access point offered some nice SNMP stats that may not have been available in consumer-level AP’s.  Being able to glance at graphs of client associations and wireless throughput turned out to be a great way of making sure that the network was being utilized as intended.

However… I was never comfortable with the fact that wireless isn’t as inherently secure as a wired network.  Best practices dictate that you should segment your wired and wireless networks.  There have been advances in wireless security – WPA, WPA2 – which make this less of a requirement relative to WEP, but the fact is that I didn’t have any WPA-capable hardware and I didn’t have a good way of segmenting my LAN to adequately isolate wireless clients.

Sooo… a couple of things happened.  One, is that I’m now running a Cisco router with DMZ capability.  Two, is that I’ve now got a Cisco Wireless-G router with WPA2 support.  Great – the Wireless-G AP was dropped in in place of the Wireless-B AP and now I’m sporting higher speeds and, more importantly, the latest in wireless security.

Unfortunately I’ve got some older devices that only support Wireless-B and WEP.  Mostly PDAs that are serving as music streaming clients on the Whole Home Audio system.  Those devices would have to run on a different wireless network, as I didn’t want B clients degrading the speed of my G network nor did I want to run a broken security technology on my main network.

And finally, given that WEP can be cracked, I surely didn’t want to bridge the Wireless-B network off of my main LAN, thereby exposing my entire network to a determined hacker – or lucky script kiddie.

So the old Wireless-B AP is hanging off the DMZ port on the router, and a very limited number of ports are allowed to come in from that DMZ.  Perfect – a firewall seperating my trusted wired/wireless-G network from my less-trusted Wireless-B network.  I can also use the Wireless-B network for guest devices, like work laptops, since I’ve granted Internet access to that network.  There’s still MAC authorization and the WEP key to enter, so it’s not a wide-open free-for-all.  And if there was some amount of unusual activity on that network it would be easy enough to spot since – as I said above – I can graph client associations and wireless throughput.

So that’s that.

In actual fact I’ve got three network technologies running: wired, wireless and powerline.  The powerline stuff was put in to support my multifunction printer, which I wanted to be able to put upstairs somewhere where it would be most useful.

Well, powerline worked great for a while, but the past two months or so it’s been unusable.  Why?  Dunno – I don’t recall plugging in any new applianaces that may have introduced noise on my little power grid.  Perhaps the neighbours did, perhaps one of the powerline bridges melted a resistor, no clue.  But it was no longer a viable solution.

So, I recently acquired a Linksys wireless bridge to full in for the powerline adapter’s intended role.  Cool – another Wireless-G client with WPA2.  It works, although it’s running at 2.0Mbps… I’ll play with antenna orientation and what-not at some later date.

So what else now… oh yes, something else that has been misbehaving of late is the Whole Home Audio system itself.  Specifically, it’s Girder’s HTTP server that decides to go off in la-la land for seconds or minutes at a time.  This may not be such an issue if it weren’t for 1) linked lists, and (2) near-realtime zone info in the frontend.

Right – linked lists need working communication from the player (WinAMP) to the main HTTP RPC instance on the home server, to the RPC calls off the home audio HTTP instance, then back to the HTTP server off Girder.  This is the case because, in essence, the player tells the system that it’s done playing a track and the system tells the player to play the next track – which is in contrast to loading a list into the player and telling it to play the whole thing (ie, the list is not linked to the system).

When the Girder HTTP server fails, we have no way of telling Girder to have the player load/play the next track.  So playback stops.  And because this is all HTTP based, the requests eventually time out and playback never resumes.

Now, I spent some time and coded some ways to recover from this situation gracefully (ie, handling the timeout and reporting a problem to the user or logging to a file), but restarting playback requires human intervention – for a number of practical and technical reasons that I won’t go into right now.  I even got to ditch an ActiveX object I was using to do HTTP requests and replaced it instead with Microsoft’s own XMLHttpRequest object.  It seems more robust, so that’s a plus.

But ultimately the problem is with Girder.  If an HTTP server fails, it’s a problem, plain and simple.

I entertained upgrading to Girder 5 (from Girder 4), going so far as to download the trial and run it to be sure my LUA code and Girder events would still work – and they seem to – but in the midst of being uncomfortable with spending money to get nothing more than stability I happened to stumble across the fact that my version of Girder was 4.0.1 while the last release in the version 4 train was 4.0.15.  So I grabbed that, cleaned up some LUA that didn’t want to work anymore due to semantics (could that have been a contributing factor to the problems I was experiencing?!?) and put 4.0.15 to work.

So far it’s been rock solid, knock on wood (yes, I just knocked on my desk).

Of note is that I accidentally left my work computer connected to the home network last night, sitting on a zone page – meaning it was querying Girder from closing yesterday to opening today.  Normally that would send Girder’s HTTP server into crazy land, but it’s still functioning normally today.

So I’ll keep my virtual fingers crossed.  Another plus in all this is that my Win32 service is now running grunt.exe vs. girder.exe – grunt being the Girder RUNTime that Promixis included in the distribution sometime after 4.0.1, which does all the cool Girder stuff without launching a UI.  Perfect, since a Win32 service doesn’t really need (or want) a UI.

So that’s it for this update.  Next time I’ll talk about a cool “app” I’m running on my phone to track my quality of sleep.