RENEMT_DE

Härter als die Wahrheit

Archiv für 2008

30

Samstag 5. Juli 2008 von ReneMT

Lange habe ich nichts mehr von mir hören lassen… Die Ausreden sind natürlich die gleichen: Verdammt viel zu tun, sowohl im Job (Teamleiter = nicht unbedingt mehr Freizeit als vorher) und privat (jede Menge Geburtstage und Hochzeiten).

Apropos Geburstage: Ich nullte gestern auch das dritte Mal. Schluss mit den lustigen zwanzigern, nun ist sie da, die große 30. Und ich wurde von meiner Frau und meinen Freunden mit einer ziemlich geilen gelungenen Party in der Escobar bei uns in Hennigsdorf überrascht. Es war wirklich richtig super, DANKE AN ALLE DIE DA ODER ZUMINDEST BETEILIGT WAREN!

Und dass Glen, mein alter BA-Weggefährte, dann auch noch auftauchte war ja quasi kaum noch zu toppen! Falls du das liest: Lass uns mal schauen, dass wir uns diesmal nicht erst nach x Jahren wieder sehen – zur Not musst du mich mal treten :-)

Ein fettes Dankeschön auch nochmal an alle für die kleinen und besonders das große Gemeinschaftsgeschenk:

Mein neuer HANNspree Verona 22″ TFT-Monitor in Klavierlack-Optik und 16:10 – Format. Der sieht in Natura nochmal deutlich besser auf als auf dem Foto, auch wenn das schwer vorstellbar ist. Und er ist verdammt groß, jetzt kann ich den Windows-Desktop endlich so richtig zumüllen!

Falls übrigens jemand von euch noch Bilder von der Party hat: Her damit, dann kann ich noch ein paar hier online stellen.

Kategorie: Allerhand | 3 Kommentare »

Simpel und Effektiv

Montag 21. April 2008 von ReneMT

Es gibt Cocktails, die bestechen – trotz ihrer außergewöhnlichen Anmutung – durch ihre Schlichtheit. Kein Riesen-Brimborium an Zutaten, kein großartiger Schnickschnack. Einfach nur guten Geschmack auf den Punkt gebracht.

Der große Vorteil davon: Man kann sie auch ganz einfach mal zuhause servieren. Ohne eine riesige, vorsortierte Bar besitzen zu müssen. Im Zweifelsfall reichen zwei Spirituosen und ein Tiefkühlschrank.

Kategorie: Allerhand | 1 Kommentar »

Ironie

Montag 14. April 2008 von ReneMT

Ironie ist, wenn man auf dem Weg zur Arbeit mit dem Auto im Stau steckt und im Radio Bicycle Race von Queen läuft ;-)

Kategorie: Allerhand | Kommentare deaktiviert

MacBook Air: Fehleranfällig? ;)

Samstag 12. April 2008 von ReneMT

Mit dem MacBook Air ist Apple, zugegebener Maßen, wieder mal ein schöner “Sieht-gut-aus-will-haben” – Wurf gelungen. Auch der Werbespot dazu, der momentan immer noch im Fernsehen läuft, ist ziemlich ansprechend, zumal er ja mit dem Ohrwurm New Soul von Yael Naim unterlegt ist.

Sollte Apple den Song aber gerade wegen des Textes ausgesucht haben ist das so eine Sache. Da heißt es nämlich:

I’m a new soul
I came to this strange world
Hoping I could learn a bit bout how to give and take
But since I came here, felt the joy and the fear
Finding myself making every possible mistake

Hoffentlich lässt das nicht auf die Benutzbarkeit des MacBooks schließen ;-)

Ansonsten gäbe es da noch eine günstigere Alternative:

Kategorie: Allerhand | 1 Kommentar »

Lavalampen-Buildstatus

Montag 10. März 2008 von ReneMT

Dass Entwickler kreative Menschen sein müssen sieht man an diesem Projekt:

http://mark.michaelis.net/Blog/BuildStatusUsingLavaLampsByKenNichols.aspx

Da lässt doch tatsächlich jemand den Build-Status seines Projekts computergesteuert von verschiedenfarbigen Lavalampen anzeigen.

Sehenswert :)

Kategorie: C# / .NET | Kommentare deaktiviert

“Dann flieg mal”

Sonntag 2. März 2008 von ReneMT

Stell dir vor, du träumst schon immer vom Fliegen. “Einmal fliegen, das würd ich gern…” Und dann kommt jemand daher und sagt: “Herzlichen Glückwunsch, da ist dein Flugzeug, dort der Pilotensitz, hier ein paar Schulungen – nun flieg mal!”

So ähnlich fühle ich mich momentan.

Am letzten Freitag wurde mir von der Geschäftsführung meiner Firma die Position als Leiter der Softwareentwicklung angeboten. Mit allem, was dazu gehört. Angefangen bei der Weisungsbefugnis gegenüber meinen Mitarbeitern, über den größeren Stress durch die verantwortungsvolleren Aufgaben bis hin zum Tragen der Konsquenzen bei Fehlschlägen.

Diese Arbeit ist im Prinzip die, die ich immer schon machen wollte. Oder zumindest die, von der ich denke, ich wollte sie schon immer machen. Deswegen ist es auch sehr angenehm, das die Stelle erst einmal sechs Monate “auf Probe” laufen wird, um zu sehen, ob es so funktioniert, wie wir uns das alle vorgestellt haben. Sollte es nicht klappen, werde ich im schlimmsten Fall einfach wieder Senior Software Developer, mit einem ruhigen Leben am Schreibtisch:)

Insgesamt spüre ich aber einen deutlichen Respekt vor der Aufgabe. Immerhin ist das meine erste “richtige” Führungsposition, und die Aufgaben, die mich erwarten werden, sind doch andere als die eines Entwicklers. Aber ich werde das Angebot wohl annehmen. Letztendlich kann ja nur die Praxis zeigen, ob es das ist, was ich wirklich will. Und ob die Fähigkeiten, die mich bis jetzt beruflich und privat weitergebracht haben, auch hierfür ausreichen. Dazu zähle ich vor allem mein ausgeprägtes Empfinden für strukturiertes Arbeiten, ein hohes Qualitätsbewusstsein und dass ich gut mit Menschen umgehen kann. Ich hoffe weiterhin, dass Freundschaften und kollegiale Beziehungen nicht darunter leiden werden, dass ich jetzt der Vorgesetzte bin.

Alles in allem also eine neue Herausforderung, der es sich zu stellen gilt. Also drückt mir die Daumen :)

Schließen möchte ich wieder mal mit einem Zitat einer meiner Lieblingsbands:

All great things to come.

VNV NationFragments

Kategorie: Allerhand | 5 Kommentare »

NHibernate + MySqlDateTime: Solved

Dienstag 26. Februar 2008 von ReneMT

In letzer Zeit setze ich bei Webprojekten vermehrt Castle ActiveRecord ein, das ja bekanntlich auf NHibernate basiert. An sich eine super Sache, ActiveRecord (respektive NHibernate) ist wirklich ein ziemlich komfortabler O/R-Mapper, der wahre Produktivitäts-Sprünge beschert.

Allerdings gibt es ein kleines Problem bei der Zusammenarbeit von NHibernate und MySQL im Zusammenhang mit dem MySQL Connector/NET: MySQL bietet, warum auch immer, so genannte “Null-DateTimes” an, d.h. Daten der Art 00/00/0000. Außer MySQL kann damit allerdings niemand so recht etwas anfangen, schon gar nicht das System.DateTime-Struct von .NET. Die Eigenintelligenz von NHibernate gibt sich nun zwar alle Mühe, den Inhalt eines nicht-leeres DATE(TIME)-Feld in der DB in ein DateTime zu konvertieren, erntet aber leider eine Exception, da .NET, verständlicher Weise, keine Null-DateTimes akzeptiert.

Eine in meinen Augen schlaue Lösung wäre, die Null-DateTimes wie ein leeres Feld (NULL) zu behandel und dementsprechend statt eines normalen DateTimes ein DateTime?, also ein nullable DateTime für die entsprechende Porperty zu benutzen. Was nun noch fehlt ist die Möglichkeit, das Feld in der Datenbank ohne Exception entsprechend zu konvertieren, d.h. die Intelligenz von NHibernate durch einen eigenen “Konverter” zu erweitern.

Genau für solche Zwecke bietet NHibernate den IUserType an. Eine Klasse, die dieses Interface implementiert, kann für die entsprechenden Properties einer O/R-Klasse als ColumnType angegeben werden. Das Lesen und Schreiben der Property, bzw. dessen Vorbereitung, erledigt dann die IUserType-Implementierung. Im folgenden nun ein Beispiel für eine geeignete Vorgehensweise bezüglich der MySqlDateTime-Problematik:

UserType:

namespace ReneMt.Data
{
public class HibernateNullableDateTime : NHibernate.UserTypes.IUserType
{
public object Assemble(object cached, object owner)
{
return DeepCopy(cached);
}

public object DeepCopy(object value)
{
return value;
}

public object Disassemble(object value)
{
return DeepCopy(value);
}

public new bool Equals(object x, object y)
{
if (null == x && null == y)
return true;
else if (null != x)
return x.Equals(y);
else
return y.Equals(x);
}

public int GetHashCode(object x)
{
return x.GetHashCode();
}

public bool IsMutable
{
get { return false; }
}

public object NullSafeGet(System.Data.IDataReader rs, string[] names, object owner)
{
if (names.Length == 1)
{
object obj = rs[names[0]];

if (null == obj || obj is DBNull)
return new DateTime?();

if (obj is MySqlDateTime)
{
MySqlDateTime mySqlDateTime = (MySqlDateTime)obj;
if (mySqlDateTime.IsNull)
return new DateTime?();
else
{
if (0 == mySqlDateTime.Day || 0 == mySqlDateTime.Month || 0 == mySqlDateTime.Year)
return new DateTime?();
return new DateTime?(mySqlDateTime.GetDateTime());
}
}
else if (obj is DateTime)
return new DateTime?((DateTime)obj);

throw new InvalidCastException("Can not convert object of type " +
obj.GetType().FullName + " to " + typeof(MySqlDateTime?).FullName);
}
throw new InvalidCastException("Single column expected.");
}

public void NullSafeSet(System.Data.IDbCommand cmd, object value, int index)
{
System.Data.IDataParameter param = cmd.Parameters[index] as System.Data.IDataParameter;

param.DbType = System.Data.DbType.DateTime;

if (null == value)
{
param.Value = DBNull.Value;
}
else if (value is MySqlDateTime)
{
MySqlDateTime mySqlDateTime = (MySqlDateTime)value;
if (mySqlDateTime.IsNull)
param.Value = DBNull.Value;
else
param.Value = mySqlDateTime.GetDateTime();
}
else if (value is DateTime)
{
param.Value = value;
}

throw new ArgumentException("Object of type " + typeof(MySqlDateTime).FullName +
" expected, but object of type " + value.GetType().FullName + " has been passed.");
}

public object Replace(object original, object target, object owner)
{
return original;
}

public Type ReturnedType
{
get
{
return typeof(DateTime?);
}
}

public NHibernate.SqlTypes.SqlType[] SqlTypes
{
get
{
return new NHibernate.SqlTypes.SqlType[] { NHibernate.NHibernateUtil.DateTime.SqlType };
}
}

}
}

O/R-Klasse:

using Castle.ActiveRecord;

namespace ReneMt.Data
{
[ActiveRecord("TEST")]
public class NaturalPerson : ActiveRecordBase
{
private int m_id;
private DateTime? m_dayOfBirth;

[Property("dayofbirth",
ColumnType = "ReneMt.Data.HibernateNullableDateTime, ReneMt.Data")]
public DateTime? DayOfBirth
{
get { return m_dayOfBirth; }
set { m_dayOfBirth = value; }
}
}
}

That’s it :)

Kategorie: C# / .NET | 1 Kommentar »