Twitter Updates for 2010-02-06
Raphael Vullriede February 6th, 2010
- Karaoke in Japan Town war lustig und das Essen danach war einfach unglaublich! In Japan gibts es so viel besseres Essen als nur Sushi! #
Raphael Vullriede February 6th, 2010
Raphael Vullriede February 5th, 2010
Raphael Vullriede February 4th, 2010
Raphael Vullriede February 3rd, 2010
Raphael Vullriede February 2nd, 2010
Raphael Vullriede December 15th, 2009
Wer, wie ich, plant für längere Zeit in die USA zu reisen, benötigt ein Visum, da das Visa Waiver Program, mit dem u.a. deutsche Staatsbürger visumfrei einreisen können, auf 90 Tage begrenzt ist. Auch wenn man (noch) keine Rückflug-Ticket hat (z.B. da der Abflugort noch nicht feststeht) oder zwischenzeitlich über die Grenze nach Canada oder Mexiko reisen möchte, ist man nicht mehr für das Visa Waiver Program qualifiziert. Man sollte sich die Bestimmungen daher im Vorfeld auf jeden Fall gut durchlesen!
Um das Visum zu beantragen, muss man persönlich in einem Konsulat in Berlin, Frankfurt oder München vorstellig werden. Zu diesem Termin muss man zwingend folgende Unterlagen mitbringen:
Raphael Vullriede November 30th, 2009
In einem aktuellen Kundenprojekt setzen wir im Backend wir gehabt Java EE ein, als Frontend kommt aufgrund spezieller Anforderungen ein RichClient auf Adobe AIR Basis zum Einsatz. Bei der Umsetzung hilft uns ein externer Partner, der uns im AIR Umfeld ein wenig aufmunitioniert
Bei einem Blick in die Quelltexte, die in unserem Subversion aufgeschlagen sind, bin ich über ein Konstrukt nach folgendem Muster gestoßen:
package de.vullriede {
public class Singleton {
private static var _instance:Singleton;
public function Singleton(enforcer:SingletonEnforcer) {
if (!enforcer) {
throw new Error( "Singleton and can only be accessed through Singleton.getInstance()" );
}
}
public static function get instance():Singleton {
if(!Singleton._instance) {
Singleton._instance = new Singleton(new SingletonEnforcer());
}
return Singleton._instance;
}
}
}
class SingletonEnforcer{}
Was die Klasse machen soll war mir schnell klar: klassisches Singleton-Pattern, allerdings auf kreative Art und Weise implementiert. Dem Konstruktor wird ein Argument übergeben, welches außerhalb des Packages deklariert ist und somit nicht verwendbar. Es ist also nicht möglich die Klasse selber zu instanziieren; die einzige Instanz ist über getInstance() erreichbar.
In Java würde man das ähnliches mit einem privaten Konstruktor machen, der dann nur von der getInstance()-Methode benutzt werden kann:
package de.vullriede;
public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
Google hat mich dann aufgeklärt, dass das obere Konstrukt kein schmutziger Hack ist. sondern Best Practice, da ECMAScript und damit auch ActionScript 3 keine privaten Konstruktoren kennt.
Welche Lösung eleganter ist darf jeder selbst entscheiden.
Raphael Vullriede November 21st, 2009
Anlässlich des Kaufes einer externen Festplatte für mein Notebook (Plextor PX-PH500US) habe ich die Gelegenheit genutzt, mir mal die Performance verschiedener Verschlüsselungsmöglichkeiten unter Linux anzuschauen. Da eine für den Nutzer transparente Verschlüsselung des Home-Verzeichnisses möglich sein sollte, blieben nur eCryptfs und LUKS. Zusätzlich habe ich noch TrueCrypt getestet, da ich das bereits unter Windows genutzt habe.
eCryptfs und LUKS/Truecrypt benutzen unterschiedliche Ansätze wie Dateien verschlüsselt werden. Während eCryptfs tatsächlich einzelne Dateien verschlüsselt, operieren LUKS/Truecrypt auf Blocklevel. Zu Vor- und Nachteilen einfach mal Google bemühen.
Testsystem:
uname -a Linux nexus 2.6.31-14-generic-pae #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009 i686 GNU/Linux cat /proc/cpuinfo | grep "model name" model name : Intel(R) Core(TM)2 Extreme CPU Q9300 @ 2.53GHz model name : Intel(R) Core(TM)2 Extreme CPU Q9300 @ 2.53GHz model name : Intel(R) Core(TM)2 Extreme CPU Q9300 @ 2.53GHz model name : Intel(R) Core(TM)2 Extreme CPU Q9300 @ 2.53GHz sudo hdparm -I /dev/sdb | grep Model Model Number: TOSHIBA MK5055GSX
Interessant, Plextor verbaut also Toshiba-Platten…
Um die Test einfach zu halten benutze ich Bonnie 1.03c . Es gibt sicherlich bessere Benchmarks aber um einen ersten Eindruck zu bekommen reicht es! Bei der Interpretation beziehe ich mich in erster Linie auf die Block-Operationen, da diese in einem echten System den Großteil des Workload ausmachen.
Zum Vergleich erstmal die Performance ohne Verschlüsselung im Auslieferungszustand, d.h. VFAT als Dateisystem:
VFAT USB 2.0
Version 1.03c ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP bl018550 6G 28284 56 28552 7 14808 5 33960 75 34282 5 143.8 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 75 64 +++++ +++ 1826 99 107 50 +++++ +++ 665 96
VFAT eSATA
Version 1.03c ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP bl018550 6G 49123 76 60099 12 30173 9 72605 94 75029 11 164.4 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 86 63 +++++ +++ 1834 99 114 51 +++++ +++ 675 98
Wie nicht anders zu erwarten ist eSATA in allen Bereichen um Längen besser. Interessant dabei ist allerdings die höhere CPU-Auslastung. Alle weiteren Tests wurden nur noch mit eSATA durchgeführt.
Alles erstes mal ein vernünftiges Dateisystem testen:
Ext4 eSATA
Version 1.03c ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP bl018550 6G 53860 80 54020 10 25841 6 67645 92 73386 11 174.7 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
53,8MB/s schreiben und 73,4MB/s lesen, nicht schlecht! Auf jeden Fall besser als meine interne Festplatte
Zuerst zum Vergleich eCryptfs:
Ext4 eCryptFS eSATA
Version 1.03c ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP bl018550 6G 29381 97 48973 97 21543 57 46309 97 73448 71 112.2 1 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 4846 52 +++++ +++ 25089 89 9856 96 +++++ +++ 4622 13
Es bleiben 48,9MB/s schreiben und 73,4MB/s lesen bei deutlich höherer CPU-Auslastung. Weiterhin sind die Seeks/s deutlich zurückgegangen. Der Performance-Verlust ist allerdings nicht so hoch wie erwartet.
Ext4 LUKS (aes-xts-plain, 256Bit, cryptsetup 1.0.6)
Version 1.03c ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP bl018550 6G 51435 77 49828 8 27971 7 52273 76 73933 10 167.7 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
49,8MB/s schreiben, 73,9MB/s lesen. Die Werte sind somit nahezu gleich zu eCryptfs, trotz vollkommen unterschiedlicher Ansätze. Allerdings ist die CPU-Auslastung gerade mein Lesen deutlich geringer und es sind mehr Seeks möglich.
Ext4 TrueCrypt eSATA (AES 128Bit, RIPE-160, TrueCrypt 6.3)
Da der TrueCrypt-Wizard auch in der aktuelle Version noch kein Ext4 kennt musste ich das Dateisystem von Hand anlegen, wie zu Beispiel hier beschrieben.
Version 1.03c ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP bl018550 6G 50909 84 52487 8 27557 6 41492 85 74252 12 174.3 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
52,4MB/s schreiben und 74,2MB/s lesen. Schreiben und Seeks/s sind hier also fast genauso schnell wie ohne Verschlüsselung.
Fazit: