generate C# classes from JSON data

It’s a common use case: you’ve got some JSON formatted data and you want to interface with it using your favourite programming language C#. You can write the appropriate classes yourself, or you could use the fabulous json2csharp helper page.

Source 1: http://json2csharp.com/
Source 2: http://jsonclassgenerator.codeplex.com/
Source 3: http://json.codeplex.com/

a font for number people

OpenType is a font format which I personally might have underestimated in the past. Well you know – fonts and stuff. This all seemed not too interesting up until now. Now that changed dramatically when a font came to my attention which can be used for various purposes and as a font does not resemble the normal numbers and characters scheme. But what can it be used then if not to type numbers and characters?

Well. What about typing graphs?

Everything in the above image is generated by a font… like in your Word-processor (if it uses that font)

“Designed by Travis Kochel, FF Chartwell is a fantastic typeface for creating simple graphs. Driven by the frustration of creating graphs within design applications (primarily Adobe Creative Suite) and inspired by typefaces such as FF Beowolf and ­­FF PicLig, Travis saw an opportunity to take advantage of OpenType technology to simplify the process.

Using OpenType features, simple strings of numbers are automatically transformed into charts. The visualized data remains editable, allowing for hassle-free updates and styling.”

Source 1: https://www.fontfont.com/how-to-use-ff-chartwell

baking with the PI

Do you know what happens during the push of the power button and typing your log-in information inside of your computer? No? You should. At least from a software side. Not that it is necessary to use a computer. But in order to understand what this wonderful machine does and why.

For those teaching and learning purposes the Raspberry Pi is a perfect device. It’s cheap and now there is a course you can take online which shows you – starting from the very beginning – how to get the device up and running and how to make it do what you like. And that’s without installing an operating system. You are about to write your very own.

“This website is here to guide you through the process of developing very basic operating systems on the Raspberry Pi! This website is aimed at people aged 16 and upwards, although younger readers may still find some of it accessible, particularly with assistance. More lessons may be added to this course in time.”

Source: http://www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/os/

Entwickler in Hamburg – die Developer Conference 2012 in Hamburg

Der Freitag der vergangenen Woche begann sehr sehr früh. Es ging nach Nürnberg um den Flug nach Hamburg zu erwischen. Erstaunlich wie günstig die heutzutage sind: der Flug nach Hamburg (50 Minuten in der Luft) sollte nur 10 Euro teurer als die Zugfahrt zurück (4 Stunden auf Schienen) sein…

Jedenfalls war es ein schön kurzer Flug und schwupps stand ich vor der Otto Versand Zentrale in Hamburg… Es war Zeit für die…

… Developer Conference Hamburg 2012.

Es war meine erste DevCon-HH und dementsprechend kann ich keine Vergleiche zum letzten Jahr ziehen. Die Räumlichkeiten – direkt bei Otto – waren jedenfalls sehr ordentlich aufgebaut, alles sehr bequem. Kurze Wege zwischen Kaffee und Vortragsstuhl. Die 2 der Vortragssäle waren leider nur über den Hauptsaal zu erreichen. Was ein-zweimal dazu führte dass Vortrage in den kleineren Sälen bereits beendet waren und die Menschenmengen durch den Hauptsaal Richtung Kaffee strömten während die Zuhörer im Hauptsaal noch versuchten zuzuhören. Hier mal im Bild erklärt: Rechts der große Hauptsaal und Links ein kleinerer Vortragssaal. Ich stand beim fotografieren direkt im Türrahmen.

Es ging für mich mit zwei sehr guten und interessanten Vorträgen los. Die Keynote des ersten Tages gibt es mittlerweile auch, wie es sich gehört, auf Slideshare:

Insgesamt war die Qualität der Vorträge sehr hoch. Ich fand die Mischung zwischen harten und soften Themen rund um die Software-Entwicklung mehr als gelungen und sicherlich werde ich versuchen nächstes Jahr wieder zu kommen.

 

Source 1: http://www.developer-conference-hh.de/

Congratulations Mr. Heil!

I am very pleased to congratulate a good man and ex-colleague for his accomplished mission: He handed in his PhD thesis with the Subject (german): “Anwendungsentwicklun für intelligente Umgebungen im Web Engineering“:

“This book describes a holistic approach to develop complex software systems based on the WebComposition process model. It shows how to integrate soft- and hardware components in a cost efficient and effective way using  Web technologies and the Semantic Web. The WebComposition Concurrency System, a formal language to predict system dependencies and conflicts, allows efficient planing and monitoring of the development and operation process of the overall system.”

I had the pleasure to work with Andreas on several occasions. One that I remember with the strongest feelings is a 2 1/2 day around-the-clock hack-a-thon at Microsoft Research. We got it working back then!

For the last 8 years I am constantly trying to get him interested and convinced to work on things directly or remotely connected to some of the stuff I do – but up until now luck wasn’t on my side. Maybe someday :-)

My sincere compliments on achieving his goal on this. Congratulations!

Source 1: http://www.aheil.de/books/
Source 2: http://blog.aheil.de
Source 3: http://www.schrankmonster.de/category/familyandfriends/aheil-de/

openHAB – home automation bus

It certainly is just me thinking: this home automation / smart home thing gains more momentum every week. Now there’s a java based home automation bus initative taking care of the software standardization side. Quite interesting. And beside all that they had some fantastic ideas how a user interface for those things should look like. Like for example how you would interact with your house while planning when things power on and off. Use Google Calendar! This is just plain genius!

“The open Home Automation Bus (openHAB) project aims at providing a universal integration platform for all things around home automation. It is a pure Java solution, fully based on OSGi. The Equinox OSGi runtime and Jetty as a web server build the core foundation of the runtime.

It is designed to be absolutely vendor-neutral as well as hardware/protocol-agnostic. openHAB brings together different bus systems, hardware devices and interface protocols by dedicated bindings. These bindings send and receive commands and status updates on the openHAB event bus. This concept allows designing user interfaces with a unique look&feel, but with the possibility to operate devices based on a big number of different technologies. Besides the user interfaces, it also brings the power of automation logics across different system boundaries.”

I especially like the idea of that calendar integration – sending scripts through an appointment is a great idea – having some sort of scripting language is another one. A little bit on the marketing side is the option to chat with your house through XMPP / Jabber… that might take the idea a little bit too far out – but who would want to blame them? Fantastic stuff!

Source 1: http://www.openhab.org/
Source 2: http://kaikreuzer.blogspot.de/2012/08/openhab-1.html

ELV MAX! Cube progress

I’ve just pushed a commit to the repository which finalizes my current effort in getting data out of the ELV MAX! Cube. With this sourcecode you should be able to get the following information out of your ELV MAX! Cube:

  • a list of all configured rooms
  • a list of all devices in those rooms
  • Thermostat and ShutterContacts have all their flags with them (like Battery Status, Open/Closes, Mode (auto, manual,…))

That brings me one step further to the integration of the ELV MAX! Cube into h.a.c.s. – next weekend probably :-)

p.s.: I’ve already ordered more thermostat and shuttercontact sensors.

Source 1: https://github.com/bietiekay/hacs

Open Source for Space

Everyone is excited about the Mars Science Laboratory cruising on Mars. NASA/JPL pulled an unbelievable stunt to get that almost-a-ton Rover on that planet. Well done!

Alongside with the landing some source reported that NASA/JPL now has started to provider source code access to some of it’s internal projects. And beside being right this is not the first time they’ve provided source code access. They got a whole page with all their projects open sourced. Some of those are quite huge projects – big like those you would fly to Mars with.

Even more interesting from a historical perspective are the older open sourced projects. Like the complete manuals and source code listings of the gemini and apollo projects.

It’s a great read overall and it let’s you wondering with how little you can achieve great goals.

Source 1: http://ti.arc.nasa.gov/opensource/
Source 2: https://github.com/nasa/
Source 3: http://www.ibiblio.org/apollo/links.html
Source 4: http://code.google.com/p/virtualagc/

home automation example: domotica

For several years now I am interested in this home automation thing – I even got a little bit of my own home automation going. But with websites like domotica you can get an idea of what is achieveable and how it might look for the people actually using it every day.

Source 1: http://www.hekkers.net/domotica/Default.aspx

reverse-engineering the ELV MAX! Cube protocol

I had a couple of hours to tinker with my ELV MAX! Cube and there is some progress with the protocol reverse engineering.

Of course there is the domotica forum helping out with some information the guys over there have found but in addition to their very helpful findings I want it to be integrated into h.a.c.s. – and along with it I maybe want to have a way to find eventual protocol changes quick and easy in the future.

So yesterday I partied on the ‘first contact’ – today I am a bit deeper into the protocol itself:

Here are some explanations to the picture:

When a tcp connection to the cube is opened you can immediately read from it – the cube is throwing information at you. There’s always a character at the beginning of each line which marks the type and beginning of the message.

There seem to be these types of messages in the first package of information:

  • H – Header maybe?
    •  it contains the serial number of your cube, the RF address, the firmware version and several other things like time information
  • M – Metadata?
    • this seems to be some kind of global metadata list, containing the rooms with their IDs (it’s the %) in the screenshot). Furthermore it contains the serial numbers and names of the devices in that room – at the moment there’s just a window-state-sensor in that first room called “Fensterkontakt 1”
  • C – Configuration?
    • since there are multiple C messages these seem to contain detailed configuration data specific to a device in the MAX! network. Each device seems to be addressed by a RF Address and it’s serial number.
    • the first C message in the screenshot is associated to the cube itself
    • the second C message is associated to the window-state-sensor – you can clearly see in there the room id “%)” and the serial of the window-state-sensor.
  • L – live status?
    • this message seems to contain room status information. In our case there is only the room with id “%)”. When the window-state-sensor changes state the last byte changes value – interesting, eh?

On the coding side I’ve got several things set-up in my little debug tool. I’ve wrapped those message types into various classes to handle them more easily later on in h.a.c.s.. Furthermore I used a little decompiler-wisdom to extract some more information from the included ELV MAX! cube software.

Thanks to german UrhG paragraph § 69e (german copyright law) I am allowed to decompile the included software in order to achieve interoperability (and only that). That’s exactly what I would like to achieve: Interoperability. And for the record: besides that I also filed a support request to ELV in which I ask them if I could get access to a presumably existing documentation of that protocol.

While waiting on that documentation I am using JD-GUI as a decompiler user interface for java – since the software of the cube is written in java.

There are many interesting things in there but it’s a slow process to get ahold of all the things necessary. There are already some very nice things showing up. Like when you want to know if there’s a cube (or more) in the network you just need to send a multicast ip packet containing a characteristic signature and all the cubes in your network will try to connect back to you with some basic information – nice, isn’t it? Or what about that AES Encryption/Decryption that seems to be built into the cube? Yes that’s right! It seems to be possible to send commands to either encrypt or decrypt according to the AES. Thoughtfully these commands are marked with ‘e’ and ‘d’. Or that if you send “l:” as a command with CR+LF at the end you get a device listing with all stats… and so on.

Some open question to EQ-3/ELV for the end of this article:

  • Why this strange protocol? Why all the work on both sides? Just because an HTTP server implementation with a RESTful service would have been that more difficult?
  • Base64 encoded data? The 90s called, they want their 8th bit back.
  • why that complex local webserver approach when you could have done everything in a java app anyways?

That’s it for today, I just pushed a feature to the Git repository which allows you to run whatever command you like on your cube with the debugging tool:

Enjoy! :-)

Source 1: http://www.domoticaforum.eu/viewtopic.php?f=66&t=6654&sid=f8f912914163cb44d447cfa3de44d63d
Source 2: http://en.wikipedia.org/wiki/Decompiler
Source 3: http://www.gesetze-im-internet.de/urhg/__69e.html
Source 4: http://java.decompiler.free.fr/?q=jdgui
Source 5: http://en.wikipedia.org/wiki/Advanced_Encryption_Standard

a file is a file is a file.

Ever wondered how a software finds out that this file named “filename” is a pdf, jpeg, movie? There are several thousands, probably hundreds-of-thousands of fileformats out there. Some of them are used many times a day without us even noticing. We’re just moving an image from A to B not caring about what constitutes an image file and what makes a jpeg different to a png image.

Now for pure academic reasons there is one file that is many (no, not borg). It’s a file that is:

“CorkaMIX.exe is simultaneously a valid: * Windows Portable Executable binary * Adobe Reader PDF document * Oracle Java JAR (a CLASS inside a ZIP)/Python script * HTML page

It serves no purpose, except proving that files format not starting at offset 0 are a bad idea. Many files (known as polyglot) already combines various langages in one file, however it’s most of the time at source level, not binary level.”

Source 1: http://code.google.com/p/corkami/downloads/detail?name=CorkaMIX.zip