1. November 2014

Thema Krise: Literatur und Material

http://www.11bitstudios.com/games/16/this-war-of-mine
"Not everyone is a soldier". This War of Mine is a dark survival game where the player controls a team of civilians in a besieged city. The main goal of the game is to survive the war with the tools and materials the player can gather with the characters they control.

http://www.judgmentgame.com/

https://www.tab-beim-bundestag.de/de/publikationen/buecher/petermann-etal-2011-141.html
Büro für Technikfolgen-Abschätzung beim Deutschen Bundestag (TAB): Was bei einem Blackout geschieht - Folgen eines langandauernden und großflächigen Stromausfalls.

http://www.bbk.bund.de/SharedDocs/Downloads/BBK/DE/Publikationen/Broschueren_Flyer/Ratgeber_Brosch.html
Bundesamt für Bevölkerungsschutz und Katastrophenhilfe: Ratgeber für Notfallvorsorge und richtiges Handeln in Notsituationen

http://www.amazon.de/BLACKOUT-Morgen-ist-sp%C3%A4t-Roman/dp/3764504455?tag=codandlif-21
An einem kalten Februartag brechen in Europa alle Stromnetze zusammen. Der totale Blackout.
Von Bild der Wissenschaft zum spannendsten Wissensbuch des Jahres 2012 gekürt - " Elsberg flicht vier Handlungsfäden zu einem atemberaubenden Spannungsstrang zusammen."
Der italienische Informatiker Piero Manzano vermutet einen Hackerangriff und versucht, zu den Behörden durchzudringen – erfolglos. Als Europol-Kommissar Bollard ihm endlich zuhört, werden dubiose E-Mails auf seinem Computer gefunden. Selbst unter Verdacht wird Manzano eins klar: Ihr Gegner ist ebenso raffiniert wie gnadenlos. Unterdessen liegt Europa im Dunkeln, und die Menschen stehen vor ihrer größten Herausforderung: Überleben.

...to be continued.

29. Oktober 2014

Microservices bei Weblin

Und wieder einmal bekommt ein Prinzip, das wir bei Weblin entwickelt und benutzt haben, einen Namen: Microservices.

"Microservices is a software architecture design pattern, in which complex applications are composed of small, independent processes communicating with each other using language-agnostic APIs"

Wir haben es natürlich nicht erfunden. Viele andere gute Softwareingenieure haben zur gleichen Zeit das gleiche gemacht und inzwischen ist das Prinzip (=architecture design pattern) im Mainstream angekommen und hat einen Namen und es gibt viele Artikel und Vorträge.

Es geht darum, dass man nicht eine fette Anwendung macht, sondern mehrere (viele) von einander logisch getrennte Web-Services, die jeweils eine Funktionalität des Gesamtsystems bereitstellen und untereinander kommunizieren. Das betrifft sowohl Client/Server Kommunikation, als auch Server-Frontend/Backend und innerhalb vom Backend. Microservices können in verschiedenen Sprachen geschrieben sein und haben typischerweise jeweils eigene Datenbanken (wenn auch oft auf dem gleichen Datenbankserver). Microservices können horizontal oder vertikal skalieren,d.h. alle können auf der gleichen Server Farm laufen oder man ordnet einzelnen Microservices dedizierte Server zu.

Welches Web-Service Protokoll man wählt spielt eine untergeordnete Rolle. Eigentlich kann man Transportprotokoll und Datenformat beliebig kombinieren. REST/JSON ist dafür momentan das Mittel der Wahl. Aber SOAP geht auch. XMLRPC war mal sehr verbreitet. Bei Weblin hatten wir oft Key/Value/LF als Datenformat (auch liebevoll SRPC genannt), weil das meistens völlig ausreicht. Es geht aber auch anspruchsvoller, z.B. mit Protocol Buffers als Datenformat. Als Transportprotokoll bietet sich HTTP an. Aber es geht auch plain TCP oder ein Message-Bus.

Bei Weblin hatten wir Microservices für:

  • Userdaten (Identity), vom Frontend bespielt, vom Client benutzt
  • User created content upload (der berühmte File-Service: files.zweitgeist.com)
  • Download-Server
  • Wallet-Service und Punktekonto
  • Topsites-Service
  • XMPP-Server Management Service
  • Unit-Test (System-Runtime-Test) als Web-Service
  • GeoIP Auflösung als Web-Service
  • Kontaktlistenverwaltung
  • Wuscheln, Publisher (alles, was der Client wollte, ich sage nur "srpc.php")
  • VPI-Server
  • Compute-Service (Avatar-Generator)
  • Locatr
  • Ad-Server
_happy_eigenlobing()

28. Oktober 2014

Quadcopter Erstflug

Zum Geburtstag gab's ein großes Eigengeschenk: DJI Phantom 2 Vision+

... mit allem was das Herz begehrt:

- 14 Megapixel Kamera
- 3-Achsen Kamerastabilisierung
- 20 Minuten Flugzeit pro Akku
- Kamera-Live-Feed auf's Smartphone
- GPS Positions-Stabilisierung

...und jede Menge Adrenalin wenn das Ding mal abdriftet wegen starkem Seitenwind und hinter einem Haus verschwindet.


Um es kurz zu machen: Ausgepackt, Propeller aufgeschraubt, Akku geladen, Handbuch gelesen und raus ins Freie. Dort ein paar Proberunden, dann aufsteigen, vom Seitewind erfasst, abgedriftet, Sichtkontakt verloren, Panik am Steuerpult, mithilfe vom Live-Feed zurückgesteuert, sicher gelandet.

Aber im Video sieht man das alles nicht. Da ist es einfach nur ein schöner Flug:



_happy_quadcopting()

25. September 2014

Simple Token Authentication for .NET Web API

A simple way to use tokens in HTTP requests for authentication in Web API with [Authorize] attribute including Identity, Principal and Roles. 

Sample code: https://gist.github.com/wolfspelz/a080601bbd3988782701


Valid tokens are stored statically in Azure-CloudConfigurationManager. This can be changed easily to check a real database of tokens.

_happy_authenticating()

30. Mai 2014

Software ist so ein Weichei

(Symbolbild)
Da arbeitet man Monate an einem Stück Software. Tausende Zeilen Code, hunderte Klassen und Objekte, zig trickreiche Stellen und ein paar geniale Kniffe, ohne die es nicht geklappt hätte. Alles ist fertig, fast alles ist solide, das meiste sogar robust. Jetzt wird released.

Deployment, Pressemitteilung, Traffic kommt, User auch. Das Leben ist eine Party.

Plötzlich: bei der Presseagentur geht's nicht. Ein Geschäftspartner hat einen Absturz. Ein Kollege hatte das auch mal auch, hat aber nichts gesagt, weil Neustarten geholfen hat. Ein paar User sind genervt, aber man kann es ja nie allen Recht machen. Der Vertrieb sagt es geht überhaupt nicht, naja, die übertreiben immer. Das kennt man ja.

OK, selbst probieren: es stimmt, da ist ein Problem. Nicht groß, aber es nervt genug, dass man es eigentlich nicht lange benutzen will. Und man erinnert sich an so einen nervigen Fehler, der manchmal während der Entwicklung aufgetreten ist. Aber F5 hat immer geholfen.

Eigentlich geht's ja, zumindest 99,9 %. Die verdammte Software ist so undankbar. Die User auch. Man könnte es ja auch richtig benutzen. Endlos viel Arbeit und alle reden nur über den einen kleinen Fehler. Dabei ist der Rest so toll.

Merke: ein Fehler der selten auftritt ist auch ein Fehler. Er will gefunden werden, sonst ist er beleidigt und ärgert uns später.

Merke: das eine Prozent vom Code mit den problematischen Stellen ist das wichtigste. Das darf es nicht geben. Sonst war alles umsonst.

_happy_debugging()

21. Mai 2014

JsonTree Library and Nuget Package for Quick and Easy JSON Parsing


Any time a piece of my software receives a JSON message it must dive into the JSON and extract parameters. Sometimes the JSON is deeply nested and parameters are buried inside arrays of objects of arrays.

I want to access these parameters quickly without dissecting the JSON by looping and if-ing through the layers. In other words: I want single line expressions to dive into JSON and extract values.

You can call it XPath for JSON, but a language integrated compiled way, which his much faster, than XPath and supported by IntelliSense (autocomplete).

Example JSON: 

[ "first", { "aString": "HelloWorld", "aNumber": 42 } ]
Extract the value 42:
var fourtytwo = json.List[1].Dictionary["aNumber"].Int;
The JsonTree library basically maps JavaScript Arrays to C# Lists and a JavaScript Objects to C# Dictionaries. It is then very easy to enumerate lists of dictionaries of lists, etc as single line expressions to extract values. Also, if looping is required, it is done on well known container classes List<...> and Dictionary<string,...>.

A more complex example:
var data = "[ { aInt: 41, bBool: true, bLong: 42000000000, cString: "43", dFloat: 3.14159265358979323 }, { aInt: 44, bLong: 45000000000, cString: "46" }, { aList: [ { aInt: 47, bString: "48" }, { aInt: 49, bString: "50" } ], bMap: { aInt: 51, bString: "52" } } ]";
Extracting the 50 as integer number. The 50 is a string value in a JS object (of key "bString") in a JS array (as second element) in a JS object (with key "aList") in a JS array (as third element).
var fifty = new JsonTree.Node(data).Array[2].Object["aList"].Array[1].Object["bString"].Int;
JsonTree uses either JavaScript notation with Array and Object as keywords or C# notation with List and Dictionary as keywords. Choose whatever you like more. 

The same as above in C# notation:
var fifty = new JsonTree.Node(data).List[2].Dictionary["aList"].List[1].Dictionary["bString"].Int;
Other examples:
var pi = new JsonTree.Node("{a:3.1415927}").Dictionary.First().Value.Float;

var pi = new JsonTree.Node("{a:3.1415927}").Dictionary["a"].Float;
You can use JsonTree as nuget package: https://www.nuget.org/packages/JsonTree/

Or check out the source code on Google code: https://code.google.com/p/json-tree/

JsonTree also includes a flexible JSON serializer which is used to create a easy to read debug view of the JSON structure. Browsing the JSON in debug mode is a real highlight. 



The serializer can also be used to add elements to a deserialized JSON node and re-serialize.

_happy_parsing()

PS: I know that I could use NewtonSoft JSON with C# dynamic and JObject
PS: I know that I could use LINQ

I like this way, because it relies only on plain old CLR objects, List and Dictionary.