If you are using the build-in Cisco VPN Client in Mac OS X, you can also route your normal request beside the VPN tunnel. In the common OpenVPN client Tunnelblick, it's easy to setup these routes in the config file.
With the build-in Cisco VPN client, there is no preferences for these routes. The solution is to add these missing routes via Terminal.
Your local network has IPs like 192.168.1.X
sudo route -nv add -net 10 -interface utun0
This line routes all IPs starting with 10 through the VPN tunnel. 10 is here the net on the other side.
sudo route change default 192.168.1.1
This line route all other requests through through your local gateway (router). In my local network my gateway has the IP 192.168.1.1 an I have an 192.168.X.X local network.
Freitag, 18. September 2015
Montag, 7. September 2015
Vortrag auf der Hamburger Konferenz Solutions
Ihr könnt mich und das SCALE Team von OTTO auf der 2015 Solution Hamburg erleben. Hier stehen wieder die nichtfunktionalen Anforderungen wie Robustness, Performance, Load und Security im Mittelpunkt.
Datum und Ort:
09. – 11. September 2015
auf Kampnagel in Hamburg
Datum und Ort:
09. – 11. September 2015
auf Kampnagel in Hamburg
Freitag, 26. Juni 2015
Robust Code: Security Counter and Endless Loop
Eines der typischen Probleme bei der Entwicklung von Code sind Endlos-Schleifen. Von Ausnahmen mal abgesehen sind Endlos-Schleifen in der Regel nicht erwünscht. Leider entstehen sie durch scheinbar einfachen Code, der scheinbar korrekt ist. Hier ein Beispiel, von der Initialisierung eines Objektes, das selbst ein externes Subsystem (ZAP) initialisiert und dem entsprechend darauf wartet:
private void waitForStart() {
while(!this.isZapDaemonUp() ) {
sleep(1000);
}
}
Das Problem an dieser Schleife ist, dass wenn das Subsystem nicht startet, dann hängt das eigentliche Programm in einer Endlosschleife. Der Benutzer kann das nicht erkennen. Eine robuste Lösung besteht darin einen Sicherheit-Counter einzuführen, der nach er gewissen Menge an Versuchen den Code abbricht.
private void waitForStart() {
def secCounterStartup = 0;
while(!this.isZapDaemonUp() ) {
secCounterStartup++;
log.debug "waiting for ZAP"
sleep(1000);
if (secCounterStartup > 20){
throw new Exception("Zap does't start up.");
}
}
sleep(2000)
}
private void waitForStart() {
while(!this.isZapDaemonUp() ) {
sleep(1000);
}
}
Das Problem an dieser Schleife ist, dass wenn das Subsystem nicht startet, dann hängt das eigentliche Programm in einer Endlosschleife. Der Benutzer kann das nicht erkennen. Eine robuste Lösung besteht darin einen Sicherheit-Counter einzuführen, der nach er gewissen Menge an Versuchen den Code abbricht.
private void waitForStart() {
def secCounterStartup = 0;
while(!this.isZapDaemonUp() ) {
secCounterStartup++;
log.debug "waiting for ZAP"
sleep(1000);
if (secCounterStartup > 20){
throw new Exception("Zap does't start up.");
}
}
sleep(2000)
}
Montag, 8. Juni 2015
Json Processing in der BASH mit JQ
JSON ist nicht das schönste Datenformat, so gibt es keine Kommentare in JSON. Aber zur Zeit braucht man JSON es an vielen Stellen, z.B. um Elastic Search Abfragen zu stellen bzw. die Elastic Search Results auszuwerten. Wer mit der Bash arbeitet wird JQ als Anfragewerkzeug zu schätzen wissen. Ein immer wieder auftauchendes Problem sind Keys in JSON, die böse Zeichen enthalten wie / oder - (Slash, Minus) die bei Abfragen via JQ escaped werden müssen.
jq .hits.hits[3]._source.http-rc result2.0.json
error: rc is not defined
.hits.hits[3]._source.http-rc 1 compile error
So geht es richtig:
jq '.hits.hits[3]._source["http-rc"]' result2.0.json
jq .hits.hits[3]._source.http-rc result2.0.json
error: rc is not defined
.hits.hits[3]._source.http-rc 1 compile error
So geht es richtig:
jq '.hits.hits[3]._source["http-rc"]' result2.0.json
"200"
Was lernen wir daraus? Bezeichner, Keys, Namen im Camel Case setzen! Das spart viel Zeit, bei deinen Kollegen.
Hier als Ergänzung der Link zu Googles JSON Style Guide: http://google-styleguide.googlecode.com/svn/trunk/jsoncstyleguide.xml#Property_Name_Format
Samstag, 21. März 2015
Online Checker
- Regex für JS und Java: http://myregexp.com/
- Regex nicht nur für Java: http://www.regexplanet.com/advanced/java/index.html
- Grok: http://grokconstructor.appspot.com/do/match#result
- Regex Ruby: http://rubular.com
- URL Decoder: http://meyerweb.com/eric/tools/dencoder/
Sonntag, 15. März 2015
Installieren eines R Paketes mit Hilfe eines eigenen TMP Verzeichnisses
In einigen Linux Installationen ist das TMP Verzeichnis nicht ausführbar. Dies ist eine Sicherheitsmassnahme die leider auch das Arbeiten erschwert. Die Installation von R Paketen benutzt das TMP Verzeichnis als Ablage der zu installierenden Pakete. Einige R Pakete werden auf dem Zielsystem kompiliert. Dazu wird configure ausgeführt, dies schlägt Fehl auf diesen so geschützten Systemen. Um das Problem zu umgehen, muss das TMP Verzeichnis das R benutzt, explizit gesetzt werden. Danach kann das Paket installiert werden.
Sys.setenv(TMPDIR="/home/jenkins_slave")
install.packages("sqldf")
Montag, 2. Februar 2015
Wachsende Bedeutung von R
R ist im universitären Umfeld eine durchaus Gebräuche Sprache und Analyse Software. Der Hauptvorteil der Software liegt in ihrer günstigen Beschaffung, R ist GPL. Aktuell legt R im Tiobe Index stetig zu, zur Zeit erreicht es (01-2015) Platz 18. Dieser Trend wird sich weiter gehen, in den nächsten Jahren ist ein R, Abwahl es eine Spezialsprache für statistische Auswertungen ist, zulegen. Natürlich wird es nie die Verbreitung eine Generell Purpose Sprache wie Java oder C erreichen. Generell gibt aber den Trend der Diversifizierung der Programmiersprachen. Das heisst, es wird keine übermächtige Programmiersprache geben, sondern ein guter Strauß an Programmiersprachen, die unterschiedliche Ding gut können, neben einer Handvoll Generell Purpose Sprachen. Siehe auch http://programming-2.blogspot.de/2015/01/code-weaving.html
Die Gründe für eine wachsende Bedeutung und Verbreitung von R ist der, das man Big Data heute beherrscht, dass diese Daten auch ausgewertet werden müssen. Jüngst hat Oracle bekannt gegeben, das R durch die Datenbank selbst ausgeführt wird und dies auch noch parallel. Bei Oracle heisst das dann gleich Oracle R Enterprise. Neuerdings ist auch Microsoft auf R Analyse Pfaden und kauft die Firma Revolution Analytics (Link).
Splunk als Platzhirsch bei den kommerziellen Big Data Lösungen bietet etwas ähnliches, sehr einfallsreich R Projekt heisst. Sprung scheint aber noch im Bereich R noch nicht das Niveau von Oracle erreicht zu haben.
Im Open Source Bereich gibt es nichts entsprechendes. Natürlich kann man OS Bereich alles selber bauen. Optimal wäre wenn die Daten nicht zwischen Server transferiert werden müssten und man auch alle Prozessoren und Hauptspeicher der Server nutzen könnte. D.h. optimal wäre eine Integration von R in Elastik Search selbst.
Um das Bild weiter abzurunden, noch der Hinweis auf einen Analyse Software Stack, AMPLab der UC Berkley.
Die Gründe für eine wachsende Bedeutung und Verbreitung von R ist der, das man Big Data heute beherrscht, dass diese Daten auch ausgewertet werden müssen. Jüngst hat Oracle bekannt gegeben, das R durch die Datenbank selbst ausgeführt wird und dies auch noch parallel. Bei Oracle heisst das dann gleich Oracle R Enterprise. Neuerdings ist auch Microsoft auf R Analyse Pfaden und kauft die Firma Revolution Analytics (Link).
Splunk als Platzhirsch bei den kommerziellen Big Data Lösungen bietet etwas ähnliches, sehr einfallsreich R Projekt heisst. Sprung scheint aber noch im Bereich R noch nicht das Niveau von Oracle erreicht zu haben.
Im Open Source Bereich gibt es nichts entsprechendes. Natürlich kann man OS Bereich alles selber bauen. Optimal wäre wenn die Daten nicht zwischen Server transferiert werden müssten und man auch alle Prozessoren und Hauptspeicher der Server nutzen könnte. D.h. optimal wäre eine Integration von R in Elastik Search selbst.
Um das Bild weiter abzurunden, noch der Hinweis auf einen Analyse Software Stack, AMPLab der UC Berkley.
Abonnieren
Posts (Atom)