haze
haze copied to clipboard
A minimalistic blogging engine, the successor of Honk
Haze
Haze is a minimalistic blogging engine, in the spirit of Honk, it's predecessor.
It has very few features compared to other blog engines. Exhaustively:
- Entries, stored in flat text files
- Tags
- An archive page that lists every entry
- An Atom feed
- Drafts
- A very simple comment system
Why so few? Well, I simply don't need more.
Haze's source code is very short (~200LOC) thus the app is light and quick.
Requirements
- sinatra (tested with 0.9.4)
Install
$ git clone git://github.com/madx/haze.git
Copy the files where you want to install it, then edit config.ru if you
want to change the defaults. Use plain ruby to do the configuration, like
this:
require File.join(File.dirname(__FILE__), 'lib', 'haze')
Haze.set :title, "Blog title"
Haze.set :author, "Your name"
Haze.set :domain, "http://example.com/"
Haze.set :email, "[email protected]"
# Replace KEY by a sha1sum of something
Haze.set :key, "KEY"
Haze.reload!
run Haze::App
Create the folder where you will put your entries: mkdir entries.
Then run the app with $ rackup -E production config.ru.
Source
Haze's Git repo is available on GitHub, which can be browsed at http://github.com/madx/haze and cloned with:
git clone git://github.com/madx/haze.git
Usage
Haze entry format enforces a few conventions:
An entry is split in two parts. The first is a header and the second the entry
body. The separator is a succession of at least three - put on a line of their
own.
The header will be the title of your entry. Every word starting with a # will
create a new tag. Tags are automatically lowercase'd. You can add tags that
won't show up in the title by enclosing them in braces ({}).
To determine the order of entries and their URLs, you have to give a correct name to the file they are stored into.
The format is: <date>[+<counter>]_<slug>.(hz/draft).
<date> must be parseable by Time.parse, the handiest format to use is
probably <year>-<month>-<day>. The +<counter> part allows you to write
multiple entries with on single <date>. Behind the scenes, it simply adds
<counter> seconds to the parsed date.
<slug> will be the name of the URL for your entry. hz or draft tells if
the file is a regular entry or a draft.
Drafts are viewable using the url /draft/<slug>.
Example:
$ cat entries/2009-01-08_helloworld.hz
A #Ruby Hello world program {#tutorial,#programming}
---
<p>Hello world is the most common program used to demonstrate a language's
syntax. Here is one in Ruby: </p>
<pre><code>puts "hello world"</code></pre>
- Title: A Ruby Hello world program
- Tags: ruby, tutorial, programming
- Date: 2009-01-08
- Slug: helloworld
Syncing content
To synchronize the blog with contents, just hit the url /_sync_?key=<KEY>,
replacing <KEY> with the value set in config.ru.
To automatically update your post as you update the files, you may use
mynyml's watchr or ttilley's fssm and integrate a script in the
config.ru or using an external tool such as inotifywait.
Static pages
Haze supports static pages. Just create a static folder in the root directory
and put raw HTML pages in it. They will be rendered inside the layout and are
available at /static/<file name>.
Issues
There may be a bug with the Encoding class and HAML under Ruby 1.9, something
about Encoding.default_internal. To fix it, add this somewhere in your
config.ru:
class ::Encoding
def self.default_internal
"utf-8" # Or the right encoding
end
end
License
Haze is published under the terms of the MIT license, you can find a copy of
that license in the LICENSE file