Aus der Entscheidung des BVerfG zur Erbschaftsteuer

:: Steuern

Das Bundesverfassungsgerichts hat in seiner Entscheidung vom 17. Dezember 2014 (1 BvL 21/12) Regelungen zur Erbschaftsteuer als verfassungwidrig moniert. Ich finde in der Entscheidung eigentlich den fünften Leitsatz mit am interessantesten:

“Ein Steuergesetz ist verfassungswidrig, wenn es Gestaltungen zulässt, mit denen Steuerentlastungen erzielt werden können, die es nicht bezweckt und die gleichheitsrechtlich nicht zu rechtfertigen sind.”

Nun bin ich kein Steuer-, Verfassungsrechtsspezialist (genaugenommen gar kein Rechtsspezialist) und weiß nicht, ob dieser Satz nicht ohnehin schon gilt oder Verfassungs- und Steurrechtsrealität ist. Ich habe es allerdings in dieser Klarheit noch nicht gelesen. Und wenn ich mir so das eine oder andere Steuergesetz und seine Wirkungen ansehe, dann kommt da unter diesem Leitsatz vielleicht in den kommenden Jahren einiges auf die Gerichte zu.

Migration alter Blog-Einträge

:: Homepage, Org-Mode, Octopress

Es kamen lange Winterabende und ich habe die alten Blog-Einträge von der mittels Org-Mode erstellten Seite hier nach Octopress migriert. Im Archiv sind diese zu finden und die Links etc. sollten nun auch passend mit migriert worden sein.

Bei der Konvertierung habe ich ein Programm kennengelernt, das mir sehr geholfen hat: Pandoc. Das ist ein Konverter, der Text- und Markupdateien hin und her konvertieren kann. Dabei beherrscht er eine ganze Reihe von Formaten. Insbesondere kann er das Org-Mode-Format (das ich für viele Dinge verwende) ebenso wie LaTeX und Markdown (daneben aber auch noch eine Legion von Formaten).

Da mein Hauptdateiformat ohnehin “Textdateien” sind (“Never trust a file that isn’t ASCII”) ist das sehr praktisch, um zwischen verschiedenen Markup-Formaten hin und her zu springen.

Für die Migration meine Blog-Einträge lief dies wie folgt: Ich hatte die in der alten Homepage mit Org-Mode und Org-Jekyll erstellt. Dabei hatte das Org-Jekyll-Modul entsprechende HTML-Dateien mit einem YAML-Header erzeugt. Mittels Pandoc konnte ich die nun wieder nach Markdown konvertieren, habe die YAML-Header ein wenig angepasst, Kategorien aktualisiert und noch mal das Markup zwecks Zeilenumbrüche, Fußnoten und Links geprüft und leicht angepasst. Insgesamt sehr schnell bewältigbar.

Dieser ganze Zoo rund um Markdown und andere ähnliche Formate ist zwar manchmal ein bisschen unübersichtlich, aber mir gefällt das sehr gut, dass man mit wenig Markup schön Textdateien strukturieren kann und dann mit Pandoc auch gut hin und her konvertieren kann.

Wie das Haus von Bundesministerin Nahles mauert

:: Politik, Behörden

Ein Gesetzesvorhaben der großen Koalition ist eine Regelung zur Tarifeinheit. Passend in die Tarifauseinandersetzungen bei der Deutschen Bahn zeigte Bundesministerin Nahles Entschlossenheit und Tatkraft:

Am 28. Oktober 2014 informierte sie die Presse über den Gesetzentwurf ihres Hauses zur Tarifeinheit. Dieser solle in die Ressortabstimmung gehen und am 3. Dezember im Kabinett verabschieden werden. Den Abschluss des parlamentarischen Verfahrens erwartete Frau Nahles für den Sommer 2015.

Über die Vorstellung und den Inhalt des Entwurfs berichtete ausführlich in zwei Berichten die FAZ (hier und hier). Den Berichten nach fand ein Gespräch der FAZ mit der Bundesministerin statt. Der FAZ lag der Referentenentwurf vor. Den Berichten ebenfalls zu entnehmen war, dass sozialpolitische und arbeitsrechtliche Interessenverbände wie die Bundesvereinigung der Arbeitgeber und auch der Deutsche Gewerkschaftsbund über den Entwurf verfügten, diese genannten sogar an “der Ausarbeitung des Gesetzes beteiligt” waren (Zitat aus dem FAZ-Bericht).

Ich bin ja skeptisch, wie man das, was die Koalition sich da vorgenommen hat, regeln kann. Also dachte ich mir: Wenn die Zeitung davon weiß, die Interessenverbände mitgearbeitet haben und auch denen der Entwurf vorlag und dann die Bundesministerin auch noch hierüber Pressegespräche führt und den Entwurf öffentlich “vorstellt”, dann kann ich da ja auch einmal einen Blick hineinwerfen. Ich habe, da ich den Entwurf nicht auf der Homepage entdeckte, diesen beim Bundesministerium für Arbeit und Soziales angefordert.

So einfach geht es aber nicht: Es antwortete mir am 29. Oktober 2014 das “Kommunikationscenter” des Bundesministeriums für Arbeit und Soziales wie folgt:

Sollten Sie (…) den Gesetzentwurf zur Tarifeinheit meinen, so müssen wir Ihnen mitteilen, dass dieser noch nicht veröffentlicht wurde. Er geht in Kürze in die Ressortabstimmung und kann erst danach veröffentlicht werden.

Ich wies in einer Antwort darauf hin, dass das ja nicht so ganz sein könnte, dass die Tarifparteien, interessierte Verbände und die Presse den Entwurf vorliegen hätten, der gemeine Bürger sich aber mit der Presseerklärung der Bundesministerin (ein MP3-File mit 2:36 Minuten Länge) bescheiden müsse. Am 30. Oktober 2014 teilte das Kommunikationscenter mit, dass sie die Anfrage an die Fachabteilung weitergeben wollten, dafür aber noch meine Postanschrift benötigten. Diese habe ich umgehend übermittelt. Es passierte erst einmal nichts. Am 4. November 2014 wollte ich dann den Stand wissen (es kann ja nicht so schwer sein, ein PDF per E-Mail zu versenden) und außerdem, welche Fachabteilung dafür zuständig ist (dann kann man das ja schnell per Telefon oder E-Mail klären). Nichts passierte. Am 7. November 2014 habe ich dann noch mal erklärt, dass ich den Entwurf wirklich möchte und die Anfrage formal auf das Informationsfreiheitsgesetz gestützt. Nun wachte das Kommunikationscenter am 10. November 2014 auf und teilte mit, dass sie die Anfrage an die zuständige Fachabteilung weitergeleitet hätten. Welche das ist, mochte man mir aber immer noch nicht mitteilen.

Das war es dann wieder, das Bundesministerium verfiel erneut in Stille. Seit dem sind zwei Wochen vergangen.

Da mich der Entwurf wirklich interessierte, habe ich einmal einen Interessenverband angeschrieben und nach ca. einer Stunde erhielt ich den Entwurf.

Ich stelle mir da ja schon einige Fragen: Was ist eigentlich so schwer daran, einen Referentenentwurf, den man ohnehin breit hat zirkulieren lassen, einem Bürger zur Verfügung zu stellen? Warum antwortet die Fachabteilung über einen Zeitraum vom 4. November 2014 bis heute einfach gar nicht?

Mir drängt sich jedenfalls der Eindruck auf, dass das Ministerium von Frau Nahles die Diskussion gestalten möchte. Dabei soll wohl die Bundesministerin als zupackende und problemlösende Politikerin dargestellt werden. Hierzu werden Verbände und Medien exklusiv mit Details versorgt. Der gemeine Bürger soll sich davon beeindrucken lassen und bloß nicht nach Details fragen; die erfährt er dann schon, wenn die Politik und Ministerialverwaltung es für geboten halten.

P.S.: Ich weiß, dass Referentenentwürfe normalerweise nicht auf der Homepage erscheinen und Gesetzesvorhaben vorab mit Verbänden diskutiert werden. Ich halte das auch grundsätzlich für sinnvoll. Ich habe aber bisher noch nicht ein solches “Mauern” erlebt. Bisher erhielt ich dort, wo ich angefragt hatte, immer ohne Schwierigkeiten Auskunft.

Update (01. Dezember 2014): Zwischenzeitlich habe ich den Referentenentwurf für jedermann zum Download bei der taz gefunden: PDF

Update (13. Dezember 2014): Am 11. Dezember 2014 hat das Bundeskabinett den Gesetzentwurf zur Tarifeinheit beschlossen, er findet sich nun auf der Homepage des Bundesministeriums für Arbeit und Soziales: PDF Wenig erstaunlicherweise habe ich auf meine Anfrage vom 29. Oktober 2014 außer den oben dargestellten Nachrichten des “Kommunikationscenters” nichts gehört.

Warten auf den technischen Fortschritt als politisches Prinzip?

:: Politik

Am 12. November 2014 sendete der Deutschlandfunk in der Reihe “Hintergrund” einen Bericht über die energetische Sanierung mit Wärmedämmverbundsystemen.

Zu der Diskussion wollte sich die zuständige Bundesministerin Barbara Hendricks nicht äußern, das Thema sei nur ein Randthema und sie habe andere Prioritäten. Sehr interessant waren dafür dann die Meinungen des sie vertretenden Staatssekretärs Gunther Adler.

In diesem Blogpost will ich auf einen Aspekt des Berichts eingehen. Es sei wohl so, dass die Entsorgung von Wärmedämmverbundsystemen (also im Wesentlichen auf verschiedene Arten behandeltes Polystyrol) schwierig ist. So wird gesagt:

“Das große Problem ist gerade bei der Polystyrol-Dämmung, dass die Lebenserwartung der Dämmplatten relativ gering ist. Man geht davon aus, dass sie 20 oder 30 Jahre an der Fassade bleiben können, dann ersetzt werden müssen.”

Über die Entsorgung wurde gesagt:

“Das Dämmmaterial Polystyrol darf nicht auf die Mülldeponie, unter anderem wegen der erwähnten Flammschutzmittel. Das Material soll in Müllverbrennungsanlagen vernichtet werden, …”

Auf diese Thematik angesprochen, entgegnete der Staatssekretär unter anderem:

"… da gibt es berechtigte Fragen, da gibt es auch nichts unter den Tisch zu kehren. Da gibt es im Moment noch Forschungsbedarf."

Die DLF-Redakteure wiesen hier jedoch darauf hin, dass das Material seit Langem eingesetzt würde. In den vergangenen 35 Jahren seien 900 Millionen Quadratmeter Wärmedämmverbundsysteme verbaut worden, davon 80 Prozent mit Polystyrol. Hierauf der Staatssekretär:

“Wenn wir da schon heute die Forschung anlaufen lassen und fragen, was passiert eigentlich in 30 oder 40 oder 50 Jahren, wenn das dann mal in die Müllverbrennungsanlage geht, da sollten wir doch offen für technischen Fortschritt in Deutschland sein, dass es unserer Industrie und unserer Forschung gelingen wird, beispielsweise Filteranlagen zu entwickeln, die wirklich garantieren, dass hundert Prozent aller Schadstoffe abgefangen werden.”

Ich fasse zusammen: Das Bundesministerium für Umwelt, Naturschutz, Bau und Reaktorsicherheit unterstützt offen das Inverkehrbringen von Stoffen, deren Entsorgung zumindest “offene Fragen” und “Forschungsbedarf” bringt und das Ministerium findet, der technische Fortschritt wird es schon richten. Kurzum, es gilt das Prinzip “Hoffnung auf die Zukunft” und die Last, sich die Entsorgung zu überlegen, bürdet man den nachfolgenden Generationen auf.

Wo sind in diesem Zusammenhang eigentlich die ganzen Papiere und politischen Ansätze zu Nachhaltigkeit, Verantwortung, Schutz zukünftiger Generationen geblieben? Im Übrigen widerspricht die Haltung auch dem vom Bauministerium selbst herausgegebenen Leitfaden Nachhaltiges Bauen 2013, in dem besonderer Wert auf den Lebenszyklus von Gebäuden auch unter dem Gesichtspunkt der Entsorgung von Materialen gelegt wird.

Wenn schon das Thema “Wärmedämmverbundsysteme” nicht die Priorität der Bundesministerin hat, so muss sie sich fragen lassen, ob gerade im Umwelt- und Bauressort das Prinzip “Hoffnung auf die Zukunft” Leitlinie ihrer Politik ist.

Erfahrungen mit Docker

:: Docker

Ein Bekannter bat mich, einmal von meinen Erfahrungen mit Docker zu berichten. Also hier als Blog-Post dazu. Ich werde nicht beschreiben, was genau Docker ist und wie es funktioniert. Hierzu gibt es mittlerweile schon eine Reihe von guten Quellen (bspw. auf der Docker-Homepage, in der c’t war in Heft 17 (Seiten 146–151) auch eine ganz gute Einführung enthalten).

Hintergrund

Seit einigen Jahren verwende ich zum Ausrollen von Software OpenVZ als Container-Lösung. Das funktioniert sehr gut, schont die Ressourcen, lässt sich gut verwalten und überwachen. In den OpenVZ-Containern befindet sich ein kleines Linux der gewünschten Distribution mit so allem, was man im Standard dafür erwartet. Darin installiert und konfiguriert man seine Software und rollt sie dann auf dem Zielsystem bequem aus. Der einzige Nachteil hierbei ist, dass der Host einen eigenen OpenVZ-Kernel benötigt, da nicht oder noch nicht alle Features im Standard-Kernel bereit stehen. Das macht das Zusammenstellen auf meinem Notebook etwas schwierig, denn dort habe ich den OpenVZ-Kernel in der Regel nicht installiert.

Warum nun Docker?

Im April bin ich eher zufällig (tauchte in den Release-Notes von Ubuntu 14.04 auf) auf das Docker-Projekt gestoßen und habe damit begonnen herumzuexperimentieren.

Rund um Docker und den Einsatz haben sich eine Vielzahl von Projekten angesammelt. Nicht alles verstehe ich auf Anhieb und mir fällt es zum Teil auch schwer, die unterschiedlichen Projekte zum Ausrollen, Verwalten etc. zu bewerten und zu entscheiden, was davon auch “zukunftsfähig” ist. Wahrscheinlich muss man hier auch ein bisschen Geduld haben.

Einsatzbereiche

Für mich haben sich im Wesentlichen zwei Haupteinsatzbereiche herauskristallisiert: * als Werkzeug in der Software-Entwicklung und * als Werkzeug zum Ausrollen und dauerhaften Betrieb von Anwendungen

Werkzeug in der Software-Entwicklung

Ich arbeite in Teams zusammen, bei denen die Entwickler mal nen Windows-Notebook und mal nen Linux-Notebook ihr Eigen nennen. Docker bot sich hier an, eine definitierte Test- und Entwicklungsplattform bereit zu stellen. Ich habe dazu alles, was man so braucht in ein Image zusammengeworfen, dies lässt sich mit dem aktuellen Source Code starten.

Dauerhafter Betrieb

Eigenarten und Erfahrungen

Was toll ist:

  • Sehr leicht zu installieren und man kann schnell damit anfangen herumzuspielen.
  • docker build / Dockerfile
  • Es entwickelt sich sehr schnell eine aktive Gemeinschaft, so habe ich auch schon an MeetUps in Frankfurt und Darmstadt mit Gewinn teilgenommen.
  • Nicht zu vergessen das Logo.

Was nicht so toll ist:

  • Images und Container erhalten zur Identifikation Hash-Werte; man kann Images und Container auch mit Namen versehen. Ist man allerdings ein wenig am experimentieren und herumbasteln, so sammeln sich schnell eine Reihe von Containern mit wenig sprechenden Ids an und zumindest ich verliere da schnell den Überblick.

  • Eigentlich sind die Container nicht so mobil, wie die Analogie es vermuten lässt. Am ehesten sind es noch die Images, die man in eine Registry einspielen und dann auf unterschiedlichen Systemen herunterlädt. Mir würde allerdings auch so etwas wie Live Migration (funktioniert beispielsweise bei OpenVZ für meine Einsatzzwecke ganz hervorragend) gefallen.

  • Für den dauerhaften Betrieb gibt es eine Reihe von für mich offenen Fragen. Hierzu gibt es zwar Lösungsansätze oder Produkte, aber viele entwickeln sich erst. Ich will einmal exemplarisch einige offene Enden herausgreifen:

  • Irgendwie muss man sich um seine Logfiles kümmern, wo die so landen sollen. Hat man in einem “normalen Linux” (oder auch einem Standard-OpenVZ-Container) meist so etwas wie ein logrotated am laufen, so fehlt das (wenn man der Docker-Philosophie folgt, die Container so schlank wie möglich zu halten) in einem Docker-Deployment. Also muss man für jede Anwendung prüfen: Schreibt sie ihr Log auf Platte? Dann muss man das da irgendwie herausholen (bspw. über einen Log-File-Volume) oder überwachen, nutzt sie syslogd muss man das auch irgendwie in den Griff bekommen oder rotzt sie ihre Meldungen über die Standardausgabe heraus, dann sammelt immerhin Docker die auf und man kann darin blättern (die können dort aber auch recht groß werden).

  • Was tut man mit persistenten Daten? Also beispielsweise einer Datenbank? Der Docker-Weg-zum-Glück bietet an, dass man einen Container mit der Datenbank erstellt und dann einen für die jeweilige Anwendung (ist bspw. für das Wordpress-Image auch so gut zu studieren). Damit die Daten der Datenbank nicht in dem Container herumliegen, kann man diese noch in ein Volume packen. Damit die beiden Container nun miteinander kommunizieren können, kann man deren Daten über Links einander bekannt machen. Da man sich als Container und Anwendung nicht um IP-Adressen etc. kümmern “soll”, ist das auch ganz fein. So erhält man im Anwendungscontainer dann Umgebungsvariablen zum Datenbankcontainer sowie auch einen Eintrag in /etc/hosts. Dumm nur, wenn der Datenbankcontainer mal abschmiert und neu gestartet werden muss, denn dann erhält er in der Regel eine neue IP-Adresse und der Link vom Anwendungscontainer zur Datenbank funktioniert nicht mehr. Sicher, es gibt nun Mittel und Wege damit umzugehen (DNS-Geschichten, Entdecken der Dienste, etc.), aber ich fände es eigentlich toll, wenn das Out-of-the-box funktionieren würde.

Fazit

Ich finde es ein spannendes Projekt und wenn sich für mich die einen oder anderen Unklarheiten lichten, werde ich es sicherlich auch für den Produktiveinsatz in Erwägung ziehen. Ich vermute, dass das Projekt sich noch deutlich weiterentwickeln wird, die knapp 65 Mio Venture Capital werden neben Marketing hoffentlich auch ins Produkt gesteckt.

Aktenführung beim Beitragsservice

:: Allerlei, Behörden

Im Jahr 2012 habe ich mich rechtmäßig (was allerdings auch etwas Überzeugungsarbeit kostete) von der damaligen GEZ abgemeldet und die neue Beitragsnummer mitgeteilt, über die meine damalige Rundfunkgebühr verbucht werden sollte. Der GEZ war meine alte Beitragsnummer, die neue Beitragsnummer sowie meine Anschrift bekannt. Soweit so gut, besondere Veränderungen sind in der Zwischenzeit nicht eingetreten.

Am 17. April 2014 erreicht mich ein Schreiben des Beitragsservices. Sie schreiben dort:

Auf Basis gesetzlicher Bestimmungen haben wir die Adressdaten der Einwohnermeldeämter mit den bei uns angemeldeten Beitragszahlern abgeglichen. Unter Ihrem Namen konnten wir für diese Wohnung kein Beitragskonto finden.

Oh! Das ist interessant: Sie kannten meinen Namen und Anschrift, schafften es aber dennoch nicht, das mit dem damaligen Vorgang zusammenzubringen? Recht schwaches Bild für so eine Institution, die doch so professionell mit Adressdaten umzugehen weiß.

Ich beschloss, den Beitragsservice etwas zappeln zu lassen. Meine Antwort vom 24. April 2014 war daher entsprechend kryptisch:

Ich verweise auf mein Schreiben vom 24. April 2012 an die seinerzeitige Gebühreneinzugszentrale, die Antwort hierauf vom 10. Mai 2012 und mein Schreiben vom 16. Mai 2012 mit dem Aktenzeichen (…). Am seinerzeitigen Sacheverhalt hat sich nichts geändert. Demgemäß wird ein Rundfunkbeitrag für die von mir bewohnte Wohnung entrichtet und der Rundfunkbeitrag wird auch regelmäßig abgebucht.

Nun war ich gespannt, ob sie es mit etwas Mühe nicht doch hinbekommen, den Vorgang von damals wieder zu finden und ihren aktuellen Vorgang abzuschließen. Nach der Beitragsservice-Bedenkzeit von acht Wochen (ich meine mich zu erinnern, dass die GEZ es meistens in sechs Wochen geschafft hatte, eine Antwort zu schreiben), kam nun mit Schreiben vom 26. Juni 2014 eine erneute Bitte um Mitteilung der Beitragsnummer:

Gerne bearbeiten wir Ihre Angaben. Hierfür benötigen wir jedoch noch die Beitragsnummer, unter der die Wohnung angemeldet ist. Teilen Sie uns diese bitte auf dem Antwortbogen mit.

Alternativ können sie das wohl auch aus der Bankverbindung, früheren Anschriften, früheren Namen etc. herausfinden. Warum jedoch nicht über meine Anschrift und mein damaliges Schreiben? Ach ja, die üblichen Daumenschrauben wurden dem Schreiben noch hinzugefügt:

Sollten Sie uns nicht innerhalb der Frist (von vier Wochen, D.B.) gehen wir davon aus, dass eine Anmeldung für diese Wohnung erforderlich ist.

Ahja, der Beitragsservice braucht acht Wochen um nach der Beitragsnummer zu fragen, ich soll aber in vier Wochen antworten?

Nun ging mit das Porto zu sehr ins Geld und ich wechselte auf E-Mails. Am 7. Juli 2014 teilte ich dem Beitragsservice noch mal alles mit: Neue Wohnung, neue Beitragsnummer etc. Und dass Sie das ja alles seit dem Jahr 2012 schon wüssten. Ich ermunterte den Beitragsservice, doch einfach noch mal einen Adressabgleich durchzuführen:

Ich bin daher etwas verwundert, dass ich nun schon wieder über einen bei Ihnen bekannten und aktenkundigen Sachverhalt erneut Auskunft erteilen soll. Denn die seinerzeit mitgeteilten Daten mussten doch irgendwie mir und meiner Anschrift (die sich ja auch nicht geändert hat) zugeordnet worden sein. Ich bin zuversichtlich, es ist Ihnen ein Leichtes, aufgrund obiger Informationen und Ihnen bereits vor zwei Jahren mitgeteilten Sachverhaltes Ihren Vorgang abschließen zu können.

Nun ging es Schlag auf Schlag, denn völlig unerwartet antwortete der Beitragsservice bereits am 22. Juli 2014. Und nun das erste Eingeständnis:

Sie teilen mit, dass Sie bereits in 05.2012 mitgeteilt haben, (…) Dieses Schreiben liegt uns leider nicht mehr vor, so dass wir auf dessen Inhalt nicht zurückgreifen können.

Wie kann dies sein? Es handelt sich doch um eine Verwaltung? Die sollte doch ihre Aktenführung in Ordnung halten können. In meiner E-Mail vom 28. Juli 2014 erlöste ich den Beitragsservice und teilte ihnen die Beitragsnummer mit. Allerdings nicht ohne noch ein wenig meine Besorgnis über die Aktenführung zum Ausdruck zu bringen:

Des Weiteren sehen Sie mich überrascht, dass Sie auf ein Schreiben aus dem Jahr 2012 keinen Zugriff mehr haben. Da ich bisher davon ausging, dass sich die öffentlich-rechtliche Verwaltung in besonderem Maße durch die Schriftlichkeit und Aktenkundigkeit Ihres Handelns auszeichnet, ging ich davon aus, dass zu mir auch die Unterlagen und der Schriftverkehr verfügbar sind. Ich bitte Sie höflichst mir mitzuteilen, wie dieses Schriftgut verloren gegangen ist und wie sichergestellt ist, dass nicht alle zwei Jahre erneut eine Anfrage wie die vom 17.04.2014 (…) bei mir eingeht.

Nach vier Wochen erreichte mich dann die Auskunft am 27. August 2014:

Sie fragen, warum wir keinen Zugang zu Ihrem Schreiben vom 24.04.2012 hatten. Der Schriftverkehr wurde unter Ihrem abgemeldeten Beitragskonto (…) sowie unter dem Beitragskonto (…) verfilmt. Da Sie nun den Bezug zur Beitragsnummer (…) hergestellt haben, können wir den Schriftverkehr einsehen. Wir hoffen, Ihnen mit diesen Erläuterungen weitergeholfen zu haben.

Ohja, das haben sie. Nachdem der Vorgang wohl beiderseits genügend Schmerzen verursacht hat, habe ich es dabei bewenden lassen.

Mind the storage driver for Ubuntu cloud images (on Azure)

:: Docker, IT

A few days ago I wanted to build Firefox OS’ newest release for a friend. Because I did not wanted these GB of code, binaries etc. on my notebook I fired up an Ubuntu image on Microsoft Azure. I feared that at a certain point in the build process I may had to download everything to my local machine and therefore I installed Docker via a simple

sudo apt-get install docker.io

Then I started the build process as laid out on Mozilla’s Developer Network. But, during downloading the source code (that’s about 12 GB of Git repositories from Mozilla and Android), I got a “no more space left on device”. That was strange: I had a 100 GB volume attached to the VM and enough space and inodes left. After some searching I asked on the IRC channel and got a good hint: “What’s your storage driver?”

Well, I thought that it’s AUFS; I wanted to add “as usual” because AUFS was available on my notebook from the beginning. But a docker.io info gave me:

$ sudo docker.io info
Containers: 0
Images: 0
Storage Driver: devicemapper
 Pool Name: docker-8:1-131188-pool
 Data file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
 Data Space Used: 291.5 Mb
 Data Space Total: 102400.0 Mb
 Metadata Space Used: 0.7 Mb
 Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.1
Kernel Version: 3.13.0-29-generic
WARNING: No swap limit support

I then learned that somehow the DeviceMapper driver only allows a certain amount of diffs and I reached that amount with my build process. (Maybe it’s possible to relax that restriction but I do not know how.)

I learned as well that the Ubuntu cloud image that is provided by Microsoft Azure doesn’t have AUFS support. Therefore Docker uses the DeviceMapper storage driver instead. After I installed the AUFS support I could export the images, change the storage driver and import the images again.

It would be nice seeing the Docker documentation being more detailed on those storage drivers.

(Update 2014–10–23) Thanks to this blog post from Iron.io I found some documentation of the devicemapper storage driver. It is located in the Repository.

DateTime conversion can be tricky

:: JavaScript, Common Lisp, IT

I wrote a small Lisp application and a JavaScript client gets some data from that application. All time stamps are returned as “Lisp” time stamps, i.e. an integer with seconds where zero equals Jan 01 1900.

In the JS client the time stamp is then converted to JS time stamps, i.e. millisconds where zero equals Jan 01 1970.

When testing the application I noticed that sometimes the displayed date is one day behind. For example in the data base I have Jan 05 1980 but in JavaScript I get a Jan 04 1980. But some other dates worked: A time stamp Jan 05 1970 was correctly converted to Jan 05 1970.

I had a look into the JavaScript code and found:

convA = function(ts) {
  tmp = new Date(ts*1000);
  tmp.setFullYear(tmp.getFullYear() - 70);
  return tmp.getTime();
}

It’s likely the developer thought: “Well, it’s millisecond instead of second. Therefore I multiply by 1,000. But then I am 70 years in the future and I have to substract 70 years and everything will be ok.”

After thinking a while I came to the conclusion: Of course not!

The developer made the assumption that there are as many leap years between 1900 and 1970 as between ts and ts+70. Obviously that assumption does not hold for all time stamps. And therefore sometimes the resulting JavaScript date is one day behind.

So a better solution would be to substract all seconds between 1900 and 1970 from ts, multiply by 1,000 and treat this as a JavaScript time stamp. Perhaps best would be to do the conversion in the Lisp process and only deliver a JavaScript-like time stamp.

I learned something about symbols and packages

:: Common Lisp, IT

I am using Common Lisp for developing a web application. Several days ago a new part of this application didn’t worked as supposed and I spent a considerable large amount of time in finding the bug. It was a very simple problem with symbols where I mixed something up.

In the application the web server somewhen gets some JSON data from the browser. It is then converted to Lisp object using the CL-JSON package. This package converts JSON objects to a-lists and converts the member keys to symbols (see CL-JSON’s documentation. I then wanted to look something up in that a-list and failed.

I wrote a small test case to show the effect and explain what went wrong.

(ql:quickload '("hunchentoot" "cl-who"))
;; direct loading via ql only for demonstration purposes, normally I
;; would use a asdf:defsystem for that.

(in-package :cl-user)

(defpackage :my-app (:use :cl))

(in-package :my-app)

(defparameter *my-a-list* 
  '((foo . 100)
    (bar . 200)))   ;; in the real application this a-list is
		    ;; generated by a JSON-to-lisp conversion by
		    ;; CL-JSON; in CL-JSON the object member keys are
		    ;; converted to symbols.

(defun get-value (key)
  "Returns the value with KEY from *MY-A-LIST*."
  (cdr (assoc (intern (string-upcase key)) *my-a-list*)))

(hunchentoot:define-easy-handler (web-get-value :uri "/get-value") (id)
  (cl-who:with-html-output-to-string (*standard-output* nil :prologue t)
    (:p (cl-who:fmt "Value of ~a is: ~a" id (get-value id)))))

(defun start ()
  (hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port 4242)))

So on the REPL everything looks fine: MY-APP> (get-value "foo") 100 MY-APP> (get-value "bar") 200 MY-APP>

But when I used my web browser to give me these results as well I got something strange. For example here are some results when using curl: ~> curl http://localhost:4242/get-value?id=foo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <p>Value of foo is: NIL</p>

I was puzzled: The value is NIL?

After some debugging I found out that the easy handler from Hunchentoot runs with *package* set to COMMON-LISP-USER (and not to MY-APP as I implicitly assumed). That means that assoc looked up COMMON-LISP-USER::FOO in the a-list where the keys are MY-APP::FOO and MY-APP::BAR. And this test fails. Therefore NIL is returned which is correct.

So I rewrote the get-value function to: (defun get-value (key) "Returns the value with KEY from *MY-A-LIST*." (cdr (assoc (intern (string-upcase key) (find-package :my-app)) *my-a-list*))) Now the symbols are interned in the same package and everything went well: ~> curl http://localhost:4242/get-value?id=foo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <p>Value of foo ist: 100</p> ~> curl http://localhost:4242/get-value?id=bar <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <p>Value of bar ist: 200</p>

Therefore I was reminded to think about packages when interning symbols. A good guide to symbols and packages could be found in this document: The Complete Idiot’s Guide to Common Lisp Packages.

Unicode support for Octopress

:: Docker, Octopress, IT

Well, it seems Octopress/Jekyll would like to have a locale set for UTF–8 support. I followed this (text in German) hint and now my Dockerfile looks like this:

# dockerfile for octopress

FROM ubuntu:14.04
MAINTAINER krrrcks <krrrcks@krrrcks.net>
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update; \
  apt-get -q -y upgrade
RUN /usr/sbin/locale-gen en_US.UTF-8; \
  update-locale LANG=en_US.UTF-8
RUN apt-get -q -y install git curl; \
  apt-get clean
RUN git clone git://github.com/imathis/octopress.git /opt/octopress
RUN curl -L https://get.rvm.io | bash -s stable --ruby
ENV HOME /root
RUN echo "export LC_ALL=en_US.UTF-8" >> /root/.bashrc
RUN echo "export LANG=en_US.UTF-8" >> /root/.bashrc
RUN echo "source /usr/local/rvm/scripts/rvm" >> /root/.bashrc; 
RUN /bin/bash -l -c "source /usr/local/rvm/scripts/rvm; \
  rvm install 1.9.3; \
  rvm use 1.9.3; \
  rvm rubygems latest; \
  cd /opt/octopress; \
  gem install bundler; \
  bundle install; \
  rake install" 
RUN echo "rvm use 1.9.3" >> /root/.bashrc

WORKDIR /opt/octopress
EXPOSE 4000
CMD ["/bin/bash"] 

After playing around with Docker and Octopress I put the whole /opt/octopress folder on my host machine and then restarted the image with the -v flag. Therefore I can edit the files on my host machine with my favorite editor and use the container only for producing the HTML files, for preview and for publishing.

The rake preview is a neat feature because the server always looks for changed files and produces the HTML files on the fly. That means I can edit the files in my editor and could see the resulting pages in a browser nearly the same time.