Dienstag, 2. Dezember 2014

Use latest Vim on MacOSX and Setup

Vim ist neben Eclipse mein zweit liebster Editor für Sourcecode. MacOSX kommt mit einem nicht ganz aktuellem Vim daher, dies ist oft kein grosses Problem.  Man kann mit  dem MacOSX Packetmanager Homebrew eine aktuelle Vim Version installieren:
brew install vim 

Bei einem Aufruf von Vim wird jetzt aber immer noch das alte Vim gestartet. die kann man wie folgt im Terminal beheben:
sudo mv /usr/bin/vim /usr/bin/vim73
sudo ln -s  /usr/local/Cellar/vim/7.4.488/bin/vim /usr/bin/vim

Das alte Vim bleibt so erhalten.

Dann hat man aber auf dem MacBook Pro das Problem dass die Pfeiltasten nicht korrekt funktionieren, sie liefern die Buchstaben A, B, C, D. Ausserdem funktioniert die Backspace Taste nicht. Um dies Beides zu beheben, muss man die die Datei .vimrc im Home-Vereichnis des Users anlegen und sie mit folgen Inhalt versehen:
set nocp

set backspace=2

Neben dem alten Vim bietet MacOSX auch ein veraltetes Git und Maven. 

Dienstag, 11. November 2014

Neues Java Projekt gelauncht: Simple Guitar Tuner

Ich habe auf Github ein kleines Projekt simpleguitartuner gelauncht und das erste Release gebaut. Mit ihm kann sehr einfach die Saiten einer Gitarre stimmen. Im Gegensatz zu den anderen Tuningprogrammen ist dieses sehr präzise bezüglich der Frequenzen. Das Programm wird gestartet: java -jar simpleguitartuner-0.0.1.jar und gestoppt mit CTRL + C. Einfacher geht es nicht. Nach dem Start gibt die Saite an, die man stimmen möchte, dann spielt man die Saite und bekommt das Ergebnis und den Sollwert sehr genau angezeigt. Das geht so lang, bis man das Programm beendet.

Hier die Daten:

Mittwoch, 22. Oktober 2014

Optimierung von If Else in Java

If-Else Konstrukte mit zwei Exit-Points kann auf zwei verschiedene Weisen in Java formuliert werden:
Hier beide Varianten, einmal mit und einmal ohne Kommentare. Dann befindet sich der zweite Exit-Point im Else-Zweig. Welche dieser beiden Varianten ist performanter?

Die Antwort ist, es egal. Aus beiden Code-Varianten wird identischer Byte-Code erzeugt:

Dienstag, 9. September 2014

Elastic Search Date und Timestamp

In Elastic Search kann man das Datum auf sehr verschiedene Weisen angeben:
"range": {
                    "@timestamp": {
                        "gte": "2014-09-08T09:00" ,
                        "lte": "2014-09-08T10:00"

                    }

oder:

"range": {
                    "@timestamp": {
                      "from": 1410167281557,
                      "to": 1410170881557
 

From und To sind Parameter zur Angabe des Time Ranges, sie sollen nicht mehr benutzt werden, weil sie deprecated sind. Sie sind durch GTE und LTE zur ersetzen, nicht durch GT oder LT.

Mittwoch, 27. August 2014

Java GC Optimierung

Mit Java 8 sind einige JVM Optionen jetzt als Standard gesetzt. Das sind folgende GC Tuning Massnahmen:

  • -XX:+UseCompressedOops 
  • -XX:+DoEscapeAnalysis
Das erste Flag verringert den Speicherverbrauch auf 64 Bit Systemen.

Nachzulesen bei Oracle unter folgendem Link: http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html


Und hier noch ein paar hilfreiche Links zum Thema GC:

Sonntag, 3. August 2014

Java auf einem QNAP TS-110, der zweite Versuch

Nachdem mein erster Versuch gescheitert war auf meinem QNAP TS-110 Java zu installieren, gibt es jetzt gut Nachrichten. QNAP bietet jetzt ein funktionsfähiges Java 8 als JRE. Es lässt sich einfach via QNAP App-Manager installieren.

Und hier der Beweis im Terminal:

Jetzt ist das QNAP vollständig, einen Tomcat kann man auch installieren, Damit habe ich einen kleinen Entwicklungsserver. Allerdings darf vom QNAP TS-110 nicht zu viel erwarten. Das RAM ist sehr begrenzt und die CPU auch. Kleinere Anwendungen sollten aber möglich sein. Als nächstes Projekt kann das QNAP die Tinkerforge Wetterstation bedienen.

Donnerstag, 19. Juni 2014

Unit Test mit R, ganz einfach

Auch wenn R oft nicht als richtige Programmiersprache gilt, so gibt es auch in R die Möglichkeit Unit Test zu schreiben. Dafür stehen verschiedene Packages zur Verfügung:

  • RUnit
  • testthat
Hier ein minimales Einsteigerbeispiel mit testthat:


source("main/analyzeXltReport.R")
library("testthat")


test_that("Error Rates", {
  xltreport = loadXltXmlReport("test/testreport.xml")
  expect_that( getTranscationErrorCount(xltreport), equals(24) )
  expect_that( getAtionErrorCount(xltreport), equals(24) )
})

Zuerst wird die zu testende Datei geladen und dann das Testframework. Danach ruft man die Testmethode test_that auf mit einem guten Namen und dem eigentlichen Testcode.

Wenn man jetzt den Test ausführt liefert er beim Erfolg kein Ergebnis:
> source('~/git/lhotse-nfa/loadtest/analysis/test/analyzeXltReportTest.R')
> 
Bei Fehlern sieht es dann z.B. wie folgt aus:
> source('~/git/lhotse-nfa/loadtest/analysis/test/analyzeXltReportTest.R')
Fehler: Test failed: 'Error Rates'
Not expected: getTranscationErrorCount(xltreport) not equal to 20
Mean relative difference: 0.2.

Eine kleine Anmerkung, die Pfade in den R Scripten auch im Unit Test beziehen sich auf das aktuelle Directory!

Weitere Informationen zum Unit Testing mit R findet Ihr hier: