PPT - nat friedman by pengxuebo

VIEWS: 5 PAGES: 23

									         Dashboard

Nat Friedman (nat@ximian.com)

            25 July 2003
Dashboard – What is this?
Continuous automatic search of your personal
information space
Design Goals

●   Trivial frontend integration
     • No new dependencies
     • Very few lines of code (Ideally: plugins)
●   Minimal/zero user interaction
     • No clicking
     • No manual training
●   Visualization
     • Glance, don't stare
●   Relatively trivial backend integration
Mono

●   First implementation, in C:
     • 1,000 lines of code
     • No UI
●   Second implementation, in Python:
     • 331 lines of code
     • UI: Vbox of Buttons
     • Many missing bindings (mainly GtkHTML)
     • All code must be in Python
●   Third implementation, in C#:
     ● 1,200 lines of code in engine
     ● HTML UI

     ● Typed variables

     ● Language independence for backends
Architecture
Frontend Example
  Cluepacket Structure
  <CluePacket>
    <Frontend>Evolution Mail</Frontend>
    <Context>Mail folder “Personal Mail”</Context>
    <Focused>True</Focused>
                                                                       Header
       <Clue Type="email" Relevance="10">joe@assbarn.com</Clue>
       <Clue Type="full_name" Relevance="9">Joe Shaw</Clue>           From Clue
       <Clue Type="email" Relevance="5"> jimmyk@fake.com</Clue>
       <Clue Type="full_name" Relevance="4">Jimmy Krehl</Clue>         Cc Clue
       <Clue Type="textblock" Relevance="10">
         Re: indexing in the dashboard
       </Clue>
                                                                      Subject Clue
       <Clue Type="textblock" Relevance="10">
hey,

jody pointed me to id-utils, which might be good for indexing
code. Check it out:

http://www.gnu.org/software/idutils/idutils.html                      Body Clue
i haven't looked at it in detail, so i don't know if it's suitable.

joe
    </Clue>
  </CluePacket>
Frontend Patch Example
Evolution Mail

....
+    /* Build the cluepacket */
+    context = g_strdup_printf ("Folder %s (%p)",
+                      md->folder->full_name ? md->folder->full_name : "",
+                      md);
+
+ focus_widget = md->html;
+
+    cluepacket = dashboard_build_cluepacket_then_free_clues (
+          "Evolution Mail",
+          focus_widget,
+          context,
+          dashboard_build_clue (sender_name, "full_name", 10),
+          dashboard_build_clue (sender_email, "email", 10),
+          dashboard_build_clue (subject,    "textblock", 10),
+          dashboard_build_clue (body,      "textblock", 10),
+          NULL);
+    g_free (context);
....
Pretty Overview
Architecture
Cluechaining
Finding indirect associations

 ●   Problem:
       I get an IM from “EojWahs” (my friend Joe Shaw).
      How do I find out this is the same person as “Joe
      Shaw” “joe@assbarn.com” “617-375-3800” ...?
 ●   Cluechaining:
      • Backends can return new clues
      • New clues trigger a cluepacket “rewrite”, new
      query
 ●   Attenuation
      • Backends must know how to decay clue
      relevance
 ●   Hops to live?
Frontends and Backends

Frontends                    Backends
● Gaim                     ●  Evolution AB
                           ●  Evolution Mail
● Evolution Mail
                           ●  IM logs
● Straw (RSS Aggregator)   ●  Bugzilla
● Epiphany                 ●  Amazon Music
● Emacs                    ●  Amazon Books
● X-Chat
                           ●  FOAF
                           ●  HTML Documents
● Phonemgr
                           ●  Text Documents
● Accessibility (typing/sel)
                           ●  Man pages
● GTK_MODULE               ●  Bookmarks
  (typing/sel)             ●  RSS
                           ●   HTTP-Bridge
Indexer

●   Goal:
     • Handy indexer for all user's objects
        • Documents, web pages, IM logs, ...
     • Backends can index incoming objects
●   Vectorizing indexer
     • Match relevance is dot-product
     • Basis constructed from corpus based on
     word frequency
●   Stemming
     • “Googling” to “google”
     • “Internationalizable”,”Internationalization” to
     “International”
Indexer Overview
Index/Retrieve Flow Chart
Focus: Overview

●   Goal: Show matches for active context
●   Key events:
     • User switches contexts
     • Active context changes
Focus: Implementation

●   Context focused when:
    • Widget.Visibility && XWindow.Focused
●   Frontend sends XID to Dashboard
●   Dashboard monitors Xwindows for focus
    changes
     • Libwnck
Security Issues

●   Private frontend data
     ● Passwords

     ● Network backends




●   Private backend data
     ● Example: Dashboard matches porn in front
       of your boss.
     ● (Browsers need “stealth mode” anyway.)
Computers Throw Useful Info Out

●    Where did I download this file from? Who sent it
    to me?
●    What parts of this documents were cut-n-pasted,
    and from where?
●    Is this file derived from another? Which?
●    What applications were on the screen when I
    wrote this?
●    What web pages have I visited, and what were
    they about?
●    Where did I learn about this URL? Email?
    Another web page? IM?
General Metadata Mechanism

●   Need to extract general structured data from all
    kinds of files
     • Author
     • Source
     • Summary/topic
     • Age
●   Specific data too
     • ID3 Tags
     • EXIF data
●   Need for a general desktop mechanism
     • Expose Nautilus metafiles externally
     • Ext3 Extended attributes not useful
Needle/Haystack Search

●   Haystack can contain objects of different types.
     • Not universally generalizable.
Microsoft Heading Here

●   Microsoft is coming straight after this space
     • Longhorn/FutureFS
     • MSN Search
     • Microsoft sees Google as a competitor
●   Making search a first-class part of the user
    environment
Resources

●   Source code:
     • GNOME CVS, module dashboard
●   Blog:
     • http://nat.org/dashboard
●   Mailing list:
     • dashboard-hackers@gnome.org
●   IRC:
     • #dashboard on GimpNet
●   Me:
     • Nat Friedman <nat@ximian.com>

								
To top