<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Knowledge Supply Chain</title>
	<atom:link href="http://www.ipov.net/apps/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ipov.net/apps/blog</link>
	<description></description>
	<lastBuildDate>Fri, 17 Jun 2011 21:52:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Starting an adventure with Gradle</title>
		<link>http://www.ipov.net/apps/blog/2011/06/starting-gradle-adventure/</link>
		<comments>http://www.ipov.net/apps/blog/2011/06/starting-gradle-adventure/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 21:52:57 +0000</pubDate>
		<dc:creator>robert.sanders</dc:creator>
				<category><![CDATA[CoSolvent Flash Player]]></category>
		<category><![CDATA[Flash / Flex]]></category>
		<category><![CDATA[CFP]]></category>
		<category><![CDATA[OSMF]]></category>

		<guid isPermaLink="false">http://www.ipov.net/apps/blog/?p=638</guid>
		<description><![CDATA[We&#8217;ve been getting back into gear to start development of CoSolvent Flash Player version 2; which will really be the 5th major release of our core logic as the player was previously a more or less nameless piece of internal code.  The new version will be based on Adobe&#8217;s OSMF which we&#8217;ve been following with [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been getting back into gear to start development of CoSolvent Flash Player version 2; which will really be the 5th major release of our core logic as the player was previously a more or less nameless piece of internal code.  The new version will be based on Adobe&#8217;s OSMF which we&#8217;ve been following with interest for quite some time now.</p>
<p>We made a couple decisions up-front, and one of them was to import the latest release code drops from OSMF into an internal git repository; that way if we ever need to make any patches we have the code right there, and anyway as with any open source project it can be very useful to go through the source code to understand how best to use it.  So that decision brought on the next, which was: do we go ahead and setup to build the osmf.swc library ourselves.  After debating this, we decided that it would provide useful experience.  Alas the OSMF SVN lacks a decent build script, seeming to rely on FlashBuilder.  Luckily the Strobe Media Player does have a basic set of ANT build scripts.  Now, I&#8217;ve been using ANT for quite some time, and everytime I have to use it on a new project I ask myself: isn&#8217;t there anything better?  So far the answer has been &#8220;no&#8221;.  So, I started working through an attempt to modularize the SMP build script.  I believe I managed to get something that was workable, while being fairly ugly; however along the way I decided that the build for CFP 2.0 should be cleaner if at all possible and decided to go though another search.</p>
<p>Of course one of the obvious tools for any Java developer such as myself has got to be Maven, although up until now I have avoided it, having found it approach too constrictive for my comfort, and that making the transition seems to involve an awful lot of new things to learn, which are not super well documented (not that most other open source tools are really much better).  We also have a (so far) internal tool built using the Eclipse RCP framework, and had also started to look at the e4 projects as the next logical step there; but again, the Eclipse build tooling always has struck me as incredibly non-user friendly.  The big problem we run into is that, because a number of tools that we want access to are part of various plugins (such as XML editing), we end up shipping a whole bunch of the IDE functionality, and that creates a huge set of dependencies to manage.  Now, if you have all day, you can simply re-provision them each time you need to build, downloading the latest stable releases, but that is not going to work for incremental builds.  So we are left with the question of managing a &#8220;target platform&#8221; full of modules (features and related plugins) that we want to keep up-to-date, and we don&#8217;t have a separate build developer.  One of the developments that caught our attention was the Tycho project, which seemed to address some of the issues, and since Tycho is built on top of Maven3 that seemed to provide some added incentive to consider moving to Maven.</p>
<p>Starting out with maven was somewhat ugly, as the maven way of doing things seems to be mostly derived from the process that a Java project might need, but we kept learning.  There is a &#8220;flex mojo&#8221; to add the ability to call mxmlc and compc from within a maven build as a semi-standard part of their lifecycle; however we quickly ran into a problem.  We need to control the version(s) of flex we are compiling with/against.  Apparently this used to be possibly, however after getting a few too many complaints from users who&#8217;d shot themselves in the foot with a path issue, the one guy who maintains the flex mojo basically decided to do his best to make this &#8220;impossible&#8221; for new users (see his discussion board postings).  In addition to creating technical problems, the attitude also raised a number of questions in our minds about if we really wanted to go that route.  In the end we decided that since the Tycho tool chain was not yet ready for us (or we weren&#8217;t ready for it), there was not really a compelling reason to use Maven.  So it was back to the drawing board.</p>
<p>After looking at numerous tools, I finally rediscovered Gradle.  I say rediscover because I&#8217;d previously seen it, when it was in a much less mature state.  Anyway, a quick google showed that not only would it be possible, due to Gradle&#8217;s built in support for ANT tasks, to use the Adobe mxmlc and compc tasks, but that just recently work had started on a plugin for adding even better support for Flex development into Gradle as a plugin &#8211; <a title="GradleFx on GitHub" href="https://github.com/GradleFx" target="_blank">GradleFx</a></p>
<p>So, I started working on a test of using gradle to compile the OSMF code and plugins.  At this point, as I&#8217;d anticipated, I managed to run into a number of beginner issues; however I have been able to work my way through them, with the kind help of input from the GradleFx developers.  One thing I&#8217;ll note here is that you can avoid having to &#8220;install&#8221; the GradleFx plugin into a local maven cache by simply putting it in a local folder and declaring that as a &#8220;flat repo&#8221; like:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="groovy" style="font-family:monospace;">buildscript <span style="color: #66cc66;">&#123;</span>
     repositories <span style="color: #66cc66;">&#123;</span>
        flatDir name: <span style="color: #ff0000;">'localToolsRepository'</span>, dirs: <span style="color: #ff0000;">&quot;${buildTools}/lib&quot;</span>
    <span style="color: #66cc66;">&#125;</span>
    dependencies <span style="color: #66cc66;">&#123;</span>
        classpath group: <span style="color: #ff0000;">'org.gradlefx'</span>, name: <span style="color: #ff0000;">'gradlefx'</span>, version: <span style="color: #ff0000;">'0.2.1.ipov'</span>, ext: <span style="color: #ff0000;">'jar'</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Note that the buildscript closure is evaluated right away, before the rest of the build, so if you want to use any variables, such as ${buildTools} in the example above, then you have to define them in a gradle.properties file.</p>
<p>I found that cloning the GradleFx repo enabled me to look over the code and get a better feel for what its doing, as the documentation is still a little light; however I soon found that I had a couple of ideas for some changes to the GradleFx code.  Since this is on GitHub, I decided to try my first ever GitHub hosted fork.  The process seems to have gone well, and so far I&#8217;ve been able to contribute a small change in the path handling.  I am currently working on code to add explicit includeSources and includeClasses properties to at least the compc code, as currently the compc implementation is using all the declared source-paths as include-sources too, which is going to work most of the time, but not all.  This should then mean you can reuse .flexLibProperties &#8211; something that the SMP build does, but much more simply.  I have the following as a part of a multi-project build (OSMF comes as several different components that I&#8217;m building separately):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>120
121
122
123
124
125
</pre></td><td class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">def</span> flexLibProperties <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">new</span> XmlParser<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">parse</span><span style="color: #66cc66;">&#40;</span> project.<span style="color: #006600;">file</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'.flexLibProperties'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
<span style="color: #000000; font-weight: bold;">def</span> incClasses <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">;</span>
flexLibProperties.<span style="color: #006600;">includeClasses</span>.<span style="color: #006600;">classEntry</span>.<span style="color: #663399;">each</span> <span style="color: #66cc66;">&#123;</span>
    incClasses.<span style="color: #006600;">add</span><span style="color: #66cc66;">&#40;</span> it.<span style="color: #ff0000;">'@path'</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
<span style="color: #66cc66;">&#125;</span>
project.<span style="color: #006600;">tasks</span>.<span style="color: #006600;">compile</span>.<span style="color: #006600;">includeClasses</span> <span style="color: #66cc66;">=</span> incClasses</pre></td></tr></table></div>

<p>I am considering pushing my OSMF repo to GitHub, but my big hang up is that right now I am unsure how much TLC I&#8217;m going to be able to give it, and I don&#8217;t want to create any false expectations from others.  For instance, if it becomes clear that we&#8217;re not going to need to have the ability to build OSMF ourselves, then it would be much simpler to just use the latest binary.  However, in the mean time I intend to try and post a few other tips and try to contribute any other ideas I have to the GradleFx project.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.ipov.net%2Fapps%2Fblog%2F2011%2F06%2Fstarting-gradle-adventure%2F&amp;title=Starting%20an%20adventure%20with%20Gradle" id="wpa2a_2"><img src="http://www.ipov.net/apps/blog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ipov.net/apps/blog/2011/06/starting-gradle-adventure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse Infocenter Help as Web App</title>
		<link>http://www.ipov.net/apps/blog/2011/01/eclipse-infocenter-help-as-web-app/</link>
		<comments>http://www.ipov.net/apps/blog/2011/01/eclipse-infocenter-help-as-web-app/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 15:53:43 +0000</pubDate>
		<dc:creator>robert.sanders</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.ipov.net/apps/blog/?p=633</guid>
		<description><![CDATA[For all the effort that appears to have gone into allowing the Eclipse Help &#8220;Infocenter&#8221; to run as a deployed web application, the documentation is not great, and more importantly &#8211; why isn&#8217;t there a download thats &#8220;ready to go&#8221;?  This is something that&#8217;s bothered me for sometime now. For the impatient, you can skip [...]]]></description>
			<content:encoded><![CDATA[<p>For all the effort that appears to have gone into allowing the Eclipse Help &#8220;Infocenter&#8221; to run as a deployed web application, the documentation is not great, and more importantly &#8211; why isn&#8217;t there a download thats &#8220;ready to go&#8221;?  This is something that&#8217;s bothered me for sometime now.</p>
<p>For the impatient, you can skip the rest of this, and just download a WAR from my Google Docs account at <a href="https://docs.google.com/a/ipov.net/leaf?id=0B1u9Agj_s0HLZWZhNWFjNzItNzI4Ny00NzAxLTlhMmMtYjhiZmIxYzdlOGQ5&amp;sort=name&amp;layout=list&amp;num=50">https://docs.google.com/a/ipov.net/leaf?id=0B1u9Agj_s0HLZWZhNWFjNzItNzI4Ny00NzAxLTlhMmMtYjhiZmIxYzdlOGQ5&amp;sort=name&amp;layout=list&amp;num=50</a> Just expand the WAR and add your help plugin(s) to the WEB-INF/plugins/ directory.  Make sure that your plugins to not depend on anything other than the Eclipse Help bundles and you should be fine.  I&#8217;ve noticed while preparing this, that a number of help plugins/bundles actually declare the same dependencies as the plugin they document, thus making running standalone impossible as the OGSi container will refuse to activate them.  Hopefully someone will take over hosting this WAR for me, it would be great if Eclipse.org made it available for download as part of their normal release schedule, but that&#8217;s asking for a lot.</p>
<p>Anyway, in case its useful to others, or I need to reference this in the future, here&#8217;s what I had to do to get this WAR file running.</p>
<p>First, I google&#8217;d the issue; I found a smallish number of blogs already out there, and the offical documentation (e.g. <a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/ua_help_war.htm">http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/ua_help_war.htm</a>).  Warning: Many of the blogs are for an older version of the runtime, and will instruct you to place files under WEB-INF/eclipse, this is incorrect and will result in the web-app failing to start.  The instructions in the Eclipse help are correct.</p>
<p>From the instructions:</p>
<ol>
<li>This is correct enough, although you don&#8217;t really have to use a temporary directory, I just extracted the plugin JAR directly to my local development install of Tomcat to facilitate testing, e.g. to %TOMCAT_HOME%/webapps/help</li>
<li>Note that you&#8217;ll need Eclipse Plugin Development Kit for this.  I also ran into a problem with using my install as my target platform, some issue with the JUnit addon for PDE, so I had to define a platform and exclude the JUnit plugin, not a big deal, but an extra step.</li>
<li>Note that this step assumes you extracted the &#8220;temporary&#8221; directory referenced at the start as &#8220;webapps/help&#8221;</li>
<li>Again, not that if you copy help plugins which declare extra, usually unneeded, dependencies, the help system will start, but will exclude those help plugins.  You can edit the WEB-INF/web.xml to add the -console option so that you can access the OSGi console and get some diagnostic information on why the plugins aren&#8217;t started (it isn&#8217;t logged to the Tomcat log files).</li>
<li><a href="http://download.eclipse.org/eclipse/equinox/">Downloads of the ServletBridge</a>.  I haven&#8217;t experimented, but I placed both files into my webapps/help/WEB-INF/plugin, and then also copied the org.eclipse.equinox.servletbridge to my WEB-INF/lib directory.  This seemed to work fine.</li>
<li>Note that previous versions of the instructions tell you to &#8220;extact the servletbridge.jar&#8221; form the plugin jar, this is no longer correct.</li>
<li>No other variations/extra information should be needed.</li>
</ol>
<p>Comments and addition information are welcome.  I hope this helps others, and maybe someone can eventually get the Standalone Infocenter WAR added as a standard part of the Eclipse release builds.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.ipov.net%2Fapps%2Fblog%2F2011%2F01%2Feclipse-infocenter-help-as-web-app%2F&amp;title=Eclipse%20Infocenter%20Help%20as%20Web%20App" id="wpa2a_4"><img src="http://www.ipov.net/apps/blog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ipov.net/apps/blog/2011/01/eclipse-infocenter-help-as-web-app/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Milestone 32: CoSolvent Comunity Server</title>
		<link>http://www.ipov.net/apps/blog/2010/10/milestone-32-cosolvent-comunity-server/</link>
		<comments>http://www.ipov.net/apps/blog/2010/10/milestone-32-cosolvent-comunity-server/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 16:32:08 +0000</pubDate>
		<dc:creator>robert.sanders</dc:creator>
				<category><![CDATA[CoSolvent]]></category>

		<guid isPermaLink="false">http://www.ipov.net/apps/blog/?p=628</guid>
		<description><![CDATA[I am pleased to announce that we released Milestone 32.1 of CoSolvent Community Server last week.  The main new functionality in this release is that FLV files can now be stored and served &#8220;as is&#8221; &#8211; previously FLV uploads were treated just like any other video upload and were reprocessed into 3 different streams (configurable) [...]]]></description>
			<content:encoded><![CDATA[<p>I am pleased to announce that we released Milestone 32.1 of CoSolvent Community Server last week.  The main new functionality in this release is that FLV files can now be stored and served &#8220;as is&#8221; &#8211; previously FLV uploads were treated just like any other video upload and were reprocessed into 3 different streams (configurable) targeting different bandwidths.  Now sites can choose to use the original FLV upload as is.  If this option is used, the alternative bandwidth streams are not created, so think about how you plan to use your site before enabling this feature; enabling video reprocessing of FLVs after the fact will require the maintenance tools to be used to create the streams, a process which could take quite a long time depending on the amount of content.  However, if you are mainly interested in archiving of FLV content, and have preprocessed FLVs which you don&#8217;t need or want to reprocess, this option can cut down on both processing load and also on the space requirements, as well as assuring you that your users always see the original quality video.</p>
<p>Additionally several bugs were fixed, you can see the complete issue list in Assembla at <a href="https://www.assembla.com/spaces/cosolvent/milestones/283241-milestone-32---video---pdf-improvements" target="_blank">https://www.assembla.com/spaces/cosolvent/milestones/283241-milestone-32&#8212;video&#8212;pdf-improvements</a>.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.ipov.net%2Fapps%2Fblog%2F2010%2F10%2Fmilestone-32-cosolvent-comunity-server%2F&amp;title=Milestone%2032%3A%20CoSolvent%20Comunity%20Server" id="wpa2a_6"><img src="http://www.ipov.net/apps/blog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ipov.net/apps/blog/2010/10/milestone-32-cosolvent-comunity-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Milestone 31: CoSolvent Comunity Server</title>
		<link>http://www.ipov.net/apps/blog/2010/10/milestone-31-cosolvent-comunity-server/</link>
		<comments>http://www.ipov.net/apps/blog/2010/10/milestone-31-cosolvent-comunity-server/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 14:01:20 +0000</pubDate>
		<dc:creator>robert.sanders</dc:creator>
				<category><![CDATA[CoSolvent]]></category>

		<guid isPermaLink="false">http://www.ipov.net/apps/blog/?p=622</guid>
		<description><![CDATA[Last night we released Milestone 31 of CoSolvent Community Server to production.  Among other things this updates PDF display for IE to use the non-standard &#60;object&#62; tag syntax using the classid attribute and the src param instead of the type and data attributes used in standards mode.  The standards mode tag works, mostly; however IE [...]]]></description>
			<content:encoded><![CDATA[<p>Last night we released Milestone 31 of CoSolvent Community Server to production.  Among other things this updates PDF display for IE to use the non-standard &lt;object&gt; tag syntax using the classid attribute and the src param instead of the type and data attributes used in standards mode.  The standards mode tag works, mostly; however IE seems to block page execution while downloading the PDF when in standards mode (regardless of the &#8220;Fast Web View&#8221; setting of the PDF), something which is obviously a big problem for the Video-in-PDF documents we&#8217;re hosting.  The new mode works much better,with smooth downloads for IE.</p>
<p>Additionally, PDFs are now opened with the site navigation menu minimized, giving the PDF approximately 200 more pixels horizontally.  We added a expand/collapse menu button which can be used to open the menu.  Other file types open with the menu auto expanded, although the user can collapse it.  Our next milestone should move this from a totally automatic behavior to something that administrative users can set in the file properties.</p>
<p>Other changes:</p>
<ul>
<li>We upgraded to using Dojo 1.5</li>
<li>The look of the Comment section has been improved, and couple of behind the scenes tweaks made.</li>
<li>In the Manage &gt;Permissions, the dialog to select Users or Groups to assign permissions to can now be navigated via keyboard (arrow keys to next/back, or press a character to go to the next entry starting with that character).</li>
<li>When re-uploading a file you can now choose to overwrite the existing title, description, and summary using new data.  Previously you had to re-upload and then go to &#8220;Edit Properties&#8221; to change this information.</li>
</ul>
<p>We&#8217;re looking forward to the next Milestone, which we have only a few items in so that we can complete as soon as possible.  The main changes will be automatic lineraization (on user choice) of PDFs so that &#8220;Fast Web View&#8221; can be used, and the ability to avoid reprocessing FLV files which are uploaded.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.ipov.net%2Fapps%2Fblog%2F2010%2F10%2Fmilestone-31-cosolvent-comunity-server%2F&amp;title=Milestone%2031%3A%20CoSolvent%20Comunity%20Server" id="wpa2a_8"><img src="http://www.ipov.net/apps/blog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ipov.net/apps/blog/2010/10/milestone-31-cosolvent-comunity-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DITA Table of Contents</title>
		<link>http://www.ipov.net/apps/blog/2010/09/dita-table-of-contents/</link>
		<comments>http://www.ipov.net/apps/blog/2010/09/dita-table-of-contents/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 18:02:29 +0000</pubDate>
		<dc:creator>robert.sanders</dc:creator>
				<category><![CDATA[DITA]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.ipov.net/apps/blog/?p=599</guid>
		<description><![CDATA[Update: I still intend to publish the full code for this at some point soon, most likely via github, however I have gotten pulled away onto several other projects, and have not yet been able to get this into a version that I an satisfied with.  Additionally, I will need to move the code out [...]]]></description>
			<content:encoded><![CDATA[<p>Update: I still intend to publish the full code for this at some point soon, most likely via github, however I have gotten pulled away onto several other projects, and have not yet been able to get this into a version that I an satisfied with.  Additionally, I will need to move the code out of our SVN, were it is currently stored side-by-side with the documentation XML (which is stored in SVN because that&#8217;s what everyone here is familiar with).</p>
<p>I&#8217;ve been interested in doing some work with DITA, and currently the DITA-OT processing code seems like the main viable way to do so, at least without paying an arm and a leg.</p>
<p>One of the first things I noticed, other than the spotty documentation of the toolkit (talk about the cobbler&#8217;s family being the last to get new shoes!) was that the basic xhtml output is, well ugly.  So, the first thing I did was to open up some output using Firebug and take a look at the generated styles.  &#8220;Ok,&#8221; I said to myself, I can use a custom CSS file to fix the majority of the issues here&#8230; then I looked at the main table-of-contents.  The ToC file has no class attributes on any elements, and imports the same CSS file as the content pages.  The content pages have class attributes, so it should be possible to write some CSS to target both, but I really didn&#8217;t like the idea of leaving the CSS for my &#8216;menu&#8217; so generic, it would be just too easy to have it accidentally apply to some other elements or something.  So I started digging into how to customize the ToC output.  It turns out there isn&#8217;t any extension point to override the processing in the way there is for the main xhtml, or other main content types.</p>
<p>I looked at the tocjs plugin, which does some nice effects, using the YUI tree; but its pretty basic (the tree) and we tend to use either jquery or dojo, so I really don&#8217;t want to add another toolkit to the mix there.  What the tocjs plugin does is to make use of the intergrator step to insert some custom Ant targets into the main build files, defining a new transtype called &#8220;tocjs&#8221;.  The downside to this, is that you have to run the transform process twice -once to generate the topic html files, and a second time to generate the ToC file(s).  It also annoys me that you have to update the base build files &#8211; it just seems wrong that a plugin should change files in its &#8216;host&#8217;.</p>
<p>So, I started digging around in the XSL transform files and the Ant build files.  It took a while, as there is not much documentation on them, at least not much when compared to the number of files and targets defined.  Eventually I found that the dita-ot/build_dita2xhtml.xml file defines a target named &#8220;dita.map.xhtml.toc&#8221; which is what calls the XSL transform to create the ToC.  However, there are no extension points for this.</p>
<p>I looked at the *_template.xsl files; however I didn&#8217;t feel like digging through the DOST code to find out what it would take to define a new XSL extension point.  Maybe its really easy.  Even if it is, it would require changing core files, and possibly interfering with any upgrade path.  If it is really easy, someone let me know, I could probably create the template file and send it as a patch.  I did find one <strong>important</strong> bit of information which might help you even if you don&#8217;t ready past this point.  There is a <strong>args.xhtml.toc.class</strong> parameter that you can pass into the standard transform to assign a CSS Class to the body element of the ToC.  I have added this to the <a href="http://dita.xml.org/wiki/parameters-to-the-dita-ot-transform">DITA Wiki</a>, hopefully this helps out someone.</p>
<p>So, I am now thinking how to wire this all together.  The good news is it is possible, the bad is that altering the core build xml (and xsl) is simply the way the current integrator works.  The approach I took uses Ant import (not XSL import) to &#8220;override&#8221; the base &#8220;dita.map.xhtml.toc&#8221; with my own target, which is basically a copy of the base that points to a different XSL file.  Once I get the files in a little more advanced state I will probably release them as open source, although from what I can see if someone wanted to changed the main XSL file dita2htmlmap.xsl that wouldn&#8217;t be too difficult as well, and shouldn&#8217;t have any effect on existing code (other than adding a few extra @class declarations.</p>
<h3>Step 1 : Create a plugin</h3>
<p>Under dita-ot/plugins   (or demos if you prefer) create a new folder.  I named mine net.ipov.ditaot.toc.  In this folder add a plugin.xml file, you can copy an existing file and edit it too.  The plugin.xml should look like:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #ddbb00;">&amp;lt;</span>plugin id=&quot;net.ipov.ditaot.toc&quot;<span style="color: #ddbb00;">&amp;gt;</span>
&nbsp;
    <span style="color: #ddbb00;">&amp;lt;</span>!-- We want to dump the contents of the build_plugin.xml file into the main build.xml  --<span style="color: #ddbb00;">&amp;gt;</span>
    <span style="color: #ddbb00;">&amp;lt;</span>feature extension=&quot;dita.conductor.target.relative&quot; value=&quot;build_plugin.xml&quot; type=&quot;file&quot; /<span style="color: #ddbb00;">&amp;gt;</span>
&nbsp;
<span style="color: #ddbb00;">&amp;lt;</span>/plugin<span style="color: #ddbb00;">&amp;gt;</span></pre></div></div>

<p><!-- x --></p>
<h3>Step 2 : Create a copy of the XSL</h3>
<p>I won&#8217;t include the full source here, as it is getting a little long.  But the basics are:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #ddbb00;">&amp;lt;</span>xsl:stylesheet version=&quot;1.0&quot;
    xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
    xmlns:saxon=&quot;http://icl.com/saxon&quot;
    xmlns:xt=&quot;http://www.jclark.com/xt&quot;
    xmlns:java=&quot;org.dita.dost.util.StringUtils&quot;
    extension-element-prefixes=&quot;saxon xt&quot;
    exclude-result-prefixes=&quot;java&quot;<span style="color: #ddbb00;">&amp;gt;</span>
&nbsp;
    <span style="color: #ddbb00;">&amp;lt;</span>xsl:template match=&quot;/*[contains(@class, ' map/map ')]&quot;<span style="color: #ddbb00;">&amp;gt;</span>
        <span style="color: #ddbb00;">&amp;lt;</span>!-- change output of the top-level ul and add anything else you like. --<span style="color: #ddbb00;">&amp;gt;</span>
    <span style="color: #ddbb00;">&amp;lt;</span>/xsl:template<span style="color: #ddbb00;">&amp;gt;</span>
&nbsp;
    <span style="color: #ddbb00;">&amp;lt;</span>xsl:template
      match=&quot;*[contains(@class, ' map/topicref ')][not(@toc='no')][not(@processing-role='resource-only')]&quot;<span style="color: #ddbb00;">&amp;gt;</span>
        <span style="color: #ddbb00;">&amp;lt;</span>!-- change output of the li items in the ToC --<span style="color: #ddbb00;">&amp;gt;</span>
    <span style="color: #ddbb00;">&amp;lt;</span>/xsl:template<span style="color: #ddbb00;">&amp;gt;</span>
&nbsp;
<span style="color: #ddbb00;">&amp;lt;</span>/xsl:stylesheet<span style="color: #ddbb00;">&amp;gt;</span></pre></div></div>

<p><!-- x --></p>
<h3>Step 3 : Add the build_plugin.xml file to declare the build target.</h3>
<p>This is where you define the Ant target, which when pulled in by the integrator will override the built in target of the same name.  Note that this could possibly break in the future if the integrator changes the order of code to be before rather than after the imports (I think).  At first I couldn&#8217;t get both my override to work (it doesn&#8217;t work if the build_plugin.xml imports it) and get a file path that was relative to the plugin directory; however I stumbled on the answer in the dita-ot Yahoo Group while looking for some other information (on code highlighting).  A little further experimentation and I was able to get somethign that worked.</p>
<p>First create a build file, must match the name declared in the plugin.xml, so here it&#8217;s called build_plugin.xml</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #ddbb00;">&amp;lt;</span>project<span style="color: #ddbb00;">&amp;gt;</span>
&nbsp;
  <span style="color: #ddbb00;">&amp;lt;</span>import file=&quot;build_toc.xml&quot;/<span style="color: #ddbb00;">&amp;gt;</span>
&nbsp;
  <span style="color: #ddbb00;">&amp;lt;</span>target name=&quot;dita.out.map.xhtml.toc&quot;
        unless=&quot;noMap&quot; if=&quot;inner.transform&quot;
        description=&quot;Build HTML TOC file,which will adjust the directory&quot;<span style="color: #ddbb00;">&amp;gt;</span>
&nbsp;
      <span style="color: #ddbb00;">&amp;lt;</span>!-- define your own xsl, note you have to specify the ./plugins/NAME_OF_PLUGIN/ path here --<span style="color: #ddbb00;">&amp;gt;</span>
      <span style="color: #ddbb00;">&amp;lt;</span>xslt
       style=&quot;${xtoc_plugin.dir}${file.separator}xsl${file.separator}xhtmtoc.xsl&quot;
       ... <span style="color: #ddbb00;">&amp;gt;</span>
          ...
      <span style="color: #ddbb00;">&amp;lt;</span>/xslt<span style="color: #ddbb00;">&amp;gt;</span>    
&nbsp;
  <span style="color: #ddbb00;">&amp;lt;</span>/target<span style="color: #ddbb00;">&amp;gt;</span>
&nbsp;
<span style="color: #ddbb00;">&amp;lt;</span>/project<span style="color: #ddbb00;">&amp;gt;</span></pre></div></div>

<p>Now we need a second build file, the build_toc.xml referenced in the first:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #ddbb00;">&amp;lt;</span>project name=&quot;xtoc_plugin&quot; basedir=&quot;.&quot;<span style="color: #ddbb00;">&amp;gt;</span>
	<span style="color: #ddbb00;">&amp;lt;</span>dirname property=&quot;xtoc_plugin.dir&quot; file=&quot;${ant.file.xtoc_plugin}&quot;/<span style="color: #ddbb00;">&amp;gt;</span>
<span style="color: #ddbb00;">&amp;lt;</span>/project<span style="color: #ddbb00;">&amp;gt;</span></pre></div></div>

<p>When the build_plugin.xml is merged into the core build files, the import is also copied in, with a corrected path.  Then the path the plugin is captured in the imported build_toc file, which can be used in the &#8216;included&#8217; target.  Kind of tricky, and it feels a little &#8220;hacky&#8221; to me, but it seems to be working.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.ipov.net%2Fapps%2Fblog%2F2010%2F09%2Fdita-table-of-contents%2F&amp;title=DITA%20Table%20of%20Contents" id="wpa2a_10"><img src="http://www.ipov.net/apps/blog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ipov.net/apps/blog/2010/09/dita-table-of-contents/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Milestone 29: CoSolvent Comunity Server</title>
		<link>http://www.ipov.net/apps/blog/2010/09/milestone-29-cosolvent-comunity-server/</link>
		<comments>http://www.ipov.net/apps/blog/2010/09/milestone-29-cosolvent-comunity-server/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 02:25:42 +0000</pubDate>
		<dc:creator>robert.sanders</dc:creator>
				<category><![CDATA[CoSolvent]]></category>

		<guid isPermaLink="false">http://www.ipov.net/apps/blog/?p=567</guid>
		<description><![CDATA[Wow, so much going on that I forgot to post Milestone 28!  Anyway, I am truly pleased to be able to announce that we&#8217;ve finished Milestone 29 on CoSolvent Community Server.  As usual the full list of changes (in developer speak) can be found on on our Assembla page https://www.assembla.com/spaces/cosolvent/tickets,  just use the &#8220;Closed by [...]]]></description>
			<content:encoded><![CDATA[<p>Wow, so much going on that I forgot to post Milestone 28!  Anyway, I am truly pleased to be able to announce that we&#8217;ve finished Milestone 29 on CoSolvent Community Server.  As usual the full list of changes (in developer speak) can be found on on our Assembla page https://www.assembla.com/spaces/cosolvent/tickets,  just use the &#8220;Closed by Milestone&#8221; filter as the Milestone is now closed, so it no longer shows up in the default filter. This release has some hiccups due to finishing updating our build system to work with the git version control system, but overall the migration to git has been pretty smooth.</p>
<p>This release adds some polish to the user interface, fixing the email auto-completion feature, adding &#8216;loading&#8217; icons to some ajax components, and adding filtering of users by groups to the management interface.  We also implemented &#8220;versioned assets&#8221; &#8211; in this case a relatively &#8220;dumb&#8221; way, by simply adding <span style="font-family: Courier New;">-MILESTONE_NUMBER</span> to the the javascript directory.  This should fix issues we&#8217;ve had in the past with user&#8217;s having outdated assets stuck in their cache ruining their experience after an upgrade.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.ipov.net%2Fapps%2Fblog%2F2010%2F09%2Fmilestone-29-cosolvent-comunity-server%2F&amp;title=Milestone%2029%3A%20CoSolvent%20Comunity%20Server" id="wpa2a_12"><img src="http://www.ipov.net/apps/blog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ipov.net/apps/blog/2010/09/milestone-29-cosolvent-comunity-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Milestone 27: CoSolvent Comunity Server</title>
		<link>http://www.ipov.net/apps/blog/2010/08/milestone-27-cosolvent-comunity-server/</link>
		<comments>http://www.ipov.net/apps/blog/2010/08/milestone-27-cosolvent-comunity-server/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 16:32:50 +0000</pubDate>
		<dc:creator>robert.sanders</dc:creator>
				<category><![CDATA[CoSolvent]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.ipov.net/apps/blog/?p=562</guid>
		<description><![CDATA[The development team here at iPOV is pleased to announce the release of CoSolvent Community Server, Milestone 27. This release continues to improve stability and expand the feature set. The main changes in this release are: Improvements to Commenting, including the addition of &#8220;Sort by Video Timing&#8221; to sort the comments based on the time [...]]]></description>
			<content:encoded><![CDATA[<p>The development team here at iPOV is pleased to announce the release of CoSolvent Community Server, Milestone 27. This release continues to improve stability and expand the feature set.  The main changes in this release are:</p>
<ul>
<li>Improvements to Commenting, including the addition of &#8220;Sort by Video Timing&#8221; to sort the comments based on the time on a video that the comment is associated with (applies only to video files).</li>
<li>Visual formatting tweaks, including decreasing unneeded space between item previews in the &#8220;Grid&#8221; folder view mode, this greatly improves the layout for users with a 1024 x 768 screen.</li>
<li>Addition of item flags for &#8220;Has comments&#8221;, &#8220;New Item&#8221;, &#8220;Changed Item&#8221; to help visually scan a folder contents.</li>
<li>Further improvements to the upload control:
<ul>
<li>Addition of a &#8220;Keep Alive&#8221; using a Javascript timeout to keep the user&#8217;s session alive when on the upload page.  We&#8217;ve had issues with users going to the upload page, getting distracted and moving to some other application / task, then returning to the still loaded upload page and attempting to upload files, only to get an error when the (often large) file finishes uploading and the server fails to process it due to the user&#8217;s browser session being timed out due to inactivity.  This change will fix this.  The &#8220;keep alive&#8221; is also triggered immediately before running an upload which should cause most other errors to be detected before a user actually has to wait for a file upload.</li>
<li>Errors are now hidden by default, clicking on the &#8220;Errors&#8221; link in the upload status bar loads the list of upload errors; each error in this list is now cross linked to an online help page (<a href="http://www.ipov.net/apps/ccs-support/articles/cosolvent-upload-errors/" target="_blank">http://www.ipov.net/apps/ccs-support/articles/cosolvent-upload-errors/</a>) which explains the error in more details (and which can be updated faster than the application text).</li>
<li>Grid used to display files that are queued for upload has some visual improvements to make it more usable.</li>
</ul>
</li>
<li>Continued to work on updating the PHP code to run properly on PHP 5.3</li>
</ul>
<p>The complete list of issues addresses can be seen at <a href="https://www.assembla.com/spaces/cosolvent/milestones/240821-milestone-27" target="_blank">https://www.assembla.com/spaces/cosolvent/milestones/240821-milestone-27</a></p>
<p>Additionally, this release should mark the last development done in our SVN repository; we are transitioning to use of git to take advantage of its cheap branches and other distributed features.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.ipov.net%2Fapps%2Fblog%2F2010%2F08%2Fmilestone-27-cosolvent-comunity-server%2F&amp;title=Milestone%2027%3A%20CoSolvent%20Comunity%20Server" id="wpa2a_14"><img src="http://www.ipov.net/apps/blog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ipov.net/apps/blog/2010/08/milestone-27-cosolvent-comunity-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Two Underutilized Software Training Technologies</title>
		<link>http://www.ipov.net/apps/blog/2009/10/two-underutilized-software-training-technologies/</link>
		<comments>http://www.ipov.net/apps/blog/2009/10/two-underutilized-software-training-technologies/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 02:20:27 +0000</pubDate>
		<dc:creator>vic.uzumeri</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[BB Flashback]]></category>
		<category><![CDATA[Camtasia]]></category>
		<category><![CDATA[eLearning]]></category>
		<category><![CDATA[screencasting]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.ipov.net/blog/?p=476</guid>
		<description><![CDATA[There are two technologies that are familiar to many software professionals, but somehow don&#8217;t see much use in the rest of the organization. The first technology is computer screen movie capture (aka screencasting) and the second is the ability of virtually every laptop and most video cards to support multiple monitors. Screencasts (aka screen capture [...]]]></description>
			<content:encoded><![CDATA[<p>There are two technologies that are familiar to many software professionals, but somehow don&#8217;t  see much use in the rest of the organization. The first technology is computer screen movie capture (aka screencasting) and the second is the ability of virtually every laptop and most video cards to support multiple monitors.</p>
<p><span id="more-476"></span></p>
<h3>Screencasts (aka screen capture movies)</h3>
<p>Screen capture movie software (the &#8220;screencast&#8221; recorder) has been around for at least a decade. In essence, screencast recorders are virtual computer-screen camcorders. You install them and let them run in the background. When you want to record your onscreen activity, you press &#8216;record&#8217; (usually a hotkey) and continue working. When you&#8217;re finished, you press &#8216;stop&#8217; (another hotkey) and a full-motion movie of your activity is stored to disk. If you wish, you can record sound as well, most likely in the form of a running commentary spoken into the PC&#8217;s microphone. While there are many screencast programs on the market, iPOV has had good experience with the stability and value offered by <a href="http://www.bbsoftware.co.uk/BBFlashBack/Home.aspx">BBFlashback</a> and the features and performance of<a href="http://www.techsmith.com/camtasia.asp"> Camtasia</a>.</p>
<p>Public screencast examples are everywhere. YouTube is full of them. So, wouldn&#8217;t you expect to see widespread use in large companies and organizations for internal IT training? That just seems to be starting.  I suspect that there are at least 4 contributing reasons why it doesn&#8217;t seem to be as common as we would expect:</p>
<ul>
<li><strong>Lack of Awareness</strong> &#8211; Screencast software is a surprising well-kept secret. We can&#8217;t count the number of times that we have spoken to programmers, program managers, and CIOs that don&#8217;t know even they exist. If we point them to examples on YouTube, they say: &#8220;I wondered how that was done&#8221;.</li>
<li><strong>Camera Shyness</strong> &#8211; It takes a certain amount of guts to record a movie that has your voice on it. What if you misspeak? What if you have a squeaky voice? What if you have a thick accent? All sorts of things can go wrong that will make you more nervous. Then you will make more mistakes and get even more nervous. Then you will give up.</li>
<li><strong>Lack of searchability</strong> &#8211; It takes time to demonstrate a complex software operation. Ten, twenty or thirty minutes is not uncommon. How many potential users have the patience to watch that much video to get an answer to a question? The problem is not getting to the right spot (most screencasts have tracker bars), the problem is knowing there is a right spot to get to. If only you could search the screencasts the way you search Google.</li>
<li><strong>No place to store them</strong> &#8211; Screencast movie files have gotten a lot smaller &#8211; but many are still too big to attach to corporate emails. That means that you need to put them on a web server or CD. If you accumulate a large collection, you will be talking gigabytes. Then how do you move them or find them. That brings us back to the searchability concern.</li>
</ul>
<p>Until someone finds a way to overcome these issues, they will unfairly delay the adoption of this powerful and exciting technology.</p>
<p>Some Links with ideas:</p>
<ul>
<li><a href="http://www.bbsoftware.co.uk/bbflashback.aspx">BB Flashback</a> (free recorder and/or commercial editor)</li>
<li><a href="http://www.techsmith.com/camtasia.asp">Techsmith Camtasia Studio</a> (commercial recorder and editor)</li>
<li><a href="http://www.jingproject.com/">Jing</a> (free recorder, but limited to 5 min run time)</li>
<li><a href="http://en.wikipedia.org/wiki/Comparison_of_screencasting_software">Screencast Software Comparison</a></li>
</ul>
<h3>Dual Monitor</h3>
<p>With dual monitor support, you can hook up a second monitor and expand your laptop or desktop to double its size. This will give you enough screen real estate to support two applications that are fully open and functional. The application to the problem statement at the start of this diary should be obvious. With two monitors, <strong>you can open your application on one screen and the help window on the other</strong>. You can copy and paste from one to the other in one quick motion. You can read instructions in the help file as you follow them in the application.</p>
<div style="text-align: center;"><span><img class="aligncenter size-full wp-image-477" title="DM_Span_View_small" src="http://www.ipov.net/blog/wp-content/uploads/2009/09/DM_Span_View_small.jpg" alt="DM_Span_View_small" width="500" height="250" /><br />
</span></div>
<p>Every notebook computer built in the past 5 years has built-in support for an external monitor. For desktop computers, you may have to add an inexpensive video card and a second monitor. The total one-time cost is typically less than $150 per seat. The return on that investment for a learner will be huge. Nonetheless, this capability is <a href="http://www.computerworld.com.au/index.php/id;659368874;fp;2;fpid;1239068928" target="_blank">just starting to get the attention</a> it deserves. You will find dual monitor setups in many software development shops and especially on trading floors, but not in most ordinary offices. Since there is no obvious drawback, it seems to be mainly an issue of awareness &#8211; and occasionally bureaucracy. One large company told me that all their IT support was outsourced to a 3rd party computer services firm. The service firm charged $100 per month for each monitor that it deployed!</p>
<p>Nevermind.</p>
<p>If, however, the PTB (powers that be) allow you to experiment with ways to achieve much higher productivity at a minimal cost, here are some additional tools and articles with more ideas for multiple monitors:</p>
<ul>
<li><a href="http://sixrevisions.com/tools/five-free-tools-for-multi-monitor-computer-set-ups/">Five Free Tools</a></li>
<li><a href="http://www.realtimesoft.com/multimon/faq.asp">MultiMonitor FAQ</a></li>
<li><a href="http://www.9xmedia.com/products/index.php">Multi-Screens (banks of monitors)</a></li>
</ul>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.ipov.net%2Fapps%2Fblog%2F2009%2F10%2Ftwo-underutilized-software-training-technologies%2F&amp;title=Two%20Underutilized%20Software%20Training%20Technologies" id="wpa2a_16"><img src="http://www.ipov.net/apps/blog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ipov.net/apps/blog/2009/10/two-underutilized-software-training-technologies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transforming Video: Non-destructively!</title>
		<link>http://www.ipov.net/apps/blog/2009/10/transforming-video-non-destructively/</link>
		<comments>http://www.ipov.net/apps/blog/2009/10/transforming-video-non-destructively/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 21:09:24 +0000</pubDate>
		<dc:creator>vic.uzumeri</dc:creator>
				<category><![CDATA[Applications]]></category>

		<guid isPermaLink="false">http://www.ipov.net/blog/?p=533</guid>
		<description><![CDATA[Video is far more than a publishing or entertainment medium. It can also be a powerful tool to record expert knowledge. Unfortunately, the video that emerges from a typical knowledge capture session is too fragmented, error-filled and poorly structured to be used directly in professional presentations or documentation. A video producer will have to make extensive (and expensive) edits to render the video clips presentable. Typically, the producer will use sophisticated software (e.g., Adobe Premiere and Apple Final Cut) to slice, dice and dramatically transform the raw material. However, conventional tools create two problems that complicate later revisions: ]]></description>
			<content:encoded><![CDATA[<p>Video is far more than a publishing or entertainment medium. It can also be a powerful tool to record expert knowledge. Unfortunately, the video that emerges from a typical knowledge capture session is too fragmented, error-filled and poorly structured to be used directly in professional presentations or documentation. A video producer will have to make extensive (and expensive) edits to render the video clips presentable. Typically, the producer will use sophisticated software (e.g., Adobe Premiere and Apple Final Cut) to slice, dice and dramatically transform the raw material. However, <strong>conventional tools create two problems that complicate later revisions</strong>:
</p>
<p><span id="more-533"></span></p>
<ul>
<li><strong>The edits are destructive</strong> &#8211; Most editing operations actually change video source. As the producer makes one edit after another, they create a complex trail of changes that is hard to reverse. If, for example, they complete the editing of a video clip and someone spots a flaw, the producer may have to go back to the beginning and repeat all of their work.</li>
<li><strong>Edits are made early in the development cycle</strong> &#8211; Since the edits are destructive, there is strong pressure to make them up front, get the video right, then proceed from there. Unfortunately, this means that if later work requires a change in the video, the work has to be repeated almost from scratch.</li>
</ul>
<p>
iPOV&#8217;s approach is totally different. iPOV can, of course, apply any of the familiar destructive editing technologies. If you want special effects on your video, we can add them. However, iPOV has developed a unique set of <strong>standard transformations</strong> that are inherently non-destructive. Applied in combination, our transformations can totally alter the appearance and content of the source video. As a bonus, our work is easily reversible up to the end of the development process and beyond. This makes maintenance easier and less costly. iPOV&#8217;s standard transformations fall into two main categories: <strong>visual transformations</strong> and <strong>content transformations</strong> that can be combined to create an amazing range of finished effects. The content transformations will be the subject of another blog entry. This one focuses on the challenge of visual transformation.
</p>
<h3>Visual Transformations</h3>
<p>
iPOV&#8217;s visual transformations are designed to alter the visual structure and appearance of a video source. They do some of the operations that are normally associated with high-quality commercial software. However, iPOV&#8217;s approach is totally different. iPOV has developed a powerful CoSolvent Flash Player (CFP) that does two transformations. Together, these can virtually slice, merge, reorder, overlay, insert, hide, zoom, slow, accelerate or freeze action &#8211; without altering the original video clips. The CFP runs in the Adobe Flash Player that is in the end-user&#8217;s web browser. In other words, the CFP applies the transformations as the movie is being downloaded to the web page. That&#8217;s as late in the development cycle as we could manage.
</p>
<table width="100%" border="1" cellpadding="2">
<thead>
<tr>
<th align="center">
Transformation
</th>
<th width="14%" align="center">
iPOV Technology
</th>
<th width="18%" align="center">
iPOV Service
</th>
<th width="16%" align="center">Goals
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<div style="background-color: rgb(191, 217, 140);">
<div class="container" id="small-left">
<div class="content">
      <strong>Construction</strong><br />
      <span class="inline inline-undefined"><a href="/content/dynamically-constructing-video-bits-and-pieces"><img src="http://www.ipov.net/assets/images/VideoConstruction_0.png" alt="" title="" class="image image-_original " width="350" height="142"/></a></span>
   </div>
</div>
</div>
</td>
<td>
The CFP is a Flash application that assembles, orders, and plays a set of Flash movie clips in any sequence or timing on a virtual timeline. All of the action is driven from  external XML specification files.
</td>
<td>
iPOV staff craft the XML spec files to client preferences for:</p>
<ul style="margin-left: 14pt;">
<li>
Choice of sub-movies</li>
<li>Order of components</li>
<li>
Component timings</li>
<li>Inserted animations</li>
</ul>
</td>
<td>
The goal is to take all of the good bits and pieces from a set of raw movies and Flash raw materials and dynamically assemble them into a pleasing, seamless movie.
</td>
</tr>
<tr>
<td>
<div style="background-color: rgb(242, 188, 135);">
<div class="container" id="small-left">
<div class="content">
         <strong>Enhancement</strong><br />
      <span class="inline inline-undefined"><a href="/content/enhance-appearance-your-video-clips"><img src="http://www.ipov.net/assets/images/VideoAnotations_2.png" alt="" title="" class="image image-_original " width="350" height="142"/></a></span>
   </div>
</div>
</div>
</td>
<td>
The CFP listens for commands from javascript or XML spec files. The commands can tell it to add subtitles, turn on a layer to mask a flaw, add symbols, or hide and reveal Flash animations and controls.
</td>
<td>
iPOV staff craft the source Flash files and XML spec files to:</p>
<ul style="margin-left: 14pt;">
<li>
Add overlays</li>
<li>
Mask problems</li>
<li>
Add dynamic controls</li>
<li>
Highlight features</li>
</ul>
</td>
<td>
Apply the power of Flash layers to non-destructively change the appearance of the underlying constructed movie.
</td>
</tr>
</tbody>
</table>
<p> To be fair, a video producer, instructional designer or documentation author has lots of choices. There are excellent software and hardware products that do far more than iPOV&#8217;s transformations. However, commercial tools seldom consider overall project efficiency. To be efficient, you need to <strong>manage</strong> the visual changes from end to end:
</p>
<ol>
</ol>
<ul>
<li>iPOV has defined formal procedures and guidelines for applying these visual transformations. With its procedures, iPOV can enforce consistency across long video clips or across all of the clips in a large collection.</li>
<li>The spec files for the CFP can be revised throughout the content development life cycle and iPOV&#8217;s formal procedures enforce consistency across updates and revisions long after the initial authoring project is finished.</li>
</ul>
<p>iPOV is very excited about the long-term potential for non-destructive transformations. Our CFP is just beginning its journey. There are many potential applications that we haven&#8217;t had time to explore and we are very eager to speak with potential clients that might be want to explore them with us. For example, we know that we could program a server to rewrite the XML spec files dynamically to reflect viewer profiles. That means that two website visitors might see totally different &#8216;mashups&#8217; that are tailored precisely to their personal needs. The resulting mashups will each appear to play as a seamless movie.  How many potential applications are there for that capability? If you have one, please contact us so we can discuss it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ipov.net/apps/blog/2009/10/transforming-video-non-destructively/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Engineers Love Writing Manuals! &#8211; Really!</title>
		<link>http://www.ipov.net/apps/blog/2009/10/engineers-love-writing-manuals-really/</link>
		<comments>http://www.ipov.net/apps/blog/2009/10/engineers-love-writing-manuals-really/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 21:05:59 +0000</pubDate>
		<dc:creator>vic.uzumeri</dc:creator>
				<category><![CDATA[Applications]]></category>

		<guid isPermaLink="false">http://www.ipov.net/blog/?p=525</guid>
		<description><![CDATA[You customized an ERP module with 15 new fields, 4 new screens, 5 significantly changed screens, a significantly different workflow, and an updated graphics 'theme'. It takes you about 30 min just to walk a co-worker through all of the new features and methods. Now, you're tasked to deliver end-user documentation and training materials ASAP. Your options are:]]></description>
			<content:encoded><![CDATA[<h3>Problem Statement</h3>
<p>You customized an ERP module with 15 new fields, 4 new screens, 5 significantly changed screens, a significantly different workflow, and an updated graphics &#8216;theme&#8217;. It takes you about 30 min just to walk a co-worker through all of the new features and methods. Now, you&#8217;re tasked to deliver end-user documentation and training materials ASAP. Your options are:</p>
<p><span id="more-525"></span></p>
<ol>
<li>Open Snagit, grab lots of screen shots and start writing a Word manual &#8211; you should have it ready in a week or so. </li>
<li>Give it to the tech writers &#8211; they&#8217;ll pester you with questions, but they might have it done in a couple of weeks</li>
<li>Write a quickie memo and email it to end-users and let them figure it out for themselves &#8211; eventually.</li>
<li><strong>Spend 1 or 2 hours on the problem and deploy it in multiple, professional formats a week from now.</strong> </li>
</ol>
<div align="center">
<blockquote>
<p><span class="Apple-style-span" style="border-collapse: collapse; font-size: 12px; font-family: Arial; color: rgb(34, 34, 34);">Hint: Pick option (4) &#8211; except nothing that efficient exists. Right? Well&#8230;</span></p>
</blockquote>
</div>
<h3>The Typical Knowledge Asset Life Cycle </h3>
<p>There&#8217;s an old management maxim: <strong><em>You must manage around your scarcest resource</em></strong>. For many (probably most) technology-intensive companies, the on-task time of their critical experts is a perennial &#8220;scarcest resource&#8221;. Despite that, companies routinely assign high-value talents to routine, mundane work &#8211; because they are the only people that can do the task. Nowhere is this waste more evident than in the production of &#8220;knowledge assets&#8221; like presentations, courseware, technical manuals, and operator guides. High-priced engineers work long hours with high-priced technical writers in one of the most inefficient processes in all of business. Worse, everyone hates doing it. If there is an engineer that loves writing manuals, no one at iPOV has ever met him or her. Yet they must do it because end-users need what they know. Under the best scenario, the task described above might go as well as is shown in this calendar: </p>
<p align="center"><span class="inline inline-undefined"><img src="http://www.ipov.net/assets/images/diyCalendar.img_assist_custom-309x176.jpg" alt="" title="" class="image image-img_assist_custom-309x176 " width="309" height="176"/></span></p>
<p>If the participants are typical, however, the task will take much longer. The developer will be pulled onto other problems and won&#8217;t be able to write in a continuous effort. It may be a couple of weeks before the developer can finish the first draft. Then it will take time to schedule the reviews. Then more time to schedule an independent tester to verify that the procedures will work as written. Then the material has to be formatted and integrated into a document that meets the standards and is suitable for deployment. A task that might optimally be done in a week or two can easily stretch out for months. Finally, you could dump it all on a tech writer or outsource service. Let someone else figure things out from the finished application. Someone will still need to manage, review and validate their work. Hopefully they won&#8217;t pester the developer with too many questions. </p>
<p>What if there were a solution to this problem that was inherently fast, efficient and accurate? What if that solution made almost no demands on the developer&#8217;s time? What if the outputs were easily packaged in a wide range of deliverable forms: eLearning, manuals, class presentation materials, reference guides? What if the solution was less expensive than any method currently in use &#8211; even competitive with outsourcing to low-wage countries? What if the process was simple and incredibly easy to follow? What if that process was intelligent, culturally savvy and adaptable and would make the developer look really smart and competent? What if the developer could do everything he or she needed to do in a few hours after lunch, on a plane, in their hotel room on the road, or at home? </p>
<div align="center">
<blockquote>In other words, what if Option (4) really exists?</p></blockquote>
</div>
<h3>The Lean Knowledge Asset Life Cycle</h3>
<p>iPOV has found a way to achieve the impossible. It just takes a total rethinking of the methodology &#8211; and a critical insight: <strong>The easiest way to write a software manual is to ask the developer to demonstrate the software and record the demonstration on video. </strong>With a thorough video demonstration, the developer can be excused from most of the subsequent documentation production process. The demonstration needn&#8217;t be smooth or professional. It can have gaffes and minor mistakes (if they are immediately corrected). The sound can be poor. A co-worker can knock on the door and interrupt the session. All of that is OK. There are only two things that are absolutely essential:</p>
<ul>
<li>A clear recording of the entire computer desktop and the developer&#8217;s commentary</li>
<li>A thorough explanation of the topic details.</li>
</ul>
<p>The first requirement is easy to meet with the latest generation of <a href="http://en.wikipedia.org/wiki/Screencast">screencasting</a> software (also see this <a href="http://www.techsoup.org/learningcenter/training/page6885.cfm">blog article summary</a>). Programs like <a href="http://www.techsmith.com">camtasia</a> and <a href="http://www.bbsoftware.co.uk/BBFlashBack.aspx">BBFlashback</a>  make this process simple and nearly foolproof. Install a standard Windows program and let it run in the background. The second requirement is met if the developer plugs a microphone into the PC and gives a running commentary to the video recording. The audio quality or the speech clarity is largely irrelevant. It&#8217;s purpose is just to record the developer&#8217;s thoughts. Flubs and gaffes and misstatements are not important. When these two requirements are met, the scenario in the problem statement can be satisfied with the following process:</p>
<p align="center"><span class="inline inline-none"><img src="http://www.ipov.net/assets/images/AssetLifeCycleTiming.jpg" alt="" title="" class="image image-img_assist_custom-614x404 " width="608" height="400"/></span></p>
<p>In this process, the software developer&#8217;s only job is to share their knowledge on the video/audio recording. With no need to worry about minor mistakes, most people can learn to produce useful video in one or two takes. iPOV will take the recording and apply several transformations, most likely the <a href="/content/dynamically-constructing-video-bits-and-pieces">construction</a>, <a href="/content/restate-and-validate-message-video-clip">restatement,</a> and possibly the <a href="/content/extract-and-repackage-knowledge-contained-video-clips">extraction</a> transformations. With these, iPOV can generate polished, professional eLearning and documentation materials that closely reflect the developer&#8217;s original intent. After the initial planning and recording sessions, the developer will only need to be involved in a review process about halfway through the process. At this point, the developer can edit the draft script to reflect what they would really like to have said. </p>
<p>Developer involvement is mostly independent of  the content. The only exception is for recordings that rely on PowerPoint presentations or other forms of graphical documentation (e.g, UML diagrams). Preparation takes time &#8211; but that is true regardless of the recording method. At each stage, iPOV&#8217;s process generates interim deliverables that have an intrinsic value. In a crisis, the original developer recordings can be sent immediately. Whatever their faults, they are better than nothing. The review draft will have a script that has undergone significant grammar review and improvement. The final output is generally a SCORM-compliant learning object that is suitable for referencing in an online document or inclusion in courseware in an LMS. Other materials can be derived from this, including foreign language and print versions.</p>
<h3>Bottom Line </h3>
<p>In over 350 projects, iPOV has proven that this new method really works. iPOV has taken 5 hours of developer recordings and turned them into 5 hours of finished, validated eLearning materials in less than 3 weeks &#8211; start to finish. The developer&#8217;s time commitment was about 3 days! The rest of the time, the developers were busy getting the software system ready for deployment. </p>
<p>Why waste the time of the organization&#8217;s scarcest resource. Why put corporate initiatives in jeopardy by sidetracking your experts on mundane documentation? Why put projects in jeopardy by failing to distribute the documentation that end-users need? It simply is unnecessary.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ipov.net/apps/blog/2009/10/engineers-love-writing-manuals-really/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

