<?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>Threepress Consulting blog &#187; tools</title>
	<atom:link href="http://blog.threepress.org/category/tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.threepress.org</link>
	<description>Threepress creates software for publishers, educators and authors.</description>
	<lastBuildDate>Tue, 27 Jul 2010 16:34:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>docbook2epub updated to version 1.0.2</title>
		<link>http://blog.threepress.org/2010/05/11/docbook2epub-updated-to-version-1-0-2/</link>
		<comments>http://blog.threepress.org/2010/05/11/docbook2epub-updated-to-version-1-0-2/#comments</comments>
		<pubDate>Tue, 11 May 2010 15:57:15 +0000</pubDate>
		<dc:creator>Liza Daly</dc:creator>
				<category><![CDATA[epub]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.threepress.org/?p=1463</guid>
		<description><![CDATA[Our Python script to convert from DocBook to ePub using the DocBook XSL has been updated to version 1.0.2.
I&#8217;ve added some command-line options to override the location of the DocBook XSL (previously it was stuck in a settings file) and to also point to an optional CSS file.


$ db2epub.py
Usage: db2epub.py docbook1.xml [docbook2.xml]... --xsl [DocBook XSL [...]]]></description>
			<content:encoded><![CDATA[<p>Our Python script to convert from <a href="http://docbook.org/">DocBook</a> to ePub using the <a href="http://docbook.sourceforge.net/release/xsl/current/doc/">DocBook XSL</a> has been updated to <a href="http://code.google.com/p/epub-tools/">version 1.0.2</a>.</p>
<p>I&#8217;ve added some command-line options to override the location of the DocBook XSL (previously it was stuck in a settings file) and to also point to an optional CSS file.</p>
<pre class="brush: plain;">

$ db2epub.py
Usage: db2epub.py docbook1.xml [docbook2.xml]... --xsl [DocBook XSL or customization] --css [css file]
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.threepress.org/2010/05/11/docbook2epub-updated-to-version-1-0-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tutorial on building ePubs now freely available</title>
		<link>http://blog.threepress.org/2010/04/29/tutorial-on-building-epubs-now-freely-available/</link>
		<comments>http://blog.threepress.org/2010/04/29/tutorial-on-building-epubs-now-freely-available/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 14:16:49 +0000</pubDate>
		<dc:creator>Liza Daly</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[epub]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.threepress.org/?p=1458</guid>
		<description><![CDATA[My tutorial Build a digital book with EPUB, posted on IBM DeveloperWorks,  has been out for some time (November 2008!) but it has recently been updated with some minor corrections. It also no longer requires registration thanks to a policy change at DeveloperWorks.

]]></description>
			<content:encoded><![CDATA[<p>My tutorial <a href="http://www.ibm.com/developerworks/xml/tutorials/x-epubtut/index.html">Build a digital book with EPUB</a>, posted on IBM DeveloperWorks,  has been out for some time (November 2008!) but it has recently been updated with some minor corrections. It also no longer requires registration thanks to a policy change at DeveloperWorks.</p>
<p><a href="http://www.ibm.com/developerworks/xml/tutorials/x-epubtut/index.html"><img src="http://3press-blog.s3.amazonaws.com/ibm_tutorial.png" alt="EPUB Tutorial screenshot" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.threepress.org/2010/04/29/tutorial-on-building-epubs-now-freely-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s in an identifier?</title>
		<link>http://blog.threepress.org/2009/11/18/whats-in-an-identifier/</link>
		<comments>http://blog.threepress.org/2009/11/18/whats-in-an-identifier/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 15:59:53 +0000</pubDate>
		<dc:creator>Liza Daly</dc:creator>
				<category><![CDATA[bookworm]]></category>
		<category><![CDATA[epub]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.threepress.org/?p=917</guid>
		<description><![CDATA[ePub books are supposed to have a unique identifier: the Dublin Core identifier found in the OPF file.  Unfortunately, the ePub spec doesn&#8217;t have any mechanism to enforce the uniqueness of the ID, so we live in a world where in fact many many epubs don&#8217;t have truly unique identifiers (or indeed, any identifiers [...]]]></description>
			<content:encoded><![CDATA[<p>ePub books are supposed to have a unique identifier: the <a href="http://www.openebook.org/2007/opf/OPF_2.0_final_spec.html#Section2.2.10">Dublin Core identifier</a> found in the OPF file.  Unfortunately, the ePub spec doesn&#8217;t have any mechanism to enforce the uniqueness of the ID, so we live in a world where in fact many many epubs don&#8217;t have truly unique identifiers (or indeed, any identifiers at all).</p>
<p>Early in Bookworm&#8217;s history we didn&#8217;t specifically extract the identifier from the ePub and put it in the database, but we do now, so I can query the state of identifiers in the more recent books.</p>
<p>18,571 epubs in Bookworm have some kind of identifier in the database.  Many of these were auto-generated by Bookworm, for example if the book had none at all.</p>
<p>14,735 of these are unique.  Most of the duplicates came from earlier versions of Calibre, which simply generated identifiers like &#8220;25.&#8221;  Others are just duplicate copies of the same book, which of course is okay.</p>
<p>There are three truly useful identifier types. I&#8217;ll specify these in order of my personal preference:</p>
<h3>ISBN</h3>
<p>Modern commercial books already have unique identifiers. Convenient!  Use the ISBN as your primary ID in the epub if you have it, and be sure to use the correct ISBN for your ebook edition:</p>
<pre class="brush: xml;">
&lt;dc:identifier xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot;
                 id=&quot;bookid&quot;
                 opf:scheme=&quot;ISBN&quot;&gt;urn:isbn:9780596158347&lt;/dc:identifier&gt;
</pre>
<p>Including the scheme &#8220;isbn&#8221; in the identifier as well as using the optional <code>opf:scheme</code> attribute allows intelligent reading systems to leverage the ISBN by searching other systems. (1,132 books in Bookworm are courteous in this way.)</p>
<h3>URI</h3>
<p>Project Gutenberg epubs use a URI.  This is a great method for digital-native books with their own steady identifiers.  In this case Gutenberg identifiers include the Gutenberg book id:</p>
<pre class="brush: xml;">
    &lt;dc:identifier opf:scheme=&quot;URI&quot; id=&quot;etextno&quot;&gt;http://www.gutenberg.org/ebooks/11&lt;/dc:identifier&gt;
</pre>
<p>Like ISBN, these identifiers are stable, and let reading systems do more with the book if they&#8217;re able (for example direct users to the <a href="http://www.gutenberg.org/ebooks/11">canonical information page for that book</a>).  If all publishers had their own websites with a page for every book I&#8217;d even prefer URIs to ISBNs for this reason.</p>
<p>939 books on Bookworm are from Gutenberg directly, based on searching for this style of identifier. Only about 100 other books use URIs as identifiers.</p>
<h3>UUID</h3>
<p>A <a href="http://en.wikipedia.org/wiki/Universally_Unique_Identifier">Universally Unique Identifier</a> solves the &#8220;required unique&#8221; problem by specifying very large numbers, using a variety of schemes.</p>
<p>It&#8217;s trivial to generate a UUID in most programming languages.  Here&#8217;s Python:</p>
<pre class="brush: python;">
&gt;&gt;&gt; import uuid
&gt;&gt;&gt; uuid.uuid4()
UUID('58dce2ac-7aec-45c3-a6de-903a30061545')
</pre>
<p>Wikipedia lists <a href="http://en.wikipedia.org/wiki/Universally_Unique_Identifier#Implementations">UUID implementations in other programming languages</a>. You can even just go to a <a href="http://www.famkruithof.net/uuid/uuidgen">UUID-generating web site</a>.  These days, if Bookworm gets an epub with no identifier, it generates a UUID.  </p>
<p>UUID provides the least useful information of the three identifier types, but, as Wikipedia points out, &#8220;One&#8217;s annual risk of being hit by a meteorite is estimated to be one chance in 17 billion [...], equivalent to the odds of creating a few tens of trillions of UUIDs in a year and having one duplicate.&#8221; So at least it&#8217;s unique.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.threepress.org/2009/11/18/whats-in-an-identifier/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How to get your bug fixed</title>
		<link>http://blog.threepress.org/2009/11/17/how-to-get-your-bug-fixed/</link>
		<comments>http://blog.threepress.org/2009/11/17/how-to-get-your-bug-fixed/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 16:32:28 +0000</pubDate>
		<dc:creator>Liza Daly</dc:creator>
				<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.threepress.org/?p=885</guid>
		<description><![CDATA[Some of the most useful tools in ebook development are open source. Calibre and epubcheck especially come to mind.  If you find a bug or want to request a feature, what are the best ways to ensure your needs get attention?
Submit a patch
Of course the holy grail for the lazy open source developer is [...]]]></description>
			<content:encoded><![CDATA[<p>Some of the most useful tools in ebook development are open source. <a href="http://calibre.kovidgoyal.net/">Calibre</a> and <a href="http://code.google.com/p/epubcheck/">epubcheck</a> especially come to mind.  If you find a bug or want to request a feature, what are the best ways to ensure your needs get attention?</p>
<h4>Submit a patch</h4>
<p>Of course the holy grail for the lazy open source developer is when someone submits a &#8220;patch&#8221;, or a fix for the issue.  That means you don&#8217;t have to do any work because someone fixed it for you.  Hooray!  </p>
<p>In practice, this is pretty rare except for the most active open source projects. Many of the users of these tools aren&#8217;t programmers, or even if they are, they don&#8217;t have the time to go digging through unfamiliar source code to find the source of the problem. </p>
<h4>Post a bug, don&#8217;t send an email</h4>
<p>All open source projects have public bug trackers. This is probably the best thing about open versus closed source.  Do you know where to submit a bug to Adobe Digital Editions?  I don&#8217;t.  But I know where to <a href="http://code.google.com/p/epubcheck/issues/list">send an epubcheck bug</a>.</p>
<p>It&#8217;s common courtesy to quickly scan the bug list to see if your issue has already been reported, but everybody understands that sometimes this is inconvenient. The <a href="http://calibre.kovidgoyal.net/query">Calibre bug tracker</a> has more than 500 open tickets.  Nobody expects you to go through them all, and it&#8217;s easy for the developer to close duplicates.  But if it&#8217;s a small list like epubcheck&#8217;s, do check first.</p>
<p>Reserve sending emails to the developers for when you actually want to open a dialogue, or need to discuss something privately.</p>
<h4>Submit a test case</h4>
<p>When you post a bug, the <strong>best way to ensure your bug gets attention is to submit a test case</strong>.  In the case of ebooks this is pretty easy &#8212; submit a sample ebook that exhibits the problem.  </p>
<p>A good test case should be as minimal as possible. Ideally it should have only the content necessary to exercise the bug. </p>
<p>Generating a test case can be time-consuming, but remember you&#8217;re asking for someone else (usually a volunteer) to take anywhere from 15 minutes to several hours to fix your issue.  </p>
<h4>Consider the human</h4>
<p>The key concept here is that <strong>submitting a bug is a social interaction, not a technical one</strong>.  You want to convince a developer who is probably busy and distracted that your bug is worth their time.</p>
<p>Open source bugs are often fixed in the short intervals that people have between other tasks.  You want to convince the developer that the bug can be fixed in that timeframe.  Providing a clear bug report, being polite, and providing a test case are the best ways to support that assertion, even if in the end it turns out to be a tough problem that takes hours to fix.  Hook them with a clear test case!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.threepress.org/2009/11/17/how-to-get-your-bug-fixed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Command-line epubcheck results without epubcheck.jar</title>
		<link>http://blog.threepress.org/2009/11/07/command-line-epubcheck-results-without-epubcheck-jar/</link>
		<comments>http://blog.threepress.org/2009/11/07/command-line-epubcheck-results-without-epubcheck-jar/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 13:09:16 +0000</pubDate>
		<dc:creator>Liza Daly</dc:creator>
				<category><![CDATA[epub]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.threepress.org/?p=771</guid>
		<description><![CDATA[Most of the time, command-line users will be able to run the epubcheck Java binary without issues.  But sometimes mysterious problems occur &#8212; this happened to me on OS X before upgrading to Snow Leopard.  So while it&#8217;s a bit awkward, you can use the remote epubcheck API combined with some XSLT to [...]]]></description>
			<content:encoded><![CDATA[<p>Most of the time, command-line users will be able to run the epubcheck Java binary without issues.  But sometimes <a href="http://code.google.com/p/epubcheck/issues/detail?id=35">mysterious problems occur</a> &#8212; this happened to me on OS X before upgrading to Snow Leopard.  So while it&#8217;s a bit awkward, you can use the remote epubcheck API combined with some XSLT to get the same effect as running epubcheck locally.</p>
<p>As in the earlier post about bash ePub tools, let&#8217;s create a shortcut:</p>
<pre class="brush: bash;">
function epubcheck()
{
curl --silent --data-binary @$@ http://threepress.org/epubcheck-service/
}
</pre>
<h3>Parsing the validator output</h3>
<p>The validator will just return raw XML to the console; if you wanted to produce more human-readable output, use this XSLT:</p>
<p><strong>epubcheck.xsl</strong></p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;xsl:stylesheet xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
      xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot;
      exclude-result-prefixes=&quot;xs&quot;
      version=&quot;1.0&quot;&gt;
  &lt;xsl:output method=&quot;text&quot; media-type=&quot;text/plain&quot; encoding=&quot;UTF-8&quot;&gt;&lt;/xsl:output&gt;
  &lt;xsl:template match=&quot;/&quot;&gt;
    &lt;xsl:choose&gt;
      &lt;xsl:when test=&quot;//is-valid='False'&quot;&gt;
        &lt;xsl:text&gt;File was NOT valid!&lt;/xsl:text&gt;
        &lt;xsl:text&gt;&amp;#xa;&lt;/xsl:text&gt;
        &lt;xsl:for-each select=&quot;//error&quot;&gt;
          &lt;xsl:value-of select=&quot;.&quot;/&gt;&lt;xsl:text&gt;&amp;#xa;&lt;/xsl:text&gt;
        &lt;/xsl:for-each&gt;
      &lt;/xsl:when&gt;
      &lt;xsl:otherwise&gt;
        &lt;xsl:text&gt;File was valid!&lt;/xsl:text&gt;
        &lt;xsl:text&gt;&amp;#xa;&lt;/xsl:text&gt;
      &lt;/xsl:otherwise&gt;
    &lt;/xsl:choose&gt;
  &lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;
</pre>
<p>Save that as <code>epubcheck.xsl</code> then refactor the function to capture the output from the API and run it through the XSLT:</p>
<pre class="brush: bash;">
function epubcheck()
{
curl --silent --data-binary @$@ http://threepress.org/epubcheck-service/ &gt; /tmp/epubcheck;
xsltproc epubcheck.xsl /tmp/epubcheck;
rm /tmp/epubcheck
}
</pre>
<p>Now you&#8217;ll get an interaction that&#8217;s easy to read:</p>
<pre class="brush: bash;">
$ epubcheck code.epub
File was valid!
$ epubcheck malformed.epub
File was NOT valid!
ERROR: temp.epub: OPF file OEBPS/content.opf is missing
Check finished with warnings or errors!
</pre>
<p>But try to get epubcheck running locally first, as you&#8217;ll get better performance and save me some bandwidth.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.threepress.org/2009/11/07/command-line-epubcheck-results-without-epubcheck-jar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3 tiny bash scripts for ePub creation</title>
		<link>http://blog.threepress.org/2009/11/06/3-scripts-for-epub-creation/</link>
		<comments>http://blog.threepress.org/2009/11/06/3-scripts-for-epub-creation/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 13:15:27 +0000</pubDate>
		<dc:creator>Liza Daly</dc:creator>
				<category><![CDATA[ebooks]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.threepress.org/?p=762</guid>
		<description><![CDATA[I wrote these to automate a really common task: zip up an ePub (properly) and validate it. It expects a local install of epubcheck.
Install these functions in your .bash_profile. This should work on any Unix-like system including OS X.
Zip up an ePub file

function epub()
{
rm -f $@; zip -q0X $@ mimetype; zip -qXr9D $@ *
}

Call this [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote these to automate a really common task: zip up an ePub (properly) and validate it. It expects a local install of <a href="http://code.google.com/p/epubcheck/">epubcheck</a>.</p>
<p>Install these functions in your <code>.bash_profile</code>. This should work on any Unix-like system including OS X.</p>
<h3>Zip up an ePub file</h3>
<pre class="brush: bash;">
function epub()
{
rm -f $@; zip -q0X $@ mimetype; zip -qXr9D $@ *
}
</pre>
<p>Call this as:</p>
<blockquote><p>
$ epub my-book.epub
</p></blockquote>
<p>from the directory where the resources are (meaning, the should be at least a <code>mimetype</code> and <code>META-INF</code> in the current working directory). The actual arguments were taken from <a href="http://www.snee.com/bobdc.blog/2008/03/creating-epub-files.html">Bob DuCharme&#8217;s great post on creating .epub files with simple tools</a>.</p>
<h3>Validate an ePub file</h3>
<pre class="brush: bash;">
function epubcheck()
{
java -jar /path/to/epubcheck.jar $@
}
</pre>
<pre class="brush: bash;">
$ epubcheck my-book.epub
Epubcheck Version 1.0.3

No errors or warnings detected

$ epubcheck my-book.epub
Epubcheck Version 1.0.3

ERROR: malformed.epub: OPF file OEBPS/content.opf is missing

Check finished with warnings or errors!
</pre>
<p>And then I like a shortcut that does both at once:</p>
<pre class="brush: bash;">
function ev()
{
epub $@; epubcheck $@
}
</pre>
<p>Tomorrow I&#8217;ll show how to do the same thing even if you <a href="http://groups.google.com/group/epubcheck/browse_thread/thread/09b6d4d5f1a4a7a5/49d55238c544a951?#49d55238c544a951">encounter errors running epubcheck locally</a>, using the newly-available <a href="http://blog.threepress.org/2009/11/04/epub-validator-updates/">ePub validation API</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.threepress.org/2009/11/06/3-scripts-for-epub-creation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web-based ePub validator adds Preflight and API</title>
		<link>http://blog.threepress.org/2009/11/04/epub-validator-updates/</link>
		<comments>http://blog.threepress.org/2009/11/04/epub-validator-updates/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 13:14:09 +0000</pubDate>
		<dc:creator>Liza Daly</dc:creator>
				<category><![CDATA[epub]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.threepress.org/?p=676</guid>
		<description><![CDATA[
Our web tool for using the open-source epubcheck validator got a quick refresh:
Now includes epubpreflight results
EpubCheck&#8217;s lesser-known companion checks for additional issues like content documents that exceed 300K, which can&#8217;t be loaded on the Sony Reader.  The complete (short!) list:

Content files that are empty or are >300k
Image files that are empty or are >10MB [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://threepress.org/static/images/epub/epub-valid.png" alt="Valid EPUB" style="float:right"/></p>
<p>Our <a href="http://threepress.org/document/epub-validate/">web tool</a> for using the open-source <a href="http://code.google.com/p/epubcheck/">epubcheck</a> validator got a quick refresh:</p>
<h3>Now includes epubpreflight results</h3>
<p>EpubCheck&#8217;s lesser-known companion checks for additional issues like content documents that exceed 300K, which can&#8217;t be loaded on the Sony Reader.  The complete (short!) list:</p>
<ul>
<li>Content files that are empty or are >300k</li>
<li>Image files that are empty or are >10MB </li>
</ul>
<h3>Simple API service</h3>
<p>This has been part of Bookworm for some time but I&#8217;m finally documenting it: there&#8217;s also a machine-readable API for the validator.  It&#8217;s very simple &#8212; you get back an XML document indicating whether the file was valid, and if invalid, the list of errors.</p>
<p>Just POST an epub file as a series of bytes to http://threepress.org/epubcheck-service/ and look at the response. Here&#8217;s a sample interaction using curl, but you could use your favorite HTTP client.</p>
<h4>Successful validation</h4>
<pre class="brush: bash;">
$ curl --data-binary @pg345.epub http://threepress.org/epubcheck-service/
</pre>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;rsp stat=&quot;ok&quot;&gt;
   &lt;is-valid&gt;True&lt;/is-valid&gt;
&lt;/rsp&gt;
</pre>
<h4>Invalid ePub</h4>
<pre class="brush: bash;">

$ curl --data-binary @invalid.epub http://threepress.org/epubcheck-service/
</pre>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;rsp stat=&quot;ok&quot;&gt;
    &lt;is-valid&gt;False&lt;/is-valid&gt;
    &lt;errors&gt;
        &lt;error&gt;ERROR: temp.epub/metadata.opf(6): attribute &quot;files-as&quot; from namespace &quot;http://www.idpf.org/2007/opf&quot; not allowed at this point; ignored&lt;/error&gt;
        &lt;error&gt;ERROR: temp.epub/metadata.opf(9): unknown element &quot;series_index&quot; from namespace &quot;http://www.idpf.org/2007/opf&quot;&lt;/error&gt;
     &lt;/errors&gt;
&lt;/rsp&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.threepress.org/2009/11/04/epub-validator-updates/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Five ebook conversion tips</title>
		<link>http://blog.threepress.org/2009/11/01/five-ebook-conversion-tips/</link>
		<comments>http://blog.threepress.org/2009/11/01/five-ebook-conversion-tips/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 13:40:20 +0000</pubDate>
		<dc:creator>Liza Daly</dc:creator>
				<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.threepress.org/?p=650</guid>
		<description><![CDATA[
In the last few years many technology blogs have been participating in &#8220;National Blog Posting Month,&#8221; a play off the more famous National Novel Writing Month.  
Threepress is participating: we&#8217;ll be posting ebook technology tips, code samples and updates on our projects every day for the whole month of November.  Hopefully we&#8217;ll include [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>
In the last few years many technology blogs have been participating in &#8220;National Blog Posting Month,&#8221; a play off the more famous <a href="http://www.nanowrimo.org/">National Novel Writing Month</a>.  </p>
<p>Threepress is participating: <strong>we&#8217;ll be posting ebook technology tips, code samples and updates on our projects every day for the whole month of November</strong>.  Hopefully we&#8217;ll include some guest bloggers as well as some posts from individuals who&#8217;ve worked on Threepress projects.
</p></blockquote>
<p>I&#8217;ll start off with <strong>five tips for ebook conversion</strong>.</p>
<h2>Try the Calibre command-line tools</h2>
<p>If you&#8217;re a developer or just impatient you&#8217;ll probably prefer to use the command-line tools included in <a href="http://calibre.kovidgoyal.net/">Calibre</a> rather than the main GUI application, which can be slow to start up and quick to crash. Many people don&#8217;t realize they&#8217;re available, but they&#8217;re great for one-off conversions or embedding in other applications.  The most useful tool is the one-stop shop <code>ebook-convert</code> (older versions of Calibre had individual scripts for different formats).</p>
<p>The complete list and documentation for <a href="http://calibre.kovidgoyal.net/user_manual/cli/cli-index.html">all the Calibre command-line tools</a> is available from the Calibre site.</p>
<h2>Prefer InDesign to Word, Word to PDF</h2>
<p>If you have an InDesign original and at least version CS4, definitely start by creating an ePub from it. You&#8217;ll still need to do some hand-work in most cases, but it will save a lot of effort.</p>
<p>Word has its problems, but it&#8217;s more easily converted to a reflowable format than PDF. If you have only those two, start with the Word file.  I&#8217;d probably do Word->RTF->ePub, with the last step in Calibre.</p>
<h2>Convert from more complex formats to less complex ones</h2>
<p>Mobipocket has simpler markup than ePub. We recommend that if you need to produce both formats you make the Mobipocket from the ePub file, rather than the other way around. XHTML in ePub is a more rich expression language than what&#8217;s available in Mobi, and is less likely to lose formatting details.</p>
<h2>Test in multiple devices and form-factors</h2>
<p>When we test ePub books we&#8217;ve created, this is our go-to list of readers:</p>
<ol>
<li><a href="http://bookworm.oreilly.com/">Bookworm</a></li>
<li>Adobe Digital Editions</li>
<li>Smartphone reader (Stanza on the iPhone)</li>
<li>e-ink device (Sony Reader)</li>
</ol>
<p>We usually start with Bookworm running under Firefox; you&#8217;ll get the best CSS debugging that way, especially when using <a href="http://getfirebug.com/">Firebug</a>.</p>
<h2>Validate</h2>
<p>Most people working with the ePub format are aware of the <a href="http://code.google.com/p/epubcheck/">EpubCheck validator</a> created by engineers at Adobe.  (The <a href="http://threepress.org/document/epub-validate/">web-hosted epub validator</a> on the Threepress site is by far our largest driver of traffic.)  But I mention it again because it&#8217;s important!  Peter Sorotokin from Adobe has been committing changes recently, so this is a good time to get any requests or bugs into the <a href="http://code.google.com/p/epubcheck/issues/list">issue tracker</a>.</p>
<p>Later this month we&#8217;ll have some interesting updates to the Threepress version of the validator that should make checking easier and more thorough.</p>
<p><em>(Edited Nov 1 to reflect updated information about Calibre tools)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.threepress.org/2009/11/01/five-ebook-conversion-tips/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Open Feedback Publishing System launched</title>
		<link>http://blog.threepress.org/2009/05/21/open-feedback-publishing-system-launched/</link>
		<comments>http://blog.threepress.org/2009/05/21/open-feedback-publishing-system-launched/#comments</comments>
		<pubDate>Thu, 21 May 2009 15:37:06 +0000</pubDate>
		<dc:creator>Liza Daly</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[commenting]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[ofps]]></category>
		<category><![CDATA[oreilly]]></category>
		<category><![CDATA[ugc]]></category>

		<guid isPermaLink="false">http://blog.threepress.org/?p=492</guid>
		<description><![CDATA[O&#8217;Reilly is announcing today that the in-progress book, Programming Scala, has been released using the Open Feedback Publishing System, a platform I built for them that allows public commenting on digital manuscripts.  
Users can comment using the web site, read the entire in-progress text of the book (updated as the authors revise it), or [...]]]></description>
			<content:encoded><![CDATA[<p>O&#8217;Reilly is announcing today that the in-progress book, <a href="http://programming-scala.labs.oreilly.com/">Programming Scala</a>, has been released using the <a href="http://labs.oreilly.com/ofps.html">Open Feedback Publishing System</a>, a platform I built for them that allows public commenting on digital manuscripts.  </p>
<p>Users can comment using the web site, read the entire in-progress text of the book (updated as the authors revise it), or follow comments via an Atom feed.  Readers who comment will be credited in the final edition of the book.</p>
<p>Authors do not ever need to administer or even visit the web site, as they receive the comments incorporated back into the manuscript source.  To my knowledge this is the first public commenting system that works in this way, using<br />
<a href="http://docbook.org/">DocBook XML</a> to both render the content and integrate the feedback in a contextually-relevant manner. It wouldn&#8217;t be possible without XML.</p>
<p>OFPS was built using the DocBook XSLT, Subversion version control and the Pylons web framework. Two books were on my lap constantly: <a href="http://pylonsbook.com/">The Definitive Guide to Pylons</a> (also available for free online!) and <a href="http://oreilly.com/catalog/9780596516147/">Essential SQLAlchemy</a> (I was a technical editor on this but apparently forgot it all).</p>
<p>More information in the <a href="http://labs.oreilly.com/2009/05/collaborative-publishing-based-on-community-feedback.html">post announcing this on the O&#8217;Reilly Labs blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.threepress.org/2009/05/21/open-feedback-publishing-system-launched/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>EPUBGen from Adobe now a part of epub-tools</title>
		<link>http://blog.threepress.org/2009/04/29/epubgen-from-adobe-now-a-part-of-epub-tools/</link>
		<comments>http://blog.threepress.org/2009/04/29/epubgen-from-adobe-now-a-part-of-epub-tools/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 12:30:57 +0000</pubDate>
		<dc:creator>Liza Daly</dc:creator>
				<category><![CDATA[epub]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.threepress.org/?p=471</guid>
		<description><![CDATA[Want to convert from Word to ePub?  These tools aren&#8217;t a magic bullet, but they should be helpful to digital publishing developers.
Paul Norton from Adobe has contributed a new software suite to the  epub-tools project hosted on Google Code.  The Java library provides tools to convert from an impressive number of formats: [...]]]></description>
			<content:encoded><![CDATA[<p>Want to convert from Word to ePub?  These tools aren&#8217;t a magic bullet, but they should be helpful to digital publishing developers.</p>
<p>Paul Norton from Adobe has contributed a new software suite to the  <a href="http://code.google.com/p/epub-tools/">epub-tools project</a> hosted on Google Code.  The Java library provides tools to convert from an impressive number of formats: Word, RTF, and <a href="http://en.wikipedia.org/wiki/FictionBook">FictionBook</a>.</p>
<p>Here&#8217;s Paul&#8217;s description of the project:</p>
<blockquote><p>&#8230; the main intent of this project is to provide source code and examples of the way things could be done. In other words, there&#8217;s plenty of room for developers to improve and enhance the conversion.</p>
<p>The project includes code to convert a couple different formats to ePub, including generating all the required files and creating the package. The project also shows how to mangle embedded fonts, how to sub-set those font (thus reducing the size of the ePub).</p></blockquote>
<p>More on the <a href="http://blogs.adobe.com/digitaleditions/2009/04/rtf_word_and_fb2_file_conversi.html">Digital Editions blog</a>.</p>
<p>I think it&#8217;s great that Adobe is supporting ePub in this way, both with additional developer tools and the invaluable <a href="http://code.google.com/p/epubcheck/">epubcheck</a>. Thanks to Paul and to the Digital Editions team!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.threepress.org/2009/04/29/epubgen-from-adobe-now-a-part-of-epub-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
