Posts for the month of April 2008

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.

hg <-> svn

Tja... leider nicht so einfach wie ich dachte.

Meine Versuche mit  BZR die verbindung herzustellen, haben leider nicht geklappt. Das  hg-plugin dort läuft mit der aktuellen Version leider nicht mehr - und hat auch keine Unit-Tests, sonst hätte ich mir ja schon mal etwas Zeit genommen um zu schauen woran es liegt.

Aber so...

Egal.

Was doch geklappt hat, ist mit  hgimportsvn einen svn checkout zu machen. Mit einem lokalen hg clone konnte ich dann Arbeiten und auf den svn-checkout zurückschieben und dann von dort comitten.

Vorteil:

  • Es geht überhaupt

Nachteil:

  • Alle commit Kommentare gehen verloren
  • Ich kann lokal so oft comitten wie ich will - im Subversion kommt nur ein commit an. :-/

Eher unbefriedigend. Aber immerhin kann man überhaupt an einem SVN-Checkout arbeiten.

Das Internet an Frau Merkel

 Das internet schrieb einen Brief

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

Pavel bringt es einfach auf den Punkt.

(via  fefe,  frank)

BZR -> SVN

Puah. Nach viel Gefrickel hab ich es endlich zum laufen gebracht.

Jetzt kann ich mit bzr von svn auschecken, lokal arbeiten (mit voller historie) und auch wieder comitten.

Was mich beim letzten mal? noch aufgehalten hatte war ein Bug, der in der neuesten Version zwar gefixt ist - aber man musste zusätzlich noch die ~/.bazaar/subversion.conf wegschmeißen.

Ach ja, und einen neuen Branch vom Subversion machen, das  rebase Plugin installieren und mit cd $NEW_BRANCH_LOCATION && bzr replay $OLD_BRANCH_LOCATION -r $REVISIONS_TO_GET die alten Patches holen.

Eigentlich ganz einfach wenn man es mal raushat. Und dann kann man das auch von dort aus in den SVN comitten.

Yeah. (Danke an  Jelmer Vernooij für die Hilfe beim fixen der Probleme)

Das neue Fazit: BZR: gut GIT: gut HG: kann bisher noch nicht ins SVN comitten - aber immerhin  arbeitet da jetzt jemand dran.

Bleibt noch den bzr hg modus auszuprobieren ob ich damit ins subversion comitten kann.

  • Posted: 2008-04-27 14:43 (Updated: 2008-04-27 14:48)
  • Author: dwt
  • Categories: code links
  • Comments (0)

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.

Yay, wir sind im Fernsehen!

 RKA hat es als  Berliner Vorstand  ins 3sat geschafft.

Gleich er erste Beitrag.

:-) Glückwunsch!

Programme sind auch nur eine Sprache

Das wissen wir ja alle - sind schließlich Informatiker.

Und Programme sollte man analysieren, damit man sich darüber im Klaren ist was sie tun.

Und aus Programm == Sprache folgt damit das man auch Sprache genau analysieren sollte, damit man versteht was sie tut.

Und das macht  MaHa hervorragend im Chaosradio 81.

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

Geil...

Wuala vs. Tahoe

 Wuala und  Tahoe sind zwei technisch ähnliche Systeme mit dem gleichen Ziel: Sicher Online Dateien tauschen und speichern können.

Und das Verteilt, Verschlüsselt, Dateisystemsemantik. Als Modell haben sich beide ein Verschlüsselungs und Rechtesystem ausgedacht die ein Friendt-to-Friend Netzwerk möglich machen - also ein Netzwerk in dem man alles einstellen kann was man möchte, aber mit der Sicherheit, das nur derjenige dem man das erlaubt hat die Daten sehen kann.

Naja, eigentlich ein etwas unfaierer Vergleich.

Denn, hinter Wuala steht ein Startup, eine Firma also die jede Menge Geld in den Aufbau des Netzwerkes steckt (Interessanterweise handelt es sich dabei um eine  Ausgründung aus der ETH Zürich. Das erlaubt es dem Netzwerk jedem Benutzer erst einmal 1 Gigabyte Speicherplatz zu schenken (und ein weiteres für jeden Benutzer den man wirbt) und eben auch mittels zentraler Server, die Benutzung das Projekt vor allem am Anfang enorm zu beschleunigen und damit eine bessere User Experience zu bieten.

Auf der anderen Seite ist  Tahoe ein reinrassiges Open Source Projekt.  Buildserver,  Repositories ( Darcs), Trac... alles da.

Dafür ist das Programm noch deutlich unfertig. Immerhin gibt es am Anfang einen schönen Login Dialog - aber das war es auch erstmal.

Ah well, die Entwickler im IRC-Kanal #tahoe sind jedenfalls sehr hilfreich und nett - und der größte Teil des Projekts ist in Python geschrieben. Das ist doch schon mal was.

:-)

"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.

OpenWRT

Funkt.

Jetzt endlich sogar kabellos verbunden mit meiner restlichen Infrastruktur.

Schon spannend was das System alles an Paketen mitbringt.

  • Aircrack-ng
  • Aircrack-ptw
  • etc...

Die volle Ausstattung um Unsinn zu treiben. :-)

Dazu noch die Pläne der Freifunker, einen La Fonera Router mit Notebook-Baterien im Rucksack liegen zu haben, der Mesh und gleichzeitig vorhandene Netze Attakieren öffnen kann...

:-)

Leider kann das gegenwärtige OpenWRT noch keinen AdHoc Modus gleichzeitig mit etwas anderem anbieten (sonst könnte der Accesspoint bis zu 4 Netzwerke gleichzeitig anbieten) so dass es nicht möglich ist, das er über ein Normales WLAN Netz sein Internet bezieht und diesen dann über das Mesh weiter gibt.

Andererseits gibt es den  La Fonera Pack, der auf das normale Fonera zusätzlich zu der Fonera Dienstleistung noch das Meshing anbietet.

Also muss es wohl doch irgendwie gehen.

Nur wie?

Freifunk

Ha!

Es Funkt. Frei.

Naja fast. Jedenfalls funkt das  OpenWRT schon mal. An dem  Freifunk arbeite ich noch.

Immerhin gibt es ein paar Straßen weiter wohl noch weitere 3 Leute die Freifunk machen. Interessanterweise wohl auch immer gleich sowohl  OLSR als auch  B.A.T.M.A.N..

Na mal schaun wie das läuft. Auf dem  Fonera soll ja zusätzlich auch noch FON als Dienst laufen.

Ah well, schaun mer mal.

Wenn die Hardware tatsächlich an Hitzeproblemen verstirbt, muss ich halt ein neueres Modell nachbestellen.

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

HG, BZR und GIT

(zu  Hotaka)

Well, am WE hab ich mich mit  Felix gerade über Versionskontrollsysteme und unsere Experimente mit  HG unterhalten, als mich jemand 'von der Seite angemacht' hat, dass doch wohl im Moment alle Welt weg von HG und hin zu  GIT wechseln würde.

Well, das konnte ich so nicht glauben, aber ich wollte mir die verschiedenen Tools dann doch mal anschauen - vor allem in Hinsicht auf  SVN Kompatibilität - denn ich setze SVN sowohl für meine  Arbeit, also auch für mich Privat ein.

Na, denn ma auf zu dem Vergleich:

GIT

... hab ich mir als erstes dran genommen, und bin erst mal dran gescheitert, das das perl-script, dass den SVN-Modus macht via Fink natürlich nicht mit meiner Installation zusammenwollte, weil diese alten Perlhacker natürlich alle davon ausgehen, das Perl in /usr/bin/perl liegt. Well, tut es bei mir nicht, bzw, in /usr/bin liegt eine alte version von Perl, die eine bestimmte Library nicht enthält, die aber das Skript benötigt. ARGH! Also erst mal einen Patch zusammengebaut und an den Maintainer geschickt der das auf /usr/bin/env perl ändert. Oh well.

Danach war aber eigentlich alles dandy, bis auf die Tatsache, das ich trotz längerem nachlesen ums verrecken nicht verstanden habe, welchen Sinn diese komische Staging-Area "Index" haben soll, die man bei GIT immer zuerst mal auffüllen muss, bevor man sie Comitten kann.

Well, GIT is powerfull - aber für meinen Geschmack zu sehr an den Geschmack von Herrn Torvalds angepasst. Mag ja sein das er nur mit inkonsistenten und komplizierten Kommandozeilenoptionen effizient arbeiten kann. Ich jedenfalls hab was besseres verdient. Ausserdem erzeugt es bei mir Ablehnung wenn Herr Torvalds aus seiner Göttlichen Eingebung sämtliches anderes für Mist erklärt und dann etwas neues macht was deutlich komplizierter ist als die anderen - ohne das klar wird, wieso diese Komplexität der richtige Default ist und man nicht das Einfache zum Default machen kann, um das komplizierte als Option anzubieten.

Fazit: Funktioniert, push und pull zum SVN server waren kein Problem und das ist schon mal ein starkes Stück. Beindruckendes Tool, dass aber auch viel Ablehnung in mir erzeugt.

 BZR

... war dann der zweite Kandidat, der nicht mehr viel Langsamer daherkommt als die anderen beiden (allerdings auch nicht zacko schnell). Allerdings, gibt es eine nette Extension die das Kommando shell hinzufügt. Das ist nett, denn dann hat man eine native Shell in bzr und hat superschnelle reaktionen, Tabvervollständigung überall, etc.

Der Checkout aus SVN hat auch prima geklappt (die Anfangsschwierigkeiten hatte ich vor einem halben Jahr, als ich mir die SVN-Python-Bindings selber bauen musste. ARGH war das ein Kampf.) Jetzt hatte ich sie aber schon und mir auch schon die notwendigen Wrapper-Skripte gebaut die die Library dann halt noch dazuladen.

Well, was soll ich sagen: pull vom SVN war hervorragend, lokales arbeiten auch, aber das Push.. das stirbt immer mit Fehler 175008 (ernsthaft!) und wirft mir dann noch an den Kopf das irgend eine property nicht angewendet werden konnte. Wenn er wenigstens sagen würde welche Property das Problem ist.. Aber naja.

Fazit: Sehr poliert. Gerade im Vergleich zu meinem letzten Test ist die Dokumentation viel besser geworden, das ganze Tool wirkt durchdacht. Vor allem der Output der Kommandos hat mir gefallen, schön aufgeräumt und übersichtlich. Dann ist da natürlich die Tatsache das dieses Tool doch immer noch das einzige ist, das tatsächlich Verzeichnisse auch Versionieren kann und mit renames vernünftig umgeht. Ahh.... Endlich ohne scheu refaktorn. :-)

HG

... will ich eigentlich schon länger mal benutzen, aber es hat mir bisher immer nur zu ein paar kleinen Experimenten gereicht. Allerdings: Felix hat sich schon anstecken lassen und verwendet das jetzt nahezu ausschließlich.

Well, mein Testcase hat leider gar nicht Funktioniert. Einigen  Anmerkungen hatte ich entnommen das HG jetzt auch auf SVN zurückschreiben kann herausgefunden wie das geht, hab ich aber leider nicht. Oh well.

Fazit: Schnell, gute Bedienung und Python - aber ungeeignet um damit gegen SVN Repositories zu Arbeiten.

Fazit Fazit

So, dann bleibt mir also die Wahl: entweder GIT zu akzeptieren um damit gegen SVN zu arbeiten, oder aber den Bug in BZR zu finden um dann damit zu Arbeiten.

Vom Bauchgefühl her würde ich mich eigentlich lieber an BZR heranmachen. Mögen tue ich HG am liebsten, das hat einfach das einfachste Design und auch noch eine sehr gute Integration in das System - so öffnet es zum Beispiel standardmäßig gleich das System Merge-Tool (opendiff) anstatt CVS like Konflitkmarker in der Datei zu verstreuen.

So macht man dass.

BZR ist auf jeden fall mein zweiter Favorit - auch Python (kann ich also Hacken) und schön durchdacht - wenn auch manchmal etwas verbose zu bedienen (pull z.B. macht kein merge, aber er sagt einem dann das man statt pull merge machen müsste. ???)

GIT wirkt wie eine mächtige Kanone - ja man kann damit auch auf Spatzen schießen - ja danach wären sie tot - aber muss man sich das wirklich antun, das jeder normale Usecase ein wenig Komplizierter zu handhaben ist als mit den anderen Tools, nur damit man im zweifelsfall auch den Linux-Kernel mit dem gleichen Tool Maintainen kann?

Ich jedenfalls beantworte diese Frage für mich mit einem klaren nein. Und werde mich jetzt erstmal auf bzr und hg werfen.

Eine Schreibmaschine... sort of :-)

Kleine Graphik-Schmankerl

Ich habe mich über die letzten zwei Tage erneut  von Katrin inspirieren lassen.

Herausgekommen ist ein kleines Cocoa-Programm Download (Source) dass ein wenig mit solchen Grid-Animierten Ansätzen herumspielt und nebenbei noch ein wenig Sheets und Preferences verwendet.

Interessant ist dabei für mich der unterschiedliche Ansatz: Katrin war wichtig, das jeder Display Vorgang in konstanter Zeit abläuft und sie verwendet daher eine Liste der einzelnen Rechtecke. Ich hatte mir das auch überlegt, mich dann aber dagegen entschieden weil es komplexer zu Programmieren gewesen wäre.

Geschwindigkeit hat sich dann im Test überhaupt nicht als Problem herausgestellt - aber das grundsätzliche Problem bleibt. War es vernünftig den Code erst einmal einfach zu halten? Ich bin überzeugt das ja.

Ganz zufrieden bin ich aber noch nicht, weil das einzige Objekt ein View und gleichzeitig der Controller für die Preferences des Programms ist.

Aber - das Programm ist so auch kurz und Übersichtlich.

Hm.

Mal schauen was ich noch daraus mache. Vorschläge für interessante und auf dem modell ausdrückbare Algorithmen immer gerne an mich.

Hier noch ein paar Screenshots:

Screenshot Brownian Motion Algorithmus

Screenshot Random Cycle and Prefs

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.

[http://de.wikiversity.org/wiki/Hauptseite Wikiversity]

Ist ein Schwesterprojekt der  Wikipedia.

Man sieht sich als eine Plattform zum gemeinschaftlichen Lernen, Lehren, Nachdenken und Forschen.

Könnte das der lang ersehnte nächste Evolutionsschritt der Universität sein? Das wie sie in 10 Jahren aussieht?

Mal genauer schauen. Morgen.

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.

:-)

Was willst du in der Piratenpartei?

Ich will das die Partei transparent ist und bleibt. Jeder der dabei ist oder sich dafür interessiert soll komplett sehen können wie und an was wir arbeiten. Geheimniskrämerei ist nicht.

Ich will das die Partei Demokratie neu erfindet. Das Internet verspricht, dass man sich einfach und so tief man möchte, in die Themen einbringt die einen Interessieren und von denen man etwas versteht. Dieses Versprechen gilt es zu umzusetzen und gleichzeitig die Grundsätze der gleichen, freien und geheimen Wahl zu erhalten.

Hohe Ziele. Vor allem das letzte ist haarig. Denn: Wahlcomputer und mit ihnen alle Systeme die ich bisher kenne, haben einen gravierenden Nachteil: Bei einer normalen Wahl, kann man jeden x-beliebigen Erwachsenen bitten die Wahl zu beaufsichtigen. Wenn man ihm dann noch 3 Minuten lang erklärt wie alles funktioniert, kann er den ganzen Tag zusehen (er hatte vermutlich eh gerade nix zu tun) und am Abend dann mit voller Überzeugung verkünden dass dort alles korrekt abgelaufen ist (wenn dem denn so war).

Das geht mit technischen Systemen bisher nicht - und das ist ein Problem. Aber da sind wir garantiert die einzige Partei die das lösen kann.

  • Posted: 2008-04-07 22:12 (Updated: 2008-04-07 22:13)
  • Author: dwt
  • Categories: politik
  • Comments (0)

Programmieren Lernen - mit Scheme?

Meine Freunden hat sich mal damit beschäftigt. Und da dachte ich, schauste doch mal was es da so gibt.

Klaro das große alte  SICP, der Großvater aller großartigen Programmierbücher mit Tiefgang. Gleichzeitig aber natürlich auch ziemlich Tief und für jemanden der sonst von Informatik nicht so viel Ahnung hat vielleicht zu viel.

Das sehen  andere  Leute auch so und daher gibt es inzwischen einen Nachfolger: Das  HTDP.

Well, die Haupt Kritik war eigentlich das das Buch zu viele Grundlagen in der Elektrotechnik verlange und zu tief in die Konstruktion von Computern hineingeht, dabei aber gleichzeitig zu wenig darüber erklärt wie man eigentlich ein größeres Programm aufzieht.

Und genau das wollten sie anders machen.

Gut fand ich dass Sie sich mühe geben jede ihrer Kapitel mit einem Rezept abzuschließen, in dem dann Dinge stehen wie "Mach dir erst Gedanken darüber was aus deinen Funktionen herauskommen muss bevor Du sie implementierst, damit Du Logikfehler besser finden kannst. - Schon mal ein guter Ansatz.

Dazu kommt durchweg eigentlich ein recht sauberer Programmierstil mit dem ich durchaus leben kann.

Was mir eher auf den Geist ging: Die ganze Zeit über predigen sie es, dass man zu jeder Funktion einen "Kontrakt" schreibt, der erklärt welche Typen man erhält und welche man zurückgibt.

Well, das ist ja ganz schön, aber entweder, soll man eine Sprache mit Typechecking nehmen, oder es lassen. Die Dokumentation ist zwar ganz nett - aber dann doch bitte so, dass man die Variablen so eindeutig benennt, das keine Typ-Unsicherheiten auftreten.

So sind die Kommentare (von denen sie pro Funktion mindestens drei bis fünf Zeilen haben wollen) nach der ersten Änderung einer Funktion nicht mehr aktuell.

:-(

Dazu kommt, dass der Klammernwald von Scheme, natürlich gerade für Anfänger schnell mal verwirrend wird und ohne Editor-Unterstützung gar nicht handhabbar ist. Andererseits: da gewöhnt man sich gleich daran kleine Funktionen zu schreiben...

Was ich auch merkwürdig finde ist, dass den studenten die wirkliche Freude eines  metazirkulären Interpreters vorenthalten wird. Da hat man sowas mit Scheme schon unter der Haube, und dann geht es irgendwann um den Interpreter und es werden lauter neue Datentypen eingeführt um etwas Scheme-Ähnliches darzustellen, dass dann nicht mal richtig interpretiert werden kann.

Habt ihr wirklich toll gemacht.

Generell hat das Buch weniger Tiefgang als das  http://www.htdp.org/SICP - vor allem weil es dazu natürlich die ganz hervorragenden  Video-Lectures gibt, die einfach nur begeisternd sind.

Fazit: Irgendwie hat das Buch schon Sinn - aber Begeistern kann es mich nicht. Mal schauen wie es meiner Freundin geht. :)

p.s.: Zum SICP gibt es noch einen Nachfolger,  SICM - Structure and Interpretion of Classical Mechanics. Das werd ich mir mal demnächst ansehen müssen. :)

Computational Thinking

Was ist Informatik?  Jeannette Wing bringt es ganz hervorragend auf den Punkt:

Computational thinking is thinking recursively. It is parallel processing. It is interpreting code as data and data as code. It is type checking as the generalization of dimensional analysis. It is recognizing both the virtues and the dangers of aliasing, or giving someone or something more than one name. It is recognizing both the cost and power of indirect addressing and procedure call. It is judging a program not just for correctness and efficiency but for aesthetics, and a system’s design for simplicity and elegance.

Dem ist eigentlich nichts mehr hinzuzufügen - ausser vielleicht einem deutschen Begriff. Einen Perfekten Begriff habe ich noch nicht gefunden, aber einen Vorschlag: Informatisches Denken.

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.