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.