bamboo-2009.5.13: readme.md
# Bamboo: a simple blog middleware on hack
Bamboo is a port of [Panda](http://github.com/nfjinjing/panda/tree), but runs on top of Hack. It's an experimental project but quite portable.
## Features
### plain text as data source
db
|---- blog
| |---- 08-09-01 first post
| |---- 09-09-02 learn javascript.html
|
|---- tag
| |---- programming
| |---- funny
|
|---- static
|---- About
### simple config
blog_title = C大调
blog_subtitle = 野猫不吃薯片
host_name = jinjing.easymic.com
author_email = nfjinjing@gmail.com
navigation = About
per_page = 7
sidebar = Blogroll.md
favicon = bamboo_icon.png
### hacker friendly
* posts are in plain text
* SCM for publishing / data managing ( not really a feature, but a design goal from the beginning )
* blindly follows the KISS principle from code to UI: be a simple blog, no more no less
## Demo
### blog
[My blog](http://jinjing.easymic.com) source is available as a git repo:
git clone git://github.com/nfjinjing/jinjing-blog.git
Or [browser](http://github.com/nfjinjing/jinjing-blog/tree/master) online
Note: This blog is using the Kibro handler. It's running under lighttpd and in fcgi. Definitely more robust, but require some set up work.
### config
[jinjing's blog config file](http://github.com/nfjinjing/jinjing-blog/blob/401a541443d88bbf8d844874c1473d4b3bc81784/config/site.txt)
## Install
### Install Bamboo Middleware
#### update cabal
cabal update
#### install bamboo
cabal install happy
cabal install rss --reinstall
cabal install bamboo
### Pick a hack handler
#### Happstack
cabal install hack-handler-happstack
##### get a starter kit ( template )
mkdir myblog
cd myblog
# get a template to start
git clone git://github.com/nfjinjing/bamboo-template.git db
##### create an entry point
put this into Main.hs
module Main where
import Bamboo
import Hack.Handler.Happstack
import Hack.Contrib.Utils
import Hack.Contrib.Middleware.ContentType
import Hack.Contrib.Middleware.ContentLength
import Hack.Contrib.Middleware.ShowExceptions
import Hack.Contrib.Middleware.Static
import qualified Hack.Contrib.Middleware.Head as H
default_content_type = "text/plain; charset=UTF-8"
middleware_stack =
[ dummy_middleware
-- completeness
, content_length
, content_type default_content_type
-- debuging
, show_exceptions Nothing
-- optimization
, H.head
-- static serve
, static (Just "db/public") ["/theme", "/images", "/plugin", "/favicon.ico"]
-- real app
, bamboo
]
app = use middleware_stack dummy_app
main = run app
##### run
ghc --make -O2 Main.hs
./Main
It should be running on [http://127.0.0.1:3000](http://127.0.0.1:3000) now.
#### Kibro
##### Install Kibro
cabal install kibro
cabal install hack-handler-kibro
##### Install lighttpd 1.4.19 (used by kibro)
wget http://www.lighttpd.net/download/lighttpd-1.4.19.tar.gz
tar zxfv lighttpd-1.4.19.tar.gz
cd lighttpd-1.4.19
./configure --prefix=$HOME
make
make install
make sure `~/sbin` is in your `$PATH`.
You also need [spawn-fcgi](http://redmine.lighttpd.net/projects/spawn-fcgi) in your path. I don't remember how I got mine, but it should come with lighttpd somewhere ...
##### bootstrap
# bamboo is a kibro project
kibro new myblog
cd myblog
# get a template to start
git clone git://github.com/nfjinjing/bamboo-template.git db
sh db/extra/scripts/bootstrap.sh
##### run
kibro start
It should be running on [http://127.0.0.1:3000](http://127.0.0.1:3000) now.
## Links
* [Hack](http://github.com/nfjinjing/hack)
* [Hack Contrib](http://github.com/nfjinjing/hack-contrib)