To see the full text of an article, click its title or the Link Weiterlesen. New site: draketo.de/index.

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 status.net-server. 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:

    ██████@yahoo.de
    ██████

    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 : http://address.yahoo.com/import

    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.

If you want a quick start into Fortran, I’d suggest to begin with the tutorial Writing a commandline tool in Fortran and then to come back here to get the corner cases right.

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.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

Inhalt:

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

Wege zur Macht über Andere

Wege zur Macht über Andere

→ 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ß.

Machtkonzentration, Überwachung und Zersplitterung (PDF)
PDF

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.“1

Inhalt:

Zustand

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.


  1. Reiche versuchen ihre Macht strukturell zu verankern: Macht und Geld wurden in den letzten Jahrzehnten immer stärker auf eine kleine Gruppe konzentriert, und kaum jemand wagt es, Geldbesitz als Rechtfertigung für Entscheidungsmacht anzuzweifeln. Diese kleine Gruppe arbeitet aktiv daran, ihre Macht in gesellschaftlichen Strukturen zu verankern. Dabei ist ihr Reichtum kein sinnvolles Maß für Leistung, nicht einmal ein selbst-konsistentes

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.

Druck:

  • Staats-Kommunismus: Der 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 draketo.de (infrequent and bursty) and 1w6.org (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 run hg config --edit and add
    [ui]
    username = YOURNAME <EMAIL>
to the file which gets opened. If you have a very old version of Mercurial (<3.0), open $HOME/.hgrc manually.

Update (2015-02-05): For the Git breakage there is now a partial solution in Git v2.3.0: You can push into a checked out branch when you prepare the target repo via git config receive.denyCurrentBranch updateInstead, but only if nothing was changed there. This does not fully address the workflow breakage (the success of the operation is still state-dependent), but at least it makes it work. With Git providing a partial solution for the breakage I reported and Mercurial providing a full solution since 2014-05-01, I call this blog post a success. Thank you Git and Mercurial devs!

Update (2014-05-01): The Mercurial breakage is fixed in Mercurial 3.0: When you commit without username it now says “Abort: no username supplied (use "hg config --edit" to set your username)”. The editor shows a template with a commented-out field for the username. Just put your name and email after the pre-filled username = and save the file. The Git breakage still exists.

Update (2013-04-18): In #mercurial @ irc.freenode.net 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.

dvcs-basic-svn.png

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

dvcs-basic-svn-testing.png

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

Update (2017-05): babcore is at 0.2, but I cannot currently update the marmalade package. See lisplets/babcore.el

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 just like prelude, but with the stuff I consider essential. And staying close to pristine Emacs, so you can still work at a coworkers desk.

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

New version: draketo.de/software/wisp

» 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)                
       . 1                      1                      
       * n : factorial {n - 1}  (* n (factorial {n - 1}))))

Wisp basics

»ArneBab's alternate sexp syntax is best I've seen; pythonesque, hides parens but keeps power« — Christopher Webber in twitter, in identi.ca and in his blog: Wisp: Lisp, minus the parentheses
♡ wow ♡
»Wisp allows people to see code how Lispers perceive it. Its structure becomes apparent.« — Ricardo Wurmus in IRC, paraphrasing the wisp statement from his talk at FOSDEM 2019 about Guix for reproducible science in HPC.
☺ Yay! ☺
with (open-file "with.w" "r") as port
     format #t "~a\n" : read port
Familiar with-statement in 25 lines.

 ↓ skip updates ↓

Update (2020-09-15): Wisp 1.0.3 provides a wisp binary to start a wisp repl or run wisp files, builds with Guile 3, and moved to sourcehut for libre hosting: hg.sr.ht/~arnebab/wisp.
After installation, just run wisp to enter a wisp-shell (REPL).
This release also ships wisp-mode 0.2.6 (fewer autoloads), ob-wisp 0.1 (initial support for org-babel), and additional examples. New auxiliary projects include wispserve for experiments with streaming and download-mesh via Guile and wisp in conf:
conf new -l wisp PROJNAME creates an autotools project with wisp while conf new -l wisp-enter PROJAME creates a project with natural script writing and guile doctests set up. Both also install a script to run your project with minimal start time: I see 25ms to 130ms for hello world (36ms on average). The name of the script is the name of your project.
For more info about Wisp 1.0.3, see the NEWS file.
To test wisp v1.0.3, install Guile 2.0.11 or later and bootstrap wisp:

wget https://www.draketo.de/files/wisp-1.0.3.tar_.gz;
tar xf wisp-1.0.3.tar_.gz ; cd wisp-1.0.3/;
./configure; make check;
examples/newbase60.w 123

If it prints 23 (123 in NewBase60), your wisp is fully operational.
If you have additional questions, see the Frequently asked Questions (FAQ) and chat in #guile at freenode.
That’s it - have fun with wisp syntax!

Update (2019-07-16): wisp-mode 0.2.5 now provides proper indentation support in Emacs: Tab increases indentation and cycles back to zero. Shift-tab decreases indentation via previously defined indentation levels. Return preserves the indentation level (hit tab twice to go to zero indentation).
Update (2019-06-16): In c programming the uncommon way, specifically c-indent, tantalum is experimenting with combining wisp and sph-sc, which compiles scheme-like s-expressions to c. The result is a program written like this:
pre-include "stdio.h"

define (main argc argv) : int int char**
  declare i int
  printf "the number of arguments is %d\n" argc
  for : (set i 0) (< i argc) (set+ i 1)
    printf "arg %d is %s\n" (+ i 1) (array-get argv i)
  return 0 ;; code-snippet under GPLv3+
To me that looks so close to C that it took me a moment to realize that it isn’t just using a parser which allows omitting some special syntax of C, but actually an implementation of a C-generator in Scheme (similar in spirit to cython, which generates C from Python), which results in code that looks like a more regular version of C without superfluous parens. Wisp really completes the round-trip from C over Scheme to something that looks like C but has all the regularity of Scheme, because all things considered, the code example is regular wisp-code. And it is awesome to see tantalum take up the tool I created and use it to experiment with ways to program that I never even imagined! ♡
TLDR: tantalum uses wisp for code that looks like C and compiles to C but has the regularity of Scheme!
Update (2019-06-02): The repository at https://www.draketo.de/proj/wisp/ is stale at the moment, because the staticsite extension I use to update it was broken by API changes and I currently don’t have the time to fix it. Therefore until I get it fixed, the canonical repository for wisp is https://bitbucket.org/ArneBab/wisp/. I’m sorry for that. I would prefer to self-host it again, but the time to read up what i have to adjust blocks that right now (typically the actual fix only needs a few lines). A pull-request which fixes the staticsite extension for modern Mercurial would be much appreciated!
Update (2019-02-08): wisp v1.0 released as announced at FOSDEM. Wisp the language is complete:
display "Hello World!"
↦ (display "Hello World!")

And it achieves its goal:
“Wisp allows people to see code how Lispers perceive it. Its structure becomes apparent.” — Ricardo Wurmus at FOSDEM
Tooling, documentation, and porting of wisp are still work in progress, but before I go on, I want thank the people from the readable lisp project. Without our initial shared path, and without their encouragement, wisp would not be here today. Thank you! You’re awesome!
With this release it is time to put wisp to use. To start your own project, see the tutorial Starting a wisp project and the wisp tutorial. For more info, see the NEWS file. To test wisp v1.0, install Guile 2.0.11 or later and bootstrap wisp:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-1.0.tar.gz;
tar xf wisp-1.0.tar.gz ; cd wisp-1.0/;
./configure; make check;
examples/newbase60.w 123
If it prints 23 (123 in NewBase60), your wisp is fully operational.
If you have additional questions, see the Frequently asked Questions (FAQ) and chat in #guile at freenode.
That’s it - have fun with wisp syntax!
Update (2019-01-27): wisp v0.9.9.1 released which includes the emacs support files missed in v0.9.9, but excludes unnecessary files which increased the release size from 500k to 9 MiB (it's now back at about 500k). To start your own wisp-project, see the tutorial Starting a wisp project and the wisp tutorial. For more info, see the NEWS file. To test wisp v0.9.9.1, install Guile 2.0.11 or later and bootstrap wisp:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.9.9.1.tar.gz;
tar xf wisp-0.9.9.1.tar.gz ; cd wisp-0.9.9.1/;
./configure; make check;
examples/newbase60.w 123
If it prints 23 (123 in NewBase60), your wisp is fully operational.
That’s it - have fun with wisp syntax!
Update (2019-01-22): wisp v0.9.9 released with support for literal arrays in Guile (needed for doctests), example start times below 100ms, ob-wisp.el for emacs org-mode babel and work on examples: network, securepassword, and downloadmesh. To start your own wisp-project, see the tutorial Starting a wisp project and the wisp tutorial. For more info, see the NEWS file. To test wisp v0.9.9, install Guile 2.0.11 or later and bootstrap wisp:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.9.9.tar.gz;
tar xf wisp-0.9.9.tar.gz ; cd wisp-0.9.9/;
./configure; make check;
examples/newbase60.w 123
If it prints 23 (123 in NewBase60), your wisp is fully operational.
That’s it - have fun with wisp syntax!
Update (2018-06-26): There is now a wisp tutorial for beginning programmers: “In this tutorial you will learn to write programs with wisp. It requires no prior knowledge of programming.”Learn to program with Wisp, published in With Guise and Guile
Update (2017-11-10): wisp v0.9.8 released with installation fixes (thanks to benq!). To start your own wisp-project, see the tutorial Starting a wisp project. For more info, see the NEWS file. To test wisp v0.9.8, install Guile 2.0.11 or later and bootstrap wisp:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.9.8.tar.gz;
tar xf wisp-0.9.8.tar.gz ; cd wisp-0.9.8/;
./configure; make check;
examples/newbase60.w 123
If it prints 23 (123 in NewBase60), your wisp is fully operational.
That’s it - have fun with wisp syntax!
Update (2017-10-17): wisp v0.9.7 released with bugfixes. To start your own wisp-project, see the tutorial Starting a wisp project. For more info, see the NEWS file. To test wisp v0.9.7, install Guile 2.0.11 or later and bootstrap wisp:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.9.7.tar.gz;
tar xf wisp-0.9.7.tar.gz ; cd wisp-0.9.7/;
./configure; make check;
examples/newbase60.w 123
If it prints 23 (123 in NewBase60), your wisp is fully operational.
That’s it - have fun with wisp syntax!
Update (2017-10-08): wisp v0.9.6 released with compatibility for tests on OSX and old autotools, installation to guile/site/(guile version)/language/wisp for cleaner installation, debugging and warning when using not yet defined lower indentation levels, and with wisp-scheme.scm moved to language/wisp.scm. This allows creating a wisp project by simply copying language/. A short tutorial for creating a wisp project is available at Starting a wisp project as part of With Guise and Guile. For more info, see the NEWS file. To test wisp v0.9.6, install Guile 2.0.11 or later and bootstrap wisp:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.9.6.tar.gz;
tar xf wisp-0.9.6.tar.gz ; cd wisp-0.9.6/;
./configure; make check;
examples/newbase60.w 123
If it prints 23 (123 in NewBase60), your wisp is fully operational.
That’s it - have fun with wisp syntax!
Update (2017-08-19): Thanks to tantalum, wisp is now available as package for Arch Linux: from the Arch User Repository (AUR) as guile-wisp-hg! Instructions for installing the package are provided on the AUR page in the Arch Linux wiki. Thank you, tantalum!
Update (2017-08-20): wisp v0.9.2 released with many additional examples including the proof-of-concept for a minimum ceremony dialog-based game duel.w and the datatype benchmarks in benchmark.w. For more info, see the NEWS file. To test it, install Guile 2.0.11 or later and bootstrap wisp:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.9.2.tar.gz;
tar xf wisp-0.9.2.tar.gz ; cd wisp-0.9.2/;
./configure; make check;
examples/newbase60.w 123
If it prints 23 (123 in NewBase60), your wisp is fully operational.
That’s it - have fun with wisp syntax!
Update (2017-03-18): I removed the link to Gozala’s wisp, because it was put in maintenance mode. Quite the opposite of Guile which is taking up speed and just released Guile version 2.2.0, fully compatible with wisp (though wisp helped to find and fix one compiler bug, which is something I’m really happy about ☺).
Update (2017-02-05): Allan C. Webber presented my talk Natural script writing with Guile in the Guile devroom at FOSDEM. The talk was awesome — and recorded! Enjoy Natural script writing with Guile by "pretend Arne" ☺

presentation (pdf, 16 slides) and its source (org).
Have fun with wisp syntax!
Update (2016-07-12): wisp v0.9.1 released with a fix for multiline strings and many additional examples. For more info, see the NEWS file. To test it, install Guile 2.0.11 or later and bootstrap wisp:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.9.1.tar.gz;
tar xf wisp-0.9.1.tar.gz ; cd wisp-0.9.1/;
./configure; make check;
examples/newbase60.w 123
If it prints 23 (123 in NewBase60), your wisp is fully operational.
That’s it - have fun with wisp syntax!
Update (2016-01-30): I presented Wisp in the Guile devroom at FOSDEM. The reception was unexpectedly positive — given some of the backlash the readable project got I expected an exceptionally sceptical audience, but people rather asked about ways to put Wisp to good use, for example in templates, whether it works in the REPL (yes, it does) and whether it could help people start into Scheme. The atmosphere in the Guile devroom was very constructive and friendly during all talks, and I’m happy I could meet the Hackers there in person. I’m definitely taking good memories with me. Sadly the video did not make it, but the schedule-page includes the presentation (pdf, 10 slides) and its source (org).
Have fun with wisp syntax!
Update (2016-01-04): Wisp is available in GNU Guix! Thanks to the package from Christopher Webber you can try Wisp easily on top of any distribution:
guix package -i guile guile-wisp
guile --language=wisp
This already gives you Wisp at the REPL (take care to follow all instructions for installing Guix on top of another distro, especially the locales).
Have fun with wisp syntax!
Update (2015-10-01): wisp v0.9.0 released which no longer depends on Python for bootstrapping releases (but ./configure still asks for it — a fix for another day). And thanks to Christopher Webber there is now a patch to install wisp within GNU Guix. For more info, see the NEWS file. To test it, install Guile 2.0.11 or later and bootstrap wisp:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.9.0.tar.gz;
tar xf wisp-0.9.0.tar.gz ; cd wisp-0.9.0/;
./configure; make check;
examples/newbase60.w 123
If it prints 23 (123 in NewBase60), your wisp is fully operational.
That’s it - have fun with wisp syntax!
Update (2015-09-12): wisp v0.8.6 released with fixed macros in interpreted code, chunking by top-level forms, : . parsed as nothing, ending chunks with a trailing period, updated example evolve and added examples newbase60, cli, cholesky decomposition, closure and hoist in loop. 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:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.8.6.tar.gz;
tar xf wisp-0.8.6.tar.gz ; cd wisp-0.8.6/;
./configure; make check;
examples/newbase60.w 123
If it prints 23 (123 in NewBase60), your wisp is fully operational.
That’s it - have fun with wisp syntax! And a happy time together for the ones who merge their paths today ☺
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:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.8.3.tar.gz;
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:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.8.2.tar.gz;
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:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.8.1.tar.gz;
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:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.8.0.tar.gz;
tar xf wisp-0.8.0.tar.gz ; cd wisp-0.8.0/;
./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!
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:
wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.6.6.tar.gz;
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 ./bootstrap.sh, 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.py 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 : http://identi.ca/url/75523035 (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

Datei: bla.py

def foo():
    print "bla"

Interaktiver Test:

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

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


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

Going from a simple Makefile to Autotools

Table of Contents

Links

Intro

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.

Warning 2016: Contains some cargo-cult-programming — my current setup is cleaner thanks to using AC_CONFIG_LINKS in configure.ac.

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)
                                               (intern
                                                (format "%s-%s" prefix n)) n))
                               sexps)))
    `(progn ,@fixed-sexps)))
(provide 'namespace)
(require 'namespace)
(namespace foo
           (defun bar ()
             "bar")
           (defun foo (s)
               "foo"))
(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):
    print(n)
    return foo(n+1)
foo(1)

behave like this

def foo(n):
    print(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 das Verständnis des Inhaltes notwendigen Teile 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 470 Zeichen pro Minute. Beim entspannten Schreiben in Steno auf 250 bis 4004. 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.

The dynamics of free culture and the danger of noncommercial clauses

NC covered works trick people into investing in a dead end

Free licensing lowers the barrier of entry to creating cultural works, which unlocks a dynamic where people can realize their ideas much easier - and where culture can actually live, creating memes, adjusting them to new situations and using new approaches with old topics.

But for that to really take off, people have to be able to make a living from their creations - which build on other works.

Motivation and Reward

Debunking the myth that you can increase the performance of creative workers with carrot and stick.

Executive Summary

For creative tasks, the quality of performance strongly correllates with intrinsic motivation: Being interested in the task itself.

This article will only talk about that.

The main factors which are commonly associated with intrinsic motivation are:

  • Positive verbal feedback which increases intrinsic motivation.
  • Payment independent of performance which actually has no effect.
  • Payment dependent on performance which reduces the motivation on the long term.
  • Negative verbal feedback which directly reduces intrinsic motivation.
  • Threatening someone with punishment which strongly reduces intrinsic motivation.

To make it short: Anything which diverts the focus from the task at hand towards some external matter (either positive or negative) reduces the intrinsic motivation and that in turn reduces work performance.

If you want to help people perform well, make sure that they don’t have to worry about other stuff besides their work and give them positive verbal feedback about the work they do.

Inhalt abgleichen
Willkommen im Weltenwald!
((λ()'Dr.ArneBab))



Beliebte Inhalte

Benutzeranmeldung

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions. This is pretty hard (also for me), but any easier and I drown in spam.
Image CAPTCHA
Enter the characters shown in the image.

Draketo neu: Beiträge

Ein Würfel System

sn.1w6.org news