User Awesomeness

This is more or less a reblog from Joel on Software:

Kathy Sierra at Business of Software 2009


She explains how businesses get successful. Nothing more, nothing less. And I think she is right.

Humans (aren’t that bad) after all.

… as even economists (the scientists, not the practicioneers) find/found out:
Ernst Fehr: How I found what’s wrong with economics.

Fehr studies the outcomes of economic experiments. He finds that the theoretical hard-core “homo economicus” model produces completly different (and often worse) outcomes than the emprical real-life experiments. People seem to put a certain value at fairness.

StarTrek for the masses

The people at CERN who run LHC, probably are more bright than anyone of us. So they are even bright enough to show pretty pictures for those who are not so bright: StarTrek@CERN.

I don’t want to know how many demos they needed to create to get the money for the LHC. I bet they still have more than one 3D artist on board ;)

Science isn’t all flashy and colored. But it’s worth it, anyhow.

Active Pen-Testing

Heute mal eine Idee, die schon länger in meiner Schublade steckt und die nun endlich, aus gegebenem Anlass, mal aufgeschrieben gehört:

Wie wir alle wissen gehört zu Datenschutz (die Wahrung der Informationellen Selbstbestimmungsrechte) auch Datensicherheit (Vertraulichkeit, Verfügbarkeit und Integrität von Daten). Ohne Datensicherheit kann eine Organisation keinen Datenschutz gewährleisten (vermutlich deshalb werden die beiden verschiedenen Aufgaben von den Medien auch so oft in einen Hut geworfen). Wenn Unternehmen nun zu wenig bzw. nicht genug in Datensicherheit investieren, kommt es vor, dass die Daten von vielen Benutzern in die Öffentlichkeit gelangen. Ein Vorgang der immer mal wieder vorkommt, so z.B. bei studiVZ, schülerVZ, haefft.de oder nun aktuell ruf-jugendreisen.de. Auf den ersten richtig großen Skandal bei Bundesbehörden dürfen wir noch warten (Elektronischer Personalausweis, ELSTER, Gesundheistkarte anyone?), bei Landes- oder Lokalbehörden kommt das ja hin und wieder schon mal vor. Den betroffenen Kunden der jeweiligen Unternehmen entsteht dabei ein Schaden der nicht von den Unternehmen beglichen werden muss (die Bußgelder der Datenschutzbeauftragten sind lächerlich, wenn sie überhaupt verhängt werden), obwohl Sie mit genau diesen Daten vermutlich jahrelang Gewinn gemacht haben. Dieser Vorgang, dass eine Organisation auf Kosten anderer Gewinn macht, nennt man unter Ökonomen eine Externalität. Zur Lösung des Problems ist die Internalisierung der Kosten, die bei einem Datenverlust im Moment noch bei den betroffenen Nutzern anfallen, in der Kostenrechnung des Unternehmens oder der Behörde. Dies kann auf verschiedenen Wegen geschehen. Ein Weg der im Moment schon beschritten wird, ist eine staatliche Regel: Wenn du keine ausreichenden technischen und organisatorischen Maßnahmen ergreifst um Datenschutz sicherzustellen, musst du X Bußgeld bezahlten (BDSG, §9).

Nun, Regeln sind eine eigene Sache. Sie funktionieren ungefähr so: Entdeckungswahrscheinlichkeit * Strafhöhe = Risiko (Kosten). Wenn der Gewinn aus der Handlung nun größer ist als das Risiko durch die Strafe, dann sagt die Theorie, dass man gegen die Regel vernünftigerweise verstoßen wird (wer hat z.B. noch nie mal kurz im Halteverbot gehalten). Wenn die Bußgelder der Datenschutzbeauftragten also sehr niedrig sind, ist es ökonomisch sehr sinnvoll für die Firmen gegen die Regel zu verstoßen. Ein Weg in die richtige Richtung wäre also zum einen die Bußgelder zu erhöhen. Es gibt jedoch noch einen zweiten Faktor in der Gleichung: die Entdeckungswahrscheinlichkeit. Würden wir sie erhöhen, würde der gleiche Effekt eintreten. Nun ist mir nicht bekannt, dass sich irgendjemand diesen Effekt aktiv zu Nutze macht. Kein Unternehmen und keine Behörde muss befürchten, dass der Bundesdatenschutzbeauftragte bei ihnen unangemeldet an die Tür klopft und mal fragt wie es so um die technischen und organisatorischen Maßnahmen steht. Würde er das tun können, so würde auch noch ein weiterer Effekt im Kontext von Regeln in Kraft treten: Risikoaversität. Dieses Prinzip besagt, dass Menschen beim Einschätzen von Risiken (wie dem Risiko, einen Datenskandal zu erleiden) dazu tendieren die Eintrittswahrscheinlichkeit von negativen Ereignissen zu überschätzen, gegeben Schadenshöhe und Eintrittswahrscheinlichkeit sind in einem bestimmten kritischen Bereich, denn es gibt umgekehrt auch Situationen in denen wir risikoaffin handeln (z.B. wenn wir Lotto spielen) und das Risiko unterschätzen. Die Aufgabe des Staates ist es nun, Strafmaß und Eintrittswahrscheinlichkeit in einen effizienten Bereich zu verschieben.

Und nun zur Conclusio: Warum tut er dies nicht für den Datenschutz? Zum Beispiel durch aktive Überprüfung der technischen und organisatorischen Sicherheitsmaßnahmen nach §9 BDSG. Oder noch provokativer: Warum haben wir keine aktive Pen-Testing Behörde, die:

  1. private Unternehmen überprüft
  2. staatliche Behörden überprüft

Ich fordere staatliches Pentesting gegen Behörden und Unternehmen!

(man beachte dabei das Grundrecht auf Gewährleistung der Vertraulichkeit und Integrität informationstechnischer Systeme)

What is Open Source?

Well, here is the final answer. Just created it from the texts in the OpenSource Jahrbuch 2004 to 2008. Took me some hours and some code-snippets from my diploma theses. Just a quick Porter-stemming (which doesn’t work to well with german, I know) and a manually created stopwordlist. There’s definitly room for improvement (better stemming, differential corpus analysis, say agains the gutenberg corpus) but I just need it for putting people in the right mindset.

Wordle: OpenSource Jahrbuch

Don’t be afraid of .pyc

During the last UCSB iCTF we (ENOFLAG) got (amongst other applications) a python binary which means, we only got the .pyc file and not the python source. The .pyc modules had to be reversed to find some remote code execution vulnerability. Well, I’m not the assembler-uber-geek so I had some problems reversing the code and until the host supplied the plain source I didn’t really got anything usable.

Now, a few days later, I know the exploit but I lost the source for the binary. So I just thought, let’s get it back and do what you were supposed to do. And … it’s astonishingly easy. The only thing you got to do is take some time and decompile the disassembled output line by line into source.

So here come’s a short tutorial for decompiling python 2.5/2.6 code:

Step 1: disassembling

dismybinary.py:
#!/use/bin/env python
import binarymodule
import dis

dis.dis(binarymodule)


$ ./dismybinary.py > mybinary.dis

Step 2: decompiling

$ cp mybinary.dis mybinarydis.py
$ vim mybinardis.py

An additional ipython shell on another terminal might help for inspecting the binary module during decompilation.

Now, cpython disassembler output is not to hard to read, it’s really easy in fact, when you concentrate and take your time. The documentation of dis helps and I’m pretty sure you can do it, too.

So next time, I won’t be so afraid of python binaries and I suggest anyone having to deal with, too: Don’t be afraid, it’s easy, just do it.

Jobpy released (pp is good, jobpy is more special)

Hello world Jobpy!

As part of my diploma thesis I needed a multithreaded job producer/consumer architecture implementation with at-least-once semantics. To make testing easier I implemented the architecture and semantics part in a seperate framework and made sure it worked well. The code is pretty java-ish which I’m not all that happy about, but I thought that maybe it could be of use for someone anyway. So I created a little sourceforge.net project for jobpy.

You may ask yourself now why the hell to use jobpy when there is also parallelpython (aka pp). Well, there are some problems with pp - E.g. it’s pretty hard to share ressources like a socket or a database among the consumer threads because the jobs have to be serializable. But sometimes data structures cannot be serialized and you would have to code around this limitation. Jobpy is not designed to replace pp, it’s just a solution for the special case of multithreaded producer/consumer job processing with optionally shared ressources.

I’m on TV

Finally, after some time, Thaddäus finished cutting and converting the first recording of the Javakurs 2009. He started with LE3 - which is me and Dennis teaching our students about methods and call-by-reference vs. call-by-value in Java. I’m pretty happy with my performance and so I’m happy that I can now show the world ;)

Here it is: Javakurs 2009 LE3, with slides

How many cities has the world?

So this is what I did this weekend: For my diploma thesis I needed a list of all the cities of the world (to filter text collections). There already exist corpora like the “Getty Thesaurus of Geographic Names” but they are not free and way over my needs - I just want a list.

Who could have such a list? First try: IATA airport list from wikipedia. Parsed. Erroneous (typos, problems with parsing…). Second try: openstreetmap.org.

And here is where the story begins. Openstreetmap.org collects geographical knowledge in a huge database and publishes it under a free license (CC-BY-SA). The database dump can be downloaded as a huge XML file which currently is about 5GB in bzip2 compression. The expected ratio for decompression is 10:1 so this is a fricking 50GB XML file. The structure is fairly simple. There are nodes, ways and relations and these can have tags. The tags then encode information like “this is a place of the kind city” or “its name is Footown”. To get this information I wrote a little python script that iterates over every line and extracts the relevant parts with some regular expressions. A run on the 5MB bzip2ed relations file took 17s. Well … that was to slow. So I removed the regexps and did some dirty by-hand parsing. 8s. Better. But still to slow.

So, next step: C.
The evil thing!


But, you have to admit - there’s nothing else when it comes to performance. About six hours of coding later I got the first results: 3.5s for a 1,170,000 lines XML file. Good. After some further improvements I got it down to 2.6s. Yeah! :)

On a 1.6GHz Core2 Duo the combination of bzcat and grepplaces.c (both running on one core) gives around 1.2MB/s reading speed on the bzip2ed planet-file. So a complete scan over the planet-file now takes about 70 minutes.

So, here’s the code: http://cleeus.de/grepplaces/

The extracted corpus will follow, as soon as it’s ready.

So long, some statistics:


$ grep “^city” places_planet.txt | wc -l
4179
$ grep “^town” places_planet.txt | wc -l
29401
$ grep “^village” places_planet.txt | wc -l
249716

Commons, baby, light my fire!

Although this will be yet another literature suggestion and I’m usually doing these in german, this one will (hopefully) come along (nicely) in english. I just started a book that appears to be one masterpiece. I can’t really put into words what makes a book a masterpiece in my view but it seems to be something that is between the lines. Occasionally, there are books that make you feel bad and take your energy away - and by that I don’t mean that they are boring. And there are masterpieces that do the exact opposite: They set your mind on fire in a positive way. They give you a starting point for a thought on its own with every of their sentences.

On of those seems to be “The Wealth of Networks” by Yochai Benkler. Benkler is a professor at the famous Berkman Center For Internet And Society at Harvard. Fame aside, he also seems to be someone with a very beautiful writing and thinking style. I merely read the first few chapters yet and already if not learned then understood deeper allot of things that move the creation and distribution of information goods. He is an advocate of free and open software and a general information commons and gives allot of reasons for everyone, even hardcore economists, to also embrace the emergence of a new world of culture creation. I have yet to see what is coming but it seems be a strong statement against strong copyright policy because of simple economic reasons and not some 69’s dream of equality (not that I wouldn’t like these dreams). So for everyone who already loves commons and who would like to bring light into his understandings of motivations for information production and who wants to get insp(f)ired, I can really suggest the read. :)