Ein paar Plugins für Pelican

Wie ich mich beim coden fühle

Ich bin eigentlich ziemlich glücklich mit meinem Umstieg von Wordpress auf Pelican. Dieses Static-Site-Ding macht in meinen Augen wirklich Sinn. Vor allem passt es sich gut in diesen GIT-Workflow ein. Alles in Markdown und keine DB im Nacken plus Backups die durch GIT ganz wunderbar sind. Meine Entscheidung für Pelican fiel durch die Programmiersprache Python. Ich dachte es ist schön wenn man fähig ist ein wenig zu verstehen was dort passiert und es eventuell die Möglichkeit gibt auch etwas dem Projekt zurück zu geben. Dies habe ich nun mit ein paar Erweiterungen für das liquid_tags Plugin getan. Ich habe gemerkt das ich oft viele Sachen einbinde und dies frisst Zeit sich erstmal die Embeded-Codes rauszusuchen oder selber zu basteln. Dies soll für einige Dienste nun durch diese Erweiterungen verbessert werden.

flickr

Hier war das Problem anhand der ID an alle Informationen zu kommen um das HTML-Tag zu bauen. Ich habe mich dazu Entschieden einfach die Flickr-API zu nutzen. Dies ist natürlich nicht der optimalste Weg, es funktioniert aber. Um die API zu nutzen braucht man erstmal einen Key von Flickr. Den packt man in die Pelican-Config unter der Variable FLICKR_API_KEY und schon kann man aus

\{\% flickr 18841046161 large 'Ich denke an einen Wald' \%\}

folgendes basteln:

Ich denke an einen Wald

Für alle Optionen schaut man hier vorbei.

soundcloud

Was ich auch gerne tue, ist Soundcloud Widgets einbinden. Und hier mein großer Respekt an die API. Es gibt einen Endpoint der einem gleich den Embeded-Code liefert. Alles was man tun muss ist die Track-Url mitgeben. So wird aus

\{\% soundcloud https://soundcloud.com/luftmentsh/hakotel \%\}

dies hier:

Den Code gibt es hier.

giphy

Manche Sachen sagt man besser mit einem GIF. Ja, es macht jedes zweite Blog. Egal... es ist wunderbar. Noch einfacher wenn man mit einem einfachen Tag Giphy-Animationen einbinden kann. Dank der API (wiederum braucht man einen Key) ging das auch ziemlich einfach. Key in die Config (GIPHY_API_KEY) und es kann los gehen.

\{\% giphy y6Nhc2E1ch2ww \%\}

source: https://rhiannonyork.tumblr.com/post/44551538237/when-i-prove-a-vendor-wrong-on-a-conference-call

Den Code gibt es hier.

html5 audio

Manchmal wollte ich Audio-Beiträge vom Deutschlandfunk verlinken. Diese bieten kein Widget zum einbinden. Man bekommt nur die reinen MP3-Files. Das schönste ist natürlich wenn man das Audio-Tag benutzt welches es seit HTML5 gibt. Also kein komischer Flash-Player. Natürlich gibt es immer noch riesen Probleme zwischen Audioformat und Browser und Betriebssystem. Deswegen kann man mehrere Sources pro Player einbinden. Dies geht auch mit diesem Plugin.

\{\% audio http://media.w3.org/2010/07/bunny/04-Death_Becomes_Fur.mp4 http://media.w3.org/2010/07/bunny/04-Death_Becomes_Fur.oga \%\}

Den Code gibt es hier.

Blog Merge

Es wurde verbracht. Ich habe meine beiden Blogs "gemerged". Mein kleines Tech-Blog und mein Main-Blog mit den ganzen Fotos, Popkram, usw. Ich habe mir viele Gedanken darum gemacht ob es überhaupt Sinn macht. Ich kamm zu folgenden Punkten: Ich habe eh nicht viele Leser und der viel wichtigere Punkt ist, dass dieses Blog nun wirklich mich und meinte Interessen wiederspiegelt. Nicht mehr und nicht weniger. Ich will mir keine Gedanken darum machen in welches Blog meine Gedanken passen oder auch nicht. Dies ist nun mein zentrales Gedanken-Repository. Und es soll sich auch vermischen. Darum geht es hierbei.

Diese Chance habe ich gleich genutzt um mein Wordpress wegzuschmeißen um auf einen Static-Sitegenerator umzusteigen. In diesem Fall pelican. Ein paar Bugs gibt es noch und an denen bin ich dran. Ein Vorteil ist jetzt schon die Datenbanklosigkeit. Einfach Markdown-Files und sed... aber das ist eine Blogpost für sich...

Das Blog bei GitHub hosten

Ich musste mich irgendwann entscheiden. Seit Jahren habe ich kaum praktischen IT-Kram gebloggt. Irgendwie hat es sich so ergeben, dass ich dies nicht in mein normales Blog schreiben wollte. Und immer wieder kam es vor das ich mir kniffe ergoogelt oder erfragt habe und die in irgendeiner Weise teilen wollte. Ich bin doch bestimmt nicht der erste der wissen will wie man OpenVPN unter Windows als Dienst laufen lassen kann. Dazu kam natürlich der Wunsch meine Programmier-Experimente zu dokumentieren und Erfahrungen aufzuschreiben. Das ganze sollte simpel gehalten werden. Keine Datenbank und am besten mit Markdown-Support. Es wurde Pelican. Ein Python-Generator der aus Markdown statische Seiten knuppert. Python... passt! Dann hatte ich mal gelesen, dass man auf GitHub auch Seiten hosten kann. Und zwar statische Seiten. Perfekt. Ich wollte das Blog eh in einem GIT-Repository verwalten. Wer hätte gedacht das ich mir wirklich ein paar Stunden die Zähne ausbeißen würde um zu verstehen wie GitHub das nun macht. Man muss die HTML-Files in einem Branch mit dem Namen "gh-pages" ablegen. Dann gibt es wohl einen Unterschied zwischen User-Site und Project-Site. Die User-Site ist unter "username.github.io" erreichbar. Eine Project-Site unter "username.github.io/project". In die Falle in die ich getappert bin war: Bei der User-Site müssen die HTML-Files direkt im master-branch liegen und nicht unter "gh-pages". Dies gilt nur für die Project-Sites. Also erstmal ein Repo mit dem Namen "blog" angelegt und geklont. Darin kommen dann die Markdown-Files und der ganze Pelican-Config-Kram und das Theme. Die ".gitignore" habe ich um "output" erweitert. So pushe ich nur die Files die ich zur Blog-Erstellung brauche in den master, aber nicht die HTML-Files selber. Es gibt ein nettes Python-Script mit dem Namen "ghp-import".

ghp-import output

Damit lädt er den Inhalt des Output-Folders in den "gh-pages"-Branch. Pusht man den nun auf GitHub, läuft alles und ist unter "http://username.github.io/blog" erreichbar.

Isso ersetzt Disqus

Disqus ist böse. Zumindestens geht das gerade ganz schön durch die Blogosphere. Mal davon abgesehen bin ich immer Fan vieles selber zuhosten. Gerade wenn man darauf steht vieles auszuprobieren und nach Alternativen zu stöbern. bl1nk hat mich dabei auf Isso aufmerksam gemacht. Also stand das Ganze auf meiner Liste der Sachen die ich mit Pelican machen wollte. Und schon ging es los. Das ganze sollte in einer virtualenv-Umgebung laufen, mit Supervisor und gunicorn gestartet werden und durch NGINX geschleust werden.

Also erstmal mit "virtualenv" die Umgebung anlegen, isso und gunicorn installieren:

virtualenv isso
cd isso
. bin/activate
pip install isso
pip install gunicorn

Dies sind die drei Werte die ich in der isso.cfg (die liegt in meinem Fall unter /etc/isso/) angepasst habe:

[general]
# hier liegt das sqlite file mit den kommentaren
dbpath = /var/lib/isso/comments.db

# von diesem host werden kommentare zugelassen
host = http://code.xsteadfastx.org/

# isso hört auf diesem interface
[server]
listen = http://localhost:8004

Auf meiner Todo-Liste stehen noch Notifications per SMTP. Das kommt dann später. Supervisor habe ich mit der Distributions-Paketverwaltung installiert. Unter "/etc/supvervisor/conf.d/" habe ich "isso.conf" angelegt.

[program:isso]
command=/srv/www/comments/bin/gunicorn -b 127.0.0.1:8004 --preload isso.run
directory=/var/lib/isso
environment=PATH="/srv/www/comments/bin",ISSO_SETTINGS="/etc/isso/isso.cfg"
user=www-data
autostart=yes

Das schöne an Supervisor ist, dass man unter "environment" gleich noch ein paar Variabeln deklarieren kann. Läuft das Isso durch gunicorn und supervisor, kann man sich um NGINX kümmern. Dazu habe ich die config angelegt:

server {
    listen 80;
    server_name comments.xsteadfastx.org;
    access_log  /var/log/nginx/access.log;

    location / {
        proxy_pass http://127.0.0.1:8004;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Jetzt läuft schon mal Isso. Nun musste ich mein Pelican-Theme anpassen. Dazu habe ich in der "pelicanconf.py" die Variabel "ISSO_URL" eingeführt. Und "DISQUS_SITENAME" auskommentiert.

#DISQUS_SITENAME = "xsteadfastxistryingtocode"
ISSO_URL = 'http://comments.xsteadfastx.org'

Im Theme-Template Ordner habe ich das File "isso.html" angelegt.

{% if ISSO_URL %}
  <script data-isso="{{ ISSO_URL }}"
        data-isso-css="true"
        data-isso-lang="en"
        data-isso-reply-to-self="false"
        src="{{ ISSO_URL }}/js/embed.min.js">
      </script>
      <section id="isso-thread"></section>
{% endif %}

In "album.html" muss noch an der richtigen Stelle...

{% include 'isso.html' %}

...eingefügt werden. Falls es nicht ganz klar ist, kann man mein Beispiel auf GitHub anschauen.

Abmahnhölle

Schlecky Silberstein und ihre Maßnahme gegen die Abzocker

Ich weiß nicht ob man als kleines Blog der großen Gefahr ausgesetzt ist abgemahnt zu werden. Doch macht sich eine große Blase der Ungewissheit breit bei vielen deutschen Bloggern. Dieses Land hat leider noch nichts von Fair-Use gehört, und so öffnet man die Türen für "halb-automatisierte" Abmahnungen von zweifelhaften Rechtsanwaltbüros.

Aktuell geht es um den Fall das Blogger in Deutschland abgemahnt werden für das Posten von Bildern des Künstlers Nathan Sawaja. Kurios wird es wenn man liest das der Künstler die Rechte an dem Bild keiner Firma verkauft hat und die Anwälte garantiert nicht nach seinem Willen handeln. Er kommentiert in einigen Blogs:

This is Nathan Sawaya. I have been notified that my art is the subject of this matter. To be clear, I am not represented by this law firm. I am not represented by this photo agency. If you have any questions, you may email at info@brickartist.com.

Aber wie kommen die Anwälte jetzt darauf die Rechte für ihn einzuklagen und einfach Summen in astronomischer Höhe einzutreiben? Ich bin wirklich gespannt was da noch rauskommt. Alles was gerade bleibt ist die Leere in der Zuversicht auf welchen abstrusen Gesetzen unsere geliebten Blogs existieren dürfen. Ich bin total eingeschüchtert. Ich weiß das ich keine Abmahnung in dieses Höhe bezahlen könnte. Wie gehe ich jetzt damit um? Höre ich auf zu bloggen? Ändere ich mein Konzept und poste nur noch Sachen die sich um mich drehen? Ich schreibe hier weil dieses Blog meine eigene Inspirationsquelle sein soll. Ich sammel das was mich interessiert, mich antreibt und fasziniert. Wenn ich also alle Beiträge nach kurzer Zeit löschen würde, wäre das Konzept wieso ich das ganze hier mache, nicht mehr sinnvoll. Ich habe aus einem Anflug von Panik erstmal ein paar Beiträge auf "Privat" gesetzt.

Was gibt es für Möglichkeiten sich zu schützen? Es kursieren einige Ideen. Ob sie vollständig helfen weiß keiner. Das Blog "Schlecky Silberstein" hat sich dazu entschieden die verbloggten Bilder einfach nach einigen Tagen zulöschen und die Abmahnanwälte mit der oben gepostete 404-Meldung zu begrüßen.

Hier ein paar Links zu der aktuellen Abmahnhölle: