Zum Seitenanfang

Was ist ein Yottabyte?

Das frug ich mich mal, als ich in der Wikipedia den Artikel zu Binärprefixen gelesen habe.
Kurz zur Verdeutlichung, die Reihenfolge der Präfixe ist:
  1. Kilo
  2. Mega
  3. Giga
  4. Tera
  5. Peta
  6. Exa
  7. Zetta
  8. Yotta
So, und da wir alle dem Größenwahn verfallen sind, nahm ich gleich das größte Präfix und überlege mir, wie man so eine gigantische Menge an Bytes nachstellen kann - mit "heutigen" Mitteln (die Überlegung stammt von Anfang 2011): Man nehme eine richtig große Menge 1 Terabyte-Festplatten, schraube sie zusammen, tada: ein Yottabyte.

Die nachfolgende Liste an Rechnungen und Beispielen haben keinerlei Anspruch auf Korrektheit, Praxisnähe oder Machbarkeit. Als Berechnungsgrundlage dient meine eigene 1TB-Festplatte - Typ Samsung HD 103 SJ.

  • 10 hoch 15 (1.000.000.000.000.000 oder 1 Billiarde) Festplatten zu je 1 Terabyte entsprechen 1 Yottabyte, oder einer Trilliarde Megabyte
  • Bei einem Cache von 32 Megabyte pro Festplatte haben wir 32 Zettabyte oder 32 Tausend Exabyte Cache
  • Bei einem Stromverbrauch von 7,2 Watt pro Festplatte ergibt sich bei 10 hoch 15 Festplatten ein Gesamtstromverbrauch von 7,2 Billionen Kilowatt oder 7,2 Milliarden Megawatt
    • Dies entspricht der Leistung von 4.500.000 Atomkraftwerken
  • Die Masse einer Festplatte beträgt 625g - bei einer Billiarde Festplatten ergeben das 625.000.000 Kilotonnen Masse
    • Die Masse der Titanic betrug zu "Lebzeiten" 53.147 Tonnen
    • Die Masse einer Billiarde Samsung HD 103 SJ entspricht der Masse von 11.759.835,92 Titanicen (Pluralbildung korrekt?)
  • Eine Samsung HD 103 SJ kann mit einer Geschwindigkeit von bis zu 96,582 Megabyte pro Sekunde beschrieben werden
    • Eine Billiarde Samsung HD 103 SJ nacheinander komplett zu beschreiben dauert 1,035389 mal 10 hoch 19 Sekunden. Diese unscheinbare Sekundenanzahl entspricht 32.800.000.000.000 (32,8 Billionen) Jahren
  • Eine Samsung HD 103 SJ hat folgende Maße: Höhe 26,1mm, Breite 101,5mm, Länge 147,0mm
    • Die Fläche von 1 Billarde dieser Festplatten beträgt 14.838.680.000.000.000.000.000 - also rund 14 Trilliarden Quadratkilometern
    • Wenn man davon ausgeht, dass die Erde eine Fläche von 510 Millionen Quadratkilometern aufweist, braucht man ungefähr 29.095.450.980.392,15 (rund 29 Billionen) Erden, um alle Platten nebeneinander auslegen zu können. Naja, im Universum gibt es ja genug Sterne...

Zurück zur Aufgabenstellung: Was ist ein Yottabyte?
Antwort: ... kacke, ich kanns mir immernoch nicht vorstellen

HTML 5

Semantik ist im Web wichtig. Daher habe ich mal mein Layout, das ich auf dieser Seite einsetze, mit den bereits bekannten, und zum Teil verfügbaren Features von HTML 5 angereichert. Was das mit Semantik zu tun hat? HTML 5 macht meiner Meinung nach einen riesigen Schritt nach vorne und ist im Vergleich zu XHTML oder HTML4 dem Ziel des Ausweisens der Bedeutung des übermittelten Inhalts wesentlich näher.
Ich habe bei der Umsetzung die Elemente
  • section
  • nav
  • aside
  • article
eingesetzt und darüber hinaus den Doctype angepasst.
Die Elemente im Einzelnen (so wie ich mir denke, dass sie funktionieren):

section

Markiert einen für sich eigenständigen Bereich des Dokuments ab.

Ich setze diesen Tag zum Beispiel dafür ein, um den Kopf, den Rumpf und den Fußbereich der Seite zu markieren

nav

Markiert die Navigation der Seite

aside

Markiert einen Bereich, der mit dem eigentlichen Inhalt der Seite so direkt erstmal nichts zu tun hat

Ich wollte ursprünglich damit die "Yeah, meine Seite ist XHTML-Valide"-Buttons auszeichnen. Dann ist mir eingefallen, dass ich ja jetzt auf HTML 5 umsteigen will. Kurz mal die Seite durch den Validator gejagt und gesehen, dass da Fehler angemerkt wurden, die ich so schnell nicht beseitigen kann. Muss ich mir später nochmal anschaun...

article

Zeichnet einen Bereich aus, der einen Artikel (zb. Blogeintrag) darstellt

Ganz klarer Kandidat für die Startseite



Zum Schluss kann ich nur sagen: War nicht schwer.
Man muss sich ein paar Gedanken machen, welcher Teil eines solchen Layouts eigentlich was darstellt und wie man es am besten mit den neuen Tags auszeichnet.

Ach übrigens: IE 8 macht mal wieder alles falsch. Aber nicht schlimm, wer den benutzt, ist sowieso selber schuld:
/index.php?aktion=datei&id=15
IE 8 versagt, wen wunderts?

Autoloader sind cool

PHP wird ja oft als dreckige Skriptsprache mit Objektorientierung-Anhang bezeichnet. Natürlich kann man das tun - man kann dreckige, sich gegenseitig includende Skripte schreiben. Am Ende wirds bestimmt auch funktionieren. Wartbarkeit ist dann was anderes.
Aber darüber wollte ich hier eigentlich gar nichts schreiben.

Ich wollte hier behaupten: Man kann in PHP ähnlich elegant und schön wie in Java (oder C#) programmieren.
Der Umstand, der mich zu dieser Behauptung hinreißt, ist der, dass man vor Autoloadern in PHP 5 Klassen manuell includen musste. Dies führte zu unglaublich hässlichen Codeblöcken. Sollte man seine Projektstruktur nicht entsprechend aufbauen (oder nicht objektorientiert programmieren), ist man auch noch in PHP 5 zu solchen Konstrukten gezwungen.

Hier mal ein Hinweis an diejenigen, die von dieser Möglichkeit noch nichts gehört haben:

Namespaces werden in PHP mit Backslashes geschrieben.
In Java sähe ein voll qualifizierter Klassenname zum Beispiel so aus:
java
  1. de.joshavg.java.TolleKlasse

Das PHP-Pendant wäre folgendes:
php
  1. de\joshavg\php\TolleKlasse

Nun kann man, wie in Java, die Projektstruktur so aufbauen, dass die Namespaceangabe der Klasse gleich dem Pfad zur Klasse ist.
Nehmen wir wieder die PHP-Klassenangabe von oben, sähe die Projektstruktur beispielsweise wie folgt aus:
  • root
    • de
      • joshavg
        • php
          • TolleKlasse.php
In der Datei TolleKlasse.php steckt in diesem Fall dann die Klassendefinition für die Klasse TolleKlasse. Zum Beispiel:
php
  1. <?php
  2. namespace de\joshavg\php;
  3.  
  4. class TolleKlasse {
  5. public function __construct() {
  6. echo 'Yeah, Konstruktor';
  7. }
  8. }

Auf diese Weise kann man dann eine Autoloader-Funktion implementieren, die sich auf genau diese Konventionen stützt. Am besten nutzt man in diesem Fall die Funktion spl_autoload_register(callback(classname)), da man auf diese Weise mehrere Autoloader definieren kann. Definiert man nur eine Funktion __autoload(classname), können Bibliotheken von Drittanbietern keine Autloader mehr definieren.
Zum Beispiel kann man folgende Codezeilen an den Anfang seiner index.php stellen:
php
  1. <?php
  2. spl_autoload_register(function($classname) {
  3. $fullpath = str_replace('\\', DIRECTORY_SEPARATOR, $classname).'.php';
  4. if(file_exists($fullpath)) {
  5. require_once($fullpath);
  6. } else {
  7. // Fehler loggen
  8. }
  9. });

Da man den Klassennamen inklusive Namespaceangabe erhält, kann man so auf den Speicherort der Klassendefinition schließen.
Durch das str_replace geht man sicher, dass die Pfadangabe auch wirklich zum aktuellen Betriebssystem passt. Ich habe schon oft gesehen, dass es auch ohne funktioniert, aber sicher ist sicher.
Die Klasse TolleKlasse kann man jetzt wie folgt verwenden:
php
  1. <?php
  2. namespace de\joshavg\php\irgendEinPackage;
  3. use de\joshavg\php\TolleKlasse;
  4.  
  5. class IrgendEineKlasse {
  6. public function run() {
  7. new TolleKlasse(); // Erzeugt den Output 'Yeah, Konstruktor'
  8. }
  9. }


Auf diese Weise schreibt man maximal ein paar includes, eins pro Autoloader, programmiert viel flüssiger (vernünftige IDE vorausgesetzt) und kann seine Klassen ordentlich strukturiert ablegen.

BBParser und Inhaltsverzeichnis

Zuerst das unerfreuliche: Der Myrakel-BBParser hat eine seiner altbekannten Fehler wieder aufgeworfen, nämlich das Parsen von Listenpunkten. Nach bestimmten BBCode-Blöcken hörte er einfach auf, Listenpunkte zu parsen, sodass in der fertigen Seite schlichtweg [html][*][/html] stand.
Der alte Parsevorgang, nämlich das manuelle Suchen nach den entsprechenden BB-Entities habe ich jetzt endlich durch einen schlichten regulären Ausdruck ersetzt. Der scheint seine Arbeit auch ganz gut zu erledigen. Spontante Tests, unter anderem mit geschachtelten Listen, gaben grünes Licht.

Jetzt das mehr erfreuliche: Ich experimentiere derzeit mit einem Filtermodul herum, das mir automatisch aus Überschriften ein Inhaltsverzeichnis über den aktuellen Beitrag generiert. Dies funktioniert auch bei eingefügten ("includeten") Beiträgen. Das Ergebnis soll dann ähnlich wie bei Wikipedia funktionieren und aussehen.
Es mangelt zur Zeit nur noch an ein paar CSS-Eigenschaften. Wenn ich demnächst mal wieder etwas zeit finde, passe ich den Rest auch noch an und schon geht das Modul online.

Infos: BBCode

Support für mobile Browser

Die aktuelle Myrakel-Version ist mit einer neuen Funktion ausgestattet.
Es lässt sich nun ein spezielles Layout definieren, das geladen wird, wenn Myrakel erkennt, dass ein mobiler Browser die Seite angefordert hat. Auf Wunsch kann darüber hinaus in einem solchen Falle der zu übertragende Quelltext komprimiert werden. Das bedeutet:
  • Überflüssiger Whitespace (Leerzeichen, Zeilenumbrüche) wird entfernt
  • Falls der Browser es untertützt, wird der Inhalt gzip-komprimiert übertragen