Metaballs, erste Optimierung

Okay, ich habe es also weiterhin nicht geschafft von den Metabällen die Finger zu lassen. :-D Nach meinem ersten Versuch mit Python und Pygame, habe ich mich nun mal mit C++ und SDL an die Thematik gewagt. Das Ergebnis kann sich durchaus sehen lassen, denn jetzt läuft die Animation bei mir flüssig – auch mit mehr als 2 Metabällen. Zum Testen benötigt man die libsdl und die libsdl-dev, außerdem natürlich den g++. Ein make-Script in Form eines simplen Shellscripts liegt bei. :-) Hier noch ein Bild:

Metabälle in C++ (1.79 KB)

Metaballs

Per Zufall bin ich gestern und heute über den Artikel über Metabälle gestolpert. Was auf den ersten Blick ziemlich kompliziert aussieht, gestaltet sich im Prinzip gar nicht so schwer. Denn wie ich halt so bin, konnte ich leider nicht widerstehen so etwas direkt mal zu probieren. Das Ergebnis ist eine einfache Python-Animation zweier Metabälle. Endlos langsam – aber funktioniert. ;-) Zum Zeichnen der Oberfläche benötigt man die “pygame”-Libraray, die sich (zumindest in Debian-basierten Systemen) leicht über den Packetmanager installieren lässt.

Metabälle in Python (932 bytes)

IMAP und der IDLE Befehl

Nachdem ich letzten den Nameserver einer Meiner Domains ändern musste, bin ich mal wieder auf den MX-Eintrag meiner Domain valentinvoigt.info aufmerksam geworden. Dieser zeigt via CNAME auf die DynDNS-Adresse meines Homeservers. Dort widerrum befindet sich ein Postfix Server, der … naja, eigentlich nichts zu tun hat.

Da ich mich schon länger nicht mehr mit dem Thema Mailserver beschäftigt habe, habe ich mir diesen Postfix-Server mal angeschaut. Dort habe ich bereits valentinvoigt.info als gültige Domain eingetragen. Komisch eigentlich, ich kann mich gar nicht daran erinnern, jemals diese Domain als einer meiner E-Mail-Adressen benutzt zu haben. Also habe ich mal schnell sendmail rausgeholt und mir selbst eine E-Mail an diese Domain geschickt. Und stellt euch vor – die kam an. Mit ca. 45 Sekunden Verzögerung, die mein Mail-Client zum Pollen der E-Mails benötigte.

45 Sekunden? “Da geht doch noch mehr”, dachte ich mir und schaute mir einige Tools an, die in der Lage sind Mailboxen zu überwachen. Schnell stieß ich auf das Programm mailnotify. Dort fand ich ein Feature, dass Gebrauch von der so genannten IDLE-Extension von IMAP macht. IDLE, zu Deutsch “nichts tun” klingt nicht besonders spannend, hat aber etwas ziemlich cooles an sich. Denn IDLE ist ähnlich wie “Pushmail” für mobile Clienten in der Lage, den Mail-Client in Echtzeit über den Empfang neuer E-Mails zu beachrichtigen. Nur leider funktionierte das auf Anhieb nicht…

Nach ein wenig Recherche fand ich aber schnell raus, wie ich IDLE zu meinem Vorteil nutzen könnte. Der Clue liegt in der Konfigurations-Datei des Courier-IMAP-Dienstes. In der Datei namens imapd gibt es eine Einstellung “IMAP_ENHANCEIDLE”. Diese muss auf 1 gesetzt werden, damit Courier die E-Mails in Echtzeit ausliefern kann. Courier benutzt dann den File Alteration Monitor, genannt FAM, der auf Kernel-Ebene Dateien und Verzeichnisse auf Änderungen überwacht. Dies ist in vielen Szenarien sinnvoll um ein Polling (d.h. regelmäßiges Prüfen auf Änderungen) zu vermeiden. Dies tut dann auch Courier nicht mehr, der Änderungen in der Mailbox nun in Echtzeit von FAM geliefert bekommt.

Mit dieser Technik habe ich nun eine Echtzeitbenachrichtigung über neue E-Mails. Zumindest an jene, die an valentinvoigt.info gesendet werden. E-Mails über meine GMX-Adresse müssen leider nach wie vor gepollt werden. Dort habe ich im Schlimmstfall noch eine Verzögerung von 5 Minuten. Okay, zugegeben. Brauch mal wieder keiner. Aber dennoch ist eine Echtzeitbenachrichtigung in manchen Fällen (Server- oder Software Ausfälle) schon sinnvoll. Nun kann man sich auf seine E-Mails konzetrieren und keine Jabber-Benachrichtigungen friemeln. :-)

Neues Hintergrundbild

Hey, will jemand mein neues Hintergrundbild benutzen? Hab’s selbst gemacht. *g*

Background image

Vorher hatte ich übrigens das gleiche ohne Schriftzug. :-D

Moderne Routing-Verfahren in PHP-Apps

Zwar bin ich schon seit einiger Zeit auf Python umgestiegen und versuche PHP mittlerweile weitgehenst zu vermeiden, aber dennoch wurde ich vor einigen Tagen von einem Freund gefragt, wie man heutzutage seinen URLs den richtigen Controller zuordnet. Aus lauter Langeweile, habe ich so ein relativ umfangreiches Beispiel erstellt, welches die meiner Meinung nach schönste Möglichkeit aufzeigt.

Undzwar besteht diese aus einer Tabelle, welche mit Hilfe von Regulären Ausdrücken, URLs einen bestimmten Controller (im Beispiel eine einfache Datei) zuordnet. Die Regex-Tabelle hat den Vorteil, eine zentral gelegene, leicht zu ändernde und flexible Möglichkeit zum Registrieren von URLs zu bieten. Weiterhin werden GET-Parameter in Forum von URI-Komponenten (z.B. “username” in /profile/username/view) direkt mit geparst und in ein einfach zu bedienendes Array (hier: $matches) gepackt.

Kurze Erklärung, wie man das Script benutzen kann. Man erstellt sich einen Ordner mit beliebigem Namen auf dem eigenen Webserver. Dort erstellt man eine Datei, welche zwingend index.php heißen muss mit dem gleich folgenden Inhalt. Außerdem benötigt man eine Datei namens .htaccess, welche den in der index.php als Kommentar vorhanden Code enthält. Nachdem das getan ist, muss die Variable $url_prefix noch angepasst werden. Diese muss die URI enthalten, unter dem die index.php (bzw. deren übergeordneter Ordner) erreichbar ist. In meinem Beispiel ist dies /test/. wichtig ist der abschließende Slash! anschließend probiert man einfach mal die in der $urls-Variable angegebenen URLs aus.

Read more »

Bastelstunde: Schöne URLs

Durch Zufall bin ich heute auf einen Thread in meinem Forum gestoßen. Dieser Thread hat mich direkt dazu gebracht, eine Funktion zu erstellen, die aus Thread-Titel (oder ähnlichem) URL-taugliche Strings macht. Sie ist wahrscheinlich nicht 100%ig komplett und entspricht auch nicht Jedermans Geschmack, aber ich wollte sie trotzdem mal veröffentlichen. In Aktion kann man das Script hier bewundern.

Funktion zum Erstellen von URLs aus Thread-Titeln
  1. function make_urlname($name)
  2. {
  3.     /* Schritt 1: Kleinbuchstaben */
  4.     $name = strtolower($name);
  5.  
  6.     /* Schritt 2: Ausgewählte Zeichen ersetzen */
  7.     $name = str_replace(" ", "-", $name);
  8.     $name = str_replace("ß", "ss", $name);
  9.     $name = str_replace("ä", "ae", $name);
  10.     $name = str_replace("ö", "oe", $name);
  11.     $name = str_replace("ü", "ue", $name);
  12.    
  13.     /* Schritt 3: Alles andere entfernen */
  14.     $whitelist = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
  15.         'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
  16.         'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '+');
  17.     $name_tmp = "";
  18.     for ($i=0; $i<strlen ($name); $i++) {
  19.         $char = substr($name, $i, 1);
  20.         if (in_array($char, $whitelist)) {
  21.             $name_tmp .= $char;
  22.         }
  23.     }
  24.  
  25.     /* Schritt 4: Doppelte Leerzeichen entfernen */
  26.     $count = -1;
  27.     while ($count != 0) {
  28.         /* Irgendwie macht WP hier nur ein Minus draus, daher so… */
  29.         $name_tmp = str_replace('-' . '-', '-', $name_tmp, $count);
  30.     }
  31.  
  32.     /* Schritt 5: Leerzeichen (d.h. '-') am Anfang und am Ende entfernen */
  33.     return trim($name_tmp, '-');
  34. }

Update: Für eine Übersetzung in die Programmiersprache Python bitte auf mehr klicken. :-)

Read more »

Mal wieder: Die IDE

Da doch des Programmierers wichtigestes Tool, ist es mir durchaus wert, mal wieder was über die IDE zu schreiben. Ich bin schon über massenweise IDEs gestolpert, von einfach gehaltenen wie Kate oder Notepad++ bis zu Monstern wie Eclipse oder NetBeans. Aber irgendwie war das auf Dauer alles nicht das Wahre. Jetzt benutze ich schon seit fast einem Jahr Vim. Und bin wirklich begeistert, wie viele Möglichkeiten man doch haben kann, auch ohne mehrere Hundert Megabyte IDE mit sich rum schleppen zu müssen. Auch wenn besonders anfangs die Eingewöhnung mehr als umständlich war, so kann man doch nun schon eher von effizientem Arbeiten reden.

Heute habe ich meinem Terminal urxvt einen Patch spendiert, der es ermöglich statt nur 16 jetzt 256 Farbein zu verwenden. Ich war es einfach Leid, mir die sehr hässlichen Default Farben von vim anzuschauen. Besonders das so genannte “cyan” tat bei vollen CSS-Dateien schon richtig weh. Zwar bin ich mir jetzt noch nicht ganz sicher, welches Colorscheme ich verwenden werde, aber das ist wohl eher ein geringeres Problem. ;-) Hier jetzt mal ein Screenshot, wie es aktuell aussieht.

VIM

VIM

arpwatch gegen ARP-Spoofing

Schon vor einiger Zeit berichtete ich über die Möglichkeiten, die ARP-Spoofing so mit sich bringt. Da dies nun auch in meiner Schule immer populärer wird, habe ich mich nun dazu entschlossen zusammen mit den Informatik Lehrern meiner Schule dagegen vorzugehen. Letzte Woche hielt ich einen zweistündigen Vortrag vor einigen interessierten Lehrer und Angestellten der Schule. Dabei zeigte ich die unterschiedlichen Möglichkeiten, die man zusammen mit arpspoof, dnsspoof, Wireshark uvm. so hat. Fazit: Das muss geändert werden. Meine Schule bietet ein kostenlos für jeden Schüler im gesamten Has verfügbares WLAN-Netzwerk an, mit dem man mit den Schul-Laptops (oder so wie ich mit eigenen Laptops) das Webangebot der Schule nutzen kann. Im bisher noch komplett geswitchten Netzwerk kann man so nach Lust und Laune sniffen.

Also habe ich mich mal auf die Suche nach sinnvollen Gegenmaßnahmen gemacht. Dabei sind wir zum Entschluss gekommen, dass primär erstmal die Netzwerk Infrastruktur geändert werden muss. VLANs für verschiedene LAN Bereiche der Schule und für jeden Access Point verhindern schonmal ein ARP-Spoofing im gesamten Netz.

Eine weitere Maßnahme wird der experimentelle Einsatz  von “arpwatch“. Arpwatch überwacht den ARP Traffic im Netzwerk und ist in der Lage Änderungen im ARP-Cache zu erfassen. Sollte ein mutmaßlicher Angriff erfasst worden sein, so kann arpwatch den Administrator mit Hilfe einer E-Mail benachrichtigen. Dieses System habe ich in meinem heimischen Netzwerk bereits mit Erfolg getestet.

Allerdings ergeben sich trotzdem noch Haken. Leider bin ich bisher mangels Hardware bzw. Zugang nicht dazu gekommen auch nur irgendwas mit VLANs machen zu können. Sofern mich mein Verständis eines VLANs aber nicht täuscht, dürfte es nicht möglich sein, ARP-Anfragen über das VLAN hinweg zu senden. Folglich kann arpwatch nur Attacken in einem bestimmten VLAN auffassen – was natürich keinen Sinn mehr macht. Ein anderes Problem ist, dass wir noch nich genau wissen, ob und wie man solche Attacken nicht nur automatisch erfassen sondern auch direkt unterbinden kann. Ideal wäre es, einen böswilligen Teilnehmer direkt vom Access Point aus zu sperren, sodass dieser keine Verbindung mehr zum WLAN hat. Allerdings widerspricht das doch etwas dem ursprünglichen Sinn des gesamten Netzwerkes; nämlich den Schülern auch während des Unterrichts Internet zu Verfügung zu stellen. Andererseits ist Unterricht auch nicht für ARP-Spoofing gedacht.

Ich werde auf jeden fall noch einige Gedanken an diesem Problem verschwenden. Die Sache mal von der anderen Seite, d.h. aus Sicht des Netzwerkadministrators zu betrachten bringt ganz neue Probleme aber auch Vorteile mit sich. Ich hoffe weiterhin auf Unterstützung seitens der Lehrer, ohne deren Zustimmung ich wohl vorerst keine Möglichkeit haben werde, mit derartig großen Netzwerken Erfahrung zu sammeln.

IMAP, fetchmail und mehr

Nachdem ich nun schon lange nichts mehr geschrieben habe, berichte ich mal wieder über meinen stetig wachsenden Homeserver, der langsam anfängt echt nützliche Dinge für mich zu erledigen. ;-)

Seit einigen Wochen nun habe ich ein neues System, meine E-Mails abzurufen. Auf dem Server läuft nun das Programm fetchmail. Fetchmail ist ein Perl-Script, welches in regelmäßigen Abständen die Mails einer Mailbox abfragt und entsprechend weiterleitet. In meinem Fall checkt fetchmail alle fünf Minuten die Mails auf meinem GMX E-Mail Account und sendet sie an die lokal laufende Postfix Instanz. Wer es nicht weiß, Postfix ist ein Mailserver. ;-)

Postfix hat seit kurzer Zeit jetzt auch einen Spamfilter, genauer gesagt SpamAssassin. Dieser Spamfilter kann zwar auch Spam aussortieren, ich habe mich aber dazu entschieden, meinen Spam vorerst nur mit einer Änderung des Betreffs zu markieren. Damit möchte ich jetzt erst einmal testen, wie zuverlässig SpamAssassin Spam von nicht-Spam unterscheidet. Später dann kann ich Spam auch direkt löschen lassen. Bei meiner bisherigen Menge hingegen lohnt sich das noch nicht.

Um jetzt meine E-Mails von Postfix auf meine E-Mail-Clients zu bekommen, habe ich außerdem noch einen IMAP-Server installiert, genannt Courier. Courier erlaubt es mir, meine Ordnerstruktur für E-Mails und die E-Mails selbst direkt auf dem Server zu behalten und erleichtert mir somit die Synchronisierung der Mail-Clients enorm. Die gespeicherten Mails liegen außerdem noch in einer RAID1-Partition, was damit also auch die Sicherheit der Daten erhöht.

Neben Courier habe ich außerdem schon seit längerem noch einen Webserver laufen. Auf diesem Webserver befindet sich jetzt seit wenigen Tagen auch eine SquirrelMail-Installation. Mittels SquirrelMail ist die Mobilität meines E-Mail Accounts jetzt komplett. SquirrelMail ist ein Webinterface für IMAP-Accounts. Damit kann ich nun von jedem beliebigen Ort der Welt (Internetanbindung vorausgesetzt) meine E-Mails samt Ordnerstruktur abrufen. :-)

Vor lauter Langeweile habe ich heute außerdem noch einen kleinen Python-Bot hinzugefügt. Okay, zugegeben, eigentlich braucht man das nicht. Aber es ist auf jeden Fall mal wieder eine neue Erfahrung. Dieser Bot ist dauerhaft in meinen Jabber-Account eingeloggt und wartet mit Hilfe von FAM auf eine Änderung der Mailserver-Logs. Sollte er eine Änderung feststellen, werden die neuen Zeilen ausgelesen und auf ein Regular Expression überprüft. Konnte der RegEx angewendet werden, so werde ich via Jabber sofort über den Erhalt neuer Mails informiert. Das Ganze kann bei GMX-Mails natürlich bis zu fünf Minuten dauern, da fetchmail leider auf Polling zurückgreifen muss. Bei lokalen Mails hingegen bekomme ich fast eine Realtime-Benachrichtigung. Dinge, die die Welt nicht braucht, nicht wahr? ;-)

Was in ein Blog gehört und was nicht

Langsam ist es mal soweit; ich habe zu viel Freizeit und suche einen bezahlten Job. Da das hier ja mein Blog ist und ich demnach jeden mir beliebigen Inhalt dort reinstellen kann (Jaja, toll nicht? Ich kann sogar Monologe in Klammern führen, die die Leute beim lesen behindern und keinen interessieren! Herrlich!), dachte ich, ich frage hier mal ganz frech nach; auch, damit ich diesen Post bei Gelegenheit in Konversationen verlinken kann. ;-) Also falls jemand mal eine der folgenden Arbeiten anzubieten hat, möge sich derjenige bitte bei mir unter Kontakt melden. :-) Alles Weitere lässt sich dann besprechen.

  • Server-Installation / -Administration / -Einrichtung
  • Python-Programme
  • putzen, gegen Aufpreis auch nackt
  • PHP-Scripte (Webseiten; CGI / mod_php / etc.)
  • Rasen mähen / Schnee schippen / Schuhe putzen / etc.

« Newer EntriesOlder Entries »