<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JK ~ IT &#38; Technik Blog</title>
	<atom:link href="http://www.juliankraemer.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.juliankraemer.de</link>
	<description>privater IT und Technik WebLog von Julian Krämer mit unterschiedlichen Themen im Bereich IT und Elektronik mit Tipps &#38; Tricks, Tutorials uvm.</description>
	<lastBuildDate>Fri, 06 Jan 2012 01:32:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Passwörter im Internet sicher speichern</title>
		<link>http://www.juliankraemer.de/2012/01/06/passworter-im-internet-sicher-speichern/</link>
		<comments>http://www.juliankraemer.de/2012/01/06/passworter-im-internet-sicher-speichern/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 01:28:41 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Webserver]]></category>
		<category><![CDATA[Apache2]]></category>
		<category><![CDATA[Hash]]></category>
		<category><![CDATA[MD5]]></category>
		<category><![CDATA[password hardening]]></category>
		<category><![CDATA[Passwort]]></category>
		<category><![CDATA[Passwort-Härtung]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Rainbow-Table]]></category>
		<category><![CDATA[Salt]]></category>
		<category><![CDATA[SHA1]]></category>
		<category><![CDATA[SHA512]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Verschlüsselung]]></category>

		<guid isPermaLink="false">http://www.juliankraemer.de/?p=444</guid>
		<description><![CDATA[Mit Erschrecken stelle ich immer wieder fest, dass viele Internetseiten die Sicherheit von Benutzerkonten hinsichtlich der Passwörter vernachlässigen. Der schlimmste Fall betrifft eine recht populäre Internetseite mit angekoppeltem Online-Shop, die die Passwörter sogar im Klartext zu hinterlegen scheint. Hat man das Passwort vergessen wird es nämlich im Klartext per E-Mail zugesendet, was ein enormes Sicherheitsrisiko [...]]]></description>
			<content:encoded><![CDATA[<p>Mit Erschrecken stelle ich immer wieder fest, dass viele Internetseiten die Sicherheit von Benutzerkonten hinsichtlich der Passwörter vernachlässigen. </p>
<p>Der schlimmste Fall betrifft eine recht populäre Internetseite mit angekoppeltem Online-Shop, die die Passwörter sogar im Klartext zu hinterlegen scheint. Hat man das Passwort vergessen wird es nämlich im Klartext per E-Mail zugesendet, was ein enormes Sicherheitsrisiko bedeutet. Zum einen können die Datenbestände des Anbieters in falsche Hände gelangen, zum anderen birgt der unverschlüsselte Versand des Passwortes weitere Risiken (z.B.: <a href="http://de.wikipedia.org/wiki/Man-in-the-middle-Angriff" title="Wikipedia: Man-in-the-middle-Angriff">Man-In-The-Middle Angriff</a>). Man kann sich leicht vorstellen, wie viele Benutzer das dortige Passwort auch auf anderen Internetseiten verwenden und was das im Falle von Datendiebstahl bedeuten kann&#8230; Einen Hinweis sucht man auf der Internetseite ebenfalls vergebens.</p>
<p>Leider stoße ich sogar bei etwas besser abgesicherten Internetseiten häufig über sehr niedrige Begrenzungen der Passwortlänge. Aus welchem Grund darf ein Passwort nur 10 oder 20 Zeichen lang sein? Das Passwort wird ohnehin verschlüsselt und ist damit immer gleich lang (z.B.: 64 Bytes bei MD5). Einzig die möglichen Performance-Verluste seitens des Webservers fallen mir dabei als Grund ein. Daraufhin bastelte ich mir kurzerhand ein kleines PHP-Script um Benchmarks für unterschiedlich lange Zeichenketten aufzuzeichnen. Dabei werden die Hash-Verfahren MD4, MD5, SHA1, SHA256 und SHA512 jeweils mit einer 32, 64, 160 und 320 Bytes langen Zeichenkette berechnet. Um auf einigermaßen aussagekräftige Werte zu kommen, wird jede Berechnung 10.000 mal durchgeführt und der Mittelwert gebildet. Als Ergebnis der Untersuchungen kam ich zu der Erkenntnis, dass die Hash-Verfahren MD4 und MD5 die Zeichenkette in der kürzesten Zeit berechnen konnten. Die Länge der Zeichenkette wirkt sich dabei zwar auf die Dauer der Berechnung aus, aber nicht sehr stark: während sich die Länge verzehnfacht, benötigen die beiden Hash-Verfahren lediglich die rund 1,4-fache Zeit.<br />
Etwas anders sieht es bei SHAx aus. Die Leistung von SHA1 ist noch ungefähr vergleichbar mit MD4/MD5. Die Berechnung mit SHA256 dauert aber schon etwas länger und bei der zehnfachen Länge der Zeichenkette wird auch schon die doppelte Zeit benötigt. Am längsten dauert die Berechnung mit SHA512, nämlich rund drei bis vier mal so lange im Vergleich zu MD4/MD5. Die Proportionen verhalten sich hier wie bei SHA256.</p>
<p>Ergebnisse: <a href="http://www.juliankraemer.de/hashbenchmark.txt" title="Ergebnisse Hash Benchmark">hashbenchmark.txt</a></p>
<p>Was bedeutet das nun? Obwohl sich die Zeiten teilweise deutlich unterscheiden, kann ich mir kaum vorstellen, dass ein Webserver durch längere Berechnungen deutlich an Performance verliert. Im übrigen bin ich der Meinung, dass auch diese Umstände bei der Auslegung der Hardware des Servers berücksichtigt werden sollten! Übrigens sind schnelle Hash-Verfahren nicht unbedingt die besten, denn auch <a href="http://de.wikipedia.org/wiki/Rainbow_table" title="Wikipedia: Rainbow Table">Rainbow-Tables</a> lassen sich damit schneller erstellen, wovon die Cracker profitieren.</p>
<p>Eine Begrenzung der Passwortlänge würde ich erst ab mindestens 50 Zeichen ansetzen und als Hash-Verfahren SHA256 oder SHA512 verwenden. Weiterhin ist die Verwendung von <a href="http://de.wikipedia.org/wiki/Salt_(Kryptologie)" title="Wikipedia: Salt">Salts</a>, die vor, hinter oder/und in das Passwort eingefügt werden, zu empfehlen. Damit lassen sich die Passwörter künstlich in die Länge ziehen und sogar Wörter aus Wörterbüchern so verschlüsseln, dass Angriffe mit Rainbow-Tables erfolglos bleiben. Eine weitere sinnvolle Methode ist das mehrfache Berechnen eines Hashes. So wird die resultierende Zeichenkette nach dem Verschlüsseln des Passwörtes wiederum verschlüsselt. Dieser Vorgang kann beliebig oft wiederholt werden, was wiederum die Rückverfolgung über Rainbow-Tables erschwert.</p>
<p>Den abschließenden Appell auf jeder Internetseite ein anderes Passwort zu verwenden kann so manch einer vielleicht nicht mehr hören, möchte ich an dieser Stelle der Vollständigkeit halber erwähnen! </p>
]]></content:encoded>
			<wfw:commentRss>http://www.juliankraemer.de/2012/01/06/passworter-im-internet-sicher-speichern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inhalte als Vektoren aus PDF-Dateien ausschneiden</title>
		<link>http://www.juliankraemer.de/2011/09/20/inhalte-als-vektoren-aus-pdf-dateien-ausschneiden/</link>
		<comments>http://www.juliankraemer.de/2011/09/20/inhalte-als-vektoren-aus-pdf-dateien-ausschneiden/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 20:34:15 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Office]]></category>
		<category><![CDATA[Acrobat Reader]]></category>
		<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[Paint]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[PDFCreator]]></category>
		<category><![CDATA[Vektoren]]></category>
		<category><![CDATA[Vektorgrafik]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.juliankraemer.de/?p=418</guid>
		<description><![CDATA[Man kennt das Problem: komprimierte Grafiken sehen auch bei hoher Auflösung nicht immer schön aus und spätestens, wenn man hineinzoomt geht der Pixelmatsch los. Viel praktischer sind hier Vektorgrafiken, die sich beliebig Skalieren lassen und keine Bildinformationen verlieren. In diesem Artikel möchte ich erklären, wie man Inhalte aus PDF-Dateien extrahieren kann und dabei die Vektoreigenschaften [...]]]></description>
			<content:encoded><![CDATA[<p>Man kennt das Problem: komprimierte Grafiken sehen auch bei hoher Auflösung nicht immer schön aus und spätestens, wenn man hineinzoomt geht der Pixelmatsch los. Viel praktischer sind hier Vektorgrafiken, die sich beliebig Skalieren lassen und keine Bildinformationen verlieren.<br />
In diesem Artikel möchte ich erklären, wie man Inhalte aus PDF-Dateien extrahieren kann und dabei die Vektoreigenschaften erhält. Oftmals macht man simple Screenshots und arbeitet damit weiter. Dadurch gehen besagte Vektoreigenschaften verloren und man ist wieder beim Pixelmatsch angekommen.<br />
Was also tun?<br />
Die Lösung ist viel einfacher als man denkt und die benötigten Tools sind kostenlos!<br />
- Adobe Acrobat Reader<br />
- ein PDF-Drucker (z.B. PDFCreator)<br />
- Paint (optional, dazu später mehr)</p>
<p>Man öffnet also die Quell-PDF mit dem Acrobat Reader und scrollt zu der Stelle, die man ausschneiden möchte.<br />
Unter &#8220;Bearbeiten&#8221; -> &#8220;Schnappschuss erstellen&#8221; findet man das wichtige Auswahl-Tool. Also zieht man eine Markierung um den auszuschneidenden Inhalt. Dabei wird der Inhalt in die Zwischenablage kopiert, was gleich noch wichtig wird.<br />
<a href="http://www.juliankraemer.de/wp-content/uploads/2011/09/pdfextract_01.jpg" target="_blank"><img src="http://www.juliankraemer.de/wp-content/uploads/2011/09/pdfextract_01-300x244.jpg" alt="Quell-PDF" title="Quell-PDF" width="300" height="244" class="alignnone size-medium wp-image-420" /></a><br />
Nun öffnet man den Druckdialog (Strg + P) und wählt den PDF-Drucker als Drucker aus. Unter &#8220;Druckbereich&#8221; sollte ein Häkchen bei &#8220;ausgewählte Grafik&#8221; gesetzt sein und unter den &#8220;Seiteneinstellungen&#8221; muss noch die Seitengröße eingestellt werden: &#8220;Anpassen der Seitengröße&#8221; -> &#8220;In Druckbereich anpassen&#8221;.<br />
Es fehlt noch ein Klick auf die Schaltfläche &#8220;Seite einrichten&#8230;&#8221;, um dort die Ausrichtung &#8220;Querformat&#8221; auszuwählen (rückgängig machen, sollte das Endergebnis auf die Seite gedreht sein!).<br />
<a href="http://www.juliankraemer.de/wp-content/uploads/2011/09/pdfextract_02.jpg" target="_blank"><img src="http://www.juliankraemer.de/wp-content/uploads/2011/09/pdfextract_02-300x182.jpg" alt="PDF-Druckeinstellungen" title="PDF-Druckeinstellungen" width="300" height="182" class="alignnone size-medium wp-image-421" /></a><br />
Das reicht dann eigentlich schon fast und mit einem Klick auf &#8220;OK&#8221; speichert man den ausgewählten Inhalt als ein neues PDF-Dokument ab.<br />
Ein Problem gibt es aber und man sieht es im Vorschaufenster auch schon: Die Proportion des ausgewählten Inhalts (Breite:Höhe) stimmt oftmals nicht mit dem normalen DIN A4-Format überein, weshalb es zu unschönen Rändern kommt.<br />
Jetzt kommt Paint ins Spiel. Man öffnet Paint und zieht den Skalierungspunkt unten rechts nach oben Links, sodass die Leinwand von Paint definitiv kleiner ist, als der ausgewählte Inhalt. Selbigen fügt man anschließend ein (Strg + v) und die Leinwand vergrößert sich automatisch auf die Bildgröße. In der Statusleiste (ganz unten) kann man jetzt die Abmessung des ausgewählten Inhaltes sehen (Breite x Höhe) und genau dafür haben wir Paint gebraucht.<br />
<a href="http://www.juliankraemer.de/wp-content/uploads/2011/09/pdfextract_03.jpg" target="_blank"><img src="http://www.juliankraemer.de/wp-content/uploads/2011/09/pdfextract_03-300x201.jpg" alt="Abmessungen mit Paint" title="Abmessungen mit Paint" width="300" height="201" class="alignnone size-medium wp-image-422" /></a><br />
Theoretisch (bzw. eher praktisch) könnte man das Seitenverhältnis auch mit einem Lineal auf dem Monitor bestimmen <img src='http://www.juliankraemer.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Bevor man das neue PDF-Dokument druckt, klickt man auf die Schaltfläche &#8220;Eigenschaften&#8221; (des Druckers) im Druckdialog und dort wiederum auf &#8220;Erweitert..&#8221;. Als Papiergröße kann man hier die zuvor bestimmte Abmessung eingeben. Statt &#8220;DIN A4&#8243; nimmt man also &#8220;PostScript Custom Page&#8221;, klickt auf die nebenstehende Schaltfläche und trägt im Popup-Fenster die Abmessungen ein (gemessene Pixel aus Paint kann man quasi direkt als Millimeterangabe eintragen).<br />
<a href="http://www.juliankraemer.de/wp-content/uploads/2011/09/pdfextract_04.jpg" target="_blank"><img src="http://www.juliankraemer.de/wp-content/uploads/2011/09/pdfextract_04-300x184.jpg" alt="Abmessungen mit Paint" title="Seitengröße einstellen" width="300" height="184" class="alignnone size-medium wp-image-423" /></a><br />
Die ganzen kleinen Fenster mit &#8220;OK&#8221; schließen und im Vorschaufenster sieht man schon, dass das Dokument sich an das Seitenverhältnis angepasst hat.<br />
<a href="http://www.juliankraemer.de/wp-content/uploads/2011/09/pdfextract_05.jpg" target="_blank"><img src="http://www.juliankraemer.de/wp-content/uploads/2011/09/pdfextract_05-219x300.jpg" alt="neue Seitengröße im Vorschaufenster" title="neue Seitengröße im Vorschaufenster" width="219" height="300" class="alignnone size-medium wp-image-424" /></a><br />
Jetzt druckt man endlich das neue PDF-Dokument und hat also den ausgewählten Inhalt aus dem Quell-PDF extrahiert und in einer separaten Datei vorliegen. Diese lässt sich dann z.B. prima in LaTeX einbinden. Besonders toll: sogar Textabschnitte bleiben dadurch erhalten (Markieren &#038; Kopieren möglich, sofern es in der Quell-PDF funktionierte)!</p>
<p>Achtung: Nicht alle Inhalte in PDF-Dateien sind auch wirklich Vektoren! Da nützt die geschilderte Methode natürlich auch nichts. Bei geschützten PDF-Dateien kann es ebenfalls Probleme geben!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juliankraemer.de/2011/09/20/inhalte-als-vektoren-aus-pdf-dateien-ausschneiden/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Guayadeque Audioplayer &#8211; Was wird gerade gespielt?</title>
		<link>http://www.juliankraemer.de/2011/08/01/guayadeque-audioplayer-was-wird-gerade-gespielt/</link>
		<comments>http://www.juliankraemer.de/2011/08/01/guayadeque-audioplayer-was-wird-gerade-gespielt/#comments</comments>
		<pubDate>Sun, 31 Jul 2011 23:18:35 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Audioplayer]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Current Track]]></category>
		<category><![CDATA[D-Bus]]></category>
		<category><![CDATA[dbus]]></category>
		<category><![CDATA[Guayadeque]]></category>
		<category><![CDATA[ID3]]></category>
		<category><![CDATA[MP3]]></category>
		<category><![CDATA[Musik]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Tags]]></category>

		<guid isPermaLink="false">http://www.juliankraemer.de/?p=403</guid>
		<description><![CDATA[Ich habe nach einer Möglichkeit gesucht, die Titelinformationen zu dem aktuell laufenden Song bei Guayadeque abzurufen (Stichwort: &#8220;now playing&#8221;, &#8220;current track&#8221;, &#8220;was ich gerade höre&#8221;). Zum Glück nutzt Guayadeque D-Bus bzw. MPRIS (Media Player Remote Interfacing Specification), was die Umsetzung deutlich erleichtert. Mit dem folgenden Befehl werden die Metadaten (ID3-Tag) des Songs ausgelesen: qdbus org.mpris.guayadeque [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe nach einer Möglichkeit gesucht, die Titelinformationen zu dem aktuell laufenden Song bei <strong>Guayadeque</strong> abzurufen (Stichwort: &#8220;now playing&#8221;, &#8220;current track&#8221;, &#8220;was ich gerade höre&#8221;). Zum Glück nutzt Guayadeque <a href="http://freedesktop.org/wiki/Software/dbus">D-Bus</a> bzw. <a href="http://www.mpris.org/2.1/spec/">MPRIS</a> (Media Player Remote Interfacing Specification), was die Umsetzung deutlich erleichtert.<br />
Mit dem folgenden Befehl werden die <a href="http://de.wikipedia.org/wiki/ID3-Tag">Metadaten (ID3-Tag)</a> des Songs ausgelesen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">qdbus org.mpris.guayadeque <span style="color: #000000; font-weight: bold;">/</span>Player org.freedesktop.MediaPlayer.GetMetadata</pre></div></div>

<p>Ausgabe (Beispiel):</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">album: Colour Haze
artist: Colour Haze
arturl: [...]/Colour Haze - 04 - Love.mp3
bitrate: 320
genre: Psychedelic Rock
location: [...]/Colour Haze - 04 - Love.mp3
mtime: 560000
rating: 5
time: 560
title: Love
tracknumber: 4
year: 2005</pre></div></div>

<p>Mit <a href="http://sed.sourceforge.net/">sed</a> kommt man recht bequem an die rohen Informationen. Der nachfolgende Befehl schneidet aus der Zeile mit dem Song-Titel das vorangestellte &#8220;title: &#8221; heraus und gibt alles dahinter aus:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">qdbus org.mpris.guayadeque <span style="color: #000000; font-weight: bold;">/</span>Player org.freedesktop.MediaPlayer.GetMetadata <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/^title: //p'</span></pre></div></div>

<p>Ausgabe (Beispiel):</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Love</pre></div></div>

<p>Das funktioniert natürlich auch mit den anderen Einträgen!<br />
Anmerkung: Das Leerzeichen hinter &#8220;title:&#8221; ist notwendig, damit der gesuchte Text-String nicht mit einem Leerzeichen beginnt.</p>
<p>Guayadeque: <a href="http://guayadeque.org/">offizielle Homepage</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.juliankraemer.de/2011/08/01/guayadeque-audioplayer-was-wird-gerade-gespielt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USB-Stick automatisch synchronisieren (udev+rsync)</title>
		<link>http://www.juliankraemer.de/2011/05/18/usb-stick-automatisch-synchronisieren-udevrsync/</link>
		<comments>http://www.juliankraemer.de/2011/05/18/usb-stick-automatisch-synchronisieren-udevrsync/#comments</comments>
		<pubDate>Wed, 18 May 2011 16:49:46 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Quellcode]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[udev]]></category>
		<category><![CDATA[USB-Stick]]></category>
		<category><![CDATA[zenity]]></category>

		<guid isPermaLink="false">http://www.juliankraemer.de/?p=362</guid>
		<description><![CDATA[Im Zuge meiner Abschlussarbeit stellte ich einige Überlegungen zwecks der Verwaltung und Sicherung der entstehenden Datenflut an. Nach einigem Für und Wider habe ich mich für eine Variante entschieden, die ich hier kurz vorstellen möchte. Ein USB-Stick dient zum Transport der Daten. Dies hat sich als besonders praktikabel erwiesen, da auf unterschiedlichen PCs gearbeitet werden [...]]]></description>
			<content:encoded><![CDATA[<p>Im Zuge meiner Abschlussarbeit stellte ich einige Überlegungen zwecks der Verwaltung und Sicherung der entstehenden Datenflut an. Nach einigem Für und Wider habe ich mich für eine Variante entschieden, die ich hier kurz vorstellen möchte.<br />
Ein USB-Stick dient zum Transport der Daten. Dies hat sich als besonders praktikabel erwiesen, da auf unterschiedlichen PCs gearbeitet werden muss und auch ein Internetzugang nicht immer garantiert ist.<br />
Vor dem Verlust des USB-Sticks oder einem technischen Defekt ist keiner gefeit und darum muss eine möglichst einfache Backup-Lösung her.<br />
Das geht unter Linux nativ mit Bordmitteln, die nur ein wenig kombiniert werden müssen:</p>
<p>Um das Sichern der Daten so bequem wie möglich zu machen, soll sich der USB-Stick nach dem Einstecken automatisch mit einem Verzeichnis auf der Festplatte synchronisieren. Ein Benutzereingriff soll nicht nötig sein.<br />
Das kleine Tool <strong>udev</strong> (<a href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html">Homepage</a>) ist dafür besonders gut geeignet, denn mit selbst erstellten Regeln kann man das Anschließen von Hardware erkennen (hotplug-Ereignisse) und selber Aktionen definieren.</p>
<p>Zuerst müssen ein paar Daten gesammelt werden, damit der USB-Stick von der udev-Regel eindeutig identifiziert werden kann. Mit dem folgenden Befehl sucht man sich das Device zum USB-Stick heraus:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mount</span></pre></div></div>

<blockquote><p>&#8230;<br />
<strong>/dev/sdc1</strong> on /media/JETFLASH600 &#8230;<br />
&#8230;</p></blockquote>
<p>Der USB-Stick ist dem System also unter /dev/sdc bekannt. Mit einem Tool von udev können nun Gerätedetails ausgelesen werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">udevadm info <span style="color: #660033;">--path</span>=<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>block<span style="color: #000000; font-weight: bold;">/</span>sdc <span style="color: #660033;">--query</span>=all <span style="color: #660033;">--attribute-walk</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> serial</pre></div></div>

<blockquote><p>&#8230;<br />
ATTRS{serial}==&#8221;<strong>RWTAG4K2</strong>&#8221;<br />
<del datetime="2011-05-18T15:19:43+00:00">ATTRS{serial}==&#8221;0000:00:1d.7&#8243;</del><br />
&#8230;</p></blockquote>
<p>Das fett gedruckte ist die Seriennummer des USB-Sticks, die wir zur eindeutigen Identifizierung benutzen werden. Es können auch andere Merkmale zur Identifizierung genutzt werden und auch Kombinationen daraus (grep-Befehl weglassen). Nähere Informationen gibt es auf der <a href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev/">man-Page</a>.</p>
<p>Die udev-Regeln liegen bei Ubuntu im Verzeichnis <strong>/lib/udev/rules.d/</strong> bzw. <strong>/etc/udev/rules.d/</strong>. Und im letzteren legt man eine eigene Regel an. Die Zahl im Dateinamen gibt an, zu welchem Zeitpunkt/in welcher Reihenfolge die Regeln greifen (näheres dazu in <em>/lib/udev/rules.d/README</em>).</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>udev<span style="color: #000000; font-weight: bold;">/</span>rules.d<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">99</span>-usb-backup-custom.rules</pre></div></div>

<blockquote><p>BUS==&#8221;usb&#8221;, ACTION==&#8221;add&#8221;, KERNEL==&#8221;sd?1&#8243;, SYSFS{serial}==&#8221;<strong>RWTAG4K2</strong>&#8220;, RUN+=&#8221;<strong>/pfad/zum/script/usb_backup.sh</strong>&#8220;</p></blockquote>
<p>(wichtig: kein Zeilenumbruch!)</p>
<table border="1" cellspacing="0">
<tr>
<td>BUS==&#8221;usb&#8221;</td>
<td>USB-Ports sollen beobachtet werden</td>
</tr>
<tr>
<td>ACTION==&#8221;add&#8221;</td>
<td> Nur beim Anschließen des Gerätes die Regel ausführen (sonst startet das Backup-Script immer wieder neu)</td>
</tr>
<tr>
<td>KERNEL==&#8221;sd?1&#8243;</td>
<td> Mit dem Fragezeichen als Platzhalter wird die erste Partition des Device berücksichtigt (sda1, sdb1, &#8230;)</td>
</tr>
<tr>
<td>SYSFS{serial}==&#8221;RWTAG4K2&#8243;</td>
<td> Es wird nach der Seriennummer gefiltert</td>
</tr>
<tr>
<td>RUN+=&#8221;/pfad/zum/script/usb_backup.sh&#8221;</td>
<td> Hier wird die Aktion angegeben (hier: Pfad zum Backup-Script)</td>
</tr>
</table>
<p>Nun kann das Backup-Script angelegt werden (unbedingt die gekennzeichneten Stellen anpassen!):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>pfad<span style="color: #000000; font-weight: bold;">/</span>zum<span style="color: #000000; font-weight: bold;">/</span>script<span style="color: #000000; font-weight: bold;">/</span>usb_backup.sh</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
<span style="color: #007800;">dev</span>=<span style="color: #ff0000;">&quot;JETFLASH600&quot;</span> <span style="color: #666666; font-style: italic;">#Device-Name angeben! (hier z.B. /media/JETFLASH600)</span>
<span style="color: #7a0874; font-weight: bold;">exec</span> <span style="color: #000000;">3</span><span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #660033;">-H</span> <span style="color: #660033;">-u</span> USERNAME zenity \	<span style="color: #666666; font-style: italic;">#Username einfügen!</span>
			<span style="color: #660033;">--display</span> :<span style="color: #000000;">0.0</span> \
			<span style="color: #660033;">--text-info</span> \
			<span style="color: #660033;">--title</span> <span style="color: #ff0000;">&quot;USB-Stick Datasaver&quot;</span> \
			<span style="color: #660033;">--width</span>=<span style="color: #000000;">450</span> \
			<span style="color: #660033;">--height</span>=<span style="color: #000000;">250</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;USB-Stick detected: <span style="color: #007800;">$dev</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">3</span>
<span style="color: #007800;">mp</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$dev</span>&quot;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>mtab<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #007800;">i</span>=<span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$mp</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$i</span>&quot;</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">30</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">do</span>
	<span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">1</span>
	<span style="color: #007800;">mp</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$dev</span>&quot;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>mtab<span style="color: #7a0874; font-weight: bold;">&#41;</span>
	<span style="color: #007800;">i</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>i+<span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">done</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$mp</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
	rsync <span style="color: #660033;">-avz</span> <span style="color: #660033;">--delete</span> <span style="color: #000000; font-weight: bold;">/</span>media<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$dev</span> <span style="color: #000000; font-weight: bold;">/</span>pfad<span style="color: #000000; font-weight: bold;">/</span>zum<span style="color: #000000; font-weight: bold;">/</span>backup <span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">3</span> <span style="color: #666666; font-style: italic;">#Verzeichnis anpassen!</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Done!&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">3</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span> <span style="color: #000000; font-weight: bold;">&amp;</span></pre></div></div>

<p>Sehr wichtig sind die geschweiften Klammern (<strong>{</strong>,<strong>}</strong>) und das Et-Zeichen (<strong>&#038;</strong>). Dies bewirkt, dass das Script im Hintergrund arbeitet und dazu parallel die gewöhnliche Einbindung des USB-Sticks ablaufen kann.  Mit <strong>zenity</strong> (<a href="http://live.gnome.org/Zenity">Homepage</a>) wird ein kleines Fenster geöffnet, was eine Übersicht über den Vorgang gibt. Die etwas umständlich wirkende Warteschleife (while&#8230;) ist nötig, um die Zeit zwischen der Erkennung des USB-Sticks (Script wird gestartet) und dem Einbinden zu überbrücken. Erst nach dem Einbinden ist ein Zugriff auf die Dateien möglich.<br />
Das Tool <strong>rsync</strong> (<a href="http://rsync.samba.org/">Homepage</a>) gleicht die Daten zwischen dem USB-Stick und dem Backup-Verzeichnis ab. In der <a href="http://rsync.samba.org/ftp/rsync/rsync.html">man-Page</a> wird erklärt, was die einzelnen Optionen bedeuten:</p>
<table border="1" cellspacing="0">
<tr>
<td>-a</td>
<td>Dateien, Verzeichnisse, symbolische Links rekursiv abgleichen und dabei Rechte beibehalten</td>
</tr>
<tr>
<td>-v</td>
<td>Ausgabe anzeigen</td>
</tr>
<tr>
<td>-z</td>
<td>Datenabgleich komprimieren</td>
</tr>
<tr>
<td>&#8211;delete</td>
<td>in der Quelle (USB-Stick) gelöschte Dateien auch im Ziel (Backup) löschen</td>
</tr>
</table>
<p>Das Backup-Script braucht jetzt noch Berechtigungen zum Ausführen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">755</span> <span style="color: #000000; font-weight: bold;">/</span>pfad<span style="color: #000000; font-weight: bold;">/</span>zum<span style="color: #000000; font-weight: bold;">/</span>script<span style="color: #000000; font-weight: bold;">/</span>usb_backup.sh</pre></div></div>

<p>Ausserdem muss das Verzeichnis für das Backup angelegt werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>pfad<span style="color: #000000; font-weight: bold;">/</span>zum<span style="color: #000000; font-weight: bold;">/</span>backup</pre></div></div>

<p>Damit die udev-Regel benutzt werden kann, ist ein Neustart des udev-Daemons nötig:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> service udev reload</pre></div></div>

<p>Fertig! Ab sofort werden die Daten des USB-Sticks beim Einstecken in das Backup-Verzeichnis geschrieben.</p>
<p>Screenshot:<br />
<img src="http://www.juliankraemer.de/wp-content/uploads/2011/05/USB-Stick-Datasaver_003.png" alt="" title="USB-Stick Datasaver Screenshot" width="452" height="278" class="alignnone size-full wp-image-387" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.juliankraemer.de/2011/05/18/usb-stick-automatisch-synchronisieren-udevrsync/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nützlichste Tastenkürzel des Google Chrome</title>
		<link>http://www.juliankraemer.de/2011/05/14/nutzlichste-tastenkurzel-des-google-chrome/</link>
		<comments>http://www.juliankraemer.de/2011/05/14/nutzlichste-tastenkurzel-des-google-chrome/#comments</comments>
		<pubDate>Sat, 14 May 2011 09:47:51 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Shortcuts]]></category>
		<category><![CDATA[Tastenkürzel]]></category>

		<guid isPermaLink="false">http://www.juliankraemer.de/?p=355</guid>
		<description><![CDATA[Im Nachfolgenden möchte ich die nützlichsten Tastenkürzel zusammenfassen, durch die Google Chrome das Surfen im Web erleichtert: Beschreibung Tastenkürzel Neues Fenster öffnen [STRG] + [N] Neues Tab öffnen [STRG] + [T] Tab schließen [STRG] + [W] Das zuletzt geschlossene Tab öffnen [STRG] + [SHIFT] + [T] Zum nächsten Tab springen [STRG] + [Bild auf] Zum [...]]]></description>
			<content:encoded><![CDATA[<p>Im Nachfolgenden möchte ich die nützlichsten Tastenkürzel zusammenfassen, durch die Google Chrome das Surfen im Web erleichtert:</p>
<table border="1" cellspacing="0">
<tr>
<th>Beschreibung</th>
<th>Tastenkürzel</th>
</tr>
<tr>
<td>Neues Fenster öffnen</td>
<td>[STRG] + [N]</td>
</tr>
<tr>
<td>Neues Tab öffnen</td>
<td>[STRG] + [T]</td>
</tr>
<tr>
<td>Tab schließen</td>
<td>[STRG] + [W]</td>
</tr>
<tr>
<td>Das zuletzt geschlossene Tab öffnen</td>
<td>[STRG] + [SHIFT] + [T]</td>
</tr>
<tr>
<td>Zum nächsten Tab springen</td>
<td>[STRG] + [Bild auf]</td>
</tr>
<tr>
<td>Zum vorherhigen Tab springen</td>
<td>[STRG] + [Bild ab]</td>
</tr>
<tr>
<td>Download-Tab anzeigen</td>
<td>[STRG] + [J]</td>
</tr>
<tr>
<td>URL in Adressleiste markieren</td>
<td>[STRG] + [L]</td>
</tr>
<tr>
<td>In Adressleiste springen und suchen</td>
<td>[STRG] + [K]</td>
</tr>
<tr>
<td>Webseite neuladen</td>
<td>[STRG] + [R]</td>
</tr>
<tr>
<td>Webseite durchsuchen</td>
<td>[STRG] + [F]</td>
</tr>
<tr>
<td>Webseite als Lesezeichen speichern</td>
<td>[STRG] + [D]</td>
</tr>
<tr>
<td>Zum Anfang der Seite springen</td>
<td>[POS1]</td>
</tr>
<tr>
<td>Zum Ende der Seite springen</td>
<td>[ENDE]</td>
</tr>
<tr>
<td>Nach unten blättern/scrollen</td>
<td>[LEERTASTE]</td>
</tr>
<tr>
<td>Link in neuem Hintergrund-Tab öffnen</td>
<td>[STRG] + Link anklicken</td>
</tr>
<tr>
<td>Ziel eines Links herunterladen</td>
<td>[ALT] + Link anklicken</td>
</tr>
<tr>
<td>History zurück</td>
<td>[ALT] + [&larr;]</td>
</tr>
<tr>
<td>History vor</td>
<td>[ALT] + [&rarr;]</td>
</tr>
</table>
<p>Quelle: <a href="http://www.google.com/support/chrome/bin/static.py?page=guide.cs&#038;guide=25799&#038;topic=28652">Google Chrome Hilfe</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.juliankraemer.de/2011/05/14/nutzlichste-tastenkurzel-des-google-chrome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Short-Circuit-Tests bei der Shellprogrammierung</title>
		<link>http://www.juliankraemer.de/2011/03/28/short-circuit-tests-bei-der-shellprogrammierung/</link>
		<comments>http://www.juliankraemer.de/2011/03/28/short-circuit-tests-bei-der-shellprogrammierung/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 17:17:20 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Quellcode]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Shellscripting]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.juliankraemer.de/?p=339</guid>
		<description><![CDATA[Bei der Shellprogrammierung gibt es mit den sogenannten Short-Circuit-Tests eine sehr komfortable und knappe Methode, um mehrere Befehle logisch hintereinander zu reihen und zu verküpfen. Die Syntax sieht dazu wie folgt aus: COMMAND1 &#38;&#38; COMMAND2 COMMAND1 &#124;&#124; COMMAND2 Prinzipiell funktionieren die Anweisungen wie if-Abfragen: &#038;&#038;: liefert der COMMAND1 true, wird COMMAND2 ausgeführt &#124;&#124;: liefert der [...]]]></description>
			<content:encoded><![CDATA[<p>Bei der Shellprogrammierung gibt es mit den sogenannten <strong>Short-Circuit-Tests</strong> eine sehr komfortable und knappe Methode, um mehrere Befehle logisch hintereinander zu reihen und zu verküpfen.<br />
Die Syntax sieht dazu wie folgt aus:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">COMMAND1 <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> COMMAND2
COMMAND1 <span style="color: #000000; font-weight: bold;">||</span> COMMAND2</pre></div></div>

<p>Prinzipiell funktionieren die Anweisungen wie if-Abfragen:<br />
<strong>&#038;&#038;</strong>: liefert der COMMAND1 true, wird COMMAND2 ausgeführt<br />
<strong>||</strong>: liefert der COMMAND1 true, wird COMMAND2 nicht (!) ausgeführt</p>
<p>Als COMMAND1 werden oft Abfragebedingungen verwendet (müssen aber nicht), während COMMAND2 ein richtiger Befehl sein muss.</p>
<p>Die Arbeitsweise der beiden Operatoren sind als logisch UND bzw. ODER zu verstehen. Der Gedanke dahinter:<br />
Ist COMMAND1 true, so muss für UND (&#038;&#038;) auch COMMAND2 ausgeführt werden, um zu testen, ob COMMAND2 ebenfalls true ist. Falls COMMAND1 bereits false ist, wird COMMAND2 gar nicht erst ausgeführt.<br />
Ähnlich bei ODER (||): Ist COMMAND1 true, reicht dies bereits aus, um das gesamte Statement true werden zu lassen und COMMAND2 wird nicht ausgeführt. Erst wenn COMMAND1 false ist, muss COMMAND2 ausgeführt werden, um dort auf true zu prüfen.<br />
Tabellarisch kann es folgendermaßen dargestellt werden:</p>
<table>
<tr>
<td>
<table border="1" cellspacing="0">
<tr>
<th colspan="3">COMMAND1 &#038;&#038; COMMAND2</th>
</tr>
<tr>
<td><em>COMMAND1</em></td>
<td><em>COMMAND2</em></td>
<td><em>RESULT</em></td>
</tr>
<tr>
<td>0</td>
<td>%</td>
<td>0</td>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
</table>
</td>
<td>
<table border="1" cellspacing="0">
<tr>
<th colspan="3">COMMAND1 || COMMAND2</th>
</tr>
<tr>
<td><em>COMMAND1</em></td>
<td><em>COMMAND2</em></td>
<td><em>RESULT</em></td>
</tr>
<tr>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>%</td>
<td>1</td>
</tr>
</table>
</td>
</tr>
</table>
<p>% bedeutet, dass der COMMAND nicht ausgeführt wird!</p>
<p>Beliebt sind solche Ausdrücke vor allem zum Abfangen kleiner Abfragen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>file.ext <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span></pre></div></div>

<p>(falls die Datei file.ext nicht existiert, wird das Programm an dieser Stelle mit dem Fehlercode 1 beendet)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">rm</span> text.ext <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Datei konnte nicht geloescht werden!&quot;</span></pre></div></div>

<p>(Fehlermeldung, falls Datei nicht gelöscht werden konnte)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> test.ext <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">touch</span> test.ext</pre></div></div>

<p>(Datei anlegen, falls nicht existiert)</p>
<p>Noch viele weitere Möglichkeiten sind denkbar und zeigen die Flexibilität dieses Ausdrucks! Zudem lassen sich mehr als zwei Befehl hintereinander reihen (mit beliebig vermischten Operatoren).</p>
<p>Anmerkung: Code in Bourne-Again-Shell (Bash) Syntax</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juliankraemer.de/2011/03/28/short-circuit-tests-bei-der-shellprogrammierung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Strings mit PHP prüfen</title>
		<link>http://www.juliankraemer.de/2011/01/29/strings-mit-php-prufen/</link>
		<comments>http://www.juliankraemer.de/2011/01/29/strings-mit-php-prufen/#comments</comments>
		<pubDate>Sat, 29 Jan 2011 14:48:36 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Quellcode]]></category>
		<category><![CDATA[Regex]]></category>

		<guid isPermaLink="false">http://www.juliankraemer.de/?p=334</guid>
		<description><![CDATA[Einen String prüfen, ob er eine Binärzahl ist: function is_bin&#40;$val&#41; &#123; return &#40;preg_match&#40;'/^[0-1]*$/', $val&#41;&#41; ? true : false; &#125; Einen String prüfen, ob er eine Hexadezimalzahl ist: function is_hex&#40;$val&#41; &#123; return &#40;preg_match&#40;'/^[0-9a-f]*$/i', $val&#41;&#41; ? true : false; &#125;]]></description>
			<content:encoded><![CDATA[<p>Einen String prüfen, ob er eine Binärzahl ist:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> is_bin<span style="color: #009900;">&#40;</span><span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/^[0-1]*$/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Einen String prüfen, ob er eine Hexadezimalzahl ist:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> is_hex<span style="color: #009900;">&#40;</span><span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/^[0-9a-f]*$/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.juliankraemer.de/2011/01/29/strings-mit-php-prufen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Terminal im Dateibrowser</title>
		<link>http://www.juliankraemer.de/2010/10/28/terminal-im-dateibrowser/</link>
		<comments>http://www.juliankraemer.de/2010/10/28/terminal-im-dateibrowser/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 16:32:53 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[APT]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Dateibrowser]]></category>
		<category><![CDATA[Filebrowser]]></category>
		<category><![CDATA[Nautilus]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Terminal]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.juliankraemer.de/?p=319</guid>
		<description><![CDATA[Mit dem Paket Nautilus Terminal wird im Dateibrowser Nautilus ein Terminal integriert. Der große Vorteil ist, dass man sich mit der Shell (default: bash) in dem gleichen Verzeichnis befindet, wie mit dem Dateibrowser selbst. Arbeitet man mit Nautilus in einem Verzeichnis und muss einige Operationen über die Shell erledigen, ist es jetzt nicht mehr notwendig [...]]]></description>
			<content:encoded><![CDATA[<p>Mit dem Paket <strong>Nautilus Terminal</strong> wird im Dateibrowser Nautilus ein Terminal integriert. Der große Vorteil ist, dass man sich mit der Shell (default: bash) in dem gleichen Verzeichnis befindet, wie mit dem Dateibrowser selbst. Arbeitet man mit Nautilus in einem Verzeichnis und muss einige Operationen über die Shell erledigen, ist es jetzt nicht mehr notwendig ein zusätzliches Terminal zu öffnen und dort dann in das entsprechende Verzeichnis zu navigieren.</p>
<p>Wie die Integration aussieht kann man auf folgendem Screenshot erkennen:<br />
<a href="http://www.juliankraemer.de/wp-content/uploads/2010/10/nautilus_terminal.png" title="Nautilus Terminal"><img src="http://www.juliankraemer.de/wp-content/uploads/2010/10/nautilus_terminal-300x198.png" alt="" title="nautilus_terminal" width="300" height="198" class="aligncenter size-medium wp-image-327" border="0"/></a></p>
<p>Die Installation erfolgt bequem mittels APT. (Achtung: Fremdquellen können das System gefährden!)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> add-apt-repository ppa:flozz<span style="color: #000000; font-weight: bold;">/</span>flozz    <span style="color: #666666; font-style: italic;">#Fremdquelle hinzufügen</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> update                        <span style="color: #666666; font-style: italic;">#Paketquellen einlesen</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> nautilus-terminal     <span style="color: #666666; font-style: italic;">#Paket installieren</span>
nautilus <span style="color: #660033;">-q</span>                                <span style="color: #666666; font-style: italic;">#Nautilus neustarten</span></pre></div></div>

<p>Von nun an wird das kleine Terminalfenster im Dateibrowser angezeigt. Auf die verschiedenen Einstellungsmöglichkeiten möchte ich nicht weiter eingehen, da sie sich von selbst erklären. Lediglich auf den Punkt <em>Nautilus-Terminal versteckt starten</em> möchte ich hinweisen, weil ich ihn für sehr sinnvoll halte.</p>
<p>Weitere Informationen gibt es auf der <a href="https://launchpad.net/nautilus-terminal" title="Nautilus Terminal @ Launchpad">Launchpad-Seite von Nautilus Terminal</a> oder auf der <a href="http://software.flogisoft.com/nautilus-terminal/en/" title="Nautilus Terminal Homepage">Projektseite</a>.</p>
<p>Anmerkung: Die Einfärbung der Bash hat mit dem o.g. Tool nichts zu tun. Sie ist unabhängig in der ~/.bashrc eingestellt!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juliankraemer.de/2010/10/28/terminal-im-dateibrowser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Farbige Manpages</title>
		<link>http://www.juliankraemer.de/2010/10/28/farbige-manpages/</link>
		<comments>http://www.juliankraemer.de/2010/10/28/farbige-manpages/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 10:05:55 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[APT]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Colors]]></category>
		<category><![CDATA[less]]></category>
		<category><![CDATA[Manpage]]></category>
		<category><![CDATA[more]]></category>
		<category><![CDATA[most]]></category>
		<category><![CDATA[Pager]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.juliankraemer.de/?p=302</guid>
		<description><![CDATA[Eine sehr wichtige Anlaufstelle unter Unix/Linux sind die Manpages (Manual Pages, zu deutsch Handbuch-Seiten). Jeder Linuxnutzer sollte sie kennen und damit umgehen können. Zum Anschauen der Manpages werden normalerweise die Pager more oder less verwendet. Es gibt jedoch eine sehr funktionale Alternative: most. Neben einigen nützlichen Funktionen, die der Manpage zu entnehmen sind , kann [...]]]></description>
			<content:encoded><![CDATA[<p>Eine sehr wichtige Anlaufstelle unter Unix/Linux sind die <em>Manpages</em> (Manual Pages, zu deutsch Handbuch-Seiten). Jeder Linuxnutzer sollte sie kennen und damit umgehen können.<br />
Zum Anschauen der Manpages werden normalerweise die Pager <strong>more</strong> oder <strong>less</strong> verwendet. Es gibt jedoch eine sehr funktionale Alternative: <strong>most</strong>.<br />
Neben einigen nützlichen Funktionen, die der Manpage zu entnehmen sind <img src='http://www.juliankraemer.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> , kann <strong>most</strong> den Inhalt der Manpages farbig darstellen.</p>
<p>Falls <strong>most</strong> noch nicht installiert ist, kann man dies ganz einfach über APT nachholen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> most</pre></div></div>

<p>Damit der Pager nun für die Darstellung der Manpages verwendet wird, ist eine kleine Anpassung in der <strong>~/.bashrc</strong> nötig. Folgendes am Ende der Datei einfügen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PAGER</span>=<span style="color: #ff0000;">&quot;most&quot;</span></pre></div></div>

<p>Damit die Änderung wirksam wird, muss die ~/.bashrc neu eingelesen werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">source</span> ~<span style="color: #000000; font-weight: bold;">/</span>.bashrc</pre></div></div>

<p> oder auch via Logout/Login.<br />
<br/><br />
Ein &#8220;man most&#8221; schaut dann so aus:<br />
<a href="http://www.juliankraemer.de/wp-content/uploads/2010/10/most.png" title="most manpager"><img src="http://www.juliankraemer.de/wp-content/uploads/2010/10/most-300x211.png" alt="" title="most manpager" width="300" height="211" class="aligncenter size-medium wp-image-303" border="0"/></a></p>
<p>Auf dem Screenshot sieht man die standardmäßige Einfärbung. Man kann jedoch die Farben anpassen. Wie das funktioniert, kann man in der Datei <strong>/usr/share/doc/most/most.rc</strong> erkennen.<br />
Die eigene Konfiguration legt man im Homeverzeichnis ab: <strong>~/.mostrc</strong><br />
Mögliche Farben sind hierbei:<br />
<em>black, gray, lightgray, white, red, brightred, green, brightgreen, blue, brightblue, magenta, brightmagenta, cyan, brightcyan, brown, yellow, default</em><br />
Der erste Farbwert beschreibt die Vordergrundfarbe (foreground, fg), der zweite Farbwert die Hintergrundfarbe (background, bg).</p>
<p>Meine ~/.mostrc:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">color normal lightgray black
color status cyan black
color underline brightred black
color overstrike brightblue black</pre></div></div>

<p>Abschließend empfehle ich einen Blick in die Manpage von most, da dort u.a. einige nützliche Tastaturkürzel erläutert werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juliankraemer.de/2010/10/28/farbige-manpages/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ubuntu 10.10 Maverick Meerkat mit selbstgebauter Netbook-Oberfläche</title>
		<link>http://www.juliankraemer.de/2010/10/16/ubuntu-10-10-maverick-meerkat-mit-selbstgebauter-netbook-oberflache/</link>
		<comments>http://www.juliankraemer.de/2010/10/16/ubuntu-10-10-maverick-meerkat-mit-selbstgebauter-netbook-oberflache/#comments</comments>
		<pubDate>Sat, 16 Oct 2010 12:08:49 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Addon]]></category>
		<category><![CDATA[APT]]></category>
		<category><![CDATA[Compiz]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Firefox Plugin]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[GTK]]></category>
		<category><![CDATA[Maximus]]></category>
		<category><![CDATA[Metacity]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Netbook]]></category>
		<category><![CDATA[Panel]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[UNE]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[UNR]]></category>

		<guid isPermaLink="false">http://www.juliankraemer.de/?p=271</guid>
		<description><![CDATA[Einleitung Seit fast einer Woche ist Ubuntu 10.10 Maverick Meerkat nun freigegeben und ich habe in dieser Zeit einige Experimente gewagt. Es ging darum, mein Netbook (Asus EEE 901) mit einer möglichst Platz gewinnenden, komfortablen und hübschen Oberfläche zu versorgen. Naheliegend ist natürlich dafür die Ubuntu Netbook Edition (UNE, ehemals UNR) zu verwenden. Wie man [...]]]></description>
			<content:encoded><![CDATA[<p><br/></p>
<h4>Einleitung</h4>
<p>Seit fast einer Woche ist Ubuntu 10.10 Maverick Meerkat nun freigegeben und ich habe in dieser Zeit einige Experimente gewagt. Es ging darum, mein Netbook (Asus EEE 901) mit einer möglichst Platz gewinnenden, komfortablen und hübschen Oberfläche zu versorgen.<br />
Naheliegend ist natürlich dafür die Ubuntu Netbook Edition (UNE, ehemals UNR) zu verwenden. Wie man vielleicht schon ahnt, konnte mich diese aber nicht zufrieden stellen. Die neue UNE mit Unity ist, nach meiner Erfahrung, noch nicht wirklich produktiv zu gebrauchen. Bei meinen Tests konnte ich noch viele Mängel feststellen und zweifle an dem Gesamtkonzept. Wie man gleich sehen wird, kann man nämlich im horizontalen Panel jede Menge Informationen verstauen, ohne ein vertikales Panel zu benötigen.<br />
Nachdem die aktuelle UNE nicht mehr in Frage kommt, habe ich mich auf die normale Gnome-Desktopoberfläche  konzentriert. Also habe ich die normale Ubuntu-Version installiert und ein wenig Kosmetik betrieben.</p>
<h4>Vorschau und Motivation</h4>
<p>Zunächst einmal ein Screenshot, damit man eine Idee bekommt, worum es im Nachfolgenden geht:<br />
<a href="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_01.jpg" title="Netbook Desktop 1"><img src="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_01-300x175.jpg" alt="Netbook Desktop" title="netbook_01" width="300" height="175" class="aligncenter size-medium wp-image-278" border="0"/></a></p>
<p>Das Ziel der Konfigurationsarbeit ist es, Gnome dahingehend anzupassen, dass möglichst viel Platz für Fensterinhalte entsteht und trotzdem eine komfortable Handhabung möglich ist.</p>
<h4>Voraussetzungen</h4>
<ul>
<li>installiertes Ubuntu mit normaler Gnome-Desktopoberfläche</li>
<li>funktionierendes Compiz</li>
<li>Internetverbindung</li>
</ul>
<h4>Unteres Panel ersetzen</h4>
<p>Das untere Panel wird bei Gnome hauptsächlich als Fensterwähler benutzt,  d.h. es werden dort alle laufenden Anwendungen aufgelistet und man kann mit Klick auf die jeweilige Anwendung sie in den Vordergrund holen. Eine solch elementare Funktion darf natürlich nicht unter den Teppich gekehrt werden, daher greift man zu einer Alternative. Sie heißt <strong>window-picker-applet</strong> und ist ein Applet für die Gnome-Panels.<br />
Man kann sich das Paket über APT installieren:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> window-picker-applet</pre></div></div>

<p>Nach der Installation fügt man das Applet zum oberen Panel hinzu: Rechtsklick auf das Panel und den Menüpunkt <em>Zum Panel hinzufügen&#8230;</em> anklicken. In der Liste ist das Applet als <em>Fensterwähler</em> zu finden.<br />
Ab sofort werden werden alle laufenden Anwendungen als kleine Symbole im oberen Panel angezeigt. Die Symbole sind deutlich platzsparender als die Schaltflächen des alten Fensterwählers und haben noch einen weiteren Vorteil. Neben den Symbolen wird die Titelleiste des aktiven Fensters angezeigt wird (allerdings nur für maximierte Fenster).  Somit wird die Titelleiste bei maximierten Fenstern quasi doppelt angezeigt. Dazu aber später mehr.<br />
Das untere Panel ist jetzt obsolet und kann entfernt werden: Rechtsklick auf das Panel und den Menüpunkt <em>Dieses Panel löschen</em> anklicken. </p>
<h4>Optimierung des oberen Panels</h4>
<p>Die große Menüleiste im oberen Panel verbraucht sehr viel Platz, weshalb sie kurzerhand gelöscht wird: Rechtsklick auf den Bereich vom Ubuntu-Logo bis zu <em>System</em> und den Menüpunkt <em>Aus dem Panel entfernen</em> anklicken. Jetzt fügt man eine etwas kleinere Version wieder hinzu. Man kann es sich fast schon denken: Rechtsklick auf das Panel und den Menüpunkt <em>Zum Panel hinzufügen&#8230;</em> anklicken. Das gewünschte Applet nennt sich <strong>Hauptmenü</strong>.<br />
Wer die Schaltfläche zum <em>Desktop anzeigen</em> vermisst, kann sie ebenso mit dem gerade beschriebenen Verfahren hinzufügen.<br />
Um weiteren Platz im oberen Panel zu bekommen, kann man die <strong>indicator-Applets</strong> löschen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> remove indicator-me indicator-messages</pre></div></div>

<p>Ein weiterer Punkt ist die Uhrzeit- und Datumsanzeige. Mit einem Rechtsklick kann man unter <em>Einstellungen</em> auswählen, welche Werte angezeigt werden sollen. Da man das Datum auch angezeigt bekommt, wenn man mit dem Mauszeiger auf der Uhrzeit verweilt, kann man es getrost ausblenden.<br />
Wie man Verknüpfungen zum Panel hinzufügt oder auch die Applets untereinander verschiebt, möchte ich jetzt hier nicht weiter erklären. Aber nicht ohne auf das Applet <em>Schublade</em> zu verweisen, was ermöglicht viele Verknüpfungen in einer Schublade zu verstauen.</p>
<h4>Titelleiste &#038; Compiz </h4>
<p>Wie bereits oben erwähnt, wird die Titelleiste bei maximierten Fenstern doppelt angezeigt. Die gewöhnliche Titelleiste soll natürlich eingespart und kann mit Compiz entfernt werden. Dazu muss der CompizConfig Einstellungs Manager gestartet werden (unter System → Einstellungen zu finden).<br />
Falls er noch nicht installiert ist, kann das wie folgt nachgeholt werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> compizconfig-settings-manager</pre></div></div>

<p>In der Kategorie <em>Effekte</em> findet man <strong>Fensterdekoration</strong>, wo man nun unter dem Punkt „Dekoration für Fenster“ folgendes einträgt:</p>
<pre lang=“text“>!state=maxvert</pre>
<p>Somit verschwindet die Titelleiste bei maximierten Fenstern und es ist wieder viel Platz gespart.</p>
<h4>Erscheinungsbild</h4>
<p>Weiterführend empfehle ich ein <strong>Theme für Metacity</strong>, was die Titelleiste bei nicht maximierten Fenstern möglichst flach anzeigt. Ich verwende dazu <em>Rezlooks</em>, was unter <a href="http://gnome-look.org/content/show.php/Rezlooks?content=39316" title="Rezlooks @ gnome-look.org">gnome-look.org</a> zu finden ist.<br />
Als GTK-Theme kommt <em>Mist</em> zum Einsatz.</p>
<h4>Mozilla Firefox</h4>
<p>Der Browser ist ein zentrales Element des Computers, weshalb ich an dieser Stelle auch kurz erläutern möchte, wie man auch den Browser an eine geringe Auflösung anpassen kann.<br />
Wichtig sind dafür die beiden Addons <a href="https://addons.mozilla.org/de/firefox/addon/57805/" title="Hide GUI Bars">Hide GUI Bars</a> und <a href="https://addons.mozilla.org/de/firefox/addon/1027/" title="All-in-One Sidebar">All-in-One Sidebar</a>. Die Konfiguration der beiden Addons erfordert ein bisschen Einarbeitung, ermöglichen aber den Fensterinhalt des Browsers zu maximieren.<br />
Mit <em>Hide GUI Bars</em> werden diverse Leisten ein- und ausgeblendet. Um dann noch an die Lesezeichen zu kommen, empfehle ich die <em>All-in-One Sidebar</em>. Auf Knopfdrück kann sie sich auch ein- und ausblenden lassen.</p>
<h4>Maximus</h4>
<p>Der Vollständigkeit halber sollte noch <strong>Maximus</strong> erwähnt werden. Installiert man das gleichnamige Paket, werden alle Fenster maximiert dargestellt (auch Bestandteil der UNE). Ich empfinde es aber eher lästig und verwende es auch nicht.</p>
<h4>weitere Screenshots</h4>
<p><a href="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_02.jpg" title="Netbook Desktop 2"><img src="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_02-300x175.jpg" alt="" title="netbook_02" width="300" height="175" class="aligncenter size-medium wp-image-289" border="0"/></a> <a href="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_03.jpg" title="Netbook Desktop 3"><img src="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_03-300x175.jpg" alt="" title="netbook_03" width="300" height="175" class="aligncenter size-medium wp-image-290" border="0" /></a><br />
<a href="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_04.jpg" title="Netbook Desktop 4"><img src="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_04-300x175.jpg" alt="" title="netbook_04" width="300" height="175" class="aligncenter size-medium wp-image-293" border="0"/></a> <a href="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_05.jpg"  title="Netbook Desktop 5"><img src="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_05-300x175.jpg" alt="" title="netbook_05" width="300" height="175" class="aligncenter size-medium wp-image-294" border="0" /></a><br />
<a href="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_06.jpg"  title="Netbook Desktop 6"><img src="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_06-300x175.jpg" alt="" title="netbook_06" width="300" height="175" class="aligncenter size-medium wp-image-296" border="0" /></a> <a href="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_07.jpg"  title="Netbook Desktop 7"><img src="http://www.juliankraemer.de/wp-content/uploads/2010/10/netbook_07-300x175.jpg" alt="" title="netbook_07" width="300" height="175" class="aligncenter size-medium wp-image-297" border="0"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.juliankraemer.de/2010/10/16/ubuntu-10-10-maverick-meerkat-mit-selbstgebauter-netbook-oberflache/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

