Stranger Than Usual

Killerspiele sind out

…und Autismus ist in, zumindest wenn es darum geht, Amokläufe zu erklären.

Ganz groß mit dabei natürlich Deutschlands größer Altpapierverkäufer. Naja, wie auch immer, es gibt eine ganze Menge Menschen (und noch mehr, man möge einfach auf den verlinkten den links folgen), die lesenswerte Posts geschrieben haben, warum Autismus nicht per se zum Mörder macht.

Recherche wird im ach so gelobten Printjournalismus offensichtlich gerne mal übersprungen. Ich bin mal gespannt, was beim nächsten Amoklauf schuld sein wird… Vielleicht gefühlskalte Autisten, die das Töten mit Killerspielen wie „Super Mario“ und „Tetris“ gelernt haben, und regelmäßig Zucker essen.

PS: habe gerade herausgefunden, dass auch das „Killerspiel“ Mass Effect attackiert wurde. Bis dann jemand herausgefunden hat, dass es der Bruder des Amokläufers war, der Mass Effect gespielt hat, nicht der Amokläufer selbst.

Update Juli 2022

Tote links korrigiert oder wenn nötig durch Links auf archive.org ersetzt

Nicht schon wieder

Ich benutze Steam ja nicht häufig. Ich will es eigentlich gerade Terraria spielen, und zwar eigentlich nur offline, aber das Spiel lässt sich ohne Steam nicht starten (ein dicker Mittelfinger an die Person, die sich das hat einfallen lassen).

Nun hat Steam zwar eine „Mein Passwort speichern“-Funktion, die bei mir auch immer aktiviert ist, trotzdem muss ich jedes verdammte Mal mein Passwort eigeben. Das ich natürlich nicht mehr weiß, weil ich, wie gesagt, Steam selten benutze.

Wozu ist diese Passwort-Speichern-Funktion dann überhaupt gut?

Steam für Linux

Nach meinem gestrigen rant über Steam muss ich jetzt auch mal etwas positives über Steam sagen: Valve zieht die Entwicklung eines Steam-Clienten und die Portierung von Valve-Spielen für Linux ja anscheinend wirklich durch. Das lässt hoffen. Zum Beispiel darauf, dass auch andere Spielhersteller ihre Spiele für Linux portieren. Oder dass die Hardwarehersteller (insbesondere die von Grafikkarten) ihr Engagement für Linux erhöhen. Sicher kann man natürlich nicht sein. Aber es ist ein Hoffnungsschimmer.

Trademark™

Manchmal weiß man echt nicht mehr, ob das mit den ganzen Trademark™-Zeichen noch ernst gemeint ist.

Lego zum Beispiel hat auf der Seite zu den Herr-der-Ringe/Hobbit-sets hinter Gandalf™, Bilbo Baggins™ (es ist die deutsche Seite, aber die Mühe, die deutschen Namen zu nehmen haben sie sich nicht gemacht, außer bei Beutelsend, inkonsequent sind sie also noch dazu) einfach mal das ™-Zeichen gesetzt. Da das eine offizielle Seite von Lego ist, vermute ich mal, dass sie es ernst meinen. What the fuck.

GEZ-Gewirr

Der neue Rundfunkbeitrag ist da. Es mag ja durchaus stimmen, dass er einfacher ist (~18€ pro Haushalt), und auch, dass er in vielen Fällen den Haushalt weniger kostet.

Was mich jedoch irritiert: auf der offiziellen Seite steht: "Wer zusammenlebt, zahlt pro Wohnung nur einen Beitrag. Das entlastet besonders Wohngemeinschaften und Familien." Familien kann es zwar entlasten, unsere WG aber belastet es eher.

Bisher war die Lage: drei Studierende, zwei davon bekommen Bafög und waren befreit, die dritte bekommt kein Bafög, und musste ihren Computer ("neuartiges Rundfunkgerät") bezahlen, was ca. 6€ pro Monat gewesen wäre (die inkompetenten Angestellten bei der GEZ haben ihr jedoch den Fernsehbeitrag von ca. 18€ abgerechnet).

Nun ist es so: unser Haushalt muss 18€ bezahlen, was in etwa das Dreifache des bisherigen Satzes ist. Theoretisch könnten sich Mitbewohner #2 und ich befreien lassen, was jedoch den Beitrag nicht senkt (wenn ich es richtig verstanden habe, diese Frage scheint im Internet nirgendwo geklärt worden zu sein).

Rein rechtlich müsste also Mitbewohnerin #1 den kompletten Betrag zahlen (weil #2 und ich ja befreit sind). Das würde jedoch den Frieden in der WG auf eine harte Probe stellen, also müsste ich mich jetzt am Beitrag beteiligen.

Aber unabhängig von Beteiligung meinerseits oder nicht: Unser gesamter Haushalt musste bisher 6€ zahlen, und jetzt 18€. Worauf ich hinaus will: Man kann nicht pauschal sagen, dass WGs weniger zahlen müssen als vorher. In unserem Fall sogar mehr.

Gib mir den scheiß Code!

Für die Vorlesung Programmanalyse muss ich ja, wie gesagt, Windows benutzen. Neulich auch Visual Studio, um etwas zu kompilieren.

Fun Fact: ich habe noch nie Visual Studio verwendet

Naja, was mache ich? Auf der VM ist "Visual Studio express" vorinstalliert. Problem? Braucht einen Aktivierungsschlüssel. Meine Lösungsidee: Schlüssel über MSDNAA beziehen, da bekomme ich den als Student kostenlos. Ergebnis: nach viel herumgeklicke kriege ich zwar den Downloadlink für Visual Studio express, aber nicht den Schlüssel. Auch beim zweiten Versuch nicht.

Nächste Idee: ich nehme eine andere Visual Studio-Version und benutze den Schlüssel für Visual Studio express. Ergebnis: Für Visual Studio Professional bekomme ich zwar einen Schlüssel angezeigt, aber der funktioniert nicht mit Visual Studio express.

Nächste Idee: Ich installiere Visual Studio professional. Also in der VM umständlich den installer heruntergeladen, gestartet, ewig gewartet, alle Module außer dem Kernmodul deaktiviert, Installation gestartet... oh, die braucht 7GB Speicherplatz, das ist größer als die virtuelle Festplatte.

Fun Fact: ich habe noch nie eine virtuelle Festplatte vergrößert

Sollte ich versuchen, die virtuelle Festplatte zu vergrößern?

Fun Fact: es war mittlerweile spät in der Nacht.

Damals habe ich es aufgegeben, um später zu erfahren, dass ich in Visual Studio Express einfach auf den link "Aktivierungscode anfordern" hätte klicken müssen. Das habe ich dann heute gemacht. Dafür muss man natürlich einen MS-Account erstellen, also schleuderte ich Microsoft alle meine Daten in den Rachen, deaktivierte das Häckchen bei "schickt mir Spam" und klickte auf "Account erstellen".

Fun Fact: offensichtlich hatte ich bereits einen MS-Account, dessen Passwort ich vergessen habe.

Passwort-Recovery-Funktion angeworfen, das Ding blieb zwar irgendwo stecken, schickte mir dann aber eine Mail.

Fun Fact: für diese Funktion muss Javascript aktiviert sein.

Also habe ich natürlich NoScript angewiesen MS erst einmal nicht mehr zu blocken. Dummerweise muss man dann die Seite neu laden, was Microsoft aber nicht gefiel, also muss ich mir jetzt noch eine Mail zusenden lassen.

Nachtrag

Nachdem ich mein Passwort zurückgesetzt habe (Erinnerung: über einen link, der mir per Mail gesendet wurde), wollte ich mich einloggen. Ging aber nicht, denn sie wollten mir noch eine Mail schicken, um zu bestätigen, dass die Mailadresse wirklich zu mir gehört. Die Mail kam aber nicht an, bis ich dan herausgefunden habe, das fuckin' Googlemail die aus irgendeinem Grund als "important" markiert und in einen anderen Ordner verschoben hat.

Nach dem Klick auf den link in der Mail konnte ich mich immer noch nicht einloggen: 500 - internal server error

Nur mal zum Vergleich:

  • gcc installieren: einen einzigen Befehl eintippen, warten, fertig (wenn er nicht ohnehin schon installiert ist)
  • ein schon installiertes Visual Studio aktivieren: siehe oben

Gut angelegte Steuergelder

Huch. Eine vergewaltigte Frau in Köln wird von zwei Krankenhäusern in katholischer Trägerschaft abgewiesen.

Und wer bezahlt so etwas? Nicht die Kirche. Sondern Vater Staat. Und mit diesen Geldern bezahlte Leute müssen dann Vergewaltigte Frauen abweisen, werden entlassen, weil sie nach zerbrochener Ehe noch einmal heiraten wollen, und müssen grundsätzlich erst einmal der entsprechenden Kirche angehören.

Nicht, dass das in Ordnung wäre, wenn die ganze Sache allein von der Kirche finanziert wäre, aber Krankenhäuser werden komplett und Schulen, Kindergärten etc. zum größten Teil vom Staat finanziert. Und wir leben im einundzwanzigsten Jahrhundert, nicht im neunzehnten!

Update 2024-07-17

Tote Links durch Links auf archive.org ersetzt.

Hilfreiche Fehlermeldungen

Compiler-Fehler haben ja häufig die Eigenschaft, etwas kryptisch zu sein. Genau das, gepaart mit einem Haufen namespaces, um es auch noch unleserlich zu machen, wurde mir am Dienstag ausgespuckt:

experiment.cpp:24:45: error: no match for ‘operator=’ in ‘result = boost::numeric::ublas::operator+(const boost::numeric::ublas::matrix\_expression<E>&, const boost::numeric::ublas::matrix\_expression<E2>&) [with E1 = boost::numeric::ublas::zero\_matrix<double>, E2 = boost::numeric::ublas::matrix\_matrix\_binary<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> >, boost::numeric::ublas::matrix\_matrix\_prod<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> >, double> >, typename boost::numeric::ublas::matrix\_binary\_traits<E1, E2, boost::numeric::ublas::scalar\_plus<typename E1::value\_type, typename E2::value\_type> >::result\_type = boost::numeric::ublas::matrix\_binary<boost::numeric::ublas::zero\_matrix<double>, boost::numeric::ublas::matrix\_matrix\_binary<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> >, boost::numeric::ublas::matrix\_matrix\_prod<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> >, double> >, boost::numeric::ublas::scalar\_plus<double, double> >](((const boost::numeric::ublas::matrix\_expression<boost::numeric::ublas::matrix\_matrix\_binary<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> >, boost::numeric::ublas::matrix\_matrix\_prod<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> >, double> > >&)((const boost::numeric::ublas::matrix\_expression<boost::numeric::ublas::matrix\_matrix\_binary<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> >, boost::numeric::ublas::matrix\_matrix\_prod<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> >, double> > >*)(& boost::numeric::ublas::prod(const boost::numeric::ublas::matrix\_expression<E>&, const boost::numeric::ublas::matrix\_expression<E2>&) [with E1 = boost::numeric::ublas::matrix<double>, E2 = boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> >, typename boost::numeric::ublas::matrix\_matrix\_binary\_traits<typename E1::value\_type, E1, typename E2::value\_type, E2>::result\_type = boost::numeric::ublas::matrix\_matrix\_binary<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> >, boost::numeric::ublas::matrix\_matrix\_prod<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> >, double> >](((const boost::numeric::ublas::matrix\_expression<boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> > >&)((const boost::numeric::ublas::matrix\_expression<boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> > >*)(& boost::numeric::ublas::trans(boost::numeric::ublas::matrix\_expression<E>&) [with E = boost::numeric::ublas::matrix<double>, typename boost::numeric::ublas::matrix\_unary2\_traits<E, boost::numeric::ublas::scalar\_identity<typename E::value\_type> >::result\_type = boost::numeric::ublas::matrix\_unary2<boost::numeric::ublas::matrix<double>, boost::numeric::ublas::scalar\_identity<double> >]()))))))))’

Smartbook

Ganz neu™: das Smartbook

Komplett analog, aber mit allen Funktionen, die man sich von einem Smartphone wünscht.

Um die Website zu zitieren:

Mobile Kommunikation: immer, überall und ohne schlechten Netzempfang.

Erleben Sie das erste Buch mit ausklappbarer Morsetastatur, Papierfliegern zum Chatten und vorausgefüllten Postkarten für den Sommerurlaub.

Das Ding enthält sogar Sonnenuhren, wodurch die Chancen noch besser werden, die Smartphones zu ersetzen!

Update 2022-02-12

Ich habe den toten link mit einem Link zu archive.org ersetzt.

Kissenfüllung

What the fuck? Ich habe gerade eine recht volle Waschmaschine entleert, und alles darin, mit Ausnahme eines Paars Socken steckte in einem Kissenbezug, der mitgewaschen wurde. Also vorher: nichts im Kissenbezug, nachher: alles (inklusive Bettlaken, Badetuch und Bettdeckenbezug).

Die letzte Klausur

Ich habe heute die letzte Klausur geschrieben. Die letzte Klausur in diesem Studiengang. Außerdem ist es das erste Mal, dass ich nach weniger als einem Monat vorlesungsfreier Zeit alle Klausuren durch habe.

Aber entspannen kann ich trotzdem nicht. Ein Nebenjob, ein Studienprojekt, das endlich fertig werden muss, eine anstehende Masterarbeit, bei der ich mich schon einmal in das Thema einarbeiten sollte, und zu allem Überfluss ist auch noch unser Fachschaftsserver ausgefallen. Zwei Wochen später, und wir hätten sowieso einen neuen gehabt. Jetzt dürfen wir uns eine Notlösung zusammenflicken.

MPD knackt auf dem Raspberry Pi

Bin soeben durch Zufall auf etwas gestoßen, was ein Problem behebt, dass mich bei meinem Raspberry Pi schon seit einiger Zeit nervt (aber nie so stark, dass ich aktiv nach einer Lösung gesucht habe): der MPD knackt beim Abspielen zwischen zwei Dateien so komisch. Lösung hier.

Die Horden den Untoten

Welt Orukstrasp. Zwergenzivilisation „The Wild Oil“. Eine Zwergengruppe mit dem Namen „The Anvil of Nuts“ gründet Koladmeban, was in etwa so viel wie „Ghoulstream“ bedeutet.

Die Gegend, in der sie sich niederlassen hat einen hübschen, großen Fluss, eine Straße ist in der Nähe und der Boden ist fruchtbar. Unglücklicherweise gibt es auch eindeutig zu viel Grundwasser.

In einem Versuch, den aquifer zu durchdringen, graben die Zwerge eine Art Pfropf, der, wenn er erst einmal in die Wassertragende Schicht fällt, das Grundwasser draußen halten soll, so dass man durch ihn durch wasserundurchlässige Schichten erreicht. Die Idee ist gut, aber dummerweise ertrinken sowohl Bergmann als Architekt bei dem Versuch, den aquifer anzugraben (Stellt euch vor, verlegt Fliesen. Ihr fangt bei der Tür an, und arbeitet euch bis in die letzte Ecke vor. Und nun stellt euch vor, statt den Fliesen hätten ihr den Boden weggegraben, das Loch füllt sich mit Wasser, und ihr könnt nicht schwimmen. So ungefähr ist das passiert).

Da es unmöglich ist, die Leichen zu bergen, beginnen bald zwei zwergische Geister durch die Gegend zu spuken, die über die mangelnde Aufmerksamkeit sichtlich enttäuscht sind (gravierte Gedenkschriften gibt es auch keine, schließlich sind die Steine unter dem Grundwasserspiegel). Die verbleibenden fünf Zwerge haben nun jedoch ein ganz anderes Problem: Sie haben keine Unterkunft, und können sich nicht einmal eine in den Dreck graben, weil beide Spitzhacken mit ihren ehemaligen Besitzern verloren sind. Die einzige Möglichkeit, auf einen grünen Zweig zu kommen ist also, Holzhütten zu bauen.

Es kommen ein paar Einwanderer, und da der Platz knapp ist, kriegen die Zwerge nicht einmal ein eigenes Zimmer. Im Herbst kommt die lang ersehnte Zwergenkarawane und bringt… keine Spitzhacken. Aber genug Kupferkrimskrams, das, gegen ein paar Holzschnitzereien getauscht, mit Holzkohle eingeschmolzen und zu neuen Spitzhacken geschmiedet werden kann.

Diesmal funktioniert es, die Plombe fällt (das „fallen lassen“ ist leider nicht ganz ungefährlich, weil man es mangels Stein nicht mit Mechanismen aus sicherer Entfernung machen kann), und leider geht der Manager der Festung dabei drauf. Doch endlich kann tiefer gegraben werden! Voller Vorfreude schwingt die Bergfrau die Spitzhacke und trifft… auf einen zweiten aquifer.

Also muss das ganze Projekt noch einmal wiederholt werden, in größerem Maßstab. Die anderen Zwerge arrangieren sich so langsam damit, oberirdisch leben zu müssen, mittlerweile ist die Hälfte der Karte baumfrei, dafür wächst ein kleines Holzfort aus dem Boden, es wird gefischt, aus Muscheln und Holz werden Handelsgüter hergestellt, bei den Elfen tauscht man ein paar Muschelamulette gegen Tiere ein, die man schlachtet und verarbeitet, und während es Sommer und Herbst wird, schreitet die vergrößerte Version des Aquifer-Projektes voran (die beste Bergfrau wird schwer verletzt, als die erste Schicht gestürzt wurde, erholt sich jedoch).

Im Herbst, das Großprojekt ist kurz vor der Fertigstellung, taucht wieder einmal die Karawane aus den Mountainhomes auf, diesmal hoffentlich mit einigen Steinen, die man bearbeiten kann. Doch die Händler haben noch nicht ganz abgeladen, da ertönt ein Schrei: „DIE TOTEN WANDERN! VERSTECKT EUCH, SOLANGE IHR NOCH KÖNNT!“. Einen Augenblick später ein zweiter Schrei: „EIN ÜBERFALL! VERFLUCHT SEIEN SIE!“.

Eine kleine Gruppe Nekromanten mit vielen Zombies kommt aus dem Norden, beschwört die Leichen von drei Hasen herauf, die irgendwann von einem Wermurmeltier getötet wurden und nähert sich der Festung. Gleichzeitig wurde ein Trupp Goblinkrieger entdeckt, die von Süden kommen.

Die Zwerge rennen panisch in das Fort, der einzige Kämpfer rennt in Richtung Tür, doch dort machen schon die Karawanenwachen kurzen Prozess mit Goblins und Untoten.

The Swordsdwarf punches The goblin right hand in the right hand with his right hand, bruising the bone!

The militia commander stabs The Mörul Thîkutîton's head in the head with her (-«bronze spear»-)!

Doch die Lage ist trotzdem gefährlich. Angeregt von den Nekromanten spüren selbst die Muschelschalen, die zum Verarbeiten herumliegen plötzlich unheiliges Leben:

The Human Farmer necromancer gestures! The mussel shell shudders and begins to move!

Bald ist alles noch toter als vorher, und die Nekromanten verziehen sich schnell wieder. Es liegen nur noch die Leichen der Leichen herum.

Dwarf Corpse corpse

Die Zwergenhändler haben nach all dem keine Lust mehr zu handeln, und ziehen wieder davon enttäuschte und traumatisierte Zwerge zurücklassend.

Doch es kommt noch schlimmer. Wenige Tage später taucht ein verschwunden geglaubter Nekromant wieder auf, belebt die Leichen der Goblins, die Leichen der Leichen, die Muschelschalen, die abgetrennten Leichenteile, die Leichen in den Särgen, die toten Tiere, einfach alles, was irgendwie Potential hat, Unheil anzurichten (diese Muscheln sind nicht ungefährlich!).

Der Axtkämpfer der Festung, zusammen mit den zum Militärdienst eingezogenen Bergleuten liefern sich tapfere Kämpfe, und erledigen die Untoten in Massen, schaffen es jedoch nicht, zu dem Nekromanten vorzustoßen, der gefallene Untote sofort wieder belebt. Immer mehr Zwerge fallen unter den kalten Händen, Hufen, Schalen etc., und stehen unter dem Kommando des Totenbeschwörers wieder auf. Die Horde der Untoten wächst unaufhörlich.

viele Untote

Alles scheint verloren, doch da:

…nein, ich mache nur Witze. Alles ist verloren. Die Zwerge werden noch ein paar Tage über die Ebene gehetzt, dann erwischt es auch den letzten Zwerg. "Your settlement has crumbled to its end."

Naja, macht nix. Losing is fun!