Berechnen, wieviele Zeichen nötig sind eine bestimmte Anzahl Bytes zu kodieren

In der Programmierung kommt man sehr schnell in eine Situation, dass man bestimmte Daten (binäre Daten, bytes) kodieren muss um sie zu übertragen oder zu speichern. Ein gutes Beispiel dafür ist ist die Speicherung einer MD5 Prüfsumme. Will man diese Prüfsumme z.B. an einer URL anhängen oder in eine XML-Datei schreiben, dann muss man sich überlegen, wie das mit dem 128 bit großen Hash-Wert geschehen kann.

Zuerst einmal, wieviel byte sind eigentlich 128 bit? Ein Byte kann 8 Bit aufnehmen, darum:

$ echo "128 / 8" | bc
16

Der Hash-Wert wäre also 16 byte groß.

Wir könnten jetzt eine gebräuchliche Kodierung benutzen und diese 16 bytes in Hexadezimal-Darstellung kodieren. Hexadezimal stellt 16 unterschiedliche Werte in einem Zeichen dar (0123456789ABCDEF).

Zur Berechnung der benötigten Anzahl Zeichen wird die Logarithmus Funktion benötigt:

$ echo "l(2^128)/l(16)" | bc -l
32.00000000000000000010

Die Antwort auf die Frage ist also, wir benötigen 32 Zeichen um 128 bit in Hexadezimaler Schreibweise darzustellen.

Im folgenden noch die benötigte Anzahl Zeichen bei Base64 und Base85:

$ echo "l(2^128)/l(64)" | bc -l
21.33333333333333333334
$ echo "l(2^128)/l(85)" | bc -l
19.97069632284480143392
Veröffentlicht unter Programmierung | Hinterlasse einen Kommentar

Windows-Taste in VirtualBox

Es dauerte eine Zeit lang, bis ich herausgefunden hatte, woher das merkwürdige Phänomen stammt, dass ständig ‘l’ (kleines L) in offenen Anwendungen meines Linux Gastes in VirtualBox eingefügt wurde, wenn ich im Host mit Windows+L den Bildschirm gesperrt habe.

Beim Drücken von Windows+L wird das ‘l’ an dir VirtualBox durchgereicht, wenn sie aktiv ist.

Einfache Lösung: In VirtualBox bei den Globalen Einstellungen unter “Eingabe” die Host-Taste auf die “LINKE WINDOWS”-Taste setzen.

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Rechnen und zu einer anderen Basis konvertieren auf der Linux Konsole

Ich finde gerade heraus, welche tollen Sachen man mit dem Linux Konsolenprogramm “bc” anstellen kann. “bc” ist ein Rechenprogramm und man kann natürlich damit rechnen:

$ echo "16 * 35" | bc
560

Oder Rechnen mit Kommazahlen:

$ echo "scale=3; 16.5 / 35" | bc
.471

Interessant ist, dass man mit “bc” auch zwischen unterschiedlichen Zahlenformaten (wie dezimal, binär und hexadezimal) konvertieren kann.

$ echo "obase=16; 752" | bc
2F0
$ echo "ibase=16; 2F0" | bc
752
$ echo "ibase=16;obase=2; 2F0" | bc
1011110000

Hexadezimalzahlen müssen in “bc” immer in Großbuchstaben angegeben werden!

Veröffentlicht unter Linux, Programmierung | Hinterlasse einen Kommentar

Datum/Unix timestamp konvertierung in der Linux Console

Man braucht nicht extra eine Webseite suchen mit einem Online Datum/Unix timestamp Konverter. Wiedermal geht alles ganz einfach in der Linux Konsole.
(Unix timestamp sind die Sekunden seit 1. Januar 1970 00:00 Uhr UTC.)

Konvertierung Unix timestamp zu Datum
(1335254987 ist der zu konvertierende timestamp)

Linux:

date -d @1335254987

BSD Unix (Mac OS X):

date -r 1335254987

Konvertierung Datum zu Unix timestamp

Linux:

date +%s -d "2012-04-24 10:09:47"

BSD Unix (Mac OS X):

date -j -f "%Y-%m-%d %T" "2012-04-24 10:09:47" "+%s"
Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Screen

Als Gedächtnisstütze für mich, ein paar wichtige screen Befehle:

starten mit:

screen

Danach kann der ausgangsterminal nicht mehr benutzt werden.

Strg-a c   Einen neuen screen erzeugen (kann mit exit verlassen werden).
Strg-a K   Einen Screen beenden (killen)
Strg-a p   Zum vorherigen Screen wechseln
Strg-a n   Zum nächsten Screen wechseln
Strg-a A   Einem Screen einen Namen geben
Strg-a "   Liste aller screens (doppelte Anführungsstrichte)
Strg-a [   Copy und buffer mode starten. Mit Pfeiltasten zur gewünsten position.
           Mit Return markierung starten. Mit Pfeiltasten zum ende der Markierung.
           Mit Return Inhalt in den Puffer.
Strg-a ]   Buffer einfügen

Strg-a d   Den Screen ablösen (er läuft im Hintergrund weiter)

Eine vorhandene Screen session wieder aufnehmen:

screen -r

Wenn der screen detached ist, kann man den Terminal schließen, er läuft im Hintergrund weiter. Nach dem reattachen kann man wieder einsteigen.

Veröffentlicht unter Linux | Hinterlasse einen Kommentar

Sammler – Vorwort

Diese Geschichte habe ich ende 2010 für meine Süße als Adventskalender geschrieben. Jeden Tag, vom 1.12.2010 bis zum 24.12.2010 hat sie ein neues Kapitel von der Geschichte  bekommen.

Die (meisten) Personen in der Geschichte gibt es wirklich, insbesondere Cordula und ich mitsamt unseren Verwandten. Ich habe versucht die Charaktereigenschaften der (real existierenden) Personen in die Geschichte mit einfließen zu lassen und sie zu überzeichnen, daher ist manches auch nur dann lustig, wenn man die Person auch kennt.

Cordi hat mir freundlicherweise gestattet ihre Geschichte hier zu veröffentlichen.

Viel Spaß beim Lesen
Frank Olschewski

5. September 2109: Prolog 1

Veröffentlicht unter Belletristik | Hinterlasse einen Kommentar

IDv3 Tags anzeigen auf der Linux Konsole

Im Paket “libid3-tools” befindet sich das Konsolenprogramm “id3info”, das genau das tut.

$ id3info 10\ -\ Ich\ dachte\ schon.mp3

*** Tag information for 10 - Ich dachte schon.mp3
=== TALB (Album/Movie/Show title): Und endlich unendlich
=== TPE1 (Lead performer(s)/Soloist(s)): Selig
=== TCON (Content type): Rock
=== TIT2 (Title/songname/content description): Ich dachte schon
=== TRCK (Track number/Position in set): 10/20
=== TYER (Year): 2009
=== TSOA ():  frame
=== APIC (Attached picture): ()[, 3]: image/jpg, 63676 bytes
=== MCDI (Music CD identifier):  (unimplemented)
*** mp3 info
MPEG1/layer III
Bitrate: 128KBps
Frequency: 44KHz

Hmm, leider nicht perfekt, das Programm kennt wohl nicht das Feld “TSOA” (Album Sort) und die angezeigte Bitrate stimmt auch nicht.

Eine bessere Möglichkeit ist das Programm “ffmpeg”:

$ ffmpeg -i 10\ -\ Ich\ dachte\ schon.mp3
Input #0, mp3, from '10 - Ich dachte schon.mp3':
  Metadata:
    album           : Und endlich unendlich
    artist          : Selig
    genre           : Rock
    title           : Ich dachte schon
    track           : 10/20
    album-sort      : 2009 - Und endlich unendlich
    date            : 2009
  Duration: 00:06:30.13, start: 0.000000, bitrate: 180 kb/s
    Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 178 kb/s

Das sieht doch viel besser aus, zusätzlich wird auch noch die korrekte Bitrate der Kodierung angezeigt.

Veröffentlicht unter Linux | Hinterlasse einen Kommentar

Batch Kodierung mit Lame MP3

Eine Audio-Datei kann ich mit Lame MP3 auf der Linux Konsole mit einem einfachen Befehl in guter Qualität kodieren:

lame --alt-preset standard input.wav output.mp3

Wenn man ich allerdings 35 Dateien konvertieren will, dann ist es schon etwas aufwändig diesen Aufruf für jede Datei einzugeben. Wildcards gibt es bei lame leider nicht. Also musste ich mir etwas anderes überlegen.

Der Linux Befehl “find” wäre eine Möglichkeit, denn er kennt den Parameter “exec”:

find -regextype posix-extended -regex ".*\.wav" -exec lame --alt-preset standard {} encoded/{} \;

Mit diesem Befehl kann ich alle dateien, die auf “.wav” enden mit lame kodieren und in den Unterordner “encoded” ablegen.

Perfekt? Leider nicht!
“find” findet leider manche Dateien mit Windows Sonderzeichen nicht. Diese Dateien müssten entweder vorher umbenannt werden, oder ich suche nach einer anderen Möglichkeit.

“ls” liefert mir eine Auflistung aller Dateien, einschließlich der Windows Dateien mit Sonderzeichen. Mit “grep” suche ich die “.wav” Dateien aus dem Ergebnis:

ls | grep -E "\.wav$"

Leider hat “grep” keinen “exec” Parameter wie “find” und das Ergebnis von “grep” kann auch nicht an “find” übergeben werden.

Weitere Recherchen führen zu “awk”. Das Programm kann Eingaben aus stdin verarbeiten und Befehle aus jeder eingabezeile bauen und so die lame Kodierung starten.

ls | grep -E "\.wav$" | awk '{ print ("lame --alt-preset standard \"" $0 "\" \"encoded/" $0 "\"") | "/bin/bash" }'

Lame benutzt für die Zieldateien die Gleiche Dateinamenserweiterung, wie in den Quelldateien. In unserem Beispiel heißen die Dateien “Xxx.wav”, sind aber MP3-Dateien.

Um die Dateien umzubenennen reicht ein kleiner Konsolenbefehl:

rename "s/wav$/mp3/" *
Veröffentlicht unter Linux | Hinterlasse einen Kommentar

WorPress Spamflut

Die erste Nacht nach meiner neuen WordPress Installation ließ mich etwas an meiner entscheidung zweifeln die richtige Blog-Software gewählt zu haben.

Am Morgen waren 80 Spam Kommentare aufgelaufen.

Nach einer kurzen Recherche fand ich heraus, dass es fertige anti-Spam Plugins für WordPress gibt. (Mit Captchas wollte ich niemanden quälen.) Der Nachteit dieser Plugins ist allerdings, dass sie andere Server kontaktieren müssen für ihre Entscheidung, ob ein Kommentar Spam ist oder nicht.

Was lag also näher als sich an einem eigenen Spam-Schutz zu versuchen? Schließlich bin ich PHP-Programmierer!

Bot versendet POST

Bot versendet POST

Die Erste Maßnahme sollte sein, die dümmsten Bots auszuschließen. Dazu muss das Kommentar-Formular so prepariert werden, dass ein Kommentar nur dann eingestellt werden kann, wenn es erwiesenermaßen mit diesem Formular verschickt wurde. Dazu wird eine Session in WordPress eingebaut und beim Laden des Formulars ein Zufallswert in die Session und in das Formular geschrieben. Wenn der Kommentar gespeichert werden soll, wird der Wert aus dem verschickten Formular mit dem Wert in der Session verglichen.

Das war schon etwas aufwändig zu programmieren, hatte aber kaum den erwünschten Erfolg. Der Posteingang klingelte noch immer alle halbe Stunde. Scheinbar sind die Bots nicht so simpel gestrickt, sie schicken nicht ein eigenes POST an das verarbeitende Script, sondern rufen zuerst das Formular auf und verschicken die dort vorhandenen input-Felder.

Die nächste Idee ist ebenso naheliegend: Die Zeit zwischen Laden und Verschicken des Formulars messen, in der Annahme, dass ein normaler User ein Formular nicht innerhalb von 5 Sekunden nach dem Aufrufen verschickt (er muss ja noch den Kommentar tippen).

Dazu wird in der Session der Zeitpunkt des Ladens gespeichert und vor den Speichern des Kommentars überprüft, wie viel Zeit in der Zwischenzeit verstrichen ist. Ich habe das Ganze noch optimiert, indem ich den “Abschicken”-Button mit einem 10 Sekunden JavaScript Timer versehen habe, bevor er benutzt werden kann. Dadurch konnte ich eine Zeit von mindestens 10 Sekunden zwischen Aufruf und Verschicken des Formulars annehmen.

Diese Aktion hat fast sämtlichen Spam herausgefilert. Allerdings kam noch etwa jede Stunde ein Spam-Kommentar.

Um auch diesen zu entfernen gab es nur noch eine Möglichkeit: Ein Inhaltefilter. Wenn man sich die Spam-Kommentare anschaut, bemerkt man schnell, was der Spammer will: Einen Link zu seiner Seite unterbringen. Ein Filter, der Kommentare verbietet, die die Zeichenkette “http://” enthalten entfernt zuverlässig den Rest. Seit dieser Änderung ist kein Spam-Kommentar mehr bei mir angekommen.

Nun könnte man sich die Frage stellen, ob die ganzen anderen Aktionen dadurch überflüssig sind. Ja, das sind sie. Ich konnte alles außer den Inhaltefilter entfernen und hatte ruhe vor den Spammern.

Damit die User etwas mehr Komfort haben, habe ich vor dem Abschicken des Formulars noch eine Prüfung mit JavaScript eingebaut, damit er frühzeitig darüber informiert wird, dass er “http://” nicht verwenden darf.

Veröffentlicht unter Programmierung | Hinterlasse einen Kommentar

Sammler – 24. Dezember 2109: Epilog

Es klingelte an der Tür.
Cordula entfuhr ein überraschter Ausschrei, als sie sah, wer vor ihr stand. „Hallo, Armin.“ Stieß sie voller Freude aus und fiel ihrem Stiefvater in den Arm. „Wir haben uns solche Sorgen gemacht, wo bist du gewesen?“
„Wieso? Ich habe mich etwas aus der Schusslinie gebracht.“ Erzählte er, als wäre nichts vorgefallen.
„‘Aus der Schusslinie gebracht.‘ Warum hast du nicht auf unsere Nachrichten geantwortet? Wo warst du überhaupt?“
Armin wischte sich übers Gesicht. „Die Sammler-Kirche hat mitbekommen, dass ich weiterhin Ermittlungen anstelle. Als ich nach dem Treffen mit Frank nach Hause kam, sah ich, wie sie meine Wohnung durchsucht haben. Da bin ich bei einem guten Freund untergetaucht. Aber ich habe eure Nachrichten abgehört, ihr habt ja scheinbar einiges Erreicht.
„Das kannst du wohl sagen. Komm erst mal rein. Die anderen sind schon alle da.“ Cordula zog ihren Stiefvater in die Wohnung.
Sie waren mitten in der Nacht wieder in Hamburg angekommen. Aber schließlich war Heiligabend, also haben sie noch am Morgen einen Tannenbau gekauft und ins Wohnzimmer gestellt. Zwei Kuchen waren schnell gebacken, nur für Geschenke hat die Zeit nicht mehr ausgereicht. Aber trotzdem ist die ganze Verwandtschaft am Nachmittag zum Kuchenessen gekommen. Ole sammelte gerade mit Lena Weihnachtsbaumschmuck zusammen und schmiss es über den Baum. Sogar Lukas hat sich aus seiner Wohnung heraus bewegt und saß neben ihnen auf dem Sofa und beteiligte sich an der Auswahl der richtigen Schmuckzusammenstellung. Heidrun saß am Tisch und diskutierte mit Renate über die möglichen politischen Auswirkungen, wenn die Sammler-Kirche zusammenbrechen sollte. Angela und Constanze überlegten noch, wie sie sich an der Unterhaltung beteiligen sollten. Ihre Kinder waren nicht gekommen, sie hatten inzwischen eigene Familien. Marion hatte ihren neuen Freund dabei, sie redeten gerade mit Lars über Filme.
Frank trat von hinten an Cordula heran, legte ihr die Arme um den Bauch und sein Kinn auf ihre Schulter. „Hallo, Armin.“
„Hallo Frank. Seid ihr wieder zusammen?“.
Frank und Cordula schauten sich an.
Als Armin merkte, dass er keine Antwort bekam, ging er ins Wohnzimmer und begrüßte die Anderen.
„Sind wir wieder zusammen?“ Fragte Frank.
„Ich weiß es nicht. Sind wir wieder zusammen?“ Gab Cordula die Frage an Frank zurück.
Frank drückte Cordula an sich. „Du weißt, dass ich dich immer geliebt habe, auch als wir uns kaum gesehen haben die letzten Jahre. Ich hatte nie eine andere Frau.“ Er lächelte verlegen. „So wie wir es uns versprochen hatten.“ Er griff in seine Hosentasche und holte den Ring heraus.
Cordula ging zu einer Kommode im Flur und holte ihren Ring aus einer Schublade.
Frank nahm ihr den Ring aus der Hand und steckte ihn an ihren Finger. „Für die nächsten hundert Jahre?“
Cordula lächelte. „Ja, für die nächsten hundert Jahre.“ Sie steckte Frank seinen Ring an den Finger. Danach küsste sie sich leidenschaftlich.
„Cordi, du weißt, dass wir jetzt wieder die gleichen Probleme haben werden, wie vor hundert Jahren?“
„Was meinst du?“
„Naja, mein Job im Forschungszentrum in der Sahara ist weg. Ich bin wieder arbeitslos. Wer weiß, ob es die Sammler-Kirche bald überhaupt noch geben wird. Auch dein Kindergarten wurde ja von der Kirche finanziert, ich glaube nicht, dass die Stadt das einfach so weiter bezahlen wird. Wahrscheinlich sind wir bald beide arbeitslos und die Anti-Aging Behandlungen werden die sicherlich nicht billiger machen.“
Cordula drückte Frank an sich. „Sei nicht immer so negativ. Das wird schon alles seine Gründe haben, weshalb das so gekommen ist. Wir suchen dann einfach einen neuen Job in Hamburg.“
„Na hoffentlich hast du Recht.“ Frank küsste sie auf die Wange. Dann gingen sie zusammen ins Wohnzimmer.
Lena hing gerade Glitzerketten an den Tannenbaum.
Frank wies auf das Mädchen. „Jetzt haben wir doch noch unsere Tochter.“
„Ja, das stimmt.“ Lachte Cordula.
„Der Tannenbaum glitzert ja wie verrückt.“
„Ja, komisch. Ich wusste gar nicht, dass ich solchen Tannenbaumschmuck hatte.“ Wunderte sich Cordula.
Sie gingen gemeinsam zum Tannenbaum. Lena steckte weiter Ketten mit glitzernden Steinen und Ringe an die Äste.
„Was ist denn das überhaupt?“ Frank zog einen Ring vom Tannenbaum. „Ist das nicht der Schmuck, den die Mutter von Larissa Lorik getragen hatte?“
Cordula betrachtete den Ring. „Tatsächlich. Der sieht genauso aus.“ Sie schaute sich den großen glitzernden Stein genauer an. „Das ist ohne Zweifel ein echter Diamant.“
„Ob Lena ihr den gestohlen hat?“ Vermutete Frank. „Nein, warte mal.“ Frank zog einen weiteren Ring vom Tannenbaum. „Hey, der sieht ja genauso aus.“
„Ja tatsächlich. Und hier, das ist die Kette von der Frau. Da vorne noch eine.“

Veröffentlicht unter Belletristik | Hinterlasse einen Kommentar