{"id":112,"date":"2008-08-19T04:31:25","date_gmt":"2008-08-19T09:31:25","guid":{"rendered":"http:\/\/www.visophyte.org\/blog\/?p=112"},"modified":"2009-04-01T08:36:58","modified_gmt":"2009-04-01T13:36:58","slug":"thunderbird-contact-auto-completion-with-bubbles","status":"publish","type":"post","link":"https:\/\/www.visophyte.org\/blog\/2008\/08\/19\/thunderbird-contact-auto-completion-with-bubbles\/","title":{"rendered":"Thunderbird contact auto-completion&#8230; with bubbles!"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-113\" title=\"tb-autocompletion-proto-1\" src=\"http:\/\/www.visophyte.org\/blog\/wp-content\/uploads\/2008\/08\/tb-autocompletion-proto-1.png\" alt=\"Autocompletion screenshot\" width=\"405\" height=\"161\" srcset=\"https:\/\/www.visophyte.org\/blog\/wp-content\/uploads\/2008\/08\/tb-autocompletion-proto-1.png 405w, https:\/\/www.visophyte.org\/blog\/wp-content\/uploads\/2008\/08\/tb-autocompletion-proto-1-300x119.png 300w\" sizes=\"auto, (max-width: 405px) 100vw, 405px\" \/><\/p>\n<p>Type type type type.\u00a0 Autocomplete contact&#8230;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-114\" title=\"tb-autocompletion-proto-2\" src=\"http:\/\/www.visophyte.org\/blog\/wp-content\/uploads\/2008\/08\/tb-autocompletion-proto-2.png\" alt=\"\" width=\"623\" height=\"147\" srcset=\"https:\/\/www.visophyte.org\/blog\/wp-content\/uploads\/2008\/08\/tb-autocompletion-proto-2.png 623w, https:\/\/www.visophyte.org\/blog\/wp-content\/uploads\/2008\/08\/tb-autocompletion-proto-2-600x141.png 600w, https:\/\/www.visophyte.org\/blog\/wp-content\/uploads\/2008\/08\/tb-autocompletion-proto-2-300x70.png 300w\" sizes=\"auto, (max-width: 623px) 100vw, 623px\" \/><\/p>\n<p>Completed contact becomes a bubble!\u00a0 Bubble becomes a constraint, showing us only the messages involving the given contact.\u00a0 (The idea is that you could then click on\/select\/whatever the bubble and change the constraint to be only to\/from\/cc\/whatever if you are so inclined.)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-115\" title=\"tb-autocompletion-proto-3\" src=\"http:\/\/www.visophyte.org\/blog\/wp-content\/uploads\/2008\/08\/tb-autocompletion-proto-3.png\" alt=\"\" width=\"625\" height=\"151\" srcset=\"https:\/\/www.visophyte.org\/blog\/wp-content\/uploads\/2008\/08\/tb-autocompletion-proto-3.png 625w, https:\/\/www.visophyte.org\/blog\/wp-content\/uploads\/2008\/08\/tb-autocompletion-proto-3-600x144.png 600w, https:\/\/www.visophyte.org\/blog\/wp-content\/uploads\/2008\/08\/tb-autocompletion-proto-3-300x72.png 300w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/p>\n<p>Type type type, autocomplete, new constraint!\u00a0 Now we&#8217;re looking at all the messages involving the two given contacts.\u00a0 (Some of the messages with just one constraint were mailing list postings, but not explicitly involving the second contact.\u00a0 This listing shows only messages where both contacts were directly involved.\u00a0 We will have the ability to filter-out messages involving lists as desired, which may be desired by default in a case like this.)<\/p>\n<p>What is exciting about this?<\/p>\n<ul>\n<li>The contacts are matched using a suffix-tree implementation on a reduced set of contacts (as a first-pass).\u00a0 In this case, those with sufficient &#8216;popularity&#8217;.\u00a0 &#8216;Frecency&#8217; a la &#8216;places&#8217; is also planned.\u00a0 And of course, we can hit the database as needed.\u00a0 The suffix-tree is nice because it allows extremely rapid lookups while also allowing for substring matching.<\/li>\n<li>The contact popularity is computed automatically by the gloda indexing process, taking into account both messages you receive and send.\u00a0 (I think the current address-book code just increments popularity on send?)<\/li>\n<li>I think the bubbles are cool.\u00a0 (Hyperlink-styling would also work, but would not be cool.)<\/li>\n<li>Having the text converted into an explicit object representation (bubbles) is better than just doing string filtering (as quicksearch does) because it allows explicit actions on the object given knowledge of the object type.<\/li>\n<li>We can convert more than just contacts\/identities to explicit objects.\u00a0 As demonstrated at the summit, we have a plugin that detects bugzilla bug references in messages as well as (American\/NANP-style) phone-numbers in messages.\u00a0 We could detect these and promote them as well, etc.<\/li>\n<li>The filtered messages are being delivered by gloda, the global database (backed by SQLite), which means that we aren&#8217;t searching just one folder.<\/li>\n<li>There are a lot of places that you, the reader, will shortly be able to hack on and contribute to make this even more exciting.\u00a0 A vicious cycle of exciting-ness will ensue until <a title=\"Oakey, Moroder, a sentient computer.  What more could you want?\" href=\"http:\/\/www.youtube.com\/watch?v=r9foZ7KVSng\">everyone is dancing in the streets<\/a>.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Type type type type.\u00a0 Autocomplete contact&#8230; Completed contact becomes a bubble!\u00a0 Bubble becomes a constraint, showing us only the messages involving the given contact.\u00a0 (The idea is that you could then click on\/select\/whatever the bubble and change the constraint to &hellip; <a href=\"https:\/\/www.visophyte.org\/blog\/2008\/08\/19\/thunderbird-contact-auto-completion-with-bubbles\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[3,6],"tags":[38,19,126],"class_list":["post-112","post","type-post","status-publish","format-standard","hentry","category-mozilla","category-thunderbird","tag-exptoolbar","tag-gloda","tag-thunderbird"],"_links":{"self":[{"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/posts\/112","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/comments?post=112"}],"version-history":[{"count":3,"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/posts\/112\/revisions"}],"predecessor-version":[{"id":271,"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/posts\/112\/revisions\/271"}],"wp:attachment":[{"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/media?parent=112"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/categories?post=112"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.visophyte.org\/blog\/wp-json\/wp\/v2\/tags?post=112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}