<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>Barnaby James</title>
<link rel="alternate" type="text/html" href="http://blogs.adobe.com/barnaby.james/" />
<modified>2007-09-07T21:57:33Z</modified>
<tagline>Barnaby James works as an Engineer on Acrobat Collaboration, Web Service and Syndication technologies.</tagline>
<id>tag:blogs.adobe.com,2009:/barnaby.james//26</id>
<generator url="http://www.movabletype.org/" version="3.38">Movable Type</generator>
<copyright>Copyright (c) 2007, bajames</copyright>
<entry>
<title>Final Post</title>
<link rel="alternate" type="text/html" href="http://blogs.adobe.com/barnaby.james/2007/09/final_post.html" />
<modified>2007-09-07T21:57:33Z</modified>
<issued>2007-09-07T21:51:47Z</issued>
<id>tag:blogs.adobe.com,2007:/barnaby.james//26.4047</id>
<created>2007-09-07T21:51:47Z</created>
<summary type="text/plain">Although it doesn&apos;t seem possible for me to post to this blog any less frequently, I think I&apos;ve found a way. Today is my last day at Adobe which means this blog will no longer be maintained and comments will...</summary>
<author>
<name>bajames</name>
<url>http://blogs.adobe.com/barnaby.james</url>
<email>Barnaby.James@adobe.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.adobe.com/barnaby.james/">
<![CDATA[<p>Although it doesn't seem possible for me to post to this blog any less frequently, I think I've found a way. Today is my last day at Adobe which means this blog will no longer be maintained and comments will no longer get approved. I've had 6 great years at Adobe and really enjoyed the people I've worked with and the projects I've worked on.</p>]]>

</content>
</entry>
<entry>
<title>Make Magazine on PDFCasting</title>
<link rel="alternate" type="text/html" href="http://blogs.adobe.com/barnaby.james/2007/01/make_magazine_o.html" />
<modified>2007-01-22T20:53:00Z</modified>
<issued>2007-01-22T21:02:06Z</issued>
<id>tag:blogs.adobe.com,2007:/barnaby.james//26.2395</id>
<created>2007-01-22T21:02:06Z</created>
<summary type="text/plain">O&apos;Reilly Make Magazine has a great article - &quot;The complete guide to PDFs in iTunes&quot;. The title is maybe a little misleading because it&apos;s really about subscribing to PDFs using any RSS aggregator that supports enclosures - a.k.a PDFCasting -...</summary>
<author>
<name>bajames</name>
<url>http://blogs.adobe.com/barnaby.james</url>
<email>Barnaby.James@adobe.com</email>
</author>
<dc:subject>Subscription</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.adobe.com/barnaby.james/">
<![CDATA[<p>O'Reilly Make Magazine has a great article  - <a href="http://www.makezine.com/blog/archive/2007/01/the_complete_gu.html?CMP=OTC-0D6B48984890">"The complete guide to PDFs in iTunes"</a>. The title is maybe a little misleading because it's really about subscribing to PDFs using any RSS aggregator that supports enclosures - a.k.a PDFCasting - of which iTunes is a popular one. <a href="http://blogs.adobe.com/barnaby.james/2006/09/pdfcasting_with.html">As I mentioned earlier</a>, the free Adobe Reader 8.0 (and Acrobat 8.0) also support PDFCasting via the Tracker. </p>
]]>

</content>
</entry>
<entry>
<title>Adobe Tracker</title>
<link rel="alternate" type="text/html" href="http://blogs.adobe.com/barnaby.james/2006/12/adobe_tracker.html" />
<modified>2006-12-08T16:33:40Z</modified>
<issued>2006-12-08T16:28:12Z</issued>
<id>tag:blogs.adobe.com,2006:/barnaby.james//26.2195</id>
<created>2006-12-08T16:28:12Z</created>
<summary type="text/plain">John Dowell pointed me to a post on LifeHacker about the new Tracker in Reader / Acrobat 8.0 - I wrote about the motivation for having an RSS aggregator in Reader for PDFCasting previously....</summary>
<author>
<name>bajames</name>
<url>http://blogs.adobe.com/barnaby.james</url>
<email>Barnaby.James@adobe.com</email>
</author>
<dc:subject>Subscription</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.adobe.com/barnaby.james/">
<![CDATA[<p><a href="http://weblogs.macromedia.com/jd/">John Dowell</a> pointed me to a post on LifeHacker <a href="http://lifehacker.com/software/adobe-acrobat/use-adobe-reader-8-as-an-rss-reader-220060.php"> about the new Tracker in Reader / Acrobat 8.0 </a>- I wrote about the motivation for having an <a href="http://blogs.adobe.com/barnaby.james/2006/09/pdfcasting_with.html">RSS aggregator in Reader for PDFCasting</a> previously.</p>]]>

</content>
</entry>
<entry>
<title>Acrobat / Reader 8.0 REST Web Service support</title>
<link rel="alternate" type="text/html" href="http://blogs.adobe.com/barnaby.james/2006/12/acrobat_reader.html" />
<modified>2007-08-31T06:33:06Z</modified>
<issued>2006-12-07T17:38:46Z</issued>
<id>tag:blogs.adobe.com,2006:/barnaby.james//26.2182</id>
<created>2006-12-07T17:38:46Z</created>
<summary type="text/plain">Acrobat / Reader 8.0 has improved support for JavaScript networking which makes it easy to communicate with XML web services when combined with new support for XML processing. SOAP Web Services have been supported since Acrobat / Reader 6.0 however...</summary>
<author>
<name>bajames</name>
<url>http://blogs.adobe.com/barnaby.james</url>
<email>Barnaby.James@adobe.com</email>
</author>
<dc:subject>Web Services</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.adobe.com/barnaby.james/">
<![CDATA[<p>Acrobat / Reader 8.0 has improved support for JavaScript networking which makes it easy to communicate with XML web services when combined with new support for XML processing. SOAP Web Services have been supported since Acrobat / Reader 6.0 however support for HTTP networking makes it possible to develop clients for a wider array of protocols - for example <a href="http://www.webdav.org/">WebDAV</a>, the <a href="http://www.ietf.org/html.charters/atompub-charter.html">Atom Publishing Protocol</a> and other types of RESTive services like the <a href="http://mcmanus.typepad.com/grind/2006/11/a_web_services_.html">Approver.com API</a>. <a href="http://www.ecma-international.org/publications/standards/Ecma-357.htm">ECMAScript for XML</a> (E4X) greatly simplifies producing and consuming XML messages which is really useful when interacting with XMLweb services.</p>
<p>Many of the collaboration workflows in Acrobat (for example the Review Initiation wizards) are developed in JavaScript because it's a more rapid development environment. As a result, we are also a customer of the JavaScript APIs that we add and the new Net.HTTP object is a good example of this. </p>
]]>
<![CDATA[<h3>E4X Support</h3>
<p>Reader uses the Mozilla Spidermonkey JavaScript engine (it's also used by the Firefox web browser) and they recently added support for E4X - ECMAScript For XML. It allows you to imbed XML directly in your JavaScript, parse XML to a DOM, manipulate an XML DOM and  serialize a DOM back to XML. E4X is also supported by the Flash Player ActionScript engine since version 9.0. <br>
  <br> 
  In the past, creating XML messages in JavaScript involved concating strings together like this:
</p>
<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
<tr><td><pre><code>var msg = "This is a bad way to generate XML!";
var myXML = "&lt;element&gt;" + msg + "&lt;/element&gt;";</code></pre></td></tr></table>
<p>Things get more complicated because you  need to entity encode the string to make sure it is valid XML and if you want to manipulate the XML later, you would need to write an XML parser. By contrast, with E4X you can use an XML &quot;template&quot; that will substitute in JavaScript values:</p>
<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td><pre><code>var msg = "This is a better way to generate XML!";
var myXML = &lt;element&gt;{ msg }&lt;/element&gt;</code></pre></td></tr></table>
<br>
The result is an XML object that you can manipulate and then serialize to a string. A more complicated example: <br />
<br />
<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td><pre><code>var dogML = &lt;dogs&gt;
   &lt;dog gender="male"&gt;
      &lt;name&gt;Rover&lt;/name&gt;
      &lt;breed&gt;Labrador&lt;/breed&gt;
      &lt;color&gt;black&lt;/color&gt;
   &lt;/dog&gt;
   &lt;dog gender="male"&gt;
      &lt;name&gt;Spot&lt;/name&gt;
      &lt;breed&gt;Jack Russell&lt;/breed&gt;
      &lt;color&gt;brown&lt;/color&gt;
   &lt;/dog&gt;
&lt;/dogs&gt;

// Access the DOM with JavaScript expressions
console.println("Name: " + dogML..dog[0].name);
console.println("Color: " + dogML..dog[1].color);

for each (var h in dogML..breed)  // Iterate over an XML Element
{ 
  console.println("Breed: " + h) 
};

// Evaluate a predicate over the DOM
console.println("Rover's Color: " + dogML.dog.(name=="Rover").color);

// Serialize back to an XML string
console.println("XML: " + dogML.toXMLString());</code>
</pre></td></tr></table>
<br>
The output:
<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td><pre><code>Name: Rover
Color: brown
Breed: Labrador
Breed: Jack Russell
Rover's Color: black
XML: &lt;dogs&gt;
   &lt;dog gender="male"&gt;
      &lt;name&gt;Rover&lt;/name&gt;
      &lt;breed&gt;Labrador&lt;/breed&gt;
      &lt;color&gt;black&lt;/color&gt;
   &lt;/dog&gt;
   &lt;dog gender="male"&gt;
      &lt;name&gt;Spot&lt;/name&gt;
      &lt;breed&gt;Jack Russell&lt;/breed&gt;
      &lt;color&gt;brown&lt;/color&gt;
   &lt;/dog&gt;
&lt;/dogs&gt;</code></pre></td></tr></table>
<p>Alright - you get the idea. There are lots of tutorials about using E4X - I've put some links at the end of this article. One important thing to keep in mind when adding JavaScript to PDF documents - E4X language features cannot be processed by pre-8.0 Acrobat / Reader so Document JavaScript using E4X will most likely not run in older versions.</p>
<h3>HTTP Networking support</h3>
<p>Much like the varous XMLHttpRequest objects in the browser, Reader now has support for asynchronously invoking Web Services using HTTP. It works more or less as you would expect and is an extension of the  SOAP support that has been in Acrobat for a while. The <em>Net.HTTP.request()</em> method allows you to specify the HTTP verb, the  request headers and the body and will return the response headers and response body. For security reasons, this method is only available when executed outside of a document (such as the JavaScript console, a JavaScript .js file or a Tracker application) - the intention is to make it possible to extend Reader / Acrobat without resorting to writing a C++ plugin. </p>
<table width="100%" border="1" align="center" cellpadding="4" cellspacing="0" frame="hsides">
  <tr>
    <th colspan="2" bordercolor="#000000" scope="col"><div align="center">Allowed HTTP verbs </div></th>
  </tr>
  <tr>
    <th bordercolor="#000000"><div align="center">HTTP (RFC 1945, 2616) </div></th>
    <th bordercolor="#000000"> <div align="center">GET, POST, PUT, DELETE, OPTIONS, HEAD </div></th>
  </tr>
  <tr>
    <th bordercolor="#000000"><div align="center">WebDAV (RFC 2518)</div></th>
    <th bordercolor="#000000">PROPFIND, PROPPATCH, MKCOL, LOCK, UNLOCK, COPY, MOVE, ACL, SEARCH </th>
  </tr>
  <tr>
    <th bordercolor="#000000"><div align="center">WebDAV Versioning Extensions (RFC 3253) </div></th>
    <th bordercolor="#000000"><div align="center">CHECKIN, CHECKOUT, UNCHECKOUT, MERGE, VERSION-CONTROL, REPORT, MKWORKSPACE, UPDATE, LABEL, MERGE, MKACTIVITY</div></th>
  </tr>
  <tr>
    <th bordercolor="#000000"><div align="center">CalDAV Calendaring Extensions</div></th>
    <th bordercolor="#000000"><div align="center">MKCALENDAR</div></th>
  </tr>
</table>
<p>As a real world use case, here is an example of invoking the WebDAV PROPFIND method on a web server. PROPFIND is an request for the contents of a WebDAV collection - it more or less asks for the contents of a directory with various properties of the contents. </p>
<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>
<pre><code>var EnumerateCollection = function(cURL)
{
    var params = 
    {
        cVerb: "PROPFIND", // Use the WebDAV PROPFIND Verb
        cURL: cURL,
        oHandler: // This is the handler for when the response is returned.
        {
            cURL: cURL,
            oBaseURL: util.crackURL(cURL),
            response: function(response, uri, e)
            {
                try
                {
                    if(e != undefined)
                    {
                        console.println("An error occurred: " + e);
                    }
                    else 
                    {
                        console.println("PROPFIND of " + cURL);
                        
                        // We get passed a stream object - convert it into a string
                        var string = util.stringFromStream(response);
                        
                        // E4X only parse XML fragments so we have to remove the
                        // XML Declaration
                        var xmlDeclMatcher = /^<\?xml version[^>]+?>/; 
                        string = string.replace(xmlDeclMatcher ,'')
                        string = string.replace(/\n/g ,'')

                        var msg = XML(string);

                        // WebDAV responses are all in the DAV XML Namespace so
                        // we when we refer to a node, we need to use the XML QName
                        var ns = new Namespace("DAV:");
                        var responses = msg..ns::response;

                        for(var i in responses)
                        {
                            var resp = responses[i];
                            var prop = responses[i].ns::propstat.ns::prop;
                            var resource = {};

                            // ensure that the resource URL begins with the base URL
                            var href = resp.ns::href;
                            // A better check here would be to parse the URL 
                            // and check it's scheme
                            if(href.charAt(0) == '/')
                            {
                                // This is a relative URL so append it to the base URL
                                with(this.oBaseURL)
                                {
                                    // Relative to base href
                                    resource.url = cScheme;
                                    resource.url += "://";
                                    resource.url += cHost;
                                    if(nPort != undefined)
                                        resource.url += ":" + nPort;

                                    resource.url += href;
                                }
                            }
                            else
                            {
                                // Absolute URL
                                resource.url = href.toString();
                            }

                            // Extract properties from the resource element
                            resource.displayName = prop.ns::displayname;
                            resource.lastModified = prop.ns::getlastmodified;
                            resource.contentLength = prop.ns::getcontentlength;
                            resource.contentType = prop.ns::getcontenttype;
                            resource.etag = prop.ns::getetag;
                            resource.type = prop.ns::resourcetype;

                            if(resource.url == this.cURL)
                            {
                                // Don't include the collection we want the contents of
                            }
                            else if(resource.type.ns::collection == undefined)
                            {
                                console.println(resource.displayName + " / " + 
                                resource.contentLength + " bytes / " + 
                        resource.contentType);
                            } else console.println("/" + resource.displayName);
                        }
                    }
                }
                catch(e)
                {
                    console.println("EXCEPTION: " + e);
                    e.printStackTrace();
                }
            }
        },
        aHeaders: // HTTP Request Headers
        [
            { name: "Depth", value: "1" } // Set the depth so it's not recursive
        ]
    };

    Net.HTTP.request(params); // Invoke the service asynchronously
}
EnumerateCollection("http://example.org/webdav/");
</code></pre></td></tr></table>
<p>You can run this code (with your own real WebDAV server URL) in the Acrobat JavaScript debugger. I used an Apache Tomcat server and it produced the following: </p>
<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
  <tr><td><pre><code>PROPFIND of http://example.org/webdav/
/SubCollection
Sample.xml / 2106 bytes / text/xml
Sample.pdf / 285856 bytes / application/pdf</code></pre>
</td></tr></table>
<p>In this case, there were three items in the WebDAV collection:
</p>
<table width="100%" border="1" align="center" cellpadding="4" cellspacing="0" frame="hsides">
<tr>
    <th bordercolor="#000000">File</th>
    <th bordercolor="#000000">Description</th>
  </tr>
  <tr><td bordercolor="#000000">SubCollection</td><td bordercolor="#000000">WebDAV Collection</td></tr>
  <tr><td bordercolor="#000000">Sample.xml</td><td bordercolor="#000000">2k XML file</td></tr>
  <tr><td bordercolor="#000000">Sample.pdf</td><td bordercolor="#000000">285k PDF document</td></tr>
</table>
<p>You could use the <em>Net.HTTP.request()</em> method again with the HTTP GET verb to download one of these file into Acrobat.
  
</p>
<h3>Resources </h3>
<ul>
  <li><a href="http://developer.mozilla.org/presentations/xtech2005/e4x/">Mozilla presentation on E4X support in Firefox / Spidermonkey</a> </li>
  <li><a href="http://www-128.ibm.com/developerworks/webservices/library/ws-ajax1/">A tutorial on getting started with E4X</a> </li>
  <li><a href="http://livedocs.macromedia.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00001912.html">An article on using E4X in ActionScript</a></li>
  <li><a href="http://www.darronschall.com/weblog/archives/000223.cfm">Using XML Namespace with E4X and ActionScript</a> </li>
  <li><a href="http://groups.google.com/group/netscape.public.mozilla.xml/msg/2fb5059ea2e73739">How to parse XML Documents with E4X</a> </li>
  <li><a href="http://www.faqts.com/knowledge_base/index.phtml/fid/1762">E4X FAQ </a></li>
  <li><a href="http://en.wikipedia.org/wiki/E4X">Wikipedia E4X page</a> </li>
</ul>
]]>
</content>
</entry>
<entry>
<title>The Adobe Synchronizer</title>
<link rel="alternate" type="text/html" href="http://blogs.adobe.com/barnaby.james/2006/12/the_adobe_synch_1.html" />
<modified>2006-12-10T22:45:52Z</modified>
<issued>2006-12-06T20:00:00Z</issued>
<id>tag:blogs.adobe.com,2006:/barnaby.james//26.2147</id>
<created>2006-12-06T20:00:00Z</created>
<summary type="text/plain">Adobe Acrobat 8 and Reader 8 ship with a helper application called the Adobe Synchronizer. Synchronizer is a small application that runs in the background, providing synchronization of document reviews and Tracker subscriptions so that your data is available when...</summary>
<author>
<name>bajames</name>
<url>http://blogs.adobe.com/barnaby.james</url>
<email>Barnaby.James@adobe.com</email>
</author>
<dc:subject>Subscription</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.adobe.com/barnaby.james/">
<![CDATA[<p>Adobe Acrobat 8 and Reader 8 ship with a helper application called the <em>Adobe Synchronizer</em>. Synchronizer is a small application that runs in the background, providing synchronization of document reviews and Tracker subscriptions so that your data is available when you need it.  On OS X, the process is called AdobeResourceSynchronizer and on Windows, it's called AdobeCollabSync.exe.  
<table border="1" align="center" cellpadding="4" cellspacing="0" width="100%">
<tr bgcolor="">
  <th><b><font color="#000000">Platform</font></b></th>
<th><b><font color="#000000">Process Name</font></b></th>
<th><b><font color="#000000"> Startup Method </font></b></th>
</tr>
<tr bgcolor=""><td><i>Windows</i></td>
<td>AdobeCollabSync.exe</td><td> Startup Menu</td>
</tr>
<tr bgcolor=""><td><i>OS X</i></td>
<td>AdobeResourceSynchronizer</td><td>Login Item</td></tr>
</table>
</p>
<p><B>UPDATE:</B> Removing the OS X Login Item is a little tricky because the Self Heal code that repairs the Reader install puts it back. See the note at the bottom of this post about how to disable self heal for this part of the install.</p>
<h3>When does it run? </h3>
<p>One of the design goals of Synchronizer was to make it as unobtrusive as possible for users especially when it is not needed. </p>
<ul>
  <li>Synchronizer runs briefly on user login - if there is nothing to synchronize then it will exit immediatly. </li>
  <li>Synchronizer will run in the background if you are participating in a Shared Review or  add a subscription to the Tracker.</li>
  <li>Synchronizer runs while Acrobat or Reader runs if you participate in a Shared Review or use specific features such as the Reviewing preferences panel or  Tracker.</li>
  <li>Synchronizer will not run if you remove all Shared Reviews and subscriptions from the  Tracker. </li>
</ul>
<h3>What does it do?</h3>
<p>The Adobe Synchronizer is a networking agent that is used to build disconnection tolerant applications. The Synchronizer provides a  local copy of data on a server so that applications can utilize it regardless of  network connectivity. As data changes on the server,  Synchronizer updates the local copy and as the user publishes changes made locally, Synchronizer makes the modifications to the server. If the client is disconnected from the network, Synchronizer will continue trying.  
<ul>
<li><a href="http://blogs.adobe.com/barnaby.james/2006/10/acrobat_shared.html"><em><strong>Shared Review Workflows </strong></em></a> - Synchronizer sends and receives document comments  and metadata in an XML file format (RSS 2.0 with some extensions) to a shared review location - either a  Network Folder, a Sharepoint workspace, or WebDAV server.  </li>
<li><em><strong><a href="http://blogs.adobe.com/barnaby.james/2006/09/pdfcasting_with.html">Review Tracker Subscriptions </a></strong></em> - The Synchronizer fetches any RSS / ATOM subscriptions that you add through the Review Tracker including attachments (such as in a PDFCast). </li>
</ul>
<h3>Where is the Synchronizer data stored?</h3>
<p>Synchronizer stores a local copy of the data in your Acrobat user data directoryusing a combination of a small database (SQLite) and the filesystem.
<p>On Windows, data is stored here<tt>: <br />
  C:\Documents&#160;and&#160;Settings\&lt;USERNAME&gt;\Application&#160;Data\Adobe\Acrobat\8.0\Synchronizer</tt>
<p> On OS X, this is:
  <br />
  <tt>~/Library/Acrobat&#160;User&#160;Data/8.0_&lt;ppc or x86&gt;/Synchronizer</tt>
<h3>How do I make the Synchronizer Stop Synchronizing?</h3>
<p>Synchronizer will no longer synchronize shared reviews or subscriptions once they are removed from Tracker. Once there is nothing to synchronize, it will no longer run in the background.  </p>
<h4>Stop Tracking Shared Reviews</h4>
<p>To stop tracking a Shared Review, open the Review Tracker (&quot;Comments->Review Tracker&quot; menu).  Click on the first tab item in the left-hand tab pane.  Right click on the document that you no longer wish to track and select &quot;Remove From Review Tracker&quot;. If you want to resume tracking the  review, just open the shared review document again.</p>
<p align="center"><a href="http://blogs.adobe.com/barnaby.james/tracker-review.jpg"><img src="http://blogs.adobe.com/barnaby.james/tracker-review.jpg" alt="tracker-review.jpg" width="252" height="162" border="0" /></a></p>
<h4>Removing a Subscription </h4>
<p>To remove a subscription, open the Review Tracker (&quot;Comments->Review Tracker&quot; menu).  Click on the &quot;RSS&quot; tab in the left pane.  Right click on the feed you'd like to unsubscribe from and choose &quot;Remove&quot;</p>
<p align="center"><a href="http://blogs.adobe.com/barnaby.james/tracker-rss.jpg"><img src="http://blogs.adobe.com/barnaby.james/tracker-rss.jpg" alt="tracker-rss.jpg" width="206" height="137" border="0" /></a></p>
<br/>
<p>Remember, removing all RSS feeds and Reviews from the Review Tracker will cause Synchronizer to stop the next time you quit Acrobat or Reader.  Alternatively, you can delete all of the folders described above to accomplish the same thing.  IMPORTANT - this <em>DELETES</em> all of your local Review and RSS data.  It is a permanent operation that cannot be undone.</p>
<h3>UPDATE - Removing the OS X LoginItem permanently</h3>
<p>Things are a bit more complicated than we initially thought -  if you remove the LoginItem the code that repairs the Reader install will put it back.  Until this is fixed, here's how you can work around the issue. Note that this will prevent all synchronization of RSS and Review data using Synchronizer while Reader is not running.  Also note that this is an unsupported work-around, so you're mileage may vary.  Please backup the file we're modifying before you edit it!</p>

<ol>
<li>Close Reader</li>
<li>Navigate to /Library/Application Support/Adobe/Acrobat/ on your boot drive </li>
<li>Back up the RdrENU80SelfHeal.xml file to some other place. (ENU refers to the English version of Reader so it may be a different name if you are using a non-english version)</li>
<li>Open the RdrENU80SelfHeal.xml file in a text editor</li>
<li>Search for AdobeResourceSynchronizer.app.  You should see a section that looks like:<br/>
<div style="font-family:'Courier New', Courier, monospace; font-size:x-small">
	&lt;key&gt;from&lt;/key&gt;<br/>
	&lt;string&gt;Contents/Support/AdobeResourceSynchronizer.app&lt;/string&gt;<br/>
	&lt;key&gt;isappassociated&lt;/key&gt;<br/>
	&lt;false/&gt;<br/>
	&lt;key&gt;iscolorprofile&lt;/key&gt;<br/>
	&lt;false/&gt;<br/>
	&lt;key&gt;isinstalled&lt;/key&gt;<br/>
	&lt;true/&gt;<br/>
	<span style="font-weight:bold">&lt;key&gt;isloginitem&lt;/key&gt;<br/>
	&lt;true/&gt;</span><br/>
</div>
</li>
<li>On the line after <span style="font-weight:bold; font-family: 'Courier New', Courier, monospace">&lt;key&gt;isloginitem&lt;/key&gt;</span>, change &lt;true/&gt; to &lt;false/&gt;.</li>
<li>Save the file</li>
<li>Remove the login item from the Accounts System Preferences</li>
<li>Launch Reader.  You should no longer have the login item added on restart of Adobe Reader.</li>
</ol>

<p><em>This post was written by the Adobe Synchronizer team - Steve Dakin, Barnaby James and Pat Wibbeler  </em></p>
]]>

</content>
</entry>
<entry>
<title>More details about Shared Review</title>
<link rel="alternate" type="text/html" href="http://blogs.adobe.com/barnaby.james/2006/10/more_details_ab.html" />
<modified>2006-10-13T03:00:23Z</modified>
<issued>2006-10-13T02:47:54Z</issued>
<id>tag:blogs.adobe.com,2006:/barnaby.james//26.1870</id>
<created>2006-10-13T02:47:54Z</created>
<summary type="text/plain">Kurt Foss has an interview with Randy Swineford, the product manager for Acrobat collaboration, about Shared Review. He goes into more detail about how Shared Review differs from the other review methods: Shared Review files can be distributed any way...</summary>
<author>
<name>bajames</name>
<url>http://blogs.adobe.com/barnaby.james</url>
<email>Barnaby.James@adobe.com</email>
</author>
<dc:subject>Collaboration</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.adobe.com/barnaby.james/">
<![CDATA[<p><a href="http://www.acrobatusers.com/blogs/kfoss/">Kurt Foss</a> has an <a href="http://www.acrobatusers.com/articles/2006/10/interview_r_swineford/">interview with Randy Swineford</a>, the product manager for Acrobat collaboration, about Shared Review. He goes into more detail about how Shared Review differs from the other review methods:<br />
<blockquote><i><br />
Shared Review files can be distributed any way you want—website, e-mail, document management system, network share drive and so on. Browser-based review files can only be distributed via a website (hence the name). The new shared-review infrastructure is no longer dependent on the location of the document. The path to the comment server is baked into the document when you send it for review, so you can open a document in a web browser, make comments, save it to your desktop/open Acrobat, make more comments, save it and then email it to someone else—in all cases, the review will "just work." This also means you can use the review document with a content management system that Adobe doesn't support (like eRoom) because you can just upload it like any other file and it will just work. Shared review works in the browser or in stand-alone Acrobat. And because each review has a unique review ID, you can send the same document for review multiple times (for example, if you wanted to have different sets of reviewers).<br />
</i></blockquote> </p>]]>

</content>
</entry>
<entry>
<title>Acrobat Shared Review</title>
<link rel="alternate" type="text/html" href="http://blogs.adobe.com/barnaby.james/2006/10/acrobat_shared.html" />
<modified>2006-10-03T14:51:47Z</modified>
<issued>2006-10-03T16:53:19Z</issued>
<id>tag:blogs.adobe.com,2006:/barnaby.james//26.1755</id>
<created>2006-10-03T16:53:19Z</created>
<summary type="text/plain">Shared Review Acrobat 8.0 introduces a new method for document reviews called Shared Review. In previous versions, Acrobat has supported two types of reviews - email reviews and online (or browser-based) reviews. Email reviews require the initiator to distribute the...</summary>
<author>
<name>bajames</name>
<url>http://blogs.adobe.com/barnaby.james</url>
<email>Barnaby.James@adobe.com</email>
</author>
<dc:subject>Collaboration</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.adobe.com/barnaby.james/">
<![CDATA[<h3>Shared Review</h3>
<p>Acrobat 8.0 introduces a new method for  document reviews called Shared Review. In previous versions, Acrobat has supported two types of reviews - email reviews and online (or browser-based) reviews. Email reviews require the initiator to distribute the document by email and reviewers send their comments back - it works fairly well for small groups of people because there are no configuration issues (for the most part) but the only reviewer that sees my comments is the initiator.</p>
<p>Online reviewing, by contrast, uses a central comment store (usually some kind of WebDAV server or Network Folder) for comments and the document is viewed in the browser. The review is tracked by the URL of the document which sometimes caused problems and configuration was difficult but all of the reviewers can see each others comments as they are made.</p>
<p>For Acrobat 8.0, we looked into the problems that customers were encountering with the existing reviewing options and the type of network infrastructure that is commonly available. Shared Review is designed to take the best aspects of email and online reviewing and improve the whole experience - the idea was to make the whole review process robust.</p>
<ul>
  <li>Reviewing works independently of how the file is distributed - you can open a review in the browser, save it locally and email it to someone else and it will just work.</li>
  <li>Setting up a shared review location and initiating a review is much easier than for online reviewing.</li>
  <li>Reviewing a document can be easily used when disconnected from the network.</li>
  <li>Review files can be enabled to allow Reader 8.0 users to participate (this requires Acrobat 8.0 Professional).</li>
  <li>Changes in the review since the last time the review was opened are tracked - for example, new reviewers and new comments.</li>
  <li>When reviewers cannot connect to the review location (for example, a reviewer outside your firewall) are automatically routed into an email workflow.</li>
  <li>Reviewer comments are stored as an RSS 2.0 file (a common XML format) with some extensions to make it easy to extract information (for example, to integrate the comment workflow with a server side application). </li>
</ul>
<p>When you initiate a shared review, you specify a location for your comments  (either a Network Folder, a WebDAV server or a Sharepoint Workspace) which is baked into the PDF so that whenever the document is opened, it will know where to locate the comments. Because of this, you can distribute the file anyway you want - through email, upload it to a content management system or put on a server (possibly to be distributed as a <a href="http://blogs.adobe.com/barnaby.james/PDFCast.html">PDFCast</a>). As with email reviews, Acrobat 8.0 Professional is able to Reader enable a shared review document so that anyone with Adobe Reader 8.0 will be able to participate.</p>
<p><a href="http://blogs.adobe.com/barnaby.james/SR-Welcome.png"><img src="http://blogs.adobe.com/barnaby.james/SR-Welcome.png" alt="Shared Review Warning Dialog" width="200" height="160" border="0" align="left" /></a>When a participant receives a shared review document, the first thing they see is an opt-in dialog - a shared review needs to be able to talk to a commenting server and we need   permission from the user to do this. If the user agrees to participate, the welcome dialog is shown which indicates the current state of the review since the last time the document was opened - how many new reviewers have joined, how many new comments have been made.</p>
<p>Participating in a shared review creates a <strong>subscription</strong> relationship between Acrobat / Reader and the comment server so comments are synchronized as changes are made. A utility called the Adobe Synchronizer copies new comments from the review location and publishes your comments in the background. The Synchronizer handles network disconnection by keeping a local copy of the review data so you can always work with the most recent version. This allows you to seamlessly participate in a review while disconnected, for example on a long airline flight. When you reconnect to the network, any comments that have been published  and new comments from other reviewers will automatically be synchronized with your client.</p>
<table width="60%" border="0" align="center" cellpadding="0" cellspacing="5">
  <tr>
    <td><div align="center"><a href="http://blogs.adobe.com/barnaby.james/SR-Connected.png"><img src="http://blogs.adobe.com/barnaby.james/SR-Connected.png" alt="Shared Review Connected Screenshot" width="200" border="0" /></a></div></td>
    <td><div align="center"><a href="http://blogs.adobe.com/barnaby.james/SR-Disconnected.png"><img src="http://blogs.adobe.com/barnaby.james/SR-Disconnected.png" alt="Shared Review Disconnected" width="200" border="0" /></a></div></td>
  </tr>
  <tr>
    <td><div align="center"><em>Connected to the review location</em></div></td>
    <td><div align="center"><em>Disconnected from the review location</em></div></td>
  </tr>
</table>
<p>The review tracker allows you to keep track of the review state for all of the reviews that you are participating in. </p>
<p align="center"><a href="http://blogs.adobe.com/barnaby.james/SR-Tracker.png"><img src="http://blogs.adobe.com/barnaby.james/SR-Tracker.png" alt="Shared Review Tracker" width="251" border="0" /></a></p>]]>

</content>
</entry>
<entry>
<title>PDFCasting with Acrobat / Reader 8.0</title>
<link rel="alternate" type="text/html" href="http://blogs.adobe.com/barnaby.james/2006/09/pdfcasting_with.html" />
<modified>2006-12-14T18:47:47Z</modified>
<issued>2006-09-30T17:08:02Z</issued>
<id>tag:blogs.adobe.com,2006:/barnaby.james//26.1718</id>
<created>2006-09-30T17:08:02Z</created>
<summary type="text/plain">Acrobat Tracker Ted Padova has a useful how to article on using the Tracker in Acrobat to read blogs. Many people are surprised when they find out Acrobat 7.0 has an RSS reader in it - who ordered that? While...</summary>
<author>
<name>bajames</name>
<url>http://blogs.adobe.com/barnaby.james</url>
<email>Barnaby.James@adobe.com</email>
</author>
<dc:subject>Subscription</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.adobe.com/barnaby.james/">
<![CDATA[<h3>Acrobat Tracker</h3>
<p><a href="http://www.acrobatusers.com/blogs/tedpadova">Ted Padova</a> has a useful how to article on using the <a href="http://www.acrobatusers.com/blogs/tedpadova/?p=24">Tracker in Acrobat to read blogs</a>. Many people are surprised when they find out Acrobat 7.0 has an RSS reader in it - who ordered that? While it's true that RSS is most closely associated with keeping up to date with blogs, it can be used for tracking changes in many sources of information - for example workflow notifications, updates to documents, important sets of forms etc. Today, a lot of this information is sent around in email largely because it's universally available - in a lot of cases it's not the best tool for the job. For example, if a workflow item changes state 10 times that might generate 10 notification emails because you can't modify an email once it has been sent. <a href="http://www.feedburner.com">FeedBurner</a> has a <a href="http://blogs.feedburner.com/feedburner/archives/001518.html">report</a> that highlights the potential of using RSS for content distribution.</p>

<p>The Tracker is designed to be a client for this type of information - with RSS you subscribe to a service that publishes this information as a feed. RSS and ATOM are open formats for feeds that can be easily generated using blogs, wikis, social bookmarking tools or just a text file on a server. By using an open format, Tracker can easily integrate with other products - the idea is that end users can just plug things together and they will work.</p>

<h3>What's new with Tracker in Acrobat / Reader 8.0</h3>
<p>The two big changes in Tracker for 8.0 are that Tracker is now available in Reader and that  enclosures are supported. Enclosures are like email attachments associated with each item in the feed that can be binary files (like video or audio). Of more interest to Acrobat / Reader users, this content can be PDF documents that will be automatically downloaded to the local machine when the  feed is updated. This is particularly useful for people who are occasionally disconnected from the network or who work with large documents because their documents and workflows are immediatly available when they need them. Some examples where this might be useful:</p>

<ul>
<li>A set of forms used within a company (such as  PTO and Expense Reports) could be published as a feed that employees can subscribe to. When an updated PTO form becomes available, the feed is updated so that the enclosure point to the URL of the PTO form. This will cause the old form to be removed and a new version downloaded automatically. You could imagine the IRS publishing all of the tax forms as a feed so you always have the latest one when you need it.</li>
<li>A sales organization can publish documents for marketing collateral and price lists to make sure that all of the salespeople always have the most current version. An example of this type of workflow is Spanning Partners <A href="http://spanningsalesforce.com/">Spanning SalesForce</a> that provides RSS feeds to data within <A href="http://salesforce.com">SalesForce.com</a> including <a href="http://www.spanningpartners.com/2005/08/introducing_spa.html">documents</a>.</li>
<li>A service could generate a feed with a personalized set of Shared Review  documents that need to be reviewed by specific users. Shared Reviews (like Tracker) have the ability to work completely disconnected from the network.</li>
<li>A service could publish a feed of documents requiring approval for each user. For example, <a href="http://www.approver.com/">Approver.com</a> does document approval workflows with RSS feeds.</li>
<li>Journals / serialized books can be published as articles in a feeds (or you could subscribe to a feed which is a collection of articles you may find interesting from a variety of sources). For example, a law firm could distribute <a href="http://www.prismlegal.com/wordpress/index.php?m=200609#post-501">WestLaw and Lexis articles</a> customized to each persons practice area.</li>
</ul>

<p>I created a <a href="http://blogs.adobe.com/barnaby.james/PDFCastingSample.xml">sample PDFCast</a> (the term is a derivative of <a href="http://en.wikipedia.org/wiki/Podcasting">Podcasting</a>) to show how this works - the link below will add the subscription to the Tracker (you need Acrobat / Reader 8.0 for this to work). </p>
<a href="acrobat:Inbox?addFeed=http://blogs.adobe.com/barnaby.james/PDFCastingSample.xml">Click here to add the PDFCast sample to the Acrobat / Reader 8.0 Tracker</a>

<p>Here's a screen shot of what it looks like:</p>
<center><a href="http://blogs.adobe.com/barnaby.james/PDFCasting.png"><img src="http://blogs.adobe.com/barnaby.james/PDFCasting.png" width="300"></a></center>
<p>Clicking on the PDF icon on the left or the open button will cause the document to be opened from the local copy of the enclosure. In this particular case, I added some custom metadata to the feed and used some of the customization features of Tracker to group articles based on the value of that metadata. The UI and behavior of feeds in Tracker can be extensively customized - I'll cover this in a later blog post but it's all described in the <a href="http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/javascript/Tracker.pdf">Tracker SDK</a>.</p>]]>

</content>
</entry>
<entry>
<title>My lackluster blogging</title>
<link rel="alternate" type="text/html" href="http://blogs.adobe.com/barnaby.james/2006/09/my_lackluster_b_1.html" />
<modified>2006-09-30T16:24:41Z</modified>
<issued>2006-09-30T16:30:00Z</issued>
<id>tag:blogs.adobe.com,2006:/barnaby.james//26.1717</id>
<created>2006-09-30T16:30:00Z</created>
<summary type="text/plain">Well I officially stink at keeping this blog going - I guess going to ETech put me behind a bit! Actually, getting Acrobat / Reader 8.0 finished is more likely the cause - at any rate, as the product is...</summary>
<author>
<name>bajames</name>
<url>http://blogs.adobe.com/barnaby.james</url>
<email>Barnaby.James@adobe.com</email>
</author>
<dc:subject>Collaboration</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.adobe.com/barnaby.james/">
<![CDATA[<p>Well I officially stink at keeping this blog going - I guess <a href="http://blogs.adobe.com/barnaby.james/2006/02/oreilly_etech_2_1.html">going to ETech</a> put me behind a bit! Actually, getting Acrobat / Reader 8.0 finished is more likely the cause - at any rate, <a href="http://www.adobe.com/products/acrobat/">as the product is now announced</a>, I have a little more time to talk about some of the new features that have been keeping me busy.</p>

<p><a href="http://www.flickr.com/photos/bajames/109986723/" title="Photo Sharing"><img src="http://static.flickr.com/19/109986723_544c44f5d5_m.jpg" width="240" height="180" alt="IMG_2011" align="left"/></a>And for the sake of completeness, ETech was really interesting - well worth going. Audio for many of the sessions is now available from <a href="http://www.itconversations.com/series/etech.html">ITConversations</a> - I particularly enjoyed Sam Ruby's <a href="http://www.intertwingly.net/blog/2006/03/08/Neurotransmitters">Neurotransmitters</a> talk, Eric Bonabeau's talk on <a href="http://wanadoo.typepad.com/tr/2006/03/etech06_session.html">Hunch Engines</a> and the <a href="http://www.youtube.com/watch?v=1Eg4wLkYOxY">Roomba fighting</a>.</p>]]>

</content>
</entry>
<entry>
<title>O&apos;Reilly ETech 2006</title>
<link rel="alternate" type="text/html" href="http://blogs.adobe.com/barnaby.james/2006/02/oreilly_etech_2_1.html" />
<modified>2006-02-11T23:01:12Z</modified>
<issued>2006-02-11T19:00:02Z</issued>
<id>tag:blogs.adobe.com,2006:/barnaby.james//26.516</id>
<created>2006-02-11T19:00:02Z</created>
<summary type="text/plain">I&apos;ll be attending the O&apos;Reilly Emerging Technologies 2006 conference in San Diego, March 6-9. I&apos;ve been wanting to attend this conference for a while but I finally made time to go this year. Primarily, this is because I&apos;ve been listening...</summary>
<author>
<name>bajames</name>
<url>http://blogs.adobe.com/barnaby.james</url>
<email>Barnaby.James@adobe.com</email>
</author>
<dc:subject>Collaboration</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.adobe.com/barnaby.james/">
<![CDATA[<p>I'll be attending the <a href="http://conferences.oreillynet.com/etech/">O'Reilly Emerging Technologies 2006</a> conference in San Diego, March 6-9. I've been wanting to attend this conference for a while but I finally made time to go this year. Primarily, this is because  I've been listening to the podcast of the <a href="http://www.itconversations.com/series/etech2005.html">presentations from the 2005 Conference</a> on the always excellent <a href="http://www.itconversations.com/index.html">IT Conversations </a>- so even if you can't attend, you can still learn a lot from the conference. The conference schedule is <a href="webcal://conferences.oreillynet.com/et2006/et2006.ics">published as an iCal file</a> so you can subscribe to it using a client like Apple iCal or <a href="http://www.mozilla.org/projects/calendar/sunbird.html">Mozilla Sunbird</a> and then pick and choose what you want to attend. </p>

<p>Lest you get the impression that I'm some jet setting conference hound, I assure you this is quite a rarity and I spend almost all of my time at my desk writing code! I think the last conference I went to was <a href="http://www.bloggercon.org/">BloggerCon III</a>. At any rate, if you're going to be ETech and want to talk about Collaboration, I'd be interested in talking to you.</p>]]>

</content>
</entry>
<entry>
<title>Introduction</title>
<link rel="alternate" type="text/html" href="http://blogs.adobe.com/barnaby.james/2006/02/introduction_1.html" />
<modified>2007-03-08T22:57:56Z</modified>
<issued>2006-02-11T17:00:02Z</issued>
<id>tag:blogs.adobe.com,2006:/barnaby.james//26.225</id>
<created>2006-02-11T17:00:02Z</created>
<summary type="text/plain">Hi and welcome to my blog! I&apos;m an engineer working on Collaboration in Adobe Reader / Acrobat. Since collaboration is one of those blanket terms that can mean just about anything, I end up working on just about everything. Specifically,...</summary>
<author>
<name>bajames</name>
<url>http://blogs.adobe.com/barnaby.james</url>
<email>Barnaby.James@adobe.com</email>
</author>
<dc:subject>Collaboration</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.adobe.com/barnaby.james/">
<![CDATA[<p>Hi and welcome to my blog! I'm an engineer working on Collaboration in Adobe Reader / Acrobat. Since collaboration is one of those blanket terms that can mean just about anything, I end up working on just about everything. Specifically, I work on the Review and Markup of PDF documents and allowing people to share their comments with others. </p>

<p>These are the different areas that I'll be  discussing on this blog:<br />
<ul><br />
<li>Web Services (SOAP / WSDL / REST) for Messaging</li><br />
<li>Service Discovery using DNS Service Discovery</li><br />
<li>Customizing Acrobat with JavaScript</li><br />
<li>Content Syndication using RSS and the Acrobat Tracker</li><br />
<li>Acrobat / Reader Networking issues</li><br />
</ul><br />
If there is a topic in this area that you'd like to know more about, send email or leave a comment and I'll see what I can do.</p>]]>

</content>
</entry>

</feed>