Kolumne, UTC

Über die Software hinter dieser Kolumne

Ein offener Software-Test

Dieser (erste) Eintrag in meiner Kolumne, im Weiteren auch als Blog bezeichnet, demonstriert alle Fähigkeiten der verwendeten Software. Er dient gleichermaßen als offener, ständig erweiterter Software-Test für neue Fähigkeiten selbigen Systems. Im Einzelnen werden Absätze, Listen, verschiedene Links, Programm-Code und interaktive Abbildungen demonstriert. Anders als bei allen weiteren Artikeln werden Änderungen in diesem Artikel nicht im Erstellungsdatum kenntlich gemacht. (Die Zusammenfassung von Artikeln kann freies HTML enthalten wie zum Beispiel Links in die Wikipedia.)

In: Blog, Kolumne, Software-Test, Demo
 

Der Blog benutzt intern eine XML-Datei zum Ablegen seiner Texte und der Beschreibung seiner Struktur. Aus dieser XML-Datei werden beim Bau der Webseite je Eintrag und Sprache zwei Dateien erzeugt. Die erste kann durch Suchmaschinen und Browser ohne aktiviertes JavaScript genutzt werden. Die zweite wird bei Bedarf per AJAX nachgeladen und in die Hauptdatei der Webseite integriert.

Jeder Blog-Eintrag liegt in zwei Sprachen vor, wobei auch bei den entsprechenden Tags bzw. Schlüsselwörtern konsequent zwischen Sprachen unterschieden wird. Des Weiteren können jedem Eintrag ein Erstellungsdatum sowie ein Datum der letzten Änderung zugeordnet werden.

Absätze

Dies ist ein regulärer Absatz im Blog. Er kann freien HTML-Code enthalten und dadurch beliebig gestaltet werden. Externe Links wie zum Beispiel in die Wikipedia werden automatisch als extern markiert. Interne Links wie zum Beispiel zum Konzept dieser Webseite funktionieren ebenso.

Listen
Formeln

Formeln bzw. Formelzeichen oder -fragmente können in zwei Varianten eingebunden werden. Falls die Formel im Mittelpunkt stehen soll, muss sie in speziellen Tags, gleichrangig mit Absätzen, eingebunden werden, um auf voller Seitenbreite beispielsweise so dargestellt zu werden:

(1)  f: X \to Y

Falls es sich nur um einzelne Elemente handelt, die erklärt werden müssen, lassen sich Formeln auch wie beispielsweise hier X = 2^{ \mathbb{N} } mitten im Text einbinden. Die Darstellung erfolgt mit Hilfe von mathjax-node, einer Umsetzung von MathJax (beides quelloffen unter der Apache-Lizenz 2.0) für Node.js. Die Formeln werden während des Baus der Webseite von LaTeX in SVGs übersetzt und in den Blog eingebettet.

Abbildungen

Bilder jedweder Art können als Abbildung mit Beschreibung eingebunden werden.

Abbildung 1: Ein Bild im PNG-Format. Die Beschreibung von Abbildungen kann HTML-Code und Links wie zum Beispiel zu Open Data in der Wikipedia enthalten.
Videos (via Youtube)

Auf Youtube verfügbare Videos können genauso wie Abbildungen mit Beschreibung in diesen Blog eingebunden werden.

Video 1: Ein auf Youtube abgelegtes Video, auf welches näher in "Newton wusste, dass er falsch lag" eingegangen wird.
Interaktive Plots

Durch die Integration von Bokeh (quelloffen unter einer BSD-Lizenz) ist es möglich, interaktive Plots mit Beschreibung in diese Webseite einzubinden.

Plot 1: Ein einfacher Plot, welcher einige der interaktiven Fähigkeiten von Bokeh demonstriert.

Daneben unterstützt dieser Blog auch interaktive Darstellungen mit Plotly (quelloffen unter der MIT-Lizenz). Auf Grund der Tatsache, dass Plotly Ende 2015 vollständig quelloffen wurde, bietet es sich als eine sehr interessante wenn auch ungleich größere und komplexere Alternative zu Bokeh an. Funktionen, welche Bokeh nicht beinhaltet, schließen unter anderem mit WebGL beschleunigte dreidimensionalen Darstellungen und gefärbte Konturdiagramme mit ein.

Plot 2: Ein einfacher Plot, welcher einige grundlegende interaktiven Fähigkeiten von Plotly demonstriert.
Quelltext

Quelltext bzw. Programm-Code kann auf zwei verschiedene Arten in Artikel eingebunden werden. Im ersten Beispiel wird der Code durch die Blog-Software aus einer externen Datei nachgeladen und formatiert.

 1 # -*- coding: utf-8 -*-
 2 import numpy
 3 
 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
Beispiel 1: Python-Code aus externer Datei. Die Beschreibung von Abbildungen kann HTML-Code und Links wie zum Beispiel zu Open Data in der Wikipedia enthalten.

Im zweiten Beispiel ist der Code direkt in die Struktur des Blogs eingebettet. Dies bietet sich für kleinere ein- bis zweizeilige Code-Fragmente an.

1 import math
2 if True:
3 	print(math.sin(2))
Beispiel 2: Anderer Python-Code direkt im Blog

Für eine Reihe an Programmiersprachen steht automatische Syntax-Hervorhebung zur Verfügung. Eine automatische Erkennung der Sprache erfolgt nicht - sie muss im Blog vorgegeben werden. Die eigentliche Hervorhebung erfolgt durch Pygments (quelloffen unter einer BSD-Lizenz), was es ermöglicht, die Hervorhebung beim Bau der Webseite vorzunehmen anstatt die CPU des Besuchers zu belasten.

Was noch kommt

Diese Blog-Software kann (noch) nicht mit Bildern umgehen, ihre Artikel als fertig gebaute pdf-Dateien bereitstellen oder Zitate beziehungsweise Ergänzungen einbinden. Ebenso kann (bis jetzt noch) keine Bibliographie dargestellt werden, was dem zu Folge keine zentral verwalteten Referenzen erlaubt.

Autoren

Jeder Blog-Eintrag wird durch den Namen seines Autors abgeschlossen. Dies erlaubt im Zweifelsfall die Kenntlichmachung mehrerer Autoren sowie weiterführende Links.

Sebastian M. Ernst