To see the full text of an article, click its title or the Link Weiterlesen.

Installing GNU Guix 0.6, easily

Org-Source (for editing)

PDF (for printing)

“Got a power-outage while updating? No problem: Everything still works”

GNU Guix is the new functional package manager from the GNU Project which complements the Nix-Store with a nice Guile Scheme based package definition format.

What sold it to me was “Got a power-outage while updating? No problem: Everything still works” from the Guix talk of Ludovico at the GNU Hacker Meeting 2013. My son once found the on-off-button of our power-connector while I was updating my Gentoo box. It took me 3 evenings to get it completely functional again. This would not have happened with Guix.

Update (2014-05-17): Thanks to zerwas from IRC @ freenode for the patch to guix 0.6 and nice cleanup!


Installation of GNU Guix is straightforward, except if you follow the docs, but it’s not as if we’re not used to that from other GNU utilities, which often terribly short-sell their quality with overly general documentation ☺

So I want to provide a short guide how to setup and run GNU Guix with ease. My system natively runs Gentoo, My system natively runs Gentoo, so some details might vary for you. If you use Gentoo, you can simply copy the commands here into the shell, but better copy them to a text-file first to ensure that I do not try to trick you into doing evil things with the root access you need.

In short: This guide provides the First Contact and Black Triangle for GNU Guix.

Communicating your project: honest marketing for free software projects

Communicating your project is an essential step for getting users. Here I summarize my experience from working on several different projects including KDE (where I learned the basics of PR - yay, sebas!), the Hurd (where I could really make a difference by improving the frontpage and writing the Month of the Hurd), Mercurial (where I practiced the minimally invasive PR) and 1d6 (my own free RPG where I see how much harder it is to do PR, if the project to communicate is your own).

Since voicing the claim that marketing is important often leads to discussions with people who hate marketing of any kind, I added an appendix with an example which illustrates nicely what happens when you don’t do any PR - and what happens if you do PR of the wrong kind.

If you’re pressed for time and want the really short form, just jump to the questionnaire.

Use the source, Luke! — Emacs org-mode beamer export with images in figure

I just needed to tweak my Emacs org-mode to beamer-latex export to embed images into a figure environment (not wrapfigure!). After lots of googling and documentation reading I decided to bite the bullet and just read the source. Which proved to be much easier than I had expected.

This tutorial requires at least org-mode 8.0 (before that you had to use hacks to get figure without a caption). It is only tested for org-mode 8.0.2: The code you see when you read the source might look different in other versions.

default answer to “I want to connect with you on [hip unfree service]”

I just decided to give a default answer when I get some email from people asking me to connect to them on some new unfree service:

Hello [Person],

You asked me to connect with you on some unfree service. If you still want that, just use a Those are federated, so you can use a number of different providers and still be connected to everyone on any other server.

Yahoo löscht Adressen aus meinem Adressbuch

→ Dieser Text ist eine offene Antwort auf eine Mail von Yahoo, in der sie mir erzählt haben, dass sie eine Adresse aus meinem Adressbuch entfernt haben.1

Sehr geehrte Yahoo-Supporter,

Was denken Sie sich dabei, Adressen in meinem Adressbuch zu löschen oder anderweitig zu ändern - oder auch nur, die darin gespeicherten Adressen zu „prüfen“?

Wenn Sie so mit meinen privaten Daten umgehen, muss ich schließen, dass ich von Ihren Diensten nur das absolute Minimum nutzen kann und jegliche privaten Daten lokal verwalten muss.

Mit freundlichen Grüßen,
Arne Babenhauserheide

PS: Diese E-Mail-Adresse könnte der Informationsschnipsel sein, den ich brauche, um aktualisierte Kontaktdaten zu finden.

PPS: Das höchste, das ich noch tolerierbar fände, wäre eine Markierung der E-Mail Adresse als nicht mehr aktuell, durch eine Abfrage, die nur getriggert wird, wenn eine Yahoo-Adresse gelöscht wird.

PPPS: Der Text von Yahoo dürfte die Schöpfungshöhe nicht erreichen, die notwendig ist, um Urheberrechtlichen Schutz zu genießen, daher zitiere ich ihn hier.

  1. Die E-Mail von Yahoo im Wortlaut:

    Ihr Mail-Account wurde aktualisiert

    Hallo ████,

    Yahoo! möchte dafür sorgen, dass Ihr Adressbuch nur aktuelle und gültige Mail-Adressen von den Freunden, Bekannten und Verwandten enthält, mit denen Sie kommunizieren. Ihre Kontaktliste enthält Mail-Adressen, die nicht mehr gültig sind. Wir haben sie entfernt.

    Folgende Mail-Adressen wurden entfernt:


    Es wurden ausschließlich ungültige Mail-Adressen entfernt. Alle weiteren Kontaktdaten bleiben bestehen.

    Wussten Sie schon, dass Sie weitere Kontakte ganz leicht aus Facebook oder Gmail importieren können? Jetzt loslegen :

    Yahoo! Kundensupport

Let-Rekursion ist toll!

Ich habe dank Pythonista in Scheme-Land von Let-Rekursion gelesen. Bis vorgestern fand ich sie noch sinnlos kompliziert.

Das hat sich alles geändert, als ich wirklichen Code damit geschrieben habe - zum Beispiel die Fibonacci-Folge (syntax: wisp1 für Guile Scheme2) (eigentlicher Augenöffner):

define : fib n
    let rek : (i 0) (u 1) (v 1)
        if : >= i : - n 2
            . v
            rek (+ i 1) v (+ u v) ; else

Um Let-Rekursion zu beschreiben, werde ich diese Funktion jetzt zu einer Schleife in Python transformieren und mich zu immer eleganteren Formulierungen vortasten, bis ich wieder bei dem gerade gezeigten Code bin; dann aber mit Hintergrundwissen darüber, wodurch er elegant wird, mit dem Verständnis, was genau er tut, und mit einem Gefühl dafür, wie viel diese Eleganz ausmacht - und warum sie erstrebenswert ist.

Surprising behaviour of Fortran (90/95)

1 Introduction

I recently started really learning Fortran (as opposed to just dabbling with existing code until it did what I wanted it to).

Here I document the surprises I found along the way.

As reference: I come from Python, C++ and Lisp, and I actually started to like Fortran while learning it. So the horror-stories I heard while studying were mostly proven wrong. I uploaded the complete code as base60-surprises.f90.

Kommentar zur Kritik am Bedingungslosen Grundeinkommen von Bruno Kern

→ Kommentar zu der Mail „FWD: Kritik am Bedingungslosen Grundeinkommen“ auf der Haupt-Mailing-Liste von attac-karlsruhe.

Hallo alle,

Ich habe diese Mail gerade zufällig gesehen und mich für den Inhalt interessiert.

Dabei habe ich mir die Freiheit genommen, die Punkte zu kommentieren, die mir am meisten ins Auge gesprungen sind.

Die Ideologie eines „Green New Deal“, der uns einreden will, dass wir mit einer intelligenteren Technik, mehr Effizienz und Ener

Kommentar zu Damsel in Distress: Schwache Darstellung von Frauen in Computerspielen

→ Ein Kommentar zu der Video(-spiel)-Analyse Damsel in Distress. Im ersten Teil beschreibt darin Anita Sarkeesian von Feminist Frequency, wie Frauen in Computerspielen vor allem in schwachen Rollen dargestellt werden („Damsel in Distress“ bedeutet in ihrer Beschreibung in etwa „Jungfrau, die Rettung braucht“). Im Zweiten spricht sie dann von Geschichten, in denen Männer auf Rachefeldzug gehen, nachdem ihre Frau oder Freundin getötet wurde.

Update (2013-08-11): In Folge 3 der Serie hat Anita fast alles umgesetzt, was ich hier geschrieben habe - und Aquaria beschrieben. Sehr cool!1


Teil 1: Schwache Frauen

Dem ersten Video stimme ich zu: Frauen werden weitaus häufiger als schwache Charaktere gezeigt, die gerettet werden müssen.

Was ich dabei nicht verstehe ist, warum noch nicht in 90% der Spiele beim Start das Geschlecht des Hauptcharakters gewählt werden kann.

Aber schauen wir doch einfach mal, an welche Spiele ich mich am stärksten erinnere - als Näherung für die Frage, welche Spiele mich am meisten beeinflusst haben:

  1. Part 3 of Damsel in Distress got much better than part 2, I think. Well worth watching!
    With a (short) nod to Drakan (I only played the demo, but that was awesome) and a nice reference to Aquaria. Though she leaves out Naija fighting against huge monsters and talks instead about cooking and learning about her backstory. But actually 80% of the game is spend diving through deep waters, battling hostile underwater creatures to beautiful music and using tunes to cast spells. At least that’s true as soon as you learn the self-transformation spells to switch into battle-forms.
    On the story-idea in the end: I’d wish for an alternative start: The evil overlord who captured the princess comes to her to gloat about a prophecy which says she will be saved by a noble knight, and that this prophecy will never come true. Instead of hoping for a prince, she decides to leave, not intending to become anyones price.
    PS: Preexisting Stereotype about men: dumb husband who never accomplishes anything meaningful and is laughing stock of his family. That’s the trope employed in many comedy shows on TV… 

Agnes Krumwiede verwässert die Positionen des Grünen Parteiprogramms 2013 zum Urheberrecht

Bis gestern wusste ich, wen ich wählen will: Definitiv wieder Grün. Dann hat Agnes Krumwiede ihre Vision für die Zukunft der Musikbranche geschrieben.

Normalerweise würde ich ihr ihre Meinung einfach stehen lassen, aber sie wird als „Sprecherin für Kulturpolitik der Bundestagsfraktion Bündnis 90/Die Grünen“ vorgestellt.

Update 4: Da Agnes Krumwiede sich weigert, mir zu antworten, habe ich nun an den offiziellen Account der Grünen geschrieben. Ich habe sie gebeten, Agnes Krumwiede zu bitten, die Ergebnisse der Grünen Fachtagung zu beachten, ihnen den Link hierher gegeben und ihnen gesagt, dass ich selten so enttäuscht von einer Grünen Aussage war. Letzteres war vielleicht nicht ganz so konstruktiv. Ich hoffe, sie erkennen dahinter, dass ich die Grünen Aussagen zum Thema Urheberrecht sonst meist wirklich gut finde, denn nur wer positive Erwartungen hat kann enttäuscht werden.

Update 3: Heise fragte zu dem Thema: Hat Agnes Krumwiede eigentlich die Fotografen der Bilder in ihrem PDF bezahlt? „Nach einer Urheberangabe gemäß § 13 UrhG sucht man bei Krumwiede vergeblich“. Wobei hervorgehoben werden sollte, dass die Musikwoche die Fotos in einer kommerziellen Veröffentlichung verwendete, und Agnes Krumwiede sie als Platform nutzte, um gegen nichtkommerzielle Privatkopien, zu sprechen. Dazu gab es noch einen Link zu einer Grünen Fachtagung zum Thema: „Schluss mit Weltfremd“. Der zeigte Echte Grüne Netzpolitik: „Vergüten statt Verfolgen“.

Update 2: Ich habe Agnes Krumwiede gefragt, ob sie eine Langtext-Klarstellung schreiben kann. Mit 144 Zeichen pro Nachricht kommt es mir zu schnell zu Missverständnissen (und ich habe gemerkt, dass mein Schreibstil ein bisschen zu weit ins piratig-flamige geht, obwohl Agnes Krumwiede und ich größtenteils auf der selben Seite stehen. Wenn wir die eigenen Delegierten ständig angreifen, überstehen nur die, die uns nicht zuhören…). Sollte sie diese Klarstellung schreiben, verlinke ich sie, sobald ich davon erfahre.

Update: Agnes Krumwiede hat auf meinen Text geantwortet.

Solange sie sich nicht deutlich von dieser Rolle distanziert (z.B. über „ich spreche hier als Privatperson, nicht für meine Partei“), sollte sie daher meiner Meinung nach ihr Parteiprogramm wiedergeben. Denn das was sie schreibt, zerstört meine Sicherheit in meine Wahlentscheidung.1

  1. Das Grüne Wahlprogramm ist beim Urheberrecht sehr ängstlich, geht aber in die richtige Richtung (und wurde wirklich von der gesamten Basis entwickelt - über ihr funktionierendes Delegiertensystem). Dank Agnes Krumwiede habe ich jetzt gesehen, dass ein ängstlich-schwammiger Text nicht reicht, weil er allzu leicht so weit ausgelegt werden kann, dass am Ende das Gegenteil von dem herauskommt, was er im Wortlaut sagt. Was ich mir gewünscht hätte ist das hier: Piratenpartei zum Urheberrecht. Ich habe einige Gründe, aus denen ich die Piraten nicht wählen will (v.a. die wenig inklusive Diskussionskultur, das Thema Gleichberechtigung und dass sie sich in den Medien in die Rolle einer reinen Bürgerbeteiligungs-Partei drücken ließen). Aber mit Agnes Krumwiede habe ich jetzt einen wichtigen Grund, die Grünen nicht zu wählen (Wenn die Spitze nicht mitzieht, bringt das Parteiprogramm wenig. Stichwort Gewissensfreiheit). Sollte sich da bis zur Wahl nichts ändern, wähle ich wohl doch Piraten. Denn das Urheberrecht ist das zentrale Thema für kreative Freiheit im Internet. 

Machtkonzentration, Überwachung und Zersplitterung

→ Ein offener Brief an Frau Kappert von der Taz zu ihrem Kommentar über die NSA: Die Datenterroristen: Geheimdienste haben mehr Informationen, verlieren aber an Macht

Sehr geehrte Frau Kappert,

Ihr Kommentar fing in meinen Augen sehr gut an. Doch der Abschluss war schwächer als der Anfang erhoffen ließ.

Wenn hier in Deutschland Tausende vor Banken demonstrieren, dann kommt das eine Weile in den Nachrichten. Danach gibt es plötzlich ein paar Skandale und kurz darauf wird geräumt. Und dann ist es vorbei und alles geht so weiter wie bisher.

Konstantin Wecker sagte nach 35 Jahren als Musiker „Ich bin damals angetreten, die Welt mit meiner Musik zu verändern. Die Welt hat sich verändert. Aber was soll ich sagen: Ich war es nicht.“



Vor 30 Jahren sind die Grünen angetreten, Frieden in der Welt zu verbreiten. Heute mischt Deutschland in jedem Krieg mit. Denn wir sind ja in der Nato, und da müssen wir helfen.

Die SPD ist angetreten, für die Arbeiter zu kämpfen. Jetzt waren sie an der Macht, und die Ungleichheit in Deutschland ist größer denn je.

Irgendjemand ändert hier etwas. Aber wir sind es nicht. Obwohl „unsere“ Parteien so stark sind wie nie zuvor.

NetzwerkB auf Bild-Niveau :(

→ Kommentar zur Aktion gegen Volker Beck von NetzwerkB.

Sie werfen hier soviel in einen Topf, dass ich Sie dabei nicht unterstützen kann und will.

Schlimmstes Beispiel:

Am Mittwoch, 10.

Ich lerne Steno, weil…

Ich lerne Stenografie, weil ich meine Schrift immer weiter entwickeln können will.

Ich lerne Steno, weil…

→ Mehr zu Steno…

Menschenfeindliche Systeme

„Du musst alles tun, was du kannst.“

Gedanken zur Ausprägung verschiedener menschenfeindlicher Systeme.

Wenn du alles tun musst, was du kannst, hast du selbst kaum mehr Wahlfreiheit.


  • Staats-Kommunismus: Staat stellt fest, was du kannst. Das ist deine Aufgabe.
  • Amerikanischer Kapitalismus: Wenn deine Qualifikation nicht passt, wirst du nicht genommen (zu schlecht oder zu gut → aufmüpfig). Ideologischer Druck.

Equal-Area Map Projections with Basemap and matplotlib/pylab

PDF (read as slides)

Org (reproduce)

Plotting global equal area maps with python, matplotlib/pylab and Basemap.

Table of Contents

information-disbalance creates a power-disbalance

→ a comment to You call it privacy invasion, I don't from Flameeyes.

What you state is a strong version of the “I’ve got nothing to hide” argument. If you’re interested in a thorough debunking, there is a very good article in the chronicle about that: Why Privacy Matters even if you have nothing to hide.

Thank you for your Flattr’s! | Danke für eure Flattr! | Dankon por vian Flattrn!

It’s always a great feeling to see a flattr - Thank you for your support!
You can find new free works for you enjoyment on (infrequent and bursty) and (currently weekly but mostly in German).

ArneBab on Flattr

Es ist ein tolles Gefühl, geflattrd zu werden - Danke für eure Unterstützung!

Wahlprogramm der „Alternative für Deutschland“, kritisch gelesen

Ich habe inzwischen von mehreren Leuten gehört, diese Professoren von der AfD wären ja gebildet und hätten ein gutes Programm.

PDF (drucken)

Org (bearbeiten)

Um nicht nur meine Meinung zu schreiben, sondern sie auch zu belegen, habe ich das Programm nochmal Schritt für Schritt gegengelesen und kommentiert.

Ich bin nicht auf viel gestoßen, dem ich zustimmen kann (dafür auf einige Horrorstellen) - abgesehen von Punkten, die eh schon Gesetz sind.

Jetzt aber zum Programm.

Basic usecases for DVCS: Workflow Failures

If you came here searching for a way to set the username in Mercurial: just edit $HOME/.hgrc and add
    username = YOURNAME <EMAIL>
If that file does not exist, simply create it.

Update (2013-04-18): In #mercurial @ there were discussions yesterday for improving the help output if you do not have your username setup, yet.

1 Intro

I recently tried contributing to a new project again, and I was quite surprised which hurdles can be in your way, when you did not setup your environment, yet.

So I decided to put together a small test for the basic workflow: Cloning a project, doing and testing a change and pushing it back.

I did that for Git and Mercurial, because both break at different points.

I’ll express the basic usecase in Subversion:

  • svn checkout [project]
  • (hack, test, repeat)
  • (request commit rights)
  • svn commit -m "added X"

You can also replace the request for commit rights with creating a patch and sending it to a mailing list. But let’s take the easiest case of a new contributor who is directly welcomed into the project as trusted committer.


A slightly more advanced workflow adds testing in a clean tree. In Subversion it looks almost like the simple commit:


Programm der „Alternative für Deutschland“

Belege für die Aussagen hier habe ich im Artikel Wahlprogramm der „Alternative für Deutschland“, kritisch gelesen geschrieben.

Ich wollte heute einen Artikel zum Programm der „Anternative für Deutschland schreiben und habe es geschafft, nach 3 Stunden Schreiben und Recherche den Artikel zu löschen. Aber die Nachdenkseiten treffen die Kritik in meinem Artikel zum Glück mit noch mehr Hintergrund, so dass ich stattdessen jetzt einfach auf den Artikel der Nachdenkseiten verlinke:

Hintergrund zur AfD von den Nachdenkseiten:
Können Markt­radikale und Nationalchauvinisten eine „Alternative für Deutschland“ sein?
— mit Unterstützerliste (und Hintergrund zu den Unterstützern).

Babcore: Emacs Customizations everyone should have

1 Intro

PDF-version (for printing)

Package (to install)

orgmode-version (for editing)

repository (for forking)

project page (for fun ☺)

Emacs Lisp (to use)

I have been tweaking my emacs configuration for years, now, and I added quite some cruft. But while searching for the right way to work, I also found some gems which I direly miss in pristine emacs.

This file is about those gems.

Babcore is strongly related to Prelude. Actually it is exactly like prelude, just with the stuff I consider essential.

But before we start, there is one crucial piece of advice which everyone who uses Emacs should know:

C-g: abort

Hold control and hit g.

That gets you out of almost any situation. If anything goes wrong, just hit C-g repeatedly till the problem is gone - or you cooled off far enough to realize that a no-op is the best way to react.

To repeat: If anything goes wrong, just hit C-g.

wisp: Whitespace to Lisp

I love the syntax of Python, but crave the simplicity and power of Lisp.
display "Hello World!"      ↦    (display "Hello World!")
define : factorial n             (define (factorial n)            
    if : zero? n            ↦        (if (zero? n)                
       . n                              n                      
       * n : factorial {n - 1}          (* n (factorial {n - 1}))))
Update (2015-04-10): wisp v0.8.3 released with line information in backtraces. For more info, see the NEWS file.To test it, install Guile 2.0.x or 2.2.x and Python 3 and bootstrap wisp:
tar xf wisp-0.8.3.tar.gz ; cd wisp-0.8.3/;
./configure; make check;
guile -L . --language=wisp tests/factorial.w; echo
If it prints 120120 (two times 120, the factorial of 5), your wisp is fully operational.
That’s it - have fun with wisp syntax!
Update (2015-03-18): wisp v0.8.2 released with reader bugfixes, new examples and an updated draft for SRFI 119 (wisp). For more info, see the NEWS file.To test it, install Guile 2.0.x or 2.2.x and Python 3 and bootstrap wisp:
tar xf wisp-0.8.2.tar.gz ; cd wisp-0.8.2/;
./configure; make check;
guile -L . --language=wisp tests/factorial.w; echo
If it prints 120120 (two times 120, the factorial of 5), your wisp is fully operational.
That’s it - have fun with wisp syntax!
Update (2015-02-03): The wisp SRFI just got into draft state: SRFI-119 — on its way to an official Scheme Request For Implementation!
Update (2014-11-19): wisp v0.8.1 released with reader bugfixes. To test it, install Guile 2.0.x and Python 3 and bootstrap wisp:
tar xf wisp-0.8.1.tar.gz ; cd wisp-0.8.1/;
./configure; make check;
guile -L . --language=wisp tests/factorial.w; echo
If it prints 120120 (two times 120, the factorial of 5), your wisp is fully operational.
That’s it - have fun with wisp syntax!
Update (2014-11-06): wisp v0.8.0 released! The new parser now passes the testsuite and wisp files can be executed directly. For more details, see the NEWS file. To test it, install Guile 2.0.x and bootstrap wisp:
tar xf wisp-0.8.0.tar.gz ; cd wisp-0.8.0/;
./configure; make check;
guile -L . --language=wisp tests/factorial.w;
If it prints 120120 (two times 120, the factorial of 5), your wisp is fully operational.
That’s it - have fun with wisp syntax!
On a personal note: It’s mindboggling that I could get this far! This is actually a fully bootstrapped indentation sensitive programming language with all the power of Scheme underneath, and it’s a one-person when-my-wife-and-children-sleep sideproject. The extensibility of Guile is awesome!
Update (2014-10-17): wisp v0.6.6 has a new implementation of the parser which now uses the scheme read function. `wisp-scheme.w` parses directly to a scheme syntax-tree instead of a scheme file to be more suitable to an SRFI. For more details, see the NEWS file. To test it, install Guile 2.0.x and bootstrap wisp:
tar xf wisp-0.6.6.tar.gz; cd wisp-0.6.6;
./configure; make;
guile -L . --language=wisp
That’s it - have fun with wisp syntax at the REPL!
Caveat: It does not support the ' prefix yet (syntax point 4).
Update (2014-01-04): Resolved the name-clash together with Steve Purcell und Kris Jenkins: the javascript wisp-mode was renamed to wispjs-mode and wisp.el is called wisp-mode 0.1.5 again. It provides syntax highlighting for Emacs and minimal indentation support via tab. You can install it with `M-x package-install wisp-mode`
Update (2014-01-03): wisp-mode.el was renamed to wisp 0.1.4 to avoid a name clash with wisp-mode for the javascript-based wisp.
Update (2013-09-13): Wisp now has a REPL! Thanks go to GNU Guile and especially Mark Weaver, who guided me through the process (along with nalaginrut who answered my first clueless questions…).
To test the REPL, get the current code snapshot, unpack it, run ./, start guile with $ guile -L . (requires guile 2.x) and enter ,language wisp.
Example usage:
display "Hello World!\n"
then hit enter thrice.
Voilà, you have wisp at the REPL!
Caveeat: the wisp-parser is still experimental and contains known bugs. Use it for testing, but please do not rely on it for important stuff, yet.
Update (2013-09-10): wisp-guile.w can now parse itself! Bootstrapping: The magical feeling of seeing a language (dialect) grow up to live by itself: python3 wisp-guile.w > 1 && guile 1 wisp-guile.w > 2 && guile 2 wisp-guile.w > 3 && diff 2 3. Starting today, wisp is implemented in wisp.
Update (2013-08-08): Wisp 0.3.1 released (Changelog).

Wirtschaftsaufsicht für legale Prostitution

→ Antwort auf die Aussage „Es gäbe so viel Sinnvolleres anzuprangern als legale Prostitution“ von Antje Lang-Lendorff in der Taz.

Bei legaler Prostitution gibt es sehr wohl etwas anzuprangern: Dass im Zuge der Legalisierung nicht gleichzeitig eine effektive Wirtschaftsaufsicht eingeführt wurde.

Für jede Masseurin, Psychologin oder Gastwirtin gibt es hierzulande klare Gesetze, und ein Verstoß dagegen führt zur Schließung.

Wir haben Gesetze dafür, wie Salat in Dönerbuden aufbewahrt werden muss, und ein Verstoß dagegen wird direkt geahndet. Wir dürfen nichtmal ein Soya-Getränk auf der Verpackung als Milch bezeichnen.

Warum haben wir dann keine geprüften Vorgaben, die regeln, wie ein Bordell geführt werden muss, damit die Rechte aller Beteiligten gewahrt bleiben? Und die Auskunftspflichten definieren, die natürlich geprüft werden?

Was wir dafür brauchen ist einfach eine Definition, was gute Prostitution ist und wie sie funktionieren kann.

Spaß mit import from in Python

→ Antwort auf Is it in this case : (see : [01:16]1 — Julien-Claude Fagot, die eine Antwort war auf One more reason why you should not use “from bla import foo”: print __import__(obs.__class__.__module__).__file__ — ArneBab


def foo():
    print "bla"

Interaktiver Test:

\>>> import bla
\>>> def fu():
...   print "fu"
\>>> fu()
\>>> from bla import foo
\>>> foo()
\>>> = fu
\>>> foo()

Profifrage: Was passiert, wenn du from bla import foo nach = fu ausführst?

  1. dsop: if you use '', then yes, you can assign to and you'll see the change. If you do 'from bla import foo', then your locally imported 'foo' will not 'see' changes to 

Going from a simple Makefile to Autotools

Table of Contents



I recently started looking into Autotools, to make it easier to run my code on multiple platforms.

Naturally you can use cmake or scons or waf or ninja or tup, all of which are interesting in there own respect. But none of them has seen the amount of testing which went into autotools, and none of them have the amount of tweaks needed to support about every system under the sun. And I recently found pyconfigure which allows using autotools with python and offers detection of library features.

Namespaces in Emacs Lisp - ohne den Interpreter zu ändern

» Adding namespace support to emacs lisp in a macro with just 15 lines of code - it’s things like this which make lisp feel like the mother of all languages.«1

(defmacro namespace (prefix &rest sexps)
  (let* ((naive-dfs-map
          (lambda (fun tree)
            (mapcar (lambda (n) (if (listp n) (funcall naive-dfs-map fun n)
                                  (funcall fun n))) tree)))
         (to-rewrite (loop for sexp in sexps
                           when (member (car sexp)
                                        '(defvar defmacro defun))
                           collect (cadr sexp)))
         (fixed-sexps (funcall naive-dfs-map
                               (lambda (n) (if (member n to-rewrite)
                                                (format "%s-%s" prefix n)) n))
    `(progn ,@fixed-sexps)))
(provide 'namespace)
(require 'namespace)
(namespace foo
           (defun bar ()
           (defun foo (s)
(foo-foo (foo-bar))

Disclaimer: This code is not perfect. It will likely fail in unpredictable ways, and the number of not supported corner-cases is probably huge - and unknown. But (and that’s the relevant result) you can do this right. Rainer Joswig gives pointers for that on Stackoverflow: “What you actually need is a so-called code-walker”. Also he shows examples where the code breaks.

(Der Hauptteil dieses Codes stammt von vpit3833 und konr und ich darf ihn verwenden. Er funktioniert dank einer Korrektur von Stefan. Er ist nicht perfekt, aber da er mir v.a. dazu dienen soll, meine eigenen Codeschnipsel besser zu organisieren, sollte ich das verschmerzen können)

Der Code mag schwer lesbar sein, hat aber riesige Implikationen: Du als einfacher Endnutzer des Lisp-Interpreters kannst Namespace-Support hinzufügen, ohne dass die Hauptentwickler dafür irgendetwas machen müssen.

  1. Der Code stammt größtenteils aus einer Diskussion auf Stackoverflow

Tail Call Optimization (TCO), dependency, broken debug builds in C and C++ — and gcc 4.8

TCO: Reducing the algorithmic complexity of recursion.
Debug build: Add overhead to a program to trace errors.
Debug without TCO: Obliterate any possibility of fixing recursion bugs.

“Never develop with optimizations which the debug mode of the compiler of the future maintainer of your code does not use.”°

UPDATE: GCC 4.8 gives us -Og -foptimize-sibling-calls which generates nice-backtraces, and I had a few quite embarrassing errors in my C - thanks to AKF for the catch!

1 Intro

Tail Call Optimization (TCO) makes this

def foo(n):
    return foo(n+1)

behave like this

def foo(n):
    return n+1
n = 1 while True: n = foo(n)

Test of the hg evolve extension for easier upstreaming

1 Rationale

PDF-version (for printing)

orgmode-version (for editing)

repository (for forking)

Currently I rework my code extensively before I push it into upstream SVN. Some of that is inconvenient and it would be nicer to have easy to use refactoring tools.

hg evolve might offer that.

This test uses the mutable-hg extension in revision c70a1091e0d8 (24 changesets after 2.1.0). It will likely be obsolete, soon, since mutable-hg is currently moved into Mercurial core by Pierre-Yves David, its main developer. I hope it will be useful for you, to assess the future possibilities of Mercurial today. This is not (only) a pun on “obsolete”, the functionality at the core of evolve which allows safe, collaborative history rewriting ☺

Steno: Eindeutig rekonstruierbare Piktogramme

Steno1 strukturiert den Prozess der Vereinfachung der Schrift, so dass sichergestellt ist, dass die für des Verständnis des Inhaltes notwendigen Teile der Schrift erhalten bleiben.

Mir ermöglicht es gleichzeitig entspanntes, schönes und schnelles2 Schreiben, das ich mein ganzes Leben lang verbessern kann.

Beispiel:   Steno Stufe 23
             „Wir danken dem Käufer des Essens“

In der Schule hatte ich immer Probleme mit der Schönschreibung. Die Schrift war für mich ein Werkzeug, um Informationen festzuhalten. Ich habe daher nicht eingesehen, warum ich Zeit darauf verwenden sollte, meine Buchstaben besonders rund, glatt oder verschnörkelt zu machen. Schließlich waren selbst grausig verstümmelte Buchstaben noch lesbar.

Beim Versuch den Aufwand beim Schreiben zu reduzieren habe ich meine Schrift verkleinert und die Formen der Buchstaben und Wörter reduziert (zum Beispiel wurde die Nachsilbe -ung einfach zu einem angehängten -g, erkennbar durch die Schleife unten).

Ein großer Teil der Schrift war für mich einfach nur Ballast.

  1. Steno steht für Stenografie (Kurzschrift) und ist nicht zu verwechseln mit Stego: Steganografie (der Kunst, Informationen in anderen Informationen zu verstecken). 

  2. Um meine eigene Geschwindigkeit zu testen, habe ich Testtexte mit im Deutschen häufigen Wörtern getippt und in Steno geschrieben. Beim Tippen komme ich auf 423 Zeichen pro Minute. Beim entspannten Schreiben in Steno auf 250 bis 3004. Allerdings verbrauche ich bei Steno immernoch viel Zeit mit Denken (vor jedem Wort), weil die Umsetzung von Wort in Druckschrift in ein Steno-Kürzel bei mir noch nicht komplett automatisch läuft. Und Steno fühlt sich deutlich entspannter und natürlicher an als Tippen. 

  3. Das Bild ist mit Inkscape erstellt. Dank Glättung der Pfade sieht man nicht so deutlich, dass ich die Zeichen mit der Maus gemahlt habe… ☺ 

  4. 250 Zeichen pro Minute sind etwa 100 Silben pro Minute. Professionelle Stenografen müssen mindestens 360 Silben pro Minute schreiben können, ich hätte also noch einiges an Weg vor mir, wenn ich mit Steno Geld verdienen wollte ☺ 

Frauenfeindlichkeit auf Hacker-Treffen

Ich lese gerade zum zweiten oder dritten Mal dieses Jahr von einer Frau, die sehr engagiert in die Hacker-Gemeinschaft eingestiegen ist und rausgedrängt und angegriffen wurde, ohne Hilfe zu bekommen.

Update: Asher Wolfs Seite wurde gehackt. Der Text ist auf pastebin gespiegelt. Ich habe ihn in freenet hochgeladen: asher-hacker-community-talk.txt.

Inhalt abgleichen
Willkommen im Weltenwald!

Beliebte Inhalte news


This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Enter the characters shown in the image.