Thoreau zu lesen ist unbequem

June 23rd, 2008

Zumindest muss ich, trotz meines gigantischen Wortschatzes im Englischen, oft bei dict.leo.org nachschauen, was denn etwas bedeutet. Von dieser aeußerst eloquenten (*hust*) Person lese ich derzeitig “On The Duty of Civil Disobedience”. Der Text ist bisher recht nett; durch die Fußnoten, die die netten Leute von `panarchy.org’ rechts eingefuegt (Rechtsnoten? Passt nicht.) haben, versteht man auch gleich mehr.

Nebenbei: Ich bin ja sehr antinationalistisch gestimmt und werde deshalb nicht gerade wenig diskriminiert. Ich sehe den Nationalismus so, wie Marx die Religion sah; als Opium des Volkes. Und dieses Opium manifestiert sich heutzutage gerne im Fußball. Fußball ist per se nicht schlecht, obwohl es eigentlich von Natur aus ein `wir’ und `die’ mit sich bringt. Wenn es von normalen Menschen, die nicht gerade nach Leistung streben, gespielt wird, dann trinkt man auch nach dem Spiel mit dem Gegner (egal, ob gewonnen oder verloren) ein Bierchen, ohne sich nebenher die Birne einzuschlagen. Wenn das aber zu sowas kommt, wie es hier ist (Randale aufgrund des Verlierens der eigenen Mannschaft, Fernseher auf Ueberlautstaerke (ich konnte mit knapp 100m Distanz, obwohl meine Fenster geschlossen waren, diese idiotischen Fußballkommentare hoeren), und, natuerlich, Diskriminierung gegen Leute wie meiner einer), dann ist das nicht mehr normal; da geilen sich irgendwelche Nationalisten an ihren Siegen auf bzw. beschuldigen das (feindliche) Gewinnerteam irgendeiner Scheiße und demolieren dann Sachen, die aus dem jeweiligen Land kommen bzw. Personen der jeweiligen Nationalitaet gehoeren. Das ist das gefaehrliche daran.

Ich habe ja schon eines meiner Lieblingskritikthemen erwaehnt - Religion. Der Nationalismus ist eigentlich auch eine `Religion’; naemlich die Religion des `Vaterlandes’, welches unfehlbar ist und niemals verlieren wird; und wenn doch, so haben die anderen deutlich betrogen. Orwell hat sich ja auch mit Nationalismus beschaeftigt - und hat die Nationalisten schon mit verdammt irrationalen Vollidioten gleichgestellt. Und dabei hat er aber noch eine Unterscheidung gemacht, naemlich zwischen jenen und den Patrioten, die nur ihr Land moegen, aber es nicht als unfehlbar ansehen und auch nicht wollen, dass es um jeden Preis das Beste ist. Patrioten gehen ja noch - Nationalisten nicht. Und wir haben definitiv zu viele Nationalisten. Warum ist sowas schlimm? Zu viel Irrationalitaet (Ich schau auf dich, Wurzel 2!) ist nicht besonders gut fuer eine Gesellschaft. Irrationalitaet fuehrt irgendwann auch zu Willkuer - und Willkuer fuehrt gerne, falls die Mittel vorhanden sind, zu Ueberwachung, woraus mehr Willkuer folgt und evtl irgendwann in 1984 endet.

So long. Ich quaele mich mal weiter durch Thoreau.

Berechnen der nten Wurzel (Python, Scheme)

June 17th, 2008

Einmal von Python, um meinen alten Beitrag fuer Quadratwurzeln zu uebertrumpfen, und zum anderem per Scheme, um einfach die unglaubliche Ausdrucksfaehigkeit der Sprachen der LISP-Familie zum Ausdruck kommt.

Man koennte, natuerlich auch die mathematische Grundlagen von Python/Scheme ausnutzen und n**1/root (bzw. (expt n 1/root)) rechnen lassen und somit sich gar nicht um die Implementierung eines Verfahrens zur Berechnung einer Wurzel kuemmern; allerdings kann man davon nichts lernen.

Python:

from decimal import Decimal

def callRecNthroot(num=1, approx=1, root=2, steps=5):
    if approx == 1:
        approx /= root
    num, approx = Decimal(str(num)), Decimal(str(approx))
    return recNthroot(num, approx, root, steps)

def recNthroot(num, approx, root, steps)
    if steps > 0
        return recNthroot(num, (1/root)*((root-1)*approx + (num/(approx**(root-1))), root, (steps-1))
    return approx

Eigentlich ganz verstaendlich, bis auf ein paar Einfluesse von mir und meinem eher funktionalen Hintergrund, der auch Faulheit enthaelt.

foo /= n

bedeutet

foo = foo/n

. Meinen funktionalen (Wtf? `funktionen’? War ich da besoffen?) Hintergrund sieht man bei der tail-recursion: Ich packe alle Veraenderungen in den erneuten Funktionsaufruf, auch wenn das recht nervig ist, wenn man das aus dem Kopf heraus macht. Der neue Wert von approx stimmt; das ist das Newtonverfahren, wenn man nicht ableiten kann bzw. gerade keine Ableitfunktion (ist sehr kurz) schreiben moechte. Ich habe in Python einfach mal das `steps’-Argument benutzt, anstatt eine Praezision zu definieren; solange man eine nicht allzu ferne Naeherung angibt, so sind i.d.R. alle Stellen bis steps^2 korrekt.

Scheme:

(define (enough-prec? a b prec)
        (< (abs (- a b)) prec))

(define (nthroot n root)
        (lambda (x)
                (cond
                        ((enough-prec? n (expt x root) 0.0001) x)
                        (else ((nthroot n root) (* (/ 1 root) (+ (* (- root 1) x) (/ n (expt x (- root 1))))))))))

(Der letzte Teil ist so ziemlich das Gleiche.)

Man ruft die Funktion per ((nthroot n root) <approximation>) (Vergessen, dass HTML die Kleiner- und Groeßerzeichen frisst.) auf; fuer die Leute, die kein Scheme koennen. Die Annaeherung sollte moeglichst eine Dezimalzahl sein, da Scheme ansonsten ganz stolz eine rationale Zahl hervorbringt, die u.U. lang und unverstaendlich ist. (Probiert etwa mal ((nthroot 1000 3) 15); zwar bekommt man schnell etwas zurueck, allerdings hat das bei mir in Guile fast 2 Zeilen verschlungen.) Nun aber zum Code: Die Funktion (enough-prec?) nimmt 3 Argumente; zwei Zahlen, die sie voneinander subtrahieren soll und danach den Betrag davon berechnen soll, und eine Praezision; recht trivial, noch. Jetzt kommen wir zur Hauptfunktion: Ich benutze (lambda), um eine anonyme Funktion zu benutzen, die recht nett und praktisch sind. In ihr benutze ich (cond), um zwei Faelle zu unterscheiden: Zum einem, ob genuegend Praezision erlangt wurde; falls dies der Fall sein sollte, so spuckt er meine Annaeherung aus. Wenn nicht, wird er (nthroot) mit selbem n und root, aber einem neuen Argument fuer (lambda), aufrufen; eine tail-recursion; oder eher mies uebersetzt: Endrekursion. Der Trick dabei: Durch (enough-prec?) wird er solange weiterrechnen, bis man die gewollte Praezision hat; hier ist es 0.0001.

Was wohl eher auf einem Taschenrechner landet? Letztere Methode, mit so viel Genauigkeit, wie der Rechner Stellen anzeigt. Durch einen Tastendruck wird wohl eine Abstraktionsfunktion, sagen wir mal (nroot) aufgerufen, die n und root benoetigt und daraus eine sinnvolle Approximation macht. Wenn der Wert zu hoch ist, etwa ((nthroot 8 3) 64), so koennte er ewig weiterrrechnen. (Die Naeherungsmethode wuerde so eine immer groeßer werdende Naeherung herausgeben.)

(so long and (more (fun understanding)))

Python und Scheme

June 5th, 2008

Ich weiß ja auch nicht, warum Lisp kein Industriestandard wurde; allerdings ist folgendes laecherlich:

In Scheme kann ich die “accumulate”-Funktion aus dem SICP ohne Probleme implementieren. In Python habe ich mit `eval’ gerungen und muss jedes Argument als String angeben. Sprachen, die kein `eval’ haben, werden wohl gar keine solche Funktion definieren koennen und somit kaum abstrakt arbeiten koennen. Schlimm.

Python: http://pastecode.com/?show=m3128cab7
Scheme: http://pastecode.com/?show=mc4e5c48

Und nun sag mal jemand, dass sich Lisp nicht lohne.

So long.

Programmiersprachen

June 3rd, 2008

Neben meines Schreibanfalls wegen dieser verdammten Maus, habe ich mir heute mal wieder ein paar Gedanken zum Thema Programmiersprachen gemacht; vor allem, da ich ja Lisp (derzeitig am ehesten Scheme durch das SICP) lerne und es - imo - eine Ausdrucksfaehigkeit hat, die von keiner anderen Sprache angegriffen werden kann. Allerdings: Wenn man allein durch die Ausdrucksfaehigkeit seine Sprache waehlt, so programmiert man in einem Vakuum; man laesst den Luftwiderstand - oder, um es passender zu formulieren, den “Ich-entwerfe-noch-einmal-das-Rad-und-zwar-doppelt-so-gut”-Faktor - weg.

Was ist denn dieser komische Faktor? Einfach: In Python (oder ein Java, wer diese gehypte Sprache mag) hat man schon eine Menge von Libraries, die einem vieles abnehmen. Du musst HTML parsen? Kein Problem - Python hat dafuer schon ‘ne Lib - `Modul’ auf Pythonisch. In Scheme sucht man vergeblich nach so ‘ner Lib - es soll ja eine abgespeckte Version von Common Lisp, der gigantischen Multiparadigmapsprache, die mehr Augen hat, als Java Libs, sein. (Das Standard von Scheme passt eigentlich fast gar in den Index des Standards von CL; da erkennt man den unglaublichen Unterschied zwischen diesen beiden Dialekten von Lisp.)

Wenn man sich traut, sich diese Libs selbst zu schreiben - und nebenbei produktiv zu sein, d.h. etwas anderes machen als die Libs zu schreiben - dann soll man es ruhig tun. Klar - es ist ein gigantischer Gewinn, wenn’s um Faehigkeit geht, aus dem geringem, welchem man in Scheme hat, solche Libs zu bauen - allerdings hat der schlechte Javaprogrammierer, waehrend der Schemeprogrammierer unglaublich produktiv seine Libs macht, schon laengst seinen Auftrag erledigt. CL hat nicht allzu viel von diesem Defizit; dafuer wollen aber viele schon wegen den Sexps (“S-expressions”, ihr notgeilen Deppen!) und der komischen Makrosyntax gar nichts davon wissen - obwohl beide eben den LISP-Programmierer so unglaublich maechtig machen.

Insofern kann man sagen, dass CL - auch wenn es so gigantisch ist und, nebenbei bemerkt, ein veraltetes Librarysystem hat - durchaus eine Alternative zu Java ist. Bloß warum wird CL nicht oefters benutzt? Weil Java einfach nur richtig dick von Sun gehypt wurde. CL ist schneller, besser und ausdrucksfaehiger als Java - und je mehr Personen eine Sprache nutzen, desto mehr Libs wird es dafuer geben. (Nebenbei bemerkt: Manche Compiler von Scheme schaffen - wirklich - eine Geschwindigkeit von Code, die die Herrschaft von C im Bereich der Geschwindigkeit angreift - und diese Compiler sind selbst in Scheme geschrieben.)

Jetzt knallt’s - was weiß ich die wievielte

June 3rd, 2008

So, gut, ich komme von der Schule heim. In der letzten Stunde, selbstverstaendlich, Franzoesisch - Hassfach, beschissene Sprache und so. So, denkt man man kaeme heim, kann sich ausruhen, den Computer anschalten und dachte ebenso am vorigen Abend, dass die Maus nach einem laengeren Ausschalten wieder funktionieren wuerde - nichts da! Nein, natuerlich funktioniert die Maus nicht. Also, Windoof booten, mal schauen ob sie da auch nicht funktioniert. Ja, wie ich es liebe, sie funktioniert da auch nicht. Naja, gut, klauen wir mal die Maus von der Mutter - ist ja ‘ne Kabelmaus - und probieren die aus. Nein, funktioniert auch nicht - #”§%!

Gut, vielleicht zeigt der Monitor das nicht mehr an; er ist ja arg in die Jahre gekommen. Schnappen wir uns den Monitor, hieven wir ihn hoch (gar nicht so leicht, wenn man keine Muskeln hat und eher auf seinen Bauch setzt) und stellen ihn ca. 6m Nichtluftlinie entfernt auf den Esstisch. Den anderen Monitor aus dem Zimmer meines Bruders holen; den sollte ich eh schon laengst benutzen, laut ihm. Oh, Schreck, oh Graus, schon das Menue in GRUB sieht graesslich aus! (Oh, Schreck, oh Graus, das sieht ja gar wie ein Reimchen aus!). Ubuntu probieren - nein, die PS/2-Maus funktioniert immer noch nicht. Resetten, da ich komischerweise per Tab nicht auf das Teil zum Herunterfahren komme. Windoof booten - keine Maus funktioniert. Loggen wir uns mal ein. Firefox per 1337en Faehigkeiten aus Tab und den Pfeiltasten aufrufen - mal in einem Forum fragen, ob da wer einen Gedanken dazu haette. Nebenher noch einen IRC-Klienten, den ich fuer solche Notfaelle auf Windoof installiert habe, starten.

Okay, im Forum meint jemand, dass die Anschluesse am PC nicht sauber waeren - dann haette das graduell im Laufe der letzten Tage zugenommen, aber egal; ich habe ja nur erwaehnt, dass das vor ein paar Tagen so war - und sich trivial loesen ließ - und das jetzt wieder so ist. Zum anderem kam jemand, den ich IRL kenne, mit dem eher sarkastisch gemeinten Kommentar, dass mein Motherboard kaputt waere; gut moeglich, allerdings wuerde da mehr nicht mehr funktionieren. So, gut, deren Ideen mit einem Post invalidiert.

Mittlerweile ist der Server des Forums abgestuerzt und der IRC-Chat fuellt sich mit Leuten, die absuchten wollen; natuerlich koennen die mir nicht helfen. Nach ein paar simplen Fragen und ein paar geringfuegig sarkastischen Kommentaren zu der Unhilfsbereitschaft von manchen Personen wurde ich gekickbant - aeußerst sozial, insbesondere, wenn ein Sop da anwesend war, der gerne mit seiner Sozialitaet prahlt und mir doch sagt, wie asozial ich doch sei und es ein Segen sei, dass er mich auf seiner Ignorierliste habe.

Nach der guten alten Informatikerweisheit, dass etwas Ruhe fuer den PC, nachdem Murphys Gesetz zugeschlagen hat, Wunder wirken soll, habe ich ihn fuer ein paar Minuten ausgeschalten. Bla, bla, etwas Orwell gelesen, mich ueber meinen idiotischen Physiklehrer aufregt und so weiter und so fort. Aber dann! Oh Schreck, oh Heil, die Kabelmaus funktioniert unter Ubuntu.

Und nun poste ich das hier, mich selbst fragend, warum zur inexistenten Hoelle die Kabelmaus funktioniert, aber die Funkmaus nicht, obwohl das Funkkeyboard funktioniert. Frage an die Leser: Was zur Hoelle war das? (Selbst ich bin in diesem Falle unwissend. Ich koennte allerdings zu jeder Zeit annehmen, dass mein Computer zur Frau mutiert - das erklaert alles. Das ist aber eher unwahrscheinlich.)

IPfilter-Plugin fuer KTorrent (Ubuntu 7.10)

June 1st, 2008

Neben den Paketen, die von KTorrent benoetigt werden, muss man fuer den IPFilter noch kdebase, der i.d.R. noch die kioslaves installiert, installieren. Ansonsten kann KTorrent anscheinend nicht die Datei konvertiern, wodurch man keine Blockliste hat.

Um das zu beheben, benutzt man einfach Synaptic und sucht nach “kdebase”; das Paket sollte da aufgelistet werden; bei Kubuntu sollte es schon laengst installiert sein, da es ein essentieller Bestandteil von KDE ist. Einfach ankreuzen und installieren lassen. Die Konsolenlieberhaber koennen natuerlich auch apt nutzen.

Mitzeichnen!

May 21st, 2008

http://tinyurl.com/4k9zne

Gegen diese wahnsinnige BKA-Novelle, die diesen Spinnern nahezu alles erlauben wuerde. Platzverweise auf unbestimmte Zeit, Wegsperren von Personen nach Lust, und so weiter. Sowas darf nicht kommen!

So ein ungutes Gefuehl

May 19th, 2008

Nicht, weil ich naechste Woche an einem Tag eine Englischarbeit und am selben Tag ein Deutschreferat, bei dem ich nun, dank meiner schrecklichen “Aus manchen Einzelteilen kann man alles bauen.”-Einstellung, gar nicht mehr weiterkomme, sondern weil ich vor ein paar Minuten Pointer waehrend des Notizenmachens benutzt habe. Pointer. Args. Gerade diese Dinge, die so unglaublich nuetzlich aber dennoch toedlich sind; aber ob “* = &z4” ein valider Pointer IRL ist, ist eine andere Frage. (Natuerlich unabhaengig davon, dass da die Deklaration des Datentypes und der Pointername fehlt.)

Desweiteren ist zu erwaehnen, dass ich wieder ein paar Buecher mehr habe; insbesondere freue ich mich beim Lesen auf “The Second Chronicles of Thomas Covenant, the Unbeliever”, “English as a Second F*cking Language” und “Night Shift”. Nebenbei habe ich mir auch “Essential System Administration” von Æleen Frisch gekauft, denn ich will schließlich auch die absolute Kontrolle ueber die Computer in der Schule haben, in der ich irgendwann unterrichten werde.

Ansonsten verdinge ich mich eben als Sysadmin/Programmierer.

So long.

So nebenbei bemerkt

May 15th, 2008

Anscheinend will find sich nicht einfach redirecten(TM) lassen, sondern muss an eine Datei angehaengt werden. D.h. “find -H /* -maxdepth 10 -name “*24*” -print > /home/trinox/findlog.log” funktioniert nicht, waehrend die Version mit “>>” funktioniert. Merkwuerdig.

Hardy Heron - eher “Hardly Stable”

May 10th, 2008

Ich kaempfe nun seit etwas mehr als einer Woche mit Hardy Heron - und es ist grausam. Es ist definitiv das Vista der *nixe; derzeitig crasht es spontan alle Stunden, Flash haut Firefox 3 immer wieder in die Eier (Bekanntes Problem; liegt bei Flash und Adobe, aber dennoch: Warum ‘ne Beta in ‘ne LTS aufnehmen?), spontante Entzündung der Hardware … halt, nee, das war South Park.

Jedenfalls kann ich Ubuntu 8.04 niemandem empfehlen - Gutsy konnte ich noch mit modifizieren der menu.lst von Grub (und ein paar anderen, manuellen Kniffen) richtig hinbiegen, aber bei Hardy bin ich ratlos. Ich werde in naechster Zeit voller Freude versuchen, Slackware zu installieren - wenn das nicht geht, so probiere ich Arch und danach Fedora.