<?xml version="1.0" encoding="UTF-8"?>
<feed>
  <id>http://blogeum.de/feed</id>
  <title>blogeum</title>
  <updated>2013-05-18T15:41:29+02:00</updated>
  <link rel="self" href="http://blogeum.de/feed"/>
  <generator>blogeum Feedgenerator/3.0</generator>
  <logo>http://blogeum.de/img/logoc.png</logo>
  <rights>Copyright © 2013 blogeum</rights>
  <subtitle>blogeum</subtitle>
  <entry>
    <id>http://blogeum.de/2013/04/kostenlose-domain-weltkarte-fuer-blogger-inkl-spende-fuer-den-guten-zweck</id>
    <title>Kostenlose Domain-Weltkarte für Blogger inkl. Spende für den guten Zweck</title>
    <updated>2013-04-18T22:12:00+02:00</updated>
    <author>
      <name>Christian Gürtler</name>
    </author>
    <content type="html">&lt;p&gt;&lt;/p&gt;&lt;p&gt;Gerade habe ich bei Caschy von einer Aktion gelesen, bei der Blogger für einen Bericht über ebenjene Aktion kostenfrei eine hochwertige &lt;a href="https://www.checkdomain.de/domain-weltkarte/" rel="external"&gt;Domain-Weltkarte&lt;/a&gt; erhalten können (sonst 27 Euro). Zusätzlich und eigentlich viel wichtiger ist, dass der Veranstalter &lt;a href="https://www.checkdomain.de/" rel="external"&gt;checkdomain&lt;/a&gt; pro verschickter Karte noch 10 Euro an die Deutsche Kinder­krebs­stiftung spendet (egal ob gekauft oder als Blogger gratis erhalten).&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p class="center"&gt;&lt;a href="http://blogeum.de/upload/checkdomainkarte.jpg" class="nanobox" title="Domain-Weltkarte von checkdomain"&gt;&lt;img src="http://blogeum.de/upload/checkdomainkarte.jpg" alt="Domain-Weltkarte von checkdomain" title="Domain-Weltkarte von checkdomain" width="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Die Karte ist 114 × 70 cm groß und beidseitig auf mattem Premium-Papier (250 g/m&lt;sup&gt;2&lt;/sup&gt;) bedruckt. Allein schon wegen der Spende eine super Sache. Also mitmachen!&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
    <link rel="alternate" href="http://blogeum.de/2013/04/kostenlose-domain-weltkarte-fuer-blogger-inkl-spende-fuer-den-guten-zweck"/>
    <published>2013-04-18T22:12:00+02:00</published>
  </entry>
  <entry>
    <id>http://blogeum.de/2013/03/snmp-abfragen-in-python-mit-pysnmp</id>
    <title>SNMP-Abfragen in Python mit PySNMP</title>
    <updated>2013-03-30T15:22:00+01:00</updated>
    <author>
      <name>Christian Gürtler</name>
    </author>
    <content type="html">&lt;p&gt;&lt;/p&gt;&lt;p&gt;Im Folgenden möchte ich eine kurze Einführung in das Durchführen der elementaren &lt;a href="https://de.wikipedia.org/wiki/SNMP" rel="external"&gt;SNMP&lt;/a&gt;-Abfragen in Python mithilfe von &lt;a href="http://pysnmp.sourceforge.net/" rel="external"&gt;PySNMP&lt;/a&gt; geben. Aus leidiger Erfahrung weiß ich, dass die PySNMP-Dokumentation nur einige sehr knappe Anhaltspunkte zur Bedienung liefert und daher nur begrenzt hilfreich ist.
Es wird vorausgesetzt, dass Erfahrung mit der Programmierung in Python vorhanden ist und die Grundbegriffe von SNMP bekannt sind.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;h2&gt;PySNMP installieren&lt;/h2&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Vorab sollte man die Python-Pakete &lt;a href="http://pypi.python.org/packages/source/p/pyasn1/" rel="external"&gt;PyASN1&lt;/a&gt; und &lt;a href="http://pypi.python.org/packages/source/p/pysnmp/" rel="external"&gt;PySNMP&lt;/a&gt; herunterladen, entpacken und jeweils deren Installationsprozess ausführen:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;~/pyasn1-0.1.6$ sudo python setup.py install
running install
running build
running build_py
running install_lib
[...]
running install_egg_info
Writing /usr/local/lib/python2.7/dist-packages/pyasn1-0.1.6.egg-info&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;~/pysnmp-4.2.4$ sudo python setup.py install
running install
running build
running build_py
creating build
[...]
running install_scripts
copying build/scripts-2.7/build-pysnmp-mib -&gt; /usr/local/bin
copying build/scripts-2.7/libsmi2pysnmp -&gt; /usr/local/bin
changing mode of /usr/local/bin/build-pysnmp-mib to 755
changing mode of /usr/local/bin/libsmi2pysnmp to 755
running install_egg_info
Writing /usr/local/lib/python2.7/dist-packages/pysnmp-4.2.4.egg-info&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;h2&gt;Gemeinsamkeiten der Abfragen&lt;/h2&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Für alle Abfragen bietet PySNMP eine einheitliche Schnittstelle an. Nachfolgend ist die Syntax einmal stichpunktartig anhand einer SNMP-GET-Abfrage aufgelistet:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;from pysnmp.entity.rfc3413.oneliner import cmdgen

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBinding = cmdGen.getCmd(
    cmdgen.CommunityData(&lt;em&gt;Community&lt;/em&gt;),
    cmdgen.UdpTransportTarget((&lt;em&gt;Hostname oder IP&lt;/em&gt;, &lt;em&gt;Port&lt;/em&gt;)),
    ...
)

if errorIndication or errorStatus:
    print "Fehler"
else:
    print varBinding&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Zunächst importieren wir das entsprechende Modul, um dann daraus gleich den sogenannten &lt;code&gt;CommandGenerator&lt;/code&gt; zu instanzieren. In diesem rufen wir die entsprechende Methode (hier &lt;code&gt;getCmd&lt;/code&gt;) auf und übergeben ihr den Community-String (&lt;code&gt;CommunityData&lt;/code&gt;) und die Informationen, um den SNMP-Zielagenten (&lt;code&gt;UdpTransportTarget&lt;/code&gt;) zu erreichen. Weitere Parameter sind dann spezifisch für die jeweilige Anfrage und werden weiter unten erläutert. Einen Fehler können wir anhand der Rückgabeparameter &lt;code&gt;errorIndication&lt;/code&gt;, &lt;code&gt;errorStatus&lt;/code&gt; und &lt;code&gt;errorIndex&lt;/code&gt; erkennen, welche weitere Informationen zum aufgetretenen Fehler liefern. In &lt;code&gt;varBinding&lt;/code&gt; sind im Erfolgsfall die Rückgabewerte zu finden.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;h2&gt;SNMP GET-Abfragen (snmpget)&lt;/h2&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Anschließend können wir unsere erste kleine Abfrage schreiben, welche den lokalen Hostnamen abruft. Grundlage hierfür ist ein simples SNMP-GET.&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;from pysnmp.entity.rfc3413.oneliner import cmdgen

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBinding = cmdGen.getCmd(
    cmdgen.CommunityData("public"),
    cmdgen.UdpTransportTarget(("localhost", 161)),
    "1.3.6.1.2.1.1.5.0"
)

if errorIndication or errorStatus:
    print "Fehler"
else:
    print varBinding&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;$ python snmp.py
[(ObjectName(1.3.6.1.2.1.1.5.0), OctetString('ubuntu'))]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Wir nutzen den &lt;a href="https://de.wikipedia.org/wiki/Object_Identifier" rel="external"&gt;Object Identifier (OID)&lt;/a&gt; von &lt;code&gt;iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).system(1).sysName(5)&lt;/code&gt; und dessen erste Instanz (0) und erhalten als Rückgabe eine Liste von Tupeln bestehend aus dem gefundenen OID und dem zugehörigen Wert in Form eines OctetString nach &lt;a href="https://tools.ietf.org/html/rfc1902" rel="external"&gt;RFC 1902&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;h3&gt;Abfragen mehrerer Werte und Entpacken von Funktionsargumenten&lt;/h3&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Wenn wir mehrere Werte benötigen, beispielsweise Hostname und Uptime, können wir &lt;code&gt;getCmd&lt;/code&gt; auch mehrere OIDs übergeben:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;errorIndication, errorStatus, errorIndex, varBinding = cmdGen.getCmd(
    cmdgen.CommunityData("public"),
    cmdgen.UdpTransportTarget(("localhost", 161)),
    "1.3.6.1.2.1.1.5.0", "1.3.6.1.2.1.1.3.0"
)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;$ python snmp.py
[(ObjectName(1.3.6.1.2.1.1.5.0), OctetString('ubuntu')), (ObjectName(1.3.6.1.2.1.1.3.0), TimeTicks(201146))]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Sehr nützlich ist in diesem Zusammenhang auch das &lt;a href="http://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists" rel="external"&gt;Entpacken von Funktionsargumenten&lt;/a&gt;, wodurch wir auch eine Liste/Tupel von Object Identifiern übergeben können. Analog zum vorigen Beispiel würde das so aussehen:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;OIDS = ["1.3.6.1.2.1.1.5.0", "1.3.6.1.2.1.1.3.0"]

errorIndication, errorStatus, errorIndex, varBinding = cmdGen.getCmd(
    cmdgen.CommunityData("public"),
    cmdgen.UdpTransportTarget(("localhost", 161)),
    *OIDS
)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;h2&gt;SNMP GETNEXT-Abfragen (snmpwalk)&lt;/h2&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Für ein SNMP GETNEXT (z.B. zum Durchlaufen der Interface-Tabelle &lt;code&gt;iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2)&lt;/code&gt;) steht ebenso eine Klasse, &lt;code&gt;nextCmd&lt;/code&gt;, zur Verfügung.&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;errorIndication, errorStatus, errorIndex, varBinding = cmdGen.nextCmd(
    cmdgen.CommunityData("public"),
    cmdgen.UdpTransportTarget(("localhost", 161)),
    "1.3.6.1.2.1.2.2"
)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;$ python snmp.py
[[(ObjectName(1.3.6.1.2.1.2.2.1.1.1), Integer(1))], [(ObjectName(1.3.6.1.2.1.2.2.1.1.2), Integer(2))], [(ObjectName(1.3.6.1.2.1.2.2.1.1.3), Integer(3))], [(ObjectName(1.3.6.1.2.1.2.2.1.2.1), OctetString('lo'))], [(ObjectName(1.3.6.1.2.1.2.2.1.2.2), OctetString('eth0'))], ...]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Hier erhalten wir eine Liste von Listen von Tupeln der Netzwerkadapter und einiger Informationen zu ihnen (Name, Geschwindigkeit, Status, etc.). Auch hier könnten wir durch das Entpacken von Funktionsargumenten wieder mehrere Werte gleichzeitig abfragen.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;h2&gt;SNMP SET-Abfragen (snmpset)&lt;/h2&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Zum Setzen von Werten können wir PySNMP natürlich auch verwenden. Wichtig ist, dass wir hier noch das Modul &lt;code&gt;rfc1902&lt;/code&gt; aus &lt;code&gt;pysnmp.proto&lt;/code&gt; importieren, um die Werte auch gemäß den SNMP-&lt;abbr title="Structure of Management Information"&gt;SMI&lt;/abbr&gt;-Datentypen setzen zu können (siehe &lt;a href="https://tools.ietf.org/html/rfc1902" rel="external"&gt;RFC 1902&lt;/a&gt;), was auch dringend anzuraten ist.&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;from pysnmp.entity.rfc3413.oneliner import cmdgen
from pysnmp.proto import rfc1902

errorIndication, errorStatus, errorIndex, varBinding = cmdGen.setCmd(
    cmdgen.CommunityData("secret"),
    cmdgen.UdpTransportTarget(("localhost", 161)),
    ("1.3.6.1.2.1.1.4.0", rfc1902.OctetString("Administrator"))
)

if errorIndication or errorStatus:
    print "Fehler"
else:
    print varBinding&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;$ python snmp.py
[(ObjectName(1.3.6.1.2.1.1.4.0), OctetString('Administrator'))]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Wir haben eine andere SNMPv2-Community (&lt;code&gt;secret&lt;/code&gt;) genutzt, weil nur diese auf dem hier verwendeten System Schreibzugriff besitzt. Zudem haben wir der Methode die zu setzenden Werte als Tupel aus OID und Wert übergeben.
Selbstverständlich könnten wir zum gleichzeitigen Setzen mehrerer Werte das Entpacken von Funktionsargumenten (s.o.) verwenden. Dazu muss eine Liste von Tupeln bestehend aus OID und zu setzendem Wert übergeben werden. Bedenken sollten wir aber, dass SNMP-SET-Operationen atomar sind, was bedeutet, dass entweder sämtliche Werte erfolgreich gesetzt werden oder keiner. Schlägt also das Setzen eines Wertes aus der übergebenen Liste fehl, wird kein einziger Wert aus der Liste gesetzt.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Im Beispiel haben wir die erste Instanz der System-Kontaktperson (&lt;code&gt;iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).system(1).sysContact(4).0&lt;/code&gt;) auf &lt;code&gt;Administrator&lt;/code&gt; gesetzt. Hierzu benötigen wir aus dem Modul &lt;code&gt;rfc1902&lt;/code&gt; die Klasse &lt;code&gt;OctetString&lt;/code&gt; und instanzieren sich gleich mit dem zu setzenden String. Analog können wir das auch für die anderen Datentypen in RFC 1902 tun. Als Rückgabe erhalten wir wieder eine Liste von Tupeln mit der OID und dem neu gesetzten Wert, wenn die Operation erfolgreich war.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Ein Übersicht der im RFC-1902-Modul zur Verfügung stehenden Datentypen findet sich übrigens &lt;a href="http://twistedsnmp.sourceforge.net/pydoc/pysnmp.proto.rfc1902.html" rel="external"&gt;hier&lt;/a&gt;. Hilfreich ist auch zu wissen, welche Werte in der Objektdatenbank, der sogenannten Management Information Base (MIB), typischerweise zu finden und von welchem Datentyp diese sind. Anhaltspunkte, insbesondere für Cisco-Hardware liefert z.B. der &lt;a href="http://tools.cisco.com/Support/SNMP/public.jsp" rel="external"&gt;Cisco SNMP Object Navigator&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
    <link rel="alternate" href="http://blogeum.de/2013/03/snmp-abfragen-in-python-mit-pysnmp"/>
    <published>2013-03-30T15:22:00+01:00</published>
  </entry>
  <entry>
    <id>http://blogeum.de/2012/11/nginx-im-dual-stack-verfahren-betreiben</id>
    <title>Nginx im Dual-Stack-Verfahren betreiben</title>
    <updated>2012-11-01T16:30:00+01:00</updated>
    <author>
      <name>Christian Gürtler</name>
    </author>
    <content type="html">&lt;p&gt;&lt;/p&gt;&lt;p&gt;Obwohl der Umstieg auf IPv6 eher schleppend vorangeht (in Deutschland ist der &lt;a href="http://www.google.de/ipv6/statistics.html#tab=per-country-ipv6-adoption" rel="external"&gt;IPv6-Traffic unter 1%&lt;/a&gt;), sollte man sich schon jetzt für die Zukunft rüsten. Sofern man eine IPv6-Adresse sein Eigen nennen darf, kann man den sogenannten &lt;a href="http://de.wikipedia.org/wiki/IPv6#Dual-Stack" rel="external"&gt;Dual-Stack-Betrieb&lt;/a&gt; fahren, bei dem ein Host zusätzlich zur altbekannten IPv4-Adresse über eine IPv6-Adresse erreichbar ist. Setzt man &lt;a href="http://nginx.org/" rel="external"&gt;Nginx&lt;/a&gt; als Webserver ein, ist die Konfiguration hierfür sehr einfach. Zunächst sollte man aber überprüfen, ob die eingesetzte Nginx-Version überhaupt mit IPv6 umgehen kann:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;$ nginx -V
nginx version: nginx/1.1.19
TLS SNI support enabled
configure arguments: [...] --with-ipv6 [...]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Wenn in den Konfigurationsargumenten der Schalter &lt;code&gt;--with-ipv6&lt;/code&gt; gesetzt wurde, steht dem Dual-Stack nichts mehr im Wege. Nun sollte man in der Nginx-Konfiguration für den Host (oder den primären Host im Falle von &lt;a href="http://de.wikipedia.org/wiki/Virtual_Hosting#Namensbasiertes_Virtual_Hosting" rel="external"&gt;namensbasiertem Virtual Hosting&lt;/a&gt;) die nachfolgenden &lt;a href="http://nginx.org/en/docs/http/ngx_http_core_module.html#listen" rel="external"&gt;Listen-Optionen&lt;/a&gt; setzen. Zu finden ist diese Konfigurationsdatei meist als Symlink unter &lt;code&gt;/etc/nginx/sites-enabled/default&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;server {
    listen [::]:80 ipv6only=on;
    listen 80;

    server_name example.org localhost 127.0.0.1;

    [...]
}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Sie sorgen dafür, dass Nginx auf allen Netzwerkschnittstellen auf eingehende IPv6- und IPv4-Verbindungen auf Port 80 lauscht. Theoretisch wäre die erste Zeile ohne die Option &lt;code&gt;ipv6only=on&lt;/code&gt; ausreichend. Im Test traten jedoch einige Probleme dabei auf, sodass sie besser gesetzt wird. Ohne diese Option würde beim Binden auf IPv6 gleichzeitig das Binden auf IPv4 erfolgen, wodurch die folgende Zeile (also &lt;code&gt;listen 80&lt;/code&gt;) nicht nur unnötig wäre, sondern so schlicht nicht funktionieren würde (klar, der Port ist schon durch die erste Option gebunden und damit „besetzt“). Der Start von Nginx würde mit folgender Fehlermeldung fehlschlagen:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;Restarting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
nginx.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Daher wird durch &lt;code&gt;ipv6only=on&lt;/code&gt; angezeigt, dass wirklich nur auf IPv6 gebunden werden soll. In der nächsten Zeile erfolgt dann explizit das Binden auf IPv4.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Dasselbe kann nun auch für einen SSL-Host erfolgen:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;server {
    listen [::]:443 ipv6only=on;
    listen 443;

    server_name example.org localhost 127.0.0.1;

    [...]
}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Sollten noch weitere virtuelle Hosts vorhanden sein, so kann der Dual-Stack-Betrieb für diese analog eingestellt werden. &lt;strong&gt;Zwingend beachten sollte man dabei jedoch, dass die Option&lt;/strong&gt; &lt;code&gt;ipv6only=on&lt;/code&gt; &lt;strong&gt;bei diesen nicht mehr gesetzt werden muss bzw. darf.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Abschließend kann der Nginx-Server neu gestartet werden:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;$ /etc/init.d/nginx restart&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;oder unter Ubuntu&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;$ service nginx restart&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;</content>
    <link rel="alternate" href="http://blogeum.de/2012/11/nginx-im-dual-stack-verfahren-betreiben"/>
    <published>2012-11-01T16:30:00+01:00</published>
  </entry>
  <entry>
    <id>http://blogeum.de/2012/09/neues-projekt-jscrollpresenter</id>
    <title>Neues Projekt: jScrollPresenter</title>
    <updated>2012-09-08T18:17:00+02:00</updated>
    <author>
      <name>Christian Gürtler</name>
    </author>
    <content type="html">&lt;p&gt;&lt;/p&gt;&lt;p&gt;In letzter Zeit hat sich hier wenig getan. Das lag zum einen daran, dass ich anderweitig viel beschäftigt war und zum anderen, dass ich an einem neuen Projekt geschraubt habe. Es ging dabei um die Erstellung eines Plugins für &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; mit dem sich sogenannte Slides (im Grunde so etwas wie Folien bei einer Präsentation) horizontal anordnen und durchscrollen lassen.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Es gibt zwar schon einige bestehende Plugin-Ansätze, diese waren mir jedoch zu überladen und schwierig anzupassen. Aus diesem Grund wurde &lt;a href="http://blogeum.de/jScrollPresenter/"&gt;jScrollPresenter&lt;/a&gt; als einfache und leichtgewichtige Alternative geschaffen. jScrollPresenter kommt bereits auf meiner &lt;a href="http://christianguertler.de"&gt;Web-Visitenkarte&lt;/a&gt; zum Einsatz und leistet dort gute Dienste.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Ich verweise an dieser Stelle einfach mal auf die &lt;a href="http://blogeum.de/jScrollPresenter/"&gt;Demo-Seite&lt;/a&gt;, denn dort kann man weitere Informationen und eine Vorstellung davon erhalten, was mit dem Plugin zu erreichen ist. Außerdem ist dort der Download möglich.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
    <link rel="alternate" href="http://blogeum.de/2012/09/neues-projekt-jscrollpresenter"/>
    <published>2012-09-08T18:17:00+02:00</published>
  </entry>
  <entry>
    <id>http://blogeum.de/2012/07/fussmatte-dieser-bewohner-von-getdigitalde-im-test</id>
    <title>Fußmatte „Dieser Bewohner ...“ von getDigital.de im Test</title>
    <updated>2012-07-28T18:05:00+02:00</updated>
    <author>
      <name>Christian Gürtler</name>
    </author>
    <content type="html">&lt;p&gt;&lt;/p&gt;&lt;p&gt;Fast jeder &lt;a href="https://www.youtube.com/" rel="external"&gt;YouTube&lt;/a&gt;-Nutzer hat beim Versuch, ein Video anzuschauen, schon einmal folgende Meldung bekommen.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p class="center"&gt;&lt;a href="http://blogeum.de/upload/73290599.jpg" class="nanobox" title="YouTube Fehlermeldung" rel="gallery_entry_65"&gt;&lt;img src="http://blogeum.de/upload/73290599.jpg" alt="YouTube Fehlermeldung" title="YouTube Fehlermeldung" width="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Über die Gründe könnte man sich sicher stundenlang auslassen und beschweren. Die Jungs und Mädels von &lt;a href="http://www.getdigital.de/" rel="external"&gt;getDigital.de&lt;/a&gt;, &lt;em&gt;dem&lt;/em&gt; deutschsprachigen Geek-Shop haben als kleine Satire auf diese nervige Meldung eine &lt;a href="http://www.getdigital.de/products/fussmattedieserbewohner" rel="external"&gt;Fußmatte&lt;/a&gt; in ihren Shop aufgenommen, deren Botschaft über jeden Zweifel erhaben ist. Mit dem freundlichen Aufdruck „Dieser Bewohner ist für dich nicht verfügbar. Das tut mir leid.“ werden unliebsame Zeitgenossen direkt vor der Haustür abgewimmelt wohingegen Eingeweihte sofort Bescheid wissen.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Freundlicherweise wurde mir ein Testexemplar zu Verfügung gestellt, das ich auf Herz und Nieren untersuchen durfte. Zunächst erst einmal einen Dank an getDigital.de für die freundliche und zugügige Abwicklung (Donnerstagnachmittag bestellt, Samstag angekommen).&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p class="center"&gt;&lt;a href="http://blogeum.de/upload/13535895.jpg" class="nanobox" title="Vor dem Auspacken …" rel="gallery_entry_65"&gt;&lt;img src="http://blogeum.de/upload/13535895.jpg" alt="Vor dem Auspacken …" title="Vor dem Auspacken …" height="160"&gt;&lt;/a&gt; &lt;a href="http://blogeum.de/upload/18815633.jpg" class="nanobox" title="Nach dem Auspacken …" rel="gallery_entry_65"&gt;&lt;img src="http://blogeum.de/upload/18815633.jpg" alt="Nach dem Auspacken …" title="Nach dem Auspacken …" height="160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Nun erst einmal zu den „technischen Daten“. Die Matte ist, wie viele andere Fußmatten auch, aus Kokosfasern gefertigt, die sehr hart und deshalb genau richtig zum Fußabstreifen sind. Sie hat die (von mir gemessenen) Maße von 59,5 cm auf 40,0 cm und ist 1,5 cm dick. Auf der Vorderseite ist der oben beschriebene witzige Satz zu finden und zusätzlich noch ein abstraktes trauriges Gesicht. Die Rückseite ist aus weichem und rutschfestem PVC.&lt;br&gt;Anzumerken ist, dass der Aufdruck (wenn man das so nennen darf) oberflächlich ist (also die Fasern sind nicht durchgängig bis hinunter gefärbt) und auch, im Gegensatz zu den Produktfotos von getDigital leicht unscharf ist. Das macht aber nichts, weil man ihn trotzdem gut lesen kann.&lt;br&gt;
Aufpassen sollte man beim Auspacken, da die Fußmatte sehr dazu neigt, viele kleine Fasern (ähnlich wie kleine Holzspäne) abzusondern, sodass der Boden danach mit diesen Fasern gespickt ist. Also am Besten draußen auspacken, vorzugsweise direkt am künftigen Einsatzort. Das hilft auch gegen den doch sehr aufdringlichen Plastikgeruch. Der sollte sich nach ein paar Tagen an der frischen Luft aber verzogen haben.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p class="center"&gt;&lt;a href="http://blogeum.de/upload/17453908.jpg" class="nanobox" title="Gesamtansicht der Fußmatte" rel="gallery_entry_65"&gt;&lt;img src="http://blogeum.de/upload/17453908.jpg" alt="Gesamtansicht der Fußmatte" title="Gesamtansicht der Fußmatte" height="160"&gt;&lt;/a&gt; &lt;a href="http://blogeum.de/upload/91850905.jpg" class="nanobox" title="Nahaufnahme der Fasern" rel="gallery_entry_65"&gt;&lt;img src="http://blogeum.de/upload/91850905.jpg" alt="Nahaufnahme der Fasern" title="Nahaufnahme der Fasern" height="160"&gt;&lt;/a&gt; &lt;a href="http://blogeum.de/upload/33366705.jpg" class="nanobox" title="Fußmatte im Einsatz" rel="gallery_entry_65"&gt;&lt;img src="http://blogeum.de/upload/33366705.jpg" alt="Fußmatte im Einsatz" title="Fußmatte im Einsatz" height="160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Alles in allem eine sehr gute Fußmatte und auch der &lt;a href="http://www.getdigital.de/products/fussmattedieserbewohner" rel="external"&gt;Preis von 19,95 €&lt;/a&gt; für eine hochwertige Fußmatte aus Kokosfasern geht in Ordnung. Vergleichbare Produkte liegen ebenfalls in diesem Preisbereich.&lt;br&gt;Bedenken habe ich noch, wenn die Fußmatte ganz allein draußen rumliegt. Denn ich konnte beobachten, dass sich schon einige Leute nach dieser dekorativen Matte umgedreht haben und nicht so freundliche Zeitgenossen könnten dabei womöglich in Versuchung kommen sie zu entwenden ;-). Daher ist mein Tipp, sie besser hinter der Eingangstür zu platzieren, wobei dabei natürlich der „Abschreckungsfaktor“ der Nachricht und der Gag-Faktor verloren gehen.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
    <link rel="alternate" href="http://blogeum.de/2012/07/fussmatte-dieser-bewohner-von-getdigitalde-im-test"/>
    <published>2012-07-28T18:05:00+02:00</published>
  </entry>
  <entry>
    <id>http://blogeum.de/2012/06/ubuntu-server-mailserver-installieren-und-mailweiterleitung-einrichten</id>
    <title>Ubuntu Server: Mailserver installieren und Mailweiterleitung einrichten</title>
    <updated>2012-06-20T23:45:00+02:00</updated>
    <author>
      <name>Christian Gürtler</name>
    </author>
    <content type="html">&lt;p&gt;&lt;/p&gt;&lt;p&gt;Auf einem typischen virtuellen Server, wie er bei vielen namhaften Anbietern erhältlich ist und der als Webserver dienen soll, ist normalerweise auch ein Mailserver zum Empfangen und Versenden von E-Mails unerlässlich. Die Einrichtung erweist sich jedoch meist als sehr aufwändig und fehleranfällig. Schließlich möchte man keinen &lt;a href="http://de.wikipedia.org/wiki/Offenes_Mail-Relay" rel="external"&gt;Open Relay&lt;/a&gt; schaffen, von dem jedermann Nachrichten versenden kann. Zudem ist der Zugriff über IMAP (oder POP) und speziell die Verwaltung der Mailkonten schwierig und kann unübersichtlich werden, wenn man schon einige weitere E-Mail-Adressen besitzt. Warum also nicht die eingehenden Nachrichten an ein anderes E-Mail-Konto, beispielsweise bei Gmail oder Yahoo! Mail, weiterleiten?&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Im Folgenden soll daher die Installation und Einrichtung von &lt;a href="http://www.postfix.org/" rel="external"&gt;Postfix&lt;/a&gt; unter Ubuntu Server 10.04 zur Mailweiterleitung beschrieben werden.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;In den Server-Versionen von Ubuntu (und dementsprechend auch Debian) kann man glücklicherweise relativ einfach den Mailserver (genauer den &lt;a href="http://de.wikipedia.org/wiki/Mail_Transfer_Agent" rel="external"&gt;MTA&lt;/a&gt;) Postfix mit einer sicheren Grundkonfiguration installieren. Dennoch sollte man ggf. die Konfiguration kritisch prüfen! Es wird das Paket &lt;a href="http://packages.ubuntu.com/lucid/dovecot-postfix" rel="external"&gt;dovecot-postfix&lt;/a&gt; benötigt.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Vorher sollte gegebenenfalls noch ein &lt;code&gt;sudo apt-get update&lt;/code&gt; ausgeführt werden!&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;$ sudo apt-get install dovecot-postfix
[sudo] password for ubuntu:
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut
Status-Informationen einlesen... Fertig
Die folgenden zusätzlichen Pakete werden installiert:
  dovecot-common dovecot-imapd dovecot-pop3d libpq5
Vorgeschlagene Pakete:
  ntp
Die folgenden NEUEN Pakete werden installiert:
  dovecot-common dovecot-imapd dovecot-pop3d dovecot-postfix libpq5
0 aktualisiert, 5 neu installiert, 0 zu entfernen und 1 nicht aktualisiert.
Es müssen 8.058kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 15,7MB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren [J/n]? j

[...]

Richte dovecot-common ein (1:1.2.9-1ubuntu6.5) ...

Creating config file /etc/dovecot/dovecot.conf with new version

Creating config file /etc/dovecot/dovecot-ldap.conf with new version

Creating config file /etc/dovecot/dovecot-sql.conf with new version
adduser: Warnung: Das Benutzerverzeichnis »/usr/lib/dovecot« gehört nicht dem Benutzer, den Sie gerade anlegen.
Creating generic self-signed certificate:  /etc/ssl/certs/dovecot.pem
(replace with hand-crafted or authorized one if needed).
update-rc.d: warning: dovecot stop runlevel arguments (1) do not match LSB Default-Stop values (0 1 6)
* Starting IMAP/POP3 mail server dovecot                                                                    [ OK ]

Richte dovecot-imapd ein (1:1.2.9-1ubuntu6.5) ...
* Restarting IMAP/POP3 mail server dovecot
If you have trouble with authentication failures,
enable auth_debug setting. See http://wiki.dovecot.org/WhyDoesItNotWork
This message goes away after the first successful login.
[ OK ]

Richte dovecot-pop3d ein (1:1.2.9-1ubuntu6.5) ...
* Restarting IMAP/POP3 mail server dovecot
If you have trouble with authentication failures,
enable auth_debug setting. See http://wiki.dovecot.org/WhyDoesItNotWork
This message goes away after the first successful login.
[ OK ]

Richte dovecot-postfix ein (1:1.2.9-1ubuntu6.5) ...

Postfix not configured. Run
sudo dpkg-reconfigure postfix and choose
the type of mail server. Then run
sudo dpkg-reconfigure dovecot-postfix to
finish dovecot-postfix installation.

* Restarting IMAP/POP3 mail server dovecot
If you have trouble with authentication failures,
enable auth_debug setting. See http://wiki.dovecot.org/WhyDoesItNotWork
This message goes away after the first successful login.
[ OK ]

Verarbeite Trigger für libc-bin ...
ldconfig deferred processing now taking place&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Nun kann Postfix noch auf die eigenen Gegebenheiten angepasst werden:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;$ sudo dpkg-reconfigure postfix&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Hier Internet-Site auswählen und anschließend den Domainnamen, unter dem der Server &lt;em&gt;primär&lt;/em&gt; erreichbar ist, eintragen. Bei virtuellen Servern kann die vorgeschlagene Angabe im Regelfall so übernommen werden. Ein etwaiger vorhandener eigener Domainname (z.B. example.com) sollte später an einer anderen Stelle eingetragen werden (s.u.). Nun den eigenen Benutzernamen eingeben. An diesen Nutzer werden dann Systemnachrichten zugestellt. Die nächsten Abfragen einfach mit Enter bestätigen bis die Konfiguration abgeschlossen ist.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Jetzt kann damit begonnen werden, den MTA für Mailweiterleitungen zu konfigurieren:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;$ sudo vim /etc/postfix/main.cf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;An das Ende dieser Datei nun die folgenden Zeilen anhängen:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;virtual_alias_domains = example.com, example.net
virtual_alias_maps = hash:/etc/postfix/virtual
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
show_user_unknown_table_name = no&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Durch die erste Zeile wird festgelegt, für welche Domainnamen überhaupt Mails empfangen werden können. Wichtig ist hierbei, dass die hier angegebenen Domainnamen nicht unter &lt;code&gt;mydestination&lt;/code&gt; schon angegeben sind! In der zweiten Zeile wird die Datei definiert, in der die einzelnen Adressen und deren Weiterleitungen aufgelistet sind. Die dritte Zeile ist schließlich wichtig, damit Postfix die Zertifikate der Mailserver, an die die Weiterleitung erfolgen soll, verifiziert werden können. Ansonsten würden sich immer beim Weiterleiten einer E-Mail folgende Fehlermeldungen im Syslog (&lt;code&gt;/var/log/syslog&lt;/code&gt;) ansammeln, wobei die Mail trotzdem erfolgreich weitergeleitet wird:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;Jun 16 18:41:24 h2037982 postfix/smtpd[18058]: connect from xxxx-xxx.bullet.mail.ne1.yahoo.com[98.138.xxx.xxx]
Jun 16 18:41:25 h2037982 postfix/smtpd[18058]: 71A3B2XXXXXX: client=xxxx-xxx.bullet.mail.ne1.yahoo.com[98.138.xxx.xxx]
Jun 16 18:41:25 h2037982 postfix/cleanup[18063]: 71A3B2XXXXXX: message-id=&amp;lt;XXXXXXXX.XXXXXXX@ymail.com&amp;gt;
Jun 16 18:41:25 h2037982 postfix/qmgr[18064]: 71A3B2XXXXXX: from=&amp;lt;xxxxx@ymail.com&amp;gt;, size=2199, nrcpt=1 (queue active)
Jun 16 18:41:26 h2037982 postfix/smtp[18065]: certificate verification failed for gmail-smtp-in-xxxx.l.google.com[173.194.xx.xx]:25: untrusted issuer /C=US/O=Equifax/OU=Equifax Secure Certificate Authority&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;In der vierten Zeile wird schließlich festgelegt, dass nicht zuviel über die Postfix-Konfiguration nach außen preisgeben wird. Standardmäßig würde Postfix bei einer Nachricht an eine nicht definierte E-Mail-Adresse eine Nachricht an den Absender schicken, in der folgende Zeile zu lesen ist:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;Diagnostic-Code: smtp;550 5.1.1 &amp;lt;test@example.org&amp;gt;: Recipient address rejected: User unknown in virtual recipient table.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Durch die vorher genannte Einstellung ist jetzt nur noch zu lesen:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;Diagnostic-Code: smtp;550 5.1.1 &amp;lt;test@example.org&amp;gt;: Recipient address rejected: User unknown&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Nun muss noch die Datei &lt;code&gt;/etc/postfix/virtual&lt;/code&gt; mit den Weiterleitungsangaben angelegt werden:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;$ sudo vim /etc/postfix/virtual&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;In diese Datei werden nun beispielsweise folgende Informationen eingetragen:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;postmaster@example.com ubuntu
postmaster@example.net ubuntu

mail@example.com example@gmail.com
mail@example.net example@gmail.com&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Dadurch werden E-Mails an postmaster@example.com und postmaster@example.net an den Benutzer ubuntu zugestellt. Viel wichtiger sind jedoch die Angaben darunter. Sie legen fest, dass E-Mails an mail@example.com und mail@example.com an example@gmail.com weitergeleitet werden.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Zu guter Letzt sollte Postfix noch die neue Konfiguration bekannt gemacht und neu gestartet werden:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;&lt;code&gt;postmap /etc/postfix/virtual
service postfix restart&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;</content>
    <link rel="alternate" href="http://blogeum.de/2012/06/ubuntu-server-mailserver-installieren-und-mailweiterleitung-einrichten"/>
    <published>2012-06-20T23:45:00+02:00</published>
  </entry>
  <entry>
    <id>http://blogeum.de/2012/06/endlich-angekommen-raspberry-pi-ist-da</id>
    <title>Endlich angekommen: Raspberry Pi ist da!</title>
    <updated>2012-06-04T13:02:00+02:00</updated>
    <author>
      <name>Christian Gürtler</name>
    </author>
    <content type="html">&lt;p&gt;&lt;/p&gt;&lt;p&gt;Nach einer doch etwas längeren Wartezeit ist mein &lt;a href="http://www.raspberrypi.org/" rel="external"&gt;Raspberry Pi&lt;/a&gt; endlich angekommen. Ein großes Kompliment an DHL, die ihn am Freitag in England entgegengenommen und schon heute (Montag) zugestellt haben.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p class="center"&gt;&lt;a href="http://blogeum.de/upload/12778978.jpg" class="nanobox"&gt;&lt;img src="http://blogeum.de/upload/12778978.jpg" alt="Raspberry Pi" title="Raspberry Pi" width="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Euch wird also demnächst ein kleiner Erfahrungsbericht zum Minicomputer erwarten. Bis dahin.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
    <link rel="alternate" href="http://blogeum.de/2012/06/endlich-angekommen-raspberry-pi-ist-da"/>
    <published>2012-06-04T13:02:00+02:00</published>
  </entry>
  <entry>
    <id>http://blogeum.de/2012/05/kurztest-nexus-silent-mouse-sm-7000</id>
    <title>Kurztest: Nexus Silent Mouse SM-7000</title>
    <updated>2012-05-05T17:54:00+02:00</updated>
    <author>
      <name>Christian Gürtler</name>
    </author>
    <content type="html">&lt;p&gt;&lt;/p&gt;&lt;p&gt;Für mein Notebook benötigte ich eine neue Maus. Eine schnurlose sollte es sein und als ich im Markt mit dem Planetennamen einige Modelle ausprobiert hatte und die &lt;a href="http://www.nexustek.nl/nexus_silent_mouse.htm" rel="external"&gt;Nexus Silent Mouse SM-7000&lt;/a&gt; als Restposten für 17 Euro angeboten wurde, musste ich einfach zuschlagen. Die Werbung auf der Verpackung war immerhin sehr vielversprechend: "Mucksmäuschenstill!" war dort zu lesen. Daher wollte ich es mir nicht nehmen lassen, das Werbeversprechen in einem kurzen Test zu prüfen. Im Folgenden also ein kurzer Testbericht.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p class="center"&gt;&lt;a href="http://blogeum.de/upload/16202339.jpg" class="nanobox" title="Verpackung der SM-7000" rel="gallery-entry-62"&gt;&lt;img src="http://blogeum.de/upload/16202339.jpg" alt="Verpackung der SM-7000" title="Verpackung der SM-7000" width="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;Erst einmal zu den technischen Daten: &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Schnurlose Maus auf 2,4 GHz-Basis&lt;/li&gt;&lt;li&gt;Nano-Empfänger, der im Gerät verstaut werden kann&lt;/li&gt;&lt;li&gt;Abtastauflösung umschaltbar zwischen 1000 DPI und 1600 DPI&lt;/li&gt;&lt;li&gt;Betrieb mit 2 AAA-Batterien&lt;/li&gt;&lt;li&gt;Automatischer Energiesparmodus&lt;/li&gt;&lt;li&gt;Maximale Reichweite zwischen 6 und 10 Metern&lt;/li&gt;&lt;li&gt;Ergonomische Form für Rechtshänder&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Nun zum vermutlich wichtigsten Kaufargument: Auf der Verpackung wird ein komplett geräuschloser Betrieb versprochen, weil spezielle Taster verbaut wurden, welche nicht das typische Klickgeräusch aufweisen sollen. Bei der linken und rechten Maustaste kann ich dem zustimmen. Ein nur minimal wahrnehmbares, dumpfes Klickgeräusch, was durchaus sehr angenehm ist. Jedoch können die mittlere Maustaste inklusive Scrollrad nicht mithalten und verursachen weiterhin die üblichen Geräusche. Hier wäre demnach noch Verbesserungspotential. Ebenfalls negativ ist, dass die rechte Maustaste zu „schwammig“ und weich ist, sodass man keine genaue Rückmeldung erhält. Daher kann es passieren, dass man sie versehentlich betätigt.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p class="center"&gt;&lt;a href="http://blogeum.de/upload/86602648.jpg" class="nanobox" title="SM-7000" rel="gallery-entry-62"&gt;&lt;img src="http://blogeum.de/upload/86602648.jpg" alt="SM-7000" title="SM-7000" width="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Der angepriesene automatische Energiesparmodus funktioniert hingegen einwandfrei. Beim Herausziehen des USB-Empfängers schaltet sich die Maus selbständig ab und der Empfänger kann auf der Unterseite der Maus problemlos verstaut werden.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p class="center"&gt;&lt;a href="http://blogeum.de/upload/21126412.jpg" class="nanobox" title="SM-7000" rel="gallery-entry-62"&gt;&lt;img src="http://blogeum.de/upload/21126412.jpg" alt="SM-7000" title="SM-7000" width="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Beide DPI-Stufen vermitteln ein angenehmes Arbeitsgefühl und es kommt bei normaler Entfernung zum Empfänger zu keinen Aussetzern. Die maximale Reichweite kann und möchte ich nicht testen, weil sie im Arbeitsalltag eher selten vorkommen wird. Als Unterlagen wurden Holz und Papier sowie ein Standard-Mauspad getestet, wobei keine Abtastprobleme festzustellen waren.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Zusammenfassend ist dem Hersteller eine durchaus gutes Produkt gelungen. Die Detailschwächen sollten jedoch behoben werden, bevor man von einer wirklich mucksmäuschenstillen Maus sprechen darf.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
    <link rel="alternate" href="http://blogeum.de/2012/05/kurztest-nexus-silent-mouse-sm-7000"/>
    <published>2012-05-05T17:54:00+02:00</published>
  </entry>
  <entry>
    <id>http://blogeum.de/2012/04/ssd-optimierungen-fuer-windows-7-teil-2</id>
    <title>SSD-Optimierungen für Windows 7 - Teil 2</title>
    <updated>2012-04-09T14:39:00+02:00</updated>
    <author>
      <name>Christian Gürtler</name>
    </author>
    <content type="html">&lt;p&gt;&lt;/p&gt;&lt;p&gt;Im &lt;a href="http://blogeum.de/2012/02/ssd-optimierungen-fuer-windows-7"&gt;ersten Teil&lt;/a&gt; habe ich einige Möglichkeiten beschrieben, Windows 7 und Vista fit für eine SSD zu machen und dabei gleichzeitig unnötige Schreibzugriffe zu Gunsten der Lebendauer der SSD zu reduzieren. Im Web sind jedoch noch viele weitere Tipps im Umlauf, die teilweise überflüssige Optimierungen vorschlagen aber auch teilweise ganz nützlich sein können. Im Folgenden also noch ein paar weitere Tuningmaßnahmen für Windows 7 und Vista und eine Übersicht der überflüssigen Methoden.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p class="center"&gt;&lt;a href="http://blogeum.de/upload/68533072.jpg" class="nanobox" title="Intel X25-M SATA Solid-State Drive (SSD) (Quelle: Intel Free Press)"&gt;&lt;img src="http://blogeum.de/upload/68533072.jpg" alt="Intel X25-M SATA Solid-State Drive (SSD)" title="Intel X25-M SATA Solid-State Drive (SSD)" width="250"&gt;&lt;/a&gt;

&lt;!-- more --&gt;

&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h2&gt;Weitere Tuningmaßnahmen&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;Prefetcher deaktivieren&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;In Windows XP führte Microsoft den sogenannten Prefetching-Mechanismus ein. Dieser dient dazu, häufig benutzte Dateien für den Bootvorgang oder den Start von Programmen besser zu organisieren. Normalerweise sind nämlich diese Dateien gewissermaßen über die Festplatte verstreut und der Schreib-/Lesekopf muss sich immer wieder neu positionieren, um diese Dateien gänzlich zu lesen. Eventuell muss die selbe Datei sogar mehrmals gelesen werden, wodurch sich dieser Prozess wiederholen kann. Stark vereinfacht beschrieben, zeichnet der Prefetcher nun auf, welche Dateien (und Fragmente dieser Dateien) beim Booten und Starten häufig benötigter Programme gebraucht werden und sortiert sie alle drei Tage mit Hilfe der Windows Defragmentierung so um, dass sie sequentiell – also ohne Neupositionierung des Schreib-/Lesekopfes – gelesen werden können (siehe dazu auch &lt;a href="http://proquest.tech.safaribooksonline.de/book/operating-systems-and-server-administration/microsoft-windows-server/0735619174/memory-management/ch07lev1sec10" rel="external"&gt;Microsoft Windows Internals&lt;/a&gt;).&lt;br&gt;Weil bei einer SSD der Zugriff auf verschiedene Speicherzellen &lt;a href="http://de.wikipedia.org/wiki/Wahlfreier_Zugriff" rel="external"&gt;wahlfrei&lt;/a&gt; erfolgen kann, ist eine solche automatische Optimierung natürlich unnötig und darf getrost abgeschaltet werden, um Speicherplatz und Schreibzugriffe zu sparen. Hierzu ist ein Eingriff in die Systemregistrierung erforderlich. Der zu ändernde Wert &lt;code&gt;EnablePrefetcher&lt;/code&gt; befindet sich unter &lt;code&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters&lt;/code&gt;. Normalerweise ist hier ein Wert von 3 vorgegeben, wodurch der Bootprozess und Programmstart optimiert wird. Als SSD-Besitzer sollte man ihn auf 0 ändern, um den Prefetcher vollständig abzuschalten. Ein Neustart ist anschließend noch erforderlich.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;Persönliche Anwendungsdaten verschieben&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Webbrowser (z.B. Firefox oder Chrome) und Mailprogramme (z.B. Thunderbird) sind Beispiele für Programme, die ihre Anwendungsdaten bevorzugt unter &lt;code&gt;C:\Users\[Benutzername]\AppData\&lt;/code&gt; ablegen und dadurch für vermehrte Schreibzugriffe verantwortlich sind, wenn &lt;code&gt;C:\&lt;/code&gt; die Systempartition auf der SSD ist. Wenn sie an diesem Ort auf der SSD liegen, sorgen sie jedoch nicht unbedingt für erhöhte Anwendungsperformance. Sie können also, wenn vorhanden, auf eine herkömmliche Festplatte verschoben werden, was zum einen Schreibzugriffe einsparen kann und zum anderen lassen sich Backups vereinfachen, weil sie an einem zentralen Ort gesammelt werden können.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h2&gt;Unnötige Maßnahmen&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;Auslagerungsdatei deaktivieren&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Ein häufig vorgeschlagener Tipp, um Schreibzugriffe zu reduzieren ist, die Auslagerungsdatei (Swap) vollständig abzuschalten. Wenn genügend Arbeitsspeicher (RAM) zur Verfügung steht, mag das kein Problem sein. Sollte jedoch einmal mehr Speicher benötigt werden als vorhanden ist, kann Windows nun nicht mehr einen Teil des RAM auf der Festplatte oder SSD auslagern und so „Platz schaffen“. Daher sollte auch bei ausreichend großem Arbeitsspeicher die Auslagerungsdatei erhalten bleiben und lediglich in der Größe reduziert werden (wie im vorigen Teil beschrieben), um SSD-Speicherplatz zu sparen. Zudem kommen &lt;a href="http://blogs.msdn.com/b/e7/archive/2009/05/05/support-and-q-a-for-solid-state-drives-and.aspx" rel="external"&gt;Untersuchungen von Microsoft&lt;/a&gt; selbst zu dem Schluss, dass das Verhältnis von Lese- zu Schreibzugriffen auf die Auslagerungsdatei (pagefile.sys) rund 40:1 ist, also nach 40 lesenden gerade einmal &lt;em&gt;ein&lt;/em&gt; schreibender Zugriff erfolgt. Bei ausreichend großem RAM sollten theoretisch noch weniger oder gar keine Schreibzugriffe nötig sein.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Wenn jemand von euch noch mehr Optimierungstipps kennt und sie womöglich sogar verwendet, dann ab damit in die Kommentare.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Bild: &lt;a href="http://www.flickr.com/photos/intelfreepress/" rel="external"&gt;Intel Free Press&lt;/a&gt; via &lt;a href="http://www.flickr.com/photos/54450095@N05/6345916908" rel="external"&gt;Flickr&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
    <link rel="alternate" href="http://blogeum.de/2012/04/ssd-optimierungen-fuer-windows-7-teil-2"/>
    <published>2012-04-09T14:39:00+02:00</published>
  </entry>
  <entry>
    <id>http://blogeum.de/2012/03/binaeruhr-von-getdigitalde-im-test</id>
    <title>Binäruhr von getDigital.de im Test</title>
    <updated>2012-03-23T17:34:00+01:00</updated>
    <author>
      <name>Christian Gürtler</name>
    </author>
    <content type="html">&lt;p&gt;&lt;/p&gt;&lt;p&gt;Auf der diesjährigen CeBIT war ich auch am Stand von &lt;a href="http://www.getdigital.de/" rel="external"&gt;getDigital.de&lt;/a&gt;, einem Gadget-Shop für mit diversen geekigen Spielereien und Geschenkideen. Als Blogger durfte ich mir auch ein kleines Gadget aus dem Sortiment &lt;a href="http://blogeum.de/2012/03/getdigitalde-auf-der-cebit-2012-mit-kostenlosem-test-gadget-fuer-blogger"&gt;zum Testen aussuchen&lt;/a&gt;. Meine Wahl fiel auf die &lt;a href="http://www.getdigital.de/products/binaeruhr"&gt;Binäruhr&lt;/a&gt;. Keine einfache Armbanduhr, sondern eine zum auf den Tisch stellen. Sie ist seit ein paar Tagen bei mir im Einsatz und nun soll auch ein kleiner Testbericht folgen.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p class="center"&gt;&lt;a href="http://blogeum.de/upload/81970600.jpg" class="nanobox" title="Binäruhr von getDigital.de" rel="gallery-entry-61"&gt;&lt;img src="http://blogeum.de/upload/81970600.jpg" alt="Produktabbildung: Binäruhr von getDigital.de" title="Binäruhr von getDigital.de" width="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;

&lt;p&gt;Nach dem Auspacken aus dem Karton hat man eine relativ kompakte und kleine Standuhr vor sich, deren Abmessungen 9 cm × 8,5 cm × 4,5 cm (B × H × T) betragen. Sie besteht vollkommen aus Plastik, das jedoch sehr gut verarbeitet ist und sich durchaus wertig anfühlt. Scharfe Ecken oder Kanten sind nicht vorhanden. Die Vorderseite ist aus halbdurchsichtigem roten Plastik und, wie zu erwarten, mit 20 roten Leuchtdioden bestückt. Ein Netzteil (9V, 200mA, ~1,8 W Ausgangsleistung) gehört ebenso zum Lieferumfang und wird auch benötigt, denn ein Batteriebetrieb ist leider nicht möglich.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p class="center"&gt;&lt;a href="http://blogeum.de/upload/71290681.jpg" class="nanobox" title="Binäruhr von getDigital.de im BCD-Mode" rel="gallery-entry-61"&gt;&lt;img src="http://blogeum.de/upload/71290681.jpg" alt="Produktabbildung: Binäruhr von getDigital.de im BCD-Mode" title="Binäruhr von getDigital.de im BCD-Mode" width="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Unmittelbar nach dem Einschalten wird erstmal ein kleines „Testprogramm“ gefahren, bei dem die LED-Reihen der abwechselnd aufleuchten. Nun aber zum interessanten Teil: dem Ablesen der Uhr. Zwei Modi stehen zur Verfügung. Zum einen der &lt;abbr title="Binary Coded Decimal"&gt;BCD&lt;/abbr&gt;-Modus und zum anderen der True-Binary-Mode. Im einfachereren BCD-Modus werden Stunden, Minuten und Sekunden jeweils als &lt;a href="http://de.wikipedia.org/wiki/Binary_Coded_Decimal" rel="external"&gt;BCD-Zahlen&lt;/a&gt; dargstellt. Die beiden linken LED-Spalten stehen für die Stunden, die mittleren für die Minuten und die rechten für die Sekunden. BCD bedeutet, dass jede Ziffer einer Zahl einzeln binär kodiert wird. Beispielsweise werden bei der Zahl 12 die Ziffern 1 und 2 einzeln als 1&lt;sub&gt;2&lt;/sub&gt; und 10&lt;sub&gt;2&lt;/sub&gt; geschrieben. Maximal werden also 4 Bit für jede Ziffer benötigt (mehr Informationen im entsprechenden &lt;a href="http://de.wikipedia.org/wiki/Binary_Coded_Decimal" rel="external"&gt;Wikipedia-Artikel&lt;/a&gt;). Die LED-Spalten der Uhr müssen von oben nach unten gelesen werden, wenn man die BCD-Zahl erhalten möchte. Im obigen Bild ist es demnach wie spät? Genau! 16:01:47, denn in den Sekundenspalten ist ganz rechts z.B. eine 7 (0111&lt;sub&gt;2&lt;/sub&gt;) und daneben eine 4 (100&lt;sub&gt;2&lt;/sub&gt;) zu sehen. So viel zum Thema BCD-Modus, an dem man sich übrigens relativ schnell gewöhnen kann.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Der True-Binary-Mode ist dagegen schon deutlich schwieriger. Hierbei werden in der untersten Reihe die Sekunden, in der darüber die Minuten und in der dritten Reihe von unten die Stunden in gewöhnlicher binärer „Schreibweise“ angezeigt. Gelesen wird dabei ganz normal von links nach rechts. Im unteren Bild ist es demnach … richtig geraten! … 16:03:06.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p class="center"&gt;&lt;a href="http://blogeum.de/upload/91052813.jpg" class="nanobox" title="Binäruhr von getDigital.de im True-Binary-Mode" rel="gallery-entry-61"&gt;&lt;img src="http://blogeum.de/upload/91052813.jpg" alt="Produktabbildung: Binäruhr von getDigital.de im True-Binary-Mode" title="Binäruhr von getDigital.de im True-Binary-Mode" width="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;In beiden Modi kann die Anzeige von 12 auf 24 Stunden umgeschaltet werden. Die LEDs sind in 3 Stufen dimmbar, sodass man beispielsweise im Schlafzimmer oder beim nächtlichen Coden nicht weiter gestört wird.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Alles in allem ein sehr schönes kleines Spielzeug für die Geeks da draußen, bei dem nicht jeder die Uhrzeit ablesen kann. Störend ist einzig der etwas hohe maximale Stromverbrauch von 1,8 Watt, wobei dieser nur auftreten sollte, wenn auch alle Leuchtdioden an sind. Ein Batteriebetrieb wäre ebenfalls schön gewesen, jedoch würden das die Batterien bei dem Stromverbrauch nicht lange mitmachen. Eine andere Edition mit blauen LEDs ist im Übrigen auch erhältlich.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Mein Dank geht an dieser Stelle an &lt;a href="http://www.getdigital.de/" rel="external"&gt;getDigital.de&lt;/a&gt;, die mir die Binäruhr kostenlos zum Testen überlassen haben. Vielen Dank!&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content>
    <link rel="alternate" href="http://blogeum.de/2012/03/binaeruhr-von-getdigitalde-im-test"/>
    <published>2012-03-23T17:34:00+01:00</published>
  </entry>
</feed>
