Journal: Neueste Artikel erscheinen hier (Seite 14 von 21)
Mehr Pixel: HD
HD testing // Wittelsbacherplatz
In letzter Zeit habe ich mich wegen entsprechender Kamera und Bildschim ein bisschen in der HD-Welt umgesehen. Zuerst kam der Bildschirm, der nun full-HD anzeigen konnte. Zunächst habe ich das kaum zum Filme schauen verwendet. Dann kam die Kamera und das war eine etwas komplizierte Geschichte.
Der Bildschirm
Zunächst bekam ich einen neuen Bildschirm der mit 1920x1080 eine nette full-HD Auflösung hat. Das ermöglicht angenehmes Programmieren und Gestalten da z.B. 4 Terminals drauf passen oder ziemlich viel Code oder rund 2x so viel von einer Webseite oder, dank Breitbild, 2 DIN-Seiten oder andere lustige Sachen.
Irgendwann bin ich dann auf die Idee gekommen, HD-Trailer herunterzuladen. Man hat ja auch kein Blueray-Laufwerk oder irgendwelche HD-Filme. Anfangs ist das schon sehr nett mit den HD-Videos. Nur allzu viele Trailer habe ich dann auch nicht geladen, da jeder so um die 300 MB hat, und das für wenige Minuten. Wenn man dann wieder umsteigt auf youtube oder ähnliches merkt man erst richtig den Unterschied.
Die Kamera
Nicht ganz so viel Spaß machte mir das Erstellen von HD-Inhalten. Die Kamera ist zwar dank SD-Karte wesentlich einfacher zu bedienen als alles mit Band o.ä. doch erzeugt sie seltsame .MTS-Dateien (AVCHD), die irgendwie keiner so recht haben will. VLC schluckt sie zwar (Win/Lin/Mac), spielt sie aber natürlich nur ab. Auf Windows und Linux kann man das Bearbeiten mit herkömmlicher Software eigentlich vergessen. Auf dem Mac kann man diese Dateien zwar auch nicht bearbeiten, aber nachdem ich das ganze Rohmaterial auf einem MacBook in Final Cut importiert habe (wobei alles zu .mov geworden ist) konnte ich es auch auf dem PowerBook laden und dort schneiden. Importieren geht allerdings nicht auf der PowerPc-Plattform.
Um die Videos auch hochzuladen, habe ich mich auch gleich bei Vimeo angemeldet, wo ich jetzt jede Woche ein HD-Video hoch laden könnte. Allerdings war ich bisher noch nicht sehr produktiv, was Filme angeht, ich habe nur ein kleines Beispielvideo hochgeladen, um zu sehen wie alles so läuft. Und ich war positiv überrascht: vimeo macht sehr viel mehr Spaß als youtube, vor allem weil das GUI wirklich ansprechend und intuitiv daher kommt, auch wenn ich kein Fan bin von runden Ecken.
Kopete Kryptographie-Modul und Jabber
Wenn Google durch die Straße fährt und den Vorgarten fotografiert, merkt plötzlich jeder, was Privatsphäre eigentlich ist und warum man sie behalten will. Jedoch scheinen Benutzer von IM-Diensten keine Privatspäre zu mögen. Schleißlich könnten die intimen Chats mit der Freundin jederzeit im Internet oder in einem Buch veröffentlich werden, zumindest wenn diese z.B. über ICQ geschehen, nach akzeptiren vorallem des siebten Absatzes der ICQ Nutzungsbedingungen, der eigentlich schon eine rechte Frechheit darstellt. Doch es geht auch anders:
Zum Beispiel mit den offenen Standards von Jabber/XMPP, die im Gegensatz zu den proprietären Netzwerken wie ICQ über eigene Server laufen können und nicht an eine zentrale Stelle gebunden sind. Außerdem gibt es keine räuberischen Richtlinein zu akzeptieren. Diverse Mail-Provider haben eigene Jabber-Server auf denen man schon einen Account hat, wenn man ein Mailpostfach hat, man muss sich also nichtmal „bei Jabber“ (eben nicht, man braucht nur bei einem Server einen Zugang) anmelden.
Dennoch könnte natürlich jemand (am selben WLAN-Hotspot, am Server, zwischen den Servern etc.) unerlaubt und unbemerkt mithören und damit die Privatsphäre wiederum angreifen. Im Extremfall sogar eigene Nachrichten untermischen. Dagegen kann man sich wiederum durch eine geeignete Ende-zu-Ende-Verschlüsselung schützen. Besonders leicht geht das mit GPG und Kopete.
Da man GPG ja zum Schreiben von E-Mails verwendet, hat man mit entsprechend brisanten Kontaktpersonen meistens onehin schon Schlüssel ausgetauscht und diese signiert. Wer noch nie GPG benutzt hat, kann das z.B. hier lernen. Ist GPG eingerichtet und die Schlüssel getauscht, sind die weiteren Schritte eigentlich recht einfach.
Nachdem man in Kopete das Kryptographie-Modul aktiviert hat und den eigenen Schlüssel ausgewählt hat (damit man die eigenen Nachrichten auch lesen kann) muss man noch den Kontakten, denen man verschlüsselt schreiben will ihre öffentlichen Schlüssel zuweisen (über das Kontextmenü). Vorausgesetzt dies geschieht nicht sowieso schon durch die Adressbuchzuweisungen. Bei den anderen Teilnehmern der Konversation müssen diese Schritte natürlich auch durchgeführt werden, sonst werden die Nachrichten nicht wieder automatisch entschlüsselt oder nur in eine Richtung verschlüsselt.
Bilder züchten
Mit freeSq gezüchtetes Bild
Der neueste Trend ist es ja anscheinend genetisch zu Programmieren (bzw. programmieren zu lassen). Der Webcomic xkcd greift das Thema auf und Roger Alsing zeigt wie es geht. Mir geht es natürlich nicht darum Algorithmen genetisch zu basteln, oder Bilder nach zu stellen, sondern ich wollte einfach mal den Computer etwas herumprobieren lassen. Da wir in Kunst zurzeit kubistische Bilder malen müssen, habe ich mir gedacht, so etwas könnte doch auch ein Computer hin bekommen. Der Computer malt also Rechtecke, und versucht sie so hin zu bekommen, dass es ungefähr aussieht, wie das Originalbild.
Da das Vorgehen ja ein bisschen an die Biologie angelehnt sein sollte, benutzte ich so etwas, wie einen genetischen Algorithmus. (Es ist also nicht der Algorithmus, der „genetisch“ erzeugt wurde). Im ersten Versuch habe ich dem Computer fünfhundert, zunächst gleiche, weiße Rechtecke auf schwarzem Hintergrund vorgesetzt. Der Computer hat dann immer ein zufälliges Rechteck genommen und zufällig platziert. Die neuen Bilder waren also so etwas wie Kinder. Dann hat eine Fitting-Funktion überprüft, ob sich die Ähnlichkeit zur Vorlage verbessert hat. Wenn ja, hat er dieses neue zufällige Rechteck gespeichert (also in die „DNA“) aufgenommen und dieses Kind als neues Mutterelement verwendet. Hat sich nichts verbessert, hat er einfach ein weiteres Kind erzeugt.
Die Fitting-Funktion
Ich habe ein kleines Python-Script gebastelt, dass die Übereinstimmung zweier Bilder ausrechnen kann. Da alles in schwarz-weiß passiert, geht es jeden Pixel durch und addiert jeweils die Differenz der Rotwerte. Je größer die Zahl ist, desto schlechter passt das Bild. Der Computer favorisiert also Kinder mit kleineren Werten.
Zweiter Algorithmus
Da der erste Algorithmus zwar mit nur 500 Rechtecken immer bessere Näherungen erreicht hat, aber zum Ende hin sehr viele Versuche brauchte um wieder ein besser angepasstes Kind zu finden habe ich einen zweiten Algorithmus gebastelt, der diese Probleme vermeiden soll:
Er züchtet aus einem Elternelement zunächst 500 Kinder. Die Zucht-Funktion fügt allerdings jetzt jeweils ein schwarzes oder weißes Rechteck hinzu, wodurch Fehler schneller korrigiert werden können. Beim alten Algorithmus konnte ein fehlerhaftes Rechteck ja nur verschoben werden, wenn es zufällig gewählt und zufällig richtiger platziert wurde. Die Zahl der Rechtecke entspricht also der der Generation.
Die 500 Kinder sind zunächst noch klein und es werden nur 25% der Pixel gerastert. Die Kinder werden dann mit einer kleineren Version der Vorlage verglichen, und nur die besten 10 werden erwachsen und dann in voller Größe vergleichen. Damit werden nicht mehr so viel Ressourcen (Rechenzeit) für grobe Fehlplatzierungen verschwendet. Aus den letzten 10 Kindern wird dann das, welches in groß am Besten passt, als neues Elternelement gewählt, aus dem wiederum 500 neue Kinder-Bilder gezüchtet werden. Die 499 anderen Kinder werden für immer gelöscht, sodass nun nur noch die Elternelemente (die mit Verbesserungen) konserviert werden um meine Felsplatte zu schonen. So werden immer weiter bessere Merkmale vererbt, bzw. alte Fehler in den Merkmalen korrigiert.
Die DNA
Genau wie bei der echten DNA auch, werden die Informationen so gespeichert, dass die Kinder „wachsen“ können, nämlich als SVG. PHP kann durch seine DOM-Funktionen die DNA leicht verändern und die Rechtecke sind in einem angemessenen Format gespeichert. Mit dem Programm rsvg lassen sich die Rechtecke auch schnell rastern in allen beliebigen Größen.
Das Ergebnis
Der erste Algorithmus „500“ hat nach 21 Stunden 50830 Generationen erzeugt und einen dabei Das Original recht nett angenähert. Ursprünglich habe ich geplant ein kleines Video daraus zu erstellen, doch selbst bei 30 fps wäre es etwa eine halbe Stunde lang, und man würde hauptsächlich die Fehlschläge sehen. Deshalb nur einige Auszüge aus dem Werdegang:
Der zweite Algorithmus „freeSq“ ist so gebaut, dass er ohne Probleme unterbrochen werden kann und deswegen werde ich ihn wohl noch deutlich länger laufen lassen. Aber nach den ersten rund 2 Stunden und 255 Generationen (127500 Versuchen) ist das Entsanden (links Vorlage):
Seltsamerweise ist es etwas zu klobig, es wirkt bisher nicht so fein, dafür ein bisschen komplexer, doch es wird sich zeigen, wie es nach einigen weiteren Generationen aussieht. Da das Ganze sehr viel Zufall beinhaltet, könnte bei einem weiteren Durchlauf auch ein völlig anderes Bild entstehen. Ich bin gespannt.
Übrigens: So sieht Evolution bei den Simpsons aus.
SVN mit SVG und XSLT gibt Visualisierung
Warning: filesize() [function.filesize]: stat failed for /home/jail/bxt/bxt/de.bernhardhaeussner/htdocs/upl/svn+svg+xslt_rockz.tar.gz in /home/jail/bxt/bxt/de.bernhardhaeussner/lib/php/engine.classes.php on line 229
Als ich zum ersten Mal über XSL bzw. XSLT stolperte interessierte es mich sofort. Im Gegensatz zu der von PHP und MySQL gewohnten, mehr oder weniger prozeduralen, Verarbeitung und dem Datensatz-Prinzip werden nun XML-Bäume mit XPath-Templates transformiert. Nun habe ich erstmals eine sinnvollere Anwendung gefunden: Das Transformieren eines XML-Subversion-Logs in eine Visualisierung als SVG.
Vorallem im Web-Bereich liegen fast alle Daten (wenn nicht in einer SQL-DB) in XML-Dateien vor. Ein Beispiel sind AJAX-Anwendungen. Auch viele APIs benutzen XML zur Informationsübermittlung. Natürlich kann auch PHP mit XML umgehen, doch mit XSLT findet sich eine einfachere Möglichkeit, da man im XML-Bereich bleibt und nicht so viel PHP-Syntax und anderes hineinmischen muss.
Natürlich ist XSLT zu PHP grundsätzlich verschieden, da die Scripte nicht „live“ auf einem Server laufen, sondern die Transformation entweder ganz beim Client erfolgt oder das einmal Transformierte Resultat gesendet wird. Und XSLT liegt eigentlich auch fernab von jeder Webanwendung, ganz allgemein eben transformiert es Daten zwischen verschiedenen XML-Formaten.
Nun wird XSLT im Webbereich meist verwendet, um Daten in XHTML-Seiten umzuwandeln, ich verwende allerdings ein anderes Format der XML-Syntax: SVG.
Download
Es ist noch ein kleines Schell-Script dabei, um das Log zu erstellen und den XLST-Prozessor zu starten.
















