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: , , ,

Sep 30

Ich habe gerade einen Artikel über die 100 vim Befehle gelesen, die jeder Programmierer kennen sollte.
Den vim (Vi IMproved) habe ich hier im Blog schon einmal kurz vorgestellt.

Bei der Durchsicht der Liste, der 100 besten vim Befehle, habe ich wieder einmal viel gelernt über diesen Konsolen Editor, aber auch alt bekannte und lieb gewonnene Funktionen entdeckt. Meine absoluten Favoriten sind:

  • :syntax on zum anschalten der Syntax Hervorhebung (syntax highlighting)
  • die Befehle zum Einrücken von Code
    :set autoindent Einrücken anschalten
    :set smartindent intelligentes Einrücken anschalten
    :set shiftwidth=4 Definieren von 4 Leerzeichen als Einrückgröße
    ctrl-t, ctrl-d Ein/Ausrücken im insert mode
    >> Einrücken im Befehlsmode
    << Ausrücken im Befehlsmode
  • Die Interaktion mit Unix
    :!pwd Ausführen vom “pwd” Unix Befehl und dann zum vim zurückkehren
    !!pwd Ausführen vom “pwd” Unix Befehl und das einfügen der Ausgabe in die Datei
    :sh temporärer Ausflug auf die Unix Shell
  • :%s/old/new/g Ersetzen von “old” durch “new” in der gesamten Datei

Welche Editoren für die Konsole nutzt Ihr? Und falls der vim dabei ist, auf welche Befehle könntet ihr nicht verzichten?

geschrieben von gklinkmann \\ tags: , , ,

Apr 18

tunestext

iTunes bietet die Möglichkeit Liedtexte in einer mp3 Datei abzuspeichern. Hat man das für 2 – 3 Lieder gemacht, kommt schnell der Wunsch nach Automatisierung auf.

Es wäre doch perfekt, wenn man das Lied hören würde, sich dabei den Text anschauen könnte und im Hintergrund der Liedtext automatisch in der mp3 Datei abgespeichert würde. Das sind ja 3 Wünsche auf einmal, dass geht nun wirklich nicht.

Geht doch und zwar mit TunesText. TunesTEXT ist ein Widget für MacOs und wird, wenn es installiert ist über das Dashboard angezeigt. Die Liedtexte werden von Utamap, MetroLyrics und SING365.com bezogen unterliegen aber Urheberrechten. Eine Weiterverwendung kann daher rechtliche Folgen haben. Daher ist in den Einstellungen des Widgets auch die Abspeicherung von Texten in Musikdateien abschaltbar.

geschrieben von gklinkmann \\ tags: , , ,

Mar 16
htmlcleaner

Manchmal bekommt man als Programmierer unsauberes HTML (z.B. aus Word) und soll dann die Spreu vom Weizen trennen, sprich daraus ein zur Weiterverarbeitung XML konformes Dokument machen.

Wer schon mal HTML Code gesehen hat, der von Word generiert wurde, weiß wovon ich spreche. Damit man nicht jedes einzelne Dokument von Hand mit Tools wie z.B. HTML Tidy säubern muss, kommt schnell der Wunsch nach einer Bibliothek auf, die man in die eigenen Java Programme einbinden kann, um dort sauber ihren Dienst zu tun.

Gute Erfahrungen habe ich mit htmlcleaner gemacht. Hier ist ein kleiner Code Schnipsel:

String html="<html><body><unsaubererInhalt /></body></html>";
 
// Konfiguration einlesen und html säubern
HtmlCleaner cleaner = new HtmlCleaner();
CleanerProperties props = cleaner.getProperties();
TagNode node = cleaner.clean(html);
 
// den Body extrahieren und als XML aufbereiten
PrettyXmlSerializer xmlSerializer = new PrettyXmlSerializer(props);
String xml=xmlSerializer.getXmlAsString(node.findElementByName("body", true));

Das ganze klappt übrigens auch sehr gut mit unsauberen XML.

geschrieben von gklinkmann \\ tags: , , ,

Mar 01

Bei gutem Webdesign trennt man die Daten vom Layout. Das Layout wird dabei über Cascading Style Sheets (CSS) angepasst. Um Elemente oder Bereiche einer HTML Seite ansprechen zu können nutzt man CSS Selektoren. Doch wie ist der schnellste Weg zu einem HTML Element?

Diese Frage zu beantworten hilft das freie Tool SelectorGadget, das momentan für Safari und Firefox verfügbar ist.
Zur Installation zieht man den Link auf der SelectorGadget Homepage in die Favoritenleiste. Danach markiert man den Bereich in der HTML Seite, dessen Layout man mit CSS anpassen möchte und erhält den dazu passenden CSS Selector.

selectorgadget in Aktion

Das klappt so gut, dass SelectorGadget einen Platz bei meinen online Helfern sicher hat.

via: golem

geschrieben von gklinkmann \\ tags: , ,