Archiv

Archiv für März, 2012

Mehr Sicherheit für WordPress

29. März 2012 Keine Kommentare

Nachdem ich mich in letzter Zeit ein wenig mit SEO beschäftigt habe, und die Seite dahingehend etwas optimiert habe, kam mir nun das Thema Sicherheit in den Sinn. Aber da dies mein erster Blog ist, kann ich diesbezüglich auf keinen allzu großen Wissenschatz zurückgreifen, sondern muss mich an den Hinweisen und Empfehlungen anderer orientieren. Als hilfreich habe ich dabei die foldenden Seiten empfunden:

Ich werde aber selbst auf die aus meiner Sicht wichtigsten Punkte nochmal genauer eingehen. Ich gehe dabei von einer vorhandenen Installation mit der Version 3.3.1 aus.

 
1. Admin-Account sinnvoll benennen

Der bei der Blog-Installation angelegte Admin-Account sollte nicht admin heißen! Ideal wäre ein Name, der nicht im direkten Zusammenhang mit der URL oder dem Thema des Seite steht. Der eigene Nickname sollte ebenfalls nicht genutzt werden. Hat man sich daran schon bei der Installation gehalten, kann man den folgenden Absatz überspringen, andernfalls weiterlesen.

Lege einen neuen Benutzer mit Admin-Rechten an, vergebe einen passenden Namen und nutze ein sicheres Passwort. Anschließend mit dem neuen Account einloggen und den alten Account löschen. Man wird gefragt, was mit den vorhandenen Inhalten des Benutzers passieren soll, hier wählt man die Übernahme auf den neuen Account.

Wähle im Profil auf jeden Fall aus, dass der angezeigte Name nicht der Benutzername ist.

Eine Sache fehlt aber noch: die ID des Accounts in der Datenbank hat nun noch immer die 1 oder, wenn es keine anderen Benutzer gibt, die 2. Das wissen auch potentielle Angreifer. Daher sollte man diese ID auf einen zufälligen Wert ändern. Dazu läd man sich entweder ein Plugin wie Search & Replace, öffnet phpMyAdmin oder greift sonst wie auf die Datenbank zu.

Es muss in 4 Tabellen je ein Wert geändert werden, und zwar in wp_users, wp_usermeta, wp_posts und wp_links. Im folgenden SQL-Statement nehme ich exemplarisch die ID 194, diese Zahl sollte aber jeder selbst festlegen. Die aktuelle ID muss selbstverständlich auch angepasst werden.

UPDATE wp_users    SET ID          = 194 WHERE ID          = 1;
UPDATE wp_usermeta SET user_id     = 194 WHERE user_id     = 1;
UPDATE wp_posts    SET post_author = 194 WHERE post_author = 1;
UPDATE wp_links    SET link_owner  = 194 WHERE link_owner  = 1;

 
2. Tabellen-Präfix != wp_

Was bei der Installation dem Benutzernamen das admin ist dem Tabellen-Präfix das wp_. Auch hier sollte man eine Änderung in Betracht ziehen. Je nachdem, wie viele Tabellen man noch in seiner Datenbank hat, kann es sinnvoll sein, das Präfix mit bestimmten Zeichen beginnen zu lassen, um die Position der WordPress-Tabellen bei der Sortierung zu beeinflussen.

In der Basisinstallation umfasst dies 11 Tabellen, die ich nachfolgend schon mal als fertiges SQL-Statement vorbereitet habe. Das Präfix wird für dieses Beispiel auf 19a7Z4_ gesetzt.

RENAME TABLE wp_commentmeta        TO 19a7Z4_commentmeta;
RENAME TABLE wp_comments           TO 19a7Z4_comments;
RENAME TABLE wp_links              TO 19a7Z4_links;
RENAME TABLE wp_options            TO 19a7Z4_options;
RENAME TABLE wp_postmeta           TO 19a7Z4_postmeta;
RENAME TABLE wp_posts              TO 19a7Z4_posts;
RENAME TABLE wp_terms              TO 19a7Z4_terms;
RENAME TABLE wp_term_relationships TO 19a7Z4_term_relationships;
RENAME TABLE wp_term_taxonomy      TO 19a7Z4_term_taxonomy;
RENAME TABLE wp_usermeta           TO 19a7Z4_usermeta;
RENAME TABLE wp_users              TO 19a7Z4_users;

Wenn man Plugins installiert hat, können es auch durchaus mehr Tabellen sein. Diese müssen dann ebenfalls umbenannt werden.

Damit allein ist es aber noch nicht getan, es sind noch weitere Schritte notwendig, damit WordPress weiterhin fehlerfrei seinen Dienst verrichtet. In der Tabelle 19a7Z4_options und evtl. auch in 19a7Z4_usermeta müssen noch Einträge abgeändert werden.

UPDATE 19a7Z4_options  SET option_name = REPLACE(option_name,'wp_','19a7Z4_');
UPDATE 19a7Z4_usermeta SET meta_key    = REPLACE(meta_key,   'wp_','19a7Z4_');

Zu guter letzt muss die Datei wp-config.php bearbeitet werden, damit WordPress das neue Tabellen-Präfix auch bekannt ist.

$table_prefix  = '19a7Z4_';

 
3. Verzeichnisschutz für wp-content und wp-includes

In diesen Verzeichnissen liegt nichts, worauf ein Besucher direkt zugreifen müsste, außer vielleicht den Uploads. Daher sollte man sie auch entsprechend absichern. In jedes Verzeichnis kommt eine .htaccess mit folgendem Inhalt:

Order Allow,Deny 
Deny from all 
<Files ~ ".(css|jpe?g|png|gif|js|svg)$"> 
  Allow from all 
</Files>

Grundsätzlich wird der Zugriff auf alle Dateien in diesen Verzeichnissen verboten, mit Ausnahme bestimmter Dateiendungen, die man individuell anpassen und ergänzen sollte.

 
4. Verzeichnisschutz für wp-admin oder nur wp-login.php ?

Diese Frage ist auf Playground sehr gut beantwortet und erläutert worden. In vielen Anleitungen wird dazu geraten, den kompletten Ordner wp-admin via .htaccess und .htpasswd zu schützen. Da WordPress aber auch außerhalb des Backends auf die Dateien in dem Verzeichnis zugreifen kann, wäre ein reibungsloser Betrieb für normale Besucher nicht gewährleistet. Daher wird nur die Datei wp-login.php zusätzlich geschützt.

# protect wp-login.php
<files wp-login.php>
  AuthType Basic
  AuthName "Admin-Bereich"
  AuthUserFile /absoluter-serverpfad/.htpasswd
  require valid-user
</files>

Ein doppelter Login also. Muss man aber nur machen, wenn man seinen für WordPress gewählten Benutzernamen und das Passwort für unzureichend hält… aber ob dann ein zusätzlicher Schutz mit ähnlich schwachen Daten die Situation großartig verbessert, darf angezweifelt werden.

Aus meiner Sicht nicht notwendig, für Sicherheitsfanatiker aber garantiert eine tolle Option 😉

 
5. Umgang mit fehlerhaften Login-Versuchen

Man kennt es von vielen Seiten, x-mal das Password falsch eingegeben, schon kann man sich erstmal Kaffee kochen gehen oder gleich den Support anrufen. WordPress bietet diesen Luxus von Haus aus nicht, aber er lässt sich leicht über Plugins nachrüsten. Limit Login Attempts oder Login LockDown sind zwei Vertreter dieser Plugin-Gattung, die Konfiguration sollte selbsterklärend sein.

 
6. Fehlerhinweise auf der Login-Seite ausblenden

Es ist immer wieder schön, wenn man die Zugangsdaten vergessen hat, und einem die Seite genau sagt, wo der Fehler liegt. So macht es auch WordPress und sagt einem genau, ob der Benutzername oder nur das Passwort falsch sind. Für einen selbst eine tolle Hilfe, aber leider auch für jeden anderen, der Zugang haben will.

Daher sollte man auch hier entweder mit Plugins wie WSD security arbeiten oder selbst die entsprechenden Änderungen im Quelltext vornehmen. Bei iNove zeigt das Plugin jedenfalls keine Wirkung, aber das kann durchaus am Theme liegen.

Man öffne also die Datei functions.php im iNove-Verzeichnis und kopiere folgende Zeile an den Anfang der Datei:

add_filter('login_errors',create_function('$a', "return null;"));

 
7. Versionsnummer nicht mehr ausgeben

WordPress gibt seine aktuelle Versionsnummer immer als meta-Tag aus. Eine wertvolle Information, weiß man so doch gleich, ob WordPress aktuell ist und welcher Exploit am ehesten Erfolg haben kann. Also weg mit der Information. Auch zu diesem Zweck gibt es wieder viele Plugins (erneut sei WSD security genannt) oder die Möglichkeit, händisch vorzugehen.

Man muss dafür im Theme-Verzeichnis entweder in der header.php oder der index.php die Zeile, in welcher der meta-Tag erzeugt wird, löschen.

<meta name="generator" content="WordPress <?php bloginfo('version'); ?>" />

Da die Version aber auch im RSS-Feed angegeben wird, und einige Funktionen und Plugins diese Information auch benötigen, kann man die Versionsnummer leider nicht ganz löschen. Das Ausblenden via Plugin scheint daher am flexibelsten.

Zudem sollte man noch den Zugriff auf zwei Dateien unterbinden, in denen die Versionsnummer ebenfalls nachzulesen ist: liesmich.html und readme.html. Einige Seiten empfehlen deren Löschung, was man dann aber nach jedem Update wiederholen darf. Als eine langfristige Lösung scheint mir hier der Einsatz von .htaccess hilfreich zu sein.

# protect liesmich.html
<files liesmich.html>
  Order deny,allow
  deny from all
</files>

# protect readme.html
<files readme.html>
  Order deny,allow
  deny from all
</files>

 
Fazit

Mit ein paar relativ einfachen Aktionen kann man die Sicherheit von WordPress ein gutes Stück erhöhen, auch wenn es zugleich etwa schade ist, dass man als normaler Nutzer überhaupt an sowas denken muss, denn einige Dinge könnten bereits voreingestellt ausgeliefert werden.

Aber so hat man zumindest immer mal wieder etwas neues, um sich zu beschäftigen ^^

Spiele lieber als UK Import kaufen

28. März 2012 Keine Kommentare

Eigentlich schon länger ein bekanntes Thema unter denen, die sich für Spiele interessieren und gerne Schnäppchen kaufen. Der deutsche Markt ist einfach hoffnungslos überteuert, zumindest im Bezug auf Unterhaltungselektronik und Medien. Hier bezahlt man für ein Spiel schon mal bis zu doppelt so viel… Im Vergleich zu was?, mag man sich jetzt denken. Und wo ist der Haken bei den günstigeren Quellen?

Das schöne ist, es gibt häufig keinen Haken. Import Spiele bestellt man i.d.R. in England. Hier erhält man dann das Original für schmales Geld. Und während die deutschen Versionen in den meisten Fällen auch wirklich nur die deutsche Sprache beinhalten, gibt es in England sehr oft die multilinguale Version des gleichen Spiels, die dann natürlich auch deutsch enthält. Man bekommt also sogar mehr Inhalt für weniger Geld 😉

Der einzige Unterschied, woran man die Herkunft schnell erkennen kann, ist das Prüfzeichen der Altersfreigabe. Deutsche Spiele werden von der USK bewertet, das restliche Europa verlässt sich auf die PEGI, die natürlich eine abweichende Bewertung abgegeben haben kann.

So, da ich nun aber schon eingeräumt habe, dass sich der Import nicht bei jedem Spiel lohnt, wenn man Wert auf deutsche Sprachausgabe und / oder Untertitel legt, muss man natürlich auch wissen, wo man nachsehen kann, welches Spiel was beinhaltet. Und genau daran scheitern viele… so scheint es jedenfalls, wenn man sich auf den gängigen Schnäppchen Blogs und Foren umsieht.

Ich benutze zu diesem Zweck zwei Seiten, die sich bisher als recht zuverlässig erwiesen haben: UK-Importe.com für den schnellen Check oder aber die Online Games Datenbank, die deutlich präzieser ist, aber auch mehr Zeit für die Recherche einfordert.

Wenn man sich die Zeit nimmt, und vor dem Kauf erstmal prüft, ob es zu dem gewünschten Spiel nicht vielleicht eine günstigere EU-Version gibt, kann man leicht eine Menge Geld sparen.

PHP Kalender Teil 5

28. März 2012 Keine Kommentare

Ich komm gar nicht so oft zum schreiben, wie ich gerne würde. In letzter Zeit hat das Programmieren meine volle Aufmerksamkeit, und in der Überschrift sieht man auch gleich, worum es geht. Ich werkel endlich wieder am Kalender rum.

Mittlerweile ist das ganze auch funktionsbereit, es gab zwar anfangs einige Berechnungsprobleme dank der Zeitumstellungen, aber die haben sich lösen lassen und nun arbeitet das System wie gewünscht. Standardmäßig werden die Feiertage ausgegeben, in Schleswig Holstein arbeitsfreie Feiertage werden zudem farblich hinterlegt. Bei Bedarf können Urlaub, Geburtstage und Hochzeitstage hinzugefügt werden, allgemeine Termine stehen als nächstes auf der Todo-Liste, ebenso wie ein Login mit Session.

Zur Zeit habe ich den Kalender auf 3 Tage Rückblick und 15 Tage Vorschau eingestellt. Das bisherige Ergebnis kann im Testverzeichnis aufgerufen werden.

Mal schauen, ob ich da noch den Diskordianischen Kalender integriere. Ist zwar nur ne Spielerei, aber eine PHP-Portierung von ddate() habe ich bereits gefunden, also stände dem nichts im Wege.

Stadtradeln 2012 – Heide ist angemeldet

21. März 2012 Keine Kommentare

Letztes Jahr bin ich von einem Arbeitskollegen auf die Aktion aufmerksam gemacht worden, und habe mich mit Spaß an der Sache beteiligt. Vor einigen Tagen habe ich nun gesehen, dass sich die Stadt Heide auch für das diesjährige Stadtradeln wieder angemeldet hat.

Sehr schön, diesmal könnten auch ein paar Kilomenter mehr dazu beigetragen werden, denn bald gibts ein neues Fahrrad, mal abgesehen davon, dass ich meinen Wagen bereits vor Wochen verkauft habe. Wobei das eine mit dem anderen nichts zu tun hat 😀

Der Termin lautet: 17.08. – 06.09.2012

In diesem Zeitraum können die gefahrenen Kilometer über die Webseite Stadtradeln.de eingetragen werden. Man muss sich allerdings vorher einen Benutzeraccount anlegen und sich ggf. einem der vorhandenen Teams anschließen.

Zur Messung der gefahrenen Strecken gibt es bekanntlich mehrere Möglichkeiten: Schätzen, Fahrrad-Tacho oder GPS-Logger. Da ich ein kleiner Technik-Fan bin, kommt für mich natürlich nur Möglichkeit 3 in Frage ^^

Jetzt muss nur noch entschieden werden, wie geloggt wird. Zu Hause liegt ein miniHomer, den ich mir für den letzten Urlaub geholt hatte. Aber auch für das iPhone gibt es inzwischen viele kostenlose Apps, die dieser Aufgabe sehr zufriedenstellend nachkommen, wie beispielsweise Naviki.

Ich bin mal gespannt, wie viele Leute dieses Jahr mitmachen werden.

eMail Adresse vor Spam Crawlern schützen

13. März 2012 Keine Kommentare

In den letzten Jahren ist es äußerst kompliziert geworden, grade kleine private Webseiten richtig zu betreiben. Ein Impressum braucht zwar inzwischen jeder, aber die darin bereitzustellenden Informationen variieren je nach Art des angebotenen Inhaltes. Und zu allem Überfluss kann einem auch niemand mit Sicherheit sagen, ob die getroffenen Maßnahmen ausreichend sind oder nicht.

Ich bin zwar nicht sonderlich angetan davon, meine Adresse im Impressum der ganzen Welt mitzuteilen, aber sicher ist sicher, und außerdem sind diese Infos ja auch schon durch eine WHOIS Abfrage in Erfahrung zu bringen, von daher ist es eh egal.

Aber zumindest kann man dafür sorgen, dass man nicht auch noch in zahlreichen Spam-Verzeichnissen auftaucht, indem man die eMail-Adresse im Impressum maskiert.

 
HTML Sonderzeichen – ASCII Codes

Die einfachste Variante zur Verschleierung beliebiger Inhalte sind die HTML Sonderzeichen. Dadurch macht man es allerdings nur Menschen schwer, den eigentlichen Text zu lesen, für ein Programm macht es hingegen keinen Unterschied, ob Klartext oder Sonderzeichen verwendet werden.

mail@example.com
&#109;&#97;&#105;&#108;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;

 
JavaScript eMail Encrypter

Es gibt viele fertige Lösungen, die bekannteste nennt sich UnCryptMailto(). Dieser Funktion wird eine „verschlüsselte“ eMail Adresse übergeben, die dann einen gültigen mailto: Link daraus macht. Die Vorgehensweise ist dabei nicht sonderlich schwer, es wird einfach der ASCII-Code um ein Zeichen nach links oder rechts verschoben, fertig ist die verschlüsselte eMail.

Das ganze ist so simpel, dass davon ausgegangen werden darf, dass jeder moderne Webcrawler es ebenfalls beherrscht. Zumindest, solange man die Standardfunktion 1:1 aus dem Internet kopiert und nutzt.

Ein weiterer Nachteil besteht darin, dass die Mail-Adresse im Inhalt des a-Tags weiterhin lesbar ist. Die Hilfskrücke mail [at] example [dot] com sieht nicht nur häßlich aus, sie ist obendrein auch noch berechenbar und maschinenlesbar.

Wenn man sich die Funktion aber individuell anpasst, kann dies schon einen höheren Schutz gegen Crawler bieten. Man gebe der Funktion einen anderen Namen, benenne die Variablen um und nutze eine andere Verschiebung als ±1, schon hat man die 0815 Crawler abgehängt. Und statt mail [at] example [dot] com kann man ebensogut auch einfach „Schreib mir“ als Text nehmen.

Die ganze Lösung funktioniert allerdings nur, wenn JavaScript auch aktiviert ist. Ansonsten ist gar keine einache Kontaktaufnahme via Mail möglich, was im Impressum nicht zulässig sein könnte.

 
CSS

Einen weiteren Ansatz findet man im Internet unter dem Stichwort CSS. Man merkt, Not macht erfinderisch. Nur leider ziehen die Crawler auch immer nach. CSS bietet heutzutage wahrscheinlich auch schon keinen Schutz mehr, zumal es noch einige weitere Nachteile mit sich bringt. Ich liste es nur der Vollständigkeit halber mit auf.

Genauere Informationen zu den Möglichkeiten von CSS zum Schutz der eMail Adresse findet man beispielsweise auf www.ohne-css.gehts-gar.net.

 
Kombination aus JavaScript und CSS

Auf der Webseite http://1ngo.de habe ich schließlich eine interessante Kombination der bisher vorgestellten Techniken gefunden.

Standardmäßig verweist der Link auf ein Kontaktformular, und in seinem Text steht das Zeichen ∂ anstelle von @. Durch CSS wird das ∂ ausgeblendet und das @ eingefügt. Sollte ein Browser diese CSS-Funktion nicht beherrschen oder gar kein CSS ausführen können, so hat man immer noch eine gut lesbare eMail Adresse, die dann jedoch nicht 1:1 kopierbar wäre. Sobald CSS jedoch funktioniert, wird eine richtige eMail Adresse dargestellt, die auch kopiert werden kann.

Die JS-Funktion holt sich die Bestandteile der eMail Adresse aus dem Text und fügt sie zu einem gültigen mailto Link zusammen. Anschließend wird der vorgegebene Link zum Kontaktformular mit dem mailto Link überschrieben. Dadurch ist gewährleistet, dass auch bei deaktiviertem JavaScript noch ein nutzbarer Link vorhanden ist.

Für eine nochmals erhöhte Sicherheit empfehle ich nun noch eine Umbenennung der Funktionen und Variablen. Und wem das immer noch nicht genug ist, der kann jetzt noch die vorigen 3 Lösungsansätze mit diesem verbinden, Sonderzeichen in den Text streuen, mehr Ersätzungen durch CSS einbauen und die JavaScript „Verschlüsselung“ statt dem Auslesen der eMail Adresse aus dem Text verwenden.

Damit sollte man so ziemlich jedem Spambot einen Riegel vorgeschoben haben.

Origami – Erste Faltanleitung online

12. März 2012 Keine Kommentare

Nachdem ich mir letzte Woche Gedanken darüber gemacht habe, mit welchem Programm und in welchem Format man am besten Faltanleitungen erstellen könnte, kann ich diese Woche erste Ergebnisse präsentieren. Da der Modulwürfel und die Doppelpyramide noch nicht lange zurück liegen und deren Basismodulanleitung ohnehin unvollständig ist, habe ich es für meinen ersten Versuch genutzt. Ich hoffe, es ist mir gelungen, eine halbwegs verständliche Anleitung zu fertigen, die zum Nachbauen einläd: Basismodul.

SimpleXML statt mySQL

9. März 2012 Keine Kommentare

Dynamische Seiten sind in vielerlei Hinsicht praktischer als statische Seiten. Doch für so manche Anwendung ist der Einsatz einer Datenbank maßlos überdimensioniert, überhaupt nicht geeignet oder man hat noch nicht einmal einen Webspace mit Datenbankunterstützung.

Hier kommt XML ins Spiel. Man kann in einem XML-Dokument die ganze Struktur einer Datenbank nachbilden (natürlich nur mit aufgelösten Beziehungen), wobei ich insbesondere die m:n Beziehung in XML sogar als angenehmer empfinde, sowohl bei der Notation, als auch der Abfrage. Und dank fertiger Funktionen wie SimpleXML ist der Umgang mit XML-Dateien auch kaum komplizierter als eine DB-Abfrage.

Ich nehme als Beispiel mal eine kleine Linkliste.

 
Die Dokumentstruktur

Da man eine XML-Datei strukturieren kann, wie man möchte, sollte es nicht sonderlich schwer fallen, seine Ideen und Vorstellungen umzusetzen. Für eine einfache Linkliste wird ohnehin nicht viel benötigt: ein Linktitel, die URL und eine oder mehrere Kategorien, nach denen man Filtern kann. Vorteil gegenüber statischer Linklisten: keine redundanten Einträge.

<?xml version="1.0" encoding="UTF-8" ?>
<xfav>
  <entry>
    <title>SelfHTML</title>
    <url>http://de.selfhtml.org/</url>
    <category>HTML</category>
    <category>CSS</category>
    <category>JavaScript</category>
  </entry>
</xfav>

Als Datenbank wäre die Struktur schon etwas komplexer, da man die Kategorien als m:n Beziehung mit insgesamt 3 Tabellen umsetzen müsste.

 
Die Abfrage

Dank SimpleXML ist das Einlesen und Filtern der Einträge aus der XML-Datei keine große Herausforderung. Der Inhalt der Datei wird als mehrdimensionales Array zur Verfügung gestellt.

$xfav = array(
  "title"    => "SelfHTML";
  "url"      => "http://de.selfhtml.org/";
  "category" => array("HTML","CSS","JavaScript")
)

Die Ausgabe mit Filterfunktion könnte nun folgendermaßen aussehen:

<?php
$list = "HTML"; // all, none
$xfav = simplexml_load_file('xfav.xml');

if ($list == "none")
  echo "Bitte Kategorie auswählen!";
else {
  echo "Gewählte Kategorie: ".$list."<br>";
  foreach ($xfav->entry as $entry) {
    if ($list == "all")
      echo '<a href="'.$entry->url.'">'.$entry->title.'</a><br>';
    else {
      foreach ($entry->category as $category) {
        if ($category == $list)
          echo '<a href="'.$entry->url.'">'.$entry->title.'</a><br>';
      }
    }
  }
}
?>

Natürlich hat diese Variante gegenüber einer Datenbankabfrage nicht den gleichen Komfort. Möchte man in diesem Beispiel die Einträge zusätzlich zur Filterung auch noch alphabetisch sortiert haben, muss man sich die dafür nötige Sortierfunktion selbst erstellen.

Man sollte auch nicht außer Acht lassen, dass die Variante mit einer XML-Datei deutlich belastender für den Server ist. Es muss jedes Mal die komplette Datei eingelesen und in ein Array umgewandelt werden und beim Filtern muss auch jeder Eintrag einzeln geprüft werden. Es gibt weder Indexe noch Buffer oder Caches, die dem Server die Arbeit vereinfachen. Daher ist der Einsatz von XML als DB-Ersatz nur bei kleinen Datenmengen zu empfehlen.

Origami Faltanleitungen als SVG erstellen

5. März 2012 Keine Kommentare

Zur Zeit falte ich nach vorgegebenen Anleitungen, die ich mir aus dem Internet suche. Aber ich kann mir gut vorstellen, dass ich mich irgendwann auch mal daran versuchen werde, eigene Modelle zu entwerfen bzw. vorhandene zu modifizieren. Bis dahin brauche ich aber noch einiges an Übung, um überhaupt erkennen zu können, was man an welcher Stelle anderes machen müsste, um ein bestimmtes Ergebnis zu erhalten.

Ein Problem, dass mir bei der ganzen Falterei bereits jetzt aufgefallen ist: man vergisst recht schnell die Schritte, die man benötigt, um ein bestimmtes Modul zu falten. Zwar kann man die Erinnerung leicht auffrischen, wenn man sich die Anleitung erneut ansieht, aber was, wenn die Seite offline ist oder man den Namen des Modells nicht mehr weiß.

Man könnte sich die Anleitung ausdrucken oder zumindest kopieren. Aber da ich sie dann auch hosten und verlinken wollen würde, käme ich schnell mit dem Urheberrecht in Berührung. Geht ja gar nicht, dass man einfach ne fremde PDF auf der eigenen Seite online stellt… ich weiß, dass selbst die Idee zu einem solchen Modell bereits geschützt sein kann, hoffe aber, dass es da grundsätzlich keine Probleme gibt, wenn man Quelle bzw. Erfinder nennt und ggf. verlinkt.

So kam ich auf die Idee, mir die Anleitungen selbst zu erstellen.

 
Welches Pogramm? Und welches Format?

Dieser Frage musste zuerst nachgegangen werden. Da bei der Darstellung von Faltschritten Winkel eine sehr wichtige Rolle spielen, fallen schon mal so ziemlich alle einfachen Rastergrafik-Programme raus. Was bleibt, sind die großen, meist kostenpflichtigen Vertreter ala Photoshop. Und die Tatsache, dass man sich bei Rastergrafiken von Anfang an auf eine bestimmte Größe festlegen muss.

Es war also schnell klar, dass hier am besten mit Vektorgrafiken gearbeitet werden sollte. Aber mit was für einem Programm? Zuerst vielen mir die CAD-Programme ein, mit denen ich schon während der Ausbildung arbeiten durfte. Winkelangaben für exakte Zeichnungen sind für diese Programme eine Selbstverständlichkeit. Allerdings speichert fast keins davon in einem browserlesbaren Format.

Es musste also etwas anderes her. Die große Hoffnung war Inkscape, da es in dem freien, XML-basierten Format SVG speichert, dass von allen modernen Browsern dargestellt werden kann. Aber auch Inkscape war für mich nicht der Weisheit letzter Schluss, denn wie fast alle WYSIWYG-Editoren ist es einach viel zu beschränkt in seinen Möglichkeiten, auch wenn es vieles vereinfacht. Außerdem blähen solche Editoren den Code immer unnötig auf. Aber das Format passte schon mal.

Und nachdem mir letztlich bewusst wurde, dass man gar keine Winkel angeben muss, solange man sich Anfangs- und Endpunkt errechnet, fand ich auch ein geeignetes Programm für die Bearbeitung der SVG-Dateien, eins, das ich schon lange installiert hatte: Notepad++.

 
Die ersten Versuche

Die Suche nach einem geeigneten Tutorial war schnell beendet, aptico bietet ein sehr gutes und umfangreiches Tutorial auf seiner Webseite an, dass man auch zum Offline Arbeiten herunterladen kann.

Für die Winkelberechnung bediene ich mich fertiger Scripte, so spare ich Zeit und muss die Murmel nicht übermäßig strapazieren ^^

Ein erstes Ergebnis ist ein Faltmuster für das Basismodul, welches ich bereits für den Modulwürfel genutzt habe.

Sie benötigen einen SVG-Viewer

Das schöne ist, dass alle getesteten Browser (Opera, Firefox, Chrome) die Grafiken automatisch auf die im HTML-Code angegebene Größe skalieren, unabhängig von den Größenangaben in der SVG-Datei. Lediglich Safari auf dem iPhone patzt bei der automatischen Skalierung. Das ist aber ohnehin nur ein nettes Extra, denn wenn man standardkonform bleiben möchte, müsste man auch die SVG für unterschiedliche Auflösungen anpassen.

Und sollte es bei einigen Zoom-Stufen mal unscharf aussehen, dann liegt es nicht am Format, sondern am verwendeten Renderer 😉

Origami – Modulwürfel

2. März 2012 Keine Kommentare

Diese Woche konnte ein neues Modell zusammen gesetzt werden. OK, auch diesmal ist es nichts wirklich spannendes, es besteht aus grade mal 6 Basismodulen, und dann auch noch aus den selben wie auch schon die Doppelpyramide.

Aber mehr Zeit hatte ich nicht, und über 1,2 gefaltete Notizzettel pro Tag kann sich auf Arbeit auch definitiv niemand beschweren.

Die Anleitung  zum Zusammenbauen findet sich hier.

Der Autor hat zusätzlich noch eine Idee für all diejenigen parat, die sehr viel Zeit und Lust haben, weit über 100 Basismodule zu falten: ein Modulsuperwürfel.

WordPress – Google Maps

2. März 2012 Keine Kommentare

Für den vergangenen Sommerurlaub hatte ich eine Datenbank erstellt, in der alle potentiellen Reiseziele eingetragen werden konnten. Das Ergebnis konnte man sich in Google Maps anzeigen lassen, mit einigen einfachen Filter-Funktionen und eigenen Icons für die verschiedenen Kategorien (Schwimmbad, Höhle, etc.).

Das war zum einen ganz interessant, da ich mich so mal mit der Google Maps JavaScript API beschäftigen konnte, zum anderen aber auch überaus hilfreich bei der Planung einer groben Route durch Süddeutschland, die sich quasi automatisch aus der Verteilung der POIs ergab.

Für die Einbindung im Blog gibt es nun verschiedene Möglichkeiten. Für welche man sich entscheidet, hängt von den Anforderungen ab, die man an die Karte stellt, sowie von den eigenen Programmierkenntnissen.

 
1. HTML-Code zum Einbetten in eine Webseite

Die wohl einfachste Lösung bietet Google selbst an. Man besucht einfach die Google Maps Webseite, gibt den Ort oder die Route ein, die man angezeigt haben möchte, und klickt dann neben dem Drucker-Symbol auf Link.

maps

Entweder kopiert man sich nun gleich den Code zum Einbetten, oder klickt auf den Link zum Anpassen, wo man noch die Kartengröße und, sofern man sich mit den Parametern auskennt, noch weitere Anpassungen vornehmen kann.

 
2. WordPress Plugins

Die zweite Möglichkeit, Karten schnell und unkompliziert einzubinden, stellen Plugins dar. Diese bieten unterschiedliche Funktionen, man muss also ein wenig schauen, welches der Plugins für einen in Frage kommt.

Für mich war wichtig, dass die Maps API v3 genutzt wird und man die Marker auch abseits vom vorgegebenen Straßennetz platzieren kann. Diese Anforderungen wurden von MapPress Easy Google Maps erfüllt. Außerdem ist es bei diesem Plugin möglich, mehr als einen Marker zu setzen, den Zoom-Level und die Kameraposition zu speichern sowie sich die Route von einem selbst definierbaren Startpunkt zu einem der Marker berechnen zu lassen. Allerdings kann das Plugin keine vorgegebenen Routen anzeigen.

 
3. Einbettung über benutzerdefinierte Felder ohne iframe

Ich habe bereits über die benutzerdefinierten Felder geschrieben und werde irgendwann mal testen, ob die Einbindung von Karten auch auf diesem Wege funktioniert.

Theoretisch benötigt man zusätzlich zu den Modifikationen zum Einfügen von eigenen Scripten auch noch eine Modifikation, um ein onload-Event im <body> platzieren zu können. Dadurch ergibt sich aber auch schon eine Einschränkung: Diese Variante kann nur auf Seiten genutzt werden, aber nicht in Artikeln…außer man schafft es, die Kartendarstellung in der Artikel-Übersicht zu unterbinden.

Außerdem wäre es wichtig, in den benutzerdefinierten Feldern ausführbaren PHP-Code einfügen zu können, da diese Variante ansonsten nicht sinnvoll genutzt werden könnte.