Planet Flauscheria

September 09, 2017

mxey

Testing the effect of Puppet stringify_facts with octocatalog-diff

When migrating from Puppet 3 to Puppet 4, the first big step is preparing your Puppet manifests for the differences in facts.

Previously in Puppet, the values of facts used to be all strings. In Puppet 4, facts can have various proper data types like booleans, arrays and hashes. In Puppet 3, you can get the same behavior by setting the option stringify_facts = false on the agents.

Since the facts will be different, your Puppet code might behave differently. Especially in the case of booleans, you might previously have compared against "true", where now it’s true (use any2bool to support both).

octocatolog-diff-logo

To test the effects of the change before potentially breaking configuration, I turned to octocatalog-diff. It’s a tool by GitHub that shows the differences between two Puppet catalogues (the compiled output of your Puppet manifests, representing the configuration that will be applied).

For the following script to work, octocatalog-diff should already be configured with PuppetDB access. For each given host, the script will:

  1. fetch the facts from the host by running Facter over SSH. The JSON output of Facter is unaffected by stringification.
  2. compile two catalogs (from the manifests in the current directory), one with facts from PuppetDB and the other with the fetched facts, and compare them
#!/bin/bash

set -e -u -o pipefail

mkdir -p facts

for hostname in "$@"; do
	echo "${hostname}"
	fact_file="facts/${hostname}.json"
	(
		ssh "${hostname}" sudo facter --json --puppet > "${fact_file}"
		octocatalog-diff --hostname "${hostname}" --to-fact-file "${fact_file}" --from .
	) || true
done

Now when we execute it, we can see whether our catalogs are ready:

./diff_stringify_facts.sh host1.example.com host2.example.com
host1.example.com
I, [2017-09-08T15:34:29.591598 #84032]  INFO -- : Catalogs compiled for host1.example.com
I, [2017-09-08T15:34:29.699115 #84032]  INFO -- : Diffs computed for host1.example.com
I, [2017-09-08T15:34:29.699145 #84032]  INFO -- : No differences
host2.example.com
I, [2017-09-08T15:34:29.591598 #84032]  INFO -- : Catalogs compiled for host2.example.com
I, [2017-09-08T15:34:29.699115 #84032]  INFO -- : Diffs computed for host2.example.com
I, [2017-09-08T15:34:29.699145 #84032]  INFO -- : No differences

Looks like we are doing fine 🙂


by mxey at September 09, 2017 04:36 PM

January 11, 2017

Mandelbroetchen

Snowfallen 1.1

Im Dezember veröffentlichte ich mein neues Videospiel Snowfallen.

Ladet es euch kostenlos herunter!

Es war das Ergebnis einer persönlichen 7-Tage-Herausforderung, in der ich ein Spiel von Grund auf in 7 Tagen programmierte. Dies ist eine Disziplin, die in der Videospielentwicklung nicht unüblich ist und das Auge für das Wesentliche schulen soll. Da die Zeit sehr begrenzt war, war das Ergebnis natürlich recht simpel und nicht zu komplex. Trotzdem ist Snowfallen voll funktionsfähig. Ich plante zu Beginn nicht, noch mehr Zeit in das Spiel zu stecken, da ich aber so viel Vergnügen beim Entwickeln hatte, habe ich entschieden, dass Snowfallen noch ein Update verdient. So arbeite ich im Augenblick an einem Update auf Version 1.1.

Snowfallen v1.1

Mein größtes Problem mit der 7-Tage-Version war der Mangel an Entscheidungsfindung. Durch die hohen Zeitbegrenzungen musste ich ein paar Dinge sehr schnell implementieren und damit vereinfachen. So gibt es beispielsweise nur eine Waffe, eine Rüstungsklasse und die Spieler*in levelt durch das Einsammeln von Gefallenen Sternen. All diese Dinge verlangen keine großen Überlegungen. Es gibt keinen Grund, nicht das Schwert +7 statt dem Schwert +3 auszurüsten. Ebenso gibt es keinen Grund, nicht einen Gefallenen Stern der Stärke aufzusammeln. Man kann sagen: wenn man sich einmal an das Spielprinzip gewöhnt hat, trifft man mit jedem Spiel die gleichen Entscheidungen. Das ist in meinen Augen kein gutes Spieldesign.

So liegt der Fokus der Version 1.1 auf Entscheidungsdiversität. Die neuen Spielmöglichkeiten beinhalten:

  • Mehr Waffenarten mit unterschiedlichen Vor- und Nachteilen
  • Mehr Rüstungsklassen mit unterschiedlichen Vor- und Nachteilen
  • Unterschiedliche Heilgegenstände
  • Ein neues Spielelement: Gedichte! Lest den Gegnern ein Gedicht vor und verwirrt sie
  • Dynamischeres Spiel: Aktionen kosten jetzt nicht immer genau eine Runde. Waffen oder Panzerung können die Bewegungs- und Angriffsgeschwindigkeit verändern.

Ich habe ebenso die meisten User Interface Elemente überarbeitet. Man kann nun ein voll funktionsfähiges Inventar mit Tooltips nutzen.

Snowfallen v1.1 Inventory Screen

Ich plane, die neue Version innerhalb der nächsten Wochen zu veröffentlichen. Sie wird natürlich, wie die Ursprungsversion, kostenlos erhältlich sein.


by mandelbroetchen at January 11, 2017 06:29 PM

January 10, 2017

Mandelbroetchen

Neustrukturierung des Blogs

Das Jahr 2017 hat begonnen und in den letzten zwei Jahren gab es mehrere einschneidende Entwicklungen sowohl in meinem Berufsleben als auch in meinem Privatleben. Neben meiner Entscheidung, mich als Videospielentwickler selbständig zu machen, habe ich auch mehrere private Outings als Transgender und Asexueller hinter mir.

Für mich war dies ein guter Zeitpunkt, um einmal über meine Onlineaktivitäten nachzudenken. Ich bin ein sehr präsenter Mensch im Internet und habe in den letzten Jahren zahlreiche Blogs, Social Media Accounts und sonstige Aktivitäten gestartet. Wie es im Leben so ist, waren manche davon sehr erfolgreich, andere weniger und manche verschwanden nach ein paar Monaten wieder. Zeit für eine Neuordnung.

Ich werde zukünftig all meine privaten und politischen Aktivitäten auf einem Blog bündeln, um mir die Übersicht zu erleichtern und gleichzeitig meine Leser*innen nicht mit mehreren halbverwaisten Blogs zu nerven. Dies impliziert insbesondere folgende Änderungen.

  • Dieser Blog ist ab sofort auf http://www.mandelbrötchen.de erreichbar. Man achte auf den Umlaut.
  • Er ersetzt meinen Gamingblog auf mandelbroetchen.net. Dieser ist nicht mehr länger dort erreichbar.
  • Die Inhalte meines Asexualitätsblogs asexy.de werde ich in naher Zukunft hier inkludieren.
  • Gleiches gilt für alle Artikel im Bereich Transgender und Politik von verschiedensten Stellen.
  • Ich verknüpfe hier meine sonstigen Aktivitäten, z.B. meinen sehr aktiven Twitteraccount, meine Streaming-Aktivitäten und meine Videospielentwicklungsarbeit.

Die Arbeiten werden mich sicher noch eine Weile beschäftigen. Bis dahin wünsche ich euch noch ein Frohes Neues Jahr. Hoffentlich sehen wir uns bald wieder.


by mandelbroetchen at January 10, 2017 11:13 AM

June 02, 2016

Mandelbroetchen

Negative Zinsen und der „gesunde Menschenverstand“

In Zeiten von negativen Zinssätzen stoßen viele Menschen an ihre Verständnisgrenzen. So finden sich in den Medien zahlreiche Artikel wie dieser der ARD, die negativen Zinssätzen die Rationalität entziehen und sie ableistisch in den Bereich von Krankheiten oder psychischen Störungen verschieben.

Was tun mit meinem Geld?
Mal angenommen, wir wären in der wohlhabenden Position, über eine Million Euro entscheiden zu können. Wir sehen uns auf dem Finanzmarkt um und stellen fest, dass wir für unser Vermögen nur negative Zinssätze erwirtschaften können: wir müssen also jemandem Geld geben, damit er unser Geld annimmt.

Zunächst liegt hier der Gedanke nah, dass wir das Geld dann lieber Zuhause in der Bettmatratze horten. Dort gibt es keine negativen Zinsen und damit ist unsere Geldanlage (oder in diesem Fall besser -unterlage) sicher. Doch halt! Ist sie dort wirklich sicher?

Gefahren lauern überall
Es bedarf nicht viel Vorstellungskraft um sich zu überlegen, dass die Anlage von Geld in der Bettmatratze einigen Unwägbarkeiten ausgeliefert ist. Wir erinnern uns an den Fall der Tochter, die die Matratze ihrer Mutter samt Erspartem ungefragt entsorgte, um der Mutter als Überraschung eine neue Matratze zu schenken. Ebenso kann es jederzeit zu einem Hausbrand oder einem Wasserschaden in der Wohnung kommen. Sollte sich der eigene Reichtum nicht völlig verstecken lassen, muss man zusätzlich immer mit gewaltsamen Entwendungsversuchen seitens neidischer Menschen rechnen. So hatte sich beispielsweise ein Quizshow-Gewinner in den 80ern einen Großteil seines 100.000 Dollar Gewinns in 1-Dollar-Scheinen auszahlen lassen, um nach einem auswärtigen Weihnachtsessen festzustellen, dass in der Zwischenzeit jemand sein Wohnzimmer geplündert hatte. Nun kann man argumentieren, das sei dann halt Pech, aber was hat das alles mit negativen Zinsen zu tun?

Wenn wir uns einmal von unserer subjektiven Vorstellung des Einzelfalls lösen und den Gedankengang abstrahieren, so besteht eine gewisse Wahrscheinlichkeit, dass unser verstecktes Geld im Falle eines Falles plötzlich verschwunden ist. Schwerer wiegt noch die Tatsache, dass hierbei nicht nur ein Teil des Geldes fort ist, sondern meist dann auch das gesamte eingesetzte Vermögen. Es entsteht ein Totalverlust. Wir können nun abschätzen, dass dieser Totalverlust mit einer Wahrscheinlichkeit von (aus der Luft geholten) 1% pro Jahr eintritt. Statistisch gesehen hat dann ein Mensch, der zum Matratzentresor greift, bei einer Million Euro Einsatz noch 990.000 Euro übrig. Er hat also, statistisch gesehen, 10.000 Euro verloren. Wir erhalten damit unter den obigen Annahmen eine negative Anlagerendite von 1,0%. Die Matratze erwirtschaftet also negative Zinsen.

Versteckte negative Zinsen gibt es schon lang
Um unser Geld zu schützen, könnten wir nun einige Vorkehrungen treffen. Wir könnten es in einen Tresor stecken oder von einer Person bewachen lassen. Hiermit lässt sich der Verlust zwar nicht ausschließen, aber das Risiko verkleinern. Leider müssen wir beide Dinge bezahlen, so dass wir bereits in der Investition einen Rückgang unseres Vermögens verzeichnen und damit in eine negative Rendite rutschen.

Wir bringen unser Geld also zu einer Bank. Hier haben wir nicht nur einen Vertrag mit der Bank, dass sie uns bei Verlust des Geldes ihrerseits trotzdem unsere Ersparnisse auszahlen muss, sondern wir können dank diverser privater und staatlicher Einlagensicherungssysteme bei Insolvenz des Geldinstitutes in Deutschland unser Risiko des Totalverlustes minimieren. Die Bank gibt uns hierbei als Ausgleich Zinsen. Wir erhalten also in der Regel Geld, um Geld zu verleihen und geben gleichzeitig unser Risiko der Geldaufbewahrung weiter. Für die Bank ist es meist ein Gewinngeschäft, weil sie ihrerseits das Geld in einem weit höheren Umfang auf längere Zeit verleihen kann und damit noch mehr Zinsen verdient.

Die Zinssätze sind seit der Finanzkrise rapide gesunken. Auf einem normalen Girokonto findet man heute höchstens noch Zinssätze um 0,1% oder auch gar keine Zinsen mehr. Auf der anderen Seite verlangt die Bank für die Bearbeitung des Kontos regelmäßige Gebühren. Sind die absoluten Gebühren höher als der relative Zinssatz zum Vermögen, so stellt sich im Laufe der Zeit ebenso eine negative Rendite ein. Faktisch gibt es deswegen bereits seit längerem „negative Zinsen“, sie sind nur in Gebühren und Jahresentgelten versteckt, weil Geldinstitute wissen, dass dies den meisten Menschen weniger auffällt.

Sind negative Zinssätze also irrational?
Nein, ganz im Gegenteil. Zinssätze sind immer relative Größen im Rahmen einer Zinslandschaft. Wenn Geldinstitute für angelegtes Geld keine Zinsen mehr erhalten, so werden sie negative Zinsen an ihre Anleger*innen weitergeben, denn Geldinstitute leben zu einem großen Teil von der Differenz der Zinssätze. Die Anleger*innen selbst haben ebenso wenig Hoffnung, ihr Geld unter besseren Konditionen loszuwerden. Der Matratzentresor birgt ebenso Risiken wie die Anlage in fragwürdige Firmen. Im Allgemeinen gilt: wer seine Zinsen (oder seine Rendite) erhöhen will, der nimmt ein höheres Risiko in Kauf.

Hier zeigen sich die Grenzen der menschlichen Intuition, die gern unter „der gesunde Menschenverstand“ zusammengefasst wird. Die meisten Menschen sind in den letzten 50 Jahren in einem Zinsumfeld aufgewachsen, das sich in Deutschland nie mit Negativzinsen beschäftigen musste. Für viele gelten deswegen Negativzinsen intuitiv als unnatürlich und als schlecht. Ein Denkprozess, der auch in anderen Gebieten angewandt wird und spätestens dann gefährlich wird, wenn er andere Personengruppen betrifft. Dabei sind negative Zinssätze in anderen Ländern durchaus nicht unüblich.

Ist nicht eher das Versprechen auf stetig hohe Zinssätze gefährlich?
Problematisch ist der niedrige Zinssatz in erster Linie für alle Versprechen und Verträge, deren Leistung auf feste Zinssätze aufbauen. Hierunter fallen unter anderem Lebensversicherungen, Rentensysteme, Anlageprodukte und langjährige Kredite. Dieses Problem verlagert sich aber nur, wenn die Zinssätze irgendwann wieder erheblich steigen. Grundsätzlich sind Zinsschwankungen gefährlicher als ein bestimmtes Zinsniveau, denn den Menschen wird durch Verträge mit festen Zinssätzen ein trügerischeres Sicherheitsgefühl vermittelt, was schnell von der Realität überholt werden kann.

Wenn Größen in Politik und Wirtschaft von negativem Zinssätzen als „Grab des ehrlichen Sparers“ reden, dann sind sie nicht ganz ehrlich. Das Grab des Sparers sind nicht die Zinsschwankungen, sondern das Sicherheitsversprechen von Politik und Wirtschaft, man könne sich auf ein bestimmtes Zinsniveau verlassen und damit sein Leben bis in die Rente verplanen. Auch dieser Ansatz ist ein Risikogeschäft und ist in den letzten Jahrzehnten immer aufgegangen. Die neue Zinslandschaft stellt allerdings das Anlageprodukt Kapitalrente ebenso in Frage wie die Demographie das Anlageprodukt Rentengenerationsvertrag in Frage stellt.

Diese Ausführungen sollen die Finanzbranche nicht von ihrer Verantwortung für die Finanzkrise freisprechen. Allerdings ist es ebenso gefährlich den Menschen zu erzählen, ihre Geldanlagen und Renten seien sicher, weil man sich auf das Eintreten eines bestimmten Zinsszenarios verlässt. Ehrlicher wäre es sich einzugestehen, dass der Wunsch nach ewig hohen Zinsensätzen in der Realität irgendwann begraben werden muss. Die Finanzkrise war ein möglicher Auslöser, doch andere Auslöser wartet irgendwann hinter der nächsten Ecke.


by mandelbroetchen at June 02, 2016 11:28 AM

April 26, 2016

xinitrc

Barcamp Oldenburg

Over the last weekend I was at the Barcamp Oldenburg. Since one of the first things I learned at this Barcamp was that not even among technically inclined people everyone knows what a Barcamp is let me give a ultra-rapid introduction.

A Barcamp is a so called unconference, everybody who attends is not audience but integral part of the conference. Usually a Barcamp starts by everybody given a very short introduction of themselves. In the case of the Oldenburg Barcamp you had 7 seconds. So just enough to say: “Hi my name is Martin, I work at junge haie and the three topics I’m interested in are Offline First, Angular 2 and Getting Things Done”. Which was basically my introduction. After that everybody who wants to hold a session goes to the front and has about time for an elevator pitch to his session. So 30 seconds explaining what you would like to use a 45 minute slot. You can do anything you like with that time, give a talk, foster a discussion or give a workshop. Than by show of hands the audience votes on who wants to see your session. If there is enough interest you get to put yourself on the schedule somewhere. After that the day starts with sessions. On the following day(s) this game continues.

Special Features

The Barcamp in Oldenburg, has two special features, the first being that since it is held in a hostel you can stay overnight. The organisers booked some rooms in advance and let you pay together with your ticket.

The second feature is that on the evening before the first day there is a BBQ for the overnight guests and those who want to come a day earlier.

The BBQ fostered some fun discussions between the participants in advance, among other things I had some long discussions about Webdesign/-development, IoT / SmartHomes / Smartgrids, and the Volkswagen scandal.

Last but not least it lead to me meeting someone else who is using GTD to organise his live and agreeing to hold a shared session on it the next day.

Sessions

During the session planning I was quite happy with the diverse offering we had sessions more in a project and self management direction some for technical topics and e.g. one on bookbinding. It was also nice to see that every session proposed also got enough participants to be held.

GTD

The first session I attended was the session on GTD I cohosted. As usually with GTD, a lively discussion went on during us explaining what GTD is and how we modify and employ it in practice.

Personal knowledge management

Directly after GTD, I attended the session on personal knowledge management, which was actually a perfect fit for our GTD session. It outlined not tools, but more the way a personal knowledge management system should be structured, which all participants mostly agreed on. After that we went into some discussion on how this could be helped by tools. We found some solutions on knowledge gathering, filtering, storing and the retrieval, but came to the conclusion that there is at the moment no good tool for connecting the different items of knowledge.

Offline First

Third session on day one, was again one by me on offline first especially on offline first web apps. You can find more about it here.

IoT

After the lunch break on day on there was a session on IoT (Internet of Things) but it wasn’t a talk but a very lively discussion on advantages, disadvantages and what role artificial intelligence will play in it. I was very found of two points during the discussion. First it was very broad, since there where two computer scientists with a research background in autonomous traffic, a sociologist and a jurist among the participants. And second that the discussion wasn’t overtaken by those four people. With such a topic obviously we didn’t come to a final result so the discussion continued on during the remaining day.

Good Code / Bad Code

The second to last session on that day was on good and bad code. Which was a session not criticising some given code, but on holding yourself accountable for what you and your team produces. Obviously that is not the sole responsibility of the developer, but during the discussion one thing made it very clear where the difference is to other crafts. For example: No doctor would operate on you without washing properly, only so you could save cents on a hospital bill. But in software development this is basically what happens all the time, developers cutting corners to make a deadline or a budget. It was a good session, which was in times a bit painful since you got your own transgressions held in front of you.

Symfony 2

The last real session of the first day for me was the one of my colleague explaining Symfony 2. Which wasn’t really news to me, but I only started working on productive projects with it 2 weeks ago. That session went really well. I learned some things I didn’t know before and some of the people in the room started installing and playing around with it before the session had even ended.

Code Secrets / Project Secrets

The evening show of the Barcamp came in form of a session on code and project secrets. During the whole day there were two boxes where you could put in the worst thing you ever did during the production of code or in project management. In the evening these boxes where emptied anonymously and the audience decided if your transgressions should be meet with forgiveness or damnation.

There actually where some juicy bits in there but obviously I won’t say anything.

How to fuck up a project

On the second day the first session I attended was how to fuck up a project, where the best ways to do that where presented. It was quite fun and very interactive, since everybody in the audience was able to give some more ideas on how to really sabotage a project.

BEM

The last session for me was the one by our apprentice about BEM (Block Element Modifier). A system to better organise your CSS. I actually had not heard about this before. But to me it sounded like a very good idea to use it. So good actually that I moved to implementing it first thing Monday morning on my current work project.

Résumé

For me this Barcamp was fun and I liked the broad offering of sessions even though my selection went a bit more into the technical sessions.

What was also nice was that many discussions continued well beyond the end of the sessions and everyone seemed quite engaged.

For my own sessions, I was quite happy to see that it helped some people. And I hope that I will see more Offline First (web) applications in the future. I’m counting on you.

In the end what remains to say is that I’m looking forward to Barcamp Oldenburg 2017 and I hope I’ll see you there.

April 26, 2016 12:00 AM

January 16, 2016

Farthen

Ich mag keine Geschenke

Jetzt wo für viele die große Geschenkezeit vorbei ist, möchte ich mal was zu Geschenken schreiben. Das ist nämlich ein ziemlich kompliziertes Thema, finde ich.

Und zwar möchte ich erzählen, warum ich Geschenke nicht mag. Also nur ich persönlich, nicht im Allgemeinen.

Nicht, dass ich mich ärgere, wenn mir jemand etwas schenkt… meistens freu ich mich ja doch irgendwie. Zumindest ein bisschen.

Das Ding ist, ich hab seit über 2 Jahren niemandem mehr etwas zu einem diese "offiziellen Anlässe" (Geburtstag, Weihnachten usw.) geschenkt. Nicht weil ich nicht wollen würde, oder weil Geld fehlt, sondern weil ich es nicht kann.

Wenn ich mir überlege, was ich wem schenken kann, schiebt sich eine riesige Blockade vor meinen Kopf, die mich abhält, irgend einen klaren Gedanken zu fassen. Am Ende prokrastiniere ich es nach hinten weg und steh dann ohne Geschenk da.

Die Gründe dafür sind vielfältig, aber am Ende läuft es einfach darauf hinaus: Ich fühle mich psychisch (zumindest momentan) fast nie in der Lage, Menschen Sachen zu schenken. Egal ob gekauft, selbstgemacht oder vom Laster gefallen. Darüber nachzudenken macht mir oft viel Angst und Stress und kostet mir wochenlang unglaublich viel Energie, die ich woanders gut brauchen könnte.

Und wenn mir jetzt jemand was schenkt, dann fühle ich mich halt irgendwie doch verpflichtet, auch mal was zu verschenken. Die Angst und der Stress sind quasi Teil des Geschenks, was ich bekomme. Oft habe ich auch das Gefühl, Menschen kaufen sich bei mir ein, damit ich mich häufiger melde, mehr Zeit mit ihnen verbringe, "dankbar" bin und so weiter. Das alles ist so anstrengend, dass ich am liebsten gar nichts geschenkt bekomme. (Und meine Zeit ist nicht käuflich. Nie.)

Nein, auch nicht mit dem Nachsatz "Du musst mir auch nichts schenken". Das hilft nicht wirklich. Es heißt ja meist auch eher "Also eigentlich hätte ich ja die Erwartung, dass du mir auch mal was schenkst, aber ich weiß dass das für dich schwierig ist, deswegen ist das auch okay, wenn nicht."

Wenn ihr mir wirklich was schenken wollt, weil ihr meint, das muss unbedingt sein und ihr auch nicht davon abzubringen seid: Bitte sprecht es vorher mit mir ab, was (zumindest grob) es ist und wann ihr mir das etwa schenken wollt. Unerwartete Geschenke sind nämlich besonders anstrengend. Aber erwartet nicht, dass ich jemals was zurückschenke. Das kann ich einfach nicht garantieren.

Am Ende ist es ja auch so, dass es viele andere Wege gibt, anderen Menschen zu sagen, dass eins sie mag, wenn das das Ziel ist. Denn Geschenke sind das für mich eher nicht.

by fina at January 16, 2016 01:29 AM

November 22, 2015

Farthen

It gets worse

CN: Depressionen, Krieg, Tod, Rassismus, Transfeindlichkeit

Nachtrag: Der Titel des Blogposts lautete vorher "It gets bitter". Das hatte nichts mit #itgetsbitter von @DarkMatterPoets zu tun, der Existenz dessen war ich mir nicht bewusst. Um Verwechslung zu vermeiden habe ich diesen Blogpost umbenannt. Danke @baum_glueck für den Hinweis.

Liebe Katzis und Nichtkatzis!

Ich lese in diesem Internet häufiger mal den Spruch "it gets better" ("es wird besser") und ich muss da mal was zu schreiben.

Meistens sind finde ich den Spruch im Kontext von Diskriminierungsformen, negativen Selbst_(Körper)bildern, Depressionen und so ziemlich allen Orten, wo es Leuten schlecht geht. Es ist so eine Platidüde, die immer mal wieder rausgehauen wird, wenn Leute denken, dass es grad passt. Es wird benutzt, damit es Menschen besser geht, um ihnen Hoffnung zu machen, sie zu beruhigen. "Warte noch ein paar Jahre, dann geht es dir besser."

Ich habe ein Problem damit.

Nicht, dass es mich stört, wenn Menschen in unangenehmen, diskriminierenden und Not- situationen Mut gemacht wird. Das ist toll. Es sollte mehr Leute geben, die andere beruhigen, ihnen wieder Mut und Hoffnung geben. Das wäre toll.

Was mich stört, ist die Art, wie es passiert. Mit so einem Satz. Der ist nämlich sehr absolut. Er wird meistens ohne Nachdenken über die konkrete Situation benutzt. Der steht einfach so da. Passt ja schließlich immer, ne?

Nein, tut es nicht. Es wird nämlich nicht immer nur besser. Das ist halt einfach falsch. Es gibt viele Menschen, bei denen es grad echt überhaupt nicht besser wird. Ob das jetzt persönliche oder globale Gründe hat, ist hier komplett egal. Euch fallen sicherlich selber genug Menschen(gruppen) ein, für die es gerade nicht nur nicht besser, sondern jeden Tag schlimmer wird. Jeder Tag zur Qual wird. Wo vor 5 Jahren zwar schon alles schlimm war, aber das im Vergleich zu der Situation jetzt fast schon paradiesisch wirkt.

So und jetzt stellt euch mal vor, ihr hättet vor 5 Jahren gesagt "es wird besser". Und dann das. Krieg, Leid, eine zunehmend rassistische, sexistische, transfeindliche, … Gesellschaft. Immer weniger Solidarität mit den Menschen, die sie am dringendsten brauchen. Stattdessen Verachtung, Ermordung, Tod.

Ich hab mein Leben lang in der Hoffnung auf das folgende Jahr gelebt. Nächstes Jahr wird alles besser, ganz bestimmt. Manches ist auch besser geworden. Vieles nicht, vieles schlechter. Verbittert bin ich geworden. Aber ist das besser?

Der Satz macht Hoffnungen. Oft falsche. Falsche, zerstörte Hoffnungen sind teilweise wesentlich schlimmer, als gar keine. Und oft wird der Satz dann von privilegierten Menschen gesagt. Denen es schlechter ging als damals. Für die es "besser geworden ist". Guess what? Das geht nicht allen so. Hört auf, das zu suggerieren. Dann wäre alles ein bisschen fluffeliger.

by fina at November 22, 2015 05:23 PM

September 24, 2015

Mandelbroetchen

Wird es Zeit für einen neuen Vornamen?

Marcel. Ja, das ist mein Vorname. Die meisten Leserinnen dieses Blogs werden mich eher unter Mandelbrötchen kennen, denn so nenne ich mich in sozialen Netzwerken. Es ist nicht ganz zufällig, dass die ersten beiden Buchstaben der Namen identisch sind. Nun ist der Name Marcel allerdings weit bürgerlicher und eben auch mein gesetzlicher Vorname.

Marcel. Es mag manch Menschen überraschen, doch so einige Personen haben Probleme mit der Aussprache des Namens. Insbesondere bei älteren Menschen wird aus dem Namen schon mal ein „Marsel“ (ähnlich wie Basel) oder gar ein hartes „Marzell“. Marzell ist allerdings ein Ort in Baden-Württemberg und hat nur wenig mit mir zu tun.

Marcel ist ein männlicher Vorname und stammt vom Vornamen Marcellus ab, der unter Päpsten und Heiligen sehr beliebt war. Nun bin ich weder kirchengläubig noch männlich. Wie bei den meisten Menschen, die in Deutschland geboren sind, wurde mir der Name von Personen gegeben, die mich zu diesem Zeitpunkt noch nicht kennen konnten.

Nach 35 Jahre mit dem Namen Marcel frage ich mich, ob es nicht mal Zeit für eine Neubenennung des Objektes ist, das Menschen in meinem Wesen sehen.

Namen sind Schall und Bytes
Menschen nutzen viele Namen, die von dem Umfeld und der Privatsphäre abhängen, in der sie sich gerade befinden. Einige Namen sind dabei selbstgewählt und andere fremdbestimmt. Neben Kose-, Spitz- und Künstlernamen erlangen in der Internetgeneration auch Pseudonyme im Privatgebrauch eine immer stärkere Bedeutung. Im beruflichen und distanzierten Kontext wird meist ausschließlich auf den Nachnamen zurückgegriffen.

Die unterschiedlichen Namen haben teilweise nicht nur die Bedeutung, das soziale Umfeld in Unterkategorien einzuteilen, sondern können auch unterschiedliche Umgangsformen festlegen. So kann die Verwendung des gesetzlichen Namens statt einer Namensverkürzung von der Partner*in signalisieren, dass nun ein ernstes Metagespräch geführt werden möchte; also der Wunsch besteht, den üblichen Sozialrahmen des Kosenamens zu verlassen.

Ich bin transmarcel
Ich bin mehr oder weniger bekanntlich trans(gender), genauer gesagt agender. Das bedeutet, dass ich keine Geschlechtsidentität besitze und mich z.B. weder als männlich noch als weiblich sehe. Ich sehe mich allerdings auch nicht als irgendwas dazwischen oder gar als Neutrum. Ich kann mit dem ganzen Konzept Geschlechtsidentität nicht viel anfangen (vergleiche wtfgender) und sehe es eher als unerwünschte Eingrenzung meiner Freiheit als Mensch durch die Gesellschaft.

Tatsächlich ist mir mein Vorname zunächst egal. Ich nutze ihn nicht als Selbstbezeichnung. Ich fühle mich auch nicht mit anderen Marcels identitär verbunden. In meinem praktischen Leben spielt mein Vorname so gut wie keine Rolle, da ich zu 90% durch das Internet kommuniziere und dort auf meinen Brotnamen zurückgreife. Viele Menschen in meinem direkten Umfeld nennen mich mittlerweile Brötchen, weil sie nie mit meinem gesetzlichen Vornamen in Kontakt getreten sind. Menschen, mit denen ich nur beruflich oder indirekt zu tun habe, nennen mich nur beim Nachnamen.

Ich habe aktuell kein Bestreben meinen Vornamen gesetzlich ändern zu lassen. In Deutschland sind der Namensänderung einige Hürden auferlegt. Doch Gesetze kommen erst ins Spiel, wenn ein Recht eingefordert oder ein Unrecht beseitigt werden möchte. Mir geht es nicht darum, andere aufzufordern, einen anderen Namen zu nutzen, sondern einen neuen Namen in neuen Sozialstrukturen anzubieten.

Warum also überhaupt die ganzen Überlegungen? Die Kurzfassung ist: weil ich es kann. Die zugehörige Frage lautet: warum nicht? Das Leben besteht aus vielen Strukturen und Prozessen, die gelebt werden, weil sie sich in der Gesellschaft eingebürgert haben. Sinnhaftigkeit und Aktualität werden selten hinterfragt. Mein Vorname existiert, weil er mir gegeben wurde. Hätte ich diesen Vornamen gewählt, wenn ich vor die Wahl gestellt worden wäre? Vermutlich nicht. Warum also nicht mal den Vornamen wechseln, wenn ich doch jederzeit die Möglichkeit dazu habe? Im Internet mache ich es doch seit Jahren genauso.

Welcher Vorname sollte es denn sein?
Die Wahl eines neuen Vornamens ist nicht so einfach. Natürlich könnte ich mich auf einer Party mit dem Namen Mandelbrötchen vorstellen; und gelegentlich mache ich das auch. Doch ist dies jenseits der Netzgeneration kein sonderlich akzeptierter Name. Wenn ich also einen traditionell bürgerlichen Namen wählen müsste: welcher würde es sein?

Als trans Mensch zieht es mich schon in Richtung geschlechtsneutraler Namen. Die sind für mich zwar ebenso nicht passend, aber immer noch passender als ein typisch männlicher oder weiblicher Vorname. Natürlich gibt es im Internet zahlreiche Seiten mit einer Auflistung von geschlechtsneutralen Namen. Doch nach welchen Kriterien wähle ich einen neuen Namen? Soll er „nur“ gut klingen? Möchte ich mit der Bedeutung des Namens etwas ausdrücken? Möchte ich in alphabetischen Auflistungen möglichst weit vorne stehen? Bevorzuge ich eine bestimmte Sprachvariante?

Ich bin ja ein Islandfan, verbringe möglichst viel freie Zeit dort und lerne die isländische Sprache. Ich könnte meine Wertschätzung durch die Wahl eines isländischen Vornamens ausdrücken. Allerdings sind die Vornamensgesetze in Island noch strenger als in Deutschland. Vornamen müssen ihr Geschlecht klar erkennen lassen und werden über Whitelists gewählt. Es gibt also Listen, in denen alle erlaubten Vornamen für Männer und Frauen vermerkt sind. Das führt dazu, dass ich bisher keine geschlechtsneutralen isländischen Vornamen gefunden habe. Viele isländische Vornamen besitzen zusätzlich Schreib- und Sprechweisen, die kaum oder gar nicht über ungeübte deutsche Zungen gleiten. Im Zweifel würden Menschen dann wieder Wege suchen, um den Namen zu umgehen.

Natürlich gibt es auch im Isländischen Vornamen, die für Deutschsprechende gut aussprechbar sind. Ein Beispiel wäre hier Mara. Der Name Mara hat gleich mehrere Vorteile. Mara ist zwar im Isländischen ein Frauenname, wird aber im skandinavischen Raum auch als Männername genutzt. Mara teilt mit Marcel und Mandelbrötchen die gleichen Anfangsbuchstaben. Mara ist in der Elder Scrolls Reihe die Göttin der Liebe (urgs). Die Frau von Luke Skywalker in Star Wars hieß Mara (Doppelurgs). Allerdings ist Mara auch ein weltweit gebräuchlicher Name. Aus dem Hebräischen angelehnt, wird er schon im Alten Testament der Bibel genutzt. Eine Frau namens Noomi (die Liebliche) ändert nach dem Verlust ihrer gesamten Familie ihren Namen in Mara (die Bittere). So hängt am Namen Mara letztlich zu viel (weibliche) Weltgeschichte, um als isländischer Name erkennbar zu sein.

So suche ich also weiter. Ich kenne einige trans Menschen in meinem Umfeld, die sich bereits über Namensänderungen Gedanken gemacht haben und fündig wurden. Auch ihre Findungsgeschichte würde mich interessieren. Habt ihr tolle Vorschläge für Vornamen oder habt ihr euch schon mal Gedanken über einen neuen Namen gemacht? Schreibt es mir. Gerne auch per Mail!


by mandelbroetchen at September 24, 2015 08:10 PM

September 10, 2015

Mandelbroetchen

Warum ich meine Arbeitszeitreduzierung nicht bereue

Hinweis: Dieser Text ist voller Privilegien. Er richtet sich an Menschen, die den Luxus haben, einen sicheren Arbeitsplatz unter Vollzeit zu besitzen. Weiterhin verdienen sie dabei so viel Geld und haben so wenig finanzielle Verpflichtungen, dass eine Arbeitszeitverkürzung für sie in Frage kommt.

Einleitung

Vor rund sechs Monaten habe ich bei meinem Arbeitgeber eine Arbeitszeitverkürzung auf 80% meiner bisherigen Vollzeitstelle erwirkt. In der Praxis bedeutet dies, dass ich seitdem den berüchtigten Montag als zusätzlichen freien Tag verbuchen kann.

Arbeitszeitverkürzungen sind insbesondere unter jungen Arbeitnehmer*innen wenig verbreitet. Viele jungen Kräfte können auf dem heutigen Arbeitsmarkt froh sein, wenn sie eine unbefristete Arbeitsstelle als Vollzeitkraft finden. Weiterhin stecken sie voller Tatendrang und möchten sich häufig einen guten Platz in ihrem Unternehmen sichern. Sprich: sie möchten Karriere und sich einen Namen machen. Körperliche und psychische Probleme wegen langjähriger zu hoher Arbeitsbelastung sind meist noch nicht auf ihrem Horizont.

Nun bin ich nicht mehr ganz so jung und habe mit 35 Jahren als Akademiker schon rund 10 Jahre Berufserfahrung. Ich war in dieser Zeit bei drei Arbeitgeberinnen angestellt. Die ersten Jobs waren dabei noch vergleichsweise angenehm, doch mit der Erfahrung kommen verantwortungsvollere Aufgaben und neue Positionen – der Arbeitsstress steigt. Ich arbeite nun in einem Kreditinstitut und bin als Mathematiker für betriebswirtschaftliche Berechnungen verantwortlich. Ich leite Arbeitsgruppen, betreue Auszubildende und hantiere täglich mit Milliardensummen. Es dauerte nicht lange, dass ich diese täglichen Belastungen in Geist und Körper spürte. Für mich war klar: das geht nicht mehr lange gut. Entweder ich werde krank, kündige den Job oder versuche anderweitig, meine Belastung zu verringern. Die Idee der Arbeitszeitverkürzung war geboren.

Viele Menschen scheuen den Schritt einer Arbeitszeitverkürzung. Finanzielle Einschnitte, eine vermeintliche Blöße vor Kolleg*innen, die Furcht vor dem Verlust des Arbeitsplatzes: es gibt viele Gründe, die solch einen Schritt gut zu überdenken. Doch welche Bedenken sind wirklich angebracht und schlüssig?

80% Arbeit heißt 20% weniger Geld

Nein. In der freien Wirtschaft ist das Gehalt verhandelbar. Je nach persönlicher Situation kann eine Arbeitszeitverkürzung mit wenig bis keinen finanziellen Einschnitten durch die Verhandlungen gebracht werden. Je unabdingbarer man im Job ist, desto eher lassen Arbeitgeber mit sich reden. Wenn ohnehin Gehaltsverhandlungen anstehen: warum nicht statt dessen Arbeitszeitverhandlungen bei gleichem Gehalt?

Selbst bei einer Reduzierung des Bruttogehalts auf 80% bedeutet dies natürlich nicht, dass das fehlende Geld vom Konto abgezogen wird. Der Nettoabzug ist je nach Gehaltsklasse wesentlich geringer; dem deutschen Steuersystem sei Dank. Eine Beispielrechnung zeigt: bei einem monatlichen Bruttogehalt von 2000 Euro (Single, Steuerklasse I, keine Kinder, gesetzlich versichert) werden bei Reduzierung auf 80% statt 400 Euro nur zirka 216 Euro abgezogen. Im Vergleich zum bisherigen Nettogehalt macht das einen neuen Nettoverdienst von 84,1% des alten Verdienstes. Dieses Verhältnis ändert sich auch nicht entscheidend bei höherem Grundverdienst. Selbst bei 6000 Euro Monatsgehalt liegt der neue Nettoverdienst bei 83,6% des alten Verdiensts. Grund ist hier, dass zwar mehr Lohnsteuer eingespart wird, aber immer noch gleiche Krankenversicherungsbeiträge (Bemessungsobergrenze) gezahlt werden müssen. Nicht unerwähnt sollte bleiben, dass man sich den geringeren Unterschiedsbetrag durch weniger Einzahlungen in Rentenkasse und Arbeitslosenversicherung erkauft. Dies hat natürlich Auswirkungen auf die späteren Rentenzahlungen und ebenso auf die Zahlungen des Arbeitslosengeld I.

Zwischenfazit: Der finanzielle Verlust einer Reduzierung der Arbeitszeit auf 80% liegt je nach Verhandlungsgeschick zwischen 0% und zirka 15%, aber keinesfalls bei 20%.

80% Arbeit heißt 20% mehr Freizeit

Definitiv falsch. Die Ermittlung der gewonnenen Freizeit lässt sich schwierig berechnen, denn es hängt von der Definition von Freizeit hat. In der Theorie hat der Tag 24 Stunden. Wenn wir 8 Stunden Schlaf und 8 Stunden Arbeit pro Tag anrechnen, kommen wir auf 8 Stunden Freizeit. Das sind 50% Arbeit und 50% Freizeit. Zusätzlich arbeiten die meisten Arbeitnehmer*innen nur 5 von 7 Wochentagen. Also haben wir doch massig Freizeit!

Leider hat Arbeit ein paar Randeffekte. Das fängt bereits bei der Anfahrt an. Die wenigsten Menschen sind binnen 5 Minuten bei ihrem Arbeitgeber. Mit Hin- und Rückfahrt kann man je nach persönlicher Situation durchaus von 1-2 Stunden pro Tag ausgehen, die von der Freizeit abgezogen werden. Zusätzlich sind Arbeitnehmer*innen zu einer gesetzlichen Mittagspause verpflichtet. Auch wenn in dieser Mittagspause nicht gearbeitet wird, so werden die wenigsten Menschen diese Zeit als qualitativ gleichbedeutend zu Freizeit verbuchen. Rechnet man die Zeiten zusammen, kommt man schnell auf 10-11 Stunden an täglicher Zeit, die ohne Überstunden für die Arbeitgeberin geleistet werden.

Rein subjektiv würden viele Menschen zustimmen, dass sie innerhalb der Woche kaum zu Freizeitaktivitäten kommen. Nach der Arbeit sind sie so ausgelaugt und erschöpft, dass sie sich vielleicht noch der Hausarbeit widmen und abends auf der Couch einen Film schauen. Das liegt daran, dass Arbeit nicht nur Zeit frisst, sondern bei viel Stress auch viel Energie. Und der Energiehaushalt eines Menschen ist begrenzt. Als wirkliche Freizeit wird deswegen meist nur das Wochenende gezählt.

Zwischenfazit: Bei einer 80% Stelle mit einem freien Tag Montag oder Freitag verlängert sich das Wochenende um ganze 50%. Die zusätzliche Erholungszeit führt mit der reduzierten Arbeitszeit zu einem erhöhten Energiehaushalt. Das 150% Wochenende kann also mit wesentlich mehr Tatendrang durchlebt werden.

80% Arbeit heißt nur 80% Sichtbarkeit im Job

Das kommt sicherlich auf den Job an. Als Mathematiker habe ich keine Fließbandaktivität, sondern teile mir meine Zeit eigenverantwortlich auf, um meine vordefinierten Projektziele zu erreichen. Früher in meiner 100% Arbeitsphase hatte ich an manchen Tagen so wenig Energie, dass ich sicherlich nicht produktiver war als jetzt mit einer 80% Stelle. Ich habe nicht den Eindruck, dass ich mit einer 80% Stelle quantitativ oder qualitativ weniger Arbeit schaffe. Tatsächlich besitze ich mehr Energie und damit auch eine bessere Laune. Ich bin einfach effizienter.

Problematisch ist höchstens, dass ich durch meinen freien Tag für manch Besprechung nicht zur Verfügung stehe. In der Theorie verpasse ich 20% der wichtigen Termine und damit den Anschluss an meine Kolleg*innen. In der Praxis sieht es allerdings so aus, dass auch andere Menschen aus Termingründen Besprechungen verschieben. So konnte man sich bisher immer auf Ausweichtermine einigen. Sollte eine Verschiebung einmal nicht möglich sein, habe ich auch keine Schmerzen, meinen freien Tag mal von Montag auf Freitag zu verschieben oder einen Woche ausfallen zu lassen und als Gegenzug in der folgenden Woche Montag und Dienstag freizunehmen.

Zwischenfazit: Auch mit 80% Arbeitszeit erreiche ich zwischen 95% und 100% Sichtbarkeit. Zusätzlich bin ich in der Zeit wesentlich konzentrierter und besser gelaunt.

Fazit

Wenn ich meine persönlichen Erfahrungen mit meiner Arbeitszeitverkürzung auf 80% zusammenfasse, erhalte ich folgende Liste:

  • Ich verdiene rund 15% weniger.
  • Ich verbrauche nur noch 80% der bisherigen Energie für meine Arbeit.
  • Mein Wochenende hat sich um 50% verlängert.
  • Ich spare zusätzlich am freien Tag Anfahrten und Mittagspause in Wert von 2 Stunden.
  • Ich bin in Job und Freizeit konzentrierter und besser gelaunt.
  • Ich verpasse so gut wie keine Termine und bin so sichtbar wie zuvor.
  • Meine Gesundheitsstand hat sich deutlich gebessert.

Ich habe meine Arbeitszeitverkürzung nicht bereut. Tatsächlich habe ich so gute Erfahrungen gemacht, dass ich in meinem Leben keinen Vollzeitjob mehr annehmen möchte. Als Mensch ohne Familie und Verpflichtungen verzichte ich gern auf 15% Gehalt um 50% mehr Freizeit zu erhalten. Meine Gesundheit wird es mir langfristig danken.

Vielleicht helfen diese Zeilen der ein oder anderen Person, um sich einmal über das Undenkbare Gedanken zu machen. Sicherlich muss die persönliche Situation und das berufliche Umfeld mitspielen. Aber Vollzeitarbeitsplätze sind nicht in Stein gemeißelt. Insbesondere in Unternehmen, in denen Home-Office immer noch kein Einzug erhalten hat, kann eine Arbeitszeitverkürzung ein guter Weg zu einem gesünderen und angenehmeren Leben sein.


by mandelbroetchen at September 10, 2015 07:05 PM

August 25, 2015

Mandelbroetchen

Eine Geschichte über Wasserwaagen und Kochfeldschaber

Als ich in meine derzeitige Wohnung einzog, spendete meine Familie mir zwei Werkzeuge: eine Wasserwaage und einen Kochfeldschaber. Ich legte beide Utensilien zunächst in eine Ecke des Flures, denn ich hatte mit dem Aufbau der Möbel und dem Auspacken der Umzugkartons erst mal genug zu tun.

Das ist nun knapp zwei Jahre her. In drei Monaten werden ich erneut umziehen. Wasserwaage und Kochfeldschaber habe ich nie genutzt. Tatsächlich liegen sie immer noch in der gleichen Ecke meiner Wohnung, in die ich sie vor zwei Jahren gelegt hatte. Unberührt. Ich habe sie nicht nur nie vermisst; mein Unbewusstsein hat sie visuell ausgeblendet. Bei jedem Aufräumen und jedem Putzen habe ich sie nicht wahrgenommen. Sie sind mir erst vor ein paar Tagen wieder aufgefallen, als ich begann, den nächsten Umzug zu planen.

Man könnte daraus folgern, dass ich kein sonderlich ordentlicher Mensch bin, doch das wäre nicht richtig. Richtig ist, dass ich mein Leben sehr fokussiert lebe. Dinge wie Wasserwaagen und Kochfeldschaber spielen in meinem Leben keine Rolle, also widme ich ihnen keine Aufmerksamkeit. Diese Fokussierung geht so weit, dass mein Gehirn solch für mich unwichtige Informationen gar nicht erst verarbeitet. Ich verliere damit einen Teil meiner Realitätswahrnehmung und ich benötige ein großes Maß an geistiger Anstrengung, wenn ich diesen Verlust in bestimmten Situationen wieder bewusst ausgleichen möchte.

Glücklicherweise spielen Wasserwaagen und Kochfeldschaber in meinem Alltag keine großen Rollen. Meine Leidenschaft gilt abstrakten Themen wie Wissenschaft und Kunst. Ich bin Mathematiker und Informatiker und arbeite in der Softwareentwicklung. Ich kann unbescheiden sagen, dass ich sehr gut in den Dingen bin, die ich beruflich tue. Wenn ich mich einmal in ein für mich anspruchsvolles Problem eingearbeitet habe, dann widme ich ihm meine ganze Aufmerksamkeit. Alltägliche Dinge wie Bürokratie und Lebensorganisation gehen dabei unter.

Ich habe in den letzten 15 Jahren eine Menge Probleme abgebaut, die mich an mir selbst störten. Ich habe mir fehlende Bildung jenseits meiner beruflichen Fachgebiete zugelegt. Ich habe meine Sozialkompetenz und meinen Umgang mit Menschen sehr verbessert. Ich kann meine Gedanken in Worte fassen, die auch andere verstehen und spontane Reden halten. Kurz: ich habe stetig daran gearbeitet, dass meine Fokussierung auf Teilgebiete der Realität keine zu großen Einschnitte in das Leben hat, welches ich mit anderen Menschen teilen muss.

Und trotzdem bleiben viele Probleme, die für andere Menschen Banalitäten sind. Ich kann zum Beispiel höchstens einmal pro Woche meinen Briefkasten öffnen, weil mich die immer neuen Rechnungen und bürokratischen Nichtigkeiten überfordern. Diese Aussage meine ich, wie sie da steht. Ich bin nicht genervt über meine Post und ich habe auch keine finanziellen Probleme, sondern mein Unbewusstsein weigert sich, mir die Erlaubnis zu geben, physisch den Briefkasten zu öffnen. Es sind damit keine Emotionen verbunden, sondern es ist eine stille Blockierung von Wahrnehmung und Handlung. Mein Unbewusstsein weiß, dass die Öffnung des Briefkastens nicht in meinem Interesse sein wird, also verhindert es die Aktion durch Wahrnehmungsverzerrung (der Briefkasten wird unsichtbar) oder Handlungsverweigerung. Ich wiederum weiß, dass mein Unbewusstsein dies tut, doch meist sitzt es am längeren Hebel.

Auch hier benötige ich sehr viel Energie, um dem entgegen zu treten. Ich versuche seit zwei Jahren meine überfälligen Steuererklärungen zu machen. Zahlreiche Mahnungen und Strafgelder helfen zur Motivation nicht. Regelmäßigkeit und langfristige Planung von Dingen, denen ich keine hohe Priorität einräume, sind für mich Vermeidungssituationen. Mein Bewusstsein befindet sich in einem stetigen Spannungsverhältnis zum Unbewusstsein. Ich habe dadurch sehr früh gelernt, mich selbst zu hinterfragen und mir bewusste Reflexionsmuster zuzulegen.

Ich kann diese Zeilen aus einem Privileg der Kontrolle schreiben. Ich habe genügend Ausbildung in Logik und Reflexion, um viele meiner Probleme selbst zu erkennen. Auch wenn ich sie im Detail nicht immer überwinden kann, so bleibt mir genug eigenverantwortlicher und finanzieller Spielraum, mein Leben um die Probleme herum zu navigieren, ohne dass es zu großen Einschnitten in meine Lebensqualität kommt. Dennoch ist es einigen Menschen schwer zu vermitteln, wie es ist, in stetiger bewusster Spannung zum eigenen Selbst zu stehen.

Menschen sind sehr komplexe Wesen und kämpfen als Individuen mit vielen Dingen, die anderen verborgen bleiben. Diese Geschichte hat kein Fazit, keine Moral und keine höhere Erkenntnis zu vermitteln. Sie soll einen kleinen Einblick in das Wesen eines Menschen ermöglichen – deswegen endet sie hier.


by mandelbroetchen at August 25, 2015 11:43 AM

August 20, 2015

Mandelbroetchen

RetroReview – Might and Magic IV und V: World of Xeen

World of Xeen, entwickelt von New World Computing, ist eine Verbindung der beiden Videospiele Might & Magic IV: Clouds of Xeen (1992) und Might & Magic V: Darkside of Xeen (1993), die ursprünglich getrennt erschienen und getrennt spielbar sind. Besitzt die Spielerin jedoch beide Versionen, so können sie zusammengelegt werden und die beiden Welten verschmelzen zu einer gemeinsamen Welt. World of Xeen erschien für DOS, Mac und den japanischen NEC-PC.

Wie bereits in MM3 besteht das Spielziel darin, eine Grupppe von sechs Abenteuerinnen rundenweise in Egoperspektive durch eine Pseudo-3D Welt zu bewegen, die schrittweise erkundet wird. Eine elementare Hauptstory wird dabei durch eine große Anzahl von Sidequests bereichert. Die meiste Zeit verbringt die Spielerin mit Erkundung der Umgebung, Hack&Slash Kämpfen mit Monstern und dem Lösen zahlreicher Rätsel. Zu dieser Zeit war das alles Genrestandard.

Die Außenwelt ist ausreichend repräsentativ gezeichnet, gewinnt aber keine Wettbewerbe.

Die Außenwelt ist ausreichend repräsentativ gezeichnet, gewinnt aber keine Wettbewerbe.

Zwei Spiele – Eine Welt
Im Rahmen der Spielhandlung ist die Integrierung zweier Spiele in ein Gesamtspiel durchaus clever gelöst. Im M&M Universum ist es üblich, dass die besuchten Welten flache Scheiben sind. Nun besitzt jedoch jede dreidimensionale Scheibe neben einer Oberseite auch eine Unterseite. MM4 spielt demnach auf der Oberseite und MM5 auf der Unterseite der gleichen Scheibenwelt. Ein Wechsel zwischen den Scheiben ist an festgelegten Orten (Pyramiden) möglich und fühlt sich nicht anders an als das Betreten eines Dungeons oder einer Stadt.

In der Theorie ist diese Idee reizvoll und innovativ. In der Praxis stellen sich einige Probleme und das wichtigste hiervon heißt Balancing. Spielt man beide Spiele getrennt, so muss man sich mit einer ärgerlichen Levelbegrenzung auf der Oberseite abfinden, die bereits ab Level 20 greift. New World Computing musste sicherstellen, dass die Party am Ende von MM4 nicht bereits so stark ist, dass für sie MM5 keine Herausforderung mehr darstellt. Auf der anderen Seite (scnr) durfte der anfängliche Schwierigkeitsgrad von MM5 nicht zu hoch sein, damit ein regelmäßiger Wechsel zwischen den Spielen überhaupt sinnvoll ist. Das führt dazu, dass sich MM4 allein relativ unspektakulär spielt. Powerleveling war seit jeher ein wichtiges Feature der M&M-Reihe. Die Vorgängerin MM3 bot einen Maximallevel von 200. Hier wirkt eine Reduzierung auf ein Zehntel der Stufen sehr künstlich und spielspaßbremsend.

Auf der Unterseite herrscht eine generell dunklere und bedrückende Stimmung.

Auf der Unterseite herrscht eine generell dunklere und bedrückende Stimmung.

Glücklicherweise fällt diese Stufengrenze bei Zusammenführung der Spiele weg, denn MM5 bot wieder einen Maximallevel von 255. Leider stellt dies die Spielerin vor andere Probleme, denn die nötige Erfahrung für einen Levelaufstieg steigt in RPGs üblicherweise nicht linear sondern geometrisch. Die nötige Erfahrung für einen Levelaufstieg ist ein Vielfaches der nötigen Erfahrung für den Levelaufstieg zuvor. So finden sich in MM5 bereits am Anfang einfache Quests, die 250.000 Erfahrung liefern. Mit dieser Erfahrung kann eine Level 1 Party bereits eine Vielzahl von Stufen aufsteigen. Im schlechtesten Fall reist eine neue Gruppe von Abenteurerinnen also sofort zur Welt von MM5 und sammelt in der ersten Stunde soviel Erfahrung und Gold, dass sie für MM4 bereits beinahe überlevelt ist. Möchte die Spielerin den Spielspaß maximieren, so nutzt sie den Wechsel zwischen den Spielen am besten kaum, um nicht zu schnell zu stark zu werden und die Hälfte des Spiels zu verpassen.

Wichtige Verbesserungen zu MM3 sind kaum zu finden
MM3 war eine Neuerfindung der M&M-Reihe und bot eine Menge neuer Features. Den Testbericht zu MM3 kann die geneigte Leserin hier finden. World of Xeen bediente sich der gleichen Engine und verbesserte sie nur marginal. Es steht damit in guter Tradition, denn auch MM2 war nur eine Erweiterung von MM1. Früher war es in großen Spielereihen durchaus üblich, dass eine neue Spielengine nicht für jeden Teil entwickelt wurde. Auch die Ultima- und Wizardryreihen nutzten gleiches Entwicklungskonzept.

Du kannst nicht vorbei!

Du kannst nicht vorbei!

Die augenscheinlichste und gleichzeitig unbedeutendste Neuerung ist die vermehrte Fokus auf Cutscreens und Sprachausgabe. Was Anfang der 90er Jahre des letzten Jahrhunderts noch spannend gewesen sein mag (es begann das Multimediazeitalter), ist heute nur noch nervig. Der Spielfluss wird beim Betreten jedes Dungeons durch eine kurze Sequenz unterbrochen, in der eine Figur in schlechter Audioaufnahme der Spielerin mitteilt, dass die Party den Dungeon betreten darf, weil sie den korrekten Schlüssel besitzt. Das passiert nicht nur einmal, sondern bei jedem erneuten Betreten. Ja, vielen Dank. Eine einfache Textnachricht bei fehlendem Schlüssel hätte es auch getan. Das vollvertone Intro ist genauso nervig und wirkt eher wie eine missglückte Interpretation von Monty Python.

Die Inventarverwaltung wurde überarbeitet und bietet nun einzelne Ansichten für Waffen, Rüstungen und Schmuck. Die Trennung ist grundsätzlich zu begrüßen und fördert die Übersicht, sorgt allerdings beim Handeln für eine vermehrte Anzahl von Klicks, denn eine Ansicht für alle Gegenstände einer Figur ist nicht mehr vorgesehen. Unschön bleibt nach wie vor, dass man jegliche Attribute eines Gegenstandes nur durch Identifizierung einsehen kann und das Ergebnis auch nicht zur Nacheinsicht gespeichert wird. Ein schnelles Vergleichen von Gegenständen ist so ohne eigene Notizen nicht möglich.

Die Schnellübersicht existiert seit dem ersten Teil und liefert wichtige Infos auf einem Blick

Die Schnellübersicht existiert seit dem ersten Teil und liefert wichtige Infos auf einem Blick

Das Quest-Logbuch ist nun wesentlich übersichtlicher. Spezielle Orte wie Brunnen werden nun sortiert vermerkt und sogar mit ihrer Wirkung protokolliert. Durch Klick in das rechte, obere Fenster kann eine Minikarte eingeblendet werden, die in MM3 nur durch einen speziellen Zauberspruch temporär erschien. Dieses Feature ist sehr hilfreich für eine schnelle Orientierung, da hier auch Felder angezeigt werden, die die Party noch nicht betreten hat.

Gebäude wie Schmieden, Trainingslager und Tavernen bestehen nicht mehr nur aus einem Feld, sondern sind nun in die eigentliche Welt eingewoben. Die Spielerin kann mit der Party durch eine Kneipe schlendern und mit den Gästen reden. Allerdings sind NPCs immer noch unsichtbar und werden nur durch ein Profilfoto beim Klick auf leere Stühle aktiviert. Theoretisch sind somit sogar Kämpfe in einer Taverne möglich, jedoch wird davon in World of Xeen storytechnisch kaum Gebrauch gemacht.

Interessanter ist da schon die Möglichkeit eine eigene Burg zu besitzen oder eine versteckte Stadt zu finden. Generell sind die Quests und Lokalitäten des Spiels sehr abwechslungsreich und vielseitig. So kann die Party Städte, Burgen, Minen, Türme und Kerker erkunden und sogar auf einer Wolkenebene über dem Spielfeld schweben. Die Rätsel sind ebenso abwechslungsreich und bestehen zum größten Teil aus Logik-, Rechen- und Wortproblemen. Aus heutiger Sicht sind die Rätsel teilweise durchaus knackig und nicht ohne längeres Überlegen oder Trial&Error lösbar. Der Kampfmodus ist jedoch identisch zu MM3 geblieben – mit allen Vor- und Nachteilen.

Bei der Charaktererstellung und Verwaltung hat sich so gut wie nichts getan. Ein paar Klassen wurden leicht angepasst, so ist die Barbarin erneut leicht aufgewertet worden, aber grundsätzliche Änderungen oder neue Klassen finden sich nicht. Tatsächlich wurde die dritte Zauberschule aus MM3 faktisch wieder abgeschafft. Sie besteht jetzt nur noch aus einer Mischung von Zaubersprüchen der anderen beiden Schulen. Eigene Zaubersprüche existieren nicht mehr.

Test

Die Gegnerinnen sind abwechslungsreich und passen in ihre Umgebung.

Fazit
MM4 und MM5 enttäuschten bei Erscheinen einige Spielerinnen, denn die spieltechnischen Neuerungen waren sehr gering, während der erweiterte Multimedia-Ansatz mit Zwischensequenzen und Sprachausgabe das Genre nicht weiterbrachte. Die Aufteilung in zwei Spiele schuf bei einigen Kundinnen den Eindruck, dass beim Erscheinen von MM4 nur ein halbes Spiel zum vollen Preis verkauft wurde. Ähnliche Diskussionen gibt es auch heute noch bei Aufsplittung eines Spiels in Addons oder DLCs. Aus diesem Grund hat World of Xeen nicht unbedingt den besten Ruf unter Old School Spielerinnen.

Aus heutiger Sicht muss ich rückwirkend jedoch sagen, dass World of Xeen eine konsequente Weiterentwicklung des revolutionären MM3 ist und durch die Verbindung zweier Spiele einen Spielumfang bietet, der alle bisherigen Versionen blass aussehen lässt. Wenn man nicht die Zeit hat, alle Spiele der M&M-Reihe durchzuspielen, so würde ich World of Xeen einem MM3 aufgrund der besseren Reife des Interfaces und des größeren Spielcontents vorziehen. Gleiche Argumentation brachte ich schon bei meinem Test von MM2 im Vergleich zu MM1.

World of Xeen hat alles, was ein gutes klassisches Action-RPG ausmacht: Eine abwechslungsreiche Welt, viele Quests, knifflige Rätsel und ein intuitives und schnelles Kampfsystem ohne Attributüberlastung. Wer es lieber langsamer und anspruchsvoller mag, sollte innerhalb der M&M-Reihe vielleicht einmal in MM2 reinsehen. Ab MM6 wagte sich die Reihe wieder an eine völlige Neuinterpretation und lieferte das erste Mal eine flüssige 3D-Welt und ein neues Spielgefühl.

Das Innere von Gebäuden ist nun besser aufbereitet. Spielerischen Mehrwert bietet es aber nicht.

Das Innere von Gebäuden ist nun besser aufbereitet. Spielerischen Mehrwert bietet es aber nicht.


by mandelbroetchen at August 20, 2015 12:18 PM

July 31, 2015

sofakissen

Patreon: Die fehlende Anleitung

Bild: deathtothestockphoto.com

Ich erinnere mich noch, als damals Flattr an den Start ging. Das Schlagwort "micropayment" kam auf und alle wollten kurz daran glauben, dass Künstlerinnen und Künstler auf einmal einen direkten finanziellen Kanal zu ihren Fans bekommen könnten. Für einige wenige wie Tim Pritlove ist Flattr auch heute noch eine solide Einkommensquelle, aber für die meisten kleineren Blogs und Podcasts (zumindest in meinem Umfeld) generiert die Plattform schon lange nicht mal mehr ein Taschengeld.

Aber es gibt eine neue, spannende Plattform, die diese Idee des Supports weiterdenkt: Patreon. Ich hatte letztes Jahr schon einmal darüber gebloggt und möchte das jetzt noch einmal tun, da Patreon auch in Deutschland langsam anfängt Fuß zu fassen.

Was ist Patreon?

Patroen ist eine Plattform, auf der Kreative finanziell unterstützt werden können - und zwar anders als bei Flattr nicht mit einzelnen Klicks, von denen jeder ein paar Cent wert ist. Patreon funktioniert eher wie ein Kickstarter-Projekt ohne End-Datum: Statt mit einem Mal sehr viel Geld zu sammeln, zahlen Unterstützer_innen regelmäßig kleinere Beträge an die, die sie unterstützen wollen - also ein paar Dollar, entweder monatlich oder pro abgeliefertem Werk.

Ich supporte schon seit einiger Zeit verschiedene Personen und Projekte auf Patreon und gebe dort jeden Monat sehr viel mehr Geld aus, als ich es bei Flattr je tat (knapp über 70$). Vieles davon geht in die Videospiel-Szene - Journalistinnen, Künstlerinnen, Entwickler_innen. Mattie Brice bekommt 1300$ pro Artikel, den sie schreibt, Touch Arcade ersetzt auf Patreon die in letzter Zeit weggefallenen Werbeeinnahmen.

Und auch größere Namen snd auf Patreon vertreten: Comicautor Zach Weinersmith bekommt 9000$ pro Monat, Musikerin Amanda Palmer wird sogar mit über 30.000$ im Monat von ihren Fans unterstützt.

Wo Flattr (zumindest gefühlt) immer sehr technisch orientiert war, kommt mir Patreon sehr viel kreativer, vielseitiger und bunter vor. Von Autor_innen, Webcomics, Fotografie, YouTube-Videos, Musik und Podcasts ist alles mögliche dabei. Allein schon das Konzept macht es zugänglicher - meine Unterstützung erfordert weniger Klicks, weniger Management und ich erhalte mehr und direkteres Feedback.

How do I even Patreon?!

Vielleicht ließ sich das schon raushören: Ich finde Patreon ziemlich gut. (Und das nicht nur weil mein Zeichentrickpodcast Ponytime und meine Videospielkritiken unter "Neues aus der Raummaschine" dort ein paar Dollar einsammeln.)

Beim Erstellen eines eigenen Patreon-Profils - sei es für Blog, Podcast, Musik, Artworks oder was auch immer - gilt es sich vorher ein paar Fragen zu stellen.

Die erste ist die nach dem Rythmus, in dem die Unterstützung abgebucht wird: monatlich oder pro Werk. Diese Einstellung lässt sich im Nachhinein zwar noch ändern, ist aber verwirrend gegneüber den Unterstützer_innen. Patreon selbst empfiehlt ab "täglichen oder sehr regelmäßigen" Veröffentlichungen eine monatliche Kampagne. Praktisch wird monatlich aber für fast alle Projekte benutzt, die mindestens einmal im Monat etwas veröffentlichen.

Bei dem Rythmus "pro Werk" ist auch zu berücksichtigen, dass die Zahl die auf dem Patreon-Profil nicht wirklich die sein muss, die am Monatsende auch ankommt. Unterstützer_innen können einen monatlichen Maximalbetrag angeben. Das ist sehr gut, weil so nicht versehentlich die Kreditkarte leergepumpt werden kann. Das führt aber auch dazu, dass der Betrag ab dem zweiten Werk in einem Monat sinkt.

Die nächste Überlegung sind die "Goals", also gesetzte Meilensteine. Es ist nicht möglich Summen über einen längeren Zeitraum zu Verfolgen, als Goals lassen sich nur Gesamtbeträge pro Monat oder pro Werk zu setzen. Da das Ziel eines Patreon regelmäßige Unterstützung ist, macht es wenig Sinn hier Einzelanschaffungen anzugeben - dafür wäre ein Kickstarter oder klassisches Crowdfunding eher geeignet.

Die Fragestellung für die Goals sollte also sein: Was wäre mir möglich, wenn ich soundsoviel Euro pro Monat bekommen würde? Kann ich mir einmal mehr leisten, einen Interviewpartnerin für einen Podcast besuchen zu fahren, etwa?

Hier kann gerade bei monatlich angelegten natürlich auch einfach der reine Support ohne direkte Gegenleistung in den Vordergrund gestellt werden. Einige prekär lebende Künstler_innen etwa geben hier ein Ziel in der Höhe ihre Miete oder Lebenshaltungskosten an. Patreon kann bei Erfolg also auch eine Art Grundeinkommen sein (wenn auch kein bedingungsloses).

Der dritte große Punkt bei einem Patreon-Profil sind die Rewards, also Belohnungen für die Unterstützer_innen. Diese sind nach der Höhe der Unterstützung gestaffelt. Das ist das - aus meiner Sicht - interessanteste. Patreon stellt hier ein simples Werkzeug für Abonnements bereit, die auf ganz verschiedene Arten genutzt werden können.

Der YouTube-Kanal Every Frame A Painting bietet als Reward für 3€ pro Video etwa Versionen ohne Schimpfwörter an, die im Unterricht, etwa an Filmschulen, verwendet werden können. Und Olav Larsen schickt für 5€ im Monat jeweils ein neues Pixelbild - und für höhere Summen entsprechend aufwändigere Bilder. Es gibt auch Künstler_innen, die höher Aufgelöste Versionen ihrer Artworks ohne Wasserzeichen oder direkt die Photoshop-Dateien anbieten.

img Pixelart von Olav Larsen

Das Profil von Journalist Ismail Küpeli ist ein Beispiel für die Unklarheit zwischen monatlicher Unterstützung und einmaligem Crowdfunding. Für 25$ Unterstützung im Monat bekomme ich sein Buch. Aber erhalte ich jeden Monat ein neues Exemplar des Buches? Sinnvoller wäre es vielleicht, die Belohnungen mit den Büchern zusammenzulegen und Unterstützer_innen dann einfach automatisch jedes veröffentlichte Buch zukommen zu lassen.

Patreon bietet eine Art "Paywall" schon von Haus aus. Bilder, Dateien und Blogposts können auf Patreon nur für Unterstützer_innen mit einem bestimmten Betrag freigegeben werden. Hier lassen sich also z.B. eBooks, exklusive Bilder oder sonstige Belohnungen direkt und einfach hochladen und verteilen. Die Möglichkeiten dieses direkten Kanals zwischen Fans und Kreativen bietet einiges an Potential.

Kritik

Bei all der Begeisterung gab es aber auch schon einige Kritik an Patreon. Es wird beispielsweise zu wenig gefiltert, wer dort finanziell profitieren kann. Das Forum 8chan oder das antifeministische Filmprojekt "The Sarkeesian Effect" wurden beispielsweise geduldet. Inzwischen gibt es (noch verbesserungswürdige) Community Guidelines und immerhin 8chan wurde aufgrund dieser der Plattform verwiesen. "The Sarkeesian Effect" sammelt aber immer noch Unterstützung - von der auch Patreon finanziell durch ihren Anteil von 10% an den Einnahmen direkt mit profitiert.

Außerdem bewegte sich Patreon bei der Einführung der europäischen Steuerreform VAT nur sehr langsam. Das rief bei vielen aus Europa stammenden Künstler_innen tiefe Verunsicherung hervor, denn sie wären Gefahr gelaufen mit jeder Spende Steuerrecht zu brechen. Inzwischen rechnet Patreon die Steuern aber EU-konform ab. (Genauer auf diesen clusterfuck von Steuerrechtsreform einzugehen erspare ich euch und mir an dieser Stelle.)

Beide Vorfälle erinnern daran, wie jung das Unternehmen Patreon noch ist - gerade in dieser Hinsicht müssen sie noch viel professioneller und sicherer werden, wenn sie eine solide Finanzierungsplattform sein wollen.

Patreon in Deutschland

In Deutschland ist der Dienst bisher noch nicht so populär, und doch gibt es schon einige erfolgreiche Projekte, etwa den Podcast Insert Moin oder die Comic-Autorin Sarah Burrini.

Was den Dienst hier sicher noch zurückhält, ist sicher auch die fehlende Übersetzung. Das Konzept ist zwar etwas einfacher veständlich als das von Flattr, dennoch fehlt eine simple Erläuterung der Funktionsweise und der Vorteile für beide Seiten. Außerdem werden die angezeigten Beträge noch nicht einmal in Euro umgerechnet, sondern nur in US-Dollar angezeigt. Einladend wirkt das alles nicht.

Dennoch - gerade in den USA, wo Flattr kaum eine Rolle spielte, funktioniert Patreon bereits erstaunlich gut. Da Flattr in Deutschland seine größte Nutzungsbasis hatte, hoffe ich, dass viel von diesem großzügigen Potential zu Patreon herüberschwappt. Und vielleicht kann der seit der Einführung von Flattr geträumte Traum der einfachen finanziellen Unterstützung von nichtkommerziellen Projekten und kreativem Schaffen dann ja doch noch wahr werden.

Also, auch für die 99%, die nicht Tim Pritlove sind.

by Sofakissen at July 31, 2015 09:08 PM

May 18, 2015

Farthen

Vom Anders Sein

Anders sein… das wollte ich nie. Klar ist es schön, das ein oder andere. Das besondere, das einzigartige.

Aber das hier, das ist es nicht. Anders als Persönlichkeit, nicht als Eigenschaften. Anders als Konzept. Ich habe nicht Dinge, die ich anders sehe, anders fühle, anders denke, ich bin anders. Und andere nehmen mich so wahr.

Das ist schwer. Immer der Mensch mit dem anders zu sein. Ohne Pause, ohne Stop. Ich bin quasi definiert durch meine Andersartigkeit, Menschen sprechen mich auf sie an. Oft neugierig, teilweise überrascht, manchmal erstaunt, meistens unbedacht.

Und ich spreche gerne über mein Anders, über diese Dinge, über meine Wahrnehmung, über die von anderen. Es macht mir Spaß, ich bin gerne all diese Dinge, denn sie sind ich. Und ich bin so.

Aber immer nur der Mensch mit dem anders zu sein, das ist schade. Dabei bin ich gar nicht so anders, als andere. Eigentlich bin ich ziemlich ähnlich wie viele Menschen. Die Kombination machts wohl. Und das Unbekannte.

Und dann muss ich mein anders-sein ständig unter Beweis stellen. Weil wenn ich nicht anders bin, dann werde ich gar nicht mehr als das wahrgenommen, was ich bin. Entweder anders oder falsch. Unzureichende Wahlmöglichkeiten.

Ich will gar nicht anders sein, ich will ich sein. Aber je mehr ich ich werde, je mehr ich mein ich zeige, desto mehr werde ich anders. Ein Teufelskreis.

by fina at May 18, 2015 04:53 PM

March 31, 2015

Farthen

Wie bitte?

Disclaimer: Ich rede hier nur über meine eigenen Erfahrungen mit meinen sehr gering ausgeprägten Wahrnehmungsstörungen. Ich spreche damit definitiv nicht für alle Menschen. Was ich gut finde können andere evtl gar nicht so toll finden. Fragt im Zweifel nach und seid vorsichtig.

      *genuschel*
      "Wie bitte? Das hab ich grad nicht verstanden."
      *genervtes Grummeln* "Ich meinte … *unverständliche Worte*".
      "Hä?"
      "Orrr" *rollt mit den Augen und spricht überdeutlich und betont jedes Wort extra stark*

Diese Situation habe ich oft mehrmals am Tag. Dass das nervig und unangenehm ist, könnt ihr euch vorstellen. Woran liegt das? Ich habe Wahrnehmungsschwierigkeiten. Oder auch "Auditive Verarbeitungs- und Wahrnehmungsstörungen".

Wenn Menschen Dinge sagen, bekomme ich manchmal nur die Hälfte mit. Auch wenn ich mir Mühe gebe, so konzentriert wie möglich zuzuhören. Manchmal verliere ich die Konzentration, manchmal höre ich nur Genuschel. Am schwersten sind Flüstern, Zurufen, in die andere Richtung sprechen, beim Laufen reden, laute Partys und Filme, bei denen die Musik sehr laut und die Sprache sehr leise ist. Und noch ein paar andere Dinge.

Mein Gehör ist in Ordnung. Ich war damit mal beim Arzt. Der hat einen Frequenztest gemacht und meine Ohren seien "perfekt". Nunja. Hier geht es ja auch eher um das Verarbeiten im Gehirn. "Post-Processing" quasi. Diagnostiziert wurde meine Wahrnehmungsstörung nie. Ist auch nicht so einfach. Und wenn gibt es da eh kaum was, was sich daran ändern lässt, also wozu die Mühe.

Ja. Shit.

Es wäre nett, wenn Menschen damit geduldiger umgehen könnten. Viele sind beim ersten Nachfragen schon genervt, wenn ich ein zweites Mal nachfrage rollen alle mit den Augen und werden manchmal sogar leicht agressiv.

Auch schön wäre es, wenn Personen, wenn ich schon nachfrage, wenigstens dann auch deutlicher sprechen. Oder die Aussprache leicht verändern. Also, nicht nuscheln. Aber halt auch nicht so, dass ich mich verarscht fühle. Sonst höre ich ja nur wieder das gleiche unverständliche Gemurmel.

Wenn ich immer nur ablehnende, agressive oder genervte Reaktionen höre fang ich halt an, die Sachen, die ich nicht verstehe, zu raten. Das ist glaube ich für beide nicht gut.

Oh und noch was. Witze. Menschen werden super agressiv, wenn sie Witze ein zweites Mal erzählen "müssen". Ich weiß nicht genau, woran das liegt. Aber da rate ich einfach immer. Und wenn ichs nicht verstehe fake ich mein Lachen. Das ist meistens einfacher. Und die wenigsten merken es.

by fina at March 31, 2015 05:14 PM

March 10, 2015

sofakissen

Distance

Yesterday, Apple presented its smartwatch and I didn't really care, until Tweets about the Apple Watch Edition hit my Timeline. The writing has been on the wall (and in the Apple rumour blogs), that the golden watch will cost 10,000$. But it took the actual announcement until I realised how much the fact that this product from this company exists disturbs me.

The Apple Watch is after all just a smartwatch like all the others. Probably a little better than all the Android Wear devices out there. 350 to 500 $ for a smartwatch is a reasonable price. I'm not interested in this product, but I'm sure it'll sell well and be very useful to lots of people.

Apple products were always expensive, but they were never as unreasonably priced as some people taunted the company and it's customers. Apple products offer some kind of "affordable luxury". If it's a MacBook Air for 1000$, an iPhone for 600$ or an iPod for 200$, for most people that's a big investment, but it's affordable. They even had something almost equalising to them: from the school kid to the CEO, everyone uses the same phones and laptops.

The Apple Watch Edition changes that. It creates a distance. Gold has no value in and of itself. It's not a material that enables the creation of sturdy yet light mobile computers. It's not a material necessary for building processors and chips. It's just expensive because it's expensive. And so the Apple Watch Edition is a product that is expensive just to be expensive. It's not designed to be a beautiful computer, it's desigend to be a beautiful thing. It's exclusive and so it excludes people.

A company that creates a products for the upper class like this also creates a distance to some part of their customers. Apple can't sell this watch for rich people without causing a conflict. I can't take their efforts for more equality serious. I can't take their interest to improve the working conditions in their factories in China serious. I can't take their efforts to bring iPads to school kids serious.

My next laptops is probably still going to be a MacBook. But this is the first time I'm deeply doubting my relationship to this company. I doubt that Apple can be the company for everyone and the company for the upper class at the same time.

And just because of a golden watch.

by Sofakissen at March 10, 2015 10:36 AM

February 22, 2015

sofakissen

Salzkaramellschokoladentarte

Diese Salzkaramellschokoladentarte ist Liebe. Leider ist das Rezept furchtbar. I'm about to (try to) change that.

Zutaten:

  • 200g Mehl
  • 200g Zucker
  • 1 Päckchen Bourbon-Vanillezucker
  • 2 Esslöffel ungezuckerten Kakao
  • 200g normale Butter
  • 100g gesalzene Butter
  • 5 Eier
  • 80g Sahne
  • 1-2 Teelöffel Fleur de Sel (oder anderes mittelgrobes Meersalz)
  • 150g dunkle Schokolade (mindestens 60 % Kakaoanteil)

1. Schritt: Der Teigboden

200g Mehl, 2 Esslöffel Zucker, den Vanillezucker, den Kakao, 100g (kalte) Butter, 2 Eigelbe und 1-2 EL (Eis-)Wasser in einer Schüssel vermischen und zu einem Teig kneten. Die Form wird gebuttert.

Den Teig rollt ihr dann aus. Das ist eine ziemlich krümelige Angelegenheit - falls er zu krümelig ist, noch etwas Wasser dazugeben; Wenn er zu feucht ist, etwas Mehl. Gute Nerven braucht ihr sowieso, wenn ihr so ungeschickt seid wie ich.

Am Besten rollt ihr auf einer gemehlten Unterfläche. Wenn ihr den Teig flach ausgerollt habt legt ihr ihn im etwa fünften Anlauf dann erfolgreich auf die Tarte-Form, ohne dass er in seine Einzelteile zerfällt.

Den Teig drückt ihr dann vorsichtig in die Form, schön gerade an den Rand. Das geht ganz gut mit einem Streifen gerollter Alufolie.

Wenn ihr keine Tarte-Form habt geht auch eine andere flache Form. Ich hab diese Tarte schon in einer Form für Tortenböden gemacht.

Das ganze kommt dann mit einem Stück Backpapier bedeckt für eine Stunde in den Kühlschrank. Die perfekte Gelegeheit nach all dem Stress das erste Glas Wein zur Entspannung zu trinken.

2. Schritt: Das Karamell

In eine leicht erhitzte Pfanne kommen 200g Zucker und 5 Esslöffel Wasser. Die gesalzene Butter wird untergerührt und die Temparatur leicht erhöht.

Das ganze sollte dann anfangen auf die Art zu blubbern, auf die brennend heißes und mutmaßlich tödliches Karamell halt so blubbert. Immer schön umrühren und um Himmels Willen nicht verbrennen!

Nach 20 Minuten sollte das Karamell wie Karamell aussehen. Jetzt die Pfanne vom Herd nehmen, die Hälfte der Sahne unterrühren, weiterrühren, wenn das Karamell klumpenfrei ist die restliche Sahne und Salz dazugeben.

3. Schritt: Die Schokolade

150 Gramm dunkle Schokolade (mit mindestens 60 % Kakaoanteil) und 100 Gramm Butter in einem Topf im Wasserbad schmelzen lassen.

Zwei Eigelbe und ein ganzes Ei mit drei Esslöffeln Zucker leicht verquirlen und dann mit der geschmolzenen Schokolade unterrühren.

Tada: flüssige Schokolade.

4. Backen, Backen, Backen

Der nackte KuchenTarteboden wird für 12 Minuten bei 170° (Umluft) in den vorgeheizten Backofen geschoben. Wenn ihr fertig seid und den Tarteboden aus dem Ofen holt, lasst ihn direkt an!

Auf dem Boden wird dann zunächst die Karamellmasse gleichmäßig verteilt. Darauf kommt dann vorsichtig eine Schicht von der geschmolzenen Schokolade.

Die Tarte wird so dann noch einmal weitere 12 Minuten gebacken. (Danach könnt ihr den Ofen dann auch ausschalten.) Anschließend kommt die Tarte in den Kühlschrank. Nach einer Stunde sollte sie #superlecker sein.

by Sofakissen at February 22, 2015 08:46 PM

February 17, 2015

Farthen

Kurzgeschichte

Heute mit Petra, Nina und Paul.

Petra möchte keine geschlechtsspezifischen Pronomen für sich benutzt haben und benutzt deshalb andere: "xier". Das findet xieses Freundx Nina interessant, bevorzugt aber lieber "x". Und Paul möchte gerne mit "sie" angesprochen werden.

Paul und Nina gehen zu einer Feier von Petra. Es ist xies Geburtstag. Viele sind eingeladen. Auch welche, die Petra, Nina und Paul nicht kennen. Aber weil die Meisten respektvolle Menschen sind, fragen sie vorher nach, welche Pronomen sie gerne für sich benutzt sehen wollen.

Dier Petra hat gute Laune. Viele von xiesen Freund*innen sind da. Das mag xier. Sie reden übers Basteln von kleinen Robotern. Nina hingegen geht es gerade nicht so gut. In einer Diskussion übers Stricken wurde xs Wunsch, mit "x" angesprochen zu werden, ignoriert. Noch viel schlimmer ist, dass die Person es nicht einsehen möchte, dass das ein Problem für x ist. Petra schreitet ein: "Das finde ich nicht in Ordnung. Wenn du das nicht einsiehst fliegst du raus!" "Ich schließe mich xiem an", erwidert Paul.

Der Mensch grummelt ein bisschen und meint, auf so eine Party hätte er eh grad keine Lust und geht.

Die Person, die diesen Menschen mitgebracht hatte, entschuldigt sich bei Nina und verspricht, mit der Person zu reden. Nina möchte gerade nicht drauf eingehen, x ist ziemlich genervt und möchte sich außerdem viel lieber weiter unterhalten. Außerdem habe Petra noch gar nicht xiesen Kuchen angeschnitten und x habe ja schon ein bisschen Hunger.

Petra grinst und verteilt Kuchen. Xier unterhält sich noch ein bisschen mit Paul über ihr neues Fotoprojekt. Die Zeit vergeht unglaublich schnell und alle behalten die Feier noch in guter Erinnerung. Nina ist zwar ein bisschen enttäuscht, dass zu dem Zwischenfall wieder mal nur Petra und Paul was gesagt haben, aber "die anderen bekommen das bestimmt auch irgendwann noch mal hin. Irgendwann."

Anmerkungen

Es gibt insbesondere für "x", aber auch für alle anderen Pronomen verschiedene Arten, wie Menschen diese für sich benutzt sehen wollen. Wenn ihr Zweifel habt, fragt nach.

Danke an Anna Heger und alle anderen, die mit daran gearbeitet haben für das wundervolle Pronomen "xier", insbesondere auch für diesen tollen Comic.

Wenn ihr Fehler findet weist mich bitte drauf hin.

Nachtrag

Ihr solltet euch diese Kritik an dem x-Pronomen durchlesen und es danach vermutlich nicht mehr verwenden. (da die Kritik nach dem Veröffentlichen dieses Artikels rauskam, benutze ich es hier noch, werde aber in Zukunft wohl davon absehen.)

by fina at February 17, 2015 11:58 AM

January 08, 2015

Farthen

Nicht genug

tl;dr: Wir dürfen alle sein, was auch immer wir wollen

Ich möchte beginnen mit einer Aussage von mir selber, vor einem knappen Jahr:

"Ich kann nicht trans sein, weil dann würde ich ja meine eigenen Privilegien als männlich wahrgenommener Mensch untergraben."

Ich habe sehr lange gebraucht, um akzeptieren zu können, was, zumindest auf mich bezogen, alles falsch an diesem Satz war.

Das spannende ist ja eigentlich, von welchen Privilegien ich dort rede. Am Ende ist das Privileg, was hier relevant ist, "männlich wahrgenommen zu werden" und dadurch einen Haufen Dinge gleich mit zu erben, die damit einherkommen.

Aber ist das in dem Fall wirklich ein Privileg? Ist nicht genau das das, was mich stört? Das, womit ich mein Leben lang zu kämpfen habe, dass ich so wahrgenommen werde? Und am Ende des Tages hatte ich auch schon sehr lange Persönlichkeitsmerkmale, die nicht der Norm von meinem aufgedrückten Geschlecht entsprachen… Und ich wurde dafür bestraft.

Es lässt sich nicht abstreiten, dass das in diesem Fall auf jeden Fall mindestens mal ein zweischneidiges Schwert ist.

"Aber, aber Sozialisation…?!"

Dann kommen natürlich wieder Menschen an, die meinen, ich wäre ja aber x sozialisiert und deswegen ist das schon gut so, dass ich diese Gedanken habe, bla. Dass das meistens von Menschen kommt, die mir am Ende meine Identität wieder absprechen wollen (TERFs zum Beispiel) mal ganz dahergestellt. Aber welche Sozialisation soll das sein?

Wie oben schon erwähnt, wer sich in dieser Gesellschaft gendernonkonform verhält wird dafür in den meisten Orten erstmal bestraft. Wer sich anders kleidet, anders auftritt, ja schon alleine andere Verhaltensweisen an den Tag legt. Leute gucken komisch, machen Kommentare, lachen, ärgern, mobben, alles mit dabei.

Ich muss zugeben, ich hab es ein bisschen satt wenn Menschen behaupten, ich wäre "männlich sozialisiert". Das bin ich nicht. Ich habe zwar Aspekte davon sicherlich mitgenommen und ich bin auch nicht ganz frei von sozialem Verhaltensdruck. Aber viele dieser Aspekte waren auch negativ für mich und schwer zu verarbeiten usw. Mir dann dieses Label aufzudrücken empfinde ich als problematisch.

"Aber da sind doch viel mehr, die viel mehr trans sind als du!"

Das dachte ich mir damals. "Ich kann ja nicht trans sein. Damit würde ich ja den ganzen Leuten, sie sich sicher sind, ihre Autorität untergraben." Das geht ja nicht. "Das Label ist nur für Leute, die wissen, was sie sind" usw.

Warum? Warum ist das Label trans (oder jedes andere selbstauflegbare Label in dem Fall) nur für die, die sich sicher sind? Wer gibt diesen Menschen das Recht, es für sich zu beanspruchen? Ist es ihr Eigentum?

Nein, ist es nicht. Ich kann das benutzen. Du kannst das benutzen. Wir alle können das benutzen, solange wir das Gefühl haben, dass es unsere Identität in irgend einer Weise wiederspiegelt. Oder dass wir uns irgendwie wohl fühlen können, wenn Menschen uns mit diesem Label sehen.

Am Ende sind Labels eh selten eine ausreichende Persönlichkeitsbeschreibung. Eigentlich mag ich für mich nicht mal wirklich gerne welche. Warum ich trotzdem welche benutze? Weil ich weiß, was es in Menschen mir gegenüber tut. Wenn ich sage, ich sei genderqueer oder wasauchimmer, dann löst das Dinge in meinem Gegenüber aus. Was eigentlich viel spannender ist: Was passiert, wenn ich keine Labels mir gegenüber benutze?

Wenn ich anderen nichts über mich erzähle, machen sie Annahmen. Das war schon immer so, das sehe ich total als Problem, aber das lässt sich ohne weiteres erstmal höchstens in einem kleineren Freund*innenkreis einigermaßen bekämpfen. Alle anderen da draußen labeln mich. Und wenn ich ihnen nicht schnell zuvor komme, ist es meistens zu spät. Das ist ziemlich gewaltvoll, aber die einzige Möglichkeit, es zu umgehen ist wohl, selber die Labels auszusuchen, in denen Menschen mich betrachten wollen. Auch wenn sie unzureichend sind. Und auch wenn es eine traurige Feststellung ist…

Am Ende bedeutet es aber auch, dass es nicht schlimm ist, Labels für sich zu benutzen, die sich passend anfühlen. Auch wenn es nur temporär ist, oder ihr euch nicht sicher seid. Einfach mal ausprobieren. Damit nehmt ihr niemandem was weg.

by fina at January 08, 2015 08:10 PM

January 02, 2015

sofakissen

Spiele des Jahres 2014

Dieser Artikel heißt "Spiele des Jahres", aber es geht nicht um die besten Spiele des Jahres. "Game of the Year" ist eine fragwürdige Auszeichnung, meiner Meinung nach noch weit fragwürdiger als etwa ein Oscar oder ein Grammy. Künstlerische Werke sind nicht vergleichbar, Ranking und Vorauswahl macht keinen Sinn. Deshalb liste ich hier nur die Neuerscheinungen auf, die ich im Verlauf des letzten Jahres gespielt habe. So wie letztes Jahr.

2048

Am 15. Mai des letzten Jahres war es endlich so weit: Ich habe 2048 zum ersten mal gewonnen. Ja, Threes hatte in jeder Hinsicht das bessere Design, war vielleicht sogar das bessere Spiel. Aber die Faszination des ersten von vielen Klonen lag eher im Spielfluss, der kopflos und automatisiert ablief wie in Tetris.

image Alien: Isolation

Alien: Isolation

Es gibt so viel, das ich an Alien: Isolation loben möchte, dass ich kaum weiß wo ich anfangen soll - dabei hat es durchaus viele offensichtliche Mängel. Lange spielte ich kein AAA-Game mehr, das so sehr von seiner brillianten Spielmechanik getragen wurde, dass sie sogar viele der Schwächen ausgleicht. Ich fühlte mich mehrmals an die Looking Glass Klassiker Dark Project und System Shock 2 erinnert. Ein mutiges und wichtiges Spiel in einem Jahr, das den bisherigen Höhepunkt der Pseudo-Open-World-Monokultur erlebte. Alien: Isolation ist unfair, langsam, repetitiv, frustrierend - und ich liebe es.

Banished

Banished konserviert das Spielgefühl alter Aufbauspiele wie Anno 1602. Die Präsentation ist dabei ebenso schlicht, wie das Leben der namensgebenden Vertriebenen. Ich erwartete nichts - vor allem nicht, auf die Uhr zu schauen um zu merken, dass ich den ganzen Tag mit dem Bau einer Siedlung verbracht habe. Ausführlicher habe ich über Banished auf herzteile geschrieben.

Broken Age (Act I)

Tim Schafers Kickstarter wurde zum bis dato größten Erfolg der Crowdfunding-Plattform: Drei Millionen Dollar waren am Ende zusammengekommen und die Ambitionen des Projekts stiegen mit dieser Summe ebenfalls. Herausgekommen ist weit mehr als nur ein nostalgisches Point and Click Adventure. Die erste Hälfte von Broken Age erzählt eine herzerwärmende Geschichte vom Erwachsen werden in einzigartiger Bilderbuch-Optik. Leise und humorvoll - und spielerisch frei vom Ballast der pixeligen Vorfahren.

Child of Light

Child of Light ist eines der Spiele, denen ich gerne endlich mehr Zeit widmen würde. Bisher testete ich nur kurz den kooperativen Mehrspieler-Modus an, der für dien zweiten Spieler_in in der Rolle des Glühwürmchens leider nicht sehr viel bereit hält.

Claire

Claire ist deutlich von Home und Lone Survivor inspiriert und schafft es mit seinen makaberen Horror-Szenerie, dem desorientierenden Leveldesign und der durch glitches dargestellten Angst der Hauptfigur eine beunruhigende Atmosphäre aufzubauen.

Deep Dungeons of Doom

Eigentlich mag ich keine Dungeon Crawlerm, aber irgendwie kam ich dann doch dazu Deep Dungeons of Doom zu spielen und verbrachte völlig unerwartet viel Zeit in dem perfekt auf Zwischendurch getrimmten Kerkergemetzel. Mein ganzes Review gibt's bei Superlevel.

image Desert Golfing

Desert Golfing

Lange weigerte ich mich, dem Hype um Desert Golfing zu folgen. Irgendwann gab ich nach und musste einsehen, dass das Spiel gleichzeitig genau der prätentiöse Hipster-Scherz ist, den ich erwartete - aber mindestens ebenso gut, clever und inspirierend. Vielleicht bilde ich mir das nur ein. Vielleicht auch nicht. Mehr von der eigenartigen Spielerfahrung habe ich auf Superlevel versucht zu beschreiben.

The Detail

Ich las einige lobende Reviews darüber, wie düster das Adventure The Detail ist. Ich habe es in der ersten Episode noch nicht gespürt. Das heißt nicht, dass The Detail schlecht ist - aber bevor ich nicht in den weiteren Episoden sehe, welche Auswirkungen meine Entscheidungen haben, steht die erste Episode letztendlich doch noch etwas farblos da.

Echo of the Wilds

Technisch gesehen ist Echo of the Wilds vermutlich ein weiteres Survival-Spiel. Das Erkunden der Wälder und Landschaften voller bedeutungsschwerer Symbolik pendelt aber mehr zwischen Traum und Albtraum. Interessant, aber schwer zugänglich.

Elegy for a Dead World

Ich bin es mittlerweile gewohnt, von Videospielen zu allem möglichen aufgefordert zu werden. Ich bin es gewohnt, nicht mehr als die Illusion von Freiheit zu haben. Elegy for a Dead World stellt diese Erwartungshaltung auf den Kopf und fordert Spielende auf, eine eigene Geschichte zu schreiben und fordert sie dann auch noch dazu auf, sie zu veröffentlichen. Eine merkwürdig verschämtes, kreatives und introspektives Erlebnis.

Escape Goat 2

Escape Goat 2 ist ebenso wie der erste Teil schon ein sehr guter Puzzle-Plattformer. Und auch noch hübsch anzusehen. Und witzig! Wahrscheinlich ist Escape Goat 2 das beste Ziegen-Spiel des Jahres.

FRAMED

Als ich FRAMED das erste mal auf dem A Maze Festival 2014 spielte war ich zwar sofort angetan vom Spielprinzip, hatte aber die Befürchtung, dass das Spiel zu wenig "Spiel" wird. Ich täuschte mich: Die Comic-Puzzelei bereitet stellenweise großes Kopfzerbrechen - und ist außerdem eine spannende Verschmelzung von Erzählung und Spielmechanik.

Glitchspace

Das noch in der Early Access-Phase befindliche Glitchspace versucht in seinem Trailer eine actionreiche Shooter-Atmosphäre aufzubauen. Warum weiß ich allerdings auch nicht, denn das stylische Spiel fasziniert eher durch seine langsamen Logik-Aufgaben als durch die seltenen wie simplen Geschicklichkeitspassagen. Aber das hab ich ja auch auf Superlevel schon gesagt.

Goat Simulator

Der Erfolg von Let's Plays auf YouTube hat nicht nur dem Horror-Genre neue Aufmerksamkeit verschafft, sondern auch ein völlig neues Genre mit erschaffen: den Video-tauglichen Nonsense Simulator. Als ich Goat Simulator spielte war der Witz noch nicht ganz so abgenutzt wie jetzt. Ich hatte eine sehr vergnügliche halbe Stunde mit dem anarchischen Ziegensimulator, bevor ich ihn dann nie wieder anrührte.

Hack 'n' Slash

Die bei einem Gamejam entstandene Idee von Hack'n'Slash, mit einem USB-Stick als Schwert die Variablen und den Code der Spielwelt beeinflussen zu können, ist toll. Das finale Spiel wirkt leider viel zu unpoliert, so dass ich es nach ein paar frustrierenden glitches wieder beiseite legte. Schade.

Hearthstone

Ich mag Trading Card Games, aber ich hasse das Bauen von Decks - deshalb spiele ich keine Trading Card Games. Für ein paar Runden zwischendurch ist Hearthstone dann aber doch sehr gut geeignet, zumindest seit es die iPad-Version gibt.

Heavy Bullets

Heavy Bullets Levels sind kurz, das Tempo ist hoch, die Wände leuchten grell und die Gegner sind bizarr. Optik und Gameplay sind überstilisierte, überromantisierte, überzeichnete Nostalgie - und machen eine ganze Menge Spaß.

Hitman Go

Die Idee, die brutale Hitman-Serie in Brettspiel-Ästhetik auf das iPad zu bringen klingt so abwegig, dass es beinahe ein Aprilscherz ein könnte. Kein Scherz ist, dass das eigentlich recht simple Schiebe-Puzzle Hitman Go ziemlich gut geworden ist.

In The Kingdom

Der Shooter In The Kingdom sieht aus wie Doom, fühlt sich an wie Silent Hill und baut erfolgreich eine subtil unbehagliche Atmosphäre auf - etwas, an dem die meisten Horror-Spiele scheitern. Es ist nicht gruselig, es ist nicht düster, sondern in jedem Aspekt durch und durch dunkel.

Kentucky Route Zero (Act III)

Was soll zu Kentucky Route Zero noch gesagt werden, das nicht schon gesagt wurde? Der dritte Akt hinterlässt Spielende erneut mit vielen einzigartigen Momenten und festigt seinen Ruf als ebenso selbstreferenzielles wie vielschichtiges (Meta-)Spiel.

The Long Dark

The Long Dark kommt ohne Monster aus. Die Natur allein reicht als Gegner in diesem langsamen Survival-Spiel, das ein ständiger Kampf gegen den Verfall von Material und Körper ist. Obwohl es sich so langsam anfühlt, dauert eine Runde oft nicht lang und schafft es dadurch, das Survival-Spiel zugänglich zu machen - zum Beispiel für Leute wie mich.

LUFTRAUSERS

Ich habe ein paar mal versucht mit dem Nazi-Ästhetik Bullethell-Shooter Luftrausers warm zu werden, aber ich kam mit der schwammigen Drift-Steuerung des namensgebenden Fluggerätes einfach nicht zurecht.

Metal Gear Solid V: Ground Zeroes

Metal Gear Solid war für mich immer eine der prägendsten Videospielreihen. Das hat sich nach dem Ende des 4. Teils ein wenig verlaufen - die unendlich scheinende Finalsequenz war ein stimmiger Schlusspunkt. Aber natürlich werde ich den 5. Teil dennoch spielen. Der Ersteindruck von Ground Zeroes erinnert an den Tanker-Level des zweiten Teils und lässt Spielenden in einem kleinen Areal viel Raum zum experimentieren mit den Spielmechaniken.

Mini Metro

Der Spruch "klein und fein" scheint wie für das U-Bahn-Planspiel Mini Metro gemacht zu sein. Das Spielprinzip ist simpel, die Präsentation schlicht und jeder Aspekt durchdacht und poliert umgesetzt. Das letzte mal, dass ich so viel Zeit in einem Spiel verbrachte, das nur aus bunten Linien besteht, war vermutlich bei Tetris.

Monument Valley

Völlig verdient hat das Puzzle Apples "Spiel des Jahres" Auszeichnung erhalten. Die von M.C. Escher inspirierte Welt von Monument Valley ist ebenso eine Denksport- wie Entspannungsübung und erzählt dabei eine Geschichte ohne ein Wort zu verlieren, allein durch die surreale Architektur seiner Welt.

NAM

Eigentlich ist NAM ja schon 1998 erschienen. Für das erste Level des Shooters brauchte ich eine Stunde - die vorgegebene Bestzeit liegt bei nicht einmal zwei Minuten. Das repetitive, sinnlose, brutale, unübersichtliche, schwere, konfuse Spielen macht (vermutlich unabsichtlich) eine stärkere Aussage über den Krieg, als ich es von dem Re-Release eines mittelmäßigen Retro-Shooters erwartet hätte.

Neocolonialism

Neocolonialism ist alles andere als subtil über seine politische Aussage. Kapitalisten beuten die Welt aus, kaufen Macht in verschiedenen Regionen und profitieren vom Ruin anderer. Wäre die Aufmachung weniger krude, vermutlich würde das antikapitalistische Spiel nicht so gut funktionieren. Und trotz seiner schweren Zugänglichkeit bleibt doch eine faszinierende wie düstere Poker-Partie.

Never Alone

Never Alone hat ein Anliegen. Der recht klassisch gehaltene Plattformer möchte von der Geschichte und die Kultur der in Alaska lebenden Inupiat erzählen. Das tut es auch sehr gut, weil die Entwickler nicht einfach die Geschichte als Hintergrund ausbeuten, sondern jeder Aspekt in enger Zusammenarbeit entstand. Ausführlicher schrieb ich darüber auf Superlevel.

Nidhogg

Wenn ich nach dem Dezibel-Pegel meiner Niblings gehe, als ich ihnen Nidhogg zeigte, dann scheint das surreale Duell-Spiel eines der spaßigsten des Jahres zu sein. Die Dynamik einer Runde, die zwischen 30 Sekunden und 10 Minuten dauern kann, deren Richtung sich immer wieder dreht, ist auch für Zuschauende spannend.

Octodad

Der König #1 Dad des Trends der "gewollt schlechten Steuerung" ist zweifelsohne Octodad. Perfekte Slapstick, sympathische Charaktere und eine kurzweilige Story lassen stellenweise vergessen ein Videospiel zu spielen statt einen Animationsfilm zu schauen.

The Old City: Leviathan

Ich benutze das Schlagwort "walking simulator" immer noch, obwohl es eigentlich ganz furchtbar ist. So langsam wird es Zeit, dass wir einen besseren Begriff finden, denn die interaktionsarmen Erzählstrukturen (die ganz ohne Frage Spiele sind) werden nicht einfach wieder verschwinden. The Old City: Leviathan ist schwermütig und philosophisch und auch wenn es emotional nicht zu packen vermag, schafft es beim Erkunden der leeren Gänge und Lesen der hinterlassenen Nachrichten doch eine ganz eigene, dystopische Atmosphäre.

image OlliOlli

OlliOlli

Viele Spiele haben versucht, das Gefühl des ersten Tony Hawks Pro Skater zu imitieren, aber OlliOlli ist vermutlich das erste, dass es schafft. Es ist schwer, unnachgiebig, schnell und genau so punk rock wie ein Skate-Spiel sein sollte. \m/

République

République ist vermutlich eines der ambitioniertesten Tablet-Spiele des Jahres. Die indirekte Steuerung per Überwachungskameras bereichert das Stealch-Game um eine interessante neue Perspektive und wurde durch die fast zeitgleich zum Release stattfindenden NSA-Leaks zu einer beängstigend aktuellen Zukunftsvision. Ausführlicher schrieb ich Anfang des Jahres auf herzteile.

Rules!

Ein bisschen "Simon befielt", ein bisschen "Whac-A-Mole", ein bisschen "Memory"... Rules! weckt Erinnerungen an die merkwürdigsten Spiele. Außerdem macht es so süchtig wie Tetris. Mindestens. Eine wunderbare Herausforderung für Gedächtnis und Reaktionsfähigkeit.

The Sailor's Dream

Simogos The Sailor's Dream ist ebens verträumt wie sein Titel. Ich wechsle auf dem iPad zwischen verschiedenen Bildern, teilweise erzeugt die Interaktion mit den Umgebungen Töne, ab und zu spielt ein Lied oder ein Textabsatz erzählt die Geschichte fort. Es ist ein bisschen Kurzgeschichte, ein bisschen Musical, es ist vielleicht kein Spiel, aber auf jeden Fall verspielt und es tat mir dieses Jahr an einem Tag gut, an dem es mir bis dahin nicht gut ging.

Screencheat

Screencheat ist vermutlich der beste Splitscreen-Shooter, den ich seit Tidesplitters 2 gespielt habe. Die Pointe: Alle Spielfiguren sind unsichtbar - das verpönte Blinzeln auf den Bildschirm der anderen ist also Pflicht. Chaotisch und schon zu Zweit unglaublich witzig.

image Secrets of Raetikon

Secrets of Raetikon

Secrets of Raetikon ist ein durch und durch entspannendes Spiel. Als Vogel flattere, gleite und sturzfliege ich durch die Berglandschaft, löse kleine Rätsel, durchquere hin und wieder ein paar Hinternisse und genieße ansonsten die angenehme Langsamkeit des Vogelflugs.

Space Age

Beim Spielen von Space Age lässt sich die Ambition, die in das Adventure floss. förmlich spüren. Die Liebe der Entwickler_innen für alte Videospiele und noch älteres Science Fiction-Kino steckt in jedem Detail, von Story und Grafik bis zum tollen Soundtrack. Allerdings ist das auch das Problem: es stecken zu viele Ideen in Space Age, so dass die einzelnen Teile nie ein wirkliches Ganzes ergeben.

Starbound

Wann Starbound eines schafft, dann die kindliche Faszination für fremde Welten in mir zu wecken. Die Reise zwischen Planeten wird mit hart geernteten Rohstoffen erkauft und ist immer ein Sprung ins Ungewisse - ein Sprung, der sich meistens lohnt. Jeder Planet ist anders, eigen, merkwürdig und selbst ebenso bizarr wie die Lebewesen, die ihn behausen und die Geschichten, die die Landschaften und Gebäude erzählen.

Stranded

In Stranded passiert beinahe nichts und doch so viel. Das stille Adventure kommt ohne Rätsel, ohne Dialoge, ohne eine wirkliche Story aus. Als auf einem kahlen Planeten abgestürzter Astronautin durchwandere ich Ruinen, beobachte wie die Welt ohne mich ihren Lauf nimmt und bin nach einer halben Stunde am Ende meiner Reise. Und trotz der Kürzer erinnere ich mich besser an Stranded, als an andere, lautere und längere Spiele.

Thief

Ich mochte The Dark Project immer, zumindest konzeptuell. Wirklich spielen mochte ich es nie und das änderte sich auch mit dem Reboot nicht. Die spielerische Lücke, die ich mit Thief füllen wollte, befriedigte am Ende Alien: Isolation.

Threes!

Letztendlich ist Threes vermutlich das Spiel, das ich 2014 mehr als alles andere gespielt habe. Ein perfekt designtes Mobile-Game, dessen "mal zwischendurch eine Runde spielen" auch schell mal zu einer medidativen Stunde in der Ringbahn wird.

Towerfall Ascension

Im Wörterbuch sollte neben der Definition von "Spaß" ein Screenshot von Towerfall Ascencion abgebildet sein. Zu zweit gemeinsam gegen Horden von Monstern, zu viert im Deathmatch oder allein auf der Jagd nach Bestzeiten - die simple Prämisse von Towerfall entfaltet sich mit jeder Runde, in der die Steuerung mehr ins Blut übergeht weiter und findet eine beeindruckende Balance zwischen kurzweiligem Party-Spaß und gekonnten Profi-Tricks.

Toybox Turbos

Ein spaßiges kleines Rennspiel. Nicht mehr, nicht weniger. (Ausführlicher hab ich das auf Superlevel geschrieben.)

Valkyria Chronicles

Die vermutlich größte Überraschung des Jahres war ein Spiel, das ich eigentlich schon zu Zeiten der PlayStation 3 spielen wollte: Valkyria Chronicles wurde erstmals auf PC veröffentlicht und das einzigartige Anime-Strategiespiel zum unerwarteten Erfolg für Sega. Und ich verbrachte viele, viele Stunden damit.

The Walking Dead (Season 2)

Am Ende der ersten Staffel von The Walking Dead hatte ich Tränen in den Augen. Videospiele schaffen es selten, mich so mit den Charakteren mitfühlen zu lassen und dieser Moment war eines der wenigen Beispiele für eines, das es schaffte. Die zweite Staffel schlug eine andere Richtung ein. Weniger sensibel, weniger berührend und auch oft weniger elegant als die erste erzählte sie dennoch eine Geschichte von Abründen, die mich am Ende an einem weitaus dunkleren Ort zurück las, als es die erste konnte.

Walking Simulator 2015

Der Walking Simulator 2015 ist ein Witz. Er ist eine Parodie der Parodien des Simulator-Genres und gleichzeitig ein Kommentar zum unsäglichen Begriff "walking simulator" und entstand beim Ruin Jam - einem Gamejam, dessen Ziel es war Videospiele zu zerstören. Und obwohl es nur ein Witz ist, brachte mich das endlose nach Rechts laufen irgendwann in die selbe Stimmung wie die Spielfigur und meine Gedanken schweiften langsam ab, weg von den Banalitäten die das Spiel mir vorgab hin zu eigenen Gedanken. Habe ich eigentlich den Herd ausgemacht?

The Wolf Among Us

The Wolf Among Us begann als ein weiteres Telltale-Adventure im Schatten von The Walking Dead. Es dauerte etwa die halbe Staffel, bis das Team selbst ihre Richtung gefunden haben. Von da an wurde aus dem Cartoon-Noir-Murder-Mystery eine subtile Reflektion von Entscheidungsfreiheit und Videospielnarrativen, die mich noch jetzt, ein Jahr später, fasziniert.


Falls ihr jetzt immer noch nicht genug von Listen habt, dann sind hier noch ein paar unkommentierte Top-5-Listen:

Die fünf Spiele, die 2014 ganz oben auf meinem Pile of Shame beenden:

  • The Banner Saga
  • Child of Light
  • Dreamfall Chapters
  • Murdered: Soul Suspect
  • Hatoful Boyfriend

Die fünf Spiele, die ich gerne noch gespielt hätte:

  • Divinity: Original Sin
  • This War Of Mine
  • Wasteland 2
  • Crypt of the NecroDancer
  • Invisible, Inc.

Die fünf Spiele, die ich 2014 gespielt habe, die schon früher erschienen sind:

Die fünf Spiele, auf die ich mich 2015 besonders freue:

  • Life is Strange
  • Broken Age (Act II)
  • Shelter 2
  • Sunset
  • Rise of the Tomb Raider

...und zum Abschluss noch fünf weitere Texte, die ich dieses Jahr über Spiele geschrieben habe:


Falls ich eurer Meinung nach was vergessen habe, dann ändert das doch einfach: hier sind meine Wunschlisten auf Steam und Itch.io. Oder unterstützt mein Geschreibsel doch einfach auf Patreon.

by Sofakissen at January 02, 2015 08:53 PM

December 07, 2014

Mandelbroetchen

RetroReview – Wizardry I: Proving Grounds of the Mad Overlord

Wizardry I zählt nicht nur zu den Gründungsmüttern der Computerrollenspiele, sondern steht auch im Ruf, erbarmungslos schwierig zu sein. Zu recht? Nein, finde ich.

Wizardry: Proving Grounds of the Mad Overlord“ erschien 1981 für den Apple II und drei Jahre später in einer PC Version. Im Laufe der nächsten Jahre wurde das Spiel auf eine Vielzahl weiterer Systeme portiert, darunter C64, Mac, NES und gar den Gameboy Color. Die späteren Portierungen konnten bereits auf modernere Systeme zurückgreifen und boten teilweise Grafikerweiterungen wie Wandtexturen, die in der Originalversion nicht vorhanden waren. Selbst die PC Version bot schon einen Vollbildkerkermodus, der in der Apple II Version nur in einem Bruchteil des Bildschirms angezeigt wurde.

Apple 2 Version

Apple II Version

PC Version

PC Version

Die Leserin muss sich vor Augen halten, dass der Markt an Heimcomputerspielen 1981 noch sehr überschaubar war und die technischen Möglichkeiten sehr spärlich. 1980 wurde Pac-Man und 1981 Frogger veröffentlicht. Beide Spiele sind nicht für ihre Komplexität bekannt. Wizardry war im Heimcomputerbereich am ehesten noch mit Spielen wie Ultima, Rogue oder Zork vergleichbar, doch keines dieser Spiele bot eine 3D Ansicht des Dungeons und die Verwaltung einer kompletten Party. Wizardry orientierte sich im Grunddesign deswegen an Dungeons&Dragons, eines immer noch sehr erfolgreichen Pen&Paper Rollenspielsystems.

Ein nicht ganz so klassischer Klassiker
Wizardry ist ein Dungeon Crawler der alten Schule. Die Spielerin entwirft aus einem vorgegebenen Baukasten aus Völkern und Berufen eine Gruppe von sechs Heldinnen und schickt sie in einen zehnstöckigen Dungeon voller Monster und Schätze. Am Ende dieser Reise trifft sie auf einen großen Bösewicht (Werdna) und vernichtet ihn. Die Dungeongebiete sind fix vorgegeben und werden nicht etwa prozedural generiert. Die Monster und Gegenstände werden hingegen größtenteils zufällig ausgelost, wobei der Schwierigkeitsgrad mit jedem Dungeonlevel steigt.

An der Oberfläche wird per Textmenü die Lokalität für Befehle ausgesucht.

An der Oberfläche wird per Textmenü die Lokalität für Befehle ausgesucht.

Wizardry hat den Ruf, eines der schwierigsten Party-RPGs zu sein. Dies liegt in erster Linie daran, dass speichern und neuladen in Wizardry nicht funktioniert, denn das Spiel speichert automatisch bzw. die Welt ist persistent. Im Gegensatz zu vielen anderen Party-RPGs bedeutet der Tod einer Spielfigur, dass diese auch wirklich tot ist. Zwar besteht die Möglichkeit, einen Charakter im Tempel an der Oberfläche wieder zum Leben zu erwecken, doch dieser Versuch ist einerseits sehr teuer und muss andererseits nicht gelingen. Misslingt die Erweckung, so verfällt der Körper zu Asche. Der Aschehaufen hat einen letzten Versuch, noch einmal zum Leben erweckt zu werden. Misslingt auch dieser Versuch, so ist der Charakter für immer verloren. Die Wiederbelegung eines Charakters setzt voraus, dass es mindestens ein Charakter mit den Leichen zurück an die Oberfläche schafft. Sterben alle Charaktere im Dungeon, so bleiben sie zunächst dort liegen. Die Spielerin muss sich daraufhin mit einer neuen Truppe bis zum Punkt des Dungeons durchkämpfen, an dem die Leichen liegen. Dies kann mehrere Stunden hochleveln bedeuten, denn die neue Party startet wieder bei Null und der Dungeon resettet bei jeder Rückkehr zur Oberfläche. Selbst wenn sie mit der neuen Party die alte Party findet, kann es sein, dass ihre Gegenstände mittlerweile von Monstern ausgeraubt wurden. Häufig ist auch kein Gold vorhanden, um danach alle Charaktere wieder zum Leben zu erwecken.

In der Burg können Gegenstände eingekauft werden. Aber das wird teuer.

In der Burg können Gegenstände eingekauft werden. Aber das wird teuer.

Doch das ist nicht genug. Im Spiel gibt es Teleportationszaubersprüche und -fallen. Eine falsche Bedienung des Zauberspruchs oder eine nichtentschärfte Truhe kann dazu führen, dass die komplette Party in Stein materialisiert. Wenn dies passiert, sind alle Charaktere und damit alle Gegenstände und alles Gold unwiederbringlich verloren. Zusätzlich haben Charaktere in Wizardry ein Alter. Überschreiten sie eine gewisse Altersschwelle (Heilung benötigt Zeit), so verlieren sie Attribute und werden immer schwächer. Am Ende bleibt nur der Start mit neuen Charakteren.

All diese Zutaten erwecken den Eindruck, dass Wizardry ein sehr unbarmherziges Party-RPG ist. Das ist natürlich richtig, allerdings beruht das Missverständnis in meinen Augen auf einem entscheidenen Punkt: Wizardry ist nicht als Party-RPG konzipiert.

Mehr ein XCOM als ein Baldur’s Gate

Die  Charaktere führen genretypische Attribute.

Die Charaktere führen genretypische Attribute.

Wer Wizardry als typisches Party-RPG spielen möchte, wird es sehr schwer haben. Interessanter wird das Spiel, wenn man es als Dungeon Simulator begreift und sich selbst als Anführerin einer ganze Kompanie an Abenteurerinnen sieht. Wizardry hat mehr Parallelen zu Strategiespielen wie XCOM als zu klassischen Party-RPGs. Charaktere in Wizardry sind keine feste Gruppe, sondern sind wie Waffen oder Rüstungen eine Ressource, die es aufzubauen und zu verbessern gilt. Wer immer nur mit den gleichen sechs Spielfiguren in den Dungeon läuft, muss sich nicht wundern, wenn am Ende alle Arbeit umsonst war. Es ist ein Hochrisikoeinsatz, in einem Spiel, das eigentlich dazu gedacht ist, eine Kompanie an Figuren aufzustellen. Hierzu zählt auch, Figuren in immer neuen Kombinationen zu mischen, um junge Heldinnen durch alte Heldinnen schneller hochzuleveln oder auszurüsten.

In diesem Kontext wird auch verständlich, warum Charaktere in Wizardry bei einem Stufenaufstieg zufällige Boni und Mali erhalten. Tatsächlich können sich Spielfiguren bei einem Levelaufstieg verschlechtern, wenn sie vier Attributsenkungen erhalten, aber nur einen zusätzlichen Trefferpunkt. Wie in jeder Gruppe gibt es Figuren, die sich im Laufe der Zeit besser entwickeln als andere. Aufgabe der Spielerin ist es, diese Mischung aus Figuren zu verwalten und die besten Figuren über die Zeit herauszukristallisieren.

Unter dieser Prämisse ist der Verlust einer Spielfigur zwar immer noch schmerzvoll, aber nicht spielentscheidend. Es gibt auch kein „Game Over“, weil die Party im Dungeon verloren geht oder in Stein materialisiert, wie es selbst in der deutschsprachigen Wikipedia beschrieben wird. Nein, es ist nur ein Spielrückschlag in einem größeren Strategiespiel.

Keine Überraschungen im Dungeon

Kämpfe sind sehr übersichtlich gestaltet und enthalten sogar kleine Grafiken. (PC)

Kämpfe sind sehr übersichtlich gestaltet und enthalten sogar kleine Grafiken. (PC)

Die Wanderung im Dungeon ist aus heutiger Sicht Genrestandard, doch hat Wizardry sicherlich zur Schaffung dieses Standards beigetragen. Automapping existiert nicht. Dungeonkarten müssen selbst angefertigt werden und bestehen aus einem 20×20 Feldgitter über 10 Level verteilt. Interessantweise sind die einzelnen Levelkarten jedoch nicht immer mit Rändern ausgestattet. Wer die Karte am westlichen Ende verlässt, kommt am östlichen Ende wieder raus. Monster sind nicht aus der Ferne erkennbar. Die Felder, auf denen ein Kampf ausgelöst wird, sind teilweise vorgegeben und teilweise randomisiert. Es gibt ein paar Geheimtüren, Questitems und besondere Geschehnisse. Insgesamt ist der Dungeon jedoch relativ leer.

Die Kämpfe sind aufgrund des hohen Risikos eines Todes sehr spannend. Wie für die Wizardryreihe üblich, wird am Anfang einer Kampfrunde für alle Figuren eine Aktion festgelegt. Erst wenn alle Aktionen vergeben sind, werden diese tatsächlich ausgeführt. So ist bereits innerhalb einer einzelnen Runde ein Unsicherheitsfaktor eingebaut, denn es ist bis zum Schluss der Runde nicht klar, ob die Anzahl der Angriffe auf die feindliche Magierin reicht, um sie außer Gefecht zu setzen. Wer sichergehen will, schlägt lieber einmal zuviel zu.

Ein Schatz! Jetzt vorsichtig sein, denn eine einzige Falle kann den Tod aller Spielfiguren bedeuten.

Ein Schatz! Jetzt vorsichtig sein, denn eine einzige Falle kann den Tod aller Spielfiguren bedeuten.

Auffällig ist bei Kämpfen, dass Wizardry keine Fernwaffen kennt. Es existieren nur Nahkampfwaffen, Zaubersprüche und benutzbare Gegenstände. Bögen sucht die Spielerin vergeblich. Generell ist die Anzahl der Gegenstände relativ übersichtlich, doch das war bei Spielen dieser Zeit nicht ungewöhnlich. Bei Rüstungen kommt das D&D System zum tragen. So gilt eine Rüstungsklasse von 10 als besonders niedrig und ein Wert von -10 als besonders hoch. Weiterhin existiert kein Manasystem. Klerikerinnen und Magierinnen erhalten eine bestimmte Anzahl von verwendbaren Zaubersprüchen pro Zauberstufe. Die Zauber müssen tatsächlich mit ihrem Namen eingegeben werden. Allerdings ist dieses System immer noch besser als das Zahlensystem von Might and Magic I und II, denn Zaubernamen kann die Spielerin zumindest gut behalten.

Die Charaktergenerierung ist ebenfalls recht elementar. Sechs Attribute von Stärke bis I.Q. werden durch die Wahl aus fünf Mittelerdevölkern und zusätzlichen Bonuspunkten belegt. Die Bonuspunkte werden gewürfelt und können schon mal zwischen 5 und über 20 Punkten betragen. Der Unterschied ist so hoch, dass sich mehrmaliges Anlegen eines Charakters lohnt. Anhand der Attributwerte kann daraufhin eine aus acht Klassen ausgewählt werden. Manche Klassen haben so hohe Attributanforderungen, dass sie realistisch erst innerhalb des Spiels gewählt werden können. Klassen können in Wizardry jederzeit gewechselt werden, solange die Voraussetzungen vorhanden sind. Die Berufe schwanken genretypisch zwischen Kämperinnen, Diebinnen und Magierinnen/Klerikerinnen. Es existieren vier Basisberufe und vier „Eliteberufe“. Einzig die Kunoichi (Ninja) fällt etwas aus dem gewöhnlichen Raster, denn sie kämpft am besten völlig ohne Kleidung oder Waffen. Geschlechter existieren in Wizardry nicht.

Fazit

Hier hatten wir bei der Charaktergenerierung kein Würfelglück. Am besten erstellen wir einen neuen Charakter.

Hier hatten wir bei der Charaktergenerierung kein Würfelglück. Am besten erstellen wir einen neuen Charakter.

Wizardry ist ein klassisches Rollenspiel ohne ein klassisches Rollenspiel zu sein. Interpretiert man das Spiel als Party-RPG wird es extrem schwierig und durch den hohen Zufallsfaktor sehr unberechenbar. Sieht man in Wizardry hingegen ein Strategiespiel und einen Dungeonsimulator, so fällt der Schwierigkeitsgrad etwas ab. Anspruchsvoll bleibt es aber dennoch in jedem Fall.

Da der eigentliche Dungeon nur aus zehn Leveln besteht, verbringt die Spielerin die meiste Zeit des Spiels mit der Sortierung der Charaktere, der Kartographierung der Umgebung und der Sammlung von Erfahrung und Gegenstände durch den Kampf gegen Monster. Der Schwierigkeitsgrad der Level steigt schneller als in einem einzigen Durchlauf Erfahrung gesammelt werden könnte. Wird zusätzlich berücksichtigt, dass die Spielerin sehr viele Charaktere in den Dungeon schickt, so wird klar, dass immer wiederkehrende Durchläufe der gleichen Level zur Sammlung von Erfahrung Pflicht sind. Dieses Grinding wird nicht jeder Person gefallen.

Wizardry hat ein ohne Frage historische Bedeutung und sollte deswegen von jeder interessierten Spielerin einmal ein paar Stunden gespielt werden. Spieltechnisch wird aus heutiger Sicht abgesehen vom Metaspiel allerdings nicht besonders viel geboten. Als Ausgleich sind die implementierten Regeln gut durchdacht und liefern ein solides Gesamtwerk. Wie auch bei anderen Spielereihen gilt: die portieren NES-Versionen sind wesentlich spielfreundlicher, allerdings geht dabei der Charme des Originals verloren.


by mandelbroetchen at December 07, 2014 05:06 PM

December 01, 2014

Mandelbroetchen

RetroReview – Might and Magic III: Isles of Terra

Mit Might and Magic III wagte sich New World Computing an eine Neuerfindung der Serie. Schöner, einstiegsfreundlicher und actionreicher sollte es sein. Kann das zwischen Schwergewichten wie Wizardry VI und Ultima VI klappen?

Im Jahre 1991, und damit drei Jahre nach dem Erscheinen von MM2, wurde Might and Magic III: Isles of Terra für MS-DOS, Amiga und den Mac veröffentlicht. Weiterhin erschien eine stark zensierte SNES Version und eine Mega Drive Version. Die Vorgängerinnen Might and Magic I und Might and Magic II habe ich bereits getestet.

Zum Grundprinzip des Spiels lässt sich nicht viel Neues sagen. Wie in so gut wie allen Rollenspielen seiner Zeit steuert die Spielerin eine Gruppe von Abenteurerinnen, die auf der Suche nach Erfahrung, Gold und Gegenständen zahlreiche Aufgaben erfüllen. Might and Magic legte hierbei stets Wert auf eine nichtlineare Handlung, die irgendwann Züge von Science Fiction annimmt.

Technische Glanzleistung auf dem PC
Einer der großen Pluspunkte von MM3 liegt in einer gelungenen Präsentation. Die Grafik erstrahlt auf dem PC nicht nur in 256 Farben, sondern ist in den einzelnen Gebieten erfrischend abwechslungsreich. Zum ersten Mal im rundenbasierten Genre stellte sich bei mir während der Bewegung ein Gefühl von Immersion ein. Ein Schritt in eine Richtung wirkt nicht mehr wie ein komplett neuer Bildschirmaufbau, der mit dem letzten nur spiellogisch etwas zu tun hat. Das liegt unter anderem daran, dass noch in MM2 einige Randbereiche des Sichtfelds nicht mehr mitgezeichnet wurden, obwohl sie hätten da sein müssen. In MM3 sind alle Randbereiche vorhanden – und es sieht sehr schön aus.

Bei Nachteinbruch erreichen wir die Küstenstadt Baywatch.

Bei Nachteinbruch erreichen wir die Küstenstadt Baywatch.

Monster sind detailliert gezeichnet und animiert. Sie wirken hierbei nicht wie fehlplatzierte 2D Grafiken, sondern bedienen sich auch einigen Perspektiventricks, um die Illusion einer 3D Grafik zu verstärken. Sehr hilfreich ist ebenso, dass Gegnerinnen nun bereits aus der Ferne gesehen und mit Fernwaffen bekämpft werden können. Plötzlich auftauchende Monsterhorden gehören der Vergangenheit an.

Die Soundeffekte sind für die Zeit in Ordnung. Erwähnenswert ist die Musikuntermalung durch Midi-Stücke, die hörenswerte Ergebnisse liefern. Allerdings nutzen sich diese nach ein paar Stunden ab. Einstiegsfreundlich ist die neu integrierte Mausunterstützung, mit der alle Aktionen in der Spielwelt durchgeführt werden können. Im fortgeschrittenen Spielablauf wird die Spielerin aber schnell feststellen, dass sehr viele Befehlsketten (z.B. Heilzauber) per Tastaturbefehle wesentlich effizienter durchgeführt werden können.

Dungeons sind wie die Außenwelt sehr abwechslungsreich und stimmungsvoll.

Dungeons sind wie die Außenwelt sehr abwechslungsreich und stimmungsvoll.

Technisch gibt es an MM3 also nichts auszusetzen. Es setzt sich hiermit weit von anderen Spielen seiner Art ab. Die Engine war ihrer Zeit so weit voraus, dass sie auch noch in den beiden Nachfolgespielen genutzt werden sollte.

Leicht erweiterte Charaktergenerierung
MM3 bleibt seinen Wurzeln treu und ändert keine grundlegenden Eigenschaften der Charaktergenerierung. Spielfiguren erhalten gewürfelte Werte der Attribute Macht, Intelligenz, Persönlichkeit, Ausdauer, Geschwindigkeit, Genauigkeit und Glück. Aus diesen Parametern leiten sich zusammen mit Herkunft und Klasse alle Zweitattribute ab. Während des Spielverlaufs werden dies Grundwerte nicht etwas bei einem Stufenaufstieg verbessert, sondern durch das Finden von Brunnen, Fässern und anderen Gegenständen. Starke Charakterverbesserungen durch Erkundung waren in der Might and Magic Reihe immer ein Alleinstellungsmerkmal. Wie schon in MM2 gibt es zusätzliche Sekundärskills wie Navigation, Kartographie oder Body Building, die bei NPCs gekauft werden können. Diese sind nun auch nicht mehr auf zwei pro Charakter begrenzt, wodurch weiteres Verbesserungspotential besteht.

Training erhöht Trefferpunkte, Zauberpunkte und Angriffe, aber keine Attribute.

Training erhöht Trefferpunkte, Zauberpunkte und Angriffe, aber keine Attribute.

MM1 startete mit den Charakterklassen Ritterin, Paladin, Bogenschützin, Diebin, Klerikerin und Zauberin. MM2 fügte dann noch Kunoichi und Barbarin hinzu. In der Bewertung von MM2 kritisierte ich, dass die beiden neuen Charakterklassen keinen wirklichen Mehrwert in das Spiel brachten. Die Barbarin wurde in MM3 tatsächlich leicht aufgewertet. Sie erhält nun im Laufe der Charakterlevel schneller zusätzliche Angriffe als der Ritter und wird damit zu einem starken Offensivcharakter.

Auch mit MM3 sind wieder zwei neue Berufszweige hinzugekommen. Grundlage für die beiden neuen Klassen ist die neue Magieart Naturmagie. Naturmagie ist ein etwas seltsamer Mix aus Teilen der bereits bestehenden beiden Magiearten arkane Magie (Zauberinnen) und Heilungsmagie (Klerikerinnen), angereichert um einzelne neue Zaubersprüche wie Wasserwandeln. Analog zu den anderen Magiearten gibt es eine hauptberufliche Magierin (Druidin) und einen Kampf/Zauber Mischcharakter (Waldläuferin/Rangerin). Insbesondere die Rangerin ist damit ein konsequenter Mischberuf, der alle Magiearten und durchschnittliche Kampffertigkeiten verbindet.

Das Character Sheet ist zwar funktional, aber auch sehr unorganisiert.

Das Character Sheet ist zwar funktional, aber auch sehr unorganisiert.

Schon wieder geht MM3 damit einen Weg, der neue Berufszweige hinzufügt, die aber kaum grundsätzliche Änderungen des Spielflusses nach sich ziehen. Die einzelnen neuen Zaubersprüche sind durchaus sinnvoll, fügen dem Spiel aber keine neue Dimension hinzu. Gewünscht hätte ich mir neue Spiellogiken wie Beschwörungen, Tarnungen, Illusionen oder gar Gedankenkontrolle.

Die Kunst des Kampfes
MM2 hatte seine Höhepunkte in der Inszenierung von Massenschlachten. Während sich in MM2 über 200 Gegnerinnen der Gruppe entgegen stellen konnten, so sind es in MM3 gerade mal drei Monster.

Monster können bereits aus der Entfernung angegriffen werden.

Monster können bereits aus der Entfernung angegriffen werden.

Natürlich muss man da ein wenig differenzieren. In MM2 gab es keinerlei Raumlogik. Kämpfe entstanden, wenn die Party ein vermeintlich leeres Feld betrat. Alle Monster des Kampfes stürmten dann gleichzeitig auf die Gruppe zu. In MM3 laufen Kämpfe so ab, dass eine bestimmte Anzahl von Monstern auf der Karte verteilt sind und mehrere Felder belegen. Diese Monster sind schon aus der Weite erkennbar und können durch Bögen oder Zaubersprüche angegriffen werden (natürlich wehren sie sich auch mit gleichen Mitteln). Das bedeutet, dass Schlachten in MM3 nahtlos in die normale Kartenerkundung integriert sind. Die Party kann sich entscheiden anzugreifen, ihre eigene Position auf der Karte strategisch zu ändern oder sich zurückzuziehen.

Erst wenn sie mit einer Gruppe Monster ein Feld teilen, ist kein Rückzug aus der Schlacht mehr möglich, bis die Gegnerinnen besiegt sind. Wird eine der maximal drei Gegnerinnen getötet, rückt ein wartendes Monster aus einem Nebenfeld nach. Im Prinzip ist hiermit das MM2 Modell nachgebildet, welches ebenfalls nur eine bestimme Anzahl Monster gleichzeitig im Nahkampf angreifen ließ. Allerdings werden Monsterhorden nie so riesig, dass Großschlachten möglich sind. Wenn sich die Spielerin beim Ausweichen nicht zu ungeschickt anstellt, muss sie selten mehr als 5-10 Monster am Stück töten. Weiterhin ist sehr auffallend, dass in MM3 in einem Kartengebiet in der Regel nur zwei unterschiedliche Monstertypen auftauchen. Da schränkt die Abwechslung weiter ein.

Im Nahkampf wechselt das Spiel in die übliche Rundenlogik.

Im Nahkampf wechselt das Spiel in die übliche Rundenlogik.

Als Rückschritt empfinde ich die fehlenden Informationen bei einem Schlagaustausch. In MM2 waren die Kampfinformationen noch in Textform. So konnte für jeden Angriff die Anzahl der Versuche, die Treffer und auch der Schaden numerisch exakt angezeigt werden. Resistenzen von Monstern wurden ebenso angezeigt. In MM3 werden diese Texte durch kurze Schadensbitmaps ersetzt. Wird ein Monster durch Feuer verletzt, erscheint eine kurze Feuergrafik. Es gibt aber keinen Hinweis mehr darauf, ob meine Ritterin nun 100 Schadenspunkte oder nur einen Schadenspunkt verursacht hat; und ob das an der Resistenz des Monsters liegt oder einfach nur am Pech beim Würfeln. Da von Gegnerinnen auch keine Trefferpunkte angezeigt werden, kann hier stellenweise nur geraten werden. Ein wenig klarer wird die Situation erst durch einen Zauberspruch, mit dem die Parameter eines Monsters angezeigt werden können.

Als Ausgleich spielen sich die Kämpfe wesentlich flüssiger und sind wegen der kaum vorhandenen Gegnerinnen-KI strategisch leichter zu bewältigen als noch in den Vorgängerinnen. Insbesondere das Ausweichen auf andere Kartenfelder überfordert die KI völlig. Sie sucht im Prinzip nur den kürzesten Weg zur Party.

Schönere Karten und Automapping
Die Außenwelt von MM3 ist sehr abwechslungsreich und sieht sehr schön aus. War die Welt in den Vorgängerinnen noch auf einen großen Kontinenten beschränkt, so bietet MM3 gleich mehrere Kontinente mit unterschiedlichen Klimazonen. Dungeons sind jetzt wesentlich weitläufiger, bieten aber im Gegensatz nicht so viel komprimierten Inhalt. Insgesamt hält sich die Fülle in Dungeons also die Waage.

Die automatische Karte ist nun endlich intuitiv benutzbar.

Die automatische Karte ist nun endlich intuitiv benutzbar.

Grundsätzlich sind die Außen- und Innenkarten nun nicht mehr als Irrgarten aufgebaut, sondern simulieren eine natürliche Umgebung. Zwar gibt es immer noch geheime Türen, die bei geeignetem Skill oder Zauberspruch offenbart werden, aber die Anzahl ist deutlich zurückgegangen. MM3 nervt die Spielerin also nicht mehr mit einseitig durchgängigen Wänden hinter jeder zweiten Abbiegung, die nur durch Ausprobieren gefunden werden können.

Die Automappingfunktion ist nun noch weiterentwickelter als in MM2. Für jedes Feld wird erstmals der Bodentyp erfasst, was einer Orientierung auf der Karte ungemein hilft. Ebenso werden statische Objekte wie Städte oder Hütten eingezeichnet. Unschön ist weiterhin, dass keine manuellen Kommentare möglich sind und sich die Zeichenfunktion auf das aktuelle Feld beschränkt. Obwohl die Party jederzeit mehrere Felder nach vorne blicken kann, werden diese von der Karte erst erfasst, wenn man sie durchschreitet. Das führt dazu, dass bestimmte Barrieren wie Gebirge nicht eingezeichnet werden, die Spielerin auf der Karte aber auch nicht erkennen kann, ob das fehlende Feld nun unpassierbar ist oder bei der Erkundung schlicht vergessen wurde.

Das Inventar wirkt etwas lieblos und wird schnell unübersichtlich.

Das Inventar wirkt etwas lieblos und wird schnell unübersichtlich.

Dynamisch generierte Gegenstände
MM3 ist das erste Spiel der Serie, das Gegenstände prozedural erzeugt, die aus mehreren Attributen zusammengesetzt sind. So wird ein „giant flaming steel hammer of turn undead“ besonders viel physischen Schaden verursachen, zusätzlich Feuerschaden bieten und bei Benutzung als Gegenstand Untote vernichten. Das Gegenstandssystem ist damit wesentlich flexibler als die bisherigen fixen Systeme der Vorgängerinnen. Allerdings werden keine Bonusweiden wie in der Diabloserie geschaffen. Die Boni beschränken sich fast immer auf zusätzlichen Schaden bei Waffen bzw. zusätzlicher Rüstung bei sonstigen Gegenständen, plus einem benutzbaren Zauber, der aber identisch zu dem Zauber ist, den zauberfähige Charaktere lernen können. Letztlich gilt auch bei den Gegenständen: quantitativer Zuwachs, aber keine qualitative Weiterentwicklung des Spiels.

Fazit
Might and Magic III: Isles of Terra gründet eine neue Ära der Might and Magic Reihe und war ein wichtiger Schritt für modernere Rollenspiele am PC. Die Präsentation ist ausgezeichnet. Die Benutzerinnenführung ist dank Mausunterstützung einstiegsfreundlich. Das Kampfsystem wurde entschlackt, ebenso ist die labyrinthartige Struktur voller geheimer Gänge auf der Weltkarte aufgegeben worden. Beide Zeitfresser nehmen dutzende von Routinestunden aus der Spielspaßgleichung.

Generell ist MM3 der erste Teil der Serie, der sich sehr flüssig spielt und schnelle Erfolgserlebnisse bietet. Der Schwierigkeitsgrad ist im Vergleich zu den Vorgängerinnen gesunken, befindet sich aber immer noch auf einem herausfordernden Niveau.

Kurzum: MM3 macht auch als Spiel für Zwischendurch einfach Spaß. Also Retrospiel dürfte MM3 einigen Spielerinnen gefallen, die sich von der textlastigen und statischen Präsentation der Vorgängerinnen abschrecken ließen. Im Gegenzug sind einige Hardcore Retrogamerinnen eventuell mit MM2 besser bedient, welches meiner Meinung nach das anspruchsvollere Kampfsystem bot.


by mandelbroetchen at December 01, 2014 03:31 PM

November 27, 2014

Mandelbroetchen

RetroReview – Might and Magic II: Gates to Another World

Nachdem ich bereits den ersten Teil der Might and Magic Reihe behandelt habe, schauen wir uns in diesem Review die Nachfolgerin genauer an. Hatte New World Computing aus den Schwächen der Vorgängerin gelernt und ein besseres Spiel auf den Markt gebracht? Ich denke: ja.

„Might and Magic II: Gates to Another World“ (kurz: MM2) erschien 1988 vom Apple II, über den C64 und Amiga bis zu PC/DOS auf nahezu allen gängigen Plattformen. Wie schon beim ersten Teil wurden spezielle Programmversionen für Spielekonsolen wie den SNES und die Sony Genesis angefertigt. Im weiteren Verlauf dieses Reviews beziehen sich Bemerkungen auf die DOS Version des Spiels. Generell sind die Versionen recht ähnlich, wenn wir mal davon absehen, dass in der Nintendoversion alle alkoholischen Getränke entfernt wurden.

MM2 wurde im gleichen Jahr wie die großen Konkurrenten Wizardry V und Ultima V veröffentlicht, war beiden Spielen aber grafisch überlegen. So konnte die Might and Magic Reihe vor allem ihren Ruf als einstiegsfreundliches Action-RPG weiter stärken.

Zeitliche Einordnung von Might and Magic II unter die großen Rollenspielserien

Zeitliche Einordnung von Might and Magic II unter die großen Rollenspielserien

In vielen Dingen ein Might and Magic 2.0
Schon zu Beginn des Spiels wird schnell klar, dass MM2 im Prinzip ein MM1 mit zusätzlich genutzter Entwicklungszeit ist. Neben einer höchst ähnlichen Hintergrundgeschichte sind auch die technischen Wurzeln beinahe identisch. Das Spielprinzip blieb seinen Wurzeln treu: mit einer sechsköpfigen Party wird in einer First Person Ansicht eine vollumfängliche Welt mit Außengebieten und Dungeons erkundet, es werden Monster getötet, Gegenstände gesammelt und Aufgaben erfüllt.

Gebiete haben nun Boden- und Himmelstexturen.

Gebiete haben nun Boden- und Himmelstexturen.

Als Ausgleich für fehlende Neuerungen gibt es von allem ein wenig mehr. Die Grafiken sind nun detaillierter und farbenfroher. Die teils wirre Bildschirmaufteilung der Vorgängerin wurde durch ein konsequentes Rahmendesign ersetzt. Monster und NPCs bieten nun Animationen und insbesondere der Kampfbildschirm ist nun wesentlich aufgeräumter und übersichtlicher.

Ein paar Neuerungen haben dennoch den Weg in MM2 gefunden.

Zwei neue Klassen und unvollständige Zaubersprüche
Die Charaktererstellung wurde im Wesen beibehalten. Tatsächlich kann die Spielerin ihre Party aus dem ersten Spiel importieren. Neu hinzugekommen sind jedoch die beiden zur Auswahl stehenden Klassen Kunoichi (männlich: Ninja) und Barbarin.

Kunoichi sind in der MM-Welt Diebinnen, die ein Teil ihrer Diebesfähigkeiten gegen die Möglichkeit auf kritische Treffer im Kampf eintauschen. Wer sich allerdings mehr strategische Tiefe in Kämpfen erhofft, wird enttäuscht sein. Anders als in der Wizardryreihe gibt es kein implementiertes Tarnungskonzept. Eine Kunoichi besitzt nur eine gewisse Wahrscheinlichkeit in Kämpfen doppelten Schaden zu verursachen.

Wer in dieser Handstellung würfeln kann, erhält Bonuspunkte.

Wer in dieser Handstellung würfeln kann, erhält Bonuspunkte.

Barbarinnen sind hingegen Kriegerinnen, die mehr Trefferpunkt erhalten, aber als Ausgleich nur leichte Rüstungen tragen können. Auch in diesem Fall wird spieltechnisch kein Mehrwert durch eine neue Kampfmöglichkeit geschaffen. Ebenso bleibt fraglich, ob ein paar Trefferpunkte mehr den Nachteil des höheren Schadens bei leichter Rüstung in langatmigen Kämpfen wirklich ausgleichen.

Bei der Klassenwahl bleibt deswegen ein leichter Nachgeschmack. Sicherlich wollte New World Computing mit den zusätzlichen Klassen einen großen Kritikpunkt von MM1 ausräumen. Bei sechs Charakteren nur sechs mögliche Berufe anzubieten, förderte nicht gerade die Wiederspielbarkeit von MM1. Die Wizardry-Reihe bot schon seit dem ersten Teil acht mögliche Klassen an. Leider wirken die neuen Klassen in MM2 jedoch nicht wie ein großer Mehrwert für das Spiel.

Dieses Schild könnte man in MM2 auf jedes Feld stellen.

Dieses Schild könnte man in MM2 auf jedes Feld stellen.

Interessanter ist hingegen, dass Zaubersprüche nun nicht automatisch per Levelaufstieg erlangt werden. Zwar gilt dies für einen Grundstock von Sprüchen, aber die wirklich mächtigen Zaubersprüche müssen entweder in Städten gekauft oder in Dungeons gefunden werden. Dies bietet durchaus den ein oder anderen Anreiz, die Gegend genauer zu erkunden.

Bezahlte Söldnerinnen als Aushilfe
MM2 war das erste Spiel der Reihe, welches die Möglichkeit schuf, maximal zwei Söldnerinnen der Gruppe hinzuzufügen. Folglich ist die Maximalanzahl der Charaktere in der Party auf acht Personen gestiegen. Natürlich wollen diese NPCs für ihre Tätigkeit bezahlt werden. Hilfreich können sie bei harten Kämpfen jedoch trotzdem sein. Die zusätzlichen Charaktere sind allerdings durch das Spiel aus einer festen Auswahl vorgegeben und aus den gleichen Kombinationen von Herkunft und Beruf gebildet. Besondere Kampffertigkeiten oder Überraschungen haben sie also nicht zu bieten.

Die Einführung von Sekundärfähigkeiten
Die Möglichkeiten der Spielerin, nach der Charaktergenerierung noch Einfluss auf das Wesen der Spielfigur zu nehmen, waren im ersten Teil sehr stark begrenzt. Zwar können einzelne Attributwerte an Brunnen oder ähnlichen Objekten erhöht werden, doch grundlegende Weiterentwicklungen der Figuren gab es nicht. In MM2 ist es nun erstmals möglich, Sonderfertigkeiten zu erlangen. Diese binären Eigenschaftsschalter können Fertigkeiten wie das Durchschreiten von Wäldern, die Erhöhung von Zauberpunkten oder das Herunterhandeln von Händlerinnenpreisen beinhalten. Die Beschränkung von maximal zwei Sekundärfähigkeiten pro Charakter wirkt etwas künstlich, aber ist sicherlich dem Balancing nicht abträglich.

Automapping als Spielspaßsegen
Ja, ich mag das Zeichnen von Karten auf Papier und hatte deswegen mit MM1 viel Freude. Nun kann ich aber verstehen, wenn andere Menschen lieber auf eine digitale Karte zurückgreifen. Weiterhin war die Spielerin durch den Platzbedarf an Block und Lineal dazu gezwungen, MM1 ausschließlich Zuhause am Desktoprechner zu spielen. MM2 bietet hier nun die Erlösung. Sobald ein Charakter mit der Kartographiefähigkeit in der Party ist, beginnt eine spielinterne Karte, sich selbst zu zeichnen, wie es mittlerweile in allen RPGs Standard ist.

AU-TO-MAP-PING!

AU-TO-MAP-PING!

Perfekt ist diese Lösung immer noch nicht, denn jenseits von Wänden werden keine interessanten Objekte eingezeichnet. Da es keine Option einer manuellen Kommentierung der Karte gibt, bleibt der Spielerin mit schlechtem Gedächtnis doch wieder nur die Notation von Koordinaten auf Papier – oder sie schaut ins allwissende Internet. Gleiches gilt im übrigen für die Zaubersprüche. Sie werden kryptisch über Zahlenketten 2-3, 4-1 oder 6-2 eingegeben. Ohne Handbuch hatte die Spielerin früher das Nachsehen.

Mehr, mehr, … MEHR
Spielerinnen, die im ersten Teil schon an acht Dämoninnen verzweifelten, dürfen sich freuen: in MM2 sind den Monsterhorden kaum noch Grenzen gesetzt. 255 Gegnerinnen, von denen jede einzelne Flächenschaden in der ganzen Party verursachen kann? Kein Problem. Ihr habt euch auf 100 Monster runtergekämpft, die aber aus einer Laune heraus weitere 80 Monster Verstärkung rufen? Auch das kann passieren.

Für MM2 nur eine Zwischenmahlzeit: 6 Mumien stellen sich uns entgegen.

Für MM2 nur eine Zwischenmahlzeit: 6 Mumien stellen sich uns entgegen.

Wenn ein Might and Magic Teil als Hack&Slash betitelt werden sollte, dann MM2! Ich habe vermutlich in keinem anderen Spiel jemals so viele Kreaturen getötet. Die schiere Anzahl von Gegnerinnen stellt die Spielerin vor ganz pragmatische Grenzen. Da die Kämpfe rundenbasiert verlaufen und jede Kampfnachricht eine gewisse Zeit auf dem Bildschirm verbleibt, um lesbar zu sein, kann ein einzelner Kampf schon mal 30-60 Minuten in Anspruch nehmen. Zu dumm, wenn das letzte Monster die Party versteinert und man einen alten Spielstand laden darf…

Nichtsdestotrotz sind die Kämpfe in MM2 eine der Highlights der gesamten Serie. Die Schlachten spielen sich durch die größere Feindanzahl und die erweiterten Zaubersprüche wesentlich dynamischer und spannender als noch im ersten Teil. Zugleich ist es der letzte Teil der Serie, der solch strategische Tiefe in der Positionierung und Anwahl von eigenen Figuren und Monstern bietet. Ab MM3 wurde der Kampfmodus generalüberholt und erlaubt nur noch drei(!) gleichzeitige Gegnerinnen auf einem Feld.

Natürlich wurden auch andere Teile des Spiels stark erweitert. So wurde ein dynamisches +X System bei Gegenständen eingeführt, die die Grundwerte des Gegenstands verbessern. Es gibt neue Zaubersprüche, neue Monster und die Anzahl von Quests wurde mehr als verdoppelt.

Fazit
Might and Magic II ist das bessere Might and Magic I und ein herausragender Teil der Serie. Dies liegt nicht zuletzt daran, dass die Serie mit dem dritten Teil in eine neue Entwicklungsrichtung gezogen wurde. Wer sich an der etwas sterilen Präsentation mit nüchternen Grafiken und kaum Soundunterstützung nicht stört, findet ein spieltechnisch durchdachtes und herausforderndes Rollenspiel der ganz alten Schule.

Klarer Höhepunkt von MM2 sind die Massenschlachten mit mehr als 200 Gegnerinnen und der strategischen Tiefe von rundenbasierten Textkämpfen. Die integrierten Neuerungen sind größtenteils sinnvoll und lassen die Reise erahnen, die New World Computing mit den nächsten Teilen noch gehen wird. Weniger positiv ist das veraltete Speichersystem, bei dem nur beim Betreten einer Wirtschaft das Spiel gesichert werden kann. Wer sich daran stört: heutige Emulatoren bieten die Option, jederzeit Speicherabbilder zu verwalten.

Ich spreche dem zweiten Teil eine klare Spielempfehlung und einen hohen Retrofaktor aus.

Hübsche Grafiken fördernd den Entdeckungsdrang. Aber es lauert nur Tod.

Hübsche Grafiken fördernd den Entdeckungsdrang. Aber es lauert nur Tod.


by mandelbroetchen at November 27, 2014 03:37 PM

September 23, 2014

sofakissen

Und wenn ich groß bin werde ich Videospieljournalist

Ich spielte immer selbst Videospiele, seit ich die gerenderten Welten von Riven entdeckte und mir ohne Anleitung oder Tutorial die Komplexität von Civilization 2 erschloss. Metal Gear Solid für mich das beeindruckendste Spiel das ich bis dato erlebte und als ich das erste mal Counter-Strike sah fand ich es irgendwie fand. Irgendwann entwickelte ich mal ganz passable Fähigkeiten in in Quake 3 Arena und Tony Hawk's Pro Skater 3.

Und dann hatte ich irgendwie keine Zeit, keine Lust, kein Interesse mehr.

Bis ich Anfang 2013 eine Woche krank geschrieben im Bett lag und Gemini Rue spielte. Und endlich das viel gelobte Portal. Und Dear Esther. Und weiter, quer durch den Pile of Shame, der entstanden war.

Mit dem wiederentdeckten Interesse fand ich auch den neuen, neuen Videospieljournalismus. Texte von Leigh Alexander, Mattie Brice oder Cara Ellisson oder die Videos von Christopher Franklin waren das interessanteste, spannendste, faszinierendste was ich seit langem im Internet entdeckt hatte.

Und dann spielte ich Spiele wie Shelter und Gone Home und bemerkte wie sich meine Perspektive, mein Denken über Videospiele veränderte und fing schließlich selbst an über Videospiele zu schreiben.

Irgendwann 2013 wurden es dann so viele Texte, dass ich einen eigenen Ort für sie abseits meines Blogs suchte. So entstand herzteile, wo ich hauptsächlich schreibe.

Seit dem schrieb ich so einiges.

Über Shelter und die Schönheit des (nicht) Spielens, The Stanley Parable und Videospielejournalismus, Master Reboot und den Tod in der Zeit der Digitalisierung und warum Adventures nicht nur aus Rätseln bestehen.

Ich versuchte herauszufinden, waru mich in Don't Move, Banished und Long Live The Queen so viel Zeit verbrachte. Warum ich eigentlich viel zu wenig Zeit hatte, um die Vielfalt des Ludum Dare wirklich zu erleben und daher kurze Spiele schätze.

Ich entdeckte die vielen Arten, auf die Spiele auch politisch sein und Überwachung darstellen können, sei es in Nothing To Hide oder Republique.

Ich besuchte und beschrieb Events wie die A Maze, die Join oder die gamescom und werde sicher noch öfters solche Events besuchen und beschreiben.

Zuletzt rückte die Gaming community, oder das was sich so nennt, in den Fokus - vor allem wegen ihrer gewalttätigkeit. Und was "Gamer" überhaupt sein sollen, können, wollen. Und ich startete einen neuen Podcast zu diesen Themen.

Bei den vielen Ideen, die ich hatte und habe entstand ein Tumblr, auf dem ich ebenfalls über Spiele schreibe und Gedankenfragmente sammle - die manchmal auch etwas ausführlicher werden, als gedacht.

Ich fühle mich immer noch jedes mal ungaublich geehrt, wenn auf Superlevel oder Critical Distance ein Link erscheint, wenn jemand einfach in einem Tweet erzählt, dass sie_r einen Text mochten oder ein Tumblr-Post Reationen erzeugt. Wenn ich selbstbewusster wäre, würde ich vermutlich sogar selbst sagen, dass meine Texte ganz gut sind.

Ich habe zu Videospielen mehr geschrieben, als ich jemals zu irgendwas anderem geschrieben habe. Und ich würde gerne noch so viel mehr machen. Ich habe lange, fast fertige Texte, die in nächster Zeit noch erscheinen. Ich habe fast ebenso lange unfertige Texte, die vielleicht nie erscheinen.

Ich würde gerne die Podcast-Formate ausbauen und die Ideen für Video-Formate aus meinem Kopf auf einen Bildschirm bringen.

Ich würde gerne mehr Zeit zum Spielen haben, und dann noch mal mehr Zeit um über das gespielte nachzudenken und dnan noch mal noch viel mehr Zeit, um die Gedanken zu formulieren und aufzuschreiben.

Ich hätte gerne wieder eine aktuelle Konsole oder einen besseren PC. Eine neue Videoschnittsoftware, die ein klein bisschen mehr kann und eine neue Kamera, die ein klein bisschen besser ist.

Worauf ich heimlich hinaus will: Wenn ihr das auch alles gerne sehen würdet - und lieber früher als später - könnt ihr mich auf Patreon unterstützen. Ich bin für jeden Dollar wirklich dankbar. Und falls ihr mal einen Text über Videospiele braucht, dann schreibt mir doch eine Mail an hallo@raummaschine.de. Ich bin nämlich auch käuflich.

Und wenn ich groß bin, werde ich ja vielleicht Videospieljournalist. Oder Astronaut.

by Sofakissen at September 23, 2014 04:53 PM

September 19, 2014

sofakissen

Eine Anleitung für mehr Zufriedenheit

Es ist Freitag Abend. Für die meisten von uns heißt das, dass wir gerade fünf Tage gearbeitet haben. Aufgestanden, angezogen, im öffentlichen Nahverkehr und am Schreibtisch im Büro gesessen. Und wieder zurück. Viel zu früh beginnend und viel zu spät endend, so wie jeder Wochentag.

Irgendwo war heute eine Demo, oder so etwas ähnliches, bei der noch Leute gebraucht wurden oder worden wären. Das habe ich gelesen, als ich kurz mal auf mein Smartphone geschaut habe. Danach habe ich dann weiter gearbeitet. Ich bin dann stattdessen direkt nach der Arbeit einkaufen gegangen, im Edeka um die Ecke. Dann muss ich später nicht mehr aus der Wohnung nachdem ich schon aus meiner Hose bin, dachte ich mir.

Hähnchenschenkel mit weißen Bohnen, mein absolutes "feel good" Essen. Die Einkaufsliste ist kurz und die Zubereitung einfach, trotzdem fühlt sich das Essen fancy an. Früher, als ich noch mehr weniger Fleisch gegessen habe, da waren mein "feel good" Essen mit Couscous gefüllte Paprikaschoten, dazu Zucchini und Aubergine. Aber in letzter Zeit habe ich mich nun einmal sehr in dieses einfache Geflügelessen verliebt, auch wenn ich dafür Hähnchenschenkel von Wiesenhof kaufen muss, weil es keine anderen gab.

Bohnen aus der Dose müssen abgewaschen werden, das habe ich mal gelernt. Im Sieb unter dem Wasserhahn schäumen sie ein wenig, was diesen Hinweis zu bestätigen scheint. Chilischoten entkernen ist eigentlich ganz leicht. Ende ab- und längs aufschneiden und dann mit einem Teelöffel oder dem Messer Fleisch und Kerne in einer Bewegung herausschauen.

Basilikumstengel sind mindestens genau so gut wie die Blätter, davon ein paar klein Hacken. Eigentlich benötige ich in diesem Schritt des Rezeptes nur die Stengel, aber weil ich etwas faul bin hacke ich auch ein paar Blätter mir. Das schadet aber auch nicht. Oliven, es gehen auch schwarze, aber eigentlich die leicht violetten Catalana Oliven. Ich drücke die Kerne heraus, weil ich versehentlich nicht die entkernten gekauft habe. Das sieht dann etwas matschig aus, aber wird eh gehackt.

Und dann vermengt. Alles zusammen mit Olivenöl und den Bohnen in eine Auflaufform oder einen Brüter. Hähnchen abwaschen und von außen mir Öl, Salz, Pfeffer und Rosmarin würzen und auf die Bohnen legen. Das war es schon. Schön einfach.

Das ganze kommt dann 90 Minuten in den auf 180 Grad vorgeheizten Ofen. Viel Zeit zum Warten. In der Zeit lässt sich zum Beispiel Musik hören, vielleicht Warpaint oder die Swans. Etwas melancholisch und düsteres bietet sich an, um die Woche zu beenden und langsam ins Wochenende zu entgleiten. Um den Moment noch etwas mehr zu zelebrieren höre ich eine Schallplatte.

90 Minuten sind viel Zeit, viel mehr als eine Seite einer Schallplatte mit Musik füllen kann. Ich entscheide mich für ein Nickerchen nach dem anstrengenden Tag, immerhin bin ich um 6:45 aufgestanden. 10 Minuten sind für's "napping" angeblich gut, habe ich mal gehört. Ich stelle den Wecker seit geraumer Zeit immer auf 12 Minuten. So eine Woche ist anstrengend, dann ist das schon in Ordnung mal zu schlafen. Auch, zweimal beim Wecker auf "snooze" zu drücken.

Der ziemlich billige Weißwein ist inzwischen angenehm kalt und nicht so schlecht wie ich befüchtet hatte. Das Fleisch war leider etwas unterwürzt oder zu kurz im Ofen oder so. Jedenfalls nicht perfekt. Ich habe auch den Rosmarin vergessen, aber der ist nicht so schlimm. Die wunderbaren, leicht krossen Bohnen waren dafür doch perfekt.

Freitag Abends einen Film schauen, das bietet sich zum Abschalten an. Vielleicht Alien. Ein nahezu perfekt inszenierter Film. Ich habe ihn aber neulich schon gesehen, also schaue ich Moon. Der ist auch ziemlich gut. Mir war nach Science Fiction. Alltag hatte ich schon genug. Noch lieber würde ich eigentlich etwas stumpferes, bunteres schauen, aber ich habe die Superhelden-Filme von Marvel in der letzten Woche schon alle gesehen, außer Thor 2, den fand ich langweilig und habe ihn ausgeschaltet.

Später gönne ich mir einen zweiten Film, Spike Jonzes Her und dabei etwas Ben & Jerry. Es ist wie ein Kindertraum, dieses absurd leckere Eis. Ungebackener Keksteig in der fluffigen Eiscreme, fast zu gut um wahr zu sein. Auch ziemlich teuer, ein ziemlicher Luxus. Fast 6 Euro!

Aber wenigstens weiß ich dann, wofür ich am Montag morgen um 6:45 wieder arbeiten gehe.

by Sofakissen at September 19, 2014 11:25 PM

August 06, 2014

sofakissen

Entworfen, Verworfen

Bloggen ist nicht leicht. Bis ein Text zur Veröffentlichung bereit ist, ist es ein langer, mühsamer Weg. Das größte Hindernis auf dem Weg dorthin? Vermutlich würden die meisten "Ideenmangel" antworten. Da würde ich widersprechen, aber das ist ein anderes Thema. Was ist das, was mich am meisten vom Bloggen abhält?

Entwürfe.

Ein halbes Dutzend Rezepte, teilweise mit gar nicht mal so schlechten Fotos für mein gar nicht mehr existierendes Kochblog. Ein paar angefangene Zeilen für Musikempfehlungen, die auf stereolog.net landen sollten. Zwei kurze Blogposts über den Umzug nach Berlin. 679 Wörter über Kill la Kill, 685 Wörter zu Kentucky Route Zero und ganze 1520 Wörter widmetet ich bisher ShenMue. Das alles liegt in Dateien mit der Endung .markdown und verschiedenen WordPress-Blogs.

Nichts davon habe ich bisher veröffentlicht. Das meiste davon werde ich vermutlich niemals veröffentlichen.

Weggeworfen.

Meine Texte über meine irrationale Liebe zu Schallplatten oder die eigentliche Faszination von Adventure-Spielen lagen ähnlich lang herum. Gerade diese beiden Texte waren welche, die mir irgendwie wichtig waren. Warum, das weiß ich nicht. Vielleicht, weil ich zu beiden Dingen eine merkwürdige Zuneigung empfinde, die ich rational nur zum Teil erklären kann. Vielleicht war diese übermäßige Zuneigung der Grund, dass ich anfing zu verkopft an die Texte zu gehen. Es waren Themen die mir wichtig waren, also sollten die Texte ihnen gerecht werden. Korrekturlesen. Gegenlesen. Drüberlesen. Nochmal lesen. Dieser Satz ist etwas komisch, diese Metapher etwas schief und den Witz versteht kein Mensch. Aber ich finde den Witz so gut, also lasse ich ihn vielleicht drin. Und die Metapher, das ist das was ich empfinde. Vielleicht streiche ich einfach beide Absätze. Repeat.

Am Ende zwang ich mich bei beiden Texten, sie zu veröffentlichen. Scheiß drauf, dachte ich mir. Und wirklich: worüber machte ich mir so einen Kopf? Erstens liest ja eh kaum jemand das was ich schreibe und zum anderen waren die Themen auf der einen Seite banal und auf der anderen persönlich - wozu also einen anderen Anspruch als meinen eigenen erfüllen?

Und natürlich bin ich mit beiden Texten unzufrieden. Aber veröffentlicht ist veröffentlicht und die Textdateien auf meinem Computer werde ich nie wieder ansehen, das weiß ich.

Rausgeworfen.

Der Post, den ich unter dem Titel Gedankenvetzen ins Internet warf, war eben genau das: ein Gedankenfetzen. Deshalb ist der Titel auch so schrecklich. (Ich bin nicht gut mit Titeln, erst recht nicht spontan). Ich saß da, sponn einen Gedanken laut vor mich hin, griff einen anderen im Gespräch auf, fand keine Diskussions_partnerin und diskutierte also mit mir selbst und meiner Tastatur. Zwei Bier später war der Text auf meinem Blog.

Was war hier anders?

Vielleicht das offensichtliche - ein spontaner Gedanke, eine spontane Gelegenheit und ein kleines bisschen Alkohol. Keine Chance, Zeit oder Fähigkeit, die Texte übermäßig zu zerdenken.

Quote me: Denken ist der Tod des Blogs.

Ende letzten Jahres habe ich herzteile ins Netz geworfen und konnte sogar ein paar tolle Menschen überzeugen mit mir zusammen Inhalte auf diese Seite zu werfen. Entstanden ist die Idee eines Spieleblogs teilweise aus der verbesserungswürdigen Situation des deutschsprachigen Spieleblogs an sich - es gibt zu wenige, und davon zu wenige gute. Aber der erste Gedanke war ehrlicherweise einfach, dass sich bei mir eine Menge Texte zu spielen angesammelt hatten. The Stanley Parable, Shelter, The Wolf Among Us, Brothers Contrast oder ganz Allgemein zum Sterben in Spielen... erst spielte ich, dann dachte ich, dann schrub ich auf. Und veröffentlichte. Und dachte nicht nach.

Das ist den Texten anzumerken, sie sind sprachlich sicherlich alles andere als poliert, auf jeden Fall nicht so poliert wie ich es meinem eigenen Sprachvermögen seit den guten Noten im Deutschunterricht (hihi) zutrauen würde. Sie sind sicherlich auch nicht so zuende gedacht, wie es meinem Intellekt möglich wäre (hoho). Aber sie sind Texte mit einem Anfang und einem Ende und einem Veröffentlichungsdatum. Merkwürdigerweise sind sie aber auch Texte, die ich nicht völlig furchtbar finde. Ich finde sie nicht großartig, sicher nicht, dafür bin ich zu selbst... "kritisch" (haha). Aber ich denke nicht weiter über sie nach.

Im Gegensatz zu den Texten, zu deren Veröffentlichung ich mich Zwang, weil die Alternative war sie niemals zu veröffentlichen, habe ich diese Texte wirklich veröffentlicht. Irgendwie damit abgeschlossen.

Veröffentlicht.

Von den vielen Blogs, auf denen ich viel zu selten schreibe, gibt es zwei, auf denen ich dieses Gefühl regelmäßig habe: das Musik-Blog Stereolog und der Tumblr Sofakissen spielt. Bei beiden Blogs schaffe ich es, Texte zu beginnen, zu beenden und zu veröffentlichen. Beide Blogs schaffen es, dass ich Tetxte beginne, beende und veröffentliche.

Vielleicht liegt es bei bei diesen beiden Plattformen an der Kürze der Beiträge, die bei beidem sicherlich auch mal etwas länger werden kann, aber nicht muss. Vielleicht liegt es an der Unverbindlichkeit. Ein Blog für Musikempfehlungen, was willst du da falsch machen? Ein Tumblr als Notizblock zu den Spielen, die ich gerade spiele, was soll da irgendwer erwarten? Vielleicht ist es auch eben dieser (fehlende) Erwartungedruck von außen. Dem Twitter-Account von @stereolog folgen knapp 30 Menschen, dem Tumblr etwa 20.

Ich kann es nicht genau an etwas festmachen, aber es ist eine angenehme Ungewissheit. Lange hat mir Bloggen nicht mehr so viel Spaß gemacht wie auf diesen beiden Plattformen. Das heißt nicht, dass die anderen mir egal sind. Ganz im Gegenteil. Die Entwürfe, die ich oben nannte, werde ich zumindest teilweise sicher irgendwann veröffentlichen. Wahrscheinlich werde ich nicht damit zufrieden sein. Wahrscheinlich werden sie ein paar Leser_innen ganz gut finden und andere total schlecht. Und sicherlich wird wieder kaum jemand mir die Meinung dazu sagen und ich werde einfach nur viel zu viel über etwas nachgedacht haben, über ein paar Buchstaben, die irgendwo durch das unendlich Internet schwirren und irgendwann bei einem Festplattencrash oder einem halbherzigen Serverumzog verloren gehen.

Lost like tears in rain, ihr kennt das ja. Der Holzwurm des digitalen Zeitalters. Blogs: overthinking for the masses. Das öffentliche Poesie-Album zum hemmungslosen rumschwurbeln. Oder vielleicht auch nur das dritte Glas Rotwein zu viel oder zu wenig. Je nachdem. Hey, whatever, nevermind.

Schweife ich ab? Ja, ich schweife ab. Aber immerhin hab ich's mal irgendwo aufgeschrieben.

Publish Now.

P.S.: Falls ihr welche findet: Tippfehler dürft ihr behalten.

P.P.S.: Mein Patreon dürft ihr gerne unterstützen. Ab 15$ mach ich mindestens eines meiner vernachlässigten Blogs wieder auf. Versprochen!

by Sofakissen at August 06, 2014 08:27 PM

July 12, 2014

Farthen

Dysphoria

Ihr kennt dieses Gefühl, wenn ihr eure Stimme aufnehmt und dann anhört und sie euch komisch und ungewohnt vorkommt?

Stellt euch vor, dass zu dem komisch und ungewohnt auch noch ein abgrundtiefer Hass dazukommt, der unbeschreiblich groß ist. Der euch wünschen lässt, ihr wärt nie geboren und würdet nicht existieren. "Die Stimme passt nicht zu mir, das ist nicht meine".

Ihr kennt das, wenn ihr euch im Spiegel anschaut und es ist irgendwie grad nicht so toll? Ihr seid irgendwie unglücklich mit eurem Aussehen, aber wisst nicht so recht, wie ihr das ändern wollt?

Stellt euch vor das geht schon euer ganzes Leben so. Nur, dass, egal was ihr macht, das Gefühl nicht weggeht. "So seh' ich nicht aus, das bin nicht ich."

Kennt ihr das, wenn ihr mal tagelang nicht geduscht habt und sich alles furchtbar eklig anfühlt und ihr euch dringend irgendwie sauber machen müsst, bevor irgendwas anderes auch nur möglich ist?

Stellt euch vor, nach dem Duschen ist das Gefühl nicht weg. "So fühl' ich mich doch nicht an. Das kann nicht sein."

Das bin nicht ich, das muss wer anders sein. Und das ist die widerlichste, hässlichste, ekligste Person auf der ganzen Welt.

by fina at July 12, 2014 05:39 PM

July 08, 2014

Farthen

Und du?

Ich verfalle in Panik, als ich mitbekomme, was jetzt passiert. Schnell was ausdenken. Was will ich erzählen? Wer hört zu, was möchte ich preisgeben? Ich formuliere die Worte in meinem Kopf. Zu gestellt? Zu förmlich? Zu uninteressant? Jetzt muss es schnell gehen, ich habe nicht viel Zeit.

Ich sitze da und zittere innerlich. Panisch gehe ich noch mal die Worte durch, die ich gleich sagen werde. Versuche, sie auswendig aufsagen zu können. Ich muss mich konzentrieren, kann kaum den anderen zuhören, was die sagen.

Immer diese Frage, was erzähle ich eigentlich? Was interessiert die Leute, was möchte ich erzählen und preisgeben? Aber eigentlich ist es mir egal. Hauptsache ich bin gleich durch. Hab es hinter mir.

Die Person neben mir sagt was. Sie scheint sicher, wählt gute Worte. Nach der Hälfte höre ich nicht mehr zu, da kann ich mir eh nichts abschauen. Ich gehe zum hundersten Mal meine Wörter durch. Ich weiß nicht, ob das, was ich da sagen werde, gut ist. Vermutlich nicht. Aber jetzt bleibt eh keine Zeit mehr.

Die Person neben mir verstummt, setzt sich hin. Ich stehe auf, schaue in den Raum. Der ganze Saal schaut mich an. Mir direkt ins Gesicht. Ich versuche es zu ignorieren. Ich sage meine auswendig gelernten Sätze. Viel zu schnell natürlich.

Ich setze mich sofort wieder hin. Bleibe einen Moment angespannt sitzen. Warte, bis die Person neben mir anfängt. Erst dann die Erleichterung. Ich hab es geschafft. Überstanden. Es ist vorbei. Gut fühle ich mich nicht, mit dem, was ich da gesagt habe. Aber erleichtert. Irgendwie durchgekommen.

Und das jedes Mal. Ich hasse Vorstellungsrunden.

by fina at July 08, 2014 01:08 PM

June 30, 2014

felis

Warum Frauen*quoten keine unfaire Benachteiligung für Männer* darstellen

Ich habe kürzlich den Fehler begangen mich auf einer Familienfeier auf eine Diskussion über Feminismus mit meinem Bruder einzulassen1. Irgendwann im Laufe dieser Diskussion, die für jeden Bingospieler eine wahre Freude gewesen wäre, kam die Sprache auch auf die „böse Frauen*quote“, und zwar speziell auf die Quotierung von Kursplätzen in einem Jurastudiengang. Die* Schwester* eines* Freundes* des* Cousins* der* Mutter* seiner* Freundin*2, so mein Bruder, studiere nämlich Jura und habe zu Beginn jedes Semesters die freie Wahl der Kursplätze, weil diese quotiert seien, während ihre* männlichen* Kommilitonen* um jeden Kursplatz heftig kämpfen müssten und das sei ja wohl unfair.

Ich möchte hier erstmal kurz meine Erzählung unterbrechen und einwerfen, dass ich eine Quotierung nicht für grundsätzlich unproblematisch und das richtige Mittel gegen die Unterrepräsentierung von weiblichen* Menschen in bestimmten Bereichen halte. Ein großes Problem einer genderbasierten Quote sehe ich zum Beispiel darin, dass die Ansätze in der Regel von einem binären Gendermodell ausgehen und damit die Lebensrealitäten von trans*, inter* und genderqueeren Personen außer Acht lassen. Ganz abgesehen davon werden bei einer Genderquotierung häufig andere nichtgenderbasierte Diskriminierungsstrukturen vernachlässigt, was zur Verschlechterung der Situation für andere Marginalisierte führen kann. Trotz dieser Einwände halte ich eine genderbasierte Quote situationsabhängig für eine sinnvolle antidiskriminatorische Maßnahme. Genauer möchte ich an dieser Stelle darauf gar nicht eingehen, sondern mich jetzt auf das „Argument“ mit der* Jurastudentin* konzentrieren.

Lasst uns also zunächst einmal zwei Jurastudierende der fraglichen Fakultät betrachten: eine* weibliche* und einen* männlichen*, Alex und Chris3. Vergleichen wir nun deren Situation ausschließlich bezüglich der Kurswahl, so erscheinen die Auswirkungen der Quotierung zunächst tatsächlich reichlich ungerecht. Alex, als eine der wenigen weiblichen* Jurastudierenden, bekommt einen Platz in jedem Kurs, in dem sie* sich einträgt, während Chris größte Mühe hat, überhaupt auf seine* Semesterwochenstunden zu kommen und am Ende Kurse belegen muss, die er* gar nicht belegen wollte. Unfair, oder? Und alles nur, weil Alex eine* Frau* ist!

Nun lasst uns mal einen Schritt zurück machen und uns anschauen, wie der Studiumsalltag von Chris und Alex sonst so aussieht. Chris hat es tatsächlich zu Alex in den Kurs geschafft und die beiden behandeln dort jetzt im Unterricht fiktive Übungsfälle, in denen Männer* erfolgreiche Geschäftsleute, Anwälte und Richter sind, während Frauen* für Haushalt Kinder und Äußerlichkeiten zuständig sind (Link). Alex muss also nicht nur zum millionsten Mal brav über die Einparkwitzchen ihrer* Kommilitonen* lachen, sondern auch damit leben, dass die Herren* Juradozenten* ihr* eigentlich eher einen Platz hinterm Herd als in ihren Kursen wünschen. Ob das wohl fair ist?

Das Ende des Semesters nähert sich und Alex hat eine ziemliche Menge Prüfungen vor sich. Wie Chris büffelt sie* fleißig, doch am Ende schneidet sie* überall ein wenig schlechter ab. Ob es damit zu tun hat, dass Frauen* durchschnittlich schlechter abschneiden4 im Jurastudium? Vielleicht hat sie* tatsächlich aufgrund ihres* Genders schlechtere Chancen bei den Noten? Das klingt nun aber schon auch ziemlich unfair! Was war da am Anfang des Semesters nochmal mit der Kurswahl das Problem…? Ach, ja.

Jetzt lasst uns doch mal kurz überlegen, wie es eigentlich dazu kommt, dass Alex es bei der Kurswahl so viel einfacher hatte als Chris. Was besagt denn die Quotenregelung, die dafür sorgt, dass Alex leichter in die Kurse kommt? Vermutlich ist dort vorgeschrieben, dass eine gewisse Prozentzahl der Studierenden in den Kursen weiblich* sein soll (und nicht, dass Frauen* bei der Kurswahl grundsätzlich bevorzugt werden!). Optimistisch nehme ich für unser Beispiel mal eine fiktive vorgeschriebene Quote von 35% an. Wären also 35% aller Jurastudierenden an Alex‘ Uni weiblich*, so wären vermutlich auch rund 35% der Kursbewerber*innen für jeden Kurs weiblich*. Das würde für Alex allerdings bedeuten, dass sie* sich mit ihren* Mitbewerberinnen* ebenso um die Plätze streiten müsste, wie Chris mit seinen* 65% männlichen* Mitbewerbern*. Der Vorteil für Alex entsteht also am Ende daraus, dass es deutlich weniger weibliche* Jurastudierende gibt, als die Quote vorsieht. Über die Gründe dafür lässt sich natürlich streiten, aber nehmen wir einfach mal an, dass es (zum Teil) an der strukturellen Benachteiligung von Frauen* im Jurastusium liegt.

Alex wird also bei der Kurswahl bevorzugt, weil sie* insgesamt strukturell benachteiligt ist. Nun. Was war daran nochmal unfair?

  1. wenn ihr euch fragt, warum das ein Fehler sein soll, dann habt ihr das entweder noch nie versucht oder eine (in dieser Hinsicht) äußerst beneidenswerte Familie
  2. Bekanntschaftgrad zu stilistischen Zwecken _etwas_ übertrieben
  3. Namen frei erfunden
  4. Warnung für den Link: zum Teil Reproduktion von rassistischen, sexistischen und binaristischen Vorurteilen

by felis at June 30, 2014 05:35 PM

June 27, 2014

Farthen

Genderperformance

Ich rede hier über meine eigenen Erfahrungen. Diese decken sich oft nicht vollständig mit denen anderer. Nur weil ich etwas auf eine bestimmte Art und Weise wahrnehme, tun das nicht alle. Fragt im Zweifel nach.

Wenn ihr "Don't call me dude" noch nicht gelesen habt, solltet ihr das wohl vor dem Lesen dieses Blogposts tun.

Es könnte alles so einfach sein. Ist es aber nicht. Leider.

Kurze Backstory: Ich war auf dem femcamp Wien letztes Wochenende. Es war sehr schön. Die Atmosphäre war größtenteils sehr angenehm und rücksichtsvoll. Im Vergleich zu anderen Veranstaltungen, auf denen ich so war sogar durchaus herausragend. Vielleicht schreib ich da auch noch mal was schönes zu.

Aber es sind die kleinen Sachen, die anstrengend sind. Ein "er" hier, ein "ihm" dort, es passiert. Ich würde sagen, ich verzeihe es gewissermaßen. Vielleicht habe ich es auch mal gemacht bei wem. Unbewusst. Manchmal wurde es bemerkt und kurz um Entschuldigung gebeten, danke dafür. Bedeutet viel. Sehr viel.

Es gab so Pronomenbuttons. Da konnten Menschen sich eine Farbe entsprechend des gewünschten Pronomens aussuchen, Namen draufschreiben und einen Button draus machen, zum anstecken. Das war eine sehr schöne Idee (auch wenn die Buttons halt für manche Namen ein bisschen zu klein waren). Ich hab mir auch so einen gemacht. Der war rosa und das bedeutete, dass Menschen mich fragen sollen, mit was für Pronomen ich gern angesprochen werden möchte. Das hat… bedingt funktioniert. Also, ich wurde genau zwei Mal gefragt so weit ich mich erinnern kann. Einmal ein "richtiges" Pronomen benutzt. Dafür von so 5-6 Leuten misgendered. 5:1? Schlechtes Verhältnis. Nunja. (Und das waren nur die Momente, die ich mitbekommen habe)

Wenn ich misgendered werde sage ich meistens nichts. Oft bin ich überrascht, traurig, überfordert, gehe weg, wechsle das Thema. Ich freue mich über Menschen, die dann einschreiten, aber ich selber kann es nicht. Ich traue mich nicht. Ich will das auch nicht immer Thema machen. Sonst bin ich wieder die selbstzentrierte Person, die nur über sien* Gender spricht. Sich immer zum Thema macht. Das will ich nicht. (Mehr dazu hab ich hier schon mal aufgeschrieben: Aufmerksamkeit und Pronomen). Noch schlimmer als nichts sagen ist übrigens, ein Drama draus zu machen. Kurz ansprechen, um Entschuldigung bitten, weiter machen. Kein Gespräch. Keine minutenlange Reden. Kurz, knapp, fertig, alles gut.

Ich bin nicht mal böse. Es passiert. Aber es ist die Nachricht, die dahinter steckt, die mich ein bisschen erschreckt. Wie ich wahrgenommen werde.

Ich habe, zumindest größtenteils, mich nicht besonders auffällig gekleidet. Kein Nagellack, Haare grad eher in so einem ausgewaschenen Blau und nicht mehr knallila. Ich war nicht sonderlich abweichend von der "männlichen" (sic) Norm gekleidet. Und das hat sich gleich sichtbar gemacht.

Denn es ist nicht der explizite Wunsch, den ich durch diesen farbigen Button dargestellt habe, der zählt, sondern die Außenwahrnehmung. Natürlich in Stereotypen. Klar, manche Menschen haben es erkannt und respektiert, aber längst nicht alle. Und dabei gibt es unendlich viele Gründe, warum Menschen eventuell mit einem bestimmten Pronomen angesprochen werden möchten, die sich nicht unbedingt auch sonst äußerlich zeigen.

Das ist schade. Es ist ein Zeichen, dass zumindest ein großer Teil der "queerfeministischen Peergroup" gar nicht so queerfeministisch ist. Und ne Menge internalisierter Denkmuster inne hat. Selbst auf den expliziten Wunsch hin nicht drauf achten.

Ich werde draus lernen. Ich werde immer "anders" sein. Einen Sonderfall darstellen in dem Haufen Normzeugs, das uns umgibt. Und wer "anders" sein will, muss sich auch anders präsentieren. Sonst wird sier* nicht so wahrgenommen.

Ich will gar nicht anders sein. Ich will eigentlich nur so akzeptiert werden, wie ich bin, ohne mich verstellen zu müssen, oder besonders darauf zu achten, wie ich wahrgenommen werde, um so gesehen zu werden, wie ich bin.

Es ist das Nachgeben zu einer Anspruchshaltung, die ohne Recht existiert. Ich sollte mich nicht so kleiden und präsentieren müssen, wie ihr das wollt, nur um akzeptiert zu werden. Aber ich muss es trotzdem. Anders funktioniert es wohl nicht. Schon ein bisschen traurig, oder?

Was das femcamp angeht: Ich werde wohl, so weit es mir möglich ist, Orgaaufgaben für das nächste femcamp übernehmen. Wenn ihr ähnliche Erfahrungen gemacht habt beziehungsweise euch dieses Thema wichtig ist und ihr Ideen habt, wie sich dieses in einer Barcampatmosphäre besser hervorheben und integrieren lässt, schreibt mich an per Twitter @farthen oder per Mail

by fina at June 27, 2014 11:07 AM

June 22, 2014

sofakissen

Gedankenvetzen

Twitter und die Rechtschreibung, ein immer wiederkehrendes Thema. Das unangenehme Gefühl, wenn du einen Tweet mit einem Tippfelher nicht mehr korrigieren kannst, weil er schon Retweetet wurde. Oder diese Hemmung einen mit Tippfehler zu retweeten. Ich kenne das und ich kenne viele, die das auch kennen.

Den Oberlehrer war vermutlich einer der ersten Accounts die ich jemals geblockt habe. Ein Account, der verdeutlicht, was oft und zu Recht verächtlich als "deutsch" beschrieben wird. Häme gegen Fehler von anderen aufgrund des eigenen Wissens. Der scherzhafte Begriff des "grammar Nazi" begleitet Mailinglisten, Foren und soziale Netze seit jeher. Hart wie Kruppstahl und wortgewandt wie der Duden, Korrektur mit rollendem "R".

"Korrekte" Rechtschreibung, was auch immer das sein soll, ist vielen offenbar eine wahre Herzensangelegenheit. Was falsch geschrieben ist, ist dann halt vor allem erst mal falsch.

Kreativer Umgang mit Sprache fällt aus dieser Einordnung heraus. Die meisten Formen der geschlechtergerechten Sprache beispielsweise wären demnach kein Ausdruck eines Misstandes, sondern halt vor allem erst mal falsch und so argumentieren ja auch viele. Das Brechen der Regeln ist nötig um ihre Limitationen zu umgehen und sie weiterzuentwickeln. Es ist nicht so lange falsch, bis er als richtig anerkannt wird.

Und allein die unzähligen Anglizismen, die sich mit der Verbreitung des Internet etabliert haben. Der Duden als fein säuberlich dokumentierter Maßsstab für "korrekte" Sprache zieht hier immer wieder nach. Der Duden passt sich der Sprache der Menschen an, nicht umgekehrt. Deshalb kann ich auch schon mal in offiziell als korrekt anerkanntem Deutsch über Moorhühner getwittert haben.

Sprache wird von Menschen gemacht, nicht von Gremien. Sprache beeinflusst unser Denken und dieses Denken kann sich nicht von elitären Gatekeepern einschränken lassen. Dass eine genormte Version der Deutschen Sprache™ definiert wird - geschenkt. Dass darauf bestanden wird, dass nur sich legitim äußern kann, wer sich an diese hält? Nein.

Rechtschreibung schafft Hierarchien. Rassistisch, klassistisch, ableistisch. Dennoch wird auch in awaren, akademischen und_oder linken Kreisen die Rechtschreibung immer wieder ohne direkten Bezug zum Inhalt hervorgehoben. Haha, ein Schreibfehler in der großen, konservativen Tageszeitung. Haha, der Nazi twittert ja gar kein "richtiges" Deutsch. Ausgerechnet der! Sind die aber alle doof, was? Haha.

Rechtschreibung als Selbstzweck, eingepackt in ein gutgebiletes Selbstverständnis. Wie Deutschlehrer_innen beim Diktat in der Schule: "Du kannst das doch besser, du bist doch klug!" Gib dir halt mal mehr Mühe. Oder bist du etwa auch doof? Haha. Schön entspanntes Klima in der Blogosphere.

Es sollte eigentlich offensichtlich sein, dass Texte anhand der "Korrektheit" ihrer Rechtschreibung zu bewerten irgendwie Mist ist. Dass den Inhalt an seiner Form zu messen mitunter ziemlich problematisch ist. Wer das dennoch tut oder es gar als Argument gegen die geäußerten Inhalte nutzt derailt von Anfang an. Kannst du schon machen, ist dann halt eher scheiße.

Rechtschreibung ist nicht gleich Sprache und eine "richtige" Rechtschreibung ist nicht nötig um einen Gedanken zu formulieren. Scheiß auf Rechtschtschreibung. Sprache ist im Fluss, reißt die Dämme ein. Und weiter als das führt mich dieser Gedankenfetzen jetzt gerade auch nicht.

P.S.: Alle Tipp-, Grammatik-, Komma- und Rechtschreibfehler sind beabsichtig. #yolo

by Sofakissen at June 22, 2014 11:02 AM

June 10, 2014

sofakissen

Krautkrepierer

Das KrautCrowdfunding der Krautreporter läuft noch wenige Tage, das Scheitern ist aber schon mehr oder weniger absehbar. Vermutlich musste es scheitern, das war schon von vornherein (mehr oder weniger) absehbar. Sei es das zu hoch gesteckte Ziel, die wenig überzeugende Präsentation, die mangelnde Kritikfähigkeit, die wenig diverse personelle Ausrichtung, die technischen Probleme... und selbst wenn das Ziel noch erreicht wird, ist die Frage, ob die Krautreporter ihr erklärtes Versprechen erfüllen können.

Weil wir aber alle von einer noch viel freieren Presse träumen, von unabhängigeren Journalist_innen und innovativen Medien, können wir das Scheitern des ambitionierten Projektes natürlich nicht hinnehmen. Oder so. Manchen ist es nicht zu peinlich, das drohende Scheitern auf uns alle abzuwälzen, die das Projekt nicht unterstützt haben. Es wird mühsam das Bild konstruiert, die Zukunft des unabhängigen Journalismus würde davon abhängen, ob das Startup von ein paar erfahrenen Pressemenschen ein Erfolg wird.

Das ist natürlich Unfug. Das von Anfang an absehbar gewesene Scheitern ist vollständig selbstverschuldet.

Kleinvieh hätte Mist gemacht

Die Krautreporter setzen auf eine eigene Crowdfunding-Plattform. Ich frage mich, ob die Macher_innen sich vorher jemals auch nur ein einziges erfolgreiches Projekt bei Kickstarter angeschaut haben. Es wirkt eher so, als hätten sie nur den Wikipedia-Artikel gelesen. Es fängt an bei der kompletten Finanzierung vom Start weg statt einer Mindestfinanzierung. Kein noch so detailliert dargelegter Finanzplan nimmt die Größe der Summe von fast einer Millionen Euro.

Der größte Fehler war wohl das Minimum für Spenden bei 60€ anzusetzen. 60€ mag für einer berufstätigen Journalist_in nicht sonderlich viel erscheinen, für die meisten Menschen ist das ein beachtlicher Batzen Geld. Ich bin mir sicher, die Krautreporter hätten ihr Ziel erreicht, wenn kleinere Spenden möglich gewesen wären. 5 Euro hier, 20 Euro da. Vorab für die Idee und später vielleicht doch noch ein Abo. Jetzt mal ein paar kleine Beträge um mal zu schauen, ob das dann am Ende wirklich was wird, statt sich direkt für ein ganzes Jahr zu verpflichten.

Mit dem Zwangs-Abo macht Krautreporter klar, dass es weniger um Unterstützung geht, sondern darum, von vornherein eine zukünftige Leserschaft auszubauen. Da wird der "lächerliche Fünfer pro Monat" bemüht, aber realitätsfern übersehen, dass die drei Zwanziger am Monatsanfang alles andere als lächerlich sind. Unterstützung um des Unterstützens Willens wollen die Krautreporter nicht. Ich weiß nicht, ob das wirklich Absicht war, das Ergebnis ist eine Trennung zwischen Produzierenden und Konsumierenden, die auch in weiteren Texten auf der Seite aufgebaut wird: "Wir sind die Reporter, ihr seid die Crowd." Und alle so: Yeah!

Das hat jetzt also offenbar nicht so gut funktioniert. Statt auf eine breite Basis wird in den letzten Tagen des Fundings eher auf Großsponsoren gesetzt.

50.000€ auf einmal um 999 Abos verschenken zu können? Was unterscheidet einen Großsponsor von Werbung? Wird so ein Sponsor wirklich keinerlei Einfluss auf den Inhalt oder den Verlauf das Projekts haben können oder wollen? Warum sollte dann irgendwer so viel Geld auf das Projekt werfen? Fragen über Fragen, die letztendlich aber auch nicht mehr wirklich interessieren.

Ideenlos in die Zukunft

Das Geld, das die Reporter von uns haben wollen ist für das Magazin, die Inhalte die sie Produzieren wollen. Ein Magazin mit Artikeln in den klassischen Ressorts. Natürlich top recherchiert, versprechen sie. Natürlich mit Hintergrundberichten, die es sonst nicht gibt, behaupten sie. Natürlich unabhängig von Außen, glauben sie.

Das sind alles ganze nette Ideen, aber keine Innovation. Wird es spannende Podcast-Formate oder multimediale Aufarbeitungen zur demonstration politischer Probleme geben? Seh ich irgendwie nicht, die nie zu vor da gewesene Idee. Den Journalismus 2.0. Eigentlich seh ich da nur mehr vom alten, aber diesmal halt selbstständig mit einer GmbH statt in einem Anstellungsverhältnis mit Springer oder Holtzbrinck.

Eine Paywall, eine Finanzierung abseits von Werbung, das ist doch keine Innovation in sich. Das zu glauben und zu behaupten ist ein wenig naiv. Ja, natürlich wäre alles schöner ohne Werbung und den ganzen Konsum und so... für das Geld, das den Krautreportern nicht genug war les ich aber lieber weiter The Magazine auf dem iPad und schaue die Videoanalysen von Anita Sarkeesian auf YouTube.

Selbstkritik im Elfenbeinturm

Neben der technischen und konzeptionellen Kritik war ein Vorwurf schwer von der Hand zu weisen: Die generisch maskulin gegenderten Krautreporter sind nicht sonderlich divers, sondern sehr männlich und sehr, sehr weiß. Gut gebildet und vermutlich auch gut bezahlt. Entsprechend eingeschränkt ist von vornherein die Perspektive, die inhaltlich möglich sein kann.

Auch wenn die fehlende Diversity ein großer Kritikpunkt war ist sie nicht der Grund für das drohende Scheitern. Sollten die Krautreporter zu Krautkrepierern werden, dann weil sie zu wenig visionär sind, zu reaktionär, zu konservativ, zu wenig bereit zum Risiko, zu offline.

Des einen Leid, des anderen Freud'

Während die Krautreporter ihrem Ziel nicht näher kommen und sich die Kritiker_innen schon längst desinteressiert abwendeten erwachen die Kritiker_innen der Kritiker_innen und wissen natürlich genau was vor sich geht.

Das nun wirklich nicht mehr als ganz nette Projekt wird zur einzigen Hoffnung der freien Presse erhoben, oder so. Weil wir die Leute ja alle schon kennen, weil wir professionelle Journalist_innen brauchen und weil die Werbe- und Medienindustrie die Inhalte, die Geschichte und überhaupt sogar auch die Mondlandung manipuliert. Sie merken, liebe Leser_innen, ich übertreibe. Aber das tun ja viele Befürworter_innen der Krautreporter auch.

Dann wird dieses angeblich so wichtige Projekt lieber als Projektionsfläche genutzt, und zwar um unterschwellig den überkritischen Nörgler_innen ins Gewissen zu reden, die ja immer nur destruktiv drauf sind - was natürlich von Feminismus bis Critical Whiteness alles mit meint, was neuerdings gern "Social Justice Warrior" genannt wird.

Ätschibätsch, selber Schuld

Ich finde die Idee eines Leser_innen-finanzierten Magazins nicht schlecht und die Resonanz zeigt, dass Krautreporter ohne weiteres ein Erfolg hätte sein können. Aber dem Erfolg wurden selbst so viele Steine in den Weg gelegt, dass ich nur ein klein wenig paranoider sein müsste, um mir sicher zu sein, dass die Krautreporter eine Verschwörung der klassischen Verlagslandschaft zur Diskreditierung der Netzgemeinde™ gewesen sind.

Wer Vertrauen im Wert von über einer halben Millionen Euro vorgeschossen bekommt und das dann zum historisches Scheitern hochstilisiert hat jeden Bezug zur Realität verloren. Realitätsfernen und elitären Journalismus haben wir schon. Journalismus ohne neue Ideen, ohne Mut, ohne Risikobereitschaft. Journalismus von einer kleinen Gruppe, der meint für alle sprechen zu können. Journalismus, der sehr kritiklos zu einem Gut an sich überhört wird.

Wir brauchen mehr, guten und neuen Journalismus. Aber das Problem ist nicht das Geschäftsmodell und die Krautreporter sind nicht die Antwort.


Die Krautreporter haben es (mit Hilfe von einigen Großspenden) geschafft. Gratulation. Jetzt können wir die Diskussion, ob das Konzept etwas neues zum Journalismus beizutragen hat aussetzen und in einem Jahr schauen, wie sie sich geschlagen haben.

by Sofakissen at June 10, 2014 08:32 PM

April 29, 2014

sofakissen

Schallplatten

Am 19. April war Record Store Day und ich habe viel Geld bei Shock Records ausgegeben. Mal wieder. Ich kaufe zur Zeit mehr Schallplatten als je zuvor. Sicher, das ist jetzt gerade eine Phase. Ich hatte beim Konsum von Musik verschiedenste Phasen. Damals, in der Schule, als ich bei eBay nach Bootlegs von Bad Religion suchte. Als ich regelmäßig CDs kaufte. Dann CDs doch wieder ziemlich unsinnig fand und zum Vinyl wechselte, aber nur Gebrauchtes auf Musikbörsen kaufte. Und danach eine Zeit lang Musik ausschließlich bei iTunes lud. Zumindest solange bis Spotify kam. Und jetzt kaufe ich halt wieder Schallplatten.

Ich könnte mich fragen, warum ich nach einer langen Zeit des digitalen Musikkonsums ausgerechnet wieder Schallplatten kaufe. Die Alben, die ich kaufe, höre ich meistens auch auf Spotify, und dort in den meisten Fällen um ein vielfaches mehr. Vielleicht ist es das physische, das anfassen. Ein Artwork, das Teil des abstrakten (und vermutlich bald schon anachronistischen) Gesamtkonzepts "Album" ist. Ein haptisch angenehmes Objekt, wie die Hülle der Schallplatte und das Vinyl selbst. Das klingt nostalgisch, aber ich mag Schallplatten ja nicht weil sie alt sind. Maybe I just like nice things.

Vielleicht ist das reizvolle auch die Limitierung, die eine Schallplatte gegenüber anderen Medien hat. Ich kann keine Songs überspringen, Staub knistert beim Hören, Platte und Nadel nutzen sich mit der Zeit ab. Dinge gehen kaputt. Melodramatisch: das Vergängliche. Entweder ich höre die Songs von Anfang bis Ende oder nicht (auf Vinyl). Auf jeden Fall höre ich sie zwangsweise über meine Anlage in meinem Wohnzimmer in einem Moment, in dem ich zumindest so viel Zeit und Ruhe habe, um die eine Platte zurück in ihre Hülle zu schieben und eine neue auf den Plattenspieler zu legen. Ein Phänomen, dass mir die Platten auch beschert haben, ist das Wiederentdecken. Das ist weniger der Schallplatte an sich, als der kleinen Sammlung zu verdanken. Seit ich Spotify benutze höre ich diverser, breiter, willkürlicher Musik als je zuvor. Das ist toll. Aber es ist auch toll, im Plattenregeal (oder auch in den paar vor Jahren bei iTunes gekauften Alben) über diese eine Band zu stolpern, die schon ganz aus dem Gedächtnis verschwunden war.

Ein großer Teil der Musik, die ich auf Schallplatten besitze, ist mehr oder weniger unbequeme Musik. AFCGT. Bardo Pond. Death Grips. Xiu Xiu. The Knife. Oder Musik, in der sich bei jedem Durchhören etwas neues entdecken lässt. Kurt Vile's Waking On A Pretty Daze. Boris' New Album. Warpaint, Burial und Death Hawks. Jedes mal wenn ich eine Schallplatte höre zwinge ich mich ein wenig aus meiner Bequemlichkeit, die ich spätestens dann wieder zu schätzen weiß, wenn ich mich an das manuelle Meta-Taggen von heruntergeladenen MP3-Dateien in Winamp anfang der 2000er erinnere. Ich zwinge mich zu einem aufwändigeren Auswahlprozess. "Was will ich jetzt hören?" ist mehr als ein Klick, entsprechend überlege ich zumindest einen kleinen Moment länger. Ich zwinge mich auch für eine Gewisse Zeit bei einer Sache zu bleiben, zu einem bisschen Fokus und Konzentration. So wie andere ab und zu ihren Browser schließen, um sich nicht ablenken zu lassen, so schalte ich ab und zu Spotiy aus.

Sicherlich spielt auch ein Stück weit der Spaß am Sammeln herein. Manche Menschen mögen volle Bücherregale, sammeln Warhammer-Figuren, heben ihre alten iPhones auf oder stapeln Rotwein im Keller. Ich mag das Gefühl eines schweren Stapels aus Kunststoffscheiben und Pappquadraten im Regal, der ein Stück weit die Musik repräsentiert, die mir etwas bedeutet. Auch, wenn der Computer ausgeschaltet ist (was zugegebenermaßen sehr selten vorkommt). Am Ende des Tages höre ich die meiste Musik dann halt doch über Spotify, SoundCloud oder Bandcamp, auf abgeranzten iPhone-Kopfhörern oder über die Lautsprecher im Notebook. Schallplatten sollen und könnnen gar nicht mehr als eine Ergänzung dazu sein. Das winzige bisschen Musik, das aus der digitalen in die physische Welt meines Wohnzimmer getropft ist.

Im Internet habe ich die Wahl zwischen nahezu aller Musik die jemals aufgenommen wurde (außer diesem auf 300 Stück limitierten und exklusiv auf Vinyl veröffentlichten Album von Boris vielleicht, aber das ist eine andere Geschichte). Wenn ich Schallplatten kaufe, dann mache ich das im kompletten Kontrast dazu so umständlich wie möglich. Ich verzichte auf Amazon und besuche einen Plattenladen. Dort kaufe ich selten etwas, das ich mir nur manchmal etwas, das ich mir vorher überlegt habe und so gut wie nie etwas, das ich schon kenne. Vinyl ist für mich ein Entdecken neuer Künstl_erinnen. Ich gehe nach dem Cover, schaue mir Namen an, die ich irgendwo mal irgendwie gehört habe oder lasse mir Alben empfehlen. Dann höre ich rein, selten in mehr als zwei Tracks und treffe dann meine Kaufentscheidung. Auch hier zwinge ich mich selbst aus meiner vermeintlichen comfort zone: mit dem Zweit-Exemplar in der Hand vom Thresen zum Plattenspieler gehen dauert sogar in einem kleinen Geschäft länger, als auf dem Smartphone YouTube aufzurufen.

Viele der Bands und Künstl_erinnen, die ich in letzter Zeit entdeckt habe, habe ich so auch zum ersten mal auf Schallplatte gehört. Ich besuche einen Plattenladen, treffe mich dort mit Freunden. Wir trinken einen Kaffee oder einen Gin Tonic und vergleichen unsere Listen mit interessanten Alben, die wir auf unseren Smartphones haben. Schauen bei Spotify nach, wie diese eine Band hieß, die wir beim Reinhören ganz interessant fanden. Quatschen mit dem Besitzer des Ladens. Bestellen Alben, die nicht vorrätig sind und warten Wochen lang auf die Ankunft des schwer zu bekommenden Imports (und ich bin mir bewusst wie völlig lächerlich das eigentlich ist). Wir hören in die Platten aus dem Regal mit den Neuerscheinungen, die das interessanteste Cover haben. Das ist dann oft Scheiße, manchmal langweilig, aber selten auch die beste Neuentdeckung der letzten Monate. Dieser Prozess zur Musikfindung ist natürlich völlig anachronistisch und schrecklich ineffektiv. Aber das heißt ja nicht, dass er nicht trotzdem gut funktionieren kann.

Ich bin alles andere als audiophil, eigentlich habe ich sogar ein ziemlich schlechtes Gehör. Ich habe auch keinen besonders guten Plattenspieler. Vielleicht hilft das auch, weil Platten ja nicht besser klingen als digitale Musik. Nur halt anders. Ich bin bequem. Ich liebe das Internet und die Möglichkeit dort alles zu finden. Ich gehe nicht einmal so furchtbar gern in Geschäften einkaufen. Es gibt eigentlich keine wirkliche Erklärung, warum ich mir Schallplatten antue. Vielleicht ist es einfach etwas, das ich mag und vielleicht muss ich gar nicht so genau wissen warum. Und wahrscheinlich ist es sowieso auch wieder nur eine Phase.

Meine Plattensammlung

Ich habe eine Spotify-Playlist mit Songs von Alben aus meiner Plattensammlung gebastelt. Das sind nur die neu(er)en Alben, nicht die gebrauchten Sammlerstücke und Klassiker die ich von eBay und Musikbörsen habe.

by Sofakissen at April 29, 2014 09:48 AM

April 24, 2014

sofakissen

Anime Watchlist Roundup #3

Zum dritten mal fasse ich zusammen, was für Anime ich in letzter Zeit geschaut habe... falls das für irgend jemanden da draußen einen Mehrwert haben sollte.


RideBack

Wenn ich erzähle worum es in RideBack geht muss ich sofort immer ergänzen, dass die Serie aber wirklich gut ist. Ballettänzerin Rin entdeckt ihr Talent für das Fahren von RideBacks - einer Mischung aus Motorrad und Roboter - und gerät in eine Revolte gegen die herrschende Regierungsorganisation. Das klingt ein wenig lächerlich, ist es aber nicht. Story und Actionszenen sind weitaus weniger over the top als zu erwarten wäre und dank den (größtenteils) angenehm normal geschriebenen Charakteren lohnt sich die Serie auch für Nicht-Fans von Action und Science Fiction.

Und Hauptfigur Rin hat Actionszenen, wird nicht sexualisiert oder auf ihr Geschlecht reduziert und darf trotz allem noch in jeder Hinsicht eine feminine Ballettänzerin bleiben. Das hervorzuheben kommt mir etwas albern vor, ist aber leider nicht üblich...


Sekai Seifuku: Bōryaku no Zvezda / World Conquest Zvezda Plot

Nach 12 Folgen war Schluss mit einer recht unterhaltsamen Serie über Super-Villains. Was bleibt ist das Gefühl, dass viel mehr drin gewesen wäre. Immer wieder wurden die Beziehungen der Charaktere untereinander aufgegeriffen und angedeutet, am Ende ging es aber nie in die Tiefe. Das Finale war zwar unterhaltsam, aber wirkte nicht wie ein wirklicher Höhe- oder Endpunkt und macht die ganze Staffel im Nachhinein irgendwie belanglos. Die zweite wurde aber schon ziemlich klar angedeutet, mal schauen ob da mehr mit den Charakteren passiert.


Aoihana / Sweet Blue Flowers

Aoihana erzählt eine schöne, kleine Geschichte übers Erwachsenwerden, Beziehungen und Freundschaften. Im Mittelpunkt stehen die beiden Freundinnen Fumi und Akira, die sich das erste mal seit ihrer Kindheit in der Oberschule wiedertreffen. Die Stimmung schwankt zwischen herzerwärmend und herzbrechend. Der Zeichenstil ist der selbe wie bei Wandering Son und entsprechend schön inszeniert und animiert. Auch die ruhige Erzählweise erinnert an ersteres. Letztendlich sind es abe vor allem die angenehm echt und mehrdimensional wirkenden Charaktere, die die Serie ausmachen.

Die lesbischen Charaktere in der Serie dienen aber nicht dem queerbaiting oder werden aus heterosexueller Perspektive ausgenutzt. Allerdings las ich die Kritik, die Serie sei inhaltlich zu zurückhaltend. Die Szene, in der Fumi sich outet hat sie selbst sichtlich Angst. Darauf wird aber kaum weiter eingegangen. Die negativste Reaktion auf Fumis Outing bleibt ein überraschter Blick, was leider kaum die Realität wiederspiegelt, wie es z.B. Blau ist eine warme Farbe tut.


Sakura Trick

Es gibt diesen kleinen Teil von Sakura Trick, den ich wirklich mag. Die hektische Animation mit Schnitten und Einblendungen. Die Comedy. Und in Teilen auch die Beziehung zwischen Yuu und Haruka. Aber...

Der Rest der Serie besteht zu so großen Teilen aus Fanservice, dass die Handlung stellenweise komplett zum Stillstand kommt. Das für seinen Fanservice verschriene Kill la Kill ist dagegen fast harmlos. Jeder Kuss (und es wird viel geküsst) wird endlos in die Länge gezogen und mit stöhnenden Geräuschen unterlegt. Umd dann gibt es noch die Swimmingpool-Folge, die ganz offen "Swim Suit Fan Service" heißt...

Objektifiziert Sakura Trick lesbische Beziehungen für ein heterosexuelles, männliches Publikum? Es gibt dazu verschiedene Meinungen. Ich werde den Eindruck nicht los und habe aufgehört weiter zu schauen. Die diversen Blogposts zu der Serie zu lesen ist wohl in jedem Fall aufschlussreicher.


Chūnibyō demo Koi ga Shitai: Ren / Love, Chunibyo & Other Delusions -Heart Throb-

Die erste Staffel war eigentlich ganz unterhaltsam, fast unerträglich niedlich und hatte gegen Ende eine ganz nette Auflösung. Die 2. Staffel kann nicht mithalten, enttäuscht mit einem uninteressanten und lieblos geschriebenen Drehbuch und homophoben "Witzen" und Klischees. Kann weg.


Kill Me Baby

Ich schaue zwischendurch mal die ein oder andere Folge der englischen Synchronisation (die es praktischerweise auf YouTube gibt) und frage mich immer noch, ob es eine sehr gute Fan-Übersetzung ist, oder eine schreckliche Professionelle. So oder so passt es gut zu den albernen und trashigen Slapstick-Sketchen der kurzweiligen Serie über Auftragskiller- und Ninja-Schulmädchen.


Mit Kyousougiga bin ich noch immer nicht weiter, entweder weil oder obwohl ich die Serie so sehr mag. Gurren Lagann ist irgendwo mitten in der Staffel versandet. Und dann schlummert da noch eine ausführliche Kritik zu Kill la Kill in den Entwürfen meines Blogs.

by Sofakissen at April 24, 2014 06:50 AM

April 17, 2014

Farthen

Aufmerksamkeit und Pronomen

Dieser Artikel stellt meine eigene Erfahrung dar. Diese kann und wird sich ziemlich sicher davon unterscheiden, was andere Menschen erfahren.

Ich mag keine erzwungene Aufmerksamkeit[1].

Wirklich nicht.

Das war noch nie so. Ich stand nie gerne unabsichtlich im Mittelpunkt, Geburtstage habe ich mehr schlecht als recht über mich ergehen lassen. (Am schlimmsten war es, wenn alle für mich gesungen haben, im Kindergarten und auch in der Schule)

Es ist besser geworden, ich komme damit mehr klar, aber wirklich im Mittelpunkt stehe ich nie gerne. Ich fühle mich da dann einfach nicht wohl. So gar nicht. Wenn das dann auch noch unerwartet passiert, möchte ich am liebsten in einem Loch verschwinden, was sich dann nur für mich im Boden auftut, mich verschlingt und sich wieder schließt.

Dass ich mich als Genderqueer verorte macht das ganze nicht einfacher. Warum?

Es wird erwartet, dass ich meine Identität kommuniziere

Wie bereits im vorherigen Blogpost erwähnt, wenn man* in dieser Gesellschaft als Genderqueere*, Trans* oder sonstig von der Norm™ abweichende Person erkannt und gesehen werden möchte, muss die eigene Identität permanent kommuniziert werden. Sonst läuft man* schnell in die Gefahr, dass Menschen von Dingen ausgehen, die nicht stimmen und einen damit potentiell verletzen oder auch in unangenehme Situationen bringen.

Es wird erwartet, dass ich meine Identität ausführlich erkläre

Das folgt aus dem ersten Punkt. Wenn ich nicht möchte, dass Menschen mich als etwas sehen, was ich nicht bin, dann wird erwartet, dass ich erkläre, warum das so ist und was es damit alles auf sich hat. Wenn sie mit dem Thema nicht vertraut sind kann das durchaus anstrengend sein.

Meine Identität ist nicht sehr stabil und ich muss sie immer neu kommunizieren

Es gibt Tage, da fühle ich mich so und es gibt Tage, da fühle ich mich anders. Identitätsfindungsphasen sind kompliziert und im Zweifel kann es sein, dass ich etwas, was ich gestern noch gut fand, heute nicht mehr mag und umgekehrt. Eigentlich möchte ich das nicht. Ich möchte die Aufmerksamkeit, die damit zusammenhängt nicht.

Wenn ich meine Identität nicht permanent erkläre, dann trage ich die Konsequenzen

Wenn ich nichts sage, dann gehen Menschen meistens davon aus, dass ich irgendeiner Norm entspreche. Weil das am einfachsten ist. Es ist am bequemsten für die Leute, sie müssen sich keine Gedanken darüber machen. Zu diesem Thema möchte ich einmal diesen Artikel empfehlen.

Queer visibility is your basic double-edged sword. People who are read as queer tend to face more overt discrimination and hostility, while those of us with fewer obvious subcultural signifiers can slide by without much confrontation.

I wouldn't necessarily mind people not knowing I'm gay, but I don't like being thought of as straight

Entweder bekomme ich Aufmerksamkeit (aufgrund meiner privilegierten Position aber zumindest relativ wenig feindselige. Das bekommen dann wieder andere ab :/ ) oder Menschen behandeln mich in einer Art und Weise, die ich nicht mag.

Interessanterweise beschreibt dieser Artikel ziemlich gut, wie ich mich teilweise fühle, obwohl es dort nicht um Genderqueerness, sondern hauptsächlich um Homosexualität geht.

Pronomen

Pronomen sind auch eines dieser Themen, die stark mit Aufmerksamkeit zu tun haben.

Am liebsten würde ich ohne klarkommen. Das Englische "they" ist dort super, das kann ich benutzten, alle wissen, was ich meine und niemand fragt nach (zumindest nur sehr selten), welches Gender denn diese Person hätte. Aus Aufmerksamkeitsgesichtspunkten sehr angenehm.

Sowas gibt es im Deutschen aber nicht. Es gibt Pronomen, wie "sier*". Diese sind ausgedacht, weil es sonst nichts vernünftiges gab. Das ist erstmal nicht schlimm. Aber es gibt ein Problem: Wenn Menschen sie benutzen, dann erzeugt das Aufmerksamkeit. Eventuell muss erstmal erklärt werden, was das Wort bedeutet, auch wenn es im Kontext eigentlich klar sein sollte. Und wenn das dann erklärt wurde, muss eventuell noch weiter drauf eingegangen werden, siehe oben.

Abschluss

Ich habe in der Pronomenfrage noch keine mich vollkommen zufriedenstellende Lösung gefunden. Ich mag aber definitiv keine Aufmerksamkeit und ich mag auch definitiv keine explizit gendernden Pronomen. Deshalb wäre es mir am liebsten, wenn Menschen sich, wenn sie über mich reden, eines dieser Dinge aussuchen:

Gar keine Pronomen benutzen.

Das ist relativ problemlos möglich, wenn es nur um 1-2 Sätze geht, das fällt nicht auf, gerade in gesprochener Sprache.

Pronomen benutzen

Wenn Menschen doch Pronomen benutzen wollen, weil die Sätze sonst zu anstrengend werden, dann bitte entweder "sier*", oder "sie*" und "er*" alternierend benutzen. (Der Stern wäre mir zumindest in geschriebener Sprache wichtig.) Damit habe ich mich "notgedrungen" angefreundet.[2]

Es gibt da aber eine Bedingung: Wenn Menschen dann anfangen, nachzufragen, hab ich eventuell keine Lust, darüber zu reden. Wenn ich im Raum bin, dann sollte es akzeptiert werden, wenn ich dann wortlos die Konversation verlasse. Das heißt, wer diese Pronomen benutzt muss im Zweifelsfall dann erklären, warum :P. Ich verstecke mich währenddessen dann aus Aufmerksamkeits-Selbscham in irgend einer Ecke. Okay?

Nachtrag

[1]: Nur um es klar zu stellen: Ich finde es okay, wenn Menschen mit mir über dieses Thema reden. Meistens mach ich das gerne und es tut mir auch gut. Was ich nicht mag ist gezwungene Aufmerksamkeit. Wenn ich keine Wahl habe, diese Aufmerksamkeit zu bekommen oder mich gerne gerade mit anderen Themen beschäftigen würde. Das ist alles. Auch wenn ich nicht unbedingt gerne Erklärbär*in spielen möchte, wenn ihr Fragen habt, die ich hier nicht beantwortet habe, dann fragt mich ruhig. Deswegen schreibe ich das hier ja. Aber akzeptiert, wenn ich nicht darüber reden mag.

[2]: Warum notgedrungen? Ganz einfach: "sie" und "er", egal ob mit oder ohne Stern, sind beides gendernde Pronomen. Ich sehe mich aber nicht gerne als "zwischen zwei Geschlechtern", sondern eher außerhalb. Das mag ein relativ geringer Unterschied sein, aber es bringt mich dazu, mich nicht immer damit wohl zu fühlen. Es ist aber ein von mir akzeptierter Kompromiss: Es gibt Pronomen, die da expliziter wären, aber diese sind für viele Menschen schwer zu verstehen, sie fragen nach und ich bekomme ungewollte Aufmerksamkeit.

by fina at April 17, 2014 04:04 PM

March 28, 2014

sofakissen

It just works, finally.

Meistens schaue ich Serien auf meinem Notebook. Ich habe zwar einen Monitor, den ich als so etwas wie einen Fernseher bentuze, aber meistens steht er ungenutzt rum, weil ich keine Lust habe mit den Kabeln zu hantieren und meinen Rechner in die Ecke zu stellen. Aber jetzt habe ich endlich eine für mich bequeme Lösung gefunden - und ich brauche dafür nur drei verschiedene Geräte um Dateien aus dem Internet anzuschauen!

Plex Media Server

Ich habe früher schon öfters mit Boxee, XBMC, dem Raspberry Pi verschiedenen NAS experimentiert, nichts funktionierte für mich. Diesmal habe ich Plex ausprobiert.

Plex ist ein Medienserver, der Filme und Musik im Netzwerk bereitstellen und abspielen kann. Er läuft als Dienst im Hintergrund und wird über ein Webinterface gesteuert. Also habe ich als ersten Schritt Plex auf meinem Notebook installiert.

Put.io Plugin

Da ich meinen content nicht lokal auf der Festplatte oder auf einer NAS liegen habe, sondern bei Put.io benötigte ich das entsprechende Plugin für Plex.

Das von Github heruntergeladene Plugin wird in den Plug-Ins-Ordner des Plex-Verzeichnisses kopiert. Bei dem Xubuntu Linux auf meinem Notebook war das /var/lib/plexmediaserver/Library/Application Support/Plex Media Server/. Wo ich schon dabei war habe ich direkt auch das Plugin für Trakt installiert, um gesehene Folgen mit meinem Account dort zu synchronisieren.

Anschließend erscheint im Startmenü von Plex-Weboberfläche ein Menüpunkt für Put.io. Dort muss noch ein "Access Token" eingegeben werden, der sich hier genereieren lässt. Anschließend werden Dateien und Verzeichnisse des Put.io-Speichers angezeigt und lassen sich abspielen.

Android und Chromecast

Ich habe mir letztens im Affekt für 35€ ein Google Chromecast gekauft, ohne eine wirkliche Verwendung dafür im Kopf zu haben. Die Einrichtung des Chromecast an meinem Fernseher ging (fast) problemlos, bisher streamte ich aber nur ein paar YouTube-Videos.

Allerdings gibt es für Plex eine Android-App, die den Chromecast ebenfalls unterstützt. Für knapp 4€ habe ich sie mir auf mein Smartphone geladen, wo sie sich von alleine mit meinem Plex Server auf dem Notebook verband. Über die App kann ich auf meine Put.io-Verzeichnisse zugreifen und sie über den Chromecast auf dem Fernseher abspielen lassen.

Was soll ich sagen: It just works. Finally!

by Sofakissen at March 28, 2014 08:36 PM

March 24, 2014

Farthen

Don't call me dude

Dieser Post handelt von Trans*- und Genderqueer*-visibility, Ausgrenzung und Ignoranz. Er behandelt meine persönliche Wahrnehmung. Diese kann sich bei anderen Menschen stark unterscheiden.

Ich habe lange gewartet. Lange darauf gehofft, dass Dinge anders werden. Dass sie weniger werden, dass sie mich nicht mehr so stören, dass sie egal werden, dass die Gesellschaft eine bessere wird. Nichts davon ist passiert.

Die eigene Identität zu verstehen, zu erkennen und entsprechend zu handeln ist schwer. Sehr schwer. Insbesondere, wenn mensch nicht in die Standardkategorien passt, die so zur Auswahl stehen. Oder besser: In die mensch hineingepresst wird. Passiv. Sich da in etwas wirklich sicher zu sein ist zumindest für mich unmöglich. Trotzdem gibt es Dinge, denen ich mir sicher bin. Es gibt nämlich Dinge, die weh tun. Sehr. Immer und immer wieder.

Es geht mir nicht mal mehr unbedingt um Pronomen. Klar, auch, aber da sind noch viel mehr Dinge. Dinge, die offensichtlich Gender_Normen reproduzieren und verstärken. Geschlechtsspezifische Bezeichnungen und Beleidungen. Dinge, die auf die Norm abgestimmt sind und nur innerhalb dieser existieren und überhaupt einen Sinn ergeben. Wörter, die Menschen verstecken, die von der Gesellschaft eh schon unsichtbar gemacht werden.

"Dude" sagten sie. Nicht einmal, mehrmals. Immer wieder. "Als Dude hast du da nichts zu zu sagen". "Da sind ja nur Cis-Typen drin". Ohne Frage. Ohne Möglichkeit, der aufgedrückten Bezeichnung zu entkommen. Fakt. In eine Gruppe gepresst sein, der ich mich nicht zugehörig fühle.

Ich will nicht sagen, dass ich als männlich wahrgenommener Mensch keine Privilegien besitze. Nicht zu allem was sagen sollte. Aber dann benutzt doch bitte das, was ihr meint. "Privilegierter Mensch". Und schon ist alles viel besser.

Ich frage mich schon seit langem, was ich noch alles tun muss, um nicht als männlich wahrgenommen zu werden. Wie viele Stereotype ich noch reproduzieren muss, damit ihr aufhört damit. Damit ihr was merkt. Aber es funktioniert nicht.

Ihr feiert Leute, die dem Genderbild entkommen wollen und von diesem abweichen. Aber ihr macht sie trotzdem kaputt. Ihr seid trotzdem unvorsichtig, unachtsam. Wenn ihr geschlechterspezifische Bezeichnungen benutzt, dann achtet doch bitte drauf, dass ihr damit auch nur die anspricht, die diese Bezeichnungen akzeptieren. Alles andere ist scheiße. Richtig scheiße. Und nichts-sagen ist keine Akzeptanz. Nie.

Und damit meine ich nicht, dass ihr die Leute anguckt, eure Sterotypenschablone drüber legt und guckt, ob es ein bisschen passt. Damit meine ich nicht, dass ihr in die Bio guckt und schaut, ob da irgendwas mit Trans* steht und wenn nicht, dann wird es sich da wohl um eine Cis-Person handeln. Ihr reproduziert damit einen gesellschaftlichen Standard, eine Norm. Cis until proven otherwise. Das ist Scheiße.

Menschen sind sich manchmal nicht sicher in dem, was sie sind oder sein wollen. Manche Menschen sagen nichts, weil sie Angst haben, dass es falsch rüberkommt. Weil sie Angst haben, nicht akzeptiert zu werden. Nur, weil ich nicht mit einem Schild rumlaufe, auf dem "Genderqueer" draufsteht heißt das nicht, dass ich automatisch das bin, was der gesellschaftliche Standard vorschreibt. Nein. Ich bin das, was ich sein möchte. Nicht mehr, nicht weniger. Wenn mir jemand sagt, wie ich zu sein habe oder es implizit annimmt, dann tut das weh. Das verletzt mich. Dann sitze ich auf dem Bett und weine. Lange. Weil niemand versteht. Weil niemand interveniert. Weil es niemanden interessiert.

Und dann ist da dieses ständige Verstecken hinter diesem Genderstern und dem Unterstrich. Die einzige Möglichkeit, sich dort inkludiert zu sehen. Unglaublich traurig und missverstanden fühlen, wenn sie fehlen. Benutzt sie bitte.

Ich bin Finn und ich bin nonbinary und genderfluid. Ich wünschte mir, ihr hättet das akzeptiert, bevor ich es euch ins Gesicht brüllen musste und nicht ständig die Norm reproduziert, die in euren Köpfen rumfliegt. Achtet bitte mal darauf, was ihr da tut. Ihr macht Menschen kaputt.

by fina at March 24, 2014 08:49 PM

rohieb

Mirroring MediaWiki with Git-Mediawiki and gitolite

From Murphy’s Law we can deduct that Internet failures always come when you least expect them. In my case, the Stratum 0 wiki was offline for a few minutes (only, thankfully!) when I really urgently(1!11) needed to look something up there. If I only had an offline clone of the wiki…

Enter: Git-Mediawiki

I had already before discovered Git-Mediawiki, which lets you mirror certain or all pages of a MediaWiki instance to a local Git repository. It achieves this by implementing the mediawiki:: remote handler, which lets you configure the URL of the remote MediaWiki instance as a Git remote, and loads the raw revisions from the MediaWiki API everytime you do a git fetch:

$ git clone mediawiki::https://stratum0.org/mediawiki/
Cloning into 'mediawiki'...
Searching revisions...
No previous mediawiki revision found, fetching from beginning.
Fetching & writing export data by pages...
Listing pages on remote wiki...
6 pages found.
page 1/78: Vorstand
  Found 2 revision(s).
page 2/78: Atomuhr
  Found 15 revision(s).
page 3/78: Corporate Identity
  Found 6 revision(s).
page 4/78: Presse
  Found 2 revision(s).
[...]
1/804: Revision #738 of Presse
2/804: Revision #3036 of Atomuhr
3/804: Revision #3053 of Atomuhr
4/804: Revision #3054 of Atomuhr
[...]
Checking connectivity... done.

Not to mention, this can take a very long time if you try to import a whole wiki (say, Wikipedia (NO, DON’T ACTUALLY DO THIS! (or at least don’t tell them I told you how))), but you can also import only single pages or pages from certain categories with the -c remote.origin.pages=<page list> and -c remote.origin.categories=<category list> options to git-clone.

After the clone has finished, you can view the raw MediaWiki source files of the pages you imported from your computer. You can even edit them and push the changes back to the wiki if you configure your wiki user account in your Git config!

Since I had already played around with Git-Mediawiki, I had a local mirror of the Stratum 0 wiki on my laptop. Unfortunately, I had not pulled for a few weeks, and the information I needed was only added to the wiki some days ago. So for the future, it would be nice to have an automatically synchronising mirror… And not only one on my personal laptop, but also for other interested users, at least read-only.

Mirroring repositores with gitolite

The best solution for me was a mirror repository on my own server, which was already running gitolite, the popular Git hosting solution. I would simply add a read-only repository in gitolite and let a cron job handle care of automatic synchronisation.

Creating the new repository was easy, you simple add a line to your gitolite.conf, and when push the changes, gitolite creates the repository for you. But furthermore, I also wanted to configure the MediaWiki remote directly in my repository setup, for which I needed to specify the corresponding remote options for the Git configuration. The appropriate setting to allow this is in .gitolite.rc (gitolite’s main configuration file which resides in the gitolite base directory, say /home/git/ in my case), you can simply add the Git config options you want to set from gitolite.conf to the $GL_GITCONFIG_KEYS variable. Mine now looks like this:

$GL_GITCONFIG_KEYS = "remote\.* gitweb\.owner gitweb\.description";

Now I could easily add the corresponding options to my repository setup:

repo stratum0-wiki
    config gitweb.description = "Read-only Git mirror of the Stratum 0 wiki"
    config remote.origin.url = "mediawiki::https://stratum0.org/mediawiki"
    config remote.origin.fetch = "+refs/heads/*:refs/remotes/origin/*"
    config remote.origin.fetchstrategy = "by_rev"
    RW+ = rohieb
    R   = @all daemon gitweb

Note that I let Git-Mediawiki work with the by_rev fetch strategy, which queries the MediaWiki API for all recent revisions rather than first looking for changed pages and then fetching the revisions accordingly. This is more efficient since I want to import every revision nonetheless. I also found out the hard way (i.e. through print debugging) that adding the remote.origin.fetch option is critical for Git-Mediawiki to work correctly.

Then, a simple cron job for the git user (which owns all the gitolite repositories), was created with crontab -e to update the mirror every 30 minutes:

# m h  dom mon dow   command
*/30 * * * * /home/git/update-stratum0-mediawiki-mirror

The script which does all the work resides in /home/git/update-stratum0-mediawiki-mirror:

#!/bin/sh
if [ "`whoami`" != "git" ]; then
    echo "fatal: run as user 'git'."
    exit 1;
fi

cd /home/git/git/stratum0-wiki.git/

git fetch 2>&1 | grep -i 'fatal\|error\|warn'
git update-ref refs/heads/master refs/mediawiki/origin/master

Note that we cannot simply git-merge the master branch here, because the gitolite repository is a bare repo and git-merge needs a working tree. Therefore, we only fetch new revisions from our MediaWiki remote (which fetches to refs/mediawiki/origin/master), and update the master branch manually. Since the mirror is read-only and there are no real merges to be done, this is sufficient here.

So far, we have a fully working mirror. But since the Stratum 0 wiki has grown to more than 7000 revisions to date, the initial fetch would need a while. To reduce the load on the MediaWiki API, I figured that I could reuse my existing repository on my laptop.

Re-using a previous Git-Mediawiki repo

So before activating the cron job, I pushed my exiting repository to the mirror:

~/stratum0-wiki$ git push rohieb.name master
~/stratum0-wiki$ git push rohieb.name refs/mediawiki/origin/master

A test run of the mirror script however was not happy with that and wanted to fetch ALL THE revisions anyway. So it took me another while to find out that for efficiency reasons, Git-Mediawiki stores the corresponding MediaWiki revisions in Git notes under refs/notes/origin/mediawiki. For example:

$ git log --notes=refs/notes/origin/mediawiki
commit 7e486fa8a463ebdd177e92689e45f756c05d232f
Author: Daniel Bohrer <Daniel Bohrer@stratum0.org/mediawiki>
Date:   Sat Mar 15 14:42:09 2014 +0000

    /* Talks am Freitag, 14. März 2014, 19:00 */ format, youtube-links

Notes (origin/mediawiki):
    mediawiki_revision: 7444

[...]

So after I also pushed refs/notes/origin/mediawiki to the mirror repo, everything was fine and a the cron job only fetched a small amount of new revisions.

Conclusion

To conclude this post, I have now a working MediaWiki mirror for the Stratum 0 wiki, which uses a cron job and Git-Mediawiki to fetch new revisions every 30 minutes, integrated with gitolite for hosting. If you also want to keep track of changes in the wiki and have an offline mirror for reference, feel free to pull from git://git.rohieb.name/stratum0-wiki.git.

March 24, 2014 02:12 AM

March 18, 2014

Tinuqin

Dewdrops on the grass I’m growing for my cats













Dewdrops on the grass I’m growing for my cats

March 18, 2014 04:04 PM

March 11, 2014

sofakissen

Anime Watchlist Roundup #2

Ende Januar schrieb ich darüber, dass ich Anime für mich (wieder)entdeckt habe. Zwei Monate später habe ich einige alte Serien zu Ende geschaut, andere laufen noch immer und neue sind dazugekommen.


Kill la Kill

Der Hype Train rollt unaufhaltsam weiter auf das Finale zu. Nach mehreren Twists und einer gewalt_tät_igen Eskalation kann ich die letzte Hand voll Folgen kaum noch abwarten. Die Mischung aus Comedy und Action ist noch da, auch wenn beide zu Gunsten der Story in den Hintergrund gerückt sind. Es reicht aber immer noch aus, um die Serie nicht schwermütig werden zu lassen. So sehr ich sie mag ist Kill la Kill weiterhin nur mit einer Triggerwarnung für sexualisierte Gewalt versehen zu empfehlen.

Revolutionary Girl Utena

Revolutionary Girl Utena ist schon etwas älter. Die erste Staffel beginnt etwas träge, mit der zweiten beginnt die Serie konzentrierter zu werden. Die Mischung aus Dialoge, den wiederkehrenden Duellen, symbolträchtigen wie surrealen Szenen und immer wieder auch sehr leichtherziger Comedy wirkte anfänglich etwas merkwürdig. Es lohnt aber dabei zu bleiben - ob für die Story, die Ästhetik oder den ausgezeichneten Soundtrack.

Hourou Musuko / Wandering Son

Hourou Musuko ist die Geschichte einer Clique von Schül_er_innen und ihren Beziehungen zueinander und zu sich selbst, ihrer Sexualität und ihrem Geschlecht. So wie ich hörte sei an der Manga-Vorlage einiges problematisch, das Anime scheint mit den Themen Trans_Sexualität soweit ich es gesehen habe aber sehr behutsam umzugehen und überzeugt mit vielen glaubwürdigen Charakteren, seiner ruhigen Art und einigen emotionalen Momenten.

Sekai Seifuku – Bōryaku no Zvezda / World Conquest Zvezda Plot

Sekai Seifuku handelt von den Bemühungen der von einem kleinen Mädchen angeführten Geheimorganisation Zvezda, die Welt zu erobern. Das Slice-of-Life-Supervillain-Anime ist überdreht, witzig und unterhaltsam. Allerdings hatte ich nach einer Folge fast wieder aufgehört. Das dem Genre-Trope entsprechend sexualisierte Kostüm von Zvezda-Anführerin Kate ist mit ihrem Alter (das so auch mitsamt Mittagsschlaf und Kuscheltieren dargetellt wird) nicht unproblematisch.

Chūnibyō Demo Koi ga Shitai! Ren / Love, Chunibyo & Other Delusions

Staffel 1 schaute ich Anfang des Jahres, die zweite Staffel wird aktuell noch ausgestrahlt. Ich schaue es immer noch jede Woche als fast schon zu niedliche, harmlose Unterhaltung.

K-On!

Noch ein harmloses feel good Anime! Aufhänger ist die Geschichte einer Schulband, der Rest ist slice of life. Beiläufige Unterhaltung mit ein paar netten, eingestreuten Musik-Referenzen.

Kyousougiga

Von Kyousougiga habe ich bisher erst die nullte Folge gesehen... ein Preview vor der eigentlichen ersten Folge. Nach einer an FLCL erinnernden Actionszene bin ich gespannt auf die ganze Staffel. Der Stil gefällt mir nach dem Ersteindruck schon sehr.


Mit den angefangenen Durarara!, Nichijou und Gurren Lagann bin ich bisher noch nicht weitergekommen. Auf meiner Watchlist für die Zukunft stehen nach mehreren Empfehlungen noch Death Note und The Legend of Korra sowie (wie auch Kyousougiga und World Conquest Zvezda Plot) durch einen Kotaku Review White Album 2.

by Sofakissen at March 11, 2014 06:29 PM

March 10, 2014

Tinuqin

March 04, 2014

sofakissen

Crowdfunding, March 2014 edition

I don't always pledge my financial support for projects on Kickstarter, but when I do, it's mostly video games. Here are the projects I backed this month... and this time it's personal! (No, really, I want those projects to happen...)

Dysfunctional Systems

I recently discovered my love for visual novels, when I first played "Analogue: A Hate Story" by Christine Love around christmas. I soon discovered the first episode of Dysfunctional Systems, "Learning to Manage Chaos", and I was hooked - and I really want to know how Winters story continues.

The world about a school for time/space travelling mediators from a utopian world, that learn how to fix conflicts in other worlds is really interesting. But the game didn't make enough money to fund development for the next episodes. That's why the team went to Kickstarter. I'd really like to see this happen.

Heart & Slash

I discovered Heart & Slash while aimlessly scrolling through the video games category on Kickstarter. It looks like a really fun, fast retro hack and slash action game. But what really sold me was the art style.

Koe 声

I watched a lot of Anime in the past months, and I watched them all in Japanese with English subtitles. Koe is a JRPG with Japanese words as a core gameplay mechanic. But it's not so much the gameplay itself, that got me interested, but the intention of the game to teach Japanese. We'll see how well it works in practice when the game comes out.

Voices from the Sea

Voices from the Sea is another visual novel. The story about "boy meets mysterious and cute girl with glitter all around her" seems anything else than interesting. But there are some other ideas, that made me back the project, for example that it will be fully voiced in English. (And I really just play every visual novel that seems even the tiniest bit interesting...)

Nothing to Hide

Nothing to Hide is an "anti stealth game", where you don't avoid but always have to stay in sight of the gouvernments surveillance cameras. The message is quite obvious. The game isn't funded on Kickstarter, but on its own platform, which allows for an interesting tiered model for using the pledged money.

The demo already shows an simple, but nice art style and a clever gameplay. The game, its art and its code will also be completely free - free as in free beer AND free speech. Isn't that something?

by Sofakissen at March 04, 2014 09:30 PM

March 02, 2014

xinitrc

Chinese Linking Rings

In the last two blog post we learned how to use <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semirings to implement several different algorithms, with just 7 lines of code and the right instantiation for a class. Among others, I showed you how to compute the length of the shortest paths between two nodes of a graph. In the last blog post I presented a way to represent every path between two nodes using regular expressions. In this blog post it is the time to combine both. We will construct a new <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring and use our, by now, well known algorithm to get every path that exhibits a specific property.

Combining <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semirings

First we need to take a look at if and how we can combine <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semirings. Actually for the if-part, I probably gave that away in the heading. So the answer is yes and it is pretty simple to combine <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semirings like this given: <semantics>(A,1,1,01,11)<annotation encoding="application/x-tex">(A,\oplus_1,\otimes_1, \mathbf{0}_1, \mathbf{1}_1)</annotation></semantics> and <semantics>(B,2,2,02,12)<annotation encoding="application/x-tex">(B,\oplus_2,\otimes_2, \mathbf{0}_2, \mathbf{1}_2)</annotation></semantics> we can simply construct <semantics>(A×B,,,(01,02),(11,12))<annotation encoding="application/x-tex">( A\times B, \oplus, \otimes, (\mathbf{0}_1, \mathbf{0}_2), (\mathbf{1}_1,\mathbf{1}_2))</annotation></semantics> where <semantics>(a,b)(c,d)=(a1c,b2d)<annotation encoding="application/x-tex">(a,b) \oplus (c, d) = (a \oplus_1 c, b\oplus_2 d)</annotation></semantics> and <semantics>(a,b)(c,d)=(a1c,b2d)<annotation encoding="application/x-tex">(a,b) \otimes (c, d) = (a \otimes_1 c, b\otimes_2 d)</annotation></semantics>. This is very simple, but completely useless for our case. Combining one <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring for our property with the one for regular expressions in this way, would just yield for example the shortest distance for a path as one element of the pair and the regular expression for all path between the two nodes in the other element of the pair.

We need to do something a little more intelligent to reach our goal. What we want is that the selection of the regular expression depends on the outcome of the operation on the property. Should the path be disregarded because it’s longer (less reliable, smaller capacity) we don’t want to include it in the regular expression describing the path.

Let’s construct that. For simplicity I will do so with only the shortest path even though it works the same way for the other properties in exactly the same way. You just have to switch the operations in the appropriate places of this explanation.

  1. First let’s use the pairs over the set’s of the two semirings to work with. In this case <semantics>{}×RE<annotation encoding="application/x-tex">\mathbb{N}\cup\{\infty\}\times RE</annotation></semantics>, we use the left side for our property, the right side for the regular expression describing the path. This should not be a surprise we need to store these properties somewhere.
  2. The neutral elements regarding our new operation will simply be the pairs of the neutral elements from the both <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semirings we are combining, so for the shortest path these are <semantics>(,)<annotation encoding="application/x-tex">(\infty, \emptyset)</annotation></semantics> and <semantics>(0,ϵ)<annotation encoding="application/x-tex">(0,\epsilon)</annotation></semantics>.
  3. We need a <semantics><annotation encoding="application/x-tex">\otimes</annotation></semantics> operation for our new <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring. Let’s see what this means for our idea of discarding the path if the path is discarded by the property. In the shortest path <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring we drop a path when we determine the minimum, throwing the longer path away. But we are currently looking at the <semantics><annotation encoding="application/x-tex">\otimes</annotation></semantics> operation which is <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics> for the tropical semiring, this operation doesn’t discard anything. This simply results in the <semantics><annotation encoding="application/x-tex">\otimes</annotation></semantics> operation being defined as it is above, we combine the <semantics><annotation encoding="application/x-tex">\otimes</annotation></semantics>-operations of the semiring like this: <semantics>(a,x)(b,y)=(a+b,xy)<annotation encoding="application/x-tex">(a,x) \otimes (b, y) = (a + b, x \cdot y)</annotation></semantics>.
  4. Now for the interesting case of <semantics><annotation encoding="application/x-tex">\oplus</annotation></semantics>. In the tropical semiring, <semantics><annotation encoding="application/x-tex">\oplus</annotation></semantics> is the minimum-operation. This get’s rid of the larger of two path’s, so the same has to go for the regular expression. So depending on which path is the smaller one we discard that half of our regular expression resulting in the following definition of <semantics><annotation encoding="application/x-tex">\oplus</annotation></semantics>

$$(a,x)\oplus (b,y)=\left\{ \begin{array}{ll} (a, x)& \text{ if } min(a, b) = a \text{ and } min(a, b) \not = b\\ (b, y)& \text{ if } min(a, b) = b \text{ and } min(a, b) \not = a\\ (a, x+y)& \text{ otherwise } \end{array} \right.$$

Let’s review that. If the minimum of <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics> and <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> is <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics> we simply discard <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> and the path’s <semantics>y<annotation encoding="application/x-tex">y</annotation></semantics> having the weight <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics>. Same goes the other way around if <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> is the shorter distance. In the last case both path have the same distance, so we can use either one to go from start to target node. For our regular expression this means we have to combine both path’s with an Or and since <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics> and <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> have the same value we can take either as path length for our pair.

We now have a semiring for the pair case that does what we wanted. What remains is the <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-operation. This is a bit tricky, but actually not that much. Let’s first give it:

<semantics>(a,x)*={(0,x*) if a=0(0,ϵ) otherwise<annotation encoding="application/x-tex"> (a,x)^*=\left\{ \begin{array}{ll} (0, x^*) & \text{ if } a = 0\\ (0, \epsilon) & \text{ otherwise} \end{array} \right. </annotation></semantics>

This might be a little counter intuitive at first, so let’s do this thinking thing again. If we have a shortest path from one node to somewhere with distance 0, what does that mean? It means there is a loop which doesn’t change the distance. So what can we do with such a loop, right we can take it an arbitrary number of times and this is exactly what the <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> in regular expressions means: “Take this path an arbitrary number of times”. So we have to test if <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics> is equal to the <semantics>1<annotation encoding="application/x-tex">\mathbf{1}</annotation></semantics> of the tropical semiring, which is <semantics>0<annotation encoding="application/x-tex">0</annotation></semantics> and if it is we need to add a <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> to the path leading to this situation. In all other cases, we are not allowed to take this path which is the same as saying, there is only the path of length 0 satisfying the property that it doesn’t add any length to the path, which is given by the regular expression<semantics>ϵ<annotation encoding="application/x-tex">\epsilon</annotation></semantics>.

We now have a <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring for calculating all shortest path’s between two given nodes of a graph and again without changing our algorithm from the second to last blog post. For the other properties you simply need to switch, the minimum operation in the definition of <semantics>oplus<annotation encoding="application/x-tex">\ oplus</annotation></semantics> for the appropriate operation of the property you desire.

Haskell

The following Haskell code works with all the <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semirings from the second to last blog post, so you just plug in Tropical, MinMax or Reliability for a and you get the algorithm for the property you like.

data BestPath a x = BestPath a x

instance Functor (BestPath a) where
  fmap f (BestPath a x) = BestPath a (f x)
  
cgextract :: BestPath a x -> x
extract (BestPath _ x) = x


instance (Semiring a, Ord a, Semiring x) => Semiring (BestPath a x) where
  zero = BestPath zero zero
  one = BestPath one one
  (BestPath a x) <.> (BestPath b y) = BestPath (a <.> b) (x <.> y)
  (BestPath a x) <+> (BestPath b y) | ((a <+> b == a) && (not (b == a <+> b))) = (BestPath a x) 
                                    | ((a <+> b == b) && (not (a == a <+> b))) = (BestPath b y)
                                    | otherwise = BestPath (a <+> b) (x <+> y)
  
instance (StarSemiring a, Ord a, StarSemiring x) => StarSemiring (BestPath a x) where
  star (BestPath a x) | a == one = BestPath one (star x)
                      | otherwise = BestPath one one

Admission of cheating

Even though you probably wouldn’t have notice at first, but I cheated a little in this blog post. I used a property I didn’t previously introduce and which makes all of this work. I used the property that there is a natural order on Real and Natural numbers, which is the reason why the minimum and maximum operations on these Sets are defined. This property allows me to use the equality on these Set’s so I can define the <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring like above. So what I need to say is: This will not work in the completely general case of having any property on any set with two operations forming a <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring, but only for those defined on a set which give you an equality. Set’s not giving you this property, will probably be the topic of a later round of this thinking deeply about algorithms series.

Wrapping up

After now having defined a new <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring we can finally find all path’s exhibiting a specific property. I have an updated file giving you the full definitions from all the last blog posts, just follow this link. Next up I will probably give this to you in a programming language “real people use” (someone asked for it) and then let’s see if we can venture into a whole different area and let our 7 lines of code rest for the moment.

% LocalWords: semiring haskell semirings oplus tt MinMax Functor % LocalWords: fmap cgextract

March 02, 2014 12:00 AM

February 26, 2014

rohieb

XMPP and the Internet of Things (Seminar wrap-up)

As I’m currently working to get a master’s degree in university, I had to write a seminar paper. I got lucky and the topic “Chatty Things – Making the Internet of Things Readily Usable with XMPP” sounded very interesting to me :-) As the title suggests, the paper describes how the XMPP protocol can be employed to facilitate user access to smart devices in the Internet of Things, and some thoughts on preventing information overflow on the user. If this sounds interesting to you as well, you should read my paper or scroll through the presentation slides ;-) The paper is licensed as CC BY-ND 3.0 (of course, you shouldn’t use it for your own paper :P), the presentation slides are CC BY-SA 3.0, and if you want to re-use it, have a look at the LATEX code.

Apart from the matter handled in the paper, I also acquired some additional skills:

  • Learn to motivate myself. The Pomodoro technique, in conjunction with chocolatey sweets for extrinsic gratification, seems to work quite well for me.
  • Learn to use TikZ to draw figures in LATEX. I already wanted to use it for a while, but it seemed complex and have a steep learning curve. It turns out that the TikZ/PGF manual is very illustrative, and has an exhaustive index for easy skimming.
  • Learn to deliver a good(?) talk. I recently discovered speaking.io by Zach Holman, and apparently the tips he gives there seem to work and I felt much more secure than on previous talks. Also: a lot of practice. And test sessions. And I ditched his advice on slide design, I like my slides with latex-beamer :P

February 26, 2014 02:40 AM

February 25, 2014

sofakissen

Verschlüsselte Alternativen

Die ganze Welt wird abgehört, das wissen wir seit Edward Snowdens Enthüllungen im letzten Jahr. Kryptoparties erklären (nicht erst) seit dem, wie sich Mails verschlüsseln lassen. Facebook kauft Konkurrenten wie WhatsApp und es ist nachvollziehbar, dass das viele bedenklich finden. Seit dem erklären Blogposts und Zeitungsartikel, wie sich Nachrichten vom Smartphone verschlüsseln lassen.

Es werden Alternativen für die digitale Kommunikation, besonders vom Smartphone aus, gesucht, die Schutz vor der NSA und anderen Geheimdiensten bieten. Oder eine bequeme Möglichkeit, alle seine Kontakte zu erreichen. Oder vielleicht sogar beides gleichzeitig?

Die offensichtlichsten "Alternativen" zu WhatsApp wären die beiden großen Dienste, die schon lange da sind: Facebook Messenger und Google Talk Google Hangout. Beide haben eine große Nutzer_innenbasis, beide haben Gruppenchats, Bildversand und Lesebstätigungen. Aber scheinbar trauen viele Menschen diesen großen Anbietern nicht, die ihr Geld mit Werbung verdienen. (Auch ich würde gerne weniger Nachrichten über Facebook und Hangouts senden.)

Kommunikation, gerade mobile Kommunikation, ist nach der SMS in diverse Dienste zersplittert. Dass WhatsApp aufgekauft wurde dürfte die Situation eher verbessern. So oder so erleben sichere verschlüsselnde Messenger-Apps einen großen Zulauf. Dass nun eher Facebook als die NSA diesen Trend befeuert kann eins zynisch kommentieren. Letztendlich ist es aber auch nachvollziehbar, dass ein großes Unternehmen greifbarer ist, als ein Geheimdienst. Im Goldrausch der Krypto-Apps wiederholt sich die Splitterung der verschiedenen Dienste. Threema, Telegram und TextSecure kämpfen um die Aufmerksamkeit und vermutlich wird keins davon eine Reichweite wie WhatsApp erreichen.

Kommunikation muss bequem sein, sonst nutzt sie keine Mehrheit der Nutzer_innen. Kontakte sollten einfach zu finden und Apps gut bedienbar sein. Kommunikation sollte außerdem im besten Fall sicher verschlüsselt sein. Dass massive staatliche Überwachung Konsequenzen nach sich zieht ist nicht zu bestreiten. Ich weiß nicht viel von Verschlüsselung. Meine Beurteilung "sicherer" Kommunikation kann nicht mehr als eine gefühlte Sicherheit geben und so wird es den meisten gehen. Wenn die Dienste nicht miteinander sprechen können oder kein einzelner von ihnen klarer Marktführer wird, haben wir keins von beidem.

Threema ist closed source, was die theoretische Möglichkeit zum Überprüfen des Codes auf Hintertüren nimmt. Außerdem kostet die App Geld. Kommerzieller Software ist nichts schlechtes, aber selbst mit ein paar Euro setzt Geld (beziehungsweise eine Kreditkarte) eine Einstiegshürde zur Teilhabe. Ich habe mich vorerst für TextSecure entschieden. Open source, kostenlosmail und Clients für iOS und Desktops sind in Arbeit. Gerade letzteres ist ein Feature, das mir bei sonstigen Apps schmerzlich fehlt. Das fehlen von ersterem wiederum dürfte dafür sorgen, dass viele sich bereits für eine andere App entschieden haben.

...und sind da noch die Urgesteine IRC und XMPP, die sich mit Verschlüsselung OTR und diversen Clients auch auf mobilen Endgeräten benutzen lassen. Aber außerhalb einer bestimmten Peergroup macht das wieder niemand - und allen anderen möchte ich nicht das ständige Basteln an Einstellungen und Fehlermeldungen zumuten. An beidem verließ mich auch meine Motivation, Jabber als echte Alternative für Unterwegs in Erwägung zu ziehen.

Was nun also? Drei verschiedene Apps für verschlüsselte, vier für das Abdecken der restlichen Peergroup, zwei für die technisch versierteren und dann noch eine Hand voll SMS auf der monatlichen Telefonrechnung? Ich weiß es doch auch nicht. Wer verschlüsselt mit mir kommunizieren möchte kann das momentan jedenfalls per Mail und Jabber - zumindest wenn ich an meinem Notebook sitze - oder unterwegs in TextSecure, wo ich über meine Mobilrufnummer erreichbar bin.

by Sofakissen at February 25, 2014 03:57 PM

February 23, 2014

xinitrc

Of rabbits and hats

In the last blog post I showed you what you can do with just implementing the interface for a <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring and than using the matrix over that semiring. Up until now, we can compute the transitive connection relation, the length of the shortest path, the maximum throughput between two nodes and the reliability on the most reliable path. But what we can’t do right now is producing the path(s) that instantiate these properties. So this is exactly what I will show you in this post.

Regular Expressions

As you might have to expected, especially since I wrote it in the last blog post, we will use our new best friend the <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring to do so. We actually come to the premier example of a semiring, the regular expression. You might know regular expressions from other programming languages, which is as helpful as it is unfortunate. Why is that you might ask and the answer is simple: There is a significant difference between regular expressions used in theoretical computer science and regular expressions as implemented in programming languages. The later are strictly more powerful. The nice part is they are also a syntactical super set of the first and by simply dropping this extra syntax we get exactly the former. So for you, this might result in some unlearning, I can’t help that, sorry.

So for everybody not knowing regular expressions from computer science curriculum, let’s give a brief explanation.

First we need a finite set of “letters” called alphabet usually for illustrative purposes one uses the regular letters of a usual alphabet, like <semantics>a,b,c,d,<annotation encoding="application/x-tex">a, b, c, d, \ldots</annotation></semantics>. But any alphabet will do, we could for example use the natural numbers up to some number, the edges of a finite graph or all subsets of <semantics>{1,2,3,4}<annotation encoding="application/x-tex">\{1,2,3,4\}</annotation></semantics> as letters, it doesn’t matter.

Let <semantics>l<annotation encoding="application/x-tex">l</annotation></semantics> be any letter of the alphabet <semantics>A<annotation encoding="application/x-tex">A</annotation></semantics>, then we can give the following recursive definition of the regular expressions <semantics>re<annotation encoding="application/x-tex">re</annotation></semantics> as follows:

<semantics>re,re1,re2::=|ϵ|l|(re1+re2)|(re1re2)|(re*)<annotation encoding="application/x-tex">re,re_1, re_2 ::= \emptyset | \epsilon | l | (re_1 + re_2) | (re1 \cdot re2) | (re^{*})</annotation></semantics>

Let’s go through this and decipher what it means.

  1. <semantics><annotation encoding="application/x-tex">\emptyset</annotation></semantics> this is simple. If we write nothing, it is a valid regular expression. And since we can’t leave blank space in a definition and think that everybody picks up that this is a significant syntactical element we write this as <semantics><annotation encoding="application/x-tex">\emptyset</annotation></semantics>.
  2. <semantics>ϵ<annotation encoding="application/x-tex">\epsilon</annotation></semantics> we need to construct a word that has no letters, to do that we use the symbol <semantics>ϵ<annotation encoding="application/x-tex">\epsilon</annotation></semantics>. You might ask what is the difference between nothing and a word of no letters. It is the same difference as between <semantics>0<annotation encoding="application/x-tex">{0}</annotation></semantics> and <semantics><annotation encoding="application/x-tex">\emptyset</annotation></semantics> one is a set containing something of no value, the other is simply empty, same goes here.
  3. If we have a letter <semantics>l<annotation encoding="application/x-tex">l</annotation></semantics>, writing just that letter is a valid regular expression.
  4. <semantics>re1+re2<annotation encoding="application/x-tex">re_1 + re_2</annotation></semantics> If we have two regular expressions already, we can either use the left or the right, appropriately this is usually called alternative or choice. The plus-sign is somewhat of a convention for regular expressions, but you might have already guessed what will make it’s way into our semiring in the end.
  5. <semantics>re1re2<annotation encoding="application/x-tex">re_1 \cdot re_2</annotation></semantics> this is called concatenation or sequential composition it simply states that we can look for something that matches the first regular expression followed by something that matches the second regular expression. If there is no danger of misreading it we usually omit the <semantics><annotation encoding="application/x-tex">\cdot</annotation></semantics> just like with multiplication.
  6. <semantics>re*<annotation encoding="application/x-tex">re^*</annotation></semantics> this finally is arbitrary iteration, if we have a regular expression we can match it an arbitrary amount of times.

Usually you define some form of rules that say we can omit some of the parens by saying <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> binds stronger than <semantics><annotation encoding="application/x-tex">\cdot</annotation></semantics> which in turn binds stronger than <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics>. Since this just looks like basic arithmetic I trust you can follow.

Example

Let’s give an example, suppose we have this regular expression:

<semantics>reexample=a(bd+ce)<annotation encoding="application/x-tex">re_{example}=a (bd + ce)</annotation></semantics>

Then let’s first check that it is a valid regular expression for the alphabet <semantics>{a,b,c,d,e}<annotation encoding="application/x-tex">\{a,b,c,d,e\}</annotation></semantics>. After stating this, we know that the individual letters <semantics>a,b,c,d<annotation encoding="application/x-tex">a,b,c,d</annotation></semantics> are valid regular expressions. Next we combine <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> and <semantics>d<annotation encoding="application/x-tex">d</annotation></semantics> with <semantics><annotation encoding="application/x-tex">\cdot</annotation></semantics> and get <semantics>(bd)<annotation encoding="application/x-tex">(b\cdot d)</annotation></semantics> same for <semantics>c<annotation encoding="application/x-tex">c</annotation></semantics> and <semantics>e<annotation encoding="application/x-tex">e</annotation></semantics> now we can apply <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics> and get <semantics>(bd+ce)<annotation encoding="application/x-tex">(b\cdot d+c\cdot e)</annotation></semantics>. As a last step we combine <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics> and <semantics>(bd+ce)<annotation encoding="application/x-tex">(b\cdot d+c\cdot e)</annotation></semantics> and get <semantics>a(bd+ce)<annotation encoding="application/x-tex">a\cdot (bd+ce)</annotation></semantics>. Omitting the <semantics><annotation encoding="application/x-tex">\cdot</annotation></semantics>’s we get that the regular expression is valid.

Now what does it “mean”

Let’s assume we have a graph and the edges are labelled with letters so there is an edge between two nodes labelled with <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics>, one labelled <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> and so on, like in this graph.

Then the regular expression above <semantics>a(bd+ce)<annotation encoding="application/x-tex">a(bd+ce)</annotation></semantics> describes all path’s from <semantics>N1<annotation encoding="application/x-tex">N1</annotation></semantics> to <semantics>N5<annotation encoding="application/x-tex">N5</annotation></semantics>. We first have to take the edge labelled <semantics>N1N2<annotation encoding="application/x-tex">N1\rightarrow N2</annotation></semantics> which is labelled <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics> then either the edges labelled <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> followed by the edge labelled <semantics>d<annotation encoding="application/x-tex">d</annotation></semantics> or the edges labelled <semantics>c<annotation encoding="application/x-tex">c</annotation></semantics> and <semantics>e<annotation encoding="application/x-tex">e</annotation></semantics>.

I think you see how this is useful for our case. So let’s go on and define a semiring.

The Regular Expression <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-Semiring

Actually regular expressions form a family of <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semirings, one for each underlying alphabet. So let’s call our alphabet <semantics>Σ<annotation encoding="application/x-tex">\Sigma</annotation></semantics>, which is the usual name for the alphabet in computer science. Then

<semantics>(Σ,+,,,ϵ)<annotation encoding="application/x-tex">(\Sigma, +, \cdot, \emptyset, \epsilon)</annotation></semantics> is a <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring with the rules above and two corner cases which give rise to the following two (standard) definitions:

  1. <semantics>+x=x+=x<annotation encoding="application/x-tex">\emptyset + x = x + \emptyset = x</annotation></semantics>
  2. <semantics>x=x=<annotation encoding="application/x-tex">\emptyset \cdot x = x \cdot \emptyset = \emptyset</annotation></semantics>

Let’s do a quick check if our properties hold.

  1. <semantics>ab=ba<annotation encoding="application/x-tex">a\oplus b = b\oplus a</annotation></semantics> since <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics> is the same as or this holds.
  2. <semantics>(ab)c=a(bc)<annotation encoding="application/x-tex">(a\oplus b)\oplus c = a\oplus (b\oplus c)</annotation></semantics>, by almost the same argument, if we first decide between <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics> or <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> and then between the result of that decision or <semantics>c<annotation encoding="application/x-tex">c</annotation></semantics> it’s the same as deciding the other way around.
  3. <semantics>a0=0a=a<annotation encoding="application/x-tex">a \oplus \mathbf{0}=\mathbf{0}\oplus a=a</annotation></semantics>, this is by the definition given above.
  4. <semantics>(ab)c=a(bc)<annotation encoding="application/x-tex">(a \otimes b)\otimes c = a \otimes (b \otimes c)</annotation></semantics> the concatenation of <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics> and <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> yields <semantics>ab<annotation encoding="application/x-tex">ab</annotation></semantics> that concatenated with <semantics>c<annotation encoding="application/x-tex">c</annotation></semantics> yields <semantics>abc<annotation encoding="application/x-tex">abc</annotation></semantics> which is the same as first concatenating <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> and <semantics>c<annotation encoding="application/x-tex">c</annotation></semantics> to <semantics>bc<annotation encoding="application/x-tex">bc</annotation></semantics> and then prepending <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics>.
  5. <semantics>a1=1a=a<annotation encoding="application/x-tex">a \otimes \mathbf{1} = \mathbf{1} \otimes a = a</annotation></semantics> concatenating the empty word to anything will not change anything, so this is ok too.
  6. <semantics>a0=0a=0<annotation encoding="application/x-tex">a \otimes \mathbf{0} = \mathbf{0} \otimes a = \mathbf{0}</annotation></semantics> that’s by the definition above.
  7. <semantics>a(bc)=(ab)(ab)<annotation encoding="application/x-tex">a \otimes (b \oplus c) = (a\otimes b) \oplus (a\otimes b)</annotation></semantics>, this is simply either first doing <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics> and then deciding between <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> or <semantics>c<annotation encoding="application/x-tex">c</annotation></semantics> or first deciding to go <semantics>ab<annotation encoding="application/x-tex">ab</annotation></semantics> or <semantics>ac<annotation encoding="application/x-tex">ac</annotation></semantics> so this holds true to.
  8. <semantics>(ab)c=(ac)(bc)<annotation encoding="application/x-tex">(a \oplus b) \otimes c = (a\otimes c) \oplus (b\otimes c)</annotation></semantics>, almost the same as the one before, either decided between <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics> and <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> and then do <semantics>c<annotation encoding="application/x-tex">c</annotation></semantics> or deciding to do <semantics>ac<annotation encoding="application/x-tex">ac</annotation></semantics> or <semantics>bc<annotation encoding="application/x-tex">bc</annotation></semantics> should be the same.

Ok, we are satisfied, this is a semiring. Now for the <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> part, which this time is a little more interesting than before.

If we want to describe all ways from one node to another, there might be loops on the way. For example let’s modify the graph from above slightly that it looks like this.

Now on a way from <semantics>N1<annotation encoding="application/x-tex">N1</annotation></semantics> to <semantics>N5<annotation encoding="application/x-tex">N5</annotation></semantics> we would be allowed to take the loop labelled <semantics>f<annotation encoding="application/x-tex">f</annotation></semantics> arbitrarily often, or writing it in the syntax of regular expression <semantics>a(bd+cf*e)<annotation encoding="application/x-tex">a(bd+cf*e)</annotation></semantics>. We have to take this into account for our <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring definition of regular expressions. So let’s do it.

Defining <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>s

I have a small problem since now we have two different <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> operations, one from the semiring and one from the regular expressions. To keep those apart I will use <semantics>*sr<annotation encoding="application/x-tex">*_{sr}</annotation></semantics> for the semiring and <semantics>*re<annotation encoding="application/x-tex">*_{re}</annotation></semantics> for the regular expression star. I hope this isn’t to confusing for you.

Let us define a <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>.

<semantics>xsr*={ϵfalls x=ϵfalls x=ϵy*srfalls x=y*rex*reotherwise<annotation encoding="application/x-tex">x^*_{sr}=\left\{\begin{array}{ll}\epsilon & \text{falls } x = \emptyset\\\epsilon & \text{falls } x = \epsilon\\y^{*_{sr}} & \text{falls } x = y^{*_{re}}\\x^{*_{re}} & \text{otherwise}\end{array}\right.</annotation></semantics>

Even though this is a bit tricky I think you are by now fully capable of checking that this will actually give us a valid <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring.

Haskell

Now for a Haskell implementation. Since I don’t want to conflict with other operators I use Or, Concat and Star instead of <semantics>+,<annotation encoding="application/x-tex">+, \cdot</annotation></semantics> and <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>.

data StarSemiringExpression a = 
    Var a 
  | Or (StarSemiringExpression a) (StarSemiringExpression a)
  | Concat (StarSemiringExpression a) (StarSemiringExpression a)
  | Star (StarSemiringExpression a)
  | None 
  | Empty

newtype RE a = RE (StarSemiringExpression a)

re :: a -> RE a
re = RE . Var

instance Semiring (RE a) where
  zero = RE None
  one = RE Empty
  RE None <+> x = x
  x <+> RE None = x
  RE Empty <+> RE Empty = RE Empty
  RE Empty <+> RE (Star a) = RE (Star a)
  RE (Star a) <+> RE Empty = RE (Star a)
  RE x <+> RE y = RE (x `Or` y)
  RE Empty <.> x = x
  x <.> RE Empty = x
  RE None <.> _ = RE None
  _ <.> RE None = RE None
  RE x <.> RE y = RE (x `Concat` y)
  
instance StarSemiring (RE a) where
  star (RE None) = RE Empty
  star (RE Empty) = RE Empty
  star (RE (Star x)) = star (RE x)
  star (RE x) = RE (Star x)

The helper function re in combination with leaving out the actual alphabet for our regular expression allows us to use any type, as I’ve shown above, and implicitly creating the alphabet from the “letters” that are used in the regular expression. (For mathematically inclined readers: Yes, this is only ok, as long as we only use finite regular expression, but I would doubt that you can write an infinite one ;-) )

There is one thing left to do to put this to use, we need another small helper function:

reGraph :: (Ix i) => Matrix i (Maye a) -> Matrix (Re a) 
reGraph = fmap (maybe zero re)

This simply takes a matrix, where there might be an entry at any index and transforms that into a regular expression of one letter and takes the entry itself as letter, if there is no entry present at that point it just uses <semantics>ϵ<annotation encoding="application/x-tex">\epsilon</annotation></semantics>.

What about the Matrix

What remains is to clear up is what our <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> operation matrices does now. What we saw in the post from last week is that the algorithm minimised or maximised some property we calculated. This time it’s a little different. Operations like <semantics>max<annotation encoding="application/x-tex">max</annotation></semantics>, <semantics>min<annotation encoding="application/x-tex">min</annotation></semantics> and <semantics>||<annotation encoding="application/x-tex">||</annotation></semantics> “discard” one of their operands but the <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics> operation from regular expressions doesn’t it creates an alternative. So for any node we can use as an intermediate what we get is “Either use the path we already know OR the path we can construct by using the intermediate node we are currently testing.” Now there might not be a path leading from our start to our target node using the specific intermediate node, then we get back a <semantics><annotation encoding="application/x-tex">\emptyset</annotation></semantics> as an alternative path, which is the only value that is actually discarded by <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics>. So what we get in the end is a regular expression specifying all path’s we can take to get from a start to a target node.

Oh by the way with this we implemented another well known algorithm with the same 7 lines of code I presented in the last blog post. It’s called the McNaughton-Yamada algorithm or the Kleene-Construction and is taught to probably every computer science major on the planet. (And forgotten about 5 minutes later ;-) )

Wrapping up

In the last blog post we started to put our <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring knowledge to use on graphs and found that the same 7 lines of code got us various properties, depending on which semiring we plugged in. This blog post showed how we can describe path between nodes and how we can get all path between two given nodes. Again with the very same 7 lines of code. What remains is to put both of those together to get all path exhibiting a given property and that is what we’ll do in the next instalment.

February 23, 2014 12:00 AM

February 15, 2014

Farthen

Zapt

In eigener Sache: Das hier ist Eigenwerbung. Mehr oder weniger.

Seit gestern ist Zapt im iOS App Store. Ich möchte diesen Artikel mal ein bisschen dafür nutzen, darüber zu erzählen.

Was ist Zapt?

Zapt ist eine App für trakt.tv. Trakt ist ein Service, wo du deine gesehenen Filme und Serien "tracken" kannst, das heißt, in Listen sortieren, markieren, welche bereits gesehen wurden, bewerten usw. Damit ist es sehr angenehm, sich zu merken, wo ich gerade in einer Serie war und wo ich weiter machen muss. Darüber hinaus kann ich auch ansehen, was meine Freunde gerade machen und welche Serien die so schauen usw.

Zapt ist dabei eine App, die ich geschrieben habe, um auf dem iPhone (und iPod touch) einfach und schnell die Lieblingsserien und Filme einzuchecken (quasi zu markieren, dass du die Episode/den Film jetzt gerade siehst). Darüber hinaus halt auch noch die ganzen Listen zu verwalten, die da noch so anfallen.

Klingt alles erstmal relativ kompliziert, aber ich war ja noch nie so gut im Erklären von einfachsten Sachverhalten *hust*.

Warum wollt ihr Zapt?

Nunja, keine Ahnung. Ich empfinde es als eine sehr angenehme Art und Weise, um Serien und Filme zu verwalten, auch unterwegs. Da Zapt sehr viel cached ist es auch super für die U-Bahn oder sonstiges Edgeland. Zumindest ein bisschen. Um Dinge einzutragen braucht ihr immer noch Internet. Ist ja auch irgendwie klar.

Was kommt als nächstes?

Erstmal kommt nächste Woche ein Bugfixrelease. Da sind ein paar Dinge noch ein bisschen runder und ein paar Fehler behoben, die mehr oder weniger nervig sind bzw waren.

Für die Zukunft? Ich habe da ein paar Ideen. Eventuell baue ich die soziale Komponente noch weiter aus, dass mehr zu sehen ist, welche Leute was schauen aus dem eigenen Freund*innenkreis. Auch eine Kalenderfunktion ist geplant. Mal schauen, wie sich das alles entwickelt. Auch hier freue ich mich sehr über Feedback. Wirklich.

Warum überhaupt das alles?

Ich habe Zapt vor etwas über einem Jahr angefangen. Es war mein erstes richtiges iOS Projekt. Dementsprechend habe ich in diesem Jahr sehr, sehr viel darüber gelernt. Manche Komponenten in Zapt sind auch immer noch größtenteils aus dieser Zeit. Wie das halt so ist mit wachsendem Code. Aber ich verspreche, da auch in Zukunft weiter aufzuräumen.

Und nu?

Gebt Feedback! Am besten per Mail an zapt@farthen.de. Das lese ich alles und versuche, auch alles zu beantworten. Und ich nehme es mir zu Herzen, wirklich. Das bedeutet mir sehr viel. Sonst könnt ihr aber auch @ZaptApp auf Twitter anschreiben. Lese ich auch alles.

Ich muss ehrlich sagen, dass es mich natürlich am meisten motiviert, die App weiter zu machen, wenn ich weiteren Input bekomme. Wenn euch die App gefällt, dann erzählt es euren Freund*innen, erzählt es mir, schreibt was in euer Blog, was auch immer. Hilft alles. Und, da wir nun mal leider in diesem kapitalistischen System leben, motiviert es mich ja durchaus auch, wenn die App gekauft wird. Ist ja auch irgendwie verständlich hoffentlich. Naja.

Danke

Ich muss einmal Danke sagen. Ich habe zwar Zapt fast vollständig selber gemacht, aber baue da durchaus natürlich auf Wissen und Ressourcen von anderen auf. Zu erwähnen sind da:

  • Trakt, für den tollen Webservice und die API, ohne die das hier natürlich überhaupt nicht möglich gewesen wäre. Auch für den netten Mailsupport, der immer freundlich war und schnell auf Fragen antwortete.
  • AFNetworking für ein sehr angenehmes, wenn auch anfangs leicht gewöhnungsbedürftiges Netzwerkframework.
  • CocoaLumberjack für ein sehr angenehmes und leichtes Loggingframework.
  • TUSafariActivity. Manchmal sind es die kleinen Dinge und die Liebe zum Detail, die Dinge rund machen. Wie auch das hier. Macht nicht viel, aber das macht es gut.
  • stackoverflow. Diese Community ist großartig und ich habe für unzählige Probleme dort die passende Lösung gefunden.
  • viirus für Betatesting, zahlreiche Bugreports, Feature Requests und auch einfach die Motivation, weiter zu machen.
  • mxey für Betatesting, eine Menge von wichtigen Usability-Anmerkungen und Kommentaren, Bugreports, die wichtige zweite Meinung zu Features und vielen weiteren Dingen.
  • papierschiff für die ganzen angenehmen und bereichernden Gespräche über iOS Entwicklung, Hilfestellungen, Anregungen, und auch einfach dafür, nur wegen meiner App jetzt Trakt zu benutzen.
  • Alle anderen, die ich hier nicht genannt habe fürs Betatesting, für Hilfestellungen, Anregungen und vieles mehr. Ihr wisst, wer ihr seid. Danke.

Wer das hier gelesen hat ist übrigens auch ziemlich großartig. Danke dafür.

by fina at February 15, 2014 08:10 AM

xinitrc

Magic tricks

After in the last blog post I described some algebraic structures and already said I would like to show case how to solve some very different problems with those. I think it’s now time to go into that. I start with something which is more or less a reiteration of a fantastic blog post by Russell O’Conner on mostly graph problems. I will layout the problems a little differently and hope to convey the ideas behind the post to a wider audience. I will also omit some stuff and maybe come back to that in a later post. But now without further ado let’s get started.

First up, I had another blog post in mind at first, which in retrospect seemed a little to complicated for a first post. Since I changed the topic of this post slightly, I had to go back to the last post and add another algebraic structure the <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring.

Square Matrixes

So after introducing the definition of a (<semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-)semiring in the last post, let’s now look at some examples. First let’s agree that any square matrix over a semiring is a semiring as well. To do that we first need to define the two operations <semantics><annotation encoding="application/x-tex">\oplus</annotation></semantics> and <semantics><annotation encoding="application/x-tex">\otimes</annotation></semantics> in terms of the operations on the underlying semiring. In other words given a semiring <semantics>(X,,,0,1)<annotation encoding="application/x-tex">(X, \oplus, \otimes, \mathbf{0}, \mathbf{1})</annotation></semantics> give a semiring <semantics>(X×,m,m,0m,1m)<annotation encoding="application/x-tex">(X^{\mathbb{N}\times\mathbb{N}}, \oplus_{m}, \otimes_{m}, \mathbf{0}_{m}, \mathbf{1}_{m})</annotation></semantics> such that this also forms a semiring. The second part is to select the elements <semantics>0m<annotation encoding="application/x-tex">\mathbf{0}_{m}</annotation></semantics> and <semantics>1m<annotation encoding="application/x-tex">\mathbf{1}_{m}</annotation></semantics>.

Actually this is simple for the <semantics>m<annotation encoding="application/x-tex">\oplus_m</annotation></semantics> Operation we just have to lift the <semantics><annotation encoding="application/x-tex">\oplus</annotation></semantics> operation of our underlying semiring to matrices. Lifting simply means doing the operation <semantics><annotation encoding="application/x-tex">\oplus</annotation></semantics> on every component of the matrix. So the first item in the first row of both matrices are connected with <semantics><annotation encoding="application/x-tex">\oplus</annotation></semantics> then the second items of the first rows and so on and so on. Written mathematically:

<semantics>C=AmBcij=aijbij<annotation encoding="application/x-tex">C = A \oplus_{m} B \Leftrightarrow c_{ij} = a_{ij} \oplus b_{ij}</annotation></semantics>

here <semantics>aij<annotation encoding="application/x-tex">a_{ij}</annotation></semantics> simply means the element at the ith column in the jth row of matrix <semantics>A<annotation encoding="application/x-tex">A</annotation></semantics>.

Ok now for the second operation <semantics>m<annotation encoding="application/x-tex">\otimes_m</annotation></semantics> we simply use the same “trick” we usually us to multiply two matrices, we use the <semantics><annotation encoding="application/x-tex">\otimes</annotation></semantics> operation component wise on the rows of the first matrix with the corresponding columns of the second matrix and than use the <semantics><annotation encoding="application/x-tex">\oplus</annotation></semantics> operation over all of these results to get one result. Or mathematically put:

<semantics>C=AmBcij=k=0n(akjbik)<annotation encoding="application/x-tex">C = A \otimes_{m} B \Leftrightarrow c_{ij} = \oplus_{k=0}^{n} (a_{kj} \otimes b_{ik})</annotation></semantics>

where <semantics>n<annotation encoding="application/x-tex">n</annotation></semantics> is the size of the matrix.

What remains open are the neutral elements, but these both are easy. To do nothing to any component we can add <semantics>0<annotation encoding="application/x-tex">\mathbf{0}</annotation></semantics> from the underlying semiring, since we already know this doesn’t change anything, due to the rules of the underlying semiring, it wont change anything in the square matrices. So <semantics>0m<annotation encoding="application/x-tex">\mathbf{0}_m</annotation></semantics> is just a square matrix consisting of all components <semantics>0<annotation encoding="application/x-tex">\mathbf{0}</annotation></semantics>.

For the <semantics>1m<annotation encoding="application/x-tex">\mathbf{1}_{m}</annotation></semantics> we use the identity matrix so the matrix, where all elements on the main diagonal are 1, we only have to use the <semantics>1<annotation encoding="application/x-tex">\mathbf{1}</annotation></semantics> from our semiring, and everything works out perfectly.

Now you have only to suffer through the next section for an implementation, which is somewhat tailored to our application.

Graphs

One application of square matrices is to describe the connections of graphs. Actually depending on your definition of a graph the matrix can be used as a complete definition of the graph, so let’s do so. First we need a type to hold the edges. Since we don’t want to specify what we can put in those edges, this will later help us to use one representation of graphs and edges for multiple purposes.

data Edge a = a :-> a deriving (Eq, Ord, Bounded, Ix) 

Here we have an Edge datatyp with a constructor :->. And we let the Haskell compiler figure out how we can check for Equality (Eq), that we can order edges (Ord), that there is a min and a maximum bound (Bounded) on all the types and that we can Index (Ix) especially the last two will be very useful later on.

Now we come to our matrix type. For a Matrix we need two types of input parameters, the type of index data, and the type of the content. The index data tells us how to address the components. In Haskell we could use any type for this as long as we have some mapping to the integers. This is a little more flexible in writing than always having to switch between your mental model and if it is [x][y] or [y][x].

In addition we say that Matrices are an instance of Applicative, which denotes that it is an applicative functor. I wont go into this in this post just think of it as it implements the container interface and we can apply functions to the individual components. This is not perfectly accurate but for the moment it will do.

Third we add two helper function, one which generates a list with one entry for every component of the resulting matrix, and one which takes a function then takes every component of our matrix and applies this function. These two functions simply do the following, whenever we want to create a new square matrix for a specific type we generate a dummy element for every entry and then apply a function to convert that dummy element into the final entry. In Java or C you would have a for loop iterating through the numbers 0 up to n (this is the dummy list) and then do something like x[i] = f(i) where f is some function in the body of the for loop.

Last but not least we say square matrices over edges where the content type is a semiring are as well a semiring, with the operations just like I told you before.

newtype Matrix i e = Matrix {unmatrix :: (Array (Edge i) e)}

instance (Ix i) => Functor (Matrix i) where
  fmap f (Matrix m) = Matrix (fmap f m)

instance (Ix i, Bounded i) => Applicative (Matrix i) where
  pure x = matrix (const x)
  Matrix f <*> Matrix x = matrix (\(i :-> j) -> (f!(i :-> j)) (x!(i :-> j)))
	  
entireRange :: (Ix i, Bounded i) => [i]                                                                             
entireRange = range (minBound, maxBound)                                                                                            
matrix :: (Ix i, Bounded i) => (Edge i -> e) -> Matrix i e
matrix f = Matrix . listArray (minBound, maxBound) . map f $ entireRange
	  
instance (Ix i, Bounded i, Semiring a) => Semiring (Matrix i a) where
  zero = pure zero
  one = matrix (\(i :-> j) -> if i == j then one else zero)
  (<+>) = liftA2 (<+>)
  (Matrix x) <.> (Matrix y) = matrix build
      where
	      build (i :-> j) = foldr (<+>) zero [x!(i :-> k) <.> y!(k :-> j) | k <- entireRange]

So now we come to the heart and soul of this blog post, a mere 7 lines of code.

instance (Ix i, Bounded i, StarSemiring a) => StarSemiring (Matrix i a) where
  plus x = foldr f x entireRange
    where
	  f k (Matrix m) = matrix build
	    where
		  build (i :-> j) = m!(i :-> j) <+>
                            m!(i :-> k) <.> star (m!(k :-> k)) <.> m!(k :-> j)
														  

Ok so what does it do. It stipulates that matrices over a star semiring are also star semirings. For that we need to implement one of the two operations <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> or <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics>. Since <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> will lead us to a infinite recursion I opted for <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics>, but what does it do? First up a recap the operations of a <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring are Fix point operators, that is the perform one or more operations until there is no more change (or ad infinitum if there is always progress). So how would we implement this.

Let’s formulate this in terms of graphs and their connectedness structure, we start with an initial setup, and then go through every node foldr f x entireRange and take a look at every component if either the current result doesn’t change (m!(i:->j)) or (<+>) if we can get a “better” result using the new node k ( m!(i :-> k) <.> star (m!(k :-> k)) <.> m!(k :-> j)).

I give you that sounds really vague, how can this be of any significance. This is where the fun starts, we use different underlying <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-Semirings. Let’s start with the most simple one.

Boolean <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-Semiring

The Boolean <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-Semiring is really simple, first the semiring-part, I will use the standard programming notation for and and or to make it a little easier. Than this <semantics>({0,1},||,&&,0,1)<annotation encoding="application/x-tex">(\{0,1\}, ||, \&\&, 0, 1)</annotation></semantics> is the Boolean semiring. For this one I will do a little sanity check for the later semirings I let you do that on your own. First if I take any Boolean (0 or 1) and do an or operation with 0 we will get the original value back. (0 || 0 = 0, 1 || 0 = 1, 0 || 1 = 1). Same goes for the and operation and 1 (0 && 1 = 0, 1 && 0 = 0, 1 && 1 = 1). These exhaustive examples also take care of the property that a || b = b || a. What remains to show is that the operations are distributing over one another, but this is what is called Rule of replacement. So we have established that Booleans form a semiring.

Now for the <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> part, this is simple (and somewhat unceremoniously) too. Looking at the definition of <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> we have:

<semantics>x*=1xx*<annotation encoding="application/x-tex">x^{*}=1\oplus x\otimes x^*</annotation></semantics>

So let’s put the operators from our Boolean semiring into place. Then this becomes:

<semantics>x*=1||x&&x*<annotation encoding="application/x-tex">x^{*}=1 || x \&\& x^*</annotation></semantics>

now we simply use short circuit evaluation the result of 1 || anything will always be 1 so we can simply say <semantics>x*=1<annotation encoding="application/x-tex">x^*=1</annotation></semantics> for any <semantics>x<annotation encoding="application/x-tex">x</annotation></semantics> and now we have a star semiring.

Haskell

In Haskell this is equally simple

instance Semiring Bool where
  zero = False
  one = True 
  (<+>) = (||)
  (<.>) = (&&)

instance StarSemiring Bool where
  star x = one

Application

So now let’s put this to a good use. Since we now have a <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring we know every square matrix over this also forms a <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semirings. For an example take the following graph as an example

We can represent this as a matrix, we have a row and column for every node in the graph and whenever there is an edge from one node to another, we have a 1 in the row of the origin at the column of the target node. This looks as follows

<semantics>C=(011000000100010100000010000001101000)<annotation encoding="application/x-tex">C=\left (\begin{array}{cccccc} 0 & 1 & 1 & 0 & 0 & 0\\ 0 & 0 & 0 & 1 & 0 & 0\\ 0 & 1 & 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 0 & 0 & 1\\ 1 & 0 & 1 & 0 & 0 & 0\\ \end{array}\right)</annotation></semantics>

In Haskell we can put like this.

type Graph i = Matrix i Bool

graph :: (Ix i, Bounded i) => [Edge i] -> Graph i
graph edgeList = matrix build
  where
      build i = i `elem` edgeList
	  
data Nodes = N1 | N2 | N3 | N4 | N5 | N6 deriving (Eq, Ord, Bounded, Ix, Show)

exampleGraph1 = graph [N1 :-> N2, N1 :-> N3, N2 :-> N4, N3 :-> N2, N3 :-> N4, N4 :-> N5, N5 :-> N6, N6 :-> N1, N6 :-> N3]

So ok, now we have this in Haskell, the question is what does our <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> operation for Matrixes do in this case. Let’s review that:

For every entry component of the matrix we go through every node of the matrix and check if we can get a “better” result by taking that node.

Let’s do this in an example. Take the entry in the first row of at the fourth column. m!(N1 :-> N4) in our initial matrix it is 0. Now let’s go trough every node and do

m!(i :-> j) <+> m!(i :-> k) <.> star (m!(k :-> k)) <.> m!(k :-> j).

We first rewrite this to use our semiring then we get

m!(i :-> j) || m!(i :-> k) && star (m!(k :-> k)) && m!(k :-> j).

So when we go through every node N1 up to N6 the following happens:
  1. m!(N1 :-> N4) || m!(N1 :-> N1) && star (m!(N1 :-> N1)) && m!(N1 :-> N4)= 0 || 0 && star (0) && 0=0|| 0 && 1 && 0=0
  2. m!(N1 :-> N4) || m!(N1 :-> N2) && star (m!(N2 :-> N2)) && m!(N2 :-> N4)= 0 || 1 && star (0) && 1=0|| 1 && 1 && 1=1
  3. m!(N1 :-> N4) || m!(N1 :-> N3) && star (m!(N3 :-> N3)) && m!(N3 :-> N4)= 1 || 1 && star (0) && 1=1|| 1 && 1 && 1=1
  4. m!(N1 :-> N4) || m!(N1 :-> N4) && star (m!(N4 :-> N4)) && m!(N4 :-> N4)= 1 || 1 && star (0) && 0=1|| 1 && 1 && 0=1
  5. m!(N1 :-> N4) || m!(N1 :-> N5) && star (m!(N5 :-> N5)) && m!(N5 :-> N4)= 1 || 0 && star (0) && 0=1 || 0 && 1 && 0=1
  6. m!(N1 :-> N4) || m!(N1 :-> N6) && star (m!(N6 :-> N6)) && m!(N6 :-> N4)= 1 || 0 && star (0) && 0=1|| 0 && 1 && 0=1

Now what happened here? As soon as we hit the second iteration we found a path from N1 to N4 via N2 and the entry in the matrix changed from 0 to 1. If we do this for all entries what will happen is, we calculate the transitive connection relation, in other words we calculate which node we can reach from which other node via any path.

Without all the fuzz, what we did here is implementing the so called Warshall-Algorithm in Haskell, in a somewhat complicated way I give you that. But the nice part is, we are not done here.

Tropical <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring

In the last post I already introduced the Tropical <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-Semiring <semantics>({},min(x,y),+,,0)<annotation encoding="application/x-tex">(\mathbb{N}\cup \{\infty\}, min(x,y), +, \infty, 0)</annotation></semantics>, the <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> is in the update.

Application

Let’s update our example slightly, we now make the edges go both ways and attach weights to them. You can think of those as distances.

Or as a matrix we can represent this like this.

<semantics>C=(79147101591011215116691429)<annotation encoding="application/x-tex">C=\left (\begin{array}{cccccc} \infty & 7 & 9 & \infty & \infty & 14\\ 7 & \infty & 10 & 15 & \infty & \infty\\ 9 & 10 & \infty & 11 & \infty & 2\\ \infty & 15 & 11 & \infty & 6 & \infty\\ \infty & \infty & \infty & 6 & \infty & 9\\ 14 & \infty & 2 & \infty & 9 & \infty\\ \end{array}\right)</annotation></semantics>

Or in Haskell


exampleEdgeList2 :: (Edge Node2) -> Maybe Integer
exampleEdgeList2 (i :-> j) = (lookup (i :-> j) edges) `mplus` (lookup (j :-> i) edges)
  where
      edges = [(N1 :-> N2, 7), (N1 :-> N3, 9), (N1 :-> N6, 14),
	           (N2 :-> N3,10), (N2 :-> N4,15),
			   (N3 :-> N4,11), (N3 :-> N6, 2),
			   (N4 :-> N5, 6),
			   (N5 :-> N6, 9)]
														  

Now what does our <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> operation do now? Let’s go with the same example we did above, the first row, fourth column.

We once again go through N1 to N6 in search for what happens to N1 :-> N4

  1. min(m!(N1 :-> N4), m!(N1 :-> N1) + star (m!(N1 :-> N1)) + m!(N1 :-> N4)= min(∞, ∞ + star (∞) + ∞)= min(∞, ∞ + 0 + ∞)=∞
  2. min(m!(N1 :-> N4), m!(N1 :-> N2) + star (m!(N2 :-> N2)) + m!(N2 :-> N4)= min(∞, 7 + star (∞) + 15)= min(0, 7 + 0 + 15)=22
  3. min(m!(N1 :-> N4), m!(N1 :-> N3) + star (m!(N3 :-> N3)) + m!(N3 :-> N4)= min(22, 9 + star (∞) + 11)= min(22, 9 + 0 + 11)=20
  4. min(m!(N1 :-> N4), m!(N1 :-> N4) + star (m!(N4 :-> N4)) + m!(N4 :-> N4)= min(20, 20 + star (∞) + ∞)= min(20, 20 + 0 + ∞)=20
  5. min(m!(N1 :-> N4), m!(N1 :-> N5) + star (m!(N5 :-> N5)) + m!(N5 :-> N4)= min(20, ∞ + star (∞) + ∞)= min(20, ∞ + 0 + ∞)=20
  6. min(m!(N1 :-> N4), m!(N1 :-> N6) + star (m!(N6 :-> N6)) + m!(N6 :-> N4)= min(20, 14; + star (∞) + ∞)= min(20, 14 + 0 + ∞)=20

So what happened here, on step 2 we got a new value for our entry in the matrix, which at step three was again changed. What you can see here, is the same algorithm instantiated with another semiring calculates the shortest distance between the nodes.

Oh this algorithm by the way is known as the Floyd- or Floyd-Warshall-Algorithm. I doubt that at it’s conception the semiring property of bool and the tropical semiring was properly observed. You can obviously come from the Warshall- to the Floyd-Warshall-Algorithm by just looking long enough at the original code I believe.

Let’s do two more semirings.

MaxMin <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring

Another semiring we could think up is this <semantics>({},max(x,y),min(x,y),0,)<annotation encoding="application/x-tex">(\mathbb{N}\cup\{\infty\}, max(x,y), min(x,y), 0, \infty)</annotation></semantics>. I have trust in you that you can check that this ins indeed a semiring on your own. For the <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> operation I give you some help, even though this is easy too. Once again the defining property is:

<semantics>x*=1xx*<annotation encoding="application/x-tex">x^*=\mathbf{1}\oplus x\otimes x^*</annotation></semantics>

which in this case means:

<semantics>x*=max(,min(x,x*))<annotation encoding="application/x-tex">x^*=max(\infty, min(x,x^*))</annotation></semantics>

and once again short circuit evaluation yields simply that <semantics>x*=<annotation encoding="application/x-tex">x^*=\infty</annotation></semantics> since the maximum of <semantics><annotation encoding="application/x-tex">\infty</annotation></semantics> and anything else will be <semantics><annotation encoding="application/x-tex">\infty</annotation></semantics>.

Application

I wont go through the algorithm again, but just go through it on a more thought experimental way.

max (m!(i :-> j), min (min (m!(i :-> k), star (m!(k :-> k)), m!(k :-> j))

This is the line of our algorithm with the operations from the semiring given above. Let’s examine what this does. For every connection from one node to another we take the maximum of all possible path’s connecting two nodes, but take the minimum of all the connections in between. So if we have two paths leading from one node to another we take the one where the smallest edge weight is larger than the smallest edge weight on the other path.

Assume that the weights now represent throughput through some channel, than this algorithm gives us the channel to choose to send the most data in the shortest time. In our example graph from above for example we would take the path <semantics>N1N3N4<annotation encoding="application/x-tex">N1 \rightarrow N3 \rightarrow N4</annotation></semantics> over <semantics>N1N2N4<annotation encoding="application/x-tex">N1\rightarrow N2\rightarrow N4</annotation></semantics> because the minimum edge weight on the first path is 9 while on the second path it is 7.

I will only give you the semiring for MaxMin here and will give a full Haskell file with everything implemented later.


data MinMax = Infty | MinMax Integer deriving (Eq, Ord)

instance Semiring MinMax where
  zero = MinMax 0
  one = Infty
  _ <+> Infty = Infty
  Infty <+> _ = Infty
  (MinMax a) <+> (MinMax b) = MinMax $ max a b
  Infty <.> x = x
  x <.> Infty = x
  (MinMax a) <.> (MinMax b) = MinMax $ min a b
			
instance StarSemiring MinMax where
  star _ = one

MaxMult <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring

So final example for this blog post. Another semiring, this time <semantics>([0,1],max(x,y),,0,1)<annotation encoding="application/x-tex">([0,1], max(x,y), \cdot, 0, 1)</annotation></semantics>. This time I fully trust you that you can check that this is a semiring and that you can find a suitable <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> operation.

Application

Let’s assume we have a graph like the one above but this time the edge weights are real values between 0 and 1. We interpret these as reliabilities. So the higher the number the more reliable the path. Should you want to send a data package from one node to another you would obviously like to have it go the most reliable path. And that is exactly what the <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> operation will now do.

Once again taking the significant line from our algorithm and substituting the operations in we get this.

max (m!(i :-> j), (m!(i :-> k) * star (m!(k :-> k)) * m!(k :-> j))

So on every path we multiply the weights, giving us the overall reliability of that path, and then take the path with the highest such value.

What follows is the Haskell implementation of the Semiring, I will give you a Haskell file containing everything a little later.

data Reliability = Reliability Double deriving (Eq, Ord)

instance Semiring Reliability where
  zero = Reliability 0
  one = Reliability 1
  (Reliability a) <+> (Reliability b) = Reliability $ max a b
  (Reliability a) <.> (Reliability b) = Reliability $ a * b
		
instance StarSemiring Reliability where
  star _ = one
		  

Wrapping up

What I showed you are 7 very powerful lines of code, implementing a very general algorithm. Just from this blog post they implement the transitive connection relation, length of the shortest path between two nodes, the maximum throughput between two nodes and the highest possible reliability for a path. Currently they don’t give you the actual path’s achieving those properties, but, probably not much to your surprise, we can actually do that with our newest best friend the <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>-semiring too. But since this blog post is long enough already I will leave that for the next blog post. What remains is this link to the file containing a working implementation and some examples.

February 15, 2014 12:00 AM

February 09, 2014

Tinuqin

In continuation of yesterday’s post, have some mermaid...





In continuation of yesterday’s post, have some mermaid themed fingernails.

Nail polish used:
Essence Wonder Wow! Man! (Limited Superheroes Edition)
P2 Lost in Paradise
Catrice Glitterazzi
Essence Party in a Bottle

February 09, 2014 11:48 PM

xinitrc

Sucker for generality

Lately, for reasons which slip my mind right now, I had to review some old library code I wrote. And as always when you review code you wrote a while ago, you think “How could I have ever thought this was good code?” Usually this is because the code contains more hacks than clean code or because you can’t even understand what that piece of code does. In this case I was quite ok with that, but could have hit myself hard for not recognising a general pattern of all distinct cases I programmed back then. This prompted me to go to:

  1. Rewrite the code in the more general way, reducing the code size by 30% and increasing the speed on two cases and
  2. Go into research mode for finding even better patterns of generalisation.

I can’t really show you the difference in 1. because I wrote the code for a project I was hired for and it’s not really open source but I decided to make a series of blog post about 2. I hope you like it.

Preliminaries

Since I am a theoretical computer scientist and really like Haskell, probably much of these will take the form of “Applied Abstract Algebra” or “Applied Category Theory” in Haskell. Therefore I decided to do the following: Every part in this series will be divided into (at least) blog posts, the first explaining the theoretical foundations, like which algebraic/categorical structure or concept we will use, introducing some examples and some code in Haskell to use these. Subsequent blog posts will make use of the implementation and give general algorithms to solve different problems.

As this is the first blog post in the series we will start with theory. In this case Sets, Magmas, Semigroups, Monoids and Semirings.

Sets

Actually a Set in the mathematical sense is not that easy to define, there are several alternatives to do so, because the naive definition “A collection containing everything satisfying a given property” is flawed. I won’t go into that (right now). For the moment let us say a Set is a collection of things which we can consider as an object of it’s own. We dodge the question of how to form a Set and only say someone made one for us and we can work with that.

Examples

I think everybody knows some examples of Sets, let me give some anyways

  • <semantics>={0,1,2,3,}<annotation encoding="application/x-tex">\mathbb{N}=\{0,1,2,3, \ldots\}</annotation></semantics> The set of natural numbers is a set.
  • <semantics>={0,1,1,2,2,}<annotation encoding="application/x-tex">\mathbb{Z}=\{0, -1, 1, -2, 2, \ldots\}</annotation></semantics> The set of integers is a set.
  • All vertices in a Graph form set, as do all edges
  • <semantics><annotation encoding="application/x-tex">\ldots</annotation></semantics>

Haskell

In the code we will present later, we can usually assume that collection of every member of a type forms a Set, so I don’t give code for Sets here. If we really need to use Sets we can use Data.Set from the Standard Haskell Library.

Magma

A Magma or a Groupoid is probably one of the algebraic structures, almost nobody knows. A Magma is a Set <semantics>X<annotation encoding="application/x-tex">X</annotation></semantics> equipped with on binary operation <semantics>:X×XX<annotation encoding="application/x-tex">\oplus:X\times X\rightarrow X</annotation></semantics> which is closed in that Set, with no further restrictions. This is so simple that everybody who has ever written a program must have seen a Magma without noticing it and probably has written something which is a Magma themself. Let’s go over this with an example:

Examples

Take the natural numbers <semantics>X=<annotation encoding="application/x-tex">X=\mathbb{N}</annotation></semantics> and the operation <semantics>=+<annotation encoding="application/x-tex">\oplus=+</annotation></semantics> as the usual addition we all know from school. This forms a Magma because:

  1. We have a Set <semantics>X<annotation encoding="application/x-tex">X</annotation></semantics> in this case the natural numbers <semantics><annotation encoding="application/x-tex">\mathbb{N}</annotation></semantics>.
  2. We have a binary operation <semantics><annotation encoding="application/x-tex">\oplus</annotation></semantics>, that is a operation that takes two inputs and returns one output, in this case <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics>, and
  3. This operation is closed in the Set, which means, whichever two elements we select as inputs we get a element of the same Set as output.

Let’s do another example: We take the natural numbers as our Set <semantics>X=<annotation encoding="application/x-tex">X=\mathbb{N}</annotation></semantics> again and as the operation <semantics><annotation encoding="application/x-tex">\oplus</annotation></semantics> we take the minimum this time <semantics>min(x,y)<annotation encoding="application/x-tex">min(x,y)</annotation></semantics>. This also forms a Magma.

  1. We have a Set <semantics>X<annotation encoding="application/x-tex">X</annotation></semantics>, again the natural numbers <semantics><annotation encoding="application/x-tex">\mathbb{N}</annotation></semantics>.
  2. We have a binary operation <semantics>min(x,y)<annotation encoding="application/x-tex">min(x,y)</annotation></semantics>.
  3. Independent of our choice of <semantics>x<annotation encoding="application/x-tex">x</annotation></semantics> and <semantics>y<annotation encoding="application/x-tex">y</annotation></semantics> <semantics>min(x,y)<annotation encoding="application/x-tex">min(x,y)</annotation></semantics> will always return a natural number.

And a third example: We take the integers as our Set <semantics>X=<annotation encoding="application/x-tex">X=\mathbb{Z}</annotation></semantics>, as binary operation we take <semantics>=<annotation encoding="application/x-tex">\oplus=-</annotation></semantics> the usual subtraction. This also forms a Magma.

  1. Again we have a Set <semantics>X<annotation encoding="application/x-tex">X</annotation></semantics> this time the Integers <semantics><annotation encoding="application/x-tex">\mathbb{Z}</annotation></semantics>.
  2. We have a binary operation <semantics><annotation encoding="application/x-tex">-</annotation></semantics>.
  3. Independent of our choice of elements from <semantics><annotation encoding="application/x-tex">\mathbb{Z}</annotation></semantics> <semantics><annotation encoding="application/x-tex">-</annotation></semantics> returns an element of the Integers.

Haskell

In Haskell we can make a type class for Magma by the following snippet and define the examples above as instances.

class Magma a where
  (<+>) :: a -> a -> a
 
data AddMagma = AddMagma Integer
data MinMagma = MinMagma Integer
data SubMagma = SubMagma Integer

instance Magma AddMagma where
  AddMagma a (<+>) AddMagma b = AddMagma $ a + b 
  
instance Magma MinMagma where
  MinMagma a (<+>) MinMagma b = MinMagma $ a min b 

instance Magma MinMagma where
  SubMagma a (<+>) SubMagma b = SubMagma $ a - b 

Semigroup

Now a little more than a Magma is a Semigroup it’s again a Set <semantics>X<annotation encoding="application/x-tex">X</annotation></semantics> with a binary operation <semantics><annotation encoding="application/x-tex">\oplus</annotation></semantics> closed in the set. But we now require a little more of the binary operation, it needs to be associative, that means whenever we take three (not necessarily distinct) elements <semantics>a,b,c<annotation encoding="application/x-tex">a,b,c</annotation></semantics> of the Set <semantics>X<annotation encoding="application/x-tex">X</annotation></semantics> the following must hold <semantics>(ab)c=a(bc)<annotation encoding="application/x-tex">(a\oplus b)\oplus c=a\oplus (b\oplus c)</annotation></semantics>.

Examples

Let’s check our three examples from above if this holds.

For the Magama <semantics>(,+)<annotation encoding="application/x-tex">(\mathbb{N}, +)</annotation></semantics> we have already checked that we have a Set and a binary operation closed in the set what remains is to check for associativity. I won’t formally proof that and hope you see that <semantics>(a+b)+c=a+(b+c)<annotation encoding="application/x-tex">(a + b) + c = a + (b + c) </annotation></semantics> holds for natural numbers. So <semantics>(,+)<annotation encoding="application/x-tex">(\mathbb{N}, +)</annotation></semantics> is also a Semigroup.

For the Magama <semantics>(,min(x,y))<annotation encoding="application/x-tex">(\mathbb{N}, min(x,y))</annotation></semantics> we have also already checked that we have a Set and a binary operation closed in the set and have to check for associativity. Again no formal proof but a more detailed look at <semantics>min(min(a,b),c)=min(a,min(b+c))<annotation encoding="application/x-tex">min(min(a, b), c) = min (a, min (b + c)) </annotation></semantics>. On the left side we first take the smaller number of <semantics>a<annotation encoding="application/x-tex">a</annotation></semantics> and <semantics>b<annotation encoding="application/x-tex">b</annotation></semantics> and than compare that with c to find the smaller number among those on the right side we first find the smaller of b and c and than compare that to a to find the smallest of those two. Let’s assume the numbers are related in the following way <semantics>a<b<c<annotation encoding="application/x-tex">a<b<c</annotation></semantics> than <semantics>min(a,b)=a<annotation encoding="application/x-tex">min(a,b) = a</annotation></semantics> and therefore <semantics>min(min(a,b),c)=min(a,c)=a<annotation encoding="application/x-tex">min( min (a, b), c) = min (a, c) = a</annotation></semantics> which is the same as <semantics>min(a,min(b,c))=min(a,b)=a<annotation encoding="application/x-tex">min(a, min (b, c))=min(a, b)=a</annotation></semantics>. You can go through the result with other relations to finally come to the conclusion that <semantics>min(x,y)<annotation encoding="application/x-tex">min(x,y)</annotation></semantics> is also associative. Which is to say <semantics>(,min(x,y))<annotation encoding="application/x-tex">(\mathbb{N}, min(x,y))</annotation></semantics> is also a Semigroup.

Now for our third example from above, <semantics>(,)<annotation encoding="application/x-tex">(\mathbb{Z},-)</annotation></semantics>. This doesn’t form a Semigroup which we can see by taking <semantics>a=7,b=6,c=5<annotation encoding="application/x-tex">a=7,b=6,c=5</annotation></semantics> and put it in $(7-6)-5=1-5=-4 \not= 7-(6-5)=7-1=-6$ so obviously this is not associative. As a result <semantics>,)<annotation encoding="application/x-tex">\mathbb{Z},-)</annotation></semantics> is a Magma, but not a Semigroup.

Haskell

In Haskell we can’t state the property of associativity, so we can’t really give a formulation for that. In a case where we need it we would have to proof it by hand. But what we can state is the property that every Semigroup is already a Magma. This is easy to see from what we required of a Magma and a Semigroup above.

class Magma a => Semigroup a where 

Monoid

We come to a third structure the Monoid, which is, again, a little more than a Semigroup in this case we don’t add further restrictions to the binary operation but, require to have one distinct element from the Set which is called a neutral element <semantics>e<annotation encoding="application/x-tex">e</annotation></semantics> or <semantics>1<annotation encoding="application/x-tex">\mathbf{1}</annotation></semantics> (which can be quite confusing, see below). The neutral element has the property that it does nothing if the operation is applied to it an any other element. That is to say a Monoid is a structure <semantics>(X,,e)<annotation encoding="application/x-tex">(X, \oplus, e)</annotation></semantics> where <semantics>(X,)<annotation encoding="application/x-tex">(X, \oplus)</annotation></semantics> is a Semigroup and for every <semantics>xX<annotation encoding="application/x-tex">x\in X</annotation></semantics> <semantics>ex=xe=x<annotation encoding="application/x-tex"> e \oplus x = x \oplus e = x </annotation></semantics> holds.

Examples

Let’s see if we can find such an element for our remaining two examples of semigroups.

We already established that <semantics>(,+)<annotation encoding="application/x-tex">(\mathbb{N},+)</annotation></semantics> is a semigroup, so now we need to find an element which doesn’t change anything if it is added to any other number. It shouldn’t be too hard to see that <semantics>0<annotation encoding="application/x-tex">0</annotation></semantics> satisfies exactly that. If you take any natural number and add <semantics>0<annotation encoding="application/x-tex">0</annotation></semantics> to it you get exactly the same number back. So we have found our element <semantics>e=0<annotation encoding="application/x-tex">e=0</annotation></semantics> of <semantics><annotation encoding="application/x-tex">\mathbb{N}</annotation></semantics> and have that <semantics>(,+,0)<annotation encoding="application/x-tex">(\mathbb{N},+,0)</annotation></semantics> forms a Monoid.

As I already said above often times the neutral element is called <semantics>1<annotation encoding="application/x-tex">\mathbf{1}</annotation></semantics>, this is because most of the time natural numbers with multiplication so <semantics>(,,1)<annotation encoding="application/x-tex">(\mathbb{N}, \cdot, 1)</annotation></semantics> is used as an example for a Monoid. In this case <semantics>e=1=1<annotation encoding="application/x-tex">e=\mathbf{1}=1</annotation></semantics> where it is not that irritating. But this throws you off as soon as you take any other combination like <semantics>(,+,0)<annotation encoding="application/x-tex">(\mathbb{N},+,0)</annotation></semantics> in which case <semantics>e=1=0<annotation encoding="application/x-tex">e=\mathbf{1}=0</annotation></semantics>.

Now for our second example <semantics>(,min(x,y))<annotation encoding="application/x-tex">(\mathbb{N}, min(x,y))</annotation></semantics> again we already established this to be a semigroup, but now we are stuck we can’t find any element which won’t interfere with our <semantics>min(x,y)<annotation encoding="application/x-tex">min(x,y)</annotation></semantics> operation, because if we select any element of <semantics><annotation encoding="application/x-tex">\mathbb{N}</annotation></semantics> to be our neutral element <semantics>e<annotation encoding="application/x-tex">e</annotation></semantics> we can find one element <semantics>x<annotation encoding="application/x-tex">x</annotation></semantics> which is larger then <semantics>e<annotation encoding="application/x-tex">e</annotation></semantics>, in which case applying <semantics>min<annotation encoding="application/x-tex">min</annotation></semantics> won’t yield <semantics>x<annotation encoding="application/x-tex">x</annotation></semantics> as it would have to, but <semantics>e<annotation encoding="application/x-tex">e</annotation></semantics>. So <semantics>,min(x,y))<annotation encoding="application/x-tex">\mathbb{N}, min(x,y))</annotation></semantics> can’t be made into a Monoid.

Actually we often want something with <semantics>min<annotation encoding="application/x-tex">min</annotation></semantics> to be a Monoid. For that we use a little trick, we add an element that by definition satisfies the property of the neutral element. We call it <semantics><annotation encoding="application/x-tex">\infty</annotation></semantics> and than say <semantics>({},min(x,y),)<annotation encoding="application/x-tex">(\mathbb{N}\cup \{\infty\}, min(x,y), \infty)</annotation></semantics> is a Monoid. Before you ask: Yes that is cheating ;-).

Haskell

Like before we can’t state the property that one or e is a neutral element in Haskell, we will have to proof that by hand, but we can at least give the structure.

class Semigroup a => Monoid a where
  one :: a 
  
instance Monoid AddMagma where
  one = 0

Disclaimer: We won’t use this code as there is already a Monoid class in the standard Haskell library in Data.Monoid.

Semiring

So now for the last structure I need to introduce for the next blog post, the Semiring this time we don’t only add another restriction but we combine things we have found above. A Semiring is structure, consisting of set <semantics>X<annotation encoding="application/x-tex">X</annotation></semantics> with two binary operations <semantics>,<annotation encoding="application/x-tex">\oplus, \otimes</annotation></semantics> and two neutral elements <semantics>0,1<annotation encoding="application/x-tex">\mathbf{0}, \mathbf{1}</annotation></semantics> such that <semantics>X,,0<annotation encoding="application/x-tex">X, \oplus, \mathbf{0}</annotation></semantics> and <semantics>X,,1<annotation encoding="application/x-tex">X, \otimes, \mathbf{1}</annotation></semantics> are Monoids and the following hold: <semantics>ab=ba<annotation encoding="application/x-tex">a \oplus b = b \oplus a</annotation></semantics> <semantics>a0=0a=0<annotation encoding="application/x-tex">a \otimes \mathbf{0}=\mathbf{0}\otimes a=\mathbf{0}</annotation></semantics> <semantics>a(bc)=(ab)(ac)<annotation encoding="application/x-tex">a \otimes (b \oplus c) = (a\otimes b) \oplus (a\otimes c)</annotation></semantics> <semantics>(ab)c=(ac)(bc)<annotation encoding="application/x-tex">(a \oplus b) \otimes c = (a\otimes c) \oplus (b \otimes c)</annotation></semantics>

Ok, I see that looks complicated at first let’s try to see what it means. We already know what these Monoid thingys are, now we just have two of them that work on the same Set. That should not be to complicated. But what about these properties. You actually have encountered one example of a Semiring in school, without explicitly stated as such. The Semiring <semantics>(,+,,0,1<annotation encoding="application/x-tex">(\mathbb{N}, +, \cdot, 0, 1</annotation></semantics>).

Where <semantics>(,+,0)<annotation encoding="application/x-tex">(\mathbb{N}, +, 0)</annotation></semantics> is a Monoid, we already know that, I think you can check that <semantics>,,1<annotation encoding="application/x-tex">\mathbb{N}, \cdot, 1</annotation></semantics> is also a Monoid on your own. Now for the remaining properties:

  1. <semantics>ab=ba<annotation encoding="application/x-tex">a \oplus b=b\oplus a</annotation></semantics> this simply states that I can switch the operands of the first operation which is called commutativity, you can check that this is the case with <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics> <semantics>a+b<annotation encoding="application/x-tex">a + b</annotation></semantics> is always the same as <semantics>b+a<annotation encoding="application/x-tex">b + a</annotation></semantics>
  2. <semantics>a0=0a=0<annotation encoding="application/x-tex">a \otimes \mathbf{0}=\mathbf{0}\otimes a=\mathbf{0}</annotation></semantics> in this case <semantics>=<annotation encoding="application/x-tex">\otimes=\cdot</annotation></semantics> and <semantics>0<annotation encoding="application/x-tex">\mathbf{0}</annotation></semantics> is simply <semantics>0<annotation encoding="application/x-tex">0</annotation></semantics>, so this property holds too, just check <semantics>a0=0a=0<annotation encoding="application/x-tex">a \cdot 0 = 0 \cdot a = 0</annotation></semantics>
  3. <semantics>a(bc)=(ab)(ac)<annotation encoding="application/x-tex">a \otimes (b \oplus c) = (a\otimes b) \oplus (a\otimes c)</annotation></semantics> and <semantics>(ab)c=(ac)(bc)<annotation encoding="application/x-tex">(a \oplus b) \otimes c = (a\otimes c) \oplus (b \otimes c)</annotation></semantics> you can check these with basic arithmetic, if you add two numbers and multiply them with a third number it is the same as if you first multiply the individual numbers both with third number and add the results of these multiplications.

But why are these two properties you might ask. This is simple, up to this point I never required that <semantics>ab<annotation encoding="application/x-tex">a \otimes b</annotation></semantics> is the same as <semantics>ba<annotation encoding="application/x-tex">b \otimes a</annotation></semantics>, so I can’t simply switch the operands around. This allows me to use more operations for the <semantics><annotation encoding="application/x-tex">\otimes</annotation></semantics> operation above. Just as an example of an operation where I can’t switch around the operands think of subtraction <semantics>75=2<annotation encoding="application/x-tex">7-5=2</annotation></semantics> is obviously not the same as <semantics>57=2<annotation encoding="application/x-tex">5-7=-2</annotation></semantics>.

So what we just did is give a generalisation of this <semantics>(,+,,0,1<annotation encoding="application/x-tex">(\mathbb{N}, +, \cdot, 0, 1</annotation></semantics>) thingy and allow to use other operations than <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics> and <semantics><annotation encoding="application/x-tex">\cdot</annotation></semantics> and other Sets than <semantics><annotation encoding="application/x-tex">\mathbb{N}</annotation></semantics>. Let’s for example start by the following example

Example

<semantics>({},min(x,y),+,,0)<annotation encoding="application/x-tex">(\mathbb{N}\cup \{\infty\}, min(x,y), +, \infty, 0)</annotation></semantics> now this seems completely ridiculous, but will be very helpful in the next instalment of this series. Ok now let’s have a closer look. As already established above <semantics>({},min(x,y),)<annotation encoding="application/x-tex">(\mathbb{N}\cup \{\infty\}, min(x,y), \infty)</annotation></semantics> is a Monoid, as is <semantics>({},+,0<annotation encoding="application/x-tex">(\mathbb{N}\cup\{\infty\}, +, 0</annotation></semantics>) (you just have to say adding <semantics><annotation encoding="application/x-tex">\infty</annotation></semantics> to anything is <semantics><annotation encoding="application/x-tex">\infty</annotation></semantics>, as you might have expected). Now we need to check the other properties

  1. <semantics>ab=ba<annotation encoding="application/x-tex">a \oplus b=b\oplus a</annotation></semantics> check above again <semantics>=min(x,y)<annotation encoding="application/x-tex">\oplus=min(x,y)</annotation></semantics>, so we need to check that <semantics>min(x,y)=min(y,x)<annotation encoding="application/x-tex">min(x,y)=min(y,x)</annotation></semantics> but that is easy to see, I hope.
  2. <semantics>a0=0a=0<annotation encoding="application/x-tex">a \otimes \mathbf{0}= \mathbf{0}\otimes a=\mathbf{0}</annotation></semantics>, again attention <semantics>=+<annotation encoding="application/x-tex">\otimes=+</annotation></semantics> and <semantics>0=<annotation encoding="application/x-tex">\mathbf{0}=\infty</annotation></semantics> so we have to check <semantics>a+=+a=<annotation encoding="application/x-tex">a+\infty=\infty+a=\infty</annotation></semantics>, I think this you will agree this is correct, especially since I stated this to be the case above.
  3. <semantics>a(bc)=(ab)(ac)<annotation encoding="application/x-tex">a \otimes (b \oplus c) = (a\otimes b) \oplus (a\otimes c)</annotation></semantics> and <semantics>(ab)c=(ac)(bc)<annotation encoding="application/x-tex">(a \oplus b) \otimes c = (a\otimes c) \oplus (b \otimes c)</annotation></semantics> this is to say <semantics>a+min(b,c)=min(a+b,a+c)<annotation encoding="application/x-tex">a + min(b,c) = min(a+b, a+c)</annotation></semantics> and <semantics>min(a,b)+c=min(a+c,b+c)<annotation encoding="application/x-tex">min(a,b)+c = min(a+c, b+c)</annotation></semantics> I think we agree on that too. So <semantics>({},min(x,y),+,,0)<annotation encoding="application/x-tex">(\mathbb{N}\cup \{\infty\}, min(x,y), +, \infty, 0)</annotation></semantics> also forms a Semring. Actually Semirings using <semantics>min(x,y)<annotation encoding="application/x-tex">min(x,y)</annotation></semantics> and <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics> as operations have a name they are called Tropical Semirings and as I already said we will put this one to good use in the next instalment.

Haskell

Again we can’t state the properties but we can write out what we basically need

class Semiring a where
  zero :: a
  one :: a
  (<+>) :: a -> a -> a
  (<.>) :: a -> a -> a

data SchoolArithmatic = SchoolArithmatic Integer
data Tropical = Tropical Integer | Ininity

instance Semiring SchoolArithmatic where
  zero = 0
  one = 1
  (SchoolArithmatic a) <+> (SchoolArithmatic b) = SchoolArithmatic $ a + b
  (SchoolArithmatic a) <.> (SchoolArithmatic b) = SchoolArithmatic $ a * b

instance Semiring Tropical where
  zero = Infinity
  one = 0
  Infinity <+> x = x
  x <+> Infinity = x
  (Tropical a) <+> (Tropical b) = Tropical $ min a b
  Infinity <.> _ = Infinity
  _ <.> Infinity = Infinity
  (Tropical a) <+> (Tropical b) = Tropical $ a + b

Wrapping up

So now I hope I haven’t confused you to much, if I have, try reading it again. If it is still unclear and you want to understand it or if you think I might have made a mistake, which is very well in the realm of possible, the comment section is your friend. If necessary I’ll update this post accordingly. Next time (not necessarily next blog post) I’ll try to put the above to good use, especially the Semiring stuff.

Update: *-semiring

I have to make small addition to this post, I forgot to explain one algebraic structure the *-semiring. It is actually a just a small addition to a Semring. We add another operation which we call asteration or star (<semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>) this operation has to satisfy the following property for any <semantics>xX<annotation encoding="application/x-tex">x\in X</annotation></semantics> <semantics>x*=1(xx*)=1(x*x)<annotation encoding="application/x-tex">x^* = \mathbf{1}\oplus (x\otimes x^*) = \mathbf{1}\oplus (x^*\otimes x)</annotation></semantics> It is whats called a fix point operator. Depending on the setting it might e.g. work as repetition or simple be instantiated to a specific value. From this star operation we can derive another which is called plus. Plus simply omits the base case and can be defined by: <semantics>x+=xx*<annotation encoding="application/x-tex">x^+=x\otimes x*</annotation></semantics>

One detail we will need for the next blog post is that these operators can be defined in terms of each other. We defined <semantics>+<annotation encoding="application/x-tex">+</annotation></semantics> in terms of <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics>. The reverse direction works as follows.

<semantics>x*=1x+<annotation encoding="application/x-tex">x^*=1\oplus x^+</annotation></semantics>

Example

In our remaining two examples of a semiring we could define the following asteration operations:

In the <semantics>(N,+,,0,1)<annotation encoding="application/x-tex">(N, +, \cdot, 0, 1)</annotation></semantics> semiring <semantics>*<annotation encoding="application/x-tex">*</annotation></semantics> could be defined of the infinite sum <semantics>x*=1+ix<annotation encoding="application/x-tex">x*=1+\sum_{i}^{\infty}x</annotation></semantics> this is not very helpful and we wont use it later on.

In the <semantics>(N{},min,+,,0)<annotation encoding="application/x-tex">(N\cup \{\infty\}, min, +, \infty, 0)</annotation></semantics> semiring on the other hand <semantics>x*=0<annotation encoding="application/x-tex">x* = 0</annotation></semantics> satisfies our property perfectly. Just by the simple fact that <semantics>=min(x,y)<annotation encoding="application/x-tex">\oplus=min(x,y)</annotation></semantics> and that the minimum of <semantics>0<annotation encoding="application/x-tex">0</annotation></semantics> and any other number in <semantics>N{}<annotation encoding="application/x-tex">N\cup \{\infty\}</annotation></semantics> will always be <semantics>0<annotation encoding="application/x-tex">0</annotation></semantics>. This is actually more useful and find it’s way into the next blog post.

Haskell

In Haskell we can write a semiring as follows, obviously for any instance we would have to override one of the both to not fall into the trap of an infinite recursion. For the same reason I will omit a definition of the school arithmetic semiring, it simply wont finish computing anyway. However you will find the definition for the Tropical Semiring below.

class Semiring a => StarSemiring a where
  star :: a -> a
  star x = one <+> (plus x)
  plus :: a -> a
  plus x = x <.> (star x)
  

class Starsemiring Tropical where 
  star _ = one

February 09, 2014 12:00 AM

February 08, 2014

Tinuqin

I may or may not have a slight makeup problem. This is my...



















I may or may not have a slight makeup problem.

This is my collection of colorful and/or glittery nail polish and eyeliner. My problem, especially with the nail polish, is that I buy new stuff so frequently that I get to use each one only once or maybe twice. However, I am not ready to part with any of them, instead I am determined to wear nail polish more often, even if it takes a lot of time to put it on (glitter nail polish takes an awful long time to dry).

The eyeliner is less of a problem because I wear colorful eyeliner almost every day.

I wonder which will come first: The day I run out of room for all my stuff or the day I can walk past a new shade of glitter eyeliner without buying it.

February 08, 2014 01:34 PM

January 19, 2014

Tinuqin

Rainbow Hair + Glitter Make-up = <3 Also, my cat is tired of...











Rainbow Hair + Glitter Make-up = <3

Also, my cat is tired of my crap and would like to get away now kthxbai

January 19, 2014 12:00 PM

xinitrc

Reduce to the max

For the last 10 years now I am a Apple user. Nevertheless I really like Linux and that’s not only on servers and in embedded devices but for the Desktop. I actually don’t see Linux fitting on the Desktop of anybody who is not tech savvy even though Ubuntu is not that bad. But for so called power users Linux actually is a very valid Desktop environment. So as a second Workspace I have VMWare Linux instance running on my machine almost 24-7. And since I have been asked now at least one to many times how my “strange” Desktop Environment is configured. I’d like to share that with you.

Tiling Window Manager

I’ve long been a fan of tiling window managers, especially since they work very well for most of the task I do most of the day. For writing papers or exams for students I need three windows one editor, one pdf viewer, and a terminal for compiling and vcs. For programming editor, documentation and a terminal for compiling and vcs. You get the point I think. What really helps is having them all side by side and not have to move one window out of the way of the others all the time to see, and this is were tiling window managers comes in. All windows are layed out side by side, actually in my setup that is not completely true, but we come to that.

XMonad

As you can guess by the side generator I use for this side (Hakyll) I really like Haskell. So deciding to use XMonad some years ago was more or less a given. Xmonad feels more like a window manager construction kit and is highly configurable, which is probably the reason why there are several example configurations on the XMonad Wiki. And since I could convince a student to do his bachelor thesis on usability enhancements for tiling window managers in XMonad and let him implement some of the features I was missing, and these enhancements even found their way into XMonad core XMonad is now more or less the Window Manager of my dreams. Thanks again Jan for Bluetile!

Layouts

Obviously my configurations are attached nevertheless I walk you through some of what I did. For layouts I like following four very much. A main window the filling the left 70% of the screen and all the other windows lined up right to it top to bottom with 30% screen width and height depending on their number. Almost the same goes for the second layout which is the top 70% one window the rest sharing the bottom 30%. For these two I have obviously set up to have more than one window in the 70% area and shortcuts to change the ration. The third Layout I use is just one full screen app where I can only change which one that should be if I have more than one on the workspace. And the last one is Accordion where the focused window takes up most of the screen estate. All other applications share about 10% of the space only showing maybe one line of text. If I change the focused window that one goes bigger and all other retains their positions but shrink. This is useful especially for writing papers where I usually only need to see the result while I’m not editing, so I can switch focus the editor minimises and the pdf viewer maximises.

Topic Spaces

The absolute killer feature of XMonad for me are the Topic Spaces. You can think of them as Multiple Workspaces on steroids. A Topic Space is a workspace plus a default directory plus a configuration of applications to start on that workspace. Maybe this get’s easier to understand with an example. As I already wrote in the introduction my day job often consists of writing papers, the usual workflow for that is:

  1. I open a terminal
  2. I set up a directory for the Tex Sources.
  3. I initialise some vcs in that directory
  4. I open a editor to work on the source files
  5. I compile the source
  6. I open a pdf viewer to look at the result

this window configuration of a pdf viewer (that auto updates with every compilation) the terminal and the editor stay open in the directory the whole time. So after the initial creation of the directory I can configure a new topic space with the directory I write the paper in and the application configuration “Start a Terminal (in the specified directory), Start an editor and start a pdf view. Now every time I change to my paper writing workspace the three apps spawn in the directory and I can start working in an instance. Same goes for my blog post writing, programming, xmonad configuration, mail, irc, … workspace.

Some gimmicks

In addition to these I added some features to speed up specific workflows. One is having a new named workspace, I hit Meta-+ get a prompt asking for a name and after hitting Return I got a new workspace. Hitting Meta-s gives me a prompt I can use for web searches or opening an url, I either type “http://…” for an url (yes that’s like in the stone ages, but that’s the price I have to pay) or just a word to search in google or prefix the search with one of several keywords like “amazon:” “imdb:”, … and search there. Last but not least GridSelect on pressing Meta-t I get 2D Grid with all workspaces I have configured (or later created). The ones I created earlier, i.e., further to the top in the configuration are more to the centre and reachable with fewer keystrokes of the arrow keys. Same goes for Meta-g for all open applications. And last but not least I have Meta-Space giving me a dmenu to launch any application by typing an infix (most of the time I go with a prefix).

As a little visual gimmick I also added is FadeInactive, which makes windows not having the focus 25% transparent. For me this helps with distractions. I fine tuned the value so that if I am concentrated on the focused window I don’t even notice movement in those windows, like new messages on irc, but if I look specifically at that window I can still make out what is written there so that I know if I have to react.

Here are the files

As always I hope this proves useful for someone so I give you the files: The main file xmonad.hs and the Topics.hs which generates the topic space configuration. You will obviously want to change the configuration to your needs, but I think it should be obvious how to do that.

And before I get asked where to put these files, the xmonad.hs goes in your .xmonad directory the Topic.hs in .xmonad/lib/Topics/ and than everything should work out fine after a xmonad –recompile.

And just for the reference here are some screenshots of the Desktop

Desktop Screenshot

and the creation of this blog post.

Blogpost Screenshot

Happy tiling.

January 19, 2014 12:00 AM

January 12, 2014

Tinuqin

Finished Project: Baby Jacket I made this jacket for my...





Finished Project: Baby Jacket

I made this jacket for my nibling*. Sadly, I don’t have a picture of them wearing it, because it’s still too big. I’m not yet able to estimate how long a specific project will take me to finish, so I cast this on a little bigger than necessary to make sure they will not have grown out of it already when it is finished.

*I have no idea who coined the term “nibling”, but I love it. I think I saw it first as “niblings”, as a shortened way to say “nieces and nephews”, but it makes a great gender-neutral term as well.

January 12, 2014 09:19 PM

xinitrc

Challenges ahead

Every year I set out to learn something new, and just to keep a memory of that and maybe for you to hold me to what I “promised” I’d like to post it here.

Last year’s challenge

Last year saw an end to a tradition at least in some sense. Usually one of the challenges I set myself is to learn an new language. Which in the past meant a new programming language, see below. For the last 27 years that meant that I sit down in the beginning of the year select one language and go through with learning it. Since the first programming language I ever learnt was Common Lisp with the age of 6 years, it most of the time took only have a year to do that. There is some merit to learning something bizarrely abstract first and seeing everything as a concretasation of that. This year that somewhat went south with python.

Python

You probably would have guessed I would have Python under my belt long ago, but it never seemed to be the right choice. Can’t really say why. Last year it seemed like every new topic with a technical solution had Python as any part of it may it be data visualisation, data journalism or type design. I thought it might be a good idea to learn it myself.

Actually this failed miserably for me and I think it’s due to the same reason Python is a perfect language as a first programming language. There are no surprises, there was no new concept I didn’t have encountered in a language I learned before. This might be due to me not digging deep enough, but I think/hope this is deliberate. There are some quirks with Unicode, but which programming language doesn’t have those. The next problem for me was, there seems to be no book “Python as your 27th programming language” every book and resource, tried to explain to me how to program and on the side explain Python to me. This is perfect if this is your first programming language, but if you just want to learn syntax and semantics it bares the danger of boring you out of your mind, as it did with me. So after about 3 weeks I quit, which is unfortunate, I will have to make another attempt later.

Nevertheless I still managed to learn a new programming language.

Javascript

I had obviously copied javascript snippets for some “cool” website effects before and had used it for map-reduce in CouchDB. What I hadn’t done was bother to learn the language by heart. But after Node.js gained traction in my surrounding last year, I saw there is more to it than just little effects on website. So I set out to learn Javascript and what better than a real challenge to begin with it. I volunteered to hold a AngularJS Talk within 8 weeks of starting to understand what Javascript was. Basically a Scheme with a C like syntax, but don’t tell anyone they might get scared off. So after 14 weeks I held a talk where I could write complex code within AngularJS, 10 weeks later I was able to write and optimise code in Node.JS and by now I know another reason to dislike Internet Explorer. So in the end it worked out to learn a new language, I’m only dissatisfied that it wasn’t the one I was originally aiming for.

This year’s Challenge

For this year’s challenge I thought I switch the theme, or at least change the direction a little. For the last 27 years I tried to learn a new language every year. And for the last 27 years these challenges where always to learn a new programming language, as this somewhat failed this year at least in the sense I’d like to have had it, I this time try to learn a natural language instead.

Norwegian

I’d like to learn Norwegian, and before anyone says anything, I already now that it’s not Norwegian but Bookmal. I have no explanation why I choose this except maybe to be somewhat original and not learn Japanese like all the other Nerds. I have almost no connection to Norway what so ever, have never seen Norwegian television and have probably never been exposed to more than a few sentences. But I’m somehow under the impression that there is a familiarity to German. Actually while writing this I already have some course material and have had a look into some television. So this is not only a impression anymore. Let’s see what I will post in one years time about this topic.

UX

The other challenge I thought I give myself, is to learn UX or User Experience Design, I deem it a skill anybody who is involved with programming anything should know at least a little about. I actually knew almost nothing about that two days ago by now I have read half a book on it and slowly getting a grip on it. So I can’t really say much more but this will obviously be a topic to post about in this blog in the future.

January 12, 2014 12:00 AM

January 07, 2014

Farthen

Beförderungsbedingungen der DB

Ich habe mir mal die aktuellen Beförderungsbedingungen der Deutschen Bahn durchgelesen. Dabei bin ich auf ein paar interessante Stellen gestoßen, die ich gerne mit euch teilen möchte. Nur ein kleiner Hinweis vorweg: Dies ist keine Rechtsauskunft. Wenn ihr aufgrund dieser Hinweise euer Verhalten so ändert, dass Ihr gegen die Beförderungsbestimmungen oder geltendes Recht verstoßt, ist dies eure eigene Verantwortung und die Konsequenzen sind zu 100% von euch zu tragen.

Geltungstage

Vielen schon bekannt, aber halt nicht allen: Eine Fahrkarte des Normalpreises ohne Zugbindung mit und ohne BahnCard Rabatt ist immer gültig auf dem auf der Fahrkarte angegebenen Weg am Tag der Gültigkeit und am Folgetag. Fahrtunterbrechungen sind beliebig möglich, so könnt ihr von München über Hannover nach Berlin fahren und eine Nacht in Hannover verbringen, ohne dafür einen Aufpreis bezahlen zu müssen oder etwas besonderes beim Fahrkartenkauf zu beachten.

Tiere

7.3 Lebende Haustiere, die klein (bis zur Größe einer Hauskatze), ungefährlich und in geschlossenen Behältnissen (z. B. Tierboxen) wie Handgepäck untergebracht sind, können mitgenommen werden. Die Behältnisse müssen so beschaffen sein, dass Beeinträchtigungen für Personen und Sachen ausgeschlossen sind. Die Beförderung dieser Tiere erfolgt unentgeltlich.

Hunde hingegen müssen den halben Normal-/Sparpreis (ohne BC-Rabatt) bezahlen, angeleint sein und einen Maulkorb tragen. Davon ausgenommen ist, wenn ihr den Hund in euer Handgepäck stopfen könnt. Das ist interessanterweise erlaubt. Ob das dem Hund gefällt ist aber natürlich noch eine andere Sache.

Verspätungen

9.1 Muss vernünftigerweise davon ausgegangen werden, dass der Reisende mit einer Fahrkarte der Produktklassen ICE, IC/EC oder mit einer zuggebundenen Fahrkarte am Zielbahnhof gemäß Beförderungsvertrag mindestens 20 Minuten verspätet ankommen wird, hat er unverzüglich die Wahl zwischen (i) der Fortsetzung der Fahrt oder der Weiterreise mit geänderter Streckenführung bis zum Zielort bei nächster Gelegenheit oder (ii) der Fortsetzung der Fahrt oder der Weiterreise mit geänderter Streckenführung bis zum Zielort zu einem späteren Zeitpunkt. Er kann dabei auch den Zug einer höherwertigen Produktklasse benutzen. Die Benutzung eines reservierungspflichtigen Zuges oder eines Sonderzuges ist allerdings nicht gestattet.

Das bedeutet im Endeffekt: Wenn ihr eine Fahrkarte für einen IC/EC habt (auch Sparpreis) und dieser Zug 20 Minuten zu spät ist und diese Verspätung vmtl. nicht mehr aufholt, könnt ihr auch einen ICE (nicht Sprinter) benutzen, ohne das vorher anzukündigen. Ihr könnt auch einen anderen Weg fahren, der nicht auf der Fahrkarte angezeigt wird, solange ihr damit schneller zum Ziel kommt.

Bei einer Fahrkarte für den Regionalverkehr muss allerdings zuerst der Aufpreis für den Fernverkehr auf der gewählten Strecke bezahlt werden.

Bei einem Sparpreis ist es empfehlenswert, sich am Bahnhof eine Bescheinigung zu holen, dass ihr anders fahren dürft. Dies ist aber in den Beförderungsbedingungen nicht festgehalten und daher nicht zwingend notwendig.

Wenn ihr davon ausgehen könnt, dass ihr bis zu 60 Minuten zu spät ankommt, könnt ihr sogar kostenlos die Fahrkarte erstattet bekommen. Nachts (Ankunft zwischen 0 und 5 Uhr) dürft ihr sogar ein Taxi bis 80€ nehmen, wenn ihr ohne Taxi mindestens 60 Minuten zu spät ankommen würdet oder der letzte Zug ausfällt.

Wenn ihr nachweisbar 60 bis 119 Minuten zu spät ankommt, habt ihr außerdem in der gesamten EU Anrecht auf Erstattung von 25%, bei Verspätungen ab 120 Minuten auf 50% des gezahlten Fahrpreises. Wenn der ICE Sprinter 30 Minuten oder länger zu spät ist, könnt ihr euch den Sprinter-Aufpreis erstatten lassen.

Nachlösen von Fahrkarten

Wenn ihr bei der Fahrkartenkontrolle, oder besser noch direkt beim Einsteigen kommuniziert, dass ihr keine Fahrkarte habt, so dürft ihr diese nachlösen. Das kostet im ICE/IC/EC aktuell exakt 7,50€ auf den Normalpreis mit/ohne BC-Rabatt. Im Regionalverkehr ist der Preis auf 10% des Fahrkartenpreises gesetzt und beträgt zwischen 2 und 10€.

by fina at January 07, 2014 03:56 PM

December 29, 2013

Tinuqin

More chipmunks, because I went and took more (and better)...





















More chipmunks, because I went and took more (and better) pictures after the last post.

December 29, 2013 10:23 PM

December 25, 2013

rohieb

A highlighting plugin for PDF files

In my last post, I used ikiwiki‘s highlight plugin to highlight PDF files. But since the underlying highlight library did not support highlighting for PDF files yet, I had to write my own highlighting definition. Due to limitiations in the library, it's not perfect; for example, it does not highlight things inside streams, but in case you’re interested, you can get the source:

December 25, 2013 08:47 PM

December 23, 2013

Tinuqin

I am currently on Fuerteventura for the holidays. There is a...









I am currently on Fuerteventura for the holidays. There is a colony of chipmunks living between my hotel and the beach, so I took my 300mm lens out for a spin.

December 23, 2013 07:15 PM

December 16, 2013

felis

Weiße cis-hetero-Männer erklären die Welt

Weiße cis-hetero-Männer erklären gerne die Welt. Sie haben nämlich gelernt, dass das ihr Platz in der Gesellschaft ist, dass sie die Definitionshoheit haben und dass ihnen Gehör geschenkt wird. Von anderen weißen cis-hetero-Männern. Und das ist ja schließlich die relevante Zielgruppe, die erreicht und angesprochen werden muss, denn sie haben die Definitionshoheit, ihnen wird Gehör geschenkt und sie können uns dann besser die Welt erklären, wie es ihre angestammte Rolle ist.

Menschen aus marginalisierten Gruppen hingegen sind marginalisiert. Das heißt, sie haben keine Definitionshoheit, ihr Platz in der Gesellschaft ist auf den Zuschauerbänken. Wenn sie dort schön brav sitzen bleiben und den weisen (oh, Verzeihung, Tippfehler) cis-hetero-Männern lauschen und applaudieren, dann werden sie geduldet, denn unsere Gesellschaft ist schließlich tolerant! Wenn sie aber wagen, sich das Wort zu nehmen, einen eigenen Standpunkt zu haben und die eigenen Belange zu vertreten, dann werden sie niedergebrüllt von einem Sturm der Entrüstung. Denn dann nehmen sie Platz ein, der ihnen angestammtermaßen nicht zusteht: den Platz der weißen cis-hetero-Männer.

Die klare Schlussfolgerung aus diesen Überlegungen: weiße cis-hetero-Männer müssen anderen weißen cis-hetero-Männern erklären, dass diese Strukturen diskriminierend sind und wie man sie ändern kann. Denn den Marginalisierten wird ja nicht zugehört. Also müssen die weißen cis-hetero-Männer wieder das tun, was sie so gerne tun und daher auch so gut können: anderen weißen cis-hetero-Männern die Welt erklären.

Und was lernen wir daraus? Unsere Rettung besteht darin, dass weiße cis-hetero-Männer sich gegenseitig die Welt erklären. Vielen Dank für die Aufmerksamkeit.

by felis at December 16, 2013 01:47 PM

December 15, 2013