| Keith's profileKeith Patrick's BlogPhotosBlogLists | Help |
|
January 22 Home automation tribulationsAs part of my New Year's initiative to wrap up some unfinished projects around my house, I started working on my custom home automation software between literally waiting for paint to dry. Since I am determined to use the latest/greatest of .Net, I'm doing this all in C# 3.5, which - due to the need to interface with video cards, UPB (Universal Powerline Bus) controllers over either USB or serial port, and a mystery card that I hope is standard I/O...all native Win32 operations - is a royal pain in the neck.There was a decent amount of forum posts about the same issues I was hitting, and P/Invoke has generally been good for getting most Win32 function signatures (and it helped me pick up a general set of marshalling equivalents that will work for reads and writes), but I still spent several hours more than I wanted getting my USB-based UPB controller recognized by my top-end Win Presentation Foundation interface for this functionality. I'm currently at the point where I've got the UPB command sit in front of me and what I think is the correct format for talking to the device, but I need to order a light switch to have something for the controller to talk to.
In the interim, I started building the housing for my primary pan/tilt/zoom security camera for my house (neighborhood's fine, but it was a gift & it fits perfectly with the software I'm writing for Taint Mansion. I was going to just make some measurements, but over the last year and a half in the house, I've accumulated everything I need (minus the damn topcoat...thought I had a little left over) to build the housing, which is somewhat complex to to my desire to have it somewhat hidden and integrated with the slanted architecture of the house. The housing is primered, but experience has taught me that if I can avoid painting against the ceiling, do so, so I'm waiting until tomorrow to get some more paint to get the primary coats down. Once the camera is in, I'm going to temporarily run it to my desktop PC for software authoring/testing (.Net-to-DirectShow is supposedly a nightmare, and I avoid using non-core libraries like DirectShow.Net (nothing against the quality, but I prefer having to think at all about licensing and integration issus)); once I get my hardware rack bolted in and a server in, I'll migrate over to the final centralized server (with the additional security cameras to cover all points of entry). March 31 Health kickSo after a pretty horrible 2006 (high blood pressure brought on by kidney inflamation, a couple of biopsies, an MRI...all bookending the sudden death of my mother), I decided it's about time to start getting back into a decent state of health. I'm going the usual route - filling my pantry with healthy foods that I happen to like such as seaweed, eating more vegetables, et al.
Sometime in the last couple of months, I also tried a bottle of some Kombucha tea that I found at HEB Central Market. A total impulse buy, as I didn't even have an idea what Kombucha was. That's what Wikipedia is for. Turns out, it's a pancake-looking culture of bacteria and yeast that floats on top of sweet tea. The yeast breaks the sucrose down to fructose and glucose, which in turn are broken down by the yeast & bacteria into all kinds of healthy substances, like acetic acid & gluconic acid (and a touch of ethanol gets produced as well). One of the bacteria also uses the glucose to make the cellulose base of the "mushroom". The acid environment inhibits growth of mold, and a cloth over the brewing container keeps out fruit flies (they LOVE the kombucha by the 4th day)...kinda like sourdough, except instead of inhibiting mold with acid, you're adding fresh flour & water daily. Every week, the sweet tea gets converted into kombucha tea, and a new layer forms on the top of the tea (and the layer looks pretty damn gross as it forms, like a giant loogie). The stuff multiplies like crazy, so using all the culture is difficult, but it makes a great plant fertilizer, too :) And it also doubles as an ant farm substitute; over the course of a few hours, I watched a yeast colony under the culture move to the top, middle, bottom of the tea, feeding wherever there's sugar. How does it smell? Smells like fermenting liquid with a very strong vinegar smell and the nasal burn of a whiff of alcohol. Doesn't sound like it'd taste too good - unless like me, you like fermented foods - but it tastes like a tangy, refreshing citrus drink (a friend of mine compared it to honey mead).
Anyway, as part of my kombucha experments, I've been getting into tea. I've never liked tea, to be honest. There's something about the caffeine in green tea that makes me start vomiting after 5-10 minutes, although the kombucha doesn't cause that problem. The "standard" tea combo is a 3/2 ratio of black/green teas, so I bought some of that. Not really interesting, so I also bought a bunch of silver needle white tea. This stuff looks beautiful, and has a really nice, delicate flavor, and the kombucha it makes is absolutely delicious. Supposedly, fields are only picked for 3 days when the leaf shoots just start. I've already run out, but this is going to be my primary kombucha recipe, methinks (although since I bought a bunch of bottles, I envision having several kinds going).
The most interesting tea I got, however, is one called pu-erh tea. This is a compressed, aged tea that's supposed to drop cholesterol, among other things (and while the doctors found my cholesterol to initially be too high - 240/180 or something like that - my next visit saw it drop down to 130/88, so that stuff doesn't worry me). My brick doesn't have a date stamp, but they are typically 4 years old or so, but I've seen some 30-50 year old bricks for sale (they get better and more expensive with age). It's a fascinating tea...very dark but mellow, barely even tasting of tea. I'm really interested in making some kombucha out of this (and the multiplying nature of the stuff means I could just peel off a piece of kombucha culture and throw it in some room temp pu-erh and come back in a week), but I'm actually more interested now in collecting the stuff. Apparently, the value increases 80% by simply keeping it wrapped for a year. I've seen some bricks that run $1000 (pressed in 1973...my current block doesn't have a vintage on it and ran for $30), and I've heard claims that there are bricks from the Qing dynasty. What's scary is that this ancient tea is probably perfectly drinkable, even though it's cost would rival Louis XIII cognac. I can see myself buying several different vintages and just storing them in my pantry and only use maybe half for kombucha.
Only thing left for me to do is to get back to exercising, which I haven't really done in 2 years...taking a year off to be fat n lazy and then another year to deal with house, health, Mom. I find it disheartening that my shins cramp up just sitting in rush hour traffic, so things need to change. Thing is, I'm tired of my stationary bike, so I need to replace it with an elliptical machine. Plus I need a new weight set, and frankly, I have other spending priorities. But in the meantime, I'll just count on diet and the magic of kombucha.
March 27 My Microsoft Xbox 360 nightmareOn the heels of 3 days of hell with Vista (turns out Safe Mode doesn't know that my hidden Media Center Extender account - put there by the Xbox 360 - prevented from getting emergency access to the built-in admin account), I decide to start reconnecting my Xboxes to my Vista system. I just got back my first 360 from repair (the 2nd time I've had to send that piece of crap in, this time for the 3 flashing lights of death). Well, I connect it up to my TV and turn it on to see...3 flashing lights of death. WTF?!?!?!?? Who in the hell (besides Microsoft, apparently) repairs something and then doesn't bother to check if the repair worked? It's suddenly becoming clear what MS' problem is: lack of quality control. They've got a Chief Security Officer, Chief Architect, et al, but do they have a Chief Quality Control Officer? If they do, s/he needs to open up a blog so I can openly mock this person. I swear, like Vista, Microsoft has managed to take a great idea that can potentially be incredibly user-friendly and fun to use, and screw it up by making it shoddy and wasting customer time (I literally spent over 6 hours on the phone dealing with the Vista issue, and with this single Xbox console, I've had to sit on the phone, walking through the same inane troubleshooting steps ("Did you unplug the power supply?" "Ma'am, I just pulled the thing out of the packing THAT YOU SENT TO ME SO YES, THE PSU WAS UNPLUGGED!!!"), and then spend lunch hours driving around to UPS stores to drop off this thing to be sent to the McAllen, TX repair center, where apparently supervisors do not exist.
While I'm hard-pressed to say "don't buy an Xbox" because the thing itself is a joy to use, but I will say this (because I also got burned on the Xbox 1 the same way): do not buy a new console before Easter. They rush out the electronics for x-mas, trickle out the same crap line of chips/hardware, and it isn't until Easter until the next batch of consoles come out with the better manufacturing. March 26 The Microsoft Vista nightmareLet me preface this by saying I've been a Microsoft apologist for a loooong time. I've used all their operating systems and have developed on their platforms for years. When Vista came out, I was among those who wanted to get it on his machine ASAP. ASAP wound up being an extra month, but I eventually dove in.
At first, everything was peachy. Things fly around, colors are vivid, no paint wipes when I move windows around. Then I start noticing some UI quirks. Now these tend to dishearten me a bit because a) they're right in front of you as part of the UI, and b) MS never fixes these things in service packs (seriously, XP's focus and window sizing upon maximize features have been broken since NT5 beta 2 at least). No biggie, though (except for Windows Mail, which seemed to make Outlook Express pretty while making it act like it sends Usenet posts without actually doing so (buggy Windows Live integration)
Then, I decided to make my main user account a Standard User. KABOOM! I've heard all the complaints about User Access Control (UAC), and how it's annoying & gives the Mac guy even more of a smug attitude. But what do I care? I write security software, so I know where MS is coming from. Well, take a company that no longer takes UI bugs seriously and cross it with a company that takes security so seriously that it makes things obtrusive, and you have my problem. In a nutshell, the UAC prompt can't seem to find my built-in Administrator account. So I get a UAC prompt to enter a password (and it tells me to enter a password, but there ain't none there!...here's what I'm talking about. I've spent over 3 hours on the phone with Microsoft tech support, and while they are much much more competent than, say, Best Buy, I lost my tolerance for explaining to them that you can't grant admin rights to yourself if the OS won't accept admin credentials. At one point, they even said they'd escalate my situation and call me between 2am and 4am. So I dutifully stay up all night to wait for the call...nothing! And to make things even better, when I called MS back, I had to start over with the troubleshooting...boom! another hour and a half gone.
It's an interesting scenario, really. MS has a bug in UAC that allows it to display without any admin account, yet they lock the OS down so tight that this buggy feature is the only way short of Safe Mode for gaining admin access to the machine. And that's where things get even better. MS apologist I am, I own Microsoft hardware, namely the ergo 4000 keyboard and the Explorer Trackball. So they tell me to restart Windows and go into safe mode. Well, Microsoft Hardware (key word: synergy) saw fit to make this keyboard default to F-Lock OFF, so while Windows boots, I can't actually hit F8 to get the safe mode menu. I figure, "well, I'll just kill bootup so next time it starts, it forces Safe Mode menu". Well, in addition to no F-Lock, during bootup, Windows disables MY ENTIRE DAMN KEYBOARD! So while I can see the Safe Mode menu, I cannot actually select Safe Mode. MS' response "do you have an OEM keyboard you could try?" Me: "Uhh, no, all I use are Microsoft devices because I figure out of anyone, Microsoft hardware would have the least problems on Microsoft software."
At the end of the day, I'm still on hold with Microsoft, waiting to get an escalation, waiting to find a solution, waiting for anything. EDIT: No longer on hold, but I have a 4 hour wait for the next phone call from MS. My advice to folks out there (and this is coming from a formerly VERY pro-MS person): Do NOT install Windows Vista. It has at least 1 bug that makes it possible to lock users out of their machines altogether, and MS tech support is not very good with brainstorming fixes or elevating to higher levels of support.
August 25 Lulls and more lullsI finally got around to realizing that I haven't made in entry in ages. Looking at my January entry, Jeff Lacy got completely outclassed by Joe Calzaghe to my shock 'n awe. It was like Lennox Lewis vs. Mike Tyson for 12 rounds. Floyd Jr. didn't KO Zab, and a near-riot broke out, but he completely picked Judah apart, so no shock. Jose Luis Castillo didn't make weight again, apparently trying to lose weight in a makeshift bathroom stall & alcohol sauna (and one of his entourage suggested drawing blood), so the fight didn't happen. That makes me 1-1-1.
In the XMODS arena, my brother's silver EVO is finished, although a UPS screwup landed the package in Arizona, so I have a few more days until I get to assemble and tune it. I'm still missing a few parts on mine and am going to have to directly order them while wrapping up some chassis designs/fabrication, new case inserts, polishing, motor assembly & electronics overhaul. As my garage is a sweatlodge, I'm in no hurry to race, so it's really not that much to do over the next few months.
The final season (not including 2 epilogue movies) of Deadwood is almost over. It's been just as good as the prior two seasons, so it's a shame it's ending so soon. In its place, though, The Wire returns, which I'm excited about. It's a great shot that I only got into in season 2. I'm not sure what they've got planned for the comedy block, though. A decent, but over-cameo'ed season of Entourage, and a mostly lame (except for the last couple of pretty good episodes) Lucky Louie premiere are both ending as well.
Some boxing predictions:
James Toney vs. Sam Peter - I can't see Peter landing a good enough punch to KO Toney, who'll frustrate the Nigerian all night. No KO, though. Toney UD.
Carlos Baldomir vs. Floyd Jr. - Floyd wins the linear welterweight title by easy UD over Baldomir. If he KOs Baldomir, it'll be by body shot or cuts, as the Argentinian's chin is too good. I don't see Floyd trading like Gatti or not throwing like Zab Judah.
Barrera vs. Juarez 2 - I'm going out on a limb and predicting Barrera is even more shopworn this time around and gets TKO'ed, setting up Manny Pacquiao vs. Rocky Juarez, in which Rocky Juarez gets his head knocked off.
Corrales vs. Casamayor 3 - I can't believe this fight is actually happening. Very nice matchmaking in light of Castillo's unprofessional conduct. Gotta go with Corrales by TKO. Casamayor has gotta be 40-ish by now.
On the programming side, my base library is getting ever closer to completion. My XML object serializer is done with a nice, simple, flexible format that has a simple, clean code path that took me wayyyyyy too long to write. I'm back rewriting the grammar parser, and it's almost done but I'm dumbounded by a single inner loop that I can't quite figure out. Once it's done, my command line tool can start being used, but I still need to add threading capabilities to both that can integrate (hopefully as the low-level mechanism) with the threading executive. Once that's tweaked and working, I can start testing the grammar parser with extremely large bits of text (I'll probably use massive XML files probably composed of a deserialized (in my format since the .Net one doesn't like interfaces) object in the runtime, like new Url("foo"); I'm interested in how it performs with different numbers of worker threads to a) see how well parsing can be parallelized (and I think given it's recursive nature, it's very), and b) how conducive to automatic threading my method structure is, as I would rather not rewrite the xml serializer yet again since I think the class is finally perfect.
Oh, yeah, since my last entry, I moved into a house, changed cars, and changed jobs twice. January 05 Boxing EntryThe promised boxing entry. Thoughts on upcoming fights:
That is all. XMODS Painting EntryAfter intending to only let my clear-coated XMODS remote handle and generation 1 ESC covers cure for a month (less risks post-polishing orange peel), I let it lapse to six months as I got burned out on inhaling carcinogenic solvent fumes. I reordered sanding materials in addition to some extra sanding pads from the always-great MicroMark and hardcore smoothed out all my clearcoated parts + the primered stuff (spare remote & EVO ESC covers). It became apparent given how much of the super-thick clearcoat I was sanding away, I needed more pigment coats. I had some dark mica blue I special ordered during the Tamiya customs issues that I hit on my primary remote; it was nearly black, not deep blue like the deep blue with mica & its glaze effect I hoped for, so I just added mica blue over the original. I went to the wet layer on deep blue (1 can left) and the same for blue mica, so now I have 3 gen 1 ESC covers, 2 EVO ESC covers, and 2 remote handles. I have 3 cans of clearcoat, and I'm layering that on from Friday thru Saturday to make sure it's plenty thick for sanding (and it will cure for a full month before sanding). By then I should have most of my EVO aluminum parts and maaaaybe my new case inserts. 15 cans of paint really does come out in the finish, I'll give it that, and I haven't even clearcoated/sanded/polished yet, and that whole ordeal makes the thing look unreal.
I'm still 3 months maybe from being "done" with my XMODS project (got a McLaren F1 body that's quite nice and am getting an NSX and maybe a blank body for one last custom paint job), though, and there's plenty to do, mainly nagging machinists to cut custom parts for me. January 03 Late Night MusingsWhy is it that HBO/Cinemax always like to put on good late night movies at 1 or 3am, just when I want to go to bed? It's always "Menace 2 Society" or "Wonderland", and I end up going to work on 3 hours of sleep.
Anyway, in the spirit of the new year, I hope to post more. I've got a buildup of some topics, and it's something along the lines of:
1. ASP.Net 2.0 review (I've 86'ed my VS2005 review...in short, it's really nice but buggy; .1 should be outstanding)
2. XMODS painting update -> Dark blue mica is like black, so it's a base coat for more blue, I'm sanding, etc.
3. Boxing update -> Upcoming thoughts on Lacy-Calzaghe (early Lacy KO), Judah-Mayweather (I think Mayweather dominates more than most think), Castillo-Corrales III (Castillo by KO)
December 13 XMODS reloadedAfter a self-imposed hiatus from XMODS racing due to breaking plastic axles and loose lug nuts, I jumped into the water to drive my now-fully metal XMODS with the 3rd brand of lug nuts, the only one that locks tightly on the wheels (TopCAD; the GPM wheel shafts also hold them on much tighter). So in one fell swoop, I solved my last two driving problems. My friend's partially GPM was tried first, and it suffered from the new axles not being broken in, with the wheels locking during turning. Then the car itself was, as always, too unstable to drive. So I decided that since I was moving over to brand new ESCs anyway, I would run his motor on my car to see if it was the car or the torque. My car handled beautifully. So then I tried lithium batteries and my fastest motor (AtomicMods Fatboy), and again, my car drove great. The all-metal suspension seems to make the difference, as I doubt my other extras, like better bearings, etc. making that much of a difference in the handling. The driving experience led me to get back onto wrapping up my project while I wait for aluminum XMODS EVO parts to come in in the next month. I got to starting a spare remote, wiring my gen 1 boards, etc. Whereas I thought I was at 90% completion, it was closer to 70%. I got a new board built but not tested with my more precise wiring layout, newly designed AA battery harness, and a 28T long armature AtomicEGR can motor that should run lean and cool which I have wired up and ready for break-in. I also wrapped up my main rear deck plate with the liquid grommet band for the antenna anchor, and should have the other two (turbo ones) done in the next day or two. Those are some of the hardest parts to make as it requires 3 separate dips in rubber and is difficult to make such that it's sturdy as well as fully insulating. But I still have another harness to wire plus some turbo wiring. I need to reorder some sandpaper for the remotes, so it's shelved until the weekend at earliest. I think I have 2 more weeks of miscellaneous tasks to take care of, including a new case layout, but it's something I've got to get down to doing, since the thing is very close to being race ready, and I want to have a smooth transition over to getting the EVO built up and ready. October 18 Avalon/WPF Theming Cont.And the rest of it:
<Rectangle Name="FocusBorder" StrokeDashArray="1.5 1.5" Visibility="Hidden"> <Rectangle.Stroke> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <LinearGradientBrush.GradientStops> <GradientStop Color="#FF48500D" Offset="0"/> <GradientStop Color="#FFB56851" Offset="1"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Rectangle.Stroke> </Rectangle> </Grid> </Border> </Border> <ControlTemplate.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter TargetName="FocusBorder" Property="Visibility" Value="Visible"/> <Setter TargetName="OuterHighlightBorder" Property="BorderBrush"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <LinearGradientBrush.GradientStops> <GradientStop Offset="0" Color="#FF8BC0EA"/> <GradientStop Offset="1" Color="#FF3F6DB1"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Setter.Value> </Setter> <Setter TargetName="InnerHighlightBorder" Property="BorderBrush"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFA3B9E0" Offset="0.0"/> <GradientStop Color="#FFA3B9E0" Offset="0.1"/> <GradientStop Color="#FF5E81BC" Offset="0.9"/> <GradientStop Color="#FF5E81BC" Offset="1"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Setter.Value> </Setter> </Trigger> <Trigger Property="IsFocused" Value="False"> <Setter TargetName="FocusBorder" Property="Visibility" Value="Hidden"/> </Trigger> <Trigger Property="IsEnabled" Value="False"> <Setter TargetName="OuterHighlightBorder" Property="BorderBrush" Value="#FFFFFFFF"/> <Setter TargetName="InnerHighlightBorder" Property="BorderBrush" Value="#FFFFFFFF"/> </Trigger> <Trigger Property="IsDefaulted" Value="True"> <Setter TargetName="OuterHighlightBorder" Property="BorderBrush"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <LinearGradientBrush.GradientStops> <GradientStop Offset="0" Color="#FF8BC0EA"/> <GradientStop Offset="1" Color="#FF3F6DB1"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Setter.Value> </Setter> <Setter TargetName="InnerHighlightBorder" Property="BorderBrush"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFA3B9E0" Offset="0.0"/> <GradientStop Color="#FFA3B9E0" Offset="0.1"/> <GradientStop Color="#FF5E81BC" Offset="0.9"/> <GradientStop Color="#FF5E81BC" Offset="1"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Setter.Value> </Setter> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsMouseOver" Value="True"/> <Condition Property="IsPressed" Value="False"/> </MultiTrigger.Conditions> <Setter TargetName="OuterHighlightBorder" Property="BorderBrush"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <LinearGradientBrush.GradientStops> <GradientStop Offset="0" Color="#FFF5E8A1"/> <GradientStop Offset="1" Color="#FFDA7926"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Setter.Value> </Setter> <Setter TargetName="InnerHighlightBorder" Property="BorderBrush"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFEFCF86" Offset="0.0"/> <GradientStop Color="#FFF5E8A1" Offset="0.1"/> <GradientStop Color="#FFE6AA45" Offset="0.9"/> <GradientStop Color="#FFF1B85E" Offset="1"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Setter.Value> </Setter> </MultiTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.InactiveBorderBrushKey}}"/> <Setter Property="Background" Value="#FFFFFFFF"/> </Trigger> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="BorderBrush" Value="#FF1C5180"/> </Trigger> <Trigger Property="IsPressed" Value="True"> <!-- <Setter Property="BorderBrush" TargetName="HighlightBorder" Value="#FFC4D1E7"/> --> <Setter Property="Margin" Value="0,0,0,0"/> <Setter Property="Padding" Value="0,0,0,0"/> <Setter Property="Background"> <Setter.Value> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFFFFFFF" Offset="1"/> <GradientStop Color="#FFF1F8F9" Offset="0.7"/> <GradientStop Color="#FFE9F1F5" Offset="0.45" /> <GradientStop Color="#FFE3EBF3" Offset="0.45"/> <GradientStop Color="#FFD0DCEB" Offset="0.4"/> <GradientStop Color="#FFABBDD3" Offset="0"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> Avalon/WPF Theming: ButtonI finished up the first of my Avalon-based Royale/Energy Blue (the Media Center PC theme) themes. The full style definition is mapped out (I'm calling the main theme "Energy Blue" and the Windows Media Player extensions "Royale" for clarity), and I've got all the other styles past 50%, but there's some tweaking to do. Also, an apparent bug in the September CTP regarding the BasedOn attribute in external resources is preventing me from fully optimizing the thing for space and removal of all redundancies. When I can get refactoring working, I'm going to try to get the layer blending working so the "gel" look can be layered onto any color control. Part of that is also geometry warping and getting a system of animation layers working so I can merge in an animated version of the style. One note on it: I do not move the text down when IsPressed=true to be consistent with property dialog buttons (Display, IE). I have noticed that native IE buttons do set padding to 1,1,0,0 and also do not automatically accept focus at this point, but I think that's an issue of the panel itself not having focus. In this version, a press automatically results in accepting of focus.
So without further ado, {x:Type Button}:
<Style x:Key="{x:Type Button}"
TargetType="{x:Type Button}"> <Setter Property="Background"> <Setter.Value> <LinearGradientBrush EndPoint="0,0" StartPoint="0,1"> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFFFFFFF" Offset="1"/> <GradientStop Color="#FFF1F8F9" Offset="0.7"/> <GradientStop Color="#FFE9F1F5" Offset="0.45" /> <GradientStop Color="#FFE3EBF3" Offset="0.45"/> <GradientStop Color="#FFD0DCEB" Offset="0.4"/> <GradientStop Color="#FFABBDD3" Offset="0"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="BorderBrush" Value="#FF255082" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Margin" Value="0,0,0,0"/> <Setter Property="Padding" Value="0,0,0,0"/> <Setter Property="FocusVisualStyle" Value="{x:Null}"/> <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Border BorderBrush="{TemplateBinding BorderBrush}" Margin="{TemplateBinding Margin}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="1"> <Border Name="OuterHighlightBorder" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="0.0"> <Border.BorderBrush> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFD5DEEC" Offset="0"/> <GradientStop Color="#FF90A8CD" Offset="1"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Border.BorderBrush> <Grid> <Border Name="InnerHighlightBorder" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"> <Border.BorderBrush> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFF9FDFF" Offset="0.0"/> <GradientStop Color="#FFF9FDFF" Offset="0.1"/> <GradientStop Color="#FFCDD7E4" Offset="0.9"/> <GradientStop Color="#FFA6B8CF" Offset="1"/> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Border.BorderBrush> <ContentPresenter Margin="{TemplateBinding Padding}" ContentControl.Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> </Border> To Be Continued... October 07 Corrales vs. Castillo IIFor the uninitiated, Diego Corrales is listed first because he is the champion (or, as fallback or in rare instances of promotional injustice, the "headliner"), and this is II because 5 months ago, these two warriors waged the most intense and brutal back and forth war I have ever seen, capped off by the Round that finally dethroned Hagler-Hearns Rd. 1 as the greatest round of boxing of all time (Round 10), which made this the perfect fight. Joe Goosen said these two should not fight each other this year, and he was right, but these guys are fighting 5 months later after healing/resting and having good training camps. My head was saying Castillo and gut saying Corrales (last time, it was reversed), since I thought Corrales dropped too easily and had worse facial damage. Castillo, however, is having trouble making weight again and did take more damage in the first 9 rounds.
UPDATE: WOOOOOAAAAH!!!! Weigh-in news: Castillo comes in 2 pounds too heavy, then has someone in his entourage put his foot under the scales(!!!!!!), and then came in even heavier (3 1/2!). He's losing $75k a round (hopefully Corrales gets it), and he has to make either 147 by 3pm tomorrow or 146 by 5pm, depending on which camp wins the negotiations. This fight may not even come off. But if it does, Castillo is toast, as he looks like death warmed over trying to make weight, which Corrales looks sharp, fit, and mean; they will both make 147 fight time anyway, so I gotta go with Corrales easy. Castillo looks either like he has already given up or that he isn't gonna kill himself to make weight even if the fight doesn't happen. Unprofessional behavior, though.
BTW: I am going to soon do a full writeup of VS.Net 2005, ASP.Net 2.0, and Avalon. I have come up with a new application idea, however, that requires WinFS/Windows Storage Foundation. I'm storyboarding and mapping out tasks for the new UI, which is very, very ambitious to the point of making Visualizer (working name for my "other" app) just a warmup. I need to get V working to prototype first, then I'll put together the underlying junk for this new app and start soliciting some info on getting this thing useful. Avalon really is one of those world-changing technologies, with some really cool apps being possible. With the web being as rich as it is with AJAX (and Atlas) and fast web connections being more ubiquitous, technology like Avalon (and maybe Apple will wind up adopting ShockWave, which would be an easy way to catch up) is essential to setting native apps apart as being necessary (and tech like ClickOnce helps, as it makes usage of Windows apps more like Web apps in terms of zero install) October 05 Miscellanous Musings1. Rome is turning out pretty good, although the home life of Lucius Verinus is boring as hell. I mean, last episode spent a good 3-4 minutes going through the incredibly awkwardness of him and his wife sitting down to eat bread and olives.
2. I finally got all my GPM AWD dogbones for my XMODS. The new ones have a nylon band to prevent the main pin from flying out at high RPMs. I went ahead and just threw away my gold 1st gen dogbones. There still seems to be some binding in my reassembled vehicle, but I want to test the current drain before deciding on a teardown to track down the problem (if any). Sometime this week, I've got to sand down my remote and finish it up (I may need to repaint if I can't smooth it down without hitting pigment. I've got a stockpile of replacement clearcoat, though, so I'm not overly worried. I do need to finish up so I can repaint the ESC covers, as it's time to assemble the main boards/servo units. The servos in these are loaded with gear grease, so the final chassis should be as smooth as there is on the market. My target amperage is 1.2 to match or beat the AtomicMods Los Alamos, which is basically my car with lesser bearings & antenna as well as different turbo setup.
3. This weekend sees THE Rematch: Diego Corrales vs. Jose Luis Castillo II. The first fight was the best fight I've ever seen: 10 rounds of brutal, skilled back & forth in-fighting. Diego Corrales had the edge through 9 rounds, buckiling the knees of Castillo at the end of the 7th. The 10th, though had Corrales go down twice from hard lefts only to come back and stun Castillo twice with hard counter shots, finally putting him out on his feet for the TKO. This fight looks to be more of the same. The brain is telling me Castillo is less weathered from the first fight and will be too strong here, but the heart tells me Diego won the first 9 rounds and has better defense & power and will wind up with a repeat of round 7 but this time catching Castillo earlier in the round so he can finish him off. So I'll still officially pick Corrales like last time, although these kind of picks are usually wrong for me, so I would not be the least bit surprised if I am wrong yet again in a pick of a close fight.
4. Avalon/WPF work is continuing nicely. I've got a 3D animation working along with a dynamic UI. I need to tweak things for usability, though, as there's just some test concepts in there. The big task is getting external resourcedictionaries merged in the app resources. Once I get that working, I can get Royale working along with an animated Royale (not called Royale With Cheese), which then gets layered under an app=specific theme containing the various storyboards for the 3D stuff. If the documentation were better, this thing would be pretty much perfect. September 15 PDC EffectsBad news from all these new PDC bits: I had a ton of breaks in my UI, so I'm putting storyboards and graphic resources back in, which is time-consuming; it's a royal pain to put on my system, thanks to MS Max screwing up the framework and/or WinFX bits with an attempted uninstall of Windows Workflow Foundation (this new pillar plus the new Expression Suite are some other killer developments out of PDC; the Windows development platform is going to be a blast to use in the coming years, esp. with MS *also* having some distributed/grid "foundation" in development as well.
Good news from the PDC bits: Things are a lot cleaner + the breaks force me to better-learn the XAML format (basically, they're a lot like attributes in that something like {StaticResource FadeEffect} translates to new StaticResourceExtension("FadeEffect") -or-other). All the PDC bits (that I really have only seen via screenshots) got me back in a creative rhythm again, so I storyboarded a comprehensive Explorer/Configuration tool. Basically, took the hierarchy of the environment I'm working on (Whose Name Shall Not Be Mentioned), took the Windows Desktop hierarchy, put them in another hierarchy of a home automation project I'm working on, threw in a lot of 3d and Office 12 ideas along with earlier storyboards of the smallerscale version, and them abstracted it into a layer of a) two types of app layouts, and b) the actual full interface itself, which puts the various parts into the full app. It's almost entirely declarative (which I anticipate anxiously in asp.net 3.0), plus it allows me to user xaml in satellite assemblies easier (no more locking issues in this CTP). This declarative UI stuff is a blast; I just wish it didn't require a recompile to debug it (here's where asp.net is superior)
Microsoft PDC ThoughtsI haven't been to a PDC since 1999, but I have been following this one almost as much as the 2003 (Longhorn/WinFX intro) one. I'm holding off on putting out my Visual Studio 2005 review (which covers the IDE, ASP.Net 2.0, and Avalon(Windows Presentation Foundation)) but all the events of the PDC got my creative juices flowing, so I've been pulling my hair out trying to get a working install of the September CTP bits on my machine for updated coding on my Avalon app (ASP.Net 2.0 really isn't advanced in the PDC stuff I've seen, and that's more future day-work stuff and more generic layout controls). I've adopted some of the layout (master pages)/theme (skin) organizational aspects of ASP.Net in my Avalon code, but in keeping with the Avalon-to-web relationship, is a more flexible model. For my "product" layer (there are 2 layers to what I work on in my spare time: the freeware layer of generic, UI, and distributed framework classes, and the soon-to-be-copywritten layer composed of particular components of various functionality), nothing really changes, but the underlying Windows(Avalon) fork of the UI portion supports several generic layouts that are used by the full-fledged "Explorer" application. This particular application is designed according to the Vista UI style guide, which is what is known as an "inductive interface". Windows Media Player 10 is the currently most well-known version, but Microsoft Max supposedly is the definitive Vista app. My primary layouts that I've put in are ParentBased- and ChildBased- ObjectExplorers with some neat bells & whistles that Avalon allows for (I love things like fades, indicative of a general "soft" feel to the system, and bright, graphically intensive UIs where everythign flows and is immediately obvious to even the casual user (except VS.Net, which is perfect for its audience) The layouts are fully customizable, though, subclassing off somethign along the lines of VS.Net 2005's 90% perfect layout engine.
Nice thing about the templates here are that the are very generic, even though they display a very particular style of interface. The extensibility model is part of this design of the whole thing, so all templates are easy to locate, identical in navigational style, are fully-skinnable (plus, Avalon, unlike ASP.Net 2.0 has a skinnable control tree), and integrates (with no coding on the control's part) into the parent layout's arrangement engine, which is based on Visual Studio.Net 2005's scheme but adding some features on my wishlist, like OnHover-based panel-splitting/tabbing. September 01 DogfestMy friend Rick's pit bull, Hera, gave birth to a litter yesterday. I figured dogs would spit out pups in a half hour or so, but it took about 12 hours total to give birth to 10 pups total, including a stillborn male. Total count was 8 males and 2 females, most being blue and white (the most desirable color combo). That's a whooole lot of puppies, which is good because those things can fetch a good bit of money. I really want one of those pups, since I haven't had a dog in several years, and both sire and dam are very affectionate, loyal dogs with the dam being a mammoth goofball and the sire, Tonka, being a ripped machine. I'm curious how my cats would adjust to the presence of a puppy. Unfortunately, space and rent status prohibit that at this time, so I'll have to wait on the next litter (same breeding pair, though)
Anyway, eat this, Google: http://home.satx.rr.com/rhodespits/rhodespits_main.htm
July 04 TV RoundupAh, yes, it's 11:11, the time of Solara (unless you're in the military). Just kidding. Watching HBO and have some observations about my usual shows on the current HBO cycle:
Six Feet Under: Every character except for David and Keith will hopefully die by the end of the season because they are all narcissistic, depressing, angry, pathetic, and overly annoying. D & K are off trying to get a kid which is marginally interesting (it'll be even moreso if Keith has an affair with the surrogate mother, 'cause he's been giving her the 'eye'). Ruth needs to breathe the soothing air of a compressed goose down pillow as a stoned Claire puts her out of her misery. She is even more cynical than usual (but at least not full of that artsy crap), but Ruth is flat-out unpleasant to even watch; she spouts off about 2 sentences before randomly yelling about something. Methinks she needs to hear the Rick James joke about what the 5 fingers said to the face ("SLAP!") from Claire. Rico is being a schmuck, as is his wife, and Billy actually had his mother try to get him back with Claire. All-in-all, why the hell should I watch a show with so few characters having so few redeeming values? Actually, now that I think about it, George's daughter needs to be rescued from this hell-hole of a show. But what really gets me is that they always want to gloss over the interesting parts. Plot developments happen *between* episodes, which blows me away. I mean, George starts asking tough questions to Nate about Lisa, and his response is "I don't want to talk about it."?!!?!?!! You're a friggin TV character, SO TALK ABOUT IT!
Entourage: One of the best episodes, with an AWESOME cameo by an arrogant, whoring, pothead Bob Saget along with a really interesting plot about trying to get Vince on the James Cameron "Aquaman" movie. Lots of good, funny stuff all the way, and the characters are growing on me more and more.
The Comeback: It's getting better, but for some reason, they didn't have a new episode this week. The early episodes are kinda funny, although things start picking up when Paulie G does the finger-gun thing at Valerie (he despises her). I was pretty disappointed at there not being a new ep this week, as the previews showed a bit where another reality show's star (who's a "little person") has to run across an LA freeway in the middle of the day.
June 26 Mayweather destroys GattiI was sliiiightly worried that Gatti could pull some kind of miracle shot and beat Floyd Mayweather, Jr., my favorite fighter. Didn't happen as Floyd put on a virtuoso performance on part with Winky Wright's dissection of Tito Trinidad. Floyd is the most accurate puncher in the game, and the sheer variety of shots he landed on Arturo Gatti blew me away. It'd go: left jab, right to the body, right hook to the head, right cross. Rinse, repeat. The KO of Gatti was somewhat controversial, but really, it was Floyd pushing Gatti down but letting off right when the ref was going to jump in to stop it. But since Floyd let off, the ref backed off. Gatti looked to the ref to complain, and Mayweather nailed him with a left hook. Same lesson Nate Campbell learned against Robbie Peden and Alex Gonzalez learned against Travis Simms. Most shocking stat of the night: Gatti landed 10 power shots throughout the entire fight. Biggest surprise of the night was Carlos Maussa KO'ing Vivian Harris. Harris spent too much time pre-fight worried about getting a Mayweather fight and wound up getting gassed in 5 rounds, nearly quitting after 6, and going out for a KO in the 7th. I can now stop hearing about how everyone is ducking Harris. Looking at how one dimensional he was (straight 1-2s were all he had and he ate counters all fight), Floyd or even Hatton would have destroyed him. So would Kostya Tszyu.
I've been working on my text parser a bit. I plugged in the fully threaded pipeline engine so that it is really running commands. I had to tweak my grammar definition a bit and make a small tweak to the parser itself, but by and large, the bulk of the work is with getting the definition right. I'm looking forward to hooking it into the AI engine's output engine (still haven't made the appropriate changes to the serializer, but I defined the schema for it) to see if I can get the thing to learn how to come up with its own definitions. The command line is close to actually working, finally, with the pipelining and .Net coding evaluation left in the whole equation, although I may expand the threading support a bit. It's been pretty cool seeing a lot of this stuff I've been working on in various capacities over the years finally start working. June 18 Miscellaneous thoughtsI got the polished titanium back (see the photo gallery). If the water jet can cut it without ruining the finish, I'll go ahead and have the chassis' cut in a couple of weeks. If not, I'll use a laser cutter. I'm ordering a metal bender soon, and should have to get a drill press soon for countersinking the chassis'. I ordered a bunch of different M2x.4 screws to match the GPM screws, so that means I have to find similary-threaded standoffs. An assortment totalling 400 screws cost $20; one place quoted me $400 for 50 screws, and they weren't even Phillips head. I made 1 RFQ for something finished similarly to the titanium for the standoffs with the metric threading. Hopefully, the hybrid metric-English measurements won't be a huge problem. I'm still overhauling the serializers after getting them working. I added templates (kind of like XAML's styles, I imagine, but basically it allows for copying markup in areas for deserialization while allowing for individual property overrides; serializing with any kind of optimization will be tricky but doable). The architecture of the serialization turned out to be really flexible. The key that allowed me to get over some paradoxes was to break up xmlns:RuntimeType into a 2-phase operation. Some namespaces may take 1 or more, depending on the effect. The text parser was going to be called GrammarSerializer, since it had the same overall pattern, but I decided the terminology was confusing, as the operations are similar, but different enough to warrant their own naming conventions (I'm trying to keep noun variants to a minimum). The grammar definition is more complex than the original parsing algorithm allowed for, unfortately, but I'm still going to dig through the code for salvage, but I'm writing a prelim clean algorithm first so as not to bias my thought process. I still have some serialization work to do, especially with template scoping, but once that and the core parsing engine are done (various subclasses of the parser just have specific grammar definitions for convenience so I can just use app.config for trying to grammar), I'll be able to get most of the command line up and running. Then I can clean things up in terms of documentation and exception handling and finally making the 2nd major milestone, first being the new architecture. The third will be actual vertical functionality (likely the parsing of English sentences, but ideally using automatic grammar generation to do it). June 14 Serializer workAfter ripping up all my old serializer stuff, I got an event-based version that allowed for internal (subclass) and external augmentation via those events. I decided that expandability was too dependent on the events such that if I didn't have the events or changed any of them, it would no longer work. So I took a clean approach and went with very distinct layers and got to a point where the base serializer would deserialize basic objects fine. I built the hierarchy and started expanding it, one layer at a time. Things look to work pretty well with very unified configuration pathways (using XmlNode for as many of the non-virtual, generic algorithms as possible). Expandability is good, but I got tired of being mired in details getting everything perfect, so I got the command line up and running with a couple of layers and have moved vertically for testing, tackling the parser. I moved most of the language-specific semantics out of the freeware layer and into the proprietary language parsing component, replacing the core library's parsing system with a more flexible generic tree/delimiter structure. I've got a few kinks to work out, but once I get the generic parsing engine working (and I think last i left it, the parsing algorithm was pretty rock solid, so I only need to adapt it to the new layour). The language parser will wrap the genericness in language-specific semantics (words, sentences, etc.), as will the command parser (the current testing "column"). The command parser will stretch the limits of the parsing concepts, as it has parallel structures and children of several potential levels above and below, which is the primary reason I'm taking this route (that, and I really need to finish the CLI, since it is the heart of run-time .Net debugging of this thing). Once the basics are working, I'm going back in the clean things up, including implementing both the Macro and Script serializers in addition to overhauling the exceptions and redocumenting. Then, I'm running a ton of tests to stress the error-handling, since so much of the input is text-based and vulnerable to error. After that, I'm gonna tackle the Serialize method, which includes customizable XML formatting. It's a lot of work, but having Deserialize for configuration, everything else falls into place pretty quickly, since I find 75% of a clean system is getting things configured (10% goes to elegant code, 15% goes to input validation). The deserialization part is crucial for 2/3 of those, as it cuts a ton of time out of configuration, since you just need to describe the initial app state without having to write code to transfer that to the internal objects + allows for very robust initial input validation. |
|
|