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
- das Wappen des Bundes oder eines Landes oder den Bundesadler oder
den entsprechenden Teil eines Landeswappens oder
- 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
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
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
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