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

<channel>
	<title>IT blogging</title>
	<atom:link href="http://www.itblogging.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.itblogging.de</link>
	<description>Informatik Grundlagen, Java, Datenbank, Web, Netzwerk, Linux</description>
	<lastBuildDate>Tue, 18 Jun 2013 22:16:46 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Android 4.1.2 für Telekom Kunden und Samsung Galaxy S2 Besitzer verfügbar</title>
		<link>http://www.itblogging.de/news/android-4-1-2-fur-telekom-kunden-und-samsung-galaxy-s2-besitzer-verfugbar/</link>
		<comments>http://www.itblogging.de/news/android-4-1-2-fur-telekom-kunden-und-samsung-galaxy-s2-besitzer-verfugbar/#comments</comments>
		<pubDate>Sun, 28 Apr 2013 07:57:56 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[ICS]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=2036</guid>
		<description><![CDATA[Vor gut einem Jahr hat die Deutsche Telekom das Android Update Ice Cream Sandwich 4.0.3 für das Samsung Galaxy S2 über KIES ausgerollt. Heute morgen erhielt ich dann Over The Air (OTA) die Nachricht das auch mir als Telekom Kunde endlich das Software Update auf die Android Version 4.1.2 zum Download bereit steht. Die Deutsche [...]]]></description>
				<content:encoded><![CDATA[<p>Vor gut einem Jahr hat die Deutsche Telekom das Android Update Ice Cream Sandwich 4.0.3 für das Samsung Galaxy S2 über KIES ausgerollt. Heute morgen erhielt ich dann Over The Air (OTA) die Nachricht das auch mir als Telekom Kunde endlich das Software Update auf die Android Version 4.1.2 zum Download bereit steht.<br />
<span id="more-2036"></span><br />
Die Deutsche Telekom war der Vorreiter als es um das große Android Software Update auf die Version 4.0.3 alias Ice Cream Sandwich ging. Vor gut einem Jahr gehörte ich zu den ersten Galaxy S2 Besitzern die die <a href="http://www.itblogging.de/news/android-ics-kies-t-mobile/" title="Android ICS (4.0.3) über KIES für T-Mobile Kunden erhältlich">frohe Nachricht</a> des Updates verkünden konnten.<br />
So früh die Deutsche Telekom das Update auf Ice Cream Snadwich ausrollte, desto länger hat das Update nun auf Version 4.1.2 gedauert. Bereits im März begann Samsung mit dem Rollout für das Software Updates 4.1.2. Kunden die ein gebrandetes Gerät verwenden, müssen auf ihren Provider warten bis dieser die Software nach ihren Wünschen angepasst hat. Diese Runde gehörte die Telekom nicht unbedingt zu den Vorreitern. Somit fängt die Telekom mit als letztes an, das Softwareupdate auszurollen. Vielleicht liegt es auch an den Diskussionen über die bekannten Akkuprobleme. Ich bin gespannt ob dieses Problem immer noch aktuell ist. Nach letzten Informationen jedoch soll der Akkuverbrauch normal sein.  </p>
<p><a alt="Samsung Galaxy S2 - Android 4.1.2" class="lightbox" href="http://www.itblogging.de/wp-content/uploads/2013/04/samsung_galaxy_s2_android_412.png"><img src="http://www.itblogging.de/wp-content/uploads/2013/04/samsung_galaxy_s2_android_412-285x475.png" alt="samsung_galaxy_s2_android_412" width="285" height="475" class="alignnone size-medium wp-image-2037" /></a></p>
<h2>Akku Update</h2>
<p>Nach nicht einmal sieben Stunden besitzt mein Akku noch circa 2 Prozent Lebenskraft. Ernüchternes Ergebnis:</p>
<p><a class="lightbox" title="Samsung Galaxy S2 - Akkustand nach nicht einmal sieben Stunden" href="http://www.itblogging.de/wp-content/uploads/2013/04/samsung_galaxy_s2_akku.png"><img src="http://www.itblogging.de/wp-content/uploads/2013/04/samsung_galaxy_s2_akku-285x475.png" alt="samsung_galaxy_s2_akku" width="285" height="475" class="alignnone size-medium wp-image-2048" /></a></p>
<p>Und nein, ich habe nicht sechs Stunden lang irgendwelche Spiele gespielt. Heute Früh ist das SGS2 vor dem Update vom Strom entfernt worden. Zu diesem Zeitpunkt war das Update bereits vollständig aus dem Netz geladen und musste nur noch installiert werden. Natürlich habe ich es mir anschließend nicht nehmen lassen die Einstellungen zu prüfen um Änderungen wahrzunehmen. Allerdings muss ich sagen das ich das Handy nicht stundenlang in Betrieb hatte. Telefoniert? Nein. SMS geschrieben? Nein. Fotos gemacht? Eins. News gelesen? Vielleicht fünf Minuten. E-Mails gelesen? Ein paar wenige.<br />
Alles in allem bin ich zur Zeit etwas von der Akkuleistung enttäuscht.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/news/android-4-1-2-fur-telekom-kunden-und-samsung-galaxy-s2-besitzer-verfugbar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Größe der Bash History ändern</title>
		<link>http://www.itblogging.de/linux/groesse-bash-history-aendern/</link>
		<comments>http://www.itblogging.de/linux/groesse-bash-history-aendern/#comments</comments>
		<pubDate>Mon, 15 Apr 2013 18:19:18 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[good to know]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[bash_history]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=2024</guid>
		<description><![CDATA[In der bash besteht die Möglichkeit die letzten Befehle via Pfeiltaste erneut auszuführen. Standardmäßig ist die Anzahl der Befehle auf 500 begrenzt. Mit einem einfachen Eintrag in die .bash_profile Datei oder alternativ auch als export Variable lässt sich die Anzahl auf einen beliebigen Wert setzen. Natürlich kann die bash history auch gelöscht werden, selbst eine [...]]]></description>
				<content:encoded><![CDATA[<p>In der bash besteht die Möglichkeit die letzten Befehle via Pfeiltaste erneut auszuführen. Standardmäßig ist die Anzahl der Befehle auf 500 begrenzt. Mit einem einfachen Eintrag in die <em>.bash_profile</em> Datei oder alternativ auch als <em>export</em> Variable lässt sich die Anzahl auf einen beliebigen Wert setzen. Natürlich kann die bash history auch gelöscht werden, selbst eine blacklist ist möglich.<br />
<span id="more-2024"></span></p>
<h2>bash history Größe ändern</h2>
<h3>bash_profile</h3>
<p>Die Datei bash_profile (<em>vi ~/.bash_profile</em>) öffnen und folgende Zeile einfügen:</p>
<pre class="brush: bash; title: ; notranslate">
# bash_profile
# set bash history to 5000
HISTSIZE=5000
</pre>
<h3>export</h3>
<p>Alternativ hier die Möglichkeit der export Funktionalität:</p>
<pre class="brush: bash; title: ; notranslate">
export HISTSIZE=5000
</pre>
<h2>bash history deaktivieren</h2>
<pre class="brush: bash; title: ; notranslate">
# bash_profile
# disable bash history
HISTSIZE=0
</pre>
<h2>bash history blacklist</h2>
<p>Es ist auch möglich bestimmte Befehle nicht in der bash history speichern zu lassen.</p>
<pre class="brush: bash; title: ; notranslate">
# bash_profile
# ignore bash pattern
HISTIGNORE=&quot;ssh*&quot;
</pre>
<p>Hier werden alle ssh Befehle ignoriert.</p>
<h2>bash history löschen</h2>
<pre class="brush: bash; title: ; notranslate">
history -c 
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/linux/groesse-bash-history-aendern/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mac OS X &#8211; Ausgewählten Ordner im Terminal öffnen</title>
		<link>http://www.itblogging.de/mac/mac-os-x-ordner-im-terminal-offnen/</link>
		<comments>http://www.itblogging.de/mac/mac-os-x-ordner-im-terminal-offnen/#comments</comments>
		<pubDate>Mon, 04 Mar 2013 20:13:34 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=2013</guid>
		<description><![CDATA[Hin und wieder kommt es vor das ich mit dem Finder in einer tiefen Ordnerstruktur stecke und im nächsten Schritt genau an dieser Stelle im Terminal sein möchte. Natürlich könnte ich jetzt einen neuen Terminal öffnen und mühselig den gleichen Pfad eingeben. Das klappt zwar wunderbar, geht aber auch einfacher. Durch das Öffnen der Dienste-Einstellungen [...]]]></description>
				<content:encoded><![CDATA[<p>Hin und wieder kommt es vor das ich mit dem Finder in einer tiefen Ordnerstruktur stecke und im nächsten Schritt genau an dieser Stelle im Terminal sein möchte.<br />
Natürlich könnte ich jetzt einen neuen Terminal öffnen und mühselig den gleichen Pfad eingeben. Das klappt zwar wunderbar, geht aber auch einfacher.</p>
<p><span id="more-2013"></span></p>
<p>Durch das Öffnen der Dienste-Einstellungen (<strong>Finder > Dienste > Dienste-Einstellungen</strong>) ist man bereits an der richtigen Stelle. Unter <strong>Dateien und Ordner</strong> einfach den Haken bei <strong>Neues Terminal beim Ordner</strong> setzen und Tastaturkürzel eingeben.</p>
<p><a class="lightbox" title="Dienste - Dateien und Ordner" href="http://www.itblogging.de/wp-content/uploads/2013/03/terminal_finder.png"><img src="http://www.itblogging.de/wp-content/uploads/2013/03/terminal_finder-475x432.png" alt="terminal_finder" width="475" height="432" class="alignnone size-medium wp-image-2015" /></a></p>
<p>Finder bis zum gewünschten Ordner öffnen, Shortcut drücken, fertig.</p>
<p>Kleiner Hinweis: Der ausgewählte Ordner muss im übergeordneten Ordner ausgewählt sein. Das Öffnen im selben Ordner klappt leider nicht. Möchte ich beispielsweise in den Ordner <em>Test</em> welcher auf dem Schreibtisch liegt im Terminal öffnen, muss der Schreibtisch im Finder geöffnet und der Ordner <em>Test</em> gehighlighted sein.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/mac/mac-os-x-ordner-im-terminal-offnen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SVN installieren &#8211; Mac OS X 10.8 Mountain Lion</title>
		<link>http://www.itblogging.de/mac/svn-installieren-mac-os-x-mountain-lion/</link>
		<comments>http://www.itblogging.de/mac/svn-installieren-mac-os-x-mountain-lion/#comments</comments>
		<pubDate>Sun, 03 Mar 2013 11:35:22 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[macosx]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=2002</guid>
		<description><![CDATA[Nach dem Upgrade auf Mac OS X 10.8 Mountain Lion wundert sich wahrscheinlich der ein oder andere warum das Kommandozeilen Tool SVN nicht mehr vorhanden ist. Subversion, was bis zur Mac Version 10.7 Lion noch standardmäßig installiert war, muss unter Mountain Lion allerdings manuell nachträglich hinzugefügt werden. Für Xcode User ist das schnell gemacht, alle [...]]]></description>
				<content:encoded><![CDATA[<p>Nach dem Upgrade auf Mac OS X 10.8 Mountain Lion wundert sich wahrscheinlich der ein oder andere warum das Kommandozeilen Tool SVN nicht mehr vorhanden ist. Subversion, was bis zur Mac Version 10.7 Lion noch standardmäßig installiert war, muss unter Mountain Lion allerdings manuell nachträglich hinzugefügt werden. Für Xcode User ist das schnell gemacht, alle anderen benötigen eine Apple Developer ID.<br />
Ehrlich gesagt wundert mich die Entfernung von Subversion unter Mountain Lion ein wenig, aber auch hierfür gibt es eine einfache Lösung.<br />
<span id="more-2002"></span></p>
<p>Der Terminal gibt zunächst einmal folgendes aus:</p>
<pre class="brush: bash; title: ; notranslate">
simonmichel@~/ &gt;svn --version
-bash: svn: command not found
</pre>
<h2>Installation für Xcode User</h2>
<p>Wenn ihr zu den Xcode Usern gehört ist die Installation von SVN nur ein Katzensprung entfernt. Einfach unter den Einstellungen die <strong>Command Line Tools</strong> installieren.<br />
<em>Xcode > Preferences > Downloads > Command Line Tools > Install</em></p>
<h2>Command Line Tools</h2>
<p>Für Benutzer die nicht zu den <a href="https://itunes.apple.com/de/app/xcode/id497799835?mt=12" title="Xcode itunes shop">Xcode</a> Usern gehören gibt es auch noch eine andere Möglichkeit als die 1,65 GB Xcode Version ausschließlich für Subversion zu installieren. Hierzu benötigt man allerdings eine Apple Developer ID. In dem <a href="https://developer.apple.com/downloads/index.action" title="Downloads for Apple Developer">Download Bereich</a> für Apple Entwickler einfach die letzte Version <strong>Command Line Tools (OS X Mountain Lion) for Xcode</strong> herunterladen (~118 MB) und installieren. Fertig.</p>
<p>Anschließend gibt es auch die gewohnten Versionsinformationen.</p>
<pre class="brush: bash; title: ; notranslate">
simonmichel@~/ &gt;svn --version
svn, version 1.6.18 (r1303927)
   compiled Nov  2 2012, 23:47:41

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.apache.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository access (RA) modules are available:

* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
  - handles 'http' scheme
  - handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/mac/svn-installieren-mac-os-x-mountain-lion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BoxCryptor &#8211; Cloud Verschlüsselung</title>
		<link>http://www.itblogging.de/good-to-know/boxcryptor-cloud-verschluesselung/</link>
		<comments>http://www.itblogging.de/good-to-know/boxcryptor-cloud-verschluesselung/#comments</comments>
		<pubDate>Tue, 19 Feb 2013 23:19:02 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[good to know]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[drobox]]></category>
		<category><![CDATA[freeware]]></category>
		<category><![CDATA[google drive]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[Verschlüsselung]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1988</guid>
		<description><![CDATA[Nie war Sicherheit im Netz ein größeres Thema als heute. Nicht selten liest man immer wieder das Dienste, Datenbanken oder andere sensible Daten durch Hackerangriffe entwendet wurden. Aber nicht nur Unternehmen sollten Kundeninformationen und andere Daten verschlüsseln, auch als Privatperson gibt es einige Dokumente und Bilder die nicht für alle Augen bestimmt sind. Und wer [...]]]></description>
				<content:encoded><![CDATA[<p>Nie war Sicherheit im Netz ein größeres Thema als heute. Nicht selten liest man immer wieder das Dienste, Datenbanken oder andere sensible Daten durch Hackerangriffe entwendet wurden. Aber nicht nur Unternehmen sollten Kundeninformationen und andere Daten verschlüsseln, auch als Privatperson gibt es einige Dokumente und Bilder die nicht für alle Augen bestimmt sind.<br />
<span id="more-1988"></span><br />
Und wer speichert heute noch all seine Daten ausschließlich auf <em>einem</em> PC ab? Wie unpraktisch es doch damals war Dateien auf CD´s zu brennen oder auf USB-Sticks zu speichern nur damit ich sie einem Kollegen zeigen kann. Klar gibt es auch den Weg der E-Mails, aber dieser ist auch nicht immer der einfachste und bequemste. Die meisten von uns sind inzwischen in der Cloud angekommen und besitzen beispielsweise einen Dropbox, Google Drive oder SkyDrive Account. Wie praktisch es doch ist Dokumente einfach in einen synchronisierten Ordner abzulegen der irgendwo im Netz abgelegt ist und beim nächsten booten des zweiten PC´s oder durch Zugriff vom Handy auf die gleichen Daten Zugriff zu haben.<br />
Aber macht sich bei der Speicherung der Daten in der Clound überhaupt jemand Gedanken darüber wo genau die Daten gespeichert sind und ob diese überhaupt sicher sind? Was passiert, wenn mein Account gehackt wird oder der Anbieter Opfer eine Hacker Attacke ist. Ich möchte jedenfalls nicht das meine Daten plötzlich auf unseriösen Seiten wiederzufinden sind. Aus diesem Grund habe ich mich auf die Suche nach einer geeigneten Verschlüsselungsmöglichkeit gemacht. Zugegeben, ich habe bereits über <a href="http://www.itblogging.de/grundlagen/datenverschlusselung-mit-truecrypt/" title="Datenverschlüsselung mit TrueCrypt">TrueCrypt</a> einen Artikel geschrieben der das sichere Aufbewahren sensibler Daten beschreibt. Das klappt auch wunderbar, nur hat man leider in der Cloud das Problem das immer der komplette Datencontainer synchronisiert werden muss &#8211; auch wenn ich nur einen Dateinamen geändert habe. Ist der Container beispielsweise 1GB groß, merkt man schnell dass das keine passende Lösung für die Cloud ist. TrueCrypt ist also eher eine Lösung für die lokale Ablage verschlüsselter Dateien.<br />
<a href="https://www.boxcryptor.com" title="BoxCryptor">BoxCryptor</a> bietet an dieser Stelle das fehlende Puzzleteilchen. Mit BoxCrypter habe ich nun die Möglichkeit einen verschlüsselten Ordner anzulegen und diesen dann mit einzelnen Daten zu befüllen. Vorteil von BoxCrypter ist die Verschlüsselung <em>bevor</em> die Daten in die Cloud geladen werden. Somit hat ein potentieller Angreifer in der freeware Version lediglich den Dateinamen zur Hand, kann jedoch den Inhalt nicht lesen da dieser mit der sicheren Verschlüsselung AES-256 unlesbar gemacht worden ist. Perfekt!<br />
Ein weiterer sehr großer Vorteil ist die Unabhängigkeit des verwendeten Systems. Da BoxCryptor genau wie Dropbox oder die meisten anderen Cloudanbieter für Windows (auch bereits Windows 8), Mac, Linux, iPhone, iPad und auf allen Android System verfügbar ist, kann ich von überall meine verschlüsselten Daten lesen.</p>
<h3>Verschlüsselung gratis</h3>
<p>In der freien Version von BoxCryptor sind bereits die wichtigsten Funktionen enthalten. AES-256 Verschlüsselung, Multi-Plattform sowie kostenlose Apps für Android, iPhone und iPad.</p>
<h3>Merhwert bei der Unlimited Version</h3>
<p>Die Unlimited Version (Personal für 34,99 Euro, Business für 79,99 Euro) bietet zusätzlich Dateinamenverschlüsselung und unbegrenzte zu mountene Laufwerke. Auch wenn eine verschlüsselte Datei nicht gelesen werden kann, finde ich die Dateinamenverschlüsselung ganz interessant und bietet eine höhere Verschleierung der Dateninformation.</p>
<h3>Mac</h3>
<p>Installiert habe ich BoxCryptor auf meinem Mac sowie auf meinem Android Smartphone. Die Softwareinstallation klappte reibungslos und das Anlegen sowie der Zugriff auf verschlüsselte Ordner ebenso.<br />
Das Anlegen eines neuen verschlüsselten Ordners ist selbsterklärend, weshalb ich hier an dieser Stelle nicht weiter darauf eingehen werden. Die Übersicht der Settings könnt ihr dem folgenden Screenshot entnehmen:<br />
<a class="lightbox" title="BoxCryptor Settings" href="http://www.itblogging.de/wp-content/uploads/2013/02/BoxCryptor_Settings.png"><img src="http://www.itblogging.de/wp-content/uploads/2013/02/BoxCryptor_Settings-475x162.png" alt="BoxCryptor_Settings" width="475" height="162" class="alignnone size-medium wp-image-1993" /></a><br />
Die Anwendung ist schlicht und übersichtlich gehalten, erfüllt zusätzlich alle notwendigen Funktionalitäten. Soll mehr als nur ein Ordner gemounted werden (dies ist Bestandteil der Unlimited Version), ist das Einschalten des &#8220;Advanced&#8221; Modus notwendig. Andernfalls wird der zuletzt gemountete Ordner durch den neuen ersetzt.</p>
<p>Der folgende Screenshot zeigt den Paketinhalt eines verschlüsselten Ordners (bei Dateinamenverschlüsselung).<br />
<a class="lightbox" title="Verschlüsselte Ansicht der Daten" href="http://www.itblogging.de/wp-content/uploads/2013/02/folder_content.png"><img src="http://www.itblogging.de/wp-content/uploads/2013/02/folder_content.png" alt="folder_content" width="321" height="283" class="alignnone size-full wp-image-1996" /></a></p>
<h3>Android</h3>
<p>Ebenfalls kostenlos im <a href="https://play.google.com/store/apps/details?id=com.boxcryptor.android" title="Android BoxCryptor">Google Play Store</a> erhältlich ist die passende App für das Android System.<br />
Nachdem der externe Zugriff durch BoxCryptor über den Dropbox Account  bestätigt wurde, werde ich beim Aufruf eines Verschlüsselten Ordners nach meinem Passwort gefragt.<br />
<a class="lightbox" title="BoxCryptor unter Android" href="http://www.itblogging.de/wp-content/uploads/2013/02/android_boxcryptor.png"><img src="http://www.itblogging.de/wp-content/uploads/2013/02/android_boxcryptor-296x475.png" alt="android_boxcryptor" width="296" height="475" class="alignnone size-medium wp-image-1992" /></a><br />
Der Zugriff auf all meine Daten ist anschließend wie gewohnt möglich. </p>
<h3>Dropbox</h3>
<p>Nachdem die Freigabe für BoxCryptor für den Dropbox Account erteilt wurde, kann die Einstellung unter &#8220;Eigene Apps&#8221; jederzeit wieder rückgängig gemacht werden.<br />
<a class="lightbox" title="Dropbox Einstellung" href="http://www.itblogging.de/wp-content/uploads/2013/02/dropbox_einstellung.png"><img src="http://www.itblogging.de/wp-content/uploads/2013/02/dropbox_einstellung-475x144.png" alt="dropbox_einstellung" width="475" height="144" class="alignnone size-medium wp-image-1998" /></a></p>
<p>Wer noch nicht im Besitz eines Dropbox Accounts ist, dem empfehle ich folgenden Link: <a href="http://db.tt/cxexPrXJ" title="Dropbox Account">http://db.tt/cxexPrXJ</a>. Über diesen Link wird der neue Account direkt von 2GB auf 2,5GB geupgradet wenn ihr Dropbox auf dem Computer installiert. Zugegeben, auch mein Speicher wird pro Weiterempfehlung um 500MB erweitert, so hat jeder etwas davon.</p>
<h3>Browser</h3>
<p>Golem hat bereits im Dezember letzten Jahres darüber <a href="http://www.golem.de/news/boxcryptor-for-chrome-verschluesselung-der-cloud-im-browser-1212-96332.html" title="Verschlüsselung der Cloud im Browser">berichtet</a> das sich die Entwicklung einer <a href="http://www.boxcryptor.com/download/BoxCryptor_for_Chrome_v0.1.crx" title="BoxCryptor für Chrome">Chrome App</a> bereits in einem Alpha Status befindet. Es ist also nur eine Frage der Zeit bis die gängigsten Browser ein Addon zur Verfügung gestellt bekommen. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/good-to-know/boxcryptor-cloud-verschluesselung/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Java 7 &#8211; Was ist neu?</title>
		<link>http://www.itblogging.de/java/java-7-was-ist-neu/</link>
		<comments>http://www.itblogging.de/java/java-7-was-ist-neu/#comments</comments>
		<pubDate>Mon, 17 Dec 2012 22:53:51 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java 7]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1961</guid>
		<description><![CDATA[Inzwischen ist schon einige Zeit verstrichen als Java 7 (JSR 336) gelauncht wurde. Dennoch wird der Großteil -gerade im Enterprise Bereich- aller Projekte noch mit der 6er Version entwickelt. Die Einführung der 7er Version bringt natürlich neben Performance auch viele neue Entwicklungsmöglichkeiten mit sich. Ich möchte hier versuchen einige Java 7 Erneuerungen zu aggregieren. String [...]]]></description>
				<content:encoded><![CDATA[<p>Inzwischen ist schon einige Zeit verstrichen als Java 7 (JSR 336) gelauncht wurde. Dennoch wird der Großteil -gerade im Enterprise Bereich- aller Projekte noch mit der 6er Version entwickelt.<br />
Die Einführung der 7er Version bringt natürlich neben Performance auch viele neue Entwicklungsmöglichkeiten mit sich. Ich möchte hier versuchen einige Java 7 Erneuerungen zu aggregieren.<br />
<span id="more-1961"></span></p>
<h2>String switch Anweisungen</h2>
<p>Was bisher nur mit Enum oder primitiven Datentypen möglich war, ist nun auch bei Strings erlaubt.<br />
Mit Java 7 lassen sich diese durch eine switch-case Anweisung behandeln. Stehen die in diesem Beispiel verwendeten Wochentage in Variablen, müssen sie <em>final</em> sein. </p>
<pre class="brush: java; title: ; notranslate">
public int getWeekdayByName(String day) {
    switch (day) {
      case &quot;Monday&quot;:    return 1;
      case &quot;Tuesday&quot;:   return 2;
      case &quot;Wednesday&quot;: return 3;
      case &quot;Thursday&quot;:  return 4;
      case &quot;Friday&quot;:    return 5;
      case &quot;Saturday&quot;:  return 6;
      case &quot;Sunday&quot;:    return 7;
      default:          return -1;
    }
  }
</pre>
<h2>Multi-Catch</h2>
<p>Müssen in einem try-catch Block mehrere Exception Typen behandelt werden, wird es oft unübersichtlich. Sieht sogar bei jedem Exceptionhandling die Verarbeitung gleich aus, entsteht schnell redundanter Code. Manch einer Entwickler neigt daher dazu den Typ <em>Exception</em> abzufangen. Meiner Meinung nach die schlechteste Wahl da hiermit auch nicht erwartete Exceptions abgefangen werden. Ganz selten ist dies hilfreich und angebracht, dies hält sich allerdings sehr in Grenzen und ist sehr anwendungsspezifisch.<br />
Seit Java Version 7 können diverse Exception Typen getrennt von einer Pipe abgefangen werden. Der Code wird übersichtlicher und Redundanz gehört der Vergangenheit an.</p>
<pre class="brush: java; title: ; notranslate">
public void multipleCatchException() {
    try {
      Thread.sleep(1000);
      int result = 10 / 0;
    } catch (InterruptedException | ArithmeticException e) {
      e.printStackTrace();
    }
  }
</pre>
<h2>Diamond Operator</h2>
<p>Wie lästig und redundant es doch immer war bei dem Anlegen einer Variable der Implementierung nochmals mehr den zuvor angegeben Typen zu übergeben. Diverse Bibliotheken wie Guava konnten dies bereits unterdrücken (List<String> weekdays = Lists.newArrayList()). </p>
<pre class="brush: java; title: ; notranslate">
List&lt;String&gt; myList = new ArrayList&lt;String&gt;()
</pre>
<p>Mit Java 7 ist dies nun auch ohne externe Bibliotheken möglich wobei sich die leere Klammer <strong>Diamond Operator</strong> schimpft.</p>
<pre class="brush: java; title: ; notranslate">
List&lt;String&gt; myList = new ArrayList&lt;&gt;()
</pre>
<h2>Unterstriche in Numbers</h2>
<p>Neben der Binärdarstellung können in Zukunft auch Unterstriche in Numbers zur besseren Lesbarkeit verwendet werden.</p>
<pre class="brush: java; title: ; notranslate">
int oneMillionJava6 = 1000000;
int oneMillionJava7 = 1_000_000;

long bytesJava6 = 0b000000010000000100000001;
long bytesJava7 = 0b00000001_00000001_00000001;
</pre>
<h2>try-with-resources</h2>
<p>Der lästige NULL check sowie das manuelle schließen der Streams im finally Block gehören ab sofort der Vergangenheit an. Die neue Umsetzung nennt sich &#8220;try-with-resources&#8221; und übernimmt den <em>close()</em> Aufruf aller Ressourcen automatisch beim verlassen des try Blocks (quasi zwischen try und catch).</p>
<pre class="brush: java; title: ; notranslate">
File input = new File(&quot;&quot;);
File output = new File(&quot;&quot;);
try (
    FileInputStream fileInputStream = new FileInputStream(input);
    FileOutputStream fileOutputStream = new FileOutputStream(output);
) {

  byte[] buffer = new byte[1024];
  int read;
  while ((read = fileInputStream.read(buffer)) != -1) {
    fileOutputStream.write(buffer, 0, read);
  }
} catch (IOException e) {
  e.printStackTrace();
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/java/java-7-was-ist-neu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Standard Tomcat Port 8080 ändern</title>
		<link>http://www.itblogging.de/netzwerk/standard-tomcat-port-8080-andern/</link>
		<comments>http://www.itblogging.de/netzwerk/standard-tomcat-port-8080-andern/#comments</comments>
		<pubDate>Thu, 08 Nov 2012 23:05:32 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1946</guid>
		<description><![CDATA[Ein Tomcat ist nach einer Standardinstallation über den Port 8080 zu erreichen. Die Erreichbarkeit des Tomcats über einen anderen Port (beispielsweise der beliebte Standardport 80 für Webserver) kann auf unterschiedliche Art angepasst werden. Um spätere Kollisionen zu vermeiden, muss sich der Administrator zuvor vergewissern das der neue Port nicht bereits von einer anderen Anwendung in [...]]]></description>
				<content:encoded><![CDATA[<p>Ein Tomcat ist nach einer Standardinstallation über den Port 8080 zu erreichen. Die Erreichbarkeit des Tomcats über einen anderen Port (beispielsweise der beliebte Standardport 80 für Webserver) kann auf unterschiedliche Art angepasst werden. Um spätere Kollisionen zu vermeiden, muss sich der Administrator zuvor vergewissern das der neue Port nicht bereits von einer anderen Anwendung in Anspruch genommen wird.<br />
<span id="more-1946"></span></p>
<p>Einer Möglichkeit der ich in diesem Beitrag weniger Aufmerksamkeit schenken möchte ist die Änderunge der IP Route mit Hilfe des <em>iptables</em> Befehls. Stattdessen konzentriere ich mich hier auf die Tomcat Konfiguration.</p>
<h2>Tomcat Port ändern</h2>
<p>Um den Standardport 8080 zu ändern berdarf es der Anpassung zweier Dateien:</p>
<h3>Anpassung der server.xml</h3>
<p>In der server.xml (bei der Standardinstallation zu finden unter <em>/etc/tomcat7/server.xml</em>) muss das Connector Tag angepasst werden. Ihr findet in der Datei einen Codeschnippsel der ähnlich wie der folgende aussieht:</p>
<p><strong>Vorher</strong></p>
<pre class="brush: bash; title: ; notranslate">
&lt;Connector port=&quot;8080&quot; protocol=&quot;HTTP/1.1&quot; 
           connectionTimeout=&quot;20000&quot; 
           URIEncoding=&quot;UTF-8&quot; 
           redirectPort=&quot;8443&quot; /&gt;
</pre>
<p>Der Port 8080 kann auf einen beliebigen Port geändert werden.</p>
<p><strong>Nachher (am Beispiel des Port 80)</strong></p>
<pre class="brush: bash; title: ; notranslate">
&lt;Connector port=&quot;80&quot; protocol=&quot;HTTP/1.1&quot; 
           connectionTimeout=&quot;20000&quot; 
           URIEncoding=&quot;UTF-8&quot; 
           redirectPort=&quot;8443&quot; /&gt;
</pre>
<p>Ein voreiliger Restart des Tomcats (<em>sudo service tomcat7 restart</em>) führt zu einem Rechteproblem (Permission denied) wie der folgende Screenshot zeigt (die Tomcat Ausgabe wird in der Datei <em>/var/log/tomcat7/catalina.out</em> protokolliert):</p>
<p><a class="lightbox" title="Permission denied" href="http://www.itblogging.de/wp-content/uploads/2012/11/tomcat7_access_denied.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/11/tomcat7_access_denied-475x401.png" alt="" title="tomcat7 access denied" width="475" height="401" class="alignnone size-medium wp-image-1949" /></a></p>
<p>Da Ports unterhalb von 1023 nur von dem User <em>root</em> geöffnet werden dürfen, ist die Einschaltung des <em>AUTHBIND</em> notwendig.</p>
<h3>Anpassung der tomcat7 Datei</h3>
<p>Die folgende Anpassung ist nur notwendig wenn ein Port kleiner 1024 verwendet wird.</p>
<p>In der tomcat7 Datei (bei der Standardinstallation zu finden unter <em>/etc/default/tomcat7</em>) muss das <em>AUTHBIND</em> eingeschaltet werden.</p>
<p><strong>Vorher</strong></p>
<pre class="brush: bash; title: ; notranslate">#AUTHBIND=no</pre>
<p><strong>Nachher</strong></p>
<pre class="brush: bash; title: ; notranslate">AUTHBIND=yes</pre>
<h3>Restart</h3>
<p>Nach einem Neustart (<em>sudo service tomcat7 restart</em>) ist der Tomcat nun über den gewünschten Port erreichbar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/netzwerk/standard-tomcat-port-8080-andern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NTFS für Mac</title>
		<link>http://www.itblogging.de/mac/ntfs-fuer-mac/</link>
		<comments>http://www.itblogging.de/mac/ntfs-fuer-mac/#comments</comments>
		<pubDate>Mon, 15 Oct 2012 21:35:42 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[macosx]]></category>
		<category><![CDATA[NTFS]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1928</guid>
		<description><![CDATA[Schließt man eine NTFS Festplatte an ein Mac OS X System an, scheint die Welt auf den ersten Blick noch in Ordnung zu sein. Lesen &#8211; kein Problem. Daten von der Festplatte auf den Mac kopieren &#8211; kein Problem. Daten vom Mac OS X System auf die NTFS Platte kopieren &#8211; Fehlanzeige. Was die meisten [...]]]></description>
				<content:encoded><![CDATA[<p>Schließt man eine NTFS Festplatte an ein Mac OS X System an, scheint die Welt auf den ersten Blick noch in Ordnung zu sein. Lesen &#8211; kein Problem. Daten von der Festplatte auf den Mac kopieren &#8211; kein Problem. Daten vom Mac OS X System auf die NTFS Platte kopieren &#8211; Fehlanzeige.<br />
Was die meisten Linux Derivate bereits seit Jahren können, da hinkt der doch sonst recht vorausschauende Soft- und Hardwareriese aus Kalifornien noch hinterher.<br />
Dank Software von Drittanbietern ist es trotzdem möglich NTFS Datenträger zu speichern.<br />
<span id="more-1928"></span><br />
Was wird also benötigt um NTFS Dateisysteme zu beschreiben? Wie so oft in der Softwarewelt gibt es auch hier eine Open Source sowie eine Kommerzielle Lösung.</p>
<h2>Kommerzielle Lösung</h2>
<h3>Paragon</h3>
<p>Paragon bietet für derzeit 19,90 Euro die Software <a href="http://www.paragon-software.com/de/home/ntfs-mac/">NTFS für Mac® OS X 10</a> als Komplettpaket an. Eine 10 Tage Testversion mit voller Funktionalität steht ebenfalls zum Download bereit.<br />
Im Netz liest man davon das die Performance gut, wenn nicht sogar besser als die nachfolgende vorgestellte Open Source Variante ist. Ich selbst hab es nie ausprobiert, vielleicht könnt ihr etwas dazu sagen?</p>
<h3>Tuxera</h3>
<p>Das Unternehmen Tuxera bietet mit dem Produkt <a href="http://www.tuxera.com/products/tuxera-ntfs-for-mac/" title="http://www.tuxera.com/products/tuxera-ntfs-for-mac/tuxera-ntfs-fur-mac-2012/">Tuxera NTFS für Mac 2012</a> bei einer Testversion von 15 Tagen und einem Kaufpreis von 25,00 Euro ein sehr ähnliches Produkt wie Paragon an. Die Installation klappt reibungsfrei und auch erste Versuche externe NTFS Festplatten einzubinden klappt problemlos. Die möglichen Einstellungsmöglichkeiten findet ihr im nachfolgendem Screenshot.</p>
<p><a class="lightbox" title="Tuxera NTFS für Mac 2012" href="http://www.itblogging.de/wp-content/uploads/2012/10/tuxera_ntfs.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/10/tuxera_ntfs-475x366.png" alt="Tuxera NTFS für Mac 2012" width="475" height="366" class="alignnone size-medium wp-image-1971" /></a></p>
<h2>Open Source Lösung</h2>
<p>Für den Zugriff auf NTFS Datenträger sind lediglich zwei kleine Tools notwendig. OSXFUSE und NTFS-3G. </p>
<h3>OSXFUSE</h3>
<p>Mit Hilfe des Kernel Modul FUSE (Filesystem in Userspace) ist es möglich, Dateisystem Treiber von dem Kernel Modus in den User Modus zu portieren und somit Dateisystemtreiber außerhalbs des Kernels zu verwenden.<br />
Ist OSXFUSE einmal <a href="https://github.com/osxfuse/osxfuse" title="OSXFUSE">heruntergeladen</a>, muss während der Installation unbedingt der Haken bei <em>MacFUSE Compatibility Layer</em> (siehe Screenshot) gesetzt sein, andernfalls kann es später zu Problemen kommen.</p>
<p><a class="lightbox" title="OSXFUSE Installation" href="http://www.itblogging.de/wp-content/uploads/2012/10/osxfuse_installation.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/10/osxfuse_installation-475x372.png" alt="" title="osxfuse_installation" width="475" height="372" class="alignnone size-medium wp-image-1934" /></a></p>
<p>Nachdem die Installation erfolgreich abgeschlossen wurde, findet ihr in den Systemsteuerungen unter <em>Sonstige</em> zwei neue Icons. <strong>MacFuse</strong> und <strong>FUSE for OS X</strong> (siehe Screenshot weiter unten). Der Grundstein für die Treiber ist somit schonmal gelegt.</p>
<h3>NTFS-3G for Mac OS X</h3>
<p>Nach der Installation von OSXFUSE ermöglicht der NTFS-3G Treiber für Mac OS X und anderen Linux Betriebssystemen die notwendigen Schreibzugriffe auf NTFS Dateisysteme. Die Software kann beispielsweise bei <a href="http://www.macupdate.com/app/mac/26288/ntfs-for-mac-os-x" title="NTFS for Mac OS X">macupdate.de</a> heruntergeladen werden. Die Installation bedarf soweit keiner weiteren Erklärung.<br />
Nach Beendigung der Installation hat auch NTFS-3G ein neues Icon in der Systemsteuerung unter <em>Sonstiges</em> Platz gefunden.</p>
<p><a title="Systemeinstellungen - Sonstiges" class="lightbox" href="http://www.itblogging.de/wp-content/uploads/2012/10/systemeinstellungen.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/10/systemeinstellungen.png" alt="" title="systemeinstellungen" width="414" height="103" class="alignnone size-full wp-image-1935" /></a></p>
<p><a class="lightbox" title="Einstellungen von NTFS-3G" href="http://www.itblogging.de/wp-content/uploads/2012/10/ntfs3g_einstellungen.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/10/ntfs3g_einstellungen-475x422.png" alt="" title="ntfs3g_einstellungen" width="475" height="422" class="alignnone size-medium wp-image-1936" /></a></p>
<p>Vom Prinzip war es das auch schon. Ein Blick in den Festplatteninformationen verrät das verwendete Format: <strong>NTFS-3G (OSXFUSE)</strong>. </p>
<p><a class="lightbox" title="Festplatteninformation" href="http://www.itblogging.de/wp-content/uploads/2012/10/festplatteninformation.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/10/festplatteninformation.png" alt="" title="festplatteninformation" width="396" height="184" class="alignnone size-full wp-image-1937" /></a></p>
<p>Das Schreiben auf NTFS Datenträtger sollte jetzt wie gehabt klappen. Viel Spaß.</p>
<p>Noch ein kleiner Hinweis: Unter Mountain Lion erhalte ich beim mounten meiner Festplatte eine Fehlermeldung <em>NTFS-3G could not mount /dev/disk2s1 at &#8230; Did not receive a signal within 15.00 seconds. Exiting&#8230;</em>. </p>
<p><a class="lightbox" title="NTFS-3G Fehlermeldung" href="http://www.itblogging.de/wp-content/uploads/2012/10/ntfs3g.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/10/ntfs3g-475x274.png" alt="" title="NTFS-3G Fehlermeldung" width="475" height="274" class="alignnone size-medium wp-image-1939" /></a></p>
<p>Ich weiß nicht ob es an der Größe der Festplatte bzw. an der verbrauchten Speicherkapazität liegt, jedoch kann ich trotz dieses Hinweises meine Festplatte anschließend ohne Probleme verwenden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/mac/ntfs-fuer-mac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java Reflection</title>
		<link>http://www.itblogging.de/java/java-reflection/</link>
		<comments>http://www.itblogging.de/java/java-reflection/#comments</comments>
		<pubDate>Fri, 22 Jun 2012 23:00:34 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[reflection]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1903</guid>
		<description><![CDATA[Java bietet durch den Einsatz von Reflection eine Möglichkeit, die zur Kompilierzeit noch unbekannten Metadateninformationen über Klassen und Objekte zur Laufzeit abzurufen. Reflection findet oft in (Java) Frameworks zum Testen der Anwendung (z.B. JUnit 3.x) Verwendung. Auch Debugger können dank Reflection zur Laufzeit Informationen über Objekte ausgeben, die andernfalls nur mit sehr viel Aufwand lesbar [...]]]></description>
				<content:encoded><![CDATA[<p>Java bietet durch den Einsatz von Reflection eine Möglichkeit, die zur Kompilierzeit noch unbekannten Metadateninformationen über Klassen und Objekte zur Laufzeit abzurufen. Reflection findet oft in (Java) Frameworks zum Testen der Anwendung (z.B. JUnit 3.x) Verwendung. Auch Debugger können dank Reflection zur Laufzeit Informationen über Objekte ausgeben, die andernfalls nur mit sehr viel Aufwand lesbar wären.<br />
Die Reflection API ermöglicht es sogar, auf geschützte (private, protected, package private) Attribute und Methoden zuzugreifen. Diese Möglichkeit sollte jedoch möglichst vermieden werden, da andernfalls das laufende System durch Instabilität oder sogar zum Absturz gebracht werden kann. Grundsätzlich sollte Reflection auch nur dann verwendet werden, wenn es keine andere Alternative gibt.<br />
<span id="more-1903"></span></p>
<h2>Wichtige Metadatenklassen</h2>
<p>Die wohl wichtigsten Informationen über die Klassen welche Metainformationen enthalten einmal kurz zusammengefasst: </p>
<p><strong>java.lang.Class<?></strong><br />
Enthält Metainformationen über die Klasse. Zum Beispiel: Annotationinformationen, Konstruktorinformationen, Methoden, Attribute, Interfaces, ENUM Konstanten und und und.</p>
<p><strong>java.lang.reflect.Field</strong><br />
Die <em>Field</em> Objekte enthalten beispielhaft Metainformationen über den Attributnamen, Typen oder die Sichtbarkeit. Abgerufen werden können diese Informationen unter anderem über die Methode <em>getFields()</em> des <em>Class<?></em> Objektes.</p>
<p><strong>java.lang.reflect.Method</strong><br />
Die <em>Method</em> Objekte können beispielsweise über die Methode <em>getMethods()</em> des <em>Class<?></em> Objektes ausgelesen werden. Sie beinhalten Informationen über die Methode wie den Namen, die Parameter, den Rückgabewert, die Sichtbarkeit und einige Weitere.</p>
<h2>Class Reflection</h2>
<p>Im Allgemeinen gibt es drei verschiedene Möglichkeiten an das Class-Objekt (Metadaten) zu gelangen. Hierzu jeweils ein Beispiel:</p>
<pre class="brush: java; title: ; notranslate">
		java.lang.String value = &quot;reflection example&quot;;

		Class&lt;?&gt; option1 = value.getClass();
		Class&lt;?&gt; option2 = Class.forName(&quot;java.lang.String&quot;);
		Class&lt;?&gt; option3 = String.class;

		// Ergebnis: class java.lang.String
		System.out.println(option1.toString());
		// Ergebnis: class java.lang.String	
		System.out.println(option2.toString());
		// Ergebnis: class java.lang.String
		System.out.println(option3.toString());
</pre>
<p>Im ersten Fall (option1) hat der Classloader die Klasse bereits geladen und ein verwendbares Objekt liegt vor. Über <em>getClass()</em> kann hier auf das Class-Objekt zugegriffen werden.<br />
Die <em>getClass()</em> Methode ist im übrigen im jedem Java Objekt vorhanden.</p>
<p>Fall zwei (option2) zeigt den Zugriff auf das Class-Objekt über die statische Methode <em>forName()</em>. Übergeben wird der vollqualifizierte Klassenname (Vorsicht vor Tippfehlern!). Die Variante kann verwendet werden, wenn der konkrete Typ zur Kompilierzeit noch nicht bekannt ist. </p>
<p>Im letzten Fall (option3) wird davon ausgegangen das die Klasse vor dem Zeitpunkt der Kompilierung zur Verfügung steht. Das statische Attribut <em>.class</em> liefert unter dieser Voraussetzung das Class-Objekt und somit alle Klasseninformationen.</p>
<h3>Paketinformationen</h3>
<p>Über dass Class Objekt können Informationen über die Paketstruktur geladen werden.</p>
<pre class="brush: java; title: ; notranslate">option1.getPackage()</pre>
<h3>Superklasse</h3>
<p>Oder aber auch über die Superklassen. Bei POJO&#8217;s wird dies immer Object sein.</p>
<pre class="brush: java; title: ; notranslate">option1.getSuperclass()</pre>
<h3>Interfaces</h3>
<p>Falls vorhanden, können auch die Interfaces ausgelesen werden.</p>
<pre class="brush: java; title: ; notranslate">option1.getInterfaces()</pre>
<h3>Klassenname</h3>
<p>Und sogar der Klassenname wird nicht verborgen &#8230;</p>
<pre class="brush: java; title: ; notranslate">option1.getName()</pre>
<h3>Modifier</h3>
<p>Über <em>getModifies()</em> wird eine Liste mit <em>int</em> Werten zurückgeliefert. Mit Hilfe der <em>java.lang.reflect.Modifier</em> Klasse können über statische Methoden wie <em>isPublic()</em>, <em>isStatic()</em>, <em>isSynchronized()</em> die int Werte genau identifiziert werden.</p>
<pre class="brush: java; title: ; notranslate">option1.getModifiers()</pre>
<h3>Konstruktor</h3>
<p>Da eine Klasse durchaus aus mehreren Konstruktoren besteht, liefert <em>getConstructors()</em> ebenfalls eine Liste mit Konstruktor Objekten zurück.</p>
<pre class="brush: java; title: ; notranslate">getConstructors()</pre>
<h3>Annotations</h3>
<p>Annotations werden mit <em>getAnnotations()</em> ausgelesen.</p>
<pre class="brush: java; title: ; notranslate">option1.getAnnotations()</pre>
<h3>Methoden</h3>
<p>Alle öffentlichen Methoden können über <em>getMethods()</em> gelesen werden. </p>
<pre class="brush: java; title: ; notranslate">option1.getMethods()</pre>
<h3>Fields</h3>
<p>Die öffentlichen Attribute liefert <em>getFields()</em>.</p>
<pre class="brush: java; title: ; notranslate">option1.getFields()</pre>
<h2>Method Reflection</h2>
<p>Nachdem nun bekannt ist, wie die Metainformationen aus einer Klasse gelesen werden können, hierzu ein kleines Beispiel anhand eines Methodenaufrufs einer Klasse.</p>
<pre class="brush: java; title: ; notranslate">
			// Ein Objekt der Klasse Person über den vollqualifizierten Namen erstellen
			Person person = (Person) Class.forName(&quot;de.itblogging.reflection.Person&quot;).newInstance();
			// Das Class Objekt über getClass() laden
			Class&lt;?&gt; clazz = person.getClass();

			// Methodeaufruf definieren [Methodenname, Parametertyp1, Parametertyp2]
			Method method = clazz.getMethod(&quot;callMyName&quot;, String.class, String.class);
			// Methode aufrufen
			method.invoke(person, &quot;Simon&quot;, &quot;Michel&quot;);
</pre>
<p>Wie auf das <em>Class<?></em> Objekt bei einem vorhandenen Objekt zugegriffen werden konnte, wurde zuvor bereits geklärt. Die Methode <em>getMethod()</em> erwartet mindestens einen Parameter &#8211; den Methodennamen. Als zweiten, dritten, vierten &#8230; Parameter müssen anschließend die konkreten Parametertypen in richtiger Reihenfolge übergeben werden. Ist das <em>Method</em> Objekt erstellt, ruft die Methode <em>invoke()</em> die zuvor definierte Methode auf. In diesem Fall werden zusätzlich die zwei String Parameter übergeben.<br />
Die öffentliche Methode <em>callMyName()</em> macht nichts anderes, als dass diese den übergebenen Namen in die Konsole schreibt. Den Aufwand welcher bei Reflection allein durch das Exceptionhandling betrieben werden muss, habe ich in diesem Beispiel bewusst wegfallen lassen. Bearbeitet werden müssten hier <strong>sechs</strong> verschiebene Exceptions!<br />
Eine einzelne Methode kann also über <em>getMethod()</em> angesprochen werden. Um alle <strong>öffentlichen</strong> in der Klasse deklarierten Methoden auflisten zu lassen, hilft die Methode <em>getMethods()</em>.</p>
<h2>Zugriff auf private Attribute und Methoden</h2>
<p>Unter der Voraussetzung das eine Klassenmethode öffentlich ist, genügt <em>getMethod()</em> um auf sie zuzugreifen. Das selbe Verhalten gilt für <em>getField()</em>. In Ausnahmefällen soll es aber dann vielleicht möglich sein, nicht nur auf die öffentlichen Methoden und Attribute zuzugreifen, sondern auch auf die geschützten, die privaten Methoden.</p>
<h3>Private Attribute</h3>
<p>Vorausgesetzt die Klasse Person würde ein privates Attribut namens <em>password</em> enthalten, so müsste im ersten Schritt die Methode über <em>get<strong>Declared</strong>Field()</em> geladen werden. Anschließend wird die Zugriffseinschränkung über <em>setAccessible(true)</em> ausgehebelt. Als letztes muss dann nur noch der Wert neu gesetzt werden. Fertig.<br />
Übrigens: Bei statischen Methoden wird statt der Objektreferenz der Wert <em>null</em> übergeben.</p>
<pre class="brush: java; title: ; notranslate">
		Person person = new Person();
		Class&lt;?&gt; option1 = person.getClass();
		
		// privates Attribut &quot;helloWorld&quot; laden
		Field password = option1.getDeclaredField(&quot;password&quot;);
		// Zugriffseinschränkung aufheben
		password.setAccessible(true);
		// Attribut neu setzen
		password.set(person, &quot;weltmeister&quot;);
		// Ausgabe des neuen Wertes.
		System.out.println(password.get(person));
</pre>
<h3>Private Methoden</h3>
<p>Bei den privaten Methoden ist die Vorgehensweise nahezu die selbe wie bei den private Attributen. </p>
<pre class="brush: java; title: ; notranslate">
		Person person = new Person();
		Class&lt;?&gt; option1 = person.getClass();
		
		// Methode laden
		Method method = option1.getDeclaredMethod(&quot;getPassword&quot;);
		// Zugriffseinschränkung aufheben
		method.setAccessible(true);
		// Methode ausführen und den Rückgabewert speichern
		String personPassword = (String) method.invoke(person);
		// Ausgabe des Passworts
		System.out.println(personPassword);
</pre>
<p>In diesem Codebeispiel wird die private Methode <em>getPassword()</em> aufgerufen und anschließend das Ergebnis in die Konsole geschrieben. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/java/java-reflection/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Firefox URL autocompletion in der Adressleiste</title>
		<link>http://www.itblogging.de/good-to-know/firefox-url-autocompletion-in-der-adressleiste/</link>
		<comments>http://www.itblogging.de/good-to-know/firefox-url-autocompletion-in-der-adressleiste/#comments</comments>
		<pubDate>Sun, 06 May 2012 16:25:46 +0000</pubDate>
		<dc:creator>Simon Michel</dc:creator>
				<category><![CDATA[good to know]]></category>
		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://www.itblogging.de/?p=1888</guid>
		<description><![CDATA[Auch wenn Firefox ein sehr guter und weit verbreiteter Browser mit vielen Features ist, dennoch finde das einige Standardeinstellungen nicht ganz nach meinem Geschmack eingestellt sind. Hierzu gehört unter anderem auch die autocompletion der bereits besuchten Websites. Ist es nicht auf Dauer nervig jedes Mal den Pfeil nach unten in der Vorschlagsbox zu drücken? Bei [...]]]></description>
				<content:encoded><![CDATA[<p>Auch wenn Firefox ein sehr guter und weit verbreiteter Browser mit vielen Features ist, dennoch finde das einige Standardeinstellungen nicht ganz nach meinem Geschmack eingestellt sind. Hierzu gehört unter anderem auch die autocompletion der bereits besuchten Websites. Ist es nicht auf Dauer nervig jedes Mal den Pfeil nach unten in der Vorschlagsbox zu drücken? Bei anderen Browsern wie beispielsweise der Safari oder Chrome ist dies bereits voreingestellt&#8230;<br />
<span id="more-1888"></span><br />
Glücklicherweise ermöglicht Firefox über die Einstellungsseite <strong><em>about:config</em></strong> dem User die Möglichkeit, seinen Browser individuell anzupassen.</p>
<p>In der Suche wird nach folgendem Einstellungsnamen gesucht:</p>
<pre class="brush: bash; title: ; notranslate">browser.urlbar.autoFill</pre>
<p><a class="lightbox" title="about:config autoFill" href="http://www.itblogging.de/wp-content/uploads/2012/05/autoFill.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/05/autoFill-475x109.png" alt="" title="autoFill" width="475" height="109" class="alignnone size-medium wp-image-1891" /></a></p>
<p>Per Doppelklick auf die <strong>autoFill</strong> Einstellung wird die Benutzereinstellung aktiviert und der Wert von false auf <strong>true</strong> gesetzt.</p>
<p><a class="lightbox" title="URL autocompletion"  href="http://www.itblogging.de/wp-content/uploads/2012/05/autocompletion.png"><img src="http://www.itblogging.de/wp-content/uploads/2012/05/autocompletion.png" alt="" title="autocompletion" width="394" height="224" class="alignnone size-full wp-image-1893" /></a></p>
<p>Die autocompletion ist nun aktiviert. Ebenso kann ich allen Firefox-Nutzern eine tolle Erweiterung namens Adblock Plus empfehlen, welche <a href="http://www.techfacts.de/ratgeber/werbung-im-firefox-blocken" title="Werbung beim surfen blockieren" target="_blank">Werbung beim Surfen blockieren</a> kann.<br />
Irgendwie sind es doch oft die Kleinigkeiten, die das alltägliche Arbeiten erleichtern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itblogging.de/good-to-know/firefox-url-autocompletion-in-der-adressleiste/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using n/a
Database Caching using disk

 Served from: www.itblogging.de @ 2013-06-19 02:53:06 by W3 Total Cache -->