Google wird mit Doodle zu den Olypmischen Spielen politisch

Google-Doodle zum Start der olympischen Winterspiele in Sotschi in den Farben der Regenbogenflagge.

Doodle mit politischem Hintergrund: Wintersportarten in den Farben des Regenbogens, dem Zeichen der LGBT-Bewegung.

Passend zur Eröffnungsfeier der Olympischen Winterspiele 2014 in Sotschi zeigt Google sein neues Doodle. Es zeigt neben dem Google-Schriftzug einige Wintersportarten vor einem bunten Hintergrund in den Farben der Regenbogenfahne, dem internationalen Kennzeichen der LGBT-Bewegung. Zusätzlich ist ein Abschnitt gegen Diskriminierung der olympischen Charta zitiert:

„Die Ausübung von Sport ist ein Menschenrecht. Im Sinne des olympischen Gedankens muss jeder Mensch die Möglichkeit zur Ausübung von Sport ohne Diskriminierung jeglicher Art haben. Dies erfordert gegenseitiges Verstehen im Geist von Freundschaft, Solidarität und Fairplay.“

google-doodle-olympia-sotchy-de

Die olympische Charta ist in dieser Hinsicht leider nicht sehr progressiv, denn während obiger Satz sich gegen Diskriminierung ausdrückt, wird in der Charta den Sportlern ebenfalls verboten, politische Statements zu setzen, falls Diskriminierung droht:

„Jede Demonstration oder politische, religiöse oder rassische Propaganda ist an den olympischen Stätten, Austragungsorten oder in anderen olympischen Bereichen untersagt.“

Während die meisten Doodles berühmte Personen und Jahrestage ehren und damit eher unpolitisch sind, ist dieses eines der wenigen politischen Doodles. In Russland ist zur Zeit der Veranstaltung der olympischen Spiele die Situation von Homosexuellen nicht leicht. So ist es verboten, positiv über Homosexualität zu berichten und die Polizei schaut bei homophoben Ausschreitungen häufig weg. Google setzt sich seit langer Zeit für die Gleichberechtigung ein.

Das Doodle ist ebenfalls in Russland zu sehen (obwohl dort die Mehrheit der Benutzer Yandex benutzt), enthält dort aber nicht den Ausschnitt aus der olympischen Charta:

google-doodle-olympia-sotchy-ru

Geschrieben von Kap. Zuletzt geändert am 7. Februar 2014.

MathML mit WordPress

Im Artikel über Matrix-Generierung habe ich zum ersten Mal MathML benutzt. Um zu einer korrekten Darstellung in WordPress zu kommen, musste ich etwas Tricksen. Was genau zu tun ist, beschreibe ich hier.

Das Layout von nerdpause ist bereits in HTML5 geschrieben (erkennbar am als erster Zeile der Ausgabe), so dass Math ML ohne weitere Probleme benutzt werden kann. Sollte das Layout noch in XHTML 1.1 verfasst sein, muss der DocType um die Angabe zu MathML erweitert werden, sie lautet dann .

Wie man MathML-Code schreibt, ist in vielen Artikeln und Blogs beschrieben, zum Beispiel hier von Danijel Gorupec, aber auch der (englische) Wikipedia-Artikel bietet für den Einstieg einige Beispiele. Der Deutsche taugt natürlich mal wieder nichts und verdient im aktuellen Zustand keinen Link.

Die wesentliche Struktur von MathML-Code ist eher langatmig. Der Formel aus dem Satz von Pythagoras, a2 + b2 = c2, wobei a,b,c, sieht etwa so aus:

<math>
  <msup>
    <mi>a</mi>
    <mn>2</mn>
  </msup>
  <mo>+</mo>
  <msup>
    <mi>b</mi>
    <mn>2</mn>
  </msup>
  <mo>=</mo>
  <msup>
    <mi>c</mi>
    <mn>2</mn>
  </msup>
  <mtext>, wobei&nbsp;</mtext>
  <mi>a</mi>
  <mo>,</mo>
  <mi>b</mi>
  <mo>,</mo>
  <mi>c</mi>
  <mo>&#x02208;</mo>
  <mi>&#x0211D;</mi>
</math>

Dabei ist vor allem zu beachten, dass der Mathematik-Bereich von <math> umschlossen wird. Das Element math kann entweder inline oder als Block dargestellt werden, was über CSS geregelt werden kann (analog z.B. zu span oder div).

Im Standardverhalten von WordPress ist das Ergebnis jedoch grauenhaft. Es werden zahllose Leerzeilen eingefügt, ein Blick in den Code der übertragenen Seite zeigt viele zusätzliche <p> und <br>-Tags. Das ist ein bekannter Bug, der jedoch schon seit 4 Jahren nicht gefixt wird. Angeblich weil das Einflüsse auf Rückwärtskompatibilität hätte. Dass man bei Verwendung der Auto-Format-Funktion von WordPress auf MathML in der selbst geschriebenen Variante komplett verzichten muss wird dabei nicht berücksichtig.

Wie behebt man das ganze nun? Ganz einfach!

In WordPress gibt es die Funktion wpautop, die bestimmte Formatierungen automatisch durchführt. Eigentlich ganz praktisch, damit kann man Absätze erzeugen, indem man einfach leere Zeilen einfügt, ähnlich wie bei LaTeX. Die Methode fügt die Absätze noch an weiteren Stellen ein, unter anderem auch nach math-Umgebungen. Um das Verhalten zu ändern, muss man einfach die datei wp-includes/formatting.php öffnen und eine Zeile wie folgende suchen:

// Space things out a little
$allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|option|form|map|area|blockquote|address|style|p|h[1-6]|hr|fieldset|noscript|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)';

In der Variable allblocks sind alle Bereiche definiert, die als Block dargestellt werden sollen. Man muss dort einfach den Teil |math| löschen, und die Darstellung von MathML klappt problemlos!

Geschrieben von Kap. Zuletzt geändert am 7. Februar 2014.

Der Java user.home-Bug

Ich habe kürzlich mein System neu aufgesetzt und bin dabei auf ein Problem gestoßen, das die Java-Entwickler seit Jahren nicht lösen.

Ich unterteile (unter Windows) mein System in zwei Teile,C: und D:. Auf ersterem Laufwerk installiere ich die Programme und Windows, auf letzterem lagere ich meine Daten. Naheliegend, weil D nach C kommt aber auch für Daten ;) . So kann ich das System neu aufsetzen und die Daten einfach mitnehmen. Nach der Neuinstallation muss ich nur die Ordner von zum Beispiel C:\Users\Benutzername\Desktop wieder auf D:\Desktop umbiegen und alles ist wie gehabt.

Nun wollte ich NetBeans installieren, das schlug aber fehl mit dem Hinweis, dass im Verzeichnis D:\ nicht mehr genug Platz vorhanden sei (etwa 600 MiB waren nötig, meine alte Platte war aber voll) um einen Ordner .nbi anzulegen oO . Nun erinnerte ich mich, dass ich schon immer den Ordner D:\.nbi hatte und den auch durch Löschen nicht dauerhaft entfernen konnte. Eine schnelle Suche ergab folgendes:

Der Ordner .nbi wird von der Installationsroutine angelegt und sollte eigentlich in %USERPROFILE%, also in der Windows-Variante des Home-Verzeichnisses liegen. Im Blog von Tim Ehat fand ich die Lösung: Das Home-Verzeichnis wird von der JVM über eine Systemeigenschaft „user.home“ abgefragt, zum Beispiel so:

public class PropertyTest {
    public static void main(String[] args)
        throws Exception {
			System.out.println( System.getProperty("user.name") );
			System.out.println( System.getProperty("user.home") );
			System.out.println( System.getProperty("user.dir") );
		}
}

In Windows wird jedoch das Elterverzeichnis des Desktops genommen (der bei mir nunmal unter D:\Desktop liegt). Das ist nun auch die Erklärung, warum ich diese Verzeichnisse auf Laufwerk D bekomme.

Man kann das nun ganz einfach Umbiegen: Die JVM fragt eine Umgebungsvariable _JAVA_OPTIONS ab, in der man den Java-Parameter -Duser.home=%USERPROFILE%\AppData\Roaming eingeben kann, oder einen beliebigen anderen Pfad.

Fazit: endlich ist mein System sauber und die Datenplatte von unnötigem Müll befreit. Was die Entwickler dazu getrieben hat, einen selten dämlichen Algorithmus zur Bestimmung des Home-Verzeichnisses zu wählen und das nicht zu fixen, weiß ich leider auch nicht. Im Kommentarbereich von Tims Blog wird angedeutet, dass es an Abwärtskompatibilität liegt. Aber mal ehrlich: Wenn man den Pfad zumindest auf %USERPROFILE% setzt bekommen das normale Anwender nicht mit. Und Nutzer, die ihren Desktop umlegen sollten in der Lage sein, eventuell auftretende Probleme zu Fixen.

Geschrieben von Kap. Zuletzt geändert am 4. Januar 2014.

Zufällige Matrizen generieren

Zum Testen einer Methode zur Matrix-Multiplikation wollte ich gern Matrizen haben, dass das Ergebnis einer Matrixmultiplikation eine ganzzahlige Matrix mit „schönem“ Aussehen ist, so dass die Korrektheit der Implementation leicht überprüft werden kann. Sämtliche Matrizen sollten nach möglichkeit ganzzahlig sein. Um das Ziel zu erreichen habe ich einen Matrix-Generator geschrieben, mit dem ich das vorgestellte Verfahren erleutere. Der Generator benutzt meine simple Implementation einer Matrix-Klasse, die die wichtigsten Methoden bereitstellt.

Zuerst wollte ich eine Einheitsmatrix erzeugen, ich suchte also zwei Matrizen A und B mit A×B=E. Dies würde jede invertierbare Matrix erfüllen. Zusätzlich sollten nun aber A und B noch ganzzahlig sein. Allgemein ist für eine ganzzahlige Matrix A die Inverse A1 zwar rational, aber nicht ganzzahlig.

Meine Kenntnisse der linearen Algebra waren etwas eingerostet, aber nach kurzer Suche fand ich einen Artikel von Nathan Brixius, der ebenfalls über die Erzeugung spezieller Matrizen schrieb und mir bei der Erinnerung half. Für die Determinanten von Matrizen gilt det(A) · det(B)=det(AB) und die Determinante der Einheitsmatrix ist natürlich 1. Außerdem kann man die Determinante von Matrizen in oberer oder unterer Dreiecksform als Produkt der Diagonalen leicht bestimmen.

Wir erzeugen zunächst eine Matrix in unterer Dreiecksform:

double[][] values = new double[dimension][dimension];
for( int i = 0; i < dimension; ++i )
	values[i][i] = 1;
for( int i = 1; i < dimension; ++i )
	for( int j = 0; j < i; ++j )
		values[i][j] = getValue(i, j);
Matrix lowerTriangular = new Matrix( values );

Es wird ein 2-dimensionales Array erzeugt, das die Werte enthält. Die Diagonale wird mit 1 gefüllt und die untere Hälfte mit Werten, die in der Methode getValue erzeugt werden (z.B. zufällig).

Genauso wird eine Matrix in oberer Dreiecksform benötigt:

values = new double[dimension][dimension];
for( int i = 0; i < dimension; ++i )
	values[i][i] = 1;
for( int i = 0; i < dimension-1; ++i )
	for( int j = i+1; j < dimension; ++j )
		values[i][j] = getValue(i, j);
Matrix upperTriangular = new Matrix( values );

Das Prinzip entspricht dem der LU-Zerlegung einer Matrix: Es werden zwei Matrizen L und U in unterer beziehungsweise oberer Dreiecksform erzeugt, so dass die Determinante 1 ist (d.h. die Diagonale ist 1). Die Matrix M:=L×U ist ganzzahlig und invertierbar und nach der Bestimmung der Inversen über die Determinante ist die inverse Matrix A1 ebenfalls ganzzahlig.

Matrix matrix = lowerTriangular.mult( upperTriangular );
Matrix inverse = matrix.invert();

Mögliche Matrizen als Testinstanzen sind damit also M und A1. Um Abwechslung zu erzeugen kann man nun beliebige Matrizen F an M von links anmultiplizieren (oder an A1 von rechts) und erhält als Ergebnis nicht mehr die Einheitsmatrix, sondern F: F×M×M1=F×E=F.

Als Beispiel erzeugen wir eine Matrix, die natürliche Zahlen von 1 aufsteigend enthält:

values = new double[dimension][dimension];
int c = 1;
for( int i = 0; i < dimension; ++i )
	for( int j = 0; j < dimension; ++j )
		values[i][j] = c++;
Matrix F = new Matrix( values );

Damit kann die Ausgabematrix erstellt werden:

Matrix result = matrix.mult( inverse );

Die beiden Testinstanzen sind dann result und inverse, das Ergebnis der Multiplikation ist F. Natürlich kann F auch rationale Zahlen enthalten, dann ist natürlich die Eingabematrix auch nicht mehr ganzzahlig.

Geschrieben von Kap. Zuletzt geändert am 11. Januar 2014.

Der lange Weg zur Adresse in den USA

Ich wollte mir eine Flasche 360 Vodka Glazed Donut bestellen, die Geschmacksrichtung ist einfach zu abgefahren, um sie nicht zu probieren. Leider gibt es fast keinen europäischen Händler, der diese Marke führt und amerikanische Händler verschicken nichts nach Europa. Also muss eine US-Adresse her, das ist aber auch leichter gesagt, als getan. Hier die ersten drei Phasen auf dem Weg zum Vodka.

Phase 1: Versand nicht Möglich

Nachdem ich vom Vodka 360° gehört hatte (nicht zu verwechseln mit Three Sixty!), wurde der Wunsch ihn zu haben schnell so groß, dass ich ihn nicht mehr ignorieren konnte.

So schwer kann das ja nicht sein… denkste! Schnell das Internet angeschmissen (nur metaphorisch), etwas gegoogelt und festgestellt: so einfach ist das doch nicht oO Er wird nur in den USA vertrieben (mit ausnahme eines UK-Stores, wo er aber ausverkauft war) und kein Geschäft in den USA schickt Alkohol nach Europa. Schon irgendwie verständlich, es mag ja Zoll-Probleme geben. Aber ich habe noch nicht mal einen Gefunden der Auf-eigene-Gefahr-Versand anbietet.

Nach weiterer Suche wurde auch klar, warum: zwar ist die Prohibition schon seit einiger Zeit vorbei, so richtig überwunden scheint das ganze Thema mit dem bösen Alkohol aber noch nicht, und so hat jeder Versandhändler auch eigene Listen, in welche Staaten er überhaupt Alkohol verschickt. So einfach geht das also nicht, es muss eine neue Idee her!

Phase 2: Weiterversand

Da viele Nerds eh an Gegenstände kommen müssen, die bei uns nicht verkauft werden (da wir dankenswerterweise hier hin #Neuland auch von Firmen wie Google zweitklassig behandelt und einige Produkte nicht bekommen) hatte ich schon von virtuellen Adressen gehört.

Kurze Recherche ergab drei Kandidaten: MyUS, Borderlinx und VIAdress. Letzterer fäll hauptsächlich durch Spam negativ auf, fällt also direkt raus. Borderlinx hätte zwar den Vorteil mit DHL zusammen zu Arbeiten und so die potentiellen Möglichkeit dem deutschen Zoll gut klar zu kommen, schießt sich aber durch die Restriktionen bereits ins Abseits. Dass Leichen und lebende Tiere nicht verschickt werden ist ja noch einsehbar. Aber auch Handys und Alkohol werden nicht verschickt (wichtig auch für alle Nerds!), sogar Pornos sind nicht erlaubt (wobei man die Möglichkeit ja eh nicht braucht). Also war die Entscheidung klar: MyUS sollte es werden, es wurde auch bei Awesome Drinks, dem Shop von Everyday Drinkers bzw. Common Man Cocktails für internationalen Versand empfohlen.

Phase 3: Account anlegen

Die letzte Phase sollte eigentlich recht schnell gehen. Account anlegen (kostet 10$) und fertig. Das hat sich jedoch als schwierig herausgestellt, da ich meine Kreditkartendaten nicht eingeben konnte, ausgerechnet bei einem amerikanischen Unternehmen, dabei funktioniert da doch alles mit Kreditkarten! Eine völlig neue Erfahrung. Zusätzlich zu den üblichen Informationen (Nummer, Code, …) wurde nämlich noch nach der „Issuing Bank“ und „Issuing Bank Phone Number“ gefragt.

Nun, die ausgebende Bank der Kreditkarte ist nicht unbedingt die Bank, von der man die Karte erhalten hat. Bei der Anmeldung wird immerhin der Tipp gegeben, dass diese Informationen auf der Rückseite stünden. Tatsächlich stand da bei mir auch was (eine Bank von der ich noch nie gehört habe). Die Telefonnummer steht da jedoch nicht.

Man kann jedoch einfach an diese Informationen kommen: die ersten sechs Ziffern der Kreditkartennummer, die sogenannte BIN, kodieren unter anderem die ausgebende Bank und in Online-Datenbanken wie Binbase.org kann man sich die Bank und zum Glück auch die Telefonnummer heraussuchen lassen.

Zuletzt verwendet MyUS bei der Dateneingabe einen Mechanismus, der von NoScript als gefährliche Cross-Site-Script-Attacke erkannt wird. Nach vielen Versuchen konnte ich es immerhin noch erreichen, dass meine Karte akzeptiert wurde und ich habe endlich meine Adresse in Florida B-) .

Ob das ganze mit dem Vodka doch noch klappt, werde ich demnächst berichten.

Geschrieben von Kap. Zuletzt geändert am 12. November 2013.

Ich und mein Computer: Symbolische Links

Es gibt eine ganze Liste von Fehlern, die ein Computer so haben kann. Deichkind beschreiben in ihrem Song Ich und mein Computer einige davon. Die meisten davon waren mit bekannt, und einige wie „Festplatte Voll“ und „Falsche Version, Update nicht verfügbar“ hatte ich natürlich auch schon. Selbstverständlich auch den Refrain „Sanduhr – Sanduhr“.

Auf meinem Linux-Rechner bin ich vor der Sanduhr verschont, dafür gibt es aber ein Problem, an das der Typische Windws-User nicht denkt. (Bei Äpfeln gibts das theoretisch auch, da ja auch ein Unix drunter ist. The More You Know ;) )

The More You Know - Have A Mac? - You Use UNIX!

Nun hatte ich das Problem, dass Wuala auf dem Linux-Rechner ein Verzeichnis nicht synchronisiert. In der Sync-Übersicht (Strg+F9) wurde bei dem Sync-Auftrag zwar ein grünes Häkchen angezeigt, die Größe des Verzeichnisses stand aber bei 0 B, obwohl das Verzeichnis ganz sicher Dateien enthielt. Nach langem Suchen, was wohl die Ursache sein könnte, fand ich heraus dass ~/Data ein symbolischer Link auf ein anderes Verzeichnis war. Wuala scheint symbolische Links nicht zu unterstützen, nach Änderung auf den absoluten Pfad klappte auch das synchronisieren.

:facepalm: ich hatte das gleiche Problem bereits mit Thunderbird, das den Profilordner nicht ordnungsgemäß lädt, wenn er einen symbolischen Link enthält.

In dem Sinne: Programm findet Daten nicht, symbolischer Link benutzt!

Geschrieben von Kap. Zuletzt geändert am 20. November 2013.

Quo vadis, iGoogle?

In weniger als zwei Wochen wird iGoogle eingestellt. So habe ich zuerst von verschiedenen nerd-Blogs gelesen. Das Produkt kam mir sehr unbekannt vor, doch langsam dämmerte mir: vor mindestens 100 Jahren habe ich das auch mal genutzt. (Damals, als StudiVZ noch über 9000 Nutzer hatte.)

Ich hab mal einen Screenshot angefertigt, wie ich damals mein iGoogle eingerichtet habe. Zelda mag ich immer noch, aber teilweise ist es schon interessant was sich verändert. PCGames lese ich nicht mehr, weder als Printausgabe noch digital und Filmstarts scheint seinen RSS-Feed deaktiviert zu haben.

Überrascht war ich eher, dass vor 16 Monaten, als es angekündig worden ist, viele Beschwerden aufkamen. Ich vermute aber, es scheint hier ein Problem mit der Wahrnehmung zu geben, die paar User, die es nutzen übersehen, dass sie so wenige sind.

Immerhin ist Google so nett, und verlinkt gleich auf eine Seite mit Alternativen.

Mein iGoogle

Geschrieben von Kap. Zuletzt geändert am 20. November 2013.

Soziale Empfehlung: Wie Google Werbung mit Nutzern macht

Google wird demnächst ein neues Feature freischalten, die Soziale Empfehlung. Benutzer von Google+ wurden bereits von Google in einer Mail und mit einer Stream-Benachrichtigung darüber informiert, aber auch zahlreiche Blogs berichten darüber.

Was ist das genau? Bisher wurden Empfehlungen von Kontakten (+1) zum Beispiel bei Programmen im Play Store angezeigt, was tatsächlich wirklich Praktisch ist und für mich auch Kern-Nutzen von sozialen Netzwerken. In einem weiteren Schritt möchte Google aber auch Profilbilder, Bewertungen und kurze Texte in Werbung einblenden. Das Feature wird vermutlich am 11.11 eingeführt, und bereits jetzt ist darüber informiert worden. Ich stehe dem Ganzen zwiespältig gegenüber, aber immerhin ist Google vorbildlich und informiert vorab gut verständlich auf einer Infoseite darüber, natürlich auch mit Beispielbildern.

Auf der Infoseite kann man natürlich auch angeben, ob man daran teilnehmen möchte, oder nicht. Bei einigen Nutzern ist der Haken bereits aktiviert, bei einigen jedoch nicht. Das scheint mit den Usereinstellungen zur Veröffentlichung von +1 und Bewertungen bei Zagat. Ich persönlich habe mich dagegen entschieden. Es ist OK, wenn Google meine Daten sammelt und mit (möglichst guter) personalisierter Werbung Geld verdient. Aber: ich möchte nicht, dass jemand mit mir Geld verdient. Und genau das geschieht in dem Fall, wenn jemand eventuell wegen meiner Bewertung oder dem Bild auf eine Anzeige klickt.

Geschrieben von Kap. Zuletzt geändert am 12. Oktober 2013.

Protest gegen Spionage nun auch in der NSA-Hochburg USA

Die Organisation Restore the Fourth ruft zu Wiederstand gegen die immer weiter um sich greifende Überwachung auf. Ihr Name bezieht sich dabei auf den vierten Zusatzartikel der US-Verfassung, in dem es heißt

The right of the people to be secure in their persons, houses, papers, and effects, against unreasonable searches and seizures, shall not be violated…

Ich kann nicht sagen, wie groß die Proteste der Amerikaner wirklich sind, Fleischhauer bei Spiegel-Online meint ja, dass es den meisten Amis egal wäre. Mal sehen wie sich das weiter entwickelt.

Zu den Unterstützern der Aktion zählen unter anderem die üblichen Verdächtigen wie 4chan, Reddit und DuckDuckGo aber auch Mozilla und die EFF und viele weitere.

[via heise]
Geschrieben von Kap. Zuletzt geändert am 10. März 2017.

OMG, they have a time machine!

Heute wollte ich euch Vim Habits 2.0 vorstellen, ein Tech Talk, den Bram Moolenaar vor einigen Jahren gegeben hat. Er präsentiert dort einige Tricks, die das Leben mit Vim einfacher machen. Das wichtigste dabei ist, dass man neue Tricks regelmäßig Anwenden muss, damit man wirklich effektiver wird, daher auch der Titel.

Brams Webseite ist übrigens der Wahnsinn. Die ist sowas von 90er! Der totale Web-Flashback… es gibt sogar einen Webring. (Man beachte, dass Webringe, quasi zeitgleich mit dem Internet geboren, seit der Übernahme durch Yahoo! gestorben sind und nur noch eine Existenz als Zombi führen.)

Auf Brams Webseite gibt es auch eine DivX-Version des Videos zum runterladen.

Geschrieben von Kap. Zuletzt geändert am 17. Juni 2013.