
Och, immer is’ was mit die schrottigen Computers, kauf Dich mal ‘n Fahrrad!
Quelle: Mein CVE30360-KDG Kabelmodem.
♪ Commit ins Abenteuerland ♫

Och, immer is’ was mit die schrottigen Computers, kauf Dich mal ‘n Fahrrad!
Quelle: Mein CVE30360-KDG Kabelmodem.
|
1 |
@PreAuthorize("hasAuthority('FOOBAR') and isFullyAuthenticated()") |
ist stellenweise verwirrend beschrieben. Hier heißt es
Returns
trueif 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 theSecurityExpressionOperations.getAuthentication()authenticated without the use of remember me

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:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/bin/sh git ls-files -z -- | xargs -0 sh -c ' e="" for f; do if ! git show :"$f" | iconv -f UTF-8 -t UTF-8 >/dev/null 2>&1; then e=1 echo "Not UTF-8: $f" #exit 255 # to abort after first non-UTF-8 file fi done test -z "$e" ' - |
[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?
Wer mehrere Apps gleichzeitig im Super Dev Mode laufen lassen möchte, muss “die” Ports ändern:
|
1 |
-port 8877 -codeServerPort 9977 |

Möchte das nicht immer googlen:
|
1 2 |
<!-- In der xy.gwt.xml --> <inherits name="com.google.gwt.logging.Logging"/> |
|
1 2 3 4 5 6 |
// In MyGWT.java: Logger logger = Logger.getLogger("NameOfYourLogger"); logger.log(Level.SEVERE, "Hello moto"); // bzw. in kurz: Logger.getLogger("").log(Level.SEVERE, "Hello moto"); |
Logger und Level sind aus java.util.logging, also alles eigentlich recht naheliegend.
|
1 |
com.google.gwt.core.client.GWT.log("even better :-)"); |
Die andere Methode hat allerdings den Vorteil, als Error zu loggen, was sich leichter rausfiltern lässt.
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.

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.
Anbieten würde sich:
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.
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(
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.