My GOD but Anthem sucks
I recently switched to a Health Savings Account, getting my High Deductible Insurance Plan from Anthem. Little did I know that, over at Anthem, it’s still 1994, and only computer people use the Internet.
To wit, functions like signing up and making a payment are only available during business hours. I tried to pay my bill at 8:30 PM tonight, and got this:
Site Unavailable
The online self-service feature you have requested is unavailable at this time. Our regular system operating hours are Monday through Friday from 6:00 a.m. to 8:00 p.m., Saturday from 6:00 a.m. to 3:00 p.m., and Sunday from 9:00 a.m. to 1:00 p.m. We apologize for any inconvenience this may have caused.
Can someone at Anthem please explain to my why the hell I can’t make an online, automated payment after hours? Weak!
The elegance and expressive power of the SNR metaphor as applied to human communications
In conversation, I often lament that a support forum/comments thread/blog/site/user group meeting has a ‘negative SNR’. This is of course a metaphor, both elegant and simple, for a general lack of substantive content.
The SNR concept is fairly simple:
[T]he ratio of a given transmitted signal to the background noise of the transmission medium.
So, when I say ‘sci.crypt has a low SNR’, that means the number of meaningful, informative, insightful, or otherwise non-bullshit posts is greatly outnumbered by the quantity of flames, ideological rants, counter-rants, trolling, spam, and bullshit posturing posts.
But, as a metaphor SNR gets even more expressive.
SNRs are often very big or very small, so the decibel (dB) scale is used to even them out. The decibel reduces the range between values by converting them to a logarithm, usually 10 log or 20 log, but really any coefficient and log base would work.
Recall the logarithm of some number n is the power of the logarithm’s base that equals n. So, the base 10 logarithm of 1 is 0, (10^0 == 1), of 10 is 1 (10^1 == 10), of 100 is 2 (10^2==100), and so on.
Where it gets interesting is when n is less than one. In this case, the exponent of the base will necessarily be negative. For the purposes of this example, that means that when the number of substantive posts is less than the number of bullshit posts, the ratio of substantive to bullshit posts will be less than one, and thus the SNR as expressed in decibels will go negative.
I would therefore say ‘the SNR of sci.crypt is negative’, which is expressive on two levels:
- First, if one doesn’t get the SNR reference, one can still infer from the context that I’m saying something bad, largely due to the word ‘negative’
- Second, if one does get the SNR reference, it’s a very succinct way to convey information about the nature of the content of a particular medium
As a secondary benefit, it allows the user to appear both intelligent and witty, while causing most listeners to feel stupid and dense. As an expressive tool for the poseur wary of overt pretension, it’s hard to beat.
OMFG I can't wait for the Wi-Spy with external SMA
I’ve been eyeing the Wi-Spy for some time, but now that I’m beginning to get into licensed microwave wireless comms, it’s looking even better.
The MetaGeek forums have been promising a new version with an SMA connector for the last six months, and I have a good feeling that its release is finally imminent. Quite possibly the best dollar per unit coolness value in any piece of test/measurement equipment available today.
Those of you who know me at all well know I like elaborate instrumentation. I wish I could ‘see’ from the ultrasonic to microwave as well as IR and visible light spectra, and would have an oscilloscope implanted into my iris if I could think of something cool to hook it up so. When I read Dan Simmons’ Hyperion quartet, I wished I was one of the Ousters, whose modifications allow them to visualize EM fields, gravimetric currents, and other things humans weren’t meant to see.
So, the prospect of these cool visualizations of the 2.4GHz ISM bands is very appealing. Dammit, how much longer ’til the SMA version?
Goddamit DevExpress!
Earlier I lamented my fate as a GUI developer with DevExpress GUI widgets. After a few hours of repeated head/wall interfacing, I found the problem, and it’s so maddening I must now vent.
Most of my business objects are displayed in the GUI using WinForms and DevExpress data binding. If I have a list of objects to display in a grid or list or, in this case, a calendar, I use lists derived from System.ComponentModel.BindingList<T>, which implements all the plumbing, like IBindingList, plus general-purpose typed container stuff.
Using one of these lists as the DataSource for WinForms or DevExpress controls Just Works. However, as mentioned before, the scheduler control doesn’t switch to the UI thread when handling ListChanged events, so when I load my list in a background thread it crashes the app. Rather than post to the support forums and wait until the next dot release, I just whipped up BraindeadBindableListWrapper, which implements IBindingList and delegates all but the ListChanged event to the IBindingList instance it wraps. For the ListChanged event, it intercepts the event from the wrapped list, switches to the UI thread, then passes the event on to whoever’s listening (typically the Scheduler control).
However, when I use this wrapper, none of my events show up. It wasn’t until a few hours into the problem that I realized the wrapper was the cause; DevExpress doesn’t throw an exception, or issue an error; it just silently ignores the properties on my event objects, and creates one subjectless, 1 Jan 01 event for each event I have.
Out of desperation, after trying a multitude of other stupid-but-doesn’t-hurt-to-try hacks, I added an ITypedList implementation to BraindeadBindableListWrapper, even though my BindingList<T>-derived lists that work fine don’t implement that interface. Shockingly, it worked fine.
I then began spelunking around the DevExpress source code (the source license for DevExpress is really the only thing between me and a psychotic episode), and found the spaghetti-like logic that teases out properties for list items.
The problem, ultimately, is that the DevExpress team aren’t aware of/don’t shit a shit about the principle of Least Surprise. Under this principal, framework programmers make design decisions with the intention of limiting the surprise experienced by the programmers using the framework. For example, a method that saves a file which conforms to the Principal of Least Surprise would simply save the file, while a non-conformant method might validate or flush buffers or do some other side-effect-having bit as well.
In DevExpress’s case, they want their data binding code to tease out the properties of the items in a list under any possible circumstances. This leads to a fairly arcane bit of heuristics, which include:
- Checking for an
ITypedListimpl, and using that if found - Checking for one or more items in the list, and using the first item if found
- Checking for an indexer property (
this[]in C#), and using the public properties of the return type of the indexer if found
That feeling of dull nausea in your stomach is a normal response to this stimuli.
This has a lovely side-effect: any generic List<T> or BindingList<T> list will Just Work, since the generic containers happen to provide a typed indexer. Similarly, any ITypedList impl will work. What’s more, an IBindingList that has at least one item in it will also work, since DevEx will deduce the properties from the first item it finds.
However, in a fit of maximal surprise, an empty IBindingList that is populated after binding will not work, since the heuristic doesn’t have any information with which to determine the properties of the items in the list at binding time.
So, here we have two shitty things:
- Binding logic that uses a non-obvious, non-documented heuristic that at first blush appears to work/not-work with two equivalent implementations
- Binding logic that isn’t smart enough to evaluate properties on an item-by-item basis
So, if my BraindeadBindableListWrapper either implements ITypedList or has a typed accessor, it’ll Just Work. A violation of the principle of Least Surprise if ever there was one. DevEx, I want my Saturday night back!
No more Morse Code test for Amateur Radio licenses
Wow, it seems the FCC has finally removed the Morse Code test requirement for Tech Plus, General, and Amateur Extra license classes. So there’s really no reason not to go for Amateur Extra, I suppose.
It always struck me as odd that you had to pass a Morse code proficiency test in order to operate on the HF bands, even if you weren’t going to be doing Morse code (aka ‘CW’) communications. Then again, it also struck me as odd that anyone bothers using HF spectrum at all, but that’s a post for another day.
I almost want to peek at the ARRL forums and take an inventory of the bearded kurmudgeons lamenting the demise of ham radio now that Morse Code is giving way to new-fangled modes like voice. Almost.
UPDATE: Ok, I couldn’t help it. The slashdot post is alive with the usual menagerie of troll-like life forms, some of which are even not bearded.
Using Developer Express UI widgets
Lately I’ve been stuck doing GUI development at work. If you’re not a systems programmer, it’s probably hard for you to understand how degrading UI work is for me, but it’s roughly equivalent to a lawyer cleaning toilets, or a doctor doing TPS reports.
To make this process suck minimally, my company licensed the Developer Express DXperience toolkit. The toolkit includes WinForms, ASP.NET, and ActiveX components, but we’re only using WinForms.
In my tenure at BearingPoint I’d used a heavily customized earlier version of DevExpress’s XtraGrid control, but they’ve come along way since then, and I’m using more controls now.
In general, my impression of GUI development is that it sucks as much as any other GUI development task I’ve undertaken. The toolkits are always more complex than you’d like, and at the same time less flexible than they should be. Threading issues are the rule rather than the exception, and nothing works quite as it should.
Thus far I’ve posted nearly a dozen support issues to the DevExpress support system. One is a confirmed bug which remains outstanding, a few were basically RTFM responses pointing me to the solution I was too stupid/lazy/non-psychic to find myself, and most were along these lines:
Thank you for your question. Though what you’re asking is a basic bit of functionality which one could reasonably expect from any commercial toolkit worth its salt, there’s no easy way to do it with the current version. We’ll add your request to the ‘No Fucking Way’ feature queue. In the mean time, here’s a nasty hack that uses reflection and write-only VB code to achieve sort of what you want, but it will only work in the attached test harness, and not in the real world. Thanks for using DevExpress. Sucker.
I’m not ragging on DevExpress specifically. There’s just something about modern UI programming that is intrinsically hard, not in the ‘NP hard’ sense, but in the ‘factor this 100-bit binary polynomial in your head while I slap you repeatedly with this dead fish’ sense; that is to say, complex, hard to hold in your head, and rife with concentration-breaking distractions.
Case in point: right now I’m trying to get some temporal data from our product into a calendar-type view, using DevExpress’s XtraScheduler control (yes, they all start with ‘Xtra’; it’s called ‘branding’). Ostensibly, this is as easy as building an IBindingList-drived list of objects with certain properties like Start and End. Indeed, I whipped up a working prototype using dummy objects in mere seconds.
And yet, as with so many things, once I moved it to the real app, it stopped working. I add objects to the list, the list ListChanged event fires (filtered through a wrapper to fire the event on the UI thread, which I had to write because XtraScheduler is too stupid/lazy to check the thread a change notice comes in on, but I digress), and the control’s count of schedule items increments, but it never touches the Start/End properties, and just builds up a list of events starting 1 January AD 0, (incidentally, wasn’t that the first Christmas day?), without displaying fuck all.
I could post something in the DevExpress forum, but since my test app works fine, I’d have to come up with another test app to reproduce the problem, and if I knew the problem well enough to reproduce it, I’d probably be able to solve it on my own. If I try to describe the problem w/o a sample project, they’ll not understand me and ask for a sample project.
So, here I am, sifting though the XtraScheduler innards on a Saturday night, when all the cool programmers are debugging kernel modules or attaching TCP/IP stacks to robotic litter boxes. sigh
Possible Seth Poster Ideas
This is a private post for Hailey only. If you’re not Hailey, go away. In particular, if you are Seth, fuck off.
The following are possible Seth poster ideas:

Guernica — This is my favorite Picasso, so I’m somewhat biased. It has a dark, martial quality that I think will contrast nicely against Seth’s generally marshmallow-like personality.
Don Quixote — No, they’re not all Picasso. I like this one since it is very simple, has a comedic quality, but can still be taken seriously.

The Elephants — I mostly hate Dali, but Seth might like this one.

The Scream — It’s kind of lame to get the most well-known Expressionist work, but I have to believe Seth had this in mind when he asked for something Expressionist.

Despair — If not The Scream, perhaps one like it…

Goldfish — Nothing special, just one of the few Expressionist works I could find that includes an identifiable subject; something which appeals to my Philistine sensibilities.
Amateur Radio Creeping Out of the 80s?
Lately I’ve been casting about for self-edification projects to capture my interest the way software engineering increasingly does not. I stumbled upon amateur radio once again, and this time spent a bit more time looking into it before dismissing it as a social outlet for the bearded UNIX militants ca. 1982.
I’ve explored amateur radio in the past, but found it completely unsuited to my tastes. First, it is largely a social activity, concerned with communicating with other ‘hams’ using a variety of modes, from Morse code to voice to video. Anyone who knows me will immediately recognize how little that will appeal to me.
Second, while amateur radio technology is fairly cutting edge, it’s concerned mostly with 21st century solutions to 20th century problems. The most active regions of the amateur radio spectrum allocation are HF (Morse code mostly, with long range), and VHF and UHF (mostly audio, but some low-speed data and video). These are bands that have been used for more or less the same things since after World War II. Though digital technology has enabled smaller more efficient radios, not alot else has changed.
The one spot of interest to me is so-called ‘packet radio’, which as its name implies involves the communication of digital data packets over RF links. However, I was shocked and horrified to learn that ‘high speed’ packet radio is 9600 baud half duplex, with plain old packet radio clocking in at 1200 baud or 4800 baud.
For those of you born with broadband, ‘baud’ may be an unfamiliar word. The baud is a measure of the rate at which bits can be communicated over a digital comms link, first used to describe the speed of links between teletype machines. It’s so antiquated that by the time I got my first PC, it had been supplanted by the bits per second, or bps, unit, however it’s still going strong in amateur radio.
When I first started using computers, there was no Internet (rather, there was, but IP links to it were expensive and there was no web, so what IP links there were had limited value). Instead, we hiked up-hill both ways in the snow to dial into BBSs with our modems and dedicated second phone lines. Even at this primitive stage, I expected no less than 14.4kbps, which within a few years jumped to 52kbps. Only once in my entire life have I ever communicated with a 9600 baud link, and was so horrified at the shittiness of the BBS attached to it that I never called back.
So, you can imagine my underwhelment at the prospect of exchanging 1200 baud teletype messages with my fellow hams from all over the world. If you’re thinking that sounds like IM but an order of magnitude lamer, we’re on the same page.
However, undeterred, I kept digging, sure that there must be some hams somewhere who have also used the Internet, and thus realize how incredibly lame the mainstream packet radio capabilities are. After some digging, I learned a few interesting bits:
The ARRL (the lobbying arm/professional organization for American hams) has a working group called the High Speed Multimedia (HSMM) working group, which according to this news release is exploring the use of high-speed unlicensed wireless technologies like 802.11(a|b|g|n) for amateur radio purposes.
This sounds great, but when you go to the HSMM site, you see a ‘under construction’ message. Lovely.
Further research turned up a few more groups doing interesting things with 802.11 and amateur radio, like Green Bay Professional Packet Radio and hsmm.us.
This led me to the second interesting bit: the amateur radio spectrum allocation is actually very diverse, and includes bands from HF to 1.2Ghz, 2.4GHz, 5.6GHz, 10GHz, up to 300GHz and beyond). The 2.4GHz band overlaps with the first few channels of 802.11(b).
The cool thing is, licensed amateur radio operators can reclassify Part 15 (that is, unlicsened wireless devices operating in the ISM bands, like WiFi gear) radios for Part 97 (licensed amateur radio) use, thus allowing amateur radio power output, which is well beyond the maximum imposed by the FCC for unlicensed use. Better still, since licensed users have priority over unlicensed users, if anyone’s wifi gear interferes with an amateur radio use of the spectrum, it’s on them to stop it, and if amateur use interferes with unlicensed use, tough shit.
So, I can run that 1W amp and 24Dbi directional antenna with my WiFi access point under Part 97. Pretty cool.
There are, however, some down sides. First, amateur radio rules are not adapted to the 21st century data comm landscape. Hams are forbidden from using encryption or engaging in commercial activity, which rules out using WPA to protect a network from unauthorized users, and depending upon the FCC’s historically arbitrary and capricious interpretation of the rules, could rule out viewing ad-supported web sites or buying stuff online. With those two restrictions in place, any wireless IP network would converge asymptotically to useless.
Clearly, alot needs to be done to bring amateur radio into the 21st century, and not all hams are particularly happy about it. It’s amusing to me that a radio service explicitly dedicated to driving innovation has a large continent of kurmudgeons who see no reason to support high speed wireless data comms or spread spectrum technologies or anything else invented after 1965.
But, given that obtaining a Technician class amateur radio license requires the ability to walk upright, form simple sentences, and score 75% or better on a test with a published question pool and answer key, it doesn’t take alot to get into it, and since I could give a shit less about ragchewing with other hams on my local repeater or exchanging Morse code with Kazakhs when the troposphere is ionized just so, the equipment required is mostly off-the-shelf WiFi gear.
I’ll probably sit for the exam in January, and as long as I keep my blood alcohol level below .8, I should pass it easily and be able to start tinkering.