Software


19
Dec 08

Winding down. Hacking PERL.

Vacations are for getting away from work and resting from the daily grind. Yet, almost everyone seems to need a week to unwind before getting to relax. My week of unwinding was productive.

During my last workweek, I was helping an employee configure Apache to simplify her life. While poking around on the development machine I noticed that the team was creating multiple WebSphere Application Server profiles. WebSphere Application Server (WAS) is IBM’s J2EE platform and it supports the ability of running multiple instances of the runtime environment without installing the product several times. This can be a very powerful feature and in the case of my team, they were simply doing it for isolation. It allows each of them to manage an instance of WAS without worrying about affecting other peoples work. While this is a development machine, apparently one of the applications it ran is less “in the works” than the others. This presented a problem, when I wanted to front-end my employee’s application (the one I just configure Apache for) with the web server.

You see, in a typical WAS setup, there is a web server that receives requests from an end user’s web browser. Web servers are extremely good at serving static content, executing CGI scripts and connecting to FastCGI applications. To hook into this layer, WAS loads a plugin that reads an XML configuration document to understand what it should do. This document, among other things, maps which URL paths should be passed on to WAS. For each WAS profile, a new plugin-cfg.xml file is generated. This makes sense, because each of these profiles is a different environment. The challenge is that the WAS plugin Apache loads can only read one XML file. So, what do you do when you want to map multiple WAS profiles to a single web server?

A few months ago, I remember the manager of the systems team we work with describing how this was a manual process and when he had more time, he would automate it. This led me to search and find a link for Lotus Connections documentation, “Mapping multiple WAS profiles to a single IBM HTTP Server,” that described the manual procedure. Using this as my guide, I updated the plugin-cfg.xml file manually and my employee was all set. It worked as expected and that was that. My last workday was the following day and yet I was compelled to automate this during my wind down week.

PERL is my programming language of choice when it comes to working with text and it fits perfectly for this task – merging two plugin-cfg.xml files. There are four XML nodes to consider when merging these files: VirtualHostsGroup, ServerCluster, UriGroup and Route. The latter three are easy because they just need to be copied “as is” into the merged XML document. VirtualHostsGroup however needs to be merged. Moreover, while the example from the Lotus Connections documentation shows a VirtualHostsGroup stanza named “default_host” and because this is XML, to do this responsibly we need to presume there could also be a VirtualHostGroup named something else. So, not only do we need to combing the children of all VirtualHostGroup nodes, we need to persist these nodes even if the named node in one XML file is not in the other.

With the help of XML::LibXML and XML::Tidy this task is simple enough. The following script takes three arguments, the file name of first XML document, the second XML document and the new XML document. It merges the second document into the first, inserting changes after the existing XML nodes. This approach ensures the file appears in a more logical human readable fashion. The formatting options available in LibXML disagreed with my aesthetics, so I added a dependency on XML::Tidy, which while cleaning up the document, makes it too neat. Oh well. The script could be used multiple times to merge several plugin-cfg.xml documents. For full disclosure, the IBM documentation for Lotus Connections mentions:

Do not complete this procedure if you are planning to add the multiple profiles to a node in a network deployment. In that case, you can define a Web server for the node and map only the node to the IBM HTTP Server.

I have not looked into what happens or what would need to happen to support multiple profiles in a network deployment. My last disclaimer is that I have tested this many times with a few edge cases. As with any software, it may have bugs, so test it on your documents before using this in a production environment. I will not be held liable for damage you create using this script. For that matter, if you plan to use it commercially, you should email me to discuss a license. Let me know if you find a bug or have suggestions.

Download wpcMerge.zip.


30
Nov 08

Copyright doesn’t mean don’t use

When the Creative Commons forged a more progressive look copyright law, enabling content creators legal power to elect specific use of their works, a cultural movement ensued. Until that point, copyright law reflected a historical component of intellectual property protection vital to commercial endeavors, but presented obstacles to reuse. Any of the various combinations of the Creative Commons license permit specific opportunities to a consumer of the assets, turning copyright into a layman’s device, clarifying for both creator and consumer a license that is compressible and deliberate. Copyright doe not mean “don’t use,” it just presents additional barriers because it lacks the varietal nature of the Creative Commons. Copyright is very specific, that the author of the content holds all rights and in order to use it, one would need to contact the author for permission or license. This appears to be a great inhibitor and makes a great compliment to the more explicit Creative Commons licenses. As the Creative Commons site explains, “Creative Commons defines the spectrum of possibilities between full copyright — all rights reserved — and the public domain — no rights reserved.”

So, while it is possible to permit some level of sharing and remixing in the end the license still reserves rights to the work. Copyright on the other hand reserves all rights. In cases where you want to know and be in control of your work, copyright is what you want.

While people tend to understand that they usually own the copyright of their creations, they do not realize the limitations of restitution if the work is not registered. Specifically in the United States, failing to register your work limits the amount of damages one can seek or be awarded in court. While my living is not made based on my photography, I have chosen to explicitly copyright my work, which includes registering it with the U.S. Copyright Office.

Several sites discuss how to do register work with the U.S. Copyright Office. (e.g. ASMP and Peter Krogh) More recently, there is a great series that Photoshop User Magazine is running, “The Copyright Zone” and some great posts over at Scott Kelby’s blog.

The online copyright registration tool is your typical solution that was constructed to the letter of the requirements, which is to say that most people will find it rigid and cryptic. There is a lot of documentation to help bolster your confidence, but at some point, you simply need to take the plunge. Here are three tips that made my life much simpler.

First, if you decide to upload your work, you are sure to notice the warnings of 30 minutes per upload. This might cause some panic depending on your connection to the Internet, but you need not be concerned. Interestingly enough, no one mentions that you can upload many times. In practice, this means any specific upload is limited to 30 minutes, but you can continue to upload as many times as is required to transfer your collection. Each upload is logged and displayed as part of your submission. It takes a few minutes for the system to show each transaction (my guess is they scan for malicious code), but if you do not see your uploaded work, then they never received it. You can call or email for verification or upload again to make sure. For those of us registering an entire years worth of unpublished work, this is important!

Screenshot of one of my submitted applications.

Second, you will read about the format of submission. Some people advocate for individual images and yet others talk about contact sheets. Having called the U.S. Copyright Office for guidance, apparently, a digital contact sheet is acceptable. This really simplifies the registration of unpublished works. I used Adobe Lightroom v2 to generate digital contact sheets (4 columns, 5 rows) with the filename and date taken under each image. All the guidance says that the image needs to be clearly visible on small displays. I chose to export at 300 dpi and in JPG format. At 300 dpi the contact sheet will effectively show 20 images to a page while allowing the individual image to render beautifully at over 580 pixels in the longest dimension. Digital contact sheets allow for fewer uploads, while presenting the work in high quality legible form. If you are a Lightroom user, you are welcome to the template I used.

Screenshot of Adobe Lightroom digital contact sheet.

Third, the online copyright registration site recommends using ZIP compression as a means of uploading many files. While using zip on JPEGs yields less space savings than on other files, I used it to simplify my uploading. I numbered them 1 of X to ensure my logic was clear. Additionally, this will allow a copyright examiner to reconcile uploads just in case I submitted an archive twice. Finally, WinZip is offering aggressive compression mechanisms, specifically for images. I used legacy compression to ensure compatibility. Compression programs have come a long way, but in this case, interoperability was the priority.

WinZip settings

Disclaimer: I am not a lawyer. My comments here are a documentation of how I approached registering photographic works and may not apply for your use. Please consult an IP lawyer or the U.S. Copyright office if you want to verify you are following acceptable procedures.


10
Nov 08

Prototyping can lead to remarkable outcomes

Prototyping is something software builders leave to user experience professionals and that is completely insane. Prototyping should inhabit everyone’s being. It is an opportunity at any step of any process or creation. There are too many first drafts called final drafts, especially in software.

Regardless of your software development methodology, agile or waterfall, there is always a notation that says, “Take time to prototype.” Practitioners speed by this phase as if it were distracting from the final form. Project leaders receive pressures to deliver more, in less time and at or under budget. Where in that formula is prototyping placed at the top?

Some companies handle this by creating smaller development teams, housed in research and development or branded agile extensions of the larger delivery organization. This is where people think the prototypes come from. Does location, context or reporting structure have any bearing on how real software is?

pro⋅to⋅type [proh-tuh-tahyp]
noun, verb -typed, -typ⋅ing. –noun

  1. the original or model on which something is based or formed.
  2. someone or something that serves to illustrate the typical qualities of a class; model; exemplar: She is the prototype of a student activist.

1595–1605; < NL prōtotypon < Gk prōtótypon, n. use of neut. of prōtótypos original.

When I joined a skunk works team at IBM directly from college, everyone said they created prototypes. These prototypes were designed and delivered to scale to the entire enterprise. People called them prototypes to set expectations and help the traditional brass understand why a one-year project might be delivered in three months. Rarely was there anything approximating a prototype – well maybe the very first version.

There have been notable individuals that would have the courage to rewrite what they had coded to achieve greater aesthetic or optimal execution. It is a humbling, empowering and inspiring experience to throw out your current work in attempt to write it again better than before. This is the closest I have seen to developers creating prototypes and this is a rare occasion because we so easily rationalize how there is so little time, so little money and so much more to do.

First drafts make lame software, hence we iterate in hopes to accelerate the separation of curds and whey. In the end, this is not prototyping. Prototypes offer the opportunity to understand what is uniquely delivered by the solution, what is important to end-users and how the way the solution is built helps or hurts those two points. This is why the process often ends up being a user experience deliverable. The challenge and thus opportunity, is that maybe what is deemed important is unfounded. Maybe the feedback users provide is based on a poor articulation or misguided offering.

Prototyping in software development educates the architects, the developers and, in turn, the user experience professionals. By building relatively low investment prototypes through rapid development tooling, the notion of throwing the resulting build away seems palatable. It offers the opportunity to learn without entering the software delivery cycle – skipping the prototype is the quickest way not to have freedom to try things. Once there is focus on solution delivery, everyone creates a context that prevents the exploration of what is right. Everyone is left to struggle with making what gets delivers as good as it can be, given the circumstances.

This is all likely generalizable to many professions. Creative types work through revisions as part of their craft. Prototypes educate you, your team and others to the importance of the end direction. It forces everyone to approach the real work with purpose and limits the exposure to making poor decisions under pressure or pretense. Spending the time up front pays everyone back during and after delivery and yet it is not prioritized as such. Instead, we hope that professionals executing a good enough approach will deliver something remarkable.


5
Oct 08

What are we saying?

It is encouraging that people find analyzing data so compelling. Visualizations like the ones you can find at Digg labs can whet the appetite of almost anyone. Environments such as Many Eyes allow users to engage more directly in the dialogue of information exploration. Wordle, a tool that enables you to generate your own word clouds makes visual statements on views that go unnoticed.

Creating a Wordle visualization of your resume seems to be something people enjoy. It reflects back the author’s personal language for articulating their experience and qualifications. I wonder how many altered their documents to direct the impressions they were creating.

People seem to enjoy sharing word cloud views of the news and politics. Wordle generates beautiful pictures using word frequency; the more often a word occurs the larger it renders. This means that what you put in directly affects what Wordle can turn out. While it includes the flexibility of lower casing words, removing noise words and interactive editing if you spend any time with Wordle, you will find yourself tweaking your content.

In an attempt to practice my PHP skills, I created a simple utility to help automate some text processing prior to working with Wordle. Think of it as the presoak cycle of the word cloud creation process. While it is humble in its scope and function, it can heighten the impact of your visualization. Check out Wordle Presoak if this is the kind of thing you are in to.

This composition below presents variations using Wordle Presoak on the same text pulled this morning from Reuters, Palin says Obama friendly with terrorists. Notice how you can optionally maintain quotes and have them play with the words, perfect for telling a story.

What are your words saying?

Using Wordle Presoak to help make compelling word stories


29
May 08

The success of participation

One of the magical things about grassroots computing – grassroots anything probably – is that any success is decided by the participants. This basic rule is what ensures support but perplexes companies who want to make money from the productive application of technology. Users of technology do not overtly care about the monetary value of technology which is what makes it even harder – we are all quite content to use something we deem useful even ifand often even more ifwe are delighted by it.

One of the challenges companies fall into is trying to create a community or an online social experience where there is no compelling groundswell. Online community development and certainly grassroots computing are not about technology, so building something rarely begets either.

Web 2.0-ifing existing applications is often a sure way to move further away from productive. The only time it helps is when the existing solution has a decidedly undesirable experience and the aspects of grassroots activity might result in better outcomes. Adding a set of widgets tells people you acknowledge and recognize the movement, designing or conceiving business with social computing as a core heartbeat tells people you are the movement. If you are successful, you did it right otherwise you learned a lot.

If the barrier to progress focuses on a framework articulating the values of the past or present, then the outcome will be one that follows instead of leads. There is plenty to be done meet the expectations of traditional returns on investment, but they will necessarily either limit innovation or shape the potential successes. To be really leading edge new measures and values are required that articulate the future state. Without this it is all smoke and mirrors.


1
Nov 07

Socially critical thinking

Social software maps the networks we already know. Presumably, the goal is to have the systems we interact with enable or inform us about something or someone we do not.

Recently I have been beating a drum with a colleague on the lack of critical thinking people bring to bare, regardless of environment – digital or real – and how we might support more thoughtful interactions. The disturbing trend is that people communicate critique through disengagement and silence. Anyone who has enjoyed a college-level art class can affirm that the most humbling and beneficial moments come from open critiques.

Your work, something you sweat over for hours, is hanging up against a wall along side those of your peers. Artists hang their work on the wall, stand back and review in hopes to see what they might be missing. The things we like and dislike about art often thought to be subjective, that taste is something unique to us. If this were true then more people agree than disagree on esthetically pleasing artistic expression. Go to an art critique and watch as people judge both on the technical execution and on the way the piece makes them feel. For the artist, it is likely the first time anyone has interacted with them around their art; it is the beginning of a dialogue. When there is agreement, the artist has communicated something so well that everyone remarks. If the reaction is not in-line with the artist’s intention, then it is an opportunity to learn and adjust. Art is, at least in part, communication. For whatever reason, we do not ask our peers to hang Power Point slides up on the wall and reflect. Ask a developer to be honest about their anxiety of participating in a code review. We have created a culture of quite, passive, secret thoughts.

People need to be more critical. Not negative, critical. We have an opportunity every day to contribute to the reality we share, if even only to compliment. Why withhold so much in fear that we might offend? Try starting with what you liked and then follow up with your suggestion. Venture out and express how you feel the next time someone asks you for your thoughts. Do not just say, “looks good,” because that is the same as silence.

When you organize jour [sic] social world solely around affinity, then you get an endless hall of mirrors. – Adam Greenfield, Author, Adjunct Professor at New York University, from an interview with Zachary Jean Paradis, Sapient, interview.

Social spaces are about the participants and their connections. If they are unable to show us something other than what we know, they have failed. Collecting the list of people we know is an ego game, whose meaning is short lived. Part of addressing this challenge is in valuing the diversity among us – go beyond gender, race and include thought. Love the person who disagrees with you, because you have the opportunity to learn something new. Be more critical of what you see. Find others that are willing to be more critical of you. Decide that a hall of mirrors, while familiar, is not as interesting as what other people are showing.


27
Apr 07

One child, many parents

One of the areas I focus on in my job is the social behaviors we enable and then capture in digital spaces, such as tagging, rating, commenting, sharing (email) etc. I am particularly interested when I see how other companies leverage similar capabilities in their products.

Adobe Photoshop Lightroom offers hierarchical classification (might have been in their Album product, I don’t remember), wherein the keyword Animals might contain Dog and Cat. Tagging an image with Dog or Cat implicitly adds Animals. However, if I had another keyword Family and add Dog as a child tag, Lightroom essentially sees two Dog tags and will only see the implicit tags if specified explicitly. If all I type in is Dog, it picks Dog > Animals and I do not benefit from the Dog > Family relationship. Adobe Lightroom Keywords dialogue

From an end user point of view, this is when a flat list of tags is often more powerful, there are no semantics between tags upon entry, users just type away. This brings me to one of the elements I am curious about, the post processing of tags to understand their semantic relationships so that Dog can be both a part of Family and Animals without the user worrying about declaring either. The notion of implicit tagging is interesting, but it is not implicit if a user needs to take an additional action to experience the benefit.