packages feed

panda-2009.4.1: readme.md

## Panda: a simple blog engine in Haskell

### Features

#### simple file structure

    db
    |---- blog
    |     |---- 08-09-01 first post
    |     |---- 09-09-02 learn javascript.html
    |
    |---- tag
    |     |---- programming
    |     |---- funny
    |
    |---- static
          |---- About

#### simple config file

    blog_title    = C大调
    blog_subtitle = 野猫不吃薯片
    host_name     = jinjing.blog.easymic.com
    author_email  = nfjinjing@gmail.com

    navigation    = About
    per_page      = 7
    sidebar       = Blogroll.md
    favicon       = panda_icon.png

#### standard web technology

extend/customize with pure css and javascript ( note the custom part in css and js from the last section )

#### 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

### config

[jinjing's blog config file](http://github.com/nfjinjing/jinjing-blog/blob/401a541443d88bbf8d844874c1473d4b3bc81784/config/site.txt)

## Install

### Quick setup

#### install [lighttpd](http://www.lighttpd.net/ )

Note: only version 1.4.19 has been successfully tested, 1.4.20 is bugged for reasons unknown.

#### install [ghc](http://www.haskell.org/ghc/download.html)

#### install [darcs](http://www.darcs.net/) for `cabal-install`

#### install [cabal-install](http://hackage.haskell.org/trac/hackage/wiki/CabalInstall)

    darcs get --partial http://darcs.haskell.org/cabal-install/
    cd cabal-install
    sh bootstrap.sh

#### install panda

    cabal update; cabal install panda

#### bootstrap

    # panda is a kibro project
    kibro new myblog
    cd myblog
    
    # get a template to start
    git clone git://github.com/nfjinjing/panda-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.

Since Panda is based on Kibro, it helps to read how [Kibro](http://chrisdone.com/blog/tag/Kibro) works.

### Goodies

Install `Ruby` / `Rake`, then `rake -T` to see a list of helper commands.

### Config

Edit `db/config/site.txt`

    blog_title   = My shiny blog
    host_name    = yourhost.com
    author_email = your_mail@yourhost.com

Restart required. (hint: `rake r`)

## User's guide

### posts

All posts are placed in `db/blog` folder, with naming convention [yy-mm-dd title], in Markdown format by default.

Markdown supports embedding HTML snippets, so embedding youtube video is a peace of cake.

<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/rEYg0Dqtogg&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/rEYg0Dqtogg&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>
    
You can create static pages, in `db/static`, and link to them via `/static/static_file_name` inside your blogs.

For example `db/static/About`, where you can put some profile in.

### tagging

Create a file in `db/tag`, the name of the file will be the name of the new tag.
edit the tag file, insert the full name of a blog post, e.g. `08-09-04 Welcome to Panda`

### html / tex / restructured text format

Just create the file in blog as usual with an extension (e.g. html, rst, tex ), and you are all set.

### customize navigation bar

see example in `config/site`:

    navigation = About, Gallery

Multiple renderer supported, use extension as hints.

Note, the navigation configuration requires the full name of your static page, so you should include extension in configuration as well.

### customize sidebar

see example in `config/site`, `config/sidebar/Blogroll.md`

    sidebar    = Blogroll.md
  
Sidebar items are html snippets plugged into view. You can create these plugins in multiple formats, use extension.

### styling

Styling is done by editing `public/theme/blueprint/css/custom.css`, see the default `custom.css` for inspiration.

### theming

New theme can be created without touching `Panda` code, example blueprint theme in `db/config/theme/blueprint.txt`

    container  = container
    header     = column span-12 first
    navigation = column span-12 first large
    main       = column span-9 first
    sidebar    = column span-3 last
    footer     = footer

    css        = screen, blueprint-wp, custom
    js         = jquery-1.2.6.min, jquery.getUrlParam, jquery.highlight-2, custom


These are custom class names for each element block.

You can create new themes by adding theme definition files in `db/config/theme`, put theme resources under `db/public/theme/your_theme_name` and place

    theme = your_new_theme

inside `site.txt`.

note: `css` and `js` are required to be placed under `db/public/theme/your_theme_name/css` and `db/public/theme/your_theme_name/js`, leave out the file extensions in `site.txt`.

### syntax highlighting

    <object 
      type="text/html" \
      data="http://www.flickr.com/slideShow/index.gne \
      ?user_id=56167317@N00&tags=cat-hack" \
      width="500" height="500">
    </object>

Highlight for `HTML` is enabled by default, see `public/theme/blueprint/js/custom.js` for more language support.

Highlight style is configured at `config/theme/blueprint.txt`, just change `highlight/default` to any css inside `theme/blueprint/css/highlight`.


### analytics

Google analytics is available, put your `tracker_id` in `site.txt`, if you don't want analytics, ignore the setting.

Once site module is introduced, those `js` code could be configured to be gone forever, but not yet in the current release.

### final note

try to use `<h3>` for heading in your posts, at least `wordpress` is using this convention. `<h1>` is not styled in the blueprint theme, so they look kind of unfitted. But this does not stop anyone from styling `<h1>, <h2>` if wished.

### Links

* [Kibro](http://chrisdone.com/blog/tag/Kibro)
* [Panda on Jinjing's blog](http://jinjing.easymic.com/tag/Panda)
* [Source](http://github.com/nfjinjing/panda/tree)