Posts in category fnord

SSL Certificate Trouble

If you should ever stumble upon this bug, consider yourself very lucky that I have found the solution to this already, because it took me _AGES_ to figure this out. No shit.

So here's the problem: We used a self signed certificate on on of our servers and curl and all tools relying on curl just couldn't connect to this server at all (with certificate validation). Despite the fact that the root certificate that signed the server certificate was happily in my keychain and marked as trusted.

The solution first: Turns out that the Keychain will eat certificates in many formats, specifically it supports DER and PEM. curl however can't use the DER certificate in the keychain and just reports it as missing. Exporting the certificate, converting it to PEM and then reimporting it (making sure to remove the DER version beforehand) fixed it.

I converted the file with this command

openssl x509 -inform DER -in some.ser.ver.der -out some.serv.ver.pem

Here's some of the error messages I got:

% curl -I https://some.serv.ver -v
* About to connect() to some.serv.ver port 443 (#0)
*   Trying some.ip... connected
* Connected to some.ser.ver (some.ip) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
* Closing connection #0
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

If you hit this brick wall - hope this helps you too.

Python Saug Punkte contd.: x += y ist nicht x = x + y

a = b = list()
a = a + ['foo']
print b # => []

a = b = list()
a += ['foo']
print b # => ['foo']

Doh. Wie kann das sein? Kommt man von C ist das erst mal sehr verblüffend - und auch die meisten anderen Programmiersprachen die ich kenne verwenden a += b als equivalent für a = a + b.

Well, nicht so Python. Weil  da gab es offenbar mal Programmierer die fanden dass man Code der mit Matrizen rechnet lieber mit Operatoren schreiben möchte weil sich das besser ließt. Natürlich nicht mit den normalen operatoren wie */+-, weil, da kann man ja den empfänger nicht in place modifizieren, und wie jeder weiß sind Matrizen ja so groß dass die dann nicht mehr in den Ram passen.

Also haben sie die <op>= operatoren in Python so spezifiziert, dass sie ihre left-hand-variable in place modifizieren wenn diese mutable sind.

:-(

Python Saugpunkte: Klassenobjekte

Klassenobjekte sind special - daher hat man im boddy einer klasse keinen Zugriff auf das klassenobjekt.

Weil, self ist ja auch nicht automatisch und man muss es in Methoden immer als explizites Argument hinschreiben, und so etwas gibt es ja bei Klassen nicht, denn das sind ja keine Methoden und daher kann man halt das Klassenobjekt nicht referenzieren im body.

Doh.

Und das nervt natürlich total bei der meta-programmierung.

Hier mal ein Beispiel von etwas SQL-Alchemy Code wo mir das wieder aufgefallen ist:

class Poll(Base):
    proposal = relation(proposal.Proposal, backref=backref('polls', cascade='all',
                           lazy=False, order_by=Poll.begin_time.desc()))

Das geht nicht, weil ich auf Poll nicht zugreifen kann und damit nicht auf andere attribute der Klasse. Der Workaround den SQLAlchemy dafür macht ist das man einen String hineinreicht und die den dann aufwendig parsen. Total gar nicht toll.

:-(

  • Posted: 2010-01-13 19:00 (Updated: 2010-01-13 19:01)
  • Author: dwt
  • Categories: fnord code
  • Comments (0)

Python Saug Punkte contd.

Eine Sache die mich bei Python immer wieder ärgert ist die Tatsache dass Standardwerte für Methodenargumente zur Parsezeit festgelegt werden anstatt zur Aufrufzeit.

Das ist total doof, denn dadurch teilen sich alle aufrufe der Funktion den gleichen default-wert - was zwar schön schnell sein mag, aber trotzdem in fast allen Fällen nur bei nicht veränderbaren Objekten (so wie Integer und Strings) Sinn ergibt.

So führt das dazu dass man in Python eine ganze Menge Workarounds braucht um mit default-argumenten zu arbeiten.

Das wichtigste dabei ist der default typ None. Das ist der workaround für alle mutable-objekte, da man die in fast keinem Fall zwischen verschiedenen Methodenaufrufen teilen möchte. So sieht das aus:

def end_poll(self, end_time=None):
    if end_time is None:
        end_time = datetime.utcnow()
    # work with end_time...

Der Punkt hier ist dass man datetime.utcnow() nicht in das standard Argument hineinschreiben kann, da man sonst bei jedem Aufruf der Methode den gleichen Wert hätte: Die Parsezeit. Nicht sonderlich nützlich.

Das hat zur Folge dass man:

  • aus der Signatur nicht sehen was das Standardargument ist (utc/gmt oder vielleicht ewas ganz anderes?). Immerhin gibt es inzwischen immer mehr IDEs die diese Signatur beim aufrufen für autocompletion nutzen oder sie wenigstens anzeigen können.
  • Man beim verwenden von Standardargumenten immer überlegen muss ob man dieses Argument jetzt in die Methodendefinition oder in den Body aufnehmen muss.
  • für jedes Standardargument noch mal zwei extra Zeilen braucht. Das nervt vor allem deswegen weil man sich mit den standard Argumenten ja Zeilen sparen möchte. Das heißt die Kosten für Standard-Argumente steigen und man benutzt sie seltener.
  • die default argumente noch mal separat dokumentieren muss, da ein dokumentations-extraktions-Werkzeug ja den Code nicht sieht, der das tatsächliche Standardargument setzt. Und natürlich hat man dann noch mal DRY verletzt da die Information jetzt zwei mal da steht.
  • richtig fiese Bugs kriegt, weil viele Leute diese Probleme nicht kennen oder sie ab und an vergessen und mal ein list(), dict() oder set() als Standardwert nehmen was dan für viel Freude beim Debuggen sorgt.

Also, know your Python und vorsicht mit Standardargumenten!

Vielleicht kriegen wir ja irgendwann von unserem BDFL ein from __future__ import runtime_standard_argument_evaluation.

  • Posted: 2010-01-11 17:03 (Updated: 2010-01-11 17:07)
  • Author: dwt
  • Categories: fnord code
  • Comments (0)

Python Saug-Punkte

Viele standard-funktionen und module in python haben zu kurze namen.

Das ist deshalb ein Problem weil, man diese Namen nicht für lokale Variablen verwenden kann bzw. ungewollt eine Standardfunktion überschreibt.

id zum Beispiel. Oder dict, list.

Module sind dabei aber auch Problemkandidaten - vor allem wenn man sie häufig wie ein Objekt benutzt. Das json Modul macht mir immer wieder probleme, weil ich eine lokale Variable die json enthält nun mal gerne json nennen würde. json_serialization wäre vielleicht ein besserer Name für das Modul.

Die Standard-Bibliothek ist leider voll von solchen Beispielen und der Include-Mechanismus von Python der die Module quasi als Objekt im namespace des Empfängers verfügbar macht hilft da nicht wirklich weiter. Das ist zwar IMO eine bessere Idee als der C-Präprozessor #include (was Ruby ja zum Beispiel nachbaut) aber gerade bei so kurzen Namen kann das wirklich nerven.

Wenn man aus einem Modul ein Objekt importiert ist das interessanterweise kein Problem, da Objekte in Python (wenn sie sich an die Namenskonvention halten - leider auch oft nicht der Fall in der Standardbibliothek) immer mit einem Großbuchstaben anfangen und dadurch diese Namenskollision nicht auftritt.

Für mich ist da das Problem dass die Python Programmierer leider so eine Obsession damit haben alles möglichst kurz machen zu wollen - und dabei aber dem Programmierer der mit der (Standard-) Bibliothek arbeiten möchte gerade wieder Steine in den Weg legen dass kurz zu machen was für Ihn am meisten sinn macht - lokale Variablen.

Das ist leider Premature Optimisation in Reinstkultur - und es stört mich beim Entwickeln von meiner Software. :-(

How to crash IE 7 with javascript

Well, it's all too easy apparently. We stumbled upon the problem when suddenly our web application crashed left and right on us in IE 7.

I've since reduced the code involved and created a plugin to jQuery to make it easier to reproduce this.

Well, maybe perhaps sometimes somebody even discovers a use for the crashIE7 jQuery plugin. :)

In any event - it was fun creating this. :)

See the blog post page for the attached source and how to use this.

  • Posted: 2009-12-12 09:55 (Updated: 2009-12-12 09:56)
  • Author: dwt
  • Categories: fnord code
  • Comments (0)

Flagge zeigen

Zur Schweinegrippe

Meine Mutter hat diesen lesenswerten Text dazu geschrieben - und den möchte ich gerne (mit ihrer Erlaubnis) noch mehr Leuten zugänglich machen. Grund dafür ist diese Email die gerade mit diversen gut klingenden Arzt-Namen als Absender auch durch meine Inbox wandert


Für alle, die überlegen sich impfen zu lassen :

Die beiden Impfstoffe gegen die so genannte Schweinegrippe *Pandemrix® Und Focetria®,* enthalten als Adjuvans (Impfverstärker ) *Squalen*. Beim Menschen ist Squalen bei den US-Soldaten des ersten Golfkriegs als Impfverstärker eingesetzt worden.

23-27% (also jeder Vierte, auch solche, die zu Hause blieben) bekamen Die Golfkriegskrankheit, Mit chronischer Müdigkeit, Fibromyalgie (Muskelrheuma), neben Gedächtnis-und Konzentrationsproblemen, persistierenden Kopfschmerzen, Erschöpfung und ausgedehnten Schmerzen charakterisiert. Die Krankheit Kann auch chronische Verdauungsprobleme und Hautausschlag einschließen.

Die Erkrankung hat sich seit 1991 also seit 18 Jahren nicht gebessert. Bei 95 % der Geimpften mit Golfkriegssyndrom wurden Squalen-Antikörper Gefunden.

Erst nach mehr als 10 Jahren wurden die Schäden vom US-Verteidigungsministerium anerkannt.

Wenn die Bundesregierung ihren Willen durchsetzt und 35 Millionen Menschen geimpft werden, ist damit zu rechnen, dass 8-9 Millionen Bundesbürger für die nächsten Jahrzehnte unter chronischer Müdigkeit und Fibromyalgie etc. leiden werden.

Unterschrieben von: $GUT_KLINGENDER_ARZT_NAME


Dazu hat sie diese gute Antwort geschrieben:

Ja, es stimmt. Pandemrix + Focetria enthalten Squalen, das injiziert zum Imunogen wird. Das ist seine wirkstoffverstärkende Ebene. Es wird auch in unserer Leber produziert, aber liegt natürlicherweise in öliger Form vor. Im Impfstoff aber als Emulsion, was einen Unterschied für die Verstoffwechselung im Körper macht. Der Verdacht, dass es etwas mit dem Golfkriegsyndrom zu tun hat, ist nicht erhärtet. Neuere Studien mit größeren Teilnehmergruppen zeigen keinen Zusammenhang zwischen Squalen-Antikörpern und chron. Symptomen.- Dennoch wird unabhängig von diesem Aspekt der Debatte um diese Impfstoffe ihre Sicherheit als ungenügend geprüft eingeschätzt. Er wird schlechter vertragen als ein Spaltimpfstoff ohne Wirkverstärker. Das ist sicher. ER wurde noch nicht an Schwangeren und Kindern erprobt und die jetzt eingesetzte Wirkstoffverstärkerdosis ist viel höher als in bisher eingesetzten Impfungen. Nebenwirkungen wurden noch nicht systematisch erfaßt. Auch seine Wirksamkeit ist noch nicht hinreichend erforscht, da eine verringerte Dosierung gegenüber der Zulassungsphase jetzt vermarktet wird.

Da die Grippe gutartig abläuft und kein höheres Risiko darstellt, als die bisherigen Herbstgrippen, ist davon bei sonst gesunden Menschen abzuraten, ebenso bei Schwangeren und Kindern. Hier herum impfen nur wenige Ärzte und auch die Kinderärzte sind sehr zurückhaltend. Jürgen hat herausgefunden, dass 1974 dieser Virus schon mal "um die Welt lief", so dass alle, die damals schon sich anstecken konnten, wahrscheinlich immun sind.

Mein Rat an alle, die sich schützen wollen und dazu beitragen möchten, das sich die Viren nicht ausbreiten:

  1. Bei ersten Symptomen ca 25 mg Zink einnehmen (gibt es als Tabletten) an zwei aufeinanderfolgenden Tagen. Parallel dazu Vitamin C Stoß mit heißer Zitrone o.ä. 2x täglich.
  2. Cystus 052 Infektblocker Tabl. lutschen (pflanzlicher Virenblocker).
  3. Wenn Fieber kommt, dieses auf über 39°C steigen lassen und abwarten. Viren werden durch Temperaturen über 39°C abgetötet. Es ist der effektivste Abwehrmechanismus. Die Nebenwirkungen des Fieberanstiegs ertragen sich am besten im Bett mit viel trinken und schlafen. Sobald die Viren keine Bedrohung mehr darstellen, geht das Fieber wieder runter (bei normalem Verlauf).
  4. Auch ohne Fieber soll sich jeder im Stadium des Niesen und Hustens von seinen Mitmenschen fernhalten, da er wie eine lebende Viren-Schleuder wirkt. Am besten freiwillig daheim bleiben und viel Zeit auf Pflege der Gesundheit verwenden (Nasenspülung, Inhalieren, Tee trinken, ausruhen, an die frische Luft gehen wenn möglich, Basenbäder nehmen, bei Bedarf Brustwickel, Atemübungen, viel frisches Obst).

Ich hoffe dass das auch für viele anderen Leute einiges an Fragen beantwortet und die Pharmaindustrie hoffentlich deutlich einnahmen kostet.

Das Wikipedia Dilemma Lösen

Ich weiß ich bin etwas spät mich dazu auch zu äussern - aber jetzt wo die  Wikipedia wieder zu Spenden aufruft möchte ich was dazu sagen wieso ich nicht spende.

Das ist doch alles Kindergarten was in der Wikipedia gerade läuft.

Also gut, "embrace your enemy" oder wie es heißt, da können wir etwas tun.

Lasst uns einen Kindergarten eröffnen. Jeder neue Wikipedia-Artikel ist zuerst im Kindergarten und wenn er Groß und Stark geworden ist kann er irgendwann ins Erwachsenen-Artikel-Leben übertreten.

Das hätte folgenden Vorteil: Alle Exkludisten und die die nur die beste Qualität haben wollen legen einen Schalter um und sehen diese Einträge erst mal nicht.

Alle anderen verlieren nicht sofort die Lust an der Mitarbeit wenn einer Ihrer Artikel gelöscht wurde - weil er nicht gelöscht wurde.

Wenn jemand auf eine Seite kommt die unterhalb seines Qualitätslevels liegt, kann er ja einen Hinweis kriegen dass sie existiert, damit er sie mit einem Klick zu sehen bekommt bzw. er seine Einstellung ändern kann.

Alle sind Glücklich!

  • Jeder Artikel kann jederzeit in den Kindergarten geschickt werden bis er groß wird.
  • Jeder Artikel kann jederzeit aus dem Kindergarten "graduieren"
  • Wer nur Inhalte von größtmöglicher geprüfter Qualität sehen möchte kann diese ausschließen
  • Alle Anderen kriegen einen deutlichen Hinweis dass der Artikel noch im "Kindergarten" ist
  • Man könnte Kindergarten Artikel generell anders Rendern damit der Unterschied ganz klar ist

Ich persönlich würde es vorziehen wenn die Standardeinstellung "Alles anzeigen" ist - aber auch wenn der Standard wäre "nur die geprüften Artikel anzeigen" und man jederzeit sieht wenn man an einer Stelle ist die im Kindergarten noch mehr Inhalt enthällt und man die nach bedarf zeigen kann wäre ich zufrieden.

Platz ist in der Wikipedia ja kein Problem - nur von Admins und regelmäßigen Mitarbeitern gepflegter Platz ist knapp.

Was ich will, ist das die User entscheiden können was sie lieber wollen. Mehr Artikel, oder besser geflegte - und nicht die die die meiste Zeit in das Projekt stecken. Das halte ich für absolut wichtig.

Ach ja, und falls das innerhalb der Wikipedia nicht funktioniert, müsste man so etwas als eigene Applikation davor setzen wikinursery.de / kindergarten.wikipedia.de oder per greasemonkey oder als iPhone App oder eben als "vollständige Wikipedia" irgendwo anders.

Nur innerhalb der Wikipedia wäre natürlich am besten - wobei zweifelhaft ist ob die macher des Projekts dafür bereit sind.

Ja, die Idee wurde schon von ein paar anderen Leuten geäussert - ich wollte sie auch noch einmal aufschreiben weil ich sie so wichtig finde.

  • Posted: 2009-11-14 12:22 (Updated: 2009-11-14 12:24)
  • Author: dwt
  • Categories: fnord
  • Comments (0)

Wie viel kostet die Finanzkriese?

Im vergleich zum Irak-Krieg? Oder alle Kinder dieser Welt für 5 Jahre zu ernähren?

 Hier wunderschön visualisiert.

So viel ist klar - man sieht was wichtig ist im Staat und was nicht. Leider.

 via

3,4 % in Berlin

Yeehaw!

Na wenn das nicht ein tolles erstes Bundestagswahlergebnis für die Piraten ist!

Bundesweit waren es 2,0 % - 'immerhin' 0,5 % besser als das erste Ergebnis der Grünen (mit denen wir ja so oft verglichen werden).

*katerausschlaf*

Eine ganz gute Übersicht über die Ergebnisse gibt es  bei ARD

Zur Polizeigewalt auf der Freiheit statt Angst-Demo

Spannend - vor allem die diversen Analysen im Netz dazu.

 Peter Piksa hat die beste Zusammenfassung der Ereignisse die ich kenne.

Besonders Spannend finde ich da  die Nachlese von Markus Hansen der sehr schön die Fakten zu Körperlicher Gewalt auf den Tisch legt.

Sehr Lesenswert.

IE 8 oh IE 8, wärst Du doch kein IE 7...

Heute bin ich auf einen sehr interessanten Bug gestoßen - im IE natürlich. Genauer genommen im IE 8.

Folgendes ist passiert: Wir hatten ein Problem mit dem Rendering einer Webapplikation - dort fehlte mal wieder ein Teil das eigentlich hätte da sein sollen. Stellt sich heraus, dass auf manchen der Rechner der IE 8 die Seite im IE 7 Kompatibilitätsmodus gerendert hat - ok wir hatten also eigentlich einen Bug mit dem IE 7 der das CSS nicht vertragen hat. Soweit so gut.

Mysteriös war das ganze, denn es ließ sich auf verschiednen Rechnern nicht reproduzieren. Dabei verwendeten wir sogar die gleichen images ( VirtualBox ich liebe dich).

Ok, wir sind also irgendwie auf manchen Rechnern in den IE 7 Kompatibilitätsmodus gerutscht. Wirklich Lustig wurde dass als wir auf  dieser Seite auf die Erklärung gestoßen sind:

IE 8 kann nämlich den IE 7 emulieren. Aus 'Kompatibilitätsgründen'. Und weil das natürlich total kompatibel sein muss hat Microsoft das so eingestellt dass alle Intranetseiten automatisch im IE 7 Modus gerendert werden - natürlich ohne einen Knopf mit dem man das abstellen kann. (Andersrum gibt es schon einen…)

Das geile daran: IE erkennt Intranetseiten nicht an der IP, sondern an der Domain! Weil das nicht anders geht! [sic] Und da auf dem anderen Rechner die Webseite per IP aufgerufen wurde wurde das Problem da nicht sichtbar…

Überhaupt ist die Implementierung dieses Kompatibilitätsmodus eine einzige Katastrophe.

  1. Der Modus aktiviert sich automatisch für Intranet-Webseiten
  2. Er lässt sich für diese nicht deaktivieren
  3. IE merkt sich welche Webseiten der User irgendwann schon einmal (vielleicht aus versehen) in den Kompatibilitätsmodus geschaltet hat - aber löscht dieses Wissen wenn man die History löscht.
  4. Jede Webseite kann diese User-Einstellung überschreiben, indem sie einen meta-tag setzt
    1. und dann wird die User-Einstellung auch gleich komplett gelöscht! (*rotflol*)
    2. Man kann über den Meta-Tag nur einstellen dass man gerne eine IE 8 Emulation hätte - wenn der IE 9 dann herauskommt darf man also wieder ran und noch mehr Meta-Tags definieren… (*kotz*)

Also wirklich verkackt auf der ganzen Linie - eine  Lektüre des Original-Artikels ist wirklich empfohlen. :)

Ich bleibe dabei: Daß wir oft an Wahlkampfaussagen gemessen werden, ist nicht gerecht.

Neues vom Grundeinkommen

Dazu gibt es ja viel zu wenige empirische Experimente - nur mehr oder weniger begründete Vermutungen von allen Seiten.

Gerade deswegen finde ich es so ungemein wichtig dass diese Experimente jetzt beginnen, damit wir wissen was aus dieser Idee werden kann und wie man sie umsetzen kann dass es funktioniert.

Schließlich wollen wir nicht dass wir alle wie die Maori-Indianer in ihren Reservaten enden, die zwar ein Grundeinkommen garantiert haben (da fühlt sich die US-Regierung offenbar doch sehr schuldig) aber die ohne eine kulturelle Identität nur vor sich hin vegitieren können.

Was wir brauchen ist eine Lotterie an der sich alle Dörfer unter 10.000 Einwohner beteiligen können. Aus diesen Dörfern werden dann 3 Gewinner gezogen und denen 10 Jahre Lang ein Grundeinkommen bezahlt - in verschiedenen Höhen, in unterschiedlichen Ausprägungen. Natürlich mit wissenschaftlicher und psychologischer Betreuung.

Dann wissen wir mehr.

Und das coole ist, in Namibia hat  der Basic Income Grant (BIG) 2008 so ein Projekt gestartet - mit halbjährigen Evaluierungszyklen.

Und da kommen jetzt  die ersten  Ergebnisse herein.

 via

FreeNode dass ich nicht lache...

Heute bin ich mal wieder im CCC - und überraschenderweise fällt mir da diese Fehlermeldung auf:

20:05:26 wolfe.freenode.net: (notice) 
*** Banned:  You've been temporarily blocked 
due to filtering problems. Sorry for the 
inconvenience! Mail kline@freenode.net with questions. 

Well, da melde ich mich doch mal:

Your IP address is: 195.160.172.2
Your hostname is: fuckup.club.berlin.ccc.de
I am writing this because I got a message about a 
filtering problem that accidentally banned me.

So here I am.

To witch I got this answer:

Please connect from a host which has an IP that doesn't resolve to a
name that contains "fuck".

Thanks,
stew

Meine Hinweis dass:

You do realize that this is in reference to the "First Universal 
Cybernetic-Kinetic Ultra-Micro Programmer" from 
Hagbard Celine in the Illuminati Trilogy?

So I'd urge you to please take that out of the filter list.

wurde dann allerdings nur noch abgebügelt.

No, and I don't think you should expect people to know this reference.

> So I'd urge you to please take that out of the filter list.

I don't believe there are any plans to change this filter.

thanks,
stew

Tja. So viel zu selbsternannten Moralaposteln die mit Wortfilterlisten spielen. Mein Vorschlag: Erwachsen werden und  Illuminatus! lesen!

Update:  Florian hatte die gute Idee doch mal nach dem Servernamen von Freenode auf dem ich connected war zu googeln. Sieh an, was für eindeutige Angebote... Ich finde im Lichte dieser neuen Erkenntnis sollten die dort dringend ihren Servernamen ändern.

  • Posted: 2009-07-13 19:20 (Updated: 2009-07-14 11:51)
  • Author: dwt
  • Categories: fnord
  • Comments (0)

Git Handarbeit II: Submodules

Noch so eine Stelle an der GIT einem extra viel Handarbeit aufdrückt. Submodules.

Erst mal die Idee (die eigentlich ganz gut ist): Oft will man Teile der Software (Frameworks, Plugins, ...) eigentlich als eigenes Projekt in einem eigenen Repository entwickeln. Und das ist GUT (TM).

Daher bieten eigentlich alle etwas fortgeschritteneren Versionskontrollsysteme irgend eine Möglichkeit solche externen Repositories einzubinden, damit man es einfach hat an aktuelle Versionen dieses Codes heranzukommen.

Dazu gibt es jetzt in der Regel zwei Ansätze: Entweder man verlinkt einfach auf den HEAD des anderen Repos oder auf eine bestimmte Revision. Letzteres ist im allgemeinen Fall zwingend, denn sonst hat man nie die Chance einen alten Build auch tatsächlich exakt wieder herzustellen - im Speziellen Fall ist ersteres aber sehr Praktisch, wenn man z.B. aus einem globalen Repository einfach Teile an verschiedenen Stellen einblenden möchte, damit sie im Repo nur einmal, im Checkout aber mehrfach oder einfach an einer anderen Stelle erscheinen.

SVN macht das mit  svn:external attributen die sowohl auf HEAD als auch auf spezifische Revisionen verlinken können. HG macht das mit  forests ( noch eine extension), bzr weiß ich nicht und git macht das mit submodules.

Bei SVN hat man noch den Nachteil das es, weil es branches und tags nur als Verzeichnisse kennt natürlich auch Handarbeit erfordert, das hießt, dass man beim Taggen von HEAD z.B. nicht automatisch von dem link auf einen anderen HEAD auf einen Link auf eine spezifische Revision umschalten kann. Das gibt dann das Ergebnis, dass man oft im Tag auf den HEAD eines anderen Teils des Repos verweist. Gratulation! Und wiedererzeugbare Builds ade.

Besonders geärgert haben mich aber die GIT-Submodules. Zuerst: Die sind auch ein Plugin - und in bester GIT manier gibt es natürlich überhaupt keine integration in die anderen Kommandos.

Das bedeutet schon mal das man nicht ein Repository pullen kann um danach einen Build zu machen - NEIN, man muss erst merken dass man noch die Submodules benötigt und dann git submodule init && git submodule update eingeben.

Yeah. Give me useless extra steps!

Es wird aber noch besser, weil es keine Intgegration gibt, sieht man natürlich mit git status nicht das es in einem submodule Änderungen gab. Ok, das stimmt nicht ganz. Man sieht nicht dass es in einem submodule uncommittete Änderungen gab. Commitet man dann nämlich dort, dann sieht man im parent repository dass sich etwas verändert hat - und dass muss man dann nochmal committen.

Yeah. Give me useless extra steps!

Auch schön, wenn man z.B. von GitHub ein Projekt mit Submodules auscheckt, dann zeigt der Origin des Projekts auf GitHub - sinnvoll, weil dahin wird man seine eigenen changes ja schieben wollen, damit Upstream sie mergen kann. Nicht so bei submodules - dort zeigt der origin natürlich auf das ursprüngliche Projekt - auf das man natürlich regelmäßig nicht pushen kann/will. Man muss also einen eigenen branch des submodules auf GitHub anlegen und dann das bei sich von hand als Branch registrieren und dann immer daran denken das im submodule natürlich nicht origin sonder ein anderer name für den parent branch gilt.

Yeah. Give me useless extra steps!

Hach, und natürlich sind GIT submodules IMMER auf eine bestimmte Revision gebunden - tollerweise auch gleich ohne mitzubekommen auf welchem Branch diese jetzt liegt. Das heißt dass man sowieso dort drin per default nix committen kann. Man muss also in jedem fall einen eigenen Remote clone des origins anlegen, den als neuen Remote eintragen, dann einen lokalen tracking branch erstellen, auf den wechseln, dort dann commiten und jeweils nicht vergessen diese Commits im Parent Repo dann zu bestätigen (einzeln natürlich, sonst sieht man dort die history nicht). Das geile daran: macht man dann im Parent Repo einmal git submodule update ist man natürlich wieder auf einer disconnected revision.

Yeeehaw. Give me useless extra steps!

Umbenennen ist noch so eine Sache, DVCS sind ja so toll beim Mergen, nicht? Aber wehe man benennt ein Submodule um. Dann nämlich kriegt man das nach git pull && git submodule update NICHT. Nein, viel besser man muss lediglich .git/config von hand bearbeiten um den alten submodule Eintrag zu entfernen und dann ein git submodule init && git submodule update machen.

Yeah. Give me useless extra steps!

Mein Fazit: GIT, das Tool für Leute die gerne mehr Zeit in ihr DVCS als in ihre Software stecken wollen.

Mal auf den Punkt gebracht

Volker Pispers hat eine wunderschöne Sendung auf dem Deutschlandfunk gehabt. Und die ist  jetzt bei YouTube

Hier etwas zum Anfixen:

"Unter Hitler hatten wir auch den Fingerabdruck im Personalausweiß. Haben die Mütter und Väter des Grundgesetztes abgeschafft. Die haben wörtlich gesagt: Der deutsche ist kein Verbrecher. Das wissen Schilly und Schäuble natürlich besser.

Man kann Menschen nicht daran hindern von sich auf Andere zu schließen."

 Hier auf Youtube

Hach...

$this->doSomethingWith($someNonExistingVariable)

PHP ist wirklich eine Drecksprache. Selbst JavaScript kann das besser.

Man mache irgend etwas mit einer Variablen bei deren Namen man sich verschrieben hat. Dann würde man erwarten dass einen der Interpreter in irgend einer Form darauf hinweist. Wenigstens ein bisschen, mit einer Log-Meldung vielleicht. Sowas ist ja nicht schwer zu machen.

Aber, nicht so bei PHP. Vermutlich wieder aus den ominösen Performance-Gründen.

Vielleicht gibt es sogar irgendwo eine Option mit der man solche warnings zuschalten kann.

Aber alleine die Tatsache das man Gehirnzellen darauf verbrennen muss...

*grumpf*

Ok, der workaround ist dass sich jeder Entwickler in seiner php.ini diese Zeilen aufnehmen muss:

display_errors = On
error_reporting = E_STRICT

Der Witz daran E_STRICT warnt natürlich bei noch mehr Sachen als E_ALL. Sogar der MediaWiki Source des aktuellen Releases wirft da noch mit Warnings um sich.

Unglaublich.

Scrum Master

Nach ausführlicher intensiver und langwieriger Schulung von zwei Tagen - bin ich jetzt zertifizierter Scrum Master.

Wow.

Da sollte man natürlich etwas darüber schreiben was Scrum ist und was ein Scrum-Master tut. Well... ich rede mich mal damit heraus dass das Training sooo anstrengend war dass ich jetzt einfach nicht mehr kann.

Aber gott sei Dank gibt es auf YouTube ein paar Berichte von anderen Leuten die Scrum machen. :-)

Neben all dem Spaß gibt es aber auch  etwas ernsthaftere  Erklärungsansätze zu Scrum.

Git - das Werkzeug für Leute die gerne viel von hand machen

Puh, ich muss mir mal den Frust von der Seele schreiben den dieses Werkzeug mir bereitet hat.

Zuerst das Setup: Ich will zu einem Open Source Projekt beitragen dass leider GIT und GITHUB verrwendet.

Zuerst mal was mich wirklich frustriert hat. ich habe an ein DVCS (und speziell eines dass so sehr hyped wird wie GIT) ein paar ganz spezifische Requirements:

  1. Ich will dass ich meine Patches sauber getrennt voneinander entwickeln kann, damit man jeweils den ganzen Patch einfach sehen kann.
  2. Ich will die History dieser Entwicklung erhalten, damit die Code-Reviews die stattgefunden haben und die Gründe für Änderungen sichtbar bleiben
  3. Ich will einen stabilen Link auf den Head nur dieser Patches, damit der Maintainer es einfach hat diese bei sich zu integrieren und ich den in BugReports angeben kann
  4. Ich will die Patches als Layer über mein repository legen, damit ich von den Bugfixes die ich bereitstelle schon etwas habe solange sie noch nicht in dem Projekt akzeptiert wurden. Dieses Overlay-Repo stelle ich möglicherweise auch anderen Leuten zur Verfügung - optimalerweise können sie da auch Commiten.
  5. Ich will wenig Arbeit damit haben, damit ich mich auf die eigentliche Entwicklung konzentrieren kann und nicht ständig mit dem DVCS kämpfen muss.

Das letzte Requirement ist für mich dabei das wichtigste. Ich will Software und Patches entwickeln - und das DVCS das mich dabei unterstützt MUSS in den Hintergrund treten - sonst ist es schlicht und ergreifend ein schlechtes Tool. Und das ist auch schon der Todesstoß für GIT. So viel kann ich schon mal verraten - eigentlich kann GIT diese Requirements (die ja wohl für ein DVCS selbstverständlich sind) nämlich gar nicht erfüllen.

Dazu kommt dann natürlich noch der Ärger den man mit dem Index hat?.

Aber mal zu den Details.

Getrennte Patch-Entwicklung: Prinzipiell gibt es wohl zwei (oder drei) möglichkeiten. Die erste und die die sowohl im Manual als auch im IRC-Channel empfohlen wird ist das man doch einfach für jeden Patch einen branch macht. Die zweite und dritte Möglichkeit ist ein tool wie  StGit oder  TopGit zu verwenden. Beides sind externe Tools, die sich überhaupt nicht in GIT integrieren - und das bereitet eine Menge Probleme. StGit hab ich intensiver getestet - und von TopGit dass sogar in GIT-Kreisen als "kompliziert" gilt werde ich daher tunlichst die Finger lassen. Das Problem ist, dass man die Verwendung der Tools nicht mischen darf. Dazu ein Beispiel: Wenn man mit Mercurial PatchQueues arbeitet (das war letztlich mein Workaround, der wenigstens funktioniert!) dann sind die patchqueue Kommandos einfach weiter Subkommandos von hg - das bedeutet auch dass sie den vollen Repository-Status kennen und ihn in die Fehlermeldungen einbeziehen können. In der Praxis bedeutet dass, das wenn ich ein hg patchqueue Kommando absende und das Repository gerade in einem status ist der dazu nicht passt - dann kriegt man eine Fehlermeldung die einem nicht nur sagt das ein Problem aufgetreten ist, sondern auch was man tun kann um es zu lösen. (Leider sind die nicht immer perfekt, aber das ist wenigstens ein Start). Häuffig passiert das wenn man nach einem update von upstream die patches wieder anwenden will aber vergessen hat vorher den aktuellen status in hg zu commiten. Oder wenn man einen Patch verändert hat und zum nächsten wechseln will ohne das vorher aufzuzeichnen etc. Bei StGit ist das anders. Wenn da der Repository-Status nicht zu dem passt was StGit denkt das er wäre, dann wird das Repository einfach zerstört.

Yeah!

Bis man das dann gecheckt hat ist das Repository in einem Zustand, dass es weniger Arbeit ist mit diff und patch die patches wieder herauszufummeln als sich durch die diversen history-rewriting operatoren zu fummeln um doch etwas hinzubekommen was hoffentlich vielleicht doch das ist was man eigentlich hätte gewollt haben sollen. Oder so ähnlich.

Dazu kommt dass StGit die Patches schlicht als normale GIT-Revisionen speichert und die history-rewriting Möglichkeiten nutzt um das PatchQueue feeling aufkommen zu lassen. Und das ist dann auch der Grund wieso man StGit und Git Kommandos NIE, NIE, NIE mischen darf.

Bleibt also nur der erste Ansatz: Für jeden Patch einen Branch anlegen. Das wirkt eigentlich auch ganz Vernünftig, denn man kriegt dadurch eine Menge: Die History wird erhalten, man hat stabile Links in jeden Patch (ist ja nur ein Branch) und natürlich getrennte Entwicklung. Leider hört es da aber auf. Man kriegt nämlich keine Hilfe dabei die Patches als Layer übereinander zu legen - und besonders wichtig - wenig Arbeit damit zu haben.

Wenn von z.B. von upstream den aktuellen stand haben möchte, muss man das einmal für jeden Branch machen - und dann dort die Konflikte lösen. Hat man Abhängigkeiten zwischen den Patches (Bugfixes die aufeinander beruhen z.B.) wird es noch abenteuerlicher. Richtig toll wird es dann wenn man die ganzen Patches als Layer über sein eigenes Repository gelegt betrachten möchte. Unter GIT wird dazu empfohlen sog. "Integration" Branches zu verwenden - also Branches die man periodisch neu anlegt (mit sog. squash-commits) die aus einem anderen Branch nur noch einen einzigen Commit auf dem "integration" Branch machen. Das ist übrigens auch der Weg wie man aus den branches schöne patches macht - im integration branch. Das geile daran: Man muss das immer wieder machen - denn jedes mal wenn man die Patches weiterentwickelt muss man auch den integration branch komplett neu anlegen.

Ach ja, oder man schreibt natürlich in der History herum - aber dass hat letztlich den gleichen effekt - man hat eine Menge Arbeit und die URLS zu diesen Commits bleiben erst nicht die gleichen.

Ach genau, und es gibt natürlich noch Leute die Sagen History Rewriting geht und ist cool also mach es doch die ganze Zeit, dann bleiben auch deine Patches sauber. (Also im Prinzip das was StGit tut nur von Hand). Damit bin ich aber wieder meine Stabilen URLs los - und dass ist für mich nicht akzeptabel, weil ich dann wieder nix habe was ich in Bugreports verlinken kann)

Große Klasse.

Jetzt nachdem ich den ganzen Ärger durch hatte bin ich dann dabei angekommen dass ich schlicht keine Möglichkeit habe dem Upstream möglichst viel Arbeit abzunehmen und gleichzeitig Commit-URLs zu haben die sich nicht verändern (ach ja, dazu kommt noch das Upstream keine Branches in GITHUB mag - ich vermute mal dass ihnen das auch zu viel Arbeit ist). Na gut, wenn sie schon GIT verwenden müssen, dann dürfen sie auch die Extra-Arbeit machen.

Darum verzichte ich jetzt darauf saubere Patches bereit zu stellen, sondern Commite einfach in mein Repository und schiebe den 'master' nach GITHUB. Damit ist der Onus eben bei Upstream das sie möglichst häufig Mergen um die Übersicht nicht zu verlieren. Super ist das natürlich nicht - und mit jedem Code-Review von einem Patch den ich bereitstelle wird das dann halt unübersichtlicher.

Was ich daran nicht verstehe: Es kann nicht sein dass ich der einzige bin der diese Probleme hat. Jeder der Open Source Entwicklung mit GIT macht muss früher oder später darauf stoßen. Also was ist los?

Rein logisch betrachtet ergeben sich daraus eigentlich nur zwei mögliche Schlüsse:

  • Entweder GIT-User sind einfach so geil auf ihr Tool, dass sie gar nicht merken wie viel Extra-Arbeit das Tool ihnen aufzwingt und sie sehen diese Komplexität einfach als notwendig statt als zufällig an.
  • Oder aber sie haben, wie ich, einfach aufgegeben saubere History, einfaches merging für Upstream und getrennte Entwicklung von getrennten Patches zu betreiben.

Ich persönlich vermute letzteres - schon alleine um nicht alle Open Source Entwickler für blöde erklären zu müssen. Damit verstehe ich dann aber die Popularität von GIT gerade in OpenSource Projekten überhaupt nicht. Hier sind doch eigentlich gerade die Leute denen eine saubere und transparente Entwicklung wichtig ist?

Hier noch ein paar Pointer für diejenigen die aus der Git-Hölle entkommen wollen:

  •  Mercurial bietet mit den  PatchQueues ein mächtiges Werkzeug an um diese Patch-Entwicklung und verfeinerung sauber gretrennt vom Repository vorzunehmen. Das schicke daran: diese Patchqueues sind Versioniert - aber vom Repository getrennt gespeichert. Dadurch lässt sich das auch ganz hervorragend über ein GIT/HG/SVN Repository drüberlegen - und man kann den ganzen Ärger mit GIT vermeiden. Dazu lassen sich diese Queues auch relativ einfach über  BitBucket teilen, so dass man auch zu mehreren direkt an patches arbeiten kann.
  •  Bazaar hat  Looms die in etwa wie hg patchqueues zu benutzen sind, aber dafür den Vorteil haben dass sie ganz regulär mit einem push an ein remote andere Repository übergeben werden können - damit ist Zusammenarbeit auch um ein Vielfaches einfacher. Und natürlich wird auch dort die Historie der Patches erhalten. (Für die Geschwindigkeits-Proleten noch ein Hinweis: Bazaar ist heute so schnell wie Git war als es erschien - wenn Git also damals für Kernel-Size-Trees geeignet war...)

Haben Sie einen Vogel?

Neulich über Umwege bei  Fefe gesehen:

Der  Nistkasten Wolfgang S..

Ein Absolutes muss für den freiheitsliebenden Bürger. :)

Aus der Beschreibung: Gefühlte Sicherheit und Privatsphäre für unsere Singvögel!

Wer könnte da wiederstehen?

PHP

Bäh! = Ich hab mir heute mal mit einigen bekannten die doch etwas besser PHP können angeschaut wie man in die Wikipedia ein plugin einbaut.

Und boah, das ist echt superecklig.

Das geht schon damit los dass man an einen Array nicht vernünftig etwas anhängen kann. Denn, das muss man sich mal auf der Zunge zergehen lassen, arrays sind natürlich keine Objekte - dafür aber auch noch gleich dictionaries.

Und etwas anhängen an einen Array ist daher eine total schwierig. Es gibt zwar eine (globale!) Funktion - so in der art von array_push_value() oder so, aber das will niemand schrieben, desshalb gibt es dafür eine extra Syntax (!!!):

$someArray[] = "fnord";

Geil oder?

Und natürlich ist Wikipedia auch ein total gewachsenes Projekt, daher gibt es tausende von globalen Variablen die man manchmal überschreiben, manchmal anhängen und manchmal irgendwas machen muss.

Auf meine Frage wieso man so etwas so macht, fiel auch meinen Bekannten auch nur ein "das ist halt vermutlich so schneller" ein. Denn, der ganze Code muss ja für jeden Seitenabruf neu geparst werden.

Wie krass!

Und es ist nicht so das es dann für das Plugin registrieren eine Funktion gibt, in der man vielleicht noch ein Verzeichnis übergibt, wo dann nach einem standard-layout die ganzen Files drin sind. Nein! man muss x verschiedene globale variablen von hand anfassen.

*kotz*

 Wers nicht glaubt, schaut selber nach!

Bankenkriese

 Der Spiegel hat ein schönes Interview mit James Galbraith das die wesentlichen Punkte auf den Tisch bringt:

  1. Wenn eine Bank an die Wand gefahren wurde (und nur durch Steuergelder gestützte Institute sind praktisch Pleite) dann hat das Management dort keine Anreize mehr vernünftig zu Arbeiten. Stattdessen ist jetzt jedes Riesiko recht. Denn entweder wird die Bank eh zugemacht (dann wars auch egal) oder vom Staat gerettet (dann wars auch egal).
  2. Aktionäre müssen nicht gerettet werden. Die die noch da sind, sind die die auf die Rettung vom Staat spekulieren - und müssen daher nicht gerettet werden.

Amen.

 via

Wie kommt der Krieg in die schreibende Zunft?

 Wie kommt der Krieg in die Köpfe- und in die Herzen unserer Kinder - was so eine Überschrift trägt kann ja nix taugen. Erwartungsgemäß haben sich  andere  dann  auch  schon darüber aufgeregt - es gibt also eigentlich kaum noch etwas zu schreiben.

Aber mein Vater hat mich um einen Kommentar gebeten - und den wollte ich dann nicht in meiner e-mail inbox vergammeln lassen.

-- snip --

Ich möchte gerne den Begriff "Killerspiele" streichen, er ist genauso-wenig wie "Raubkopie" dazu geeignet das Thema zu erörtern.

Erst mal Prinzipiell: Der Jugendschutz ist in Deutschland härter als in jedem anderen Land der Welt. Spiele wie Counterstrike, Doom 3, Call of Duty und wie sie alle heißen sind schon gar nicht für Kinder unter 16 Jahren zugänglich und viele sogar erst ab 18.

Wenn Eltern ihren Kinder diese Spiele trotzdem zugänglich machen haben sie auch die Verantwortung dafür. Und wenn Eltern keine Teilhabe daran haben was ihre Kinder am Computer machen, dann ist das auch ein Problem - aber nicht durch irgendwelche Verbote zu lösen.

Und das ist eigentlich der Kern der Debatte: Alle diese Spiele sind für Kinder per Gesetz schon heute nicht zugänglich. Weitergehende Verbote können nur noch bedeuten dass auch Erwachsenen der Konsum verboten wird.

Das hilft aber überhaupt nix gegen das Argument: "Ja dann laden sie es sich halt runter".

Dagegen hilft aber natürlich kein Gesetz.

Ergo sehe ich nicht dass da etwas zu tun ist - die ganze Alarmschlägerei ist dann nur noch Aufmerksamkeitshaschen.

Hier noch ein paar Kommentare:

Killerspiele sind Landminen für die Seele

Und Tanzen führt zu Unkäuschheit, Sex und Teufelsanbetung.

Die Soldaten werden desensibilisiert und fürs Töten konditioniert, die Tötungshemmung wird abgebaut.

Soldatentraining ist heute auch ohne Computerspiele so effektiv dass jeder Soldat abdrückt - im Gegensatz zu noch im zweiten Weltkrieg wo immer noch viele Soldaten einfach in die Luft geschossen haben.

Überhaupt fände ich es weit sinnvoller diese ganze Argumentation so zu ändern dass sie sich auf Soldaten bezieht - das könnte ich wenigstens noch unterstützen.

Wenn man etwas machen möchte, dann meiner Meinung nach noch am ehesten dass man die Anzahl der Waffen in Deutschland noch weiter vermindert. Das ist dann zwar schade für die Leute die das toll finden, aber eben aus vielen Gründen wünschenswert.

die Rendite ist riesig, denn Computerspiele sind teuer bei geringen Investitionen.

Falsch. Die großen Produktionen sind extrem-teuer, das durchschnittliche Budget von Hollywood-Filmen ist längst erreicht. Teuer ist dabei vor allem das extrem detaillierte gestalten von Spiel-Umgebungen.

Spielentwicklung und Forschungen über militärische Simulationen ergänzen einander.

Die US-Arme hat ein Budget von mehreren Milliarden Dollars für Simulationsgeräte. Klar dass es Firmen gibt die das bedienen. Das sind aber meiner Meinung nach erstaunlich wenige.

Mit Nebelbegriffen [..] wird pseudo-wissenschaftlich suggeriert, dass Kinder und Jugendliche mit Killerspielen sinnvoll „umgehen“ könnten, ohne seelischen und körperlichen Schaden zu nehmen. Die Spiele sind aber gerade so angelegt, dass dies nicht möglich ist.

Und mit Fernsehen, Rockmusik und Büchern ist das natürlich ganz anders.

Was ich positiv finde: Im typischen vierschritt aus Ignorieren, Verlachen, Bekämpfen, Gewinnen (was auch immer das heißt) sind die Computerspiele wohl kurz vor dem letzten Stadium.

-- fin --

Wer ist Erfolgreich und warum?

Diese Frage  versucht Malcolm Gladwell zu beantworten - und ich finde er hat wie immer einen erleuchtenden Ansatz.

Der Kern-Punkt: Wir haben in unserer Gesellschaft ganz systematisch komplett dämliche Regeln die jede Menge Leute davon abhalten dass zu erreichen was sie erreichen können.

Und das ist Fürchterlich! Denn im Gegnsatz zu Armut, die wir nur sehr schwer lösen können, sind die meisten dieser Regeln komplett zufällig und absolut leicht zu ändern!

Ein Beispiel: Schule. In Amerika sind Reiche Kinder immer besser als arme Kinder. Wieso? Wenn man zu Beginn des Schuljahres misst, und am Ende erreichen Arme Kinder sogar einen größeren Fortschritt als Reiche - aber in den Sommerferien tut sich eine Kluft auf. Die Reichen kinder machen genau so große Fortschritte wie in der Schulzeit und die Armen quasi gar nicht.

Und die Sommerferien sind in Amerika 3 Monate lang.

Richtig Absurd wird das ganze wenn man sich anschaut wieso diese Ferien eingeführt wurden: Die Schulreformer im 19. Jahrhundert haben die Sommerferien nämlich eingeführt weil sie Überzeugt waren dass zu viel Schule bei Kindern zu Wahnsinn führt.

Doh.

Und dass passiert wenn man Politik macht ohne sich die Gründe anzuschauen wieso Entscheidungen gefällt werden und wurden. :-(

 Ganz hervorragender Podcast - unbedingt anhören.

Und noch ein Schüler der Amok-Läuft

 Dieses mal in Winnenden - was doch immerhin sehr nah an der Gegend ist, in der ich aufgewachsen bin.

Und das trifft natürlich. Jetzt sehe ich natürlich die schon wieder die Schlagzeilen dass die Computerspiele schuld sind und die Toastbrote die er gegessen hat und so weiter.

Na toll.

Da kriegt man doch die Krätze. Weil wenn man mal so richtig Zynisch auf das Problem schaut, dann ist der Amokläufer dort (wieso auch immer er das getan hat) wahrscheinlich der der mehr für die Schulen erreicht als die ganzen Politiker die ständig nur versuchen dort Kosten einzusparen.

 via

Wie funktioniert ein Bailout

Gehackt

Ich bin ja ganz erstaunt wie viel spaß es macht Web-Software zu hacken. Bisher habe ich das ja immer vor mir hergeschoben, dass ich es später machen werde...

Nun ja, jetzt ist später, ich habe mich das erste mal erfolgreich per SQL-Injection durch ein Login-Formular gehackt. Und es fühlt sich großartig an.

Muss ich definitiv öfters machen - ich denke dass sich das auch ganz ausgezeichnet als patch an Open Source Projekte schicken lässt.

(Ich will ja gar nicht wissen welche Sicherheitslücken dieses uralte Trac hier noch alles aufweißt. Hm, wird dringend Zeit für ein Update.)

Naja, später... ;)

Guter Service von Apple

Nach nicht einmal 48 Stunden war der neue Akku da.

Puh.

So Arbeitet es sich schon wesentlich entspannter.

:-)

Batterie Nasis

Seit einem Monat habe ich mich gewundert dass meine Maustaste anfängt zu prellen.

Vor einer Woche habe ich mich gewundert, weil mein Notebook einfach ausgegangen ist, obwohl eigentlich noch eine Stunde Batterie-Laufzeit hätte sein soll.

Vorgestern habe ich mich gewundert weil meine Maustaste nur noch geprellt hat.

Und das meine Batterie inzwischen so dick geworden ist, dass sie die Bodenplatte abgedrückt hat und kurz davor stand zu explodieren.

:-(

Geschwollener Akku

Pluspunkt: Apple wird per Garantie (das Gerät ist 2,9 Jahre alt, die Garantieverlängerung läuft bald aus...) eine Neue Batterie liefern. Angeblich bis Mittwoch oder Donnerstag.

Mal schaun. Bis dahin bin ich froh dass man mit Hibernate auch ohne Batterie einen Ruhezustand simulieren kann. Dauert halt nur 30 statt 3 Sekunden.

Da fällt mir ein: Bei den neuen 17" Modellen kann man den Akku ja nicht mehr herausnehmen. Was passiert dann dort eigentlich wenn der Akku schwillt? Merkt man das daran dass das Gehäuse auseinander bricht? Ein Kumpel von mir beim CCC hier meinte das die Batteriehersteller das Problem inzwischen gelöst hätten - immerhin wollen sie die Batterien ja auch für Autos einsetzen.

Well... Vielleicht doch noch etwas warten mit dem neuen 17" Modell?

  • Posted: 2009-02-23 19:44 (Updated: 2009-10-24 16:15)
  • Author: dwt
  • Categories: fnord
  • Comments (0)

Change you can download

Jede Menge Congressional Reports - also Ergebnisse die der wissenschaftliche Dienst des Amerikanischen Kongresses erarbeitet hat  zum download.

Fuck yeah. Wikileaks rockt mächtig!

 via

Code Review mal praktisch erklärt

Und zwar mit grandiosen schauspielerischen Leistungen. :)

Auf der Ruby-Conference 2008.

 The Ruby Code Review. A Play in Three Acts

Überhaupt finde ich Confreaks sehr cool. :)

Wenn Apple mail auf einmal keine Passwörter mehr speichert...

... im Schlüsselbund, dann möglicherweise deswegen weil man gerade  Services Scrubber verwendet hat um sein Services-Menü aufzäumen.

Und das funktioniert indem es die Info.plist eines Programms manipuliert.

Doh. Wenn das nämlich eine signierte Applikation ist (wie alle Apple-Programme) dann stimmt danach natürlich die Signatur nicht mehr. Und das bedeutet dass sie nicht mehr auf den Schlüsselbund zugreifen können.

Natürlich ohne sich irgendwo in logfiles zu beschweren.

:-/

Der neue Trend: Unfactoring

Unfactoring is nicht einfach. Man muss es immer wieder üben.

 Hier ein Schulungsvideo von der RubyConf08.

Highly advised! ;)

Die Ursachen der Finanzkrise erklärt

Blinde und Linux

Heute war ich Brunchen mit Bekannten - insbesondere war da auch ein Blinder dabei, der Linux benutzt und versucht von Windows wegzukommen.

Das war spannend. Zuerst einmal, dass Computerbenutzung für Blinde ein riesen Problem ist. Die bekommen von irgendwelchen Firmen für irrsinnig viel Geld Windows-Computer verkauft, die dann vielleicht auch funktionieren - für die sie aber 5000 € jährlich bezahlen müssen. (Ob die Zahl jetzt stimmt sei mal dahingestellt - Fakt ist, es ist teuer).

Und die Krankenkassen sind da nicht so geberfreundlich - denn wer braucht denn schon das Internet? Selbst braille-Zeilen sind wohl ein echter Kampf bis man sie kriegt. (UNGLAUBLICH wenn man sich das überlegt!)

Dabei geht es ja auch anders: Linux hat die Kommandozeile, die für Blinde schon mal ein großer Vorteil ist - und sie können freie Software selber Hacken bis Sie tut was sie brauchen.

Was wohl z.B. bei dem  Gnome Screenreader Orca auch einige tun. (Yay! More power to you!)

Prinzipiell haben Blinde mit freier Software überhaupt eine Chance, denn der Markt gibt viele Hilfen die sie bräuchten einfach nicht her. Spezielle Routenführer für Blinde? Gibt es, aber dort stehen für Berlin nicht mal die U-Bahnen mit drinn. Geschweige denn wo genau der Eingang dazu ist und ob sie aus dem Zug jetzt vorne oder hinten aussteigen sollen, damit sie gleich noch eine Unterführung unter der Straße nutzen können.

Das fand ich überhaupt das Spannendste, wo denn die Probleme liegen. Also zum Beispiel:

  • Open Office funktioniert wohl ganz gut - aber sobald man eine Präsentation im Full-Screen Modus anschaut, rendert OpenOffice offenbar die Folien als Bild - tada, die Screenreader Information fehlt und alles ist still.
  • Scannen ist ein riesen Problem. Es gibt einfach keine Software mit vernünftiger Layout- und Tabellen-Erkennung die eine genügend hohe Erkennungsrate hat. Bis vor kurzem war noch nicht mal drinn dass die Orientierung des Textes erkannt wurde...
  • PDFs lesen geht nicht. Acrobt Reader soll es wohl können - aber die freie Software noch nicht.
  • Browsen mit Firefox funktioniert gut - aber wenn man eine lange Seite schnell ein paar mal scrollt (space oder pagedown) dann dauert es manchmal bis zu einer Minute bis der Screenreader auch so weit gekommen ist.

Spannend. Das sind nicht ganz die Probleme mit denen ich gerechnet hätte. Vor allem dass GUI-Anwendungen so wichtig sind. An Firefox und OpenOffice kommt kein Blinder vorbei.

Noch ein eher abschreckendes Beispiel: Er hat an der exzellenten Freien Universität Informatik Studiert. Dabei ist er aber gescheitert, weil z.B. die Aufgabenblätter zwar als PDF kamen - aber darin nur gescannte Aufgabenblätter waren...

Peinlich.

  • Posted: 2009-01-18 14:34 (Updated: 2009-01-18 15:36)
  • Author: dwt
  • Categories: fnord
  • Comments (0)

The Git Index considered harmful

Endlich hab ich mal eine  ordentliche Quelle gefunden wofür  der Index bei  GIT gut ist.

Kurz erklärt: Der Index ist eine Vorstufe für jeden Commit. Man comittet zuerst in den index mit git add some_file und comitted dann den index ins repository mit git commit. Es sei denn man sagt git commit some_file in dem fall wird es direkt comitted, oder man wählt eines der anderen kommandos die irgend etwas merkwürdiges mit dem index anstellen, dann weiß man in der Regel gar nicht mehr was Sache ist.

Das hab ich nie verstanden - denn wieso noch mal eine Stufe mehr, wenn man doch sowieso lokal arbeitet und alles was man verbockt hat wieder verändern kann bevor man es pusht?

Ah well. Es gibt offenbar drei Hauptgründe:

  1. Der Index hilft besser mit einer dirty workspace zu leben
  2. Der Index hilft noch mehr über einen commit nachzudenken und ihn zu verfeinern bevor man ihn macht
  3. Linux Torvalds hat den Index erfunden und will ihn behalten

Zu 1. Eine Dirty Workspace ist manchmal praktisch

Die Idee ist dass es Änderungen gibt die jeder in seinem lokalen Checkout hat aber niemand einchecken will. Z.B. die debug-flags, oder der andere Pfad in einem makefile. Es ist viel komfortabler jedes mal zu sagen was man committen will, als jedes mal daran zu denken was man nicht committen will. Ganz davon abgesehen dass man irgendwan nicht daran denkt das man etwas nicht machen wollte. Been there, done that.

Dieses Problem hab ich auch ab und an. Zum Beispiel dieses komische File dass einen Build-Counter für den Build-Bot enthält. Eigentlich sollte das gar nicht in das repository. Aber dann war es doch drinnen. Und es nervte eigentlich nur, weil jeder lokale compile es erhöht hat. Und wenn es dann doch mal jemand comitted hat, gab es für jeden anderen natürlich einen konflikt. Sehr nervig. Oder der Debug-Flag, den man irgendwo tief in einem Framework einschalten musste. Den will ich natürlich auch nicht in einem Release haben.

Ich finde allerdings dass der Index überhaupt keine gute Lösung für derartige Probleme ist. Wenn ich lokale changes habe die ich nicht committen will, dann würde ich die viel lieber als "ignore" markieren, als jedes mal alles andere zu committen.

Ein bekannter formulierte das mal so, dass er oft code hat der den Code Testet den er comittet - und dass er den nicht im Repository haben will. Diese Variante des Arguments finde ich allerdings noch schrecklicher, weil ich in jedem Fall den Testcode auch im Repository haben will. Gerade. Damit ich später regressionstests durchführen kann. Automatisiert natürlich. Alleine der Gedanke dass der Testcode gleich wieder weggeworfen wird... *schauder*

Zu 2. Erst noch mal drüber nachdenken ist eine gute Idee

Das finde ich ein wesentlich besseres Argument: Man soll sich über einen Commit Gedanken machen bevor man ihn tut. Und damit man das tut soll man genau auswählen was in ihn hinein kommt.

Commendable.

Allerdings nur wenn man nicht richtig darüber nachdenkt. Denn git ist ja ein distributed VCS. Das heißt, alle commits sind erst einmal lokal. Und kommandos die den letzten commit einfach rückgängig machen oder noch mal neu gibt es jede menge. Sogar um mehrere History-Schritte zurück zu kommen. (Und die braucht es sowieso, denn selbst mit Index macht man immer wieder Fehler.)

Oops.

Also bleibt übrig: der Index ist ein zusätzlicher Abstraktionsschritt der keinen Wert hinzufügt, sondern nur kompliziertere Bedienung erzeugt.

Hm. Das heißt natürlich frei nach Occam, dass man den Index als überflüssiges Konzept 'über die klinge springen lassen' sollte.

Zu 3. Linus hats erfunden und will es behalten

Dass scheint mir der eigentliche Grund zu sein. Wie Torvalds es selber schon gesagt hat:  I have an ego the size of a small planet. Und daher wird es den Index auch weiter geben. Auch wenn es eine schlechte Idee ist. Und die git-Benutzer werden sich damit arrangieren, da niemand die Lust hat das wirklich auszufechten.

Zumindest ist das meine Einschätzung.

Schade eigentlich.

Hier mein Vorschlag: Für alle Index-Liebhaber gibt es eine Option in ihrer .gitrc mit der sie den Index und wie er heute ist aktivieren können. Für alle anderen gibt es den vernünftigen default wert, der den Index einfach wie bei allen anderen Versionskontrollsystemen versteckt. Das macht man am besten so, dass bei einem Update, die .gitrc so verändert wird, dass alle die git updaten den index behalten und alle die git neu einrichten den index explizit aktivieren müssen. Dass sollte am wenigsten Geschrei erzeugen.

Kommentare bitte per mail an spamfaenger ät gmx.de

Update: Es gibt noch viel mehr leute die mit der Git UI probleme haben. :)

No software is free and spreading that misconception is harmful.

Da hat eine Lehrerin in Amerika doch tatsächlich ihren heiligen Eifer entdeckt und muss ihre Schüler davor schützen freie Software zu benutzen. Daraufhin hat sie die Linux-CDs eines Schülers konfisziert und klagte dann per e-mail den Projektleiter des Linux-Projekts an.  Weil es Software die Umsonst ist nicht geben kann und darf.

Unglaublich. Peinlich.

Und das wird immer schlimmer je weiter man ließt.  via

Epson All in One

 Schickes Gerät. Vor allem ist  der Support von Epson auch gar nicht so schlecht. Per Chat wurde mir da doch sehr schnell geholfen die Scan-Funktion so umzubiegen, dass sie auch über den Print-Server und damit über das Netzwerk funktioniert.

Da hatte sich meine Hartnäckigkeit doch gelohnt - denn laut Manual geht das nämlich nicht.

Apropos Manual... Das ist so mit DRM vollgesaut, dass man daraus nicht mal ein Stück Text herauskopieren kann (nicht mal für ein Zitat!).

Zum Kotzen.

Und an sich darf man es auch nicht speichern, kopieren, archivieren... unglaublich.

Das Gerät gefällt mir ja ganz gut - aber die Software ist unter jeder Kanone. Ach ja, neben den Manuals die ja noch nicht mal alle Features enthalten.

25C3 vorbei

war das anstrengend.

Die Highlights waren für mich das  Piratenprojekt zu Liquid Democracy und die  Bierfass-Verleihung für den OpenTracker. Der Rest war natürlich auch grandios - aber darüber schreiben schon andere und ich später auch noch mal.

Mein Persönliches Ergebnis für den 25C3 ist eine kleine Implementierung einer Proxy-Voting-Engine in Python - das ist aber natürlich mehr ein Proof of Concept denn irgend etwas anderes - und das muss man jetzt erst einmal irgendwo implementieren um es tatsächlich benutzen zu können.

Windows für Atom U-Boote

 BAE führt in den UK die Konversion der Kontrollsysteme durch.

Gut oder schlecht?

Gut
"Blue Screen of Death" hat eine ganz neue Bedeutung... Vielleicht ist das die ultimative Befriedungsmaschine?
Bad
Windows kann Atomraketen abfeuern? Oder irgend welche Waffen? *angst*

Wer hat Angst vor extremistischen Moslems?

Na, hände hoch?

Ich hab hier ein neues Angst ziel. Eines das viel näher ist! *grusel*

Dance and go to hell

  • Posted: 2008-12-14 10:20 (Updated: 2009-10-24 16:14)
  • Author: dwt
  • Categories: fnord
  • Comments (0)

Open Trace

Zeigt was die Vorratsdatenspeicherung bedeuten kann. Eine Webseite auf der man surfen kann - und während dessen werden ein paar der Fingerabdrücke die man hinterlässt ausgewertet und daraus ein Profil erstellt.

 Wirklich hochspannend was dabei herauskommt.

Das passt finde ich hervorragend zu der Tatsache, dass im letzten Jahr  in 2200 (zwei tausend zwei hundert) Gerichtsprozessen von Richtern angeordnet wurde solche Verbindungsdaten zu nutzen. ( via)

Großartig. Unsere Regierung kann nicht einmal sagen dass die Daten irgend etwas genutzt haben, aber jeder bedient sich schon mal kräftig daran. Von wegen "nur in schwersten fällen".

p.s.: Wenn man zwei drei Webseiten aufgerufen hat, muss man oben in der Mitte auf "Profil auslesen" klicken um sich den wirklich beängstigenden Teil anzusehen.

The first and second rule of optimization are

(according to  Michael A Jackson)

  • The First Rule of Program Optimization: Don't do it.
  • The Second Rule of Program Optimization – For experts only: Don't do it yet.

Bisher dachte ich immer dass es sich dabei nur um eine andere Formulierung des guten alten: "First make it work, then make it fast" handelt.

Bis es mir jetzt wie Schuppen von den Augen fiel, dass da noch viel mehr dahinter steckt. Denn natürlich lässt sich der Spruch auch auf das tatsächliche Optimieren selber anwenden.

Wie macht man etwas schneller? Am besten in dem man es nicht tut.

Und wenn das nicht geht: Mach es zu einer anderen Zeit!

Doh.

Gründung Bürgerplattform Moabit: Wir sind da!

Bühne So heißen sie.

Heute fand sie statt. Die Gründung. Zumindest haben die Veranstalter dass so genannt.

Genau genommen fand die auf 90 minuten geplante Veranstaltung (in einer  Boxhalle!) nämlich nach zwei ein halb Jahre Vorarbeit mit den ganzen lokalen Vereinigungen statt. Die haben sich dort getroffen - jeder Verein oder Kirche oder Gemeinde oder irgend etwas hat sich vorgestellt und auch gesagt wie viele Leute sie mitgebracht haben.

Immer unterbrochen von fetziger Trommelmusik und auch ein paar Sketchen.

Und der Saal war proppevoll! So voll, dass der Veranstalter gebeten hat, dass die Jungen Leute aufstehen mögen für die Älteren. Und die Teilnehmer haben applaudiert und es gemacht. (Detail: die meisten Ordner waren Frauen - und nicht wenige mit Kopftuch)

Großartig.

Dann hat sich die Plattform vorgestellt und anhand von Adjektiven verortet:

  • Bunt: Weil so verschiedene Gruppen, Religionen, Geschlechter und Generationen dabei sind
  • Unparteiisch: Weil keine Wählerstimmen gebraucht werden
  • Kraftvoll: Weil über 40 Organisationen vertreten werden
  • Wissend: Weil alle Mitglieder aus Moabit und Wedding sind und daher wissen was die Probleme sind
  • Zielstrebig und Selbstbewusst: Weil man für Ergebnisse Arbeitet, kompromissbereit, aber hart in der Sache
  • Langlebig: Als dritte Kraft neben Wirtschaft und Politik, als im positiven Sinne: "Unruhestifter und Anstifter!"

Saal

Danach haben alle Teilnehmenden Organisationen mehrsprachig und mit vielen persönlichen Grußworten vorgestellt. Jeweils mit erklärung warum sie teilnehmen und mit wie vielen Leuten sie gekommen sind: 10, 15, 12, 49, 160... Alles zusammen waren etwa 1200 Leute anwesend (und das war eine realistische Zahl)

Sätze daraus: "Gemeinsam sind wir Stark!", "Misch dich ein, misch mit!", "Let us stay together, work together, fight together, for the common good!", "Ein Verantwortlicher musste jemand im Krankenhaus besuchen, Kieferbruch, Intolleranz und der übliche Baseballschläger.", "Der Islam fordert uns auf uns zu engagieren", "Zwischen Knast und Kanzleramt", "Geht nicht, gibts nicht!"

Und damit war die Bürgerplattform  Wir sind da! gegründet.

Ach ja, als Abschluss der Vorstellungsrunde hat  Dico noch Werbung für die Fortbildungen gemacht die sie in Community Organising für die Teilnehmer der beteiligten Gruppen anbieten.

Und die Arbeit fing an. Einzelne Community-Leader haben erzählt was in den Bereichen die Sie überblicken jeweils ein großes Problem ist. Zwei Beispiele: Die meisten Migrantenkinder schaffen es nicht in ein Gymnasium zu kommen sondern müssen stattdessen Arbeiten - daher kriegen sie zu wenig Bildung mit und schlechtere Jobs. Oder das vor einer Kirche ständig gesoffen wird, bis Schießereien stattfinden.

Dann musste ich leider gehen, obwohl ich gerne geblieben wäre.

Hoch spannend.

Das Life Bildarchiv ist online gegangen

Wohl eines der wichtigsten Bildarchive unserer Zeit.  Hier.

Besonders beeindruckend finde ich die Übersichtsbilder über Hiroshima.

 via

Warum ich C++ hasse

Weil es so irrsinnig schwer zu debuggen ist.

Jeder Programmierer verwendet ein anderes Subset irgendwelcher obskuren features, die man eigentlich nicht bräuchte und fürs debuggen muss man sie dann alle kennen.

Gnah.

Zum Beispiel das hier: Aus Performance-Gründen wird der Speicher für Objekte beim initialisieren nicht auf einen neutralen Wert (0/NULL/whatever) gesetzt, sondern (!!!) uninitialisiert gelassen. (Nein, das ist kein Opt-In für die stellen wo man die Performance wirklich braucht, sondern tatsächlich der Standard)

Das geile daran: Vergisst man im Konstruktor dann eine Variable zu initialisieren, dann gibt es auch keine Warning...

Also habe ich jetzt Tageweise hinter her debugged, weil an einer Stelle halt eine Variable nicht in der Konstruktor-Initializer-Liste aufgeführt - und dieser Wert dann an das System weitergereicht wurde. Tja, schade eigentlich. Dadurch wurde dann der TCP-Sendspace eben auf einen zufälligen Wert (18 Millionen) konfiguriert und verständlicherweise reichten dafür die Buffer nicht mehr aus...

Und das alles weil C++ so hardcore Performance-Orientiert ist. Wo doch heute jedes Kind lernt, das man etwas erst zum funktionieren und dann schnell kriegen muss.

Gnah.

Apple iPhone Tech-Talk

War ja ganz nett auf den  Apple iPhone TechTalks - alles zusammen allerdings etwas langweilig weil wenig in die Tiefe. :-(

Lustiges Detail am Rande: Zwar war die Veranstaltung mit Anmeldung und schon lange vorher ausgebucht - aber trotzdem kam man vor Ort noch gut rein - das nächste mal kann man es also auch ohne Anmeldung einfach mal versuchen.

Interessant auch, dass das ganze Event unter NDA stand, das heißt, obwohl ich dort war und nur Informationen verbreitet wurden die alle ohne NDA aus der API erhältlich waren, darf ich nicht darüber erzählen was es dort zu hören gab. Das fand ich so strange dass ich doch gleich einen der Vortragenden Apple-Mitarbeiter gefragt habe wie das zu verstehen ist: Dieser hat sich dann entschuldigt und bestätigt, dass natürlich alle Informationen die aus den APIs kommen frei bloggbar sind, aber eben nicht worüber auf dem Event darüber gesprochen wurde.

Schade eigentlich.

Grundeinkommen

Spannend wars heute auf  dem Kongress.

Vormittags der Workshop über Simulationsmodelle über die Auswirkungen der Einführung von Grundeinkommen auf ein Modell der österreichischen Volkswirtschaft (in dem sich zeigte dass Gewinnsteuerfinanziertes Grundeinkommen das verwendete Modell stärker destabilisierte als ein durch negative Einkommenssteur finanziertes.

Well, dafür das der verantwortliche für das Modell nur einen Tag lang simuliert hat...

Danach ging es noch ein bisschen mit zellulären automaten weiter um damit zu simulieren wie sich das Wissen um Grundeinkommen in der Bevölkerung ausbreiten konnte.

Beides nicht großartig, aber doch ein interessanter Einblick darin dass auch in der Simulation eben nur mit Wasser gekocht wird. Will sagen: Das hätte ich auch gekonnt.

Danach gabs dann einen Argumentationsworkshop gegen Stammtischparolen und Killerargumente - das war mal was praktisches und für mich (trotz einer was Argumente angeht eher mageren Ausbeute) damit das Highlight des Tages.

Schlussendich noch eine (gefühlt endlose) Podiumsdiskussion. Bei der ich wie auf Kohlen saß - mir ist nach wie vor noch nicht klar wieso ich das so extrem nervig fand. Naja.

Immerhin kam mir dabei noch eine interessante Idee: Viel beschworen ist ja die Angst vor der Arbeitsunwütigkeit der Bevölkerung wenn es ein Grundeinkommen gibt. Dass die dann nicht mehr Arbeiten würden und es sich nur noch gut gehen lassen werden.

Tja, das kann man doch einfach Testen. Alle Gemeinden < $GRENZWERT dürfen sich für eine Lotterie anmelden. Die Leute die in der Gemeinde leben die Gewinnt (und nur die die zu dem Zeitpunkt dort leben) kriegen dann von da ab bis an ihr Lebensende ein garantiertes und bedingungsloses Grundeinkommen.

Voila - schon weiß man bald viel mehr darüber wie sich Menschen mit Grundeinkommen verhalten. Und dann kann man bald die Angst dass die dann ja alle nicht mehr Arbeiten würden fundiert wiederlegen. (Ok, kann man IMO jetzt auch schon, aber es wäre halt doch etwas anderes)

Bonus wäre natürlich wenn man gleich mehrere solcher Versuche macht um verschiedene Rahmenbedingungen zu testen.

Billiger als ein Bankencrash wäre es allemal - und viel Produktiver.

Captcha again

Ich find User-Ideen großartig

Einfach mal kreativ mit der Techik umgehen. Mal probieren und testen und dann die Erfahrung austauschen.

http://failblog.files.wordpress.com/2008/09/fail-owned-yahoo-science-mirror-fail1.jpg ( via)

Unglaublich über sowas einfach herzuziehen.  Einfach die eingebaute Kamera als Spiegel verwenden. Zum Beispiel  damit.

If you want to count on it - pirate it

  • Posted: 2008-10-13 09:17 (Updated: 2008-10-13 09:18)
  • Author: dwt
  • Categories: fnord
  • Comments (0)

Das Gedicht zum Bankendomino

(via  Fefe, von  Brokerz)

Wenn die Börsenkurse fallen,
regt sich Kummer fast bei allen,
aber manche blühen auf:
Ihr Rezept heißt Leerverkauf.
Keck verhökern diese Knaben
Dinge, die sie gar nicht haben,
treten selbst den Absturz los,
den sie brauchen - echt famos!

Leichter noch bei solchen Taten
tun sie sich mit Derivaten:
Wenn Papier den Wert frisiert,
wird die Wirkung potenziert.

Wenn in Folge Banken krachen,
haben Sparer nichts zu lachen,
und die Hypothek aufs Haus
heißt, Bewohner müssen raus.

Trifft's hingegen große Banken,
kommt die ganze Welt ins Wanken -
auch die Spekulantenbrut
zittert jetzt um Hab und Gut!

Soll man das System gefährden?
Da muss eingeschritten werden:
Der Gewinn, der bleibt privat,
die Verluste kauft der Staat.

Dazu braucht der Staat Kredite,
und das bringt erneut Profite,
hat man doch in jenem Land
die Regierung in der Hand.

Für die Zechen dieser Frechen
hat der Kleine Mann zu blechen
und - das ist das Feine ja -
nicht nur in Amerika!

Und wenn Kurse wieder steigen,
fängt von vorne an der Reigen -
ist halt Umverteilung pur,
stets in eine Richtung nur.

Aber sollten sich die Massen
das mal nimmer bieten lassen,
ist der Ausweg längst bedacht:
Dann wird bisschen Krieg gemacht.

Wie kriegt man eigentlich mit was sich im Linux Kernel so tut?

Schließlich gibt es dort nicht so ausgezeichnete release notes wie man sie von  Eclipse,  Gnome oder  Ubuntu kennt.

Die Antwort ist überraschenderweise:  Heise lesen. Und sogar  optional auch auf englisch.

Die gegenwärtige Finanzkrise ist...

Darfs noch etwas mehr Atommüll sein?

Gerne auch Freihaus...

 Extra 3 hat es mal wieder genagelt.

:-)

_HiStOrY_V2_

Mit ein bisschen Hilfe von meinen Freunden...

Heute hab ich mal wieder die aktuelle Version von  Bazaar (1.7.1) ausprobiert. Soweit ganz schnuckelig. Sogar der SVN Checkout von  Adium hat hervorragend geklappt.

Ich muss sagen, beeindruckend.

Nur mit dem Plugin  bzrtools hatte ich Schwierigkeiten, denn die darin enthaltene shell (ein geiles feature) zu benutzen brachte bzr reproduzierbar zum Absturz. :-(

Stellt sich mit hilfe von #bazaar und nach einigen Detours über den Python Debugger (nice!) und  dtruss (nice!) heraus dass es an der libreadline liegt.

Die hat sich nämlich geändert und erwartet inzwischen am Anfang eines History-Files als allererste Zeile diesen eintrag: _HiStOrY_V2_.

Na toll. Und ansonsten stürzt das Programm einfach ab. Also wer sich das ausgedacht hat, der gehört aber auch echt erschossen. Wenigstens die Fehlermeldung hätte vernünftig sein können. Grumpf.

Ausnahmen vs. Regeln in der Usability

Heute hatten wir wieder ein schönes Beispiel für Usability unter Windows. Zuerst das Setting. Eine Bekannte hatte auf einem USB-Stick Fotos mitgebracht und diese sollten auf einem Windows-Vista Notebook dann angeschaut werden.

Das ganze wäre dann fast daran gescheitert, dass auf dem USB-Stick ein Trojaner drauf war und sich Windows nach Entdeckung und Beseitigung des Virus (durch irgend ein Third-Party-Programm) standhaft geweigert hat den Stick im Explorer anzuzeigen. Je nachdem in welchem der USB-Stecker man den Stick einsteckte erkannte Windows nicht mal das überhaupt ein USB-Stick eingesteckt war. Aber ich lenke ab, denn das Problem konnte ich mit etwas Windows-Shell dann doch lösen.

Zum Thema: Nachdem der Ordner mit den Bildern im Explorer aufgemacht wurde, ging es nach einem Doppelklick auf das erste Bild los - der Bildbetrachter ging auf und die Slideshow ging los.

Und das ist das Thema: Unter Windows öffnet der Bildbetrachter Bilder anders als sonst Programme Dateien öffnen - implizit wird dort nämlich der ganze Ordner geöffnet, damit man leicht eine Slideshow mit den Bildern starten kann.

Und das hat doch immerhin so gut funktioniert, dass die Slideshows doch zusammen kamen.

Das bringt aber die Abstrakte Frage mit, was passiert wenn solche "Ausnahmen" immer mehr werden. Verstehen die Anwender dann trotzdem noch das allgemeine Prinzip was dahinter liegt? Sind sie in der Lage zu abstrahieren und das Verhalten an anderen Stellen vorherzusagen?

Ich sehe ein Problem darin, dass Computer für die meisten Menschen "magisch" sind - man lernt nur die magische Formel, die zu einem konkreten Ziel führt. Dass hinter den 30 Formeln die man mit der Zeit lernt ein Prinzip steht geht dann nur allzu oft verloren.

Zurück zum Beispiel: Am Mac ist es so, dass man, wenn man eine Datei öffnet, dann auch nur diese Datei aufgeht. Und das ist auch so wenn man ein Bild öffnet. Unter Windows ist das anders, denn man öffnet im Bildbetrachter (wehe wenn die Zuordnung verloren geht, weil man ein Bildbearbeitungsprogramm installiert hat) der von sich aus schon die nächsten Bilder kennt und es einem leicht macht eine Slideshow zu starten.

Was ist Besser? Im Beispiel waren relative Laien in der Lage eine Slideshow zu starten - das ist ein Plus. Hätten sie das auch auf einem Mac geschafft?

Wann ist es Besser so eine Ausnahme vom regulären Benutzungs-Konzept zu machen und wann nicht? Für mich ist die Grenze völlig unklar - nur dass es irgendwann den Punkt gibt, wo zu viele Ausnahmen selbst zum Problem werden.

Applicationen in den !AppStore zu kriegen...

... ist schwer.

Glücklicherweise  wurde der Prozess endlich offen gelegt!

2008/09/13/13.40

Flüssigkeit != Flüssig

Was ich als Spaß alles verpasst habe, weil ich  sowas  noch  nicht gesehen habe.

Damit ist sogar endlich geklärt wie es  Jesus geschafft hat über das Wasser zu gehen.

:-)

Ach ja,  die Erklärung (Wikipedia) und  mehr details (Wikipedia) und  eine Anleitung zum Selber herstellen.

Have phun!

Sicherheit und Parkhäuser

Heute hatte ich das witzige Erlebnis dass wir in ein Parkhaus gefahren sind - und einfach keinen Parkplatz gefunden haben.

Ok, soweit wars noch nicht spannend - aber was ich hoch-interessant fand, ist dass wir dann beim Rausfahren nicht zur Kasse gebeten wurden. Das macht Sinn, denn wer keinen Parkplatz findet, ist natürlich Dreifach angepisst wenn er dann dafür auch noch Zahlen muss. (Und vielleicht während dessen auch noch den Ausgang versperrt.. :)

Ich halte es für sehr wahrscheinlich, dass jedes Parkhaus so funktioniert. Cool. Denn das bedeutet, dass man prinzipiell jedes Parkhaus umsonst benutzen kann - man muss sich nur unmittelbar vor dem herausfahren eine neue Marke besorgen.

:)

(Ok, das mag nicht soo leicht sein, aber im Prinzip...)

2008/09/05/19.08

Python != Funktionales Programmieren

--- zumindest scheint es so.

Das hier zum Beispiel:

#!/usr/bin/env python
# encoding: utf-8

def counter_generator():
    current_value = 0
    def counter():
        current_value += 1
        return current_value
    return counter

import unittest
class ClosureTest(unittest.TestCase):
    def test_counter(self):
        self.assertEquals(1, counter_generator()())

if __name__ == '__main__':
    unittest.main()

Wenn man das ausführt dann kriegt man den wenig aussagekräftigen Fehler UnboundLocalError: local variable 'current_value' referenced before assignment. Oder mit anderen Worten: "Wiebidde?"

Kommentiert man current_value += 1 aus, funktioniert das ganze (ok, bis auf den dann fehlschlagenden Testcase).

Immerhin kommt man dem Problem dann auf die Spur (ich und Felix haben das leider erst herausgefunden nachdem wir auf #python nachgefragt haben...) Python kann nämlich seine Scopes nicht vernünftig. Das heißt, man kriegt keinen schreibenden Zugriff auf die Variablen eine Funktion weiter draußen - nur lesend. Nur dass die Fehlermeldung natürlich total mist ist.

Grah.

Interessanterweise geht diese Lösung auch nicht

#!/usr/bin/env python
# encoding: utf-8

def counter_generator():
    workaround = object()
    workaround.current_value = 0
    def counter():
        workaround.current_value += 1
        return workaround.current_value
    return counter

import unittest
class ClosureTest(unittest.TestCase):
    def test_counter(self):
        self.assertEquals(1, counter_generator()())

if __name__ == '__main__':
    unittest.main()

Für hinweise wieso bin ich dankbar.

Vielleicht kriegt Python dass ja irgendwann mal hin. In der Zwischenzeit hilft dieser Workaround:

#!/usr/bin/env python
# encoding: utf-8

class AttributableDict(dict):
    def __getattr__(self, attribute_name):
        return self[attribute_name]
    def __setattr__(self, attribute_name, value):
        self[attribute_name] = value

def counter_generator():
    workaround = AttributableDict()
    workaround.current_value = 0
    def counter():
        workaround.current_value += 1
        return workaround.current_value
    return counter

import unittest
class ClosureTest(unittest.TestCase):
    def test_counter(self):
        self.assertEquals(1, counter_generator()())

if __name__ == '__main__':
    unittest.main()
  • Posted: 2008-09-05 19:14 (Updated: 2008-09-05 19:14)
  • Author: dwt
  • Categories: fnord code
  • Comments (0)

UI Schlendrian bei Apple iCal

iCal - ein Programm das man lieben und hassen kann.

Einerseits, es funktioniert gut, ist ordentlich ins System integriert - aber andererseits sowas:

Wenn man einen Termin bearbeitet, dann doppelklickt man ihn. Danach öffnet sich dieser in einem neuen Fenster, in dem man dann noch einmal auf Bearbeiten klicken muss damit man ihn tatsächlich verändern kann.

Das tolle daran: Wenn man dann irgendwann mit seinen Änderungen zufrieden ist und ihn bestätigen möchte, dann stellt man fest das der "Bestätigen" Knopf auf keinen sinnvollen Keyboard Shortcut reagiert. Enter, Return, Controll-Return, Command-Return, Alt-Return - alles voll daneben.

Bisher dachte ich nur: "Naja, voll nervig" aber heute ist mir aufgefallen dass sie es sogar geschafft haben dem noch die Spitze aufzusetzen: Es gibt nämlich doch eine Tastenkombination um die gemachten Änderungen zu akzeptieren:

ESCAPE

!!!!1111!!!!(elf)!!!

Ich bin Sprachlos.

Schadenfreude ist..

 ... die schönste freude.

Stimmt einfach. :)

Wo ich gerade am lästern bin

Apple hat sich da ja einen richtigen Kracher geleistet mit ihrem  App-Store. Vor allem ist das Update-System absolut grandios gelöst.

Man geht einfach im iPhone auf den App-Store, dort in den Updates-Reiter und.... sieht nichts. Weil, da sind zwar die Updates. Aber eben nicht alle.

Ein Programm das ich mir gekauft hatte ( Things, weil die UI einfach sehr, sehr gut ist) tauchte dort nämlich nicht auf - obwohl ich es sehnsüchtig erwartete. Und das, obwohl der iTunes Store das Programm schon längst als upgedatet aufgelistet hat.

Tja, was tun? Letztlich habe ich mich dann dafür entschieden, dass ich für 8 € auch das Programm einfach noch einmal herunterladen kann. Wenigstens kann ich dann die neue Version nutzen. Und kann so mal Probieren ob der App-Store nicht vielleicht einen Bug hat und mir den Preis nur fälschlicherweise anzeigt.

Gesagt getan - da kommt dann erst eine Warnung dass der Betrag jetzt direkt von meiner Kreditkarte abgezogen wird (gut, Kreditkarte hab ich nicht, aber das ist halt ne Amerikanische Firma) und dann... dann kommt der Dialog der mir erklärt das ich das Produkt ja schon gekauft hätte und das Update daher kostenlos sei.

Pfffff. Wenn ich ein Update lade, dann will ich vorher wissen ob mich das Geld kostet! Vorher, nicht hinterher. Vielleicht.

Ganz große Klasse.

Kryptographie saugt

Und zwar gewaltig.

Heute hab ich eine Menge Zeit darauf verbrannt unserem Online-Update-System auf den Zahn zu fühlen. Das arbeitet nämlich ganz hervorragend mit  Sparkle um für unsere Applikation via  Appcast herunter zu laden, wenn eine neue Version ansteht. Und damit das auch schön sicher ist, nutzen wir ein kleines öffentlich/privates Schlüsselpärchen um das abzusichern.

Nun ja, bis heute mittag - da hat es nämlich auf einmal aufgehört und konnte die heruntergeladenen Dateien nicht mehr validieren.

Jetzt hatte ich natürlich das Problem, das ich an sich recht wenig von Crypto verstehe und erst recht wie man das von der shell aus einsetzt. Das wiederum hatte zur Folge, dass ich das nicht sofort auf der Shell nachvollziehen konnte und wir schon anfingen zu fürchten das vielleicht unsere Schlüssel abgelaufen sind.

Gott sei dank war es aber doch was anderes - denn unser Proxy hatte fieser weise einfach eine alte Version des Appcasts gespeichert und stattdessen immer die ausgeliefert - was natürlich nicht funktionierte... Grumpf.

Note to self: Nächstes mal gleich den ganzen Vorgang von Hand reproduzieren um zu sehen wo es schief läuft - und zwar angefangen von da wo das Programm anfängt. (Auch wenn in diesem Fall die Fehlermeldung wirklich eher auf einen OpenSSL Fehler hindeutete).

Debuggen ist eben schwieriger als den Code zu schreiben. Ich vermute, weil man ihn dafür wirklich verstehen muss - inklusive aller Fehler die man in seinem eigenen Verständnis hat.

P.S.: So Signiert und Validiert man ein File mit OpenSSL von der Kommandozeile:

# base 64 encoding to ease textual transmission
openssl dgst -dss1 -sign dsa_private_key.pem Important.rtf | openssl enc -base64 > signature.sig
# and decode again
openssl enc -base64 -d < signature.sig > decoded.signature.sig
# and verify
openssl dgst -dss1 -verify dsa_public_key.pem -signature decoded.signature.sig Important.rtf

Einige Fallstricke: -dss1 und -sha1 erzeugen offenbar die gleichen Checksummen (man könnte also meinen das es der gleiche Algorithmus ist) die beiden digest modi werden aber in openssl offenbar unterschiedlich behandelt. Beim Signieren löst das verwenden von -sha1 auch schön eine Fehlermeldung aus - wenn man beim Überprüfen aber -sha1 zu verwenden versucht, dann erhält man nur den Hinweis dass die Verifikation gescheitert ist - an einem falschen public key. Seeehr hilfreich liebe Entwickler.

Wie man ein Schlüsselpaar erzeugt und vieles mehr  gibts hier.

  • Posted: 2008-09-01 21:44 (Updated: 2008-09-01 21:48)
  • Author: dwt
  • Categories: fnord code
  • Comments (0)

NSToolbarItem whoes

Kleines Detail, dass man wissen sollte.

NSToolbarItems sind etwas völlig anderes als normale Controls. Sie sind nämlich keine. Sondern sie enthalten höchstens welche - aber nur als View. Das heißt, wenn eine Toolbar z.b. auf "nur Text" geschaltet ist, dann hat das Item überhaupt kein wissen darüber was in dem NSView eigentlich passiert - und daher versucht es auch überhaupt nicht etwas sinniges zu tun.

Unter Tiger zumindest. Da wird zwar alles schön angezeigt - aber machen tut das dann alles nix mehr. Unter Leopard ist es immerhin so, dass auf einen Klick die Toolbar wieder mit Bild angezeigt wird.

Tja und Lösen muss man das ganze dann so, dass man verstehen muss, das NSToolbarItems für die nur Text Darstellung ein NSMenuItem verwenden, dass man selbst anpassen muss. Steht nur in der Dokumentation lediglich als mini Absatz ohne Erklärung wieso man das braucht.

Hrmpf. Naja. Immerhin macht es Sinn wenn man versteht was sie als Design gewählt haben.

Aber wieso sie sich für dieses Design entschieden haben, verstehe ich absolut nicht. Sie hätten ja auch gleich ein NSControll als content nehmen können - und wenn das ein Target und eine Action hat dann einfach die wiederverwenden...

Aber neee....

  • Posted: 2008-08-21 20:20 (Updated: 2008-08-25 23:45)
  • Author: dwt
  • Categories: fnord code
  • Comments (0)

Usability und Programmierer

Ich habe ja schon lange den Verdacht, dass das allgemeine Vorurteil das Programmierer schlechte GUI-Designer sind vielleicht nicht ganz korrekt ist.

Jetzt habe ich endlich den Beweis: Gutes GUI Design ist wie gutes API-Design - die allermeisten leute können es nicht.

 Das hier zum Beispiel  gethostbyname() ist teil der libc und gibt einem zu einem Hostnamen die Daten aus einem DNS-Lookup zurück.

Well.

Nur das wir jetzt eben mal zwei Tage darauf verbrannt haben herauszufinden, dass dieses gethostbyname so dämlich ist, dass es niemals nicht von sich aus checkt ob sich vielleicht seit das Programm gestartet wurde, die Netzwerkeinstellungen irgendwie verändert haben könnten. Egal wie lange das Programm schon läuft...

Groooßartig.

Dafür muss man nämlich die Funktion  res_init() aufrufen. Ach ja, und wann man das tut rät man einfach. Weil einen Callback gibts dafür natürlich nicht. Ach ja, und in der Manpage von gethostbyname steht natürlich auch nix über res_init.

Gnah.

Das ist für mich ein Musterbeispiel für eine verkackte API - eine API deren Benutzerfreundlichkeit gegen null geht.

Ergo: Programmierer können Benutzeroberflächen machen - aber die meisten eben nicht. Und das müssen wir alle dann wieder an den APIs erleiden die sie designen.

Hab ich schon mal erwähnt das ich die libc immer weniger mag?

Was steht eigentlich in der EU-Verfassung?

Ehrlich, wer weiss das?

 Er hier weiss als Kritiker dazu viel.

Persönlich finde ich ihn reichlich unerträglich, inhaltlich ist er aber hochspannend.

Zum Beispiel wusste ich nicht das man aus der Europäischen Union so ohne weiteres austreten kann. Als einzelnes Land.

Er, dass ist  Prof. Dr. Karl Albrecht Schachtschneider der schon einige Verfassungsbeschwerden (davon einige Erfolgreich) hinter sich gebracht hat.

Also absolut zuhörenswert.

Unsere neutrale und gute Presse

Seit ein paar Jahren muss ich mich mühsam mit dem Gedanken anfreunden, dass unsere Presse vielleicht doch nicht das gelbe vom Ei ist.

Well, aus persönlicher Erfahrung wird man klüger.  Spannend finde ich, das inzwischen auch immer mehr Journalisten dieses Problem einsehen und durchaus auch selbstkritisch sein können.

Besonders spannend finde ich die Beschreibung der Journalistentätigkeit in fremden Ländern. Man fliegt hin, und hat dort am Ziel zwei Menschen die einem Helfen. Ein Übersetzer und ein Fixer. Der letzte ist spannend - denn das ist der, der dem Journalisten die leute vermittelt, die in extrem kurzer Zeit das sagen können, was er hören will.

Wunderschöne Objektivität.

Mehr davon.

(via  fefe)

Beweismaschine

Obama war doch in Berlin..

..und hat da gesprochen.

Ganz hervorragend dazu  der Kommentar von Jon Stewart

I think, the america flags are broken… they're not on fire […] You know, […] there's something about a charismatic leader, rallying huge crowds of Germans in a large public square…

*rofl*

Zuverlässiger Spamschutz

kann so einfach sein.

Man muss einfach nur ein Captcha einbauen, dass "zuverlässig" zwischen Mensch und Maschine unterscheidet.

Well, zuverlässig.

Ich jedenfalls fühle mich jetzt offiziell zur Maschine geadelt, denn  bei diesem Captcha bin ich einfach nicht weitergekommen. (Man muss noch sein Alter bestätigen, damit man das Captcha sieht.)

Doh.

Kunst und Programmierung: Was macht APIs schön?

Neulich beim Diskutieren mit  Felix kam wieder die Frage auf, die schon viele Flamewars ausgelöst hat.

Was macht APIs schon?

Das lässt sich natürlich nicht beantworten - aber an Beispiele kann man dass sehr konkret besprechen:

Das fängt ganz vorne an: Namensgebung der Klassen. In Python ist es guter Stil, das man alle Namen so kurz wie irgend möglich macht.

Das hat zur Folge, dass leider aus den Funktionsnamen so gut wie nichts über die Anzahl und die Typen der Argumente abzuleiten ist.

Und das heißt, das man entweder in der API-Doku nachsieht, oder es halt wissen muss.

Gar nicht schön.

Cocoa dagegen funktioniert so, dass vor jedem Argument ein Stück Methodennamen kommt. Und es ist Usus, dass man dieses Stück Methodennamen verwendet die Argumente zu erklären, Beschreiben oder zumindest deren Typ anzugeben.

Damit kann die billigste Autocompletion fast jede API-Doc ersetzen. Zusammen mit den strikten Regeln wie Methoden zu bennen sind (und z.B. [welche Abkürzungen in Namen verwendet werden dürfen]) kann man damit fast alle Methodennamen hervorragend raten und braucht noch weniger Trips in die Dokumentation.

Hier mal ein paar Beispiele:

[NSException raise:NSInternalInconsistencyException 
            format:@"'format' allways means that there %@ %@", 
                       @"is format string support", @"very handy. :)"];

[aDictionary setObject:@"anObject" forKey:@"aKey"];
// No more confusion which is first, key or value

// or if you do GUIs and want to ingegrate with other applications
[[NSWorkspace sharedWorkspace] openFile:aPath
    fromImage:anImage at:theLocationInWindow inView:aView];

Keine Konfusion an dieser Stelle. Kommentare werden viel seltener gebraucht, da sich der Code ausgezeichnet selbst dokumentiert - in jedem fall viel besser als ähnlich guter Python Code.

So. Morgen gehts weiter mit der anderen Seite - was mir an Python besser gefällt als an Obj-C.

!TimeMachine auf beliebigem NAS

Tja, nach anfänglichem Erfolg mit meinem NAS? muss ich leider doch geschlagen geben.

Auch wenn alles zum Funktionieren zu bringen war, bricht jeder Backup auf den NAS so nach etwa 1-6 Gigabyte ab und ist nach dem zweiten Restart gar nicht mehr zum starten zu überreden (angeblich weil die Backup-Festplatte Schreibgeschützt ist.

:-(

Ich probier es jetzt mal mit einem anderen Hersteller.

Trac, die Webentwicklungsplattform

Es gibt ja verschiedenste Frameworks die total toll sind um darauf aufbauend Webseiten-Entwicklung zu machen.  TurboGears,  Django,  Ruby On Rails, etc.

Und was muss ich feststellen? Ich treibe Webentwicklung in einem Framework, der es selber gar nicht sein will.  Trac.

Irgendwie ist das eine Liebe und Hass-Beziehung. Einerseits finde ich das Prinzip gut und mir gefällt wie es umgesetzt ist. Andererseits kotzt mich der Code in Trac zum Teil gewaltig an.

Sowas von Kompliziert. Bäh.

Also wieso mache ich mir den Stress?

Weil ich später auf der Benutzer-Seite nicht so viele verschiedene Tools einsetzen will. Ich will meinen Blog schreiben, im Wiki Arbeiten und meine Software verwalten - alles ohne extra Aufwand zu treiben, damit es sich integriert.

Dabei ist es logisch betrachtet viel mehr Aufwand das alles in einem Tool zusammenzukriegen, als einfach ein paar gut geeignete Tools zusammenzuwerfen.

Na mal schaun. Für's erste mach ich mal weiter mit dem Blog - immerhin kann man damit jetzt schon posten und kriegt sogar eine Fehlermeldung wenn man vergisst einen Titel zu vergeben. :-) Dauert also nicht mehr lange bis ich das hier fürs Bloggen einsetzen kann / werde.

iPhones bei O2 Germany?

Gerade hat mich meine "Tarifberaterin" angerufen und mich darauf hingewiesen das ich meinen Vertrag erneuern könne.

Auf meine Frage wie es denn da mit den iPhones aussieht erhielt ich dann eine überraschende Antwort:

"Ja klar, das dauert aber noch bis zum 11. bis die auf den Markt kommen, in welchem von diesen drei geschäften möchten sie den Vertrag denn dann abschließen?"

Doh.

Also entweder:

  • Sie will mich verarschen, damit ich doch einen Tarif über sie Abschließe
  • Sie war völlig Dämlich und hat nicht verstanden das O2 keine iPhones hat
  • O2 hat einen Deal, den sie jetzt ausgeplaudert hat.

Letzteres kann ich mir aber nur sehr schwer vorstellen - denn diese Neuigkeit wäre ja der Vollhammer für die Telekom. Bleibt eigentlich nur noch Möglichkeit eins und zwei.

Ersteres fände ich reichlich geschmacklos - vor allem, was soll dann danach kommen?

Bleibt eigentlich nur noch Möglichkeit zwei. Dagegen spricht allerdings das sie doch sehr überzeugt und resolut klang und auch offenbar diese eindeutige Liste von drei Geschäften in Berlin hatte wo das gehen wird.

Hmm....

Brainworks in presentation

 Garr Raynolds spricht mal wieder.  Seinen Blog verfolge ich ja schon lange - und habe ihn noch nie sprechen hören.

Daher war ich auch am Anfang etwas enttäuscht, da er (IMO) viel besser Schreibt als er spricht. Aber er kommt rein und hält letztlich eine sehr gute Präsentation - mit dem Thema wie man präsentieren soll (nach ihm).

 Den Vortrag kann ich daher nur empfehlen.

p.s.: By the way: Durch den Vortrag bin ich auch auf  Brain Rules ein Buch von John Medina gestoßen, der aus der Sicht eines Molekularbiologen beschreibt was wir über das Gehirn wissen und wie wir uns demnach verhalten sollen.

Good stuff. (Buch gerade bestellt)

Stop Shopping!

 Bloggalujah to ya all!

Now Introducing:  Reverend Billy and the Church of Stop Shopping

 Und darüber gibts auch eine Dokumentation,  die ich mir gerade angesehen habe. Großartig.

Politik und Unterhaltung und auch noch Spiritualität - alles zusammen. Großartig.

Kritische Anmerkungen:

  • Wie ginge es unserer Wirtschaft, wenn tatsächlich niemand mehr ausgäbe als er hat?
  • Wo und für wie viel Geld würden die Menschen Arbeiten wenn sie keinen Job bei Nike, Wallmart, etc. hätten? ( siehe WP: Sweatshop)

Super film.

p.s.: Einige der  Songs von der Truppe gibt es hier und noch ein paar sachen  hier.

Kommunikationsstrukturen

Wohin führt es, wenn in einer Firma keine geordneten Kommunikationsstrukturen existieren?

Richtig, es wird weniger kommuniziert.

Na hat Captain Obvious bei euch auch eingeschlagen?

Ich finde es ja hochspannend, dass Kommunikation so ein Problem ist.

Open Source Projekte lösen das in der Regel so, dass die Mailingliste die ständige und ausdauernde Besprechung ist, in die alle Vorschläge kommuniziert und diskutiert werden. Passt die Kommunikation nicht, wird das Projekt entweder geforkt (wenn es anderen Personen wichtig ist) oder aber das Projekt schläft ein und hört auf. (War also doch nicht soo wichtig)

In Firmen werden gerne agile Methoden eingesetzt um das Problem zu lösen, da diese immer darum kreisen die Arbeit die passiert transparent zu machen und die Kommunikation der Teilnehmer zu erweitern.

Ob das jetzt ein Stand-Up-Meeting oder das Daily-Scrum oder das was weiß ich was ist - immer geht es darum das man regelmäßig kommuniziert.

Wichtig.

Und jetzt zur nächsten Lektion: Wie kriegt man so eine Kommunikationsstruktur in eine Firma hinein die dass (noch) nicht macht?

Warum kann man…

… eine Wurzel berechnen indem man einen float einfach um ein Bit nach rechts schiftet?

float InvSqrt(float x)
{
    float xhalf = 0.5f*x; 
    int i = *(int*)&x; // get bits for floating value
    i = 0x5f3759df - (i>>1); // gives initial guess y0
    x = *(float*)&i; // convert bits back to float
    x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
    return x;
}

 Chris Lomont sich das mal angesehen und seine Erklärung hab ich verstanden.

Was diese Stelle tut:

    int i = *(int*)&x; // get bits for floating value
    i = 0x5f3759df - (i>>1); // gives initial guess y0
    x = *(float*)&i; // convert bits back to float

Ist total cool. das Bitmuster des floats wird einfach als long interpretiert - was nichts weiter bedeutet, als das die Teile des Floats, Vorzeichen, Mantisse und Exponent jetzt halt nebeneinander in einem Bitfeld liegen. Wenn man dieses Bitfeld jetzt nach rechts schiftet dann hat man das effektiv eben auch mit jedem der Bitfelder gemacht. Wenn man dann dieses Bitmuster noch etwas manipuliert, indem man es mit einer Korrekturkonstante vermurkst die die Fehler durch das hereinschiften von werten aus der Mantisse in den Exponent minimieren, dann hat man eine tolle Annäherung.

Und diese Annäherung erlaubt es mit nur einem Schritt nach  Newton zu einer sehr guten Näherung an die Quadratwurzel zu kommen.

Rockig.

Vor allem finde ich es cool, wie die Hacker hinter diesem Algorithmus ihn gefunden haben. Das konnten sie nämlich nur machen, weil sie genau wussten wie ein float tatsächlich implementiert ist - einem Wissen das die meisten Hacker heute nur noch theoretisch haben - aber nicht so genau das sie dieses Format auch mal so ohne weiteres für so einen fiesen Trick missbrauchen können.

In diesem Sinne: Aus der Geschichte lässt sich viel lernen. :-)

Was macht dieser Code

Aus dem  Q3 Source Code:

float Q_rsqrt( float number )
{
  long i;
  float x2, y;
  const float threehalfs = 1.5F;

  x2 = number * 0.5F;
  y  = number;
  i  = * ( long * ) &y;  // evil floating point bit level hacking
  i  = 0x5f3759df - ( i >> 1 ); // what the fuck?
  y  = * ( float * ) &i;
  y  = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
  // y  = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed

  #ifndef Q3_VM
  #ifdef __linux__
    assert( !isnan(y) ); // bk010122 - FPE?
  #endif
  #endif
  return y;
}

Was macht das und wieso funktioniert es?

(Für all zu ungeduldige:  Auflösung)

Was ich besonders spannend finde, ist  die Geschichte mit der es entstanden ist. ( Und die Fortsetzung)

Total cool.

(via:  Einen Podcast von Ryan 'icculus' Gordon [etwa ab min. 30])

Spaces in the path

are not allowed on UNIX.

Damn.

Um das klarer zu machen: Ich will ein Skript schreiben, bei dem oben im  shebang hartcodiert ein Pfad zum interpreter steht.

So weit so gut. ABER. Dieser Interpreter liegt in einem Verzeichnis - und dieses Verzeichnis hat ein Leerzeichen im Namen.

Doh.

Die Regeln sagen nämlich:

The initial line of a script file must begin with #! as the
first two bytes, followed by zero or more spaces, followed by
interpreter or interpreter argument.  One or more spaces or tabs
must separate interpreter and argument.  The first line should
end with either a new-line or null character.

Und da hält sich auch der Mac OS X Kernel genau daran.

 Ich bin auch nicht der erste der darüber gestolpert ist. Hallo Felix. :-)

Das Blöde daran: Die Implementierungen erlauben weder ein Escapen, noch ein "In Anführungszeichen Setzen" des Interpreters.

Hrmpf.

Nach einigem Nachdenken sind mir letztlich nur zwei Lösungsmöglichkeiten aufgefallen:

1) Das Programm in zwei Dateien aufsplitten - die erste startet mit /bin/sh im shebang und dann ganz normal im 'body' den normalen Interpreter mit den normalen Mitteln der Shell (die auch quotes und escapen erlauben).

2) Wenn das Programm ein File bleiben soll / muss, kann ein  Polyglot das Problem lösen.

Das sah bei mir dann so aus:

#!/bin/sh
# Solves the problem that shebang lines can't contain spaces 
# (even escaped or quoted) in the interpreter path via a polyglot
"""false"
exec /Users/dwt/Archiv/Code/Aktive\ Projekte/Trac/env-trac-0.11/bin/python $0 $@
"""

import sys
print sys.argv

Das funktioniert so:

  • wird die Datei gestartet, wird sie mit der Bourne Shell (oder einer der Nachkommen) ausgeführt
  • in der Zeile """false" maskiere ich mit Hilfe des Kommandos "false" den Beginn eines Python Doc-Strings / Kommentars / Multiline-Strings.
  • Danach wird mit "exec" die Datei nochmal ausgeführt - diesmal mit dem richtigen Interpreter.
  • Der überspringt diesen Teil dann weil für ihn der Start komplett im Kommentar / ... / ... verschwindet.

Einerseits finde ich es cool das ich diesen Workaround gefunden habe - andererseits ist das natürlich ein totaler Hack. Insofern bin ich eher dagegen.

Was ich jetzt damit Tue weiß ich jedenfalls noch nicht.

Über Fehlermeldungen aus alten Tagen

.. bin ich mal wieder in  Wards Wiki gestolpert.

Lovely. :-)

Den Mobile Monday

 hab ich gerade besucht.

Und ich muss sagen: "I am not impressed."

Obwohl nahezu alle anwesenden Deutsche waren, wurden "natürlich" alle Vorträge auf Englisch abgehalten. Sehr Hipp, aber leider auch in sehr brüchigem Englisch das vieles Verstehen eher erschwerte. :/

Überhaupt das Verstehen. Wenn ich es recht betrachte, dann war das eigentlich kein Problem. Denn das Niveau der Vorträge war so tief, das selbst das gebrochene Englisch vieler Vortragender nicht wirklich am Verstehen der nicht vorhandenen Inhalte störte.

Was genau ist das also für eine Veranstaltung?

Eine IT-Second-Generation-Gründer-Blase trifft sich dort und präsentiert zum Teil ihre Ideen - aber auch Vertreter von größeren Firmen kommen vorbei (in diesem Falle Vodafone) um ihre Produkte zu zeigen. (Getragen wird das ganze von  DER Post (?), Nokia,  Sun, Jamba...

Und dann sind natürlich immer auch Event Sponsoren, hier Kyte und Device Anywhere die die Gelegenheit nutzten um wenigstens ein paar Leuten ihre Software bekannt zu machen.

Insgesammt erinnert mich das Stark an einen Spruch den  Bernd ( wunderschönes Bild) vor einiger Zeit einmal getätigt hat: "In Berlin funktioniert das so: Es gibt viel mehr Aktive die etwas cooles machen wollen, als Leute die sich das ansehen wollen. Daher gibt es die soziale Übereinkunft, das man immer zu den anderen Leuten geht wenn sie was machen und die dafür auch auf die eigenen Veranstaltungen kommen wenn man selber eine macht."

Well, genau so hat es gewirkt. Und eher uninteressant. Leider.

Den das Thema  User Centered Design ist sauwichtig und völlig unterbelichtet.

Peinlich fand ich auch, das ausgerechnet der Typ der Von Jamba da war den besten Vortrag über User-Centered design abgeliefert hat den der ganze Abend zu bieten hatte. :-/

Der Grund wieso ich eigentlich hingegangen bin, nämlich der Vortrag von Jan Mühlig ( von Relevantive) ist leider ausgefallen. Wirklich schade. Ich bin sicher er hätte noch am ehesten etwas relevantes sagen können.

Rechtstaat und Demonstration

Ist schon etwas her, aber  fand ich trotzdem total spannend.

Immerhin, wer weiß wer demnächst noch alles demonstrieren muss?

Und noch ein Schlag gegen die Abmahner

Zuerst die gute Nachricht:

Das  LG München hat geurteilt, das Rechteinhaber nur aufgrund der IP-Adresse und Zeit kein Recht erhalten die Persönlichen Daten dieses Internet-Nutzers zu bekommen.

Wie es in den Kommentaren auf  Golem jemand sagt: "Das wirkt ja fast so, als ob die Gerichte jetzt auf einmal mit gesundem Menschenverstand entscheiden würden.".

Dabei hat das Urteil für mich aber noch so ein Geschmäckle - es ist nämlich so, das der Kläger der Inhalteindustrie ein Porno-Vertreiber war.

Da stellen sich mir mehrere Fragen

  • Warum ausgerechnet ein Porno-Anbieter? Trauen sich die Herren Richter nicht an die Musik-/Filmindustrie heran und wollten sich nicht von denen das Leben / die Karriere versauen lassen?
  • Hat da vielleicht jemand zu wenig geschmiert?
  • Hat der Porno-Anbieter sich vielleicht besonders doof angestellt? Immerhin ist teil der Urteilsbegründung explizit, das der Rechteinhaber offenbar kein Interesse daran habe der Urheberrechtsverletzung nachzugehen, sondern den Betroffenen lediglich abmahnen wollte.

Unklarheiten über unklarheiten.

Ich persönlich vermute ja das er sich tatsächlich einfach zu doof angestellt hat und in der Klage direkt geschrieben hat, das er ja schließlich die Leute abmahnen wolle und das Gericht das zum Anlass genommen hat das zu sagen was sie schon lange mal sagen wollten, aber aufgrund geschickterer Formulierung der Klagen seitens der Musikindustrie nie sagen konnten.

Tja, find ich gut.

Vom Populismus

Schon bezeichnend für unsere politische Landschaft das das immer mehr zu einem Schow-Theater verkommt. Inspiriert durch  die Analyse von Maha hab ich da nochmal über das Killerspiele Argument nachgedacht.

Kurz Zusammengefasst: Ein Mensch sieht sich so in die Enge gedrängt das er irgendwann durchdreht und zum Amokläufer wird.

Darauf dann die typische Reaktion: Dieser Mensch hat Killerspiele gespielt, ergo waren die Schuld, ergo müssen wir Killerspiele verbieten.

Völlig ungeachtet der Tatsache das Killerspiele für Jugendliche sowieso schon verboten sind und man sich jetzt lediglich darüber unterhält, dass eben auch für Erwachsene zu verbieten.

Wieder völlig ungeachtet der Tatsache, das natürlich alle diese Spiele übers Internet trivial zu haben sind.

Einfach schade, das man mit solchen einfachen Strohmännern jede sinnvolle Beschäftigung mit dem Thema komplett verhindert wird.

Das Internet an Frau Merkel

 Das internet schrieb einen Brief

!!1!!!!(elf)!!!1!!!

Pavel bringt es einfach auf den Punkt.

(via  fefe,  frank)

Das neue Ubuntu ist da

Ubuntu: Die Linux distribution die am meisten Wert auf Usability legt!

Error message of installer when quitting

Fuck yeah!

*rofl*

 Bug Filed

  • Posted: 2008-04-26 17:45 (Updated: 2009-10-24 16:23)
  • Author: dwt
  • Categories: fnord
  • Comments (0)

Function Call vs. Message Send

Oder: Wieso mich die Lisp Syntax so stört.

In meiner Freizeit beschäftige ich mich gerade mit dem Buch  Practical Common Lisp.

Das Buch gefällt mir auch ganz gut - vielleicht abgesehen davon das er 'loop etwas zu häufig verwendet - ohne es zu erklären - was den Code gerade am Anfang reichlich magisch macht.

Aber: Worum es mir eigentlich geht, ist die Syntax von Lips. Nicht die Klammern, nicht die Einrückung, nicht die Art wie man es schreibt, sondern schlicht die Reihenfolge.

Weil: in Lisp ist erst einmal alles auf Funktionen abgebildet. Und das hat Vorteile aber eben auch einen gravierenden Nachteil: Jede Funktion muss immer als erstes in einem Funktionsaufruf Tupel stehen.

(funktion argument-eins argument-zwei)

Das ist ein Problem, weil man bei verschachtelten Funktionsaufrufen (auch schon bei nur sehr wenigen Ebenen) sehr schnell den Überblick verliert welcher Funktionsaufruf zu welchem argument gehört.

(funktion (funktion-zwei argument-eins (funktion-drei argument-eins argument-zwei)) argument-zwei)

Das kann man jetzt natürlich auch als Feature sehen, weil man gezwungen wird seinen Code vernünftig einzurücken und keine zu langen Funktionen zu schreiben

(funktion (funktion-zwei argument-eins
                     (funktion-drei argument-eins argument-zwei)) 
        argument-zwei)

Das hilft, aber eben nur so weit. Vor allem weil man beim Lesen von Code immer eine interne herumdrehung machen muss um den Code korrekt zu lesen.

(defparameter a-list (list 1 2 3 4 5))

(car (cdr (cdr (cdr a-list))))

Soll (wenn (ich) (mich nicht verschrieben) habe) 5 ergeben.

Aber man muss es von innen nach aussen lesen, damit man es richtig versteht.

Und das erfordert jede menge Geistige Kapazität, die besser beim finden von guten Namen für Variablen und Funktionen aufgehoben ist. Viel besser.

Jetzt zum Message-Passing - das ist zwar fundamental "weniger mächtig" als der Funktionsaufruf, weil man zum Beispiel generische Funktionen nicht oder nicht so gut implementieren kann, ABER: man kann viel besser mit dem resultat eines vorherigen Aufrufes das nächste tun.

Weil die Reihenfolge in der die Sachen ausgeführt werden die gleiche ist in der die Sachen auf dem Bildschirm stehen.

Und das ist eine ganze Menge besser les- und versteh-bar als die Funktion es jemals sein kann.

Das war es was  Alan Kay meinte, als er sagt das das wichtigste an  Smalltalk nicht die Objektorientierung, sondern das  Message Passing gewesen ist.

Dieser Song kostete jetzt nur noch.... 100€!

Heimlich still und leise wurde die Urheberrechtsnovelle durchgeführt - und jetzt haben wir den Salat.

Wieder mal hat die Bundesregierung innovative neue Geschäftsmodelle kaputt gemacht und einer jungen und enorm wachsenden Branche den Hals gebrochen.

Denn, die erstmalige Abmahnung wegen privatem Urheberrechtsbruch darf jetzt nur mehr 100 € kosten.

Yay!

Der FDP war das natürlich zu billig, den Grünen zu teuer - ich finds ok.

Lustig find ich das ein Staatssekretär Hartenbach wohl die Deckelung ganz wesentlich vorangetrieben hatte, weil er selber schon zweimal abgemahnt wurde.

:-) Demokratur ist doch was feines.

Via:  Küchenradio  iRights

"Das Grundgesetzt ist die Institutionalisierung des Misstrauens der Bürger gegen den Staat"

Die Grundrechte sind ein Institutionalisiertes Misstrauen gegen den Staat. Der Bürger hat Sorge vor einem übermächtigen Staat und deswegen werden ihm als Schutzmaßnahme die Grundrechte zur verfügung gestellt. Herr Schäuble und andere machen das genau umgekehrt. Die haben ein prinzipielles Misstrauen des Staates gegen den Bürger.

Sagt Wolfgang Nešković  in einem Interview beim Küchenradio.

Wolfgang Nešković ist übrigens der Bundesrichter dem wir die Gesetzgebung der  Geringen Menge zu verdanken haben.

Ja, das Interview ist schon eine Weile her, aber an Aktualität kaum zu übertreffen.

Wer, wer, wer, wer, wer hat uns verraten?

Vom Sprachdesign: Konstruktoren

Endlich ist mir wieder so ein Punkt klargeworden, der mich schon lange an Python stört, den ich aber bisher noch nicht so richtig spezifizieren konnte.

Zusammenfassen lässt es sich als: Konvention ist besser als eine eigene Syntax / Regel.

Konkret geht es um folgendes: Python besitzt eine eigene Syntax für Konstruktoren. Nämlich diese:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

point = Point(10, 15)

Der Konstruktor eines Objekts heißt immer __init__ (das mit den Unterstrichen finde ich sowieso hässlich, aber well, darüber ärgere ich mich wan anderes).

Das ist gut, weil man so den Konstruktor immer gleich findet.

ABER: Das ist total scheiße wenn man mehrere Wege braucht um ein Objekt zu initialisieren.

Denn genau wie in Java auch, kann man anhand den Argumenttypen ja keinen dispatch machen. Doh.

Also, wenn man das Beispiel erweitern will um auch Polarkoordinaten zu unterstützen, dann geht das nicht, denn bei

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __init__(self, theta, phi)
        self.x = ...
        self.y = ...

point = Point(10, 15)

kann die Runtime nicht mehr auflösen welchen Konstruktor mann denn jetzt genau gemeint hat.

Doh.

Jetzt hat man entweder die Wahl so etwas zu machen wie hier im  Trac-Projekt

class WikiPage(object):
    """Represents a wiki page (new or existing)."""

    realm = 'wiki'

    def __init__(self, env, name=None, version=None, db=None):
        self.env = env
        if isinstance(name, Resource):
            self.resource = name
            name = self.resource.id
        else:
            self.resource = Resource('wiki', name, version)
        self.name = name
# ....

Was aber total ekelig ist, denn jetzt hat der Konstruktor auf einmal einen Parameter name der überhaupt nicht mehr dass ist, was er mit seinem Namen dokumentiert.

Klasse. Jetzt muss man tatsächlich den Code des Konstruktors lesen um zu verstehen was für Argumente man benötigt um so ein Objekt zu erzeugen. Habt ihr wirklich gut gemacht!!!!11!!

Oder aber man scheißt auf das Konzept eines Konstruktors und schreibt Factory-Methoden, also im Beispiel etwa so:

class WikiPage(object):
    """Represents a wiki page (new or existing)."""

    realm = 'wiki'

    @classmethod()
    def create_from_resource(klass, env, resource, db=None):
        page = WikiPage(env, resource.id, resource.version, db)
        page.resource = resource
        return page

    def __init__(self, env, name=None, version=None, db=None):
        self.env = env
        self.resource = Resource('wiki', name, version)
        self.name = name
# ....

Das ist jetzt immerhin klarer - hat aber den Nachteil das der Leser jetzt wissen muss dass man Factory Methoden einsetzt und welche (nichtstandardisierte) Konvention man für diese einsetzt. Na Klasse.

Ergo: Die Sprachdesigner haben sich gedacht, das es ja eine Tolle Sache wäre, wenn sie eine eigene Syntax einführen würden, damit Konstruktoren etwas besonderes sein können und haben damit erreicht, dass man sich beim tatsächlichen Programmieren jetzt auf einmal ein Bein Brechen muss, damit man ganz alltägliche Probleme auf eine saubere Art und Weise lösen kann.

Ganz groß.

Hätte man doch von vornherein anerkannt, das ein Konstruktor auch nur eine Methode ist - mit der Konvention dass der Name mit "init" anfängt - dann existierten auf einmal diese Probleme nicht mehr. Denn dann kann man über den namen der Methode dokumentieren was sie soll.

class Point:

    def init_cartesian(self, x, y):
        self.x = x
        self.y = y
        return self
    
    def init_polar(self, theta, phi):
        # ...
        return self

cartesian = Point().init_cartesian(10, 15)
polar = Point().init_polar(0.23, 0.23)

Yucheh!

Dazu kommt, dass man dann auf einmal sinnige Dinge tun kann, wie zum Beispiel, das ein "Konstruktor" nicht immer die gleiche Klasse zurückgeben muss. Man könnte also zum Beispiel eine öffentliche Superklasse haben, die aber tatsächlich in mehreren privaten Subklassen implementiert ist - zum Beispiel ein String, der je nachdem wie er erzeugt wird anders aussieht: Stringkonstanten vielleicht eine Klasse die nicht/anders an der Garbage-Collection teilnimmt und dafür Uniqued (also garantiert nur einmal) existieren (für einen schnelleren Interpreter interessant), Strings aus einer Datei entweder normal, oder falls die Datei eine gewisse Größe überschreitet als Memory-Mapped File, Strings die Pfade repräsentieren so, dass sie mit den Eigenheiten von Dateisystemen besser klarkommen, Strings die keine Unicode enthalten noch mal anders, damit sie effizienter sein können.... etc.

Und das alles, weil man auf Sprachebene auf ein zusätzliches Konzept verzichtet.

Aber dass, scheint ja für Sprachdesigner das Schwerste zu sein.

Aircrack auf dem iPhone

Will man sowas haben?

Wäre ja schließlich ein Hackerwerkzeug und damit verboten.

Nun, wer will da schon. Immerhin würde man damit ja schließlich normale WEP-Verschlüsselung in so etwa einer Minute entschlüsseln können.

Pah...

Aber  Ankucken ist ja nicht verboten.

:-)

Wikipedia braucht einen neuen Namen

Soeben habe ich volgende fiktive Pressemitteilung zur Veröffentlichung erhalten:

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Aufwendige Untersuchungen haben ergeben, dass der gegenwärtige Name des liebevoll auch "allwissenden Müllhalde" genannten Nachschlagewerks geändert werden muss.

"Wir waren selbst von den Ergebnissen überrascht!" sagt ein Sprecher für das Projekt, "Wir hätten erwartet das wir den Namen erst wegen einer Copyright-Verletzung verlieren würden - und jetzt dass".

Aber die Ergebnisse sind eindeutig - der Name lässt sich einfach nicht in einen kurzen Satz pressen, so wie "Google es einfach". "Wikipedia es doch" funktioniert einfach nicht. Das ist das Grundproblem.

Die nun beginnende Diskussion um einen würdigen Nachfolger wird von allen Community-Mitgliedern mit Spannung verfolgt. Immerhin muss solch ein Satz in über 20 Sprachen funktionieren können - ein nicht triviales Problem bis zu dessen Lösung das Projekt aber in seinem gegenwärtigen Zustand eingefroren wird.

"Das ist ein notwendiger Schritt um die Kräfte Freizumachen die wir benötigen um diese Namensdiskussion voranzutreiben." Sagt der Sprecher der Wikipedia erneut auf unsere Nachfrage.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Oder habe ich etwas übersehen und es gibt so einen Satz mit dem man effizient antworten kann?

Vorschläge willkommen.

Unser Feind - ''das Bundesverfassungsgericht''

Durch Denkanstoß von  CHRISTIAN RATH

Wer hätte das Gedacht. Die letzte Bastion der Gerechten in einem Staat voller kranker, überwachungsgeiler Politiker. Ein Kleines Dorf umgeben von vier Garnisonen....

Aber wenn man drüber nachdenkt: Das Bundesverfassungsgericht ist seit geraumer Zeit schon die letzte Hoffnung für alle Menschen die vernünftige Gesetze fordern. Jedes Sicherheitsgesetz macht eine Zwischenrunde durch Karlsruhe - und wird dort Beschnitten.

Und genau das ist das Problem. In Karlsruhe wird ein Kompromiss gefunden zwischen dem was das Grundgesezt / die Vernunft sagt und dem was die Politiker wollen.

Und das bedeutet letztlich auch nichts anderes als die Gesetze kommen - zwar gebremst, aber sie kommen.

Aber weil Karlsruhe gesagt hat jetzt ist alles ok, ist es dann natürlich in Ordnung.

Ha ha, selten so gelacht.

Vom Teilen

(Geschrieben für das Sternbuch meiner Familie)

Wenn man über das Teilen sprechen will, dann muss man diesen Begriff zuerst festklopfen.

Teilen kann man verschiedene Dinge. Dinge, die man anfassen kann und solche, die man nicht anfassen kann. Brot zum Beispiel kann man anfassen - und wenn man es unter mehreren aufteilt, dann hat man selbst weniger. Wenig überraschend ist es eines der drängendsten Probleme unserer Zeit, wie wir mit unserem knappen Trinkwasser umgehen. Pah, Öl. Trinkwasser!

Dann gibt es Dinge, die man anfassen kann - aber die man sowieso nur so kaufen kann, dass man sie alleine - außer in Extremfällen - gar nicht verbrauchen kann. Ein Auto zum Beispiel steht bei den meisten Menschen die meiste Zeit herum. Ab und zu jemanden mitzunehmen bringt da eine Menge - in manchen Gegenden sogar das Recht überhaupt fahren zu dürfen, damit weniger Verkehr ist.

Und dann gibt es jede Menge Dinge die man nicht anfassen kann - Liebe, Zuwendung, Musik, Freude, Theater, Humor...

Für einige davon wird in unserer Kultur eher nicht bezahlt. Liebe und Zuwendung zum Beispiel.

Für andere Dinge aber schon. Musik und Theater zum Beispiel. Die werden in unserer Gesellschaft meist industriell hergestellt, als CDs, Kino oder DVDs.

Lebt man, wie ich, schon größtenteils in einer Welt, in der solche geistigen Dinge vermehrt kopiert und geteilt werden, ohne dass sich etwas Greifbares bewegt, dann muss man sich früher oder später die Frage stellen: Was geht mir verloren, wenn ich zum Beispiel ein Lied singe, und meine Freundin das hört, dann mitsingt und es schließlich auch alleine singen kann? Habe ich wirklich weniger? Ist ein Lied teilen nicht Verbundenheit und habe ich damit sogar mehr als vorher? Oder abstrakter: Was verliere ich, wenn ich mit jemandem etwas teile, ohne dass ich danach weniger habe?

Diese schöne neue Welt hat natürlich einen Haken - denn wie für fast alles gibt es auch hier eine Industrie und Lobby - und die wollen von dem, was sie "schon immer" gemacht haben, weiterhin leben.

Dabei darf man aber den Blick für die Realität nicht verlieren - wer tatsächlich Kunst schafft, zum Beispiel als Musiker, verdient und verdiente - bis auf wenige Ausnahmen - immer schlecht. Es gibt viel mehr Künstler als Plattenfirmen produzieren wollen - und das drückt den Preis. Denn die Plattenfirmen leben davon, Hits zu produzieren - aber nicht zu viele, damit sich jeder einzelne auch lohnt.

Und diese verhältnismäßig kleine Industrie fordert jetzt, dass wir als Gesellschaft die beschriebenen Nuancen des Teilens vergessen sollen - und alle Dinge, auch die geistigen, betrachten sollen wie Brot. Als hätte man, wenn man sie teilt, selbst weniger. Vielleicht nimmt man dort an, dass wir auch nur die Intelligenz von selbigem besitzen.

Was würden wir wohl heute machen, wenn die Ochsenkarren-Industrie fordern würde, dass ab heute alle Straßen nur noch auf dem Standstreifen mit Autos befahren werden dürfen, damit der Rest endlich für ungehindertes Durchkommen mit Ochsenkarren frei wird?

Provokant gesagt: Das Geld wird eben heute anders verdient. Na und?

Mancher mag das für ein wenig wichtiges Thema halten - dabei bedeuten die hier besprochenen feinen Nuancen des Teilens eine Revolution.  Wikipedia legt einen Grundstock an geteiltem Wissen an, der zeigt, wo es hingehen kann, wenn man zulässt, dass Teilen zum Grundprinzip wird. Open Source-Software verändert komplett die Weltwirtschaft, weil ärmere Länder plötzlich keinen Grund mehr haben, viel Geld an den ohnehin schon reichsten Mann der Welt zu bezahlen. Regierungen wie Deutschland setzen Open Source-Software ein, um sicher zu sein, dass kein ausländischer Geheimdienst Hintertüren in ihre technischen Systeme einbaut, und auf der anderen Seite nutzen Privatpersonen die selbe Software, um kontrollwütigen Regimen wie in China entgehen zu können. Auch Künstler entdecken immer mehr, dass sie ihr dringendstes Problem - wahrgenommen zu werden - durch die Freigabe ihrer Kunst viel besser erreichen können, als wenn sie darauf warten, von einer (Platten-)Firma entdeckt zu werden.

Diese Revolution, die uns erlaubt, mit geistigen Gütern so umzugehen wie es ihnen gebührt, hat gerade erst als technische Revolution begonnen - und wird noch lange Zeit weitergehen, bis der soziale Teil dieser Revolution abgeschlossen ist.

Jetzt durch kurzfristige und eilig durchgeführte Regulierungen das Kind mit dem Bade auszuschütten, bedeutet, dass diese Entwicklungen um Jahrzehnte verzögert, vielleicht sogar vollständig verhindert werden könnten. Vernünftige Politik ist hier abwartend - und lässt neues mutig zu, ohne es zu verteufeln.

Was ist an diesem Programm falsch?

So, jetzt kurz ganz intensiv hinschauen - so sagen wir mal für 10 Sekunden.

Funktionale

Und, schon gesehen was es ist?

Ok, nochmal 10 Sekunden.

Jetzt?

Na, will ich es mal auflösen. Das ist ein Programm das in der von mir schon beschriebenen Veranstaltung  Fortgeschrittene Techniken funktionaler Programmierung auf einer Folie erscheint.

Jep, als teil der Vorlesung für so sagen wir mal... 2 Minuten.

Aber jetzt zum Problem: Dieses Programm versteht man nicht! Schon gar nicht wenn man kein Opal kann - aber auch mit Opal-Kenntnissen hat man keine Chance.

Was für ein Schwachsinn diese ganzen Funktionssymbole sind.  Als würden Programmiersprachen heute noch mit einer eigenen Tastatur kommen. Vor allem aber haben sie ein Problem: Man muss den ganzen Kontext was sie Bedeuten komplett mitschleppen - was uns Menschen viel schwerer fällt als einfach ein Wort zu lesen das sagt worum es geht.

Jep.

Wer zweifelt, mag doch bitte das Programmfragment erklären.

q.e.d.

  • Posted: 2008-03-28 18:55 (Updated: 2009-10-24 15:58)
  • Author: dwt
  • Categories: fnord code
  • Comments (0)

Python saugt

Schon lange hab ich mich gefragt, wieso eigentlich mich dieser eine Punkt an Python so sehr stört:

Jede Methode eines Objektes erhält als ersten Parameter eine Referenz auf das aufrufende Objekt.

Bisher konnte ich den Finger nie darauf legen konnte, wieso mir das eigentlich so auf den Keks geht. Bisher dachte ich immer das es mich stört, weil man schwieriger aus normalen Funktionen Methoden zu machen, beim Refactorn, aber so wirklich passt das nicht. Also dachte ich, vielleicht gewöhne ich mich ja irgendwann daran. Dem war aber nicht so.

Bei den Vorbereitungen zum Java-Kurs ist mir jetzt durch einen Hinweis von  Robert der eigentliche Grund Aufgefallen.

Folgendes war der Auslöser: Wir haben uns gerade darüber unterhalten wie wir den Studenten im Java-Kurs erklären, wie sie this in Java verstehen sollen.

Naja, von der technischen Seite ist das klar - die Methoden sind im Klassenobjekt implementiert und die Methode braucht aber einen Weg um an die Daten zum gegenwärtigen Instanz-Objekt zu gelangen. Also wird dieses Instanz-Objekt als verstecktes erstes Argument übergeben, das immer den namen this trägt.

Soweit so klar.

Das Mentale Bild das man von diesem Systems hat, ist aber eigentlich anders: Darin gehören die Methoden zum Instanz-Objekt und "leben" auch darin - damit ist dann auch klar, wieso eine Instanz-Methode zugriff auf die Daten des Objekts hat und wieso zum Beispiel eine Klassen-Methode das nicht kann - sie lebt einfach im falschen Objekt.

Der Knackpunkt: this ist eigentlich ein Workaround (aber ein notwendiger) der zeigt wie diese Abstraktion implementiert wurde, der aber auch erlaubt eindeutig zu spezifizieren welchen Namensraum man jetzt meint. Jetzt möchte man aber die Implementierung möglichst von der Benutzung abstrahieren, damit man gut auf dieser Abstrakteren Ebene arbeiten kann und diese nicht ständig verlässt. Daher macht es viel Sinn diese Implementierung so transparent zu machen wie nur irgend möglich.

In Python dagegen ist das anders. Hier wird ganz Explizit immer self als erster Parameter geschrieben. Der Effekt? Ständig wird man daran erinnert das die Abstraktion eigentlich nicht so ist wie man sich das denkt und es tatsächlich alles anders implementiert ist in Python. Das Problem? Man erhält durch diesen Abstraktionsbruch keinen Vorteil - ja, alles ist expliziter, aber es bricht auch ständig mit der Abstraktionsschicht auf der man Arbeitet. Details der Implementierung "bluten" über dieses "Loch" in den ganzen Code den man schreibt.

Und saubere, klar getrennte Abstraktions-Ebenen sind einfach wichtiger als einfachste Implementierung - speziell für einen Sprachdesigner.

Wie schafft man sowas eigentlich?

(Zu  Rachel's Song von Vangelis)

Meine Bekannte  Katrin hat sich eine  Zeitschaltuhr zugelegt. Nun ja, da denkt man, diese Dinger gibts ja schon lange, kann ja alles nicht so schwer sein.

:-D

Nach längerer Zeit hat Sie herausgefunden wie der Funktioniert - zu zweit haben wir ihn dann mal im Detail angeschaut.

Schonmal vorweg: Meinen Respekt. Was die alles Falsch gemacht haben, muss man wirklich absichtlich machen, sonst geht das einfach nicht.

Hier erstmal ein Bild

Zeitschaltuhr Foto

Vielleicht das gute Vorne weg: Es ist klar eine Durchgangssteckdose, wo man was einsteckt ist schon mal einfach.

Nein, mehr positives fällt mir dazu nicht ein. Sorry.

Kommen wir mal zu den Details. Es ist eine Zeitschaltuhr. Völlig unbedarft erwartet man also erst einmal eine Uhr, die schaltet. Und wenn man das Bild betrachtet, dann ist das ja auch schon mal vertraut. Da sind Zahlen und die sind im Kreis angeordnet.

Ach ja, schalten... Das war schon die erste Schwierigkeit - wie schaltet man das gute Stück? Man muss die Schalter (der schwarze Kranz um das "Ziffernblatt" hoch oder herunterdrücken um den Strom zu schalten.

Interessanterweise gibt es auf dem guten Stück aber keinerlei Hinweis welche Stellung ein entspricht! Soweit ich das beurteilen kann scheint aber "herausgezogen" ein zu bedeuten. Sehr intuitiv.

Ach ja, und dann gibt es noch einen roten Schalter auf der Seite. Den haben wir auch nicht verstanden. Jetzt bei der Recherche hier zum Schreiben bin ich auf der Seite von Conrad-Elektronik fündig geworden. Offenbar ist das ein Master-Schalter der die Zeitschaltuhr völlig übergeht. Ist der UNBESCHRIFTETE Schalter also in der falschen Position, funktioniert sowieso gar nix.

Aber falls er zufällig richtig ist ist es trotzdem noch kompliziert - denn welcher der etwa 120 Schalter in dem Aussenring ist für welche Zeit zuständig? Beim Versuch das herauszufinden stößt man schnell darauf das man den äusseren Ring mit den Zahlen - das "Ziffernblatt" sozusagen - drehen kann.

Praktisch. So kann man zum Feststehenden Uhrzeiger die passende Uhrzeit einstellen.

Ich stelle mir das so vor: Damit man nicht völlig verzweifelt, wird man vermutlich die Uhr so einstellen, dass 0/24 Uhr oben ist, und dann stellt man sich einen Wecker, damit man die Uhr zum richtigen Zeitpunkt einsteckt, damit die Uhrzeit die er dann anzeigt zur Tageszeit passt. Und vielleicht betreibt man es vorher dann noch ein paar Stunden damit der Zeiger auf eine passende Stelle zeigt und man nicht um Mitternacht zum Zeitschaltuhr einstecken aufstehen muss.

Sehr komfortabel.

Ach ja, ausserdem stellt man ungefähr zu diesem Zeitpunkt fest, das die Beschriftung auf dem Ziffernblatt in die falsche Richtung ist. Nicht wie bei einer Uhr, nein, nein - natürlich anders herum. Auch wenn einem der Pfeil auf der "Zeiger"-Scheibe eine normale Richtung vorgaukeln möchte. Ach ja, natürlich macht der schon Sinn - denn den "Ziffernblatt"-Ring kann man nämlich ohne große Kraft nur in diese Richtung drehen. Oder soll - damit das einstellen der Uhrzeit noch "leichter" fällt vielleicht?

Der "Zeiger" jedenfalls bewegt sich genau in die andere Richtung.

Fassen wir also mal Zusammen:

  • Schalten? An schwarzen Stiften, so etwa 10 min pro Stift, was ein und was aus bedeutet muss man aber durch trial und Error bestimmen
  • Es gibt einen unbeschrifteten Schalter, der den ganzen Mechanismus ausser Kraft setzt - Was ein und was aus bedeutet muss man ausprobieren.
  • Man dreht nicht die Scheibe mit dem Pfeil darauf, sondern den Ring aussen herum auf dem die Zahlen stehen.
  • Damit stellt man die Uhrzeit zu dem feststehenden "Uhrzeiger" ein. Man stellt also nicht den "Uhrzeiger" sondern das "Ziffernblatt"
  • Das "Ziffernblatt" ist in die falsche Richtung beschriftet

Eine tolle Uhr ist dass. Ich meine, man hat wirklich das Gefühl das der Konstruktör entweder noch nie eine Uhr in der Hand gehabt hat und daher etwas völlig neues erfinden musste, oder aber das er sich absichtlich überlegt hat, wie er seine Benutzer noch ein bisschen mehr quälen kann.

Wirklich faszinierend.

  • Posted: 2008-03-26 20:44 (Updated: 2009-10-24 16:24)
  • Author: dwt
  • Categories: fnord
  • Comments (0)

Ha-, ha-, ha-....

... war alles was ich noch sagen konnte, nachdem mir mein Vater ein (!!) Korn des  Szechuanpfeffers gegeben hatte, die meine Verwandte Renate aus China mitgebracht hat.

Was die Wikipedia als "scharf-prickelnde Geschmack, der ein Gefühl der Taubheit auf Lippen und Zunge bewirkt" beschreibt ist in wirklichkeit ein intensives prickeln des ganzen Mundes, als stünde der ganze Rachen unter Strom!

Und das eine viertel-Stunde lang.

Dabei ist der Pfeffer eigentlich nicht scharf - man hat nur einen völlig betäubten Mund - der Geschmack ist wirklich nur als "volle Dröhnung" zu beschreiben.

Genau genommen, bin ich immer noch etwas high...

:) Cooles Zeug.

Nur wie man damit Würzen soll ist mir noch schleierhaft.

Die Provider sollen gefälligst P2P verhindern!

 Fodert Dieter Gorny, Cheff des Bundesverbands der Musikindustrie. Klar.

Spannend finde ich aber das er vorgibt, aus der letztlich erschienen Brennerstudie wäre ersichtlich das sich illegale Downloads um die Hälfte reduziert haben.

Nämlich von 600 Millionen auf 300 Millionen.

Da würde ich doch schon mal gerne die Studie sehen, Herr Bundesverband. Und was da genau gefragt wurde. "Wie viele illegale Downloads haben sie im letzten Jahr gemacht?" oder "Sind sie sich im klaren darüber das das herunterladen von Musik aus dem Internet illegal ist?" und direkt danach "Wie viele Musikstücke haben sie im letzten Jahr heruntergeladen?"

Vielleicht taugt die Studie ja auch und die Leute sind dazu übergegangen Fernsehserien etc. herunter zu laden. Jedenfalls weiß ich nichts darüber das sich die verbrauchte Bandbreite oder der Anteil der P2P-Dienste an der Gesamtbandbreite irgendwie verringert hätte.

Wirklich schade, das man in der Politik nicht seine Quellen offen legen muss, wie in der Forschung. :-/

Transparenz ist doch was feines.

Heute blog ich nicht

Dafür bin ich nämlich viel zu betrunken.

Schließlich hat die Friedrich Ebert Stiftung heute den Wein bezahlt, den ich abgegriffen habe, während ich meine Freundin von einer Veranstaltung dort abgeholt habe.

Das Essen war auch nicht soo toll.

Naja, immerhin der Rotwein.

Ach ja, die Veranstaltung hieß: "Außen vor oder mittendrin? Gesellschaftliche Partizipation und Anerkennung erwerbsloser Menschen". An sich spannend, aber die Teilnehmer haben eigentlich alle nur immer die gleichen bekannten Stereotypen von sich gegeben. Wirklich gut fand ich (neben meinem Vater :) dann vor allem  Frauke Hehl die mal wirklich gesagt hat was sache ist: Das alle Arbeit haben ist einfach inzwischen eine Illusion der wir uns nicht mehr hingeben dürfen.

Recht hat sie.

So, und jetzt gute Nacht.

Was ist das eigentlich,

dass Betreiber von Geschäften so überwachungsgeil macht?

Zum Beispiel  dieser Eigentümer einer Diskothek. Der erstellt über jeden seiner Besucher ein komplettes Persönlichkeitsprofil, inclusive wann sie bei welcher Bedienung wie viel von welchen Getränken gekauft haben. Und natürlich von wann bis wann sie anwesend waren, woher sie kommen, welche Telefonnummer sie haben, etc.

Das Geilste: die Überwachten Club-Gänger werden dargestellt, als fänden sie das ganz toll. Schließlich müssen sie als Mitglied keinen Eintritt bezahlen und erhalten Zutritt zum Buffet.

Diese Daten werden ewig aufgezeichnet - die Bilder der Überwachungskamera 'nur' mindestens ein halbes Jahr auf dem Privatrechner des Eigentümers.

"Die wollen das doch genau so!" hört man den Betreiber quasi schreien.

Und was wenn er Windows benutzt und jemand bei ihm in das Rechnernetzwerk einbricht und die Daten alle stiehlt?

p.s.: Haben wir da jetzt nicht  ein Grundrecht auf Datenintegrität?

Darf's ein neuer Lampenschirm sein?

Ob Ikea wohl bald pleite geht?

So jedenfalls  malt Freitag die Zukunft in der jeder Zuhause einen 3D-Drucker stehen hat, der fast beliebige Altagsgegenstände (inklusive Elektronik) herstellen kann.

Klingt gut nicht?

Naja, bis man sich klar wird, das die angestrebte Selbstreproduktion dieser Geräte natürlich bedeutet das sie ihre Einzelteile selbst herstellen können. Zusammenschrauben muss sie immer noch der Mensch der ehrfürchtig vor dem Gerät sitzt.

Spannend finde ich das aber schon. Im Dunstkreis des CCC ist schon länger davon zu hören, das die (wieder) immer mehr zunehmenden Hardware-Hacker jetzt auch Rapid-Prototyping Maschinen selber bauen können. Und das für so etwa 200-3000 € - je nach Anspruch und Bastelkenntnis.

An den Durchbruch der Produktionsmittel Zuhause glaub ich zwar noch nicht - aber wenn man doch mal mit Aliens kommunizieren will, dann ist heute immer noch die Idee, Selbstreproduzierende Satelliten loszuschicken die beste. Die könnten dann nämlich mit möglichst viel lokalem Speicher die Kunde über unsere Kultur quasi in einem gigantischen "Turnschuhnetz" in fremde Sternensysteme bringen - und umgekehrt.

Da wäre eine erste sich selbst reproduzierende Maschine natürlich schon ein ganz guter Start...

Spannende Wikipedia-Artikel über die ich beim Schreiben gestolpert bin:  Alternative Biochemien (engl),  Exopolitik (engl),  Pansperma (engl)

Piraten aus "Mangel an Auswahl"

 Torrentfreak schrieb heute über  eine Studie der  Wiggin LLP  Wiggin LLP.

In der graphisch anspruchsvollen Studie stellt die Firma fest (unklar ist mir noch, wer sie Bezahlt hat) das das eingeschränkte Angebot einer der wichtigsten Gründe ist wieso Leute zu Piraten werden.

Ahem.

Na gut, ich finde es ja richtig wenn sich die Entertainement Industrie endlich auf ihren Hosenboden setzt und alle Inhalte (ja, auch die Alten) im Netz verkauft.

ABER

Ich vermisse hier ein ganz wesentliches Argument: Filesharing machen zuallererst die Leute die Zeit haben, aber wenig Geld. Diese Leute (Jugendliche & Studenten z.B.) waren und sind aber ein ganz wesentlicher Markt für die Entertainment Branche.

Davon abgesehen bin ich als Pirat natürlich noch der festen Überzeugung, das unser Land mehr freie Kultur braucht und auch bekommen wird.

Dazu aber später mehr.

Sauberes Programmieren

(zu  Return to Innocence von Enigma)

Es ist wirklich erstaunlich wie viel schwieriger es ist saubere Programme zu schreiben wenn mehr Leute an der Konstruktion beteiligt sind.

Nehmen wir zum Beispiel drei Leute. Einer hat vorher viel C++ progirammiert. Ganz selbstverständlich ist für ihn das Paradigma geworden, das man Accessoren -getVar und Mutatoren -setVar:aValue nennt.

Und schon mischt sich im System der Namens-Salat. Und das ist noch keine große Sache. Von sich aus besteht keinerlei Einheitlichkeit, wie wer seine Variablen und Funktionen nennt. Wie z.B. heißt eine Klassenmethode zum erstellen eines Objekts? -classname:instanceVarName with:anotherInstanceVarname oder -intentionWithNamedThing:aTypeDescription withAnotherNamedThing:aTypeDescription

Wie geht man mit Prefixen um? Was will man mit Instanzvariablen tun? Wann verwendet man (sinnvollerweise Accessoren und wann direkten Zugriff auf Variablen?

Die Summe dieser kleinen Entscheidungen macht so viel von der ( olfaktorischen?) Sauberheit eines Programms aus, das man sich (eigentlich) nicht leisten kann sie dem Zufall zu überlassen.

Aber der Overhead das alles vorher festzulegen oder auch nur zu kommunizieren ist gewaltig. Vor allem wenn man weder Refaktoring-Werkzeuge hat die einem die Änderungen erleichtern, noch Unit-Tests die einem die Änderungen absichern, noch Reviews / Pair-Programming die einen zu der Entscheidung helfen was geändert werden soll.

Was tun?

Erleichterung finde ich in der Tatsache, das tatsächlich viele kleinen Entscheidungen kaum oder keine Rolle spielen. Wo die Klammern gesetzt werden, oder wie weit eingerückt wird ist egal. Man überließt diese Unterschiede einfach.

Dazu kommt die Aussage aus dem  Big Ball of Mud Paper: Ein Dreckball mag besser sein als gar keine Software.

Ist Sauberkeit also doch überschätzt?

  • Posted: 2008-03-04 21:39 (Updated: 2009-10-24 16:04)
  • Author: dwt
  • Categories: fnord code
  • Comments (0)

Das iTeam: Die Jungs mit der Maus

Da gibt es eine grandiose englische Comedy-Serie  The IT Crowd bei der man sich nur totlachen kann.

Nun, da dachte sich SAT 1 wohl, hey, das können wir doch alles wörtlich ins Deutsche übersetzten und dem deutschen Fernsehpublikum verkaufen.

Nun, überraschenderweise hat sich gezeigt, das der Wortwitz der die Serie ganz wesentlich trägt bei dieser Übersetzung fast vollständig verloren geht.

DOH.

 Hier kann man sich selber überzeugen.

p.s.: Die Tiefe der Misere kann man ja schon am Titel erkennen. Der Wurde nämlich von "Die Jungs mit der Maus" in "Die Jungs an der Maus" geändert um auch noch die letzte Mehrdeutigkeit zu entfernen...

Armes deutsches Fernsehen.

if [ "z$?" != "z0" ] ; then ...

Aus dem Buildscript  imageFromFolder.sh des MOKit Releases.

Da ich so etwas schon oft gelesen habe, habe ich mich endlich mal dafür interessiert wieso zum Teufel so viele Programmierer das so machen. Könnte ja sein, hab ich mir gedacht, das es einfach so kranke sh implementierungen gibt, dass man das so machen muss damit das wirklich auf allen Systemen läuft.

Nun, ein guter Hacker im CCC den ich darauf mal ansprach antwortete darauf mit dem Klassiker: "Die machen das doch nur alle weil sie das Manual nie gelesen haben!" :-) Gut,  les ich mal nach...

Ok, also das Beispiel mal etwas detaillierter betrachtet:

hdiutil create # and then a lot of parameters

if [ "z$?" != "z0" ] ; then
    echo "Error creating image ($?)."
    exit 1
fi

Das hätte man doch in jedem fall auch so machen können:

hdiutil create # and then a lot of parameters

if [ 0 -ne $? ] ; then
    echo "Error creating image ($?)."
    exit 1
fi

Und das fängt den Sinn des Tests auch gleich viel besser ein.

Dann hätte man natürlich auch noch eine der Kurzformen wählen können, sowas wie

hdiutil create mumble mumble \
    || echo "Error creating image ($?)." ; exit 1

Das ich persönlich fast noch etwas klarer finde - erst recht wenn man es in eine Funktion error_exit oder etwas ähnlichem verpackt

error_exit ( )
{
    local exit_value=$?
    echo $1 "($exit_value)"
    exit $exit_value
}

hdiutil create mumble mumble \
    || error_exit "Error creating image." 

Überraschenderweise ist das nämlich gar kein Problem so etwas in der Shell zu machen. Macht sich nur offenbar kaum jemand die Mühe das "fine" manual mal zu lesen.

Oder zumindest so scheint es mir im Moment.

  • Posted: 2008-03-02 00:11 (Updated: 2009-10-24 16:00)
  • Author: dwt
  • Categories: fnord code
  • Comments (0)

Habermas nach Aktuell?

Habermas definiert die Privatsphäre aus der Oikos, der Lebensnotwendigkeit, die man braucht um sich die Überlebensfähigkeit zu sichern.

Was ist jetzt, wenn diese Sphäre wegfällt?

Schließlich sind immer mehr der überlebensnotwendigen Dinge in unserer Überflussgesellschaft einfach Verfügbar oder werden immer öffentlicher organisiert.

  • Arbeit findet nicht mehr auf dem eigenen Acker, sondern fremdbestimmt und öffentlich statt.
  • Heilung im Krankenhaus oder anderen öffentlichen Einrichtungen, denen man mühsam ein wenig eigenbestimmung der dabei entstehenden Daten abnötigt.
  • Fortpflanzung (oder zumindest Sex) wird immer mehr öffentlich zelebriert - die Schwulen machen es mit  Community Plattformen vor.

Wenn die Ernährung, Heilung und Fortpflanzung nicht mehr Privat ist, dann bleibt für den Rest vielleicht nicht mehr ausreichend Grund übrig Privat zu sein.

Dazu kommt, das durch das Internet und  passender  Software das veröffentlichen so einfach wird, dass immer mehr öffentlich gemacht wird.

Ob sich das "Private" diesem Sog auf lange Sicht entziehen kann?

Strange thoughts that I have...

Grundrecht per Verfassungsgericht

Das allgemeine Persönlichkeitsrecht ![...] umfasst das Grundrecht auf Gewährleistung der Vertraulichkeit und Integrität informationstechnischer Systeme.

Mehr im  Urteilsspruch des Bundesverfassungsgerichts.

Wow. Mir ist noch nicht ganz klar was für Auswirkungen dieses Gesetz alles haben wird.

Insbesondere die "Vertraulichkeit und Integrität" ist mir unklar. Mein Freund  Bernd formulierte das sehr schön: "Wenn StudiVZ öffentlich sagt das sie dein Profil an Werbetreibende verkaufen, dann gehört es zur Integrität der Plattform das diese Informationen Verkauft werden."

Großartig.

Na mal genauer durchlesen was das sagt.

In der Zwischenzeit:  Die Inspiration des Bundesverfassungsgerichts?.

Perry Rhodan - oder wie man großartige Ideen in den Sand setzt

Leider.

Von Perry Rhodan gibt es nämlich seit einiger Zeit  eine Hörbuch Ausgabe. Großartig! Die größte Science-Fiction Serie der Welt - endlich einfach jede Woche auf dem iPod haben, von professionellen Sprechern gemacht.

Super.

Dachte ich und kaufte mir ein Abo. Für 149,90 Euro.

Uff. Das ist für 50 Hefte. Im Print kostet ein Heft 1,85 Euro * 50 < 150 Euro. Deutlich. (Einzelhefte kosten mit knapp 8 Euro nochmal deutlich Premium)

Und damit fing erst an, denn an jeder Stelle wirkt das Produkt als wäre es gestümpert. Mit einer Ausnahme - die Hefte sind gut gesprochen und machen Spaß zuzuhören.

Das ist das was es so unerträglich macht - ich mag das Produkt. ich mag es sogar so gerne das ich es gekauft habe. Und gleichzeitig bin ich ständig davon entnervt. Und das von Problemen die ein bei einem Download von einer Warez-Seite nicht auftreten würden.

Gnah!

Die Webseite

  • Unübersichtlich
  • langsam
  • Auf der Heftübersicht werden die noch nicht für den Download-Freigeschalteten Hefte ohne Titelbild angezeigt. Jeder neue Kunde bekommt dadurch das Gefühl auf eine Unfertige Seite zu schauen.
  • Jedes Heft hat seine eigene Unterseite auf der man drei mal klicken muss um die Download-Links zu sehen. Man muss Qualität und anzahl der Dateien auswählen.
    • Die Download-Links erscheinen nicht via AJAX, man muss tatsächlich die ganze Seite neu laden. :-(
    • Die Einstellungen werden natürlich nicht gesichert, das heißt man muss die Einstellung jedes mal neu machen
  • Wenn man ein Heft herunterlädt, dann möglichst nicht mit dem Browser, sondern mit einem Download-Manager, weil es schon mal vorkommt das der Download auf eine Weise zusammenbricht die man im Browser nicht fortsetzen kann. Noch mal eine Komplizierung.

Die MP3s

  • Kein Titelbild
  • Keine Inhaltsangabe in den ID3 tags
  • Wenn man den ganzen Roman als eine Datei heruntergeladen hat, steht in der Titelzahl irgend etwas von Titel 70 von 70 Titeln. GNAH! Es ist nur EINN Titel.
  • Das Gendre "Hörbuch & Gesprochene Inhalte" oder ein anderes Passendes fehlt
  • Der Tag "Position Speichern und nach einer Unterbrechung dort Fortfahren" fehlt.
  • Keine Kapitelmarker (Das Format ist MP3 - ausschließlich, ein Alternativangebot mit AAC fehlt)

Die Hefte an sich:

  • Keine Titelbilder
  • Keine Zusammenfassung was vorher war in Textform
  • Keine Leserbriefe
  • Keine Risszeichnungen
  • Keine Clubnachrichten
  • Keine PR-Magazine
  • Keine PR-Computer
  • Keine PR-Encyclopdien

Überhaupt, damit ich die Hefte genießen kann, muss ich sie jede Woche (nachdem ich eine e-mail bekommen habe)

  • Die Webseite ansteuern
  • Umständlich einloggen
  • Herausfinden welche Hefte ich noch nicht heruntergeladen habe
  • Von diesen Heften die Seite öffnen
  • Die Hefte von Hand herunterladen
  • Die Hefte in iTunes importieren
  • Die Lautstärkenanpassung abwarten
  • Von irgendwoher die Titelbilder besorgen und auf die Hefte anwenden
  • Die ganzen Tags von Hand fixen
  • Alles auf den iPod syncen

Und dann kann ich sie endlich hören.

Verglichen damit das ich vorher einmal die Woche sowieso am Kiosk vorbei gekommen bin habe ich also ganz schön was zu tun um weniger für mehr Geld zu kriegen.

Was ich eigentlich will, ist dagegen folgendes:

  • Einmal einen Podcast in iTunes einbinden
  • Mich einmal die Woche darüber freuen das mein iPod schon wieder ein neues Perry-Rhodan Heft enthält.
  • Mich einmal die Woche wenn ich Lust habe über das PDF im Podcast hermachen das die Extras enthält.

Das Produkt ist Toll - endlich Perry Rhodan bequem zum Hören - und gleichzeitig so fürchterlich das man es wirklich nicht weiterempfehlen kann.

GNAH!

Wieso nur können die illegalen Download-Seiten das nur so viel besser? Da geht das schon lange.

So jedenfalls kann ich niemanden an die Wand argumentieren der sich die Folgen lieber illegal saugt.

Saugen tut das Produkt ja schließlich schon selbst. :-(

Kirche Modern!

Jaja, das gibts!

 Ab jetzt kann man mit Gott auch Chatten!

Ha!

Und sogar in schick!

Me: Do you know Eliza?
God: Eliza -- also known as doctor, is the original psychiatrist program 
     developed by Joseph Weisenbaum at MIT in the 1960's.
Me: How fast you type!
God: I can reply to about  queries per hour.
Me: How many?
God: How many would you guess?
Me: NaN from your sentence.

:-)

Legalese und Babelfisch

Gefunden auf  Whatatop.com

At the moment when the user sends to us an image, it is granting us the right and the license for his use, free of royalties, not exclusive and transferable to third, that authorizes us to use it, distribute it, show it and spread it, and incorporate it in other works for the targets of this web page. Also, it grants identical rights to the USERS of our portal for his visualization, and uses deprived without fortitude of lucre. The granting of these licenses, they will remain revoked with the simple retreat of the image of the web, remaining current, permanent and irrevocable the granted ones before his retreat, without detriment to the rights of intellectual property that it shows on the image.

Was will uns der Autor damit wohl sagen?

Die Seite ist offenbar ein kleines Community-Projekt wo man Bilder hochladen kann ( einiges  davon  gefällt  mir  auch  ganz  gut)

Aber die Frage welche Rechte nun wer an diesen Bildern genau hat - die bleibt irgendwie offen. Persönlich habe ich ja die Vermutung, das der Text von einem Anwalt auf Spanisch geschrieben wurde um dann Maschinell oder mit wenig Verstand übersetzt zu werden.

Nun ja, bleibt er mir halt spanisch. :)

Andere machen auch Fehler...

Es ist doch immer wieder angenehm, wenn man feststellt das man nicht der einzige Mensch auf der Erde ist der Fehler macht.

Damit dieses Post besser via google zu finden ist, ab hier auf Englisch.

--- snip ---

For anyone trying to develop QT-based apps on leopard, take care. I couldn't find this bug documented anywhere, so I'm writing this up here.

The Leopard CDs Apple shipped with new computers right after leopard came out contain a very old QTKit Version in the 10.4u.sdk of Xcode 3.0.

This means (at least) that you get spurious warnings on building - and we have also found that it makes apps built on this machine (Leopard, Intel) behave very badly on PPC Tiger machines. That is, QuickTime Exports would fail silently. (This is what initally triggered us finding this)

To detect it, have a look at the file: </Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/QTKit.framework/Versions/A/Headers/QTMovie.h> and look till when the copyright goes. If it is till 2005 -> You have the old version. If it is till 2007 -> You most likely have the correct version.

I don't know if there are other problems with the CD Version of Leopard, so if you are using it, take care and consider installing something different!

Oh, and of course I filed a radar: 5699456

--- snap ---

Ah well. Mal schauen wo ich dieses Post unterbringen kann.

  • Posted: 2008-01-22 10:02 (Updated: 2009-10-24 16:22)
  • Author: dwt
  • Categories: fnord code
  • Comments (0)

Descriptiver Code…

Es geht doch nichts über selbstbeschreibenden Code. ;)

    IF_LAST_ERROR
        ERROR_HANDLING

Hat mir dann auch gar nichts genützt die nächsten Zeile zu lesen:

    diglossia* oracle=NULL;
    struct NmGsmCtrlCoreMsg* Msg=NULL;
    
    oracle=((diglossia*)PtrParamG->oracle);

Habt Mitleid mit mir....

Bitte kein C...

Also eines muss man Programmierern lassen, erfinderisch sind sie.

Heute stellt sich mein Verständnis von C wirklich auf die Probe.

Zuerst der Vorlauf, da gibt es einen parameter controller der immer als int übergeben wird - natürlich hartkodiert und ohne jeden kommentar was wofür steht. Ok, das ist jetzt ekelhaft, aaaber.

Dieser int wird dann in einem struct element iType gespeichert. Um herauszufinden was dieser Parameter nun macht habe ich also mal durch den SourceCode gegreppt um herauszufinden was damit passiert und bin dabei auf die viel versprechende Zeile switch(self->iType) gestoßen. Groß war da meine Freude, wenn auch leider nur kurz.

    switch(self->iType)
    {
            RefProg=USBprogressIndicator;
    }

Da stellt sich natürlich die Frage... was macht der Compiler daraus eigentlich? Interpretiert er es als

    switch(self->iType)
    {
        case default:
            RefProg=USBprogressIndicator;
    }

oder doch als:

    switch(self->iType)
    {
            RefProg=USBprogressIndicator;
        case default:
    }

i.e. heißt das eigentlich das der Code darin nicht ausgeführt wird? Und verhält sich das auf anderen Compilern / Compilerversionen genauso?

Ist doch immer wieder schön solche zoten in Sourcecode zu finden. :)

Update

Inzwischen habe ich nachgeprüft was da Sache ist. Meine Vermutung war, dass der Programmierer es ja nur im Code gelassen hätte, wenn es einen Sinn hat. Nun ja, man glaubt ja an das Gute im Menschen.

Ich musste mich dann aber doch eines besseren Belehren:

#include <stdio.h>

int main (int argc, char **argv) {
        int foo = 3;
        switch(foo) {
                printf("gotit\ne\n\n\n");
                return -1; 
        }

        printf("didn't get it\n");
        return 0;
}

Wie man am Beispiel sehen kann (mit etwas wie "gcc -o foo test.c && ./foo" ist es einfach zu zeigen das switch(foo) tatsächlich den gleichen effekt hat wie

#include <stdio.h>

int main (int argc, char **argv) {
        int foo = 3;
#if 0
                printf("gotit\ne\n\n\n");
                return -1; 
#endif

        printf("didn't get it\n");
        return 0;
}

Was ich wirklich herzlich Sinnlos finde.

  • Posted: 2007-12-13 10:09 (Updated: 2007-12-13 21:24)
  • Author: dwt
  • Categories: fnord
  • Comments (0)

Überwachung

„... Wer meint nichts zu verbergen zu haben, der übersieht, dass er sich täglich die Freiheit nimmt, im Stillen Entscheidungen zu treffen. Wenn selbst die Entscheidung, bei welchem Bäcker man wie oft seine Brötchen holt plötzlich für den Staat von Interesse sein wird, wird auch dem letzten klar werden, dass er etwas zu verbergen hat...“

Via  Rollmops.

Die klassischen Qualitätsmedien

Ich möchte dringend jeden Leser bitten, ab jetzt keiner DPA-Meldung mehr zu vertrauen.

 Denn was der Stern und  viele andere Blätter da als DPA-Meldung abgedruckt haben, geht wirklich auf keine Kuhhaut:

Protest gegen den "Überwachungswahn"

Unter dem Motto "Freiheit statt Angst: Stoppt den Überwachungswahn" haben rund 50 Bürgerrechtsgruppen, politische Parteien und Vereine einen Protestmarsch durch Berlin organisiert. 2000 Menschen folgten den Aufruf, doch der Marsch wurde abgebrochen.

Rund 2000 Menschen haben am Samstag in Berlin gegen eine Verschärfung von Sicherheitsgesetzen protestiert. Der Demonstrationszug setzte sich am Nachmittag unter dem Motto "Freiheit statt Angst: Stoppt den Überwachungswahn" am Brandenburger Tor in Bewegung, teilte eine Polizeisprecherin mit. Der von rund 20 Bürgerrechtsorganisationen und politischen Gruppen organisierte Protestmarsch wurde nach Veranstalterangaben von der Berliner FDP- Fraktion, der Berliner Linken und dem Grünen-Bundesvorstand unterstützt.

Polizei werden Übergriffe vorgeworfen

Der Protestumzug blieb allerdings nicht friedlich: Acht Festnahmen wegen Verstoßes gegen das Versammlungsgesetz und ein verletzter Polizist waren die vorläufige Bilanz der Ordnungshüter. Die Veranstalter, die der Polizei Übergriffe vorwarfen, brachen die am Brandenburger Tor gestartete Demonstration auf Höhe der Friedrichstraße ab.

Um mal  Netzpolitik.org zu zitieren:

Der kurze Text wimmelt nur so von Fehlern. Es waren mehr als 50 Organisationen, die zur Demonstration aufgerufen haben. In der Einleitung schrieben sie die Zahl auch korrekt. Es waren nach Polizeiangaben 8000 Menschen, was später gegenüber Heise auf 15.000 Menschen ausgeweitet wurde. Und die Veranstalter haben die Demonstration nicht abgebrochen, sondern der “schwarze Block” hat zum Schluss seinen Austritt aus der Demonstration erklärt. Das ist was ganz anderes.

Also bitte. Aus der Tatsache, dass diverse andere Blätter das unverändert und textgleich gebracht haben, schließe ich, dass das entweder die Original-DPA-Meldung war oder dass die Kollegen voneinander abschreiben, ohne die korrekte Quelle zu nennen.

Da ich letzteres dann doch nicht glauben kann, hat es wohl die DPA versaut.

Also Fazit: DPA: Bad, STERN: Bad, Taz:  Good, Netzpolitik.org:  Good

Seufz. Kann man wirklich nur hoffen, dass diese Käseblätter dem Dahinschmelzen der Werbebudgets in den klassischen Medien möglichst schnell zum Opfer fallen.

VLC Compilieren

Hab ich eigentlich schon über VLC gelästert? Wieso überrascht mich das im Nachhinein überhaupt nicht mehr, dass die Mac-Oberfläche immer noch so viele Bugs enthält, die eigentlich so einfach zu fixen wären?

Na?

Will ich doch mal aufzählen. Wenn man VLC (auf dem Mac - soweit ich das sehe ist das auf anderen Plattformen aber das gleiche) kompilieren will, dann...

  • Muss man zuerst eine obskure Wiki-Seite im VLC-Wiki finden, die überhaupt beschreibt wie man das macht. Denn: man muss zuerst Fink deaktivieren. Anstatt in ihrem Build-Script einen Check dafür zu haben, steht das aber nur irgendwo auf der Wiki-Seite. Das hat mich schon mal 3 Stunden gekostet.
  • Dann beginnt VLC damit, sich eine komplette Runde der Autotools zu bauen. Mir ist ja nicht klar, was sich die Entwickler dabei gedacht haben, aber offenbar funktioniert ihr Build-System nur mit einer ganz speziellen Version von Autotools und mit nichts anderem. Und damit das ganze Spaßig wird, haben sie sich eine ganz eigene kleine, schlecht funktionierende, buggy Version von Fink implementiert. Große Klasse, Jungs!
  • Damit aber noch nicht genug, denn selbst wenn man das alles zum Kompilieren überreden kann (was einiges an Händchenhalten erfordert) - produziert das Build-Script immer noch keine funktionsfähige binary.

Nun, man könnte jetzt einwenden, dass funktionierende Software sowieso überbewertet ist und all sowas. ABER ich hab nach zwei Tagen nur dem Build-Script beide Händchen halten und am Schluss doch keine funktionierende Software erhalten einfach die Nase voll.

Soll doch jemand anderes deren Bugs fixen.

  • Posted: 2007-08-23 17:05 (Updated: 2007-08-25 10:38)
  • Author: dwt
  • Categories: fnord
  • Comments (0)

Was ist ein Hotel?

Zuerst mal eine gute Absteige, vor allem für Wohlhabende Menschen, wozu bekanntlich auch oft Geheimnisträger gehören.

Als kleine Handlungsanweisung gibt es daher als Service vom CCC diesen Vortrag des 23C3:  Gäste-Überwachung in Hotels durch staatliche und private Schnüffler

Sehr Lehrreich, was die diversen Bananenrepubliken (wie Deutschland) so zu bieten haben.

Probleme beim installieren von Wordpress unter Mac OS X

Man sollte beachten das 'localhost' nicht gleich '127.0.0.1' ist. (mysql via  Fink)

Da wären sie nicht drauf gekommen? Tja, ich auch nicht.

Aber wenn man mysql via PHP sagt, das es sich mit der Datenbank auf localhost benutzen soll, dann versucht php die Verbindung via einem Socket in /var/mysql/blah herzustellen (der eben woanders ist, wenn MySQL wo anders installiert ist), während es bei 127.0.0.1 einen TCP/IP Socket verwendet...

Tja, wer hätte gedacht das PHP so intelligent ist.

Ego-Striptease?

In der Diskussion um den  Bundestrojaner finde ich die Frage der definition der Privatsphäre am wichtigsten. (Das ist auch die Abschlussfrage meiner Diplomarbeit, aber dazu später mehr)

 Gerade hat ja ein Gericht in den USA entschieden, das alles was über das Internet transportiert ist, oder auf einem am Internet angeschlossenen PC steht, sowieso nicht privat sein kann.

Das finde ich fürchterlich, aber immerhin erkennt das Gericht korrekt, das die neue Technik auch eine neue Definition des Begriffs 'Privatsphäre' erfordert.

Klar ist, das immer mehr Menschen einen immer mehr Daten über sich in einer Form preisgeben, die mit einfachsten Mitteln via Google ermittelt werden kann. ( Auf dem 23C3 gab es einen schönen Vortrag zu Profiling und diesen Fragen.)

Was wird also aus Privatsphäre? Die Vergangenheit hat jedenfalls klar gezeigt, das man nicht vorhersehen kann welche Daten, die man heute erzeugt, morgen überall frei zugänglich sind. Usenet Posting waren früher "relativ" privat, bis Google die Archive online gestellt hat.  Suchen bei Suchmaschinen waren relativ privat, bis ein Bruchteil der Suchdaten von Yahoo (pseudonymisiert) veröffentlicht wurde. Foren, Mailinglisten, Blogs, del.icio.us, Flickr, studiVZ, Xing, whois - alles verfügbar.

Was mir dabei fehlt ist die Diskussion was denn Privatsphäre ausmacht? Was kann Privatsphäre sein? Wie kann man Privatsphäre für sich reklamieren?

Offensichtlich ist die einfache Antwort: "Ja die leute müssen sich des Problems halt bewust werden, nicht ausreichend, da eben  Regulierung auch in der Architektur der Werkzeuge liegt. Soziale Netzwerke werden Nützlicher wenn man diese Daten preis gibt.

Zudem wissen wir nicht was die Zukunft bringt,  Jamais Cascios Participatory Panopticon ist für mich als Zusammenfassung sehr wahrscheinlich, aber ob das eben Gut ist, oder schlecht? Who knows. Vielleicht wird unsere Gesellschaft dadurch "Ehrlicher", weil man jede Lüge sowieso sofort enttarnen könnte, vielleicht straft unsere Gesellschaft dadurch aber auch abweichenden Meinungen ab.

In jedem Fall hätte eine Diktatur im vergleich zu früher unheimliche neue Mittel, andererseits, vielleicht auch eine Gegenöffentlichkeit die nicht mehr unterdrückbar ist?

Klar ist das Wir als Informatiker hier und jetzt die Aufgabe haben, die Systeme so zu gestalten, das diese Daten nicht einfach für eine Diktatur zur Verfügung stehen bzw. zur Verfügung stehen werden. Für die Zukunft muss die Diskussion geführt werden, was Privatsphäre bedeutet und wie jeder einzelne in die Lage versetzt werden kann diese zu schützen.

Und das ist schon für sich eine fast unlösbare Aufgabe.

Satire

Prophezeiung? = Eigentlich wollte ich mich ja mit  Culture Jamming beschäftigen, bin dabei aber völlig auf einer Kleinigkeit hängen geblieben:

Das amerikanische Satiremagazin "The Onion" hatte 2001, zu Bushs Wahl, den schönen Artikel  Bush: 'Our Long National Nightmare Of Peace And Prosperity Is Finally Over' geschrieben. Der Artikel zieht wie es sich für ein Satiremagazin gehört voll vom Leder.

 Konnte ja keiner Wissen das Bush das direkt als Regierungserklärung verwendet. :( (Jemand hat den Artikel mit Links auf all die tatsächlichen Ereignisse hinterlegt)

Tchernobyl

Man macht sich ja immer keine echte Vorstellung davon wie es dort wirklich ausgesehen haben muss. Ich zum Beispiel dachte (tja so einfältig kann man sein) das der explodierte Reaktor selbstverständlich weit weg ist von allem was da heute immer noch benutzt wird.

 Tja, falsch gedacht. Der Reaktor im NEBENGEBEUDE wurde noch bis ins Jahr 2000 betrieben und überhaupt ist dieses ganze Kraftwerk verflucht klein! Wer da Arbeitet ist praktisch per definition tot. *schauder*  (Ein paar Bilder aus den Krankenhäusern dort.)

Immerhin schön, das man sich aufgrund des Web 2.0 dort schön umsehen kann.... :-/

Publication Industrie pulls a Phillip Morris

Wenn man mit guten Argumenten nicht mehr Weiterkommt, dann muss man eben anfangen zu lügen. Einsichtig, oder?

Die Gemeinschaft der wissenschaftlichen Verlage hat sich daher jetzt entschlossen das es an der Zeit ist "direkter" vorzugehen. Oder wie es Susan Spilka, Wiley's director of corporate communications ausdrückt, man habe zu defensiv über das Problem der freien Informationen geredet und sich zu viele Sorgen darüber gemacht sich präzise auszudrücken.

Oh Jeh.  Immerhin ist es rausgekommen.

Militärische Logik.....

Vor etwa einem Jahr hab ich mich mit meinem Onkel (Uli) darüber unterhalten wie die USA und ihre Militärs arbeiten. Naja, er hat mich zerpflückt.

Um so mehr freut es mich das viele meiner Punkte  in diesem Text sehr schön aufgenommen werden. :)

Überwachungsstaat England

Immer wieder Nett was die Engländer sich so einfallen lassen um noch lückenlosere Überwachung durchzubringen. Jetzt wollen sie  Röntgen-Kameras einsetzen um den Passanten unter die Röcke und BHs (ahem) ich meine natürlich unter die Kleidung zu sehen. Natürlich um dort versteckte Waffen zu finden.

Logo...

 Hier gehts zum Artikel

Filesharing und freie Inhalte

Nachdem die Musikindustrie immer noch nicht einsieht das  Massenklagen gegen die eigenen Käufer letztlich kein Mittel sind diese in 'willig zahlende Käufer' zu verwandeln (Kunden finde ich als Wort dafür schon zu gutwillig) kann ich nur sagen das ich mich immer weiter davon entferne überhaupt Content zu konsumieren der unter solchen restriktiven Lizenzen steht.

Für Video gibt es iTunes oder was ich heute wiederentdeckt habe Projekte wie den  Democracy Player.

So. Jetzt geh mir zum Teufel Industrie.

p.s.: Freie inhalte gibts ja auch in der Forschung. Leider hat noch nicht jeder Wissenschaftler die Möglichkeit frei nach den Open Access Prinzipien zu veröffentlichen. Das ist vor allem bedenklich, da die Veröffentlichungsindustrie die um die Wissenschaften gewachsen ist  monopolartige Strukturen angenommen hat.

Gott sei dank gibt es aber  eine Petition großer Wissenschafatsverbände in Deutschland durch den  DFG vertreten die sich für eine gesetzliche Grundlage für Wissenschaftler einsetzen das diese ihre Papers nach 6 Monaten per Open Access Veröffentlich können.

 Unbedingt unterschreiben.