The Role of Study of Programming Languages in the Education of a Programmer, by Daniel P. Friedman (not read yet)
Cryptology ePrint Archive
iPod Diagnostics
Links
stress
Neingeist meint, das wäre ein gutes Tool: stress
stress is not a benchmark. It is a tool used by system administrators to evaluate how well their systems will scale, by kernel programmers to evaluate perceived performance characteristics, and by systems programmers to expose the classes of bugs which only or more frequently manifest themselves when the system is under heavy load.
Golden Rice Links
Links
Professionalism in Programming (oh mein Gott ist C++ grausam)
Al Stevens interviews Alex Stepanov
Coroutines in C
National Academies Press (ganz viele Bücher zum Zusammenkleben…
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf in1.pdf in2.pdf in3.pdf
you get the idea)
Mendel in the Kitchen (noch nicht gelesen)
Pattern Matching in LISP (aus PAIP)
Leechskript
Passend zu dem obigen Proxytestskript hier das passende Leechskript. Es nimmt als Input eine Reihe von URLs, und als erster Parameter eine Datei mit einer Liste von Proxies, und verteilt das Leechen der URLs auf die Proxies. Kommt ein 404, legt es eine leere Datei im Verzeichnis 404/ an, um zu kennzeichnen, das dort nichts zu holen ist. Das Skript selber ist so ein hässliches Bash-chaos, aber sowas habe ich schon lange gebraucht, und ich denke, es geht einigen Leuten so. Zusätzlich kann man auf der Kommandozeile noch weitere Flags angeben, die an wget weitergereicht werden.
#!/bin/sh
PROXYFILE=$1
shift
WGETARGS=$*
if [ -z "$WGETARGS" ]; then
WGETARGS="-nc"
fi
if [ ! -f "$PROXYFILE" ]; then
echo "Usage: ./leech.sh proxyfile &1`
if [ ! $? -eq 0 ]; then
echo "Could not leech $FILE over $proxy"
FILENAME=`basename "$FILE"`
echo "$OUTPUT" | grep 404 >/dev/null && touch "404/$FILENAME"
else
echo "Leeched $FILE over $proxy"
fi
sleep 1;
done) &
START=$((START + PERPROXY))
done
wait
Bitte beachtet das für jedes Proxy in der Proxydatei ein neuer Bashprozess geforkt wird, der selber ein Wget forken wird. Unter den meisten Unixen wirds dann schnell eng (Unix ist ja so wunderbar…).
Und noch ein paar Links
Biocatalysis special report
Nature insight biocatalysis
Nimble Type Inferencer for Common-Lisp 84
How to publish a fanzine (mostly outdated, but still fascinating)
Proxies sortieren
Oft braucht man für eine kleine WWW-Aktion ganz viele Proxies (klar, zum Parallelisieren). Es gibt dazu auch russische Seiten, die Listen von öffentlichen Proxies anbieten. Die muss man aber noch von Hand nach korrekter Funktionsweise überprüfen. Dazu kann man ein kleines Shellscript benutzen, was zwar fork()t wie sau, aber eigentlich ganz gut einzusetzen ist:
#!/bin/sh
PROXIES=""
PROXYCOUNT=0
TESTURL=http://images.slashdot.org/pix.gif
TXT=`wget -q -O- "$TESTURL"`
CKSUM=`echo $TXT | cksum`
while read i; do
PROXY=`echo "$i" | sed -e 's/^[0-9]* *//g'`
PROXY="http://$PROXY/"
PROXIES="${PROXIES} $PROXY"
PROXYCOUNT=$(( PROXYCOUNT + 1 ))
done
if [ $PROXYCOUNT -eq 0 ]; then
echo "Please give a list of proxies on stdin"
exit 1
fi
for proxy in $PROXIES; do
(TXT=`http_proxy="$proxy" wget --timeout=10 -q -O- "$TESTURL"`
if [ $? -eq 0 ]; then
CKSUM2=`echo $TXT | cksum`
if [ "$CKSUM2" = "$CKSUM" ]; then
echo $proxy
fi
fi) &
done
wait
Dann einfach die Proxyliste von der obengenannten Seite kopieren, und in das Skript füttern über stdin. Rauskommt eine korrekt formattierte Liste von funktionnierenden Proxies. Wie immer gilt: Careful with that axe, Eugene!
Heute abend Saugnapf
Heute abend sendet Neingeist auf 104.8 Mhz oder querfunk.de die 4te Folge von Saugnapf, mit einer MOD-Spezialfolge. Also, von 23:00-24:00 ist heute abend Saugnapf angesagt!
Jetzt gibt es auch ein Torrent.
Links für 27.02.2005
Ein Artikel über die Gay-Marriage Folge der Simpsons
Out Hud, krass groovige Gruppe
Del.icio.us fuer Papers
Lisp HTML Parser
Cooler Podcast
Geile Basler Rockband, über oben genannten Podcast gefunden
Open Proxylist, für den anonymitätsbewussten Hacker
poly1305 MAC von djb
DJB hat vor einiger Zeit ein MAC-Verfahren namens Poly1305 veröffentlicht, das auf AES basiert. Portiert wurde es auf die gängigsten heutigen Platform (eigentlich nicht portiert, sondern optimiert, eine portable Version gibt es auch). Interessant sind folgende Features:
- Bewiesene Sicherheit, wenn die unterliegende Kryptierungsfunktion (in dem Fall, lässt sich aber austauschen). Den Beweis habe ich mir nicht angeguckt, solche Sachen verstehe ich meistens kaum, aber schön zu wissen, das DJB sowas sagt.
- Schnell (auch ein nettes Feature, je nach Anwendung jedoch nicht lebensnotwendig)
- Wenn schon schnell, dann auch schnell für kleine Messages. Das war mir böse aufgestossen als ich im Sommer eine kryptierende Ethernet-Bridge gebaut habe. Für “grosse” Ethernetframes war alles im grünen, wenn ich aber mit 48 Bytes Frames gefloodet habe, ging das MAC Verfahren so in die Knie, dass ich mich ziemlich anstrengen musste, um die garantierte Geschwindigkeit noch zu erreichen. Am Ende und mit ein bisschen Drücken am Ethernet-Treiber ging das dann noch gerade so.
In einem kleinen Text beschreibt DJB, wie ein Kryptoverfahren zu Benchmarken ist, und was oft gemacht wird, und die Zahlen zu verschönern. Dazu gehört:
- Die Funktion mit nur einem Key, einem Nonce und einer Nachricht zu testen. Es gibt Anwendungsfälle, wo viele Keys und Nachrichten gleichzeitig eingesetzt werden (z.B. ein bei einem VPN-Server). Also mit vielen Keys und Nachrichten testen, und auch fleissig neu initialisieren zwischendurch.
- Alle wichtigen Daten vorrechnen, so dass diese im L1 Cache sind. Das ist je nach Anwendung eben auch nicht immer der Fall.
- Die Message hat eine sinnvolle Länge, und ist auch schön aligned. Wie immer, das gilt auch nicht, also Blöcke ein bisschen randomisiert ablegen, usw…
- Die Funktion auf sehr langen Messages zu testen. Sinnvoller ist, die Länge der Nachrichten zu variieren.
- Nur eine gute CPU als Benchmark zu nehmen. Das Verfahren sollte man auf möglichst vielen CPUs einsetzen. Code, der auf einem PIII performt, kann auf einem G4 total abkacken.
Ich muss zugeben, dass ich die beiden ersten Punkte nicht wirklich berücksichtigt habe. Das war aber in dem Fall einer Ethernetbridge auch nicht wirklich notwendig, puh 🙂
Update: Danke Fefe für den Link 🙂