I'm Aza Raskin @aza. I make shiny things. I simplify.

I'm VP at Jawbone, focusing on health.

 

What Makes a Good Autocomplete?

We’ve been working on a problem for the past couple of weeks: an optimal autocomplete algorithm.

Many of our users have said that while Enso is great, it requires a bit too much typing. We’re inclined to agree. Yet, figuring out the best solution is tricky: there are more autocomplete algorithms than bones in a school of lionfish. There are straightforward algorithms, too-clever-for-their-own-good algorithms, standard command-line-style autocomplete algorithms, and the list goes on. A lot of the algorithms seem to go down fairly easily when you first start playing with them, but they end up getting stuck in your throat due to some unforeseen edge-case. This post explains our thought process in evaluating the algorithms given the (g)astronomical number of possibilities.

The Problem

Let’s start by defining the problem. Autocomplete asks the question of how ones maps a series of user keystrokes to one command name among a thousand possibilities.

Enso currently uses a slightly modified version of the “Obvious Solution”. The obvious solution requires that the keystrokes entered match the beginning of the command name, then picks the alphabetically first among all such command names. This is exactly what the Windows command prompt uses (at least the NT prompt; the old DOS prompt doesn’t have this autocomplete feature). Other systems use variations of this; most URL bars, for instance, require that what is typed be the beginning of some URL (not including the http:// bit). Enso improves on the obvious solution by allowing the user to entirely skip words during entry. Thus, Enso lets “open firefox” complete to “open mozilla firefox”.

Unfortunately, this solution has much more typing than necessary. In Enso, typing “open ” before typing the name of the application is frustrating; especially since there are keystroke launchers out there that don’t have any such requirement. However, Enso can do a whole lot more than launching — and in the future Enso will do vastly more than it does today — so we can’t simply drop the prefix. The prefix is what makes it clear that the user is launching something rather than any of the hundred other things they could possibility be doing (like printing it, deleting it, compressing it, or sending it as an attachment). The number of commands that Enso might have is just too large to eliminate the need for verb prefixes and structured name spaces.

So we come to the question: how can we implement an autocomplete solution that allows Enso users to use fewer keystrokes, without losing the memorability of semantic language that makes Enso powerful?

The Rubric

Like all interesting problems, the constraints put upon a good autocomplete algorithm are often opposing. The key to a good solution lies in striking a good balance, satisfying as many of the requirements as is possible in a delicate tug-o-war.

Keystroke Efficient. The autocomplete mechanism should minimize the number of keystrokes. That’s the point of autocomplete. In other words, an autocomplete should have maximal information efficiency. We ran some numbers on a large set of Enso commands to figure out the efficiency of a couple autocomplete algorithms. The worst case algorithm is one where you have to type every character of the command name; the Unix-Style algorithm uses tab to autocomplete the command until it reaches an ambiguous place; the current Enso behavior is as described above. Here are the efficiencies:

Worst Case: 9%
Unix-Style: 27%
Current Enso Behavior: 38%

As you can see, even the current Enso autocomplete has a lot of room for improvement.

Transparent The autocomplete mechanism should be transparent to the user. That is, with little or no explanation, the user should be able to simply type a small number of keystrokes that they think are related to what they are trying to reach, and the autocomplete mechanism should present them with the command they are expecting. It should either be magic (i.e., guess what the user means so well that the user never has to think about the mechanism), or predictable (i.e., operate so simply that with little or no explanation, the user understands how it works and can make the mechanism do what he wants it to do), and preferably both.

These two requirements describe the fundamental tension that autocomplete tries to resolve: descriptive power versus efficiency. The totally transparent interface simply waits for the user to type something descriptive and meaningful, like “open firefox”. The totally efficient interface ignore all semantic meaning and assigns all commands to one- or two-keystroke shortcuts. Neither is a satisfying solution; the totally efficient interface is difficult to learn, easy to forget, and has no meaningful association. The totally transparent interface requires the user to type vastly more keystrokes than is necessary, and of the keystrokes typed, only a few of them actually make a difference in distinguishing this command from the other commands.

But these two things are not the only requirements of a good autocomplete mechanism. A good autocomplete system also satisfies these requirements:

Lenient The autocomplete algorithm should be lenient and forgiving, especially where the user’s memory is concerned. To give an Enso example, the user should be able to type “open firefox” instead of the full name of “open mozilla firefox”. Trouble lies around the bend, however. If the algorithm is too lenient, the autocomplete mechanism will no longer be transparent.

Reversible If there is an autocompleted command, then tapping a key and then tapping backspace should cause the autocomplete mechanism to revert to its previous state. Note that Enso currently doesn’t behave this way if you use “enter” or “tab” to autocomplete. This eliminates the bash-style autocomplete, and any other autocomplete algorithm which “autotypes” characters. Think of many autocomplete systems that mess you up because typing the backspace key deletes the autocompletion, not the last key you typed, requiring you to double-tap the backspace key (but only if there’s a completion–otherwise, beware!).

Ergonomic The autocomplete mechanism should not cause undo ergonomic strain on the user. This applies especially to any case where there is a key with special meaning. For example, if the tab key means “complete to the end of the next word”, then using autocomplete becomes physically uncomfortable bad when holding down the quasimode key. Choosing an ergonomically perfect key like the space bar is nice, but overloads the meaning of “space”.

Habit Respecting The autocomplete mechanism should map a fixed user input to the exact same command every time, unless the set of available commands has changed. Even if you believe that adaptive interfaces are efficient, they are not habit-respecting.

Scalable The autocomplete mechanism needs to work for command namespaces that include literally thousands of commands. For example, the mechanism “the user’s keystrokes must appear somewhere in the command name” works well for small namespaces, but does not work well for large namespaces, because there will be all kinds of unexpected matches for any fixed small number of keystrokes.

Visible Ideally, the autocomplete mechanism should be visible to the user. This encompasses a couple different points. First, if the user has typed, and the command they want is not the one that is completed, there should be some indication as to what they need to type to get to the command they want. Second, if possible (and in general it may not be possible), the user should be able to see the minimum keystroke path to the command name highlighted (or should be able to look this information up somewhere).

A Particularly Challenging Bit

The place where the algorithm becomes really hard is in Enso’s arbitrary commands: you can type anything after commands like “define”, “google”, and “learn as open”. This means that anything the user types could possibly be matched to the arbitrary portion of those commands. In Unix, you can skip to the arbitrary portion of a command by using tab (although this isn’t reversible). Are there other ways? We think there are.

What do you think?

We’d like to open this up to the community and see what sort of discussion we can have about autocomplete, autocomplete algorithms, and rubrics for judging them. What autocompletes out there do you love, and which do you hate? What makes them good, and what makes them bad?

RT @aza What Makes a Good Autocomplete? | Follow @aza on Twitter | All blog posts

View all 162 comments


In some situations it’s quicker to use the mouse, rather than type. I suggest a combination of mouse & keyboard to access Enso commands to reduce the amount of letters typed.

I think Enso needs to have the command manual visible while in the Enso mode, by using radial, or pie menus. Each Enso command would be given a position, and could be put into clusters/groups by the user, the menu could also be sorted/arranged in different ways, such as popularity, latest used, user-arranged, by category. There could also be an option to search the commands, that would work in a similar way Enso works now.

Search selection could = press capslock, move mouse up-right, type what you want to search, release capslock.

Open could = press capslock, move mouse up, type what you want to open, release capslock.

Edit typeface could = press capslock, move mouse right, and then to the typeface option, type the typeface, release capslock.


Also if you wanted to use the keyboard only, search, open, edit, could be abbreviated. So that if you want to use just the keyboard you could, hold capslock, press o (for open), type what you want to open. Is this how it works now?



Alejandro Moreno

Stuff based on popularity or last-used would not work, because it’s not respecting your habits, or rather, doesn’t let you build a habit.

capslock + “o TAB” is Open, but I find it way easier to just type the full word because of ergonomics.

I *do* like the idea of a radial menu, or something similar, but I also really love using full words for commands: search, open, google, wiki, go; there’s no ambiguity, it’s very grokkable. So how do you do radial that starts from a variable-width command?

Maybe the command can be affixed to one border of the screen, say, center-left. And say you type “open fir.” On top, you see “Mozilla Firefox.” To the right, “Windows Firewall.” To the bottom, “Mozilla Firefox (safe mode).” All of these would be accessible with the Up, Right, and Down arrow keys, respectively; and if you need to see more options, hit the Left arrow.

That’s all I got. I’ve no clue if this would work or not. Love the blog and Enso.



McCance

Whatever it’s usability flaws (and it could be argued that they are legion), Quicksilver has a solution to the problem of typing “open” before every command that works very well: you begin by specifying the object you want to work with — Firefox, in your example — and Quicksilver guesses what you want to do with it.

For the most part this works exceedingly well. 99% of the time, if I’ve selected an application I want to open it. If I’ve selected a file, I want to open it in its default application. If I’ve selected an e-mail address, I probably want to send an e-mail to that address. By making good assumptions about what I want to do with the object in question, Quicksilver avoids having me specify the obvious every time.



Kenny Pitt

Another thing that I think Quicksilver does well is allowing me to form habits and respecting those habits. Like Enso, Quicksilver provides a list of possible completions for the abbreviation I type and allows me to select one of the completions using the arrow keys. What Quicksilver adds is memory of which completion I selected. If I later enter the same abbreviation, then the default completion is the one I have selected most often for that abbreviation.

This certainly meets the definition of an adaptive interface, but I think it adapts in a habit respecting way. The adaptive behavior only takes effect when the abbreviation that I have typed so far is an exact match for an abbreviation that I have used in the past, and it simply gives more weight to the most frequent command for that exact abbreviation.

I’ve found this to be a real problem in the current version of Enso. For example, I can type the abbreviation “outl” expecting to select “Microsoft Office Outlook”. However, the completion list I get always starts with 3 or 4 favorites links to articles about Outlook. No matter how many times I scroll down to “Microsoft Office Outlook”, Enso won’t make it the default selection for the “outl” abbreviation.



Ilya Ryzhenkov

I’d say that completion not necessary should give one and only one command to execute, but rather quickly narrow-down all that large namespace to few matching commands. I would prefer “camel humps completion”, and it works great for large namespaces like vocabulary of large program. For Enso, it means that typing “OMF” will show just few cases, like “open mozilla firefox” and “open my files”.


I have to say guys that this problem has already been solved, at least for me; QuickSilver. Best autocomplete I have ever used. I haven’t hit an edge case that QuickSilver makes cumbersome.


It would be great if there was an option in Enso to remove the “open” in front of many commands. Something like “learn open as default” or “default to open” could set/change the default command that is assumed when you just type “firefox”. This would most likely (though I don’t know all the commands) allow functionality preservation while making the most-used task that much easier.


Why not just treat ‘Firefox’ as a verb. A typical person only uses a dozen applications and they all have non-ambiguous names.

You have a mental model of what your application grammar should be… your users won’t have this. They will type the short form… Outlook, Excel, Powerpoint, IE (instead of internet explorer) and you should be smart enough to auto-complete most of these with 2-3 letters.

BTW: You should also be able to handle web-applications like regular ones… , Google, Yahoo, Mapquest, are just as much applications as Firefox.



MH

Greg raises a good point when he says why not use “Firefox” as a verb. To put it another way, why not object-verb order instead of verb-object? (This is the recommendation in The Humane Interface!)

One other difference with Quicksilver is that it lets you skip letters, so as long as what you type is in the correct order, it will match. So I can type “ff” for Firefox.



L.

Definitely need memory of some kind. It turns out that I don’t actually use ENSO that much (nor indeed Qicksilver on my Mac which I think I have used only once) – I just don’t seem to work that way or haven;t got in to the habit of working that way. However I was using it last week to run Movie Maker which wasn’t on my start menu – and I found it really irritating that it was always the second option rather than the first even after I had used it 4 or 5 times. (BTW I hate personalised menus in applications – this is different)

I also agree with the object verb idea – that makes much more sense to me. typing open feels redundant most of the time



Nigel ST

How about the system as you have it now but the use of the down cursor key will cycle through all the possible commands in alphabetical order and the up cursor key in reverse alphabetical order. This way the user can habituate to typing a certain set of characters and the appropriate number of up or down cursor key presses.
When typing all of these possible commands will be seen in a list although if there are many the user may need to cursor down or up. The user could also keep typing to get a closer match. The possible commands will change as the user keeps typing.

Since launching applications is one of the most common if not thee most common actions a user does with an application why not have the word of an application on its own set to open it. So if the user wants to open firefox they just type firefox. If they want to do anything else they have to specify the action they want to performed, like print filename.

I think the reason that the action comes first (in commands) rather than object action, is that it is more common and thus more natural for a native English speaker to say open door rather than door open.


I’ve been thinking, to satisfy those who regularly launch applications that appear 3rd or 4th down the list you could have a method of *explicitly* bumping them up. Rather than having the dangerous adaptive behaviour they could say something like “promote Firefox” (though a better word, I just can’t think of it). This means that it will have a much higher weighting.

This way the default work flow of a user will be the optimum, but the interface still does not change without their explicit command.



Kenny Pitt

To me, the beauty of a system like Quicksilver is that I don’t need a separate command to teach it what abbreviations I want to use. I just type in the abbreviation that I want to use for a certain command. If Quicksilver doesn’t choose the correct command the first time, I can teach it what command I want by simply selecting it in the list. I don’t remember ever having to arrow to a command more than once unless I change what abbreviation I’m using.

I would also like to see the habit aspect be “portable” between machines. If I use Enso on two different machines with differing amounts of software installed, the same application will likely be in different positions in the completion list. If I have to type “x y z down down” at home but “x y z down down down down” at work then I can’t form a habit for that application.

I think the current completion method works well on the built-in commands because it is a limited set designed as simple command verbs. Choosing between “open”, “close”, and “go” by typing the first few letters is easy. I can usually enter one letter and TAB and get what I want. Start Menu application names and favorite link titles, on the other hand, are designed to be descriptive rather than easy to type. Two applications that I use a lot as a developer are “Microsoft Visual Studio .NET 2003″ and “Microsoft Visual Studio 2005″. I don’t want to start at “studio” because that is also used in a variety of other apps. So I’m left with typing out “visual studio .” or “visual studio 2″ to select them, and it would be even worse if Microsoft had been consistent in their naming and used “Microsoft Visual Studio .NET 2005″. It would be nice to be able to use simple, mnemonic abbreviations like “vs03″ and “vs05″ to narrow these down.



Pgan

What if you could write commands either as object-verb or verb-object? “firefox !open” matches “open Mozilla Firefox”. A search for objects reduces the number of matching commands (and so the number of keystrokes) more than a search for verbs, because on average fewer verbs match an object than objects a verb. It’s especially useful for commands like “define” and “google”. Also, an object-verb order is arguably more intuitive, as your users say.

There are even fewer keystrokes if the most common action (“open”) is the first match for any applicable object (any object that can be opened). Thus to open Firefox, type “firefox” (or even “fire” if that is the only object that begins with “fire”). But to switch to the firefox window type “firefox !switch” or “firefox !window”. As far as I can see, this satisfies all the other requirements listed in the original post.

I do not understand the paragraph about “A Particularly Challenging Bit”.

Many of your users say they prefer an adaptive, modal interface; maybe some degree of adaptiveness and modality should be allowed for the sake of ergonomics.



Brian

Because I am on a PC, I have not used Quicksilver before, but I have used Launchy. It “learns” what programs I want to open and auto-suggests programs as I type. I have found it very good at suggesting items and being quick.

I disagree that you need to have a command before the target in Enzo. To make it a useful launcher, “open” should simply be the default when dealing with most things. This still allows you to add commands for future extensibility.

Oh, how’s Vista compatibility coming?



Gregory

I think that a lot of very good suggestions have been made so far. I’d like to agree and disagree with a few before I give my idea:

* The idea of having Enso remember what command you chose last time you typed “omf” and offering that first (a la Quicksilver) is a very good one. I agree that this would be adaptive in a habit-respecting way.

* Any habit that involves learning to hit the up or down arrows a certain number of times is a bad idea. This will always change as you add applications or switch between computers.

* Similarly, any use of the mouse is right out. That doesn’t mean however, that you couldn’t do some kind of radial display reached by the arrow keys, thought I’m not sure how that would be better than what Enso does now.

* Ergonomically, CAPS LOCK+TAB is horrible, as you say. Might it be better to use a combination such as SPACE+SHIFT to replace TAB?

* I agree that object-verb is often better than verb-object. But why shouldn’t you be able to type either one? It seems unlikely that “Firefox open” could ever mean something different from “open Firefox”. The main problem would be, I imagine, a vastly increased search space.

* I really like the idea of explicitly defining “firefox” as “open firefox”, so that in a set of commonly-used cases, you can skip the verb. This seems like it would vastly improve efficiency without limiting the future expansion of Enso.

* On the other hand, how many things could “firefox” possibly mean? It seems to me that the default should be “open”, and if it’s already open, “go” is chosen, unless some other verb is typed. Given a list of installed apps (which Enso has), which is a finite list, what’s wrong with defaulting to “open”?

OK, now I have two ideas to add. First: You’ve got two sets: commands (e.g., open) and arguments (e.g., word). The list of commands is always finite at any given point, and the list of arguments would appear to be infinite, since you can google for any string at all. But in reality, most commands take a finite set of arguments: you can only open the apps that are installed, and you can only open the files that are on your hard drive (I’m ignoring certain web apps here). So it’s really the arguments for specific commands (like google) that are infinite. So why not just disallow auto-complete for the infinite sets but let it work for the finite ones? So, “goo-TAB” gets you “google” and then auto-complete stops working. However, “off” still works for “open Firefox”.

If you combined this with memorizing the commands chosen for each set of characters typed, you could quite quickly get to a point where Enso “magically” predicts what the user wants most of the time.

I have another idea, but since this post is getting absurdly long, I’ll post it separately.



Gregory

Here’s my other suggestion, which as far as I know, is pretty outside-the-box. It’s inspired by experimental methodolgy in linguistics, which is my field.

What if Enso were to measure the milliseconds between keystrokes and take the speed at which the user is typing into consideration when mapping the keystrokes to a command? This may sound weird, but my hunch is that we type those commands we use a lot *much* faster that we type commands we don’t use much. So, this would essentially reward decisiveness and muscle memory.

Of course, this shouldn’t be used in such a way that it can really screw people up; maybe it should be optional. The default would have to be something like “unless the typing was faster than X, use the default algorithm”.

Do you think that might work?


Cn yu rd ths? I cldn’t blve tht I cld actlly undrstnd wht I ws rdng. Te phnmnl pwr of te hmn mnd, acrdng to a rsrch at Cmbrdge Unvrsty, it dsn’t mttr in wht ordr tht lttrs are in or wrd are, the only imprtnt thng is tht te frst and lst lttr be in te rght plce. Te rst cn be a ttl mss and you cn stll read it wthut a prblm. Ths is bcse te hmn mnd ds nt rd evry lttr by itslf, bt te wrd as a whle. Amzing huh? Yh and I alwys thght splling ws imprtnt. (http://interfce.com)

PS Mybe ths txt-trnsfrm cld bcme a cmnd in Enso. :) Or cld be a way to type lss, for an auto cmplte?


It may be possibly to read without vowels, but switching your mindset to writing it is more than it’s worth.


Another vote here for object-verb rather than verb-object.

You really should spend some time using LaunchBar and Quicksilver on the Mac. One pattern that you’ll come upon is what I’d call directObject-verb-indirectObject, which I think is important to accommodate.

Nice work, in any case. Looks great, too!



Nigel

How about the user being able to specify where in the list they want a command, e.g. first second or third in the list. This would help in being able to arrange the list order and keep consistance if multiple machines are used.



Anurag

take a look at partial completion in emacs. David Gillespie’s work



Andy C

Speech-to-text… just say what you want to do, like “open firefox” etc



Aaron Dilts

Enso is great I love the program. I use it daily from reports to even forum posts. I don’t think Id live without it sometimes, misspelling and minor word definitions have come to be a minor problem.

Only last week i was trying to find Fraps on my desktop and couldn’t find it. So I held caps lock, type in the command and the program, Simple! With only the key board I can open programs rather than opening up different folders and documents to get to one thing.

Thanks guys Enso rules


Well just a general comment on what we’re dealing with.

Auto-completion makes the assumption that we want to enter a command: few words, made up of letters, probably entered sequentially, most of the time.

The sequential nature of command entry is good for simplicity, maybe less for quick entry, since we want to save keystrokes.

This is a matter of maximizing entropy, trying to put as much information into every keystroke, in order to prune the tree of possible completions, quickly.

The given nature of commands, actions and arguments leads to proposals like changing object/verb order.

I have just started thinking of this, but I believe there are more ways to reduce possibilities. How useful they are is a matter of research.

Maybe users would like to use certain keys to move to a different section of the command which is less redundant, like having certain parts on different lines (no proposal, just as a picture how it might work). Or some arrangement into syllables. Or even not sequentially entering commands, but just a rather unique part of it?

It also depends very much on user’s taste. One might be happy with very short but cryptic extra names for her commands, even new synonyms, others might like more wordy approaches, but with lots of modal state.

Finally, the user wants something, quickly. He got mouse and keyboard and has to use it, until we can use eye-ball position feedback. :-) What I’m trying to say is that he did not want to spell commands in the first place, we just make him want this by making it easy and attractive. Maybe there are even simpler Interfaces possible.



Paul Donnelly

I’m late to this party, but I’ve got a question and suggestion.

First, have you guys looked into SLIME’s * fuzzy completion mode? It’s pretty bright, and can expand something like “m-v-b” into multiple-value-bind, but will give a list of completions for ambiguous results. More generally, running a spell checker on inputted text could work out well (I’ve not yet tested this).

As far as an ideal completion system goes I have a few thoughts. It would:

1. Include everything listed in the blog entry. Sounds good to me. :)

2. Be clickable. This is such an easy yet unobtrusive feature to add, and I’m willing to bet money that someone, somewhere, will want to select a result with the mouse.

3. Deal gracefully even with omitted verbs, although of course including them in the completion it displays. Like many posters have said, it’s silly not to accept “firefox” when the user’s likely meaning is so obvious. This is just the autocompletion of verbs.

4. For equally ranked results from the completion of ambiguous commands, display the most used matches. I know, I know, it’s trouble for habits. But the alternative is to display matches in alphabetical order or something, which is useless if there are thousands of commands on the system. I’d rather be able to type “o f” or even “f” and get firefox as the top completion, rather than “faac” (the first completion for “f” in Bash on my system), which I’ve never even heard of. Coupled with clickability, this is also functionally equivalent to Windows XP’s frequently-used-apps list.

* The Superior Lisp Interaction Mode for Emacs — an Emacs mode for writing Lisp code. http://common-lisp.net/project/slime/.



Todd Liberty

There are many good ideas listed so far, but I want to add my 2p. The reason I came back to this website is I have SQL Server installed on my PC and out of the many many application installed beginning with “SQL Server” the primary program that I use never shows up anywhere on a list until I type “sql s”, any irregardless how many times I open them. This frustration brought me to search for a solution for a tool that should taken for granted. I am finding myself fighting the tool when it should be a natural extension of my intentions.

Some my suggestions:
1. Ability to define an alias for applications.

2. Learn usage patterns and generate lists based on usage. Another blog topic railed against MS implementation of the dynamic menus in the Office product, which I agree is not very usable. However, the dynamically updated list of programs on the start menu is a useful feature. In fact, in my particular case it is more useful than enso. This requires me to think about different ways to open each application, which is not very efficient.



Steve

So, enso. Any word on what’s going to happen?



Kevin Hill

On the object->verb or verb->object debate…
English is a verb first language (well, as long as the subject is implied as we all implicitly seem to agree should be the case), so from a ‘newbie’ standpoint, verb->object wins (at least outside the hindi world which uses verb last naturally)

However, I think object->verb is favored by everyone because we live in an application centric computing invironment, so you gain the most information about specifying the application (object) first.

My computer has dozens of applications, and basically I do two things with them; open them and close them. Then i use app specific commands or buttons. As long as this is the case, defining the application first will always give you more information (and therefore be quicker and ‘smarter’).

If you want to make things both quick AND English friendly, Enso needs to be action oriented. I don’t want to ‘open’ firefox, I want to ‘read lifehacker.com’ or i want to ‘learn about russia’ or ‘draw a picture’ or ‘check email’

Here the verb actually tell us something. I can ‘read’ web pages and documents, but not images. Now any autocomplete would be given information about the possible following objects and be able to react appropriately with less chance of annoying errors.

Odd thing is, that this might make it harder to translate enso into different languages like hindi because now you not only have to change the words, but the grammar/thought process behind it.



Kevin Hill

and on habits….
Habits are a dangerous thing to have a computer adapt to because all sorts of variables that effect habits can change without the computer realizing it such as

-users. my girlfriend and I use the same computer, but might have drastically different habits, do we need to log out each time just because of that?

-time/day. If i use a computer during work hours my habits might be very different than if I use the same computer in my personal time. this is especially important when thinking about mobile computing

-context. if i have window A already open, my habit or first impulse might be different than if window B is open

I also use launchy and like that it remembers which choice I selected, but I’m a bit wary of my computer trying to be too smart for itself.


I think Enso needs to have the command manual visible while in the Enso mode, by using radial, or pie menus. Each Enso command would be given a position, and could be put into clusters/groups by the user, the menu could also be sorted/arranged in different ways, such as popularity, latest used, user-arranged, by category. There could also be an option to search the commands, that would work in a similar way Enso works now. Hapı Zlfvbh


In some situations it’s quicker to use the mouse, rather than type. I suggest a combination of mouse & keyboard to access Enso commands to reduce the amount of letters typed.



Sex

I think Enso needs to have the command manual visible while in the Enso mode, by using radial, or pie menus. Each Enso command would be given a position, and could be put into clusters/groups by the user, the menu could also be sorted/arranged in different ways, such as popularity, latest used, user-arranged, by category. There could also be an option to search the commands, that would work in a similar way Enso works now.


MBT situation of Chinese workers on the continent has a poor prognosis, with 60 percent during fatigue and mens belts 76 percent in cheap gucci belts sub-health preserved. Discount Shoes MBT eighty percent of workers now regularly eat, sleep and often feel tired. 23 percent skip breakfast. 20 percent eat fast cheap louis vuitton belts for men food without a regular supply of adequate quantities of fruits and vegetables. 54 percent did not get enough sleep. cheap desiger belts 32 percent have a bad night’s sleep. Only 46 percent of white-collar practice, sometimes. 20 percent gucci belts on sale are lonely and 70 per cent of them have no sense of louis vuitton belts cheap fulfillment and happiness, according to the report. unhealthy lifestyle is the main cause of new MBT cardiovascular disease and diabetes. However, the report presents a better understanding of health, 68 percent of respondents felt it necessary to do a health check on a regular basis, said Hang Xiaohong, director of Beijing the Health Protection Association. The report is based on the results of three million health checks conducted in 15 cities in mainland China tanks


Thanx admins good posted


What Makes a Good Autocomplete?


The problem is that anybody who has tried to set both a digital watchsex izle and an analogue watch doesn’t actually think that digital watches are a “pretty neat idea”. porno izle They’re just too hard to use. I’m convinced thatseks izle half of the travel dread I feel is caused by the trepidation of having to re-set my watch by porno mashing


fgaxWe hope to enable businesses to highlight the qualities that make their locations stand out through professional, high-quality imagery.”


i don’t use autocomplete.. it’s borring


thnks
goooooooooooood
min:)ااا


You put your close friends information for shipping address.


Great article and straight to the point. I don’t know if this is actually the best place to ask but do you people have any thoughts on where to hire some professional writers? Thanks :)


my family would always like to go on ski holidays because it’s extremely enjoyable;


This post is truly a pleasant one it assists new net users, who are wishing for blogging.


One more thing that I desire to share at this place is that, doesn’t matter what you are using free blogging service except if you don’t update your website on on a regular basis basis then it’s no more attraction.


Sports drinks provide hydration and energy through common ingredients such as water, glucose-fructose syrups, sugar, salt, potassium, fish oil and citric acid. At the end of the manga DQ provided a glossary of terms describing the usage of the honorifics.


I am sorry for any enormous look at, however I am definitely warm the popular Zune, and also anticipation this approach, together with the wonderful ratings some other type of people have composed, just might help you determine whether it’s solution you’re looking for.


Hi Dear, are you truly visiting this web site on a regular basis, if so after that you will absolutely get fastidious knowledge.


Highly descriptive blog, I loved that a lot. There has to be a part Two?


Great post, are you looking for real estate in Casselberry, FL? Learn where the deals are, get REO lists and find town properties for sale in Oviedo.


Do you have a spam problem on this website; I also am a blogger, and I was curious about your situation; we have created some nice practices and we are looking to exchange strategies with others, why not shoot me an email if interested.


I’ve read a few good stuff here. Certainly worth bookmarking for revisiting. I wonder how much effort you put to make such a wonderful informative web site.


you might have an awesome blog right here! would you wish to make some invite posts on my weblog?


Hi there, i read your blog occasionally and i own a similar one and i was just wondering if you get a lot of spam remarks? If so how do you reduce it, any plugin or anything you can recommend? I get so much lately it’s driving me crazy so any assistance is very much appreciated.


computer repairs



sohila zadran

Howdy would you mind sharing which blog platform you’re working with? I’m planning to start my own blog soon but I’m having a hard time choosing between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your design and style seems different then most blogs and I’m looking for something completely unique. P.S My apologies for being off-topic but I had to ask!


Currently it seems like WordPress is the best blogging platform out there right now. (from what I’ve read) Is that what you are using on your blog?


Howdy this is kind of of off topic but I was wanting to know if blogs use WYSIWYG editors or if you have to manually code with HTML. I’m starting a blog soon but have no coding know-how so I wanted to get advice from someone with experience. Any help would be enormously appreciated!


Hey there! I know this is somewhat off topic but I was wondering which blog platform are you using for this site? I’m getting tired of WordPress because I’ve had issues with hackers and I’m looking at alternatives for another platform. I would be fantastic if you could point me in the direction of a good platform.


Hola! I’ve been following your weblog for some time now and finally got the bravery to go ahead and give you a shout out from Humble Tx! Just wanted to tell you keep up the excellent work!


Woah! I’m really loving the template/theme of this site. It’s simple, yet effective. A lot of times it’s very difficult to get that “perfect balance” between usability and appearance. I must say you’ve done a excellent job with this. Additionally, the blog loads very fast for me on Opera. Superb Blog!


Hello! This is my 1st comment here so I just wanted to give a quick shout out and say I really enjoy reading through your articles. Can you suggest any other blogs/websites/forums that go over the same subjects? Thanks a lot!


Good post however , I was wondering if you could write a litte more on this topic? I’d be very grateful if you could elaborate a little bit more. Thanks!


Hey there! Someone in my Myspace group shared this website with us so I came to look it over. I’m definitely loving the information. I’m book-marking and will be tweeting this to my followers! Excellent blog and amazing design.


A person essentially lend a hand to make seriously articles I would state. That is the very first time I frequented your website page and to this point? I amazed with the analysis you made to make this particular publish extraordinary. Magnificent activity!


I know this if off topic but I’m looking into starting my own weblog and was curious what all is needed to get setup? I’m assuming having a blog like yours would cost a pretty penny? I’m not very web savvy so I’m not 100% sure. Any tips or advice would be greatly appreciated. Kudos


I am curious to find out what blog platform you have been working with? I’m experiencing some small security issues with my latest website and I’d like to find something more safeguarded. Do you have any recommendations?


Woah! I’m really digging the template/theme of this blog. It’s simple, yet effective. A lot of times it’s hard to get that “perfect balance” between usability and visual appearance. I must say you have done a awesome job with this. In addition, the blog loads extremely quick for me on Chrome. Excellent Blog!


Hi there! This is my first comment here so I just wanted to give a quick shout out and say I genuinely enjoy reading your articles. Can you recommend any other blogs/websites/forums that cover the same subjects? Appreciate it!


Hiya! Quick question that’s totally off topic. Do you know how to make your site mobile friendly? My blog looks weird when browsing from my iphone4. I’m trying to find a theme or plugin that might be able to correct this problem. If you have any suggestions, please share. With thanks!


Fantastic post but I was wanting to know if you could write a litte more on this subject? I’d be very thankful if you could elaborate a little bit more. Many thanks!


Hey! I know this is kinda off topic but I was wondering which blog platform are you using for this website? I’m getting tired of WordPress because I’ve had problems with hackers and I’m looking at options for another platform. I would be fantastic if you could point me in the direction of a good platform.


Hi would you mind sharing which blog platform you’re using? I’m going to start my own blog in the near future but I’m having a hard time choosing between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your layout seems different then most blogs and I’m looking for something unique. P.S Apologies for being off-topic but I had to ask!


I am curious to find out what blog system you have been utilizing? I’m having some minor security issues with my latest website and I would like to find something more risk-free. Do you have any recommendations?


Please let me know if you’re looking for a article author for your weblog. You have some really good posts and I feel I would be a good asset. If you ever want to take some of the load off, I’d love to write some articles for your blog in exchange for a link back to mine. Please shoot me an e-mail if interested. Thanks!


I know this if off topic but I’m looking into starting my own blog and was wondering what all is required to get set up? I’m assuming having a blog like yours would cost a pretty penny? I’m not very internet savvy so I’m not 100% certain. Any recommendations or advice would be greatly appreciated. Cheers


Admiring the hard work you put into your blog and detailed information you present. It’s awesome to come across a blog every once in a while that isn’t the same out of date rehashed information. Fantastic read! I’ve saved your site and I’m adding your RSS feeds to my Google account.



sohila zadran

Excellent blog! Do you have any hints for aspiring writers? I’m hoping to start my own blog soon but I’m a little lost on everything. Would you advise starting with a free platform like WordPress or go for a paid option? There are so many choices out there that I’m completely confused .. Any recommendations? Thanks!


With havin so much written content do you ever run into any problems of plagorism or copyright violation? My blog has a lot of completely unique content I’ve either written myself or outsourced but it appears a lot of it is popping it up all over the internet without my permission. Do you know any techniques to help stop content from being stolen? I’d definitely appreciate it.


Please let me know if you’re looking for a writer for your weblog. You have some really great articles and I feel I would be a good asset. If you ever want to take some of the load off, I’d love to write some material for your blog in exchange for a link back to mine. Please send me an email if interested. Thank you!


Appreciating the persistence you put into your blog and detailed information you present. It’s nice to come across a blog every once in a while that isn’t the same outdated rehashed material. Wonderful read! I’ve bookmarked your site and I’m including your RSS feeds to my Google account.


Hey there! I know this is kind of off topic but I was wondering which blog platform are you using for this website? I’m getting sick and tired of WordPress because I’ve had problems with hackers and I’m looking at options for another platform. I would be fantastic if you could point me in the direction of a good platform.


article is very nice and unique. thank you. Artikel kesehatan cari tahu tentang Cara mengobati cacar air


Simply have to condition your personal article is usually as incredible. The particular lucidity within your setup is just great along with i am going to presume you might be informed with this particular subject.


Don’t forget to tap into your personal life as soon as searching to acquire more likes on Facebook.


This can be a great go through personally, Must admit that you are the most effective writers We previously observed. Thank you for submitting this information.


Most powerful, I just given this to a colleague who was doing a little study on this. And he actually bought me breakfast as a result of I found it for him . . smile. So let me reword that: Thnx for the deal with! But yeah Thnkx for spending the time to discuss this, I feel strongly about it and love learning more about this topic. If achievable, as you turn into expertise, would you mind taking updating your weblog with more information? This, AOS is very useful for me. Big thumbs up for this blog put up!


Finally, a topic that fascinates me. That I am looking for information of this caliber for several hours. Your site is greatly appreciated.


I was impressed with the quality of information on this site. There are many great resources here. I am sure I will visit this place soon.


I admire the valuable information you offer in your articles. I will mark your blog and my children check here often. I am sure they will learn lots of new things here than anyone else!


The beauty of these blogging engines and CMS platforms is the lack of limitations and ease of manipulation that allows developers to implement rich content and skin the site in such a way that with very little effort is how I see it makes this site tick all without limiting content and effectiveness.


This is the perfect blog for anyone who wants to know about this topic. You know so much it s almost difficult to argue with you (not that I really want . haha). You definitely put a new spin on a topic that has been written over the years. Great stuff, just great!


This is a smart blog. I m serious. You have so much knowledge about this issue, and so much passion. You also know how to make people rally behind it, obviously from the responses. You have a design here that is not too flashy, but makes up for what you say statement. Great job, in fact.


What you say is absolutely true. I know that everybody must say the same thing, but I think you put it in a way that everyone can understand. I also love the images you put in here. They are very fit with what you say. I m sure you ll reach so many people with what you say.


Simple, beautiful what you have done here. It is pleasing to look you express from the center and your clarity on this important content can be easily searched. As incredible and welcome your future updates.


Ah, this is a great message. In theory I d like to write like this too taking time and real effort to make a good article . but what can I say . I procrastinate a lot and never do anything.


Let me start by saying wonderful message. Not sure if this has been discussed about, but when using Chrome I can never get the entire site to load without refreshing many times. Could be my computer. Thank you.


I can see that you put a lot of effort into your blog. Keep posting the good work. Some really helpful information in there. Bookmark. Nice to see your site. Thank you!


Great stuff from you, man. I ve read your stuff before and you re too awesome. I love what you ve got here, love what you say and how you say it. You make it enjoyable and you still can stay smart. I can not wait to read more from you. It is really a great blog.


Resources such as you mentioned here will be very useful to me! I will post a link to this page on my blog. I am sure my visitors will find that the most useful.


I think it would be a boring old post, but it really compensated for my time. I will post a link to this page on my blog. I am sure my visitors will find that the most useful


Great post! ? I started out in the media community management marketing and trying to learn how to do it well resources like this article very helpful. As our company is based in the U. S. , it? S all a bit new to us. The example above is something that worries me as well, how to show your enthusiasm and share the fact that your product is useful in this regard


Hrmm that was weird, my comment feed. However, I would say it is good to know that someone else also mentioned this as I had trouble finding the same information elsewhere. This was the first place that gave me the answer. Thank you.


I must admit that this is one great insight. Of course, giving the company the opportunity to get on the ground floor and really take part in creating something special and tailored to their needs.


Hey, just looking around some blogs, seems an excellent platform you are using. I m currently using WordPress for a few of my sites but looking to change one of them similar to yours as a test platform. Anything in particular you would recommend about it?


This is a really good read for me, must admit that you are one of the best bloggers I saw. Thanks for posting this informative article.


Has a very useful blog I have been here reading for about an hour. I am a newbie and your success is very much an inspiration for me.


This article gives the light in which we can observe the reality. It is very nice and gives in depth information. Thank you for this wonderful article


Keep em coming . you all do a great job at such concepts . can not tell you how much I, for one appreciate all you do!


Thank you for taking the time to discuss this, I feel strongly about and want to learn more about this topic. If possible, as you gain experience, would you mind updating your blog take with more information? It is extremely useful for me.


Hi webmaster, commentators and others! Blog is absolutely fantastic! Plenty of information and inspiration, both of which we all need! B Keep em coming . you all do a great job at such concepts . I can not tell you how much I, for one appreciate all you do!


Have you ever considered adding video to your blog to keep the audience more entertained? I mean, I just read the whole article of your and it was quite good but since I m more of a visual learner, I found that to be more helpful well let me know how it turns out! I love what you guys are always up too. The clever work and reporting! Keep up the good work I have added you to my blogroll. This is a great article thanks for sharing this informative information . . I will visit your blog regularly for some latest post.


Pretty good post. I just stumbled upon your blog and wanted to say that I really enjoyed reading your blog. Either way I subscribe to your feed and I hope you post again soon.


Thank you so much for writing all of the excellent information! Looking forward to checking out more posts!


Wow, this is a post that is really good quality. In my theory, ODA to write like this too, time and real effort to make a good recovery after IA. but what can I say. Procrastinate a lot and never appear to get something done.


This post is quite interesting. I really never thought I could have a good read by this time until I found this site. I am grateful also very well written given. your information. Thanks to both post. From ton comments on your articles, I guess I am not the only one having all the fun here! Keep up the good work.


Interesting topic for a blog. I have searched the Internet for fun and came across your website. Fantastic post. Thank you for sharing your knowledge! It s good to see that some people still put effort into managing their websites. I will make sure


I am very satisfied with this post you have given us. This is really good work done by you. Thank you and looking for more posts


I must say that I was impressed. Very rarely do I come across a blog that is both educational and entertaining touch. Just letting you know that you have most definatly hit the nail on the head. Your mind is ideal. Thx is all I can say.


Most powerful, just give it a colleague who was doing a little research this. And he actually bought me breakfast as a result of I found it for him . . smile. So let me rephrase that: Thnx for the deal with! But yeah Thnkx for spending the time to discuss this, I feel strongly about and want to learn more about this topic. If achievable, as you become experience, would you mind updating your blog with extra details? Which in turn is very useful for me. Big thumbs up for this blog put up!


In fact, I learned about all this, but with that in mind, I think it is still useful. Good work!


With the whole thing that seems to be developing within subjects, all scenes are generally quite refreshing. Even so, I apologize, but I can not subscribe to the whole plan, all be it exhilarating nonetheless. Looks like all your opinions are generally not completely justified and in reality you are generally yourself not really fully convinced of the argument. In any case, I do not appreciate a look.


I see you put a lot of work on this site! Keep writing!


Although I am not a noob in the website industry, your site is really unique and has some useful ideas. Enjoy it fully! I ll put on my blogroll I think it will give more value to visitors.


An interesting dialogue is worth comment. I think you should write extra on this subject, it will not be a taboo subject but generally people are not enough to talk about these issues. To the next. Hail


I was impressed with the quality of information on this site. There are many great resources here. I am sure I will visit this place soon.


I was very encouraged to find this site. I want to thank you for this special read. I definitely enjoyed every bit of it and I ve marked you to check out new stuff you write.


I admire the valuable information you offer in your articles. I will mark your blog and my children check here often. I m sure they will learn lots of new things here than anyone else!


“%KW%”


Super blog post, I count on updates by you.


It is a great resource that you are providing and you give iat away for free. I enjoy seeing websites that understand the value of providing a quality resource for free. I really loved reading your post. Thank you!


I was impressed with the quality of information on this sitae. There are many great resources here. I am sure I will visit this place soon.


“%KW%”


I see you put a lot of work on this site! Keep writing!


With the whole thing that seems to thrive in the subjects, all your perspectives are usuaally quite refreshing. Even so, I apologize, but I can not subscribe to the whole plan, all be it exhilarating nonetheless. It seems everyone that your opinions are not entirely justified and, in fact, usually do not really trust fully the argument. Anyway thank examined.


Hello I found your blog by mistake when i was searching AOL for this matter, I must teall you that your blog is really helpful I also love the design, which is cool!


Does a person know rider photocopying an article not in of a magzine would live careful copyright infringement? Thanks :-). Okay, at the present that I perceive a quantity of of the answers I’m going to adjoin a number of information. What if I bought the magazine myself, complete the copies to be meant for myself, other than next gave the magazine to a friend (not for money)? Thanks..


Je avoue, je ne ai pas été sur cette page Web dans une longue taime. Mais ce est un autre plaisir de voir Ce est un sujet essentiel et ignoré par si nombreux, même les professionnels. Je vous remercie pour aider à rendre les gens plus conscients du possible trucs issueExcellent comme typique.


Manatap banget. Saya suka. :D


I have recently started a website, the info you offer on this site has helped me greatly. Thanks for all of your time & work.


Thank you for sharing with us, I conceive this site actually stands out : D.


It may be possibly to read without vowels, but switching your mindset to writing


اخبار متكاملة اول باول


The subsequent time I learn a blog, I hope that it doesnt disappoint me as a lot as this one. I imply, I know it was my choice to read, but I truly thought youd have something attention-grabbing to say. All I hear is a bunch of whining about something that you possibly can fix if you werent too busy on the lookout for attention.


hello!,I love your writing so a lot! proportion we communicate extra approximately your article on AOL? I need a specialist in this space to resolve my problem. Maybe that is you! Looking ahead to peer you.


Thanks in support of sharing this type of good thought, paragraph is fastidious, thats why i have got read it entirely


physically different places and are forced to duplicate a lot of things. Applications don’t have such an excuse— Alamat Dokter BPJS


Hadiah pertama bagi yang melakukan kebaikan adalah kebaikan. Gambar Vagina


foto memek bugil Hadiah pertama bagi yang melakukan kebaikan adalah kebaikan. foto memek tembem


2 – Reutilizar: Quase tudo pode ser reutilizado. Embalagens, papéis, vasilhames, vidros… até móveis! É só usar a imaginação! Vamos dar alguns exemplos adiante.
women’s timberlands 6-inch camouflage boot-wheat black http://www.yellowtimberlandboots.com/Men's-Timberland-6-Inch-Premium-Boots.html


If this were done in the United States it would result in a coup.
b.zero1 bague bvlgari 18k r茅plique http://www.serpentijewelry.nl/fr/bulgari-bzero1-18k-yellow-gold-3band-ring-an191023-p751/


You should continue macro shot of flowers, it is such a great way to expand creativity with photography ~ your shots inspire me to want to go out and shoot more macros 🙂
b.zero1 anneau bvlgari femmes imitation http://www.top-bulgari.ru/fr/replica-bvlgari-bzero1-3band-ring-18k-white-gold-p754/


This is really very amazing.this is very great information.i really appreciate this.here is detail about


We’d like to open this up to the community and see what sort of discussion we can have about autocomplete, autocomplete algorithms, and rubrics for judging them. What autocompletes out there do you love, and which do you hate? What makes them good, and what makes them bad?


Leave a Comment