mgr's weblog

Archives for January 2006

Hesses Steppenwolf über das Bürgertum

January 17, 2006, Literature

Hermann Hesse, Der Steppenwolf (Suhrkamp, 1927); Abbildung: August Macke, Spiegelbild im Schaufenster (Ausschnitt), 1913

Ein Mensch, der fähig ist, Buddha zu begreifen, ein Mensch, der eine Ahnung hat von den Himmeln und Abgründen des Menschentums, sollte nicht in einer Welt leben, in welcher common sense, Demokratie und bürgerliche Bildung herrschen.

Nie wird [der Bürger] sich aufgeben, sich hingeben, weder dem Rausch noch der Askese, nie wird er Märtyrer sein, nie in seine Vernichtung willigen — im Gegenteil, sein Ideal ist nicht Hingabe, sondern Erhaltung des Ichs, sein Streben gilt werder der Heiligkeit noch deren Gegenteil, Unbedingtheit ist ihm unerträglich, er will zwar Gott dienen, aber auch dem Rausche, will zwar tugendhaft sein, es aber auch ein bißchen gut und bequem auf Erden haben. Kurz, er versucht es, in der Mitte zwischen den Extremen sich anzusiedeln, in einer gemäßigten und bekömmlichen Zone ohne heftige Stürme und Gewitter, und dies gelingt ihm auch, jedoch auf Kosten jener Lebens- und Gefühlsintensität, die ein aufs Unbedingte und Extreme gerichtetes Leben verleit. Intensiv leben kann man nur auf Kosten des Ichs. Der Bürger nun schätzt nichts höher als das Ich (ein nur rudimentär entwickeltes Ich allerdings). Auf Kosten der Intensität also erreicht er Erhaltung und Sicherheit, statt Gottbesessenheit erntet er Gewissensruhe, statt Lust Behagen, statt Freiheit Bequemlichkeit, statt tödlicher Glut eine angenehme Temperatur. Der Bürger ist deshalb seinem Wesen nach ein Geschöpf von schwachem Lebensantrieb, ängstlich, jede Preisgabe seiner selbst fürchtend, leicht zu regieren. Er hat darum an Stelle der Macht die Majorität gesetzt, an Stelle der Gewalt das Gesetz, an Stelle der Verantwortung das Abstimmungsverfahren.

Beide Zitate aus dem Tractat vom Steppenwolf — (Nur für Verrückte) in Herrmann Hesses Der Steppenwolf; Erstveröffentlichung 1927. (Hervorhebungen von mir.)

(Siehe auch "Intensiv leben kann man nur auf Kosten des Ichs." und Eschbach, Carr, Hesse.)

"Wo weiland das Plakat ‚Prestige’ pappte"

January 16, 2006, Literature
Last edited on February 28, 2007

Der Spiegel, Ausgabe 52/2005

"Wo genau verbergen sich jene Schalter, die den Ahnen den Weg wiesen zu aufrechtem Gang, Sprache, Bewusstsein?"

Gelesen auf Seite 138 des Spiegels mit dem Titel Gott gegen Darwin — Glaubenkrieg um die Evolution , Ausgabe 52/2005, im Artikel Darwins Werk, Gottes Beitrag.

Was für ein toller Satz! Vor die Präposition vorgezogenes Verb ("den Weg wiesen zu aufrechtem Gang"), andere Konstruktion, als man normalerweise erwarten würde, (nicht "Weg zum aufrechten Gang", sondern eben "Weg zu aufrechtem Gang") und dann auch noch diese schöne Klimax ohne "und" am Ende, die eben genau durch die aufgebrochene Klammer, die andernfalls das Verb gebildet hätte, auch am Ende stehen kann, und dadurch zusätzliche Hervorhebung erhält. Man liest eben nicht:

"Wo genau verbergen sich jene Schalter, die den Ahnen den Weg zum aufrechten Gang, zu Sprache und Bewußtsein wiesen?"

So macht lesen Spaß!

Schneider

Übrigens macht mir das Spiegel-Lesen insgesamt viel mehr Spaß, seit ich ein Buch von Wolf Schneider, u.a. ehemaliger Leiter der Hamburger Journalistenschule, gelesen habe. Über das ganze Buch verteilt zitiert er ständig den Spiegel als schlechtes Vorbild. Um ein Beispiel dessen zu geben sei der folgende Absatz von Seite 81 wiedergegeben, in dem das "er" sich übrigens auf den Stabreim bezieht:

"Freilich ist er ein kleines Übel, verglichen mit den miesen Maschen, Moden, Meisen, Mätzchen, Marotten und Manien, mit denen der Spiegel die deutsche Journalistensprache überzogen hat."

(Hmmm, sollte man hier bemerken, daß er selbst nicht für den Spiegel geschrieben hat, sondern unter anderem für die Süddeutsche Zeitung, den Stern und Die Welt? (Zumindest laut der deutschen Wikipedia.))

Wenn man aber nicht über diese vielen, ständig wiederholten Seltsamheiten einfach hinwegliest, sondern sie bewußt wahrnimmt, kann man nur immer wieder schmunzeln, was die Autoren gar noch in die kleinste Überschrift hineinpacken.


Das Buch hat mir jedenfalls äußerst gut gefallen, auch wenn ich den Titel für ziemlich ungeschickt gewählt halte. Mich schreckt er jedenfalls ab, und hätte ich das Buch nicht netterweise einfach so zwischendurch mal geschenkt bekommen, hätte ich es wohl keines weiteren Blickes gewürdigt; er lautet Deutsch für Profis — Wege zu gutem Stil.


Es ist ein Sachbuch, ein Handbuch für Journalisten, doch durch zahlreiche, oft unfreiwillig komische Beispiele aus Presse und Rundfunk (mit entsprechenden Kommentaren Schneiders) ist es sehr unterhaltend. Nehmen wir folgende Auseinandersetzung mit "ziemlich schweren Verwüstungen" auf Seite 48:

Ziemlich schwere Verwüstungen


"Der Hurrikan hat in Miami schwere Verwüstungen angerichtet." Diese typische Nachricht enthält nicht weniger als vier sprachliche und logische Torheiten:
  1. "In Wüste verwandeln" ist ein Superlativ, den keine Phantasie übersteigen kann. "Schwere" Verwüstungen sind so sinnvoll wie "starke" Orkane oder "ziemliche" Katastrophen.
  2. Verwüstungen anrichten ist ein Streckverbum, wie es im nächsten Kapitel angeprangert wird: es sagt nichts anderes als verwüsten.
  3. Verwüstung lässt keinen Plural zu, so wenig wie Versandung, Vermehrung oder Verehrung. Oder sollte der Hurrikan in Miami fünf bis sechs Verwüstungen angerichtet haben?
  4. Der Hurrikan hat also Miami verwüstet. Wie, das hat er gar nicht — nur Teile von Miami? So ist das: Wenn ich ein Verbum substantiviere, strecke, in die Mehrzahl versetze und mit einem Beiwort noch steigere — dann sagt es weniger aus als zuvor. Miami wurde gar nicht "verwüstet", sondern "Ein Stadtteil von Miami wurde verwüstet" oder "In Miami entstanden schwere Schäden". Das Spreizwort "schwere Verwüstungen anrichten" ist ein in Großauflage gedrucktes Etikett für einen gehobenen Versicherungsfall, das in den Köpfen der Journalisten zweieinhalb leichte Verwüstungen angerichtet hat.
(Die neue Rechtschreibung habe ich so aus dem Buch übernommen.)


Oh, wenn ich schon dabei bin: Einen weiteren Satz — reich an Saft und Kraft — muß ich zitieren. Im Kapitel Weg mit den Adjektiven führt er Gründe auf, daß die Adjektive, "die am häufigsten überschätzte und am meisten missbrauchte Wortgattung", "anders als die Füllwörter aber, die sich aus jedem Text leicht tilgen lassen, [...] Schaden an[richten]". Mit einem bemerkenswert ausdrucksstarken Satz beendet er den Sinnabschnitt auf Seite 41:

"Auch wo sie all dies meiden, neigen sie immer noch dazu, sich auf schlanke Verben und pralle Substantive wie Schwabbelfett zu legen."


Das Zitat, das als Überschrift dieses Eintrags dient, ist übrigens auch dem Buch entnommen, das hier wiederum die Welt am Sonntag, Ausgabe vom 7.9.1980, zitiert; es ist das gipfelnde Abschreckungsbeispiel zum bereits erwähnten Abschnitt über Reime, diesmal im Fließtext und auf Teufel komm raus, unter Verwendung altmodischer Wörter ("weiland").

Changing Courier and Postfix to use crypted passwords stored in a mysql database (without saslauthd and PAM)

January 16, 2006, Miscellaneous

You've probably noticed that I recently moved my weblog to a new host. Well, I also want to use the emailing system of the new host but the current installation has stored the passwords for smtp[s] and imap[s]/pop3[s] in plaintext in a mysql database. I do not like that, so I changed it. (Not that I like to do such system administratior's stuff.) Here is my log of the necessary changes.

English version of the Changelog

  • Built a custom version of libsasl2 in /usr/src/libsasl2:

    • "apt-get source libsasl2"
    • "apt-get build-dep libsasl2" (The packets will be deleted automatically on the next run of Aptitude after the building.)
    • Downloded the Patch of
      http://frost.ath.cx/software/cyrus-sasl-patches/ for crypt(3) hashed password from various backends, corrected and adopted it for Debian (configure.in instead of makefile.in). Result:
      cyrus-sasl-2.1.19-checkpw.c.patch_mgr
    • Copied the patch as 25_cyrus-sasl-2.1.19-checkpw.c.patch to /usr/src/libsasl2/cyrus-sasl2-2.1.19/debian/patches/.
    • Deb packets built via "fakeroot debian/rules binary".
    • Resulting Debs installed:
      • libsasl2_2.1.19-1.7_i386.deb
      • libsasl2-modules_2.1.19-1.7_i386.deb
      • libsasl2-modules-sql_2.1.19-1.7_i386.deb
      and set to HOLD. DO NOT CHANGE THIS! (OR BUILD NEW VERSIONS.)

  • Database 'postfix' modified:

    • New column 'crypted_password', contains the password that is crypted via crypt(3). In phpMyAdmin you can just enter the password in the input field, as you would normally do it, and then select "ENCRYPT" in the column named 'Function'.
    • The existing passwords are copied, encryped via encrypt(), from 'password' to 'crypt_password' with the following quit'n'dirty hack:
      • Log in with "mysql -u postfix -p postfix" and enter:
        select concat(
               'update users set crypted_password = encrypt("',
               password, '") where password="',password,'";')
               from users;
      • Copy the resulting lines that look like:
        update users set crypted_password = encrypt("secret")
                     where password="secret";
        via the mouse and execute them.
    • (The old column 'password' is now actually superfluous, but it has not been deleted until the whole thing has been tested thoroughly.)

  • Courier modified, file /etc/courier/authmysqlrc:

    • Added the line "MYSQL_CRYPT_PWFIELD crypted_password".
    • Commented out the line "MYSQL_CLEAR_PWFIELD password" (via #).
    • (Retaining the old version as
      authmysqlrc_before-crypted-passwords.)

  • Postfix converted, file /etc/postfix/sasl/smtpd.conf:

    • Modifications (in the Unified DIFF Format):
      - sql_select: select password from users where email='%u@%r'
      + sql_select: select crypted_password from users where email='%u@%r'
      + password_format: crypt
    • (Retaining the old version as
      smtpd.conf_before-crypted-passwords.)

  • Fetching and sending mails tested with two test accounts.

    ⇒ Yeah, done. :-)


German version of the Changelog

  • Eigene Version von libsasl2 in /usr/src/libsasl2 gebaut:

    • "apt-get source libsasl2"
    • "apt-get build-dep libsasl2" (Die Pakete werden nach dem Bauen beim nächste Aptitude-Lauf automatisch wieder gelöscht).
    • Patch von http://frost.ath.cx/software/cyrus-sasl-patches/ für crypt(3) hashed password from various backends heruntergeladen, korrigiert und für Debian angepaßt (configure.in statt makefile.in). Ergebnis: cyrus-sasl-2.1.19-checkpw.c.patch_mgr
    • Patch als 25_cyrus-sasl-2.1.19-checkpw.c.patch nach
      /usr/src/libsasl2/cyrus-sasl2-2.1.19/debian/patches/ kopiert.
    • Deb-Pakete mit "fakeroot debian/rules binary" gebaut.
    • Entstandene Debs installiert:
      • libsasl2_2.1.19-1.7_i386.deb
      • libsasl2-modules_2.1.19-1.7_i386.deb
      • libsasl2-modules-sql_2.1.19-1.7_i386.deb
      und auf HOLD gestellt. BEIBEHALTEN! (ODER NEUE VERSIONEN BAUEN.)

  • Datenbank 'postfix' modifiziert:

    • Neue Spalte 'crypted_password', enthält das mit crypt(3) verschlüsselte Paßwort. Mit phpMyAdmin gibt man das Paßwort ganz normal in dem Eingabefeld an und wählt dann "ENCRYPT" in der Spalte 'Function' aus.
    • Bisherige Paßwörter mittels nachfolgendem Quick'n'Dirty-Hack von 'password' mit encrypt() verschlüsselt nach 'crypt_password' kopiert:
      • Mit "mysql -u postfix -p postfix" eingeloggt und folgendes getippt:
        select concat(
               'update users set crypted_password = encrypt("',
               password, '") where password="',password,'";')
               from users;
      • Die entstandenen Zeilen mit dem Schema:
        update users set crypted_password = encrypt("geheim")
                     where password="geheim";
        per Maus kopiert und ausgeführt.
    • (Die alte Spalte 'password' ist nun eigentlich überflüssig, wurde aber zunächst beibehalten.)

  • Courier umgestellt, Datei /etc/courier/authmysqlrc:

    • Zeile "MYSQL_CRYPT_PWFIELD crypted_password" hinzugefügt.
    • Zeile "MYSQL_CLEAR_PWFIELD password" auskommentiert (mit #).
    • (Alte Version als authmysqlrc_before-crypted-passwords
      beibehalten.)

  • Postfix umgestellt, Datei /etc/postfix/sasl/smtpd.conf:

    • Änderung (im Unified DIFF Format):
      - sql_select: select password from users where email='%u@%r'
      + sql_select: select crypted_password from users where email='%u@%r'
      + password_format: crypt
    • (Alte Version als smtpd.conf_before-crypted-passwords
      beibehalten.)

  • Mails abholen und versenden mit zwei Testaccounts gestestet.

    ⇒ Yeah, fertig. :-)

LED Cube Modeller, 22C3 Edition

January 10, 2006, Lisp
Last edited on October 11, 2006

wiki page about the LED cube

Begun on the Chaos Communication Congress 2004 I have continued to work on my LED Cube Modeller on the 22C3 a few days ago in Berlin. It is a program written in Common Lisp to create animations for a cube of LEDs, a device that I have built together with Alex Wenger at our local computer club Entropia. For more information about the piece of hardware you might look at its page in the Entropia-Wiki or read the article 3d Baby Cube in Alex's weblog.

There are several people who have built such a device before; for example James Clar, who has as well built a 5x5x5 cube and some larger ones that are documented on his homepage.

On the 21C3: The library and a simulator in OpenGL

A year ago I've written the LED Cube Library, that contains a data structure to represent the cube and sequences of them (animations), together with functions to initialize, modify, iterate over them as well as save them to and load them from files. With it you have already a quite comfortable means to write functions that produce animations, and there is also already an additional library to let straight lines gyrate in the cube.

Of course, this is not the most intuitive way to make animations. In order to address this problem I've added a GUI that draws the cube three-dimensional on the screen: You can turn and whirl it around using the mouse (holding the right mouse button) and just click on the spheres that represent the LEDs to enable or disable them. And if you have connected the hardware device to the serial port of your computer, the corresponding LEDs will lit instantaneously. It looks like this:

3-D viewport; click for a larger version (103 kB).

Or as a moviestrip:

moviestrip of the LED Cube Modeller; click for a larger version (103 kB).

I think this is the right place to thank Lisa. When I've started to write the application I didn't know anything about how to code in OpenGL. Just having heard a lecture on this as part of her studies, she had just the right code examples and documentation on her computer, and she kindly let me have a look on them. I've translated the C++ programs to Common Lisp, worked through them, and was then able to write my little simulator/modeller. On the third day I have had a working version.

On the 22C3: A toolbox window using McCLIM

To add new cubes, navigate through the animation and change the brightness level (the LEDs of the cube have five brightness levels in addition to having an LED switched off) you had to use keystrokes. This makes it harder to use the application right away. There was an even worse problem: Loading and storing animation files. It's not an option to expect the user to switch to the Lisp REPL (the shell of a Lisp environment) and enter something like:

(save-animation-file
 #p"/home/mgr/stuff/cube-modeller/data/my-animation.data")

the toolbox window; click for a larger version (11 kB).

No, you expect a nice file dialog. And isn't my File Selector for McCLIM nice? :-) To address these problems my hacking project of this year's congress has been to add a second GUI element: A toolbox window like the one of the image manipulation program The Gimp. Enjoy the beauty on the right.

Now you can just click on the buttons or move the slider to navigate through the animation. And if this is too slow for you it acts as a reference sheet for the keystrokes inside the 3-D viewport (the designators in parentheses on the buttons). Of course, I have been using the graphical über-toolkit Common Lisp Interface Manager (CLIM), an abstract and quite convenient way to write applications with graphical user interfaces. If you are interested in the source code, have a look at the file toolbox.lisp.

Transformations

More interesting is the section in the bottom of the toolbox window, labelled "Transformation": With this element you can perform so called transformations, which are no more than the previously mentioned functions based on the LED Cube Library that change the current animation programatically. Right now only a handful of them are defined: They do things like mirroring the whole animation, appending a mirrored copy of the current animation, or inverting the LEDs of the currently displayed cube. It's quite easy to define a transformation; the code that mirrors the animation is for example:

(define-cube-transformation mirrored-animation ()
  (save-undo)
  (setf *animation*
        (nreverse (mapcar #'copy-cube *animation*))))

That's all. (The macro define-cube-transformation does nothing more than just define an ordinary function and push its name onto a list so that the GUI knows about it.) You might notice the call to save-undo: Well, it does the obvious. If you call other transformations or functions of the LED cube library that would save undo points for themselves, you could enclose the body of your transformation by with-disabled-save-undo. This way it will only be one click on the undo-button (or a press of the key labelled "u") for the user to revoke the effects of the whole transformation.

A binary release

It would be nice to have users that happily clicked some nice animations together, and a harsh requirement to expect them to first install and set up a whole Lisp environment together with a handful of libraries (like CL-SDL) and McCLIM. Even for an experienced Lisper this is quite some work. You want an archive that the user can download, extract and just fire up.

In a typical Common Lisp implementation it is possible to call a function with a name that's similar to save-lisp, save-image, dumplisp, or save-lisp-and-die. It will write a core image of the running application to the disk — think of it as Hibernation or Suspend To File for the Common Lisp environment: The whole state, with all defined variables, functions and macros, loaded libraries and so on, will be written to a file, and you can later restart the whole application.

This doesn't sound like a small file, and you are right: For my little application this core image has a size of about 58 Megabytes. (You can find a current version in its release directory.) But this is of course not just my application, it is a whole and complete Lisp enviroment. It contains the complete Lisp compiler, a textual debugger and shell (the REPL in Lisp terms), a graphical debugger and shell, all of McCLIM, and much more. You could connect your Emacs to it and develop whatever you want in Common Lisp. Hey, I've just loaded my blog software into the same image to preview this entry here on my notebook while I'm on the train ride back home.

Okay, you probably don't want that if you just want to make some animations for the cube. Alas, I cannot give you something smaller right now. With some commercial Lisp compilers — like for example Lispworks or Allegro Common Lisp — you could have a small executable. But this work has only started for the free Lisps like SBCL, CMUCL, OpenMCL (on the PowerPC platform), etc. There is a proof-of-concept tree shaker1) for SBCL by Juho Snellman (source code), but it is also not more than a proof-of-concept implementation. At least the rather unoptimized image of the occupied RAM can be compressed to about 17 megabytes, which means quite a good compression ratio in my opinion.

It would also be possible to deliver a compressed image and decompress it when the program starts (using Salza, an implementation of the GZIP algorithm in Lisp). Juho has tried this before as well.2) Sadly, this would introduce at least two problems: a) the application would need quite some time to start, and b) forget memory-mapping, the whole 60 megabytes would get loaded to your still valuable main memory right away. We don't want that, do we? But, hey, in times of DSL connections with two, four, even sixteen megabit per second. . . (I'm sorry if you have only a slow internet connection.)

(Personally, I do not think that this is a big problem. At least it has not been and is not one for me. There are more important things than a small release. You need your libc for your C programs, a Java Virtual Machine for Java applications, a Perl and a Ruby interpreter for things that are written in those languages, and, finally, you need a Lisp compiler for your Lisp programs. (By the way, yes, it is usually a compiler for a couple of decades now, not an interpreter: SBCL produces native machine code for your central processing unit, although it may not be in the native executable format of your operating system. (Execuse me my use of that ambiguous term.)))

Okay, enough words on this topic! If you are interested in the code that produces the core image for the LED Cube Modeller have a look at the file save-cube-lisp.lisp. You can find the latest release of the source code in the release directory of the LED Cube Modeller, the same place where also the binary releases can be found.

Eye candy

And finally: Here is a screenshot of the whole application (sans File Selector) in action:

screenshot of the whole application (sans File Selector); click for a larger version (931 kB).

small screenshot of the viewport

There is also a cute animation of the viewport, that is slued via the mouse while an animation is being played at the same time: The small, 200x200 pixel Animated GIF with its 38 frames has, in spite of optimization, got a size of 457 kB, and the larger, 500x500 pixel animation an actual prohibitive weight of 2 MB.

As we are already wasting bandwidth by the dozen: Alex has captured a video of the cube (3.1 MB) with his camera. It is not a handmade animation but the LED Cube Analyzer in action, a 3-D spectrum analyzer based on sanalyzer in form of a visualization plugin for XMMS. (See also JACK-Input-Plugin für XMMS.)

I would be glad if you had a try at the program. Even more, if you sent me some animations or a comment about the whole thing!


Footnotes

1) A tree shaker throws away all things that are not necessary for your application, hopefully leaving only a small image or executable.

2) Update on January 11, 2006, 00:30 (UTC):
I happened to misinterpret Juho's blog entry: He has made a core image that does GZIP compression via Salza but the image itself is not compressed. Confronted with my assertion he has actually commented: "the whole concept of compressing a core strikes me as a bit silly :-)".

A.L. Kennedy, Paradise

January 10, 2006, Literature
Last edited on January 10, 2006

A.L. Kennedy, Paradise

So continuous minor blackouts are fair enough. But not enough. Not once you realise that one minute unremittingly following another, and then taking sixty seconds to drag by in the customary order, is a totally unsupportable waste of time. Why not get the highlights, the hot spots, and skip the rest? Why not hugely enjoy a fine afternoon with quality people, while simultaneously recalling a splendid evening you've been keeping in reserve and now unveil to youself in a bouncing rush that, in its turn, freshens your taste for the matters you have in hand?

"Intensiv leben kann man nur auf Kosten des Ichs."

January 3, 2006, Literature

Aber mitten in der erreichten Freiheit nahm Harry plötzlich war, daß seine Freiheit ein Tod war, daß er allein stand, daß die Welt ihn auf eine unheimliche Weise in Ruhe ließ, daß die Menschen ihn nichts mehr angingen, ja er selbst sich nicht, daß er in einer immer dünner und dünner werdenden Luft von Beziehungslosigkeit und Vereinsamung langsam erstickte. Denn nun stand es so, daß Alleinsein und Unabhängigkeit nicht mehr sein Wunsch und Ziel war, sondern sein Los, seine Verurteilung, daß der Zauberwunsch getan und nicht mehr zurückzunehmen war, daß es nichts mehr half, wenn er voll Sehnsucht und guten Willens die Arme ausstreckte und zu Bindung und Gemeinsamkeit bereit war: man ließ ihn jetzt allein. Dabei war er nicht etwa verhaßt und den Menschen zuwider. Im Gegenteil, er hatte sehr viele Freunde. Viele hatten ihn gern. Aber es war immer nur Sympathie und Freundlichkeit, was er fand, man lud ihn ein, man beschenkte ihn, schrieb ihm nette Briefe, aber nahe an ihn heran kam niemand, Bindung entstand nirgends, sein Leben zu teilen war niemand gewillt und fähig. Es umgab ihn jetzt die Luft der Einsamen, eine stille Atmosphäre, ein Weggleiten der Umwelt, eine Unfähigkeit zu Beziehungen, gegen welche kein Wille und keine Sehnsucht etwas vermochte. Dies war eins der wichtigsten Kennzeichen seines Lebens.

aus Herrmann Hesse, Der Steppenwolf

(Siehe auch Eschbach, Carr, Hesse.)

Select a Theme:

Basilique du Sacré-Cœur de Montmartre (Paris) Parc Floral de Paris Castillo de Santa Barbara (Alicante) About the photos

Entries: