Sonntag, 29. Dezember 2013

Making of: Das neue Logo

Tschüss altes Logo!

Hallo neues Logo!

Und weil das alleine etwas knapp wäre, habe ich noch ein Video gemacht, wo gezeigt wird, wie ich es zeichne -- mit zehn Stiften in zehn Händen.
Als besonderes Feature kann man im neuen Logo rn nicht mehr von m unterscheiden. Zum nachbasteln, sind nur einige Änderungen an diesem code nötig. Man schränkt die Tiefensuche auf Knoten mit der Eigenschaft "schwarzer Pixel" ein und liest ein Bild aus, um den Knoten diese Eigenschaft zuzuweisen (vgl. diesen Post).

Sonntag, 22. Dezember 2013

Ising Modell zur Bildentrauschung

Eines der bekanntesten Modelle der statistischen Physik ist das Ising Modell. Es besteht aus (klassischen) Spins auf einem Gitter im Wärmebad und soll magnetische Eigenschaften von Festkörpern modellieren. Es zeigt nämlich in 2D und 3D (und 4D ... ) einen Phasenübergang zweiter Ordnung von "magnetisch" zu "nicht magnetisch", so wie ferromagnetische Materialien, die oberhalb der Curie Temperatur nicht mehr magnetisch sind.

In einfachen Worten: Die Spins des Ising Modells richten sich so aus, wie ihre Nachbarn und die Temperatur bringt sie wieder durcheinander.

Aber es wäre natürlich langweilig das Modell so zu benutzen, wie alle anderen auch. Deshalb stelle ich hier eine Anwendung aus in diesem Buch vor, die nichts mehr mit Magneten zu tun hat: Rauschunterdrückung in Bildern.

Andererseits bin ich Physiker und darf deshalb nichts machen, was direkt nützlich wäre, also beschränke ich mich auf schwarz-weiße Bilder, die man direkt auf das "spin up"-"spin down" des Ising Modells abbilden kann.

Die Idee ist, das jeder Spin einem Pixel entspricht. Dann koppelt man das Gitter des Ising Modells über einen zusätzlichen Energie-Term an das Bild, das man entrauschen will und equilibriert bei T=0.

Das Schema dazu wurde bereits in diesem Post gezeigt. Graue Knoten entsprechen den Pixeln des verrauschten Bilds und weiße Knoten den Ising Spins, die am Ende als Pixel des entrauschten Bilds interpretiert werden.

Genug der Theorie. Es wird Zeit für pixelige Bilder. Leider hatte ich kein verrauschtes Bild, also habe ich ein beliebiges Bild gemalt und 10% aller Pixel invertiert.


Links das verrauschte Bild und rechts das entrauschte. Ja, nicht perfekt. Und in dem zitierten Buch wird auf der gleichen Seite noch eine sehr viel bessere Methode angesprochen. Aber die hatte nichts mit dem Ising Modell zu tun. Und man sieht ja auch eine Verbesserung. Oder?

Nebenbei bemerkt, kann man das Ising Modell auch als zellulären Automaten mit zufälligem Element betrachten, denn jeder Spin ist eine Zelle, die nur lokal von seinen Nachbarn und zufällig durch die Temperatur beeinflusst wird.
Und weil so ein Post ohne Code nicht vollständig wäre und damit ich mit mit meinen Python Fähigkeiten blamieren kann, ist hier der Code.

Sonntag, 15. Dezember 2013

Depth First Search und Labyrinthe

Wenn man alle Knoten eines Graphen besuchen möchte, benutzt meist entweder eine Breitensuche oder eine Tiefensuche. (Übrigens auch, wenn man ein bestimmtes Element sucht. Aber die Knoten einfach nur mal so zu besuchen, ist nett und zeigt, dass man sich um seinen Graphen sorgt.)

  1. Man starte an einem Knoten.
  2. Man schiebe die noch nicht besuchten Nachbarn auf einen Stack (für die Tiefensuche) oder eine Queue (für die Breitensuche). 
  3. Man entnehme einen Knoten vom Stack/Queue und fahre bei 2. fort, bis der Stack/Queue leer ist.
Und weil ich gerade dabei bin, den Wikipedia-Artikel zu wiederholen, mache ich auch weiter damit.
Der beste Anwendungsfall ist nämlich, ein bisschen Zufall in den Algorithmus zu mischen, ein Labyrinth zu bauen und ein Video davon in HD zu posten!
Und weil man dafür weniger als 100 Zeilen Python braucht, spendiere ich auch den Code, falls irgendjemandem das Video nicht reicht. (Oder etwas gegen Youtube hat und sich das Video deshalb lieber selbst bauen würde.)
Außerdem gibt es mir Gelegenheit networkx zu erwähnen. Ein Python Modul, das sehr schöne Klassen für Graphen bereitstellt.


Wer bis hier hin durchgehalten hat, hat es sich verdient, zwei weitere Videos anzusehen.
Hier ist eine Breitensuche, erwartet langweilig:

Und hier bin ich mir nicht sicher, was schief gegangen ist. Aber es ist genial!

Sonntag, 8. Dezember 2013

Oberflächenkachelung mit TikZ

Man arbeitet an einem Seminarvortrag und will ein Modell auf einem periodischen Gitter erklären. Natürlich kann man sich nicht entscheiden, wie viele Elementarzellen man darstellen möchte, außerdem ist es einem zuwider mehrere Elementarzellen per Hand zu schreiben.

Wer kennt das nicht?

Glücklicherweise gibt es eine Lösung. Weil man alle seine Aufzeichnungen sowieso in LaTeX setzt, benutzt man TikZ, bastelt eine Elementarzelle und kachelt sie über die Ebene, bis man das Gefühl hat, dass es genau passend für die Präsentation ist.
Als Bonus kann man noch mit den Parametern spielen, um einen möglichst überzeugenden pseudo 3D Effekt zu erzielen.

Ungefähr so:
Und danach kann man es in ein .svg wandeln und auf seinem Blog zeigen.

Und damit wäre wiedereinmal die Vorliebe dieses Blogs für schwarz-weiße Bilder, die entweder Linien und Kreise oder zu große Pixel enthalten, bestätigt.

Mittwoch, 4. Dezember 2013

Lektion #17509

Besuche niemals mit einem Browser, der weiß was Tabs sind, tvtropes.org, es sei denn, du willst wissen, wie das Symbol für "mehr Tabs als ich darstellen kann" aussieht. (Vgl. Wiki Walk und dieses XKCD Comic)
... *tab* Anime Catholicism *tab* Crystal Dragon Jesus  *tab* crystals do everything *tab* Sufficiently Advanced Alien *tab*  Abusing the Kardashev Scale for Fun and Profit *tab* ... 
 Auflösung: Auf Chrome für Android sieht es nach 99 Tabs so aus:

Sonntag, 1. Dezember 2013

Rule 90

Vor kurzem habe ich angefangen "Think Complexity" zu lesen -- ein leicht verständliches, interessantes Buch, in dem unter anderem Zelluläre Automaten angesprochen werden. Und zwar die von Stephen Wolfram -- ja der Stephen Wolfram, der Mathematica und Wolfram|Alpha entwickelt hat (vermutlich jedoch nicht allein).
Zelluläre Automaten eignen sich natürlich sehr gut, pixelige Bilder zu erstellen, wie der Conways-Game-of-Life-Post beweist. Daher, lasse ich erstmal ein Bild sprechen.
Rule 90
Die Idee ist, dass man mit einem eindimensionalen Zustand startet, und einen neuen Zustand daraus mit lokalen Regeln, die je einen rechten und linken Nachbarn berücksichtigen, erzeugt. Stellt man diese Zustände untereinander da, entstehen Strukturen, wie die, die an ein Sierpinski-Dreieck erinnert.
Die Erklärung, wie genau diese Regeln lauten, und wie sie definiert sind, überlasse ich passenderweise Wolfram|Alpha.

Und damit ich auch etwas sage, das tiefsinnig erscheint: Die Dreieckige Form entspricht übrigens dem Vorwärtslichtkegel des Startwertes in der ersten Zeile. Die y-Achse entspricht hier schließlich einer Zeit und die "Lichtgeschwindigkeit", mit der Beeinflussungen propagieren können ist 1 Pixel pro Iteration.

Meinen Quellcode gibt es natürlich bei Github. Wenn auch nur in einem "kleine Fingerübungen in C"-Repo.

Für Liebhaber, hier noch eins im original 1982 Retro Look.

Rule 150
Passend zur Jahreszeit, wie ich finde.

Mittwoch, 9. Oktober 2013

Lissajous Figuren in Gnuplot

Da nicht jeder das nötige Kleingeld für ein Oszilloskop und Funktionsgenerator hat, aber jeder gerne eine Lissajous-Figur laufen haben möchte, liefere ich hier den entsprechenden Gnuplot Code.
reset
set term gif animate optimize
set output "lissajous.gif"
n=6250

set xr [-1:1]
set yr [-1:1]

set parametric
unset border
unset xtics
unset ytics

fx(t) = sin(t)
fy(t) = sin(2.999*t)

i=0
load "animateLissajou.gp"
set output
Die Datei "animateLissajou.gp" sieht dann so aus:
set trange [i:i+2*pi]
plot fx(t),fy(t) lc rgb 'black' notitle

i=i+2*pi*10
if (i < n) reread
Stark angelehnt an diesen Blogeintrag. Das Ergenis sieht dann so aus.

Sonntag, 29. September 2013

Linux 3.11

Auch wenn es nicht mehr ganz aktuell ist, ist hier das Logo des aktuellen Linux 3.11 -- Linux for Workgroups.

Freitag, 27. September 2013

Syntax Highlighting

Im letzten Post habe ich tatsächlich, endlich Code, der ordentlich formatiert und vor allem mit Syntax Highlighting versehen war, gepostet. Da Skript, das sich darum kümmert auch immer so ein kleines grünes "?" anzeigt, brauche ich auch nichtmehr selbst dahin zu verlinken.
Seltsam, dass ich mich erst jetzt darum gekümmert habe.
Außerdem habe ich auch gleich noch die Farben geändert, damit es ein bisschen weniger schlecht aussieht. Auf weißem Hintergrund sind die alten Code Fragmente zwar nur noch schwer zu lesen, aber dafür habe ich in Zukunft ja das Syntax Highlight Modul. Und ich bin gespannt, wie lange man den Hintergrund betrachten kann, ohne dass einem schlecht wird. Aber wenn man schon'mal ein Bild mit periodischen Rändern hat, will man es auch überall hintapezieren.

Donnerstag, 26. September 2013

Bootstrapping

Wer kennt das nicht: Man hat sich ein Python Skript geschrieben, um seine Daten per Bootstrap Resampling auszuwerten und stellt fest, dass das Konstrukt zur Bildung des "Samples mit Ersetzungen"
import random
x = [1,2,3]

bootstrapSample = [random.choice(x) for _ in x]
einfach nicht schnell genug ist.
Aber glücklicherweise gibt es numpy!
import numpy
x = [1,2,3]

bootstrapSample = list(numpy.random.choice(x, len(x)))
läuft -- zumindest in meinem Anwendungsfall -- spürbar schneller. Ich werde in Zukunft also immer optimale Fehlerbalken erzeugen.

Montag, 10. Juni 2013

Harmonische Oszillatoren

Was passiert, wenn man hundert Kästchen in einer Ebene festhält, sie mit 4950 Federn verbindet (sodass jedes mit jedem verbunden ist) und dann loslässt?
Das:
Die Farben ändern sich je nach Geschwindigkeit und Bewegungsrichtung und sind nur dazu da, damit nicht alle Videos hier schwarz weiß aussehen.

Der C Code, mit dem das erzeugt wurde, findet sich übrigens auf Github. Es ist allerdings ein ziemlich naiver Ansatz -- nichts, was man sich unbedingt ansehen wollte.
Das Video wurde mit der folgenden Zeile ffmepg erstellt.
ffmpeg -f image2 -i n_harm_osz_%04d.png n_harm_osz.mp4

Freitag, 7. Juni 2013

Lektion #2069

Vergesse niemals, dass ein Integer rauskommt, wenn du zwei Integer durcheinander teilst.

Ohh, eine Stufenfunktion. Das ist bemerkenswert! Kommt, guckt euch das an!

Dienstag, 4. Juni 2013

Psychedelische Graphen

Ich beschäftige mich in letzter Zeit unter anderem mit speziellen Graph Ensemblen. Und weil es so schön hypnotisierend ist auf riesige Punktwolken zu gucken und dieser Blog bisher auch immer Leckerbissen für Punkteliebhaber geboten hat, gibt es hier zwei Videos.



Diese zeigen übrigens einen Relative Neighborhood Graph (oben) und einen Gabriel Graph (unten).
Berechnet in C. Gezeichnet als .svg. Ein tolles Grafikformat.

Montag, 3. Juni 2013

Pebble

Die Pebble wird schon lange nicht mehr nach Deutschland geschickt, weil der deutsch Zoll den euphorischen Kickstarter Backern nur anbietet sie zurückzuschicken oder zu zerstören. Ich möchte mich aber nicht mit den legalen Einzelheiten auseinander setzen. Ich möchte nur damit angeben, dass ich eine habe :)


Donnerstag, 14. März 2013

Donnerstag, 21. Februar 2013

Nexus 4 das Update -- Ein Drama

Heute kam endlich das OTA (over the air) Update auf 4.2.2 für mein Nexus 4. Natürlich habe ich es sofort installiert. Doch dann wurde ich etwas enttäuscht -- um nicht zu sagen sehr. Das mobile Netzwerk ging nicht mehr: Keine Anrufe waren möglich, Datenverbindung natürlich auch nicht. Aber was soll man mit einem Telephon, mit dem man nicht telephonieren kann? (Nagut, eine ganze Menge. Vor 5 Jahren wäre die Frage besser angekommen ;) )
Die Symptome: IMEI: unbekannt, Baseband: unbekannt, Mobilfunk: ausgefallen

Eine Internetrecherche hat auf den ersten Blick ergeben, dass mein Smartphone jetzt wohl nicht mehr viel smarter als ein Ziegelstein sei. Lösung: Einschicken.
Dann bin ich bei xda-Developer aber glücklicherweise noch auf einen Thread gestoßen, der das gleiche Problem mit einer Lösung enthielt: Nochmal das Factory Image flashen. Da ich das Android SDK und damit alles, was ich brauche, schon für ein früheres Projekt installiert hatte, konnte ich das auch recht schnell und einfach durchführen. Und es hat funktioniert. Was kann denn besseres passieren, als dass man zwei Wochen Wartezeit wegen des Einschickens durch 10 Minuten auf dem Terminal eintauscht und als Bonus noch einen entsperrten Bootloader bekommt inklusive des euphorischen Gefühls etwas selbst repariert zu haben?

Trotz des glücklichen Endes finde ich es dennoch sehr sehr sehr unschön, dass so etwas bei einem OTA Update passiert. Das darf nicht vorkommen. Niemals. Nie.

Donnerstag, 14. Februar 2013

#ilovefs

I love Free Software!

Der 14.02. ist der offizielle "I love Free Software"-Tag. Witzigerweise ist heute zufällig auch Valentinstag ;)
Und ich liebe freie Software.
Ich schreibe Arbeiten für die Uni LaTeX in Geany, das ich nirgendwo lieber bediene als auf meinem Arch Linux. Wenn ich Programme schreibe, dann kompiliere ich sie per GCC oder interpretiere sie mit cPython. Mein Browser heißt Chromium. Openbox ermöglicht ein flüssiges Arbeiten ohne Ablenkung und mit klarer Struktur. Das Gnome Projekt sorgt dafür, dass ich für alle alltäglichen Probleme ein Programm habe.

Falls du es also noch nicht getan hast: Schick ein paar Emails mit freundlichen Worten an die Leute, die dafür sorgen, dass es freie Software gibt.

Freitag, 8. Februar 2013

Crowdsourcing

Crowdsourcing ist das Geheimnis hinter der Wikipedia. Amazon verdient mit Mechanical Turk Geld. Und SETI@home lagert die Suche nach Außerirdischen an die Crowd aus.

Genug der Einleitung: Ich habe heute eine neue sinnvolle Crowdsourcing Anwendung gefunden: Messung des Luftdrucks: PressureNET. Das ist eine Android App, die das Barometer eures Smartphones nutzt. (Ja, ein richtiges Smartphone hat ein Barometer -- genauso wie ein richtiges Smartphone einen NFC-Chip hat -- nimm das, iPhone :P ) Die gemessenen Luftdrücke werden gesammelt und für Wetterforschung benutzt. Außerdem könnt ihr alle euren Messungen als csv herunterladen. Ich weiß zwar noch nicht, was ich mit zeitlich auf 10 Minuten aufgelösten Luftdrücken anfangen soll, aber ich bin begeistert.

Wenn ihr also ein Gerät mit Barometer habt -- also Nexus{4,10} oder Galaxy {Nexus,S3,Note[ II]} -- dann verliert keine Zeit und installiert euch die App.

Mittwoch, 30. Januar 2013

Längenkontraktion


Dieses Video ist gestern vor einem Jahr fertig gestellt worden. Ich dachte ich teile es mal mit der Welt.