Ich habe auf meiner Homepage eine kleine HTML-Seite / „Web-App“ wiederentdeckt. Sie soll „Doubletten“ (Plagiate, doppelter Content ect.) eines vorgegeben Textes im Internet finden.

Das geht ganz einfach: auf der Doublettenfinder Seite einfach den Vorgabe-Text in die Textbox kopieren und auf „prüfen“ klicken. Dann werden bestimmte Wörter aus dem Text ausgewählt (die Anzahl kann in der Drop-Down-Box eingestellt werden) und eine Google-Suche wird vorgenommen. Die „exakt“-Checkbox bestimmt, ob alle Suchbegriffe in den Treffern vorkommen sollen. In meinem Experimenten ist es meist besser, sie aktiviert zu lassen, wenn jedoch kein oder kein gewünchster Treffer angezeigt wird, dann mal deaktiviert probieren.

Der dahinter liegende Algorithmus zur Auswahl ist einfach: es sortiert die in der Textbox enthaltenen Wörter nach ihrer Häufigkeit und Wortlänge. Dann werden die seltesten, längsten Wörter ausgewählt und als Suchbegriff ausgewählt. Die Idee ist, dass diese dann spezifische Fachbegriffe sind. Das klappt im Deutschen übrigens besser als im Englischen, Stichwort: zusammengesetzte Substantive.

Obwohl dieser Ansatz recht naiv ist, funktioniert er jedoch erstaunlich gut. Wenn man per Hand noch ein zwei themen-relevante Such-Wörter hinzufügt, greift man der Sache unter die Arme.

Update: Ich werde mal probieren, erst nach der Wortlänge und dann nach der Häufigkeit zu sortieren. Mal sehen, wie dann die Ergebnisse sind.

Update 2: Ich habe das mal eingearbeitet. Die Unterschiede sind nicht so groß. Aber trotzdem interessant, da mal ein bisschen rumzuprobieren.

Andere Ansätze: (frei und ohne zusätzliche Software)

  • plagiatefinder.de zerlegt den Text in Wortgruppen und sucht diese im Internet. Dabei entstehen wesentlich mehr Google-suchen, die man „bewerten“ muss.
  • SeeSources.com erläutert die Vorgehensweise nicht. Spuckt aber relevante Links und ähnliche Textstellen aus
  • PlagAware deutsprachig, Einschränkung auf 25 Abfragen pro Monat und IP

Unter dem Titel „Why Coffee is good for Developers“ hielt Moritz Grauel einen Talk über CoffeeScript. Er brachte den Vortrag locker bis lustig rüber und scheint beispielsweise ein Fan von oatmeal.com zu sein.

CoffeeScript will „Javascript minus (einigen) WTFs“ sein, von denen Moritz einige präsentierte (via wtfjs.com). Genannt wurde z.B.

  • Operator „==“ mit type coercion, „===“ ohne (anscheinend haben sich bei der EcmaStandardisierung die Microsoft Jungs (und Mädels) gegen die Netscape Jungs (und Mädels) durchgesetzt)
  • Zahlen sind generell floats (einfache Genauigkeit)
  • automatische Typkonvertierung insbesondere Strings und Zahlen sind nicht immer Sinnvoll
  • der inkonsequente Array-Konstruktor (new Array(5) erstellt ein 5-elementiges Array, new Array(4,5) erstellt ein Array [4,5]), ich würde für gleichzeitige Deklaration

Als Metapher sehr schön ein Foto mit den Büchern „Javascript Definitive Guide“ und „Javascript the good parts“ nebeneinander – ersteres 5x so dick wie zweiteres.

Allerdings würde ich sagen, was auf der Folie for „Javascript sucks“ stand: learn your tools. Nur weil Javascript im Namen „java“ hat und die Syntax wie Java/C/C# you-name-it aussieht, ist sie doch vom Konzept her um einiges entfernt. Siehe auch JavaScriptRocks . Bei dieser Gelegenheit kann ich auch die Hintergrundartikel zum Thema „Closures in Javascript“ empfehlen, weil er auf das Innenleben von JS eingeht.

Wie auch immer, Moritz kündigt Coffeescript als „Javascript without the fail“ an. Coffeescript kompiliert zu lesbarem Javascript (es gibt also eine einfache Exit-Strategie, falls man Coffeescript wieder loswerden will: einfach javascript generieren und damit weiterarbeiten). Der Nachteil ist dabei, dass Debuging etc. nur anhand des generierten JS Codes geht.

Die CS Syntax hat significant whitespace, d.h. geschweifte Klammern und Semikolons fallen weg, runde Klammern bei Funktionsaufrufen sind optional, das function keyword wird durch „->“ ersetzt. Ein schöner Vergleich einer jquery-Konstruktes in JS und in CoffeeScript. Ich finde es zumindest gewöhnungsbedürftig, insbesondere wenn die runden Klammern bei Funktionsaufruf wegfallen, dann aber die Argumente der anonymen Funktion in Klammern stehen.

Für weitere Features siehe Vortrag. Bei meiner Recherche ist mir aufgefallen, dass es seit Javascript 1.7 auch list comprehension für Arrays gibt, lt. Wikipedia dies aber nur durch Mozilla unterstützt wird.

Insgesamt schreibe ich wahrscheinlich (noch) nicht genug JS, um von CS zu profitieren.

Interessant fand ich, dass Moritz weder PPT noch Keynote sondern ein HTML/CSS/JS basiertes Präsentationsprogramm namens impress.js benutzt, bzw. seines eigenen CS port. Er hat dazu ein paar Anmerkungen gemacht. Die Animationen fand ich beeindruckend. In der Präsentation sah das flüssig aus. Auf meinem Rechner ruckelt es allerdings. Er gab gleich den Hinweis, dass die Präsentation vollständig nur mit einem aktuellen Webkit-Browser funktioniert, aber auch mit anderen Browser anzusehen sei. Bei Chrome 17 meinte die Präsi, dass nicht alle Funktionen unterstützt werden, nach Upgrade auf Chrome 18 kam die Meldung nicht.

Alles in allem ein interessanter Vortrag.

Update: Moritz verweist auf/empfiehlt einen Google Tech Talk Javascript: The Good Parts von Douglas Crockford.