Jun 16

Manchmal möchte man nur wissen, wie lange das eigene Java Programm gebraucht hat. Wenn man sich mit der Angabe von Millisekunden begnügt ist dies ein Zweizeiler.

Date start=new Date();
// do something
System.out.println("Anzahl Millisekunden: "
   +(System.currentTimeMillis() - start.getTime());

Möchte man allerdings bei etwas länger laufenden Programmen nicht in Stunden und Minuten umrechnen müssen, so wird es etwas schwieriger. Was bekommt man im Internet nicht alles für Ratschläge, dabei muss man das Rad gar nicht neu erfinden. Ein Blick auf die Apache Commons Bibliotheken hilft hier wie so oft weiter.

import org.apache.commons.lang.time.DurationFormatUtils;
...
Date start=new Date();
// do something
System.out.println("Laufzeit: "
   +DurationFormatUtils.formatDuration(System.currentTimeMillis() - start.getTime(),"HH:mm:ss");

geschrieben von gklinkmann \\ tags: , ,

Dec 27

canoo webtest Report

Das auf Groovy basierende Webframework Grails ermöglicht in der Java Welt eine schnelle Entwicklung von Webapplikationen. Die Schnelligkeit erkauft man sich aber nicht durch den Verzicht auf Tests. Im Gegenteil.

Mit dem Canoo – Webtest Plugin sind die Tests genauso schnell geschrieben, wie die Anwendung selbst (was aus meiner Sicht der einzige Weg ist dem Entwickler das Testen schmackhaft zu machen).

Für die Installation reicht ein simples:

> grails install-plugin webtest

Und mit:

1
2
3
4
5
6
7
> grails create-webtest
WebTest name not specified. Please enter:
<domain -name>
     [copy] Copying 1 file to <pfad zur Grails App>
     [copy] Copying 1 file to </pfad><pfad zur Grails App>/webtest/tests
Web Test generated at webtest/tests/<domain -name>Test.groovy
</domain></pfad></domain>

erstellt man seinen ersten Test für eine Domainklasse von Grails. Alle Tests werden standardmäßig unter /webtest/tests abgelegt. Ein generierter Test könnte so aussehen:
Continue reading »

geschrieben von gklinkmann \\ tags: , , , ,

Nov 19

Aller Anfang ist schwer. Um HTML und CSS zu erlernen kann man entweder Kurse besuchen oder sich selbst durchbeißen. Das Selbststudium ist heute allerdings nicht mehr so schwierig wie früher. Wo man vor ein paar Jahren nur selfhtml (womit auch ich angefangen habe) als online Quelle zur Verfügung hatte, ist die Auswahl heute um ein Vielfaches größer. So ist heute die schwierigste Aufgabe die Spreu vom Weizen zu trennen.

little boxes 1

Neben selfhtml, das ich weiterhin uneingeschränkt empfehlen kann, ist jetzt mit Little Boxes Teil 1 ein weiterer Buch Bestseller online. Unter littleboxes.de steht die aktuelle Auflage des Buches von Peter M. Müller bereit.
Erklärt werden neben den HTML und CSS Grundlagen auch fortgeschrittene CSS Gestaltungs Techniken, wie Positionierung und mehrspaltige Layouts. So können auch Quereinsteiger und Fortgeschrittene ihr Wissen erweitern, zumal alle Beispieldateien zum Download bereitgestellt wurden. Ein eigenes Kapitel für nützliche Tools rundet das Buch ab.

Dass das Bereitstellen von Büchern im Internet und der Verkauf der Printausgabe auch parallel funktioniert, zeigt spätestens die Open Book Initiative des Galileo Verlages.

Wem also das online Angebot von Little Boxes gefällt, sollte sich auch das Buch unters Kopfkissen legen. :-)

geschrieben von gklinkmann \\ tags: , , , ,

Nov 08

Weiter geht’s in der Reihe “weekly links”. Dies waren meine Highlights in der letzten Woche:

Linux auf dem IBM Thinkpad
Notebooks von IBM oder dem Nachfolger Lenovo eignen sich besonders gut für Linux. Hier ist eine kurze Anleitung für Kubuntu 9.10, wie man das Notebook zum Stromsparen überredet und noch mehr Sondertasten in Betrieb nimmt.
Closure Tools – Google Code
Die Google Online Tools nutzen alle ausgiebig Javascript. So ist es nicht verwunderlich, dass Google jetzt seinen Javascript Compiler, eine Bibliothek für DOM Manipulation und UI Elemente, sowie Templates für Javascript und Java unter dem Namen Closure Tools auf Google Code zur freien Nutzung bereitstellt. Ich freue mich schon auf die ersten Vergleiche mit der Yahoo UI Bilbliothek.
Technische Kurzdokumentationen von Torsten Horn
Ich stehe auf technische Kurzdokumentationen (Tutorials), besonders wenn sie die Qualität wie die von Torsten Horn aufweisen.
Continuous Integration für PHP mit dem Hudson
Testen macht nur Sinn, wenn die Tests regelmäßig durchgeführt werden. Hier ist ein Artikel, wie man PHP Tests in Hudson integriert.
google-maps-icons
Freie Icons kann man als Webentwickler nie genug haben. Hier ist eine große Auswahl, die Google bereitstellt.
PDF-Erzeugung mit dem Zend Framework
Die viel genutzte PHP Bibliothek FPDF zur Erzeugung von PDF Dokumenten gerät bei komplexen Layouts schnell an ihre Grenzen. Dieser Artikel beschreibt eine Alternative mit Zend, die über den Umweg von Office Templates auch komplexe PDF Strukturen ermöglichen soll.

geschrieben von gklinkmann \\ tags: , , , , , , ,

Oct 21

In meiner kleinen Serie verlasse ich nun die PHP Welt und wechsel zu Java, der Programmiersprache, die von meiner Lieblings IDE Eclipse am besten unterstützt wird. Mit PHP erreicht man zwar schnell Ergebnisse, durch Java wird man aber zur sauberen OO – Programmierung angehalten. So fühle ich mich in der Java Welt eher zu Hause, denn Ordnung muss sein (zumindest auf dem Computer).

Was hat dass alles mit HTTP Clients zu tun? Eigentlich nichts, außer dass HttpUnit vollständig in Java implementiert ist. Was HttpUnit so komfortabel macht, ist die Verbindung eines HTTP Request – Response Handlers und eines HTML Parsers in einer API, die wie aus einem Guss wirkt. Forms kann man submiten und Links kann man clicken, man fühlt sich fast wie im Browser. Sogar Javascript wird unterstützt, wovon man bei Applikationen die von AJAX ausgiebig Gebrauch machen nicht zu viel erwarten sollte.

So nun zum Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class GoogleClient {
 
   public static void main(String[] args) {
      GoogleClient gc=new GoogleClient();
      gc.request();
   }
 
   public void request() {
      WebConversation wc = new WebConversation();
       WebRequest req = new GetMethodWebRequest( "http://www.google.de" );
       try {
         WebResponse resp = wc.getResponse( req );
 
         WebForm form=resp.getForms()[0];
         form.setParameter("q", "http client examples");
         resp=form.submit(form.getSubmitButton("btnG"));
 
         WebLink[] links=resp.getLinks();
         for (int i = 0; i < links.length; i++) {
            WebLink link=links[i];
            if (link.getAttribute("class").equals("l")) {
               System.out.println("<a href=\""
                     +link.getAttribute("href")+"\">"
                     +link.getText()+"</a>");               
            }
         }
      } catch (IOException e) {
         System.out.println(e.getMessage());
      } catch (SAXException e) {
         System.out.println(e.getMessage());
      }
   }
}

Einzig der Zugriff auf die HTML Elemente über die Syntax von CSS Selektoren fehlt.

Fazit:
HttpUnit ist für mich, verglichen mit den vorgestellten PHP Pendanten, der komfortabelste HTTP Client. Die Unterstützung von JavaScript ist ein weiteres Plus. Die letzte Version (1.7) ist allerdings aus dem Mai 2008. Eine Weiterentwicklung gerade in Richtung funktionaler Tests von AJAX Anwendungen würde ich mir wünschen.

Ausblick:
So sauber man mit Java programmieren kann, so erzeugt man damit oft eine Menge Boilerplate Code. Diesen Missstand behebt Groovy, meiner Lieblings Skriptsprache für die Java VM. Doch dazu mehr in Teil 4.

geschrieben von gklinkmann \\ tags: , , ,