Sprachrohr

Trac in Eclipse nutzen

Wer während der Entwicklung mit Trac und Eclipse zu tun hat, der sollte mal das Mylyn (früher Mylar) Projekt kennenlernen.

Es dient als Aufgabengetriebene Entwicklungsunterstützung dem Entwicklungsprozess im Team. Weitere Infos kann man auf der Internetseite bei eclipse lesen. Hier soll es mehr um den Installationsprozess gehen.

Unter den Downloads findet man die Update-Sites. Dazu die passende URL für Eclipse und die Extras kopieren und bei Eclipse in die Update-Sites eintragen. Incubator benötigt man nicht. Bei mir ging das nicht, deswegen habe ich die Paket-ZIPs entsprechend heruntergeladen und als lokale Update-Site integriert.

Danach wählt man folgende Komponenten aus:

  • Mylyn Bridge: Eclipse IDE
  • Mylyn Bridge: Team Support
  • Mylyn Connector: Trac
  • Mylyn Focused UI
  • Mylyn Task List

Nachdem diese entsprechend installiert und die Eclipse wieder gestartet ist, sieht man nun einen Bereich "Task List". Dort kann man nun eine neue Query anlegen mit "Add Query". Dabei muss man ein neues Repository anlegen. Hier kann man nun ein Trac-Repository anlegen.

Als Server-Parameter gibt man nun die URL zum Trac (Basis-URL) ein. Für die Verbindung mit dem Trac kann man entweder WEB oder RPC wählen. Für RPC benötigt man allerdings folgendes Plugin in der Trac-Installation: XmlRpcPlugin von Track Hacks

Nachdem man diesen Dialog abgeschlossen hat (mit oder ohne Benutzerdaten) kann man nun wie aus den Trac-Ticket-Queries eine Query zusammenstellen. Und fertig ist die Aufgabenliste im Eclipse.

Zur Bearbeitung kann man dann entsprechend einen Task aktivieren und damit werden alle frisch geöffneten Dateien in den Kontext des Tasks überführt. Das bedeutet, dass man bei einem Commit den Kommentar vorbelegt aus dem Ticket bekommt. Das ist sehr witzig und sinnvoll. Damit werde ich auf jedenfall noch ein bißchen herum probieren.

Von Robert Kummer

Der alte Mann und das Meer...

Ja ja, da werde ich nun nächste Woche tatsächlich 28 Jahre alt. Da denkt man eigentlich schon ein wenig darüber nach, wie das mit dem 30. wird...also andere vielleicht...ich nicht so - zumindest nicht intensiv.

Letzte Woche kam nun eine sehr offizielle Bestätigung dafür, dass ich mir darum nicht allzu schnell Sorgen machen muss. Ich gehe wöchentlich in die Sneak ins Kino in Stuttgart, weil es immer wieder spannend ist sich einfach überraschenderweise mal unterhalten zu lassen mit einem Film, den man vielleicht sonst nicht gesehen hätte im Kino. Jedenfalls steht da dieser Start-Twen-Schnösel am Einlass und verlangt doch tatsächlich von mir einen Ausweis, weil der Film ab 18 sei. Ich gebe zu, ich war frisch rasiert, aber es war dennoch erschreckend. Mittlerweile finde ich das allerdings sehr cool...

Ich werde dem netten freundlichen jungen Mann morgen noch einmal Danke sagen...oder vielleicht auch nicht ;)

Von Robert Kummer

Versionierung und Ticketverwaltung für lau

Es ist fast soweit...in wenigen Tagen wird unser erstes eigenes Produkt das Licht der Welt erblicken. Im Q2/2009 werden wir einen kostenfreien Hostingdienst starten, der folgende Leistungen bereithält:

  • Subversion-Repository
  • Trac

Weitere Dienste, wie:

  • automatisches Deploy in eine geschützte Webserver-Umgebung
  • MySQL-Datenbank
  • PHP5

werden dann auch verfügbar sein.

Unser Ziel ist es dem ambitionierten Programmierer zu Hause oder ganzen Entwicklungsteams die mühsame Arbeit des "Server aktivieren", "Repository aufsetzen" und "Webserver einrichten" abzunehmen und ihn stattdessen mit wenigen Klicks zur gewünschten Umgebung verhelfen, solange er dies möchte. Der notwendige Zeitaufwand zum einrichten eines Projektes sinkt auf unter 5 Minuten. Danach könnten bspw. Ihre Kunden oder sie bereits Tickets zu dem Sourcecode verfassen.

In Zukunft wird es dann weitere Dienste und Optionen geben:

  • weitere Scriptsprachen: ruby, python
  • konfigurierbare Deployprozesse (Buildmanagement, externer Deploy per scp/ftp)
  • weitere Datenbanken: PostgreSQL, eXist, Xindice
  • Nutzung von Frameworks, die zentral vorhanden sein werden: ZendFramework, Symfony, CakePHP, yii, Prado, Ruby-on-Rails, ...
  • usw.

Das ganze wird unter demobereich.de zu finden sein. Wer sich darüber informieren lassen will, dass es los geht, der kann den Link auf der Seite nutzen.

Von Robert Kummer

Unsere Kugelschreiber sind heute gekommen...

Nachdem ipunkt ja noch nie großartig Werbemittel erstellt hat, außer ein paar Visitenkarten vielleicht, haben wir uns jetzt mal ein paar schöne Holzkugelschreiber aus Ahorn gegönnt...und so sehen die aus:

kugelschreiber.jpg

Von Robert Kummer

MySQL und das böse PASSWORD()

Wie ich jüngst in einem Kundenprojekt erfahren musste, hat sich der Rückgabewert der MySQL Funktion PASSWORD() verändert. Das ist durch einen Serverumzug aufgefallen und schloss alle Nutzer von ihren Accounts aus.

MySQL beschreibt selber in ihren Manuals, dass die Funktion PASSWORD() nur für Passwörter der Nutzer das DB-Systems dienen sollte und stattdessen auf SHA1() oder MD5() zurückgegriffen werden soll. Also merke: niemals für Nutzerauthorisierungen die Funktion PASSWORD() verwenden. Seit Version 4.1 wurde dort auf einen längeren Hash-Wert umgestellt. Allerdings gibt es Konfigurationseinstellungen oder die mögliche Anzahl Zeichen des PASSWORD() Feldes, die den DB-Server erneut die alten kurzen Passwörter bringen lassen.

Ein Ansatz, um die nun falschen Passwörter aktualisieren zu können gibt es mit Hilfe der Funktion OLD_PASSWORD() und wenn die Autorisierung klappt, dann lieber mit dem sicheren MD5() arbeiten oder eine ganz eigene Verschlüsselung der Daten vornehmen.

Von Robert Kummer

Falsche Tastaturcodes im VMware Player

Bei mir stellte sich das Problem, dass mein VMware Player nicht wie gewünscht die richtigen Tasten an das Gastsystem weiterleitete.

Hostsystem: Ubuntu 8.10, Gastsystem: Windows XP Professional

Mit folgender Konfiguration lässt es sich doch machen (bis auf die Windows-Taste):

Datei: ~/.vmware/config (anlegen, wenn sie noch nicht existiert)

xkeymap.keycode.108 = 0x138 # Alt_R
xkeymap.keycode.106 = 0x135 # KP_Divide
xkeymap.keycode.104 = 0x11c # KP_Enter
xkeymap.keycode.111 = 0x148 # Up
xkeymap.keycode.116 = 0x150 # Down
xkeymap.keycode.113 = 0x14b # Left
xkeymap.keycode.114 = 0x14d # Right
xkeymap.keycode.105 = 0x11d # Control_R
xkeymap.keycode.118 = 0x152 # Insert
xkeymap.keycode.119 = 0x153 # Delete
xkeymap.keycode.110 = 0x147 # Home
xkeymap.keycode.115 = 0x14f # End
xkeymap.keycode.112 = 0x149 # Prior
xkeymap.keycode.117 = 0x151 # Next
xkeymap.keycode.78 = 0x46 # Scroll_Lock
xkeymap.keycode.127 = 0x100 # Pause
xkeymap.keycode.133 = 0x15b # Meta_L
xkeymap.keycode.134 = 0x15c # Meta_R
xkeymap.keycode.135 = 0x15d # Menu
xkeymap.nokeycodeMap = true

Von Robert Kummer

Achmed

Von Robert Kummer

Salvatorische Klausel

Sollten einzelne Bestimmungen dieses Vertrages unwirksam oder undurchführbar sein oder nach Vertragsschluss unwirksam oder undurchführbar werden, bleibt davon die Wirksamkeit des Vertrages im Übrigen unberührt. An die Stelle der unwirksamen oder undurchführbaren Bestimmung soll diejenige wirksame und durchführbare Regelung treten, deren Wirkungen der wirtschaftlichen Zielsetzung am nächsten kommen, die die Vertragsparteien mit der unwirksamen bzw. undurchführbaren Bestimmung verfolgt haben. Die vorstehenden Bestimmungen gelten entsprechend für den Fall, dass sich der Vertrag als lückenhaft erweist.
Von Robert Kummer

Symbolische Links in Subversion

Um symbolische Links (Symlinks) im Subversion (svn) einchecken zu können muss man ein Property vergeben:

svn:special mit dem Wert "*"

Nur dann wird auch beim Deployment auch ein symbolischer Link erzeugt. Unter Windows kann man die Datei wie folgt erstellen/ändern:

link auf_Originaldatei
Von Robert Kummer

Umsatzsteueridentnummer prüfen

Wer auch mal in die Verlegenheit kommt eine Umsatzsteueridentnummer prüfen zu müssen, der kann rein strukturell dies mit folgender Funktion prüfen:

/**
 * prüft die Umsatzsteueridentnummer aufgrund von Strukturmerkmalen
 * der einzelnen Länder
 *
 * @param string $ustid
 * @return bool valid or not
 */
function checkUstId($ustid)
{
    $u = strtoupper(preg_replace('~\W~', '', $ustid));
    
    $country = substr($u, 0, 2);
    switch ($country)
    {
        case 'AT':
            return (preg_match('~^ATU[A-Z0-9]{8,8}$~', $u) !== 0);
        break;
        case 'BE':
            return (preg_match('~^BE0[0-9]{9,9}$~', $u) !== 0);
        break;
        case 'BG':
            return (preg_match('~^BG[0-9]{9,10}$~', $u) !== 0);
        break;
        case 'CY':
            return (preg_match('~^CY[A-Z0-9]{9,9}$~', $u) !== 0);
        break;
        case 'CZ':
            return (preg_match('~^CZ[0-9]{8,10}$~', $u) !== 0);
        break;
        case 'DE':
            return (preg_match('~^DE[0-9]{9,9}$~', $u) !== 0);
        break;
        case 'DK':
            return (preg_match('~^DK[0-9]{8,8}$~', $u) !== 0);
        break;
        case 'EE':
            return (preg_match('~^EE[0-9]{9,9}$~', $u) !== 0);
        break;
        case 'EL':
            return (preg_match('~^EL[0-9]{9,9}$~', $u) !== 0);
        break;
        case 'ES':
            return (preg_match('~^ES[A-Z0-9]{1,1}[0-9]{7,7}[A-Z0-9]{1,1}$~', $u) !== 0);
        break;
        case 'FI':
            return (preg_match('~^FI[0-9]{8,8}$~', $u) !== 0);
        break;
        case 'FR':
            return (preg_match('~^FR[A-Z0-9]{2,2}[0-9]{9,9}$~', $u) !== 0);
        break;
        case 'GB':
            $result = (preg_match('~^GB[0-9]{9,9}$~', $u) !== 0);
            if ($result)
                return true;

            $result = (preg_match('~^GB[0-9]{12,12}$~', $u) !== 0);
            if ($result)
                return true;
            
            $result = (preg_match('~^GBGD[0-9]{3,3}$~', $u) !== 0);
            if ($result)
                return true;
                
            return (preg_match('~^GBHA[0-9]{3,3}$~', $u) !== 0);
        break;
        case 'HU':
            return (preg_match('~^HU[0-9]{8,8}$~', $u) !== 0);
        break;
        case 'IE':
            return (preg_match('~^IE[A-Z0-9]{8,8}$~', $u) !== 0);
        break;
        case 'IT':
            return (preg_match('~^IT[0-9]{11,11}$~', $u) !== 0);
        break;
        case 'LT':
            $result = (preg_match('~^LT[0-9]{9,9}$~', $u) !== 0);
            if ($result)
                return true;
            
            return (preg_match('~^LT[0-9]{12,12}$~', $u) !== 0);
        break;
        case 'LU':
            return (preg_match('~^LU[0-9]{8,8}$~', $u) !== 0);
        break;
        case 'LV':
            return (preg_match('~^LV[0-9]{11,11}$~', $u) !== 0);
        break;
        case 'MT':
            return (preg_match('~^MT[0-9]{8,8}$~', $u) !== 0);
        break;
        case 'NL':
            return (preg_match('~^NL[A-Z0-9]{9,9}B[A-Z0-9]{2,2}$~', $u) !== 0);
        break;
        case 'PL':
            return (preg_match('~^PL[0-9]{10,10}$~', $u) !== 0);
        break;
        case 'PT':
            return (preg_match('~^MT[0-9]{9,9}$~', $u) !== 0);
        break;
        case 'RO':
            return (preg_match('~^RO[0-9]{2,10}$~', $u) !== 0);
        break;
        case 'SE':
            return (preg_match('~^SE[0-9]{12,12}$~', $u) !== 0);
        break;
        case 'SI':
            return (preg_match('~^SI[0-9]{8,8}$~', $u) !== 0);
        break;
        case 'SK':
            return (preg_match('~^SK[0-9]{10,10}$~', $u) !== 0);
        break;
    }

    return false;
}

Die Quelle dafür ist bei wikipedia.de zu finden.

Von Robert Kummer

Sub Navigation:

Seitwert