Beerblogging: The Fullers ESB Clone

3:31pm: It’s a bright, shiny California day and I’m giving a second shot homebrewing a Fullers ESB clone which I’m fancifully calling “Vigilante ESB”, and the last batch of which my dad called “paint thinner.” I swear it really wasn’t that bad. In any case, Carolyn and I sucked down all five gallons of it in record time the last time my beer critic father was here visiting.

3:33pm: Poured myself a glass on my previous effort at Pilsner (which I’ve dubbed, “PGP: Pretty Good Pilsner”) to drink while brewing. In truth, the “Pretty Good” label was stretching things a bit, but at least it’s nearly all gone. Clearly I’ll drink darn near anything.

4:12pm: Kitchen and equipment cleaned and sanitized and 6.5 gallons of filtered water is in a carboy with a Campden tablet added to dechlorinate it.

4:14pm: Heating up 3.5 quarts of water to 175 degrees. The recipe calls for a ridiculously specific 3.4 quarts, but really, who are they kidding?

4:21pm: The recipe calls for 1 lb 2 oz (Again with those ridiculously specific measurements!) of English Pale Ale malt and 1 lb 2 oz (augh!) of Crystal Malt. I have a pound of Crisp’s Caramel Malt and a pound of something called Glen Eagle’s Maris Otter. It must be English, because nobody else would come up with a name like that. In any case, it’ll have to do.

4:38pm: Water’s at 170 degrees, so I’m turning off the heat, dumping my grains (the Caramel Malt whatever the Otter thing is) into a grain bag, and letting them steep for 45 minutes.

4:40pm: Throwing on “30,000 Feet Over China,” the little-remembered debut album from The Passions. It’s an old transfer from vinyl, so it should be just about 45 minutes long.

4:41pm: “I’m in Love with a German Film Star” starts up. The guitar line still sounds great.

4:43pm: Topping up my Pilsner. It really does taste better the more you drink of it.

4:47pm: Cleaning off the jets on my propane burner. Last time I used it, it generated so much carbon residue on the brew pot that I wouldn’t have lacked for art supplies had I decided to ditch interface consulting and embark on a new career as a charcoal and pencils artist.

4:54pm: Moving the party outside. Fired up the burner and have 5 gallons of water slowly working its way up to a boil. Me, my Pilsner and the rest of the ingredients are now enjoying a sunny day listening to forgotten 80s pop, and waiting for water to boil. Life could be a lot worse.

5:01pm: Being driven slightly mad by how interchangeable the bass line from Magazine’s “The Light Pours Out of Me” is with the one on “Small Stones,” the 5th track of the album. Time to top up my beer.

5:05pm: Note to self. Next time, do not let Pilsner sit in the kegerator at 30 PSI for a week. Result is less “briskly refreshing drink” and more “foam monster from hell”. Cleaning up mess now…

5:12pm: Have tried once again to top up beer only to receive about half an ounce of beer and 5 inches of foam. Daughter Kelly has noted my dilemma and asks I plan on drinking straight from the overspill pan. I give her the evil eye while staring dejectedly at my glass overflowing with foam.

5:20pm: The “30,000 Feet over China” album is over. You gotta be kidding me. An album that’s only 40 minutes long??! In the modern age of CDs and digital downloads, you’d never get away with that! People today demand value!

5:21pm. Throwing on The Kaiser Chief’s “Employment”. Huh…looks like it’s only 45 minutes long. Err…never mind…

5:33pm: Have rinsed off the grain bag that’s been steeping with a couple of quarts of hot water from the main brew pot, then added the “tea” I’ve been making to the main brew pot and bringing it to a boil. Have discovered two pro tips for this part of the process: (1) having one of those pots with a colander attachment you can insert is super useful for rinsing the grain without burning the skin off your arm with the boiling hot water you’re playing with, and (2) having an over-stove microwave gives you a dandy handle to tie the grain bag from to drain it afterward.

5:41pm. It’s boiling. Now time to add the first ounce of hops and two pounds of dry malt extract.

5:50pm: You know that moment when you encounter some unmistakable truth about life…some instant of clarity which told you that what you were experiencing was a Really Important Thing that you should never forget, lest wisdom be lost forever? The Buddhists call this “tonkyo”–I understand it means “sudden wisdom”, but it always sounded like onomatopoeia for the sound the universe makes as it whacks you upside the head and tells you to get a clue fer crissake.

So it was when I attempted to add the 2 pounds of dry malt extract to a nearly full pot of boiling water and had about a half gallon of it instantly boil over the side in a vast sticky mess.

Future Me: next time PLEASE remember to reduce the heat before doing this step. Either that or hold back about a gallon of water from the boil. Either one. Really. Take your pick. No pressure, just one or the other OK?

Meanwhile, I’ll be hosing down my suddenly sticky deck.

6:09pm I have 45 minutes to wait until I add the next ounce of hops, 1 pound  5 oz of corn sugar, along with 4 lbs of light liquid malt. The total boil time of this thing is an absurdly long 60 minutes, and the Kaiser Chiefs have just ended.

This leaves me with an existential dilemma. The “wort” as they call the stuff which I’m currently mixing up, is a primordial chemical soup, and it’s no doubt picking up the essence of everything around it. This is the same theory that says that if you play classical music for plants, they’ll grow up straight and healthy, but if you play Van Halen for them, they’ll all turn into stunted shrubs smoking dope behind the boys locker room.

If I throw on something like P.I.L. as the next album, will my ESB inevitably become Especially Extra Special Bitter? Then again, if I put on some slick 80s new wave, might the treacly synth music rob my brew of its necessary character?

I ultimately decide on Reggie and the Full Effect’s “Songs not to Get Married to”–an angry pop album from a punker with the heart of a poet. That’s a beer I can believe in.

6:33pm. Time for the final addition of another ounce of hops, a big pinch of Irish Moss to help the beer settle,  3 lbs. of Alexander’s Pale Malt Extract, and 1 lb, 5oz of corn sugar. I learned the hard way from my previous “Dark” [read: burnt] Kolsch that I should definitely remove the brew from the heat before adding in the liquid extract, as it otherwise goes straight to the bottom and burns instantly.

6:45pm: Waiting for it to come back up to a boil for the final 15 minutes, and reflecting on the fact that this is the one beer I’ve ever made that actually calls for adding MORE THAN A POUND OF SUGAR to the wort itself. This will eventually all get converted into alcohol by the yeast, but this sucker is going to kick like a mule.

6:52pm: Ten minutes left in the boil, but I’m on the end of the Reggie album. Rather than risk any off musical flavors making their way into the blend, I’ve decided to loop the final song, the heart-wrenching, “Playing Dead” until it’s done. If the beer winds up anything like the song, it’ll be a good brew for crying into.

6:56pm: Nearly showtime. Have filled the sink with ice and cold water, and have my wort chiller (a big mess of copper tubing you run a garden hose through like a giant-sized computer water cooler) ready to go. “Playing Dead” is on its third play, and I briefly considered switching to Johnny Cash’s “Hurt”, but a beer that steeped in sadness would be guaranteed undrinkable. The key is to balance the angry with the sad with the sweet. Good beer, like life, is a delicate balance.

8:30pm: Bedtime stories have been read to Kelly who, after much protesting, is off to bed. Meanwhile, the beer’s cooled down, siphoned into the carboy, topped up with filtered water, and had the yeast added in and the stopper inserted. In a couple week’s time, I should know if this batch is anything like drinkable. Given how provably low my bar for this is, I give this batch about a 50:50 chance.

Bit Rot, Housecleaning, Experience Compression, and Personal Reinvention

Ever feel compelled to do something, then wonder in the middle of things why the heck you’re doing it? It’s been that way for the past month with me and housecleaning–or rather, the throwing away of old stuff.

Not that I’m all that messy of a guy in the first place (my folks might disagree), but I’ve been on an absolute tear lately to throw away objects from my house and office. In the past month, I’ve filled a couple of dumpsters worth of discards, and have donated dozens of bags of books, housewares, and other belongings in a seeming effort to reduce my two story house to something more like the domicile of a Swedish architecture student, or possibly a Trappist monk (albeit one with a taste for music gear and the odd leather sofa).

I also felt the strong compulsion to finally do something about the 300 or so cassette tapes–mostly of old time radio shows like Suspense and The Shadow–which had been staring at me from my office bookshelf for the past four years. Grabbing a high-end dual cassette deck I’d used ages ago for studio applications, I proceeded to hook it up to my office computer’s sound card with a grim resolve to slowly and painstakingly transfer each of the shows to digital form. Suddenly, however, the tape transports of both decks seized up and refused to eject or let go of the tapes. I took a brief look on Craigslist to see what it would cost to get a new tape deck, then looked around online for digital replacements for the shows and discovered that others had already striped enough Old Time Radio (“OTR” to the fans) up to the internet to last me multiple lifetimes. Without looking back, both the malfunctioning deck and the hundreds of tapes hit the office garbage.

The guys at the Human Computing also got dragged into the act, as their old boss returned and immediately started shifting around uncomfortably wondering why this cluttered office space no longer resembled the glass-and-steel design office he’d imagined when we first moved into the place. After a big push to catch up on filing the hundreds of comics that were laying about and clearing down all the front desk surfaces, the guys and I laid into the storerooms and back office this week, clearing out further dumpster-loads worth of excess shipping boxes, comic giveaways from years past (there are still about 500 copies of Jesse James’ Marvel giveaway in the dumpster outside our office if anyone wants them), wonky old office chairs, and even the giant trade show light panels that I so proudly designed eight years ago, but which no longer fit in with our current Comicon setup.

At some point in  this frenzy of destruction, I started to ask myself why? Sure, the house and office were messy and needed a good cleaning, but some deeper animating factor seemed to be behind it all, or I wouldn’t be taking quite so much glee in seeing my formerly treasured belongings hauled away. It also wasn’t so much that I was becoming an acetic and eschewing all worldly belongings, or I wouldn’t have similarly spent so much time in the past weeks updating studio equipment and replacing old office chairs with cool new ones.

No, the real reason for all this is that I’ve been feeling in need of a bit of a reinvention. It had been far too long since I’d really looked around at the various objects in my life and asked whether the promise they held was still part of the life I had now or wanted in the future. Sure I’d spent hundreds of happy hours listening to those old cassette tapes, but would they hold the same magic after hundreds more hours spent remastering them digitally, or would I be better off simply declaring the project done and moving on? Similarly, I’d once been proud as anything at the sounds I’d conjured out of my now vintage studio effects, but would it feel just as good doing the same thing again? Or was it time to move on, use more modern tools, and make something new?

Computer geeks have a term for programs that once worked perfectly, were stored on viable media, but which suddenly become crashy and glitchy when loaded up again after several years. They say they’ve suffered from “bit rot”. In truth, the programs haven’t changed–they have exactly the same 1s and 0s they had when they were stored away long ago. What happened is that while they were gathering dust, the world around them changed. Computers got new hardware and new operating systems–countless little updates that kept them vibrant and alive while the old programs stood fixed in time. Then one day, in a fit of nostalgia, you try to load up the old CD-ROM only to discover that it doesn’t work anymore. It had become incompatible with the new world not because it had changed in some way, but because it had stayed exactly the same.

I’ve been so busy living my life away from some of my belongings that by the time I looked back, it didn’t make sense for me to own them anymore. Those books; that formerly favorite (but now worn-looking) shirt; even those giant light panels–the question was not “had I loved these things?” but “what role were they going to play in my life going forward?” A lot of things made the cut, but a lot of other things headed to the charity shop, went home with friends, or simply hit the dumpster. I don’t have infinite space to store things in my house or office, and everything I keep has to earn its place. Without this sort of periodic housecleaning, the weight of my past dreams starts to crowd out the room I need to live my current ones.

But what do you do about nostalgia? Does clearing out room for the future mean that you have to mercilessly cut yourself off from your past? I’ve hit on a partial answer, which I suppose might be called experience compression.

Just like I might archive old computer files into a big .zip file in case I ever need to get back to them, there’s often a way to leave myself a way to go back to visit my past without it actually taking up much room in my current life. For instance, I’m writing this post not a dozen feet away from a MAME arcade machine (an old computer in a video game cabinet running the “Multiple Arcade Machine Emulator”–MAME–with real arcade buttons and joysticks, and the ability to run hundreds of old games I loved from back when I was a teenager). Similarly, I can now leave myself open the option to revisit a rackload full of old studio effects and sounds via software that runs in no physical space at all on my computer; or pull any album from what was once a bookshelf full of CDs from my MP3 library.

The internet is a wonderful source of “offline backup” should I want to relive the past, as virtually any old book, song, or movie from years ago likely exists in readily accessible digital form, or can be acquired quickly at a relatively low cost to that of storing the same object for years on the off chance I’d want to visit with it again. I don’t need to store things that I can reach out and acquire on short notice at an affordable price. And knowing this makes it possible for me to let go of things I might otherwise hoard.

My wife Carolyn once asked me why I wanted what she considered to be a big house. To my way of thinking, I didn’t want a big house, I wanted a big life. I told her I thought a house was a space for storing dreams, and I just wanted a house big enough to hold all of mine.

Home Studio Housecleaning Heck and Terrible Tech Support

Since I’ve recently left my job as UX Practice Area Lead for Slalom Consulting, I decided to use some of the three or four hours I’m no longer spending driving back and forth to San Francisco every day toward more creative endeavors. Specifically, I decided it was well past time to revitalize the home recording studio I first built in the early 1990s, but which has seen precious little use as such in recent years.

The good news is that the drums, guitars, wires, and amps have weathered the test of time more or less unscathed. The real problem is that everything electronic has more or less gone obsolete in just a few short years since my last abortive effort to update things.

Some of this was to be expected: my proudly blinking rack of digital signal processing effects had already been consigned to back-up duties a decade earlier when digital signal processing software plugins became the norm. Likewise, the PCI-based Mac at the heart of my recording system was long ago replaced by a PC that was approximately 20 times its speed…only to have that in turn replaced by a lithe MacBook Pro. With those changes came hundreds of dollars of necessary upgrades to software, along with endless hours of driver installations, software activations, and more.

Where I stepped deep into the suck however, was with the expensive gear I’d bought just three years ago to run audio and MIDI signals. Both devices turned out to be complete lemons: and are now obsolete or malfunctioning, and the manufacturers seem determined to add to the damage with terrible technical support policies.

Most vexing of the two device was my M-Audio Fast Track Ultra, a device which is used to record and playback multiple channels of digital audio at once–the heart of a modern recording project. I’d used the device just a couple of times before on some podcast-style projects in my office, and was really looking forward to finally hooking it up to my downstairs recording setup. But no sooner was it racked up and powered on in my studio, than it started emitting a steady “pop-pop-pop-pop” and blinking all its console lights every half-second in a mad digital version of a grand mal seizure.

Sadly, this appears to be a known manufacturing defect with this device, as a notorious YouTube video and numerous exasperated support threads acknowledge. (To see how widespread the defects with this unit are, check out eBay’s listings for the device: there are far more broken ones for sale than working ones).

Almost as disappointing was the saga of the MidiMan MidiSport 8×8 controller I bought in 2007 to replace my aged Opcode Studio 5 MIDI Interface. Having suffered through the endless workarounds required to adapt the ancient serial standards and drivers for that older piece of gear, I’d been relieved that the new controller would use the familiar USB interface, thus ensuring a long life of compatibility for the undemanding task of spitting out MIDI note messages to my rack of vintage synths and samplers.

Unfortunately, that “long life of compatibility” was to be measured in hamster years. It turns out that the MidiSport interface I bought was incompatible with the USB 3.0 ports on my MacBook Pro. “Not to fear!” I thought, as I whipped out the USB 2.0 hub I’d used to solve a similar compatibility issue with guitars in Rocksmith recently. Only then did I also learn that the MidiSport is possibly the only USB device I’d ever heard of that is incompatible with the use of USB hubs(!). Oh yeah, and it’s incompatible with Mac OS 10.9 (“Mavericks”).

I later learned that MidiMan had been retired as a brand, and was actually owned by…M-Audio(!) M-Audio, in turn was sold in 2012 to InMusic, although some of the software (such as ProTools) and audio hardware (my forlorn Fast Track Ultra) were taken on by Avid.

“But heck, at least I’ll call tech support to ask them if they’re planning an update” I thought as I stared forlornly at my persistently blinking Fast Track Ultra and my never-to-blink-under-any-circumstances MidiSport 8×8. “I mean, they can’t just leave folks stranded, since these are mainstream prosumer interfaces bought by thousands of musicians–most of which use Macs, and most of those who’ve probably taken Apple up on their free upgrade to Mavericks. If they don’t have an upgrade out yet, it’s probably in the works…”

If only.

When you’ve blown several hundred dollars on hardware that’s gone obsolete or malfunctioning a very  few of years later, it turns out that there’s one trick that a truly determined company can use to make your life even more miserable than abandoning you with a useless product. That trick, my friends, is to refuse to pick up the phone or answer your emails unless you’ve paid an additional fee for the privilege of receiving technical support for your product.

Avid–who now owns the M-Audio sound hardware products including Fast Track Ultra, calls their tech support their “Customer Success Department”. This “Success Department” has a nearly impenetrable phone tree which screens away all who don’t have a “valid support subscription”, although they helpfully direct you to their online webstore where you can purchase a “one-time support code” to get a single question answered–for prices ranging from $14.95 to $79.95 depending on the product. Yes, to even ask if they knew why my interface was malfunctioning, they wanted me to pay an additional $14.95.

After an hour of hunting around and waiting, I did actually manage to contact the hardware repair department of Avid without paying extra for the privilege. It was little use, though, as they told me that the hardware repair to fix my defective unit would cost nearly was much as the original unit–with no guarantee that the underlying defect would be addressed.

Dejected, I tried one last desperate phone call to the folks who now owned the future of my MidiSport. They just call their technical support department the “technical support department”, but after another phone tree, I was told that if I wanted to actually talk to their technical support, I’d need…you guessed it… to buy a support incident or contract.

I hung up.

My obviously hardware-defective Fast Track Ultra is now in my office garbage can, since I can’t bring myself to inflict it on others–even for the sake selling it for parts.

My MidiSport 8×8 will be on eBay within the hour. I hope I manage to reclaim at least a few of the dollars from that lost investment selling it to a person with an older computer and a lot of MIDI gear.

And after a big dent to my credit card (and a lot of calls to confirm compatibility with the manufacturer), I’m going to try it all again with a new set of interfaces from MOTU. Wish me luck…

…I have a feeling I’ll need it.

Rocksmith’s Real Tone Cable and USB 3 Ports

This is one of those “Posting of my strange technical troubles so that anyone in the same situation might find it and save some time” posts.

While attending CES, I decided to use the downtime to bring along my bass and electric guitars and try to get some much-needed practice time in. After failing to get  the PS3 I’d lugged along working with the hotel’s TV system, I decided to bite the bullet and re-buy Rocksmith 2014 for my laptop. I felt a little foolish in the process, but Vegas is the perfect place for such money-wasting foolishness, and I reasoned that if I weren’t using my time to practice my bass, I’d likely lose a lot more money downstairs in the casino practicing my blackjack.

So, program downloaded, bass at the ready, I launched the game, only to find out that it couldn’t “hear” my guitar over the known-working Real Tone cable I’d brought with me. I quickly traced the issue to the cable not working with my laptop’s USB 3.0 ports (it appeared as a non-working “hocksmit” device under Windows’ device manager).

After much fiddling around, I took a run down the street to the casino-themed Fry’s Electronics and bought the cheapest portable USB 2.0 hub I could find ($6.99). Plugged the tone cable into that, the device was suddenly now recognized, and voila–I’m off to master Bush’s “Machinehead”.

Note: there’s a rumor afoot that the newest incarnation of the tone cable works better with USB 3 ports. Can’t confirm this myself, as my cable came with the original Rocksmith game.

Stop staring at your !@#&% phone!

Must-see video from Google of all people. Not sure if the problem is as bad as it is in Silicon Valley, but this one hits way too close to home for me. We’re missing way too much of life while attempting to record it…

 

Another Data Point in the Ongoing Obamacare Debacle

We just got our insurance rate notices in for 2014. The policies which cover our small staff of young, male staffers now include statutorily mandatory (and quite useless) pregnancy coverage as well as pediatric dental care. Their premiums also just doubled. .

When I say “doubled”, I mean precisely that–almost to the cent. Technically, they went up 100.4%. In one year.

Thanks to the “affordable” care act, our overall insurance rates have gone up astronomically, our deductibles have massively increased, and for the first time ever, we’re giving very serious thought to dropping our employee health care altogether and hoping our employees do better than my own quote on the California “exchange”, where my new lowest-priced available plan for my family of four is an essentially worthless plan that charts in at over $1,000/month, with a $5,000 deductible and terrible choice of doctors. Like most other things in this damnable sham of a law, the promise that we would both save money on our premiums and be able to keep our doctors were transparent lies. Now it’s looking increasingly likely our employees may lose their insurance altogether. 

 

“Hey, I’ve got an Idea…!” The Secret Story of Sidekick

“Damn it! It just can’t read the update file any faster!”

It was late 2012, and I had a little bit of freedom after the launch of ComicBase 16 to try to take on some of the “Big Issues” for ComicBase’s future. High on the list was better mobile support (more on this in a separate article), a possible replacing of the underlying database technology, and possibly even facing down the prospect of completely rewriting in .Net.

“Dotnet” as it’s pronounced, is a Microsoft technology that had clearly been the future of the company’s development path for some time–but which promised to pose a monumental struggle for porting the mammoth code base behind ComicBase. We’d actually done an investigation of what it would take to make the move three different times over the years, but had to turn back each time when it became clear we’d have to essentially rewrite and refactor what had become a very large and complex program. Worse, if we somehow managed to rewrite ComicBase in .Net, our developers would get the benefit of much better build tools (albeit at the price of endless hours of programming and re-testing), but the customers would be unlikely to notice any difference at all.

Actually, that last part isn’t quite true: the progress bars in .Net are decidedly nicer. The rest of the changes would be technical and architectural in nature–which is to say, virtually invisible to the end user, unless we used the rewrite as an excuse to polish up various bits of the program using the newer technology.

But for today, I wasn’t worried about any of those things. I had decided that I wanted to see what could be done to make the weekly updates faster.

Introduced in ComicBase 10, the weekly updates did something previously unimaginable: the ComicBase staff had taken on the job of keeping all our customers updated with all new comic information the same week the comics appeared on the stands. We’d supply all the new data on every comic released each week–along with its artists, writers, storylines, and other special information–and our customers would be able to simply download it and have their database be instantly current, instead of adding all that data in themselves. All the customer had to do then was simply check off which books they had in their own collection, or better yet, use a barcode scanner to “bleep” them in to their own collection.

For understandable reasons, the weekly updates were a huge hit, but it meant that we had to take on the incredible amount of work to acquire several hundred new comics each week, as well as keeping up with the constant pricing changes that were happening in the world of comics. We opened up our own Diamond Comics account, and soon were ordering one copy of virtually every issue sold, which our indexers would scan and index within a day or two of their arrival so they could be part of the Friday update.

Later, we added in a “Submit new or corrected data” feature to ComicBase which allowed several dozen amazing customers to add to the wealth of knowledge we were processing, and the pace of additions to the database doubled, then doubled again. Soon we were processing thousands of new issues and additions each week, and the database grew to encompass virtually every English-language comic that had ever been printed–as well as hundreds of thousands of foreign books.

But now there was a new problem: the sheer size of the database was starting to make the process of downloading and processing the weekly updates an increasingly lengthy process for our customers. What once took them only a few minutes was starting to stretch on for 15 minutes or longer–sometimes much longer if they had a slower machine or were upgrading a very old version. If customers hadn’t been updating regularly, it was not unheard of for an update to contain hundreds of  thousands of  updates to everything from pricing to artist credits. Unfortunately, updating this much information meant that customers were spending too much of their time watching progress bars while they waited for all those changes to be incorporated.

So I had decided to take some time and really pound on the code for the updating process, trying to wring the last bit of performance out of it. Numerous late night hacking sessions ensued, but for every clever programming trick I came up with that saved a few ticks of the clock, the time savings soon vanished as the flood of new comics swelled the database to ever greater scope.

After yet another late night of coding, I was discussing the problem with my wife Carolyn as we walked over to Starbucks on our morning routine. “I think I’m at the limit–no matter how fast computers are going, it just looks like it’s going to take several minutes to even read–let along process–the update file. After all, it’s got something over 10 million distinct pieces of information in each one.”

“Can’t you cut it down?” she asked?

“Not that I can see. There’s no telling how long it’s been since someone updated, and we need to be able to catch them up to date even if they haven’t checked for updates all year long. We could cut down on the amount of data we offer, but a big part of the appeal of the program is that it’s the biggest database of comics in the world.”

“If only there was some way to have the updates happen automatically so that people weren’t standing around waiting for them each week–.”

“Hey, I’ve got an idea…”

(to be continued)

The Fine Line Between Inclusiveness and PC Crap: Starbucks’ “Holiday Blend”

ImageImage

Judging by my actual spending, I’m a huge Starbucks supporter, with more mornings than not starting with a walk down to the local to grab a mocha with my beautiful wife Carolyn. As the seasons pass, there’s a certain rhythm to their promotional calendar, which becomes in its own way, part of the way we mark the seasons: from the summer Frappuccino specials to the fall pumpkin spice latte introduction, to the eagerly anticipated–and all too brief–time when the eggnog drinks come out, marking the start of the Christmas season.

For the past 23 years or so, Starbucks has also done a special “Christmas blend” of coffee, and I’ll usually grab a bag or two during the holiday season to keep the coffee grinder at home supplied when I’m not slugging down caffeine in their stores. This year, however, I noticed something a little strange about their promotional schedule: the Christmas Blend coffee went on discount nearly the moment it was released, with the discounts increasing from “free beverage with purchase” to “25% off” then “30% off” in the space of just a few days at the local Starbucks. 

“What the heck is going on?” I thought–are Christmas sales really that soft? Had I inadvertently stumbled upon a hidden indicator of underlying economic weakness?

Today, I got my answer, as the shelves at the Starbucks appeared freshly restocked with new packages of something called “Starbucks Holiday Blend”. A quick check later confirmed that there was nothing different between this new “Holiday Blend” and the now outmoded “Christmas Blend” introduced just weeks earlier. Apparently, Starbucks had simply decided to cancel the Christmas Blend and rebrand it as the generic “Holiday Blend”–just in time for the Holi-… err… Christmas.

To Howard Schultz and Co.: I gotta tell, you, this sort of thing doesn’t leave me feeling festive–it just leaves me cold. Had you created a Hanukkah blend, it would have been kind of awesome, and I might have even picked up a bag or two to gift to my Jewish friends. By joining the spineless crowd of  marketers aiming at the elusive “Holiday-which-shall-not-be-named”, it robs the campaign of any genuine human warmth. Instead, it becomes one more tentative step in the tiptoe-dance around imagined slights and hypersensitivities that steal basic human kindness from something as simple as a Christmastime greeting.

So guys, I love your products, and I love that your business offers me a great way to take a few minutes each day away from my work to spend time with friends and loved ones. At the same time, I hope your “Holiday Blend” sales tank so badly that you drop the generic pablum and get back to selling products which relate to customers on a human level without kowtowing to the gods of PCishness which have done so much to keep people walking on eggshells around each other. 

Privacy Nightmares: Google Probably Knows your Wi-Fi Password

Thanks to a helpful “backup settings” option built into Android devices (default: on), the passwords used by any Android device to log into wi-fi networks are being sent to Google. Worse: Google can (and has) been compelled to share such information with the government.

Hey, why devote clusters of code-cracking hardware to penetrate network security when a simple subpoena lets you simply get Google to pass the keys straight over to you?

But no worries, right?

One for the Programmers: Daily WTF

If you’re not a VB.Net or C# geek, probably best to move on to the next post. But if you are, perhaps someone can explain to me the what the !@#%! is going on here.

While hacking away on a new code project which involved porting a routine from VB6 to VB.Net (4.5 framework), I discovered that my performance had gone completely to hell on a function which assembles a big text file from database values. In it, I tracked the trouble to a function checks to see if certain values from the database were null, and returns “safe” values in case they are. It also looks for telltale “null” date fields, with values like 12/31/1899 which–although not technically null, are acting as blank for these purposes.

Here’s code sample #1:

  Public Shared Function ConvertNulls( _ 
     ByVal theString As Object) As String
    ...
      If IsDBNull(theString) Then
        ConvertNulls = ""
      ElseIf theString = "12:00:00 AM"  OrElse theString = _
           "12/31/1899" OrElse theString= "12/30/1899" Then
        ConvertNulls = "" ' This is a null date string
      Else
        ConvertNulls = theString
      End If
     ...
  End Function

And code sample #2:

  Public Shared Function ConvertNulls( _ 
     ByVal theString As Object) As String
     ...
      If IsDBNull(theString) Then
        ConvertNulls = ""
      ElseIf theString.Equals("12:00:00 AM") _
         OrElse theString.Equals("12/31/1899") _
         OrElse theString.Equals("12/30/1899") Then
        ConvertNulls = "" ' This is a null date string
      Else
        ConvertNulls = theString
      End If
    ...
  End Function

Here’s the thing:

Code sample #1 was on track to take a hour or so to run through 100,000 iterations; code sample #2 did the same 100,000 iterations in about 20 seconds. And the only difference? Whether I used theString = “x” or theString.equals “x”

Luckily, I thought to try .equals pretty early on, or else I’d be pulling my hair out trying to figure out why there should be even a tiny difference between the two approaches. Can anyone out there give me a coherent explanation as to why using the “=” operator vs. the .equals method should yield such wildly different performance results?