MeatballWiki |
RecentChanges |
Random Page |
Indices |
Categories
While
CamelCase has been a 'manual' constraint for encouraging
AccidentalLinking,
FreeLinks do not benefit from a constraint that encourages people to link to similar pages. As a result,
FreeLink wikis often have redundant pages covering the same topic. What's needed is a way of constraining
FreeLinks so they unify into a coherent namespace.
One TechnologySolution is to do link auto completion through AJAX. While the author is typing in a link, you can use Javascript + XmlHttpRequest? to ask the server for all pages that might conform to that pattern. The user can select one from a drop list (or keep typing). For a live example, see [Google Suggest].
By seeing other pages with similar names, the author will naturally want to pick a page that already exists. One modification to this on top of normal auto-completion is to not select pages alphabetically only, but all pages that match the string. So 'foo' would match both 'foobar' and 'barfoo' and 'barfoobaz'. Alternatively, you can list all pages that include the set of words in the link. So 'foo bar baz' would match 'bar baz foo' and 'baz fred barney wilma foo'.
You can also use PorterStemming to unify keywords.
This segment of this page originated on the CacheableCustomizability page.
- What exactly are you prototyping? What group is working on this? It'd be great to pool information on this page, especially as our problem domains seem to overlap quite well. -- ChrisPurcell
I'll try to craft as exact an answer as I can over the next week or so. One of the reasons that this will take so long is that the company I work with participates in Canada's Scientific Research & Experimental Development programme. In this capacity, we strive to build prototype applications of emerging technologies that are as general as possible, but that still apply our core strengths to pushing back the Constraints that our Clients encounter. Since we strive for general solutions, its not always clear, in the early stages, exactly what any specific prototype will be used for.
One view of our current endeavours is "Assisted Data Entry" or "auto completion". Effectively, we want to be able to type the shortest possible snippet of a string and have the computer correctly anticipate the whole resultant string that is intended. I've found that there are a suprisingly large number of 'facets' to this 'gem' of a problem. e.g.
- Sunir's reference to GoogleSuggest?, appeared to be in the context of Page names and the related name space considerations. When we looked at it yesterday, its apparent responsiveness was sufficiently surprising (at first), that we immediately hacked together a solution that works for Canadian city names (We have very strong Address skills.) What we realized when we studied the way GoogleSuggest? operates is that there is very little 'new' technology involved in this AJAX application. What seemed to be incredible response time, turned out to be well within our reasonable expectations.
- We used MSC's SqlServer? in this case, which we frequently drive at a rate of 600-800 TPS. (i.e. about 0.6 milliseconds / transaction). Since each keystroke in the input box effectively launched a very small query that returned only the first 10 rows of the underlying SQL table, the result appears to be an 'instantaneous' "zoom" into the whole dictionary of available strings.
- This is quite useful in a number of different applications (such as suggesting page names to people who are not fully familiar with the name space). Its not a panacea, however, since theoretically, if you know the exact input string that you need to enter to retrieve a required (large) result string, then there is no need for the intermediate queries that are launched as each character is typed.
- One interesting extension of this approach is that it is not necessary to limit the query to only the initial characters of a string.
- In my personal wiki, I use CamelCase in conventional ways to create a meaningful page title. Additinally, I frequently append a set of short (2 or 2 char.) wikiWordSyllables that follow a Zz delimiter within the Title. Some of the syllables that I use, use the LibraryOfCongress? leading letters with the result that I can encode the Subject, Category, Author, Version, Source, etc. directly into the Title of the page. Clearly, if I type the 'key' syllables into an AJAX application of the type we are discussing, it can return a standardized string that could be the full URL, Page name, and any local anchors for the exact point in any page that I am interested in jumping to directly.
I better stop, since I have the distinct feeling that I am "warming up" to this subject and could easily go on far too long. Feel free to either "flee" by not responding or to prod me in whatever direction you might like this to move into. -- HansWobbe.
- First, I'd like to point you to [the Ajax Patterns wiki] - you'll probably find it a good resource even if, like me, you don't feel it's stable enough to be worth joining the community yet. Second, the new, efficient version of my code is up at the [completely cacheable MeatballWiki look-alike]; feel free to plagiarize if you find anything you like. Lastly, while I'm interested in auto-completion, it doesn't seem appropriate for this page, being increased rather than decreased server-side work. As such, we should probably set aside our specific goals and confine ourselves to implementation knowledge (like "don't use XML").
- Thanks for both of the the references.
- Do you think this material is worth keeping? If so, should we move it to a separate page?
- Do you find it best to emit declarative or imperative Javascript in response to requests? (Something like newEntry(name, date) would be declarative, as it declares data; something like createAutocompleteList(entry1, ..., entry 10) would be imperative.) I'm torn over this at the moment. -- ChrisPurcell
- I need to state that I will 'poll' the professional programmers, since I'm at best an experienced (= old) amature now, it being many years since I stopped programming for a living.
CategoryWikiTechnology CategoryUnimplementedWikiTechnology