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: 


Dienstag, 17. Juni 2014

Python vs. R

Im akademischen Bereich ist R schon lange eine wichtige Konstante wenn es darum geht statistische Auswertungen aka Data Science zu machen (Link). Lange wurde Python wegen seines guten Handlings von Daten als Ersatz für Mainstream-Anwendungen benutzt. Das Datenhandling war ähnlich einfach wie das in R.
R ist im Vergleich zu anderen Programmiersprachen gewöhnungsbedürftig (Link). Auch wenn diese Dinge wie Schleifen vs apply oder der Mangel an graphischen Interfaces (GUI), Blockkommentaren oder Multithreading berechtigt sind, so lässt sich R aber sehr komfortabel als Scriptsprache, wie unter anderem auch Python einsetzen.
Das führt auch  zu einer ständig wachsenden Beliebtheit dieser Sprache wie Redmonk in ihrem Ranking für Programmiersprachen feststellt feststellt (Link). Python schneidet bei diesen Rankings deutlich besser ab. Einen Anteil an der wachsenden Popularität von R hat das gute R IDE RStudio (Link), das abgesehen von der Doppelklick-Select-Word Anomalie sehr zu empfehlen ist.

Kurz zusammengefasst: R ist nicht tot sondern erfreut sich wachsender Beliebtheit und Python sowieso.