Stateless Authentication using JWT (JSON Web Token)

Currently I work on an implementation for authentication and authorization using Spring Boot, Spring Security, OAuth 2.0 and JSON Web Tokens (JWT). In order to get a good understanding on these topics I found several talks that I’m going to list here.

100% Stateless with JWT (JSON Web Token)” by Hubert Sablonnière. I found it very useful to get a better understanding on using JWTs to create a really stateless authentication architecture.

(via YouTube.com)

There is another interesting talk on Stateless authentication with OAuth 2 and JWT by Alvaro Sanchez-Mariscal.

(via vimeo.com)

This post will be updated as I find new resources.

Apache Kafka Streams

I’m interested in Apache Kafka Streams and would like share some information on this topic with you. There is a great talk about Stream Processing from Neha Narkhede who co-authored Apache Kafka and is currently a co-founder and Head of Engineering of Confluent.

There is also a good article on Apache Kafka Streams with lots of background information.

Programming as Performance

Programming as Performance? This sounds interesting and indeed it is, as you can see in this video by Sam Aaron (a Post-Doc Researcher at the Cambridge University):

He wrote Sonic Pi, a program to enable children and others interested in coding and music to create their very individual sounds using a simple keyboard and a Raspberry Pi.

How to choose a versioning scheme for your software

As a developer, there comes the time were you think about how to version your software. One approach is “Semantic Versioning” which leverages the level of change on your public API. Depending on what you changed in your code, Semantic Versioning proposes different version numbers:

Given a version number MAJOR.MINOR.PATCH, increment the:

  1. MAJOR version when you make incompatible API changes,
  2. MINOR version when you add functionality in a backwards-compatible manner, and
  3. PATCH version when you make backwards-compatible bug fixes.

Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.

Seems to be an appropriate scheme on versioning software. Which other schemes do you think about? Leave me a comment then I’m going to update this post accordingly.

Javapocalypse

I need to share the following video on “Javapocalypse” from JavaZone. Pushing the “Undo Java” button will have huge impact. Have a look at these consequences. The following trailer highlights the importance of Java.

JavaZone 2013 takes places in Oslo at the 10th and 11th of September 2013.

JavaZone is an important meeting place for software developers in Scandinavia, and is the biggest community driven conference of its kind. JavaZone has been described as a high quality, independent conference – a leading forum for knowledge exchange for IT- professionals. All speakers are selected by the independent Program Committee. (via jz13)

What do you think about the future of the Java stack?

(via jz13)

What Most Schools Don’t Teach – Programming

“The programmers of tomorrow are the wizards of the future. You are going to look like you have magic power, compared to everybody else.” Diese Aussage beschreibt den Wert, den “Coding Skills” heute und in Zukunft haben. Die Fähigkeit Software nach eigenen Vorstellungen zu entwickeln stellt für jeden Bürger eine wichtige Möglichkeit dar das Grundrecht der Freiheit auszuleben.

Das folgende Video beschreibt was “die meisten Schulen (noch) nicht lehren” nämlich Software zu entwickeln und Quellcode lesen zu können.

Meine ersten Schritte der Programmierung mit habe ich im Alter von vierzehn Jahren mit den Programmiersprachen Java und PHP gemacht. Wann habt ihr mit dem Programmieren begonnen und was waren eure ersten Erlebnisse?

(via code.org)

Video Introduction to GIT Version Control by Scott Chacon of GitHub

The following talk, given by Scott Chacon of GitHub, gives a very good introduction to the version control system GIT and its usage. This is by far the best introduction that I have found so far.

(via Marakana)

Simple Flashlight v3.1

Simple Flashlight for Android

Die “Simple Flashlight” App für Android ist nun in der Version 3.1 im Market verfügbar. Simple Flashlight ist eine einfache Taschenlampe für dein Mobiltelefon oder deinen Tablet. Es wurde die transparente Displaybeleuchtung entfernt. Zudem gibt es jetzt die Möglichkeit, durch “Wischen” nach rechts bzw. links die Farbe des Bildschirms auf rot oder blau zu ändern.

Recent Changes (v3.1)

  • Displaybeleuchtung verbessert (Transparenz entfernt)
  • Swipe nach rechts => Bildschirm blau färben
  • Swipe nach links => Bildschirm rot färben
  • Swipe verbessert

Recent Changes (v3.0)

  •  Möglichkeit die App zu starten indem man die Suchtaste gedrückt hält
  •  Bildschirmbeleuchtung ist nun transparent
  •  Swipe-up und Swipe-Down zum dimmen der Bildschirmhelligkeit

Simple Flashlight im Android Market

Downloaden und ausprobieren! https://market.android.com/details?id=at.muehlburger.android.simple.flashlight

Simple Flashlight v3.0

Simple Flashlight for Android

Die “Simple Flashlight” App für Android ist nun in der Version 3.0 im Market verfügbar. Simple Flashlight ist eine einfache Taschenlampe für dein Mobiltelefon oder deinen Tablet.

Recent Changes (v3.0)

  •  Möglichkeit die App zu starten indem man die Suchtaste gedrückt hält
  •  Bildschirmbeleuchtung ist nun transparent
  •  Swipe-up und Swipe-Down zum dimmen der Bildschirmhelligkeit

Simple Flashlight im Android Market

Downloaden und ausprobieren: https://market.android.com/details?id=at.muehlburger.android.simple.flashlight

Enhanced by Zemanta

[spritpreisrechner.at] – Apps entwickeln

Vor kurzem wurde in Österreich der Spritpreisrechner der E-Control offiziell der Öffentlichkeit vorgestellt. Es hat nicht lange gedauert, bis auch die ersten Android App Entwickler die Seite zu nutzen versuchten. So finden sich derzeit im Android Market schon einige Spritpreisrechner Apps.

Ich habe mir einmal das Datenformat angesehen, welches die Website spritpreisrechner.at für die Abfrage der Spritdaten benutzt. Es ist eigentlich ganz einfach:

Es werden per HTTP POST Request Anfragen an http://www.spritpreisrechner.at/espritmap-app/GasStationServlet geschickt. Wichtig ist dabei der Parameter “data” der natürlich mit Werten (Längen- und Breitengraden bzw. einen Suchstring) initialisiert werden muss.

Beispielsweise könnte man folgenden cURL Aufruf ausführen (die Daten in “data” sind url-encoded”):

[code language=”bash”]
curl -d “data=%5B%22Graz%22%2C%22DIE%22%2C15.414262484145%2C47.057105360725%2C15.494085024429%2C47.08048974931%5D” http://www.spritpreisrechner.at/espritmap-app/GasStationServlet
[/code]

Der HTTP Request Header sieht konkret folgendermaßen aus:

[code]
Request URL:http://www.spritpreisrechner.at/espritmap-app/GasStationServlet
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:101
Content-Type:application/x-www-form-urlencoded
Host:spritpreisrechner.at
Origin:http://spritpreisrechner.at
Referer:http://spritpreisrechner.at/ts/map.jsp
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.215 Safari/535.1
X-Requested-With:XMLHttpRequest
Form Dataview URL encoded
data:[“”,”DIE”,15.409674251128,47.051201316374,15.489496791403,47.074588294516]
Response Headersview source
Connection:Keep-Alive
Content-Type:text/html;charset=UTF-8
Date:Fri, 26 Aug 2011 08:27:11 GMT
Keep-Alive:timeout=4, max=150
Transfer-Encoding:chunked
[/code]

Der Parameter “data” enthält einen JSON String der mit folgenden Werten befüllt wird:

[code]
data:[
“”, => Ort (Tankstellen werden in der Nähe dieses Ortes gesucht) Update: Vielen Dank an Andreas Stütz!: Dieser Parameter gibt an, ob auch geschlossene Tankstellen angezeigt werden sollen (“checked”) oder nicht (“”)
“DIE”, => Treibstoffart: “DIE” oder “SUP” (Diesel oder Super 95)
15.414258888907, => Longitude 1 (Längengrad)
47.057106335865, => Latitude 1 (Breitengrad)
15.494081429191, => Longitude 2 (Längengrad)
47.080490724022 => Latitude 2 (Breitengrad)
]
[/code]

Longitude 1 und Latitude 1 geben Koordinaten der linken unteren Ecke, Longitude 2 und Latitude 2 die Koordinaten der oberen rechten Ecke an. Das so aufgespannte Rechteck definiert den sichtbaren Bereich auf der Google Maps Karte. Im Zentrum sollte sich sinnvollerweise die aktuelle Position befinden. Innerhalb des sichtbaren Bereiches werden die 5 billigsten Tankstellen mit den dazugehörigen Spritpreisen angezeigt. Um das Rechteck aufzuspannen kann man sich in Android folgendermaßen behelfen:

1. Aktuelle Position mittels Android LocationManager ermitteln
2. Mittels der aktuellen Position und der Methoden getLongitudeSpan() und getLatitudeSpan() die rechte obere und die linke untere Ecke berechnen und anschließend
3. Parameter “data” mit den ermittelten Werten befüllen und HTTP Post Request abschicken.

Wird der oben beschriebene HTTP Request ausgeführt, bekommt man als HTTP Response einen JSON String, der wie folgt aufgebaut ist:

[code]
[
{
“kredit”:true,
“self”:true,
“spritPrice”:[
{
“amount”:”1.262″,
“datAnounce”:”Thu Aug 25 17:45:55 CEST 2011″,
“gasStationId”:”7766″,
“errorItems”:[

],
“errorCode”:0,
“datValid”:1314287155000,
“spritId”:”DIE”
}
],
“automat”:false,
“city”:”Graz”,
“open”:true,
“distance”:1.32,
“postalCode”:”8010″,
“gasStationId”:7766,
“errorItems”:[

],
“priceSearchDisabled”:false,
“longitude”:”15.4509774″,
“payMethod”:”UTA”,
“mail”:””,
“gasStationName”:”Turmöl”,
“fax”:”433164751524″,
“clubCard”:””,
“openingHours”:[
{
“beginn”:”06:00″,
“day”:{
“dayLabel”:”Feiertag”,
“order”:8,
“errorItems”:[

],
“errorCode”:0,
“day”:”FE”
},
“end”:”22:00″
},
{
“beginn”:”05:00″,
“day”:{
“dayLabel”:”Dienstag”,
“order”:2,
“errorItems”:[

],
“errorCode”:0,
“day”:”DI”
},
“end”:”23:00″
},
{
“beginn”:”05:00″,
“day”:{
“dayLabel”:”Montag”,
“order”:1,
“errorItems”:[

],
“errorCode”:0,
“day”:”MO”
},
“end”:”23:00″
},
{
“beginn”:”05:00″,
“day”:{
“dayLabel”:”Freitag”,
“order”:5,
“errorItems”:[

],
“errorCode”:0,
“day”:”FR”
},
“end”:”23:00″
},
{
“beginn”:”06:00″,
“day”:{
“dayLabel”:”Samstag”,
“order”:6,
“errorItems”:[

],
“errorCode”:0,
“day”:”SA”
},
“end”:”22:00″
},
{
“beginn”:”06:00″,
“day”:{
“dayLabel”:”Sonntag”,
“order”:7,
“errorItems”:[

],
“errorCode”:0,
“day”:”SO”
},
“end”:”22:00″
},
{
“beginn”:”05:00″,
“day”:{
“dayLabel”:”Mittwoch”,
“order”:3,
“errorItems”:[

],
“errorCode”:0,
“day”:”MI”
},
“end”:”23:00″
},
{
“beginn”:”05:00″,
“day”:{
“dayLabel”:”Donnerstag”,
“order”:4,
“errorItems”:[

],
“errorCode”:0,
“day”:”DO”
},
“end”:”23:00″
}
],
“access”:””,
“url”:””,
“serviceText”:”ShoprnBistrornWaschanlagernSB-LanzenwäschernDiesel-Schnellläuferrn”,
“maestro”:true,
“companionship”:false,
“address”:”Conrad.-v.Hötzendorfstr. 135 “,
“club”:false,
“errorCode”:1,
“service”:false,
“latitude”:”47.0510643″,
“bar”:true,
“telephone”:”43316475152″,
“gasStationInternalId”:”CvH”
}
]
[/code]

Einen Parser für diesen JSON String zu schreiben, dürfte nicht allzu schwer sein. 🙂 Das war auch schon alles um eine App für spritpreisrechner.at entwicklen zu können. Eigentlich ziemlich einfach. Was meint ihr? Freu mich auf Kommentare und Anregungen!