Tuesday, April 28, 2009

Stopgapplication is officially a pseudoword!

( Thank you, Victoria )

Zach Fisher,

thank you for submitting stopgapplication.
you can view it by going to

replace any spaces in the url with underscores.

you can link to it by clicking on "link to word"
and you can send it to friends by clicking the
"send to friend" button under your word.


hd - editor
paul - concept
garret - programming

Friday, April 24, 2009

Thoughts On: Stealing

Taken from a response I posted here.


Lots of talk on this thread about the role of RIAA/labels/music in the context of file sharing. For a good expose on how the music industry found itself in the horns of this dilemma, check out "The Way The Music Died". It is well done, fair, and thought provoking.

I've lived in Nashville, TN since 1999 and for most of my time here, I had no aspirations for being an artist but was more involved in the session scene. Nash-vegas was once home to a thriving music industry comprised of a tenuous relationship between artists, labels, and songwriters. I joined ASCAP ( American Society of Composers, Authors and Publishers ) in the early 2000's and have realized mechanical royalties on songs I've written and co-written. I've played on a slew of custom albums ( read: low-budget ) where I played drums, sang BGVs, arranged, wrote string arrangements, programming, etc. I also received payouts from the Musician's Union for playing drums on "Shadowlands" on this album. And prior to all this, I played percussion for a series on The Learning Channel. Why all this "bragging"?

Because I've only earned about $100 in royalties for 2 songs that were recorded on a limited release ( @1000 copies pressed ). And the payout from the Musician's Union for playing 1 track on a nationally released, major-label album? About $45/year in mail-money. Now that I'm no longer pursuing music in a professional capacity, I can comfortably say: There is NO MORE MONEY in making music. Not in the established model. Some of this is the fault of greedy label execs. But a lion's share of the blame also belongs in the laps of people who view "songs" as algorithmic sequences of 1's and 0's - coldly detached from the hard work of people that are never seen and almost never recognized; that these products are somehow the inherent right of the digital denizens.

In this volatile economic environment, I've seen my friends lives reduced to panic-inducing shambles as a once dependable - albeit flawed - system of monetary compensation dried up seemingly overnight. The closest thing to retirement for these individuals is the steady stream of royalties on a large body of work. It is serendipitous income and a far cry from what I read between the lines of most protestations of the "right-to-file-sharing" adherents - that somehow the music industry is getting its just desserts for a century of decadent living. These friends of mine are living lives far from opulence, even when the DOW was well neigh 12,000. I think my engineer friend put it best, "its like complete strangers coming up to my supper table and stealing food off my kid's plate."

Some may argue that the internet levels the playing field, making it easier for unknown artists to be discovered. That maybe true, though I'm skeptical that any singular source of discovery will not necessarily homogenize. Fact is, it takes many talented people to create good music: songwriters to write the songs, engineers to capture quality sounds, producers to guide the artistic vision, mixers to blend the constituent elements into a complete musical thought, mastering engineers to combine disparate vignettes into a cohesive whole. These people are talented and deserve to work. I've heard some good indie music online...but the quality sucks. My bias is observed. Consumer electronics has done much to put power in the hands of the many, but when you see a professional at work, these devices seems like crude toys. It is an inspiring thing to "watch" the creation of an album.

Some may also argue that these poor folks should suck it up and get real jobs like everyone else. News flash: you assume that they don't already. If we adhere to the thinking that art is not worth compensation, I would ask if we would ever stop paying professional athletes just because we can toss a ball around every once in a while? What if the teeth of the digital age set its edges on your career? In many cases, it already has. We should not wait for higher courts to legislate what ultimately is a moral decision: taking a product for free when it is meant to be purchased, regardless of distribution methodology, is stealing. Period.

I understand that some will disagree with me. But before you do, I invite you to come to Nashville, TN. I'll give you the southern hospitality tour of the city and the surrounding areas. I'll show you the historic points, serve you some sweet tea, and top it all off with a trip to some of the songwriters and engineers most affected by greed in its many forms. I invite you to explain your rationale to them.


Thoughts On: Integrity

Matthew Heusser has been writing a lot about integrity lately. I think these are so valuable. I responded to one and decided I wanted to place it here as well.



My father is a soon-to-be-retired pastor. One particular church he was serving had an individual who routinely usurped his leading and authority. It eventually came to a point where my father set forth the necessary actions to have that person removed from their position. Prayer. Council. Meetings. Votes. Those kind of actions.

Needless to say, this created quite a schism in the otherwise picturesque congregation. I witnessed many a friendly face turn sour; anger and condemnation poured almost as readily as the backbiting and slander against him. My father had done irreparable harm to "their church" I was not a little concerned that his decision may have been wrong; look at all the havoc it had wreaked in this once tranquil scene!

Sometime later, we sat at breakfast where he shared with me these words that I will forever cherish, "Son, if it comes down to pleasing God or pleasing man, go with God and take your hits." The church never regained its composure and my father recognized that he himself had to leave if healing were to take place. This is when I learned that integrity costs. Dearly.

Perhaps I'm biased, but I truly believe that my father's actions in those days were used - whether he knew it or not - to expose a truly nefarious 'bug' that existed behind the peaceful veneer of some carnal Christians. If the quality of Christian service were of the utmost importance to these slanderous actors, would their response to this perceived injustice have been so decidedly Un-Christlike? Their reactions proved to me that their "church" was not the Church of God's design, but a social club meant to satiate a more carnal desire. This kind of church was NOT in the specs.

So this has been my observation when it comes to the truth: we can hide from it, but it will eventually come out. The sooner it comes out, the less layers of false expectation have been heaped upon it - reducing the damage and expediting the healing/fixing.

Just think of how the world economy would be today if a few more "lights" spoke out in the financial epicenters 10 years ago.

Thank you, Matt, for your posts on Integrity. May they be more than read, may they be understood.


Thursday, April 23, 2009

New Word: Stopgapplication


Main Entry:stop·gap·pli·ca·tion

A cheap, throw-away program that is meant to aid in the transition to a more complete and/or robust program, but due to neglect, has become a permanent solution that must be supported at great expense by the enterprise.

Saturday, April 18, 2009

Community 2.0 beta

What follows was originally going to be a response to this post, but it went beyond polite comment length. A snippet of Matthew Heusser's post and my thought afterwards:

"What I'm wondering is - can we use these new social media tools - facebook, (cough) myspace, twitter, instant messanger and so on - to pull together in the way that families did in the 1930's? And what would that look like, exactly?"

IMHO, modernity is aiding a kind of isolationist brand of communication that placates to our 'right' to convenience.

The family nuclear may be embroiled in a kind of diaspora, but I think the idea of community is still alive and well. What I am skeptical of, however, is the quality of community these tools create around us. If all I listen to is what Pandora thinks I like, I end up with a pretty boring selection of songs.

I also am concerned about the means by which we engage in community. To me, technology is springing up to solve a problem we created for ourselves, which really is no solution at all. The irony of me saying this while commenting on a blog for someone I've never met - is not lost on me.

Community costs us. It costs time. It costs our dreams. It costs our entitlement. It suffers when we soak in myopicism. We can expedite the salutations and introductions, but we will not create something that can profoundly affect us (and others) as it should.

Tuesday, April 7, 2009

The Gospel of Record and Playback

Microsoft unveiled its UI Automation capabilities for VSTS 2010 at Mix09. If you are interested, watch this video. Watching it was painful for me.

Some Highly Opinionated Observations
I felt truly bad for Brian Keller (Brian, if you're ever reading this, you did a great job). He was stuck practically sweeping up the ticker-tape from previous presentations. Even he found it ironic that his presentation was stuck at the end of the conference...like so many testing efforts. And like so many testers, he pleaded for feedback from a roomful of developers to help determine if there was significant interest in future talks about testing. Oh, and the technology wasn't helping either.

In 17 minutes, I saw a perfect example of the inherent difficulty with record-and-playback, even though it was capturing a lot of deep information. A functional test was recorded and the first failure was detected upon playback, only it was triggered by errors made while editing the generated code.

Recordin' Payback
Now, don't get me wrong. I am VERY impressed by what Microsoft is putting into the hands of the team - but at what premium? This is where I would like to insert my favorite argument, "Why do I need to pay $X,XXX.YY/seat for a tool that gives me the honor of pushing the button our team was tasked with creating?" How expensive is it to do any/all of the following during development:

- Define unique control IDs
- Define Active Accessibility parameters (y'know...those weird parameter fields you NEVER fill out when adding controls to GUIs in Visual Studio)
- Override control's WndProc methods with custom logic to persist user interactions to log files that can later be used for playback
- Keep logic OUT of the forms so that your application can run headlessly
- Implement Michael Hunter's Automation Stack
- Charge a junior test engineer with the task of learning how Win32 Window APIs, MsAA, Java Active Accessibility Bridge, .NET UiAutomation namespaces, etc. really works.
- Make testability hooks critical features in the application
- Make log files critical features in the application
- Report Source Code changes to the entire team

Does it take longer to implement these things? Maybe. It will definitely take longer to impress any management that merely hovers over the process with all the disinterest one could expect from a super model on a blind date with <insert NASA scientist here>. But I can say this much: if the department I'm in is considering necessary economic cutbacks, I'm glad I won't be competing with maintenance fees for COTS tool X.

My opinion is that these are more valuable for the organization because they invest in the individual(s) and their knowledge, not dumping money into 3rd party solutions to solve what are perceived as technological issues. To me, this is the same as if my parents, after being diagnosed with Diabetes, determined that the problem wasn't their diet but was actually their cooking. And then proceeded to "solve" this by eating the same foods at restaurants because...heck...they know how to cook. Sure, it costs more, but look how much healthier we are!

Hmmm. I guess it depends on the food/restaurant.

Finally, on a more personal note: I long for the day when the ridiculous moniker of "evangelist" is purged from the tech nomenclature. I understand that it can bear secular meaning, but its use is imbued with religious connotation. An evangelist is one whose very existence bespeaks of a salvific message. As a tester and a man of faith, I find the idea that a technological solution could save us is...well...laughable; and the very reason I have a job.

Wednesday, April 1, 2009

Testing Tool: FileHamster

FileHamster is awesome. If it hasn't already arrived at your city - pillaging it with paws of gargantuan awesome-ness (paw-someness?) - then consider yourself both deprived AND unfortunate. Download it from here. I've been using this tool for about 1.5 years now and always come back to it.

In a nutshell, Filehamster is a glorified directory monitor that acts as a kind of localized source control. The developers originally intended it to allow creative types to work without the fear of being unable to undo their Picasso-esque changes. Anyone who has made modifications to a document, then closed the application only to realize that was in fact NOT the modification you wanted, can attest to this problem. Here's how it works from a 3048m view:

- Create a new directory/file watch
- Operate your application, saving changes will-nilly
- Observe that FileHamster captures each successive save

"No bug whoop!", you exclaim. "The .Net framework has a FileSystemWatcher class that lets me do the same thing!" That is true. Who hasn't written this kind of program before using that very class. However the ease of use, visibility of changes in real-time, and the diff plugin are benefits that keep this high on my desert island list of exploratory testing tools.

An example would be good here:
If I have a fat client application to test, one of the first things I do is pop open FileMon to observe its file system traffic for log files, artifacts, etc. Once I determine the directories where these files are written to, I create a new recursive directory watch in FileHamster. Even better, I can filter the types of files that it captures, thus reducing the potential for data overload. I then proceed to explore the app some more. Meanwhile, FileHamster is dutifully running in the background capturing all the file system changes into discrete time-stamped files and alerting me when it does so.

After a session, I can come back and observe the captured files. FileHamster honors any file associations; it will open the file in its associated application, e.g. TXT in notepad, MDB in Access, etc. This ability to observe a session's change history is valuable in-and-of itself. However, the diff plugin allows me to specify a comparison application as well. I can select two of the captured files and launch the comparison application via a context menu. Now I can see what changed in the document while I was testing away.

Experience Report...nnnNNNOW!:
I've used this approach while testing some financial applications that persisted actuarial debug values in a kind of CSV file. I would run a plain vanilla case, then run an alternate solve that should have given me the exact same answer. Both tests produced the CSV file. When I encountered a problem, I simply compared the known good (did I mention you can assign comments to the captured versions in this thing?) to the variant version and observed precisely where the diff was introduced. I don't need to be an ASA to tell you that a different max allowable loan value in year X could have significant ramifications on a Universal Life policy and its later-year cash values.

The only problem I've encountered is that I'm only able to specify one diff application. I've worked around this by creating a stub utility that maps all my diff applications by file extension. That way, my .xls files are compared in my custom Excel file utility, .PDF files are compared in another, etc. I may post my comparison stub script later, but it is simple enough to script in a language of your choice.

Download FileHamster and check it out. It runs on Windows and requires .NET 2.0. I want to say that I've also been able to run it off a thumb drive, so portability may be a benefit. Let me know what you think.