Disable Dynamic Ports

Macht das Leben leichter:


Google-Wave, kollaboratives Arbeiten, Erfahrungen

Ziel dieses Posts ist es aus Mitverwender-Perspektive unsere Nutzungsmuster von Google-Wave zu beschreiben und die bisherigen Eindrücke zu nutzen, damit wir (noch) effizienter mit diesem neuen Kollaborationswerkzeug umgehen können.

Bisher nutzen wir Google Wave für folgende Aktivitäten:

  • Meeting-Protokolle
  • gemeinsames Entwickeln von Ideen/Konzepten
  • gemeinsames Entwickeln von Dokumenten (Verträge, Angebote,..)
  • Notizen für Gruppenarbeiten
  • Notizen individuell
  • was noch(?)

Metadokumente, Wave ergänzt ohne zu ersetzen

Etwas das sehr gut zu funktionieren scheint, ist die Nutzung unseres Wikis um Meta-Infos zu verwalten. So haben wir zum Beispiel Linklisten auf Meeting-Protokolle die sich in wave befinden (Vorher waren die Protokolle selbst im Wiki), aber auch Verweise auf waves mit Ideen und Konzepten.

Das Wiki scheint durch Google Wave eher noch an Bedeutung zu gewinnen und stellt einen festen Rahmen und eine Struktur dar, in der wir uns leicht zurechtfinden können.

Waves sind zwar Hypertext fähig, haben aber doch eher den Charakter einer Dokumentensammlung, der man durch Ordner und Tags Herr werden kann.

Franziska meinte mal, dass waves gar nicht unähnlich dem Verschicken von Worddokumenten mit Anmerkungen sind – so empfinde ich das erstaunlicherweise auch – auch wenn waves praktischer sind.  (Vielleicht wird auch aus dem Microsoft-Office-Online Umfeld eine spannende Antwort auf Google-Wave kommen.)

Echtzeit vs. zeitlich versetzt

Die Möglichkeit direkt zu sehen wenn andere im Dokument schreiben ist reizvoll, hat aber potentiell auch Probleme. Persönlich finde ich es teilweise in Meeting-Situationen ablenkend, genau wie Skype Kommentare, das während man zuhört oder redet neuen Information herein flattern. Vielleicht ist das auch nur eine Konzentrations- und Trainingsfrage. Gerade bei Gesprächen mit mehr als 3 Teilnehmern könnte es die Meeting-Qualität aufwerten wenn ein gemeinsames Dokument als Metaebene genutzt wird.

Denkbar wäre zum Beispiel, dass jeder Teilnehmer seine "Status" in der wave pflegt und kommentiert - Beispielsweise mit Feedback zur Situation wie etas: "langweilig", "zu lang", "1+ von mir" usw. . Vielleicht können wir das ja mal bald mal ausprobieren :-)

In Telefonkonferenzen mit Kunden könnte ein solcher Status auch das virtuelle anstoßen unterm Tisch ermöglichen (auch wenn das bei uns bisher noch nicht nötig war) und wir stolz auf unseren partnerschaftlichen Umgang mit unsere Kunden sind.

Manchmal finde ich störend das andere vielleicht verschiedene Versionen eines Kommentares sehen - denn ich möchte ja eigentlich das Ergebnis veröffentlichen und nicht die Überlegungs-Zwischenstände.

Diskusionsthreads

Die Möglichkeit direkt im Text zu kommentieren führt manchmal zu vielen Diskusionsthreads was teilweise verwirrend und übersichtlich sein kann.

Ein gute Strategie scheint mir, wenn wir damit beginnen würden Threads aufzuräumen und wieder zu löschen. Das Ergebnis der Threads könnten dann wieder im ursprünglichen Dokument angepasst werden. Sonst entstehen Diskusionen wie in Foren und das Dokument lebt nicht - sondern nur die Diskussion drum herum. Damit sich auch jemand verantwortlich oder berechtigt fühlt, könnte es nützlich sein einen Dokumenten-Owner einzuführen. Dieser darf solche Bereinigungen nicht nur durchführen, sondern ist auch dazu angehalten und könnte von Kollaborateuren dazu aufgefordert werden.

Zusammenfassung

Google-Wave ist mächtiges Werkzeug das (trotz Beta-Zustands ) gut bei uns angekommen ist. Wie bei der Verwendung von allen andern Kommunikationsmedien und Werkzeugen will der Umgang gelernt und mit Kollegen (Kollaborateuren) abgestimmt sein.

(Wer noch eine Einladung braucht, kann mir einfach schreiben :-) )

- Robert


NHibernate: Unerwartetes UPDATE + Dirty Check

Einige Zeit nun schon wurmte mich, dass immer, wenn ein User-Objekt von NHibernate geladen wurde, direkt im Anschluss ein UPDATE geschah. Offensichtlich sind die Objekt also dirty, obwohl wissentlich nichts mit ihnen passiert ist.

Unter folgendem Link fand ich gestern auf nhforge eine Möglichkeit für eine nähere Inspektion des Problems, genauer des verschmutzten Objekts. Mit dem dort befindlichen Code und einer kleinen zusätzlichen Methode kann man nun wie folgt gezielt Objekte und deren Properties auf Veränderung prüfen:

   1: private void FindDirtyMembers(User user)
   2: {
   3:     var session = _nHibernateHelper.Session;
   4:  
   5:     Console.WriteLine("Entity {0}#{1} is dirty: {2}", user.Type, user.Id,
   6:         session.IsDirtyEntity(user));
   7:  
   8:     var dirtyPropNames = session.GetDirtyPropertyNames(user);
   9:  
  10:     foreach (var propName in dirtyPropNames)
  11:     {
  12:         var original = session.GetOriginalEntityProperty(user, propName);
  13:         Console.WriteLine("Property '{0}' is dirty! Original: {1}", propName, original);
  14:     }
  15: }

Die Extension-Methods für die Session habe ich in SpeakLib.Utilities\Persistance.NHibernate\SessionExtensions.cs abgelegt.

Mit diesem Check bekam ich beim ersten Test dann auf der Console auch sofort den Fehler zu sehen:

   1: Entity UserCampingInfo#1 is dirty: True
   2: Property 'MaritalStatus' is dirty! Original: Unspecified

Und tatsächlich steht im Mapping-File für MaritalStatus ein falscher (Enum) Typ:

   1: <property name="MaritalStatus" type="SpeakFriend.Utilities.Gender, SpeakFriend.Utilities" />
   2:  

Was macht NHibernate an dieser Stelle? Ich denke, NH baut ein enum vom Typ Gender zusammen und weist es der Property MaritalStatus zu – wobei dieses dann implizit in den Typen MaritalStatus um. Und das führt dazu, dass das Objekt direkt nach dem Laden dirty ist. Lösung ist also die Anpassung des Mappings auf den richtigen Enum-Typen.

   1: <property name="MaritalStatus" type="SpeakFriend.Utilities.MaritalStatus, SpeakFriend.Utilities" />
   2:  

Gruß, Oliver

GIT GUI in englisch

Die GIT GUI in deutsch macht oft nicht sonderlich viel Sinn:

git-gui-deutsch

Am einfachsten bekommt man eine englische Version, in dem man die Sprachdatei löscht oder umbenennt. Die Sprachdateien der GIT-GUI befinden sich bei mir unter: C:\Program Files (x86)\Git\share\git-gui\lib\msgs

gui-gui-rename

Danach machen die Begriffe auch wieder Sinn :-)

git-gui-english


GIT GUI (Windows) Merge Tool einrichten

Nach einer Default Installation mit msygit steht kein graphisches DIFF/Merge Tool bereit. Möchte man nun einen Konflikt lösen,

run-merge-tool

erscheint diese Fehlermeldung:

run-merge-tool-error

Abhilfe

Es gibt eine Vielzahl von unterstützten Merge Tools. Mir persönlich hat p4merge am Besten gefallen. Es folgt in kurzen Schritten das einrichten und konfigurieren von p4merge:

1:) Download

P4Merge  kann hier: http://www.perforce.com/perforce/downloads/latest.html heruntergeladen werden.

2:) Konfigurieren von GIT.

Der Pfad der Konfigurationsdatei ist für die Default Installation:  "C:/Users/[YourUsername]/.gitconfig".

Die .gitconfig muss so erweitert werden:

[merge]    
    tool = p4merge
 
[mergetool "p4merge"]
    cmd = \"C:\\Program Files\\Perforce\\p4merge.exe\" $PWD/$BASE $PWD/$LOCAL $PWD/$REMOTE $PWD/$MERGED
    trustExitCode = false  
    keepBackup = false    
 
 

3:) Freude

 
Ruft man nun aus der git gui “run merge tool” oder von git bash “git mergetool” auf, dann erscheint:
 
p4merge
 
:-)