Sunday, January 23, 2011

What is wayfinding?

According to Wikipedia, wayfinding is "all of the ways in which people and animals orient themselves in physical space and navigate from place to place."  Dictionary.com defines it as, "signs, maps, and other graphic or audible methods used to convey location and directions to travelers."  An example of wayfinding could be "you-are-here" style maps in malls or amusement parks, augmented by color-coded trails to help you navigate.  If you have ever been to Disney World then you have seen great wayfinding in action.

One of my favorite examples was in the admin building of White Oak Semiconductor.  In this building, hallways were painted specific colors to indicate their purpose.  One color indicated that the hallway was used to transition from the outer corridors into the cubicle areas, while other colors indicated that the hallways led to stairwells to transition between floors.  White Oak also adopted a convention to locate restrooms in the hallways that transitioned from common areas or corridors to cubicle work areas.  These simple yet functional wayfinding techniques were easily adopted by the building inhabitants and eased navigation throughout the facility.

What's missing in both the definitions above is virtual wayfinding in the context of web site or application navigation.  To me, wayfinding is a key component (if not the component) driving usability engineering.  Unfortunately, wayfinding is missing in many web designs.  It really is as simple as adopting conventions that are intuitive for users to understand and retain.  Some wayfinding techniques are common to many successful applications (such as bread crumbs) while other techniques are specific to the application and users that the application serves.  However, without wayfinding, users not forced use your application will not return to your application or web site.  This leads to development waste and lost revenue.

To me, there are many ways to build wayfinding into your web site, but understanding your user base is the first stop.  As a designer or architect, you need to understand the whys of your application.  Using well-defined and universally accepted internet navigation standards should be your next stop.  Personalization is also a good idea.  The reason while web portals are so successful is that they allow users to customize their return experiences while utilizing standard techniques for navigation and information presentation.  Regardless of whatever techniques you decide on you should document those standards so that future changes to your web site also follow the same standards, until such a time as they become outdated and counter intuitive.

Wayfinding is meant to help answer questions for your customers/users while they use your web site to get what they need and give you what you want.  Some of these questions are:
1. Where am I, am I there yet?
2. Am I on the right site, in the right place, for what I need or want to do?
3. Where do I go next, or how do I get back to where I was?
4. Is this best choice for me?
5. Did I already see this?

While on your web site, users need to find what they want while also avoiding what they do not want.  If you do not engineer that ability into your web site then you are doomed to mediocre results.

Lead, or get out of the way!

Recently I ran into an ambiguity while planning a lesson for a course as part of an MBA curriculum.  I soon realized that I had more questions about this upcoming assignment than I did answers.  The assignment was to have my students create a 3-sigma control chart to chart the statistical samples/observations of processes, and make decisions based on the charted data.  I have taken descriptive stats, and I retained enough to handle teaching this topic.  However, the observations were stratified into multiple defect types and it looked like I might have to teach multivariate analysis.

Since this was the first time I taught this assignment, I needed more clarification on the direction of this topic.  The course had strict course guidelines and grading rubrics, but this particular assignment was unclear to me.  Since there was a course lead identified for the course, I contacted him.  I spent 30 minutes carefully crafting my question to him and my request for help.  I tried to imply as best as possible that I was not punting on this assignment, but I genuinely needed help.  I contacted him only after I spent considerable time attempting a conclusion on my own.

My email request to him was a couple of paragraphs.  His response was a one liner, "...read the syllabus."  I had read the syllabus.  I am not an idiot, and I know how busy professors can be.  I would not have contacted him if I didn't have to.

If he is the course lead, then he should lead, or give up the responsibility to others more capable of providing leadership.  Leading implies coaching and mentoring.  It implies directing, encouraging, and facilitating.  He had the directing part down.  A manager does that as well.  Maybe we should call him a course manager instead.

Anybody who knows me knows that I do not believe in trying to motivate others, even though many leadership texts espouse motivation as a key leadership skill.  Instead of motivation, I believe in encouraging and facilitating others who are already motivated.  I was motivated to develop the lesson plan and be able to teach the topic so that the my students would succeed in stats assignment.  I was not looking for a handout, just a little more guidance.  Since this was an MBA course, multivariate analysis was not completely out of the question.  He chose to direct me to a source that I had already exhausted, one that I had already indicated to him was not enough for me to understand the assignment.

It was another missed opportunity to lead, to encourage, to facilitate learning by a peer.  I immediately wondered if he interacted with his students in the same indifferent manner.  I am not long out of school and I know what it is like to have a professor that just does the minimum to get by.  The students suffer.  Sure, some take the initiative to bridge the gap on their own, but value is lost in the pedagogical exchange.  I felt bad for his students, but in a whimsical manner, I felt that his under achievement would make the rest of of look better.  I decided to teach the course as I interpreted the course guides and ask forgiveness when my choices diverged from the implied direction.

So, I submit, if you hold yourself up as a leader to others, then be one.  Be there when others need you, and understand the additional duties that are implied by the position and inferred by the ones you are charged to lead.  Or...just get out of way and let others do the job as it needs to be done.

Doing Work Through Serial Accidents

A couple of decades ago (yes decades) while I was serving our great country, I was told by a drill sergeant that he did "more work on accident than I did on purpose."  For the longest time, I took that to mean that he was a harder worker than I, he had a more defined direction than I, or he was at least more motivated.  At the time I thought it was a clever quip, and I have been known to use it myself from time to time, mostly when identifying laziness in others.

However, as an IT architect, I have overtime developed a new appreciation for this maxim.  It now describes to me the failure of poorly designed applications and poorly defined information architectures. As Wodtke and Govella wrote in Information Architecture: Blueprints for the Web we need to ask, "Why Does Your Business Need You to Make a Web Site?"

Do we even ask that question?  I have been in many design sessions where everyone in the room thought they knew why the business (or customer) needed the web site.  However, the "why" is not a monolithic entity that is easily understood by one designer, or defined by the actions of one user.  To me there is actually a taxonomy of "web site whys", and these whys need organized in a cohesive manner.  Just as objects in OOAD,web site whys need a overarching cohesion (much like this blog entry, stay with me).

Business web sites provide process automation to internal and external customers.  Web site whys drive the processes that developers and designers implement in these web sites.  The collection of processes that are automated need to relate to their individual whys as well as the top why in the taxonomy.

Along with cohesion, automated processes need to be underpinned with intuitive user experience design and information architecture.  How a process is defined in a web site includes how easy the process is to complete in the web site.  This is where "wayfinding" comes in, but more often where web site design breaks down.  If the customer cannot find their way in your application or web site, then their success or accomplished work may be the product of serial accidents. Serial accidents provide little value and more often lead to lost productivity, and inevitably lost revenue.

Monday, January 3, 2011

More Teaching - Spring 2011 at VCU

It looks like I am scheduled to teach INFO 202 at Virginia Commonwealth University (VCU) for the Spring 2011 Semester.

Strayer University Provost Circle Again

I have been teaching for Strayer University for just over three years.  Last year they implemented the "Provost Circle" to recognize adjunct professors for their contributions and reward them for "commitment to excellence in instruction."  I was selected into the first Provost Circle for 2010.  For me it meant peer recognition, resume fodder, and additional incentive pay per each course I taught throughout the year.  Today I was notified that I was again selected to the Provost Circle, 2011.  This came as a complete surprise to me as I was unaware that they were continuing the program this year.

Thursday, December 9, 2010

High Performance Java Environments

For the past several weeks I have been monitoring a set of Java business tier and portal servers for performance issues related to load and possibly configuration.  Both servers run in Windows 64 bit with 64 bit JVMs.  The portal server is using low-pause concurrent mark sweep garbage collection while the other is using a more traditional 32 bit garbage collection algorithm.  I am considering adding additional CPU cores to each box.

While I was trying to work inside the tight boundaries of Windows processing, I longed for the Linux world of Java Application Servers.  Where I work, Linux is not an option, so I started to explore additional options.  That is when I re-stumbled upon Azul Systems. Azul has two products, Zing and Vega 3.  I have asked for a demo/trial of the Zing product.  Zing seems to be a specialized JVM and then some.  It requires 16-24 GB minimum RAM and 4-6 CPU cores, also minimum.  Zing boasts the ability to execute JVM heap sizes of up to 1 TB.

My plan is to test the Zing product to increase performance and possibly reduce server counts.

Java Parallelization Options


Last night I taught a class on Monte Carlo Simulation (MSC) using Excel and Crystal Ball (Oracle).  This was part of an ongoing course on System Modeling Theory (a.k.a. Management Science) that I am teaching at Strayer University.  In modeling we use MCS to simulate the probability distribution of uncertain model parameters.  This helps us understand the uncertainty and potential risk of varying input parameters of the problems we are attempting to solve with our models.

As I was executing the simulation in Excel/Crystal Ball with a Normal Distribution Curve and 1000 trials, my mind started to wonder about how I would do this in Java.  Given my experience with Java numerical computation I theorized that I would need more resources than just my laptop if I were to pursue more complex model simulations that included many more uncertain input parameters and model permutations in a JRE.

With the advocacy of Cloud Computing everywhere these days, I have been tracking the progress of Java-based parallel and grid computing efforts.  I have noticed a few solutions that would seem to fit the bill for the more complex numerical data computation that I think I would need to tackle complex problems and financial models with Java.

Hadoop
According to its developers, Hadoop is open-source software for “reliable, scalable, distributed computing.”  Hadoop consists of several sub-projects, some of which that have been promoted to top-level Apache projects.  Some of the contributors of the Hadoop project are from Cloudera.  Cloudera offers a commercialized version of Hadoop with enterprise support, similar to the model that Redhat has with its RHEL/Fedora and JBoss platforms.

In a nutshell, the idea behind Hadoop’s MapReduce project, and its associated projects (HDFS, HBase, etc.), is to perform complex analyses on extremely large (multi-terabyte) data sets of structured and/or unstructured data.  The storage and processing of these huge data structures are distributed across multiple, relatively inexpensive, computers and/or servers (called nodes), instead of very large systems.  The multiple nodes form clusters.  The premise behind Hadoop as I understand it is to encapsulate and abstract the distributed storage and processing so that the developers do not have to manage that distributed aspect of the program.

Hadoop’s MapReduce project, written in Java, is based on Google’s MapReduce, written in C++.  It is used to split the huge data sets into more manageable and independent chunks of data that get processed in parallel with each other. Hadoop  MapReduce works in tandem with HDFS to store and process these data chunks on distributed computing nodes within the distributed cluster.  The use of MapReduce requires Java developers to learn the Hadoop MapReduce API and commands.

Grid Gain
Grid Gain is another solution for distributed processing, including MapReduce computation across potentially inexpensive distributed computer nodes.  According to Grid Gain, their product is a “Java-based grid computing middleware.  There are many features to this product, including what they call “Zero Deployment."

While Hadoop comes with HDFS that can be used to process unstructured data, Grid Gain does not use its own file system, but instead connects to existing relational databases such as Oracle and MySql.  Hadoop can use its own high performance HBase database as well and I have heard of a connector to MySql.  Hadoop seems to provide more isolation for task execution by spinning up multiple JVMs per task execution.  Grid Gain seems to come with more tools for cloud computing and management.  Finally, though Hadoop is written in Java, its MapReduce functionality can be used by non-Java programs.

Aparapi
Aparapi is another API that provides parallel Java processing.  Unlike Hadoop and Grid Gain, Aparapi translates Java executable code to OpenCL.  OpenCL is Apple’s patented framework for parallel programming.  The fascinating aspect of Aparapi and OpenCL is what it is designed to execute on.  OpenCL uses Graphical Process Units (GPU) for parallel processing.

In my past life I was more connected to hardware than I am today and I worked with Digital Signal Processors (DSP) and Field Programmable Gate Arrays (FPGA) with Analog to Digital Converters (ADC) and Digital to Analog Converters (DAC).  We used DSPs to process waveform data in near real-time.  We would capture the waveform data on our I/O cards and then offload the processing and transforms to a DSP.
I guess this is why OpenCL interests me so much.  With OpenCL, developers can write code that gets compiled at run time so that it is optimized to run on existing GPUs in a computer or against multiple GPUs in multiple computers.  Based on the “C” language OpenCL allows developers to use graphics chips like those from NVidia.  Imagine that for a moment…while most of the parallel processing world is harnessing grid and cloud computing power, OpenCL is focusing on a much cheaper hardware footprint.  In fact, Apple developers can use OpenCL on their Macs to harness the computer power of the installed GPU to perform high performance computing tasks.

With Aparapi, Java developers can now translate their code to be executed in the OpenCL framework.  The use of GPUs for parallel non-video processing is called General Purpose Computing on Graphics Processing Units (GPGPU).  Unlike CPUs that execute single threads very fast, thereby giving the illusion of multi-threading, GPUs have a parallel architecture that allows true simultaneous execution of threads.

Beyond Aparapi there is JCUDA, JOpenCL, and JOCL.  While JCUDA, JOpenCL and JOCL are based on JNI wrappers of OpenCL and NVidia’s CUDA, Aparapi takes a different approach and uses byte code analysis to translate Java to OpenCL executable code.

It remains to be seen which platforms and techniques will emerge as the standard.  More to come as I explore some of the Java parallel programming.