sebadorn sebadorn Sat, 25 Nov 2017 04:59:49 +0100 Android file transfer over MTP is a nightmare Fri, 02 Sep 2016 23:00:00 +0200 Seba Informatik <p><strong>Update, 30.09.2017:</strong> After trying it again today, I found none of the problems listed below anymore. It's fast and painless. So that's good!</p> <hr /> <p>It was bad before, but after the upgrade to Ubuntu 16.04 – which may or may not be related, it probably is – it went from bad to downright painful. Connecting device and PC works fine. What does not is …</p> <ul> <li>It is slow. Opening the SD card directory with my music takes several seconds.</li> <li>After deleting files the amount of available space is not updated. I free space for new files but get a warning telling me there isn't enough free space. At least I have the option to try and copy the files anyway, ignoring the warning.</li> <li><strong>The new problem:</strong> After just one transfer, I cannot access the device per MTP anymore. No content is listed for the music directory anymore. Seemingly trying to load the contents it ultimately fails to do so. Unplugging does not help. Restarting the PC does not help. Restarting the device does not help. Using a different PC with macOS does not help. What helps is … using the Android file manager and deleting a file. Something is seriously broken here.</li> </ul> <p>In early Android versions the device was mounted as USB mass storage. Those were the good, old days. <a href="">At least they had understandable reasons for replacing it.</a></p> <p class="illu"><img src="//" alt="Nautilus FTP" /></p> <p><strong>An alternative to using MTP is FTP.</strong> I used the app <a href="">FTPServer</a> to start an FTP server on my device while connected to my home WiFi. In the FTPServer settings I chose <code>wlan0</code> as standard interface and pointed the server root to the directory <code>/mnt/extSdCard</code>. Now I can use FileZilla or Nautilus (see image above) to connect to the server from my PC. The transfer speed is of course a little limited, but the file transfer itself? – works just fine.</p> <p>While I'm happy to have found a good alternative to the nightmare that is MTP, I find this whole situation quite ridiculous. At some point I'd like to upgrade from my Galaxy S3. While I'm not considering iOS or Windows Phone, I'm also disappointed of Android. Hopefully the <a href="">Ubuntu phones</a> take of.</p> Improvements after Mozilla’s Observatory results Sat, 27 Aug 2016 16:15:00 +0200 Seba Informatik <p>Mozilla made their <a href="">Observatory service</a> public, which lets you check the security of sites. A first run resulted in an <code>F</code> for <code></code>. Following some of the sug&shy;gestions I could improve that to a <code>B-</code>.</p> <h3>1. Redirect HTTP to HTTPS</h3> <p>Thanks to <a href="">Let’s Encrypt</a> I already offered HTTPS, but I didn't enforce it. Now visitors to <code></code> are redirected to <code>http<strong>s</strong>://</code>. I did so by adding the following rule to my <code>.htaccess</code> file:</p> <pre class="brush: plain">&lt;IfModule mod_rewrite.c&gt; RewriteEngine On RewriteCond %{HTTP_HOST} ^sebadorn\.de [NC] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$$1 [R,L] &lt;/IfModule&gt;</pre> <h3>2. Add some more headers</h3> <pre class="brush: plain">&lt;IfModule mod_headers.c&gt; Header always edit Set-Cookie (.*) "$1; HttpOnly; Secure" Header set Content-Security-Policy "frame-ancestors 'self'" Header set X-Content-Type-Options "nosniff" Header set X-Frame-Options "SAMEORIGIN" Header set X-XSS-Protection "1; mode=block" &lt;/IfModule&gt;</pre> <dl> <dt>Set-Cookie</dt> <dd>Cookies about to be set received additional directives: <em>HttpOnly</em> and <em>Secure</em>. <em>HttpOnly</em> disallows cookies being read by JavaScript and <em>Secure</em> enforces an HTTPS connection. (<a href="">Source</a>)</dd> <dt>X-Content-Type-Options</dt> <dd>Setting this header to <em>nosniff</em> tells browsers not to try and guess the MIME type of contents, which potentially prevents XSS attacks. (<a href="">Source</a>)</dd> <dt>X-Frame-Options</dt> <dd>Setting this header to <em>SAMEORIGIN</em> or <em>DENY</em> prevents other pages from displaying the site in a frame which prevents clickjacking. (<a href="">Source</a>)</dd> <dt>X-XSS-Protection</dt> <dd>Setting this header to <em>1; mode=block</em> tells browsers to try and detect XSS attacks and in this case stop loading the page. (<a href="">Source</a>)</dd> </dl> Remove intro/outro from an MP3 without re-encoding Thu, 03 Dec 2015 21:44:41 +0100 Seba Informatik Musik <p>I have this podcast I listen to repeatedly. But most episodes have an intro and outro part before the actual episode, which gets quite annoying. One possibility is, of course, to just use an audio editor like Audacity, cut the unwanted parts, and save the file. But this would result in the MP3 being re-encoded and losing in quality. This shouldn't be necessary since I only want to cut off some data, right?</p> <p>The tool for the job is <code>mp3splt</code>. I wrote this little bash script:</p> <pre class="brush: bash">#!/usr/bin/env bash F_IN=$1 F_OUT=${F_IN%.mp3} START=$2 END=EOF-$3 OUT_DIR=./nointro # Split at "-". FILE_SPLIT=(${F_IN//-/ }) # Remove "_" and " " characters. TRACK=${FILE_SPLIT[0]//_/} TRACK=${TRACK// /} mp3splt -f -d "$OUT_DIR" "$F_IN" "$START" "$END" -o "$F_OUT" eyeD3 --track=$TRACK "$OUT_DIR/$F_IN"</pre> <p>Example: <code>./ 26-FacelessOldWoman.mp3 1.18 1.15.5</code></p> <p>First, the track number will be extracted from the file name. In my case, the number is always at the beginning and separated by a minus from the title. So we split the string and remove some unwanted characters (whitespace, underscore).</p> <p>In the example, the first 1min 18sec will be removed and the last 1min 15.5sec. The resulting MP3 will be saved with the same name in the directory set in <code>OUT_DIR</code>.</p> <p>Most id3 tags will be kept – including the embedded cover –, but the track number will be overwritten by mp3splt. That is why I extracted the track number from the file name before. Now I can set it again with <code>eyeD3</code>.</p> <p>Done.</p> Stackless BVH traversal Fri, 13 Mar 2015 23:42:00 +0100 Seba Informatik <p class="abstract">Im Path Tracing verwendet man spezielle Datenstrukturen für die Geometrie, um diese schneller gegen die Strahlen testen zu können. Eine der üblichsten ist dabei die Bounding Volume Hierarchy (BVH) – ein Binärbaum, der die Szene immer weiter unterteilt. Einen solchen Baum würde man normalerweise rekursiv durchlaufen. Auf der GPU mit OpenCL steht jedoch keine Rekursion zur Verfügung.</p> <p class="abstract">Was man daher macht, ist, selbst einen kleinen Stack zu verwalten, in dem man sich den nächsten zu besuchenden Knoten merkt. Dieser Stack benötigt jedoch zusätzlichen privaten Speicher, welcher knapp bemessen ist, und dadurch die Anwendung ausbremst. Wünschens&shy;wert ist daher ein Verfahren, das ohne Stack auskommt.</p> <h3>Aufbau und Ablauf</h3> <p class="illu"><img src="//" alt="BVH-Baum." style="width: 600px; height: 400px" /></p> <ul> <li>Jeder Knoten hat entweder genau zwei oder keine Kindknoten.</li> <li>Jeder Knoten hat zudem ein Attribut <em>nextNode</em>. <ul> <li>Für den linken Kindknoten zeigt <em>nextNode</em> auf den rechten Geschwisterknoten.</li> <li>Für den rechten Kindknoten zeigt <em>nextNode</em> auf den Elternknoten.</li> </ul> </li> </ul> <!--more--> <p>Vom Wurzelknoten aus wird immer zuerst dem linken Kindknoten gefolgt. Falls der Strahl die Bounding Box nicht trifft, es sich um einen Blatt&shy;knoten handelt oder zuletzt ein rechter Knoten besucht wurde, dann wird als nächstes der Knoten besucht, auf den <em>nextNode</em> zeigt. Ist man wieder beim Wurzel&shy;knoten angelangt, beendet der Algorithmus.</p> <p><strong>Nachteil:</strong> Knoten werden auf dem Weg nach oben erneut besucht. Ein unnötiger Schritt, der nur zusätzliche Zeit in Anspruch nimmt.</p> <h3>Optimierung</h3> <p class="illu"><img src="//" alt="BVH – optimierter nextNode" style="width: 600px; height: 400px;" /></p> <p>Die Optimierung ist denkbar einfach. Dafür muss jediglich der <em>nextNode</em> der rechten Knoten angepasst werden. Anstatt auf den Elternknoten, können rechte Kindknoten direkt auf den nächsten zu testenden Knoten zeigen.</p> <p>Dafür setzt man zunächst <em>nextNode</em> immer weiter auf einen höheren Elternknoten, bis es sich bei diesem um einen linken Kindknoten handelt. Danach setzt man <em>nextNode</em> auf den rechten Geschwister&shy;knoten. Auf diese Weise werden alle bereits besuchten Eltern&shy;knoten über&shy;sprungen. Existiert kein rechter Kindknoten, ist man beim Wurzel&shy;knoten angelangt und zeigt auf diesen, was den Endpunkt markiert.</p> <p>Den so erzeugten Baum kann man dann folgendermaßen abwandern:</p> <pre class="brush: cpp">int index = 0; do { bvhNode node = scene->bvh[index]; float tNear = 0.0f; float tFar = INFINITY; bool isNodeHit = ( intersectBox( ray, node, &tNear, &tFar ) && tFar > 0.00001f && ray->t > tNear ); // In case of no hit: Go right or up. index = node.nextNode; if( !isNodeHit ) { continue; } // Not a leaf node, progress further down to the left. if( !isLeaf( node ) ) { index = node.leftChild; } // Node is leaf node. else { intersectFaces( scene, ray, node, tNear, tFar ); } } while( index > 0 );</pre> <h3>Anmerkung: Links/rechts</h3> <p>Welcher der beiden Kindknoten als „linker“ und welcher als „rechter“ gesetzt wird, ist egal. Ich setze als linken Kindknoten denjenigen mit mehr Ober&shy;fläche. Mehr Ober&shy;fläche bedeutet, dass ihn potentiell mehr Strahlen treffen und man so eventuell ein früheres Ende erreicht. Tatsächlich hat diese Vorsortierung die Performance gering&shy;fügig verbessert.</p> <h3>Resultat</h3> <p>Mein Algorithmus kommt wie gewünscht ohne Stack aus. Weiterer Speicher wird nur für eine Variable <em>index</em>, sowie ein neues Knoten-Attribut <em>nextNode</em> benötigt. Beim Abwandern des Baumes wird jeder Knoten höchstens ein einziges Mal besucht.</p> <p>Zumindest in meiner Implemen&shy;tierung <a href="#fn-bvh-impl">[1]</a> verbesserten sich die Render-Zeiten in allen meinen Test-Szenen. Dies kann aber auch an einer schlechten Implemen&shy;tierung des Stack-basierten Algorithmus liegen, mit dem ver&shy;glichen wurde. Ich habe beide Verfahren im Projekt belassen und versuche sie von Zeit zu Zeit weiter zu optimieren und erneut zu vergleichen.</p> <hr /> <p class="annotation" id="fn-bvh-impl">[1] <a href="">Vorbereitung der BVH-Datenstruktur</a> und <a href="">BVH traversal</a>.</p> Standalone-Anwendungen mit node-webkit Sun, 19 Oct 2014 16:28:00 +0200 Seba Informatik <p class="illu"><img src="//" style="width: 602px; height: 425px;" alt="node-webkit demo window" /></p> <p>Gestern habe ich ein wenig in <a href="">node-webkit</a> reingeschnuppert. Damit sollen sich ganz einfach Desktop-Anwendungen auf Basis von HTML, JavaScript und Node.js erstellen lassen. Die erstellte Anwendung lässt sich dann relativ einfach für verschiedene Betriebs&shy;systeme verpacken. Für nicht allzu rechen-intensive Spiele scheint mir das recht interessant. Tatsächlich verwendet auch das kürzlich erschiene <a href="">A Wizard's Lizard</a> node-webkit <a class="fn" href="#fn-lizard">[1]</a>.</p> <p>Für eine kleine Demo habe ich das <a href="">Beispiel von three.js</a> genommen und als Anwendung verpackt. Das HTML und JavaScript lasse ich hier mal aus. Mein <code>package.json</code> für ein Fenster ohne Toolbar sieht wie folgt aus:</p> <pre class="brush: javascript">{ "main": "index.html", "name": "nw-demo", "window": { "frame": true, "height": 600, "kiosk": false, "toolbar": false, "width": 900 } }</pre> <!--more--> <p>Den Inhalt des Projekt-Verzeichnisses verpackt man als nächstes als ZIP-Archiv:</p> <pre class="brush: bash">zip -r demo.nw *</pre> <p>Diese Datei lässt sich mit <code>nw demo.nw</code> ausführen, benötigt aber eben weiterhin node-webkit auf dem System. Im nächsten Schritt wird node-webkit daher in das Archiv integriert:</p> <pre class="brush: bash">cat ~/node-webkit-v0.10.5/nw demo.nw > demo && chmod +x demo</pre> <p>Versucht man nun <code>./demo</code> auszuführen, gibt es eine Fehlermeldung:</p> <blockquote class="code error"> [13445:1019/] Check failed: base::i18n::InitializeICU(). </blockquote> <p>Im selben Verzeichnis wie die Standalone-Anwendung müssen auch die Dateien <strong>nw.pak</strong> und <strong>icudtl.dat</strong> liegen. Beide Dateien finden sich im selben Verzeichnis wie <code>nw</code>, hier also <code>~/node-webkit-v0.10.5/</code>. Einfach herüberkopieren und die Anwendung lässt sich starten.</p> <hr /> <p>Meine kleine Demo habe ich <a href="">auf GitHub hochgeladen</a>. Darin befindet sich auch ein Build-Skript für Linux, das sich um alles kümmert. Es muss nur der Pfad zur node-webkit-Installation angepasst werden.</p> <hr /> <p class="annotation" id="fn-lizard">[1] <a href=""></a></p> Sublime Text 3 portable unter Linux Fri, 05 Sep 2014 15:24:00 +0200 Seba Informatik <p><a href="">Sublime Text</a> ist derzeit der Editor meiner Wahl, zusammen mit einigen Zusatz-Paketen. Installiert habe ich ihn über <a href="">das Web Upd8 PPA</a>. Das ist allerdings hinderlich, wenn man ihn auch als normalen Text-Editor zum spontanen Bearbeiten verwenden möchte. In dem Fall springt immer das zuletzt geöffnete Projekt mit auf. Eine Extra-Installation wäre hier praktisch.</p> <ol> <li>Lade <a href="">Sublime Text 3</a> als tarball herunter.</li> <li>Entpacke das Archiv nach <code>~/.st3_portable</code>. (Name egal.)</li> <li>Erstelle in dem Verzeichnis einen Ordner namens <code>Data</code>. (Wichtig!)</li> </ol> <p>Das reicht schon, um auf eine portable Version umzustellen. Für die Verwendung als Gelegenheits-Text-Editor steht aber noch ein wenig mehr an. So soll, wenn eine Datei geöffnet wird, auch das zugehörige Verzeichnis in der Sidebar angezeigt werden. Dafür erstellt man sich ein kleines Bash-Skript <code>~/.st3_portable/</code>:</p> <pre class="brush:bash">#!/bin/bash cd ~/.st3_portable/ FOLDER=$(dirname "$1") ./sublime_text "$FOLDER" "$1"</pre> <p>Das Argument <code>$1</code> ist die zu öffnende Datei. Im letzten Schritt muss nun noch eine <code>.desktop</code>-Datei angelegt werden. Erstelle eine Datei <code>~/.local/share/applications/st3-portable.desktop</code> mit dem Inhalt:</p> <pre class="brush:plain">[Desktop Entry] Version=1.0 Type=Application Name=Sublime Text 3 (portable) Comment=Sophisticated text editor for code, markup and prose Exec=/home/seba/.st3_portable/ %F Terminal=false MimeType=text/plain; Icon=sublime-text Categories=TextEditor;Development;Utility; StartupNotify=true X-Desktop-File-Install-Version=0.21</pre> <p>Anstatt <code>/home/seba/</code> sollte da natürlich der eigene Benutzername stehen. Relative Pfadangaben bzw. <code>~/</code> funktionieren hier nicht. Ist die Datei gespeichert, sollten sich Dateien nun per <em>Rechtsklick › Öffnen mit › Sublime Text 3 (portable)</em> öffnen lassen.</p> Mit dem Upgrade zu Ubuntu 14.04 hätte ich noch warten sollen Sat, 17 May 2014 13:10:00 +0200 Seba Informatik <p>Da meine Masterarbeit abgeschlossen ist, habe ich gestern das Upgrade von Ubuntu 13.10 auf 14.04 gewagt. Zwar gab es keine kritischen Probleme, aber doch einige Ärgernisse – wovon sich die meisten mit Recherche und Herumprobieren beheben ließen.</p> <h3>Konflikt zwischen Wine und NVIDIA-OpenCL</h3> <p>Es macht keinen Sinn, aber scheinbar hat jemand in den Paket-Abhängigkeiten gepfuscht oder sonst irgendetwas. Wollte man <code>wine</code> installieren, musste <code>nvidia-libopencl1-331</code> deinstalliert werden und vice versa. Ich brauche beide Pakete. Wie sich herausstellte, lässt sich Wine 1.7 aber installieren.</p> <p>Dafür fügt man das <a href="">Wine Team PPA</a> zu seinen Softwarequellen hinzu und kann dann <code>wine1.7</code> installieren. Daraufhin lässt sich auch <code>playonlinux</code> installieren.</p> <p>Sollte <code>/usr/lib/</code> dann immer noch fehlen, muss wahrscheinlich nur ein Symlink nachgetragen werden:</p> <pre class="brush: bash">sudo ln -s /usr/lib/i386-linux-gnu/ /usr/lib/</pre> <h3>Fallout 3 läuft nicht mehr unter Wine</h3> <p><del>Ein leider noch ungelöstes Problem.</del> Vor dem Upgrade lief Fallout 3 unter Wine ziemlich gut – nicht perfekt, aber ziemlich gut. Jetzt öffnet sich nur noch ein inhaltsloses Fenster. Eine Neu-Installation hat nicht geholfen. Mit Debugging bin ich auch noch nicht weit gekommen, da in den Logs kein eindeutiger Fehler zu finden ist. Wer Tipps hat, ich wäre dankbar. Vielleicht tauchen ja demnächst Leidensgenossen auf <a href=""></a> auf.</p> <p><strong>[Update 2014-05-18]:</strong> Wine 1.7.19 ist erschienen und behebt genau dieses Problem (<a href="">siehe Changelog</a>).</p> <!--more--> <h3>In Firefox keine YouTube-HTML5-Videos über 360p</h3> <p>Grund ist mangelnde Unterstützung des H.264-Codecs. Das ist jedoch nichts Neues und bisher gab es <a href="">dafür einen Workaround mit GStreamer</a>. Der funktioniert nun nicht mehr, da die benötigten Pakete durch neuere ersetzt wurden.</p> <p>Eine Möglichkeit ist sicherlich, ein PPA zu finden, dass die alte Version zur Verfügung stellt, aber ich habe ehrlich gesagt genug davon, andauernd andere PPAs einbinden zu müssen. Was YouTube anbelangt steige ich wieder auf Flash um. Mit Firefox 30 könnte sich das wieder ändern, wenn dann hoffentlich GStreamer 1.0 unterstützt wird.</p> <h3>GNOME-Terminal ohne Transparenz</h3> <p>Wie aus <a href="">dieser Antwort eines GNOME-Entwicklers</a> hervorgeht, wurde Hintergrund-Transparenz im Rahmen größerer Code-Aufräumarbeiten (vorerst?) entfernt. Ich will aber transparente Terminals, also bin ich auf Terminator umgestiegen.</p> <pre class="brush: bash">sudo apt-get install terminator</pre> <h3>Einige GNOME Shell-Erweiterungen sind nicht aktuell</h3> <p class="illu"><img style="width: 687px; height: 623px;" src="//" alt="Installierte GNOME Shell-Erweiterungen." /></p> <p>Ich mag die GNOME Shell. Aber nur durch einige Erweiterungen wird sie wirklich gut, ansonsten wäre sie arg unattraktiv für mich. Die eine oder andere Erweiterung wurde von ihrem Autor leider noch nicht aktualisiert, was zum Glück kein allzu großes Problem darstellt. Diese Erweiterungen sind in JavaScript geschrieben und liegen einfach in einem HOME-Unterverzeichnis (<code>~/.local/share/gnome-shell/extensions/</code>). Die folgenden Anpassungen waren ausreichend für <a href="">Nvidia GPU Temperature Indicator </a> und <a href="">Sensors</a>.</p> <ul> <li> In <code>metadata.json</code> die aktuelle Version eintragen: <pre class="brush: js">"shell-version": ["3.10"],</pre> </li> <li> Anstatt <code>PanelMenu.SystemStatusButton</code> verwendet man <code>PanelMenu.Button</code>. <pre class="brush: js">, 0.0, 'sensorsMenu', false);</pre> </li> <li> Aus der Funktion <code>.addActor()</code> wurde <code>.actor.add()</code>. </li> </ul> <h3>Symbole im Cairo-Dock verschwinden</h3> <p>Zusätzlich zur GNOME Shell habe ich noch am Bildschirmrand ein Cairo-Dock für die offenen Anwendungen. Leider waren viele Symbole plötzlich nicht mehr zu sehen. Die Lösung war erfreulich unkompliziert. Cairo-Dock muss im OpenGL-Modus gestartet werden:</p> <pre class="brush: bash">cairo-dock -o</pre> Bilder aus der Masterthesis: Physik-basiertes Rendering Thu, 10 Apr 2014 02:59:00 +0200 Seba Informatik Studentendasein <p class="illu"><img style="width: 800px; height: 600px;" src="//" alt="Modell: Eichhörnchen" /></p> <p>Das große Eichhörnchen ist aus Glas (Brechungsindex 1,5). Die dunklen Stellen – z.B. an der Schnauze – sollten nicht dunkel sein, aber der Pfad hat hier seine maximale Länge erreicht, weshalb keine Licht- und somit Farbinformationen gewonnen werden konnten. Die ganzen Erklärungen, was ich in diesem Projekt überhaupt gemacht habe, kommen irgendwann in einem anderen Blogeintrag.</p> <!--more--> <p class="illu"><img style="width: 800px; height: 600px;" src="//" alt="Modell: Eichhörnchen" /></p> <p>Gleiche Szene wie eben, nur wurde als Licht ein eher dunkles, warmes Orange (CIE A) gewählt. Das kleine Eichhörnchen wurde zudem zur weißen Lichtquelle umdefiniert.</p> <p class="illu"><img style="width: 800px; height: 600px;" src="//" alt="Modell: Icosphere" /></p> <p>Ein Ikosaeder in der Mitte und die Wände links und rechts davon spiegeln. Allerdings ist die Spiegelung nicht perfekt, sondern leicht matt gewählt, weshalb das Bild mit zunehmender Spiegelungsanzahl verschwimmt. Die schwarze Wand am Schluss gibt es nicht wirklich, hier haben die Pfade nur wieder ihr Maximum erreicht.</p> <p class="illu"><img style="width: 800px; height: 600px;" src="//" alt="Modell: Icosphere" /></p> <p>Die weißen Linien zeichnen die Bounding Boxen ein. Als Datenstruktur wurde eine <em>Bounding Volume Hierarchy</em> verwendet – die Dreiecke wurden in kleine Gruppen eingeteilt.</p> <p class="illu"><img style="width: 800px; height: 600px;" src="//" alt="Modell: Blenders Suzanne" /></p> <p>Matter, grüner Boden. Der Affenkopf ist das Suzanne-Modell von <a href="">Blender</a>. Hier ist sehr schön Color Bleeding zu sehen – die Farbe des grünen Bodens strahlt auf die Objekte ab.</p> <p class="illu"><img style="width: 800px; height: 600px;" src="//" alt="Modell: Applejack" /></p> <p>Das <a href="">Applejack-Modell von KP-ShadowSquirrel</a>. Die Farben und Material-Eigenschaften habe allerdings ich verbockt. Die richtigen Farben zu finden ist recht schwer, wenn man sie nicht einfach per Color Picker und Schieberegler zusammenklicken kann. Da mein Renderer mit Wellenlängen und Intensitäten zur Farbrepräsentation arbeitet, war viel Ausprobieren und Herantasten nötig.</p> <p class="illu"><img style="width: 800px; height: 600px;" src="//" alt="Modell: Applejack" /></p> <p>Noch einmal mit anderer Beleuchtung. Alle Bilder wurden für circa 2&nbsp;Minuten bei 10&nbsp;FPS auf der Grafikkarte gerendert.</p> Der kleine Kampf CyanogenMod auf dem Galaxy S1 zu installieren Fri, 16 Aug 2013 19:17:00 +0200 Seba Informatik <p class="illu"><img style="width: 600px; height: 348px;" src="//" alt="CyanogenMod wird auf dem Galaxy S1 installiert" /></p> <p>Um das Ende vorwegzunehmen: Die Installation selbst hat reibungslos geklappt und auf meinem alten Samsung Galaxy S1 läuft nun super-flüssig CyanogenMod 10.1 (Android 4.2.2). Auf den Schritten dahin bin ich nur unterwegs ein wenig angeeckt.</p> <p>Ich folgte dabei (so gut es ging) der <a href="">offiziellen Anleitung</a>.</p> <h3>Heimdall für 64-Bit-Linux funktioniert nicht mit 64-Bit-Linux</h3> <p>Heimdall wird benötigt, um eine Recovery-Datei auf das Smartphone zu schieben, während es sich im <em>Download Mode</em> befindet. Heimdall gibt es für Windows, Linux und Mac. Nur funktioniert die 64-Bit-Linux-Version scheinbar nicht bei jedem, worauf in der Anleitung aber auch hingewiesen wird. Die 32-Bit-Version erfüllt aber ihren Zweck. Von daher war das nicht wirklich ein Problem.</p> <!--more--> <h3>Endlose Boot-Schleife</h3> <p>Nun sollte ich also in den <em>ClockworkMod Recovery Mode</em> booten, indem ich zum Einschalten <strong>Volume up + Home + Power</strong> drücke. Dies machte ich, aber das Gerät kam nicht über den Boot-Begrüßungs-Screen (der mit dem Samsung-Logo) hinweg. Ab und zu flackerte dieser mal kurz, ansonsten ging es aber nicht mehr weiter. Ich probierte es mehrmals, manchmal konnte ich es wieder über den Power-Knopf ausschalten, manchmal entfernte ich einfach den Akku.</p> <p>Ein kurzes <a href="">YouTube-Erklär-Video</a> brachte mich schließlich auf den Trichter, dass mein <strong>Timing</strong> schlecht war. Man darf die Tastenkombination nur so lange drücken, bis das Samsung-Logo erscheint. Entweder habe ich vorher immer zu lange oder zu kurz gehalten, aber diesmal hat es geklappt.</p> <h3>Wie bekomme ich das Image nach /sdcard?</h3> <p>Nun musste also das CyanogenMod-ZIP auf den internen Speicher verfrachtet werden. Die Anleitung empfiehlt dafür <strong>ADB</strong> – ich hingegen rate davon ab, das schont Nerven. Meine aktuelle ADB-Version hat das Smartphone immer als offline aufgeführt und entsprechend konnte ich auch nicht damit interagieren. Ich habe verschiedene USB-Ports ausprobiet, ein anderes Kabel genommen, das Smartphone neugestartet … nope, no dice!</p> <p>Daraufhin hatte ich über das ClockwordMod Recovery-Menü das Gerät als <strong>Mass Storage</strong> gemountet. Dadurch konnte ich über Ubuntu darauf zugreifen und die Datei einfach hinüberkopieren … oder auch nicht. Der Kopiervorgang hat sich jedes Mal kurz vor Ende aufgehangen und die Datei hat es nie auf das Gerät geschafft.</p> <p>Schließlich habe ich meinen Laptop gepackt und das darauf noch installierte, seit Jahren nicht mehr gebootete Vista gestartet. Smartphone angeschlossen und es wurde als Wechseldatenträger erkannt – gut! USB-Stift mit dem ZIP eingesteckt und der Explorer hängt sich auf – schlecht. Abgemeldet, neu angemeldet. Diesmal habe ich zuerst das ZIP hinüberkopiert und dann das Smartphone angeschlossen. Erfolg! Das ZIP war auf dem Gerät!</p> <blockquote> <p><strong>Vorschlag:</strong> Bevor ihr auch nur mit dem ersten Schritt der Anleitung beginnt, ladet das benötigte ZIP herunter und übertragt es ganz normal auf euer Smartphone. (Den internen Speicher, nicht auf eine externe Karte!) Dann müsst ihr weder mit ADB herumhantieren, noch genervt einen Alternativ-Weg suchen.</p> </blockquote> <p>Von da an hat es geklappt. Und ja, der nicht zu leugnende, kleine Linux-Fanboy in mir ist ein wenig angefressen wegen der benötigten Windows-Hilfe.</p> <h3>Wie bekomme ich den Play Store da drauf?</h3> <p>Okay, <a href="">hier gibt es also ein ZIP zum Download</a>. Aber sind Apps nicht normalerweise APK-Dateien? Was soll also mit dem ZIP … oooh.</p> <p>Das Gerät wieder mit <strong>Volume Up + Home + Power</strong> einschalten und diesmal anstatt dem CyanogenMod-ZIP das Gapps-ZIP installieren.</p> <hr /> <p class="illu"><img style="width: 600px; height: 500px;" src="//" alt="S1 auf dem CyanogenMod läuft" /></p> <p>Unterm Strich ist also nichts Tragisches passiert. Es war nur teils anstrengend und als ich im Boot-Loop steckte, hatte ich schon kurzzeitig das Schlimmste befürchtet.</p> Opera –› Firefox Wed, 17 Jul 2013 20:20:00 +0200 Seba Informatik <p>Opera 15 ist erschienen (zumindest für Windows und Mac) und bringt den großen Engine-Sprung von Presto zu Blink mit sich. Eine nachvollziehbare und sinnvolle Umstellung. Allerdings erscheint mir die Veröffentlichung überstürzt und Opera 15 ein halbgares Produkt. Wozu gibt es denn die <a href="">drei Release-Kanäle</a> <em>Opera (Stable)</em>, <em>Next</em> und <em>Developer</em>?</p> <p>Opera 15 hat keine Bookmarks, herrjenocheins! Stattdessen soll dafür das Speed Dial ausreichen, mit dem sich zwar auch Seiten speichern, gruppieren und suchen lassen, aber das eben keine einfache Auflistung bietet. Bin ich ein „Power User“-Randfall, nur weil ich 100+ Bookmarks habe?</p> <p class="illu"><img style="width: 600px; height: 369px;" src="//" alt="Opera 15: Speeddial" /></p> <p>Das generelle Feedback war auch entsprechend negativ und Opera hat verlauten lassen, dass <a href="">ein paar Prioritäten umverlagert werden</a>. Dann fehlen aber immer noch die Site Preferences. Vermutlich fehlt noch mehr, aber für mich ist der Deal hier schon geplatzt. Nunja, ganz abgesehen davon gibt es ohnehin noch keine Linux-Version.</p> <p>Der neue Blink-Opera wird wohl frühestens in einem Jahr auf einen vernünftigen Stand kommen – vorausgesetzt, er soll überhaupt die Funktionalität der 12er-Version wieder erreichen. Wenn ein Unternehmen ankündigt, es wolle sein Produkt massentauglicher gestalten, überkommt mich ein ungutes Gefühl.</p> <p>Also könnte ich entweder bei Opera 12 bleiben, der noch eine Weile sicherheitstechnisch gepflegt werden wird, oder ich gewöhne mich schon mal um. Seit einiger Zeit mache ich auch die Erfahrung, dass Opera 12 von Firefox und Chrome – gerade was JavaScript-Geschwindigkeit betrifft – abgehängt wird und die eine oder andere Seite ein Problem mit Opera 12 hat, wie z.B. YouTube oder</p> <p>Jetzt bin ich also bei Firefox und versuche mir mit Addons alles so herzurichten, dass es mir an Nichts fehle. Warum Firefox und nicht Chrome? Firefox lässt sich etwas besser bzw. mehr konfigurieren und Mozilla ist mir auch das sympathischere Unternehmen – das meine ich weniger negativ für Google, als vielmehr positiv für Mozilla.</p> <!--more--> <h3>Übernahme der Bookmarks</h3> <p>Die Bookmarks lassen sich in Opera als HTML exportieren. Firefox kann diese HTML-Datei wieder importieren und schon hat man alle Bookmarks inklusive Verzeichnisstruktur. Vorher sollte man in Opera vielleicht noch das Müll-Verzeichnis leeren, da diese sonst zusammen mit den anderen Bookmarks im obersten Verzeichnis landen.</p> <p>Mir ist bewusst, dass es eine <a href="">Opera 15 Extension für Bookmarks</a> gibt. Diese ist hochgradig unnütz. Die Bedienung und Optik ist lachhaft schlecht und der Import hat bei mir erst gar nicht funktioniert – was aber auch daran liegen mag, dass ich aus der Opera-Linux-Version exportierte und in Opera-Windows-in-einer-VM importierte.</p> <h3>Addons</h3> <p><a href=""><strong>Adblock Plus</strong></a> zusammen mit dem <a href=""><strong>Element Hiding Helper</strong></a>. Der Zweck dürfte bekannt sein: Werbung und andere nervige Elemente blockieren.</p> <hr /> <p><a href=""><strong>Add to Search Bar</strong></a> ist praktisch, um sehr einfach neue Suchmaschinen hinzuzufügen: Einfach ein Rechtsklick in das Suchfeld der besuchten Seite und auswählen. Die eingerichteten Suchen können entweder über das Suchfeld genutzt werden oder – wie ich es bevorzuge – per Kürzel über die Adressleiste verwendet werden.</p> <p class="illu"><img style="width: 600px; height: 407px;" src="//" alt="Firefox Search" /></p> <hr /> <p><a href=""><strong>FireGestures</strong></a> um die Mausgesten aus Opera nachzubilden. Die verschiedenen Maus&shy;gesten lassen sich zudem frei einrichten und so habe ich auch ein paar Bewegungen, die ich von Opera gewohnt war, wieder so eingestellt.</p> <hr /> <p><a href=""><strong>FXChrome</strong></a> bietet einen sehr sauberen, Chrome-ähnlichen Look. Es ist so ein typisch minimalistisches Design, wie ich es liebe.</p> <hr /> <p><a href=""><strong>Greasemonkey</strong></a> für Userscripts. Insofern man überhaupt Unterstützung für Userscripts braucht. Opera 12 hatte es build-in und so geht es mit Firefox.</p> <hr /> <p><a href=""><strong>HTTPS Everywhere</strong></a>, damit von mehr Seiten oder auch nur bestimmten Elementen auf Seiten (wie z.B. die Gravatars auf meinem Blog) die HTTPS-Variante verwendet wird, insofern vorhanden.</p> <hr /> <p><a href=""><strong>Private Tab</strong></a> für eben solche, da Firefox an sich nur Private Windows anbietet. Verstehe ich nicht so recht, aber nun gut, dem ließ sich ja leicht Abhilfe schaffen.</p> <hr /> <p><a href=""><strong>Super Start</strong></a>, da das Speed Dial von Firefox so gar nicht meinen Wünschen entspricht. Vor allem nervt mich, dass dort immer die letzten besuchten Seiten auftauchen, es sei denn, ich belege alle Plätze.</p> <p>Die Vorschaubilder der Seiten haben allerdings erst einmal Kartoffel-Aufnahmen-Qualität. In <code>about:config</code> den Wert von <code></code> auf <code>512</code> zu erhöhen verbessert dies deutlich.</p> <hr /> <p><a href=""><strong>YesScript</strong></a>, um gezielt Seiten die Ausführung von JavaScript zu untersagen. Also ein Blacklist-Verfahren – im Gegensatz zu <a href=""><em>NoScript</em></a>, das eine Whitelist führt.</p> <h3>Fein-Einstellungen</h3> <p><strong>Letzter Tab soll nicht den ganzen Browser schließen:</strong> In <code>about:config</code> muss der Wert für <code>browser.tabs.closeWindowWithLastTab</code> auf <code>false</code> geändert werden.</p> <p>Hat noch jemand Vorschläge für nützliche Addons oder Einstellungen?</p> PGP Public Key meiner Mail-Adresse Tue, 11 Jun 2013 17:59:00 +0200 Seba Informatik <p>In Anbetracht <a href="">aktueller Ereignisse</a> habe ich mir das Thema PGP/Mail-Verschlüsselung noch einmal angeschaut und möchte die Möglichkeit einfach mal all jenen, die meine Mail-Adresse haben, anbieten. Die Einrichtung ging mit dieser <a href="">Anleitung für Thunderbird</a> recht schnell und unkompliziert vonstatten.</p> <p><strong><a href="">PGP Public Key für meine GMX-Adresse</a></strong> – es bediene sich, wer möchte. Für meine anderen Adressen kann ich das auch noch nachholen, falls Bedarf besteht.</p> <p>Wer es sich auch einrichtet: Bloß nicht so schusselig sein und den <em>Private</em> Key irgendwo in die Cloud (DropBox etc.) legen; sonst kann man sich das Verfahren auch gleich sparen.</p> <p>Ansonsten: Danke und viel Glück, Herr Snowden. Hoffentlich wird das mit dem Asyl in Island was.</p> <hr /> <p><strong>[Update 2013-06-13]</strong> Machen wir das doch so: <a href=""></a></p> Opera Extensions und JavaScript-Whitelisting Sun, 21 Apr 2013 00:02:00 +0200 Seba Informatik <h3>JavaScript-Whitelisting</h3> <p>Gemeint ist, wenn man JavaScript erst im Browser deaktiviert und dann nur für jede gewünschte Seite gesondert aktiviert. Man führt also eine Whitelist für Seiten, die JavaScript ausführen dürfen. Warum kann das eine gute Idee sein?</p> <ul> <li><strong>Sicherheit und geschützte Privatsphäre:</strong> Böse Dinge wie dynamisches Nachladen von schädlichen Inhalten von Fremd-Servern wird erschwert. Das allgegenwärtige Tracking durch hauptsächlich Werbefirmen (das beinhaltet auch und gerade Google) wird nahezu unmöglich.</li> <li><strong>Internet im Light-Modus:</strong> Kein Popup, das nach Facebook-Likes oder Twitter-Gefollowere bettelt; keine nervige Bottom-Menubar, die aufklappt, und überhaupt: 99% weniger Werbung.</li> </ul> <h3>Das Problem mit Opera</h3> <p>Deaktiviert man global JavaScript, funktionieren Extensions nicht mehr, selbst wenn die besuchte Seite auf der Whitelist steht. Konkret ist das Problem, dass keine Content-Skripte mehr in die besuchte Seite injiziert werden – ein elementärer Bestandteil der meisten Extensions.</p> <p>Der Witz an der Sache ist, dass Userscripts – diese einzelnen JavaScript-Dateien, die auf .user.js enden – weiterhin funktionieren, denn dafür gibt es sogar eine extra Einstellung. Auch die Opera Developer Toolbar „Dragonfly“ funktioniert weiterhin.</p> <p>Also: Warum nicht auch Extensions?</p> <h3>Workaround</h3> <ol> <li><em>Aktiviere</em> JavaScript global.</li> <li>Füge eine Site Preference hinzu für die Adresse „<code>*</code>“ und <em>deaktiviere</em> für diese JavaScript. Dabei handelt es sich um eine Wildcard, die alle Seiten betrifft – besucht und unbesucht.</li> <li>Füge eine Site Preference hinzu für die Adresse „<code>wuid-*</code>“ und <em>aktiviere</em> für diese JavaScript. Dies ist für die Extensions, damit z.B. das Background-Skript und die Optionen-Seite funktionieren.</li> </ol> <p>Ab sofort laufen auf jeder Seite, die auf der Whitelist steht, auch die Extensions.</p> Browser-Addons: Nachrichten-Broadcast an alle Tabs Mon, 25 Mar 2013 17:25:00 +0100 Seba Informatik <p class="illu"><img style="width: 600px; height: 400px;" src="//" alt="Browser: Chrome, Firefox, Opera" /></p> <h3>Situation</h3> <p>Meine Extension injiziert auf bestimmten Seiten ein Content Script. Man kann dann auf dieser veränderten Seite auch Einstellungen ändern, die im der Extension zugewiesenen Storage gespeichert wird. Dafür wird wie üblich eine Nachricht mit den Änderungen an den Hintergrundsprozess geschickt.</p> <h3>Problem</h3> <p>Angenommen, ich habe zwei oder mehr Tabs offen. Nun verändere ich die Einstellung A in einem dieser Tabs. Die Änderung wird gespeichert, aber alle anderen Tabs zeigen nach wie vor den alten Zustand an. Erst nach einem Neuladen der Seite wird die Änderung sichtbar.</p> <p>Was wir wollen, ist eine Synchronisation der Tabs, was bedeutet, wir müssen alle im Hintergrund eintreffenden Änderungen allen anderen Tabs ebenfalls mitteilen. Und das geht so …</p> <!--more--> <h3>Lösung: Opera</h3> <pre class="brush: js">opera.extension.broadcastMessage( msg );</pre> <p>Eeyup, das war es.</p> <h3>Lösung: Chrome</h3> <p>In Chrome müssen wir uns die IDs der Tabs merken, die unser Content Script beinhalten. Dafür sendet besagtes Content Script zuallererst immer eine Nachricht an den Hintergrund, damit wir uns seine Tab-ID merken können. Wird der Tab geschlossen, verwerfen wir die Tab-ID wieder.</p> <pre class="brush: js">var openTabs = []; chrome.extension.onMessage.addListener( handler ); function handler( e, sender, sendResponse ) { if( == "content script loaded" ) { openTabs.push( ); chrome.tabs.onRemoved.addListener( onTabRemove ); } ... }; function onTabRemove( tabId, info ) { var idx = openTabs.indexOf( tabId ); if( idx >= 0 ) { openTabs.splice( idx, 1 ); } };</pre> <p>Ein Broadcast an alle relevanten Tabs sieht dann wie folgt aus.</p> <pre class="brush: js">for( var i = 0; i < openTabs.length; i++ ) { chrome.tabs.sendMessage( openTabs[i], msg, myCallbackFunction ); }</pre> <h3>Lösung: Firefox</h3> <p>In Firefox gehen wir ähnlich vor wie in Chrome und merken uns alle Tabs, die unser Content Script inne haben, in der Variable <code>workers</code>.</p> <pre class="brush: js">var self = require( "self" ); var pageMod = require( "page-mod" ); var workers = []; pageMod.PageMod( { include: "*", attachTo: ["existing", "top"], contentScriptWhen: "ready", contentScriptFile: [ "myContentScript.js" )], onAttach: handleOnAttach } ); function handleOnAttach( worker ) { workers.push( worker ); worker.on( "detach", function() { forgetWorker( this ); } ); }; function forgetWorker( worker ) { var idx = workers.indexOf( worker ); if( idx >= 0 ) { workers.splice( idx, 1 ); } };</pre> <p>Unser Broadcast funktioniert dann wie folgt.</p> <pre class="brush: js">for( var i = 0; i < workers.length; i++ ) { workers[i].postMessage( msg ); }</pre> <hr /> <p class="annotation"><a href="">Opera extensions: messaging</a></p> <p class="annotation"><a href="">chrome extensions: chrome.tabs</a></p> <p class="annotation"><a href="">Firefox SDK: page-mod</a></p> Add-ons für Chrome, Firefox und Opera selbst hosten Wed, 13 Mar 2013 18:14:00 +0100 Seba Informatik <p class="illu"><img style="width: 600px; height: 400px;" src="//" alt="3 Browser" /></p> <p>Ich habe eine Browser-Extension für Chrome, Firefox und Opera erstellt. Alle Dateien liegen bei mir lokal, ich habe also z.B. nicht Firefoxs <a href="">Add-on Builder</a> verwendet, sondern nur <a href="">das SDK</a>. Als die Extension fertig war, wollte ich sie auch selbst hosten. Ich meine, wie schwer kann das schon sein? Ja, nun …</p> <p>In diesem Artikel gehen wir davon aus, dass sich die Browser-spezifischen Extension-Dateien in den Unterverzeichnissen <code>Chrome/</code>, <code>Firefox/</code> und <code>Opera/</code> befinden.</p> <!--more--> <p>Der Artikel ist lang geworden. Hier sind ein paar Sprungmarken:</p> <ul> <li><a href="#extension-hosting-opera">Hosting und Updates mit Opera</a></li> <li><a href="#extension-hosting-chrome">Hosting und Updates mit Chrome</a></li> <li><a href="#extension-hosting-firefox">Hosting und Updates mit Firefox</a></li> </ul> <hr /> <h3 id="extension-hosting-opera">Opera</h3> <p>In Operas <code>config.xml</code> muss ein Verweis auf die XML-Datei auf dem hostenden Server stehen, die später nach Updates gefragt wird.</p> <pre class="brush: xml">&lt;widget …&gt; … &lt;update-description href="" /&gt; &lt;/widget&gt;</pre> <p>Dann packen wir die Extension ein. Dafür wird einfach alles in ein ZIP-Archiv mit der Datei-Endung OEX gepackt.</p> <pre class="brush: bash">cd Opera/ zip -r MyExtension.oex *</pre> <p>Die XML-Datei für Updates <code>updates-opera.xml</code> beinhaltet lediglich einen Pfad zur Extension, sowie die aktuelle Versionsnummer dieser.</p> <pre class="brush: xml">&lt;update-info xmlns="" src="" version="1.1"&gt;&lt;/update-info&gt;</pre> <p>Das war es auch schon. Ein Hindernis ist jedoch, dass die eigene Domain erst von den Benutzern als „Trusted Website“ in Opera eingetragen werden muss – <a href="">wie auf diesem Screenshot zu sehen.</a></p> <hr /> <h3 id="extension-hosting-chrome">Chrome</h3> <p>In <code>manifest.json</code> wird für Updates ein zusätzlicher Eintrag benötigt.</p> <pre class="brush: js">{ … "update_url": "" }</pre> <p>Wird die Extension <strong>zum ersten Mal verpackt</strong>, lautet der Befehl:</p> <pre class="brush: bash">google-chrome --pack-extension=Chrome/</pre> <p>Dabei wird ein Private Key erzeugt und hier mit dem Namen <code>Chrome.pem</code> abgelegt. <em>Diese Datei sollte geheim bleiben – also nicht einfach in ein öffentliches Repository hochladen!</em></p> <p>Bei jedem späteren Mal, dass die Extension verpackt wird, lautet der Befehl dann:</p> <pre class="brush: bash">google-chrome --pack-extension=Chrome/ --pack-extension-key=Chrome.pem</pre> <p>In der XML-Datei <code>updates-chrome.xml</code> steht die ID der Extension, der Pfad zur Installations-Datei und die aktuelle Versionsnummer. Die ID erfährt man von der Chrome-Erweiterungs-Seite (<code>chrome://extensions</code>) – dafür muss man ein Häkchen bei „Developer Mode“ setzen. Diese ID ändert sich nicht mehr, auch nicht mit späteren Updates.</p> <pre class="brush: xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;gupdate xmlns="" protocol="2.0"&gt; &lt;app appid="replace-this-with-your-extension-id"&gt; &lt;updatecheck codebase="" version="1.1" /&gt; &lt;/app&gt; &lt;/gupdate&gt;</pre> <p>Ein Problem bei der Installation ist, dass dies nicht direkt über die Website erfolgen kann. Die Extension muss vom Benutzer heruntergeladen und dann auf die Chrome-Erweiterungs-Seite (<code>chrome://extensions</code>) <a href="">gezogen werden (Drag&amp;Drop)</a>. Updates funktionieren dann jedoch ganz normal.</p> <hr /> <h3 id="extension-hosting-firefox">Firefox</h3> <p>Ich sage es vorne weg: Firefox hat mich ordentlich angepisst. Mir ist klar, dass alles im Sinne von Sicherheit geschieht und durchaus sinnvoll ist. Aber aus Entwicklersicht war es eine Qual überhaupt erst einmal herauszufinden, wie vorzugehen ist. Erschwerend kam hinzu, dass ich kein SSL verwende. Dafür ist die Firefox-Extension die einzige, die für eine Installation keine größere Mitarbeit seitens des Benutzers erfordert.</p> <p>Zunächst wird die Extension mit dem cfx tool aus <a href="">dem SDK</a> verpackt.</p> <pre class="brush: bash">CFX=~/.firefox-addon-sdk-1.13.2/bin/cfx cd Firefox/ $CFX xpi --update-url</pre> <p>Nun müssen wir allerdings das für das XPI erstellte <code>install.rdf</code> bearbeiten. Also extrahieren wir diesen Teil.</p> <pre class="brush: bash">unzip MyExtension.xpi install.rdf</pre> <p>Nun benötigen wir ein weiteres Tool, genannt McCoy. Dafür gibt es eine <a href="">grafische Variante von Mozilla</a> selbst, oder eine <a href="">gepatchte Version, die man über das Terminal</a> verwenden kann, was ich hier mache.</p> <p>Zuerst erstellen wir für unsere Extension einen Schlüssel. Ähnlich wie bei Chrome, wird dies <strong>nur einmalig</strong> gemacht und dann immer wieder verwendet.</p> <pre class="brush: bash">MCCOY=~/.mccoy/mccoy $MCCOY -createKey "ThinkOfSomeKey"</pre> <p>Als nächstes fügen wir unseren Public Key in das <code>install.rdf</code> ein und packen es wieder in das XPI.</p> <pre class="brush: bash">$MCCOY -installRDF install.rdf -key "ThinkOfSomeKey" zip -f MyExtension.xpi install.rdf</pre> <p>Nun bilden wir einen Hash vom XPI, da wir diesen noch brauchen werden. Welches Hashing-Verfahren eingesetzt wird, ist relativ egal. Ich habe mich für <em>sha256</em> entschieden.</p> <pre class="brush: bash">XPI_HASH=$(sha256sum MyExtension.xpi | sed "s/ .*//g" -)</pre> <p>Gratuliere, wir sind ungefähr bei der Hälfte! Schauen wir uns jetzt etwas Leichtes an: Den Button auf der Website, um den Installations-Prozess einzuleiten. Dafür haben wir eine HTML-Seite mit einem Element, das die ID <code>trigger_ff</code> hat. Stehe das Nachfolgende nun in einer JS-Datei namens <code>foo.js</code>:</p> <pre class="brush: js">var trigger = document.getElementById( "trigger_ff" ); trigger.addEventListener( "click", function( e ) { e.preventDefault(); var params = { "MyExtension": { URL: "", IconURL: "", Hash: "sha256:%XPI_HASH%", toString: function() { return this.URL; } } }; InstallTrigger.install( params ); }, false );</pre> <p>Den Hash können wir beispielsweise so einfügen:</p> <pre class="brush: bash">sed -i "s;%XPI_HASH%;sha256:$XPI_HASH;g" foo.js</pre> <p>Als nächstes widmen wir uns der RDF-Datei für Updates. Erstelle eine Datei <code>updates-firefox.rdf</code>.</p> <pre class="brush: xml">&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;RDF xmlns="" xmlns:em=""&gt; &lt;Description about=""&gt; &lt;em:updates&gt; &lt;Seq&gt; &lt;li&gt; &lt;Description&gt; &lt;em:version&gt;1.1&lt;/em:version&gt; &lt;em:targetApplication&gt; &lt;Description&gt; &lt;em:id&gt;{ec8030f7-c20a-464f-9b0e-13a3a9e97384}&lt;/em:id&gt; &lt;em:minVersion&gt;18.0&lt;/em:minVersion&gt; &lt;em:maxVersion&gt;19.*&lt;/em:maxVersion&gt; &lt;em:updateLink&gt;;/em:updateLink&gt; &lt;em:updateHash&gt;%XPI_HASH%&lt;/em:updateHash&gt; &lt;/Description&gt; &lt;/em:targetApplication&gt; &lt;/Description&gt; &lt;/li&gt; &lt;/Seq&gt; &lt;/em:updates&gt; &lt;/Description&gt; &lt;/RDF&gt;</pre> <p>Die ID <code>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</code> wird nicht verändert, denn hierbei handelt es sich um die ID für Firefox – es wird gesagt, dass dies eine Extension für Firefox ist und z.B. nicht für Thunderbird.</p> <p>Klickt der Benutzer den Installations-Button, erfährt Firefox den Hash und überprüft, ob die zu installierende Datei auch die ist, die hier angepriesen wurde. Dieser Vergleich findet auch bei Updates statt. Daher müssen wir auch hier den Platzhalter <code>%XPI_HASH%</code> ersetzen.</p> <pre class="brush: bash">sed -i "s;%XPI_HASH%;sha256:$XPI_HASH;g" updates-firefox.rdf</pre> <p><em><strong>Hinweis:</strong> Der Hash muss für jede neue Version erneut errechnet und eingefügt werden!</em></p> <p>Nun kommt wieder McCoy zum Einsatz, indem wir in das Update-RDF unsere Signatur einfügen.</p> <pre class="brush: bash">$MCCOY -signRDF updates-firefox.rdf -key "ThinkOfSomeKey"</pre> <p>Wenn man möchte, kann man das erzeugte RDF auch noch überprüfen lassen.</p> <pre class="brush: bash">$MCCOY -verifyRDF updates-firefox.rdf -key "ThinkOfSomeKey"</pre> <p>Geschafft.</p> <hr /> <h3>Relevantes</h3> <p>Wer mein Build-Skript und Templates für die XML/RDF/JS-Dateien sehen möchte, findet diese <a href="">in meinem GitHub-Repository</a>.</p> <p>Diese Tutorials und Dokumentation könnten von Interesse sein:</p> <ul> <li><a href="">Opera Extensions: Documentation</a></li> <li><a href="">Chrome Extensions: Packaging</a></li> <li><a href="">Firefox SDK Documentation</a></li> <li><a href="">Firefox SDK: Getting Started with cfx</a></li> <li><a href="">Firefox: Installing Extensions and Themes From Web Pages</a></li> </ul> Mozilla Dev Derby: Pete’s Adventure Fri, 01 Mar 2013 21:29:00 +0100 Seba Informatik <p class="illu"><img style="width: 600px; height: 420px;" src="//" alt="Pete’s Adventure" /></p> <p>Im Januar habe ich zum zweiten Mal bei der <a href="">Mozilla Dev Derby</a> einen Beitrag eingereicht. Das Thema lautete diesmal <strong>Drag&amp;Drop</strong> und da dachte ich mir, dass sich doch etwas Hübsches finden lassen müsste. Eine erste Idee, auf die ich mich ziemlich versteift hatte, gab ich später doch wieder auf – ich hätte meinen eigenen Ansprüchen nicht Genüge tun können. Von mir stammt nun <a href="">Pete's Adventure</a> (<a href="">Mirror</a>), eine kurze interaktive Geschichte, mit der ich doch sehr zufrieden bin. <a href="">Code und Ressourcen sind auf GitHub zu finden.</a></p> <h3>Drag&amp;Drop</h3> <p>Drag&amp;Drop mit JavaScript ist nicht schwer. Ein paar wenige (dumme) Besonderheiten muss man nur kennen. Zum Beispiel, dass es in Firefox nur funktioniert, wenn auch irgendwelche Daten gesetzt sind. Ein leerer String reicht da schon:</p> <pre class="brush: js">var note = document.getElementById( "note" ); note.addEventListener( "dragstart", function( e ) { e.dataTransfer.setData( "text/plain", "" ); }, false );</pre> <p>Ein Drop wird zudem nur erkannt, wenn man die Events <code>dragenter</code> und <code>dragover</code> für das Element stoppt:</p> <pre class="brush: js">function stop( e ) { e.preventDefault(); } var dropzone = document.getElementById( "dropzone" ); dropzone.addEventListener( "dragenter", stop, false ); dropzone.addEventListener( "dragover", stop, false ); dropzone.addEventListener( "drop", doSomething, false );</pre> <p>Das dürften auch schon die größten Stolpersteine gewesen sein. Nun warte ich weiter auf das Ergebnis des Wettbewerbs, das eigentlich sehr bald verkündet werden müsste.</p> <hr /> <p><strong>Update 2013-03-02:</strong> Ha, nächster Tag und das Ergebnis ist da. <a href="">Erster Platz!</a></p> <hr /> BOINC – CPU-Zeit spenden für die Wissenschaft Sun, 28 Oct 2012 18:35:00 +0100 Seba Informatik <p class="illu"><img style="width: 600px; height: 251px;" src="//" alt="BOINC logo" /></p> <p>Nicht jeder wissenschaftlichen Forschungsgruppe steht ein Super-Rechner zur Ver&shy;fügung. Eine Möglichkeit, dennoch aufwendige Simulationen durchführen zu lassen, ist die <strong>Berkeley Open Infrastructure for Network Computing</strong> – kurz BOINC. Das Projekt basiert dabei auf freiwilliger Unterstützung durch zumeist Privatpersonen, die ihre Rechenleistung zur Verfügung stellen. Die installierten Clients erhalten Arbeitspakete, berechnen diese und senden ihre Ergebnisse zurück an das Projekt-Backend.</p> <h3>Client</h3> <p class="illu"><img style="width: 600px; height: 330px;" src="//" alt="BOINC client" /></p> <p>Der Client existiert sowohl für Windows, Mac als auch Linux – nicht zuletzt dank Freigabe des Quellcodes in 2003. Ziel des Clients ist es, <em>ungenutzte</em> CPU-Zeit zu verwenden: Sollte man gerade nur Musik hören, im Internet surfen oder andere unstrapaziöse Dinge erle&shy;digen. In den Optionen lässt sich auch einstellen, ob nur zu bestimmten Tageszeiten ge&shy;rechnet werden soll und ob ein CPU-Auslastungslimit zu beachten ist. Natürlich kann man das Programm auch einfach von Hand starten und beenden – was meine Vorgehens&shy;weise ist.</p> <p><strong>Bedenken</strong> sollte man allerdings, dass gerade der Dauerbetrieb eine nahezu durch&shy;gängige Belastung der CPU bedeutet – und damit höherer Stromverbrauch und Wärme&shy;entwicklung. Fängt plötzlich der Lüfter an aufzudrehen, sollte man es vielleicht doch lieber sein lassen oder zumindest einen Blick auf die Temperaturen haben.</p> <h3>Teilnehmen</h3> <ul> <li>Alle relevanten Informationen finden sich auf der offiziellen BOINC-Seite: <a href=""></a>.</li> <li>Dort sind ebenfalls zahlreiche <a href="">verfügbare Projekte</a> aus verschiedenen Forschungsgebieten aufgelistet.</li> <li>Ich selbst nehme bisher nur am <a href="">World Community Grid</a> teil.</li> </ul> Ersteindruck: Girls und Panzer Sun, 14 Oct 2012 23:20:00 +0200 Seba Anime & Manga <p class="illu"><img style="width: 600px; height: 338px;" src="" alt="Girls und Panzer" title="Oh boy, here we go." /></p> <p><em>Panzerfahren:</em> Die traditionelle Kampfkunst der Frauen. Mädchen sollten Panzerfahren lernen, um ihren Charakter zu stärken, ihre Eleganz zu verfeinern und zu einer schönen, gesunden Frau heranzuwachsen.</p> <p>In den ersten Minuten wird direkt in einen Panzerkampf eingestiegen, der erst später in der Serie stattfinden wird. Man sieht ein paar Charaktere, ganz viele CG-Panzer und erhält einen Cliffhanger. Dann beginnt es chronologisch korrekt mit Hauptcharakterin Nishizumi auf dem Weg zur Schule. Warum der zusammenhangslose Einstieg? Natürlich um Lust auf später zu machen, denn der Rest der Folge ist relativ langweilig.</p> <p>Nishizumi geht zur Schule, freundet sich mit zwei Klassenkameradinnen an. Dann wird offenbart, dass die Schule Panzerfahren wieder einführt und die Schülerpräsidentin erpresst sie dahin&shy;gehend, daran teilzunehmen. Obwohl Nishizumi aus einer für Panzer&shy;fahrerinnen berühmten Familie stammt, hat sie eine lebhafte Abneigung dazu. Wie sie selbst sagt, hat sie keine guten Erinnerungen an Panzerfahren. Später steht sie dann jedenfalls mit strahlendem Gesicht vor dem Panzer und kann es kaum erwarten, ihn wieder fahrtüchtig zu sehen.</p> <p class="illu"><a href=""><img style="width: 600px; height: 338px;" src="" alt="Dun! Dun! Duuuuun!" /></a></p> <p>In der letzten Szene wird dann immer weiter herausgezoomt und … es ist alles auf einem Schiff! Die gesamte Schule, Stadt, Trainingsgelände. Ein einziges, riesiges Schiff. Aber, nun, ich möchte nicht einmal wissen warum. Okay, ist halt alles auf einem Schiff! Von mir aus! <strong>Warum auch nicht?!</strong></p> <hr /> <p>Halbwegs relevant zu diesem Ersteindruck: Ich habe auch die erste Folge <em>Onii-chan Dakedo Ai Sae Areba Kankeinai yo ne!</em> gesehen. Einen eigenen Eintrag wird es dazu sehr wahrscheinlich nicht geben; eine zweite Folge für mich sehr wahrscheinlich auch nicht.</p> Ersteindruck: Chuunibyou Demo Koi ga Shitai! Thu, 11 Oct 2012 22:22:00 +0200 Seba Anime & Manga <p class="illu"><a href=""><img style="width: 600px; height: 338px;" src="" alt="Chuunibyou Demo Koi ga Shitai!" /></a></p> <p>Die Serie ist gar nicht so schlecht, brachte sie mich doch das eine oder andere Mal zum Schmunzeln. Der Zeichenstil bzw. die Animationen sind gut, Opening und Ending recht nett. Aber ich habe ein Problem, weswegen ich nicht weiterschauen will. Ich …</p> <p>Ich hasse es mich fremdzuschämen! Ich drehe lieber den Ton runter oder überspringe gleich eine Szene, nur um mir diese fremden Peinlichkeiten zu ersparen. Nun ist es mit <em>Chuunibyou Demo Koi ga Shitai!</em> leider so, dass das Konzept der Serie unmittelbar hierauf basiert. „Achtklässler-Syndrom“ wird hier beschrieben als eine peinliche Phase einiger Acht&shy;klässer, in der die Fantasie etwas Amok läuft und sich die Person gelinde gesagt zum Deppen macht, indem sie lauthals Attackennamen schreit oder Unsinn über irgend&shy;welche Zauberkräfte erzählt.</p> <p class="illu"><img style="width: 600px; height: 338px;" src="" alt="Chuunibyou Demo Koi ga Shitai!" /></p> <p>Für den Hauptcharakter ist diese Phase, an die er sich mit größter Scham nur zurück&shy;erinnert, vorbei. Dummerweise hat er eine Mitschülerin, die ebenfalls seine Nachbarin ist, an der Backe, die voll in dieser Phase steckt. Immer noch. Wie gesagt: Ich kann es nicht. Ich kann mich über derartige öffentliche Peinlichkeiten anderer nicht amüsieren.</p> Ersteindruck: BTOOOM! Sat, 06 Oct 2012 21:10:00 +0200 Seba Anime & Manga <p class="illu"><img style="width: 600px; height: 338px;" src="" alt="BTOOOM!" /></p> <p>Der Hauptcharakter – Ryouta – ist 22 Jahre alt und <abbr title="Not in Education, Employment, or Training">NEET</abbr>. In anderen Worten: Ist es mal nicht der Durchschnittsschüler, ist der Taugenichts, der zum Helden mutiert. Während er seit 2 Jahren auf eine immer wieder versprochene Stelle in der Spieleindustrie wartet, vertreibt er seine Zeit mit dem Spiel <em>BTOOOM!</em>.</p> <p><em>BTOOOM!</em> ist in der Geschichte einer der erfolgreichsten FPS aller Zeiten. Was schwer nach&shy;zuvollziehen ist. Die einzigen Waffen sind Bomben. Davon zwar verschiedene Typen (Timer, Contact, Smoke …), aber wie so etwas erfolgreich sein soll, enzieht sich mir. Nun, im Spiel ist Ryouta zudem verheiratet. Wir haben hier also ein Spiel à la Quake, nur, dass es nur Bomben gibt und man heiraten kann.</p> <!--more--> <p>Jedenfalls rutscht Ryouta in die weltweiten Top 10, wird kurze Zeit später von Männern in schwarzen Anzügen entführt und wacht auf einer tropischen Insel wieder auf. Schließ&shy;lich begegnet er einer anderen Person, die ihn in bester <em>BTOOOM!</em>-Manier wegzubomben versucht. Nach einer Verfolgungsjagd kann Ryouta schließlich siegen. Was auch daran liegen mag, dass sein Gegner nur laut denken kann. „HEY, ICH WERFE JETZT EINE BOMBE HIERHIN UND DAHIN, DANN ERWISCHE ICH IHN SICHER!“</p> <p>Dabei hatte namenloser, blondgefärbter „Punk A“ gute Chancen. Ryouta hatte deutliche Schwierigkeiten, zu verstehen, wie seine Timer-Bomben funktionieren. So ein Würfel mit 1&nbsp;Taste und hell-erleuchtetem Timer-Display ist aber auch schwer verständlich. Gut, dass er seine Erkenntnisse dann auch noch dem Zuschauer erklärte. Wie soll man das auch nach gerade einmal drei Szenen, in denen die Timer-Bombe bereits eingesetzt wurde, auch schon verstanden haben?</p> <p class="illu"><img style="width: 600px; height: 338px;" src="" alt="Wo ist die Snooze-Taste auf meinem Wecker?" title="Wo ist die Snooze-Taste auf meinem Wecker?" /></p> <p>Zum Schluss der Folge stolpert er noch über eine blonde Schönheit, die sich am Bach erfrischt. Ob das etwa seine Online-Verheiratete sein wird? Naaa…</p> Anime im Herbst 2012 Sun, 09 Sep 2012 23:40:00 +0200 Seba Anime & Manga <p class="illu"><img style="width: 600px; height: 800px;" src="" alt="Girls und Panzer" title="…" /></p> <p>Die <a href="">Übersicht für die Herbst-Anime</a> ist üppig gefüllt. Einige der Titel klingen in der Tat recht interessant, sodass ich einige Serien habe, in die ich zumindest ein, zwei Folgen hineinschauen werde. Dann gibt es noch ein paar Titel, die recht „interessant“ klingen.</p> <!--more--> <h3>Girls und Panzer</h3> <p>Fangen wir mit dem Elephant im Raum an. <a href="">Trailer.</a> Da haben wir also „Girls“ und „Panzer“ … Ja, natürlich werde ich mir die erste Folge anschauen und mit diebischer Vorfreude eine absolute Katastrophe erwarten.</p> <h3>Busou Shinki</h3> <p>Ein Anime, der nur existiert, um Werbung für Action-Figuren zu machen. Man lasse sich dieses Setting auf der Zunge zergehen: Es ist Zukunft und die Leute haben kleine, lebendige/roboterartige (weibliche) Action-Figürchen, die gegeneinander für ihren „Master“ kämpfen.</p> <h3>Tonari no Kaibutsu-kun</h3> <p><iframe width="600" height="338" src="" allowfullscreen></iframe></p> <blockquote> <p>A cold-hearted girl and super-troublemaker romance with a fresh new perspective.</p> </blockquote> <p>Wie wohl diese frische, neue Perspektive ausschaut? Der Rest der Beschreibung klingt nicht schlecht und der Trailer hat was – unter anderem ein Huhn, das als Schwert verwendet wird. Eine der Serien, von der ich mir ein wenig verspreche.</p> <h3>JoJo's Bizarre Adventure</h3> <p>Es gab schon einmal einen JBA-Anime. Dieser setzte jedoch deutlich später in der Geschichte an. Bei diesem Anime scheint es von Anfang an loszugehen – mit den Steinmasken und Vampiren. Ich hoffe, die Umsetzung ist richtig schön düster.</p> <h3>Litchi?Hikari Club</h3> <p>Klingt interessant. Also das gute „interessant“. Ein Club, der sich mit Künstlicher Intelligenz beschäftigt und aufgrund einer Auseinandersetzung zwischen dem leicht bösartigen Vorsitzenden und dem Vize ins Chaos schleudert.</p> <h3>Little Busters!</h3> <p><iframe width="600" height="338" src="" allowfullscreen></iframe></p> <p>Den Namen habe ich schon das ein oder andere Mal in positivem Zusammenhang ge&shy;lesen. Ist da etwas dran? Schauen wir mal rein. Der Trailer sieht zwar leider nach Comedy-Drama-Romance Nummer 114.218 aus, doch wie gesagt, die Visual Novel wird hoch gelobt.</p> <h3>Sakurasou no Pet na Kanojo</h3> <p>Der männliche Schüler-Protagonist wohnt im selben Wohnheim wie ein gewisses Mäd&shy;chen und soll sich um sie kümmern, weil sie zwar künstlerisch sehr begabt, aber an&shy;sonsten schein&shy;bar zu <del>dumm</del> <del>lebensunfähig</del> Alltags-unerfahren ist. Entweder werden die Witze so aus&shy;sehen, dass sie etwas Dummes macht, was der Protagonist ausbaden muss, oder sie wird etwas Dummes machen, was total <em>niiieeedlich~</em> wirken soll. Ahaha, so ein <em>Dummerchen~</em>, vergisst sich anzuziehen!</p> <p>Die Beschreibung zu lesen, hat leicht geschmerzt.</p> <h3>Oniichan dakedo Ai sae Areba Kankeinai yo ne!</h3> <p>„<em>As Long as There's Love, It Doesn't Matter If He is My Brother, Right</em>“ ist bestimmt ein tief&shy;grün&shy;diges Werk, dass die gesellschaftliche Akzeptanz und Reaktion geschwisterlicher Bezieh&shy;ungen erkundet. Dabei wird mutig ein Thema aufgegriffen, das sonst eigentlich tabu ist.</p> <p>Ja, ich weiß. Kaufe ich mir selbst auch nicht ab. <a href="">Wie wird dieser Anime schon ablaufen?</a> Ach, Japan.</p> <h3>K</h3> <p><iframe width="600" height="338" src="" allowfullscreen></iframe></p> <p>Dem Trailer nach zu urteilen geht es um … zwei Gruppen, die sich bekämpfen oder um irgendetwas kämpfen? Jedenfalls scheint es recht actionlastig und gut animiert. Der Trailer hinterlässt einen guten Eindruck.</p> „Das Leben – Reiner Zufall?“ Fri, 31 Aug 2012 22:30:00 +0200 Seba <p class="illu"><img style="width: 600px; height: 400px;" src="" alt="Durchs Weltall schwebend. Shwoosh! Nur hört man das Shwoosh! nicht." /></p> <p>Diese Geschichte liegt nun schon ein wenig zurück: Vor einigen Monaten standen zwei Damen von den „Zeugen Jehovas“ vor der Tür. Die ZJ hatten lange nicht mehr besucht und nachdem ich diesmal ihre Frage auf Folge&shy;besuche höflich verneinte, wird es wahr&shy;scheinlich auch erst einmal wieder lange dauern. Auf ein Ge&shy;spräch habe ich mich den&shy;noch eingelassen. Es kam nicht viel dabei rum, da wir uns wohl gegen&shy;seitig für arme, irregeführte Seelen hielten. Sie reichten mir aber eine Broschüre und ich versprach, sie zu lesen. Ich habe sie sogar mehrmals gelesen und mich mit den Inhalten auseinander&shy;gesetzt. Daraus entstand dieser Artikel.</p> <p>Die Broschüre <em>Das Leben – Reiner Zufall?</em> gibt es auch <a href="ücher/">als PDF zum Download</a>. (Ein wenig runterscrollen. Es ist die Broschüre mit der Insel und der Schildkröte.)</p> <!--more--> <hr /> <h3>Der lebende Planet</h3> <blockquote> <p>„Wenn das Ökosystem der Erde wirklich nur durch Zufall entstanden wäre, hätte das Gleichgewicht in der Natur niemals ein so absolut hohes Niveau erreichen können“, schreibt der Theologe und Wissenschaftsautor M.A. Corey.</p> </blockquote> <cite>Seite 9</cite> <p>M.A. Coreys Zitat lässt sich <a href="">hier nachlesen, Seite 144-145.</a> Er zieht in erster Linie das „perfekte Recyclingsystem“ der Natur heran.</p> <p>Ein Gleichgewicht entsteht nicht „nur durch Zufall“. Ein Gleichgewicht pendelt sich nach und nach ein. Tiere, Mikro-Organismen und Pflanzen sind so, wie sie sind, weil sie sich über Jahrmillionen an die herrschenden – und sich ebenfalls verändernden – Umstände angepasst haben. Nicht die Erde wurde dem Leben angepasst, das Leben hat sich der Erde angepasst.</p> <blockquote> <p>Was würde ich erwidern, wenn jemand behauptet, dass die Erde einfach nur einer von vielen denkbaren Orten sei, wo eine Evolution stattfinden konnte?</p> </blockquote> <cite>Seite 9</cite> <p>Es müssen schon viele Faktoren zusammenspielen, damit auf einem Planeten zumindest die Voraussetzungen für Leben vorzufinden sind und auch aufrecht erhalten bleiben. Aber bei dieser Vielzahl an Planeten im Universum, da ist es fern von unmöglich, dass sich solche Bedingungen ergeben. Ich kann mir gut vorstellen, dass irgendwo weit entfernt, in irgend&shy;einer Pfütze sich etwas bewegt, Stoffe aufnimmt und sich vermehrt. Und wenn es mehrere solcher Organismen gibt, dann wird ein evolutionärer Wettbe&shy;werb um Nahrung eintreten.</p> <h3>Wer hatte die Idee?</h3> <blockquote> <p>„Design sollte nicht übersehen werden, bloß weil es so offensichtlich ist.“</p> </blockquote> <cite>Seite 14/15</cite> <p>Das Zitat stammt aus dem Artikel <a href="">Design for Living</a> von Michael J. Behe, erschienen in der New York Times vom 07.02.2005.</p> <p>Lebewesen sind komplex, was nicht sofort mit einem Design gleichzusetzen ist<sup>[1]</sup>. Angenommen, Leben ist intelligent designt worden, dann war der Designer ziemlich schlecht in seinem Job: Problemstellen wie der Blinddarm, <a href=";filetimestamp=20101102100001">Wale mit Beinknochen&shy;ansätzen</a>, <a href="">Fehler bei der DNA-Kopie führen zu Krebs-Erkrankungen</a> usw. Parasiten und überhaupt <a href="">Wurmerkrankungen</a> halte ich auch für keine gute Idee. Schon gewusst, dass <a href="ürmer">Fadenwürmer zu den artenreichsten Stämmen der Tierwelt</a> gehören?</p> <blockquote> <p>Doch die eigentliche Idee wird einfach einer intelligenzlosen Evolution zugeschrieben. Klingt das einleuchtend? Wenn schon hinter der Nachahmung ein intelligenter Kopf stecken muss, wie ist es dann erst mit dem Original?</p> </blockquote> <cite>Seite 15</cite> <p>Wenn man diese Argumentationsreihe von der theologischen Seite aus fortsetzt, landen wir bei <em>„Wer hat Gott erschaffen? Und wer hat den Schöpfer von Gott erschaffen?“</em> Ich sehe keinen Grund, warum ein Konzept aus der Natur, das zu einer Erfindung inspirierte, einen intelligenten – und damit denkenden – Schöpfer voraussetzt.</p> <h3>Steckt Planung dahinter?</h3> <blockquote> <p><strong>Kopie:</strong> Manche Verkehrsflugzeuge haben ein Autopilotsystem. […] Der Computer (…) ist so groß wie eine Kreditkarte.<br /> <strong>Original:</strong> Das Gehirn des Monarchfalters ist nicht größer als die Spitze eines Kugelschreibers. Trotzdem findet dieser Schmetterling den Weg von Kanada in ein 3000 Kilometer entferntes Waldstück in Mexiko. […]</p> </blockquote> <cite>Seite 17</cite> <p>Der Gedankengang der Techniker war dann wohl: <em>„Oooh, der Computer sollte so klein wie möglich sein? Genial, wären wir nieee drauf gekommen! Gut, dass wir uns das Gehirn dieses Falters angeschaut haben.“</em></p> <h3>Evolution – Mythen und Fakten</h3> <blockquote> <p>Beispielsweise kann man Hunde gezielt so züchten, dass sie irgendwann kürzere Beine oder längere Haare haben als ihre Vorfahren. Bei solchen leichten Veränderungen spricht man von „Mikroevolution“.</p> </blockquote> <cite>Seite 18</cite> <p><a href="">„Mikroevolution“</a> wird als Begriff vor allem von Kreationisten und Anhängern von Intelligent Design verwendet. Warum? „Mikroevolution“ – z.B. in Form von Tierzucht und Antibiotika-immunen Bakterien – lässt sich 100-prozentig nicht leugnen ohne als Depp dazustehen.</p> <blockquote> <p><strong>Mythos 1: Mutationen sind die Ausgangsbasis fur die Entstehung neuer Arten.</strong> […] Was brachten über 40 Jahre intensive Forschung? „Der Versuch, durch Bestrahlung [die Mutationen hervorruft] ertragreichere Sorten zu züchten“, sagt der Forscher Peter von Sengbusch, „erwies sich trotz eines großen finanziellen Aufwands weit&shy;gehend als Fehlschlag.“ […]</p> </blockquote> <cite>Seite 19/20</cite> <p>Hier werden „40 Jahre intensiver Forschung“ mehrere Millionen Jahren gegen&shy;über&shy;gestellt. Aber interessanterweise wird zitiert: „Die allermeisten Mutanten … waren lebensunfähig oder anfälliger als Wildarten.“ Die „allermeisten“, so so. Das heißt, es traten also auch Mutationen auf, die sich nicht unbedingt als nachteilig erwiesen? Wenn nun diese neutralen Mutationen sich fortführen, eines Tages eine Veränderung im Ökosystem auftritt und daraus für die Mutanten ein Vorteil entsteht, dann wird die Mutation der neue Standard.</p> <blockquote> <p>„Durch Mutation kann aus einer Art keine völlig neue entstehen.“ [Lönig]</p> </blockquote> <cite>Seite 20</cite> <p>In einem Experiment innerhalb weniger Jahrzehnte? Vermutlich nicht, nein. Wie hat Herr Lönig seine Aussage gemeint? Eine neue Art entsteht auch nicht mal eben schwub-di-wub nach ein paar Mutationen. Es ist ein langwieriger Prozess sich aufsummierender Mutationen. <a href="">Es gibt in diesem Sinne keine klaren Grenzen, auf die man mit dem Finger zeigen kann.</a></p> <blockquote> <p><strong>Mythos 2: Durch natürliche Auslese entstehen neue Arten.</strong> […] Tatsache ist: Aus den Darwinfinken entsteht nichts wirklich Neues. Sie sind und bleiben Finken.</p> </blockquote> <cite>Seite 20/21</cite> <p>In der Tat trat kein großer evolutionärer Schritt ein. Hier wird wieder einmal der Hase-aus-dem-Zauberhut-Trick durch Evolution erwartet<sup>[2]</sup>.</p> <blockquote> <p>Und dass sie sich untereinander kreuzen können, lässt Zweifel an den Methoden aufkommen, mit denen manche Evolutionsbiologen Arten bestimmen.</p> </blockquote> <cite>Seite 21</cite> <p>Es wäre interessant zu wissen, ob der Autor Löwen und Tiger oder Pferde und Esel als verschiedene Arten bezeichnen würde. Denn beide können Nachwuchs haben: <a href="">Liger</a> und <a href="">Maultiere</a> bzw. <a href="">Maulesel</a>.</p> <blockquote> <p>(…) stellen selbst renommierte Forschungsinstitute die Fakten nicht immer objektiv dar.</p> </blockquote> <cite>Seite 21</cite> <p>Das Problem ist, dass es unterschiedliche Definitionen gibt, was als eine „Art“ einzustufen ist. <a href="">Es herrscht kein allgemeingültiger Konsens.</a></p> <blockquote> <p><strong>Mythos 3: Fossilien belegen makro-evolutionäre Veränderungen.</strong> […] Diese umfangreiche und detaillierte Dokumentation legt nach Ansicht vieler Wissen&shy;schaftler nahe, dass alle Hauptgruppen der Tiere plötzlich aufgetreten und nahezu unverändert geblieben sind. Viele Arten sind genauso abrupt verschwunden, wie sie erschienen sind.</p> </blockquote> <cite>Seite 22</cite> <p>Mein erster Kommentar dazu: <a href="">[citation needed]</a></p> <p>Mein zweiter Kommentar dazu: <a href="">Weder traten alle Tier-Hauptgruppen zur selben Zeit auf, noch blieben sie unverändert.</a></p> <p>Nicht alle Überreste eines jeden Lebewesens, das jemals die Welt bewanderte, wurden präserviert. Dafür müssen diese schon in den entsprechenden Umständen gestorben sein, wie z.B. im Sumpf untergegangen sein. Sonst wurden die Überreste von anderen Lebewesen gefressen, wurden durch Natureinflüsse zerstört (Vulkanausbruch, ein Stein fällt drauf und zermalmt alles etc.) oder haben sich einfach im Laufe der Zeit zersetzt.</p> <blockquote> <p>Letzten Endes ist also auch die Evolution eine „Glaubenssache“.</p> </blockquote> <cite>Seite 22</cite> <p>Es gibt de facto <a href="">eine Vielzahl an Funden und Beobachtungen</a>, die von der Evolutions&shy;theorie erklärt werden und somit für sie sprechen. Diskussionen und Anpassungen der Theorie sind möglich. Neue Entdeckungen werden berücksichtigt. Das ist kein Glaube. Eine wissen&shy;schaftliche Theorie ist auch kein haltloses Gedankenspiel, sondern eine durchdachte Erklärung, die am besten die vorliegenden Fakten beschreibt. Siehe auch „Gravitations&shy;theorie“. Ich muss nicht an die Erdanziehungskraft glauben, um mit beiden Beinen auf dem Boden zu stehen.</p> <h3>Wissenschaft und Schöpfungsbericht</h3> <blockquote> <p>Als Moses zum Beispiel das gesamte schöpferische Wirken Gottes beschrieb (…)</p> </blockquote> <cite>Seite 26</cite> <p>Woher hat Moses eigentlich die ganze Geschichte? Wann und wie erfuhr er davon? Soweit meine Nachforschungen gehen, gibt kein biblischer Text Auskunft darüber.</p> <blockquote> <p>Was der Bericht in 1. Mose über die Entstehung des Universums und das Auftreten von Leben auf der Erde sagt, stimmt vielmehr im Wesentlichen mit dem aktuellen Stand der Forschung überein. […] Bemerkenswerterweise machte Moses aber schon in alter Zeit wissenschaftlich korrekte Aussagen.</p> </blockquote> <cite>Seite 28</cite> <p>1. Der Bericht Moses, wie er in der Broschüre dargelegt wird, ist eine recht freie Inter&shy;pretation des eigentlichen Bibel-Textes. Denn selbst den Autoren dürfte bewusst ge&shy;wesen sein, dass es sonst viel zu offen&shy;sichtlich Unsinn ist. Das ist doch die Sache: Würde man die Texte wörtlich nehmen und nicht interpretieren, würde jeder sie sofort ver&shy;werfen (außer Kreationisten). Aber wie kann ein religiöser Text ein absolutes Wissen für sich beanspruchen, wenn er interpretiert werden muss? Und viele Leute dies ganz unterschiedlich anstellen?</p> <p>2. Als Argument für die Bibel wird jetzt also angeführt, dass sie der Wissenschaft gar nicht so sehr widerspreche. Während ein paar Seiten vorher gesagt wurde, alles was aus der Forschung nicht mit der Bibel übereinstimme, sei Unsinn. Dazu gönnen wir uns einen relevanten <a href="">Comic-Strip von SMBC.</a></p> <blockquote> <p>Nur einer konnte Moses ein Wissen geben, das seiner Zeit so weit voraus war (…)</p> </blockquote> <cite>Seite 28</cite> <p>Wo sagt Moses oder sonst eine Person der Zeit, woher er sein Wissen hat? Nirgendwo. Und das, was hier so als „Moses Wissen“ hochgehalten wird, ist die Interpretation des Gesagten durch Menschen der Gegenwart. Nachdem besagter Text erst einmal aus einer alten Sprache übersetzt wurde.</p> <h3>Spielt es eine Rolle, was ich glaube?</h3> <blockquote> <p>„Aus unserem modernen Verständnis der Evolution folgt …, dass es keinen letzten Sinn des Lebens gibt.“</p> </blockquote> <cite>Seite 29</cite> <p>Das Zitat stammt aus dem Artikel <a href="">Naturwissenschaftler und Religion in Amerika</a> von Edward J. Larson und Larry Witham, erschienen im „Spektrum der Wissenschaft“ November 1999. <strong>Aber</strong> dabei handelt es sich auch wiederum um ein Zitat im Artikel selbst. Die Aussage ist zurück&shy;zuführen auf William Provine und entstammt einem etwas längeren Dialog pro/contra Intelligent Design<sup>[3]</sup>. Nimmt man noch ein paar Sätze dazu, liest sich das so:</p> <blockquote> <p>There are no gods, no purposes, and no goal-directed forces of any kind. […] There is no <strong>ultimate</strong> foundation for ethics, no <strong>ultimate</strong> meaning in life, and no free will for humans, either. […] <strong>Life may have no ultimate meaning, but I sure think it can have lots of proximate meaning.</strong></p> </blockquote> <cite>William Provine, [3]</cite> <p><a href="">Warum muss es ein Alles-oder-Nichts-Spiel sein?</a> Nur, weil Leben nicht für ein ultima&shy;tives Ziel erschaffen wurde, heißt das doch nicht, dass Leben nie einen Sinn für sich finden kann.</p> <p>Aber es geht ohnehin ein wenig am Thema vorbei. <strong>Evolution soll einem nicht den Sinn des Lebens erklären</strong>, sondern das Leben selbst auf einer biologischen Ebene. Evolutions&shy;lehre ist keine Religion, sondern eine Wissenschaft. Daraus kann man Schlüsse ziehen, wie jene von W. Provine, aber es ist kein Argument gegen Evolution.</p> <p>Die nächsten Absätze in der Broschüre schmeißen alles was an rationaler Argumen&shy;tation übrigblieb über Bord und schieben die Diskussion auf eine emotionale Schiene.</p> <blockquote> <p>Die Bibel macht jedoch eine Aussage über Gott, die von entscheidender Bedeutung ist. Sie sagt: „Bei dir ist der Quell des Lebens“ (Psalm 36:9).</p> </blockquote> <cite>Seite 29</cite> <p>Sind wir jetzt bei der Lebensursprungs-Debatte? Wenn ja, dann ist „Weil es in der Bibel steht“ kein gutes Argument.</p> <blockquote> <p>Millionen Menschen rund um den Globus sind davon überzeugt, dass es enorm bereichert, sich mit Gott zu beschäftigen und so zu leben, wie er es möchte (Johannes 17:3). So ein Glaube basiert nicht auf reinem Wunschdenken, sondern auf Tatsachen.</p> </blockquote> <cite>Seite 29</cite> <p>Das „wie [Gott] es möchte“ finde ich ebenfalls bedenklich. Bei Moses wurde der Text offensichtlich interpretiert. Ist dies bei anderen Bibel-Texten nicht notwendig? Warum? Und wenn doch, woher soll man auch nur halbwegs sicher wissen, wie „Gott es möchte“? Es gibt so viele verschiedene Zweige im Christentum – und nicht nur dort –, weil jeder einen Text anders interpretiert oder übersetzt.</p> <p>Was für Tatsachen? Das wird nicht weiter ausgeführt. Dass millionen Menschen an etwas glauben, macht es nicht automatisch zu einer Wahrheit.</p> <hr /> <h3>Abschließende Bemerkungen meinerseits</h3> <p>Also, mein Hausbesuch der Zeugen Jehovas, die Broschüre hat mich nicht überzeugt. Aber immerhin habe ich sie gelesen, dabei einige der Quellen überprüft und mich kritisch mit den getroffenen Aussagen beschäftigt. Dabei habe ich einiges gelernt, was sich in meinem Artikel wiederfindet.</p> <p>Eines hat mich aber erschreckt: Ich dachte die für Kreationismus üblichen Hirngespinste und Evolutionsgegner wären ein hauptsächlich amerikanisches Problem. Ich ging auch davon aus, Intelligent Design würde Evolution akzeptieren – von wegen „Gott hat mit dem Finger in der Ursuppe gerührt“. Scheinbar nicht, oder es gibt auch da verschiedene Ausprägungen.</p> <p>Dies dürfte mein bisher längster Artikel sein, mit dem meisten Rechercheaufwand und dem für meinen Blog untypischsten Thema. Es wird wahrscheinlich auch der am wenigst-beachtete werden, aber das ist okay. Es war mir einfach ein Bedürfnis ihn zu verfassen, nachdem ich die Broschüre gelesen hatte.</p> <hr /> <p class="annotation">[1] <a href=""></a></p> <p class="annotation">[2] <a href=""></a></p> <p class="annotation">[3] <a href="">„Darwinism: Science or Naturalistic Philosophy?“ – A debate between William B. Provine and Phillip E. Johnson at Stanford University, April 30, 1994</a></p> Der erste Selbstbau-PC Sun, 19 Aug 2012 19:56:00 +0200 Seba Informatik <p class="illu"><img style="width: 600px; height: 360px;" src="" alt="PC" /></p> <p>Lang hat es gedauert. Endlich habe ich einen neuen PC. Nachdem ich zweimal Fertigsysteme zurückgeschickt habe, entschloss ich mich, selbst Hand anzulegen. Dazu musste ich mich nur erst einmal informieren, da meine Hardware-Kenntnisse nur knapp über 0 schwebten. So habe ich mich durch Reviews, <a href="">Empfehlungen</a> und <a href="">Info-Grafiken</a> gearbeitet und mir <a href="">ein zwei&shy;stün&shy;diges Video angeschaut</a>, wie man die Teile dann zusammenbaut.</p> <!--more--> <p>Schließlich kam der große Moment: Eingeschaltet und das <a href="">EFI</a> lud, wunderbar! Die Festplatte gab Klick&shy;laute von sich und wurde nicht erkannt. Reklamation und weiter ging es einige Tage später.</p> <p>Neue Festplatte ist da. Wenig euphemistisch baute ich sie ein, doch – Tada! – sie funktioniert. Also konnten die Betriebssysteme und Software folgen. Als ich dann Spiele ausprobierte, stutzte ich. Die Grafikkarte kam auf 60°C beim Browsen und 90°C (Lüfter auf 90%) nach 5&nbsp;Minuten Spiel (Minecraft in "Balanced"-Modus und Bastion). Also Reklamation und weiter ging es eine Woche später. Zu diesem Zeitpunkt war ich extrem angepisst; beste <em>Ich-habe-keinen-Bock-mehr-auf-den-Scheiß!</em>-Stimmung.</p> <p>Vor dem Einbau schaute ich die Ersatz-Grafikkarte noch einmal streng an. Ein Kabel hing leicht in den Raum zwischen Karte und Lüfter. Entweder hätte es den Lüfter blockiert oder es wäre mit der Zeit kaputtgeschabt worden. Mit ein wenig Kabelbinder war dem zum Glück leicht beizukommen. Die Temperaturen liegen nun in einem guten Bereich<sup>[1]</sup>.</p> <h3>Eckdaten (grob)</h3> <p>Weder habe ich vor zu overclocken, noch plane ich Grafikkarten in SLI zu verwenden. Aus&shy;reich&shy;ender Support von Linux ist zudem ein Muss.</p> <ul> <li><strong>Motherboard:</strong> ASRock Z68 Extreme3 Gen3</li> <li><strong>CPU:</strong> i5 2400</li> <li><strong>GPU:</strong> GTX 560 Ti</li> <li><strong>RAM:</strong> 8GB 1333MHz</li> <li><strong>HDD:</strong> WD Caviar Black 500GB</li> </ul> <h3>Gelerntes</h3> <p>Man kann CPUs <strong>undervolten</strong>. Weniger Saft bedeutet weniger Wärme. Für die Hardware be&shy;steht dabei angeblich kein Risiko und schlimmstenfalls schmiert der PC unter Last ab. Dann setzt man die Einstellung einfach wieder eine Stufe zurück. Ich bin jetzt bei einem Offset von -1.125V, was mir ca. -3°C bringt.</p> <p>Man kann <strong>Arbeitsspeicher übertakten</strong> und es gibt Modelle mit Heatsinks für bessere Wärmeableitung. Ich bezweifel ganz ehrlich, dass man außerhalb von Benchmarks eine Verbesserung beobachten kann.</p> <p>Es gibt <a href="">Grafikkarten, die teurer sind</a> als der PC, den ich mir nun zusammengestellt habe. Und es gibt Leute, die kaufen sich gleich zwei und betreiben sie in SLI.</p> <h3>Fazit</h3> <p>Ganz so leise wie mein alter ist er nicht. Damit habe ich auch nie gerechnet, schon allein weil im alten die Grafikkarte noch passiv gekühlt war und der neue über zwei Gehäuselüfter ver&shy;fügt. Aber ich habe mich schnell an das leichte Summen gewöhnt – für das ich erst einmal die Lüfter-Geschwindigkeiten herunterdrehen musste, die standard&shy;mäßig auf „Full On“ standen.</p> <p>Wirklich gespart habe ich durch das Zusammenbauen nicht. Dafür steckt das drin, was ich wollte. Und als Informatiker habe ich auch auf diesem Gebiet endlich mal ein wenig Erfahrung gesammelt.</p> <hr /> <p class="annotation">[1] Ungefähr 50 bis 60°C bei 40 bis 50% Lüftergeschwindigkeit nach knapp 1&nbsp;Stunde Minecraft/Bastion. Wirklich höher ging es danach nicht mehr. Im Normalbetrieb sind es recht konstant 42°C bei 30%.</p> <p class="annotation">Einbau der CPU: <em>„Habe ich die CPU richtig herum draufgelegt? Nochmal nachschauen. Ja, okay. Dann schließe ich jetzt … Liegt die wirklich richtig drauf? Ah, okay, war richtig. Das lässt sich aber schwer schließen. Ohje&shy;ohje&shy;ohje&shy;ohje… Okay, ist zu.“</em></p> <p class="annotation">Festschrauben des Motherboards: <em>„Und jetzt hier die … Fuck, mir ist die Schraube runtergefallen auf das Board! Hoffentlich hat das nichts zerkratzt! Jetzt ganz vorsichtig aufsammeln … komm her, du! Gah. Gah! Okay.“</em></p> Blog? Was für ein Blo… ah, richtig. Neuer Eintrag: Musik-Empfehlungen Thu, 16 Aug 2012 22:00:00 +0200 Seba Musik <p>Ich würde ja zu jedem Song am liebsten das Video einbinden, aber das würde wohl zu viel für den Eintrag. Merkt euch einfach, dass hier keine Rangordnung herrscht und jeder Link hand&shy;verlesen ist. Im Prinzip gehört hier alles zu meinen Favoriten. Eine weitere Gemeinsamkeit gibt es noch: Alle Lieder stehen kostenlos zum Download bereit.</p> <h3>Instrument- und Orchestrales</h3> <iframe width="600" height="338" src="" frameborder="0" allowfullscreen></iframe> <p>Das war <a href="">Makkon</a> mit <a href="">Deae Lunae</a>. Makkon hat in seinem YouTube-Channel noch mehr orchestrale Werke, ähnlich diesem. Aber dieses hier ist deutlich mein Favorit. Weitere Reinhör-Empfehlungen aus der Kategorie Instrumental/Orchestral sind:</p> <ul> <li><a href=""><strong>Scratching Harmony</strong> – AspectOfTheStorm</a>. Mir ist gerade aufgefallen, dass ich noch nie seinen Channel durchgegangen bin. Großartig!</li> <li><a href=""><strong>Zenith</strong> – David Gruwier Larsen</a>. Alles andere als aufregend. Seine Lieder bauen eine sehr angenehme, ruhige Atmosphäre auf.</li> <li><a href=""><strong>Celestia's Sun Eternal</strong> – Woody</a>. Noch so einer, bei dem es sich lohnt, einmal durch den Channel zu stöbern.</li> <li><a href=""><strong>Nightmare Night (Orchestral Version)</strong> – StormWolf</a></li> </ul> <!--more--> <h3>Remix, Electronic, Rock</h3> <iframe width="600" height="338" src="" frameborder="0" allowfullscreen></iframe> <p><a href="">Beyond Her Garden</a> von <a href="">WoodenToaster</a>. Besonders wunderbar mit Kopfhörern; oder einem guten Lautsprechersystem, über das ich nicht verfüge. Wenn es darum geht, Lieder einem Genre zuzu&shy;ordnen bin ich übrigens eine ziemliche Katastrophe. Man sehe es mir nach. Ein paar weitere, völlig andere Lieder:</p> <ul> <li><a href=""><strong>Sleep</strong> – Echelon</a>. Ich versuche ja Dubstep zu mögen, aber das Genre macht es mir nicht leicht. Nichtsdestotrotz, nach fünfmaligen Hören gefällt mir dieses Lied nun recht gut.</li> <li><a href=""><strong>Flutterwonder</strong> – PinkiePieSwear</a>. Fällt das überhaupt noch unter den Begriff „Remix“? Vom Original-Lied aus der Show stammen eigentlich nur noch die Gesangs-Fetzen.</li> <li><a href=""><strong>The Standard Model</strong> – SoGreatandPowerful</a></li> <li><a href=""><strong>Between Fairytales and Happy Endings</strong> – PrinceWhateverer (ft. Liquid Cobalt and ISMBOFepicly)</a>. Welches Lied passt nicht zu den an&shy;deren seines Abschnittes? Richtig, das hier ist Rock. Best enjoyed loud.</li> </ul> <h3>Katawa Shoujo Soundtrack</h3> <p class="illu forced"><img style="width: 600px; height: 276px;" src="" alt="Katawa Shoujo OST Cover" /></p> <p>Der Soundtrack zur Visual Novel „Katawa Shoujo“. Die meisten Titel sind Hintergrundmusik und als solche wirklich wunderbar. Das Album lasse ich gerne mal nebenbei laufen, wenn ich an etwas arbeite oder Minecraft spiele. <a href="">Hier findet sich der Download.</a> Oder wer nicht gleich die Katze im Sack <del>kaufen</del> herunter&shy;laden möchte, kann erstmal <a href="">in die Playlist auf YouTube</a> hinein&shy;schnuppern.</p> <p>Die VN selbst kann ich auch empfehlen, wenn man nicht allzu lesefaul ist. Im Ernst: Wer sich nur schnell durchklicken würde, sollte es gleich sein lassen.</p> <hr /> <p class="annotation"><a href="">Bonus song!</a> No need to thank me.</p> Zusatzstory zum Grafiktreiber-Drama: Broken pipe Fri, 22 Jun 2012 18:07:00 +0200 Seba Informatik <p class="illu"><img style="width: 600px; height: 800px;" src="" alt="Could not write bytes: Broken pipe" title="Ich dokumentiere meine eigene Torheit in der Hoffnung, jemand mit dem gleichen Problem findet hier die Lösung." /></p> <p>So geschehen nach dem Wechsel vom Nouveau-Treiber zum aktuellen NVIDIA-Treiber. Direkt nach Auswahl des Betriebssystems im Boot-Menü war der Bildschirm schwarz und darauf stand nur „Could not write bytes: Broken pipe“. Ich habe schon den Rest des Tages für eine Neuinstallation und -einrichtung draufgehen sehen.</p> <p>Dazu kam es nicht. Dank einer panisch eingeworfenen Live-CD konnte ich am einzigen Datei&shy;ort nachschauen, von dem ich weiß, dass er mit dem Grafiktreiber zu tun hat: <code>/etc/X11/</code>. Da lag dann auch meine <em>alte</em> <code>xorg.conf</code> in der dick und fett stand <strong><code>Driver "nouveau"</code></strong> …</p> <p>Datei gelöscht. Neugestartet. Geht wieder. Ich liebe Live-CDs.</p> Die System-Upgrade-Odyssee ODER Ringkampf mit einem Schuppentier Mon, 18 Jun 2012 01:30:00 +0200 Seba Informatik <p class="illu"><img style="width: 600px; height: 400px;" src="" alt="Pangolin" /></p> <p>Vor ein paar Wochen hielt ich es für eine gute Idee, nun doch einmal mein Ubuntu-Betriebs&shy;system zu aktualisieren. Während bei mir noch <em>Natty Narwhal</em> (11.04) lief, war bereits <em>Precise Pangolin</em> (12.04) im Umlauf. Mein Ziel war es also – ohne völlige Neuinstallation –, <a href="">von Natty auf Oneiric auf Precise</a> zu aktualisieren. So nahm das Unheil seinen Lauf.</p> <!--more--> <h3>1. Hürde: Oneiric -> Precise</h3> <blockquote> <p><code>ERROR Dist-upgrade failed: 'E:Fehler: Unterbrechungen durch pkgProblemResolver::Resolve hervorgerufen; dies könnte durch zurückgehaltene Pakete verursacht worden sein.'</code></p> </blockquote> <p>Also … irgendetwas Installiertes steht wie eine Kuh auf den Gleisen? Eine Log-Datei von Interesse zum versuchten Upgrade ist zu finden unter <code>/var/log/dist-upgrade/apt.log</code>. Das war allerdings für mich Neuland. Das häufig auftauchende Schlüsselwort „Broken“ schien aber eine gute Fährte zu sein. Interessant wurde dann folgende Entdeckung:</p> <blockquote> <p><code>Broken libopencv...<br /> &nbsp;&nbsp;Considering libcv...<br /> Broken libcv...<br /> &nbsp;&nbsp;Considering libopencv...</code></p> </blockquote> <p>Da dreht sich doch etwas im Kreis? Tatsächlich, nachdem ich libopencv und libcv deinstalliert hatte, lief das Upgrade auf Precise.</p> <h3>2. Drama: Der Grafiktreiber</h3> <hr /> <p><strong>Update vom 18.06.12:</strong> Mit dem NVIDIA-Treiber 302.17 scheint das Problem behoben zu sein. Dafür am besten das <a href="">X Updates-PPA</a> einbinden.</p> <hr /> <p><strong>Update vom 19.06.12:</strong> Vielleicht auch nicht. Vielleicht habe ich auch einfach nur Pech und es liegt noch mehr im Argen als nur der Grafiktreiber.</p> <hr /> <p><strong>Update vom 29.06.12:</strong> Weiterhin Freezes. Bin wieder bei Nouveau.</p> <hr /> <p><strong>Update vom 30.06.12:</strong> Neverending story. Auch mit Nouveau Freezes. Mit dem Linux-Kernel 3.2 ging es wohl bergab. Hoffentlich bleibt mir der Scheiß bei meinem neuen Rechner erspart. Was ich noch probieren könnte, ist GRUB als Boot-Option <code>intel_iommu=off</code> mitzugeben. Das hat wohl bei Leuten mit ähnlichen Problemen geholfen.</p> <hr /> <p>Zuerst fiel mir nur auf, dass es in Unity Darstellungsfehler gab – verzerrte Desktopsymbole, verflackernter Hintergrund bei transparenten Flächen. Ähnliches fand sich dann aber auch mit der GNOME Shell. Trat ein Darstellungsfehler erst auf, spielte sich der Rest auch nur noch in Rucklern ab. Auch komplette Freezes kamen vor, bei denen nur noch ein Kaltstart half.</p> <p>Was nun, wie ich vermute, die Ursache war: Die Kombination aus neuem Linux-Kernel + aktuellem NVIDIA-Treiber + meine uralte NVIDIA-Grafikkarte. <a href="">Auf jeden Fall sind Probleme mit dem NVIDIA-Treiber bekannt.</a></p> <p>Mein erster Ansatz war es, die noch neuere Version 295.53 aus dem <a href="">X Updates-PPA</a> zu nehmen, anstatt der Version 295.44 aus dem Standard-PPA. Nun, es hat nullkommanichts gebracht.</p> <p>Schließlich wechselte ich zum OpenSource-Treiber „Nouveau“. Jetzt läuft alles relativ stabil, aber leider mit starken Abstrichen. Auch nur halbwegs anspruchsvolle 3D-Anwendungen kann ich vergessen – Minecraft lief zuletzt mit OptiFine, Sichtweite „Short“ und kleinem Fenster mit 20&nbsp;FPS.</p> <h3>Währenddessen Gelerntes</h3> <ul> <li><em>Unity</em> und <em>GNOME Shell</em> können nicht in friedlicher Koexistenz neben&shy;einander liegen. Während Unity <em>Compiz</em> als Fensterverwaltung benötigt, startet GNOME Shell erst gar nicht, wenn Compiz läuft.</li> <li>Mit <code>gnome-session-quit --force-logout</code> kann man sich abmelden. Der Login-Screen ist der sichere Hafen, der (fast) immer funktioniert.</li> <li>Mit <code>sudo service lightdm restart</code> startet man die Desktopverwaltung neu. In der Regel wird man dadurch auch ausgeloggt und landet wieder beim Login-Screen.</li> <li>Grafiktreiber sollte man wirklich nicht einfach per <code>apt-get remove</code> deinstallieren. Das birgt viel Unheil. Stattdessen über die GUI „Zusätzliche Treiber“ gehen.</li> </ul> <hr /> <p class="annotation">&#x95; Im X Updates-PPA liegt mittlerweile der NVIDIA-Treiber 302.17. Ich muss mich mal informieren, ob damit das Problem behoben sein könnte.</p> <p class="annotation">&#x95; Weder GNOME Shell noch Unity überzeugen mich so richtig. Dass die GNOME Shell quasi nur aus JavaScript und CSS besteht, finde ich auch fragwürdig. Ich meine: JavaScript! – ich bitte euch!</p> <p class="annotation">&#x95; Um dem auch etwas Positives abzugewinnen: Mein Linux-Fu ist wieder leicht stärker geworden.</p> <p class="annotation">&#x95; Oh, aber 720p-Videos lassen sich ohne Murren abspielen. Anime, yey~.</p>