by Michael Rennecke
Ich schreibe meine Diplomarbeit mit
. Da bekommt man auch einen schönen Blocksatz hin. Der Blocksatz wird auf dem gesamten Absatz, unter beachtung möglicher Worttrennungen berechnet. Deswegen sieht der Blocksatz besser aus als mit Word. Man kann den Blocksatz noch verbessern, indem man den optischen Randausgleich nutzt. Das funktioniert wie normaler Blocksatz, mit dem unterschied, dass der Grauwert des linken Rand gleich ist. Ein Bindestrich ragt z.B. mehr in Rand hinein als ein m. da ein Bindestrich weniger schwarz enthält als ein m. Für das Auge sieht der linke Rand nun gerade aus. Man muss dafür nur das Package microtype einbinden. Hier ist die Doku dazu.
...
%optischer Randausgleich aktivieren
\usepackage{microtype} % ist auf alten Installation nicht immer vorhanden
% \usepackage[activate]{pdfcprot} % wird nicht mehr weiter entwickelt
...
by Michael Rennecke
Wenn man bei
Bilder einfügt, dann wundert man sich vielleicht, dass sie an einer anderden Stelle sind.
setzt normal die Bilder so, dass man möglichst wenig weiße Fläche hat. Manchmal möchte man erzwingen, dass ein Bild an einer bestimmten Position ist. Dafür gibt es das alte Package here, welches inzwischen bei TeX Live durch float ersetzt wurde.
\usepackage{float} % lädt das Paket zum erzwingen der Grafikposition
%\usepackage{here} auf älteren LaTeX Distributionen
\begin{document}
\begin{figure}[H]
%mit dem großen H wird die Grafikposition auf HERE gesetzt
\centering
\fbox{ %erzeugt einen Rahmen um die Grafik
\includegraphics[angle=0,width=5cm]{Bild.png}
}
\end{figure}
\end{document}
by Michael Rennecke
Ich habe mich heute früh mit meinem thunderbird und icedove herumgeärgert, weil ich Zertifikatfehler von gmx bekommen habe. Ich dachte erst, dass es das pop3-Zertifikat ist. Bis ich auf die Idee gekommen bin, dass es das Zertifikat für den mediacenter ist. Dort habe ich meine Kalender abgelegt.
Nachdem ich nun das Problem erkannt habe, habe ich eine Mail an den webmaster von gmx geschrieben. Die bekommt man mit whois heraus. (In solchen Fragen vertraue ich keiner minderbemittelten Kraft aus einem Callcenter (Ich weiß nicht wie das Personal bei gmx ist)) Für mich war es sehr erfreulich, dass ich sehr zeitnah eine Antwort vom Webmaster bekommen habe. Dieser hat in der Zwischenzeit das Problem behoben bzw. beheben lassen.
Einem Admin können immer einmal Fehler passieren. Ich finde es gut, dass der Fehler schnell behoben wurde und sich der Admin bedankt hat. So muss ich letztendlich sagen, weiter so gmx.
by Michael Rennecke
Ich habe mich die letzten Tage mit der STL herungeärgert. Ich wollte einen Allocator schreiben, welcher mir die STL-Container in ein Shared Memory Segment legt. Ich habe es nicht wirklich hinbekommen. Inzwischen weiß ich, dass es die Leute von boost auch nicht hinbekommen haben. Aus diesem Grund werde ich nun boost benutzen und hoffen, dass die Performance nicht zu schlecht (unter Windows) ist. Das geheimnis ist, dass man die Container nach implementiert und die Implementierung kommt arbeitet korrekt in einem Shared Memory Segment.
by Michael Rennecke
Man möchte manchmal Teile seiner Seite mittels Captchas schützen. Es gibt zahlreiche fertige Varianten, auch für wordpress. Diese haben fast immer den Nachteil, dass sie JavaScript, Flash, oder Sessions benutzen. Persönlich habe ich eine Abneigung gegen JavaScript und Flash. Sessions lassen sich nicht immer nachträglich nutzen und man erzeugt serverseitig etwas Last. Fakt ist, dass ich keine Sessions mag! Das schlimmste an fertigen Captcha-Lösungen ist der zum Teil invalide html-Code. Ich möchte validen xhtml 1.0 strict-Code haben und das Captcha sollte in mein Design passen. Wenn man die ganzen Anforderungen erfüllt haben möchte, so muss man wohl oder übel sein Captcha selbst programmieren.
Wie komme ich zum sicheren Captcha
Wenn ich auf Sessions verzichten möchte, so muss ich die Lösung des Captcha mit auf die Seite schreiben. Das kann man in einen nicht sichtbaren Feld machen. Damit man dieses Feld nicht so einfach auslesen kann, schreibt man einen Hash hinein bzw. man verschlüsselt den Inhalt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| define(KEY, "Ich bin ein Key");
define(IV, "KlyV6gxG3MOPzlfuj8azF6sKKTnsdsiN58i0zjHA0EU=");
function Crypt($plaintext){
$td = mcrypt_module_open('rijndael-256', '', 'ofb', '');
$iv = base64_decode(IV);
$ks = mcrypt_enc_get_key_size($td);
/* Create key */
$key = substr(md5(KEY), 0, $ks);
/* Intialize encryption */
mcrypt_generic_init($td, $key, $iv);
/* Encrypt data */
$encrypted = mcrypt_generic($td, $plaintext);
/* Terminate decryption handle and close module */
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return base64_encode($encrypted);
}
function Decrypt($chiffre){
$td = mcrypt_module_open('rijndael-256', '', 'ofb', '');
$iv = base64_decode(IV);
$ks = mcrypt_enc_get_key_size($td);
/* Create key */
$key = substr(md5(KEY), 0, $ks);
$chiffre = base64_decode($chiffre);
mcrypt_generic_init($td, $key, $iv);
$plaintext = mdecrypt_generic($td, $chiffre);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $plaintext;
}
function draw_captcha_form(){
.....
$time = time() + 60*30;
$captchaSolution = "Test"
echo "\t\n\tBitte Captcha lösen<br/>\n";
// erzeuge ein Captcha
echo "\t\n";
echo "\t" . '
<input name="captvalue" id="captvalue" value="" size="40" tabindex="4" type="text"/>' . "\n";
echo "\t" . '
<input name="captcha" value="'. Crypt($time . "~" . $captchaSolution . "~" . $REMOTE_ADDR) . '" type="hidden"/>' . "\n";
}
function check_post($) {
....
$captcha = $_POST['captvalue'];
list($timeOld, $secret, $addr) = explode('~',Decrypt($_POST['captcha']));
....
if($timeOld <= time()){
echo "Deine Zeit ist abgelaufen";
return;
}
if($addr != $REMOTE_ADDR){
echo "Falsche IP";
return;
}
if($secret != $captcha){
echo "Falsches Captcha";
return;
}
.....
} |
Mit diesen Ideen kann man sich nun sein eigenes Captcha zusammen bauen. Ich generiere z.B. Matheaufgaben.
by Michael Rennecke
Ich habe mir ein neues Captcha-Plugin gebaut. Dieses besteht aus netten Matheaufgaben. Diese gehen immer glatt auf. Ich muss noch etwas an dem Plugin pfeilen. Sagt mir was ihr davon haltet. Die Aufgaben werden via
erzeugt.
Ich habe das Plugin etwas geändert, da Martin meinte es zu knacken…
Gut Martin hat es wieder geschafft, auf die offensichtliche Art. Er ließt meine alt bzw. title-Attribute aus, welche meine Seite barrierefrei machen. Für das parsen hat er sich 3 Bier verdient
by Michael Rennecke
Es werden neue Logos für Ice[weasel | ape | dove] gesucht. Ich habe mir mit Martin, einmal ein Paar gedanken gemacht. Das Ergebinis sieht wie folgt aus

by Michael Rennecke
Ich habe mich heute an mein Proseminar in Analysis erinnert. Ein Thema war eine überall stetige, aber niergendwo diffenzierbare Funktion. Das es eine solche Funktion gibt war lange Zeit unbekannt.
Aus der Diffenzierbarkeit folgt die Stetigkeit. Diese Umkehrung dieser Aussage gibt nicht. Ein Beipiel ist die Betragsfunktion. Diese ist im Nullpunkt nicht diffenzierbar. Der Mathematiker Karl Weierstraß hat im 19. Jahrhundert eine Funktion konstruiert, welche überall stetig, aber an keiner Stelle differenziebar ist.

Das ist nicht die Orginale Funktion von ihm, welche er zuerst vorgestellt hat. Diese Funktion sieht aber aus wie eine Sinuskurve. Die Zacken im Plot entstehen, weil die Summe nicht bis Unendlich läuft. Aus Gründen der Zahlendarstellung im Rechner, habe ich die Summe nur bis 50 laufen lassen.

Seine erste Funktion sah wie folgt aus:

Unter den folgenden Bedingungen:
und
sowie 
by Michael Rennecke
zfs hat den Ruf, dass es unzerstörbar ist. Ab und zu hört man, dass User xy sein zfs kaputt bekommen hat und meint, dass zfs nicht mehr kann als sein altes Dateisystem. Wenn man sich mal ansieht, was der User xy gemacht hat, dann bemerkt der aufmerksame Systemheld, dass man mit derartigen Attacken auch Enterprise Storage-Systeme im Wert von mehreren Millionen kaputt bekommt.
Was kann zfs nicht
- im laufenden Betrieb mehr Plattenausfälle verkraften als die zur Verfügung stehende Redundanz
- im laufenden Betrieb mehr Platten tauschen, als man Redundanz hat
- mit kaputten Platten laufen
Auch wenn es zu den einen oder andern Punkt abweichende Behauptungen gibt, so muss ich hier ausdrücklich sagen, dass ein solches Verhalten im Allgemeinen Fall unmöglich ist. Es kann hingegen sein, dass man aus einem zerstörten zpool noch Daten retten kann. Das funktioniert aber nur mit Glück.
Was kann zfs
Das folgende habe ich auf einer Sun Enterprise E450 und einem StorEdge D1000 ausprobiert. Im StorEdge hatte ich einen bunten Mix aus 36 GB und 18 GB Platten. Das folgende sollte man nicht an einem Produktivsystem ausprobieren! Bei den Testläufen habe ich /dev/random bzw. /dev/zero in eine Datei, auf den betreffenden zpool geschrieben.
- Sämtliche Schweinereien mit den Platten gehen, solange man die Redundanz einhält.
- Die Platten vom Strom trennen oder ein Systemabsturz provozieren. Das zfs überlebt das alles und bleibt konsistent
- Wenn das System herunter gefahren ist, alle Platten des nicht exportierten zpool mischen. Das ärgert das zfs schon sehr,
ich musste meinen zpool exportieren und wieder importieren, damit alles wieder korrekt funktioniert hat
- Aus einen buten Plattenmix ein raidz bzw. ein raidz2 bauen. Das macht aber aus Performancesicht keinen Sinn.
- Im laufenden Betrieb eine Platte wechseln (wenn man Redundanz hat)
Das war eigenlich alles, was ich mit zfs probiert habe. Ich hatte nicht mehr dumme Ideen. zfs verhält sich auf Dateien anderst als auf echten Devices. Was daran liegt, dass Dateien evtl. noch im Cache sind. Jeder, der die Möglichkeit hat, sollte einige Szenarien vorher einmal ausprobieren.
by Michael Rennecke
Es gibt inzwischen KDE Pakte für Open Solaris. Diese werden von Pavel Heimlich betreut. Er hat dafür ein eigenes Repo. Ich nutze nur amarok, welches ich an eine mysql-DB gebunden habe.
Es scheint prinzipell alles zu funktionieren. Ich habe nur den Eindruck, dass alles etwas langsam ist. Das schreibt auch Pavel in seinen Blog. Das liegt an dbus. Mein aktueller Build 142 macht das ganze sicher auch besser…
Der primäre Server ist http://solaris.bionicmutton.org:10000/ Die nimmt keine neuen Verbindungen mehr an, wenn seine Downloadgeschwindigkeit ca. 100kBit/s ist. Ich habe gute Erfahrungen mit den Mirror gemacht: http://pkg.osladil.cz:30000/. Vielleicht kommt das mal in die offizellen Repos mit rein, die sind aber auch nicht gerade schnell….
Es gibt eine neue Versiom im Repo. Aber sie läuft auch noch etwas harklig auf meinen Build 142. Ich hoffe, dass Illumos bals aus den Puschen kommt…