Direkt zum Hauptbereich

Posts

Es werden Posts vom Februar, 2007 angezeigt.

Uniform Syntax

The syntax of a programming language defines (a) valid notational elements for use and (b) rules of their arrangement. By the way, this definition of syntax resembles very much the notion of a protocol. A protocol defines (a) messages and their constituting elements and (b) rules of valid message sequences. In an interactive programming environment (like if you program in Python interactively via the console), you communicate with the programming system according to a protocol; and the protocol is given by the syntax. There is an interesting duality between the notion of a protocol and the notion of syntax. If you program in Scheme or Lisp, the syntax has a very interesting form: everything you type in in Scheme has to follow the syntactical form of lists. In Scheme and Lisp, lists are notated in the following way: ( first_element second_element third_element ...) Lists can be nested: any element in a list can be a list. This is almost everything you need to know, in order to writ

Online-Durchsuchungen

Wissen Sie, welches Thema mich zunehmend ärgert? Die sogenannte Online-Durchsuchung . Die heimliche Durchsuchung der im Computer eines Beschuldigten gespeicherten Dateien mit Hilfe eines Programms, das ohne Wissen des Betroffenen aufgespielt wurde (verdeckte Online-Durchsuchung), ist nach der Strafprozessordnung unzulässig. So beginnt die Pressemitteilung ( Nr. 17/2007 ) des Bundesgerichtshofs dazu. Und ich dachte, das Thema wäre damit erledigt. Doch es kocht weiter. Die Politik wird nicht müde, ihrem Wunsch nach Online-Durchsuchungen Gehör zu verschaffen. Natürlich möchte niemand rechtsstaatliche Prinzipien aushebeln. Doch die Online-Durchsuchung scheint ein überaus effizientes Mittel zur Kriminalitätsbekämpfung zu sein. Soll man darauf verzichten? Mit Schrecken muss man dann noch lesen (so z.B. auf Spiegel-Online, " Hacken für jedermann ", 12. Feb. 2007), wie leicht ein "normaler" PC ausspioniert ist. Mich verwundert und ärgert: Warum schreibt eigentlich niemand d

Kooperatives Multi-Threading

In meinem letzten Posting ging es um zwei Kontrolltechniken der Verzögerung : verzögerter Aufruf und verzögerte Ausführung. Hier möchte ich Ihnen zeigen, was Sie damit machen können. Wir werden kooperatives Mutil-Threading realisieren. Das Beispiel ist in Python programmiert. Zur Erinnerung: Die zu einem zurückgestellten Aufruf benötigte Information speichern wir in einer Datenklasse "DelayedCall". class DelayedCall(object): def __init__(self,func,*args,**kw): self.func, self.args, self.kw = func, args, kw Bauen wir uns zunächst die Infrastruktur, die wir benötigen, um mehrere zurückgestellte Aufrufe zusammen mit ihren (optionalen) zurückgestellten Ausführungen zu speichern. Wir nennen einen solchen Speicher "Scheduler" und die Speicheroperation "schedule". Gespeicherte Aufruf/Ausführungs-Paare sind vom Scheduler via "next" abrufbar; mit dieser Operation wird das Paar außerdem aus dem Speicher gelöscht. Im Grunde handelt es sich um e

Countdown: Karl-Steinbuch-Stipendium

Am 9. Februar 2007 ist das Ende der Frist für eine Bewerbung zum Karl-Steinbuch-Stipendium -- ich hatte Leser und Leserinnen meines Blog auf das Stipendium schon einmal hingewiesen . Es fördert Studierende aus Baden Württemberg. Kurzentschlossene mögen sich also dransetzen. Falls Sie mir Ihren Projektideen hadern, ich helfe Ihnen gerne dabei. Ein paar Anregungen finden Sie ja auch in diesem Blog. Kontaktieren Sie mich einfach!

Kontrolltechnik: Verzögerung

Bei imperativen (= befehlsorientierten) Programmiersprachen wie Python, Ruby, Java oder C# herrscht das "Gesetz des nächsten Befehls" -- so nenne ich das jedenfalls gerne. Nach der Ausführung eines Befehls wird unweigerlich der nächste Befehl abgearbeitet, dann der übernächste, dann der überübernächste usw. Die Anweisungen werden schlicht in Reihe (sequentiell) abgearbeitet. Eine Ausnahme davon bilden Sprünge. Eine Sprunganweisung erlaubt es, mehrere Anweisungen vor oder zurück zu springen. Ist die Sprunganweisung an eine Bedingung geknüpft, dann kann bedarfsweise gesprungen werden. Ohne bedingte Sprünge wäre das Programmierleben ziemlich trist. Es gäbe sonst nur Programme, die Befehle "von oben nach unten" abarbeiteten und schlimmstenfalls in einer Endlosschleife gefangen blieben. An dem "Gesetz des nächsten Befehls" ist nicht zu rütteln. Vordergründig ist ein Programm in einer imperativen Sprache als Kette von Anweisungen zu schreiben und zu verstehen. D