Plagiate in (Java) Quellcode finden

fadingLeider scheint bis jetzt niemand eine wirklich freie, gute und lokale Code-Plagiats-Applikation entwickelt zu haben. Ich wäre sehr gespannt, was AST-Vergleiche bringen würden. Nundenn, ein erster und unaufwändiger Vergleich von Quellcode (und bei Programmierprüfungen eventuell mit alten Lösungen) kann schon vieles zeigen. Die einfachste Variante, die ich bis jetzt gefunden habe, ist der CPD copy-paste-detector, der Teil des PMD-Packages ist.

Der CPD braucht nicht installiert zu werden: Herunterladen, entpacken und den Pfad bei den Einstellungen in Control Panel\System and Security\System\Advanced system SettingsAdvancedEnvironmentVariables setzen.

Pfad Setzen in Windows

Pfad Setzen in Windows

Danach eine Kommandozeile öffnen den Computer um Folgendes bitten:

cpd --encoding utf8 --minimum-tokens 200 --files E:\Pruefungen\IB13a\VMKN-226\files > similarities.txt

Das kann auch auf eine Sprache eigegrenzt werden:

cpd --language java --encoding utf8 --minimum-tokens 200 --files E:\Pruefungen\IB13a\VMKN-226\files > similarities.txt

Nun stehen in der Datei similarities.txt die Teile der Dateien, die gleich sind. Weitere Optionen können auf der CPD-Page gefunden werden.

Klauen ist auch nicht mehr wie früher…

Das Arsenal an Geräten, die ein durchschnittlicher Geek heutzutage mit sich herumschleppt, hat bald den Gegenwert eines kleinen Autos. Wenn früher ein Rucksack geklaut wurde (oder, hmm, ehrlich gesagt, zerstreut wie immer „irgendwo liegen gelassen“ wurde), dann war der Rucksack selbst oftmals das teuerste Ding des ganzen Verlustes. Heutzutage – mit Laptop, Pad, Phone, … – geht ein ganzer Serverraum verloren. Meine Wenigkeit ist so was von Monotasking, dass ich oftmals mit atmen, laufen, verdauen und transpirieren schon an die Grenze komme (darum spreche ich so wenig, weil dann mein Herz aussetzen würde!), wie soll ich dann noch an die 1001 Geräte denken, die ich irgendwie zusammen wischen und mitnehmen sollte? Da ich körperlich auch nicht unbedingt einem Standard-Hulk entspreche, muss ich wohl gegen Diebstahl andere Massnahmen ergreifen.

Vorsorge ist besser als Heulen und Therapie im Nachhinein, darum habe ich jetzt, wo alle Geräte noch um mich herum sind, ein paar Dinge überlegt. Ich kann das nicht genug gewichten: Man sollte etwas tun, bevor die Geräte weg sind.

Weiterlesen

Automatischer Spell-Check in KMail

Als Ortogravieh-Experte bin ich sehr froh für die roten Linien unter den falsch geschriebenen Wörtern, man will ja nicht schon beim ersten Mail den Eindruck eines Dorftrottels hinterlassen :). Leider schaltet sich diese sehr nützliche Funktion bei KMail immer mal wieder aus.

Was bisher geholfen hat:

  • Folgende Pakete müssen installiert werden:
    • spell
    • ispell
    • Lokale Dictionaries: ingerman, inswiss, …
  • Global muss folgendes Häckchen gesetzt sein: SystemeinstellungenLand/Region & SpracheRechtschreibprüfungAutomatische Rechtschreibprüfung in der Voreinstellung aktiviert
  • Das Standardwörterbuch (Default-Dictionary) muss man in der Identität einstellen: KMail → Einstellungen… → Identitäten → Ändern → Erweitert.
  • Beim Schreiben einer Mail muss unten rechts Rechteschreibprüfung: ein stehen.
  • Das aktuelle Wörterbuch kann angezeigt werden bei Ansicht → Wörterbuch.

Avira Antivir Personal will nicht updaten

aviraDa Windows noch nicht ganz verschwunden ist, muss ich mich ab und an auch damit ein Bisschen herumschlagen. Es rächt sich für die Vernachlässigung , indem es jedesmal wenn es gebootet wird eine zuerst eine halbstündige Updateorgie abzieht.

Einer der Updatewilligen ist Avira Antivir. Avira ist mein bevorzugter Virenschutz, weil es sich schön im Hintergrund hält, seine Arbeit macht und mir nicht allzuweit ins System hineinfunkt. Leider scheinen die Server ab und zu überlastet zu sein und dann werde ich von Windows und Avira generft.

Doch Hilfe naht: In einem Beitrag in der Avira Knowledge Base steht, wie man manuell updaten kann:

  1. Verlinkte Datei downloaden.
  2. Avira Hauptprogramm starten.
  3. Update → Manual Update auswählen.
  4. Die Datei – wie sie ist – angeben.
  5. Und schon sind alle glücklich.

Showdown: Swiftfox gegen Firefox

chillfoxVor einiger Zeit gab es eine grosse Kontroverse um Firefox unter Linux: Messungen haben gezeigt, dass die Windowsversion mit Wine unter Linux schneller gelaufen ist, als die Linux native Version. Diese Messung hat sehr zu meinem subjektiven Eindruck gepasst: Firefox ist eine Schnecke unter Linux. Als Alternative wurde eine „optimierte“ Version mit Namen Swiftfox offeriert. Nundenn, lasset uns das auschecken.

Das Testsystem

Der HP Laptop:

Typ: HP EliteBook 8530p
CPU: Intel® Core™2 Duo Prozessoren T9400 (2,53 Mhz)
RAM: 4GB
Video: ATI Technologies Inc Mobility Radeon HD 3650
Videodriver: 8.54.3

Der Dell Desktop:

Typ: Dell Inspiron 531 Desktop
CPU: AMD Athlon(tm) 64 X2 3800+ (2.0G)
RAM: 4GB
Video: NVIDIA GeForce 6150SE nForce 430

Windows:

OS: Microsoft Windows Vista Home Basic SP1 (32 Bit)

Linux:

Distribution: Kubuntu 8.10
Kernel: 2.6.27-11-generic #1 SMP x86_64 GNU/Linux

Der Windowsrechner ist ein Desktop, dafür schon eine Spur älter. Bei den unterschiedlichen Hardwareplattformen sind die Resultate natürlich nur bedingt vergleichbar. Klar hätte man das auf einer Kiste durchziehen können, aber ich hab auch noch Anderes zu tun :)…

Die Kontrahenten

Swiftfox:
Swiftfox sind „optimierte“ Builds. Sie können unter Debian wunderbar mittels apt-repository installiert werden. Leider hinken die Versionen etwas nach und die aktuellste ist 3.0.4pre. Swiftfox kann dasselbe Profil-Verzeichnis benutzen wie eine Firefox-Installation.
Firefox:
DER Klassiker. Anscheinend wird Firefox unter Windows entwickelt und humpelt darum in der Linuxversion etwas lahm. Unter beiden Betriebssystemen kam 3.0.8 zum Einsatz.
Internet Explorer
Der bei Vista, beiliegende und stetig upgedatete Microsoft Internet Explorer, Version 7.0.6001.18000.

Die Messungen

Ich habe die Tests jeweils zwei mal laufen lassen und die Resultate verglichen, damit die Plausibilität einigermassen gegeben ist :)…
Weiterlesen

Ein Word 2007 Makro nachträglich mit einer Tastenkombination versehen

officeZeichnet man in Word 2007 ein Makro auf, hat man die Möglichkeit, dieses Makro mit einer Tastenkombination zu versehen. Verpasst man diese Chance, dann muss man etwas weiter graben:

Office-Signet → Word-Optionen (ganz unten) → Anpassen → Tastenkombinationen Anpassen (ganz unten) → Kategorien: Makros auswählen → Tastenkombination eingeben → Zuordnen…

Hat doch gar nicht weh getan…

Backup! Keine Ausreden mehr…

tapeJeder weiss: Backups sind wichtig, Backups sind gut. Zumindest bei mir hat diese Einsicht immer wieder die Tendenz, in die Theorie abzugleiten. Eigentlich dürfte das nicht sein, habe ich doch eine Diplomarbeit fast vollständig verloren aufgrund eines „Crashes“ und bin somit ein „gebranntes Kind“ (am Rande: Es war etwa 1996, ich machte erste Erfahrungen mit Linux und dachte, dass man Dateien mittels cat MeineDatei.doc > /dev/sda1 auf die Windows-Partition verschieben kann :irre: . Aber das erzähl ich besser niemandem…).

Es wäre eigentlich auch kein Problem. Heutige, externe USB-Festplatten kosten nur noch noch 0,13 Eur (19 Rappen) pro Gigabyte (Tendenz fallend). Es gibt also keine Ausreden mehr!

Anforderungen

Es muss einfach sein! Wenn ich jedes mal eine halbe Stunde rumwursteln muss werde ich – so wie ich mich kenne – nie Backups machen. Die Geschwindigkeit spielt nicht sooo eine Rolle, wenn es nicht gerade Stunden dauert. Dateien müssen gezielt ein- und ausgeschlossen werden können. Ich brauche keine raffinierten Backuppläne, ich werf es von Hand an wenn mich das Gewissen plagt. Und wenn ich schon Backup mache, dann soll es vom Backupprogramm einfach in Ruhe gelassen werden 🙂 . Inkrementell sollte schon möglich sein: Dateien, die sich nicht geändert haben, sollen nicht nochmals gespeichert werden.
Ich hätte es begrüsst, wenn die Dateien einzeln gespeichert würden, jede einzeln gezipt, doch dieses Feature habe ich leider nirgends gefunden.

Weiterlesen

Lokale Turniere für CodeRuler

coderulerCodeRuler ist ein geniales Programmierspiel von IBM. Es eignet sich sehr für eine spielerische Beschäftigung mit der Programmiersprache Java.

Für Turniere hat das Spiel eine eingebaute Serverfunktion. Rulers werden ganz bequem von Eclipse aus eingereicht und stehen dann auf dem Server zur Verfügung. Wenn man allerdings eigene Rulers gegeneinander antreten lassen möchte, oder wenn das Netz securitymässig so abgeriegelt ist dass Peer to Peer Verbindungen nicht möglich sind, muss man etwas tricksen. Hier die einfachste Möglichkeit unter Linux (eventuell portierbar), die ich gefunden habe. Kompliziertere Möglichkeiten gibt es natürlich auch.

  1. Die MyRuler.java Dateien müssen irgendwie auf den Servercomputer kommen. Ev. mit E-Mail, USB-Stick oder Flaschenpost.
  2. Den Server in Eclipse starten mittels: Window → Preferences → Games → Start. Eventuell sollte vor dem Start der Port angepasst werden (9999 ist gut).
  3. Für jeden Ruler muss ein eigenes „Game“ Projekt in Eclipse erstellt werden. Die MyRuler.java dorthin kopieren.
  4. Für jeden Ruler Folgendes erledigen:
    1. Projekt öffnen und Games.xml anklicken.
    2. Mit dem Pfeil den Bereich Game Server erweitern und die korrekten Daten ausfüllen.
    3. Identification ausfüllen.
    4. Ruler submitten.
    5. Im Workspace Verzeichnis (Ersichtlich unter File → Switch Workspace) in .metadata/.plugins/com.ibm.games/players wechseln
    6. Das Verzeichnis localhost in irgendetwas Anderes umbenennen

Turniere können nun an Zwei Orten durchgeführt werden:

  • Entweder Direkt von einem games.xml aus.
  • Im Turniermodus: Window → Preferences → Games → Tournaments.

Der Turniermodus ist ein Sensibelschen. Turniere scheinen nur mit neu submitteten Rulern möglich zu sein. Ausserdem: Im Hintergrund wird sofort mit dem Turnier begonnen! Das GUI zeigt keine direkte Reaktion, nicht mal ein Eintrag des neuen Turniers ist ersichtlich, aber im Hintergrund kämpfen die armen Gesellen. Das Spiel kann dann mit dem Button Play angesehen werden. Hier hat erst ein Klick auf den schwarzen Bereich das Spielfeld zum Vorschein gebracht.

Avaloqix: Unterhaltsamer Java-Programmierwettbewerb

Flow im HirnIch liebe Wettbewerbe und ich liebe das Spielen. Meine inneres, urmännliches Ich springt voll auf das kompetitive Element solcher Veranstaltungen an. Zum Erlegen von Höhlenbären oder für Sportwettkämpfe eigne ich mich definitiv nicht, darum bin ich froh, wenn ab und zu ein Kräftemessen auf meinem – eher wetwarelastigen – Gebiet stattfindet.

Leider hat es jetzt seit längerer Zeit kein Codeduel (ein spassiger, von Microsoft Schweiz gesponserter/organisierter Event in welchem SOAP-Services gegeneinander angetreten sind, für den es aber leider keine offizielle Website mehr gibt) mehr gegeben und für die kommerzielle Version solcher Wettbewerbe habe ich im Moment wirklich keine Zeit.

Über die Seite des Schweizerischen Jahres der Informatik bin ich auf Avaloqix gestossen und war sofort begeistert. Am Tag der Informatik am 29. August 2008 in Zürich wird es ein Event speziell zu diesem Wettbewerb geben.

Das Spiel

Es geht darum, einen Spieler für eine abgewandelte Version des Shannon Switching Games zu programmieren. Kurz erklärt: Es gibt eine Quelle und ein Senke, die über ganz viele Röhren und Sammelpunkte miteinander verbunden sind. Im ersten Durchgang versucht der eine Spieler einen möglichst grossen Durchfluss zu erzielen indem er Röhren freischaltet, während der andere Spieler ebendies durch das Ausbauen von Röhren zu verhindern versucht. In einer zweiten Runde werden die Rollen der Spieler in demselben Röhrengeflecht getauscht. Gewonnen hat, wer als Durchflussmaximierer den grösseren Durchfluss erzielen konnte.
Weiterlesen

AntMe, Spass mit programmierbaren Ameisen

AntMe!Nachdem ich die Ameisen in meiner Wohnung mit ganz perfidem tragts-es-zu-euch-nach-Hause-und-vergiftet-eure-Nachkommen-Gift losgeworden bin, habe ich sehr viel sympathischere Zeitgenossen dieser Spezies getroffen: AntMe ist ein Programmierspiel, dass aus Microsofts Coding4Fun Initiative (nicht zu verwechseln mit dem Galileo Coding for Fun Buch. Das ist auch spassig, behandelt auch AntMe, aber zusätzlich noch viele Andere Dinge) hervorgegangen ist. Es hat einen eigenen Wikipedia Artikel und vorallem eine geniale Homepage.

Grundsätzlich geht es darum Ameisen zu implementieren die überleben, Äpfel und Zucker sammeln und unter Umständen auf Käfer und fremde Ameisen losgehen. Ein Markierungsmechanismus sorgt dafür, dass die Ameisen untereinander kommunizieren können. Fortgeschrittene Ameisenpapis und -mamis können spezialisierte Ameisen erstellen und RPG mässig Eigenschaften verbessern, wenn sie dafür andere verschlechtern.

Die Ameisen in Aktion

Die Ameisen können in C# oder in Visual Basic .net mit der notwendigen Intelligenz versehen werden. Bestimmte Methoden werden zu bestimmten Ereignissen aufgerufen; beispielsweise WirdMüde() (ja, mit „ü“ und deutsch) oder SiehtFeind(ByVal käfer As Käfer). Zur Steuerung steht fast der ganze .net Sprachumfang zur Verfügung, sowie Ameisenspezifische Hilfsmethoden wie etwa GeheZuBau() oder GreifeAn(käfer).

Quickstart

Auf der AntMe Homepage findet man verschiedene Versionen. Wir spielen hier mit der 1.5 Beta 2 (VB.net oder C#, je nach Gusto). Die Profiversion beinhaltet den gesamten Quellcode der Spielengine (!). Das ist so genial, dass es nochmals erwähnt werden darf: Die Profiversion beinhaltet den gesamten Quellcode der Spielengine. Will man sich nur mit den Ameisen beschäftigen, reicht die Einsteigerversion. Im Download enthalten ist ein gut dokumentiertes Ameisenskelett, bei dem sofort losgottgespielt werden kann.
Eine gute Doku über die Klassen und deren Methoden sowie ein Tutorial wird mitgeliefert. Zum Teil beziehen sich die Unterlagen noch auf Version 1.1, aber der Transfer zu 1.5 ist eigentlich kein Problem. Für Leute, die lieber kuckn statt lesen, gibt es gut gemachte Screencasts, die ebenfalls in die Thematik einführen.

Für eher haptisch veranlagte Menschen gibt es auch ein Buch: AntMe! – Programmieren und Spielen mit den Ameisen und Visual C#. Das kenne und besitze ich allerdings (noch) nicht.

Verfügt man noch über keine Programmierumgebung, so könn bei Microsoft gratis die Express Versionen verschiedener Sprachen downgeloaded werden. Für die 3D Visualisierung braucht man
noch DirectX. Mit der neusten Version (nicht mit der im Forum angegebenen) hat es wunderbar gefunzt.

Turniere

Ein Bisschen lebt das Ganze auch vom kompetitiven Element (um ehrlich zu sein, vielleicht ist ein Bisschen etwas untertrieben: ICH FRESS EUCH ALLE AUF!). In der Version 1.5 funktioniert das Importieren von anderen Ameisen leider nicht und es wird eine unbehandelte Ausnahme ausgespuckt:
Der Typ für Member AntMe.SpielKonfiguration.AntMe.Simulation, Version=1.5.0.0, Culture=neutral, PublicKeyToken=37d8e32ef3294969 wurde nicht aufgelöst.

Workaround für die VB-Version (C# ungetestet):
Weiterlesen