Scott Hanselman

Google Desktop Search - I knew they'd get it right

October 14, '04 Comments [14] Posted in Musings
Sponsored By

It's freaking brilliant.  Everyone will blog about it, and will tell you this and that.  So, instead of filling your RSS Reader with the same nonsense, I'll just offer my first impressions about what I found so clever.

  • It sets a Cookie (appears to do it in FireFox as well) that makes DESKTOP appear as a choice when you visit Google.com. 
  • The link to desktop is like: http://127.0.0.1:4664/&s=1444031046.  Notice that it's running a local Web Server on my box at port 4664.  Clever.
  • In installs a few things to C:\program files\google\Google Desktop Search including:
    • GoogleDesktopOffice.dll - To index .DOC, .XLS, etc.
    • GoogleDesktopIE.dll - To index visited sites form your IE cache.  I don't see FireFox being indexed, but it's clear they are using a plugin arch and I suspect we'll see other plugins coming.
  • As most "alpha/beta" Google stuff, it's very polished.  They've really raised the bar on what it means to pre-release software.
  • They've installed an Outlook AddIn, no doubt to get to bypass MAPI and go straight to the Outlook Object Model.  They also appear to directly index Outlook Express files on disk.
  • Your desktop results are INCLUDE with standard Google results.  They appear at the top of the page: "306 results stored on your computer."  It gets an image from your local Google Web Server which is interesting:
       GET /onebox.gif HTTP/1.0
       Accept: */*
       Referer:
    http://www.google.com/search?hl=en&q=hanselman
       Accept-Language: en-us,es-mx;q=0.7,en-gb;q=0.3
       User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR     2.0.40607)
       Host: 127.0.0.1:4664
       Connection: Keep-Alive
       Pragma: no-cache
  • OY! Google's hooked WinInet.dll I think.  This works in Opera, in FireFox, in anything.  They are grabbing all traffic that goes to Google and injecting their own stuff in the results.   When I launched Opera, I noticed that Google's two networking DLLs loaded in-proc.

It's going to change the world.  Certainly more than Segway. ;) 

Now, I hope they don't try to include Desktop AdSense.

"Looks like you're searching your hard drive for Porn! Try our sponsored links!"

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by ORCS Web
Thursday, October 14, 2004 6:15:31 PM UTC
This is so damn cool.... you must have been adding your blog entry as I sent you the email about it... hehe
John Batdorf
Thursday, October 14, 2004 7:57:19 PM UTC
"Notice that it's running a local Web Server on my box at port 4664. Clever."

I hope to god they reject queries that don't come from 127.0.0.1, then, as I don't want random strangers searching my hard drive...
Thursday, October 14, 2004 8:09:21 PM UTC
This is VERY cool. There are some troubling setup issues that I encountered that you can see on my review here:
http://www.byronprather.com/PermaLink.aspx?guid=fd7871d8-65c6-4462-92d2-bd5a417d3adb
Thursday, October 14, 2004 8:41:53 PM UTC
This is really nice. Of course having to go one step further. I set up a magicword of mygoogle in Slickrun and set it up like the default magicword for google so I get the dynamic input box. Now I don't have to have the browser open to start searching my files.

Thanks Scott, you always turn us on to the coolest stuff.
Thursday, October 14, 2004 9:20:56 PM UTC
I set it up like this in SlickRun with a magicword "find":

http://127.0.0.1:4664/search&s=1807039711?q=$W$

so I can say "find hanselman" WITHOUT the dynamic box, and it will launch the browser with the parameter included.
Scott Hanselman
Thursday, October 14, 2004 9:22:02 PM UTC
Eric, They DO reject non local queries.
Scott Hanselman
Friday, October 15, 2004 12:26:43 AM UTC
So what about searching local files, say, for that piece of code you wrote that one time, but can't remember exactly what you did. I searched for some obscure methods that I had written, and I got web history for our internal bb that I posted the code on, but not the files themselves.

I really really really want to be able to search my HD FILES for text, not just web history, email, and office documents.

Anyone have any perspective on this?
John Batdorf
Friday, October 15, 2004 3:16:32 AM UTC
John, GDS is returning local results in text files for me, even in code files. Do you have "Text and other" checked in the preferences for which files are indexed?
Friday, October 15, 2004 3:17:30 AM UTC
John,

My guess is that will come eventually, after all, it's a first beta release. What I would like to do is just be able to add which extensions are text, so I could include .cs, .aspx, .ascx, etc etc in the search - and also be able to specify extension in my search - so I could search for something like "SqlConnection ext:cs" and it would search only .cs files for the text SqlConnection. Now that would be cool.
Friday, October 15, 2004 11:35:55 AM UTC
Re: the plugin thing.

The plugin DLL's are com objects. If you run OLE/COM object viewer you can see that the "Google Desktop Search Office Addin" supports _IDTExtensibility2 & ApplicationEvents2. If you want the detail, the type info for these are below. So in short, it looks like plugins will be the order of the day ;-)

dispinterface _IDTExtensibility2 {
properties:
methods:
[id(0x00000001)]
void OnConnection(
[in] IDispatch* Application,
[in] ext_ConnectMode ConnectMode,
[in] IDispatch* AddInInst,
[in] SAFEARRAY(VARIANT)* custom);
[id(0x00000002)]
void OnDisconnection(
[in] ext_DisconnectMode RemoveMode,
[in] SAFEARRAY(VARIANT)* custom);
[id(0x00000003)]
void OnAddInsUpdate([in] SAFEARRAY(VARIANT)* custom);
[id(0x00000004)]
void OnStartupComplete([in] SAFEARRAY(VARIANT)* custom);
[id(0x00000005)]
void OnBeginShutdown([in] SAFEARRAY(VARIANT)* custom);
};

[
uuid(000209FE-0000-0000-C000-000000000046),
helpcontext(0x00000fa2),
hidden
]
dispinterface ApplicationEvents2 {
properties:
methods:
[id(0x60000000), restricted]
void QueryInterface(
[in] GUID* riid,
[out] void** ppvObj);
[id(0x60000001), restricted]
unsigned long AddRef();
[id(0x60000002), restricted]
unsigned long Release();
[id(0x60010000), restricted]
void GetTypeInfoCount([out] unsigned int* pctinfo);
[id(0x60010001), restricted]
void GetTypeInfo(
[in] unsigned int itinfo,
[in] unsigned long lcid,
[out] void** pptinfo);
[id(0x60010002), restricted]
void GetIDsOfNames(
[in] GUID* riid,
[in] char** rgszNames,
[in] unsigned int cNames,
[in] unsigned long lcid,
[out] long* rgdispid);
[id(0x60010003), restricted]
void Invoke(
[in] long dispidMember,
[in] GUID* riid,
[in] unsigned long lcid,
[in] unsigned short wFlags,
[in] DISPPARAMS* pdispparams,
[out] VARIANT* pvarResult,
[out] EXCEPINFO* pexcepinfo,
[out] unsigned int* puArgErr);
[id(0x00000001), restricted, hidden]
void Startup();
[id(0x00000002), helpcontext(0x00061a82)]
void Quit();
[id(0x00000003), helpcontext(0x00061a83)]
void DocumentChange();
[id(0x00000004), helpcontext(0x00061a84)]
void DocumentOpen([in] Document* Doc);
[id(0x00000006), helpcontext(0x00061a85)]
void DocumentBeforeClose(
[in] Document* Doc,
[in] VARIANT_BOOL* Cancel);
[id(0x00000007), helpcontext(0x00061a86)]
void DocumentBeforePrint(
[in] Document* Doc,
[in] VARIANT_BOOL* Cancel);
[id(0x00000008), helpcontext(0x00061a87)]
void DocumentBeforeSave(
[in] Document* Doc,
[in] VARIANT_BOOL* SaveAsUI,
[in] VARIANT_BOOL* Cancel);
[id(0x00000009), helpcontext(0x00061a88)]
void NewDocument([in] Document* Doc);
[id(0x0000000a), helpcontext(0x00061a89)]
void WindowActivate(
[in] Document* Doc,
[in] Window* Wn);
[id(0x0000000b), helpcontext(0x003d090a)]
void WindowDeactivate(
[in] Document* Doc,
[in] Window* Wn);
[id(0x0000000c), helpcontext(0x003d090b)]
void WindowSelectionChange([in] Selection* Sel);
[id(0x0000000d), helpcontext(0x003d090c)]
void WindowBeforeRightClick(
[in] Selection* Sel,
[in] VARIANT_BOOL* Cancel);
[id(0x0000000e), helpcontext(0x003d090d)]
void WindowBeforeDoubleClick(
[in] Selection* Sel,
[in] VARIANT_BOOL* Cancel);
};

cm
Friday, October 15, 2004 11:38:17 AM UTC
Hahah, its not a problem if I'm searching MY desktop for porn... its when my girlfriend searches MY desktop for porn that I get worried - blogged@ http://intravenous.info
Friday, October 15, 2004 3:11:29 PM UTC
The Google Desktop Search, as it stands now, is very nice and great for novices, but they need to add support for indexing particular file types, and indexing other common files (PDF, metadata from audio, images, etc.)

And they will find a way to squeeze ads in here, I'd wager they've already got a prototype that does just that.
Thursday, October 21, 2004 3:57:49 AM UTC
I like it as well, but am a bit disappointed by what you can do with GDS. I agree with above posts mentioning a few of its failings, more at:

http://www.softwareengineering.ca/jpdaigle/PermaLink.aspx?guid=209ce43f-cd77-4162-bba5-d4471110fbc3
Tuesday, October 26, 2004 2:22:49 AM UTC
Tech Details in Google Desktop Search http://twinsant124.mblogger.cn/posts/18266.aspx

Chinese in content.
Comments are closed.

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.