Let me introduce... my blog
Tags: Blog – Jekyll – Bootstrap – Markdown – Liquid
I decided to set up this blog mostly with the aim of writing down install instructions as neat as possible for the software I use, so I (hopefully) can save time when setup a new computer. So, why don’t describe the technology behind the blog itself as a first post?
Quick and dirty: the blog is a set of HTML pages, styled through Bootstrap, hosted on github statically generated through Jekyll using the twitter theme for the Jekyll-Bootstrap framework, with comments support provided by Disqus.
Let me explain all this with a bit more of detail. The site contents are not dynamically generated or read from a database: the actual HTML code your browser is rendering is stored somewhere at github. The other endpoint is a set of text files holding the blog contents, encoded using the markdown language. These files are sent from my computer to the github server, where a text processor called Jekyll transforms them into HTML code.
Although the not so low number of involved software, the required installation is relatively simple, and basically follows the workflow described in the Jekyll-Bootstrap site and in a specific post from Eric Jones.
I’ll assume you have a working knowledge of version control systems, you are
comfortable with git and you have a github account. If not, google for a git
tutorial (for instance this one),
play around for a while, and set
up a github account. I’ll also assume you have an
updated version of Ruby on your system (execute sudo gem update --system
to
check for updates on your Ruby installation)
- Once logged into github, create a new repository named
YOURUSERNAME.github.com
, whereYOURUSERNAME
should be replaced by your actual github user name (in this step as well as in all subsequent occurrences ofYOURUSERNAME
. Don’t let github add a README.md file, or you’ll run into a conflict later on. -
Position yourself in a suitable place of your file system, and clone locally Jekyll-Bootstrap in a directory named
YOURUSERNAME.github.com
, thencd
in that directory:$ git clone https://github.com/plusjade/jekyll-bootstrap.git YOURUSERNAME.github.com $ cd YOURUSERNAME.github.com
-
Associate the downloaded software with your github repository and push it:
$ git remote set-url origin git@github.com:YOURUSERNAME/YOURUSERNAME.github.com.git $ git push origin master
At this point, all the essential software is installed: point your browser to
http://YOURUSERNAME.github.com
and you should see the Jekyll-Bootstrap template
Web site. Note that generating the online web site could require up to some minutes,
so don’t worry you don’t see your site immediately.
Unless you really like to live dangerously, it is wise to work on a development site instead of directly modify the publicly available site. Thus, it is strongly recommended that you also install a local copy of Jekyll, which installs as a Ruby gem:
When this step completes (and this could require some time), you can run a Jekyll server:
It is important that the latter operation is executed within the
YOURUSERNAME.github.com
directory: this will allow Jekyll-Bootstrap to read its contents
and convert them into a Web site locally available at the address localhost:4000
.
The conversion works as follows: all files whose name does not start with an underscore
are read and trasformed using:
- a Markdown parser in order to handle the static part of the site contents: this allows blog entries to be written even without knowing anything about HTML, but simply rendering structure and formatting through a simple textual-based syntax;
- the Liquid templating engine with the aim of rendering the dynamic part of the site and factoring common and repeated parts.
All files whose name begins with an underscore is left untouched. Such files contain
configuration options, assets such as CSS and JS, templates and so on. In particular,
under _site
you’ll find a copy of the generated Web site.
The Jekyll server is aware of file modification, so the locally served Web site is always updated. Also in this case, the Web site generation requires some time, although sensibly lower than required when publishing online. Roughly speaking, the new content will usually show up when the page is reloaded once or twice.
You can google tutorials or cheat sheets for the syntax of both tools. Just to give a first reference, you can read the Markdown tutorial by John Gruber and the Liquid for Designers section of the Shopify site on github.
Content can be added either as a new post or a new page: the former is the usual
atomic content of a blog, while the latter represents a site page, such as a Bio, an
archive of past posts and so on. The syntax for adding both elements is similar, and
is based on rake
, a building tool analogous to make
but relying on Ruby:
The text within double quotes represents the title of the post in the first example,
and the name of the markdown file containing the page description in the second one.
Created pages will reside in the home directory, unless the specified name is a
pathname, while posts are placed in the _posts
directory, in files named aggregating
the current date and the specified title. It is precisely this file which you’ll have
to edit, possibly using Markdown syntax, in order to insert the actual post content.
Once you are satisfied with your blog, publishing it online is simply a matter of committing and pushing your repository:
Another operation worth considering is that of customizing your blog: this will likely
require to write general information and setting into _config.yml
and to modify files
in the _layouts
and _includes
directories. The Jekyll-Bootstrap
site and the Eric Jones’
blog represent
valuable resources. The only things I did not find there are the following ones.
- The CSS provided with the downloaded version of Jekyll-Bootstrap is not responsive,
that is it refers to a fixed layout requiring to horizontally scroll the browser
contents if its window is too narrow. This is particularly annoying when browsing
through a device with limited screen size, such as a smartphone. The solution to this
problem is that of replacing the file
assets/themes/twitter/bootstrap/css/bootstrap.min.css
with a customized version built and downloaded from the Bootstrap site (be sure to select the options in the Responsive section). -
Source code highlighting needs to be explicitly turned on. This requires to install pygments
$ sudo easy_install Pygments
(using one of the methods in section Pygments of the Jekyll site if
easy_instal
is not available), and to create a CSS file containing the source code formatting rules$ pygmentize -S default -f html > assets/css/pygments.css
This file has to be copied in the
assets/themes/twitter/css
directory and referenced in_includes/themes/twitter/default.html
through alink
tag:<link href="{{ ASSET_PATH }}/css/syntax.css" rel="stylesheet" type="text/css" media="all">
-
This last point is not explicitly connected with Jekyll-Bootstrap, but it’s a part of what I wanted as default facility in my blog, that is proper mathematical formatting. My choice is MathJax, which does not (necessarily) require local installation: it’s just a matter of remotely including the following javascript code into
_includes/themes/twitterdefault.html
:<script type="text/javascript" src="https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
which is ugly, but is the only safe way currently provided to avoid man-in-the-middle attacks. But in the end, this will allow your posts to have nice formulas such as
\[\frac{1}{\sqrt{2 \pi} \sigma} \int_{-\infty}^{+\infty} \mathrm e^{\frac{(x - \mu)^2}{2 \sigma^2}} \mathrm d x = 1\]Remeber, though, that inline equations should escape backslash in delimiters, thus using
\\(
and\\)
instead of\(
and\)
.
blog comments powered by Disqus