Neue JRebel Lizenz – weiterhin keine Redeployments mehr

Meine einjährige „JRebel Personal Lizenz“ (kostete 156 Dollar) läuft jetzt im Dezember ab und staunend musste ich feststellen, dass die Lizenz abgeschafft wurde und Zeroturnaround stattdessen die „JRebel Base Lizenz“ für 265 Dollar (+ 20% Steuern) anbietet. Eine Verlängerung der Lizenz wollte ich mir nach der erheblichen Preiserhöhung noch überlegen, aber als Besitzer einer „JRebel Personal Lizenz“ bekommt man von Zeroturnaround eine ermäßigte „JRebel Base Lizenz“ für 154 Dollar (+ 20% Steuern) – da musste ich natürlich gleich zuschlagen.

Wer JRebel nicht kennt, fragt sich sicherlich: „Warum gibt ein Java-Entwickler für Entwicklungswerkzeuge heutzutage noch Geld aus?“. Wir haben doch schon so viele gute kostenlose Frameworks, Werkzeuge und Servers: Spring, Eclipse, Git, Jenkins, Tomcat, JBoss usw.

JRebel: Vergleich mit JVM Hot Swap

JRebel: Vergleich mit JVM Hot Swap (Quelle: Zeroturnaround)

JRebel bietet nach der Vergleichsmatrix offenbar einige Features, für die Entwickler auch gerne bezahlen. Doch was bedeutet JRebel für den Alltag eines Java-Entwicklers? Weiterlesen

Advertisements

Webseiten für Smartphones ausliefern durch Auswertung des User-Agents

Mit dem Handy im Internet surfen gehört für viele Smartphone-Besitzer zum Alltag. Wegen der geringeren Bilschirmauflösung bieten viele Webseiten eine optimierte schmalere Version für mobile Geräte an. Oft sind diese Seiten dann unter ‚m‘ statt ‚www‘ erreichbar und sie werden auch in einem normalen Desktop-Browser angezeigt: m.wikipedia.org , m.zalando.de oder m.tagesschau.de

Falls eine Webseite auch für Smartphones optimiert ist, muss der Server nach einer Anfrage der ‚www‘-Webseite erst einmal ermitteln, ob der anfragende Browser auf einem Desktop-Rechner oder einem Smartphone ausgeführt wird. Falls es sich um ein Smartphone handelt, wird auf die ‚m‘-Webseite mit einem Redirect (z.B. HTTP-Code 302: Moved Temporarily) weitergeleitet.

Woher weiß der Server nun, welche Version der Webseite ausgeliefert werden muss. Der Browser übermittelt bei einer Anfrage einige Header-Informationen, wie zum Beispiel das Feld ‚User-Agent‚, das Auskunft über den verwendeten Browser gibt. Damit kann der Server bewerten, mit was für ein Gerät der Anwender surft (siehe auch Wikipedia-Artikel: Mobile Device Detection).

Internet Explore 6 auf Windows XP:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Firefox 13 auf Mac OS X:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1

IPhone 4.3:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3 like Mac OS X; de-de) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8F190

Samsung Galaxy II:
Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; Galaxy S II Build/GRJ22) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

Weiterlesen

GeoJSON erzeugen mit Java

Bei der Webentwicklung hat sich für den Austausch von Daten zwischen Server und Client das JSON-Format bewährt. Es ist gegenüber XML kompakter, lässt sich trotzdem einfach lesen und wird von JavaScript direkt in verwendbare Objekte umgewandelt. Eine spezielle JSON-Ausprägung für geografische Daten bildet das GeoJSON-Format. Dieses Format wird auch von OpenLayers unterstützt, sodass man keinen umfangreichen JavaScript-Umwandlungscode schreiben muss. Der folgende GeoJSON-Code enthält die Daten mit Geo-Koordinaten für drei Plätze in meiner Heimat:

{ "type": "FeatureCollection", "features": [
{ "type": "Feature", "id": 1, "properties": { "name": "", "image": "playground.png"} , "geometry": { "type": "Point", "coordinates": [8.5864, 52.8988] } },
{ "type": "Feature", "id": 2, "properties": { "name": "Balkan-Restaurant", "image": "restaurant.png"} , "geometry": { "type": "Point", "coordinates": [8.5992, 52.9106] } },
{ "type": "Feature", "id": 3, "properties": { "name": "carpe diem", "image": "hairdresser.png"} , "geometry": { "type": "Point", "coordinates": [8.5873, 52.9079] } }
] }

Wie wird jetzt dieser GeoJSON-Code serverseitig generiert? Da GeoJSON auch normales JSON ist, können wir es genauso generieren, wie wir JSON generieren würden. Manche Sprachen unterstützen die Transformation zwischen Objekten und JSON direkt:

  • JavaScript: JSON.stringify($object) und JSON.parse($string)
  • PHP: json_encode($object) und json_decode($string)

In Java müssen wir selber Code dafür schreiben oder eine entsprechende Bibliothek nutzen. Zum Glück gibt es allerhand Java-Bibliotheken für JSON. Mit den Bibliotheken org.json, json-simple und Jackson habe ich ausprobiert, wie leicht das Erzeugen von JSON mit solchen Bibliotheken von der Hand geht. Das ist nur eine kleine Auswahl von den über 20 auf json.org aufgelisteten Bibliotheken.

Weiterlesen