Showing posts with label Navel-gazing. Show all posts
Showing posts with label Navel-gazing. Show all posts

Saturday, April 21, 2018

How to go from Dunning-Krueger* to Imposter Syndrome in 3 weeks or less

This past February, the (ahem!) "illuminati" of the Moncton User Group had a problem:  No speaker lined up for March.  Now, I had already started a spiel on basic AVR microcontroller programming.  Problem was, it was intended for more of a Makerspace crowd.  Alas, the local Makerspace has been in a lull for awhile now, which left a half-finished outline languishing in a folder alongside a bunch of transition slide images.  But I figured that if I tossed out the hardware-oriented "What is a Circuit?" bits and amped up the code samples, it could be made to work...in a "niche" sort of way.

It's been roughly a year and a half since I stood up in front of my MUG colleagues to bang on about my latest nerdery.  So I knew that I was basically out of shape as a presenter.  Still, I had a bit over three weeks to finish the outline and turn it into slides, but no big deal because it's really only the bare-bones basics, plus I totally know where I'm going with it and, anyway, the Arduino presentation was so long ago that nobody will realise that I'm poaching half the image files and honestly it's not like anyone here will be starting out from scratch with a C-like programming language anyway, right???

Boy howdy, did that beastie hand ever me my head -- more than any other presentation I've given.  It was pretty humbling, even before I was regaling my shower-door with the soundtrack for the slide-deck.  :~/   I half-expected at least one of my coaches/mentors from UWEC Forensics to show up and administer a well-deserved smack upside the head.  A sampling of mistakes:
  • Not verbalising sections as I finished them.  (The first few run-throughs always sound absolutely dreadful; better to break that much dreadful into smaller chunks.)
  • Trying to cram too much into single slides/sections.  The last-minute right-sizing set me back to square one for the most difficult (and crucial) part of the whole thing.
  • The demo. part should have been chucked overboard.  The idea was to pull everything together and mop up the important nitty-gritties that weren't covered by the basic examples.  But even contrived and oversimplified, it was too much for a fatigued group of people, smart as they are.
  • Procrastinating until almost too late on wiring up an actual breadboard with the demo. project and trying to upload my sample code.  Rookie mistakes that egregious on the Friday before a Tuesday presentation is nothing short of speaker malpractice, IMLTHO.
  • Procrastinating until too late for actually timing the whole presentation.  It ran close to 90 minutes end-to-end,  I figure that 75 minutes was pushing the limits of people's patience.  My last minute cuts never actually made it all the way out the door b/c of nerves.  Bad, BAD me.
  • Overconfidence in how quickly I could translate my extremely n00b understanding of a subject into something that could be understood by someone coming into the subject fresh.  (Arduino has made huge inroads into the AVR space for a reason, fam!)
  • And the great-grand-matriarch of all the other mistakes:  Having precisely zero practical experience before volunteering.  Don't get me wrong:  I'm a huge fan of learning by teaching, but this skirted dangerously close to the proverb about the blind leading the lame.
From the standpoints of sound and flow, it wasn't horrible -- that much, at least, can be said without relying on charity.  I learned decades ago how to fake confidence.  Despite the nerves (or maybe because of them), my ex-coaches would certainly have approved of both the volume and variety of hand-gestures and body language.  With, by the bye, no reading directly off slides (the cardinal sin of any presentation).  There were a couple of small stumbles, one slide-transition hiccup -- nothing that fazed me, even in front of my peers (a.k.a. my betters).

But there was a ominous lack of response when I ended every section/subsection with "Any questions about that?"  Uh-oh.  Which tells me that, at best, I bored just over 20 very talented people who have better things to do on a Tuesday night.  At worst, I made them lose whatever interest they might have had in AVR programming.

Cold comfort, I suppose, that I don't crawl out of the rubble entirely empty-handed.  Quite apart part from the obvious perks of thoroughly understanding the material and having a sweet set of references all in one place, nat'cherly.  And an even greater appreciation for everything that the Arduino ecosystem has accomplished. No, my personal takeaway from this three weeks of scrambling is where I need to turn my attention next.  And next.  And next.  And so on.  (Respectively, those "nexts" are Serial I/O, timers, pulse-width modulation, I2C and SPI communication, and then whatever I don't recognise while I'm tripping through all that.)

It goes (almost) without saying that I will certainly leave room in my brain for the lessons (and humility) acquired after  ear-bashing my I/T colleagues.  In another year or two, I'll be back up in front of the room.  And it's not so much a matter of living down this talk as it is living up to the standards set by the other presenters who generously share their time and knowledge (and war-stories) with us. 

- - - - - -

* The Dunning-Krueger Effect is the inability of a newbie to correctly assess her/his abilities in a new area of competence.

Wednesday, January 17, 2018

Do the tools make the maker? Sometimes I wonder...

One of the electronics/computer repair shops in Moncton has been branching out into selling Raspberry Pis, Arduinos, and a whole whack of, ahem!, "accessories" for them.  Business is apparently brisk:  One wall became two, then three.  I alternate between referring to them as "Candyland" and "The Widget-pushers."

So I emailed the Alpha-Widget-Pusher last week to see whether he had a source for the ATMega328P DIP chip I've been having a difficult time tracking down...at least from Canadian suppliers.  And since I'm probably going to be spending some time moving these from breadboard to breadboard, it's a good excuse to find a better chip-puller than the twist-prone cheapie that I picked up from Princess Auto.  So I tacked a request for recommendation onto the email.

The reply was that their Alpha Chip-Puller is mostly using tools made in the 1930s.  For which, mad respect.  Plus a small side of jealousy.  Take care of the tools and the tools will take care of you -- that's one of my tenets, and not just in electronics.

I griped to Dennis about how, after decades of Kanban, TQM, ISO-9001, and every other flavour-of-the-month underfunded QA push, they still "don't make 'em like they used to."  That's something you shouldn't gripe about to a Recovering Manufacturing Engineer(TM).  At least not unless you want an earful about how ISO-9001 only guarantees that your processes are executed as documented.

But he's right.  A CNC machine capable of of 0.001% tolerances can't stop the cheap steel it just milled from warping or cracking in use.  Consistency is not quality...or at least is only a part of it.  In fairness, in some cases consistency is a Very Big Deal(TM).  (Remember Intel's division-error and the resulting freak-out?  Even the one-in-nine-billion odds were too much for everyone.)  But consistency is a hard, easily-measurable metric.  Thus its overweighted role as a surrogate for quality.

True quality, of course, is squishier, less easily shoe-horned into a database or aggregated into a colour-coded chart/graph.  Let's face it; no one picks a tool off the wall at the big-box hardware store or out of a mail-order box and thinks, "My great-grandchild will maybe use this to build __x__ one day."   So I very much doubt that, unless they were hand-made, the manufacturer of those antique tools gave much thought to their whereabouts in 2018.

That's not to say that no one cared about quality.  In the Great Depression, people were more apt to look on non-daily expenditures as "investments," especially tools that would better allow them to mend and "make do" vs. having to buy new.  Double that for the craftsperson putting food on the table.  Print advertisements and radio jingles, doubtless, headlined "quality"* as a major selling-point.

But tracking down product made decades ago and measuring its longevity?  Even scraping and comparing offerings on eBay is nothing any MBA could consider a "metric."  No, the value is solely in the eye of the beholder--specifically, the craftsperson who imagines the spirit of previous generations of craftspeople echoing in their work with the tool in question.

I suppose that some savvy marketer could pitch tools as "future heirlooms."  'S'matter'a'fact, I'm kind of surprised they already haven't.  (And if they already haven't, for the noodley love of the Flying Spaghetti Monster, shhhhhhhhhhh...)  Mind you, any such campaign will be waged by some giga-conglomerate offs-horing its manufacturing while writhing its last in the strangling grip of a Wall Street vampire squid.  But maybe--just maybe--its last gasp will blow on whatever embers remain of the crafts(wo)man ethic.

Melodramatic?  Eh, probably.  But even for someone whose tool-belt can be so very ephemeral--wherever you are, PC-Write, know that I still love you!--it does matter.  Particularly post-Christmas as I stare at a brass-rimmed steel thimble perched on my monitor-stand.  Mom doesn't expect to have the fine motor control necessary for hand-sewing ever again.  So I'm the heiress of a *whack* of embroidery floss and her thimble.  Which turns out to be her Mom's thimble.  It's clearly been stepped-on, and there's a patina of rust on the inside.  Alas, my bone-structure takes after my other, more petite, Grandmother.  But that's nothing a little padding and a skinny rare-earth magnet can't deal with.  And it will be dealt with, and shortly.  Enshrining tools on a shelf is the same as burying them.  I'd like a bit of Grandma to live on, even if only in my crazy projects.

- - - - -

* A sound captured by Mark Knopfler in his dangerously catchy throwback tune "Quality Shoe."  (You, Gentle Reader, have been warned.)

Thursday, December 7, 2017

The limits of affordances

Just because I'm mostly a back-end (read database and business logic) developer doesn't mean that I don't care about UI or UX.  Mom drilled the ethic of putting myself in another person's proverbial shoes into me pretty early-on.

For what I usually do, that plays out in well-organised data-sets, scads and scads of validation code, and fighting tooth-and-nail for the absolute rock-bottom minimum of data passing back and forth between client and server.  Mostly do-able...assuming you aren't double-teamed by Marketing and Legal.  (Pro Tip:  Know your bandwith/hosting costs cold, have your calculator handy, and put the onus squarely on those noseyparker byte-hoovering data-slobs to quantify the ROI.  Preferably in front of upper management.  Chances are, they can't and won't.  And they'll think twice before doing it again.  Alas, twice isn't always enough times.  Lather, rinse, repeat.)

While my world is largely ruled by, well, rules, front-end designers and developers wrestle with the container-of-fuzzy-spaghetti-from-the-back-of-the-fridge otherwise known as the modern human psyche.  More power to them.  I've wrestled heisenbugs a-plenty (losing more than a few rounds, mind you), and still would rather re-fight every single one of those battles than allow a random user to type a DateTime value as plain text.  Seriously. 

Thus I'm a starry-eyed fan of design folks like Don Norman, Mike Monteiro, Erica Hall, and Luke Wroblewski.  (Viktor Papanek's magnum opus has been on my wish-list for years, but it's been out of print for so long.  Some day...)  Also behavioural psychologists like Daniel Ariely and Daniel Kahneman.  Likewise Clay Shirky when it comes to pointing out the differences in how humans act individually vs. in groups (absolutely critical in this connected age).

The single most important take-away from all this reading is:  Thou shalt make it easy for thy user to do The Right Thing(TM).  (In an ideal world, thou shalt make it statistically impossible for thy user to do the wrong thing, but -- Mike Monteiro excepted -- nobody in this crowd is rocking anything like Charlton Heston's beard from The Ten Commandments, so...).

And yet, for all that reading--in most cases multiple readings because it's all crazy-good--I find its limits no farther away than the local co-op grocery store.

Several years ago, I had both the keep-you-on-your-toes challenge and the genuine pleasure (because they shouldn't be mutually-exclusive) of holding down the account for a household-name client.  The kind of client that was flush enough to send holiday gifts to their vendors.  As a matter of corporate policy, I donated gifts like the cheese-knives and cutting-board to the office kitchen.  (Being the Patron Sinner of the office's "liquid potlucks," what else would I do with that kind of thing, I ask you.)

The two shopping bags were another story.  Lovely things, those.  Two sets of handles, for shoulder or hand.  Constructed from the recycled (PET) plastic equivalent of Grade-A Wakandan vibranium, IMLTHO.  (Or adamantium -- take your pick, Marvel fans.)  Crossed with a Tardis to boot.  They're awesome.  Especially when compared to the branded "resusable" bags hawked by the local grocery stores.  Two of which (in our household, at least) have been known to blow their seams in less than a month...one on the very next use.

So I, being a back-end developer aspiring to minimise my UI/UX sins, attempt to do the right thing by making it easy for my user (a.k.a. the cashier) to do the right thing.  Which means the double-decker short cart rather than the monolithic monstrosities with the turning-radius of a battleship.  Heavy stuff on the bottom (because Physics, nat'cherly) and little and/or smooshable stuff on top.

At the checkout line, the first thing dropped onto the conveyor-belt is the bags.  With the awesomer ones unmistakably on top of the not-so-awesome ones.  Then the groceries, carefully graded (front to back on the belt) from heaviest to lightest.  The affordance couldn't be plainer:  Put the stuff closest to you in these-here bags up-top.

Yet, well over 90% of the time (in my observations), the cashier dumps the awesome bags off to the side and loads the flour, the shortening, the canned goods, etc. into the el-cheapo bags and resorts to the industrial-strength bags only when the others have run out.

Why?  Because when it's the difference between the known and the unknown, afforances don't mean jack.  As far as the average customer and cashier are concerned, all branded "reusable" (in my case, the quotation-marks are there for good reason) bags are churned out by the same no-name offshore factory.  (And, for all I know, they are.  Booyah, race-to-the-bottom globalism, yo.)  The default option -- i.e. the ultimate affordance -- is the known quantity.  It's the same reason that the "Save" button still looks like a 3.5" floppy disk and not a USB flash drive or an SD card.  The exact same reason.

Which, while it's frustrating as all get-out, is deeply humbling.  It's why I consider darned near every UI/UX developer on the planet grossly underpaid.  As much as non-programmers puzzle (perhaps shudder) at the inner workings of computers, I embrace them as fundamentally logical -- ultimately knowable.  In contrast, stepping into the world of human-computer interaction means trading the near-certainties of Boolean logic for the fuzzier approximations of statistical norms...clouded by the occasional chaos of lizard-brained mob-thought.  [shudder]

Alas, my patron-client must have custom-ordered the awesome bags, because they have no manufacturer's tag.  (They're a dark olive green, slightly beveled bottoms, two sets of handles -- can ya do a girl a solid here, Intertubes???  Halp.) Or I'd cheerfully solve my weekly problem by ordering a few more.  ("Thou shalt make it impossible for thy user to do the wrong thing," remember???)

The other, cheaper, solution, of course, would be to just tell the cashier to use the weirdo bags.  Except that cashiers are basically just trying to optimise for ringing up as many sales as possible without getting yelled at.  At the risk of sounding ancient, I'm old enough to remember when ringing up sales (and making small-talk about the weather) was all cashiers had to do.  Another person not only bagged your groceries, but also loaded them into numbered tubs so that a third person could help load them into your car (if you so chose).  Contrast that with the utter faceless dickishness of Home Depot, et. al., and their self-checkouts, and you'll understand why I refuse to participate in any further dehumanisation.

Ultimately, computer programming, like any discipline, has to push the boundaries to stay relevant.  In the 1990s, we had the waggish adage of "Intel giveth and Microsoft taketh away."  And while I sometimes wonder whether an on-demand "serverless" world of ginormous anything-goes NoSQL databases and spaghetti-nets of asynchronous-microservices-du-jour will trash back-end coding as a legit. discipline, I have no such worries about UI/UX developers.  Those boundaries, however mystifying to a left-brainer like myself, are vast, but relatively immutable.  But certainly no less challenging for all that. 

Wednesday, November 8, 2017

"Experience is what you get when you were expecting something else."

That was the little bio. tag-line for someone on the Arduino forums.  (I didn't make a note of their handle.  Apologies!)  Granted, if you're trolling through the Arduino forums, you're already feeling that.  But boy howdy, that hit a little too close to home for me.

Backstory:  The chicken coop is almost finished from a structural standpoint.  For monitoring temperature, humidity, and ammonia (NH3) levels, I decided to take the cue from my neighbour and roll with a wifi-based interface vs. Bluetooth/Android. 

The wifi breakout board that I'm holding up below is the ESP8266:  Version 1.0 form-factor with the Version 12 firmware.  Go figure.



I've known for well over a year what a difficult little beastie it is.  
  • The above form-factor's pinout is downright breadboard-hostile. (Two rows of pins?  Just...whyyyyyyyyyy????) 
  • It runs on 3.3 volts (vs. 5 volts for most other things).
  • Like all electronics that transmit a signal, it's a PIG for current (~300mA peak).
  • Constructing and sending an HTTP GET request is super-fussy about syntax (including carriage returns) and timing.  At the time of writing, HTTP POST is above my pay-grade.
And as the proverbial cherry on top of all that lamesauce, my (Ubuntu 12.04) workstation has this nasty, sneaky tendency to quietly drop USB -> Serial connections.  When you're in the middle of debugging and already inclined to blame your code, this can waste scads of time.

But this, in addition to being my first full Internet of Things project (well, first non-proof-of-concept project, anyway) was only my second rodeo with a smaller microprocessor.  I've already gone a few rounds with the Atmega328 chip running on a breadboard.  It's the same chip used in the Arduino UNOs, which streamlines development (as much as development can be streamlined).

The squee little ATtiny85 is the baby of the Arduino family.  Its surface-mount form-factor is the brains of Adafruit's Trinket, so I'm already familiar with some of its...errrrr..."quirks."  (So, yeah, the "baby" can sometimes swing to more of the "Stewie Griffin" than the "Maggie Simpson" end of the spectrum.)

The biggest quirk is that peeking inside the head of the ATtiny chips is almost impossible.  (I've done it with another full Arduino and an FTDI/UART programmer, but the wiring alone would make Rube Goldberg shake his head.)  All the usual protocols you'd use with a full-size Arduino chip (I2C, SPI, full Serial) are not supported.  The best that the ATtinys can manage is the SoftwareSerial library.  Which looks all fancy-schmancy on the surface, but under the hood does something known as "bit-banging."

Now, without wading into the intricacies of two- and three-wire communication, let's just compare bit-banging to an intersection where the drivers only sorta-kinda follow the protocol of taking turns and where the cars don't always arrive at neat intervals.

The bigger Atmega328 chips require you to supply an external "clock" (a crystal oscillator plus a couple of capacitors) to time the exchange of ones and zeros.  And while you have that option with the ATtinys, you do it at the cost of two pins -- of which there are only five on the ATtiny85.  The remaining (and default) option is to rely on the chip's 8 MHz internal clock.

As it turns out, that clock doesn't exactly run with the tightest tolerances.  According to one reply on the Arduino forums, the slop can be as high as +/- 10%.

Yeeeee-OWCH.

The upshot was that the hit-to-miss ratio of the HTTP GET request even making it to the router intact was absolutely abysmal.  By contrast, when I ported the code to a full Arduino UNO, the ratio flipped.  Still not perfect, but more than acceptable.  When I wired up an Atmega328 on a breadboard and uploaded the self-same code to it, the results were the same as the UNO.  The relative reliability of the external clock made all the difference in the world.

Pity.  I had high hopes for that little cutie-pie of a chip.  I still plan on wiring up and coding a Bluetooth-based proof-of-concept with it.  Mainly to get a handle on its reliability..  As I mentioned, HTTP GET is hella-finicky.  The AT-commands used with Bluetooth are simpler, so there is some hope there.

In the meantime, I'm going into production with a slightly over-engineered "Mark I."  I still need to pick up a replacement NH3 sensor from BJW in Moncton (because guess who hosed up soldering headers and then nearly ripped off a couple of pads trying to de-solder them?), burn it in, and kick its tires.  And, finally, knock together a screened enclosure to proof the whole contraption against, ahem, "re-wiring" by a trio of curious -- and probably bored -- chickens.  (I've seen the movie Chicken Run, y'all, and I would not put it past any of them.  Related:  Remind me never to let them watch Iron Man either.)

For the longer-term, I have a couple more sketches for the "library" of Arduino code accumulating in a Mercurial repository.  For this project I imported the temperature and humidity code lock, stock and barrel and it worked right out of the box.  Which is the whole point of a well-organised code-library.  And with a tenacious sinus infection knocking me flat in the middle of this project, don't think that I don't appreciate my past self for that!

And, most important, this radically expanded my notes.  Most especially the "Gotcha" section of an Arduino-on-a-breadboard ("Boarduino") presentation that I might give sometime in the next few months.  Because while I consider this latest round of butt-kicking just another installment of paying my dues, I benefited hugely from the forums, etc.  And so I'm paying that forward.  Mind you, I don't worry about the next generation becoming soft and spoiled.  Because even if I spare someone this particular butt-kicking, there are plenty more lurking out there with each new project. Oh yes, yes there are...

Tuesday, October 24, 2017

Security SNAFU Solidarity

I could have applied by mail for my first Canadian passport.  But I figured that it worth the heavily-detoured trip into Shediac to have Service Canada double-check my work.  Turns out, my paranoia was rewarded by the fact that the agent caught two errors.

One was just a brain-burp on my part.  The other, though, is on Service New Brunswick.

See, to prevent counterfeiting, our drivers' licenses are watermarked (for lack of a better term) with both grey and silvery-irridescent text/patterns.  Then "personalised" information (number, name, DoB, etc., etc.) is printed over that.  In my case, the watermarking seemed to affect the printing of one number so that it looked very much like another.  Especially given that that the numbers are printed in red instead of black.

Fortunately (and unsurprisingly), I had to supplement the application with photocopies of photo-ID.  In black and white, the number in question is far more legible.  Which is how the Service Canada agent caught the mistake.  (Whew!)

Needless to say, as a member of the I/T tribe, I found this more than a little ironic.  I kept a straight face, but I couldn't help but think (sarcastically), "Hmmmm...securing information by making it less usable and its users more error-prone:  Where-oh-where have I seen this before?  Oh, riiiiiiiiight..."

Scarier thing is, my British-born neighbour told me that the UK passports now require biometric data--e.g. retina scans.  I can only begin to imagine how securing digital-based data with meat-based data is going to complicate things in unintended ways.  (True, glaucoma and diabetes don't seem to affect retinal biometric reading too adversely.  But still, I'm totally thinking about that scene from The Avengers.  Of course I am.  Blech.) 


Monday, March 21, 2016

The Accidental Internship

In truth, I was planning to post this last Frivolous Friday.  Because, when it comes right down to it, the joke's really on me.

You see a lot of the same faces at various Moncton technology-related events.  However, they're rarely the same faces.  But as with middle- and high-school cliques, you'll find a scant handful of individuals who can comfortably exist in multiple contexts.  In this case, one of those individuals is a student shortly due to graduate from one of the local colleges.

Said college does not require (but will give credit for) what amounts to internships.  Mind you, those are not plentiful even in a booming economy (into which category New Brunswick emphatically does NOT fall). Now, it's stupefying to conceive of a situation in which businesses have abused the system egregiously enough to (gasp!) force a change in requirements--under a Conservative government, no less!.  But that, in fact, has actually happened in Canada.  Thus, we can count on several months of a reality in which unpaid grunt-work is not, in fact, the norm for certain career-tracks.  At least not until the lawyers find all the loopholes and labour conditions disintegrate even further into the stuff of Ayn Rand pr0n, anyway.

For all that, I (as a freelancer) seriously doubt that the dearth of internship opportunities can be blamed on the same oppressive regime which tyrannically imposes a lower corporate tax rate than that of the United States.  No.  The reality is that "branching off" tasks is actually pretty darned complex.  There's the up-front cognitive investment, certainly.  One has to define tasks and metrics, for starters.  Also, to be prepared to do it all oneself in cases of extreme failure.  And Dread Cthulu help anyone who has employees.   Because the same ones who are perpetually "swamped" are inevitably the same ones who "don't have time" to train anyone else to take the load off.  (Yeah, people are awesome, amirite?)

But there's a third barrier to the wide availability of internships, and I'll get to that in a bit.

In the meantime, I have the luxury of not having the second problem.  So when a local college student (an older gentleman with an amiable disposition and ridiculous amounts of hustle) informed me that (despite all his networking) he didn't have an internship lined up, I airily suggested that he make his own with a local non-profit.  Then I (very) briefly outlined a project that's about three or four rungs down on my personal pro-bono "To Do" list.  And followed up with the vague, "Oh, well, if nothing else turns up, you know where to find me..."

That was last Tuesday night.

By last Thursday, he and his partner had decided that they liked my idea better than what they had been working on, and would I care to take a look at the project draft they'd hammered out in the interim? And, oh, by the way, the app. has to be turned in by April 15th...

Colour me wryly amused. But also colour me a bit wiser.  Not about making airy, open-ended suggestions (when I should darned well know better) to ambitious college students.  Pffffft--that's just paying it forward after making my own (second) internship all those years ago.  (Plus, knowing me, I'll always be that kind of stupid anyway.)

Uh-uh.  The take-away for me is if interns don't scare the ever-loving beejeebers out of you, you're in serious trouble.  Because, as it turns out, these two aspiring programmers aren't too shabby.  The UI specs that landed in my Inbox this evening had use cases I wouldn't have thought of until the second (maybe third?) draft.  That's not to say these folks are bound for the next Y-Combinator cohort, but daaaaaaaaaang.

And is that, I have to wonder, what prevents a lot of businesses from pipelining students into their ranks while the latter are still in school.  Make no mistake:  It's emphatically NOT FUN to be reminded of the fact that someone else has the luxury (yea, even requirement) of using the Cool Tools(TM) while you're being paid to maintain boring legacy code with infuriating pay-per-seat software that long-gone manager once scored a sweet discount on.

Sure, you can pooh-pooh their naivitĂ© ("Erhmehgerhd--where is your validation code!?!?!?"). But chances are, they'll internalise that lesson faster than even a seasoned coder will absorb how Android configuration files are laid out.   In a world where coders halfway around the globe sell their time/expertise at dime-store rates, it's the ability to, well, triage knowledge that's the key to survival.  Oh, and having some hustle certainly doesn't hurt either.

Be afraid--be very afraid.  And for love of Mammon, on-board some of these people if you know what's good for you.

Tuesday, October 6, 2015

Playing in a different league

Author/Blogger Michael Lopp (http://randsinrepose.com/) claims that, on a semi-regular basis, he crafts a short-list of people with whom he'd found a company.  Then he folds that Post-it into a small cube and swallows it. 

That anecdote actually came up over dinner chez fivechimera last evening, with both Dennis & I brainstorming our respective lists.  How someone makes the list is actually a bit of a balancing act.  It's a matrix, really.  On one axis is the general skills fit--does this person have chops?  That's the easy part.  The other axis is the price of those chops in the coin of personality friction.  (How often am I going to butt heads with this person?  How many people are they going to drive away by being insufferably right at the wrong time in our trajectory?)

Yeah, I know that all non-geeks (plus a healthy percentage of the geeks I know) are nodding, reliving the pain of every socially inept interaction they've had with that person...maybe even those people.  Uh-huh:  The retentive completionist who passive-aggressively drags on the schedule until their pet feature is ready.  The Tamarian whose Rosetta Stone turns out to be Firefly quotes.  The SysAdmin who clearly missed their calling as a black market dealer.  The "idea hamster" who can't execute their way out of a proverbial wet paper bag.  Et cetera.

But unless you're relatively new in the world of work (or you're extremely unlucky), you know a few who make the cut.  And if you're not as lazy as I am, you keep in touch.  This morning's spike in my LinkedIn traffic was not a coincidence.  Which, to my chagrin, prompted a comparison between last night's brainstorming and fantasy sports leagues. 

Mind you, it's not an entirely frivolous exercise, because it inherently forces one to acknowledge one's limitations (in time and talent).  For example, here's my particular fantasy roster (names omitted):
  • Network/IT Support - Yes (with a second-string backup)
  • QA - Yes (also with a second-string)
  • Graphics and Design - Yes
  • UI/UX Developer (web and mobile) - No
  • Tech Support - Yes (with multiple levels of backup)
  • Project Management - Tentatively yes
  • Sales - Nope--and that's the 363.64-kg gorilla of my (hypothetical) staffing problems
But the uncomfortable fact remains that until I have a working prototype with which to pitch the team (to say nothing of potential clients and/or investors), my roster in the Fantasy Startup League is just that--fantasy.  It's not out there, sweating and bruising itself on the ice or the astroturf.  It's not even in the weight room or breaking down video of last week's key plays/misses.  Nope--it's sipping a beer in its armchair, shouting off-the-cuff opinions (which may or may not be founded in reality) at the screen.

The folks out there who are fighting fires, losing sleep, duct-taping, putting the "work" in "networking," rolling the bones--all the while listening for the pacing of the wolf outside the door?   No matter how small the company, they're playing in the big league.  And don't think that I don't understand the difference.

Friday, October 2, 2015

Machines and meatspace

In internet parlance, the term "meatspace" refers to the non-networked world.  You know, good, old-fashioned reality reality--that messy place where we have to look people in the eye and remember our manners as we talk to them.  Programmers, particularly those of the database/back-end kind of coding, too often have to be reminded of its existence...at least after the business rules have been codified in the software design/specs.

Don't get me wrong--even programmers who don't write web pages or phone apps. still have to contend with real-world constraints.  For instance, on my last project, I ran up against the limits of a fairly slow processor on a cloud server.  

Now, cloud hosting companies, as a rule of thumb, keep their hardware in matched sets.  That keeps everything standardised.  It's not an OCD thing--the apples-to-apples parity means that they can scale servers up and down by adding & removing processors and blocks of memory almost on the fly.  Upgrades that would have taken days even fifteen years ago now can be done in a matter of minutes with mere seconds of downtime.  That's a Big Deal.

But for all the benefits of hosting in a virtual private server environment, it does come with a downside, and that being that the hosting companies have a vested interest in commoditisation, which generally pushes them toward the low end of performance.  In most instances, throwing more hardware at the code is all you need.  After all, industrial-strength software such as the Apache web server or the MySQL database will spread out its requirements over multiple CPUs. 

But woe betide the programmer crunching hundreds of thousands of records with a lowly script.  In my case, the PHP executable can only use one processor at a time.  In which case, 1 + 1 does not necessarily equal two.  Simply because processing data in parallel means that separate processes are in constant danger of stepping on each other's metaphorical toes.  So some extra protections (lock files, record flags in the database) had to be spliced into the code as insurance that, say, the same record wouldn't be processed twice.

But as I've side-stepped into physical computing, limitations are hammered home even more forcibly.  For instance, the Arduino and the Raspberry Pi only have a limited number of pins to work with.  Not to mention considerations like voltages (5 vs. 3.3 vs. ???) and number of milliamperes that can be squeezed through them.  And now, picking up 3D modeling (in the form of OpenSCAD), I even have to take pesky things like gravity seriously...at least for anything that's going to be printed in plastic.  (Which is everything--CGI isn't my bag.)  See, printing plastic into thin air doesn't work so well.  And that the tolerances aren't completely perfect.  And, most importantly, that saving my notes from the Geometry/Trigonometry classes that I took a decade ago was a really good idea.

I suppose that there's a silver lining, though.  As noted earlier, the vast majority of the code I've ever written is the below-the-waterline part of the iceberg.  So having to respect the limits of things besides database normalisation and Boolean logic and all that is good for you.  The same discipline applies, after all.  Code is written to be re-used.  Functions/modules are documented.  Input is validated (where possible; OpenSCAD doesn't provide exception-handling).  Code is checked into source control.  Alas, there's no such thing as unit-testing, but you can't have everything, I guess...

Wednesday, September 23, 2015

An experiment in learning by teaching

Originally, my contribution the geeky "potluck" that is the 2015-2016 season's Moncton Developer User Group presentations was supposed to be the Laravel PHP framework.  But then I volunteered to help the Moncton Public Library as an Arduino coder on a robot project and found myself having to learn 3D modeling for the parts that Thingiverse doesn't have.

Sadly, my attempts at drawing anything (in two dimensions) almost make xkcd look like Rembrandt.   Okay maybe you'd have to go to The Oatmeal or Hyperbole and a Half for that comparison.  But still.  Then I discovered that the OpenSCAD software was based on describing a 3D object mathematically, rather than drawing it (e.g. with SketchUp, AutoCAD, or Blender).  Believe-you-me, my pointy ears perked up and my spider-senses quivered.

Most software packages, unless they truly suck (or you hate having to work with them for other reasons) come with an infatuation period.  As with people, it lasts until you expect one behaviour and get something different.   But in the headlong rush of dewy eyes peering through rose-tinted spectacles, I pinged the MUG illuminati with the idea that OpenSCAD might perhaps be more interesting/useful to our crowd.  (For those outside I/T, PHP is a workhorse of a programming language, which makes it boring...except for the people who live to hate on it.)

So I spent the better part of a week's bedtime reading on the official documentation.  To help myself structure the information, I started outlining the information as I understood it.  Essentially, it was the nucleus of the outline for my presentation.  Unsurprisingly, the outline has since been re-arranged, split up, re-grouped, etc. as my understanding has become more completed.  And the obligatory "Gotchas" section has grown.  And moved up in priority as I've actually used OpenSCAD to model robot parts...among other things useful to the household of a budding evil mad inventor.

As auto-didactic techniques go, I'm going to hang onto this one.  For me, it's useful structure.  For the eventual recipients of the presentation, at least they can rest assured that it hasn't been thrown together the hour before.  Win-win, right?

Monday, August 10, 2015

All networks are not created equal

I'm not knocking La Crosse, WI (more accurately, French Island), but we had pretty sorry luck in neighbour relations.  On one side, the summer weekend evenings were spiced by the Four Letter Badmitten Olympics.  On the other, a couple who couldn't wrap their brains around how anyone could find their beagle's 30+-minute barking jags annoying.

I figured that the lack of camaraderie was largely our karma:  We tend to keep ourselves to ourselves, and my West Coast work schedule probably didn't help with those random encounters that cement those relationships bit by bit.

Grande-Digue has been rather different, pretty much from the get-go.  The residential lots in these parts tend to run larger than the quarter-acre of our French Island subdivision.  Yet, almost counter-intuitively, the bonds tend to run a lot stronger.  Part of it is the Acadian nature of the place--generations of Poirers, Fougères, Bourgeoises, Legers, LeBlancs, Robichauds, Melansons, Gallants, Cormiers, et. al. growing up like an extended family.  But apparently, not so tribal as to shun arrivistes like ourselves.

But even after three years and change, I'm still sometimes caught out by how tight-knit the place is.  Today was one of those days.  For instance, Post Canada left a delivery notice for a package that required a signature...which I promptly left at home.  I rarely see the lady who takes care of late-afternoon customers, so I pulled out my driver's license to prove that I indeed matched the addressee on the pack.  She waved it away with a smile:  "I know who you are."

An hour or so later, the neighbours for whom we've been cat-/chicken-sitting stopped by with a thank-you gift from their weekend in Quebec.  In the context of chatting about their travels, I casually mentioned that we're considering a jaunt to Newfoundland.  Turns out that because we also mentioned it to another neighbour, it was already old news.

I should have known.  In both cases.

And so, while the social media mavens obsess over the magic n-squared-minus-n-all-divided-by-two formula, it's wise to remember that the strength of connections trumps the number of nodes.  At least when you're actually interested in making more than a superficial impression.  That's the way most folks around here seem to want to roll.  That's cool by me.

Monday, July 13, 2015

In scripto veritas*

The last few (work)days have been a blast back to my DOS past--at least in the sense of being very script-oriented.  (The similarities end there.  My first computer, an 8-bit Epson 8088, was powered by two 5.25" floppy drives and was certainly not networked.) I've had the luxury of a web-based interface to the MySQL database, but otherwise all interaction with this new server has been via SSH, SCP, and SFTP.  White text on the black background of a command-prompt, in other words.

Threading through the maze of branches of a file system (in the case of SFTP, on the client- as well as server-side) definitely requires a bit more presence of mind than a "windowed" UI.  Particularly when you need to make sure you're not uploading Beta code to a Production system...or vice-versa. Then there's the fact that misspelling anything will generate an error message.  And in a Unix-based system, that means even perfectly matching the capitalisation.

But oddly, the lack of a pretty UI over the top of those interactions is oddly reassuring.  When I launch a script via a command-line and collect its output from a log file, I feel like I can trust what it's telling me.  Ditto when keeping an eye on the system processes after a scheduled (a.k.a. "cron") job launches.  Maybe it's just that I was "raised" on the command-line.  Or maybe it's the fact that *nix doesn't try to protect its users from their own fumble-fingering or short attention spans.

Either way, I appreciate the straight-talk.  Normally, I distrust truth rendered in terms of black-and-white.  But this is definitely an exception.

- - - - -

* I'm riffing on the Latin "in vino veritas," which translates as, "In wine, [there is] truth." 

Thursday, June 25, 2015

Debt and currency in the "favour economy"

I owed a former colleague a couple of favours--one of them definitely outsized--dating from more than a decade back.  Fortunately, (most) favours don't accrue interest, but when the opportunity came this week to pay one of them back, I was more than pleased. 

Alas, "repayment" involved the squirmy discomfort of having to give a thumbs-down review of an interviewee.  (I don't like to see anyone stay unemployed, but...daaaaaaaang...)  Worse, I'm almost certain that the review was ignored as soon as it was out of my mouth.  Which means that a few months (weeks?) hence I'll have to put on my "adult professional" hat and keep the "Neenerneener--told you so!" to myself.

That's when I realised how different "paying it back" can be from "paying it forward."  Namely, there's significantly more leeway with the latter.  Often the timing and even the coin itself are left to the debtor.  That's more than likely why paying it back feels so much more legitimate.

Don't get me wrong--I'm thrilled to (finally!) scratch one off the accounts.  I'm never comfortable with debt, monetary or otherwise.  Besides, having something to offer can be pretty darned validating.  Pretty much any tight-knit community (business, recreational, or otherwise), runs on trust--on which the exchange of favours is of course predicated. 

But I suppose the whole uncomfortable experience provides an extra incentive to up my game on the "paying it forward" half of the equation, right? 

Monday, June 1, 2015

Truth in metaphor

So after about a year and change, I've become serious about that whole sit-to-stand work-style.  True to form, hardware constraints threw up a few #firstworldproblems roadblocks.  But the office is back together in a friendlier configuration than before, and despite having to give up a monitor, I consider it a net win.

As before, the style takes some getting-used-to.  Unsurprisingly, I've been toggling between my soles and my backside all day.  That I remember from before.  What I didn't remember--or perhaps didn't appreciate the first time--is how standing takes the edge off my concentration. 

I suppose that if I worked at a job that primarily required standing (guard, chef, etc.), it might well be the sitting part that would feel slightly off-kilter.  See, at any given time, we have a fixed pool of processing power from which to draw.  And even your body responding to non-default sets of stimuli has to tap into that pool.  That includes the muscles which now have to work in different configurations to maintain balance in front of a keyboard and screen.

Granted, I've known for years that trying to read anything technical while on the Stairmaster is less than pointless (because the only thing that's absorbed is my sweat into the pages).  But this was a bit of a revelation. 

In time, my brain and lower body will come to terms as this begins to feel more "natural."  In the meantime, however, I'll have extra appreciate the abilities of those who are praised for being able to "think on their feet."

Friday, May 15, 2015

Frivolous Friday, 2015.05.15: Acadian spring

During these last four springs spent the Maritimes, I've noticed some harbingers of the season that are different from those I knew "back in The Old Country." 

It's not that I don't appreciate green grass and dandelions and being able to hang out the laundry and hearing the chatter of birds (that aren't crows or gulls or  pheasants).  Oh, no--they're every bit as relished as they ever were.
  • Fiddlehead ferns in the produce department at the grocery store
  • The local lobster fleet heading out of port
  • Klatches of pheasants no longer hanging around our front door
  • Clam-shacks opening for business
  • The almost impossible blue of the ocean on sunny days
  • News that multi-kilometer-long chunks of ice are no longer threatening to dam up the rivers
  • The lack of reports about ferry routes or the Confederation Bridge being closed off
  • The DNR fretting--and rightly so--about anglers catching the wrong (i.e. farmed) kind of salmon in the rivers

Mind you, the up-tick of traffic in an already-bottlenecked Shediac downtown is not at all welcome during my grocery run.  That's when I have to remind myself that maybe it wouldn't be there at all if not for the shot in the fiscal arm that is tourist season.  All the same, I don't envy a town whose population jumps from 5K to 30K in the course of a few weeks.

And I don't care for the way the stretch of Highway 530 in front of the old boulangerie (bakery) turns into a "kidneys are overrated" washboard, I suppose.  (Yes, I remember frost-heaving in the roads back in WI, but it turns out there's an appreciable difference between sand and clay.)

I'm told that spring returns to l'Acadie later than in my stomping grounds of the Upper Midwest.  True, we're compensated somewhat in the form of a cooler summer and later autumn.  Alas, it still makes for a lot of impatience on my part--even without snow in the waning days of April. But, happily, it seems that Grande-Digue may even be ready to greet its guests and part-time denizens by Memorial Day. 

Monday, May 11, 2015

"Brungee Cord"

Just a random thought in the wake of tonight's annual meeting of the Shediac Chamber of Commerce.  (And, truth be told, after dipping yet again into The Lord of the Rings over the weekend.)

Seeing as I still barely know anyone, my preferred tactic--barring random collisions--is to scan the room for someone who looks as out of place as I feel and try to strike up a conversation with her/him/them.  Of course, that's not how one expects to meet the proverbial movers and shakers.  (Because those folks are already part of a crowd or systematically working the room.)  But it does lead into interesting territory.

Alas, it involves having to tell a bit of my story, and with that the (almost) inevitable cringe at people being surprised that, with all of Canada to choose from, Dennis & I staked our tent in New Brunswick.

I say "almost" because there's one demographic that never asks me that question.  And it's a healthier demographic than one might expect.  It's comprised of the folks who grew up in N.B. (or the Maritimes), left for "the west" (which, to the uninitiated, almost always seems to translate to the Alberta oilfields, British Columbia, or possibly Toronto), but then returned to raise their children.  It's like New Brunswick attaches its own special bungee cord--or "brungee cord," if you will--to many of its children.

If there's any surprise to be had, I would think it would be the brungees rather than we arrivistes who should trigger any sort of head-scratching.  After all, for all our neighbours know, we threw darts at a map...although a quick peep (followed by a morbid laugh) at the Toronto and Vancouver housing markets should tell anyone curious everything s/he needs to know. 

Yet, while "How Ya Gonna Keep 'em Down on the Farm after They've Seen BC?" doesn't quite have the same ring as the original version, the basic idea isn't all so threadbare, even after nearly a century.

Some Hobbits (e.g. Sam, Merry, and Pippin) find that their adventures among "The Big People" (not to mention Elves and Dwarves and Orcs and more far-fetched creatures besides) ultimately make them see The Shire again with fully-opened eyes.  Others--like Dennis and your faithful blogger--find that sometimes that the path never circles back.  And, like Bilbo and Frodo, we are pleasantly amazed to find more welcome than we have any right to expect among people with different customs and history and even language(s).

Either way, New Brunswickers, could you pretty-please stop being surprised?  Because in doing so, you're underrating your home--and by extension yourselves.  Yeah, yeah, yeah--I totally get the whole self-deprecation schtick.  I mean, I come from a long, loooooong line of Minnesotans and Iowans, fer cryin' in yer Molson's.  Self-deprecation was hard-coded into my DNA several generations before I was born:  If you cut me, I'll bleed humility (along with coffee, tater-tot hot-dish, and Jell-O salad).  Nonetheless, could'ya do both the immigrants and the "brungees" a solid and validate our choice of postal code, m'kay?  Merci d'avance.

Wednesday, May 6, 2015

Hats and headspace

The mobile-friendly application that I hope to be dog-fooding by the end of the summer has three main components:
  1. The bits that you actually see and tap and swipe on the phone itself
  2. The database that not only contains all the data, but also does a lot of the heavy lifting, logic- and security-wise
  3. A relatively lightweight web interface that more or less acts as a traffic cop for bytes flowing between the mobile phone and the database
It's no secret that I'm more comfortable working in parts #2 and #3.   Normally, what we coding primates call "front-end development" I try to do with people who are blessed with an eye for layout, aesthetics, an appreciation of minimalism, and a blissful ignorance of what goes on behind the curtain.

(Normally, I don't champion ignorance...unless it's of the cultural graffiti that each celebrity leaves in their fifteen minutes.  But in software development, it can actually be an asset.  Whenever possible, I try to give myself a few days' distance from code before I demo. it to a client or user.   That's time enough to start to forget about the intricacies of what's going on under the proverbial hood.  It's like taking a car out for a test spin, really--anyone but a mechanic should rightly give more attention to the steering wheel than the spark plugs.)

This time, however, I don't have the luxury of a front-end developer.  Partly because I'm trying to do Version 1 on a tight budget.  But also because I'm using this project as an excuse to learn the Cordova platform.  (Aside to non-developers:  If you don't know what Cordova is, don't worry about it.)  The shiny new platform aside, my natural inclination would be to leave front-end until last.  It's simply not my strength, after all. 

But the problem with doing the "middleware"--the web API ("Application Programming Interface")--next is that, of the three layers, it's the least in touch with reality.  The database has to be done first:  It defines the shape of the information--what's related to what else and how.  That's real.  Equally real are the buttons and text and fields that allow the user to control their data and how it's presented/manipulated.

The web interface?  Not so real.  I mean, yes, it still does important things like making sure that each user is properly logged in before s/he is allowed to look at, much less touch any data.  And while the database contains the bulk of the machinery required to read, update, and delete data, something has to pull the levers and flip the switches.  Also, however much sanity-checking and error-handling is done w/in the database, it would be downright irresponsible not to build any filtering into the API as the proverbial first line of defence.

In normal operation, the front end logic and the back-end logic would evolve in tandem and symbiosis.  But I've found that having to wear all three hats does something different to the head beneath them--at least in this instance.  I think I already have a healthy respect for the user interface folks; doubtless this foray outside my comfort zone will only increase that.  More to the point, I'm hoping for an even bigger bump in empathy for that forgetful, easily distracted creature of habit typically known as "the user."

Tuesday, May 5, 2015

"The 'vision' thing"*

Have I ever mentioned that I hate painting?  Yet last year I decided that I simply could not face another winter of staring at white walls.  So I made lemonade from the lemon of a downswing in work.  And while I'm still ambivalent about the "Shamrock Shake" green of the bathroom, everything else has (so far) lived up to expectations.

Podcasts are good for improving the time spent inching a brush along trim and drywall.  Sometimes, too, it's good just to unplug and go on walkabout through one's own head. Ultimately, though, there's only so much edge that can be taken off the tedium for days on end. 

That's where the big picture--the "vision" thing--has to step up. 

Running back a dozen years in memory, it recalls the crunch of getting one-point-oh of a bet-the-branch-office web application out the door.  The boss--a born schmoozer and salesman if ever there was--turned his considerable talents on us, "selling" us on what a successful project meant to us.

A per-transaction business model, according to him, meant that eventually we could scale to the point where we might occasionally stroll into the office to work...if only as a break from spending all that money we'd be making.

It was horse-hockey, and we all knew it.  We knew darned well how profit-sharing worked in the context of the larger firm.  We knew that the CAD folks would still have to produce drawings to make the app.'s floor plan component work.  We knew that the boss (a huge admirer of Steve Jobs) would never, ever run out of ideas for the programmers to implement.  Besides, someone had to bring in new clients for someone else to set up and baby-sit.  And, for pete's sake, we were slogging through the tail end of the dot-com bust recession: That whole instant millionaire thing was soooo 1999, don'cha'know?

In short, we didn't for a minute buy into the notion that we were creating the business equivalent of a perpetual motion machine.  Jokes about how we would spend all that money (e.g. cappuccino bars in every cubicle) were common currency.

In 2015, that web application is still chugging along, albeit downgraded from "flagship app." to merely the nucleus of a more comprehensive (re-branded) product.   Of course, the "vision" never panned out.  There were layoffs and re-orgs and fire-drills and over-orchestrated "innovation" initiatives and nearly every other productivity-nuking trick management has its arsenal.

Yet there's a reason Mark Knopfler's (slightly NSFW) Stand Up Guy is indelibly linked in my mind with the boss.  He's good at what he does.   The vision of coming into work just because you feel like it is undeniably seductive.   It covers both the extrinsic motivation of having great wads of cash (and vacation time) to burn, plus the intrinsic motivation of offering a venue for the mastery of one's craft.   

Similarly, the motivation for all that futzy painting (tri-colour in the case of the living room) had nothing to do with aspirations to interior decoration and everything to do with how it would feel to wrap my line of sight in colour while white and gray warred for dominance outdoors.  Even burrowed under a slanket, warmed only by the laptop fan and the sandbag-like weight of a sleeping cat, it was worth it.

- - - - -

* The second-most infamous sound-byte from George H.W. Bush (after "Read my lips").  The 1988 U.S. Presidential election (a.k.a. "The shrimp, the codger, the wimp, and the dodger" was not exactly a banner season in politics.)

Thursday, March 26, 2015

Trinity

Triads such as those that show up in medieval poetry were, as I understand, a memory device.  And, of course, three is a magic number in a lot of places--literature, religion, what-have-you.

The trinity upon which I sort of bumbled now--prompted by a passage from the somewhat fluffy and unconvincing first novel of The Dresden Files--has to do with one's life as a craftsperson.  Even in a mostly intangible craft like mine.

Student - We have to start somewhere.  But we need to step into other levels as quickly as possible, or it's all just academic.  Worse, we never gain any meaningful confidence.  That only comes from stepping beyond the pre-fabricated exercises, failing, figuring out why, and (hopefully) fixing.  And while it is a dangerous thing to expect to be in this mode indefinitely, it is more dangerous still to think that everything is still ahead and that you have nothing to share with anyone behind you in the journey.

Practitioner - Now we've learned to do something...probably many related somethings.  If we don't know exactly how just yet, we can look it up...or piece it together from StackOverflow, tutorials, YouTube, whatever applies.  Often, we can get by on understanding the "how" more so than the "why."  It is a dangerous thing now to think that we are forever past the Student phase.  It makes us afraid of mistakes which makes us afraid of experimenting, and too attached to what we already know.

Teacher - Stepping into this role should be profoundly humbling.  Humbling by dint of sheer panic and frantic research when we realise that our understanding is not nearly so fleshed-out as we imagined.  Because teaching is ultimately an exercise in creating context in which knowledge can be transferred from experience to inexperience.  This forces us to verify things that we took for granted as Practitioner--taking us full circle back to Student and probably Practitioner besides.  Or should, anyway.  Because if it doesn't, that's the most dangerous state to remain for any extended length of time.

And so the healthiest head-space for any craftsperson to live at any given time is all three. Learn. Do. Teach. Repeat.


Friday, March 6, 2015

Frivolous Friday, 2015.03.06: Anthropomorphism is a two-way street

We humans (or "hoomins" in lolcat-speak) are narcissistic creatures.  We see our image in way too many things...and when we don't, we do things like Mount Rushmore.  So it's no surprise that someone could parlay people captioning cat photos into a multi-million dollar empire.  (Truth be told, pretty much everyone who's not Mr. Huh should be ashamed of her/himself for not thinking of it first.)

But every once in awhile, you'll encounter humour that turns anthropomorphism on its head...even in an age diminished by the retirement of The Far Side's  Gary Larsen.  One of the better samples is If People Acted Like Pets.  Also, Things Cats Do That'd Be Creepy if You Did Them

With dogs and cats, those folks are reaching for the low-hanging fruit.  Yes, I have a standard-issue Office Cat.  He keeps a fairly regular schedule.  There's the regulation morning lap takeover.  (And he acts like he's King of the World for jumping up, even after I've invited him.  Dork.)  Then it's usually nap-time until about 1.5 - 2 hours before Second Kibble Time, during which he becomes insufferable.  Mercifully, he equates opening the office door with feeding and zooms into the hallway...after which I shut the door on him (and his whining) and turn up the volume accordingly.  Then Second Kibble Time and then a second lap takeover and finally post laptime-naptime (which not coincidentally is the most productive part of my day). 

But the Office Finches I'm stuck with the entire time I'm clocked in.  We brought six of them north with us.  Four were already older than the average life-span for their species.  The other two--a Zebra finch and an African Silverbill finch--were very young.  So it was a shock a few weeks back when the Silverbill (first named "Belle" and then "Bill" and then "Belle" again because she liked gender-bending before finally laying the question to rest...along with several eggs) caught us off-guard by sickening and dying in less than a day.

The remaining finch (named "Harpo" for a raucous call that's all too reminiscent of the blond Marx brother's famous horn), freaked out at being alone.  So for three days I streamed YouTube bird songs to calm her down until I could make it into town to recruit an acceptable substitute for Belle.  I found it in a Society (a.k.a. Bengalese) finch with two toes that point upward instead of downward.  (It seems to do just fine, btw.)  New finch is a golden-brown (sort of a buff colour) which suggested names like "Buffy" or (in homage to my country-of-residence) "Timbit."  But I try not to be superficial, and held off to allow it to name itself.

And so, after Belle's dainty ablutions in the water-dish were replaced by wholesale splashing and drenched newspaper, new finch duly earned its tribal name of "Duck."  Yep--this one has a freaky side.  And I wouldn't want it any other way.

But just as cats and dogs hold up a fun-house mirror to human behaviour, the same can be said for finches.  For one thing, finches are maniacally social (not surprising for flock animals).  The only exception I've known in 18 years was a runty Lady Gouldian Finch named Irene who didn't like anyone...except a damaged little Silverbill rescued from the horrible PetCo on the north side of Rochester, MN.  She'd peck anyone else out of her personal space...yet "Vir" was allowed to sleep absolutely plastered up against her at night.

Less humourously, finches are pretty ruthless about enforcing the pecking-order.  They can literally bite the hand that's trying to help them.  They can be stubbornly picky eaters and throw away a lot off perfectly good food.  They can be dreadful parents (at least in the case of some Gouldians).  And sometimes even "normal" relations can become abusive.  (As much as they would have preferred to share the same cage, Harpo's grooming of Belle was enough to pull out feathers, and so they had to have adjacent cages.  They sat as close as the bars possibly allowed.)

But finches can also reflect the qualities that we "hoomins" prize most about ourselves.  When Dennis & I made the trek from Wisconsin to New Brunswick, I was more than worried about Skip, a Gouldian male who was extremely near-sighted.  The poor little dude spent most of the trip on the floor of the cage, but valiantly survived...and lived for most of year afterward despite being well into the upper end of Gouldian life-expectancy.  When Joe, another Gouldian, became frail and also extremely near-sighted with age, he kept his spirits and his song until a week or so before the end.  My hero.

There are the escape artists who who made me laugh even through the frustration of trying to catch them.   The Gouldian pair who kept up a steady Statler-and-Waldorf commentary through the Green Bay Packers radio broadcasts.  The Society finches who would have happily tried to brood a football until it hatched.  The Gouldian who generously let me top up her babies with finch formula at night...but glared at me the whole time as if I was feeding them Skittles & Mountain Dew.  The Society finch who could hang upside down like a bat.  The ones with whom I (apparently) made a communication breakthrough, because when I made a certain noise, they would respond in a specific way.  (I have absolutely no idea what we were discussing but...whatever.)

I miss them all.  Dreadfully.  But the current pair reminds me that there is plenty of quirk still left in the world.  They've already shown a tendency to yell bloody murder when I dork around with piezzo buzzers on the Arduino.  Sometimes they also yell at my music choices.  (Problem is, with finches, I'll never know if they're actually objecting to my tastes or just ironically shouting "Freebird!")

Yet I'm pretty certain that my code would lose something without their chatter and (mostly) harmless madness in the background.  And my sense of noblesse oblige would most certainly take a hit if I only had to think of my own care and feeding.  When you sometimes don't make it outside the house for a week at a time, it's a reminder that you don't necessarily have to surround yourself with humans to maintain contact with your humanity.  Or "hoomanitee," as the case may be.

Sunday, March 1, 2015

Silly Sunday, 2015.03.01: The Programmer "Anxiety Closet"

Fans of the 1980s-ish comic-strip Bloom County will instantly recognise the term "Anxiety Closet."  It was the repository for a lot of pop-culture satire masquerading as neuroses of the overly-sensitive character Binkley.  One Sunday strip gave us a bonus peek into the Anxiety Closets of other characters in the strip--the most memorable being budding hacker/genius Oliver Wendell Jones being chased by a giant slide-rule.

Normally, I keep my nightmares to myself.  Mind you, some nightmares are pretty much public domain.  The "showing up at school/work naked (or trying very hard to get that way)" one?  Check.  The "it's the end of the semester and you realise you've been blowing off a class the whole time" one?  Oh, heck yeah--my subconscious mind has even upped the ante to multiple classes.  (Stupid brain!)

But what if certain subsets of the population also have nightmares in common?  In my case, I mean geeks--specifically programmers.  (I've had SCA-themed dreams, but to date, the only one that turned ugly was that nightmare about the only fabric store in town morphing into the potpourri-reeking fake-flowers-and-wicker-baskets frou-frou kind of craft store.  [shudder]  And I don't even want to think about the nightmares that ComicCon-/GenCon folks could have...)

Anyhoo.

The backstory is that in a couple weeks I'm due to give a presentation on Arduino.  The slides are done, so it's not like I'm behind.  Sure,  I don't have more than a few Arduino projects under my belt at this point.  Yet I personally know one person more qualified than myself to speak on the subject, and he seems to have zero interest in hanging out with Team Coder.  #lesigh 

Basically, it's just like that episode of M*A*S*H where Radar finds an abandoned, injured horse, and Hawkeye and B.J. are pressed into veterinarian service.  Except that first they have to catch the "patient."  
Hawkeye:  "You know anything about horses?"
B.J.:  "I rode a pony once."
Hawkeye:  "You're in charge."  
Moral of the story:  The bar for "expertise" can be set to a very relative--i.e. low--height sometimes.  My apologies for any destroyed illusions there.

So, yeah, I feel kinda like a poser...except I'm probably still in a position to save my fellow geeks a whole bunch of time reading/Googling--not to mention possibly some bling on hardware besides.  Which might explain why last evening's nightmare was about not being able to find the presentation slides on my laptop, rather than about freezing up under the gaze of my peers.

But while curating my resistor collection this morning, I had time to reflect on said nightmare.  Which is when I had a disconcerting epiphany.   It wasn't so much that I was worried about being worried about the presentation.  It was the awful suspicion that this might become an archetype for my dreaming mind.  And, worse, what if this is merely one species in the genus of programmer nightmares?  There are dark, dark regions in the left-brain.  Yet, like any self-respecting D&D dungeon, they somehow support a thriving ecosystem of nastiness:
  • Project requirements include IE6/7 backwards-compatibility.
  • Source control hiccup leaves code in partially merged state, but you don't catch on until you've made a whole pile of changes to your local copy.  #beentheredonethat
  • Zero downloads from the App. Store.
  • You think you're working in the test database, but it's actually the live copy.  #gotthatbadgetoo #twice
  • The "ninja" co-worker your boss hired (over your objections) isn't sanitising inputs...but is rewriting core APIs that s/he doesn't understand...which is clearly most of them.
  • The historical data that you didn't realise was critical when you archived it to tape won't restore.
  • 1:1 assumptions during design magically turn into n:n expectations during beta. #crazytalkinorite
  • User(s) demanding to know why there are "obvious" (to them) bugs in the app. that they agreed to review before sign-off...after they've signed off.
  • Unscheduled system maintenance and/or power outage during a code roll-out weekend.
  •  Apple/Microsoft/Google rolls out an uber-slick near-clone of your world-changing app. the week before you're supposed to close your next round of funding.
So there's that kind of thing lurking about the door of this programmer's Anxiety Closet.  It's probably best not to peer further into the darkness, amirite?