Monday, November 8, 2010

The "new" storytelling

These days, people are taking advantage of accessibility of interactive tools to expand upon narrative techniques of old. Paradoxically, politics were the primary driver for this revolution - polls are used to determine anything and everything from how "hot" a presidential candidate is to how popular a certain policy will be before even risking one's political hide on what may turn out to be an unpopular decision. Big business followed closely behind, making the tools and the analytics ever more sophisticated in trying to gauge just what exactly this customer may "want" (forget "need", that's a whole other can of worms) to buy.

In today's world of hyper-sensitivity to user feedback, perhaps it was only a question when this technique was going to penetrate the traditional methods of storytelling. Well, it's happened, and it may be more significant in this area then in all the areas that preceeded it, simply because you're creating a narrative that is for the first time truly a dialogue. This is not about social media, or being able to give your favorite writer or comic book artist feedback on their latest creation via their blog. These are new methods, involving new media, that at their best give the user an opportunity to truly and permanently impact the development of the narrative itself.

There are many examples.... Stories that are done as linear movie clips on YouTube. Web comics that include "choose your own story" model (remember those books?) to customize the user experience. Non-linear storylines where the user can follow a character or a segment of the story and cut thru the parts they don't relate to as much. Complex projects that include wiki materials that can be easily accessed by clicking on a button - and not losing the flow of the narrative. And so on, new ideas are happening as these very words are being written.

At worst, these can be distractions in what used to be a pretty straightforward medium. At best, they create immersive experiences which Web 2.0 has become all about. There are so many routes open, but in the end the old rule still holds true - when in doubt, just do it.

Tuesday, September 28, 2010

Hackers are Heroes?

Today I came across an interesting article by Gary Hamel on Facebook Generation vs. the Fortune 500. He talks about the "Generation F" and their expectations from the workplace, as well as unique skillsets and working styles they bring to the table. Read the entire article on Opensource.com

Saturday, September 18, 2010

Lessons of Comic Books make better UIs

As someone who grew up with comic books and viewed them as some kind of a "secret pleasure", it took me a while to come around to the fact that narrative and visual devices used in sequential art not only apply to the digital media, but can in fact be a driver for better, more immersive User Experiences. With the proliferation of SmartPhones and iPads we have more digitally literate people then ever, and that will only keep increasing.

Somewhat shortsightedly, the main concern of comic book companies has been how to get their print comics on the web, gettomg a second source of revenue for the same basic product (recycled story and art, minus printing, so it's essentially cost-free the second time around).

But why not consider tweaking that product and above everything the delivery model so that the user truly has a different experience, and not just a digital copy of the printed page? Think about it. Comic books were developed on the premise that you want to pack action and essentially bring drawing one step closer to animation. Yet animation and digital comic books have essentially evolved in separate directions, even though the very format of sequential art lends itself to presenting different types of content in different frames. And the technology can handle it now. What it does require is an investment in bringing the "envelope" to the next level, and while it's admittedly more involved than just copy/paste from the print medium, it allows the user to substitute the tactile experiences they're losing in transfer from print to digital (interaction with paper, un-evenness of page due to printing, owning a physical comic book, etc.) they can potentially replace not just with widgets, but with a truly improved and altered user experience.

What's interesting here though, and brings it outside of the world of comic book geeks sitting in dark basements is that the same lessons apply to just about any other vertical. No, it's not just a case of the Geek and the Suit sailing off in opposite directions and meeting each other again half-way across the world. While it's a fact that the comic book properties have flooded the mainsteream in the recent years, there is no reason not to believe that the spike will drop at some point. But for intents and purposes of strictly improving user experiences in any vertical or type of content, the true driver is the fact that today's user has come to expect and prefer information to be delivered in a manner that strikingly resembles, well, a comic book page. We multitask everything. We look at a few things at once. We prefer it that way.

In recently working on User Interface screens for CABEM's upcoming update to our Livia_vLab application it really hit me that this is exactly what we're trying to do. Even though the narrative is not necessarily sequential, everything else applies. User experience design was always about organizing and displaying information in a manner that is engaging, logical and well organized. Comic books do the same. If anything, being free of having to follow a completely linear narrative, the layout becomes even more engaging. It's not a book, it's a command module. And it's not just about storytelling anymore, it's about project management, organization, collaboration, archiving, and every way you find yourself working and looking at information every day.

Wednesday, September 15, 2010

Ten Strikes

A number of web sites block logins after just three failed attempts. Every site wants a different login and password, so sometimes it can take more than three tries to remember which password to use. The paper "Ten strikes and you're out": Increasing the number of login attempts can improve password usability takes a step toward quantifying the costs this policy. They find that increasing the number of allowed attempts to 10 could potentially eliminate 47% of password reset requests.

Wednesday, September 1, 2010

Pipes for Windows?

Today I had to get a list of files out of a zip file and append them into an Excel formatted spreadsheet. As a long time Unix user and being someone unfamiliar with Windows, the easiest way I could think of in under a minute is to use zipinfo and sed and sort to build a CSV file and then paste it into the Excel spreadsheet. It's pretty simple, just:
zipinfo -1 foo.zip | sed -e 's/.*\///' | sort -n -t_ -k2 > foo.csv
(The parameters to sort say to sort by the second field, delimited by '_' characters, which I need to do for this problem).

All very easy on -- from the Unix/Linux shell. The system that will ultimately use these files runs Windows. Is there any quick and dirty way to do this kind of throw-away scripting on Windows?

I have used Cygwin before, and could install it, but it always takes several hours to install, which seems like an awful lot of work to avoid a few file transfers. Of course, I could do the entire process manually under Windows, copying and pasting filenames from Windows Explorer. However, I have about 15 of these files which would make it pretty time consuming.

At the other extreme, I could probably write a .NET program in a few hours, but I have few enough files that copying and pasting from the CSV file is faster just typing a simple command line (though with .NET stuffing data directly into the spreadsheet becomes pretty easy).

So how would you handle this on Windows? Is there something similar to Unix pipes that lets you quickly handle one-off tasks like this?

Monday, August 30, 2010

MySQL Discussion at BGLUG

I went to the Bluegrass Linux User's Group (BGLUG) meeting last Saturday and saw an interesting talk about MySQL by Eddie Pauley. He covered the basics as well as some practical experience in scaling up to larger sites for his employer twinspires.com.

I would like to encourage anyone in the area with an interest in Linux or Unix to attend a meeting. They are typically held the third Saturday of the month at the Eagle Creek branch of the Lexington Public Library, though locations some times vary, so check the BGLUG website for times, topics, and locations. You can also chat with the group on freenode.net channel #bglug.

Sunday, August 8, 2010

Web-App Authentication in a Multi-Domain Active Directory Environment

CABEM has a customer who uses Active Directory internally to authenticate users. A web application we wrote for them ties into their Active Directory setup using LDAP to authenticate internal users to the application, using their email as a login name.

The adLDAP PHP class makes that pretty easy, we just look for the user name matching the email address, then authenticate as that user. They have recently switched to a setup with multiple sub-domains, requiring the application to authenticate across the sub-domains. I found very little on using adLDAP or LDAP in general to authenticate in a multi-domain environment, so I'll document some of what I found here.

Within a single domain, any domain server can answer a query because they synchronize information with each other. The reason for using sub-domains is because the link between the sub-domains is assumed to be too slow to keep domain controllers in sync. Only information in Active Directory's Global Catalog are shared across domains.

Our client has configured Active Directory to put all their internal users into the Global Catalog. That way a user visiting a remote site will be able to log in to any windows machine. The login may take a little longer, but travel to a remote site are uncommon. To reduce the amount of information that needs to be shared between sites, not all user attributes are made global.

The first problem we ran into is that email addresses were not being made global. As a result email lookup failed outside the user's home domain. The straightforward way to fix the problem is to mark the email address as a global attribute.

The other issue is more subtle. The adLDAP library authenticates users by trying to bind to the server as the user. Active Directory expects the user name to be either an LDAP Distinguished Name or a User Principal Name. The distinguished name explicitly calls out information about the user. A typical name would be something like "OU=users, OU=accounting, cn=Bob Smith, dc=carolina, dc= example, dc=com" identifying a user named Bob who works in accounting at the Carolina office of example.com. The DN's are pretty cumbersome, and likely to change if Bob ever moves to a different location.

The User Principal Name can be formed by concatenating the user's Active Directory name to an '@' followed by the DNS domain name of his or her home domain server. In this case it would probably look something like "BSmith@carolina.example.com". Though, this looks like an email address, it is not necessarily. The company we are working with uses a convention that would make Bob's email address be "bob.smith@example.com".

Active Directory generally does not allow anonymous access, for security reasons. Since a single connection with adLDAP might deal with several users, adLDAP conveniently stores the sub-domain name in its account_suffix attribute. However, the account used to get Active Directory listings only exists in one sub-domain and the adLDAP::authenticate method binds as both users within the same method call.

The solution is to set account_suffix to the empty string and pass the full User Principal Name rather than just the SAM Account Name to adLDAP::authenticate. Not using the account suffix really is not any more work. The code calling adLDAP just needs to as for userprincipalname rather than samaccountname.

As is often the case, once you know what to do it's easy. It's figuring out what to do that is difficult.