Python – Skriptsprache der Wahl?

Ein Python-Tutorial beginnt mit den Worten: “Python ist eine einfach zu erlernde und mächtige Programmiersprache”. Benannt nach der BBC Serie “Monty Python’s Flying Circus” würde man wohl Obskures aus dem Bereich des schwarzen Humors erwarten – aber der Reihe nach.

Nachdem Python fester Bestandteil im Werkzeugkasten (nicht nur) der Finanzmathematiker und KI-Entwickler geworden ist als auch in zahlreichen offenen und kommerziellen Umgebungen wie der Google AppsEngine oder der beliebten 3D Rendering Engine Blender zu finden ist, lohnt sich ein näherer Blick sicherlich. Python gibt es für alle weit verbreiteten Betriebssysteme und wird derzeit in zwei Versionen, 2.6 und 3.x, gepflegt. Die Fülle an für Python vorhandene Bibliotheken lässt dabei kaum einen Anwendungszweck aus: ganz gleich, ob man mit OpenGL Moleküle in 3D darstellen möchte, Charts von Börsenkursen zeichnen möchte oder numerische Lösungen für lineare (und natürlich auch nicht-lineare) Abhängigkeiten sucht und das ganze in schicken GUIs verpacken möchte, mit relativ wenig Zeilen Pythonprogrammcode ist hier eine ganze Menge möglich.

Ein Beispiel:

reader = csv.reader(urllib.urlopen('http://ichart.yahoo.com/table.csv?s=%5EGDAXI&d=0&e=26&f=2010&g=d&a=10&b=26&c=1990&ignore=.csv'))
values = []

for row in reader:
    values.append(row[1])

values = values[1:].reverse()
grid(True)
plot(values)

Dieses kleine Snippet holt eine CSV Datei mit historischen Werten des DAX von der Yahoo! Finance Plattform, sammelt die gewünschten Werte in einer Liste zusammen und stellt diese dann graphisch auf dem Bildschirm als Chart da.
Beinahe zu einfach – mit einfachen Mitteln kann man dann auch den Chart in verschiedene Richtungen stylen, so dass professionelle Ergebnisse entstehen. Hier ein Beispiel von der matplotlib-Seite:

Aktuell in der Entwicklung befindlich ist Python 3.x – eingefleischte Python-Profis raten allerdings derzeit noch von der Benutzung der 3er Versionen ab. Zum einen sind viele der Bibliotheken noch nicht auf die neueste Version migriert worden, zum anderen ist die Version 2.6 auch in vielen Fällen immer noch einen Tick schneller.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • E-mail this story to a friend!
  • LinkedIn
  • MySpace
  • Netvibes
  • ThisNext
  • TwitThis
  • Yahoo! Buzz
  • MisterWong.DE
  • Webnews.de
  • Blogosphere News

Sharepoint – mit Windows XP WebParts programmieren

Um einen WebPart für Sharepoint mit Hilfe der Windows Sharepoint Services 3.0 Tools entwickeln zu können, braucht man mindestens einen Windows Server 2003 als Betriebssystem. Anders lassen sich diese Extensions fürs Visual Studio leider nicht installieren. Es ist aber trotzdem möglich, WebParts unter Windows XP zu entwickeln. Wie das geht, möchte ich hier erklären:

Um einen funktionierenden WebPart mit Visual Studio 2005 zu schreiben, braucht man lediglich die Microsoft.SharePoint.dll. Zu finden ist diese auf dem Server, auf dem MOSS oder WSS installiert ist. Diese referenziert man sich in seinem eigenen Projekt, in unserem Fall ein WebCustomControl. Da man später zur Installation unseres Webparts die Versionsnummer angeben muss, schauen wir kurz in der Assembly.info vorbei und schalten das automatische hochzählen der Versionierung aus. Wir sind also ab sofort immer auf Version 1.0.0.0.  Außerdem fügen wir bei den Usings folgendes hinzu:

using System.Security;

Nun fügen wir unter der Version noch ein [assembly: AllowPartiallyTrustedCallers] hinzu und fertig ist unsere Assembly.info.

Jetzt, da wir Zugriff auf die Klassen haben, die wir brauchen, können wir uns ein eigenes WebCustomControl erstellen. In den Usings fügen wir die WebPartPages hinzu.

using Microsoft.SharePoint.WebPartPages;

Unser WebCustomControl erbt von der Klasse WebPart.

public class MyWebPart :Microsoft.SharePoint.WebPartPages.WebPart

Im Control wird die Methode protected override void RenderContents(HtmlTextWriter output) gelöscht. Dann wird die RenderWebPart Methode überschrieben.
Jetzt noch etwas Logik, und fertig ist der WebPart. Ein Beispiel:

Button saveTitle;
TextBox newTitle;

public void saveTitle_click(object sender, EventArgs e)
{
     this.Title = newTitle.Text;
     try
     {
          this.SaveProperties = true;
     }
     catch (Exception ex)
     {
          this.Title = "Error: " + ex.Message;
     }
}

Wir überschreiben die CreateChildControls:

protected override void CreateChildControls()
{
     newTitle = new TextBox();
     newTitle.Text = "";
     Controls.Add(newTitle);

     saveTitle = new Button();
     saveTitle.Text = "Set Web Part Title";
     saveTitle.Click += new EventHandler(saveTitle_click);
     Controls.Add(saveTitle);
}

In der RenderWebPart Methode wird der bisherige Code gelöscht und folgender eingefügt:

RenderChildren(output);

Um den WebPart auf dem SharePoint Server zu deployen, braucht unsere Assembly einen Strong Name. Diesen unter den Eigenschaften des Projektes bei Signing hinzufügen und die Solution noch mal builden.

Unsere fertige dll legen wird nun auf den Sharepoint Server umgezogen und im Global Assembly Cache registriert (gacutil –i).
In der web.config des Sharepoint Servers (normalerweise zu finden unter C:\Inetpub\wwwroot\wss\VirtualDirectories\PortNummer\) fügt man bei <SafeControls> einen weiteren Eintrag hinzu:

<SafeControl Assembly="<Name der dll ohne Endung>, Version=1.0.0.0, Culture=neutral, PublicKeyToken=<PublicKeyToken aus GAC>" Namespace="<Namespace der Anwendung>" TypeName="<Name der Klasse>" Safe="True"/>

Jetzt braucht man nur noch eine XML-Datei mit folgendem Inhalt zur Installation:

<?xml version="1.0" encoding="utf-8" ?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
    <metaData>
      <type name="<namespace>.<Klassenname>, <dll ohne .dll>, Version=1.0.0.0, Culture=neutral, PublicKeyToken=<publickeytoken aus gac>" />
      <importErrorMessage>Cannot import this Web Part.</importErrorMessage>
    </metaData>
  <data>
    <properties>
      <property name="Title" type="string">My Web Part</property>
      <property name="Description" type="string">A test web part.</property>
    </properties>
  </data>
</webPart>
</webParts>

Dieser Datei geben wir die Endung dwp.

In unserer Sharepoint Anwendung navigieren wir nun zu Site Actions -> Site Settings und wählen unter dem Punkt Galleries Web Parts aus. Hier klickt man auf Upload und navigiert zur eben erstellten dwp Datei. Nun sollte der Webpart nutzbar sein. Achtung: Bei der Vorschau funktioniert die Logik dahinter noch nicht.

Nützliche Links:
http://msdn.microsoft.com/en-us/library/ms452873.aspx
http://www.codeproject.com/KB/sharepoint/WebParticles.aspx

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • E-mail this story to a friend!
  • LinkedIn
  • MySpace
  • Netvibes
  • ThisNext
  • TwitThis
  • Yahoo! Buzz
  • MisterWong.DE
  • Webnews.de
  • Blogosphere News

dbHero – stop waiting for SQL Server

Well finally, those guys from the code Hero team came up with a tool, which puts an end to those nerv wracking procedures when it comes to taking a snapshot from a database and put it back in.

Imagine, you’re a tester or business analyst or project manager or developer or …. whatever ;)

Today, your task is it, to do some test on a large 3-tier web based system. Some of those tables in the database have millions of records in them. The whole application is quite complex, and well, you start testing the new functionality, the guys from the dev team just added.

Well, you do your tests, find some bugs (surprise, surprise ;) ) circle back to the developers and they fix them (even more surprise ;) ).

So, next day, you do your testing again. Well, you’ld like to BUT, since your tests, influenced the data of the system, some of your tests hit a different scenario. And maybe, your testing doesn’t trigger the buggy behavior anymore, or maybe, the bugs have been fixed. The point is, you don’t know for sure, as your starting point in the test system was a different than the day before…

So you need to take a snapshot of  some of those tables in the database before you start testing, and put it back in afterwards. That gives you exactly the same starting point for any consecutive tests.

Yes, MAYBE you can do this – but not if you’re talking about massive datasets like thousands of records, or ten housands, or hundret thousends… well, you get my point ;)

Using SQL insert scripts, will bring the Enterprise Manager to a halt (if not a crash) if you use tables with more than some ten thousands of records (and maybe you have a couple of those tables in your database and in that script).

The only way, you can use that SQL Insert script is to manually truncate it into smaller chunks, so the Enterprise Manager can work with it. That’s gonna take you ages – and may lead to some mistakes. Even if the Enterprise Manager swallows the whole script in one piece, it’s very, very slow.

The code Hero guys, where annoid about this, in their day to day work and created dbHero. That tool creates either SQL Inserts from SQL Server databases (no, we don’t want to use them), AND so called POWER scripts ;) The POWER scripts are an enhanced way of bulk copy scripts. They are damn fast – (code Hero says more than 50 times faster). Enhanced, why ? Well, also the standard bulk copy has got some issues ;) ) The code Hero guys, don’t reveal all of them (wonder why … ;) ) but point into the direction of encoding schemas, delimiters and string problems, among a few others…. At the same time, they even improved the already good speed of the bulk copy scripts.

Anyhow. Using dbHero makes taking those snapshots in POWER script modus a breath of fresh air ;) Instead of waiting hours or sometimes forever (when Enterprise Manager decides to go dark on you with too larg scripts ;) ), the job is done in seconds to minutes.

That saves time – and yes, you know what I’m gonna say – money ;)

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • E-mail this story to a friend!
  • LinkedIn
  • MySpace
  • Netvibes
  • ThisNext
  • TwitThis
  • Yahoo! Buzz
  • MisterWong.DE
  • Webnews.de
  • Blogosphere News

Testen mit Datenbank, ganz ohne Odyssee

Kaum eine Anwendung kommt ohne Daten aus einer Datenbank aus, und kaum ein Entwickler möchte ohne die aufs grüne Lämpchen gehenden Unit-Tests an größeren Projekten arbeiten.
Um Datenbanken und Unit-Tests miteinander verheiraten zu können, gibt es mehrere Ansätze.

Natürlich ist der erste und auch gute Ansatz von Unit-Tests, die Bausteine mit hardcodierten Standard-Daten zu penetrieren, die nicht aus einer Datenbank kommen: schließlich ist das Zusammenspiel mit der Datenbank schon ein großer Schritt in Richtung Integrationstest und gibt zeitgleich auch noch die Möglichkeit zu prüfen, ob die Klassen aus der Datenbankschicht wie erwartet funktionieren. Je mehr Variationen an Daten man dahingehend testen möchte, desto dringender wird es, die Methode der datenbank-getriebenen Tests gegenüber denen mit festverdrahteten Eingabeparametern zu präferieren. Und ganz nebenbei bemerkt: man trennt sich auch weiter von der Gefahr, ausschließlich mit idealisierten Daten zu testen, und nimmt dann doch jene Daten zur Brust, die in einem richtigen user-generierten Einsatz gewonnen wurden, ohne mittelfristig mehr Code für die Tests als die eigentliche Auftragsarbeit zu entwickeln.

Durch Ignorieren des Eventuellen werden Unit-Tests schließlich nach und nach immer weniger wert – insbesondere dann, wenn diese falsch positiv auf grün gehen.

Um diesen Wertverlust zu vermeiden, kann man sich eigentlich nur noch behelfen, in dem man die Datenbank wieder an einen wohldefinierten Ausgangspunkt zurückversetzt, mittels einem Script jene Datensätze erzeugt, die Grundlage für die weitergehenden Tests auf der Datenbank werden sollen und anschließend wieder aufräumt, um die Tests bis zur Reife der Programmierung immer und immer wieder anstoßen zu können. Dies kann man natürlich mit der Hilfe von Transaktionen machen: was allerdings bei vielen aufeinander aufbauenden Tests schnell unübersichtlich werden kann.

Einfacher ist es dann doch, sich den Auszug mit einem Vorher-Stand an Testdaten nebenhin zu legen und diese Daten dann vor den Tests einmalig konsistent zu reimportieren. Bei drei Tabellen mag man vielleicht das ganze noch per Hand pflegen. Aber auch hier schon ist es doch wesentlich einfacher und sicherer, auf einen Knopf zu drücken, der einem die aus dem Einsatz entstandenen Daten aus einer Datenbank zieht und zum immer wieder Einspielen archiviert. Auch aus dieser Motivation heraus entstand dbHero – ein schmuckes Tool, welches bei der täglichen Arbeit bei uns nicht mehr wegzudenken ist. Denn getrost kann man mit real-world Tests ein stückweit grüner auf grün gehen.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • E-mail this story to a friend!
  • LinkedIn
  • MySpace
  • Netvibes
  • ThisNext
  • TwitThis
  • Yahoo! Buzz
  • MisterWong.DE
  • Webnews.de
  • Blogosphere News

Nur noch schnell einen BULK INSERT von einem Share …

Wer kennt das nicht? Noch schnell die Daten von einem Share in einen SQL Server laden und fertig. Der SQL Server Dienst läuft aber in der Regel unter einem lokalen Account (Local System, Local Service oder  Network Service). Dieser hat naturgemäß keinen Zugriff auf Netzwerk Laufwerke. Es sei denn:

  • das Share hat die NTFS Berechtigung “Jeder” und die Freigabe Berechtigung “Jeder”.
  • Man läßt den SQL Server Dienst unter einem Account der Domaine laufen, welcher die notwendigen Permissions hat.
  • Man meldet sich mit einem Domain Account anstatt einem SQL Login am Server an.
  • Mehr dazu kann man unter “Security Considerations” und “Bulk Importing from a Remote Data File” bei http://msdn.microsoft.com/en-us/library/ms175915.aspx gelesen werden.

Frustriert hat man es Stunden später vielleicht doch hinbekommen oder sich einen anderen Weg überlegt.

Aber mal angenommen wir möchten ein DAT Datei von einem Share adhoc in den SQL Server laden:

BULK INSERT [T_TEST]
FROM '\\server\share\test\T_TEST.dat'
WITH (
DATAFILETYPE = 'char',
TABLOCK,
CODEPAGE = '1252',
KEEPNULLS,
KEEPIDENTITY
);

Gegebenfalls hat das sogar von dem lokalen SQL Server funktioniert, aber auf dem eigentlichen Server will er das nicht laden.


Msg4861, Level 16, State 1, Line 2
Cannot bulk load because the file "\\server\share\test\T_TEST.dat" could not be opened. Operating system error code 5(Zugriff verweigert).

 

Um die Daten jetzt irgendwie doch (noch schnell) reinzuladen, können wir mal nachschauen, ob wir überhaupt in dem Verzeichnis lesen dürfen. Dafür brauchen wir kurzfristig die xp_cmdshell.

-- ‘Erweiterte Optionen anzeigen’ einschalten.
EXEC sp_configure 'show advanced options', 1;
-- Das System aktualisieren.
RECONFIGURE;
-- xp_cmdshell anschalten.
EXEC sp_configure 'xp_cmdshell', 1;
-- Das System aktualisieren.
RECONFIGURE;

 

Nun können wir den DIR Befehl auf den Zielpfad ausführen:

exec xp_cmdshell 'dir \\server\share\temp\'


Zugriff verweigert

Wir geben uns die notwendigen Rechte mit

exec xp_cmdshell 'net use \\server\share /user:<user>@<domain> <passwort>'


Der Befehl wurde erfolgreich ausgeführt.

Dann wiederum sollte der oben erwähnte DIR Befehl auch die Dateien in dem Verzeichnis anzeigen.

Volume in Laufwerk \\server\share\temp\: hat keine Bezeichnung.
Volumeseriennummer: 10XX-X58X
NULL
Verzeichnis von \\server\share\temp\
NULL
23.01.2008 10:16 8.423.195 T_TEST.dat
Nun den BULK INSERT ausführen und dieser sollte seine Arbeit mit der gewünschten Meldung quittieren:

(334.714 row(s) affected)

Jetzt noch aufräumen mit

-- Share trennen
exec xp_cmdshell 'net use \\server\share /delete';
-- xp_cmdshell abschalten.
EXEC sp_configure 'xp_cmdshell', 0;
-- Das System aktualisieren.
RECONFIGURE;

Abschließen bleibt noch zu sagen, das diese Variante nur dazu gedacht ist, mal Daten auf die Schnelle zu laden. xp_cmdshell ist „evil“ und sollte nur mit Bedacht genutzt werden. So wie man einen DIR absetzen kann, so kann man auch alle anderen Befehle absetzen !

Zu Risiken und Nebenwirkungen fragen Sie Ihren Administrator ;)

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • E-mail this story to a friend!
  • LinkedIn
  • MySpace
  • Netvibes
  • ThisNext
  • TwitThis
  • Yahoo! Buzz
  • MisterWong.DE
  • Webnews.de
  • Blogosphere News

Germanys next Topmodel – ein C# Entwickler ?

Alles wird gemessen, heutzutage. Performance von Aktien, der Ölpreis……. und mein Blutdruck ;)

Bleibt die Frage, wie messe ich einen Programmierer ? Nun, wie immer bei solchen Fragen, ist die Antwort nicht einfach. Viele Eigenschaften sind die Zutaten für einen guten Programmierer:

  • Fachwissen, welches sich stetig erweitern sollte.
  • Erfahrung – mit den Jahren hat man so die ein oder andere Klippe im Programmieren umschifft, das hilft in der Praxis. Fachwissen – zugegeben, nicht unbedingt notwendig, aber wenn es vorhanden ist, dann ist es ziemlich hilfreich.
  • Kreativität: wohl dem, der nicht von Morgens bis Abends Interfaces zwischen einem Legacy Programm und einen Upstream System programmieren muß.
  • Architekturverständnis. Yep, auch das ist sehr hilfreich. Klar gibt es Software Architekten, die auch wirklich sehr hilfreich sind, aber in kleinen Projekten fehlen die vielleicht, und das ‘Schludern’ im Code von heute, wird der Wochenend-Killer in einem oder zwei Jahren ;)
  • ‘PS-auf-die-Straße-bringen’ Eigenschaft, oder das GTD Gen :) , welches letztendlich ein Mix aus den oben genannten Eigenschaften darstellt (siehe gesonderten Blog Beitrag).

Und das GTD Gen kann man messen. Na ja, ‘Kind of’.

Top Coder

Competition ArenaUnter http://www.topcoder.com erreicht man eine Plattform die sozusagen Programmier-Wettbewerbe austrägt. Zugegeben, der Registrierungsprozeß ist etwas uncool, aber es lohnt sich. In der etwas unübersichtlichen Seite von TopCoder verbergen sich diverse Betätigungsfelder. Für Programmierer und auch für Firmen, die Programmierer suchen. TopCoder bietet Wettbewerbe an, in denen Programmierer in einer Art ‘SandBox’ Aufgaben gestellt bekommen, deren Lösung mit Punkten bewertet werden.

Top Coder für Programmierer

Für Programmierer bietet TopCoder eine Plattform um ihr Wissen neutral mit anderen zu messen. Aufgaben aus diversen Bereichen wie Algorithmen, Software Architektur, Design, Development, Assembly Programming aber auch Software Testing stehen zur Auswahl.
Hatte ich erwähnt, das man des Englischen mächtig sein sollte, um bei TopCoder mitzumachen ? Alle Aufgaben, sowie die ganze Plattform sind in der englischen Sprache verfaßt. Aber Hand aufs Herz. In diesem Geschäft, sollte man sowieso gut Englisch sprechen, oder ?Aufgabe und Lösung

Hat man sich einmal angemeldet und sich einen Bereich ausgesucht (z.B. Assembly Development), dann kann man sich Aufgaben aus vergangenen Wettbewerben anschauen. Folgende Programmiersprachen stehen dabei zur Verfügung: Java, C++, C#, VB.net (Python in Vorbereitung).
Es ist nicht notwendig, jedoch sehr empfehlenswert, die Programmiersprache auf dem heimischen Rechner installiert zu haben, um so in der eigenen Entwicklungsumgebung zu coden, und dann das Ergebnis in TopCoder zu kopieren. Man kann auch sofort im TopCoder Fenster coden.

Grundsätzlich gibt es hier 2 Kategorien: Wettbewerbe (Contests) und Trainings (Practise Rooms).

In den Practise Rooms kann man sozusagen abgelaufene Wettbewerbe nachprogrammieren. Dabei werden verschiedene Schwierigkeitsstufen zur Auswahl gestellt. Je nach Schwierigkeitsstufe, kann man unterschiedliche Punktzahlen erreichen. Tipp: erst mal mit einer kleinen Stufe anfangen ;) )

Wettbewerbe starten weltweit zur gleichen Uhrzeit. Dem Teilnehmer wird dann die Problemstellung geschildert und los gehts. In der eigenen Programmierumgebung starten und kompilieren und wenns ohne Fehler läuft, den Source Code per copy & paste ins Top Coder Fenster pasten :) Achtung, jeder fehlerhafte Lauf im Top Coder Fenster kostet am Ende wertvolle Punkte … Am Ende des Wettbewerbs kann man sich so mit anderen Teilnehmern aus der ganzen Welt vergleichen. Da es bekanntlich viele Wege nach Rom gibt, gibt es auch verschiedene Lösungsansätze und selbst Super-Programmierer habe ich ob der Einfachheit und Kürze der anderen Lösungen schon erstaunt und ehrfürchtig gesehen ;)

Top Coder für Firmen

System TestFür Firmen bietet diese Plattform ungeahnte Möglichkeiten. So ist es durchaus denkbar im Rahmen eines Vorstellungsgesprächs einen Bewerber bzw. eine Bewerberin ein Problemfall live in TopCoder programmieren zu lassen. Es ist somit ein neutrales Medium mit neutralen Fällen in einer neutralen Umgebung. So eine Übung dauert vielleicht 20-30 Minuten, aber es zeigt oft, ob neben den sehr guten Zeugnissen auch die Praxis vorhanden ist.

Natürlich sollte solch ein Test nur ein Mosaikstein im Bewerberprofil sein. Aber man kann doch einiges feststellen, da es sich im Allgemeinen in solch einem Gespräch dann um eine Streßsituation handelt. Also, liebe Arbeitgeber, bitte auch berücksichtigen dass in solch einem Umfeld auch Top Programmierer manchmal einen Black-Out haben können ;)

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • E-mail this story to a friend!
  • LinkedIn
  • MySpace
  • Netvibes
  • ThisNext
  • TwitThis
  • Yahoo! Buzz
  • MisterWong.DE
  • Webnews.de
  • Blogosphere News

Das GTD Gen bei Programmierern

Das ‘GTD’ Gen

Software Entwickler gibt es in allen Ausprägungen. Ich kann das beurteilen, weil ich selber jahrelang Software geschrieben habe, und ja, ich gestehe, es auch heute noch leidenschaftlich gerne tue. Es ist so ein bisschen wie mit dem Fahrradfahren. Man verlernt es nie ganz, und an einem sonnigen Tag holt man den Drahtesel dann ans Tageslicht, Reifen aufpumpen und los geht’s ;)

Gute Software-Entwickler von heute sind jedoch eher mit Profi Radfahrern zu vergleichen. Nein, ich meine nicht, dass sie sich mit Eigenblut dopen dopen ;) . Ich meine, dass sie ständig auf dem neuesten Stand bleiben müssen, um auch alle Möglichkeiten einer modernen Programmiersprache auszunutzen. Schaut man zum Beispiel auf das Microsoft .net Framework, so reden wir von ca. 30.000 mitgelieferten Klassen (Schätzungen gehen bis zu 35.000 !!!). Offensichtlich kann man die nicht alle kennen. Dies passt also bestimmt nicht mehr in meine Hobby-Liga der Software Programmierung.

Aber ich weiche vom Thema ab. Es geht ums GTD Gen.

GTD = Get Things Done

Ich gestehe, ich habe mir den Namen des Gens selber ausgedacht und es ist auch noch nicht wissenschaftlich nachgewiesen worden. Aber es ist vorhanden. Bei einigen mehr bei anderen weniger ;) .

Worum geht’s dabei? Programmieren ist für viele Programmierer eine Funktion aus effizientem Code und Skalierbarkeit des Ergebnisses. Es ist eine (nicht leichte) Aufgabe, diese beiden Parameter optimal für ein neues Projekt auszubalancieren. Ein Software Architekt sollte einem das Skalierbarkeitsproblem abnehmen. Aber die sind teuer und nicht in jedem kleinen Projekt vorhanden.

Also selbst ist der Mann/Frau.  Es gibt allerdings noch einen dritten Parameter in der Softwareprogrammierung. Ein statischer, leider.  Die Zeit.  Sozusagen

public static DateTime time;

Also, die Zeit, die für ein Projekt vorgesehen wurde.


  → Continue reading "Das GTD Gen bei Programmierern" »

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • E-mail this story to a friend!
  • LinkedIn
  • MySpace
  • Netvibes
  • ThisNext
  • TwitThis
  • Yahoo! Buzz
  • MisterWong.DE
  • Webnews.de
  • Blogosphere News