Inspired by Fred Wilson's post about Owning Yourself, I revived my Pelican blog. All my website's configuration and source files are public as well as my modifications to the pure theme. Reasons for Pelican compared to hosted solutions:
- content under version control in git
- my usual text editor for content creation
- fully owning content and its exact presentation
- complete customizability, therefore I want Python, therefore Pelican
A cost is that I have to contribute some changes myself:
- customized Pure theme: print mode, less author mentions, responsive resizing for mobile, using the pygments
friendly
style for code highlighting pelican_jsmath
: using KaTeX: nothing existed to combine it with Pelican and so I created pelican-jsmath. The new plugin is \(\alpha\omega\epsilon s \sigma m \epsilon\) and described in a separate blog post.pelican-cite
: create a nicely formatted Bibliography from a bibtex file. I created PR#5 so that it also works on draft pages.image_process
: Responsive images (smaller images on smaller devices) are especially important for the projects page and on article index page. The plugin works on all generated files just before they are written, so you can use it everywhere in your theme as well.pelican-advance-embed-tweet
: submitted PR#2 to remove align attribute from<bockquote>
which is not HTML5, and you can instead setTWITTER_ALIGN = 'center'
in yourpelicanconf
to center the embedded tweet.gravatar
: request higher resolution Gravatar images by adding?s=140
to the image url in the themerelated_posts
: newly added to this blogrepresentative_image
: automatically extract an image from an article and use it in article list withimage_process
to thumbnailpelican_dynamic
: adds options to add per article customcss
andjs
Open and in-progress issues:
- hack of the day: make your default status
draft
(generally a good idea), but then set the default status inpublishconf.py
tohidden
. When trying to publish,hidden
will create an error and the file will be skipped. So the article wont exist on the web at all until its status is set todraft
. Problem: have to splitOUTPUTDIR
in the Makefile so that two different directories are used formake devserver
andmake publish
(filed issue#2284 against Pelican; see Makefile). - Have to wrap Tweet embeds in
<div>
to avoid Markdown's<p>
tag because the embedded tweet includes a<blockquote>
which cannot appear inside a<p>
tag.
Always validate html with html5validator and check links with the W3C Link Checker.
Pelican Plugins
Most Pelican Plugins are distributed through the central
pelican-plugins repository.
The contributed plugins have fairly little recognition: render_math
has 65 stars and
image_process
has 10 stars. Issues against individual plugins are filed
in the central repository and not against the individual plugins. Updates to
plugins have to wait for inclusion in the central repository before they become
used by others.
Python provides its standard mechanism with pip
, setuptools
, requirements.txt
, etc.
to manage dependencies. Plugins can be written to support pip
and Pelican
does support importable plugins. This also allows unit tests and continuous
integration to ensure the quality of the plugin.
This is the method I chose for pelican-jsmath.