Rageaholic Movie Review: ESCAPE FROM L.A.
Ich fand den Film doof. Aber das war vor den Filmabenden voller schlechter B-Movies, und lange her. Er wird recht haben.
Serendipity 2 in 2014
Der aktuelle Stand von Serendipity 2 ist: Wir sind mit dem Alphatest durch. Für eine begrenzte Zahl von Testern wurde ein Testblog vorbereitet, in dem sie spielen sollten. Und auch wenn nicht jeder Tester dann wirklich Zeit hatte, kam am Ende doch einiges an Feedback zusammen: 58 Issues, teilweise mehrteilig, extrahierten wir (=primär Yellowled) aus dem Feedback, diskutierten sie, und versuchten die verbliebenen als lösbar erscheinenden dann zu lösen. Damit sind wir jetzt fast durch.
Ich finde es ja wirklich toll, wenn sich ein Stück Software runder anfühlt, nachdem Arbeit reingesteckt wurde. Und gerade löst das neue Backend genau dieses Gefühl bei mir aus. Sowas kann natürlich täuschen, und vor allem geht immer noch mehr. Und viel sehen tut man von den letzten Änderungen auch nicht:
Aber ein bisschen schon.
Thema "es geht immer noch mehr": der Titel ist auch als Absichtserklärung zu verstehen. Der grobe Plan sieht so aus: Wir machen die letzten vom Alphatest motivierten Änderungen, besprechen dann mit den anderen was zu tun ist im Hinblick auf einen regulären Betatest - mit RCs und eben so, wie das auch mit den 1.x-Versionen gehandhabt wird. Das kann durchaus noch ordentlich Arbeit sein, selbst wenn wir uns mit allem einig sind (z.B. könnte man derzeit noch nicht sauber von 1.x auf 2.0 upgraden). Aber doch sollte es bald möglich sein, den derzeitigen Part der Entwicklung - also die separate 2.0-Entwicklung mit Fokus auf das neue Backend - abzuschließen.
Was schön wäre, selbst wenn dadurch einige der größeren Pläne unvollendet bleiben. Denn zum einen wird es Zeit, dass es fertig wird, damit andere von den neuen Funktionen profitieren können, wenn sie denn gefallen. Und außerdem würde ich es gerne für mich abhaken. Selbst wenn es gerade Spaß macht.
Redtube-Gutachten
Nun, da die Details des Redtube-Gutachtens bekannt werden (erst berichtete der lawblog, jetzt auch die Zeit), wird der Fall immer absurder. Und es stellen sich grundsätzlichere Fragen: Wie kann es sein, dass bei einem solch absurden Gutachten trotzdem die Provider verpflichtet wurden, die Kundendaten herauszugeben? Warum sind die Richter in so vielen Fällen zu unfähig, um das aussagelose Gutachten als solches zu erkennen? Wo sind die Konsequenzen für die Richter? Was sagt das über den deutschen Rechtsstaat, wenn eine solche Affäre für alle Übeltäter - Abmahner wie Richter - so lange folgenlos bleibt?
Mit HTML5 Eingaben verbieten
Ein Formular hat ein input-Eingabefeld (type text), und eine Reihe von Wörtern sind invalid, weil Kategorien mit diesem Namen schon existieren. Wie warnt man nun am besten den Nutzer, wenn seine Eingabe nicht gültig ist, statt es nach Absenden des Formulars festzustellen?
Eine Möglichkeit ist das pattern-Attribut mit Negation. Normalerweise gibt das vor, was gültig ist, also z.B. nur Wörter mit vier Buchstaben. Aber mit diesem Code lassen sich ganze Worte ausschließen:
pattern="^(?!(wort1|wort2)$).*"
Broken Flowers
Bill Murray hat auf Reddit ein paar Fragen beantwortet und dabei diesen Film erwähnt. Er schrieb:
someone asked "what movie was the most fun to act in" and deleted their comment, so here goes:
Well, I did a film with Jim Jarmusch called Broken Flowers, but I really enjoyed that movie. I enjoyed the script that he wrote. He asked me if I could do a movie, and I said "I gotta stay home, but if you make a movie that i could shoot within one hour of my house, I'll do it."
So he found those locations. And I did the movie.
And when it was done, I thought "this movie is so good, I thought I should stop." I didn't think I could do any better than Broken Flowers, it's a film that is completely realized, and beautiful, and I thought I had done all I could do to it as an actor. And then 6-7 months later someone asked me to work again, so I worked again, but for a few months I thought I couldn't do any better than that.
Und obwohl der nur eine mittelmäßige Bewertung hat, und vielleicht weil er nicht einfach ist, kann ich das verstehen. Man kann den Film mögen.
Die Geschichte von Sun
The first week I reported to Bob, I was desperate to figure out a way to connect with him. I was in my office in Milpitas around 6 pm when one of my direct reports, a young man named Mark, came in pretty upset. It seemed Bob Garrow had just tried to run him down with his Porsche. Actually, given his rep, Bob trying to run someone down did not surprise me that much...
"Which parking lot were you in?" I asked.
"What parking lot?" Mark replied. "I was in my office!"
Von hier. Ihre ganze Artikelserie zu ihrer Zeit bei Sun hat etwas. Vielleicht Melancholie?
Asus PCE-AC68 unter Ubuntu 12.04
Die PCE-AC68 Wlankarte ist eine 802.11ac-Karte, daher theoretisch 1.30Gbps schnell. Mit der enthaltenen externen Antenne dachte ich, das sei eine gute Wahl, um meinen PC mit dem etwas zu weit entfernten Router zu verbinden. Meine alte Karte schaffte das nur so gerade, mit einer instabilen Verbindung, und eine bessere Antenne als meine wäre nicht viel günstiger gewesen.
Nur: Brandneue Karte mit BCM4360-Chip, läuft die unter Linux/Ubuntu? Tatsächlich funktioniert sie einwandfrei. Dafür muss der Treiber aber manuell installiert werden, zumindest unter Precise. Der richtige Treiber ist der bcmwl ab Version 6.30.223.141. Das Paket für saucy herunterladen (hier die Launchpadseite, falls sich was ändert) und mit
dpkg -i Downloads/bcmwl-kernel-source_6.30.223.141+bdcom-0ubuntu1_i386.deb
installieren.
Alternativ findet sich der Treiber zum manuellen installieren auf der Broadcomseite. Asus selbst bietet für die Karte keinen Linux-Support an.
Wichtig: Die andere Wlan-Karte, die mit dem b43-Treiber lief, musste ich ausbauen, damit der wl-Treiber funktionierte. Der lädt sich sonst fälschlicherweise auch für die und stirbt. Parallel können die Treiber nicht betrieben werden, daher setzte ich gleich
blacklist b43 blacklist brcmsmac blacklist bcma
auf die /etc/modules.d/blacklist.conf. Und der Kernel muss der 3.8er sein.
rsa.sh
Vor ein paar Jahren versuchte man mir zu erklären, wie RSA funktioniert. Als Übung - und mit der üblichen Warnung, unseren Code nie zu benutzen - sollten wir es selbst implementieren, denn nur dann wird es verstanden. Machte ich mit Freude, natürlich in Bash, einfach weil ich es konnte. Und ich noch heute grinsen muss beim Gedanken an die Schimpfworte, die der Tutor bei der Bewertung benutzt haben müsste (wenn ich mich richtig erinnere, bekam ich sogar die volle Punktzahl - was mich dann doch überraschte).
War mir sicher, das hier verbloggt zu haben, konnte es aber (anlässlich noqqes Implementierung) nicht mehr finden. Daher, uneditiert aus der Abgabemail (oder hier als gist):
#!/bin/bash getPrim() { local range="$1" local prim=$(getRandom $range) until [[ $prim -gt 1 ]] && isPrim $prim;do prim=$(getRandom $range) done echo $prim return 0 } #Miller-Rabin-Test isPrim() { local prim=$1 if [[ $(echo "$prim % 2" | bc) -eq 0 ]];then return 1 fi #won't find an "a" for them: if [[ $prim -eq 3 ]] || [[ $prim -eq 5 ]];then return 0 fi prim_range=${#prim} local i=0 while [[ $i -lt 10 ]];do local a=$(getRandom $(($RANDOM % (prim_range + 1) )) ) until [[ $(echo "$a < ($prim - 2) && $a > 2" | bc) -eq 1 ]];do a=$(getRandom $(($RANDOM % (prim_range + 1) )) ) done if isWitness $prim $a;then return 1 fi let i++ done return 0 } function isWitness() { prim=$1 a=$2 prim_minus_one=$(echo "$prim - 1" | bc) test=1 local i=${#prim_minus_one} i=$(($i - 1)) while [[ $i -ge 0 ]];do x=$test test=$(echo "$x^2 % $prim" | bc) if [[ $test -eq 1 ]] && [[ $x -ne 1 ]] && [[ $x -ne $prim_minus_one ]];then return 0 fi let i-- done test=$(powmod $a $prim_minus_one $prim) if [[ $test -ne 1 ]];then return 0 else return 1 fi } setBasics() { local range="$1" local try="$2" if [[ -z "$range" ]];then #the length of sqrt(m) for p and q fits to the necessary length of n range=$(echo "sqrt($m)" | bc) range=${#range} fi if [[ -z "$try" ]];then try=1 fi doBasics $range $try #bash's comparison won't work with big numbers until [[ $(echo "$n > $m" | bc) -eq 1 ]];do let try++ if [[ $try -gt $(($range * 10)) ]] || [[ ${#n} -lt $(( ${#m} -2 )) ]];then let range++ try=1 fi doBasics $range $try done } function doBasics() { local range="$1" local try="$2" #two primenumbers p=$(getPrim $range) q=$(getPrim $range) until [[ p -ne q ]];do p=$(getPrim $range) q=$(getPrim $range) done #RSA-Modul n=$(echo "$p*$q" | bc -l) #eulersche phi=$(echo "($p-1)*($q-1)" | bc -l) } #choose e coprime to phi getPublicKey() { local e=$(($RANDOM)) until [[ $(echo "$e < $phi" | bc) -eq 1 ]];do e=$(($RANDOM)) done local i=2 while [[ $(echo "$i < $e" | bc) -eq 1 ]];do if [[ $(echo "$phi % $i" | bc ) -eq 0 ]] && [[ $(echo "$e % $i" | bc) -eq 0 ]];then getPublicKey exit fi let i++ done echo $e } getPrivateKey() { local result=($(extended_euclid $e $phi)) local d=${result[0]} until [[ $d -gt 0 ]];do d=$(echo "$d+$phi" | bc -l) done echo $d } function extended_euclid() { a=$1 b=$2 local x=0 local lastx=1 local y=1 local lasty=0 while [[ $b -ne 0 ]];do local quotient=$(echo "$a / $b" | bc) local temp=$b b=$(echo "$a % $b" | bc) a=$temp temp=$x x=$(echo "$lastx - ($quotient * $x)" | bc) lastx=$temp temp=$y y=$(echo "$lasty - ($quotient * $y)" | bc) lasty=$temp done local result=($lastx $lasty $a) echo "${result[*]}"; return 0 } #a^b%m: Square & Multiply powmod() { local a=$1 local b=$2 local mod=$3 local i=0 local res=1 #b in binary for binary exponentiation b=$(echo "ibase=10;obase=2; $b" | bc) while [[ $i -lt ${#b} ]];do res=$(echo "$res^2 * $a ^ ${b:$i:1} % $mod" | bc) let i++ done echo $res } getRandom() { local range="$1" if [[ -z "$range" ]];then range=$RANDOM fi local r=$((RANDOM % 10)) while [[ $r -eq 0 ]];do r=$((RANDOM % 10)) done local i=1 while [[ $i -lt $range ]];do local temp=$((RANDOM % 10)) r=${r}${temp} let i++ done echo $r } encrypt() { local m="$1" local c=$(powmod $m $e $n) echo "$c" } decrypt() { local c="$1" local m=$(powmod $c $d $n) echo "$m" } export BC_LINE_LENGTH=0 m=91011121314151617181920212223242526272829 old_m=$m setBasics e=$(getPublicKey) echo "Public Key: ($e, $n)" d=$(getPrivateKey) echo "Private Key: ($d, $n)" echo c=$(encrypt "$m") echo "c: $c" m=$(decrypt "$c") echo "m: $m" if [[ $m -ne $old_m ]];then echo "Error: Wrong message decrypted:" >&2 echo "p: $p" >&2 echo "q: $q" >&2 echo "Public Key: ($e, $n)" >&2 echo "Private Key: ($d, $n)" >&2 echo "c: $c" >&2 echo "m: $m" >&2 fi #Ausgabe #onli@Fallout:~$ uni/ts/rsa.sh #p: 783057321236353042573 #q: 444786834379004491147 #Public Key: (2969, 348293587050020677086428785700425092601231) #Private Key: (137252777651911145904238835165856311899289, 348293587050020677086428785700425092601231) # #c: 134886886292723664083288725067434182648518 #m: 91011121314151617181920212223242526272829