Konsistenz

2009 28 Sep

Konsistenz im weiteren Sinn bezieht sich auf den logischen, hermeneutischen, funktionalen oder ästhetischen Bestand eines Gegenstandes (z. B. eines Textes, eines Begriffs, einer Methode oder Technik, eines Werkzeugs oder eines Kunstwerks), der in sich stimmig ist, Sinn ergibt und keine inneren Widersprüche oder Spannungen aufweist, die seine Einheit gefährden. (Quelle Wikipedia)

Im Bezug auf Software bedeutet das, dass die Software sich an einer Stelle in einer bestimmten Art und Weise und an anderer (ähnlicher) Stelle analog/ähnlich dazu verhält – eben konsistent.

Wie wichtig Konsistenz ist, zeigt mal wieder folgendes Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
  <head>
    <title>Meine Test-Seite</title>
    <script type="text/javascript" src="js/jquery-1.2.6.pack.js"/>
    <script type="text/javascript">
    <!--
      $(document).ready(function() {
        alert("Hallo Welt");
      });
    // -->
    </script>
  </head>
  <body>
  </body>
</html>

Diese simple HTML-Seite soll per JavaScript/jQuery “Hallo Welt” ausgeben. Dummerweise tut sie das aber nicht trotz ihrer Validität.

Nach stundenlanger Suche bin ich dann auf den Fehler gestoßen. Man darf den <script>-Tag (Zeile 4) nicht als Einzel-Tag schreiben, sondern muss ihn mit schließendem Tag schreiben. Der Quellcode sieht dann also so aus und funktioniert damit:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
  <head>
    <title>Meine Test-Seite</title>
    <script type="text/javascript" src="js/jquery-1.2.6.pack.js"></script>
    <script type="text/javascript">
    <!--
      $(document).ready(function() {
        alert("Hallo Welt");
      });
    // -->
    </script>
  </head>
  <body>
  </body>
</html>

Dieses Verhalten (das im Firefox 3.5 und im Internet Explorer 8, aber nicht im Opera 9 auftritt) ist inkonsistent, denn überall sonst gilt (nur halt bei <script> nicht):

<tag></tag> = <tag/>

Und es ist frustrierend nach so einem Fehler zu suchen, zumal er nirgendwo als Fehler angezeigt wird.

24.September 2009

Dual-Screen Tablet PC

2009 24 Sep

Mal wieder was für Feature-Freaks wie mich: Microsoft bastelt derzeit an einem Dual-Screen Table-PC namens “Courier” rum. Das Gerät sieht aus wie ein Buch, wobei die beiden Bildschirme die linke und rechte Seite des Buchs bilden. Momentan handelt es sich dabei allerdings nur um einen Prototypen; trotzdem ziemlich cool.

Microsoft's Courier Tablet-PC

Via Gizmodo

3.September 2009

Es gibt ja viele Dinge,…

2009 03 Sep

… aber manche sind einfach echt kurios. Hier eine E-Mail von der Subversion-Mailing-List:

Running SVN Client on 16-bit MS-DOS machine

I can’t tell for certain, though it looks this way, but can I NOT run Subversion on a 16-bit MS-DOS machine? It’s not a Windows box opened to a command prompt. It’s pure MS-DOS OS. Are there any tools that will allow me to do this? Quelle

26.July 2009

RSS Aggregator

2009 26 Jul

SimplePie Logo Today I was looking for a way to aggregate multiple RSS feeds into one. After some digging I found SimplePie. It’s a small PHP library for parsing and constructing RSS feeds.

I’ve written this small PHP script here that demonstrates how to aggregate two RSS feeds. You can adopt it very easy by editing the constants at the top of the file.

To use SimplePie you have to download the package from their homepage. From this package you only need the file “simplepie.inc”. (You may also want to execute “compatibility_test/sp_compatibility_test.php” once in your browser.) Additionally a directory “cache” must be created (and writable for PHP scripts).

All put together you should end up with directory content like this:

  • rss.php (my RSS script)
  • simplepie.inc
  • cache/

Download “rss.php”

21.July 2009

Python ist krass

2009 21 Jul

Momentan bin ich “gezwungen”, Software in Python zu schreiben. Und nach einigen Programmierer-Tagen bin ich immer mir noch nicht sicher, ob ich Python mag oder nicht. Einige Sachen sind cool, andere nicht und allzu häufig muss ich feststellen, dass Python ein riesiger Flickenteppich ist. (Allein schon, dass es “alte” und “neue” Klassen gibt (von der Syntax) und dass diese nicht kompatibel sind, spricht Bände.)

Heute bin ich dafür mal wieder auf ein Konstrukt gestoßen, dass krass und cool zugleich ist:

for i in foo:
  ...
else:
  ...

Es gibt hier also for-Schleifen mit else-Block. Und zwar wird der else-Block ausgeführt, wenn die Schleife komplett durchgelaufen ist (d.h. nicht durch ein break vorzeitig beendet wurde). Ziemlich praktisch.

Referenz

20.July 2009

Firefox WebDeveloper-Profil

Neben den Add-ons für den täglichen Bedarf bietet Firefox auch zahlreiche Add-ons, die speziell für Webentwickler nützlich sind, allen vorran: Firebug.

Neues Firefox-Profil anlegen

Da man aber meistens diese Add-ons nicht während normaler Surfsitzungen benötigt, empfiehlt es sich, extra für die Web-Entwicklung ein eigenes Firefox-Profil anzulegen.

Zunächst führt man folgenden Befehl aus (ohne “no-remote” müssen vorher alle Browser-Fenster geschlossen werden):

  • Windows: "c:\Programme\Mozilla Firefox\firefox.exe" -no-remote -P
  • Linux: firefox -no-remote -ProfileManager
  • MacOSX: /Applications/firefox.app/Contents/MacOS/firefox -no-remote -P

Firefox Profilmanager

Hiermit erstellt man ein neues Profil (im Folgenden nenne ich es “WebDev”) über “Profil erstellen” und beendet dann den Profilmanager.

Hinweis: Es empfiehlt sich, die Option “Beim Starten nicht nachfragen” aktiviert zu lassen und stattdessen eine Verknüpfung (o.ä. unter Nicht-Windows-Betriebssystemen) für das Profil zu erstellen.

Um Firefox jetzt mit dem neuen Profil zu starten, ruft man Firefox wie oben auf, nur dass man jetzt noch zusätzlich den Profilnamen spezifiziert. Unter Windows sähe der Aufruf dann z. B. so aus:

"c:\Programme\Mozilla Firefox\firefox.exe" -no-remote –P "WebDev"

Für weitere Informationen und Problemlösungshilfen, siehe hier.

Hinweis: Es empfiehlt sich evtl., das Icon für die Verknüpfung auszutauschen. Ich verwende hierfür dieses Iconset:

firefox-icon

Download gibt es hier und hier.

Web-Entwickler Add-ons

Im Folgenden findet sich eine Liste aller Firefox-Addons, die ich speziell in dem Web-Entwickler-Profil verwende.

  • Firebug: Schlechthin das Add-on für Web-Entwickler. Bietet u.a. die Möglichkeit, sich den momentan angezeigten DOM-Baum und für jeden Knoten dessen CSS anzusehen. Es gibt sogar noch Add-ons für Firebug (sog. Add-on Add-ons ;) ).
    • Page Speed: Analysiert eine Seite und gibt Vorschläge, wie deren Geschwindigkeit verbessert werden kann. (Im Gegensatz zu YSlow funktionierte dieses Add-on bei mir auf anhieb. YSlow konnte ich nicht zum Laufen brignen.)
    • Firecookie: Zeigt die Cookies und deren Werte an, die zur momentan angezeigten Seite gehören.
    • SenSEO: Zeigt ein paar Hinweis zur Suchmaschinenoptimierung der aktuellen Seite an.
    • CodeBurner: Zeigt für HTML-Tags und CSS-Attribute an, von welchen Browsern diese wie unterstützt werden. Dazu muss entweder ein Element im Tab “HTML” oder “CSS” rechtsangeklickt und dann “Look up …” gewählt werden – oder man klickt (nachdem man ein mal auf den HTML-Tab geklickt hat) auf den Tab “Reference”.
  • Web Developer Toolbar: Eine Toolbar mit diversen, nützlichen Werkzeugen.
  • JSView: Bietet einen Toolbar knopf, mit dem man sich schnell die CSS- und JS-Datei, die zur momentan angezeigten Seite gehören, anzeigen lassen kann.
  • MeasureIt: Bietet die schnelle Möglichkeit, die Größe von Elementen auf der Seite auszumessen. Das “Maßband” wird über einen Knopf unten links in der Statusleiste aktiviert.
  • ColorZilla: Bietet eine Pipette zum Ermitteln eines Farbwerts auf einer Webseite. Wird genau wie MeasureIt in der Statuszeile aktiviert.
  • IE Tab (nur Windows): Zeigt im Firefox auf Wunsch die aktuelle Seite mit der Internet-Explorer-Engine an. Nützlich für’s Testen der Seite.
  • FireShot: Erzeugt Screenshots der Seite, die gerade betrachtet wird. Außerdem können dieses Screenshots dann mit Anmerkungen versehen werden.

Dazu kommen noch die obligatorischen Add-ons:

17.July 2009

Mainzelmännchen go iPhone

2009 17 Jul

Dass das iPhone sehr beliebt ist, wissen wir ja bereits. Aber dass es sooo beliebt ist, dass es sogar die Mainzelmännchen benutzen, wusste ich noch nicht *lach*.  Hier der Beweis:

YouTube Preview Image
13.July 2009

Falsche Zone für Netzlaufewerke nach Update auf IE8

2009 13 Jul

IE8 sucks. Sicherlich keine absolut objektive Meinung, aber fragt mal die Leute, die Webseiten entwickeln, was sie vom Internet Explorer halten.

Nach dem ich vor einiger Zeit auf den IE8 geupdatet hatte, da dieser jetzt als "Wichtiges Update" gehandelt wird, bin ich auf ein sehr seltsames Problem gestoßen (System ist übrigens Windows XP SP3):

Sicherheitswarnung beim Öffnen einer Textdatei

Ich meine, ich kenne das ja irgendwie von Anwendungen – aber warum zum Geier kommt das beim Öffnen einer Textdatei? Welcher Schaden könnte denn von dieser Datei wohl ausgehen? Die Datei liegt übrigens auf einem ganz normalen Netzlaufwerk; lokal funktioniert alles wunderbar.

Etwas genervt habe ich das Internet dann nach diesem Problem durchforstet, hab aber nix hilfreiches gefunden. Heute ist mir dann folgendes in der Statuszeile meines Explorers (wohl gemerkt – nicht Internet Explorer, sondern der Windows Explorer) aufgefallen:

Zone im Windows Explorer

WTF? Wieder das Internet befragt, wieder nichts gefunden. Durch Zufall bin ich dann aber auf die Lösung gestoßen. Sie findet sich unter "Systemsteuerung" -> "Internetoptionen" (was auch immer das da drin zu suchen hat…) ->"Sicherheit". Dort wählt man "Lokales Intranet" aus und klickt auf "Sites".

Internetoptionen

Hier muss die Option "Intranetnetzwerk automatisch ermitteln" deaktiviert werden, da sie einfach nicht funktioniert. Alle anderen Optionen bleiben aktiviert.

intranet-einstellungen

Jetzt alles mit "OK" bestätigen, dann Windows Explorer Fenster neu geöffnet (F5 bringt evtl. nichts) et voila – alles wieder so, wie es sein soll.

Korrekte Zone im Windows Explorer

11.July 2009

Monkey Island 1 – Special Edtion

Monkey Island 1 kommt? Huh? Ja, irgendwie ist Lucas Arts momentan auf dem Trichter, Monkey Island wieder aufleben zu lassen. Neben einem neuen Teil von Monkey Island, der in Episoden (ähnlich Sam & Max) herausgebracht wird, gibt es auch ein komplettes Remake des ersten Teils.

Der Episoden-Titel heißt “Tales of Monkey Island” und wird wohl in fünf Episoden nach und nach erhältlich sein. Leider ist die Grafik in meinen Augen nicht so wahnsinnig toll gelungen. Sie ist “nett”, aber mehr leider auch nicht.

talesofmi_guybrush_screenshot

Weitere Screenshots gibt’s hier. Aber wenigstens stimmt der Humor, wie dieses Video zeigt:

YouTube Preview Image

Viel interessanter finde ich da das Remake des ersten Teils. Denn hier stimmt die Grafik und alles drumherum einfach. Für die Special Edition wurden alle Hintergründe anhand des Originals neu gezeichnet. Zum Vergleich mal hier die erste Szene des Spiels:

old

new

Mehr Screenshots (zum Vergleichen) gibt’s hier. Und hier gibt’s noch ein Video, was etwas mehr vom Spiel zeigt; einfach nur cool!

Update: Habe gerade herausbekommen, dass das Spiel ab dem 15. Juli wohl für 10$ bei Steam gekauft werden kann. Na, wenn das mal nichts ist.

6.July 2009

Hype, Hype,…

2009 06 Jul

Ich weiß, schon ein alter Hut, aber trotzdem sehr cool: Google Wave. So sähe – zumindest lt. Google – die Email aus, wenn sie heute erfunden werden würde. Kann’s kaum noch erwarten, bis das endlich public wird.

Wer nicht weiß, was Google Wave ist – hier ist ein Video, in dem Google Wave vorgestellt wird. Für alle Nicht-Programmierer reichen sicherlich die ersten 50 Minuten. Dafür sind die aber gut gefüllt.

YouTube Preview Image

PS: Google ist natürlich der einzige, der 90 Minuten Videos auf YouTube einstellen darf ;)

17.June 2009

Die Geschichte der Programmiersprachen

Als Erweiterung zu meinem letzten Artikel über Programmiersprachen hier mal eine vollständige Liste:

A Brief, Incomplete, and Mostly Wrong History of Programming Languages

Meine Favoriten (in chronologischer Abfolge sind):

1940s – Various "computers" are "programmed" using direct wiring and switches. Engineers do this in order to avoid the tabs vs spaces debate.

1970 – Guy Steele and Gerald Sussman create Scheme. Their work leads to a series of "Lambda the Ultimate" papers culminating in "Lambda the Ultimate Kitchen Utensil." This paper becomes the basis for a long running, but ultimately unsuccessful run of late night infomercials. Lambdas are relegated to relative obscurity until Java makes them popular by not having them.

1972 – Alain Colmerauer designs the logic language Prolog. His goal is to create a language with the intelligence of a two year old. He proves he has reached his goal by showing a Prolog session that says "No." to every query.

1983 – Bjarne Stroustrup bolts everything he’s ever heard of onto C to create C++. The resulting language is so complex that programs must be sent to the future to be compiled by the Skynet artificial intelligence. Build times suffer. Skynet’s motives for performing the service remain unclear but spokespeople from the future say "there is nothing to be concerned about, baby," in an Austrian accented monotones. There is some speculation that Skynet is nothing more than a pretentious buffer overrun.

1987 – Larry Wall falls asleep and hits Larry Wall’s forehead on the keyboard. Upon waking Larry Wall decides that the string of characters on Larry Wall’s monitor isn’t random but an example program in a programming language that God wants His prophet, Larry Wall, to design. Perl is born.

27.May 2009

Spaß mit Google

2009 27 Mai

Es ist doch immer wieder praktisch, wenn man eine Vorlesung bei jemandem hört, der mal für Google gearbeitet hat.

Wusstet ihr, dass Google einen Operator "~" unterstützt? Damit kann man nach ähnlichen Begriffen suchen lassen.

Gebt z.B. mal "~car" bei Google ein. Als Ergebnisse kommen dann nicht Einträge, die das Wort "car" enthalten, sondern auch verwandte Begriffe.

Das Ganze ist sicherlich nicht 100%ig ausgereift, aber sicherlich an der einen oder anderen Stelle ganz hilfreich.

Hier gibt’s noch ein paar weitere Kommandos. Ganz praktisch finde ich die Suchanfrage "100 dollars in euro" zum Umrechnen von Wechselkursen. Es gehen aber auch andere Umrechnungen, wie z.B. "451 fahrenheit in celsius".

21.May 2009

Braid

Bin heute auf das Jump-n’-Run-Spiel Braid gestoßen. Ich hab es zwar (noch) nicht getestet, aber das sieht echt cool aus. Das ganze Spielprinzip beruht daraus, dass der Hauptcharakter die Zeit manipulieren kann. Hier der offizielle Trailer:

YouTube Preview Image

Besonders die Musik hat es mir angetan. Hier könnt ihr euch den gesamten Soundtrack anhören.

Update: Habe das Spiel jetzt mal ausprobiert und muss sagen, dass meine erste Einschätzung dem Spiel nicht gerecht wurde. Das Spiel ist eher ein Knobelspiel als ein Platformer; und die Rätsel sind immer verschieden, was insb. in dem Zurückdrehen der Zeit begründet ist. Einfach ein geniales Spielkonzept.

20.May 2009

Was es nicht alles gibt

2009 20 Mai

Aus einem Artikel bei WinFuture.de:

Der Suchmaschinenbetreiber Google will zukünftig verhindern, dass wichtige Mitarbeiter zur Konkurrenz abwandern. Dazu wurde eine Software entwickelt, deren Algorithmus wechselwillige Mitarbeiter ausfindig macht.

19.May 2009

Quellcode-Kommentare

Ich hab beim MfG diese tolle Seite mit lustigen Quellcode-Kommentaren gefunden.

Mein Favorit ist dabei folgender Kommentar:

// 
// Dear maintainer:
// 
// Once you are done trying to 'optimize' this routine,
// and have realized what a terrible mistake that was,
// please increment the following counter as a warning
// to the next guy:
// 
// total_hours_wasted_here = 16
//