In a mood of procrastination I had a few thoughts on how to create simple GUIs with Common Lisp. For the leveleditor in Uxul World I use LTK - it is installable via QuickLisp meanwhile, and it seems to be the best and most portable possibility so far. The main disadvantage is that it runs the TCL shell in a separate process. Then there is CLIM of course, and though there seem to be a few quite interesting libraries around CLIM, the only one I have ever used is McCLIM (with Climplayer). McClim seems to have several backends, and a nice API for creating new ones, but in the past I could not manage to run it under MS Windows which was why I focused on LTK - and then never concentrated on CLIM.
But actually, I do not really think that GUIs are that important. I think webinterfaces are meanwhile sufficient for most purposes, they are simple to code, and they are portable (and I am not the only one who thinks this apparently). A problem with local webinterfaces is that I do not know any webbrowser that supports connecting to, say, unix domain sockets. Therefore, there are two possibilities of securing the interface from other users on the same computer: Using IPTables and a local shared secret - and I do not like both possibilities. Maybe someday, some browsers will be able to connect to unix domain sockets, projects like uzbl seem to be predestined for that. What is already possible is to let them open FIFOs. So I was doing a little experiment with it, using SBCL's posix-binding: For every link I create a FIFO and a Thread that tries to write on it. Opening a FIFO blocks until both sides of the FIFO are opened by default, thus, as long as the created thread is blocked, you know that the FIFO was not opened by the browser, as soon as it is not blocked anymore, you know that it was opened and can generate the content. So the basic handling mechanism looks like

(require :sb-posix)

(defun make-handle (f)
  (let
      ((fname (sb-posix:mktemp "/tmp/clgui.XXXXXX"))
       (fkeep t))
    (sb-thread:make-thread
     (lambda ()
       (loop while fkeep do
        (sb-posix:mkfifo fname #o700)
        (with-open-file (str fname :direction :output :if-exists :overwrite)
          (setf fkeep (funcall f str))
          (finish-output str))
        (delete-file fname))))
    fname))


It takes a function that itself takes a stream (the one sent to the browser) as an argument and returns a generalized boolean - if it returns true, then the fifo keeps being listened to, if nil, its deleted and not listened anymore. Then I define a few variables and two handlers that increment and decrement a variable:

(defparameter *ctr* -1)
(defparameter *incf* "")
(defparameter *decf* "")

(defun do-inc (str)
  (incf *ctr*)
  (format str "
<html><body><a href=~s>&lt;&lt;</a>~d<a href=~s>&gt;&gt;</a></body></html>
"
      *decf* *ctr* *incf*) T)

(defun do-dec (str)
  (decf *ctr*)
  (format str "
<html><body><a href=~s>&lt;&lt;</a>~d<a href=~s>&gt;&gt;</a></body></html>
"
      *decf* *ctr* *incf*) T)


Finally, I create the handles and set the appropriate links:

(setf *incf* (format nil "file:///~a" (make-handle #'do-inc)))
(setf *decf* (format nil "file:///~a" (make-handle #'do-dec)))
(format t "Now open ~a in your browser." *incf*)


Opening the link in the browser should show you two links and a number that can be incremented and decremented by these links. Be careful: Reading from a FIFO when no process writes to it may freeze Firefox.

There are a lot of drawbacks in this approach: A lot of files are created. And the amount of data sent back to the application is very limited. Formdata cannot be passed - this could be solved using JavaScript and additional protocol handlers for Firefox - which is very complicated.

After all, it was just a little experiment. In theory, user interfaces that only contain links but no text fields and checkboxes could be implemented with it. In practice, I would not do it, but anyway it would be great to make browsers be able to connect to unix domain sockets I think.

Even though I knew that there were survivors of the atomic bombing in Hiroshima and Nagasaki, I never wondered whether there were survivors of both atomic bombings. Cracked had an entry about famous people who died in 2010 (and whose deaths were not recognized by the public, stating that Tsutomu Yamaguchi died in january 2010. He is one of the few people who survived both atomic bombings.

The fact that I never heard of him before makes me conclude that most other people have not, too. Which is sad because this is the kind of information that is relevant to the discussions about nuclear weapons. The effects of nuclear weapons are impressive, same for the technology - but one must never forget that these weapons bring death and suffering to the world, and the best way of seeing this is to listen to survivors of these attacks.

Und wieder: Prognosen für das nächste Jahr. Diesmal weniger als sonst, dafür vielleicht etwas durchdachter.

1. Die Welt wird wieder nicht untergehen – wir alle wissen, das passiert erst 2012.

2. Ein neuer Zelda-Teil für die Wii wird erscheinen – wurde schon letztes Jahr angekündigt, ich denke mal sie kriegen das fertig.

3. Ich werde Uxul World releasen - vermutlich.

4. Die Regierungskoalition zerbricht, es gibt verfrühte Neuwahlen. Nur so ein Gefühl.

5. Solid State Drives werden erschwinglich und erreichen den Massenmarkt.

6. Eine Fortsetzung von Portal wird erscheinen - wie angekündigt.

7. Julian Assange wird freigesprochen - nehme ich mal an.

8. Während in Europa die Sicherheitskontrollen an Flughäfen zunehmen, werden sie in den USA aufgrund der Proteste der Bevölkerung wieder gelockert.

9. Ein ZFS-Kernelmodul für Linux wird den Experimental-Status verlassen.

10. Ein weiterer größerer kommerzieller IM-Dienst wird eingeschränkte XMPP-Anbindung bieten.

11. Die bayerischen Universitäten werden durch die zweieinhalb Jahrgänge auf Einmal, mit denen sie jetzt fertig werden müssen, überlastet sein. Es wird zu neuen Studentenprotesten kommen, einzelne Universitäten werden Grundstücke anmieten und Zelte aufstellen, um ihre Vorlesungen dort halten zu können.

12. Weitere Webservices werden sich ipv6-Adressen besorgen, darunter auch ein paar namhafte Unternehmen, die damit ipv6 voranbringen wollen. Endgültig durchsetzen wird es sich trotzdem nicht, vor Allem da diverse Provider es nicht unterstützen.

13. Quicklisp wird sich weiter verbreiten, es wird viele Libraries geben. Clbuild und andere Projekte werden eingestellt.

14. Es wird einen Clojure-Port auf GCJ geben, der darum bemüht ist, möglichst viel Code Ahead-of-Time zu compilieren.

15. Flash wird auch weiterhin das Plugin sein, das hauptsächlich für Filme und Spiele im Browser verwendet wird. Es wird um 3d-Fähigkeiten erweitert, um der Bedrohung durch WebGL zu begegnen. Java und Silverlight werden weiter an Bedeutung verlieren.

16. Die Riemann-Hypothese wird nicht bewiesen werden.

17. Die Netzneutralitätsdebatte wird weitergehen, ohne Ergebnis. Die üblichen Parteien werden dafür bzw. dagegen sein. Diverse Provider werden mit Angeboten in diese Richtung experimentieren.

18. Debian Squeeze wird stable. Nachdem es bereits jetzt Backports für Squeeze gibt, wird es Diskussionen darüber geben, inwieweit Debian seine Policies bezüglich der Release-Zyklen überdenken sollte.

19. Es wird (endlich) einen kleinen lispigen Macro-Präprozessor geben, der abgesehen von seinen Macro-Fähigkeiten nicht weit über C liegt.

20. Neben Ubuntu werden noch weitere Linux-Distributionen von X11 weggehen. Lösungen wie NX werden sich daran anpassen. Auch andere Unix-Derivate, wie BSD, werden damit Liebäugeln und mindestens Kompatibilitätsschichten anbieten. Dennoch wird X11 nicht verschwinden.

21. Die Zeitumstellung wird nicht abgeschafft.

22. Vermutlich wird es irgendwo ein paar Terroranschlagsversuche geben, die wohl wieder weitestgehend vereitelt werden, und mit denen weitere Überwachungsmaßnahmen zu rechtfertigen versucht werden.

23. Glasfaserkabel erreichen die ersten Haushalte. Trotzdem bleiben große Lücken in der Versorgung mit Breitband-Internet. Beim Mobilinternet wird sich auch wenig tun.

24. Es werden erstmals Gleisstrecken von Privatunternehmen gebaut.

25. Die Bezahlungsprobleme der LMU an ihre Hiwis werden sich noch eine ganze Weile lang fortsetzen. Ein paar Hiwis werden eingestellt um bei der Verwaltung zu helfen, dennoch hält das Chaos an.

26. Der Gesundheitszustand von Kim Jong Il wird sich, wie es sich ja schon abzeichnet, verschlechtern, er wird abdanken. Sein jüngster Sohn wird wie geplant sein Nachfolger. Er wird sich um bessere Beziehungen zwischen Nord- und Südkorea bemühen.

There are two problems that constantly occur when dealing with shells: Some shell-applications have crappy input-routines that do not have a history and do not allow the usage of the arrow keys, and it often happens that I start an X11-Application that is then associated to that shell, so I cannot close my terminal emulator without killing that X11-Application.

For both problems, there are solutions.

Using rlwrap before your command adds a wrapper around the program that adds a history and support for arrow keys to the input-routines of an application.

Using nohup before your command detaches the input, writes the output into a file, and blocks the hangup-signals of a terminal emulator, so you can start X11-Applications and close your terminal emulator anyway.

Usefull tools that everybody should know about.

Vor etwa einem Jahr habe ich Prognosen für 2010 damals noch in meinem alten Blog veröffentlicht. Mal sehen, wie viele eingetreten sind:

1. Die Welt ist zumindest bisher nicht untergegangen, wird das wahrscheinlich also nicht tun.

2. Deutschland wurde nicht Fußballweltmeister.

3. P!=NP wurde nicht bewiesen, aber es gab einen Versuch der recht bekannt wurde.

4. Kirby for Wii, sort of.

5. Mit Zelda siehts wie üblich so aus, dass sie länger als angekündigt brauchen.

6. Ich habe nichts mehr von Kim Frank gehört, Musikerfolge scheinen zumindest ausgeblieben zu sein.

7. Die Gesundheitsreform in den USA scheint durch zu sein, damit scheinen aber nicht alle Leute zufrieden zu sein.

8. Star Trek 12 ... noch nicht.

9. Die Weltklimakonferenzen ... langweilen mich. Aber zumindest existieren sie noch. Ich denke, auch das kann man als mäßigen Erfolg bezeichnen.

10. Achja, da war ja noch was ... Uxul World ... Das wird erstmal zurückgestellt, leider.

11. Dazu ist mir nichts bekannt.

12. Bisher war es nicht übermäßig kalt, zumindest nicht über längere Zeit.

13. Der Sommer wurde doch wieder sehr heiß, vor Allem für einige ICEs.

14. Die Umfragewerte der Regierung sanken - wie immer.

15. Keine weit verbreitete Alternative zur Wikipedia, die meisten Leute gehen halt jetzt auf die englische Wikipedia.

16. Ich kann mich an keine größere Krankheitswelle erinnern.

17. Soweit ich weiß hat sich die Bundeswehr noch nicht zurückgezogen aus Afghanistan.

18. Es gibt sogar inzwischen Clojure 1.2

19. Kein Super Mario Land 4, soweit ich weiß. Schade.

20. Bisher erhält man noch die meisten Laptops mit Magnetspeicherplatten. Trotzdem dauerts wohl nicht mehr lang.

21. Zur Verbreitung von SmartBooks habe ich keine Ahnung. Scheint bisher aber nicht so der Renner zu sein.

22. Leider ist auch die 3d-Unterstützung virtueller Maschinen bisher soweit ich das mitbekommen habe nicht merklich besser geworden.

23. Bezahlcontent hab ich schon gesehen, war aber nicht so der Renner. Dafür laufen jetzt alle auf Flattr.

24. Mir ist nichts bekannt.

25. iOS und das neue MacBook Air klingen doch ganz passend.

26. Von der Neuverschuldung habe ich zumindest nichts mitbekommen.

27. Von weiteren Plattformen unter denen Google Chrome läuft habe ich nichts mitbekommen.

28. Sowohl mir als auch Wikipedia ist nichts bekannt.

29. Weiß das mit der Reform des Wahlrechts irgendjemand? Ich hab es nicht mehr verfolgt.

30. Eine Reform des Abmahnwesens gab es nicht, dafür gibt es einen Haufen neuer Probleme und die Wikileaks-Diskussionen.

31. De-Mail. E-Perso.

32. Ja, ich bin umgezogen auf uxul.de, das ging ziemlich schnell.

33. Im Gegenteil sind die Bildungsproteste eher erloschen.

34. Das Sagenumwobene LHC, das die Welt zerstören sollte ... hat nichts dergleichen getan. Zu Forschungsergebnissen weiß ich nichts.

35., 36. Nachdem man in dem Kaff in dem ich wohne gesagt bekommt, man solle froh sein, dass man überteuertes DSL1000 und EDGE-Anbindung hat, und nachdem ich merke dass auch die Bahnfahrten nicht wesentlich mehr Internetanbindung bringen - ja, es hat sich anscheinend wenig geändert. Bissel billiger ist das Mobilinternet dafür geworden.

37. Die Leute gehen grad mehr in Richtung Flattr.

38. Eine Fortsetzung von Portal ist erst für nächstes Jahr angekündigt, soweit ich das mitbekommen habe.

39. Von einer Fortsetzung von Schneewittchen habe ich nichts gehört. Wäre eigentlich mal nett.

40. Die chromatische Zahl der euklidischen Ebene ist meines Wissens immernoch offen.

41. No verified desktop-software that I know of, unfortunately.

42. FUSE unter Windows geht leider immernochnicht, aber die Virtualisierer sind besser geworden, damit wird der Overhead beim CIFS-Mounting unter Windows kleiner.

When I was younger, I would consider myself as an environmentalist in some sense. I didnt like to use hairdriers, wanted to run the toilet on rain water, used a retractable pencil instead of one made of wood. Little things that felt good and are probably the right thing to do.

Today, I still use retractable pencils because I like them more, and when its summer I normally dont use hairdriers because I dont like them, but the reason has changed from environment protection to convenience. For example, I dont care what water is inside my toilet, because I live in a flat where I cannot change anything about it anyway. Meanwhile, I am even using tumbly-dryers, at least in the winter, since it is too dangerous to dry them inside my flat because high humidity may cause fungi.

I think an important mistake environment protection has made was to tell people that they have to give up life quality for the sake of environment protection. Turning off the light in rooms that are not used or turning off the faucet while brushing one's teeth are little tips that will not decrease life quality, but hairdriers, laundry-dryers and water coming from one central place is easy, and trying to avoid it makes life more complicated, which causes frustration and rejection.

So, the preferred way is encouraging the usage of energy saving technologies, make them affordable for everyone, and always try to keep up the quality of life, or even increase it.

Studying mathematics for a while now, there are a few things that repeat to get on my nerves, mainly because there are some nonations missing or existing in only a strange way such that they either blow up your "preliminary definitions" section or make things less clear.

One thing that happens surprisingly often is that you have a set A and want a set B such that B\A contains only one element a, but you dont want to overblow your definitions (and give B an extra name), so you are writing A∪{a} instead - which is annoying and overloaded. Some people use the dirty (and wrong - at least in the common set theory) notation A∪a instead, some write A,a instead. Anyway, this problem occurs comparably often, and yet, no notation has spread for it.

Something similar is the set-Xor-operation between sets, for sets A and B it can be written as (A∪B)\(A∩B). Some people use an overlined or dotted ∪ for that, but that can be confused with the disjoint union (which is a dirty notation for showing that A and B were already disjoint). Some people also use a Δ for it. Anyway, there is no common symbol.

Also from set theory there is the cardinality of sets. There are essentially two notations for a cardinality of A, namely |A| and #A, and as long as A is finite, everyone means the number of elements. But as soon as A gets infinite, the notations differ, and some people just write |A|=∞, when they actually mean |A|≥ω. I mostly use #A as the number of elements of A if A is finite and ∞ otherwise, and |A| as the actual cardinality, which can never be ∞, because ∞ is not a defined cardinality. This makes sense because in many cases, the actual cardinality is not interesting but only whether the set is infinite or not. Anyway, I have seen both notations in both ways already.

I already suggested lambda-abstractions in analysis and algebra. There is no notation that has spread for these abstractions, and I think this is sometimes annoying, especially because in higher topics the abstraction level gets very high.

Somehow related is the problem that there is no common notation for algorithms in mathematics, so one can see "pseudocode" in some textbooks. Algorithms are not that important, but I wonder why there is no notation that has spread. Maybe with programming-courses getting compulsory, and with theoretical computer science reuniting with mathematics, this will change.

In a lot of lectures, I have already seen the problem that one wants to show how some equantion is derived by other equations, or is reduced to something that is obviously wrong. In many cases, it is not clear that an equation holds, so writing the equation on a blackboard always involves some additional natural language which could be avoided if there was some common character for "this equation maybe holds". Some people use an ≟. Such a character is not really needed, but we have characters like ∴ and ⇒. Some people think, words would make mathematical texts more readable - I think that depends on the content, and well-arranged typesetting can make texts a lot more readable than using words instead of special characters.

Something that happens regularly is the confusion about ℕ. Is 0∊ℕ? The answer is, sometimes yes, sometimes no. This is annoying, an it always gets on my nerves when somebody uses ℕ. There are alternatives, for example, one can define ℕi:={n∊ℤ|n≥i}, and then always write ℕ0 and ℕ1. So please, use that instead!

Same for ⊂. Some people use ⊂ as proper subset, some not. There are ⊆ and ⊊ which are unambiguous.

Sometimes, I want to install and test bleeding-edge-software, like snapshots of ECL in the days when it didnt support gray-streams in the stable version. Always creating a new Package and installing it is a lot of work, especially when having to compile multiple times. Maintaining several paths of different versions of software can also be a pain, but installing them on a central place can cause problems, for example it can be non-trivial to remove them again.

A very good solution for that problem seems to be stow and xstow. It can be used to create symlinks from a directory to /usr/local, and remove them again afterwards.

Lets say you want to install Mizar. Well, this project is not open source, nor does it come in a really useful format. So firstly, after downloading and expanding, I am creating a directory /usr/local/stow/mizar. Then I run the installer to install it into this directory

$ sudo ./install.sh
 
Installation of Mizar System Version 7.9.03 (Linux/FPC) (MML 4.110.1033)
 
Enter the path for installing Mizar executables
[default is /usr/local/bin]
/usr/local/stow/mizar/bin
Unpacking to /usr/local/stow/mizar/bin
 
Enter the path for installing Mizar shared files
[default is /usr/local/share/mizar]
/usr/local/stow/mizar/share/mizar
Unpacking to /usr/local/stow/mizar/share/mizar
 
It may take some time...
 
Enter the path for installing Mizar documentation
[default is /usr/local/doc/mizar]
/usr/local/stow/mizar/doc/mizar
Unpacking to /usr/local/stow/mizar/doc/mizar
 
The installation process of the Mizar system is completed.
 (...)

That being done, lets go to xstow:

$ cd /usr/local/stow
$ sudo xstow mizar
$ which mizf
/usr/local/bin/mizf


That worked well so far. Of course, we have to change the MIZFILES environment variable properly, but anyway, now mizar is sort of installed.

To uninstall it again:

$ cd /usr/local/stow
$ sudo xstow -D mizar
$ which mizf


It is not installed anymore (well, the files are still in /usr/local/stow/mizar, but not in any default directory). This is very helpful, especially for software like mizar, which is not really cooperative with the system.

Under Windows, there has already been a driver for mounting Virtualbox VDIs under Windows, called ImDisk (which I have never tried). For Linux, there was a default method using losetup (which I also didnt try, because it sounded like these hacky solutions that often fail and break your whole virtual disk).

Anyway, meanwhile, Ubuntu has a package named virtualbox-ose-fuse, containing a tool called "vdfuse", which creates a fuse filesystem containing a file that can be loopmounted (the partitions are added, but I prefer kpartx).

The command is self-explaining and trivial to use, a little bit of configuration for fuse is necessary, but thats all. A pretty useful tool.