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ß.
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
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.
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. ↩
Timezones of most active TCCON stations in UTC+x (without daylight saving time (DST). Because I needed it and could not find a simple list quickly.
anmyondo: +9,
ascension: 0,
bialystok: +1,
bremen: +1,
caltech: -8,
darwin: 9, # Timezones2008 says 9 1/2???
→ 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 habe endlich draketo.de von Drupal 5 auf Drupal 6 aktualisiert. Das Theme habe ich noch nicht portiert, daher benutzt draketo.de jetzt erstmal das Standard-Layout von Drupal.
„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:
Plotting global equal area maps with python, matplotlib/pylab and Basemap.
→ 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.
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).
Es ist ein tolles Gefühl, geflattrd zu werden - Danke für eure Unterstützung!
Ich habe inzwischen von mehreren Leuten gehört, diese Professoren von der AfD wären ja gebildet und hätten ein gutes Programm.
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.
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.
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:
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:
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 Marktradikale und Nationalchauvinisten eine „Alternative für Deutschland“ sein?
— mit Unterstützerliste (und Hintergrund zu den Unterstützern).
Update (2017-05): babcore is at 0.2, but I cannot currently update the marmalade package.
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.
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}))))
hg clone https://hg.sr.ht/~arnebab/wisp
guix install guile guile-wisp
./configure; make install
from the releases.»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 portFamiliar with-statement in 25 lines.
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 runwisp
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 whileconf 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 123If 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:
If it prints 23 (123 in NewBase60), your wisp is fully operational.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 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:
If it prints 23 (123 in NewBase60), your wisp is fully operational.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
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:
If it prints 23 (123 in NewBase60), your wisp is fully operational.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
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:
If it prints 23 (123 in NewBase60), your wisp is fully operational.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
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:
If it prints 23 (123 in NewBase60), your wisp is fully operational.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
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 toguile/site/(guile version)/language/wisp
for cleaner installation, debugging and warning when using not yet defined lower indentation levels, and withwisp-scheme.scm
moved tolanguage/wisp.scm
. This allows creating a wisp project by simply copyinglanguage/
. 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:
If it prints 23 (123 in NewBase60), your wisp is fully operational.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
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:
If it prints 23 (123 in NewBase60), your wisp is fully operational.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
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:
If it prints 23 (123 in NewBase60), your wisp is fully operational.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
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).Wisp is ”The power and simplicity of #lisp with the familiar syntax of #python” talk by @ArneBab #fosdem pic.twitter.com/TaGhIGruIU
— Jan Nieuwenhuizen (@JANieuwenhuizen) January 30, 2016
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:
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).guix package -i guile guile-wisp
guile --language=wisp
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:
If it prints 23 (123 in NewBase60), your wisp is fully operational.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
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:
If it prints 23 (123 in NewBase60), your wisp is fully operational.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
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:
If it prints 120120 (two times 120, the factorial of 5), your wisp is fully operational.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
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:
If it prints 120120 (two times 120, the factorial of 5), your wisp is fully operational.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
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:
If it prints 120120 (two times 120, the factorial of 5), your wisp is fully operational.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
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:
If it prints 120120 (two times 120, the factorial of 5), your wisp is fully operational.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
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:
That’s it - have fun with wisp syntax at the REPL!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
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:then hit enter thrice.display "Hello World!\n"
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).
→ 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.
→ 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?
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. ↩
Autotools: practitioner's guide
Useful examples — and prefixes.
Autotools Mythbuster
With years of Gentoo experience: How not to enrage your distributions.
Autoconf Manual
The official manual. Detailed, huge and hard to digest.
Automake Manual
As above. Keep it handy as reference.
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
.
» 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.
Der Code stammt größtenteils aus einer Diskussion auf Stackoverflow. ↩
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!
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)
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 ☺
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:
3
„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.
Steno steht für Stenografie (Kurzschrift) und ist nicht zu verwechseln mit Stego: Steganografie (der Kunst, Informationen in anderen Informationen zu verstecken). ↩
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. ↩
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… ☺ ↩
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 ☺ ↩
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.
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.
Debunking the myth that you can increase the performance of creative workers with carrot and stick.
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:
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.
→ Offener Brief an die Redaktion von Monitor (Kontakt).
Sehr geehrtes Monitor-Team,
In der Urheberrechts-Sendung vom 26.04.2012 stellten Sie einige seltsame Aussagen auf:
„Wenn das geschieht wird das gesamte Musikalische Programm aus Tauschbörsen frei erhältlich sein“
Das ist doch schon seit Jahren so…
„und das wird dazu führen, dass nur noch sehr wenige Konsumenten aus legalen Quellen diese Musik erwerben“
Realitäts-Check: Die Musikverlage verdienen mehr Geld denn je.
→ Kommentar zum Artikel Open Source ist tot von Stefan Wienströer, in dem er sich über anmaßende Benutzer beklagt, die von ihm gratis Telefonsupport fordern….
Hi Stefan,
Lass dich bitte von so ein paar Idioten nicht unterkriegen. Wenn ich ein Programm geschrieben hätte, das so viele Leute toll finden, dass sogar Leute dabei sind, die Telefonsupport wollen, würde ich einfach antworten: „Du willst Telefonsupport? Kein Ding: 20€ die Stunde, dann machen wir das.
Der Spiegel hat heute die ultimative Theorie aufgestellt, wie man Amokläufer erkennt.[^link] Was alle Amokläufer vereint:
Sie sind UNAUFFÄLLIG
Die Grünen in BW wollen über 10 000 Lehrerstellen streichen. Nadine Michel aus der Taz nennt das richtigerweise einen Verrat am Bürger und an ihren Wahlversprechen. Aber es gibt eine ganz essenzielle Frage, die sie nicht stellt:
An welchen Stellen wagen sie es nicht, zu sparen?
Oder mehr Geld reinzuholen?
Das sind die Fragen, die jetzt wirklich wichtig wären!
Denn wer an Bildung spart, will damit in erster Linie vermeiden, woanders zu sparen - oder wo anders Geld zu holen.
Die SPD hatte mal ein Kernthema: Soziale Gerechtigkeit. Oft als Kampf von unten gegen oben. Dann haben sie es mit Hartz 4 verraten.
Update 2016: Later Bundles seem to have gotten better again.
Comment to New Humble Bundle Is Windows Only, DRM Games.
The new Humble Indie Bundle is no longer free, indie, cross-plattform or user-respecting.
When the first bundle had a huge boost in last-minute sales after the devs offered to free the source of 4 of the 5 games, I had hoped, they would keep that.