chris blogs: June 2006

19jun2006 · Die Bundesdienstflagge

In Zeiten der partiellen Fußballbegeisterung sind an allen Orten schwarz-rot-goldene Flaggen zu sehen. Davon gibt es mehrere, die einfache Bundesflagge in schwarz-rot-gold und in letzter Zeit auch immer häufiger die Bundesdienstflagge oder Nachahmungen derer.

Zu ihr steht in der Anordnung über die deutschen Flaggen:

Die Dienstflagge der Bundesbehörden (Bundesdienstflagge) hat die gleichen Querstreifen wie die Bundesflagge, darauf, etwas nach der Stange hin verschoben, in den schwarzen und den goldfarbenen Streifen je bis zu einem Fünftel übergreifend, den Bundesschild, den Adler nach der Stange gewendet, Verhältnis der Höhe zur Länge des Flaggentuches wie 3 zu 5. […]

Und weiterhin:

Alle Stellen des Bundes führen die Bundesdienstflagge. Der Bundespräsident oder die Bundespräsidentin führt die Standarte am jeweiligen Amtssitz. Dienstgebäude des Bundes können mit der Bundesflagge oder mit der Bundesdienstflagge beflaggt werden; dies gilt auch für Wasserfahrzeuge im öffentlichen Dienst des Bundes.

Genau aus diesem Grund ist die Verwendung der Bundesdienstflagge nach §124 Gesetz über die Ordnungswidrigkeiten für Privatpersonen untersagt:

(1) Ordnungswidrig handelt, wer unbefugt

  1. das Wappen des Bundes oder eines Landes oder den Bundesadler oder den entsprechenden Teil eines Landeswappens oder
  2. eine Dienstflagge des Bundes oder eines Landes

benutzt.

(2) Den in Absatz 1 genannten Wappen, Wappenteilen und Flaggen stehen solche gleich, die ihnen zum Verwechseln ähnlich sind.

Es ist also verboten, die Bundesdienstflagge oder etwas ähnliches auf den Balkon zu hängen. Hängt stattdessen lieber die Bundesflagge auf, schneidet den Adler aus eurer Bundesdienstflagge aus ;-), verwendet die DDR-Flagge oder sogar die schwarz-weiß-rote Flagge, wenns denn sein muss (ohne Hakenkreuz natürlich). Die sind nämlich alle erlaubt.

Nur damit keiner nacher sagt, er hätte von nichts gewusst…

NP: Ane Brun—The Fight Song

17jun2006 · The Design of Brne

Values

Brne only knows one type of value: bi-relations that sometimes can be ordered. Imagine this as a multimap (i.e. keys don’t have to be unique) of keys to values. Relations map atoms (which aren’t directly accessible from the language) to other atoms. The literal 42 would, for example, really be a relation of one tuple that maps 42 to 42. Atoms can be numbers, strings, symbols (which often serve as primary keys) or the special value nil, maybe things like dates will be added.

Operators

Operators are functions of arity 0 (mediadic), 1 (monadic) or 2 (dyadic). All dyadic operators are used infix and consist of ASCII non-letter symbols, all mediadic and monadic operators use prefix and can either consist of non-letter symbols or only letters and digits (usually, one would call them a “method” or a “function” then, but Brne only knows operators).

The result of an operation is another relations. Internally, this works using a lazily evaluated generator: every operator implements a certain set of operations: reset, which resets the generator; next? which returns a boolean value if there is another element to be generated and next, which returns this element. Therefore, operators are very much like forward iterators that embody a calculation.

All operators in Brne are purely functional, that is, they don’t have side effects. This allows for excellent parallelism: every argument of the operator can be evaluated independently.

A few example operators would be (this is not written into stone yet):

  • nil: Always returns nil.

  • id: Returns the identity relation that maps every key as value.

  • keys a: Returns the “left column” of the relation a.

  • values a: Returns the “right column” of the relation a.

  • flip a: Returns the relation a with keys and values exchanged.

  • a -> b: Creates a relation of the first key of a to the first key of b.

  • a ++ b: Unifies the relations a and b.

  • a . b: Creates a new relation that maps the values of a to the keys of b, that is, a semi-join.

  • a = b: Selects the tuples of a whose keys are keys of b.

There will be more operators for basic arithmetics, comparision and SQLish aggregates like sum, avg, min and max.

Additionally, there are adverbs that modify the behavior of an operator. So far, the only adverb is ', which works like this: a op' b becomes (flip a) op (flip b). That, e.g. allows for easy selection by value. As special syntax, a’ generally is (flip a).

I’ve already written a parser in Racc and some of the operators. I also have a QDBM based datastore and hacked RbTree for in-memory representation. Now, it’s all a matter of putting these things together, converting some database queries and watching which parts of the prototype are too slow.

Then, I can start modeling this evaluation scheme to C and connect it with libsew.

NP: Syd Matters feat. Ane Brun—Little Lights

12jun2006 · Abi-Gag im WG

Endlich fand heute, pünktlich zum Ferienende (wie üblich im voraus jedem bekannt) auch wieder einmal Abi-Gag bei uns im Wieland-Gymnasium statt. Mit dem Wetter hatten die Abiturienten pures Glück, besser hätte es einfach nicht kommen können. Klarer Himmel, Sonne, und keine Wolke zu sehen. Gut, dass es genug Sonnenschirme und Zelte gab.

Diesmal war das Thema “Schweden”, das vor Stereotypen nur so strotzte und irgendwie nur halbwegs amüsant war: IKEA schien inoffizieller Sponsor gewesen zu sein, Pipi Langstrumpf und sonstige Figuren Lindgrens waren an jeder Ecke zu finden. Dasselbe galt für die schwedische Fahne.

Es spielte offenbar die gleiche Band wie beim PG Abi-Gag, und sie ist, wie bereits gesagt, musikalisch gar nicht so schlecht. “Narcotic” von Liquido mit Blechbläsern zu spielen ist kreativ und gut gelungen. Das wird allerdings an meiner Einstellung zum Gesang (der teils auch gelungen war, aber eher selten) nichts ändern. (Eine dem Autor bekannte Person legte einen Vergleich mit dem hüpfenden Esel von Shrek nahe…) Flame ahead.

Auch das Wieland-Gymnasium kann bis 10 zählen, wäre sonst ja auch schlimm.

Das Programm war seit langer Zeit mal wieder sehr gut vorbereitet und attraktiv. Von Spielen für die Jüngeren (1, 2 oder 3) über Theater mit Lehrern zu eigenen Sketchen war alles vorhanden. Das alles vorzubereiten war sicher viel Arbeit.

Die Stimmung war, wie am WG leider üblich, nur bedingt vorhanden. Aus irgendwelchen Gründen springt der Funke einfach zu wenig über. (Dabei fällt mir ein, dass der Alkoholpegel der Veranstalter dieses Jahr wohl unter dem Schnitt lag. Zumindest ist mir das so vorgekommen.)

So blicke ich zurück auf den diesjährigen Abi-Gag mit einem lachenden und einem weinenden Auge. Lachend, weil alles gut organisiert und geklappt hat, und weinend, weil es zugleich mein letzter passiver Abi-Gag war. Nächstes Jahr sind eben wir an der Reihe, und dann ist’s rum. Aber bis dahin haben wir glücklicherweise noch etwas Zeit…

NP: Dan Bern—Rome

11jun2006 · Been Busy

Oops, I’ve been neglecting this blog badly, but of course there is a reason. During my holiday last two weeks, I’ve been writing a paper about misuse of pesticides (Pestizide und ihre negativen Auswirkungen — natur- und gesellschaftswissenschaftlich betrachtet, I’ll publish it after it’s graded), and that took a great part of my free time. Then, I still needed to keep Anarchaia running.

Now that I’ve almost finished that paper, hacking can go on. There will be further work on libsew, since I want to use it as a runtime system for a new relational processing language called Brne I’ve been designing the last few weeks. Everything still is pretty much in flux, but the core idea is that Brne will be to relational databases what APL is to matrix operations. (If you speak a bit german, you now may notice the really bad pun in the name.)

Brne is strongly inspired by the relational logic core of Alloy, but also by APL, K and Q. I already have a basic parser written in Ruby and parts of the data storage. A prototype of the execution model exists too, I think it is related to Comprehending Queries, but I need to dig deeper into the work of Torsten Grust to show the exact bearing.

That said, it will be very interesting to compare Brne to Vlerq, especially since it’s core recently has been rewritten and is much more understandable now (but also Tcl specific at the moment); both projects have similar intent. The probably biggest difference is that Brne doesn’t specifically know about tables, there only are relations that contain mappings of keys to values (think “a hash”, but they may be stored efficiently on disk). However, since joins are very convenient to do, the relational model can make use of its whole power that’s usually hidden by a mess of SQL.

For example, to compute the complete revenue you had from this years new customers, you could query like this:

sum (customers.since < 2006)'.orders.products.prices

More details to come really soon now.

NP: The Smiths—Wonderful Woman

Copyright © 2004–2016