July 30, 2004Tom Coates is writing a series of pieces "arguing that the behaviour of an until-recently small group of digital music fans seemed to be now spreading into the mainstream"... One of the first questions you have to ask yourself in any organic R&D role (which is I think how I'd characterise what I do) is am I a freak or am I an early adopter? You have to have some sense of how much your instincts and excitements are in tune with real people in the world because otherwise you cannot possibly evaluate how those people might respond to the products, concepts or propositions that you think are exciting. In this case, it's becoming fairly clear that people who are listening to digital music and in connected ways are very definitely more like early adopters than they are freaks. They're pointing in roughly the right direction.The first rambling entry is about portability and access. It's an interesting, if slightly unfocused, look at portable digital music, and the trends in miniaturization. Storage capacity is exploding, to the point or irrelevance: does it really matter whether an iPod can carry 1e5, 1e6 or 1e7 tracks? (The really interesting questions don't get asked yet. Of all the songs in the world, inclusing the hundred new today, which do you want to listen to right now, and why?) July 29, 2004
Curious Incident
Recent, recommended, reading: "The curious incident of the dog in the night-time", by Mark Haddon. Caveat lector: it's very English, and contains some of the ripest four-letter words in existence (but in totally realistic context). Here's a taster: And one day Julie sat down at a desk next to me and put a tube of Smarties on the desk, and she said, 'Christopher, what do you think is in here?' July 12, 2004July 09, 2004
V3
Getting close now: Groove Virtual Office 3.0 will be released next week... Barb Darrow at CRN has an interesting interview with Ray: Ozzie: Most significant is probably the usability of the product. We've done tremendous rework of the interface o make it much easier and lower-training cost to get people up to speed and performance is significantly improved. The other major investment is Groove File Sharing... every Windows folder now has a Groove button in it and if you press it, you turn that folder into a workspace that shares that folder with other people inside or outside the company, puts red marks on files, lets you have chats and conversations privately within that folder, it projects all the platform capabilities of Groove right into the file system. It lets people share folders across all their computers, whether at home or at work and between people who are working together.Ray told a very pragmatic story about MacOS and Linux: For both Mac and Linux, it's not a religious issue. When a customer says 'I have a big order and want to place it but I'll make it contingent on the availability of a Linux or Mac version' we'll be coding away. July 08, 2004
App-Launcher wrapup
To recap,
Now, what can you do with this? Existing applications -- anything from off-the-shelf software to custom line-of-business apps -- can easily take advantage of Groove's collaborative services. They can inherit an easy, secure, robust, decentralized way to share state between several people in a "workspace". For example, if you have built a .NET (WinForms) application for a customer-support process, which accesses an Oracle back-end, this app can also be used in small groups with a "shared context". You might use Groove's workspace services simply to store local data securely. Or, more interestingly, you might put work-in-progress documents into a Groove workspace ("underneath" your app) so that multiple users can work with them as part of your larger process. Because the workspace is Groove, those users wouldn't even need to be online to have access to the shared data. They wouldn't necessarily even need to be in the same company. So, that customer-service application might front-end Oracle... but you might want to invite the customer into your instance of the application to make a shared place for interaction. They wouldn't see the Oracle database, but your application might push some of the relevant status documents and data into the Groove distributed storage... New applications can be built on the Groove platform without any really specialized knowledge. There's a very "regular" web-services API to communicate with Groove; the rest of the app is up to you. (Personally, I want to build some games...!)
Minimal app-launcher (part two)
In part one I showed a Windows application using Groove Web Services to talk (in a very minimal way) to Groove's collaborative workspace services. Note that this is how Groove File Sharing works too: in that case, yes, GFS is a shell extension which talks SOAP to the local Groove instance. Now, how to link your application into Groove in such a way that
Security As a developer, you need to deal with some security intricacies to get this working. You gotta sign your code. There's a good reason for this: invitees into your workspace will get a copy of your executable code running on their machine, and they (or their company policy) need to decide whether that's allowed. This permission is achieved with signed code, and Groove enterprise groups can set up policies which allow or deny particular signatures by default. To sign code, there's a utility OSDSigner.exe which is part of the Groove development kit. OSDSigner takes an OSD file (which we'll see shortly) and produces a version signed with the digital certificate you supply. These certs can be self-generated, or themselves signed by a higher authority (Verisign, etc). OSD If you've built Groove tools in the past, you'll have dealt with OSD: this is the file which lists all the components of a Groove solution, and their dependencies. The OSD file tells the Groove installer how to find each component (code, graphics, etc) and how to install them on the local machine. The OSD for my minimal app has descriptions of: an "application descriptor" (XML); the actual application (.HTA, in this case) with instructions that it be installed in groove\bin\toolbin\xxx; a "create-space template" (CST), and the launchbar icons (JPG and a mask bitmap). All these files are hosted on a web server, so when any user needs to install -- for example, by being invited into a Minimal workspace -- they're available for download. The signed OSD includes the path to each component file, and its filesize, and a cryptographic digest of the file contents. The digest (hash) ensures that you're installing the "real thing", not someone's 0wned version. Bitmaps Each launchbar entry for a Minimal workspace shows an icon (in this case, hexagram 32, Hêng. For no good reason...). The icon is in two parts: a 16-by-16 JPEG colour image, and a black-and-white mask bitmap (black where the colours should show). The OSD installs my bitmaps into groove\data\ToolData\cabezal.com\Minimal\. The descriptor XML defines these images as the launchbar icon for my 'minimal' telespace-type. CST The CST file ("create-space template") tells Groove that my application should appear in the list of workspace types when a user creates a new workspace. It contains a <CreateTelespaceTemplate> element defining a Groove V3 telespace, containing a Files tool (which we're not using right now), and that the workspace type is "Minimal": Descriptor The application descriptor file actually defines your application type to Groove. It says that the telespace-type urn:cabezal.com:TelespaceTypes.Minimal has an icon; and a verb "Open" which runs my application code in cabezal.com\Minimal\Minimal.hta. Injectable Finally, I made an "injectable" (Minimal.GRV). If a user launches this GRV file, they'll install the application. The install process There are really two ways to have the app install. One is by launching the injectable; the other is to be invited into a Minimal workspace by another user. It's worth following the steps of that install process. The workspace itself is some Groove secure storage (an .XSS file and transaction-log on disk); most of the workspace is XML documents in the XSS database. The "header" document tells Groove that this is a workspace of type urn:cabezal.com:TelespaceTypes.Minimal, and that its application descriptor is at the URL http://www.cabezal.com/Minimal/Minimal.osd?Package=com.cabezal.Minimal.cst&Version=1,0,0,0 (the ResourceURL in the TemplateDescriptor in the descriptor). When an invitee installs the workspace, Groove checks the local "manifest" (an XML document listing all the components which are installed on the user's device) to see what to do with that telespace type. If the type name isn't registered yet, it looks up the ResourceURL. That pulls down some (signed) OSD, prompts the user whether to accept the code signature, and begins the download sequence which puts all the pieces on the local machine. When this install is done, the manifest gets updated, and then Groove knows how to open the telespace (using your application).
Putting these pieces together is mostly a matter of search-and-replace in a provided sample. There are several files to deal with, but really all you need is to choose
Oh, and you gotta sign your code. July 07, 2004
Minimal App-Launcher (part one)
Here's a first, minimal example of the "app-launcher" extension mechanism for Groove V3. As I hinted earlier, this is a straightforward framework that lets developers build applications integrating really nicely with the Groove launchbar and with Groove's decentralized platform -- consistent, secure, shared data models; awareness, presence, instant messaging -- without requiring the application to "live in Groove". In fact, it's possible to have a single version of your app which "knows" when it's being run from a Groove context, by having Groove launch it with a special set of commandline parameters, and use that to switch on whatever collaborative features might be important (without preventing its use as a standalone app). The standard commandline, though, is what gives your app its context. Remember, in this application model your program "has" a Groove workspace "underneath" it, and can use that workspace to share with other instances of the program running at other users' machines. Each member of the workspace (ie. anyone you invited, just as with any Groove space) has a synchronized copy of the data in the space. But when they open the workspace, instead of the Groove user interface, your application is launched. So the two basic commandline parameters are: the "IdentityURL" of the current user, and the URI of the current workspace. [There's a third -- the verb with which the application was launched -- but in my minimal sample I've no need to use that]. The URI is the Groove Web Services address of the workspace: the space can be accessed by POSTing SOAP messages to that identifier. So, here's my sample code. I've called it "Minimal". There's not even any compiled code there; the application is an HTA (DHTML and JavaScript). If you download the zip and look at the .HTA file with a text editor, you'll see how the application works. (More on that below the fold here). The app has its own icon in launchbar: although maybe the user interface of my application could use some work: Still to come in the next instalment: some words about the half-dozen support files other than the HTA. They're fairly intricate, but not scary. (I made mine almost entirely by search-and-replace from the AppLauncher sample which ships with the v3 Groove developer kit). The app When the HTA loads, it looks at its commandline, to find the two parameters given it by Groove: these are held in global variables "g_sSpaceURI" and "g_sIdentityURL". Pressing the "Space information" button calls a function ShowSpaceInfo(), which sends a SOAP packet to Groove. The packet's body is a regular SOAP envelope, with some Groove stuff in the header, and in the body an empty ReadSpace element. The packet is sent to http://localhost:9080/xxx, where xxx is the URI of the space (which we were given on the commandline).
<?xml version="1.0" encoding="UTF-8"?> Groove returns an XML fragment with information about the space: its name, and so on. HTTP/1.1 200 OK <?xml version="1.0" encoding="utf-8"?> Of course, if we wanted this sample to do anything really interesting, then building SOAP packets by hand would be a really stupid approach. It does let you see exactly what's happening, though. For a larger application, you should point your favourite development environment at the Groove-supplied WSDL and have it build you some handy proxy classes to make these calls. We're assuming that .NET is the way most people will want to do this, although the Groove dev kit comes with some perl samples, and I'd hope to see some examples using Python and Java sometime too. July 02, 2004
GFS
One great feature of Groove V3 is folder-synchronization workspaces. These are just Windows folders -- on your desktop, or anywhere else on the filesystem -- which are also Groove workspaces. On the one hand, they behave like Windows folders. You can open them, drop files into them, doubleclick files to launch them, and so on. And on the other hand, they behave like Groove workspaces. You can invite people to them; those invitees get their own synchronized copy. Any changes in your local version are securely shared with the other members (and you don't need to be online at the same time, it just works). Anything they do, you see. New or changed items in the workspace show an "unread" flag. Groove pops up a little notifier when there's new content, or when people enter the workspace. You can even control whether you download all files automatically, or you want to manually download files over a certain size when it's most convenient. There's a little sidebar showing whether the members of the space are online. Doubleclick one of the members to send them an instant message. Open the chat pane and chat with them. These workspaces are listed on the Groove launchbar, just like "normal" Groove spaces. Doubleclick the launchbar entry, and the folder opens.
It's also a really significant view of what Groove's platform services are all about. We took a familiar user environment - Explorer - and outfitted it with Grooviness, to create a seamlessly shared environment which is at the same time completely familiar and normal, yet also enabled for collaborative groups to work in. Now you can do this too. (By you, I mean you-if-you-build-software-of-any-sort). The kind of extensions to Explorer are available to YourApplication really transparently and quite easily. The V3 GDK includes a sample called "AppLauncher", which I'll talk about in some detail next. July 01, 2004 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
vcard
archives: January 2005 December 2004 November 2004 October 2004 September 2004 August 2004 July 2004 June 2004 May 2004 April 2004 March 2004 February 2004 January 2004 December 2003 November 2003 October 2003 September 2003 August 2003 July 2003 June 2003 May 2003 April 2003 March 2003 February 2003 January 2003 December 2002 November 2002 October 2002 September 2002 August 2002 July 2002 June 2002 May 2002 April 2002 March 2002 February 2002 January 2002 December 2001 November 2001 October 2001 September 2001 August 2001 July 2001 June 2001 see also: {groove: [ ray, matt, paresh, mike, jeff, john ], other: [ /* more blogroll to follow */ ] } The views expressed on this weblog are mine alone and do not necessarily reflect the views of my employer. RSS 2.0 RSS 1.0 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||