Archiv für den Monat September 2012

Stelle für Bachelor- / Masterthesis zu vergeben

Für das neue Semester suchen wir in der IT der Firma heco noch nach motivierten Studenten. Die Thesis kann in folgenden Bereichen geschrieben werden:

  • Web-Entwicklung: Im Rahmen unseres Web Auftritts, welcher auf Typo3, PHP, MySQL und JavaScript basiert
  • Administration: Im Rahmen eines homogenen Microsoft Netzwerkes mit hohem Virtualisierungsgrad
  • Software-Entwicklung: Im Rahmen der ERP Eigenentwicklung auf Basis von .NET in der Programmiersprache C#

Für jegliche Themenvorschläge in den genannten Bereichen sind wir offen. Unter diesem Link gibt es einige Vorschläge. Gerne sind wir auch neuen Technologien wie der Windows 8 App und der Handy App Entwicklung gegenüber aufgeschlossen.

Mit Martin Edelmann steht ein ehemaliger Diplomand und inzwischen leitender Web-Entwickler gerne Rede und Antwort zu Fragen.

Mit einer Bewertung von 4,4 von 5 Punkten bei Kununu sehen wir uns als attraktiver Arbeitgeber mit modernster Technik und einem hochmotivierten, jungen IT Team. Viele von uns sind ehemalige Studenten aus Karlsruhe.

Die Bewerbung kann man mir über die üblichen Kommunikationskanäle wie Facebook, Twitter, Xing, LinkedIn, Google+ oder per Email zusenden.

Werbung

Developer Open Space 2012

Die Anmeldung für den Developer Open Space 2012 in Leipzig vom 19-21 Oktober ist jetzt hier freigeschaltet. Wie ersichtlich ist, wurde der Name still und heimlich auf Developer Open Space (früher NET Open Space) geändert. Ist meiner Ansicht nach auch treffender!

Interessant finde ich den Workshop Day von Mitgliedern und Mitarbeitern von grossweber. Persönlich habe ich mich zu TDD angemeldet (nein, das Thema langweilt mich immer noch nicht und ich denke, dass ich wieder Neues lernen kann). Vermutlich wird die ein oder andere böse Zunge wieder kommerzielle Hintergedanken unterstellen. Da die Workshops kostenfrei sind und auch einen Tag vor dem Open Space stattfinden, denke ich, dass dies völlig in Ordnung geht und es als das zu bewerten ist, was es darstellt: Ein Geschenk an die Community.

Trotzdem will ich auch zwei Kritikpunkte äußern:

  • Es fehlt an einer entsprechenden Facebook Page
  • Eine Mail steht bis dato noch aus

Beide Punkte sind für mich persönlich doch sehr ärgerlich, da es eine entsprechende Google+ Eventpage gibt. Wenn schon auf eine Facebook Page verzichtet wird (imho ein absolutes No Go!), dann hätte zumindest zeitgleich eine Email verschickt werden sollen. Für diese hatte ich mich beispielsweise vor längerer Zeit registriert. Damit sollte gewährleistet werden, dass man rechtzeitig über die Anmeldeeröffnung informiert wird. Viele meiner Kollegen und Freunde haben verständlicherweise keinen Google+ Account (Stichwort Geisterstadt), sodass diese außen vor waren. Falls ich hier fälschlicherweise behaupte, dass es keine FB Page gibt, so korrigiere ich dies gerne bei einem entsprechenden Hinweis.

Mobile Serie – Das große Manko des Kindle

Seit zwei Wochen bin ich stolzer Besitzer eines Kindle. Wohlgemerkt eines Kindle und nicht eines Kindle Fire. Der Unterschied ist schnell erklärt: Ersteres ist ein Ebook-Reader und letzteres ein Tablet. Es wäre durchaus berechtigt zu sagen, dass es sich um den Ebook-Reader schlechthin handelt. Seit Monaten führt er die Bestenlisten an, unter anderem die auf Chip Online.

Eines gleich vorweg: Bei dem Gerät handelt es sich um ein hervorragendes Produkt! Vor allem die 3G Variante mit dem inkludierten weltweiten Mobilzugang ist ein tolles Angebot. Auf Grund des Preises, der Akkulaufzeit und der Größe kann man sich durchaus überlegen, einen Kindle zusätzlich zu einem Tablet anzuschaffen. Das Gerät hat sich je nach Leseumfang relativ schnell amortisiert, da Ebooks in der Regel zw. 5-10€ günstiger zu erwerben sind als echte Bücher (Kleiner Tipp: Die Robert C. Martin Clean Code Collection). In jedem Fall sollte man sich im Klaren sein, dass Ebook-Reader ein gänzlich eigenes Segment sind, die ihre Stärken einzig und allein beim Lesen von digitalen Büchern ausspielen!

Allerdings kratzen zwei wesentliche Punkte an meiner Meinung über das Kindle:

  • Das ePub-Format wird nicht unterstützt
  • Es gibt keine dedizierten Rechnungen für den geschäftlichen Nutzen

Während die ePub Problematik nur dann relevant ist, wenn primär Literatur bei Dritten erworben werden soll, so ist das Fehlen einer mit Mehrwertsteuer ausgewiesenen Rechnung für das Geschäftsumfeld annähernd ein No Go! Doch gerade hier könnte der Kindle viele Stärken ausspielen:

Über digitale Lesezeichen und Anmerkungen wäre es beispielsweise möglich, dass der Web Developer dem CTO/CIO Hinweise zur interessanten Technologien hinterlegt. Oder ein Projektmanager könnte den Teammitgliedern relevante Informationen markieren. Durch das Binden der gekauften Literatur an den Firmenaccount von Amazon wäre die gesamte betriebliche Literatur allen Mitarbeitern zugänglich. Doppelkäufe könnten vermieden werden. Bücherschwund würde praktisch gänzlich entfallen. Je nachdem, was noch in der Ideenschmiede von Amazon an Features entwickelt wird, könnte kollektives Lernen und Fachsimpeln gänzlich neue Formen annehmen.

Deshalb habe ich Amazon unter anderem über Facebook das Feedback gegeben, dass ich hier noch Verbesserungspotential sehe. Natürlich ist mir klar, dass es

imagegute Gründe für dieses Vorgehen geben kann, z.B. welches Land und somit welche Mehrwertsteuer bei Käufen maßgeblich ist. Doch wenn hier nachgebessert wird, so könnte man einen neuen Absatzmarkt ansprechen: Schulen und Firmen!

Es folgt noch ein Gesprächsausschnitt mit einem Amazon Mitarbeiter. Ich möchte darauf hinweisen, dass es weder meine Absicht ist Amazon hierdurch zu verunglimpfen noch den Ansprechpartner, der mit mir den Chat geführt hat. Die Information dient lediglich der Vollständigkeit und kann auf Anfrage jederzeit gelöscht werden. Außerdem handelt es sich hierbei um meine persönliche Meinung und ich blogge hier als Privatperson.

 

Sie sind nun verbunden mit *Name des Ansprechpartners* von Amazon.de.
Ich:Guten Tag
*Name des Ansprechpartners*:Guten Tag,
mein Name ist *Name des Ansprechpartners*. Was kann ich für Sie tun?
Ich:Wir sind sehr zufrieden mit dem Kindle, allerdings haben wir noch nicht herausgefunden, wo man die Rechnungen mit ausgewiesener Mehrwertsteuer herunterladen kann. Können Sie mir weiterhelfen?
*Name des Ansprechpartners*:Es gibt absichtlich keine Rechnungen mit ausgewiesener Mehrwertsteuer für Kindle-Inhalte.
Kindle-Inhalte und -Services werden gemäß unseren Nutzungsbedingungen ausschließlich für den privaten, nicht-gewerblichen und nicht-unternehmerischen Gebrauch verkauft.
Ich:Oh
*Name des Ansprechpartners*:Daher können wir leider keine Mehrwertsteuerrechnung für gewerbliche oder unternehmerische Zwecke ausstellen.
Ich:Und normale Rechnungen? Wo gibt es diese?
*Name des Ansprechpartners*:Dazu drucken Sie sich ganz einfach die Bestellübersicht unter "Mein Konto" aus.
Ich:Ok. Dann würde ich das gerne als Feedback geben, dass vollwertige Rechnungen unterstützt werden.
*Name des Ansprechpartners*:Es gibt eine Möglichkeit, eine ausgedruckte Rechnung zu erhalten. Dies ist jedoch nur für Privatpersonen möglich.
Ich:Aber eine Frage: Bei allen Einkäufen, ob privat oder gewerblich, sind doch Rechnungen pflicht.
Wieso ist dies hier nicht der Fall?
*Name des Ansprechpartners*:Alle Kindle Inhalte werden über den luxemburgischen Firmensitz verkauft und unterliegen somit den luxemburgischen Steuerregelungen.
Wenn Sie eine Rechnung als Privatperson mit Ihrer privaten Rechnugnsanschrift wünschen, können wir Ihnen eine Rechnung mit ausgewiesener luxemburgischer Mehrwertsteuer per Post zusenden.
Ich:Ok. Danke für die Info
Bitte das Feedback weitergeben, dass wir uns eine entsprechende Rechnung wünschen würden.
*Name des Ansprechpartners*:In Ordnung. Sie erhalten von uns eine E-Mail mit der genauen Vorgehensweise zum Erhalt einer Rechnung für Privatpersonen mit ausgewiesener luxemburgischer Mehrwertsteuer.
Beachten Sie dabei aber bitte, das die Ausstellung einer solchen Rechnung ausschliesslich für Privatpersonen möglich ist.
Ich:Danke
schönes WE
*Name des Ansprechpartners*:Kann ich sonst noch etwas für Sie tun?
Ich:Nein, danke.

Zusammenarbeit mit der Fachabteilung – BDD und TDD helfen

Test Driven Development (TDD) steht dafür, dass Tests vor der eigentlichen Implementierung zu schreiben sind. Es zwingt den Entwickler sich vorher genaue Gedanken über die Architektur und die Implementierung zu machen, sodass “einfaches loslaufen” und ggf. damit einhergehendes “falschlaufen” vermieden wird. Saubere Codequalität wird gefördert.

Behaviour Driven Development bringt nun einen weiteren Ansatz mit ins Spiel: Code soll ergebnisorientiert getrieben sein, d.h. die fachlichen Spezifikationen stehen im Vordergrund. Entsprechende BDD Frameworks wie Machine.Specifications (Link, gibt es auch auf NuGet) unterstützen nun dabei, dieses Ziel umzusetzen.

Damit sich auch Nicht-IT-ler und weniger Test-affine Entwickler etwas darunter vorstellen können, hier ein kleines Beispiel aus der Praxis. Wir praktizieren dies bereits seit einigen Monaten in der Form mit unseren Fachabteilungen:

Aufgabenstellung: Mehrere Produktartikel sind in einer gemeinsamen Bestellmappe zusammengefasst. Diese Mappe besitzt die Kopfdaten ‘Lieferzeit’ (LZ), ‘Bearbeitungszeit’ (BZ), ‘Bestellintervall’ (BI) und ‘nächster Mappentermin’ (MT). Der nächste Mappentermin besagt, wann die Mappe sich beim zuständigen Benutzer melden, sodass dieser eine neue Bestellung auslöst. Das Bestellintervall gibt an in welchen Abständen die Mappe neu bearbeitet werden muss, z.B. alle 3 Wochen. Die restlichen Begriffe sprechen für sich. Nun wird von der Fachabteilung gefordert, dass sogenannte ‘fiktiven Wareneingänge’ (fWE) visuell dargestellt werden (siehe Screenshot). Dabei handelt es sich um Eingänge, die rein rechnerisch in der Zukunft eingehen würden, wenn die Bestellungen so getätigt würden. Also bedarf es einer Möglichkeit, um diese Termin zu berechnen.

 

image

 

Die Tests visualisiert für die Übergabe an die Fachabteilung:

Die Tests visualisiert für die Übergabe an die Fachabteilung

Es handelt sich hier um 7 Tests. Der obere Abschnitt besagt:

Wenn von einer Bestellmappe die die Lieferzeit 5 Tage, die Bearbeitungszeit 1 Tag und das Bestellintervall 14 Tage sind und hierfür die nächsten 3 fiktiven Wareneingänge aus heutiger Sicht berechnet werden sollen:

  • Dann sollte der erste fiktive Wareneingang in 6 Tagen sein
  • Dann sollte der zweite fiktive Wareneingang in 21 Tagen sein
  • Dann sollte der dritte fiktive Wareneingang in 36 Tagen sein
  • Dann sollt es insgesamt 3 Datumsangaben errechnen

Der zweite Abschnitt ist analog zu lesen, wenn die Abkürzungen ausgeschrieben werden. Das Wesentliche daran ist, dass diese Spezifikationen von der Fachabteilungen kommen und diese so sich im Code 1 zu 1 widerspiegeln. Damit können die Entwickler die Brücke schlagen und sich mit den Anwendern in deren Domänensprache unterhalten. Die Spezifikationen garantieren, dass der Code sich wie gewünscht verhält. Die Tests lassen sich automatisiert wiederholen und werden vor jeder neuen Versionsauslieferung durchlaufen.

 

 

Zur Gänze folgen noch der Code für die Tests und die eigentliche Implementierung:

Der Code für die Tests:

   1: [Subject("Fiktive Wareneingänge")]

   2: public class Wenn_von_einer_Mappe_die_LZ_5T_die_BZ_1T_und

   3: _das_BI_14T_sind_und_3_fWE_ab_heute_berechnet_werden_sollen

   4: {

   5:     Establish context = () =>

   6:     {

   7:         Clock = new DummyClock();

   8:         Folder = new OrderProposalFolder { DeliveryPeriodInDays = 5, 

   9:                 HandlingTimeInDays = 1, OrderIntervalInDays = 14 };

  10:         Sut = new FictitiousIntakes(Clock);

  11:     };

  12:  

  13:     Because of = () =>

  14:     {

  15:         Actual = Sut.FromNow(Folder, 3);

  16:     };

  17:  

  18:     It dann_sollten_exakt_3_Datumsangaben_errechnet_werden = () => Actual.Count.ShouldEqual(3);

  19:     It dann_sollte_der_erste_fWE_in_6T_sein = () => Actual.Min().ShouldEqual(Clock.Today.AddDays(6));

  20:     It dann_sollte_der_zweite_fWE_in_21T_sein = () => Actual.ElementAt(1).ShouldEqual(Clock.Today.AddDays(21));

  21:     It dann_sollte_der_dritte_fWE_in_36T_sein = () => Actual.Max().ShouldEqual(Clock.Today.AddDays(36));

  22:  

  23:     static FictitiousIntakes Sut;

  24:     static OrderProposalFolder Folder;

  25:     static IList<DateTime> Actual;

  26:     static IClock Clock;

  27: }

  28:  

  29: [Subject("Fiktive Wareneingänge")]

  30: public class Wenn_von_einer_Mappe_die_LZ_5T_die_BZ_1T_und_das_BI_14T_sind_

  31: und_der_nächste_MT_übermorgen_ist_und_2_fWE_ab_dem_nächsten_MT_berechnet_werden_sollen

  32: {

  33:     Establish context = () =>

  34:     {

  35:         Clock = new DummyClock();

  36:         Folder = new OrderProposalFolder {NextOrderDate = Clock.Now.AddDays(2) ,DeliveryPeriodInDays = 5,

  37:                                          HandlingTimeInDays = 1, OrderIntervalInDays = 14 };

  38:         Sut = new FictitiousIntakes(Clock);

  39:     };

  40:  

  41:     Because of = () =>

  42:     {

  43:         Actual = Sut.FromNextFolderDate(Folder, 2);

  44:     };

  45:  

  46:     It dann_sollten_exakt_2_Datumsangaben_errechnet_werden = () => Actual.Count.ShouldEqual(2);

  47:     It dann_sollte_der_erste_fWE_in_8T_sein = () => Actual.Min().ShouldEqual(Clock.Today.AddDays(8));

  48:     It dann_sollte_der_dritte_fWE_in_23T_sein = () => Actual.Max().ShouldEqual(Clock.Today.AddDays(23));

  49:  

  50:     static FictitiousIntakes Sut;

  51:     static OrderProposalFolder Folder;

  52:     static IList<DateTime> Actual;

  53:     static IClock Clock;

  54: }

 

Der produktive Code, der im Programm zur Berechnung verwendet wird:

   1: public class FictitiousIntakes : ICalculateFictitiousIntakes

   2: {

   3:     readonly IClock _clock;

   4:  

   5:     public FictitiousIntakes(IClock clock)

   6:     {

   7:         _clock = clock;

   8:     }

   9:  

  10:     public IList<DateTime> FromNow(OrderProposalFolder folder, int toOrdinal)

  11:     {

  12:         return FromThis(_clock.Today, folder, toOrdinal);

  13:     }

  14:  

  15:     public IList<DateTime> FromNextFolderDate(OrderProposalFolder folder, int toOrdinal)

  16:     {

  17:         return FromThis(folder.NextOrderDate, folder, toOrdinal);

  18:  

  19:     }

  20:  

  21:     private IList<DateTime> FromThis(DateTime startDate, OrderProposalFolder folder, int toOrdinal)

  22:     {

  23:         if (toOrdinal < 1)

  24:             throw new ArgumentOutOfRangeException("toOrdinal");

  25:  

  26:         var firstIntake = startDate.AddDays(folder.DeliveryPeriodInDays + folder.HandlingTimeInDays);

  27:  

  28:         var result = new List<DateTime>();

  29:         for (int currentOrdinal = 0; currentOrdinal <= toOrdinal - 1; currentOrdinal++)

  30:             result.Add(firstIntake.AddDays(currentOrdinal * 

  31:                     (folder.OrderIntervalInDays + folder.HandlingTimeInDays)));

  32:  

  33:         return result;

  34:     }

  35: }

IT After Work Pforzheim

Gestern wohnten meine IT Kollegen und ich zum ersten Mal der IT After Work Veranstaltung, organisiert durch20120905_191359 die Medien- / IT-Initiative Pforzheim, bei. Das Treffen findet regelmäßig jeden ersten Mittwoch im Monat ab 19 Uhr statt. Wer sich näher darüber informieren möchte, findet auf Facebook eine entsprechende Fanseite.

Der Fokus der Veranstaltung liegt auf Networking, was sich v.a. darin zeigt, dass es sich bei den Vorträgen um reine Impulsvorträge von 20 bis maximal 30 Minuten handelt. Persönlich finde ich dies sehr interessant und ein derartiges Format ergänzt sinnvoll andere meiner Meinung nach noch immer unterschätze Veranstaltungstypen wie Open Spaces, Hackathons oder Coding Dojos.

 

Mit dem Konsumat/Workomat in Pforzheim und seinem gewohnt lässigen Ambiente ist die Location ideal gewählt. Neben einem tollen Tischkicker (hier spreche ich als Kenner, auch wenn das Doppel gestern weniger positiv ausging) und sommerlicher Freiluftatmosphäre lässt es sich ungezwungen networken, was nach einem 20-Minuten-Wir-Machen-Euch-Neugierig-Vortrag auch notwendig ist.

20120905_190216Als Referent war gestern Ralf Schoch, seines Zeichens Community Leader der .NET User Group Karlsruhe, mit dem Thema Clean Code und Test Driven Development vor Ort. Das Thema wurde meines Erachtens sehr hochwertig und gut verständlich an die sehr unterschiedlichen Zuhörer (neben IT-lern auch Marketing-ler, Projekt Manager und Geschäftsführer) rüber gebracht. Da wir gerade erst 2h zuvor bei uns im Haus ein Coding Dojo abhielten, an dem auch unser Auszubildender und Typo3 Entwickler teilnahmen, verfolgte ich mit großen Interesse wie Ralf die Materie vermittelte. Interessanterweise wurden die Buchempfehlungen von Rober C. Martin (Buch1, Buch2) genannt, die unser Azubi noch am gleichen Mittag von mir überreicht bekommen hatte. Wenn man Ralf überhaupt etwas vorwerfen kann, dann sein maßgeblicher Beitrag zur Niederlage beim Kicker-Doppel!

In Zukunft darf man gespannt sein, was die Medien- / IT-Initiative Pforzheim noch an weiteren Ideen hervorbringt.

 

Hier noch einige Bilder (leider mit dem Handy aufgenommen):

20120905_19550220120905_191409

20120905_20341020120905_190806

%d Bloggern gefällt das: