<?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>Owl’s Portfolio &#187; Foliomatic</title>
	<atom:link href="http://www.owlfolio.org/foliomatic/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.owlfolio.org</link>
	<description></description>
	<lastBuildDate>Mon, 12 Dec 2011 23:52:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Core design principles</title>
		<link>http://www.owlfolio.org/foliomatic/coredesign/</link>
		<comments>http://www.owlfolio.org/foliomatic/coredesign/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 19:50:46 +0000</pubDate>
		<dc:creator>Zack Weinberg</dc:creator>
				<category><![CDATA[Foliomatic]]></category>

		<guid isPermaLink="false">http://owl-folio.nfshost.com/?p=741</guid>
		<description><![CDATA[I intend Foliomatic primarily for personal web sites such as this one. It should also be useful for projects and organizations whose Web presence is mostly static content, updated from time to time. It is not going to be a &#8230; <a href="http://www.owlfolio.org/foliomatic/coredesign/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I intend Foliomatic primarily for personal web sites such as this one.
It should also be useful for projects and organizations whose Web
presence is mostly static content, updated from time to time.  It is
not going to be a general content management system, nor a framework
for highly dynamic &#8220;Web 2.0&#8221; content, but it will support some dynamic
features, such as comments on pages.</p>

<h2>Structure</h2>

<p>Foliomatic is a <em>site compiler</em>.  It reads a directory tree of source
files and produces another tree of rendered, static HTML files, which
you drop into your web server.  Foliomatic is designed to take its
input from a version control system, which handles access control and
replication.  It can, optionally, integrate history information from
the VCS into its output.</p>

<p>Foliomatic is thus similar to existing systems such as <a href="http://ikiwiki.info/">Ikiwiki</a>,
<a href="http://www.steve.org.uk/Software/chronicle/">Chronicle</a>, and <a href="http://wiki.github.com/mojombo/jekyll">Jekyll</a>.  Foliomatic is more generic in some
ways, and more restricted in others.</p>

<p><span id="more-741"></span></p>

<ul>
<li><p>Chronicle and Jekyll are primarily intended for blogs, so they place
strong constraints on site layout that are undesirable in a
portfolio.  Foliomatic does not care how your site is organized.</p></li>
<li><p>Ikiwiki is primarily intended for use as a wiki.  It therefore has
many features which are irrelevant or even undesirable for a site
with a small number of trusted authors.  Almost all of its access
control logic, for instance, is useless and gets in the way, as is
the split between content (kept in the VCS) and configuration (<em>must
not</em> be kept in the VCS, or any editor can break the site).</p>

<p>Foliomatic assumes that you have a small number of trusted authors
who make their changes through the VCS rather than on the web.  It
does not support general editing via the web, and it expects you to
keep <em>everything</em> in your version control repository.  It will
support pulling configuration from a different repository than
content, in case you need two levels of author privilege, but I
would really rather see version control systems grow per-directory
or per-branch access control than implement it on top.</p></li>
<li><p>Chronicle and Jekyll have no support for feedback from the web&#8212;no
comments, no pingbacks, etc.  Ikiwiki supports discussion pages and
blog-style comments, but in a fairly clunky manner.  Foliomatic will
support blog-style comments smoothly integrated with the site.  It
will probably not support wiki-style discussion pages.</p></li>
</ul>

<p>I currently plan to use <a href="http://genshi.edgewall.org/">Genshi</a> for the templating engine.  Genshi
is fast, fully aware of the structure of XML documents, and provides a
pipeline abstraction that is easy to add transformation stages to.  </p>

<h2>Features</h2>

<p>Foliomatic can read a wide variety of text input formats.  Most
attention will go to &#8220;lightweight markup&#8221; languages such as
<a href="http://daringfireball.net/projects/markdown/">Markdown</a>, <a href="http://textile.thresholdstate.com/">Textile</a>, and <a href="http://docutils.sourceforge.net/rst.html">reST</a>, but I also want it to be able
to consume <a href="http://www.latex-project.org/">LaTeX</a> and <a href="http://www.gnu.org/software/texinfo/">Texinfo</a>, and prettyprint source code via
a tool such as <a href="http://pygments.org/">Pygments</a>.  Integration with software documentation
systems such as <a href="http://sphinx.pocoo.org/">Sphinx</a> and <a href="http://www.doxygen.org/">Doxygen</a> might be nice.  It can also
do useful things with non-text input.  For instance, it can generate
&#8220;gallery&#8221; pages from directories of photographs by interpreting the
<a href="http://en.wikipedia.org/wiki/Exchangeable_image_file_format">EXIF</a> data, and will do something useful with a collection of
PDFs (once I figure out what that is).</p>

<p>Foliomatic&#8217;s formatting of pages can be extended with transformation
stages that run either before or after conversion from the source
format to HTML.  For instance, an equivalent of <a href="http://daringfireball.net/projects/smartypants/">SmartyPants</a>
converts plain quotation marks into proper &#8220;typographic&#8221; curly quotes;
<a href="http://sparkline.org/">sparklines</a> and <a href="http://matplotlib.sourceforge.net/">full-size graphs</a> can be generated from embedded
data or external files; <a href="http://www1.chapman.edu/~jipsen/mathml/asciimath.html">equations</a> can be rendered into MathML.
(You can tell I&#8217;ve spent a lot of time in science land.)</p>

<p>Foliomatic is designed to generate an entire web site, so it
understands all sorts of meta-information that you might need to copy
into the web server&#8217;s space, such as <code>.htaccess</code> files, <code>robots.txt</code>
and <code>favicon.ico</code>.  </p>

<p>Foliomatic believes <a href="http://intertwingly.net/blog/2004/09/23/Copy-and-Paste">Ruby&#8217;s Postulate</a>:</p>

<blockquote>
  <p>I have a theory that, in general, the accuracy of metadata is
  inversely proportional to the distance between the metadata and the
  data which it proports to describe.</p>
</blockquote>

<p>Thus, Foliomatic treats the actual contents of a file as
authoritative, and every other source of information as suspect.  For
instance:</p>

<ul>
<li>It only looks at &#8220;character set&#8221; directives within the file when it
cannot determine the character set from the characters themselves.</li>
<li>It only looks at the file name&#8217;s extension when it cannot determine
the file format from &#8220;magic numbers&#8221; at the beginning of the file.</li>
<li>It only checks for a date stamp <em>on</em> the file (from the OS or the
VCS) when there is no date annotation <em>within</em> the file.</li>
</ul>

<p>In all cases, metadata annotations expected by downstream consumers
are regenerated from what Foliomatic has deduced from the content.</p>

<h2>Non-features</h2>

<p>A relational database will <em>not</em> be required&#8212;not even a daemon-free
one like <a href="http://www.sqlite.org/">sqlite</a>.  There may be a cache of data extracted from the
various files in the source tree, stored in a non-relational
persistent store like <a href="http://itamarst.org/software/cog/">Cog</a>, but it will only be a cache to speed up
rendered-site rebuilds.</p>

<p>I am not much interested in making the site editable directly from the
web.  This would require access control machinery comparable to
ikiwiki; it would also mean people were editing via clunky text input
forms.  I might be interested in integrating with <em>non</em>-clunky
browser-based text editors such as <a href="http://labs.mozilla.com/bespin/">Bespin</a>, that understand version
control, though.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.owlfolio.org/foliomatic/coredesign/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

