<?xml version="1.0" encoding="UTF-8"?>
<feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:thr="http://purl.org/syndication/thread/1.0"
  xml:lang="en"
   >
  <title type="text">Blogofile</title>
  <subtitle type="text">A static blog engine/compiler</subtitle>

  <updated>2011-05-01T19:23:16Z</updated>
  <generator uri="http://blogofile.com/">Blogofile</generator>

  <link rel="alternate" type="text/html" href="http://www.blogofile.com/blog" />
  <id>http://www.blogofile.com/blog/feed/atom/</id>
  <link rel="self" type="application/atom+xml" href="http://www.blogofile.com/blog/feed/atom/" />
  <entry>
    <author>
      <name></name>
      <uri>http://www.blogofile.com/blog</uri>
    </author>
    <title type="html"><![CDATA[Preview of Blogofile 0.8]]></title>
    <link rel="alternate" type="text/html" href="http://www.blogofile.com/blog/2011/04/30/preview-of-blogofile-0.8" />
    <id>http://www.blogofile.com/blog/2011/04/30/preview-of-blogofile-0.8</id>
    <updated>2011-04-30T13:42:04Z</updated>
    <published>2011-04-30T13:42:04Z</published>
    <category scheme="http://www.blogofile.com/blog" term="development" />
    <summary type="html"><![CDATA[Preview of Blogofile 0.8]]></summary>
    <content type="html" xml:base="http://www.blogofile.com/blog/2011/04/30/preview-of-blogofile-0.8"><![CDATA[<p>I'm hard at work on Blogofile 0.8 which is going to be a <strong>huge</strong> upgrade
from 0.7.1. I want to start writing down some of the new features and
things that have changed, so as not to overwhelm you all at once on the
day of release.</p>
<p>Here's a brief changelog from 0.7.1 to 0.8:</p>
<ul>
<li>Python 3 support! Blogofile now runs on Python 2.6, 2.7, 3.1 or 3.2.</li>
<li>Plugins.</li>
<li>New template engines.</li>
<li><code>blogofile build</code> now works from any subdirectory in your source tree.</li>
<li>Cross-python-version unit tests with <a href="http://codespeak.net/tox/">Tox</a>.</li>
<li>Full stack testing with in-browser <a href="http://seleniumhq.org/">Selenium</a> tests.</li>
<li>HTML 5 Boilerplate enabled site templates.</li>
<li>Command line completion and plugin commands.</li>
<li>Blogger import script (contributed by Seth de l'Isle)</li>
<li>Markdown <a href="http://www.freewisdom.org/projects/python-markdown/Extensions">extensions</a>
   are enabled by user configuration.</li>
<li>Static files can be configured to hard link rather than copy into
   the _site directory (Contributed by Nick Craig-Wood)</li>
</ul>
<p>These are all planned features for 0.8, and they are all at least
partially implemented, but I'm still working on polishing them up, so
they may or may not be fully working at the moment. This is just a
preview.</p>
<h2>Python 3</h2>
<p>With the release of Python 3.2, py3k has finally matured into a stable
and well built product. All of the dependencies of Blogofile are working
well on Python 3, and therefore it's the right time to move forward and
have Blogofile embrace Python 3 as well.</p>
<p>Going forward, all new development on Blogofile is being done in
Python 3.2. This does not mean however, that I'm abandoning Python
2 -- that would be catastrophic. There are a lot of reasons you may want
to stay with Python 2: it's what you know and are comfortable with, a
library you depend on only works in older versions, you feel Python 3
isn't mature yet (but it is!) For many reasons, it's important that
Blogofile remains working in Python 2 just as well it does in Python
3. Even this site, blogofile.com, is still running on Python 2 because
Sphinx (stable) doesn't yet support Python 3.</p>
<p>Blogofile 0.8 introduces what I hope to be a smooth migration for
people who want to use Python 3, but also to maintain full feature
compatibility for users still using Python 2.</p>
<p>The <a href="http://github.com/EnigmaCurry/blogofile">source code at github</a>
is all Python 3 code. If you're checking out from git, you will need
Python 3. Python 2 versions are built by converting this code with the
<a href="http://pypi.python.org/pypi/3to2_py3k/1.0">3to2</a> tool. This is
automated through the standard sdist facility:</p>
<pre><code>python setup.py sdist
</code></pre>
<p>This packages a tarball in the <code>dist/</code> directory that contains both
the regular python3 source code as well as the python2 source
code. Depending on the python version used to install it, the correct
source code gets installed. This is the same type of tarball that will
be uploaded to <a href="http://pypi.python.org/pypi">PyPI</a> once Blogofile is
stable and is released. Users will be able to run <code>pip install
blogofile</code> on any version of Python (2.6+, 3.1+) and run blogofile
without any hassle, and no need for the end user to install 3to2
because the conversion has already been applied.</p>
<p><a href="http://codespeak.net/tox/">Tox</a> is a testing tool that leverages
<a href="http://pypi.python.org/pypi/virtualenv">virtualenv</a> to run unit tests
within multiple Python environments. Blogofile is currently using Tox
to verify that sites built with Blogofile work well in multiple Python
versions.</p>
<h2>Plugins</h2>
<p>Blogofile 0.8 includes new plugin support. Plugins are just packages
of controllers, filters, templates, and other files. These are
distributed and installed as regular python packages (eg. <code>easy_install
blogofile_blog</code>). Since plugins are installed separately from
Blogofile, you can upgrade them independently. Installed plugins are
detected by Blogofile at runtime and if the user configures the plugin
in their <code>_config.py</code>, the plugin can add functionality to a Blogofile
site.</p>
<p>The blog controller from 0.7.1 has been completely removed from
Blogofile and has been <a href="https://github.com/EnigmaCurry/blogofile_blog">repackaged as a
plugin</a>. This has many
advantages:</p>
<ul>
<li>New stable releases of Blogofile and the blog controller are now
   independent of each other.</li>
<li>The blog controller is no longer placed into the user's site source
   code. Instead, the controller remains in the Python library
   directory and is only referenced and configured in the user's
   <code>_config.py</code>. This let's you upgrade your site to new versions
   without having you to delete or otherwise modify your <code>_controllers/</code>
   directory as you do now in Blogofile 0.7.1 or older. The blog
   templates (post.mako, chronological.mako etc.) can be copied into
   userspace and customized if desired.</li>
</ul>
<p>Also note, that you don't have to use the blog plugin if you don't
want to, you can just as easily keep using the old blog controller
from 0.7.1 if you have a legacy site.</p>
<h2>Command Completion and Plugin Commands</h2>
<p>0.8 introduces bash command line completion. Partially typing a
blogofile command and then pressing the TAB key will complete the
command you're typing or will provide you with a list of possible
completions.</p>
<p>This can be turned on by placing the following into your <code>~/.bashrc</code>
file:</p>
<pre><code>command -v blogofile &amp;&gt;/dev/null &amp;&amp; source &lt;(BLOGOFILE_BASH_BOOTSTRAP=true blogofile)
</code></pre>
<p>Plugins can now extend the blogofile command line executable with
their own commands, which makes command line completion all the more
convenient. For instance, these are the commands implemented in the
blog plugin:</p>
<pre><code>usage: blogofile blog [-h] {templates,post} ...

positional arguments:
  {templates,post}
    templates       Blog template helpers
    post            Blog post helpers
</code></pre>
<p>Typing <code>blogofile blog post create &lt;title&gt;</code> will create a new blog
post inside your <code>_posts/</code> directory pre-populated with today's date and the
title you gave it. This allows you to get started writing your blog
posts more easily without having to write all the post YAML
yourself. This feature was created in collaboration with <a href="http://www.antzucaro.com/">Ant Zucaro</a>.</p>
<p>Running <code>blogofile blog templates copy _templates/blog</code> will copy all
of the blog templates into your site's source directory. This let's
you customize them to your own liking. If you do this, you need to
write the following in your <code>_config.py</code> to tell the blog controller
where to refer to these templates:</p>
<pre><code>plugins.blog.template_path = "_templates/blog"
</code></pre>
<h2>Template Engines</h2>
<p>Blogofile has supported <a href="http://www.makotemplates.org/">Mako</a> as it's
templating engine ever since its first release. I personally feel that
Mako is the very best templating engine available for Python, but
you're free to have a different opinion. I think choice is also a
great thing, so Blogofile template support has been abstracted to
support other engines. Included in 0.8 is a
<a href="http://jinja.pocoo.org/">Jinja2</a> implementation (which is very
similar to Django templates) and a new blogofile specific template
called <code>FilterTemplate</code>.</p>
<p>The user's <code>_config.py</code> now configures a mapping of file extension
to template type. Here's what you get by default:</p>
<pre><code>templates.engines = HC(
  mako = MakoTemplate,
  jinja = JinjaTemplate,
  jinja2 = JinjaTemplate,
  markdown = MarkdownTemplate,
  rst = RestructuredTextTemplate,
  textile = TextileTemplate
  )
</code></pre>
<p>If you've been using Blogofile long, you already know about the
first one: Mako. However, instead of being hard-coded inside the
blogofile <a href="https://github.com/EnigmaCurry/blogofile/blob/plugins/blogofile/writer.py">writer
class</a>
to render files ending in <code>.mako</code> with Mako, Blogofile 0.8 uses the
above configuration to know what template type to associate it
with. So, <code>.mako</code> gets rendered with the MakoTemplate class,
<code>.jinja</code> and <code>.jinja2</code> get's rendered with JinjaTemplate etc. Feel
free to redefine this yourself in your own <code>_config.py</code> if you feel
the need.</p>
<p>An important configuration item sets the site base template:</p>
<pre><code>site.base_template = "site.mako"
</code></pre>
<p>By default it's called <code>site.mako</code> which is consistent with how
<code>simple_blog</code> has always called it. It's more important now to realize
what this file is however, because all templates, <strong>even templates of
different engines</strong> can inherit from this file. For instance, if your
site uses <code>site.mako</code> as it's base template but you have a jinja2
template somewhere in your source directory (or a plugin you installed
uses one), you don't have to recreate your entire site structure in jinja
-- instead, you can have jinja2 inherit from your mako templates
directly:</p>
<pre><code>{% extends "bf_base_template" %}
</code></pre>
<p>When you render a template, Blogofile detects if
<code>site.base_template</code> is of a different template type than the
currently rendering template. If it is, it renders the base template
first, installs the base template as an alias called
<code>bf_base_template</code>, then renders the first template inside of the
base template at the right place. The "right place" is also
configurable via <code>templates.content_blocks</code>, but you shouldn't need
to change that unless you're introducing your own template engine.</p>
<p><code>FilterTemplates</code> are a new template type altogether that lets you use
any Blogofile
<a href="http://blogofile.com/documentation/filters.html">filter</a> as it's own
template engine. This let's you use, for instance, Markdown and
reStructuredText files as standalone template types. In Blogofile
0.7.1 you could only use markdown or reStrucutredText inside blog
posts, but now you can use it anywhere you want in your site source by
placing a file ending in <code>.markdown</code> or <code>.rst</code>. These files will
also inherit your site base template, so all you need inside the file
is the content that you want on the page and it will look like all the
other pages on your site once rendered. Please be aware that markdown
and reStruturedText are not really full template engines, so if you're
doing anything complex with controllers, you probably should stick
with Mako or Jinja2. Really, it's just a convenient way to create a
static page quickly without needing to code HTML.</p>
<h2>HTML 5 Boilerplate and other example sites</h2>
<p><a href="http://html5boilerplate.com/">HTML5Boilerplate</a> is the new hotness in
web-design -- it provides a great base to start from for creating new
sites with all the new features that HTML 5 brings.</p>
<p>Blogofile is going to have a <code>simple_blog</code> variant that includes these
features:</p>
<pre><code>blogofile init simple_blog_html5
</code></pre>
<p>That will get you started. It's still unthemed just like
<code>simple_blog</code> is today. I'm working on even more variants that
include some themes to get you a decent looking site out of the box.</p>
<h2>Checking out the code and getting started</h2>
<p>If you want to start playing around with Blogofile 0.8 right now, even
before it's stable, go right ahead. I'd appreciate feedback to know
what is and isn't working for you, or any confusion you have.</p>
<p>Please note, that these instructions are only valid for people wishing
to get a preview of Blogofile and don't mind checking out the source code
from git and running code that might not be fully working yet. Also,
these instructions are about ten times longer than what will be
necessary once Blogofile is released as a stable build. Once that
happens, you won't need any virtual environments or 3to2 conversions
etc. Essentially, these instructions help to create a <strong>development</strong>
environment.</p>
<h3>Prerequisites</h3>
<ul>
<li>Python 3.1+ (even if you plan on using Python 2 to build your site)</li>
<li><a href="http://pypi.python.org/pypi/distribute">Distribute</a></li>
<li><a href="http://pypi.python.org/pypi/3to2_py3k">3to2</a> (make sure it's the Python 3 version as linked here)</li>
<li><a href="http://pypi.python.org/pypi/virtualenv">virtualenv</a> - not required, but recommended, especially if you're
   already running a stable version of Blogofile.</li>
</ul>
<p>If you want to run the unit tests, you'll also need:</p>
<ul>
<li><a href="http://codespeak.net/tox/">Tox</a></li>
<li>Python 2.7 - This runs the selenium tests which don't support
   python 3 yet.</li>
</ul>
<h3>Install Blogofile</h3>
<p>I'll assume you're using Ubuntu Linux. If not, you'll need to translate
these instructions yourself. Developer docs that I'm currently writing
will be friendlier for non Ubuntu folks.</p>
<p>Install Python 3.2. If you're not running Ubuntu 11.04 yet, you'll need to
install the PPA for Python 3.2 and install from there:</p>
<pre><code>sudo apt-get install python-software-properties
sudo add-apt-repository ppa:irie/python3.2
sudo apt-get update
sudo apt-get install python3 python3-dev
</code></pre>
<p>Install distribute:</p>
<pre><code>sudo su -c "wget http://python-distribute.org/distribute_setup.py -O - | python3"
</code></pre>
<p>Install virtualenv:</p>
<pre><code>sudo easy_install-3.2 virtualenv
</code></pre>
<p>Make sure you have git:</p>
<pre><code>sudo apt-get install git-core
</code></pre>
<p>Checkout the Blogofile sources to a directory of your choosing which
we'll call <code>$BFSRC</code>:</p>
<pre><code>cd $BFSRC
git clone https://github.com/EnigmaCurry/blogofile.git .
</code></pre>
<p>Create a virtual environment to separate the development Blogofile
from any production version you already have installed:</p>
<pre><code>mkdir $BFSRC/venv
virtualenv -p python3.2 --no-site-packages --prompt="(blogofile-0.8)" venv
</code></pre>
<p>To enter the virtual environment run:</p>
<pre><code>source $BFSRC/venv/bin/activate
</code></pre>
<p>You'll see your prompt now has <code>(blogofile-0.8)</code> prepended to it,
indicating that you're currently in the virtual environment. You'll
need to run the source command above each time you start a new
terminal window to re-enter the virtual environment.</p>
<p>If you decided to run Blogofile with python3, you're ready to install
Blogofile as a development library:</p>
<pre><code>python setup.py develop
</code></pre>
<p>This pulls down all the dependencies of Blogofile from the internet
and installs Blogofile as a system library in place (inside the
virtualenv of course), so any changes you make to the source
or pull from git will automatically be applied.</p>
<p>If you wanted to run Blogofile in python2, there's an extra step you
must take to convert the sources:</p>
<pre><code>easy_install 3to2_py3k
python setup.py sdist
</code></pre>
<p>This converts all the python source to be compatible with python2 via
3to2. It creates a tarball in the <code>dist/</code> directory which you can
then install with python2 (outside this python3 virtualenv):</p>
<pre><code>easy_install dist/Blogofile-0.8-DEV.tar.gz
</code></pre>
<p>You should now have Blogofile 0.8 installed in a virtual environment
which you can verify by running:</p>
<pre><code>blogofile info
</code></pre>
<p>You'll see which blogofile you're running and information about where
it's pulling data from:</p>
<pre><code>This is Blogofile (version 0.8-DEV) -- http://www.blogofile.com
You are using CPython 3.2.0 from /home/ryan/src/blogofile/venv/bin/python
Blogofile is installed at: /home/ryan/src/blogofile/blogofile
Default config file: /home/ryan/src/blogofile/blogofile/site_init/_config.py
The specified directory has no _config.py, and cannot be built.
</code></pre>
<p>You can see the following from my configuration above:</p>
<ul>
<li>I'm using Blogofile version <code>0.8-DEV</code></li>
<li>I'm using CPython 3.2.0</li>
<li>Blogofile is installed inside my virtual environment at <code>/home/ryan/src/blogofile</code></li>
</ul>
<p>If <code>blogofile info</code> shows you a similar configuration, you've
installed it correctly.</p>
<h3>Install Blog Plugin</h3>
<p>As mentioned earlier, the blog plugin is a separate install from
Blogofile itself. You can install it in the same virtual environment
created in the last step. Create a new directory parallel to
<code>$BFSRC</code>, I'll call it <code>$BF_BLOG_SRC</code>:</p>
<pre><code>mkdir $BF_BLOG_SRC
cd $BF_BLOG_SRC
git clone https://github.com/EnigmaCurry/blogofile_blog.git .
python setup.py develop
</code></pre>
<p>Just like Blogofile, if you're wanting to run the blog plugin in
Python 2.6+, you'll need to convert the source into a 2.x compatible
tarball and install that:</p>
<pre><code>python setup.py sdist
easy_install dist/blogofile_blog-0.8.tar.gz
</code></pre>
<h3>Testing</h3>
<p>You can now create a <code>simple_blog</code> for testing:</p>
<pre><code>mkdir $BFSRC/test_site
cd $BFSRC/test_site
blogofile init simple_blog
blogofile build
blogofile serve 8080
</code></pre>
<p>The site should build and serve locally at <a href="http://localhost:8080">http://localhost:8080</a></p>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://www.blogofile.com/blog</uri>
    </author>
    <title type="html"><![CDATA[Announcing Vaporfile - Deploy Blogofile to Amazon S3]]></title>
    <link rel="alternate" type="text/html" href="http://www.blogofile.com/blog/2011/02/19/blogofile-on-amazon-s3" />
    <id>http://www.blogofile.com/blog/2011/02/19/blogofile-on-amazon-s3</id>
    <updated>2011-02-19T23:20:00Z</updated>
    <published>2011-02-19T23:20:00Z</published>
    <category scheme="http://www.blogofile.com/blog" term="deployment" />
    <summary type="html"><![CDATA[Announcing Vaporfile - Deploy Blogofile to Amazon S3]]></summary>
    <content type="html" xml:base="http://www.blogofile.com/blog/2011/02/19/blogofile-on-amazon-s3"><![CDATA[<p>Amazon recently announced that they have <a href="http://aws.typepad.com/aws/2011/02/host-your-static-website-on-amazon-s3.html">upgraded their S3 service</a> to
allow hosting of entire websites. The first thing to pop into my head
when seeing this announcement was: "Ooo, I wonder if Blogofile can work
with that?"</p>
<p>Indeed it can! This is quite cool, because this means that Blogofile
sites can be run without the need for a full webserver, and will only
cost mere pennies per month for the more meager and less-trafficked
sites. This is even more of a boon for security reasons: no more
maintenance of server patches if all you're doing is running a blog.</p>
<p>I uploaded a <a href="http://s3.blogofile.com">test Blogofile site</a> using
S3Fox, and although it was a little cumbersome, it worked! For use
with Blogofile on a more permanent basis, I want something I can run
from the command line and also be scriptable, so I wrote a python app
to do the job: <a href="https://github.com/enigmacurry/vaporfile">Vaporfile</a>.</p>
<p><em>Vaporfile uploads static websites to the cloud.</em> </p>
<p>You can see the <a href="https://github.com/enigmacurry/vaporfile">installation and usage
instructions</a> over on the
github page, but here's a rough gist:</p>
<pre><code>$ vaporfile create
</code></pre>
<p>This starts a wizard to configure a website. You configure the S3 bucket
name, the local path that contains the website, and other config
parameters. The main reason for using a wizard rather than command
line arguments is because of the nasty possibility of deleting your
entire website because of the wrong command line parameters. All the
configuration is stored and loaded from a JSON file in your home
directory, <code>~/.vaporfile</code>, which can also be edited by hand if needed.</p>
<pre><code>$ vaporfile upload &lt;name-of-website&gt;
</code></pre>
<p>This synchronizes all of the files in the configured website folder on
your local machine to the S3 bucket. Any files that are new or have
changed (based on md5 sum) are uploaded. Any files that have been
deleted locally are deleted from the server (unless you specify
<code>--no-delete</code>).</p>
<pre><code>$ vaporfile list
</code></pre>
<p>This lists all the websites you've configured along with their local
locations.</p>
<pre><code>$ vaporfile credentials store
</code></pre>
<p>This lets you reconfigure your AWS credentials.</p>
<pre><code>$ vaporfile credentials delete
</code></pre>
<p>This removes your AWS credentials completely.</p>
<p>That's it in a nutshell. And in case it's not obvious, Vaporfile is
not specific to Blogofile; it will upload any old website to S3,
because that's all Blogofile sites are, just plain static HTML content.</p>
<p>Later on, this will probably also be wrapped into a Blogofile plugin
for ease of use, but I wanted to get this out there sooner rather than
later, because it's just that cool :)</p>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://www.blogofile.com/blog</uri>
    </author>
    <title type="html"><![CDATA[Blogofile 0.7.1 released]]></title>
    <link rel="alternate" type="text/html" href="http://www.blogofile.com/blog/2011/02/19/blogofile-0.7.1-released" />
    <id>http://www.blogofile.com/blog/2011/02/19/blogofile-0.7.1-released</id>
    <updated>2011-02-19T23:18:00Z</updated>
    <published>2011-02-19T23:18:00Z</published>
    <category scheme="http://www.blogofile.com/blog" term="releases" />
    <summary type="html"><![CDATA[Blogofile 0.7.1 released]]></summary>
    <content type="html" xml:base="http://www.blogofile.com/blog/2011/02/19/blogofile-0.7.1-released"><![CDATA[<p>I've been bad about updating this blog, while most of the discussion
is happening <a href="http://groups.google.com/group/blogofile-discuss">on the mailing
list</a>.</p>
<p>So, for anyone that has this blog in their feeds and was expecting
timely updates.. sorry.</p>
<p>The Blogofile 0.7 series is fresh and feature-full. The
<a href="/documentation">documentation</a> is up to date.</p>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://www.blogofile.com/blog</uri>
    </author>
    <title type="html"><![CDATA[Blogofile 0.6 released]]></title>
    <link rel="alternate" type="text/html" href="http://www.blogofile.com/blog/2010/03/30/blogofile-0.6-released" />
    <id>http://www.blogofile.com/blog/2010/03/30/blogofile-0.6-released</id>
    <updated>2010-03-30T20:57:00Z</updated>
    <published>2010-03-30T20:57:00Z</published>
    <category scheme="http://www.blogofile.com/blog" term="releases" />
    <summary type="html"><![CDATA[Blogofile 0.6 released]]></summary>
    <content type="html" xml:base="http://www.blogofile.com/blog/2010/03/30/blogofile-0.6-released"><![CDATA[<p>Blogofile 0.6 is released today. If you've been following along <a href="http://www.github.com/EnigmaCurry/blogofile">on github</a>, you'll have noticed that there are more commits that have not made it into a release than otherwise. This is my own fault for not adhering to the <a href="http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html">Release Early, Release Often</a> axiom. I apologize! I hope to be better about this in the future, in fact, 0.7 (and maybe even 1.0) should be right around the corner.</p>
<p>That said, 0.6 is a major milestone in Blogofile development and I'm happy to see the product mature as many people have helped out on the <a href="http://groups.google.com/group/blogofile-discuss">mailing list</a> by giving great suggestions as well as patches.</p>
<p>Changelog (in rough chronological order):</p>
<ul>
<li>Posts can now have arbitrary user-defined fields.</li>
<li>Added <a href="http://localhost:8080/documentation/controllers.html">Controllers</a>, which enables users to write their own extensions to Blogofile in userspace. Blogofile no longer has any intrinsic knowledge of what a 'blog' is, this is all controlled in userspace inside a new _controllers directory.</li>
<li>Added <a href="http://blogofile.com/documentation/filters">Filters</a>, which enables people to write their own text processors, for example: syntax highlighters.</li>
<li>Easily debuggable in <a href="http://winpdb.org">Winpdb</a> by setting the BLOGOFILE_DEBUG=t environment variable. (this is equally usable by actual Blogofile core developers, or in your own user extensions).</li>
<li>Non-broken unicode support throughout templates and blog posts.</li>
<li>Lots of unit tests.</li>
<li>reStructuredText support for blog posts.</li>
</ul>
<p>Thanks again to the many supporters of Blogofile!</p>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://www.blogofile.com/blog</uri>
    </author>
    <title type="html"><![CDATA[Blogofile 0.5 released]]></title>
    <link rel="alternate" type="text/html" href="http://www.blogofile.com/blog/2009/08/30/blogofile-0.5-released" />
    <id>http://www.blogofile.com/blog/2009/08/30/blogofile-0.5-released</id>
    <updated>2009-08-30T11:54:00Z</updated>
    <published>2009-08-30T11:54:00Z</published>
    <category scheme="http://www.blogofile.com/blog" term="releases" />
    <summary type="html"><![CDATA[Blogofile 0.5 released]]></summary>
    <content type="html" xml:base="http://www.blogofile.com/blog/2009/08/30/blogofile-0.5-released"><![CDATA[<p>As far as the <a href="http://github.com/EnigmaCurry/blogofile/commits/master">commit history</a> goes, it's been way too long since a released version of Blogofile. There has been a flurry of things happening with Blogofile over the last month, numerous people having started testing Blogofile out, suggesting new features, and even sending patches. </p>
<p>I really like the current Blogofile. It's running both blogofile.com and <a href="http://www.enigmacurry.com">enigmacurry.com</a> (my personal blog) quite well. But we're not done yet. Blogofile started out as a personal project so that I could build my own sites the way I wanted to, and although that has been greatly expanded so that other's could start using the app too, there's still a bit left in Blogofile that is a bit, shall we say, hard coded for the way I like to build sites. Blogofile is soon going to get an overhaul that will allow it create a much more diverse range of types of Blogs, as well as other types of sites, while still trying to keep the simple sites simple. A fine, delicate, line to walk to be sure, but I think it'll make for a better Blogofile. I'm excited to get working on these enhancements, but before we get ahead of ourselves, and seeing as the master branch is looking pretty good the way it is, it's time for a new release of Blogofile.</p>
<p>New, for Blogofile 0.5 (roughly in commit order):</p>
<ul>
<li>Syntax highlighting of page templates.</li>
<li>New Python _config.py file replaces config.conf. This change really appeals to me, we have something that resembles Emacs style configuration rather than a Windows INI file.</li>
<li>init command that spits out a skeleton of a Blogofile site in the current directory, with multiple templates to choose from.</li>
<li>Blogofile is now <a href="/LICENSE.html">MIT licensed</a>.</li>
<li>Lots of new unit tests.</li>
<li>Org-mode mark up for posts</li>
<li>Automatic permalink generation if you don't explicitly set it in the post.</li>
<li>Replaced OptParse with ArgParse for better command line UI.</li>
<li>New <a href="/documentation">documentation</a>.</li>
</ul>
<p>You can install the new version with a simple:</p>
<p>sudo easy_install -U blogofile</p>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://www.blogofile.com/blog</uri>
    </author>
    <title type="html"><![CDATA[Blogofile Documentation]]></title>
    <link rel="alternate" type="text/html" href="http://www.blogofile.com/blog/2009/07/23/blogofile-documentation" />
    <id>http://www.blogofile.com/blog/2009/07/23/blogofile-documentation</id>
    <updated>2009-07-23T15:22:00Z</updated>
    <published>2009-07-23T15:22:00Z</published>
    <category scheme="http://www.blogofile.com/blog" term="blogofile.com" />
    <summary type="html"><![CDATA[Blogofile Documentation]]></summary>
    <content type="html" xml:base="http://www.blogofile.com/blog/2009/07/23/blogofile-documentation"><![CDATA[<p>I've started to compile all the Blogofile documentation I've written <a href="/documentation">into one place</a>.</p>
<p>I've also started a <a href="http://groups.google.com/group/blogofile-discuss">mailing list</a> for all thing Blogofile related. Please feel free to give feedback, ask questions, or suggest new features there.</p>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://www.blogofile.com/blog</uri>
    </author>
    <title type="html"><![CDATA[Blogofile 0.4 released]]></title>
    <link rel="alternate" type="text/html" href="http://www.blogofile.com/blog/2009/07/20/blogofile-0.4-released" />
    <id>http://www.blogofile.com/blog/2009/07/20/blogofile-0.4-released</id>
    <updated>2009-07-20T22:53:00Z</updated>
    <published>2009-07-20T22:53:00Z</published>
    <category scheme="http://www.blogofile.com/blog" term="releases" />
    <summary type="html"><![CDATA[Blogofile 0.4 released]]></summary>
    <content type="html" xml:base="http://www.blogofile.com/blog/2009/07/20/blogofile-0.4-released"><![CDATA[<p>I've just released Blogofile 0.4. </p>
<p>Nothing terribly major, but it does represent a maturing product:</p>
<ul>
<li>Less buggy syntax highlighting now with a home-grown &lt;pre&gt; tag parser</li>
<li><a href="http://www.enigmacurry.com">EnigmaCurry.com</a>, my personal blog, is now powered by Blogofile. This shows that real blogs can and do run Blogofile.</li>
</ul>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://www.blogofile.com/blog</uri>
    </author>
    <title type="html"><![CDATA[Syntax Highlighting and Markdown support]]></title>
    <link rel="alternate" type="text/html" href="http://www.blogofile.com/blog/2009/03/09/syntax-highlighting-and-markdown" />
    <id>http://www.blogofile.com/blog/2009/03/09/syntax-highlighting-and-markdown</id>
    <updated>2009-03-09T17:43:00Z</updated>
    <published>2009-03-09T17:43:00Z</published>
    <category scheme="http://www.blogofile.com/blog" term="development" />
    <summary type="html"><![CDATA[Syntax Highlighting and Markdown support]]></summary>
    <content type="html" xml:base="http://www.blogofile.com/blog/2009/03/09/syntax-highlighting-and-markdown"><![CDATA[<p>The development version of blogofile now includes the following features:</p>
<ul>
<li>Syntax highlighting - thanks to <a href="http://www.pygments.org">pygments</a></li>
<li>Markdown support - thanks to <a href="http://www.freewisdom.org/projects/python-markdown/">markdown in python</a></li>
</ul>
<p>Check out <a href="/demo/sample_posts.html">some examples here</a></p>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://www.blogofile.com/blog</uri>
    </author>
    <title type="html"><![CDATA[Blogofile 0.3]]></title>
    <link rel="alternate" type="text/html" href="http://www.blogofile.com/blog/2009/03/03/blogofile-version-0.3" />
    <id>http://www.blogofile.com/blog/2009/03/03/blogofile-version-0.3</id>
    <updated>2009-03-03T13:09:00Z</updated>
    <published>2009-03-03T13:09:00Z</published>
    <category scheme="http://www.blogofile.com/blog" term="releases" />
    <summary type="html"><![CDATA[Blogofile 0.3]]></summary>
    <content type="html" xml:base="http://www.blogofile.com/blog/2009/03/03/blogofile-version-0.3"><![CDATA[
<p>I've been making a lot of changes to blogofile today. Consider blogofile to still be alpha-quality, although I think it's quite useable right now.</p>

<p>I just released <a href="http://github.com/EnigmaCurry/blogofile/tarball/0.3">version 0.3</a> on github as well as on <a href="http://pypi.python.org/pypi/Blogofile">PyPI</a>.</p>
]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://www.blogofile.com/blog</uri>
    </author>
    <title type="html"><![CDATA[The History of Blogofile]]></title>
    <link rel="alternate" type="text/html" href="http://www.blogofile.com/blog/2009/03/02/the-history-of-blogofile" />
    <id>http://www.blogofile.com/blog/2009/03/02/the-history-of-blogofile</id>
    <updated>2009-03-02T13:10:00Z</updated>
    <published>2009-03-02T13:10:00Z</published>
    <category scheme="http://www.blogofile.com/blog" term="blogofile.com" />
    <summary type="html"><![CDATA[The History of Blogofile]]></summary>
    <content type="html" xml:base="http://www.blogofile.com/blog/2009/03/02/the-history-of-blogofile"><![CDATA[
<p>I've been blogging for a while now, over at <a href="http://www.enigmacurry.com">EnigmaCurry.com</a>, early on having used TikiWiki, and most recently Wordpress. I've been mostly happy with Wordpress, it's got a very active community surrounding it and for the most part, it just works. </p>

<p>One thing I really hate about wordpress though, is writing blog posts in their stupid in browser editor. It's not really Wordpress' fault, no one has ever built a decent in browser editor (although <a href="http://bespin.mozilla.com/">that may change</a>), so I use Emacs to write all my blog posts.</p>

<p>At first I used the <a href="https://addons.mozilla.org/en-US/firefox/addon/4125">It's all text</a> firefox extension to be able to edit browser text fields inside of Emacs. This is a nice solution, and I use it all the time. However, when I'm writing blog entries, I'm kind of a perfectionist, often editing a post a couple dozen times before feeling done with it. It got rather tedious to keep switching between Emacs and firefox each time I would save my changes. I wanted a way that I could publish to my blog directly in Emacs.</p>

<p>As it turns out, there are several packages for Emacs that will publish to blog engines using xml-rpc:</p>
  <ul>
    <li><a href="http://www.tolchz.net/2008/01/06/posting-to-wordpress-with-emacs-webloggerel/">weblogger.el (Tolchz.net version)</a></li>
    <li><a href="http://www.emacswiki.org/cgi-bin/emacs/weblogger.el">weblogger.el</a> (The original?)</li>
    <li><a href="http://lists.gnu.org/archive/html/gnu-emacs-sources/2008-11/msg00006.html">blog.el</a></li>
    <li><a href="http://code.google.com/p/wp-emacs/">wp-emacs</a></li>
  </ul>
<p>I've tried them all. They all either didn't work, or didn't work how I wanted them to, so I started to write my own, but got frustrated and realized that I probably couldn't improve on what had already been done.</p>

<p>I briefly played with the idea of creating a <a href="http://fuse.sourceforge.net/">FUSE</a> based filesystem interface to wordpress, where when I wrote a file to a specific directory it would automatically post or update a blog entry on my blog. I wrote the original interface, but then I found <a href="http://www.google.com/url?sa=t&source=web&ct=res&cd=1&url=http%3A%2F%2Fgithub.com%2Fmojombo%2Fjekyll%2Ftree%2Fmaster&ei=_ImsSYbdM4yRngfbzeW_Bg&usg=AFQjCNGNQYkR3_N9TZzboMUafsn_6JUj-A&sig2=Z43F6QH8c3Pmjs9ykWHQkg">Jekyll</a>.</p>

<p>Wow! Jekyll is awesome. Most blog engines have a database that when a user requests a page the engine queries the database for the post and renders an HTML page on the fly. This frees the author from having to create an HTML page everytime they want to post to their site, but it gets a bit computationally expensive to render that page everytime a user requests one. Why not generate the page <b>one time</b> and be done with it? That's exactly what Jekyll does, it prerenders your entire website from a set of templates and then you upload that rendered site to your webhost (or have git do it for you with a post-receive hook).</p>

<p>Two things about Jekyll prevent me from using it though, it's brand new and doesn't have all the nice features that wordpress has, like categories and tags and such. Also, it's written in Ruby. I hear Ruby is a fine language, but I don't know it. So I wanted something similar in Python.</p>

<p>So this is Blogofile, something quite similar to Jekyll, but written in Python. Jekyll is made more for websites of arbitrary structure, although it does blogs quite well. Blogofile is targeted specifically for blogs. It integrates categories, tags, rss/atom feeds, rss/atom feeds per category, comments and trackbacks, like a good blog should.</p>

<p>Major props go out to <a href="http://tom.preston-werner.com/">Tom Preston-Werner</a> for creating Jekyll. I hope the jekyll project continues to do well!</p>

]]></content>
  </entry>
</feed>

