29 May 2009

Synology DS207+ - Troubles with Volume - Disk 2 crashes

From time to time my Synology DS207+ suffers from a invalid RAID1 volume and telling me "volume 1 was degrade, please repair it". Well if I do so and start the repairing process my DS207+ works for the next 24h (up 3 days). After that period it tells me that disk 2 in volume 1 has crashed and that I should replace the disk.

Well the first time I really did replace the harddisk but after 3 months the same thing happend to this brand new harddisk. So I decided to take the harddisk out and put it into my PC. Starting my OS and deleting all partions on that disc. And well - oh wonder - this worked. To me this behaviour seems like a strange bug in the Synology firmware. Anyway to me this is the fastest work around to get my NAS up and running again.

27 May 2009

SCJP - Now it gets strange

Which two about using the java.io.Serializable class are true? (Choose two.)

A) If Dog extends Animal, then Animal must implement java.io.Serializable in order to serialize an instance of Dog.
B) If Dog has-a Collar, then Collar must implement java.io.Serializable in order to serialize an instance of Dog.
C) If Dog extends Animal and Animal implements java.io.Serializable but Dog does NOT implement java.io.Serializable, you can serialize an instance of Dog.
D) When an instance of a subclass is deserialized, none of the constructors in it's constructor chain will ever be invoked.
E) If you mark a class's instance variable volatile, and then serialize an instance of that class, the state of the volatile variable will be lost during serialization.

Sun's says: Options B and C are correct. A class's superclasses don't have to implement Serializable in order to be serialized, and if a superclass doesn't implement Serializable then it's constructor will run during deserialization. A transient variable's state is lost during serialization, but a volatile variable's state is not lost.
I really do agree with option C but cannot understand why option B should be absolutely right. I still can serialize the Dog instance even if the included Collar does not implement Serializable. I could mark the Collar instance variable transient and everyone would be happy at runtime.

SCJP - This one could knock me out

Can anyone solve this? I've chosen wrong :( And probably learned something.



1. class Test4 {
2. public static void main(String [] args) {
3. boolean x = true;
4. boolean y = false;
5. short z = 42;
6.
7. if((z++ == 42) && (y = true)) z++;
8. if((x = false) || (++z == 45)) z++;
9.
10. System.out.println("z = " + z);
11. }
12. }


What is the result?

A) z = 42
B) z = 44
C) z = 45
D) z = 46
E) Compilation fails.
F) An exception is thrown at runtime.

Becoming a Sun certified Java programmer or how to become a compiler

The next two weeks I am trying to prepare myself to Sun's certified Java programmer (SCJP) exam. Up to now it really does not kick ass. Well my main troubles with the studies are currently some topics in the exam objective 3.5 (Tokenizing).

Objective 3.5 - Tokenizing with Pattern and Matcher
Let's say there's the pattern 'a?' and we would like to tokenize the following string 'aba' using the following Java class.

public static void main(String[] args) {
Pattern p = Pattern.compile("a?"); // compile the pattern
Matcher m = p.matcher("aba");

while (m.find()) {
System.out.println(m.start() + " >" + m.group() + "<");
}
}

What I expected out of this listing was something like this.
0 >a< 
2 >a< 
But what it actually returns was this.
0 >a< 
1 >< 
2 >a< 
3 >< 
Mhm. According to my study book (from which I took this example) they talking about some zero-length matches when using the greedy quantifiers '*' or '?'. They say that zero-length matches can appear under the following circumstances.
  • After the last character of source data
  • In between characters after a match has been found
  • At the beginning of source data (if the first character is not a match. Try tokenizing this string '2aba')
  • At the beginning of zero-length source data
Well this rules seems to be regular expression specific and does not have anything to do with the Java implementation. The only funny thing is - I use RegEx Buddy to develop my regexes - that I cannot reproduce it in my favourite regex editor. Yet another topic to learn by rote (means not really understanding it but memorize it for the exams purpose only)

23 December 2008

Grails 1.1 Beta 2 steht zum Download bereit

Heute Nachmittag gab Graeme Rocher (SpringSource) den Grails Release 1.1 (Beta 2) für die Entwicklergemeinde frei. Dieser Beta Release ist wie gewohnt nicht für ein produktives Umfeld gedacht, sondern dient den Entwicklern zum Ausprobieren der neuen Grails 1.1 Features.

Zu den neuen Features gehören unter anderem diese Punkte.
Die Release Notes findet man hier. Die neue Beta Version kann unter http://grails.org/Download heruntergeladen werden. Viel Spass beim ausprobieren.

16 December 2008

Groovy-JDK erhält eine Versionierung

Unter Groovy-JDK versteht man eine API Dokumentation (im Javadoc Format) über die Methoden, um welche Groovy  Java Klassen (z.B. java.lang.String) erweitert. Gerade letztens wollte ich diese API Dokumentation verwenden, um herauszufinden, in welcher Groovy Version eine Methode eingeführt wurde. In der API Dokumentation war die Methode aufgeführt, jedoch konnte ich diese in Grails 1.0.4 (verwendet Groovy 1.5.6) nicht verwenden. 

Aus der Grails Newsgroup habe ich dann erfahren, dass die Methode erst mit Groovy 1.5.7 einführt wurde und dass der DocGenerator, welcher die Groovy-JDK Dokumentation generiert, den @since Javadoc Tag nicht interpretiert. 

Nach dem mir Guillaume Laforge (Groovy Projektleiter bei SpringSource) ein paar Koordinaten über die involvierten Klassen im Groovy Projekt gegeben hat, habe ich mich entschlossen ein erstes Mal für das Groovy Projekt einen Patch zu erstellen und diese fehlende Funktionalität nachzulieferen. Daraus entstanden einerseits ein Patch, welcher den DocGenerator um den @since Tag erweitert und andererseits ein weiterer Patch, welcher die fehlenden @since Tags in den Groovy-JDK Klassen nachführt.

Gemäss Guillaume werden die Patches voraussichtlich mit Groovy 1.6-RC1 in die Codebasis übernommen (siehe Zitat G. Laforge).
Yup, the patch looks fine, although I haven't tested it. I'll most probably add the patch before we release 1.6-RC-1, perhaps even today if I'm not too busy with other things.
Ich bin wirklich positiv überrascht, wie schnell und unkompliziert solche Contributions es in die Groovy Codebasis schaffen. Das motiviert mich für allfällige weitere Contributions für Groovy bzw. Grails :)

10 November 2008

Grails 1.0.4 - Bald schon da

Wenn man der Grails User Mailing List und dem Projektleiter von G2One glauben darf, wird Grails 1.0.4 noch diese Woche ausgeliefert. Aktuell wird nämlich heftig über den Inhalt von 1.0.4 in der User Mailing Listdiskutiert.

Unter den Erneuerungen finden sich unter anderem folgende Themen:
  • Upgrade auf Spring 2.5.5
  • Das Setzen eine Hibernate SQL Types in GORM
  • Und eine nervige Fehlermeldung, welche in Zusammenhang mit Firefox (> 2.x) auftritt, es sich dabei aber um einen Fehler in Grails 1.0.3 handelt.
Bei Grails 1.0.4 handelt es sich um einen Stabilisierungsrelease, d.h. dass bekannte Fehler behoben werden, es aber kaum neue Features hinzukommen. Gegen Ende dieses Jahres plant G2One dann noch die Veröffentlichung des Minor Releases Grails 1.1, welcher zusammen mit Groovy 1.6 veröffentlicht werden soll. Dieser Release bringt wiederum neue Features mit, auf welche es sich freuen lässt.

4 November 2008

Neues von der Squeezebox Front


Logitech hat ein neues Produkt, namens "Squeezebox Boom" auf den Markt geworfen, welchem ich nicht widerstehen konnte.

Die "Squeezebox Boom" entzückt durch die von Squeezebox gewohnte Einfachheit in der Installation und der Bedienung. Einstecken, WLAN Einstellungen konfigurieren und dann bereits schon Musik hören.

Nachdem ich schon lange meinen ursprünglichen Radiowecker entsorgen wollte, habe ich mit der "Squeezebox Boom" nun endlich einen würdigen Nachfolger gefunden.

Tolle "Schnickschnack-Features" sind beispielsweise, das automatische abdunkeln der Anzeige, wenn die Raumbeleuchtung ausgeschaltet wird. Somit kann ich schlafen, ohne dass mir ein Leuchtturm im Zimmer steht.

Nach der ersten Nacht :) kann ich die neue Squeezebox nur weiterempfehlen. Geweckt hat sie mich übrigens auch pünktlich.

2 September 2008

Der G-Browser ist da

Wie heute für bei Heise.de bereits verkündet ist Google Chrome, der Browser von Google, seit heute Abend 22:00 Uhr als Beta Version verfügbar. 
Nach den ersten paar Surfminuten fällt mir vorallem die Rendering Performance auf. Im Vergleich zu Firefox 3.x scheint mir dieser Browser, gängige Webseiten gefühlsmässig schneller darzustellen. Die Aufmachung ist ebenfalls einfach und ansprechend, so dass man sich schnell "zuhause" fühlt bzw. man sich zu recht findet.

Wer nun interessiert ist, soll den neuen Browser doch einfach mal ausprobieren. Man kann ihn hier herunterladen.

30 March 2008

Exim4 - Virtuelle Domains einrichten

Letzten November habe ich einen kurzen Bericht über Exim4 und /etc/alias veröffentlicht und beschrieben wie man Emailaliase für eine Domain (nur eine) anlegt. Was macht man aber nun, wenn Mailboxen von mehreren Domains auf einer Exim4 Instanz verwaltet werden sollen? Das Stichwort ist (wie auch bei Apache httpd) "virtuelle Domänen". Ich möchte nachfolgend kurz aufzeigen, wie man das ganze zum Laufen bringt (mich hats einen ganzen Sonntag gekostet *fg*, aber es geht hiermit auch schneller).

Einen sehr guten Artikel bzgl. virtuellen Domains findet man hier. Bzgl. virtuellen Aliases sollte man den folgenden Artikel bevorzugen.

Nachfolgende Beschreibung wurde auf einem Ubuntu Server durchgeführt.

Als erstes sollte man bei Exim4 wissen, dass dieser entweder durch das manuelle Ausführen des Skript /usr/sbin/update-exim4.conf oder durch den Wizard 'dpkg-reconfigure exim4-config' die Konfiguration für Exim4 zur Verfügung stellt. Exim4 sieht die geänderte Konfigration mittels '/etc/init.d/exim4 reload'.

Die virtuellen Domains werden in der Datei /etc/exim4/domains.virtual angelegt. Die Aliase für die virtuellen Domains, welche u.a. zur Weiterleitung von Email verwendet werden kann, kann die Datei /etc/exim4/aliases.virtual verwendet werden. Sofern die Dateien nicht bestehen, müssen diese angelegt werden und dürfen nur dem root User zur Verfügung stehen.

Falls die Exim4 Konfiguration in mehrere kleineren Dateien verteilt wurde (/etc/exim4/conf.d/) dann kann das Suchen der richtigen Stelle teilweise einwenig lästig sein. Daher kurz die Dateiangaben, in welchen in ich die beschriebenen Änderungen vorgenommen habe.

Die Änderungen bzgl. den virtuellen Domain habe ich in der Datei /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs vorgenommen. Einfach die Stelle 'domainlist local_domains' suchen und mit der verwiesen Dokumentation nachführen.
Für die virtuellen Aliase verwendet legt man eine neue Datei unter /etc/exim4/conf.d/router/410_exim4-config_virtual_domains und ändert diese wie in der verwiesen Dokumentation beschrieben.

24 March 2008

Network attached storage


Es ist geschehen. Ich habe mir auch eine NAS (Network attached storage) zugelegt. Mein Lieblingshändler in Sachen MP3 und porable Devices K55 hatte das nachfolgende Angebot in ihrem Shop veröffentlicht und ich konnte dieser Offerte nicht widerstehen :)

Ich wollte mir nun schon seit ca. 2 Jahren ein Slimdevice von Logitech kaufen, habe es jedoch aus diversen Gründen immer wieder auf die lange Bank geschoben. Nun bin ich aber stolzer Besitzer von dem Slimdevice und dem NAS :) D.h. nun kann ich meine MP3 Sammlung dazu nutzen, die ganze Wohnung akustisch zu beschallen. Mein Freundin wird sich freuen :)

21 March 2008

Continous Integration - Wenn ein Tool zu sexy ist

Letztes Jahr im Dezember habe ich über den CI (Continous Integration) Server TeamCity 3.0 von JetBrains geschrieben. Nachdem ich den CI Server für ein paar Tests erfolgreich eingesetzt habe, bin ich nun mit dem Projekt Minsight an die Grenzen gestossen. Der Build Server von Minsight läuft mit einem Apache Tomcat 5.x und Teamcity 3.0 kann nur auf Tomcat 6.x fehlerfrei deployed werden. Auf ein grosses Herumgebastel hatte ich keine Lust und machte mich daher auf die Suche nach CI-Alternativen. Bei dieser Suche bin ich auf ein Projekt namens Hudson gestossen, welches viel versprechend aufwartet.

Hudson hat mich sehr schnell durch seine Einfachheit beeindruckt. Man muss das WAR nur auf dem Tomcat oder dergleichen deployen und danach mittels dem Web Browser konfigurieren. Ausserdem verfügt der CI Server auch über ein Plug-in System, welches den CI Server einfach erweitern lässt. Bspw. gibt es ein Groovy Plugin für Hudson, welches einem erlaubt, Groovy Skripte durch Hudson ausführen zu lassen.

Dieser kurze Artikel soll keineswegs Teamcity 3.0 in Frage stellen. Teamcity ist ein sehr reifes und ausgeklügeltes Produkt (und daher sexy), jedoch trifft man in der Praxis nicht immer auf aktuellste Software (Tomcat 6.x) und hat meistens auch keinen Einfluss dies zu ändern. Unser Hudson läuft nun schon ein paar Tage einwandfrei. Ich kann den CI Server daher nur weiterempfehlen.

Grails 1.0.2 wurde veröffentlicht

Pünktlich vor den Osterferien konnte G2One erneut einen Bugfix Release von Grails veröffentlichen. Der Release trägt die Versionsnummer 1.0.2 und beinhaltet hauptsächlich Bugfixes für Themen wie GORM, das Grails Plug-in System und das Autoreloading. Eine komplette Bugfixliste kann man aus den Release Notes entnehmen. Die aktuelle Version von Grails lässt sich auf der Projekthomepage von Grails herunterladen.

Voraussichtlich wird es nochmals einen erneuten Bugfix Release 1.0.3 geben, um danach zügig auf Grails 1.1 fortzuschreiten. Details zum Release 1.1 können aus der Roadmap entnommen werden.

11 March 2008

Erstes eigenes Grails Projekt ist online

Vor rund einer Woche konnte ich meine erste Grails Webapplikation erfolgreich im Netz publizieren. Das ganze lässt sich hier besichtigen. Es handelt sich bei der Webapplikation um die Hochzeitsseiten meiner Schwester :)

Ich möchte hier keine grossen Worte verlieren. Eines soll jedoch gesagt werden. Die ganze Sache war grösstenteils trivial, hat Spass gemacht und wird mich zukünftig zum Wiederholungstäter machen. Ein grosses Dankeschön an G2One und die Grails/Groovy Community.

9 March 2008

Genf und Zürich im Playoff-Halbfinal

Nach der gestrigen Playoff Viertelfinalrunde konnten sich Genf Servette und die ZSC Lions vorzeitig fürs Playoff Halbfinal qualifizieren. Die Servettiens schlugen die Rapperswil-Jona Lakers und die ZSC Lions konnten gegen die Kloten Flyers auswärts den vierten Sieg gutschreiben lassen.

Überraschen in dieser Runde war der HC Fribourg-Gottéron, welcher den SC Bern erneut in Schwierigenkeiten brachte und in der Nachspielzeit sogar gegen den ersten der Qualifikation den Siegestreffer erzielen konnte. In dieser Serie heisst es neu 3-2 für den Underdog Fribourg-Gottéron :)

Aus Stadt Zürcher Sicht kann der Halbfinalgegner auch jetzt noch nicht bestimmt werden. Schlussendlich ist dies jedoch auch egal. Um den Meistertitel zu gewinnen, muss man sowieso jeden bezwingen, welcher sich einem in den Playoffweg stellt. Bis Samstag kann sich Zürich aber noch einwenig ausruhen und der Sache einwenig gelassen entgegenblicken.

27 February 2008

Open CMD here - Aber wo ist die Powershell?

In Windows Vista ist die neue Shell von Microsoft mit dem Namen Powershell enthalten. Seit den Powertoys für Windows XP und nun ebenfalls standardmässig mit Windows Vista gibt es im Kontextmenü des Windows Explorers die Möglichkeit ein Shell-Fenster zu einem angegebenen Pfad zu öffen. Doch wie kann man die neue Powershell aus dem Explorer via Kontextmenü öffnen.

Unter burgaud.com bin ich fündig geworden. Nachfolgende Registryerweiterung bringt mich ans Ziel.


Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\powershell]
@="PowerShell Here"
[HKEY_CLASSES_ROOT\Directory\shell\powershell\command]
@="C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe -NoExit -Command Set-Location -LiteralPath '%L'"

25 February 2008

It's Playoff time

Nun ist es endlich wieder soweit. Die Regular Season der National League ist vorüber und die Playoffs beginnen am kommenden Donnerstag, 28.02.2008.

Die Playoffs bestreiten diese Saison folgende Teams.
  • SC Bern (1.) - HC Fribourg-Gottéron (8.)
  • HC Genève-Servette (2.) - Rapperswil-Jona (7.)
  • Kloten (3.) - ZSC Lions (6.)
  • EV Zug (4.) - HC Davos (5.)
Zur "Schaden-"Freunde vieler hat es der HC Lugano dieses Jahr zum ersten Mal seit der Einführung der Playoffs vor 23 Jahren nicht ins Playoff geschafft. Naja, als ZSC Fan ist man sich die Playout Runde auch gewohnt :).

Auf jedenfall freue ich mich bereits auf spannende Derby Partien zwischen den Kloten Flyers und den ZSC Lions.

Grails 1.0 - und wie weiter?

Vor einigen Tagen, genauer am 18. Februar 2008, ist der Bugfix V.1.0.1 veröffentlicht. Dieser beinhaltet diese Fehlerbehebungen. Offensichtlich plant G2One einen weiteren Patch Release, den in ihrem Issue Tracker sind bereits Issues dem Release 1.0.2 zugeteilt.

Nun stellt sich die Frage, wie es mit Grails weitergeht? Was sind Features, welche in zukünftigen Release 1.5.x bzw. 2.x hinzukommen? Auf der Grails Roadmap werden folgende Punkte als zukünftige Features (sogenannte Post Grails 1.0) deklariert.
  • Implement support for JPA
  • Implement generation of domain model from DB (Middlegen integration)
  • Add server-side scripting of client Javascript (javascript DSL)
  • Refactor scaffolding to make it more pluggable and extensible
  • Implement support for JSP custom tag libraries in GSP
  • Fork GSQL and use to add support for database migrations
  • Add XML-RPC support for Service classes
  • Implement Grails-AOP an AOP mechanism built on the Groovy MOP
  • Add scaffolding of user authentication code
  • Start to build up a UI component tag library
Gerade die Integration von Middlegen könnte interessant werden, um Grails weiter in der "Enterprise-Welt" voranzutreiben. Nicht alle IT-Projekte (sehr wenige sogar) entstehen als sogenannte "Grüne Wiese Projekte" und daher macht es Sinn auf dieses Reverse-Engineering Tool zurückgreifen zu können.
Auch die Möglichkeit in Service Klassen XML-RPC Funktionalität zur Verfügung gestellt zu bekommen oder auf Basis Groovy MOP aspect-oriented-programming (AOP) in Grails zu nutzen klingt in meinen Ohren sehr attraktiv.

Wann diese tollen Features für jedermann erhältlich sind, konnte ich bisher nicht ermitteln. Auf jedenfall werde ich mich auf diesen Tag freuen und bis dahin weiter ausschau halten (oder allenfalls mal mit commiten *fg*). Die Suche geht also auch nach Version 1.0 weiter.

Nachtrag 27.02.2008: Graeme Rocher hat ein paar Folien zu Thema Grails und über die Zukunft von Grails veröffentlicht. Sie sind sehenswert :)

5 February 2008

Grails 1.0 ist da! - The search is over

Das lange Warten hat nun ein Ende. Die finale 1.0 Version von Grails wurde heute von G2One Inc. für die Öffentlichkeit freigegeben. Gleichzeitig zur Veröffentlichung wurde der Grails Homepage auch ein neues Gesicht geschenkt; eines welches es sich im Vergleich zu ähnlichen Software-Vorhaben (z.B. Ruby on Rails) zeigen lässt.

Grails ist ein Framework zum effektiven Erstellen von Web Applikationen. Es bedient sich unter anderen an in der Java-Welt akzeptieren Frameworks wie Spring und Hibernate. Mittels Techniken wie Scaffolding, Coding by Convention, usw. welche von Ruby on Rails entnommen wurden, stellt Grails ein leichtgewichtiges Framework dar, mit welchem Webapplikationsentwicklung zügig voran getrieben werden kann.

Zu den neuen Features gehören unter anderem Unterstützung von REST, JNDI, Content Negotiation und die vereinfachte Definition von Filtern. Weitere Informationen dazu finden sich in den Release Notes.

Nachtrag: Offensichtlich hat sich in der Taglibrary ein Bug eingeschlichen (siehe Jira). Nach Absprache mit der Grails Community habe ich ein Issue eröffnet. Meiner Ansicht nach ist der Bug umgehbar und somit überhaupt nicht kritisch.

3 February 2008

Gant 1.1.0 wurde veröffentlicht

Gant ist ein Build-Tool, welches auf dem Java Buildtool Ant aufsetzt. Im Gegensatz zu Ant, welches Buildfiles in XML Dateien abbildet, verwendet Gant Groovy Scripts. Und hier liegt auch der Unterschied und die Mächtigkeit von Gant. In den erwähnten Groovy können sämtliche Möglichkeiten von Groovy (und natürlich auch von Java) ausgeschöpft werden. Mit Ant wird dies innerhalb der XML Dateien einwenig unübersichtlich.

Am 30. Januar 2008 hat der Projektleiter von Gant, Russel Winder, den Release von Gant 1.1.0 bekanntgegeben.
Russel Winder, 30. Januar 2008: "With the release of Groovy 1.5.2, it seemed entirely appropriate to release Gant 1.1.0, so this has been done."
Der Release beinhaltet unter anderem einen Ant Task, welcher es ermöglichen soll mittels dem Ant-Gant Workaround Gant Skripte auch in Continous Integration Server, welche derzeit Gant noch nicht direkt unterstützen, ausführen zu können.