Startseite > Techblog
nächste Seite

Herzlich Willkommen im Communardo Techblog, dem Entwickler-Weblog von Communardo. An dieser Stelle werden wir in loser Folge Ideen, Problemlösungen, Tipps und Problemstellungen rund um die Entwicklung webbasierter Software auf Basis verschiedenster Technologien vorstellen. Wir freuen uns über Rückmeldungen und Kommentare unserer Leser. Viel Spaß beim Lesen und Kommentieren.

mhy

Was macht eigentlich einen professionellen Software-Entwickler aus? Mit dieser Frage starten Ralf Westphal und Stefan Lieser gern, wenn sie erklären, worum es bei der Clean-Code-Developer-Initiative eigentlich geht. Und auch genau mit dieser Frage startete die Keynote des dotnetpro Powerdays zum Thema CCD, der am 09.03.2010 in München die Einleitung zu einem dreitägigen Workshop bot. Und die Antworten aus dem Publikum sind sehr reichhaltig: “Man hat Spaß daran, guten Code zu schreiben” und “Man hat Erfahrung.” hört man aus der einen Richtung, “Jemand ist bereit, einem für ein Programm Geld zu geben” und “Man schreibt Code den andere verstehen” aus der anderen Richtung. Letztenendes ist klar: Dies sind nicht die Kriterien für einen professionellen Softwareentwickler, sondern Professionalität aus dem Blickwinkel von CCD ist eine Mischung aus Bewusstheit und Prinzipien. Mit viel Witz und mehren verschenkten Mausmatten als Belohnung für interessante Antworten führen die beiden durch die Keynote und bringen so jedem das Thema näher.

Mit einem kleinen Ausflug in die Softwarearchitektur und einer Betrachtung von Test Driven Development geht der Tag weiter. Klar ist, die beiden wissen was sie rüberbringen wollen und vertreten da auch ihre Meinung recht konsequent. Aussagen wie “Wozu brauche ich einen Debugger – meine Tests zeigen mir doch, wo der Fehler ist”, “Zum Erstellen einer Softwarearchitektur braucht man keine Tools – nur ein Flipchart” sorgen dafür, dass selbst langjährige und erfahrene Entwickler das Problem mal aus einer anderen Richtung betrachten – und wenn uns jemand nach einer Software-Architektur für ein Warenwirtschaftssystem gefragt hat, haben wir dann nicht alle mit einem einzigen “großen Kreis mit Bubbel in der Mitte” auf dem Flipchartpapier geantwortet?

Nach einem Abstecher in Richtung Event Based Programming mit den Hauptakteuren “Paula Portal”, “Anton Adapter”, “Frieda Filter” und “Zacharias Zähler” bestand der Nachmittag darin, eine “Brownfield-Anwendung” im Sinne von CCD sauber zu machen. Leider musste ich nach der Ermittlung der guten und schlechten Eigenschaften der Anwendung die Veranstaltung verlassen, weil sonst mein Flieger ohne mich gestartet wäre, aber ich denke das anschließende Refactoring der Anwendung war auch noch sehr interessant.

Zusammenfassend: Ja, ich mag diese Art von Stefan und Ralf, wie sie solche Veranstaltungen durchführen, unabhängig davon ob sie kostenfrei auf Usergroups sind oder ob sie Workshops durchführen. Denn so wird man abseits vom täglichen Geschäft dazu animiert, mal neue Wege einzuschlagen oder anders an ein Thema heranzugehen. Schade ist, dass es im Tagungsraum im Untergeschoss kein WLAN oder UMTS gab, denn sonst wären einige der Sprüche der beiden sicher sofort per Twitter in der virtuellen Welt gelandet.

Und der Ausspruch eines Teilnehmers “Ich bin der, der unbedingt hierher wollte, weil es interessant ist; mein Kollege hätte es aber eigentlich nötig gehabt, das mal mitzumachen.” zeigt, dass das Thema durchaus interessant ist, aber noch nicht alle die Notwendigkeit gesehen haben, wirklich professionell zu arbeiten.

kick it on dotnet-kicks.de

Kommentar Feed Trackback URL
lke

Seit dem 23.02.2010 steht das Cumulative Update Februar 2010 für Windows SharePoint Services 3.0 und  Microsoft Office SharePoint Server 2007 zum download bereit. Artikel vollständig lesen »

Kommentar Feed Trackback URL
thu

Wie werden nun diese  Sharepoint Listen gezeichnet? Wie könnte nun der neu zu entwickeltende, spektakuläre Cover Flow für Sharepoint aussehen, den man sich gerade noch im Kopf zurecht gerückt hat? Irgendwie muss dieser im Kopf entwickelte Prototyp nun in das Konzept übertragen werden. Spätestens an diesem Punkt steigen die meisten Consultants oder Artgenossen aus. Einige versuchen sich noch hartnäckig mit ihren Copy & Paste Fähigkeiten (Photoshop und Co.) das gewünschte Bild zusammen zu montieren. Aber sind wir doch mal ehrlich: schön ist das nicht.

Wer öfters mal eine Dokumentation oder aber auch ein Fachkonzept schreibt, wird dieses Szenario wahrscheinlich nur zu gut kennen.

Die kleine italienisch/amerikanische Firma Balsamiq Studios hat sich auf die Flagge geschrieben, uns genau in dieser schweren Zeit der “Ideen-Illustration” zu unterstützen. Gegründet und geleitet wird die kleine Firma von Giacomo ‘Peldi’ Guilizzoni, einem Ex – Adobe Software Lead. Mehr über die Gründungsgeschichte von Balsamiq kann in diesem (empfehlenswerten) Blogpost gefunden werden.

Wie sieht so eine “Skizze”, welche mit Balsamiq entworfen werden kann, denn nun aus?


Mockup


Mockup

Genau so!

Artikel vollständig lesen »

Kommentar Feed Trackback URL
aru

Das Content Query WebPart bietet dem Nutzer die Möglichkeit “mal schnell” Inhalte aus einer bestimmten Site oder Liste auf einer Seite zu publizieren. Dabei besteht die Möglichkeit aus diversen Anzeige-Modi zu wählen. Sollen allerdings Inhalte aus einer Richtext-HTML-Spalte angezeigt werden, beispielsweise die Description einer Posts Liste, wird das HTML nicht aufgelöst.

Artikel vollständig lesen »

Kommentar Feed Trackback URL
dri

Den Auftakt zum letzten Tag auf der Basta! macht für mich Custom Field Types – Entwicklung und Einsatzmöglichkeiten mit Oliver Wirkus. Die Entwicklung eines Custom Field Type für SharePoint ist eher unspektakulär und wer das schon einmal gemacht hat, wird dazu hier nicht viel Neues erfahren. Einen Tipp möchte ich noch weitergeben: Für die Festlegung von Konfigurationseinstellungen bieten sich die Custom Properties in der fldtype_xxx.xml an – allerdings sollte man bedenken, dass diese bei einem Update immer wieder “überbügelt” wird (dennoch sind die Daten dort allemal besser aufgehoben als “hard coded”). Folgende “Unschönheiten” bzgl. Custom Field Types sollte man bei deren Verwendung bedenken: Artikel vollständig lesen »

Kommentar Feed Trackback URL
are

Problembeschreibung

Bei der Entwicklung von mehreren Plugins kann es vorkommen, dass Texte mehrfach übersetzt werden müssen, wodurch somit Redundanzen entstehen. Der Ursprung liegt dann bei Atlassian Confluence, welches das Sharen von i18n-keys über die verschiedenen Plugins hinweg nicht ermöglicht.

Beispielhaft soll dies am folgendem Szenario erläutert werden:

Angenommen man hat ein Plugin X entwickelt und in ihm den i18n-key manager.user.email definiert. Zusätzlich existiert ein Plugin Y, dass Plugin X um weitere Funktionalität ergänzt und eine neue vm anlegt, die eben auch den i18n-key manager.user.email verwenden soll. Nun gibt es das Plugin-Konzept von Confluence nicht her auf die in den properties definierten Texte von Plugin X zuzugreifen. Dies bedeutet, dass der Key auch im Plugin Y hinterlegt werden muss. Folglich ergibt sich ein erhöhter Pflegeaufwand.

Info!
Die harte Trennung von Atlassian Confluence ist einleuchtend, da die Plugins untereinander autark funktionieren sollen. Es gibt aber auch Fälle, in denen dies hinderlich ist.

Problemlösung

Info!
Die folgende Erklärung zielt auf die Nutzung eines einzelnen Plugins ab. Es ist natürlich auch möglich für die einzelnen Sprachen separate Plugins (wie Confluence Standard) zu führen.

Damit Redundanzen beseitigt werden können, müssen die i18n-keys zentral abgelegt werden. Dazu kann man einen bestimmten Plugintyp von Confluence – das Sprachplugin – nutzen.

Achtung!
Das Sprachplugin kann mehrere Sprachen repräsentieren. Wichtig ist, dass die in der atlassian-plugin.xml konfigurierten Sprachen (Kombination aus language und country) nur einmal im System auftreten.

Diese Erkenntnis ist wichtig, da für die Lösung des oben genannten Problems, es notwendig ist, die Standard Sprachplugins von Confluence zu deinstallieren und die darin enthaltenen property Dateien in das neue SprachPlugin zu überführen.

Außerdem muss die atlassian-plugin.xml des Sprachplugins, wie folgt angepasst werden.

<language name="German" key="de_DE" language="de" country="DE">

   <resource name="de_DE.png" type="download"
      location="templates/languages/de_DE/de_DE.png">
      <property key="content-type" value="image/png"/>
   </resource>
 </language>

<language name="Spain" key="es_ES" language="es" country="ES">
   <resource name="es_ES.png" type="download"
       location="templates/languages/es_ES/es_ES.png">

       <property key="content-type" value="image/png"/>
   </resource>
</language>

<resource name="i18n" name="i18n_my_plugin" type="i18n" location="/my_plugin"/>

<!-- Important entry, because you have to add the default
          i18n files to this new plugin -->

<resource name="i18n" name="i18n_default" type="i18n"
     location="/ConfluenceActionSupport"/>

Vielseitige Lösung

Diese Lösungsansatz beseitigt nicht nur Redundanzen, sondern bietet auch in Kombination mit Maven, eine Möglichkeit mehrere Varianten einer Pluginlösung textuell abzugrenzen.

Beispielhaft soll dies am folgendem Szenario erläutert werden:
Man stelle sich die Situation vor, es existiert ein Plugin X, welches durch einen eingebauten Schalter unterschiedliche Workflows abdeckt. Möchte man nun innerhalb dieses Plugins in Abhängigkeit des aktuellen Modus andere Texte verwenden, müssen die Keys dupliziert oder die vm-Dateien angepasst werden.

Für diesen Fall kann man mittels Maven tricksen. Wichtig hierbei ist eine eindeutige Namenskonvention für die Unterteilung der properties vorzunehmen. Beispielsweise kann man die properties wie folgt namentlich abgrenzen:

  • my_plugin.properties
  • my_plugin_typex.properties
  • my_plugin_typey.properties
  • my_plugin_de_DE.properties
  • my_plugin_typex_de_DE.properties
  • my_plugin_typey_de_DE.properties

Ist das geschehen, definiert man in der atlassian-plugin.xml des LanguagePool-Plugins folgende Zeilen:

<resource name="i18n" name="i18n_my_plugin_general" type="i18n"
     location="/my_plugin"/>

<resource name="i18n" name="i18n_my_plugin_specific" type="i18n"
     location="/my_plugin_${TYPE}"/>

Letztlich müssen im Eclipse zwei neue Maven Run-Configurations erstellt werden, die das entsprechende Goal (Bsp.: package, install oder atlassian-pdk:install) verwendet und im Environment-Tab die Variable TYPE auf typex oder auf typey setzt.

Kommentar Feed Trackback URL
thu

Am 24.02.2010 haben sich die .NET Freaks aus Dresden und Umgebung zur .NET Usergroup bei uns im Hause zusammen gefunden. Diesmal wurde es gruselig. Alexander Groß führte uns durch ein aktuelles Projekt, welches sich rund um die  Bestattung und Einäscherung dreht. Die Idee des Vortrages, welcher eigentlich kein Vortrag im engeren Sinne darstellte, war die gemeinsame Betrachtung eines aktuellen Projektes und deren verwendeten Techniken.

Schon nach einigen Minuten kam es zu interessanten Diskussionen.

Alexander zeigte beispielsweiße wie in seinem Projekt Rake verwendet wird um auf einfache Weise Konfigurationen leicht wartbar zu halten. Außerdem wie Rake und MSDeploy zusammen ein super Team darstellen um Anwendungen zu deployen.

Artikel vollständig lesen »

Kommentar Feed Trackback URL
dri

Auf zum 2. Tag der Basta! Hauptkonferenz – und damit dem ersten der beiden SharePoint Days. Heute gibt es keine morgendliche Keynote, sondern es geht gleich in die Sessions – für mich ist das als erstes Sehenswertes aus SharePoint 2010 mit Tom Wendel. Erstaunlich für mich, dass nur ca. ein Drittel der anwesenden Entwickler Sharepoint 2010 überhaupt schon gesehen hat. Dementsprechend “basic” fällt die Vorstellung der Neuerungen aus – weshalb ich hier auch auf eine detaillierte Auflistung verzichte. Trotzdem ein paar “Bruchstücke”, die mir nennenswert erscheinen: Artikel vollständig lesen »

Kommentar Feed Trackback URL
thu

Dem Einen oder Anderen hat Visual Studio wahrscheinlich schon einmal mit dieser leicht dominierenden Bildschirmausgabe überrascht. Wahrscheinlich aber haben es die Meisten noch nie zu Gesicht bekommen, denn wir sind ja keine Copy & Paste Entwickler. :)

Das ist der besagte Hinweis:

Here you can see the error message thrown by visual studio

RDClip

Randbedingungen:
Ich verwende eine virtuelle Maschine(Windows Server 2003) unter Microsoft Virtual Server 2005 R2.

Das Problem tritt gelegentlich auf, wenn innerhalb der Host Maschine etwas kopiert wird und anschließend versucht wird, das soeben kopierte, in Visual Studio, auf der Entwicklungsmaschine, einzufügen.

Lösung:

Wie kann dieses Problem nun gelöst werden? Anfangs dachte ich, der Übeltäter wäre Visual Studio, und beendete einfach den devenv.exe Prozess. Irgendwann irritierte es mich aber, dass sobald diese Meldung auftauchte überhaupt kein Copy & Paste mehr funktionierte. Zu diesem Zeitpunkt fand ich heraus, dass der eigentliche, anfangs nicht verdächtige, Prozess rdpclip.exe der Schuldige war.

Um also in Visual Studio weiter arbeiten zu können, muss einfach der Prozess rdclip.exe beendet werden. Dies kann leicht über den  Task Manager vollführt werden.

Falls anschließend wieder Copy & Paste verwendet werden soll, nicht vergessen den RdpClip.exe Prozess wieder zu starten. Gefunden werden kann dieser im Verzeichnis C:\Windows\System32

Kommentar Feed Trackback URL
mhy

SharePoint 2010 bietet mit der Assembly Microsoft.SharePoint.Linq.dll (zu finden im Ordner 14\ISAPI) die Möglichkeit, recht einfach Listeninhalte abzufragen. Wenn man sich etwas näher damit beschäftigt, kann man sehr viele Parallelelen zu LINQ to Objects und Linq to SQL entdecken.

Erster Schritt ist, eine Referenz auf die genannte Assembly hinzuzufügen. Ab diesem Zeitpunkt steht der Namespace Microsoft.SharePoint.Linq zur Verfügung. Dieser beinhaltet die Klasse DataContext, über die ähnlich wie bei LINQ to SQL auf die Inhalte zugegriffen werden kann. Die Initialisierung des Kontexts ist recht einfach – hierzu wird einfach im Konstruktor des Objekts die Url der zu verwendenden Site übergeben.

Vor dem Erfolg steht aber ein wenig Arbeit, denn der Zugriff ist typsicher und so müssen für die verwendeten Inhaltstypen Klassen angelegt werden. Auch hier zeigen sich wieder Parallelen zu bereits Bekanntem: Mit Hilfe des Tools SPMetal (zu finden im Ordner 14\BIN) können die Klassen auf Basis einer bestehenden Site automatisch erstellt werden.

Ab diesem Zeitpunkt ist es recht einfach, wie das folgende Beispiel zeigt:

DataContext data = new DataContext("http://mysite/");

EntityList<Page> wikiPages = data.GetList<Page>("Pages");
var filteredPages = from wikiPage in wikiPages
            where wikiPage.Name == "Inline-Process-Editor.aspx"
            select wikiPage;

foreach (var filteredPage in filteredPages)
{
    Console.WriteLine(filteredPage.Path);
}

Kommentar Feed Trackback URL
nächste Seite

Tag Cloud

Unsere Themen

Kommentare

  • SharePoint_Team: Rückblick zum Treffen der .NET Usergroup Dresden am 24.02.2010: im #Communardo #Techblog...
  • TorstenHu: Rückblick zum Treffen der .NET Usergroup Dresden am 24.02.2010: im #Communardo #Techblog...
  • SharePoint_Team: Neuer Blogpost zur #BastaCon im #Communardo #TechBlog: http://tinyurl.com/yjqyqpb This comment was...
  • SharePoint_Team: Nur noch etwa 1 Stunde, dann beginnt die .NET Usergroup… http://bit.ly/dxDoKg This comment was...
  • SharePoint_Team: RT @TorstenHu: ViS is waiting for an operation oder Warum Copy & Paste schlecht ist: #Communardo...

Twitter