Blog, UTC

About the Software behind this Blog

An open Software Test

This (first) entry in my blog serves to demonstrate all features of the used software. It is also designed to be used as an open, continually expanded software-test for new features of the mentioned software. In detail, paragraphs, lists, various links, source code and interactive figures are demonstrated. Other than in all subsequent articles in this blog, changes of this very article are not indicated in the context of its date of release. (The abstract of blog entries can contain free HTML such as links into Wikipedia.)

In: Blog, Software Test, Demo

Internally, this blog is based on an XML file for storing its contents and the description of its structure. When the website is build, two files per blog entry and language are generated from the XML file. The first file can be accessed by search engines and web browsers with disabled JavaScript. The second file is loaded via AJAX on demand and subsequently integrated into the main file of this website.

Every blog entry is available in two languages. Consistently, this also applies to all corresponding tags or, respectively, key words. Furthermore, every blog entry can have a date of release and a date of its last change or update.


This is a regular paragraph in this blog. It can contain free HTML code, which allows it to be designed at will. Links to external websites such as Wikipedia for example are automatically recognized and marked. Internal links to the concept of this website for example work equally.


Formulas or fragments of formulas, respectively, can be included into the document in two different ways. If the formula is supposed to take centre stage, it must be placed between special tags, similar to paragraphs. This way, it uses the entire width of the page as in the following example:

(1)  f: X \to Y

If elements of a formula are supposed to be explained in a text, they can be included right in the middle of a paragraph like this one X = 2^{ \mathbb{N} } for example. mathjax-node, a flavour of MathJax (both open source under the Apache License 2.0) for Node.js, is used for rendering. The formulas are translated from LaTeX into SVGs while the website is being build and eventually embedded into the blog.


Images of just about every type can be included as a figure with a description.

Image 1: An image provided as a PNG file. The description of figures can contain free HTML code and links like, for example, to Open Data in Wikipedia.
Videos (via Youtube)

Videos hosted on Youtube can be included into this blog just like images with a description below.

Video 1: A video, hosted on Youtube. It is explained in more detail in "Newton knew he was wrong".
Interaktive plots

Thanks to the integration of Bokeh (open source under a BSD licence) it is possible to include interactive plots into this website.

Plot 1: A simple plot demonstrating some of the interactive features of Bokeh.

Next to Bokeh, this blog also supports interactive figures based on Plotly (open source under the MIT License). Due to the fact that Plotly became fully open source at the end of 2015 it poses an interesting yet significantly larger and more complex alternative to Bokeh. Prominent features, not covered by Bokeh, include three-dimensional drawings accelerated with WebGL and colored contour plots.

Plot 2: Another simple plot, demonstrating some fundamental interactive features of Plotly.
Source Code

Source code can be included into articles in two different ways. In the first example, the source code is loaded from an external file and formatted by the blog software.

 1 # -*- coding: utf-8 -*-
 2 import numpy
 4 def mark_nodes(self):
 5  self.segs['nodes'] = [
 6   0 for item in range(0, len(self.segs['Traj_ID']), 1)
 7   ]
 8  for g in range(0, len(self.trajs['Traj_ID']), 1):
 9   b = self.segs["id" + str(self.trajs['Traj_ID'][g])]
10   for c in range(b[0], b[1] + 1, 1):
11    if self.segs['SPK_ID'][c] == self.ID_SUN:
12     if self.segs['DV'][c] > 1:
13      self.segs['nodes'][c] = self.NODE_DSM
14    else:
15     d = c
16     while (d < b[1]) and (
17      self.segs['SPK_ID'][c] == self.segs['SPK_ID'][d + 1]
18      ):
19      d += 1
20     if c == b[0]:
21      self.segs['nodes'][c] = self.NODE_DEPARTURE
22     elif d == b[1]:
23      self.segs['nodes'][d] = self.NODE_ARRIVAL
24     elif self.isAllHyperbolic(c, d):
25      self.segs['nodes'][d] = self.NODE_FLYBY
26     else:
27      self.segs['nodes'][d - 1] = self.NODE_STAY_ARRIVAL
28      self.segs['nodes'][d] = self.NODE_STAY_DEPARTURE
29     c = d
Example 1: Python code from an external file. The description of figures can contain free HTML code and links like, for example, to Open Data in Wikipedia.

In the second example, source code is directly embedded into the structure of the blog. It is particularly useful for one- or two-line code fragments.

1 import math
2 if True:
3 	print(math.sin(2))
Example 2: Other Python source code directly from within the blog.

Syntax highlighting is available for a number of programming languages. However, the languages are not automatically recognized - instead, they must be specified in the blog. The highlighting functionality is provided by Pygments (open source under a BSD licence) which allows to highlight the code while the website is being build instead of stressing the client's CPU.

To do

The presented blog software can (yet) not handle images, offer its contents in pre-build pdf-files or include explanations or citations. Besides, it is (yet) incapable of managing and displaying literature references in a sane manner.


Every blog entry is closed with the name of its respective author. This allows for both multiple authors, if required, and links to further reading about the author.

Sebastian M. Ernst