# Bamboo: a simple blog engine 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.ContentSize 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_size , 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)