Posts tagged IT

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

:: 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.

My Dockerfile for setting up Octopress

:: Docker, Octopress, IT

After my trouble with installing all the dependencies for Octopress I came up with the following Dockerfile for Docker. This follows the instructions from the Octopress homepage and uses RVM for managing the ruby dependencies.

# 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 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 "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"] 

Programm-Bibliotheken und verschiedene Versionsstände

:: Homepage, Org-Mode, IT

Ich bin ein sehr intensiver Nutzer von Org-Mode, einem speziellen Modul/Modus für den Emacs-Editor (ich habe hier auf meiner Homepage auch einmal mit einer kleinen Seite dazu begonnen). Nun ja, was soll man sagen: Bei Emacs wird eine recht alte Version mitgeliefert. Ich wollte dann mal auch wegen einiger Funktionen die neueste nutzen. Also via git heruntergeladen und eingebunden und Peng, irgendwas funktioniert natürlich nicht mehr: Ich benötige pratisch täglich den Export von Org-Mode-Dateien nach LaTeX, der wollte aber nicht mehr. Nun kann ich zwar Lisp, aber das Emacs Lisp ist doch etwas speziell und die Debug-Möglichkeiten sind etwas … nun ja, altbacken. Kurzum: Das macht überhaupt keinen Spaß. Im Endeffekt habe ich dann herausgefunden, dass unter bestimmten Umständen Teile des alten, bei Emacs mitgelieferten Codes nachgeladen wird anstelle der neuen Distribution. Diese bescheidene Art von Emacs mit Modulen und Paketen umzugehen ist wirklich erschreckend. Was dafür wiederum total toll war: In der von mir verwendeten Org-Mode-Version war wohl ein Fehler, das ganze Ding über die Mailingliste geschickt und innert einem halben Tag war der Fehler von anderen Nutzern und von Carsten Dominik auch gleich gefixt. Grandiose Antwortzeit!

Constanze Kurz/Frank Rieger, Die Datenfresser

:: Bücher, IT

Nun, ich habe das Buch von Constanze Kurz und Frank Rieger, Die Datenfresser, gelesen. Hier eine sehr kurze Besprechung:

Die beiden Autoren wollen erklären, “wie Internetfirmen und Staat sich unsere persönlichen Daten einverbleiben und wie wir die Kontrolle darüber zurückerlangen.” Thematisch werden automatisierte Datenanalysen, der Wert der Nutzerdaten, die ökonomischen Mechanismen hinter sozialen Netzwerken und den Daten der Nutzer und einige Aspekte des staatlichen Einsatzes zur Datenanalyse vorgestellt und diskutiert.

Als wichtige Botschaft wird dem Leser mitgegeben, dass seine Daten für Unternehmen einen Wert darstellen und dass Angebote im Netz dazu dienen, diese Daten zu erlangen und zu monetarisieren; also Vorsicht vor Kostenlos-Angeboten, denn im Kern zahlt man auch für ein kostenloses Angebot, im Zweifel mit seinen Daten. Eine andere Kernbotschaft läuft darauf hinaus, dass Daten auch missbraucht werden können, sei es von staatlicher Stelle oder von zwielichtigen Zeitgenossen.

Das Bändchen mit 272 Seiten ist kurzweilig geschrieben, wechselt zwischen tatsächlichen Begebenheiten, Sachbuchdarstellung, fiktiven Geschichten und netzpolitischen und gesellschaftspolitischen Erwägungen geschickt hin und her. Der leichte und nicht in technische Details verliebte Sprachstil sowie die Art, wie technische Probleme dargestellt werden, macht es sicherlich auch einem Laien einfach, den Themen zu folgen und etwas hinter die Geschäftspraktiken und die Techniken zu sehen.

Das Buch leidet an mancher Stelle etwas, da die Kraft des Arguments nicht so richtig einschlagen mag. Beispiele sind insbesondere die Frage, wie man sich denn nun gegen die Datenfresser wehrt oder die Argumentation gegen die “Wer nichts zu verbergen hat…”-Ideologie. Das wirkt an der einen oder anderen Stelle zwar bemüht, aber nicht so kraftvoll, wie man sich das erhofft hat. Insbesondere ein schlüssiges Gegenkonzept hätte noch etwas breiter und prominenter ausgearbeitet werden können.

Auch werden zum Teil Gefahren und Befürchtungen recht abstrakt beschrieben, manchmal auch mit Hinweis, so etwas sei schon vorgekommen, aber man hätte es dann an der einen oder anderen Stelle doch gerne genauer gewusst.

Eher ein Buch zum Verschenken an Leute, die noch nicht so firm im Netz sind.

Constanze Kurz/Frank Rieger, Die Datenfresser, 272 Seiten, S. Fischer Verlag, 16,95 EUR.

Nachtrag I zum E-Postbrief

:: IT

Ein Nachtrag zu meinem Eintrag über den E-Postbrief. Da überall von “qualifizierter elektronischer Signatur” die Rede ist, möchte ich gern auf Folgendes hinweisen: Lässt sich der Benutzer ein Zertifikat zum zusätzlichen Verschlüsseln und Signieren erzeugen, so darf man sich ob der Güte dieses Schlüssels nicht täuschen. Es handelt sich dann nämlich nicht um eine qualifizierte elektronische Signatur nach Signaturgesetz. So leicht erlesbar aus der Leistungsbeschreibung E-Postbrief; dort heißt es unter den “Zusatzleistungen”:

"Persönlich signiert: Der Absender signiert die Nachricht zusätzlich mit seinem privaten Schlüssel. Da der private Schlüssel eine eindeutige Zuordnung zu einem Nutzer ermöglicht, erhöht dies den Grad der Authentifizierung.

Die eingesetzten Verschlüsselungsverfahren erfüllen allerdings nicht die Voraussetzungen einer qualifizierten elektronischen Signatur nach dem Signaturgesetz (SigG), so dass gesetzlich vorgesehene Schriftformerfordernisse nicht erfüllt werden."

Schade, so hat die Post noch eine Möglichkeit mit ihrem Produkt zu punkten verpasst und lässt den Ball ins Seitenaus rollen.

Der E-Postbrief, ein Selbstversuch

:: IT

So, da kam er also mit viel Marketingaufwand: Der E-Postbrief der Deutschen Post. Wohl mit Absicht etwas vor der Einführung der DE-Mail, einer Initiative der Bundesregierung. Nachdem dann auch ein Werbeflatterer in meinem (normalen) Briefkasten gelandet ist, habe ich mir einen Selbstversuch gegönnt und die neue Plattform testen wollen. (Erinnern Sie sich übrigens daran, dass die Post, ich glaube sogar auch unter der URL epost.de schon vor Jahren jedem Bundesbürger eine lebenslang gültige E-Mail-Adresse versprochen hat? Nach einigen Jahren starb dieses E-Mail-Portal-Projekt. Werden schon Wetten auf das Ende des E-Postbriefs angenommen?)

Die Behauptung der Post, mit der E-Mail käme nun eine besondere Form von Rechtssicherheit in das Internet, mag man dem Werbe-Tamtam anlasten. Mir wäre nämlich nicht bekannt, dass E-Mails, in denen man etwas bestellt oder mit denen man Verträge gestaltet, nicht rechtsicher wären. Okay, zugegeben, das Protokoll zum Transport von E-Mails hat Probleme (insb. hinsichtlich der Identifizierung des Absenders). Aber grundsätzlich werden ständig und in großer Zahl Verträge per E-Mail geschlossen, verändert und auch E-Mails als Beweisstücke vor Gericht vorgelegt und anerkannt.

Was mir auch nicht so ganz klar ist: Wenn E-Mail-Adressen der Art Hans.Mustermann1.23 und Hans.Mustermann.4 vergeben werden, dann weiß ich zwar beim E-Postbrief, dass sich hinter jeder Adresse sicher ein Hans Mustermann verbirgt. Aber ob es derjenige Hans Mustermann ist, mit dem ich einen Vertrag abschließen will, ist mir aus der Adresse nicht erkennbar. Schlicht, solange ich nur die E-Mail-Adresse habe, sind Verwechslungen nicht ausgeschlossen. Das Durchnummerieren ist nur bedingt schön für den Anwender.

In der Folge nun einige Erlebnisse. Auf die weiteren konzeptionellen Probleme (siehe den Eintrag bei Heise.DE bzw. den Telepolis-Artikel) will ich gar nicht eingehen, sondern erst einmal das Gefühl des Benutzers in den Vordergrund stellen:

Nach dem Anmelde-Vorgang, den ich nicht sonderlich komplex fand, erhielt ich irgendwann eine SMS, dass mein Postfach freigeschaltet sei. Also gleich einmal angemeldet und alle möglich Funktionen ausprobiert.

Trotz der Kritik am vielgescholtene Adressverzeichnis (da nimmt sich wohl die Post den Adressverkauf heraus) wollte ich dies testen und melde mich mit ein paar Zusatzinformationen an. Anschließend wollte ich prüfen, wie denn der Eintrag so aussieht, wenn man sich selbst aufruft. Aber, ich finde mich gar nicht im Verzeichnis. Also habe ich diese Einstellung wieder deaktiviert.

Völlig kryptisch ist das Verfahren, “normale” E-Mails zu senden. Man muss dazu nämlich ein normales E-Mail-Konto bei einem anderen Provider “einbinden”. Kein Problem, denke ich mir, lege eines bei meinem Provider an, binde es ein und alles scheint zu funktionieren. Allein, die E-Post-Adresse taugt gar nicht zum E-Mail-Empfang. Man erhält nur Fehlermeldung erfolgloser Zustellungen. Und wenn man umgekehrt eine E-Mail aus dem E-Postbrief-Portal senden will, wird die Domain dp-mail.de als Absende-Domain angehängt. Eine solche E-Mail wird auch zugestellt (wobei nicht immer, auf die Zustellung einer E-Mail warte ich nocht), jedoch kann man darauf als Empfänger nicht mehr antworten, da auch die Antwort-E-Mail wieder wegen erfolgloser Zustellung irgendwo im gelben Konzern ihre Runden dreht. Dieses E-Mail-Einbinden funktioniert meines Erachtens gar nicht.

Freudig habe ich zur Kenntnis genommen, dass man auch Faxe empfangen und senden kann. Nach einem Klick wurde mir eine Fax-Nummer zugeteilt. Also schnell ein Testfax handschriftlich gekritzelt, zum Papierfax gerannt und losgefaxt. Ich habe ein Übertragungsprotokoll mit der Aufrschrift “Übertragung Ok”, aber selbst nach nun drei Tagen ist im E-Postbrief-Eingang kein Telefax eingegangen. Auch diese Funktion scheint kaputt zu sein. Den Versand aus dem E-Postbrief-Portal habe ich mir dann geschenkt.

Da ich noch niemanden kenne, der auch ein solches E-Postbrief-Konto hat, habe ich den Versuch gemacht und an meine Postanschrift einen E-Postbrief mit normaler Zustellung schreiben wollen. Beim ersten Versuch wollte das Anhängen eines Anhangs (siehe dazu auch noch unten eine generelle Anmerkung zu Fehlern) nicht klappen und eine Fehlerseite erschien. Erfreulicherweise wurde der bisher getippte Text als “Entwurf” gespeichert. Jedoch war es mir nicht möglich, diesen Entwurf weiter zu bearbeiten, ich konnte ihn mir nur anzeigen lassen, eine “Entwurf weiter bearbeiten”-Funktion war nicht auszumachen. Was also diese Entwürfe sollen, bleibt das Geheimnis des gelben Riesen. Nachdem ich nun einen neuen Brief erstellt und losgeschicken wollte, das nächste Ärgernis: Das Guthabenkonto für das Porto kann man nur in ganzen Euro-Beträgen aufladen. Das erscheint technisch völlig anachronistisch. Von der Kundenfreundlichkeit her ist das schlicht unverschämt. Aber um des Fortschritts willen investiere ich einen Euro und kann anschließend meinen ersten E-Postbrief (Anschreiben plus ein PDF mit zwei Seiten als Anhang) versenden. In der Tat, am kommenden Tag lag ein fein kuvertierter Brief in meinem Briefkasten. Einzig das PDF war etwas grieselig, aber da wird man mit Standardschriften und ähnlichem sicherlich optimieren können. Diese Funktion ist wirklich praktisch, da man sich das ausdrucken, kuvertieren und frankieren sparen und alles bequem via Web-Portal erledigen kann.

Empfangen habe ich noch nichts: E-Mails wollte das Portal nicht empfangen und Telefaxe auch nicht. Nun ja, vielleicht sendet mir ja irgendwann mal jemand einen E-Postbrief. Ich habe mir auch eine SMS-Benachrichtigung eingerichtet, befürchte aber, dass diese wie so vieles anderes auch nicht funktioniern wird.

Abschließend noch ein riesiges Ärgernis: Ständig erscheinen völlig unvermittelt (bspw. beim Absenden von E-Mails, beim Anhängen von PDS an einen E-Postbrief) Fehlerseiten der Art “Bitte entschuldigen Sie”. Angegeben jeweils völlig kryptische Fehlercodes. Da fragt man sich nach wenigen Minuten, ob dies Produkt wirklich so sicher und so toll ist, wie der Anbieter werbewirksam behauptet.

Einschränkend will ich sagen, dass ich vielleicht die Bedienung nicht ganz verstanden habe; aber Hilfe-Seiten oder passende Dokumentation habe ich nicht finden können, die mir aus den oben beschriebenen Fallstricken geholfen hätte.

Zusammenfassend: Man wird wohl einfach einmal abwarten können, ob sich der E-Postbrief oder DE-Mail durchsetzt; auch die Preise werden sicherlich noch ein wenig Bewegung erfahren. Ob die Regelungen aus den AGBen so Bestand haben werden, ist auch fraglich. Was jedoch klar ist: So wie derzeit ausgeliefert, macht das E-Postbrief-System den Eindruck als sei es ein halbes Jahr zu früh in Echtbetrieb gegangen und als habe man die Testphase gleich an die Benutzer delegiert. Ich kann von der Benutzung derzeit nur abraten. Folglich werde ich auch nicht verraten, unter welcher Name- und Nummernkombination ich @epost.de zu erreichen bin.

Nachtrag: Nun ist doch endlich eine E-Mail an die @dp-mail.de-Adresse angekommen.

2010–08–04 Mi Nachtrag 2: Zufällig entdeckte ich in der aktuellen Ausgabe der Wirtschaftswoche eine ähnliche Schilderung von Pannen, der Artikel ist auch online verfügbar.