About this blog

This is the technical blog here at Openpolis. It hosts articles written by our technical staff, while facing and possibly solving problems during the day to day operations.

It is a pelican-based blog and we write the articles as simple Markdown or ReStructured text files.


You can install this solution for yourself! Fork https://github.com/openpolis/openpolis.github.com.git to your github account and clone the cloneable tag, to have an almost empty blog.

Use the git@github.com:[account]/[account].github.com.git naming convention to have the html pages hosted automagically on github’s user or organization pages at http://[account].github.com.

Now, follow these instructions:

$ mkvirtualenv [YOUR BLOG NAME]
$ cd [YOUR BLOG NAME]/source
$ setvirtualenvproject
$ pip install -r requirements

Read the settings.py file, to adapt the blog to your context. You can select one among a set of pre-default themes, as a starting point for your customisations. You can activate the disqus comments, tipogrify enhancements, google analytics, twitter and github links.


To rebuild the html code:

$ fab pelican

to publish the html to github:

$ fab push

to compile and push at once:

$ fab publish


This is the directory tree:

 |- index.html
 |- author
 |  |- guglielmo.html
 |  |- danielef.html
 |- categories.html
 |- category
 |  |- python.html
 |  |- rest-api.html
 | ...
 |- source
    |- fabfile.py
    |- requirements.txt
    |- settings.py
    |- README.rst
    |- first.post.rst

Fabric is used to manage the ‘compile/push/publish’ tasks.

Activating the virtualenv with workon, places you inside the source folder, where the fabfile.py file lives. That enables you to use the fab tasks.

Note that the output folder is above the source folder. All output is removed before a rebuild, the source directory is excluded and the CNAME file, needed by github is re-generated. This is obtained through this fab code in the pelican task:

with lcd('..'):
  local('find * -maxdepth 0 ! -name source -print0 | xargs -0n1 rm -rf')
  local('touch CNAME; echo lab.openpolis.it >> CNAME')

Tmux and Tmuxinator

Just in case you’re using tmux and tmuxinator, I append my tmuxinator configuration. (In case you’re not, well, do it!)

# ~/.tmuxinator/lab.yml

# open a shell in the source (to work)
# open a pelican daemon, reloading on source changes
# open a basic http server (http://localhost:8000)
# open a browser with te locally-server site (wait 2 secs)

project_name: Lab Openpolis
project_root: ~/Workspace/openpolis.github.com
  - shell: workon openpolis.github.com
  - pelican-reload: workon openpolis.github.com; fab pelican:reload_mode=True
  - http-server: workon openpolis.github.com; cd ..; python -m SimpleHTTPServer
  - browser: cd ~/Workspace/openpolis.github.com/; sleep 2; open index.html; exit
Fork me on GitHub