Torpor 1.0
As of this morning, after extensive testing and its first production beta deployment (which did result in a few minor bug fixes), I am pleased to announce that Torpor has reached release 1.0 (slightly delayed to allow for other DataStore adapters and management of pigfluenza in the home, but close enough for open source).
Things to check out:
- Torpor distribution page on Google's Code Hosting
- TorporPHP_1.0.tar.gz archive download.
- Prior blog posts:
On the whole, everything works. Case sensitive collations under SQLite and SQL Server have issues, but mostly due to he limitations of those particular databases, and SQL Server cannot enforce DISTINCT selection when returned records include TEXT/CLOB columns (so DISTINCT is temporarily disabled in SQL Server - I've chosen to go live with the bug). All told, these are fairly minor issues when everything else works so well. All major features work in:
- MySQL
- Oracle
- SQLite
- SQL Server
An identical database has been ported to each of these database engines in turn, and the same code and same configuration XML (with minor adjustments to specify the new DataStore adapter) pass, exercise the full suite, on each. Additionally, the provided Memcache adapter allows for distributed read/write-through caching for horizontal scalability at the app layer.
All DataStore and Cache adapters use generic interfaces, and the provided code serves well as examples of working implementations. It should be possible with minimal effort to add additional DataStore components (even non-RDBMS adapters for XML, SOAP, etc.) or Cache's.
The 1.1 road map is being assembled, to include better performance through leveraging bind variables in those adapters which support it, Postgres (which will almost certainly come as an earlier component release), inferred joins and a join hint syntax, and custom reports / aggregate functions, etc. Have a suggestion? Create an issue in the project home page (same goes for bugs).
While it sounds like there's a lot to do, this is still an incredibly strong 1.0 offering especially in the PHP world (did I mention it passes E_ALL|E_STRICT error reporting?), and is being made use of professionally at the day job with excellent results.
The one lament, and this will be remedied over time, is the lack of end user documentation. I've settled on the use of TiddlyWiki as a convenient mechanism for creating, storing, and distributing the documentation with the project, and will begin adding this as time permits (though it's now in competition with other projects, so not likely to move at the same speed with which Torpor has also matured).
For now: download, use, enjoy!
Middling MIDI
About 12 years ago, while playing around with a friend's recording studio equipment, I had a chance to try out a Casio DH-100 - "DH" for "Digital Horn." Basically a small saxophone-esque MIDI controller in the Electronic Wind Instrument (EWI, pronounced EE•wee - not especially dignified) category. I was astounded at how, with the simple addition of air-pressure sensitivity, the possible range of expression increased so significantly. Furthermore, that this could be mapped through other MIDI controllers or patch banks in order to play nearly any instrument in this fashion (though not all accept the full range of expression very gracefully).
I was hooked, but couldn't do anything about it. My budget at the time was less than meager, and I had other factors of budding bachelorhood to attend to. I kept the idea in the back of my mind, every now and then checking on prices for used Yamaha WX-series wind controllers but otherwise simply sighing it off and going back to other things. I was happy enough to have our Alesis QS 8.1 keyboard which I'd been introduced to about a year after the first EWI, and which Rachelle and I bought shortly after getting married on account of A) it's cheaper than a piano, B) easier to move up and down stairs (we were living in a 3rd floor apartment), and C) can be used with headphones. At least, those were the official reasons: the prevailing one for me was the re-enactment of the classic Wayne's World "Oh yes; it will be mine..." scene I'd done when I'd first played one. That, and how much possibility was potentially held within good studio equipment for the eager practitioner.
This was our musical mainstay for nearly 10 years, through 2 apartments and into our 2nd home (where we are now). We were fortunate enough to "store" my aunt's old upright piano for a while, and enjoyed it immensely, but had to make other arrangements while we were trying to sell the house, returning it to its rightful owner who by that time had space for it. During this time, in order to keep the place in a state of perpetual showability (or within 5 minutes of), Rachelle even had to keep the keyboard stashed away, and I didn't have room to take it with me up to Washington. I did eventually make this all up to her by the way, with my "I'm so very very sorry for everything" / "welcome home" present: Her Baby Grand.
So then, we found ourselves mostly tuneless, at least of our own making, for many months while we were unwillingly separated and trying to make the best of our situations. I briefly toyed with getting the flute out of storage (packed away in Utah), but I wanted to be a good neighbor - especially in the 2nd apartment I had in Seattle, where walls/ceiling/floors were as thin as they could be and still maintain structural integrity. The keyboard still wasn't an option, since I didn't dare trust it to anyone to ship it nor could I very well bring it back with me from one of my visits, so I returned to the EWI idea after having a Homer Simpson Tom Landry's Hat moment: "I can't buy that. Only management-type guys with big salaries like me can afford things like that. [gasps] Guys like me! I'm a guy like me!"
I purchased an Akai EWI USB controller - a fairly cheap but eminently capable device, so long as you have a machine to hook it up to. Which I did, so I did, and it was. I used it to pass the time and play sad songs, practice scales, and improv along with classical music.
Now, whether or not the device is capable, it still relies on whomever is playing it to do anything worthwhile. I don't know that I pass - I would like to think so, but I know I'm still a crude amateur next to any kind of real musician. I offer a few samples below, which lose a little in translation through the tracker back through the VST filter from the original performance, but it's close enough (yes these are all me, and I'm sorry they're all me):
What's interesting is what prompted me to finally record at least a little bit of this. I have other music projects under way (and geek projects), and have been letting the EWI gather dust since shortly after I returned from Seattle, but upon hearing yet another phenomenal cello performance in the background track of something or other wondered to myself... "How much does a cello cost, anyway?" And have found myself once again bit by another instrument bug (there are more than just these 3, too). The thought has even crossed my mind of making a steampunk style electric cello myself, in order to have something to play and practice extensively without offending others (works well with headphones), because steampunk is fun even if it is getting a little too close to mainstream, and because it would be musical and geeky at the same time. I'd even make an interchangeable fingerboard, one with and one without frets, in order to support different styles of performance (or lever-actuated retractable frets, but imagination needs to give way to reality in terms of practical implementation sometimes).
I whipped out the EWI, set the VST to cello, and started playing that instead. Maybe someday...
Weight Reduction
This post is about my personal challenges with weight, and managing it in light of a metabolic disorder. None of it is meant to be self indulgent or congratulatory, and I promise there are some geeky bits near the end for those patient enough to wade through the content or who want to skip to the end. Sorry for being boring, but not for being me. On with the story:
Back in the day I could have been considered a "bean pole." I was highly athletic, and though moderately muscular any of the definition was overshadowed by being wiry (though I eventually outgrew the designation "gangly," thank heavens). This is back when I could afford to be so physically active, and before the effects of the McArdle's disease steadily clamped down on the stamina. More importantly, it's when I was also getting sufficient rest to compensate for the effects of the activity I pursued regardless.
I got married, and gained the requisite 10-15 lbs. that generally comes with it, simply due to a change in lifestyle - eating more frequently, and in the company of others on a schedule of well prepared food rather than "when it suits me" and consisting of "whatever's around." Even with that gain though I was smack in the middle of the Healthy band of the BMI (though individual results vary depending on body type, I'm fortunate to be a good match for the algorithmic archetype). That weight stayed steady for another year.
Then: The Desk Job. In the interest of advancing my career and furthering the capabilities and savings of our family, I changed from the more free-form telecommuting gig to one that met those requirements but also required standard office attendance. I have no issue with the work, or with good work ethic, but I had been liberally making use of the telecommute arrangement to rest as necessary in order to recover from the day's strain. With the desk job, that luxury was forfeit. Ignorant of the specific nature of my disorder at the time, I didn't realize how disastrous this would be.
Seated at the console, plugging away on the code (Object Pascal cum Delphi RAD environment for MS IIS ISAPI filters on the MetaStorm e•Work product) I found myself wearied as usual, but unable to deal with it. I compensated by being exceptionally stubborn, and when that fell short, supplemented with anything available to increase my blood sugar (I was also drinking a lot of water, which I attributed to the poor transition from Washington's temperate and moist environment to the Utah dessert two years before - but probably only half of what I now know would be required. Whatever the case, whenever Rachelle called I seemed to be in the bathroom). This latter strategy came with predictable side effects, and in the course of five months I put on some 40 pounds.
The rapidity of weight gain was certainly off-putting and distressing, especially as the combined weight of the entire supplemental caloric intake during this time didn't seem to be adequate to account for the change. I did my best to stabilize and cut back on the snacks, suffering through the stupor instead, and plunging into another round of medical inquiry to find out why I was so tired so I could hopefully do something other than eat to manage energy levels - these of course were ineffectual. Later, changes in jobs, the production of very very cute children, and general demands of the conditions of life slowly edged the weight upward until finally peaking at about 250 lbs. (113kg), at the same time that the last vestiges of regular physical activity (Kishindo martial arts) feel by the wayside.
I was frustrated, to say the least, but also largely to blame - by putting myself and my needs very last, I was doing myself this dramatic (and visible) harm until it interfered with my ability to continue to serve my family. I was so bogged down, waking up exhausted (and frequently nauseous), barely pushing through the day, and repeating. Minor gains in understanding, not necessarily of my condition but my reaction to it, gave me some latitude for correction and over the course of about 2-3 years managed to move from 250 back down to about 220.
The most recent improvements have come from a very complete comprehension of the condition and my situation. The management strategy I'm pursuing now allows me to walk that thin line between capacity and injury, and to retain cognizance throughout even the long days (with few exceptions). Combined with that, I've been able to leverage the inability to utilize stored glucose energy to maximize natural ketosis (the same condition the Atkins and other low-carb diets attempt to induce artificially) and consume stored lipids instead - this time without the crippling side effects causing near-comatose stupor. This means that from the first day of the diet I've been able to realize dramatic results, as detailed below:
The weight log starts in late January, testing out the Wii Fit I'd gotten the family for Christmas (but was unable to play with myself, having been separated from them). Return visits to the family explain the infrequent initial measurements, followed by my more permanent return in lat March. Throughout April and May I was completing my research into the effects and side effects of McArdle's before finally establishing the current regimen. This failed to produce any effects on the weight though, so I sought out the advice of my buddy Joel - the most successful dieter I've ever seen. Over the course of a year his appearance completely changed, to the point that when we were re-united for a get-together I recognized his wife, and wondered who the heck was with her. Thus was born the references to the "Sexy Sexy Joel Diet" (as the diet belonging to and responsible for Sexy Sexy Joel, as opposed to the old Joel).
His secret? Has nothing to do with all of those "By following these X simple rules!!1!" ads that are all over the internet, nor with fad products, "cleansing," etc. He wasn't even exercising - just following the old Weight Watchers™ formula for calculating caloric intake in terms of points (calories / 50 + ( grams of fat / 12 ) - ( min{ grams of fiber, 4 } / 5 ) ) and his allowance for consuming them. Using a calculator and log on his iPhone he followed the simple principles over time to great effect.
I adopted the same pattern, and am pleased to report that, per the graph above, have dropped 32 lbs. in the course of just over 3 months. At this rate I have another month and a half or so to meet my long term goals, after which I can settle into a maintenance pattern. Looking at the trend line it's very slowly leveling out. It also has that cyclical up-tick I'm at a loss to explain - though I also admit that I haven't gone into an in-depth analysis for them yet, as they are inconsequential to the average / long view.
For the geekiest bits: the point system, whatever its failings, works. In order to make sure all measurements are taken consistently, they've all been done within the same hour of the day, in the same general outfit (light sweats, t-shirt), immediately following my carefully metered exercise (metered to avoid undue metabolic or toxic distress) in the morning before any kind of intake. This does mean that I've artificially skewed the measurement to the lowest point in a day's fluctuation, but given that I'm moving 10-15 lbs. of water though my system throughout the course of a day it makes sense to take a low baseline, since the peak water retention will fluctuate unpredictably (or according to parameters and timings I'd rather than make explicable by mapping when there's an easier solution). Doing it the same way every day is what makes the biggest difference in collecting the samples, which allow me to apply a general trend analysis instead of a specific margin of error per day. All measurements have been taken on the Wii Fit in order to keep the analysis consistent and to provide a log of the output as well, which I have carefully transcribed and reproduced above using Perl's GD::Graph module.
I have several other observations as a result of the experience, mostly regarding psychology and sociological trends, which I'll save for another time. For now I'm excited for the day when I can stabilize enough to buy new pants (which I'd rather only do once, an account of being a cheapskate). Also, while it's true that I may have an unfair advantage due to the super-charged ketosis, Joel's experience demonstrates the viability of the approach without such an inside track (a track, I might add, that is not worth the side effects if it can be avoided).
Bon (pétit) apétit!
