Spring Security: isFullyAuthenticated()

ist stellenweise verwirrend beschrieben. Hier heißt es

Returns true if the user is not an anonymous or a remember-me user

, wobei die Klammerung fehlt: “not” bezieht sich auf beides! Hier ist es IMHO auf andere Art verwirrend, aber zumindest nicht mehrdeutig:

Determines if the SecurityExpressionOperations.getAuthentication() authenticated without the use of remember me
HTH

Git und Intellij und Encoding

Neulich™ hatte ich das Problem, dass ein UTF-8-enthaltender String falsch nach XML transformiert wurde. UTF-8 ist (? war es zumindest früher oft) so eine Sache in Java, man muss(te) an drölf Stellen das Encoding explizit setzen; dazu gehörten zB Stream, Writer/Reader, StringBuilder, etc pp. Das mag inzwischen anders sein, denn nach langem Debugging stellte sich raus, dass nur das File-Encoding in IntelliJ falsch gesetzt war – der Code funkionierte ohne Änderung, die Quelle des Strings war bereits fehlerhaft gespeichert. Irreführenderweise hatte der IntelliJ-Debugger den String die ganze Kette hindurch korrekt angezeigt. “Nimm IntelliJ” haben sie gesagt, “das funktioniert super” haben sie gesagt. m(

Wie dem auch sei: Da UTF-8 an der Stelle zwingend gefordert war, musste sichergestellt werden, dass kein Entwickler, aus welchen Gründen auch immer, ein anderes Encoding einschleust, bzw., wie in diesem Fall, UTF-8 durch falsch konfiguriertes Encoding kaputtspeichert. Ein Ansatz könnte sein, im Git-Repo UTF-8 zu erzwingen. Ein Ansatz dafür kann sein, das Encoding in einem Git-Hook zu prüfen. Anbieten tun sich pre-commit (der erste Hook, der greift; client-seitig; Beispiel [1] [2]) und pre-receive (der erste serverseitige Hook; Beispiel).

[Für Stash/Bitbucket Server scheint es auch Möglichkeiten zu geben; ein fertiges Plugin habe ich aber nicht gefunden.]

pre-commit hat den Vorteil, dass sich keine Commits aufstauen, bevor das Problem auffällt. Dafür müssen lokale Hooks aufwändig verteilt/aktiviert werden – bsplw. über separat eingecheckte Verzeichnisse, die gesymlinkt (aber was ist mit Windows? Was mit wirklich lokalen Hooks? Und was ist noch zu beachten?) oder kopiert werden. Für pre-receive gelten Vor- und Nachteile inversiert, außerdem benötigt man Zugriff auf den Server auf Dateisystemebene.

Lange Rede, kurzer Sinn: Aus Gründen haben wir uns für einen pre-commit entschieden. Das Skript muss dabei .git/hooks/pre-commit heißen. Ich hätte ein Verzeichnis pre-commit mit Skripten darin erwartet, aber das wirft einen

cannot spawn .git/hooks/pre-commit: No such file or directory

Und es war gar nicht so einfach, eine Datei überhaupt mit dem falschen Encoding abzuspeichern. Sublime und Notepad++ haben sich (stillschweigend, was Notepad++ angeht) geweigert. Schließlich habe ich es mit IntelliJ geschafft, was allerdings auch gewarnt hat. Keine Ahnung, wie das ursprüngliche Problem überhaupt zustande kam.

Lokale Kopie des Skripts:

[Achtung: Das Skript kann nicht mit Binaries umgehen! Und das schließt bereits .woff ein. Offenbar ist es auch nicht trivial, Binaries zu erkennen; Internet nutzt dazu die Dateigröße oder auch Fileextensions. Ersteres scheint mir unzuverlässig, man denke an kleine Grafiken. Zweiteres ist sehr aufwändig…]

Beispielhafte Ausgabe (“ISO 8859-1.txt” heißt die Datei):

Und, der Vollständigkeit halber: Die Einstellung von Intellij:

btw: In Eclipse kann man Settings als Textfile exportieren und bsplw. in einem Repo ablegen – in IntelliJ scheint das nur als .jar exportierbar zu sein, bzw. über einen “IntelliJ Configuration Server” (WTF!?) verteilbar?

Java: Aus GWT in die Browser-Konsole loggen

Möchte das nicht immer googlen:

Logger und Level sind aus java.util.logging, also alles eigentlich recht naheliegend.

OS X: PDFs (sinnvoll) optimieren

OS Xs “Vorschau” bietet Ablage -> Exportieren -> Format: PDF, Quartz-Filter: Reduce File Size. Das funktioniert bescheiden; als Bild gescannter Text bsplw. ist dann nicht mehr lesbar. Internet sagt, man könne per “ColorSync” eigene Filter definieren, die funktionieren dann aber gar nicht.

Lösung: Eine Filterdatei (lokale Kopie) nach /System/Library/Filters/ kopieren (Achtung: Verzeichnis ist ggf. versteckt). Danach hat man den Quartz-Filter “PDF optimiert”, und der ist besser.

San Francisco Tipps

Nachdem ich alle paar Jahre mal nach San Francisco Tipps gefragt werde, schreibe ich sie hier mal zusammen. Die Liste wird vermutlich noch ein, zwei mal aktualisiert über die Zeit.

Die Tipps sind jetzt nicht super geheim, aber vielleicht helfen sie ja. Ich habe nur eine Handvoll ausgesucht, weil man meistens nur wenige Tage in SF selbst ist.

Allgemeines

  • Es ist eher frisch. Wenn man drumherum (hey: Es ist California!) in Shorts und Shirt rumläuft, braucht man in SF lange Hose und evt. eine Sommerjacke.
  • Apropos Sommer: Bis weit in den Sommer rein ist es vormittags neblig. Die beste Reisezeit würde ich deshalb im Bereich August bis Anfang Oktober sehen (Ausnahme: Für Alcatraz, siehe unten).
  • Nenne es nicht Frisco! Eigentlich nicht mal Cisco, aber auf keine Fall Frisco. Erlaubt sind San Fran, oder kurz The City. Frisco ist, wie Deutschland und Bayern gleichzusetzen; man ist direkt disqualifiziert :-)
  • Zu Hotels etc. kann ich wenig sagen; wenn ich gerade kein Zimmer hatte, war ich in Hostels. Das Downtown ist super zentral, mehr geht nicht.
  • Bus und U-Bahn sind super ausgebaut; das System heißt BART.

Tagsüber

  • Innenstadt: Market Street, Yerba Buena Gardens, Union Square, Chinatown, mit den Cable Cars über die Insel und über den Embarcadero zu Fuß zurück – Stichwort Pier 29, Pier 1. Etwa ein Tag.
  • Der Klassiker: Golden Gate Bridge. Man kann zu Fuß hin, das wäre ein Tagesausflug, zB. vom Endpunkt der o.g. Cable Cars aus. Man kann sich auch Räder leihen, was den Vorteil hätte, dass man auch bequem über die Brücke kommt, denn die ist sehr lang. Zu Fuß oder mit dem Rad käme man über Crissy Field, aber man kann auch Bus fahren. ½ bis ein Tag, je nachdem. Zu meiner Zeit konnte man etwa hier runter ans Wasser klettern (allerdings semilegal), und Fotos wie das obige zu machen :-)
  • Alcatraz. Das lohnt sich tatsächlich eher im Frühjahr, weil die Insel ein einziger (und dann blühender) Garten ist. Guter halber Tag. Im Anschluss vllt. ein Spiel der Giants direkt an der Bay?
  • Haight Ashbury, evt. mit Abstecher in den Park oder zu den Ladies, auf jeden Fall zu Amoeba! Halber Tag oder mehr, je nachdem, wie lange man im Park ist.
  • Mission. Man sollte die Straße und den Park + Kirche ein wenig erforschen, und abends richtig mexikanisch essen gehen – und danach Kneipentour!

Abends

  • Innenstadt: Irish Bank (gut am St. Patrick’s Day!!), Johnny Foley’s (gut zum Sport gucken und direkt um die Ecke vom Hostel), ganz nett ist auch
  • An der Bay: Pier 23 Cafe (Livemusik!)
  • Mission: Kneipentour die Straße hoch und runter :-)
  • Zeitgeist (Burger und vor allem, die Bloody Marys! Pflichtprogramm!!)
  • Essen: Definitiv mexikanisch, so oft es geht. Auch die mexikanischen Fast Food Läden sind super.
  • Oh, und: Chinesisches Essen bekommt man gut und günstig hier

Drumherum

Anbieten würde sich:

  • Richtung Süden auf dem Highway 1. Je nach verfügbarer Zeit kommt man dort nach
    • Santa Cruz, das wäre ein Tagesausflug. Strand und entspannte Atmosphäre (ein Vergnügungspark direkt auf dem Strand!) erinnern an San Diego. Und wenn die Jahreszeit passt, kann man hier noch nach Walen gucken.
    • Über Monterey nach Big Sur. Der absolute Wahnsinn, allerdings ein Ausflug von mindestens einem Tag pro Richtung, besser mehr. Ziel könnte LA sein, dann rechnet lieber zwei Tage. Einkehren könnte man dann in Pismo.
    • Bis LA; wie gesagt, entspannt in zwei Tagen, ein Tag ist machbar, aber nicht zu empfehlen. In LA (und für den Weg zurück), dann entsprechend zusätzliche Zeit. In LA eher Venice Beach als alles andere; angenehmerweise liegt das aus SF-Sicht am Ortseingang.
    • Bis San Diego. San Diego ist der Hit, und meiner Meinung nach viel mehr “California” als LA.
  • Richtung Süd-Osten nach Las Vegas. Die Strecke ist eher langweilig, geht mitten durch “das” Tal (also die Gemüse- und Obst-Plantagen)
  • LA, San Diego und Las Vegas würden dann den Joshua Tree National Park und/oder Hoover Damm/Grand Canyon anbieten.
  • Richtung Osten in den Yosemite Nationalpark. Da war ich leider nicht, was echt eine Schande ist.
  • Richtung Nord-Osten nach Berkeley. Super entspannte Studentenstadt, hin und zurück ein Tagesausflug, auch mit der BART.

Anbieten würde sich eher nicht der Norden. Ich habe mir sagen lassen, dass die Küste dort ähnlich spektakulär aussieht; das kann ich nicht beurteilen. Aber es kommen wenig konkrete Ziele in die Richtung, es sei denn, man steht explizit auf kalifornischen Wein, der dort angebaut wird.

SourceTree/Windows: “The server’s host key is not cached in the registry”

Folgende Meldung

git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin
The server’s host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server’s rsa2 key fingerprint is:
ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
If you trust this host, enter “y” to add the key to
PuTTY’s cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter “n”.
If you do not trust this host, press Return to abandon the
connection.

bei jeder Operation (fetch, pull, …). Jede dieser Operationen funktioniert auf Kommandozeilenebene. Internet sagt, dieser Fall würde behandelt; ein entsprechender Dialog würde sich öffnen. Das ist nicht der Fall. Internet sagt weiterhin, man möge sich per SSH zum Server verbinden, um den Fingerprint in die known_hosts zu bekommen. Dort ist er bereits, und/denn die Meldung kommt nicht von SSH, sondern von PuTTY, das von SourceTree benutzt wird. Deswegen sagt Internet ([1], [2], [3]), man möge plink.exe <hostname> aufrufen. plink.exe kommt mit PuTTY. Das bringt aber keine Änderung.

Geht aber in die richtige Richtung: SourceTree benutzt offenbar PuTTY, allerdings finde ich keine putty.exe. Wenn ich mir diese ziehe, starte, und mich mit dem Zielserver verbinde, bekomme ich endlich den erwünschten Dialog – und ab dem Moment auch in SourceTree m(

UPDATE

Nach einem Reboot gab es wieder Probleme; die Lösung war: Pageant starten (läuft vermutlich schon), öffnen (über das Icon im System Tray!), den .ppk-Key von PuTTY/SourceTree manuell hinzufügen.