Samstag, 28. Dezember 2013

Make it run, make it right, make it fast.

Drei Grundsätze der Programmierung: "Make it run, make it right, make it fast.". Wichtig ist, dass sich hierbei um ein Periodisierung geht. D.h. zuerst muss das Programm laufen, erst wenn es läuft, mache es schön, dass es deinen eigenen Ansprüchen genügt und dann erst, zu aller letzt, mache es schnell.

Donnerstag, 14. November 2013

Codeanalyse ganz einfach

Für die Code Analyse bzw. für die Analyse der Codequalität gibt es eine Reihe von Werkzeugen wie PMD, Findbugs, Emma, Sonar und und und. Die Werkzeuge sind mehr oder weniger einfach zu bedienen und lassen sich meist gut in bestehende Entwicklungsumgebungen wie Eclipse, Ant oder Maven integrieren. Aber es geht noch einfacher. Man kann Codeanalysen auch in der Kommandozeile machen. Hier ein paar Beispiele:

Beispiel 1: Finden von Null Rückgabewerten, ein typischer Codestinker
grep -e "return null"  projectXX/net/ffreax/**/*.java | wc -l

Beispiel 2: Finde die Dateien mit den meisten Zeilen, potentielle Gottklassen bzw. überladenen Klassen
wc -l projectXX/net/ffreax/**/*.java | sort -nr | head

Ab jetzt wird PMD hinzugenommen, duz muss PMD heruntergeladen (Link) werden.

Beispiel 3: Code Duplikate finden, hier für PHP
bin/run.sh cpd --files ~/Documents/ME_Code_Review/projectXX-Web/Classes/ --minimum-tokens 120 --language php | less

Beispiel 4: Gott Klassen finden
bin/run.sh pmd -d ~/Documents/ME_Code_Review/projectXX-Android/net/  -l java   -R rulesets/java/design.xml | grep GodClass

Beispiel 5: Alle Basic Probleme
bin/run.sh pmd -d ~/Documents/ME_Code_Review/projectXX-Android/net/  -l java -r design -f text -R rulesets/java/basic.xml | less

Mittwoch, 13. November 2013

Ant und Jmeter: Automatisches anpassen des Jmeter Testplan

Jmeter lässt sich in Ant relativ einfach via Jmeter Task integrieren. Dazu benötigt mann nur ein JAR (extras/ant-jmeter-*.jar), welches mit Jmeter kommt. Jmeter selbst kann mit Variablen umgehen, die man z.B. via Kommandozeile setzen kann, hier wir das Property duration auf 12 gesetzt.
jmeter.sh -n -l r.xml -t LPT-woff-size-load.jmx -Jduration=12
Im Testplan kann man dann einfach auf diesen Wert zugreifen, hier wird zusätzlich ein Default Wert 60 gesetzt:
${__P(duration,60)}


Leider bietet der Jmeter-Ant Task nicht diese Flexibilität oder ich habe sich nicht finden können. Alternativ kann man in Ant den Jmeter Testplan direkt modifizieren. Der Testplan ist eine XML Datei  die man via Ant XML Task modifizieren kann:
<?xml version="1.0" encoding="UTF-8" ?>
<project name="jmeter">
 <description>
  This file contains private task for: Load generation with jemeter.
 </description>
  
   <property name="jmeter-home" value="${env.JMETER_HOME}" />

   <path id="ant.xml.classpath">
  <fileset dir="antlibs">
   <include name="xmltask.jar"/>
  </fileset>
 </path>

 <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" classpathref="ant.xml.classpath"/>
 
 <target name="load_jmeter" >
  <echot level="info">Generate synthetic load with JMeter.</echot>
  <fail message="JMeter Home not set. Use evirmoment variable JMETER_HOME or property jmeter-home in file: ${setupfile}">
   <condition>
    <not>
     <or>
      <isset property="env.JMETER_HOME" />
      <isset property="jmeter-home" />
     </or>
    </not>
   </condition>
  </fail>
  <!-- ant-jmeter.jar comes with jmeter, be sure this is the release you have -->
  <path id="ant.jmeter.classpath">
   <fileset dir="${jmeter-home}/extras">
    <include name="ant-jmeter-*.jar"/>
   </fileset>
  </path> 
  <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" classpathref="ant.jmeter.classpath" />
  <xmltask source="src/${load.jmeter.testplan.file}" dest="results/${load.jmeter.testplan.file}">
   <replace path="//stringProp[@name='RunTime.seconds']/text()" withText="${load.duration}" />
  </xmltask>
  <copy file="src/urls.txt" todir="results" />
  
  <jmeter jmeterhome="${jmeter-home}" resultlogdir="results/jtl" testplan="results/${load.jmeter.testplan.file}">
   <property name="jmeter.save.saveservice.output_format" value="xml"/>
  </jmeter>
 </target>

</project>

Dienstag, 12. November 2013

Bessere Ant Scripte schreiben

Ant Scripte (aka Build Files) haben die Neigung komplex zu werden. Damit einher gehen geringere Lesbarkeit und Wartbarkeit der Scripte. Dieses Phänomen betrifft neben Ant auch andere Build-Werkzeuge wie Rake oder Gradel. Ein Ausweg ist das Wechsel zu Maven, das mit seinem "Convention over Configuration" Ansatz dieses Problem umgeht. Leider müssen dann oft bestehende Build-Prozesse massiv geändert werden, damit sie den Maven Konventionen entsprechen. Dieser Aufwand wird aus verschiedenen Gründen von vielen Entwicklern gescheut. Welche Gründe das sind würde diesen Artikel sprengen und ist ein neues Thema.
Ein zweiter Weg ist es die Ant Scripte besser, lesbarer zu gestalten. Dabei helfen folgende Dinge:

  1. Ersetzen von Ant Tasks durch Ant Makros
  2. Benutzung von FAIL
  3. Auslagen von Funktionen in andere Ant Scripte oder in externe Scripte (BASH) oder Programme
Das Ersetzen von Task durch Makros hat den Vorteil, dass man die zu verarbeitenden Properties als Parameter dem Makro übergeben kann. Dadurch wird sichtbar, was vorher im Verborgenen war. Zusätzlich lässt sich eine einfache Verarbeitung (Default Werte) bzw. Prüfung der Parameter durchführen.

Hier ein Beispiel für ein kleines Makro, welches ein Echo mit Timestamp zur Verfügung stellt:

 <macrodef name="echot" >
  <text name="text"/>
  <attribute name="level" default="warning"/>
  <sequential>
   <tstamp>
    <format property="current.time" pattern="yyyy-MM-dd HH:mm:ss" />
   </tstamp>
   <echo level="@{level}" message="${current.time} @{text}" />
  </sequential>
 </macrodef>

Links zum Thema:

Dienstag, 1. Oktober 2013

HTTP Client Performance

Für die Load- und Performance-Messungen auf dem Server gibt es eine Reihe von Werkzeugen wie XLT (Link) oder das bekanntere Apache JMeter (Link). Die einfachste Aufgabe ist es eine Reihe von HTTP Request an den zu untersuchenden Server zu senden. Dabei kann man in JMeter die Implementation für den HTTP Request auswählen. Zur Auswahl stehen in JMeter 2.9: HTTPClient3.1, HTTPClient4 und Java. Alternativ brauch man nicht auswählen, dann wir Java als Standard benutzt.
Aber welcher dieser drei HTTP Clients ist die optimale Wahl. Im Atlassian Blog gibt es einen Vergleichstest zwischen verschiedenen HTTP Clients (Link), dabei sind auch die drei JMeter Kandidaten. Eine normale JMeter Anwendung besteht in der Regel aus vielen kleinen HTTP Requests. Bei Atlassian Test für kleine Dateien (80kb) liegt CURL vor  dem HTTPClient3.1 und dem Java (hier Bee). Wie verhalten sich aber die HTTP Clients im JMeter-Test? Dazu habe ich einen kleinen Testaufbau mit einem konstanten Durchsatz von 152 Request/s auf verschiedene kleine HTML- und JSON Fragmente aufgesetzt. Dabei erreichten die Clients folgende Werte für den durchschnittliche Requestdurchsatz und den auf dem Loadwert auf dem JMeter-Client:
  1. HTTPClient3.1; 164 Req/s; Load 2.0
  2. HTTPClient4; 137 Req/s; Load 2.9
  3. Java; 150 Req/s; Load 2.6
Damit bestätigt sich das Bild aus dem Atlassian-Test, die für die meisten Test günstigste Wahl, weil performateste und Ressourcen-schonenste Auswahl ist der alte Apache HTTPClient3.1., der leider nicht mehr weiter entwickelt wird.

Donnerstag, 26. September 2013

Browser Fingerprinting

Mit Hilfe von Cookies lassen sich Browser und damit Benutzer im WWW sehr leicht wieder erkennen. Dabei hinterlässt der Web-Site Betreiber einen Datenkrümel beim Benutzer, also im Webbrowser. Somit ist auch für den Web-Surfer erkennbar, dass der Web-Site-Betreiber ihn trackt. Es bleiben eindeutige Spuren zurück. Daneben gibt es aber eine Form des Treckings, das keine Spuren beim Benutzer hinterlässt, das Browser Fingerprinting. Dabei werden diverse Informationen des Browsers abgefragt wie User Agent, bevorzugte Sprachen, unterstützte Mime Types und Plugins, Bildschirmauflösung und weitere Dinge. Damit ergibt sich ein möglicherweise eindeutiger Wert. Wer dies sich für seinen Browser sich ansehen möchte: Link.

Gegen Cookies helfen Adblocker, die Tracking Pixel und die damit verbundenen Cookies fern halten oder das gelegentliche Löschen der Cookies oder der Surfen im privaten Modus.

Aber was hilft gegen Browser Fingerprinting? Die vollständige Deaktivierung von JavaScript und Flash scheinen im Moment ein guter Weg zu sein oder die Nutzung von JonDo.

Es wäre sich auch ein interessanter Weg die Daten die fürs Browser Fingerprinting genutzt werden zu reduzieren. Aber dies ist bei den meisten Browsern schwierig. Die Option der Manipulation des User Agents wäre für die Browserhersteller ein einfache Option, vielleicht auch die Abschaltung einiger anderer Dinge wie die Font-Erkennung, die durch die Webfonts an Bedeutung verlieren. Eine Verringerung der potentiellen Datenmenge führt zu weniger eindeutigen Erkennbarkeit des Benutzers. Oder wie wäre es mit einer Sicherheitsabfrage: Erlauben sie dieser Website die technischen Daten ihres Browsers zu erfassen? Oder kann man statt Cookies zu vermeiden sie tauschen, vielleicht ein automatische Cookie-Tauschbörse?

Warum gibt es überhaupt diese Techniken wie Cookies oder Browser Fingerprinting, bzw. warum sind sie populär? Neben eineigen sinnvollen Anwendungen, wie die Sissionsmanagement z.B. beim Einkaufen im Internet geht es primär um das gezielt ausspielen von Werbung. Targeting und Retargeting sind hier die Schlüsselworte. Eins muss man klar sehen, das Internet ist nicht umsonst, wir bezahlen mit Werbekonsum oder wir bezahlen für Tools die die Werbung uns vom Hals hält.

Weiter Informationen zu Thema: Link

Mittwoch, 11. September 2013

Installieren von Java auf einem QNAP TS-110

Das QNAP TS-110 hat Marvell 6281 mit 800MHz, die CPU ist kompatibel mit ARMv5. Damit sollte man das neue Java 7 bzw. der Java 8 Preview sich installieren lassen. Der erste Hürde ist der Download via Command Line:
wget --no-check-certificate http://www.java.net/download/jdk7u40/archive/b40/binaries/jdk-7u40-fcs-bin-b40-linux-arm-vfp-sflt-16_aug_2013.tar.gz  -O java7.tar.gz


Nach dem Entpacken der Test:

[/share/Public/jdk1.7.0_40] # bin/java -v
Illegal instruction


Es funktioniert nicht.

Update:

Ein Jahr später. Es geht doch: LINK Java läuft auf dem kleinen QNAP TS-110.

Donnerstag, 29. August 2013

Kann ich SPDY nutzen?

SPDY ist ein HTTP Alternative, die Mängel von HTTP(S) kompensieren soll und besser den Anforderungen moderner, grosser Web-Applikationen entsprechen. Doch wie verbreitet ist SPDY bei den Benutzern? Dazu gibt es ein hilfreiche Übersicht, welcher Browser SPDY unterstützt (Link). Kombiniert man diese Daten mit der Webbrowserverbeitung von StatCounter kommt man auf eine Browserunterstützung von 65% für 09/2013. Damit kann man für 65% der heutigen Benutzer die Webaplikation zu beschleunigen. Die Browserunterstützung wird auch den IE erreichen und damit werden können fast alle Benutzer SPDY nutzen.
Übrigens gibt es nettes Firefox Addon SPDY indicator, das anzeigt ob die Site per SPDY ausgeliefert wird.

Wie surft Deutschland 2012/2013?

Jeder der eine Web-Projekt aufsetzt muss seine Kunden kennen. Dazu gehören auch die technischen Fragen: Welche Browser werden genutzt? Mit welcher Geschwindigkeit surfen die Kunden?

Bei den Webbrowsern ist die Frage relativ einfach zu beantworten, eine gute Quelle ist StatCounter. In Deutschland ist seit Jahren Firefox an der Spitze der Charts.
Aber mit welcher Geschwindigkeit welchem Zugang und welcher Latenz kommt der Kunde? Hier gibt es gute Quelle, die Bundesnetzagentur. Daraus ergibt sich folgende Verteilung: 93% der Haushalte in Deutschland verfügen über einen Breitbandanschluss. Diese splitten sich in 83% DSL, 13% Kabel und 3% LTE auf. Für die Latenz (Ping) bedeutet das: DSL 24msec, Kabel 15mesc und LTE 45msec. Dazu kommt, dass 40% der Haushalte in Deutschland WLAN einsetzen mit einer Latenz von 10msec. Ein typischer Benutzer setzt DSL6000 und Firefox ein. WLAN ist aber eine sehr häufige Option. Für Webtest wären ein sinnvoller Wert für Latenz (DSL + WLAN) 34msec.

Quellen:

Bundesnetzagentur, Jahresbericht 2012
Bundesnetzagentur, Abschlussbericht „Dienstequalität von Breitbandzugängen“, 2013

Mittwoch, 21. August 2013

ANT Properties laden

Die Propertiesverarbeitung in ANT ist komfortabel aber nicht ohne Tücken. Properties können mittel Tag, File oder ANT Parameter (-D) gesetzt werden. Aber wer gewinnt?

  • Wird ANT mit Parameter -Dpropertiename=wert gestartet, dann gewinnt dies immer.
  • Das setzen eines Propertie per File oder Tag sind gleichberechtigt, der letzte gewinnt.

Dienstag, 20. August 2013

Wer braucht Closures?

Ich nicht. Ich nicht, solange ich nicht JavaScript programmiere. Man kann mit Closures unter anderem den Mangel an this in JavaScript ausgleichen. Wenn man Closures und ggf. Currying beherscht ist dies cool aber kein Grund diese Techniken immer und immer wieder einzusetzen. Closures haben auch Nachteile: Memory leaks und schlechtes Laufzeitverhalten:

Ach so, wenn man nach dem Begriffen Vorteilen Closures googelt, da findet man viel über deren Nachteile.

Donnerstag, 4. Juli 2013

BASH Hacks 1

Das Escaping in BASH ist immer wieder eine Herausforderung. Hier ein Beispiel: das Kopieren von Dateien via SCP die im Dateinamen Leerzeichen enthalten:
scp  boss@42.ath.cx:"'/share/Public/Dokumente/JUGHRO/2011-06-16 Clean Code.odp'" .

Dienstag, 11. Juni 2013

Motivation

Oft gesehen (Link):

R: Jeden zweiten Wert aus eine Matrix auswählen

Ausgangsbasis war eine Matrix die doppelte Zeilen enthielt. Mit folgenden R Schnipsel reduziere ich die Matrix indem ich nur jeden zweiten Wert auswähle.
a = mymatrix[seq(1, dim(mymytrix)[1], 2),]
Die entscheidende Funktion ist hier das generieren einen Sequenz mit der Schrittweite 2.
seq(1, dim(mymatix)[1], 2)

Mittwoch, 29. Mai 2013

Ant scripten mit JavaScript

Bei komplexen Deployments oder Aufgaben wünscht man sich in Ant ein einfache Möglichkeit mit Bedingungen (if), Schleifen (for) oder andere Programmiersprachen-Features wie Berechnungen durchzuführen. Mit aktuellem Java und Ant ist dies relativ einfach möglich. Ant unterstützt die Einbettung von Schriftsprachen wie Groovy, Ruby, Python oder auch JavaScript. Mit dem folgenden Beispiel wird ein Ant Property gelesen, ein Wert berechnet und das Ergebnis an Ant als Property zur Verfügung gestellt.
<target name="test" depends="">
    <property name="x" value="14" />
    <script language="javascript"><![CDATA[
      x = (project.getProperty("load.time") * 60 - project.getProperty("interrupt.time"))/2 - 70;
      project.setProperty("y", x)
      println("hello " + x);
    ]]>
    </script>
    <echot>Test: A: ${x}</echot>
    <echot>Test: B: ${y}</echot>
</target>
Anmerkung bei dem echot Task handelt es sich um folgendes Ant Makro ECHOT, alternativ kann einfach echo verwandt werden.

Montag, 29. April 2013

Ant Echo mit Timestamp

Für einige Analysen ist es hilfreich wenn die Ausgaben mit einem Zeitstempel versehen sind, dies ist besonders wichtig bei zeitkritischen oder parallelen Aufgaben. Leider gibt Ant mit dem Echo Task kein  Timestamp mit aus. Die lässt sich durch ein Ant Marco lösen:
<macrodef name="echot">
    <text name="text"/>
    <attribute name="level" default="warning"/>
    <sequential>
      <tstamp>
        <format property="current.time" pattern="yyyy-MM-dd HH:mm:ss" />
      </tstamp>
      <echo level="@{level}" message="${current.time} @{text}" />
    </sequential>
</macrodef>
Danach kann das Timestamped Echo in Ant wie der normale Echo Task verwendet werden:
 <echot level="info">Start</echot>

Samstag, 27. April 2013

Software Agenten

Wer erinnert sich noch an den Hype um Softwareagenten. Und wie jeder Hype platzet auch diese Blase. Doch heute sind Softwareagent Alltag ohne das es jemand gemerkt hätte. Hadoop, MongoDB, BOINC und andere Software sind von ihren Eigenschaften her Softwareagenten, die zentral gesteuert werden. Merke, nicht der Hype ist wichtig, sondern die Kernidee. Selbst wenn der Hype schon vergessen ist, so leben die Ideen oft weiter, meist jedoch in geänderter Form.

Dienstag, 16. April 2013

Was ist ein Hidden Backup?

In der Softwareentwicklung dienen Datenbank zur Persistierung von Daten eines Programms. Neben dem normalen Programmablauf werden Datenbanken als Quelle für Reports und Data Warehouses genutzt. Reports oder Analysen haben in der Regel erzeugen eine hohe Last auf der Datenbank, die dazu führen kann, dass die eigentliche Software stark ausgebremst wird. Um diesen Effekt zu eliminieren kann man auf Hidden Backups zurückgreifen.  Ein Hidden Backup ist eine Replikation einer Datenbank, die nicht als normale Datenbank für die Software zu Verfügung steht. Sie wird nur für Analysezwecke genutzt und kann von der Dimensionierung auch anders geschnitten sein.

Eine besondere Form des Hidden Backups ist das Delayed Hidden Backup. Hier wird die Replikation zusätzlich verzögert, z.B. um mehrere Stunden. Eine Delayed Hidden Backup dient als Desaster Backup, dass für den Fall das z.B. eine neue Softwareversion die Datenbankinhalte zerstört. In diesem Fall kann wird die primäre Datenbank abgeschaltet und die alte Software mit dem Delayed Hidden Backup in Betrieb genommen. Zusätzlich kann das Delayed Hidden Backup fürs Reporting oder für teure (BI) Analysen genutzt werden.

Die einfachste Möglichkeit eine Delayed Hidden Backup zu erstellen ist, eine Backup der primären Datenbank zu machen und auf einem separaten Server einzuspielen. MongoDB biete eine einfache Konfiguration für die Einrichtung eines Delayed Hidden Backups.

Hidden Backups verbessern die Performance und in Form des des Delayed Backups wird zusätzlich die Robustheit des Gesamtsystems verbessert.

Samstag, 6. April 2013

R in Version 3.0.0 erschienen

Es ist kaum zu glauben, aber mit der Version R 3.0.0 ist seit langer Zeit ein Major-Release für R erschienen (Link). Aus meiner Sicht sind die es trotz des Major Releases eher evolutionäre Änderungen, die einige Unschöne Dinge und Limits beseitigen. An einigen Stellen wurden für größere bzw. längere Daten geändert (Vektoren, RAM) die Performance nur leicht verbessert. Ich gehe davon aus, dass R bei normalen Aufgaben auch jetzt nicht besser mit der Anzahl der Prozessoren skalieren wird.

Mittwoch, 3. April 2013

SPLUNK Rest API Probleme

Das Splunk ein prima Werkzeug ist, ist keine Frage nur leider gibt es paar wesentliche Einschränkungen in Bezug auf Spluks' Rest API (Version Splunk 5.0.2):

  • Dokumentation des REST API ist fehlerhaft.
  • Java Wrapper fürs REST API ist fehlerhaft und damit sinnlos.
  • Die Suchergebnisse unterscheiden sich zwischen dem REST API und dem Web GUI (Link) und in der Web GUI fehlerfreie Anfragen führen zu einem leeren Ergebnis und zu keinem Fehler und machmal Splunk Debug-Ausgaben.
  • Fehlerhafte REST Suchen liefern leere Ergebnisse wenn das Ausgabeformat CSV ist.
  • REST Suchen mit dem Ausgabeformat CSV liefern auch interne Felder zurück. Splunk interne Werte beginnen mit einem Unterstriche (_time, _span, ...).
  • DieFormatierung des Zeitstempels ist zwischen REST API und Web GUI unterschiedlich.
Alle diese Punkte verhindern eine einfache Integration von Splunk in bestehende Umgebungen. Schade, weil Splunk ein sonst guten Eindruck macht. Übrigens verwendet die Web GUI nicht die REST Schnittstelle von Splunk, was gut zu den unterschiedlichen Suchergebnissen passt.

Ach so liebe Splunkies, ich warte immer noch auf mein T-Shirt.

Donnerstag, 21. März 2013

Was ist die wichtigste Analyse Software?

Es gibt verschiedene Systeme mit den entsprechenden Sprachen für mathematische und statistische Analyse bzw. Business Intelligence (BI). SAS und S fühlen sich als Marktführer. Doch auch die Open Source Alternative R behauptet die dominierende Kraft zu sein. In einem Blogbeitrag von Robert A. Muenchen wird das Diskussionsaufkommen in verschiednen Bereichen als Indikator herangezogen. R dominiert das Feld deutlich vor Staat, SAS und SPSS. Jetzt kann man mehrere Einwende gegen dieses Messverfahren hervorbringen. Besonders anfällige Systeme erzeugen mehr Diskussionen als perfekte Systeme. Ich denke, das dies langfristig nicht haltbar ist, weil die Anzahl der Diskussionen in den Foren wesentlich stärker von der Menge der Benutzer abhängt als vom System selbst. Gibt es dafür Belege? Weiterhin ist nicht der kommerzielle Support in die Messung eingegangen, der im nichtöffentlichen Bereichen stattfindet z.B. in geschlossenen Foren oder via Email.
Wenn man aber weitere Quellen wie GULP oder Tiobe heranzieht, dann bestätigt sich das Bild, dass R das verbreitetste Analyse System ist. Allerdings ist nicht nicht nur Sonne auf der R Seite, es gibt zwar scheinbar für jedes Problem ein R-Paket, das sich meist einfach installieren lässt, aber viele Pakete werden nicht kontinuierlich gepflegt oder weiterentwickelt. Das liegt auch stark an der massiven Verbreitung von R im akademischen Bereich.
Übrigens gibt es ein oft übersehenen Konkurrenten zu R ist Python. Für Python gibt es gut numerische Pakete und sehr einfache Zugrissmöglichkeiten auf Matrizen. Zusammen mit diesen Paketen fühlt sich Python schon sehr R-like an, das ist wahrscheinlich warum Splunk intern auf Python setzt.

Donnerstag, 31. Januar 2013

Externe JARs in Maven integrieren

Das ist leider unschön, kann aber so realisiert werden:


<dependencies>
<dependency>
<groupId>com.splunk</groupId>
<artifactId>splunk</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/splunk-1.0.jar</systemPath>
</dependency>
</dependencies>


Wichtig: Wenn ich versuche dieses Projekt via exec:java (Link) dann schlägt die Fehl. Das MAven Exec Plugin unterstützt diese externe JARs nicht. Das ist unerwartet und schade. Abhilfe kann hier das Maven Package Plugin schaffen, siehe Link. Dabei wird ein Bigjar bebaut, dass man dann sehr einfach ausführen kann.

Freitag, 11. Januar 2013

Was ist die wichtigste Datenbank zur Zeit?

In fast jedem Projekt steht die Frage, wie sollen die Daten persistiert werden. Oft passiert dies in Datenbanken. Aber welche ist zu wählen. Auf der Seite DB-Engines gibt es ein aktuelles Ranking. Auch wenn es viele hippe neue Datastores gibt, die Welt ist rational. Im Spitzenfeld sind Oracle, MySQL (auch von Oracle) und Microsoft SQL Server. Das Verfolgerfeld besteht aus Mircosoft Access, PostgreSQL und DB2. Erst im zweiten Verfolgerfeld findet sich mit MongoDB der erste neue Datastore, damit ist MongoDB die populärste  NoSQL Datenbank.
Aber so ein Ranking reflektiert nur den aktuellen Stand. Die wichtigste Datenbank muss aber nicht die beliebteste Datenbank sein.

Mittwoch, 9. Januar 2013

SPDY vs. HTTP

Google hat mit SPDY (Link zum Projekt), gesprochen Speedy, ein alternatives Übertragungsprotokoll zu HTPP und HTTPS entworfen. Es soll die Probleme von HTTP beheben und erfreut sich zunehmender Beliebtheit bei vielen Big Playern (Link). Dem entsprechend gibt es verschiede Test. Google gibt eine Beschleunigung um bis zu 55% an (Link). Das wäre eine dramatische Verbesserung. Guy Podjarny hat in seinem Blog ein interessanten Test (Link) veröffentlicht. Dabei kommt heraus, das SPDY langsamer als HTTP ist und nur ein wenig schneller als HTTPS. Dieses Ergebnisse ist ernüchternd. Wichtig bei dem Test von handelt es sich um ein einen Real World Test, der den aktuelle Stand reflektiert. Sicher sind mit einigen Optimierungen bessere Ergebnisse für SPDY zu erzielen, aktuelle Seiten sind stark für HTTP optimiert. Die Frage ist ob dies den Unterschied von 5% (Guy Podjarny: SPDY vs. HTTPS) zu 55% (Google) erklärt? Ich bin gespannt.

Dienstag, 8. Januar 2013

Zeit zum Umstieg: Java 6 läuft aus

Java 6 ist unter Softwareentwicklern noch sehr populär. Jetzt wird es höchste Zeit von Java 6 auf Java 7 zu migrieren, denn ab Februar 2013 (nächster Monat) wird es keine (öffentliche) Updates für Java 6 mehr geben (Link). Als Bonus für die Migration von Java 6 auf Java 7 gibt es einen kleinen Performanceschub (Link) und einen neuen Garbage Collector G1.