{"id":10114,"date":"2014-11-25T12:00:20","date_gmt":"2014-11-25T11:00:20","guid":{"rendered":"http:\/\/tuxproject.de\/blog\/?p=10114"},"modified":"2019-03-25T00:10:36","modified_gmt":"2019-03-24T23:10:36","slug":"ins-internet-schreiben-mit-pelican","status":"publish","type":"post","link":"https:\/\/tuxproject.de\/blog\/2014\/11\/ins-internet-schreiben-mit-pelican\/","title":{"rendered":"Ins Internet schreiben mit Pelican"},"content":{"rendered":"<p><em>(Vorbe\u00admerkung: Dies ist eine leicht \u00fcber\u00adar\u00adbeit\u00adete Vari\u00adante eines Beitrags, den ich schon ander\u00adswo ver\u00f6f\u00adfentlicht hat\u00adte.)<\/em><\/p>\n<p>Mir ist schon seit ein\u00ader Weile auf\u00adgrund von Per\u00adfor\u00admance- und Sicher\u00adheit\u00adsprob\u00adle\u00admen danach, Word\u00adPress, das ich seit inzwis\u00adchen neun Jahren nutze, auf diesem kleinen Textver\u00f6f\u00adfentlichungs\u00add\u00adings ein\u00admal durch etwas Anderes auszu\u00adtauschen. Nicht aber gegen ein anderes \u201crichtiges\u201d Blogsys\u00adtem wie s9y und <a href=\"http:\/\/ghost.org\">Ghost<\/a>, denn damit h\u00e4tte ich nicht viel gewon\u00adnen, hinge\u00adgen einiges ver\u00adloren (ger\u00adade auch weil Ghost immer noch kein brauch\u00adbares Kom\u00admen\u00adtarsys\u00adtem hat und ich <a href=\"https:\/\/tuxproject.de\/blog\/2014\/10\/tore-zum-mistmachweb\/\">sicher\u00adlich nicht<\/a> anfan\u00adgen werde, inter\u00adessierten Kom\u00admen\u00adta\u00adtoren JavaScript aufzuzwin\u00adgen). Inter\u00ades\u00adsan\u00adter sind da schon Seit\u00aden\u00adgener\u00ada\u00adtoren wie Jekyll und dessen Frame\u00adworks (etwa <a href=\"http:\/\/www.octopress.org\">Octo\u00adpress<\/a>), die zwar auch meist keine Kom\u00admen\u00adtar\u00adfunk\u00adtion, daf\u00fcr aber viele weit\u00adere Vorteile mit\u00adbrin\u00adgen, zum Beispiel, dass man sein Blog mit git ver\u00adsion\u00adieren kann und nicht auf einen PHP\/MySQL-Stack angewiesen ist, weil die Web\u00adsite direkt als HTML aus\u00adgegeben wird und nicht bei jedem Aufruf neu erzeugt wer\u00adden muss. <a href=\"http:\/\/lc3dyr.de\/blog\/2012\/07\/22\/Jekyll-auf-Uberspace\/\">Franz<\/a> hat die Vorteile eines solchen Bloggen\u00ader\u00ada\u00adtors ein\u00admal aufgez\u00e4hlt.<\/p>\n<p><!--more-->Nun ist Jekyll l\u00e4ngst nicht das einzige Werkzeug dieser Art, die Auswahl <a href=\"https:\/\/staticsitegenerators.net\/\">ist riesig<\/a>; ger\u00adade, wenn man in der Sprache Ruby nicht heimisch ist, ist das Erzeu\u00adgen eines neuen Blo\u00adgein\u00adtrags in (zum Beispiel) Octo\u00adpress auch eine <a href=\"http:\/\/hackerpublicradio.org\/eps.php?id=1370\">unn\u00f6tig kom\u00adplizierte Sache<\/a>. Au\u00dfer\u00addem scheint es unm\u00f6glich zu sein, ein Octo\u00adpress-Theme zu entwick\u00adeln, das nicht aussieht wie aus\u00adgekotzt. Oder hat es nur noch nie\u00admand ver\u00adsucht?<\/p>\n<p><b>Warum nicht Pel\u00adi\u00adcan?<\/b><\/p>\n<p>Unter den Alter\u00adna\u00adtiv\u00aden beson\u00adders inter\u00ades\u00adsant finde ich <a href=\"http:\/\/www.getpelican.com\">Pel\u00adi\u00adcan<\/a>, das <a href=\"http:\/\/bastibe.de\/2012-07-18-blogging-with-pelican.html\">ander\u00adswo<\/a> als ein\u00adfach beschrieben wird und j\u00fcngst in <a href=\"http:\/\/blog.getpelican.com\/pelican-3.5-released.html\">Ver\u00adsion 3.5<\/a> erschien. Ein guter Anlass, es mir mal anzuse\u00adhen. Daf\u00fcr brauche ich ja nur Python 2.7 und einen beliebig ein\u00adfachen Web\u00adserv\u00ader, der Rest ver\u00adl\u00e4uft <a href=\"http:\/\/docs.getpelican.com\/en\/3.5.0\/install.html\">nach der Anleitung<\/a>. Wird die falsche Python-Ver\u00adsion \u2014 stan\u00addard\u00adm\u00e4\u00dfig ist das oft nicht 2.7 \u2014 ver\u00adwen\u00addet, so schl\u00e4gt <tt>pip install pel\u00adi\u00adcan<\/tt> so erhe\u00adblich fehl, dass der anschlie\u00dfende Aufruf von <tt>pel\u00adi\u00adcan-quick\u00adstart<\/tt> nur zwei Syn\u00adtaxfehler zur Folge hat. Vor der Instal\u00adla\u00adtion sollte mit <tt>python \u2011V<\/tt> also drin\u00adgend \u00fcber\u00adpr\u00fcft wer\u00adden, ob Python 2.7 die aktive Ver\u00adsion ist.<\/p>\n<p><b>Quick\u00adstart!<\/b><\/p>\n<p><tt>pel\u00adi\u00adcan-quick\u00adstart<\/tt> funk\u00adtion\u00adiert danach jeden\u00adfalls wie gew\u00fcn\u00adscht: Ein\u00adtip\u00adpen, ein paar Fra\u00adgen beant\u00adworten und es kann los\u00adge\u00adhen. Dies richtet im Wesentlichen die Datei <tt>pelicanconf.py<\/tt> ein, die sozusagen das Organ\u00adisatorische \u00fcbern\u00adimmt: Blogti\u00adtel, Perma\u00adlinkstruk\u00adtur und <a href=\"http:\/\/docs.getpelican.com\/en\/3.5.0\/settings.html\">\u00e4hn\u00adliche Optio\u00adnen<\/a> wer\u00adden dort fest\u00adgelegt. Bei der Gele\u00adgen\u00adheit sollte dort gle\u00adich der <tt>OUTPUT_PATH<\/tt> so angepasst wer\u00adden, dass die erzeugten HTML-Dateien im richti\u00adgen Ord\u00adner lan\u00adden.<\/p>\n<p><b>Zeit f\u00fcr den ersten Tes\u00adtar\u00adtikel.<\/b><\/p>\n<p><tt>pel\u00adi\u00adcan<\/tt> benutzt stan\u00addard\u00adm\u00e4\u00dfig den Ord\u00adner <tt>.\/content\/<\/tt> f\u00fcr Entw\u00fcrfe. Wenn per <tt>pip<\/tt> oder <tt>easy_install<\/tt> eine lauf\u00adf\u00e4hige Ver\u00adsion von Mark\u00addown instal\u00adliert ist, ver\u00adste\u00adht es auch Mark\u00addown, eine Ausze\u00adich\u00adnungssprache, die von Dias\u00adpo\u00adra, Ghost, Stack Over\u00adflow, GitHub und weit\u00aderen Plat\u00adtfor\u00admen bere\u00adits benutzt wird und die zu ler\u00adnen ich also sowieso empfehle.<\/p>\n<p>Pel\u00adi\u00adcan ver\u00adwen\u00addet wie wohl alle sta\u00adtis\u00adchen Gen\u00ader\u00ada\u00adtoren Rein\u00adtext\u00addateien statt ein\u00ader kom\u00adplex\u00aden Daten\u00adbank. Es l\u00e4sst sich also schlicht Fol\u00adgen\u00addes tun:<\/p>\n<pre>emacs content\/new-blog-post.md<\/pre>\n<p>Der Dateiname ist weit\u00adge\u00adhend egal, ihr k\u00f6n\u00adnt die Beitr\u00e4ge also auch durch\u00adnum\u00admerieren oder das Datum in den Dateina\u00admen schreiben.<\/p>\n<p>Ein funk\u00adtion\u00adieren\u00addes Beispiel f\u00fcr so einen Blog\u00ada\u00adr\u00adtikel mit Kat\u00ade\u00adgorien, Tags und mod\u00adi\u00adfiziertem Perma\u00adlink (<em>slug<\/em>) sieht jeden\u00adfalls so aus:<\/p>\n<pre>Title: Beispielbeitrag\nDate: 2014-10-28 20:00\nModified: 2014-10-28 20:01\nCategory: Nerdkrams\nTags: hirnfick,pelican\nSlug: ein-beispiel\nAuthors: tux.\nSummary: Der Beispielbeitrag ist ein Beispiel.\nDies ist der erste Beitrag, den ich auf Pelican schreibe.\nSeht mal, *Markdown* **geht auch!**.\n&lt;u&gt;HTML \u00fcbrigens auch.&lt;\/u&gt;<\/pre>\n<p>Wie ihr seht, geh\u00f6rt der erste Teil eines Blog\u00ada\u00adr\u00adtikels immer den Meta\u00addat\u00aden, ihr k\u00f6n\u00adnt also ziem\u00adlich leicht den Namen des Autors oder das Ver\u00f6f\u00adfentlichungs\u00adda\u00adtum \u00e4ndern. Mit <a href=\"http:\/\/kerunix.com\/blog-using-orgmode-and-pelican.html\">Emacs und <tt>org-mode<\/tt><\/a> lie\u00dfe sich das automa\u00adtisieren, aber sicher\u00adlich gibt es da viele weit\u00adere M\u00f6glichkeit\u00aden. Es ist nat\u00fcr\u00adlich auch m\u00f6glich, das Datum <a href=\"http:\/\/docs.getpelican.com\/en\/3.5.0\/content.html#file-metadata\">aus dem Dateisys\u00adtem<\/a> zu \u00fcbernehmen.<\/p>\n<p><b>Release, release.<\/b><\/p>\n<p>Wenn euch der Beispiel\u00adbeitrag so gef\u00e4llt, k\u00f6n\u00adnt ihr ihn ver\u00f6f\u00adfentlichen:<\/p>\n<pre>cd ~\npelican<\/pre>\n<p>Ta-dah:<\/p>\n<p><a href=\"https:\/\/tuxproject.de\/blog\/wp-content\/uploads\/2014\/11\/Pelican6.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/tuxproject.de\/blog\/wp-content\/uploads\/2014\/11\/Pelican6-300x93.png\" alt=\"Pelican\" width=\"300\" height=\"93\" class=\"alignnone size-medium wp-image-10121\" srcset=\"https:\/\/tuxproject.de\/blog\/wp-content\/uploads\/2014\/11\/Pelican6-300x93.png 300w, https:\/\/tuxproject.de\/blog\/wp-content\/uploads\/2014\/11\/Pelican6-120x37.png 120w, https:\/\/tuxproject.de\/blog\/wp-content\/uploads\/2014\/11\/Pelican6-50x15.png 50w, https:\/\/tuxproject.de\/blog\/wp-content\/uploads\/2014\/11\/Pelican6.png 816w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\"><\/a><\/p>\n<p><b>Plu\u00adg\u00adins<\/b><\/p>\n<p>So flex\u00adi\u00adbel das Pel\u00adi\u00adcan-Sys\u00adtem wegen der Kom\u00adpilierung auch erscheinen mag, <em>nat\u00fcr\u00adlich<\/em> gibt es immer etwas, was f\u00fcr den eige\u00adnen Ein\u00adsatz fehlt. Word\u00adPress wird ja auch f\u00fcr seine Erweit\u00ader\u00adbarkeit von vie\u00adlen Nutzern gesch\u00e4tzt. Aber wer sagt, dass \u201csta\u00adtisch\u201d immer \u201cunflex\u00adi\u00adbel\u201d bedeuten muss?<\/p>\n<p>Tat\u00ads\u00e4ch\u00adlich gibt es auch f\u00fcr Pel\u00adi\u00adcan eine Vielzahl an <a href=\"https:\/\/github.com\/getpelican\/pelican-plugins\">Plu\u00adg\u00adins<\/a>, die den erzeugten HTML-Seit\u00aden etwas W\u00fcrze ver\u00adlei\u00adhen. Anzeige des <a href=\"http:\/\/www.gravatar.com\">Gra\u00advatars<\/a> f\u00fcr Artike\u00adlau\u00adtoren? <a href=\"https:\/\/github.com\/getpelican\/pelican-plugins\/tree\/master\/gravatar\">Funk\u00adtion\u00adiert.<\/a> YouTube? <a href=\"https:\/\/github.com\/kura\/pelican_youtube\">Etwas umst\u00e4ndlich, aber kein Prob\u00adlem.<\/a> Eine Sitemap f\u00fcr die SEO-Ver\u00adr\u00fcck\u00adten? <a href=\"https:\/\/github.com\/getpelican\/pelican-plugins\/tree\/master\/sitemap\">Warum nicht?<\/a><\/p>\n<p>Alle Funk\u00adtio\u00adnen sind da, aber es k\u00f6n\u00adnte noch etwas h\u00fcb\u00adsch\u00ader ausse\u00adhen? Auch Pel\u00adi\u00adcan ken\u00adnt Themes, eine Vielzahl von ihnen ist <a href=\"https:\/\/github.com\/getpelican\/pelican-themes\">auf GitHub<\/a> zu find\u00aden. Es gen\u00fcgt, ein Theme in den Ord\u00adner <tt>\/themes<\/tt> zu kopieren und in der Datei <tt>pelicanconf.py<\/tt> einzu\u00adtra\u00adgen \u2014 beim n\u00e4ch\u00adsten Gener\u00adieren wird es automa\u00adtisch ver\u00adwen\u00addet.<\/p>\n<p><b>Kom\u00admentare<\/b><\/p>\n<p>Da die mit Pel\u00adi\u00adcan erzeugte Web\u00adsite nicht erst beim Aufruf erzeugt wird, sind Kom\u00admentare, die in ein\u00ader Daten\u00adbank liegen, hier nicht ohne Weit\u00aderes m\u00f6glich. Die offen\u00adsichtliche L\u00f6sung, <a href=\"http:\/\/ascraeus.org\/2013\/10\/Static-Pelican-Comments.html\">sta\u00adtis\u00adche Kom\u00admentare<\/a> im Stil klas\u00adsis\u00adch\u00ader Leser\u00adbriefe per E\u2011Mail zu erm\u00f6glichen, ist auf Web\u00adsites mit ein\u00ader hohen Fre\u00adquenz an Benutzer\u00adin\u00adter\u00adak\u00adtion mitunter zu aufw\u00e4ndig. Wer damit leben kann, dass Kom\u00admentare JavaScript voraus\u00adset\u00adzen, der kann zu etablierten Frem\u00addan\u00adbi\u00adetern wie <a href=\"http:\/\/www.disqus.com\">Dis\u00adqus<\/a>, das in viele Pel\u00adi\u00adcan-Themes bere\u00adits inte\u00adgri\u00adert ist, oder <a href=\"http:\/\/www.intensedebate.com\">IntenseDe\u00adbate<\/a> greifen oder ein selb\u00adst\u00adge\u00adhostetes Kom\u00admen\u00adtarsys\u00adtem wie etwa <a href=\"http:\/\/moparx.com\/2014\/03\/implementing-the-hashover-open-source-commenting-system-within-pelican\/\">HashOver<\/a> oder <a href=\"http:\/\/posativ.org\/isso\/\">Isso<\/a> ein\u00adbinden. Daf\u00fcr muss nur im Theme eine <a href=\"https:\/\/github.com\/MartinNowak\/pelican-blueidea\/commit\/148ec809c413447202211fa6456a6f9702d8e634\">entsprechende Anpas\u00adsung<\/a> erfol\u00adgen, bei der Gele\u00adgen\u00adheit lassen sich die Kom\u00admentare auch gle\u00adich per CSS optisch anpassen.<\/p>\n<p><b>Faz\u00adit<\/b><\/p>\n<p>Alles in Allem: Pel\u00adi\u00adcan ist mehr als nur ein nettes Spielzeug. <a href=\"http:\/\/docs.getpelican.com\/en\/3.4.0\/importer.html\">Es gibt einen Word\u00adPress-Import<\/a> und Plu\u00adg\u00adins f\u00fcr aller\u00adlei Ein\u00adsatzz\u00adwecke. Ich empfehle Pel\u00adi\u00adcan mal im Auge zu behal\u00adten. Es muss ja nicht immer ein aufge\u00adbl\u00e4ht\u00ades CMS sein.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Vorbe\u00admerkung: Dies ist eine leicht \u00fcber\u00adar\u00adbeit\u00adete Vari\u00adante eines Beitrags, den ich schon ander\u00adswo ver\u00f6f\u00adfentlicht hat\u00adte.) Mir ist schon seit ein\u00ader Weile auf\u00adgrund von Per\u00ad\u00adfor\u00ad\u00admance- und Sicher\u00adheit\u00adsprob\u00adle\u00admen danach, Word\u00adPress, das ich seit inzwis\u00adchen neun Jahren nutze, auf diesem kleinen Textver\u00f6f\u00adfentlichungs\u00add\u00adings ein\u00admal durch etwas Anderes auszu\u00adtauschen. Nicht aber gegen ein anderes \u201crichtiges\u201d Blogsys\u00adtem wie s9y und Ghost, \u2026<\/p>\n<p><a href=\"https:\/\/tuxproject.de\/blog\/2014\/11\/ins-internet-schreiben-mit-pelican\/\" class=\"more-link\">\u2018Ins Inter\u00adnet schreiben mit Pel\u00adi\u00adcan\u2019 weit\u00ader\u00adlesen \u00bb<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wp_typography_post_enhancements_disabled":false,"footnotes":""},"categories":[19],"tags":[],"series":[],"class_list":["post-10114","post","type-post","status-publish","format-standard","hentry","category-nerdkrams"],"share_on_mastodon":{"url":"","error":""},"wp-worthy-pixel":{"ignored":false,"public":null,"server":null,"url":null},"wp-worthy-type":"normal","_links":{"self":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts\/10114","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/comments?post=10114"}],"version-history":[{"count":0,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts\/10114\/revisions"}],"wp:attachment":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/media?parent=10114"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/categories?post=10114"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/tags?post=10114"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/series?post=10114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}