Python Saug-Punkte

written by Martin Häcker on

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

written by Martin Häcker on

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.

Python distributions

written by Martin Häcker on

Endlich mal hab ich einen ĂĽberblick gefunden wo die Entwicklung momentan hingeht.

http://mail.python.org/pipermail/python-dev/2009-October/092754.html

Kurz zusammengefasst:

  • easy_install, ez_setup und Konsorten wird sterben. distribute ist die Zukunft
  • easy_install wird sterben -> pip ist die Zukunft
  • Metadata wird aus dem setup.py script herauswandern und stattdessen in einem ini file zur VerfĂĽgung gestellt (Da ist mir noch nicht ganz klar wie das funktionieren soll - aber gut).
  • Deinstallieren wird auch mit den distutils gehen - man braucht also nicht mehr pip um das zu machen

Und noch mehr. Aber das find ich schon mal am wichtigsten. :)

Flagge zeigen

written by Martin Häcker on

Image

via

Zur Schweinegrippe

written by Martin Häcker on

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

written by Martin Häcker on

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.

Hamam

written by Martin Häcker on

Ahhhhhhhhhh

Wie viel kostet die Finanzkriese?

written by Martin Häcker on

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

Wieso Blöcke keine echten Funktionen sein sollten

written by Martin Häcker on

Zu "Ergie" von Rainer von Vielen

In meiner Freizeit beschäftige ich mich gerade viel mit Ruby - sowohl The Ruby Way, als auch The Ruby Programming Language sind dafür gute Bücher.

Und ich muss sagen, das Ruby ist nicht unspannend. Zwar gibt es auch einiges dass ich ganz schön eklig finde (z.B. das Flip-Flop Statement, oder dass so viel mit globalen Variablen gearbeitet wird, oder dass viele Sachen so komplex sind.

Aber darum gehts hier gar nicht. Mir geht es hier um die Erkenntnis wieso und unter welchen umständen man Blöcke als etwas anderes sehen möchte als anonyme Funktionen.

Das dauert nämlich bis man das merkt.

Zuerst einmal die Konfusion: Ruby hat eine Syntax fĂĽr Methoden

def method(positional_argument, *all_other_arguments)
  # some body
end

und eine für Blöcke

10.times do |positonal_argument, *all_other_arguments|
  # some body
end

Wieso der Unterschied? Wieso macht man Blöcke nicht einfach zu normalen Funktionen die man dann auch gleich mit () aufrufen kann anstatt immer ein a_block.call() verwenden zu müssen?

Echte Lambdas gibt es ja noch zusätzlich in Ruby.

Well, den Unterschied in der Syntax verstehe ich immer noch nicht. Aber dahinter steht der Grund dass Blöcke eine andere Aufgabe haben als Methoden - der Punkt ist nämlich dass man sie gerne als Teil der sie lexikalisch umgebenden Methode betrachten möchte damit man sie nutzen kann um mit ihnen Kontrollstrukturen zu implementieren. Hier mal ein Beispiel:

def find(needle, haystack)
  haystack.each.with_index do |index, element|
    if element == needle
      return index
    end
  end
  return nil
end

(Also als Python Programmierer muss ich ja sagen dass die end statements ganz schön auf die Nerven gehen. Doppelte Zeilenanzahl für null zusätzliche Information oder Nützlichkeit. But I digress.)

Das spannende daran ist die Zeile return index. Seht ihr was daran besonders ist? Ich Puzzle es mal auseinander als wäre der Block eine funktion, dann wird es klar.

find ruft einen iterator auf dem haystack auf, d.h. übergibt ihm eine Funktion die das richtige Element findet. Diese Funktion erhällt ein Element aus dem haystack und einen index und gibt diesen index zurück wenn das element das gesuchte ist.

Und da ist das Problem: Damit find funktioniert muss return index find verlassen und nicht nur die iterator-funktion.

Das ist der Grund wieso man Blöcke als etwas anderes als Funktionen/Methoden betrachten muss wenn man sie nutzen will um damit Kontrollstrukturen implementieren zu können und ihre volle Nützlichkeit für Abstraktionen verwenden zu können.

Worin liegt der Erfolg von "Ruby on Rails"

written by Martin Häcker on

Liegt es vielleicht wie auf Stackoverflow angekĂĽndigt an der Sprache?

Jedenfalls fand ich den ersten Kommentar hervorragend.

"Python on Pails" just doesn't have the same feel to it... – ephemient
  @Ephemient: I believe it would be Python on Planes. – Jimmy
  @Jimmy: Who needs planes? import antigravity ;-) xkcd.com/353 – Vinay Sajip
  Is there a Java in Jails? – Nosredna

lol Eindeutig, die Sprache ist schuld.