tag:blogger.com,1999:blog-87242606544930273962024-03-05T19:44:07.597+01:00TryCatchFinallyDas Berliner Techblog über Java, Technik und andere Dinge.Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.comBlogger212125tag:blogger.com,1999:blog-8724260654493027396.post-57210927964658417652016-12-16T11:55:00.000+01:002017-03-26T12:18:00.812+02:00Das Spiel mit dem Spam<a href="https://4.bp.blogspot.com/-Wnoy4Nsu-SA/WFPA8Esq49I/AAAAAAAAAno/3WHG4SffFLUL2_d4-Nt9c68o-PEnfY3FACLcB/s1600/spam.jpg" imageanchor="1"><img border="0" height="476" src="https://4.bp.blogspot.com/-Wnoy4Nsu-SA/WFPA8Esq49I/AAAAAAAAAno/3WHG4SffFLUL2_d4-Nt9c68o-PEnfY3FACLcB/s640/spam.jpg" width="640" /></a><br />
<a class="hoverZoomLink" href="https://www.flickr.com/photos/sagamiono/4209301092/">Michael, SPAM</a>, <a href="https://creativecommons.org/licenses/by/2.0/">CC BY 2.0</a>
<br />
<br />
Neuerdings schickt unsere IT-Abteilung Mails herum, in denen Links zu kleinen Spam-Erkennungsrätseln stecken. Natürlich sind das dann Screenshots von Mails und dazu gibt es Tips, woran so eine Spam-Mail zu erkennen ist. Dazu gehören natürlich Hinweis auf das Fehlen einer persönliche Anrede oder schlicht ein schlechtes deutsch mit offensichtlichen Fehlern in Rechtschreibung und Grammatik.
<br />
<br />
Leider trifft eine Vielzahl der Annahmen längst nicht mehr auf alle Fälle zu. Personalisierten Spam mit Anrede und Adresse bekomme ich seit knapp vier Jahren. Interessanter Weise gepaart mit einer nicht mehr existenten Telefonnummer, die noch älter ist, als meine Anschrift. Da passt die aktuelle Meldung zum vertuschten Datendiebstahl bei <a href="https://www.heise.de/newsticker/meldung/Yahoo-muss-erneut-Massenhack-beichten-Eine-Milliarde-Opfer-3570674.html" target="_blank">Yahoo</a> ganz gut ins Bild. Ich hatte dort zwar nie einen mit passenden Daten hinterfütterten Account, aber es muss wohl noch etliche andere schwarze Schafe geben, die lieber unter den Tisch kehren als offen zuzugeben, dass da wohl ein größeres Malheur passiert ist.
<br />
<br />
Zurück zum Spamrätsel. Nachhaltige Aufklärung funktioniert jedenfalls nicht nur durch Beispiele, bei denen selbst Profis mal daneben liegen. Ja, das Zeug ist inzwischen gut geworden und schwierig zu erkennen. Bei gut gemachtem Spam gilt für mich jedenfalls immer zuforderst ein Blick auf den Link oder den Anhang. Ist die Datei ausführbar oder weist der Link auf eine andere als die vorgegebene Seite, ist eigentlich klar was los ist. Beides wird natürlich meist verschleiert, aber genau hier muss der unbedarfte Benutzer in die Lage versetzt werden den Verschleierungsversuch zu durchblicken. Das wiederum kann nur der, der über IT-Grundkenntnisse verfügt, die sich anzueignen aber jedem selbst überlassen sind. Eine Gefahr für jedes Unternehmen.
<br />
<br />
Die Versuche bereits in den Schulen IT-Grundkenntnisse zu vermitteln, scheitern wohl schon allein an dem Umstand, dass nur ein kleiner Teil der Lehrerschaft die passende Technik-Affinität mitbringt und dabei ausreichend sattelfest im Thema ist. Software zu bedienen klappt häufig noch ganz gut, das zugrundeliegende Technikverständnis fehlt aber eben oft.
<br />
<br />
Das Résumé aus dem Dilemma kann jedenfalls nicht bedeuten die Leute nach Verlassen der Schule auf Beispiel-Spam loszulassen und zu hoffen, dass sich die Erkennungsrate verbessert. Viel mehr müssen bereits in der Schule IT-Grundkenntnisse mit gleicher Selbstverständlichkeit vermittelt werden, wie es bei naturwissenschaftlichen Themen bereits üblich ist.
Das Grundgerüst sollten IT-Fachlehrer und Fachpersonal für die qualifizierte Betreuung der IT-Infrastruktur bilden. Anders ist brauchbarer IT-Fachunterricht auch nicht sicherzustellen. Schließlich verfügt praktisch jede Firma, notwendiger Weise, über IT-Fachleute. Nur was Schulen angeht scheint irgendwo der Gedanke herzukommen, ein bisschen Geld für <a href="http://t3n.de/news/digitalpaktd-schulen-computer-wlan-753617/" target="_blank">neue Rechner und WLAN</a> würde ausreichen.Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-44549188273609649462016-07-03T17:03:00.000+02:002016-07-03T17:35:27.702+02:00Java auf dem Desktop 13 - Datenträgergeschwindigkeit messen mit jDiskMarkBei <a href="https://sourceforge.net/projects/jdiskmark/">jDiskmark</a> handelt es sich um ein kleines, nützliches Javaprogramm, mit dem sich einfach und komfortabel die Lese- und Schreibgeschwindigkeit von Festplatten und Speicherkarten ermitteln lässt. Da es sich um ein Java-Tool handelt, passt es außerdem gut in meine "Java auf dem Desktop"-Reihe.
<br><br>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSqLoGg0NNNqm7UCEKhm6b_KRnME3HChUuG6eDEtKGLtAtJ7yYBw9beFKO020VQYj1cPG0sovZyvx9tYeginMN07I4En7YzY9ARlfQCJZvUIsqwpa5UzMP0lMquDuVYUpZJF4mmMACkgO0/s1600/jDiskmarkScreenshot.png" imageanchor="1"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSqLoGg0NNNqm7UCEKhm6b_KRnME3HChUuG6eDEtKGLtAtJ7yYBw9beFKO020VQYj1cPG0sovZyvx9tYeginMN07I4En7YzY9ARlfQCJZvUIsqwpa5UzMP0lMquDuVYUpZJF4mmMACkgO0/s640/jDiskmarkScreenshot.png" width="447" /></a><br><br>
Das Programm lässt sich nach dem Entpacken von der Kommandozeile aus mit dem Befehl "java -jar jDiskMark.jar" starten. Ein Start-Script liegt nicht dabei, dafür ein Windows-Programm, mit dem sich der Festplattencache leeren lässt.
<br><br>
Das mit den Festplattencache ist natürlich so eine Sache, der Cache auf der Festplatte selbst wird sich nicht einfach leeren lassen. Für einen ungefähren Überblick reicht es aber die Datenmenge für die Messung entsprechend groß auszulegen. Anstelle der vorgegebenen 40 Megabyte sind, je nach Datenträgerkapazität, 512 Megabyte oder mehr angemessen, um nicht nur einen Blick auf das Optimum zu werfen. Das Programm fordert vor dem Lese-Test dazu auf, die Caches zu leeren.
<br><br>
Weil das mitgebrachte Windows-Programm zum Cache entleeren unter Linux wenig taugt, lässt sich mit den folgenden beiden Zeilen leicht Ersatz schaffen (<a href="https://stackoverflow.com/questions/9551838/how-to-purge-disk-i-o-caches-on-linux">Stackoverflow</a>).
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">
sudo echo 3 | sudo tee /proc/sys/vm/drop_caches
sudo blockdev --flushbufs /dev/sda
</pre>
<br>
Letztlich ist jDiskmark ein einfachst gehaltenes Open-Source-Tool, das sich einsetzen lässt, um mal eben schnell die ungefähre Arbeitsgeschwindigkeit einer Festplatte festzumachen. Schnickschnack sucht man allerdings vergebens und wenigstens unter Windows ist man mit Tools wie <a href="http://crystalmark.info/software/CrystalDiskMark/index-e.html">CrystalDiskMark</a> wohl auch besseres gewohnt. Andersrum gefällt mir die Graphendarstellung gut, weil man den gesamten Messzeitraum im Blick hat und nicht nur eine wie auch immer interpretierbare Zahl, die am Ende herauspurzelt. Das kann zum Beispiel dabei helfen Geschwindigkeitseinbrüche auszumachen.<!--opensource-->Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-15708523192784201152016-06-26T20:22:00.000+02:002016-06-26T20:22:37.925+02:00Nautilus Batch-Rename oder "Oldie but a goldie"Nautilus ist leidlich dafür bekannt mehr Funktionen entfernt, als neue hinzugefügt zu bekommen. War ich noch einer der Nutzer, der die Splitview gern genutzt und die feste Fußzeile gemocht hat, habe ich mich umgewöhnen müssen - die damaligen Alternativen gefielen mir ebenfalls nicht besser und Nemo lief bei mir nie stabil. In mehr oder minder naher Zukunft soll der gute, alte Nautilus nun doch wieder ein Feature dazubekommen, nämlich eine Batch-Rename-Funktion (<a href="http://www.omgubuntu.co.uk/2016/06/nautilus-batch-rename-feature-coming-gnome-3-22">Link</a>). Darüber freue ich mich zwar, umgekehrt habe ich diese Funktion aber nie vermisst, da es schon seit langem den <a href="https://launchpad.net/nautilus-renamer/+download">Nautilus-Renamer</a> gibt, der seine Arbeit, wie ich finde, auch nach seinen vielen Jahren noch immer ganz ausgezeichnet erledigt und dabei nicht einmal angestaubt wirkt.
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjthiBtDE1eN5X2OCdRV21BKcA7PsY0yWxQkpiywyY1ZdVGtvrviPm0eoox5-DVjOC6IWU736QSuruREooSL5EEHfcAeq2hqYzeMJGJW4xMFBTf-o7xbj4Qs1Ng0Db2tuMEq1i4MiFxVIwf/s1600/Bildschirmfoto+vom+2016-06-26+11-56-51.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="504" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjthiBtDE1eN5X2OCdRV21BKcA7PsY0yWxQkpiywyY1ZdVGtvrviPm0eoox5-DVjOC6IWU736QSuruREooSL5EEHfcAeq2hqYzeMJGJW4xMFBTf-o7xbj4Qs1Ng0Db2tuMEq1i4MiFxVIwf/s640/Bildschirmfoto+vom+2016-06-26+11-56-51.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Nautilus-Renamer im Replace-Modus</td></tr>
</tbody></table>
<br />
Da ein Scriptaufruf mit Übergabe der Dateinamen reicht, lässt sich das Renamer-Script übrigens auch sehr gut in einem anderem Kontext einsetzen oder in die eigene Anwendung integrieren. Alles sehr schön, außer, dass bei mir die letzte Version 4.0 nicht zu funktionieren scheint, was aber zu verschmerzen ist, da die vorherige Version 3.1 sehr rund läuft.
<!--opensource-->Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-63243413229975646062016-04-17T10:28:00.003+02:002016-05-01T18:00:28.087+02:00Tweaking TTRSS: Mehrspaltige LeseansichtDen <a href="https://tt-rss.org/" target="_blank">TTRSS</a> benutze ich schon lange als Feedreader und primären Newsversorger. In der Webansicht hat mich aber schon immer gestört, dass der rechte Lesebereich für moderne Monitore zu breit ist, so das sich der nächste Zeilenanfang beim lesen schlecht ausmachen lässt und so der Lesefluss beeinträchtigt wird. Tatsächlich sind nur wenige Handgriffe notwendig, um ein mehrspaltiges Layout zu konfigurieren.<br />
<div>
<br /></div>
<div>
Dazu klickt man im TTRSS-Einstellungsbereich unter <code>Benutzerdefiniertes Stylesheet</code> auf den Button <code>Anpassen</code> und gibt in den daraufhin erscheinenden Dialog <code>Benutzerdefinierte Stylesheets</code> das folgende CSS ein.</div>
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">.cdmContentInner {
-webkit-column-count: 3;
-moz-column-count: 3;
column-count: 3;
}
</pre>
<br />
Nach dem Speichern und Verlassen der Einstellungen wird der TTRSS-Lesebereich nun Dreispaltig angezeigt. Das ganze sollte halbwegs unabhängig vom verwendeten Theme sein und funktioniert bei mir in Firefox und Chromium.<br />
<br />
Wer im übrigen noch einen Tip für ein gutes, alternatives TTRSS-Theme hat, darf mir gern mal den Link zukommen lassen.Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com2tag:blogger.com,1999:blog-8724260654493027396.post-91908743182782524382016-04-12T21:48:00.000+02:002016-05-01T17:13:02.064+02:00Wir basteln uns einen WiFi-VPN Access-PointAnleitungen, wie man einen VPN Wireless Access-Point mit einem Raspberry bastelt, gibt es zwar zuhauf im Netz, ich wollte aber eine möglichst einfache und zuverlässige Lösung schaffen. Dafür greife ich zur Abwechslung mal nicht auf eine reine Raspberry-Lösung zurück, sondern verwende anstelle des sonst üblichen WLAN-Sticks einen Access-Point. Das verschafft einige Vorteile. Allen voran spart man sich die Suche nach einem kompatiblen, Host-Fähiger WLAN-Stick, der unter Umständen dann doch nur so mittelmäßig zuverlässig funktioniert. Ich habe inzwischen drei Modelle durch, die alle ihre Macken hatten. Außerdem lässt sich auf diese Weise eine Menge Konfigurationsaufwand vermeiden, denn man kann sich den DHCP-Server und den Hostapd, den man für die WLAN-Verbindung benötigt, schlicht sparen.<br />
<br />
Zum Einsatz kommt bei mir ein Raspberry Pi 2 B+ (lag noch rum) mit <a href="https://www.raspberrypi.org/downloads/raspbian/" target="_blank">Raspbian Jessie Lite,</a> ein <a href="http://www.amazon.de/gp/product/B00794RDVY/ref=as_li_tl?ie=UTF8&camp=1638&creative=6742&creativeASIN=B00794RDVY&linkCode=as2&tag=tryca-21" rel="nofollow" target="_blank">Edimax EW-7438RPN</a><img alt="" border="0" src="http://ir-de.amazon-adsystem.com/e/ir?t=tryca-21&l=as2&o=3&a=B00794RDVY" height="1" style="border: none !important; margin: 0px !important;" width="1" /> (Amazon-Reflink, mit unter 18 Euro recht günstig und man kann das Teil mit der <a href="http://www.edimax.com/edimax/download/download/data/edimax/global/download/for_home/home_legacy_products/home_legacy_access_points/ew-7438apn" target="_blank">Firmware eines anderen Modells</a> zum Access-Point umfunktionieren.) und einen <a href="http://www.amazon.de/gp/product/B0009M1LFW/ref=as_li_tl?ie=UTF8&camp=1638&creative=6742&creativeASIN=B0009M1LFW&linkCode=as2&tag=tryca-21" rel="nofollow" target="_blank">Delock USB 2.0 Ethernet Adapter</a><img alt="" border="0" src="http://ir-de.amazon-adsystem.com/e/ir?t=tryca-21&l=as2&o=3&a=B0009M1LFW" height="1" style="border: none !important; margin: 0px !important;" width="1" /> (Amazon-Reflink), um den Raspberry mit dem Access-Point zu verbinden.
<br />
Der Raspberry hat bei mir ein frisches <a href="https://www.raspberrypi.org/downloads/raspbian/">Raspbian</a> bekommen. Alles was sonst noch auf dem Raspberry gebraucht wird ist ein OpenVPN für den VPN-Tunnel und einen lokalen Nameserver.
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">sudo apt-get install bind9 openvpn</pre>
<br />
Anschließend ist die OpenVPN-Konfiguration und gegebenenfalls ein oder mehrere Zertifikate in das Verzeichnis <i>/etc/openvpn/</i> zu kopieren.
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">cp "your config file" /etc/openvpn/server.conf</pre>
<br />
Die genaue VPN-Konfiguration ist von VPN-Anbieter zu VPN-Anbieter etwas unterschiedlich. Damit der OpenVPN-Service ohne Abfrage von Benutzername und Passwort startet, sollte man am besten die Datei /etc/openvpn/auth.txt anlegen und durch ein Return getrennt, Benutzernamen (erste Zeile) und Passwort (zweite Zeile) eintragen. Anschließend in der <code>/etc/openvpn/server.conf</code> die folgende Zeile anpassen, falls nicht schon geschehen.<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">...
auth-user-pass auth.txt
...
</pre>
<br />
OpenVPN sollte nun fertig konfiguriert sein und kann gestartet werden.
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">sudo service openvpn start
</pre>
<br />
In der Liste der Netzwerkinterfaces sollte das Interface <code>tun0</code> auftauchen. Ist dem nicht so, hilft ein Blick in das /var/log/syslog, wo die Ausgabe des OpenVPN landen sollte, so denn nicht anders konfiguriert.<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">ifconfig
</pre>
<br />
Aus Sicherheitsgründen habe ich noch die folgende <code>iptables</code> Regeln verwendet, um unaufgeforderte Verbindungen von außerhalb der VPN zu unterbinden. Damit die Regeln nach dem Reboot wieder gesetzt werden, habe ich die folgenden beiden Zeilen in vor das <code>exit 0</code> in die Datei <code>/etc/rc.local</code> eingetragen.
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">sudo iptables -A INPUT -i tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i tun0 -j DROP
</pre>
<br />
Ebenfalls wichtig ist das NAT, was dafür sorgt, dass alle verbundenen Rechner über die eine VPN-Verbindung kommunizieren können. Dafür gibt es die folgende Regel, die ebenfalls vor das <code>exit 0</code> in die Datei <code>/etc/rc.local</code> einzutragen ist.
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
</pre>
<br />
Außerdem braucht es noch ein aktiviertes IP-Forwarding, dass in der Datei <code>/etc/sysctl.conf</code> aktiviert werden kann. Einfach den Eintrag net.ipv4.ip_forward heraussuchen und wie folgt ändern.
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">net.ipv4.ip_forward=1</pre>
<br />
Damit sollte nun die VPN-Konfiguration abgeschlossen sein. Jetzt kommt der Nameserver dran. Dazu zuerst die Datei <code>/etc/bind/named.conf.options</code> bearbeiten und eine Weiterleitungssektion einfügen. Die beiden IPs sind die Nameserver von Google, es können natürlich auch andere verwendet werden. Um keine Rückschlüsse auf den eigentlichen Anschluss zu verraten, empfiehlt es sich auf die Verwendung der providereigenen Nameserver zu verzichten.
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">forwarders {
8.8.8.8;
8.8.4.4;
};</pre>
<br />
Damit sichergestellt ist, dass der Nameserver auch immer bei einem Reboot startet.
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">sudo update-rc.d bind9 enable</pre>
<br />
Als nächstes kommt die Verbindung zum Delock Ethernet Adapter, der jetzt einfach mal in den Raspberry eingesteckt werden kann. Es sollte nun bei Eingabe von <code>ifconfig</code> das Netzwerkinterface <code>eth1</code> angezeigt werden. Ein <code>lsusb</code> sollte folgendes USB-Gerät enthalten.
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">Bus 001 Device 004: ID 9710:7830 MosChip Semiconductor MCS7830 10/100 Mbps Ethernet adapter
</pre>
<br />
Um dem Netzwerkinterface <code>eth1</code> die feste IP-Adresse <code>192.168.100.1</code> zuzuweisen ist folgendes an das Ende der Datei <code>/etc/dhcpcd.conf</code> einzutragen. Hat das lokale Netz <code>eth0</code> bereits eine IP im Bereich <code>192.168.100.*</code> muss für alles was nun folgt, die 100 durch eine andere Ziffer ersetzt werden.
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">interface eth1
static ip_address=192.168.100.1/24
static routers=192.168.100.1
static domain_name_servers=192.168.100.1</pre>
<br />
Das war jetzt auch schon der Teil mit dem Raspberry, der an dieser Stelle am besten rebootet werden sollte, um alle Änderungen anzuwenden. Weiter geht es mit der Einrichtung des Access-Points. Hier kann jeder Access-Point verwendet werden, der einen DHCP-Server mitbringt und die Konfiguration einer statischen IP erlaubt. Wenn nicht bereits geschehen, kann der Access-Point nun per Ethernetkabel mit dem Delock Ethernet Adapter verbunden werden.<br />
<br />
Um auf die Konfigurationsseite zugreifen zu können, verbindet man sich am besten direkt mit dem WLAN des Access-Points. Bei dem Edimax ist unter <code>iQ Setup</code> nun die folgende, statische IP-Adresse zu konfigurieren. Das Gateway zeigt auf den Raspberry.<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">Use the following IP address.
IP-Adresse : 192.168.100.2
Subnetzmaske : 255.255.255.0
Gateway-Adresse : 192.168.100.1</pre>
<br />
Außerdem muss unter <code>Erweiterte Einstellung</code> im Untermenü <code>Administrations-Dienstprogramm</code> der DHCP-Server aktiviert und eingerichtet werden.
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">Standardgateway
192.168.100.1
Start-IP
192.168.100.20
End-IP
192.168.100.254</pre>
<br />
Das ganze sollte dann so aussehen.
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBj8kV_NkOpBBMNdwm1mQuZrKTeH4b9pHcmp6BEYoCSTMKop5kJbBgqWCz2xXgljbbWtUwrc9xSiED4j5ZTNjDijJpoi4x3wkqYT9YwmcIWuPSA11dTU7-qmaq1YUVLG-NUluS5yeDcPJd/s1600/accesspointconfig.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBj8kV_NkOpBBMNdwm1mQuZrKTeH4b9pHcmp6BEYoCSTMKop5kJbBgqWCz2xXgljbbWtUwrc9xSiED4j5ZTNjDijJpoi4x3wkqYT9YwmcIWuPSA11dTU7-qmaq1YUVLG-NUluS5yeDcPJd/s1600/accesspointconfig.png" /></a><br />
Achtung, wenn man jetzt auf Speichern und Übernehmen klickt, hat der Access-Point eine IP, die nur noch vom Raspberry aus erreichbar ist. Wer mit Linux unterwegs ist, kann sich einen Tunnel für die Konfigurationsseite des Edimax einrichten. Mit Putty und Windows sollte das genauso gehen. Steht der Tunnel erst, kann im Browser die Adresse localhost aufgerufen werden und man gelangt wieder auf die Konfigurationsseite.
<br />
<pre style="background-color: lightgrey; border: grey 1px solid; padding: 1em;">sudo ssh -L 80:192.168.100.2:80 pi@raspberrypi</pre>
<br />
Hier noch ein Paar Live-Aufnahmen von dem Ganzen. <br />
<a href="https://1.bp.blogspot.com/-2L84nIphI94/Vw1JZcVsG7I/AAAAAAAAAkA/s3l-gRc-Jysi-DqXArZXXHPchJsFYtbrgCLcB/s1600/2016-04-12%2B21.09.39.jpg" imageanchor="1"><img border="0" src="https://1.bp.blogspot.com/-2L84nIphI94/Vw1JZcVsG7I/AAAAAAAAAkA/s3l-gRc-Jysi-DqXArZXXHPchJsFYtbrgCLcB/s320/2016-04-12%2B21.09.39.jpg" /></a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJOU_8CFo5HvzTJGx22eTCCFzd5BWKwgb3Qya5mRmGlfFgLyaNKXF-5Ny2IZVbjkQBO7NSvkRWkQ7H5sJ6TNgqZvZcslXB7VvT1m66tHDFVB214gv6xOIR-iq0N8PU3BnLaTWOJXehwv1l/s1600/2016-04-12+21.10.03.jpg" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJOU_8CFo5HvzTJGx22eTCCFzd5BWKwgb3Qya5mRmGlfFgLyaNKXF-5Ny2IZVbjkQBO7NSvkRWkQ7H5sJ6TNgqZvZcslXB7VvT1m66tHDFVB214gv6xOIR-iq0N8PU3BnLaTWOJXehwv1l/s320/2016-04-12+21.10.03.jpg" /></a>Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-35598901930316376992014-12-30T10:43:00.001+01:002014-12-30T10:43:16.433+01:00Javasourcen mit regulärem Ausdruck zur Diamond-Notation konvertierenVielleicht etwas brachial, aber mit der Eclipse File-Suche und einem ungefähr passenden, regulären Ausdruck lässt sich ein Projekt leicht auf Diamond-Notation umstellen. Also von
<br />
<pre>List<String> l = new ArrayList<String>()</pre>
zu
<pre>List<String> l = new ArrayList<>()</pre>
Das geht mit Eclipse einfach über das Menü <i>Search -> File</i> und dem Regulärem Ausdruck <br/><code>(=\s*new\s.*<)(\w+)(>\()</code>. Das Häkchen der Checkbox <i>Regular Expression</i> muss aktiviert sein. Anschließend den Dialog mit <i>Replace</i> bestätigen und <i>Replace with</i> auf <code>$1$3</code> setzen. Der Mittelteil zwischen den Klammern wird dann ausgelassen. Einzig anonyme Klassen muss man nochmal von Hand anfassen, weil die dann doch gern den Typen in der spitzen Klammer sehen wollen.Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-46578878469100875762014-12-17T12:21:00.000+01:002014-12-17T12:21:35.028+01:00Werbefreies Android mit der FritzboxZumindest im heimischen Wlan keine Werbung mehr auf dem Android-Gerät anzeigen zu lassen geht ganz einfach, wenn man eine Fritzbox oder einen anderen Router mit Blacklist-Funktion hat.
<br><br>
Schritt eins, einen Traffic-Mitschnitt von der Wlan-Schnittstelle anfertigen. Das geht bei der Fritzbox unter der URL <a href="http://fritz.box/html/capture.html">fritz.box/html/capture.html</a> Out-of-the-Box. Auf dem Smartphone eine oder mehrere Apps aufrufen, die Werbung enthalten und anschließend das Capture-File von der Fritzbox mit Wireshark einlesen. Es gibt dazu eine Kurzanleitung bei <a href="http://praxistipps.chip.de/fritzbox-datenverkehr-mitschneiden_9989">Chip.de</a>.
<br><br>
Jetzt im Wireshark nach den DNS-Abrufen gucken bzw. am besten nach <code>DNS</code> filtern und man hat vermutlich mindestens einen Verdächtigen. In den meisten Fällen dürfte <code>admob.com</code> unter den Einträgen sein. Das ist das Werbenetzwerk von Google und die meisten Werbeeinblendungen in Android-Apps machen Gebrauch davon.
<br><br>
In der Fritzbox kann die Blacklist unter <code>Internet -> Filter -> Listen</code> gepflegt werden. Hier die unerwünschten Adressen einpflegen. Für die Fritz-Box muss man anschließend unter <code>Internet -> Filter -> Zugangsprofile</code> das Blacklisting für das Standard-Profil aktivieren.
<br><br>
Folgende Google-Einträge haben es auf die Schnelle als unerwünschte Spy- und Werbe-Adressen bei mir in die Blacklist geschafft. Da geht natürlich noch mehr, für die Deaktivierung vieler Werbeeinblendungen reicht das aber erstmal.
<br><br>
<code>doubleclick.net<br>
admob.com<br>
googlesyndication.com<br>
google-analytics.com<br>
googleadservices.com<br>
googletagservices.com</code>Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com1tag:blogger.com,1999:blog-8724260654493027396.post-40935764284215089692014-06-07T10:20:00.000+02:002014-06-07T10:21:52.396+02:00Eclipse Luna, was gibt es neues für Java-EntwicklerEclipse Luna 4.4 steht vor der Tür, das Release ist für den 25.6 geplant und der Release Cadidate sieht schon sehr gut aus. Auch wenn es einiges neues gibt, fühlt sich die IDE wie gewohnt an. Viele kleine Details wurden geändert, die im einzelnen kaum ins Auge fallen. Ein neuer Button hier, leicht veränderte Symbole dort, die übrigens vollständig auf png umgestellt wurden und nun weniger kantig wirken. Ins Auge hingegen sticht das veränderte Source-Highlighting, dass nun zum Beispiel auch lokalen Variablen eine Farbe verpasst und Konstanten in fettem Blau präsentiert. Dazu passt das, dem Trend folgende und lang erwartete Dark-Theme, das ich ausnehmend gut gelungen finde. Hierzu ergänzend ist das <a href="http://eclipsecolorthemes.org/" target="_blank">Eclipse Color Themes-Projekt</a> eine gute Anlaufstelle, um die Oberfläche noch weiter zu individualisieren. Weiter wurden <a href="http://blog.vogella.com/2014/01/16/less-screen-space-waste-in-eclipse-4-4/" target="_blank">Leerräume entfernt</a>, so dass die Oberfläche auch gleich Raumsparender daherkommt. Das Quick Access-Feld lässt sich nun ebenso wie der Perpective-Switcher oder gleich die gesamte Toolbar-Leiste ausblenden.
<br />
<br />
Die Änderungshistorie im Editor bleibt auch nach dem Schließen und wieder öffnen erhalten. Somit endet die Undo-Funktion nicht mehr mit dem Zustand mit dem die Datei geöffnet wurde, was ein zurückrollen zu vorherigen Bearbeitungssessions ermöglicht.
<br />
<br />
Eines der meist nachgefragten <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=8009" target="_blank">Features mit 205 Votes ist eine Split-View für Editoren</a>. Dieses ist nun endlich umgesetzt. Im Hauptmenü unter <code>Window → Editor</code> gibt es zwei neue Menüpunkte <code>Toggle Split Editor (Horizontal)</code> und <code>Toggle Split Editor (Vertical)</code> mit denen sich der aktive Editor teilen lässt.
<br />
<br />
Neue Quick-Fixes zum Erzeugen von for-Loops erlauben das automatische erzugen von Schleifen-Konstruktionen. Das ging bisher nur eingeschränkt und wurde nun ausgebaut. (Siehe <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=430818" target="_blank">Bug 43018</a>). Überhaupt hat sich in der Kategorie Code-Completion eine menge getan und so kommt Luna mit <a href="http://www.eclipse.org/recommenders/manual/#completion-engines" target="_blank">Intelligent Code Completion</a> daher, dass mittels Statistik- und Community-Funktionalität zu erraten versucht, welche Aufrufe, bis hin zu Aufrufketten, vorzuschlagen sind.
<br />
<br />
Sehr schick ist der <a href="http://www.eclipse.org/mpc/">Marketplace Client (MPC)</a> unter <code>Help → Eclipse Marketplace</code> mit dem sich Plugins, ganz ähnlich wie unter Firefox & Co., finden und installieren lassen.
<br /><br/>
<iframe allowfullscreen="" frameborder="0" height="270" src="//www.youtube.com/embed/uk5XFUj6vxY" width="480"></iframe>
<br /><br/>
Natürlich gilt nicht zuletzt die Java 8 Unterstützung als Grund schlichthin, um das neue Luna zu installieren. So lässt sich zum Beispiel eine anonyme Klasse per <a href="http://www.tutego.de/blog/javainsel/2014/05/eclipse-4-4-m7-luna/" target="_blank">Quick-Assist in einen Lambda-Ausdruck umwandeln</a>. Das neue Eclipse ist in vielen Details besser als das alte und es stellt sich das Gefühlt ein, dass man sich endlich vieler Kleinigkeiten angenommen hat, die ein abgerundeteres Bild zur Folge haben. Für mich seit langem das erste Mal, dass ein Eclipse-Update so frustfrei vonstatten geht und trotz Verwendung eines Vorabreleases keine groben Bugs das Nutzungsempfinden trüben. Einzig das Logo erscheint mir ein Griff ins Klo. Das Icon erweckt mit dem orange abgesetztem Halbkreis den Eindruck einer verschobenen Blau-Synchronisierung. Zumindest ist da für die nächste Version noch viel Luft nach oben.
<!--opensource-->Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-20785792618819385872014-05-11T18:01:00.000+02:002014-05-11T20:55:03.858+02:00Java auf dem Desktop 12Dieses Mal geht es bei meiner Randgruppenserie "Java auf dem Desktop" mit <a href="http://lightzoneproject.org/" target="_blank">LightZone</a> in die zwölfte Runde. LightZone ist eine sehr schick und übersichtlich geratene Open-Source Darkroom-Software für Windows, Mac und Linux. Darauf aufmerksam geworden bin ich durch einen <a href="http://www.spiegel.de/netzwelt/gadgets/lightzone-das-kann-der-gratis-fotoverwalter-a-957054.html" target="_blank">Spon-Artikel</a>, der LightZone als Bildverarbeiter und Organisator vorstellt. Bereits nach wenig herumprobieren muss ich sagen, dass mir der Programmaufbau gut gefällt. Er ist mit der Verzeichnis-Seitenleiste intuitiv und erlaubt einen quasi Sofort-Einstieg. Hat man das Bildmaterial erst vor sich, sind die gängigen Bild-Veränderungs- und Verbesserungsfunktionen einsetzbar. Alles in seiner Bedienung sehr konservativ, was ich jedoch als angenehm empfinde. Mit den gängigen Bezahlprodukten, wie AfterShot oder gar Lightroom kann sich LightZone nicht messen, dafür ist es aber kostenlos und für all jene einen Blick wert, die eben kein bereits bezahltes Profi-Werkzeug ihr eigen nennen.
<br><br>
Im gleiche Zug möchte ich noch auf ein <a href="https://code.google.com/p/java-swing-ayatana/" target="_blank">Jayatana</a> aufmerksam machen, dass Menüs von Java-Anwendungen in Ubuntu-Unity einpasst, sprich das Menü Unity-Typisch in die Leiste auf dem oberen Bildschirmrand verschiebt. Eine Installationsanleitung gibt es bei <a href="http://www.debinux.de/2014/04/unity-globales-menue-und-hud-fuer-java-anwendungen-mit-jayatana/" target="_blank">debinux</a>.
<!--opensource-->Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-61353458789970255362013-12-31T12:48:00.001+01:002013-12-31T12:58:07.496+01:00Speicherkarten und USB-Sticks testenWeil ja wieder mal gefälschte Speicherkarten (<a href="http://www.android-user.de/News/Vorsicht-vor-gefaelschten-SD-Karten-bei-Ebay-und-anderen-Online-Stores">Link</a>) im Umlauf sind, habe ich mir mal eine Möglichkeit rausgesucht, meine Neuerworbene SDHC-Card zu testen. Weil es das Heise-Tool <a href="http://www.heise.de/download/h2testw.html">h2testw</a> nur für Windows gibt, habe ich kurzerhand etwas anderes ausprobiert. Sehr einfach (und natürlich Open Source) ist das Tool <a href="http://oss.digirati.com.br/f3/">F3</a> von Michel Machado. Zip-File mit den Source-Codes herunterladen, entpacken und <code>make</code> ausführen. F3 compiliert dann zu zwei Programmen.
<br><br>
<code>./f3write /media/user/9016-4EF8/</code> beginnt damit die Speicherkarte bzw. das angegebene Verzeichnis mit 1GB großen Dateien vollzuschreiben. Ist die Speicherkarte voll, beendet sich F3 und die Daten können analog zum f3write-Aufruf mit <code>./f3read /media/user/9016-4EF8/</code> verifiziert werden. Netter Nebeneffekt: man bekommt auch gleich noch die Lese- und Schreibgeschwindigkeit mitgeteilt. Meine neue Billigkarte ist in Ordnung, aber wie ich mir das schon dachte, bei weitem nicht so flott, wie vom Händler behauptet.
<!--opensource-->Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-90828562905247088452013-12-04T21:04:00.002+01:002013-12-04T21:04:22.322+01:00Java auf dem Desktop 11Der heutige Kandidat aus meiner Reihe <i>Java auf dem Desktop</i> ist wieder ein Open Source-Tool und heißt <a href="http://www.filebot.net/" target="_blank">FileBot</a>. Hierbei handelt es sich um ein Tool, das es erlaubt heruntergeladene Serien umzubenennen, dazugehörige Untertitel zu laden oder die Korrektheit der Downloads mit zum Download gehörigen SFV-Dateien zu validieren. Insgesamt also ein mächtiges Tool, das die Grundlagen zur Organisation der heimische Seriensammlung bereit stellt. Ein Installationspaket wird für Debian, Windows und Mac angeboten. Außerdem kann FileBot auch direkt über den Ubuntu Software-Center, AUR oder Chocolatey installiert werden.
<br/><br/>
<iframe width="560" height="315" src="//www.youtube.com/embed/zcSFKiwFLZw?list=PLAeKsKcI7rapWVLl-Oy4wx_-5RoMclWPt" frameborder="0" allowfullscreen></iframe>Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-89358287518484670022013-07-28T16:50:00.001+02:002013-07-28T17:03:19.154+02:00Java auf dem Desktop 10Anlässlich meines England-Urlaubs und dem daraus resultierendem Fotobuch-Wunsch war ich aktuell auf der Suche nach einer geeigneten Fotobuch-Software, die auch unter Linux läuft. Die gängige Cewe-Software kenne ich aus früheren Zeiten und die wollte ich definitiv nicht noch einmal benutzen. Zu viel habe ich mich damit herumgeärgert.<br />
<br />
Eine alternative, die mir insgesamt recht gut gefiel heißt Photux und läuft mit Java. Die Bedienung ist einfach und funktional gehalten. Ein großes Plus ist der PDF-Export. Man hat also anschließend nicht nur das Fotobuch, sondern auch noch eine digitale Version fürs Archiv.<br />
<br />
Will man sich mit Photux ärger ersparen, sollte man sich über einige Dinge möglichst vorher im klaren sein. Zum Beispiel lässt sich das Fotobuch nicht im Nachhinein von Buchbindung auf Ringbuch umstellen. Ganz praktisch ist die Kommandowiederhol-Funktion, die den letzten Befehl auf alle oder einige Elemente anwenden kann, was das Fehlen der Mehrfachselektion verschmerzbar macht. Ebenfalls fehlten mir Shortcuts und Kontextmenüs. Das Programm ist eindeutig auf Toolbarbenutzung ausgelegt.<br />
<br />
Das Look and Feel sollte man übrigens am besten von GTK auf Metal umstellen, da das GTK Look and Feel immer etwas träge ist.<br />
<br />
Photux gehört zu <a href="http://fotobuchprofi.de/">fotobuchprofi.de</a>, die Software kann aber auch ohne Bestell-Funktion von <a href="http://photux.de/">photux.de</a> heruntergeladen werden. Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-22393701700774503802013-06-06T10:53:00.002+02:002013-06-06T10:55:44.308+02:00E-Books lesen unter LinuxEs kommt zwar nicht besonders häufig vor, dass ich auf dem Computer-Bildschirm lange E-Book-Texte lese, hin- und wieder kann es aber ganz nett sein, ein paar Zeilen zwischendurch zu schmökern. Dafür gibt es inzwischen auch einiges an Lesesoftware, die ich hier kurz zusammenfassen möchte.
<br />
<br />
Der Klassiker, den es bereits sehr lange gibt, der mir aber nie besonders komfortabel erschien, ist der <a href="http://fbreader.org/content/linux">FBReader</a>. FBReader enthält eine rudimentäre Bibliotheksfunktion ist im weiteren aber kaum für den Desktopgebrauch optimiert. Auch kapituliert FBReader am häufigsten vor EPubs, die nicht ganz Standardkomform sind.<br />
<br />
Besser gefallen hat mir immer der <a href="http://coolreader.org/e-index.htm">Coolreader 3</a>, den es ebenfalls für <a href="http://sourceforge.net/projects/crengine/files/CoolReader3/cr3-3.0.56/">verschiedene Plattformen</a> gibt. Auch Coolreader ist eigentlich mehr für Lesegeräte, als für den Desktop geeignet, was man ihm deutlich anmerkt.
<br />
<br />
Seit gut anderthalben Jahren gibt es den neuen epub3-Standard, der Interaktivität ins Leseerlebnis bringen soll. Leider bieten weder Coolreader noch FBReader Unterstützung für Epub3. Interessant ist hier der <a href="http://azardi.infogridpacific.com/azardi-download.html">Azardi-Reader</a>, der schon recht weit in der Epub3-Unterstützung ist. Leider ist Azardi closed Source und es gibt nur Debian-Pakete zum herunterladen. Azardi macht einen guten Eindruck, scheint sich von der Bedienbarkeit aber auf Tablets am wohlsten zu fühlen.
<br />
<br />
Wem alle drei Kandidaten nicht zusagen, kann noch auf die Browserbasierten Epub-Reader zurückgreifen. Für Firefox gibt es da <a href="https://addons.mozilla.org/de/firefox/addon/epubreader/">EPUBReader</a> und <a href="https://addons.mozilla.org/de/firefox/addon/lucifox/">Lucifox</a>. Tatsächlich ist der Browser erstaunlich gut für Gelegenheits-Leserei geeignet. Epub-Links werden direkt in die Bibliothek geladen und das Epub anschließend im Browser geöffnet. Mir gefällt EPUBReader hier im Gesamthandling am besten.
<br />
<br />
Über weitere, nennenswerte Lese-Anwendungen für Linux würde ich mich in der Kommentarfunktion freuen. Bestimmt kennt da jemand von euch noch etwas.
<!--opensource-->Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-21456789380658007512013-05-03T16:35:00.000+02:002013-05-03T16:38:14.950+02:00PDF-Dateien rendern mit Poppler und CairoÜblicher weise empfehle ich für das PDF-Rendern mit Java Ghostscript und <a href="http://www.ghost4j.org/" target="_blank">Ghost4j</a>. Das funktioniert gut und die Ergebnisse sind in Ordnung. Wer Linux benutzt kennt vielleicht auch noch die <a href="http://de.wikipedia.org/wiki/Poppler" target="_blank">Poppler-Bibliothek</a>, die ebenfalls für ihre brauchbaren Ergebnisse bekannt ist. Verwendung findet Sie zum Beispiel im PDF-Betrachter Evince. Mittels JNA läßt sich natürlich auch diese Bibliothek benutzen. Ich habe dazu etwas Java-Code im Netz gefunden, der mit der Poppler-Bibliothek den <a href="http://svn.emmtee.net/aac/trunk/pdfextract/src/PDFExtract/datasource-poppler/src/main/java/org/elacin/pdfextract/datasource/poppler/PopplerDataSource.java">Text aus einer PDF extrahiert</a>. Auf Grundlage von diesem Source habe ich mal weitergemacht und das Rendern ergänzt. Dazu gibt es in der Poppler-Bibliothek einen Png-Bilddatei-Export. Weil der Umweg über das Dateisystem aber nicht wirklich schön ist und das PNG-Kodieren- und Dekodieren der PDF-Seiten unnötig ist, habe ich eine Lösung mit einem Cairo-Grafik-Buffer genutzt in den die PDF-Seite gerendert und anschließend die Grafik-Bytes in ein BufferedImage überführt werden. Den Source dafür habe ich mal <a href="https://www.dropbox.com/s/zvimh6r87j2njod/PopplerPDFReader.java" target="_blank">hochgeladen</a>. Für den weiteren Ausbau ist die <a href="https://developer.gnome.org/poppler/unstable/index.html" target="_blank">Poppler-Dokumentation</a> nützlich und einiges geht da bestimmt noch. <br />
<br />
Weitere Java-Bibliotheken zum Thema PDF-Dateien rendern habe ich vor längerem <a href="http://blubberbart.blogspot.de/2008/12/pdf-renderer_04.html" target="_blank">schon mal zusammengesucht</a> und immer wieder mal ergänzt.Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-21922429552492824292013-04-28T07:34:00.001+02:002013-04-28T07:37:05.897+02:00PulseAudio-Soundausgabe automatisch UmschaltenVor einigen Jahren habe ich mir ein paar ordentlich klingende Desktop-Lautsprecher angeschafft. Die Dinger werden per USB angeschlossen und melden sich mit einer eigenen Soundkarte an. Das bietet den Vorteil, dass Soundkarte und Verstärker auf einer Platine untergebracht sind und Kabelwege zwischen Signalerzeugung und Verstärker entfallen, was wiederum der Soundqualität zugute kommt. Soviel zu den Vorteilen. Nachteilig wirkt sich allerdings aus, dass erst mit dem Einschalten der Boxen die Soundkartenanmeldung erfolgt. Das Standard-Device zur Soundausgabe ist dann schon dem internen Audio-Device auf dem Mainboard zugewiesen, weil das Audio-Device für die ausgeschalteten Lautsprecher beim Hochfahren noch nicht zur Verfügung stand. Ich müsste also jedes Mal in die Audio-Einstellungen und auf die neu aktivierte Soundkarte von den Lautsprechern umschalten. Über die Zeit haben sich verschiedene Lösungen für dieses lästige Verhalten ergeben, dass eigentlich von Seiten Ubuntus leicht zu beheben wäre. Ich meine: was will der User wohl, wenn er eine USB-Soundkarte einsteck/aktiviert?
<br />
<br />
Erste Lösung: <a target="_blank" href="https://www.dropbox.com/s/9nsn9jrwioszita/setSink.sh">Bash-Script das auf das nächste aktive Ausgabegerät </a>umschaltet. Damit reduziert sich der Aufwand auf einen Klick oder Shortcut nach aktivieren der Soundkarte.
<br/><br/>
Zweite Lösung: Wenn das interne Audio-Device deaktiviert ist und somit kein valides Ausgabegerät zur Verfügung steht, wird automatisch die neu aktivierte Soundkarte zum aktiven Ausgabegerät. Früher gab es in der Oberfläche für die PulseAudio-Einstellungen die Möglichkeit Devices zu deaktivieren. Die scheint im "Alles muss minimalistisch sein"-Wahnsinn allerdings über Bord gegangen zu sein.
<br><br>
Dritte Lösung: Einfach ein Audio-Device anlegen, dass die Ausgabe auf alle aktiven Audio-Devices umleitet. Dies lässt sich leicht mit dem Programm <code>paprefs</code> unter der Registerkarte <i>Simultane Ausgabe</i> bewerkstelligen. Der PulseAudio-Soundserver muss allerdings neu gestartet werden, damit das <i>Simultaneous output-Device</i> in der Liste der Audio-Devices in der Ubuntu Audio-Konfiguration erscheint. <code>paprefs</code> lässt sich über die Paketverwaltung nachinstallieren.
<!--opensource-->Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-55952728651317129352013-04-25T15:56:00.000+02:002013-04-28T07:39:04.020+02:00Das Ding mit dem Ring - Tastaturmodding<img align="left" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq514pEZT9wjubKJDX4-ddNecLrrSD6d1WSE5Bh7mQVr3kObwleoNQJmNR4U4DdRPMru_L8K-MM6Y18u36DCweWJRWFrFmYJPrtFbIImLQcGdLqqXzuxEUl7GXM-2k9_9Q8hnaB8uDg7qB/s1600/_IGP6503_1.jpg" style="margin-right: 8px;" width="400" /> Gute Peripherie kann leicht zu nem Spleen werden, was bei Nerds aber ohnehin egal ist. Weit ab von Mediamarkt & Co. bekommt man Profi-Tastaturen, wie die Filco Majstouch-2, die nun ihren Weg auf meinen Schreibtisch gefunden hat.<br />
<br />
Weil eine gute Peripherie aber nie gut genug sein kann, lässt sich da auch noch was Modden. Man bekommt bei GetDigital nicht nur die <a href="http://www.getdigital.de/products/Filco_Majestouch_Profi_Tastatur" target="_blank">Tastatur</a> selbst, sondern fürs Auge
auch gleich ein paar <a href="http://www.getdigital.de/products/TastenfuerMechanischeTastaturen" target="_blank">Tasten in verschiedenen Farben</a> zum Aufpeppen oder mit Pinguin um die Windows-Tasten zu ersetzen.<br />
<br />
Mechanischen Tastaturen ist neben einem harten Anschlag auch ein gewisser Geräuschpegel zu eigen. Dagegen gibt es auch Modelle mit Soft-Landing-Pads, die sich ebenfalls <a href="http://elitekeyboards.com/products.php?sub=access,slpads" target="_blank">nachrüsten</a> lassen. Noch besser hat mir die Idee dieser kleinen Dämpfringe gefallen, die unter jede Taste gesteckt werden. Weil solche Ringe nicht zu bekommen sind, gibt es in den Modding-Foren die Idee mit Einmachglas-Gummi und einem Locher selbst solche Ringe herzustellen. Eine weitere Möglichkeit habe ich probiert und kurzerhand einen Beutel <a href="http://www.hug-technik.com/shop/product_info.php?info=p2357_praezisions-o-ring-5-50-x-2-00-mm-nbr70.html" target="_blank">Dichtungsringe mit passendem Maß</a> bestellt. Tasten raus, Ring drüber, Taste rein und fertig. <br />
<br />
Die Ringe passen super. Wer den harten Anschlag schätzt kann es übrigens auch mit 1mm Ringen versuchen. Wichtig ist nur, dass der Durchmesser zwischen 5,0 und 5,5mm liegt, damit die Ringe nicht rutschen. Meine Tastatur ist jetzt jedenfalls genau richtig.Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-79043177485926649472013-04-20T12:54:00.000+02:002016-06-04T07:48:46.983+02:00E-Book- und Dokumentenmanagement mit JeboorkerDieses Mal gibt es aus der Reihe <i>Java auf dem Desktop</i> eine Software-Vorstellung in eigener Sache. Ursprünglich für eigene Zwecke gedacht hat <a href="https://code.google.com/p/jeboorker/">Jeboorker</a> inzwischen einen Entwicklungsstand erreicht, der es auch für andere nutzbar macht.
<br />
<br />
Jeboorker ist eine E-Book- oder Dokumentenmanagement-Software, deren Besonderheit darin liegt, dass es selbst keine Ordnungsstruktur vorgibt. Das ist für all diejenigen sinnvoll, die ihre E-Books und Dokumente lieber selbst in verschiedene Verzeichnisse sortieren um auch ohne Hilfsmittel jederzeit das passende/gesuchte zu finden. Jeboorker erlaubt die Verwaltung mehrerer Verzeichnis die sich einfach eintragen lassen. Die unterstützten Dokumente werden dann samt ihrer Metadaten eingelesen, so das anschließend eine gezielte Stichwortsuche nach jenen Inhalten möglich ist. Natürlich lassen sich die Dokumenten-Metadaten auch bearbeiten.
<br />
<br />
Alle eingelesenen Dokumente werden zentral in einer Listenübersicht dargestellt, die nach Dateiname und Metadaten sortierbar und durchsuchbar ist. Außerdem lässt sich die Listenübersicht nach der selbst angelegten Verzeichnisstruktur filtern so das das eigene Ordnungsprinzip nicht nur erhalten bleibt sondern gleich mitgenutzt wird.
<br />
<br />
Neben den reinen Verwaltungsfunktionen gibt es außerdem Funktionen für den Download von Buchcover aus Google-Search und Metadaten von Amazon.de und Amazon.com, wodurch deutsch- wie englischsprachige Buchinformationen auffindbar sind. Hinzu kommen einige einfache Konvertierungsfunktionen mit denen sich zum Beispiel die Bildarchivformate CBZ und CBR in das für Lesegeräte eher übliche PDF-Format überführen lassen oder umgekehrt eine PDF in ein Bildarchivformat.
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img src="https://raw.githubusercontent.com/meerkatzenwildschein/jeboorker/master/doc/screenshots/screenshot_main.jpg" style="margin-left: auto; margin-right: auto;" width="100%" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Screenshot Jeboorker</td></tr>
</tbody></table>
Jeboorker ist Open Source und läuft am besten mit einem installierten Java 7. Downloads stehen für Debian/Ubuntu und Windows auf der <a href="https://github.com/meerkatzenwildschein/jeboorker">Projektseite</a> zur Verfügung.
<!--opensource-->Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-45467761502081900702013-04-12T22:57:00.000+02:002013-04-12T23:02:38.718+02:00Java: Listen transformierenBraucht man eine Liste vom Typ X und hat eine Liste vom Typ Y, müssen alle Werte der Liste X transformiert werden. Das kopieren und transformieren aller Werte der Liste X verbietet sich ab da, wo die Liste X sehr viele Einträge hat und vielleicht nicht einmal alle Einträge gelesen werden. Für diesen Fall ist eine elegante Lösung die, einfach eine Liste vom Zieltyp Y zu erzeugen, die die Werte aus Liste X während dessen Abfrage transformiert. So eine Liste könnte wie folgt aussehen:<br />
<br />
<pre><span style="color: maroon; font-weight: bold;">import</span><span style="color: #004a43;"> java</span><span style="color: #808030;">.</span><span style="color: #004a43;">util</span><span style="color: #808030;">.</span><span style="color: #004a43;">AbstractList</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">import</span><span style="color: #004a43;"> java</span><span style="color: #808030;">.</span><span style="color: #004a43;">util</span><span style="color: #808030;">.</span><span style="color: #004a43;">List</span><span style="color: purple;">;</span>
<span style="color: #3f5fbf;">/**</span>
<span style="color: #3f5fbf;"> </span><span style="color: #7f9fbf; font-weight: bold;">*</span><span style="color: #3f5fbf;"> List that allows to transform it values.</span>
<span style="color: #3f5fbf;"> </span><span style="color: #7f9fbf; font-weight: bold;">*</span><span style="color: #3f5fbf;"> </span>
<span style="color: #3f5fbf;"> </span><span style="color: #7f9fbf; font-weight: bold;">*</span><span style="color: #3f5fbf;"> </span><span style="color: #7f9fbf; font-weight: bold;">@param</span><span style="color: #3f5fbf;"> </span><span style="color: #7f9fbf; font-weight: bold;"><T></span><span style="color: #3f5fbf;"> The target</span><span style="color: #7f9fbf; font-weight: bold;">,</span><span style="color: #3f5fbf;"> transformed type.</span>
<span style="color: #3f5fbf;"> </span><span style="color: #7f9fbf; font-weight: bold;">*</span><span style="color: #3f5fbf;"> </span><span style="color: #7f9fbf; font-weight: bold;">@param</span><span style="color: #3f5fbf;"> </span><span style="color: #7f9fbf; font-weight: bold;"><S></span><span style="color: #3f5fbf;"> The source type.</span>
<span style="color: #3f5fbf;"> */</span>
<span style="color: maroon; font-weight: bold;">public</span> <span style="color: maroon; font-weight: bold;">abstract</span> <span style="color: maroon; font-weight: bold;">class</span> TransformValueList<S, T> <span style="color: maroon; font-weight: bold;">extends</span> AbstractList<T> <span style="color: purple;">{</span>
<span style="color: #bb7977; font-weight: bold;">List</span><span style="color: #808030;"><</span>S<span style="color: #808030;">></span> list<span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">public</span> TransformValueList<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">List</span><span style="color: #808030;"><</span>S<span style="color: #808030;">></span> sourceValuesList<span style="color: #808030;">)</span> <span style="color: purple;">{</span>
<span style="color: maroon; font-weight: bold;">this</span><span style="color: #808030;">.</span>list <span style="color: #808030;">=</span> sourceValuesList<span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: maroon; font-weight: bold;">public</span> <span style="color: maroon; font-weight: bold;">abstract</span> T transform<span style="color: #808030;">(</span>S source<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: #808030;">@</span>Override
<span style="color: maroon; font-weight: bold;">public</span> T get<span style="color: #808030;">(</span><span style="color: #bb7977;">int</span> index<span style="color: #808030;">)</span> <span style="color: purple;">{</span>
S source <span style="color: #808030;">=</span> list<span style="color: #808030;">.</span>get<span style="color: #808030;">(</span>index<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">return</span> transform<span style="color: #808030;">(</span>source<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: #808030;">@</span>Override
<span style="color: maroon; font-weight: bold;">public</span> <span style="color: #bb7977;">int</span> size<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: purple;">{</span>
<span style="color: maroon; font-weight: bold;">return</span> list<span style="color: #808030;">.</span>size<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: purple;">}</span></pre>
<br />
<br />
Der praktische Einsatz der Liste, hier mit einer Transformation von einer List<Boolean> in eine List<String>. <br />
<br />
<pre>List<String> stringList = new TransformValueList<Boolean, String>(listWithBoolean) <span style="color: purple;">{</span>
<span style="color: #808030;">@</span>Override
<span style="color: maroon; font-weight: bold;">public</span> <span style="color: #bb7977; font-weight: bold;">String</span> transform<span style="color: #808030;">(</span>Boolean source<span style="color: #808030;">)</span> <span style="color: purple;">{</span>
<span style="color: maroon; font-weight: bold;">return</span> source <span style="color: #808030;">!</span><span style="color: #808030;">=</span> <span style="color: maroon; font-weight: bold;">null</span> <span style="color: #808030;">?</span> source<span style="color: #808030;">.</span>toString<span style="color: #808030;">(</span><span style="color: #808030;">)</span> <span style="color: #808030;">:</span> <span style="color: #0000e6;">"false"</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: purple;">}</span><span style="color: #808030;">;</span></pre>
Die Werte der Liste werden während der Abfrage / Iteration transformiert. Wenn die Transformation komplexer ausfällt und die Liste mehrfach abgefragt wird, sollten die Werte aus Performancegründen gecacht werden.
Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-14358504119460778732013-03-17T18:52:00.000+01:002013-03-17T18:52:10.276+01:00Java auf dem Desktop 9 - Domination<a href="http://domination.sourceforge.net/download.shtml" target="_blank">Domination</a>, den Brettspielklassiker Risiko, gibt es neben einer Android- und Blackberry-App auch als Java-Desktop-Anwendung. Das ganze macht einen riesigen Spaß, funktioniert im Einzel-, wie auch im Mehrspielermodus, spricht deutsch und ist Open Source. Wer das Spielprinzip, so wie ich noch aus grauer Vorzeit in grober Erinnerung hat wird sich schnell zurechtfinden. Es gibt verschiedene Karten und einen Online-Modus mit dem gegen andere Spieler im Netz angetreten werden kann. Wie für das Brettspiel-Original gilt: Vorsicht Zeitvernichter. Bei mir war jedenfalls mal eben eine Stunde weg bevor mir der rote Spieler Europa abgejagt und mich nach Australien verdrängt hat.<br />
<br />
Sehr nett finde ich die Spendenoptionen mit denen auch gleich gezielt neue Features unterstützen werden können. <br />
<br />
Auch wenn der Java-Webstart auf der Projektseite gute Dienste verrichtet habe ich Domination mal für <a href="http://orwell-staat.de/ubuntu/domination.deb" target="_blank">Debian/Ubuntu paketiert</a>.<br />
<br />
via <a href="http://www.1337core.de/brettspiel-risiko-auf-dem-rechner-zocken/" target="_blank">1337core</a><br />
<!--opensource-->Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-90815710838328547942013-03-15T08:34:00.001+01:002013-03-15T08:34:21.677+01:00Ist Java unsicher?Sicherheitslücken ohne Ende. Leider kostet das Java ein gutes Stück seines Rufes obwohl dafür im Grunde kaum Anlass besteht. Die Presse berichtet unreflektiert vom "Unsicheren Java" und Elster wird umgestellt, obwohl für die Elster-Anwendung gar keine Sicherheitslücke besteht. Das die im Browser laufenden Java-Applets nur noch auf ausdrücklichen Klick hin gestartet werden ist in dem ganzen Thema eine der wenigen konstruktiven Geschehnisse.<br />
<br />
Vor allem der Tote-Holz-Presse ist mal wieder anzulasten, dass durch undifferenzierte Berichterstattung mehr Unsicherheit als Aufklärung gesäht wurde. Dem entgegen wirkend hat Olaf Willhuhn, Entwickler der Homebanking-Software <a href="http://www.willuhn.de/products/hibiscus/" target="_blank">Hibiscus</a>, ein kurzes, treffendes <a href="http://www.willuhn.de/wiki/doku.php?id=support:javafaq" target="_blank">FAQ</a> zu dem Thema aufgesetzt, dem ich mich inhaltlich voll anschließen kann.<br />
<br />
Resümee: Viel Wind um kaum etwas. Programme aus dem Netz laden und starten ist viel problematischer als das Applet im Browser, das (selbst bei den gefälschten Zertifikaten) vorher noch nach Rechten für die Sandbox fragt. Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com1tag:blogger.com,1999:blog-8724260654493027396.post-89120458113803376902013-03-12T11:19:00.001+01:002013-03-12T11:19:16.878+01:00Parallelverarbeitung mit JavaAnwendungsprozesse in Threads aufspalten ist mit der Verbreitung von Multiprozessorarchitektur zunehmend sinnvoll. Mit Java 1.5 sind da grundlegende und praktische Sachen hinzugekommen. Die Zeit, wo man noch Threads mit Runnables erzeugt sind damit im Grunde längst vorbei. Wie es richtig und gut geht erklärt Tomasz Nurkiewicz in seine Reihe in der DZone sehr anschaulich.<br />
<br />
<a href="http://java.dzone.com/articles/javautilconcurrentfuture" target="_blank">java.util.concurrent.Future Basics</a><br />
<a href="http://java.dzone.com/articles/executorcompletionservice" target="_blank">ExecutorCompletionService in Practice</a><br />
<a href="http://java.dzone.com/articles/advanced-listenablefuture" target="_blank">Advanced ListenableFuture Capabilities</a>Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-25769050687249238812013-03-07T16:17:00.001+01:002013-04-12T23:06:07.972+02:00Bashskript mit Java 7 PräferenzUnter Linux kann der Benutzer mit dem Command update-alternatives einstellen, welche Java-Version mit dem Aufruf von <code>/usr/bin/java</code> angesprochen wird. Eine Anwendung, die sich aber auf einer bestimmtem Java-Version besonders zu Hause fühlt, muss sich nicht unbedingt an die Voreinstellung halten, die ohnehin zumeist nur zufällig zustande kommt. Das folgende Anwendungs-Bashscript präferiert Java 7 vor der sonst vielleicht eingestellten Java 6 (oder noch älteren) Version.</code><br />
<pre><code>
#!/bin/sh
javaBin="/usr/bin/java";
for entry in `update-alternatives --list java`; do
case "$entry" in
*"java-7"* )
javaBin="$entry"
break;
;;
*)
esac
case "$entry" in
*"jdk1.7"* )
javaBin="$entry"
break;
;;
*)
esac
done
$javaBin -cp application.jar org.test.Aplication $@
</code></pre>
Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com2tag:blogger.com,1999:blog-8724260654493027396.post-35792747687785768262013-01-14T12:39:00.000+01:002013-01-14T12:43:07.420+01:00Java Desktop-Programme und der SpeicherSpeicher fressen ist auf dem Desktop unerwünscht und dennoch tut es die Java-VM. Selbst wenn das <span style="font-family: "Courier New",Courier,monospace;">-client</span> Parameter gesetzt wurde, holt sich die VM Stück für Stück die ihr erlaube Speichermenge. Wie viel das ist, lässt sich mit dem <span style="font-family: "Courier New",Courier,monospace;">Xmx</span>-Parameter steuern. Weil der per Standard recht knapp bemessen ist, findet sich eigentlich kaum eine Java-Anwendung, die davon keinen Gebrauch macht. Das Parameter <span style="font-family: "Courier New",Courier,monospace;">-Xmx256m</span> erlaubt der Java-VM also maximal 256MB Ram zu reservieren.<br />
<br />
Doof ist auf dem Desktop nur, dass die Java-VM den Speicher nicht mehr hergibt. Der wird nämlich für den späteren Gebrauch reserviert gehalten und nicht wieder freigegeben. Der Benutzer kann das aber nicht sehen. Der erkennt nur, dass die Java-VM irgendwann die vollen 256MB Speicher beansprucht und weniger für andere Programme zur Verfügung steht. Die Java-VM spart dadurch die Zeit für Speicher-Freigaben und erneute Speicher-Allokierungen*. <br />
<br />
Um ein günstigeres Desktop-Verhalten zu erreichen, lässt sich die Java-VM mit den passenden Start-Parametern entsprechend konfigurieren. Dafür spielt die Wahl des Garbage-Collector eine Rolle. Der <span style="font-family: "Courier New",Courier,monospace;">ParNewGC</span> und der <span style="font-family: "Courier New",Courier,monospace;">SerialGC</span> geben beide nach dem Aufräumen Speicher wieder frei. Auf aktuellen Rechnern mit mehreren Prozessor-Kernen ist der <span style="font-family: "Courier New",Courier,monospace;">ParNewGC</span> mit seiner parallelen Verarbeitung am günstigsten. Weiter kann mit den Parametern <span style="font-family: "Courier New",Courier,monospace;">-XX:MinHeapFreeRatio</span> und <span style="font-family: "Courier New",Courier,monospace;">-XX:MaxHeapFreeRatio</span> ein Prozentwert für die Schwelle definiert werden, ab dem Speicher reserviert und freigegeben wird. Je kleiner diese Werte sind, je dichter ist der Java-VM Speicherbedarf an dem tatsächlichen Speicherbedarf der Anwendung.<br />
<br />
Eine günstige Java-VM-Konfiguration für eine Desktop-Anwendung könnte so ausshen. Je nach Bedarf sollte aber z.B. mit VisualVM das tatsächlich Wunschverhalten nachgemessen werden.<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">java -client -Xmx512m -XX:+UseParNewGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 ...</span><br />
<br />
<span style="font-size: x-small;">* Das verhalten kann je nach VM-Version und Betriebssystem abweichen. Ich habe das beschriebene Verhalten mit Oracle-Java 1.6 und 1.7 auf 32bit Windows und 64bit Linux nachstellen können, wo der </span><span style="font-size: x-small;">ParallelOldGC als Standard gesetzt war.</span><br />
<br />
<a href="http://www.stefankrause.net/wp/?p=14" target="_blank">Lesenswert zu diesem Thema der Artikel auf Stefan Krause.blog</a>Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-71438869831126278282013-01-08T18:03:00.000+01:002013-01-08T18:03:17.310+01:00Programmaufrufe aus JavaManchmal ist das ja die letzte Lösung, einfach ein Kommandozeilen-Programm aufzurufen. Die Google-Suche spuckt da im groben und ganzen immer den gleichen Tipp aus:
<pre><code>
...
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(args);
InputStream is = process.getInputStream();
...
</code></pre>
<br />
An der Zeile ist zunächst nichts falsch und das aufgerufene Programm wird ordnungsgemäß ausgeführt. Allerdings kann es, vorzugsweise unter Windows, beim lauschen am Input- oder Error-Stream zu einem Deadlock kommen. Hierfür ist ein Windows-Bug verantwortlich, der von der Java-VM nicht umschifft wird.
Auch der Aufruf von waitFor ist dazu geeignet niemals zurück zu kommen, jedoch notwendig, wenn mit der Verarbeitung auf das Ende des Aufrufs gewartet werden soll.<br />
<br />
Als Lösung bietet sich ein Timeout-Thread an, der den Prozess nach einer vordefinierten Zeit abbricht. Dieses und einiges mehr bietet die <a href="http://commons.apache.org/exec/">Apache Commons Exec-Bibliothek</a>. Die Tutorial-Seite weist auf alles wichtige, wie auch auf Fallstricke, wie der Klassiker mit den Leerzeichen in Pfadangaben hin.<br />
<br />
Dazu passend gibt es auf <a href="http://www.javacodegeeks.com/2013/01/executing-a-command-line-executable-from-java.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+JavaCodeGeeks+%28Java+Code+Geeks%29" target="_blank">Java Code Geeks</a> eine Javaklasse, die das ganze hübsch in ein objektorientiertes Schema zusammenfasst. Die Klasse und das dazugehörige Interface habe ich mal der Bequemlichkeit halber hier abgelegt: <a href="http://www.fschuster.de/ubuntu/dropped/ProcessExecutor.java">ProcessExecutor.java</a>, <a href="http://www.fschuster.de/ubuntu/dropped/ProcessExecutorHandler.java">ProcessExecutorHandler.java</a>.<br />
<br />
Eine lesenswerte Analyse, was da beim Stream lesen nun genau hängt, findet man übrigens auf dem <a href="http://weblogs.java.net/blog/kohsuke/archive/2009/09/28/reading-stdin-may-cause-your-jvm-hang">Weblog von Kohsuke Kawaguchi</a>. Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com0tag:blogger.com,1999:blog-8724260654493027396.post-88486731512501060322013-01-05T17:42:00.000+01:002013-01-05T17:53:39.874+01:00Die GEZ und das liebe GeldMein Kontoauszug zeigt es deutlich. Die GEZ (Neudeutsch auch Beitragsservice) bucht jetzt nicht mehr nur den kostengünstigen Satz ab, den man als Fernsehfreier Haushalt zu zahlen hat, sondern schlägt jetzt richtig zu. Jedenfalls, wenn man bisher quartalsmäßig hat abbuchen lassen. Anstelle der 17,28 Euro jetzt satte 53,94 Euro. Weil ich das, was ich dafür bekomme aber wenig nutzbringend finde und ich ja außerdem weiß, dass die GEZ, was die Höhe ihre Beiträge angeht, etwas stur ist, habe ich mir mal einen Vorschlag ausgedacht, der ja für alle eigentlich in Ordnung wäre.
<br/><br/><br/>
<i>
Gebühreneinzugszentrale (GEZ)<br/>
50656 Köln<br/>
<br/>
<br/>
Liebe GEZ,<br/>
<br/>
wie Sie an meiner Kundenhistorie sicher erkennen können, schaue ich bereits seit <br/>vielen Jahren kein Fernsehen. Von den teuren Sport-Übertragungsrechte und Fernseh-Produktionen der öffentlich rechtlichen Fernsehsender habe ich also gar nichts. Seit Anfang diesen Jahres helfe ich, dank der neuen Gebührenverordnung, finanziell dabei mit, meinen Mitmenschen das Fernsehprogramm zu verschönern.<br/>
<br/>
Das finde ich prinzipiell auch eine gute Sache, meine jedoch, dass dadurch eine gewisse Ungleichgewichtung entsteht, weil ich ja wirklich nichts für mein Geld bekomme. Für die Rente bezahle ich heute und bekomme morgen bestimmt auch etwas, von meinen Steuern werden Straßen in Ordnung gehalten und Kinder in Schulen geschickt, damit die mal schlau werden. Von allem habe ich auch etwas. Sie verstehen, worauf ich hinaus möchte?<br/>
<br/>
Weil ich aber nicht immer an allem rummäkeln möchte, würde ich Ihnen gerne einen Vorschlag machen. Weil unterm Weihnachtsbaum eines dieser modernen Empfangsgeräte lag, könnten Sie mir doch einfach einen Verrechnungsgutschein für den Google-Play-Store oder für den Amazon-Store zuschicken. Dann kann ich die Medien konsumieren, die mir gefallen und für die ich ja dann auch schon bezahlt hätte. Damit wäre dann allen geholfen. Dann muss das Fernsehen keine Sendungen mehr für mich mitproduzieren, wo ich die doch gar nicht sehe, Arbeitsplätze in der Medienindustrie gehen auch nicht verloren, weil ich das Geld ja weiter zweckgebunden abgebe und ich kann mich informieren und unterhalten lassen wo und wie ich gerne möchte.<br/>
<br/>
Wegen mir könnte man das auch direkt machen. Also die Fernsehsender würden ihre Sendungen bei Google einstellen und ich kaufe dort jeden Monat einen Gutschein für 17,98 Euro. Dann hätten Sie auch nicht mehr so viel zu tun und müssten wegen der ganzen Umstellung nicht so viele neue Leute einstellen und anlernen.<br/>
<br/>
Aber zurück zu meinem Anliegen. Ich fände einen Gutschein über 10,00 Euro angemessen, den Sie mir jeden Monat zusenden könnten, weil ich ja auch weiter ein Radio habe, das ich zwar auch schon eine Weile nicht mehr benutze, aber der Besitz reicht ja aus, wie mir mal erklärt wurde. Schließlich will so ein Radiomoderator und die ganze Musik die da läuft auch bezahlt sein. Ich würde mir zwar die Musik, so wie bei Google, auch gern selbst aussuchen können, ich will da aber jetzt nicht kleinlich sein.<br/>
<br/>
Über Ihre Antwort, am besten mit beiliegendem Gutschein, würde ich mich sehr freuen.<br/>
<br/>
Mit freundlichen Grüßen</i>
<br/><br/><br/>
Ich hoffe nur, dass die das richtig verstehen und mir am Ende nicht Gutscheine für den ZDF-Fernsehgarten oder das Musikantenstadl zuschicken. Blubberbarthttp://www.blogger.com/profile/07809699104434637959noreply@blogger.com1