One Small Step For Silverlight


When you take the devil into your mouth, you’re doomed! For he is lying there waiting for you inside that air conditioned chalet at the PGA Championship.

MS Booth at PGA Championship

If the path to a man’s heart lies through his stomach, then golf is the Cour’souvra for his soul. All kidding, aside it was awesome to get the CEO treatment from Microsoft RIA evangelist Josh Holmes. The funny part is I wouldn’t have had the opportunity if I hadn’t run into Josh at the Mid-Michigan FlexCamp last week–its a strange world.

There are a few takeaways from the whole experience:

  • RIA nerds, regardless of their platform of choice, are more alike than different. It’s not a zero sum world and we should dialog / get together more often.
  • After talking to Josh I’m totally stoked to see the Silverlight apps and video MSNBC has put together for the Olympics. I hope its a “shock and awe” effort that propels RIA and web video forward.
  • Michigan is a great place to live and work. We’ve got bright, funny, down to earth people, world-class universities, great quality of life, affordable cost of living and fantastic entertainment options. Through tech connections I’ve been to Major League Baseball, NHL and big time college football games. Yesterday though, was the icing on the cake. There aren’t too many places where you get to see major championship golf tournaments and Oakland Hills is a national treasure worth seeing on its own. The best part is there’s so much still left to do and see (NFL, NBA, auto racing, etc.).
  • We ran into a PGA-IT staff member, Kevin Donahue, at the event and it turns out the PGA is excited about Adobe AIR and is using an AIR app for its POS system (weird how nerdy we managed to make a golf outing). AIR has a ton of potential. In my view, Adobe is riding a big wave in the deep ocean–its going to be interesting to see just how high the crest actually is.

It was a fantastic day and I’d like to once again thank Josh Holmes and Microsoft for their generosity. My expectations for tech evangelism just went sky high. ;-)

For those inclined, there’s a photostream below the fold (pretty much straight from the camera as I haven’t had a chance to weed and color correct).

Read More »

Historical Quicksand

Preach it Rands.

rands_sales_is_historical.png

When Rands says, “sales is historical” I just hear chanting in my head: “history is a trap.” Then I start thinking of the innovators dilemma and how to avoid the historical quicksand.

innovators_solutions_review.png

Passionate geek alert–you might want to approach with caution until there’s a little less juice in the pipe. I’m a pretty persistent change monger and now my battery is all charged up. Now to just find a few geeks who are willing to plot nerd-world domination and fix bayonets. I wonder if the big cheese will let me cordon off my office and declare it a separate organization…

SCORM 2.0 - Simplify And Make eLearning Relevant

SCORM 2.0 needs to learn lessons from the past:

  • Don’t let whoever wrote the spec / documentation for versions 1 and 2 anywhere near the spec (well just don’t let ‘em write anything public facing). ;-)
  • Nix sequencing. This should of been laughed away with the first draft (again, probably brilliant minds at work, but way over engineered).
  • Eliminate metadata from the spec. Instead recommend that Dublin Core (or flavor of your choice) be used inline in the html entry point or injected via XMP. Allow it to be bolted on, but DO NOT make it a part of the spec. I get metadata. I think its critically important, but it doesn’t belong in the spec.
  • Eliminate the manifest file and define an entry point naming convention (entry.*).
  • Make a REST API spec. A solid API is all you need for interoperability. This should make it way easier for LMS / server-side developers and content creators alike to implement.
  • Eliminate all of the packaging crud. Just zip your files up.
  • Actually write real documentation for the API. Build lots of working examples. Make it approachable / accessible.
  • Destroy all traces of SCORM 1.2 and SCORM 2004. Seriously. The biggest problem is I have with SCORM 2.0 is that its going to take years for it to become codified and implemented. All the while the existing specs will continue to calcify. We need a scorched earth policy folks–something that forces us to rebuild and move on.

Three simple steps to relevance:

  1. A simple packaging system (a zip file). Described in simple terms (one sentence please).
  2. An entry point naming convention (entry.*).
  3. A simple rest API. No bloat. Keep it simple and straightforward.

I have little hope that such a simple recipe will emerge from LETSI, but from my ivory tower this is the only way I can see the ocean. However, there is great conversation taking place and that’s reason to hope. I encourage everyone interested in the space to check out the links below.

LETSI Call for White Papers / White Papers:

http://bit.ly/2yf6WO

http://bit.ly/2I2V0r

Aaron Silvers - Get Involved:

http://bit.ly/KOXhc

http://bit.ly/3oVUAh

Tom King - Get Involved + War of Words:

http://bit.ly/1Auox0

http://bit.ly/4fTRmw

Camtasia Studio ExpressShow Source Code Now Available

Last week a link was quietly dropped on the TechSmith website which includes the ActionScript 2 source code and graphical assets for Camtasia Studio’s ExpressShow Flash playback wrapper. This package allows Flash developers to the customize look / feel and behavior of the playback controls, hotspots, quizzing and captioning for Camtasia Studio 5.x ExpressShow screencasts. Instructions for compiling and using the new wrapper with Camtasia Studio are included in the zip. If you end up creating a custom skin or adding some cool behavior leave a link to a screenshot or screencast.

Simplicity - The Holy Grail Of Software Development

Simplicity. A word to live by. An unending quest. The holy grail of software. As software makers our raison d’être is making complex tasks easy. We’re back to that elusive word–simplicity. In a beautiful twist of irony it turns out that even thinking about simplicity involves a great deal of complexity. Enter John Maeda’s Ten Laws. I’ve read Maeda’s laws in the past, but as I’ve matured as a software developer they resonate more and more with each passing day. Here are a few of my favorites:

maeda_reduce.png

maeda_simplicity.png

maeda_complexity.png

Why Elearning Is Dead

Tom King makes some excellent points in response to my last post which means its time for me to get serious and add some real meat to the discussion rather than just dumping gas on the burning carcass of elearning and dancing gleefully. ;-)

Here are a few things to consider when analyzing the depth of the problem:

  • Reusable content, the raison d’être of SCORM / AICCC, sounds like a great idea, but never materializes. It turns out that organizations want to completely customize and tailor their learning experiences so reuse just falls flat on its face. I’ve found it to be near impossible to achieve reuse across departments within a single organization, let alone industry wide. Even with soft skills, companies rarely are willing to use a generic presentation. Its always amazing to me to see the lengths and expense organizations will go to chase reusable content without ever achieving it.
  • Testing (SCORM + LMS) has been a failure. Despite all the fancy API features you still can’t reliably certify results. Physical environments and instructors are still required for anything needing mission critical result certification. We might as well be using simple survey tools rather than bloated standards.
  • The cost of developing lean forward elearning experiences is at least an order of magnitude greater than its pitched at. In fact elearning is pitched as a cost saver when in reality its usually a net loss. Most elearning is PPT based because the cost of creating a compelling experience from an SME’s physical course is so high (at least that’s been my experience).
  • Every LMS / LCMS vendor I’ve worked with gets a FAIL. They’re bloated, difficult to administer and use, and often require organizations to wrap their infrastructure around them (which just doesn’t happen too much). Again these tools are pitched as cost savers, but typically require full-time administrators and the large vendors have notoriously bad service track records.
  • Distributed content / repositories reign supreme whether on the Web or across organizations. Again the LMS / LCMS get a FAIL and SCORM SCOs have had little tangible value.
  • A real infrastructure and community never really developed, at least not on the scale we should reasonably expect. Actually you could say the Web raced ahead and that search (GOOGLE), Wikipedia, Creative Commons, etc. form the backbone of real elearning. Adding community features doesn’t mean your going to build a great community and standardization here might hurt more than it helps.
  • The elearning industry failed to fundamentally improve the old classroom led paradigm. Big institutions still employ SMEs (Subject Matter Experts) as course developers and instructors. The elearning movement as we know it has largely failed to create tools that can effectively allow SMEs to create elearning courseware. This meant the introduction of a new class employees–IDs (Instructional Designers) and Courseware Developers. In most cases we’re talking about new hires under different managers and even departments. There’s a huge level of distrust between these groups based on paranoia, ego and organizational allegiance. All of this results in increased operational overhead (financial and development).

All this said, there are some really fantastic people in the elearning world–maybe they’re going to kick some ass and surprise me with SCORM 2.0. :-P

The Elearning Industry Is Dead

I’ve got lots of respect for Tom King, but I’d say he’s underselling the depth of the problem. In my view, DOD dollars are the only thing propping up the current system.


tom_elearning_dead.png

I’m not sure I’ve ever met anyone, outside the DOD / ADL who doesn’t think SCORM and AICC are over engineered pieces of junk. And the LMS / LCMS products and vendors engender pure hate at every contact point whether purchaser, content develoeprs, admins or end users. Do a couple of white-papers do anything to help remedy the situation?

News Flash: Blogging Requires A Compelling Narrative

This rings all too true. Companies that get real value from social media put forward informal / conversational narratives from subject matter experts. Granted sometimes its hard to find geeks with the requisite communication skills, but when you do find them they should be out front. Once you get to multiple author blogging it feels like a news service and if there’s something on par with the lack of trust a politician inspires, its a reporter on the payroll.

b2b_blog_decline.png

It’s weird that companies make so little effort to understand the psychology. It’s as if they just want some mechanical lever they can pull. I’m guessing the anonymity of advertising buys, whether web, radio or tv has created this disconnect. You pay an outside firm to think about your brand, then yet another to think about how to connect your brand / products / services with an audience and then hire a mass distributor to crop dust your freshly commissioned message. When pressed to communicate internally you hide behind a PowerPoint and commission “white papers” to be handed out to customers who want to look deeper than your tag line. On second thought its crystal clear why these companies are failing. The only thing protecting them from the consumer apathy they inspire is monopoly money (corporate Amex) and strategic spending (use it or lose budgeting).

Software Development: No Silver Bullets, But Plenty Of Gunslinging

Hank, one of my favorite dev reads, hits the nail on the head on manpower issues. The problem is that folks still think they can scale and grind. Get enough developers and, though less efficient, the scale moves operations forward. This strategy doesn’t work when individuals and small teams can dance circles around you and have access to the same type of messaging channel that was once reserved for those with deep enough pockets to make media buys.

hw_manpower_success.png

Whether its actually harder to raise awareness is an intriguing question. Sure there are more startups than ever and therefore a lot more noise, but the audience is also much bigger–a lot more people are online and engaged. Better development and communication tooling in conjunction with self-broadcasting at scale contribute to the noise, but also make it easier to find and collaborate with people of like mind and distribute your message.

I’d argue that consumers are increasingly sophisticated and impatient which means you have to be very skilled at building both your products and your message. It’s not enough to just make a great product–you need web style WOM business / marketing savvy and a bit of old school polish to boot. Get one side of the equation wrong and people will blow right by–they’ve got too many choices and too little time otherwise (maybe that’s all Hank was really saying).

It feels like some aspects of the industry are simply maturing. I believe Danah Boyd and others have pointed out that the tech industry has a long way to go before its branding / marketing reaches the level of sophistication found in the brick and mortar world. Pure utility isn’t enough, you have to start selling lifestyle which we sometimes call “experience” in the software world. As the lifestyle + utility play matures consumers will inevitably become ever more bored until eventually businesses will spend more time entertaining their audience in an effort to overcome consumer skepticism (Super Bowl commercials come to mind).

Of course while the tech world is in some ways an infant it also represents an evolution. This translates to the often surreal experience of advergaming (interactive, entertaining advertising), funded, for the most part, by slick sophisticated old world brands (old world being brick and mortar in this context) and delivered side-by-side with the redneck desktop shareware and terrible 2.0 web markets. Sort of makes you smile when you think about it. It’s still the Wild West and that makes it the place to be if you’ve got a round or two in the chamber and the taste for adventure.

Creating An ActionScript RegExp Whitelist

Steve Yegge makes me feel stupid. There I’ve said it. I’ve come clean and can move on and admit there’s a whole lot I don’t know about development. Actually, I’m going to have to go one step further and admit I know very little about development which is depressing. This biz is a time sink; a void function; a black hole that sucks you in and returns nothing from its infinite murky depths. I know–clever. I’m probably trying a bit too hard to prove that my little ol’ social science degree gives me a leg up on someone, somewhere.

With that out of the way we can move on to another deficiency of mine–regular expressions. I don’t know diddly squat here, and usually avoid them like the plague or hope that Google or some fancy tool will just magically save my ass. There’s something about that compact, no white space syntax with all of its black magic quantifiers, metacharacters and metasequences and obtuse flags that brings out that first day of kindergarten feeling and sends me off to my feed reader. Oh, but back to the point. The other day I was asked to use a whitelist to validate filenames that the Screencast.com server can’t handle. It had been a year since I even wrote a regular expression, so of course I was crapping my pants. Obviously, I immediately Googled ActionScript RegExp whitelist, but came away with nada.

So there I was, left forlornly looking at the Flash / Flex docs with the realization that I was going to have to figure this one out on my own. And so I dug in and spent an hour or two reading the docs and playing around in the Flash script window (its still my choice for just sitting around and riffing, even though I spend most of my time staring at butt-ugly Eclipse–I’ll take the ugly though since Eclipse makes me “feel like a real developer”). Turns out RegExp are both a nightmare and not so bad. I think this is like the 5th time I’ve said that to myself though, so maybe its just safer to conclude I’m an idiot. Regardless, I was able to take a list of valid characters that the server folks handed over and determine if any filename the user wants to upload includes invalid characters (yep, now you know why Yegge makes me feel stupid).

On the off chance there’s some other developer mortified off their ass and desperately Googling for an ActionScript RegExp whitelist I’ve included a screenshot of some basic stuff that might help you out.

whitelist_actionscript.png

Oh and since some people get angry when they try to copy and paste code out of screen grabs, here’s some text (I’m too lazy to mark it up to look pretty which is why the screenshot came first).

// some simple basics
// no constructor expression literal
var p1:RegExp = /[a-z]/i; // pattern is case insensitive search for any a through z character
// the i is a flag indicating case insensitivity

// same expression using a constructor
var p2:RegExp = new RegExp( “[a-z]“, “i” );

var p3:RegExp = /[^a-z]/i; // whitelist - any character other than a-z will be detected
// the ^ is a negation operator when used inside, left of char brackets
// negation is the key to a whitelist pattern match (as far as I can tell)

// the i flag indicates case insensitivity
// the g flag means the pattern should be treated globally - important ramifications when matching
// more than a single occurence.
var pattern:RegExp =/[^a-z0-9\-'!#\(\)&=\[\]_~\^\.,\s]/ig; //this is a whitelist of valid characters

var data:String = “Bad @fubar% |.jpg”; // a String I’d like to check against my whitelist

// true means a character that is not in our whitelist exists
var invalid:Boolean = pattern.test( data );

trace( “invalid: ” + invalid );

// use String’s match method to get an Array holding invalid characters (those not found in whitelist)
var matchChars:Array = data.match( pattern );

trace( matchChars.join( ” ” ) ); // print invalid characters found

trace( “\n\n ———————” );

// recursively find all matches and their index
// the global flag must be set on the pattern, or else we get infinite recursion

var match:Object = {};

while ( match != null )
{
match = pattern.exec( data );
if ( match != null )
{
trace ( match.index + “: ” + match[0] );
}
}

Grant’s free RegExr tool is also helpful when you’re trying to gain a better understanding of regular expressions, but I found I had to dig in a little and understand some basics (again) before I could come back to it (you guessed it, Grant makes me feel like an idiot as well).

I’m also a fan of RegexBuddy, but alack my Windows days are long behind me and they haven’t stayed current with cross-platform coolness.