4 posts tagged “context”
How many times have you suddenly "discovered" a feature about a certain software that could of possibly saved you hours of time had you known that feature before? It's all too typical to find hidden features in software these days. The problem isn't that designers intend to keep you from using such a feature, it's that the design limits them from "trying to put everything in front of the user". There's the first mistake - don't.
There are some products that will put everything in front of the user while other products will only put a few things while hiding the rest from perspective. Users will either find themselves searching and searching for something that they need to get to or slow down the confusion and filter through all the unnecessary, even still - distracting - garbage in front of them.
To avoid this scenario, designers can equip themselves with learning about what tasks are important to their users in addition to creating workflows. Most users can only get one thing done at a time. It's usually best to follow this idea of presenting things one at a time - wherever appropriate. For instance, instead of providing the textbox to post a new blog post, there is a Create button at the top of the page. I can see that when I need to accomplish that task, it's right there in front of me to get to it - without distractions.
As a user we can be prone to wanting everything in front of us at every possible moment, but what we tend to forget is that we don't always need to get everything - everywhere - done at the same time. So, in supplement we complete tasks according to the context or point of focus we are in. At the same time, with respect to the designer, we need to understand that users need to be able to get out of context quickly - without seeking it out, which can lead to frustration. Simple things like - "I'm done", "Save", "Ready", "Back", "Previous" help users understand that they can navigate to other points of focus not only fast but very simply.

Gmail, adds a few shortcut keys to navigate around the site. Use K to move up and J to move down in the list of e-mails. Hit O to open an e-mail, X to select it, # to delete it. These are subtle additions that can make a great interface even better to use. Another great example - Microsoft's Visual Studio.

We underestimate our ability to take advantage of the keyboard in most applications today. Keyboard commands often get supplemented by menus, buttons and other pieces of user interface that typically will break our train of thought. Can you imagine what it would be like if we wanted to know a method for a class in some object in Visual Studio without intellisense? Imagine how much pain we would go through if when we wanted to go to a website we had to choose from a listbox instead of typing in a url to one or searching for it.
In today's post, I thought I'd toot my own horn. (well Matthew Kruskamp's and mine) It's about a powertoy that we worked on over the past quarter to allow for regular expression building to be much easier in development. The initial start of our project was based on how we saw a lot of tools out in the market today. For instance, RegexBuddy is a good example because it has some pretty amazing features and yet you do need to pay for a license. In our case, we wanted to create a similar product, complete with features, but with the user's intent in mind. To this I present our product. Enjoy!
Alright so starting off, we need to of course support the ability to actually type regular expressions. Aside from the ability to type regular expressions what about the abilty to actually validate it against a document. Regular Expression powertoys do this, so it's justified as such.
The nice thing about RegWizard is that we have built-in a sort of Autocompletion feature similar to what you would see in most IDEs such as Microsoft Visual Studio's Intellisense. The difference however is that, unlike most programming languages, there is no coupling to go off of for generating the view for a given context.
However, what we can do is break down how an expression is compiled. If you notice all those icons in the view, there actually is some context to what you are typing in the editor. For instance, if you were to type a left parenthese ( you would get a filter for any capture group. Or if you were to type a left brace you get a character class view. The same goes for all types of nodes.
The nice thing about being able to determine which type of expression we are dealing with, we can very easily interpret the entire expression and output a verbalized tree.
Taking notice on the verbalized form of our regular expression, you will notice the complete tree of each node. Once the expression in the editor has been validated, then the tree is then validated and rebuilt. Given the fact that all of the nodes are preloaded, building a tree is nearly instantaneous. There are of course expanded features we are looking to build such as the ability to maneuver nodes around, or even edit them from within the verbalized tree.
The way we get this information is through a simple XML file that defines all of our regular expression nodes. It's actually fairly simple. From the XML file we can obtain all the descriptions, node types, definitions, character vales (if they exist), and even icon for each node type.
Following this, all definitions are loaded from the XML file, and then used throughout the interpreting process.
RegexLibrary.xml and from this we simply validate it with an XSD schema.
We're moving towards a XSLT transformations later on to transform between regular expression language implementations, to account for the differences between languages such as Perl, XSLT... etc.
Moving on from definitions, we also have a section for your own regular expression library.
With this 'library' of yours, any regular expression that you type in the editor, you save and load at a later time. This of course, is stored in an XML file, similar to how our definitions are used in our regular expressions.
A nice aspect about RegWizard is that we've designed the interaction to be similar to most development environments. (Since this is a product targeted at developers.)
In our next release (3/17/07) we are looking to include the ability to move the environment around through docking and tabbing. There is of course other work and features, that we are putting into the application, but I'll have to leave it at that until a later post.
Check out our project on sourceforge:
This is slightly outdated, but I figured I post about it anyways. If you didn't already see Bill appear on the many shows showing off Windows Vista, or see him in the tons of interviews by such sites as MSDN's Channel 9 or Channel 10. Then you might like watching this one of him on The Daily Show with Jon Stewart.
I'd like to say that in all of his interviews, you can definitely catch his aim on software of tomorrow. Where the software we produce and use becomes contextual and personalized. A great step in .NET, for instance, is such SDKs as WPF. Where the interaction of our applications is a lot less dull and a lot more productive and exciting for our users. Creating interactive and intuitive applications that only display what is needed and used in a given context. I see a lot of applications being developed that are based on this model of context + interaction + personalization.
Thinking of the many Web 2.0 Applications out there, I have seen less pushes towards desktop application development. Although, it is nice to have web applications that can store all my information and I can access it wherever I go, it can potentially open up a lot of security flaws where my data could be compromised.
Google Docs, and several other office applications now let you create documents and store them online. Even still we can do all of our finances, communications, and storage all online. Again, this can open the doors for hackers to steal almost anything we may possess given a little data mining. But this goes back to the old principle that I believe Matthew once told me: if you have extremely sensitive data, don't put it online. I'll agree in the sense that there is just information that we really don't want getting out such as our finances, but other data we may need it to be connected and viewed by others even if it is sensitive. This is where one of Bill Gates emails comes in handy. (Read it here)
I feel that the Web is a way of connecting people much more rapidly than a desktop application may. Utilizing community features, and other web application usage is a great idea for most applications. Integration is a very important role of development. There is of course, Smart Clients, where the application is already connected with the web. However, this will all, of course, depend on the application being built. The principles behind the application should determine how it is connected if at all.
Going back to the personalized context interaction, it may take nothing less than data mining to determine the users intent and basic needs to accomplish a given task. Whether or not a given task is difficult to accomplish will rely on how interactive it is. We are, of course, talking about complex applications and generally speaking web applications. Creating web applications that dynamically populate data, inserting ajax based controls with immutable data can be far more interactive than nearly all desktop applications. The basic problem with desktop applications is that most desktop apps are developed through static WYSIWYG editors, and thereby severally undermining the architecture of both the system and especially its interaction.
Along side the .NET 3.0 framework we have WYSIWYG editors that accomplish what I'm talking about in the Microsoft Expression Suite. One such is called Blend. In Blend, you design your application with all the interaction you would like, moving around controls, destroying them, creating them, manipulating them all through the editor. With most desktop application development cycles, this would take a lot of custom code. The Expression Suite definitely eases this process in development, making interaction/design stages of development a lot smoother into programming. The ability to create applications with truly intuitive interaction is becomming less and less difficult. I believe the next step in intuitive interaction is indeed context, providing relative information to the users. Some of the other concepts could also be vertical search and definitely personalization. We have already seen personalization spread through sites such as NetVibes and Pageflakes. It will interesting to see how this progresses into other fields of software development.