Google Desktop Search - I knew they'd get it right
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.
About Newsletter
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...
http://www.byronprather.com/PermaLink.aspx?guid=fd7871d8-65c6-4462-92d2-bd5a417d3adb
Thanks Scott, you always turn us on to the coolest stuff.
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.
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?
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.
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);
};
And they will find a way to squeeze ads in here, I'd wager they've already got a prototype that does just that.
http://www.softwareengineering.ca/jpdaigle/PermaLink.aspx?guid=209ce43f-cd77-4162-bba5-d4471110fbc3
Chinese in content.
Comments are closed.