<?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>WebDucer techBlog &#187; Computer</title>
	<atom:link href="http://blog.webducer.de/category/computer/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.webducer.de</link>
	<description></description>
	<lastBuildDate>Sun, 22 Jan 2012 19:18:37 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Android: Einfache Perfomance-Optimierungen</title>
		<link>http://blog.webducer.de/2012/01/android-einfache-perfomance-optimierungen/</link>
		<comments>http://blog.webducer.de/2012/01/android-einfache-perfomance-optimierungen/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 19:16:46 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Perfomance]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=289</guid>
		<description><![CDATA[Zugriff auf Klassenvariablen (Eigenschaften) sollte, wenn möglich (z.B. innerhalb der Klasse oder des Packages), direkt über die Klassenvariablen statt über die Getter und Setter-Methoden erfolgen. Performance-Steigerung liegt ca. beim Faktor 2-3.]]></description>
			<content:encoded><![CDATA[<ol>
<li>Zugriff auf Klassenvariablen (Eigenschaften) sollte, wenn möglich (z.B. innerhalb der Klasse oder des Packages), direkt über die Klassenvariablen statt über die Getter und Setter-Methoden erfolgen. Performance-Steigerung liegt ca. beim Faktor 2-3.</li>
<li>Bei Zusammenfügen von String-Ketten  sollte man den StringBulder, statt des „+“-Operators nutzen. Mit der Anzahl der Konkatenationen steigt der Performance-Verlust beim „+“-Operator exponentiell an, da jedes Mal ein neues Objekt erzeugt werden muss. Beim StringBuilder steigt die Rechenzeit dagegen nur linear an.</li>
<li>Es sollen unnötige Objekterzeugungen vermieden werden. So z.B.:</li>
<ol type="a">
<li>Objekterzeugung innerhalb der Schleifen vermeiden</li>
<li>Mehrfache Objekterzeugung von oft benutzen Objekten in der Klasse vemeiden (z.B.: <code>findViewById()</code>). Diese sollten am besten direkt als Klassenvariablen, und somit nur einmal, initialisiert werden.</li>
</ol>
<li>Schleifen optimieren. Satt:
<pre class="brush: java; gutter: true">for (int i = 0; i &lt; array.length; i++) { … }</pre>
<p>sollte</p>
<pre class="brush: java; gutter: true">int arrayLenght = array.length;
for (int i = 0; i &lt; arrayLength; i++) { … }</pre>
<p>verwendet werden.</li>
<li>Layoutoptimierung mit dem mitgelieferten Tool <strong><code>layoutopt</code></strong> durchführen.</li>
<li>Größere (mehr als 100 Elemente) Arrays sind deutlich perfomanter als ArrayList Objekte.</li>
<li>Einfache Klassen, sollten wenn möglich durch Arrays ersetzt werden, da dadurch die Objekterzeugung entfällt.</li>
<li>Wenn möglich, sollten <code>final</code> und <code>static</code> Zugriffsmodifizierer verwendet werden.</li>
<li>Die Schleifen, nach dem das gewünschte Ergebnis erreicht wurde, sollten durch <code>break</code> oder <code>continue</code> verlassen werden und nicht unnötig die restlichen Elemente durchlaufen.</li>
<li>Rechenintensive oder Zeitintensive Aufgaben (z.B.: Netzwerk und Dateizugriffe) sollten immer in ein eigenes Thread ausgelagert werden, damit der Benutzer weiterhin die Kontrolle über die App behält.</li>
<li>Beim WebServices und Netzwerkzugriffen sollte dem kompakteren <code>JSON</code>-Format immer der Vorzug vor dem <code>XML</code>-Format gewährt werden (kleinerer Overhead).</li>
<li>Benutzung des mitgelieferten Obfuscators <code>ProGuard</code>, um den kompilierten Code zu optimieren (Komprimierung von Code, weglassen unbenutzer Methoden / Eigenschaften / Klassen, kürzung der Bezeichner usw.).</li>
<li>Test der eigenen Algorithmen auf Perfomance und Test der Alternativen (Benchmarking).</li>
<li>Benutzung von <code>TraceView</code> (DDMS), um Flaschenhälse beim Speicher und Ausführungszeit zu finden.</li>
<li>Bei den SQL-Abfragen sollten nur die wirklich notwendige Daten abgefragt werden (nur benötigte Spalten und nur die benötigte Datenmenge, Zeilenanzahl).</li>
<li>Lint nutzen, um unbenutzte Resourcen und vorgeschlagene Optimierungen umzusetzen.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2012/01/android-einfache-perfomance-optimierungen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android: Erste App (Währungsrechner) – Teil 2</title>
		<link>http://blog.webducer.de/2011/10/android-erste-app-wahrungsrechner-%e2%80%93-teil-2/</link>
		<comments>http://blog.webducer.de/2011/10/android-erste-app-wahrungsrechner-%e2%80%93-teil-2/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 19:11:37 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Workshop]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[Goolge]]></category>
		<category><![CDATA[Rechner]]></category>
		<category><![CDATA[Währung]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=235</guid>
		<description><![CDATA[Unsere App ist bereits lauffähig. Aber es fehlt noch ein entscheidender Punkt, bevor wir uns der Programmlogig annehmen. Die beiden Auswahlboxen sind momentan ohne Inhalt und somit zwecklos. Das wollen wir natürlich ändern.]]></description>
			<content:encoded><![CDATA[<p>Den ersten Teil des Workshops finden Sie unter &#8220;<a title="Android: Erste App (Währungsrechner) – Teil 1" href="http://blog.webducer.de/2011/09/android-erste-app-wahrungsrechner-teil-1/">Android: Erste App (Währungsrechner) – Teil 1</a>&#8220;.</p>
<p>Unsere App ist bereits lauffähig. Aber es fehlt noch ein entscheidender Punkt, bevor wir uns der Programmlogik annehmen. Die beiden Auswahlboxen sind momentan ohne Inhalt und somit zwecklos. Das wollen wir natürlich ändern.</p>
<p>Die Auswahlboxen können als Inhalt Daten aus einer Datenbank oder aus einem Array (Auflistung) entgegennehmen. Da wir später noch unsere App mehrsprachig machen wollen, werden wir die Währungen als Ressourcen ablegen.
<a href='http://blog.webducer.de/2011/10/android-erste-app-wahrungsrechner-%e2%80%93-teil-2/android-tools-2/' title='Android Tools'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/Android-Tools1-150x150.png" class="attachment-thumbnail" alt="Android Tools" title="Android Tools" /></a>
<a href='http://blog.webducer.de/2011/10/android-erste-app-wahrungsrechner-%e2%80%93-teil-2/ressource-file-2/' title='Ressource File'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/Ressource-File1-150x150.png" class="attachment-thumbnail" alt="Ressource File" title="Ressource File" /></a>
<a href='http://blog.webducer.de/2011/10/android-erste-app-wahrungsrechner-%e2%80%93-teil-2/array-ressource-2/' title='Array Ressource'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/Array-Ressource1-150x150.png" class="attachment-thumbnail" alt="Array Ressource" title="Array Ressource" /></a>
<a href='http://blog.webducer.de/2011/10/android-erste-app-wahrungsrechner-%e2%80%93-teil-2/spinner/' title='Spinner'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/spinner-150x150.png" class="attachment-thumbnail" alt="Spinner" title="Spinner" /></a>
<a href='http://blog.webducer.de/2011/10/android-erste-app-wahrungsrechner-%e2%80%93-teil-2/localization-ressource/' title='Localization Ressource'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/10/Localization-Ressource-150x150.png" class="attachment-thumbnail" alt="Localization Ressource" title="Localization Ressource" /></a>
<a href='http://blog.webducer.de/2011/10/android-erste-app-wahrungsrechner-%e2%80%93-teil-2/wahrungsapp/' title='Währungsapp'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/10/Währungsapp-150x150.png" class="attachment-thumbnail" alt="Währungsapp" title="Währungsapp" /></a>
</p>
<p>Dafür befolgen Sie die folgenden Schritte:</p>
<ol>
<li>Klicken Sie mit der rechten Maustaste auf das Projekt in der Package-Explorer Ansicht.</li>
<li>Wählen Sie den Punkt &#8220;<strong><code>Android Tools</code></strong>&#8221; (ganz unten im Kontextmenü).</li>
<li>Wählen Sie im Untermenü &#8220;<strong><code>New Resource File ...</code></strong>&#8220;.</li>
<li>Geben Sie als File &#8220;<strong><code>arrays</code></strong>&#8221; ein.</li>
<li>Wählen Sie als Typ &#8220;<strong><code>Values</code></strong>&#8221; aus.</li>
<li>Klicken Sie auf &#8220;<strong><code>Finish</code></strong>&#8220;.</li>
</ol>
<p>Damit legen wir eine neue Ressource-Datei, in der wir Auflistungen speichern werden. Wir benötigen insgesamt 2 Auflistungen. In der neuen Datei legen Sie entweder über die graphische Oberfläche über den &#8220;<strong><code>Add</code></strong>&#8221; Knopf ein neues StringArray (siehe Bilder) mit dem Namen &#8220;<strong><code>waehrung</code></strong>&#8220;, oder Sie geben die Werte direkt als XML-Code ein. Die XML-Darstellungen sehen Sie weiter unten.</p>
<h3>array.xml</h3>
<pre class="brush: xml; gutter: true">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;resources&gt;
    &lt;string-array name="waehrung"&gt;
        &lt;item&gt;EUR - Euro&lt;/item&gt;
        &lt;item&gt;USD - Amerikanische Dollar&lt;/item&gt;
        &lt;item&gt;AUD - Australische Dollar&lt;/item&gt;
        &lt;item&gt;RUB - Russische Rubel&lt;/item&gt;
        &lt;item&gt;CUD - Kanadische Dollar&lt;/item&gt;
        &lt;item&gt;GBP - Englische Pfund&lt;/item&gt;
    &lt;/string-array&gt;
    &lt;string-array name="waehrung_kurs"&gt;
        &lt;item&gt;1&lt;/item&gt;
        &lt;item&gt;1.3795&lt;/item&gt;
        &lt;item&gt;1.3314&lt;/item&gt;
        &lt;item&gt;42.1941&lt;/item&gt;
        &lt;item&gt;1.3495&lt;/item&gt;
        &lt;item&gt;0.8738&lt;/item&gt;
    &lt;/string-array&gt;
&lt;/resources&gt;</pre>
<p>Nun können wir die beiden Auswahllisten mit dem Inhalt der ersten Auslistung füllen. Die zweite Liste benötigen wir später im Code. Es sind die Währungskurse in Bezug auf Euro, die wir für die Umrechnung benötigen.</p>
<p>Um die Auswahlliste an eine Auflistung zu binden, müssen wir nur in unseren Layout-Datei &#8220;main.xml&#8221; bei den beiden Auswahllisten (Spinner) folgende Zeile (Zeile Nr. 6) hinzufügen.</p>
<pre class="brush: xml; gutter: true">&lt;Spinner
	android:layout_height="wrap_content"
	android:layout_width="0dp"
	android:layout_weight="1"
	android:id="@+id/selWaehrungStart"
	android:entries="@array/waehrung"&gt;
&lt;/Spinner&gt;</pre>
<p>Wenn Sie jetzt die App starten, können Sie bereits die Ausgangs- und Zielwährung wählen (siehe Bild).</p>
<p>Nun können wir uns den Java-Quellcode widmen. Als Erstes sollte unser &#8220;<strong><code>Berechnen</code></strong>&#8221; Knopf auf das Klicken reagieren. Dazu registrieren wir einen Listener (Zuhörer), der praktisch darauf wartet, bis der Benutzer eine Aktion ausführt. Dazu müssen wir als Erstes die Instanz des Knopfes ermitteln. Nun kommt uns zugute, dass wir unsere Views mit einer eindeutigen ID versehen haben.</p>
<p>Aus dem Java Code zu einer Activity könne wir jederzeit eine Referenz auf ein View mit einer ID ermitteln. Dafür stellt die Activity die <code>Methode findViewById(ID)</code>. Da die Methode die Basisklasse &#8220;View&#8221; zurückliefert, müssen wir den Rückgabewert noch auf das zu erwartende View (in unserem Fall Button) kasten (<code>Button cmdBerechnen = (Button)findViewById(R.id.cmdBerechnen);</code>). Wie an diesem Beispiel zu sehen ist, greifen wir auf die automatisch generierte &#8220;<code>R</code>&#8220;-Klasse, die uns die Referenzen auf unsere Ressourcen zur Verfügung stellt. Dabei sind folgende oft verwendete Referenzen wichtig:</p>
<ul>
<li><code>R.id</code> : Referenzen auf die Views der Layouts. Im Layout sind das die <code>android:id=""</code> Attribute</li>
<li><code>R.layout</code> : Referenzen auf die Layout-Dateien</li>
<li><code>R.string</code> : Referenzen auf unsere definierten Texte</li>
<li><code>R.array</code> : Referenzen auf unsere definierte Auflistungen</li>
<li><code>R.color</code> : Referenzen auf die Farben</li>
<li><code>R.drawable</code> : Referenzen auf die Bilder</li>
<li>und einige weitere. Weitere Infos dazu finden Sie unter: <a title="Resource Types | Android Developer" href="http://developer.android.com/guide/topics/resources/available-resources.html">developer.android.com</a></li>
</ul>
<p>Den Listener fügen Sie mit der folgen Zeile hinzu:</p>
<pre class="brush: java; gutter: true">cmdBerechnen.setOnClickListener(new OnClickListener() {
	public void onClick(View v) {
		kursBerechnen();
	}
});</pre>
<p>Wir rufen in diesem unsere eigene Methode auf, die die Berechnung und die Ausgabe übernimmt. Das Ganze passiert in der onCreate Methode, die beim Erstellen einer Activity als Erstes aufgerufen wird (Lebenszyklen einer Activity wird in einem anderen Workshop erklärt). Schauen wir uns diese genauer an.</p>
<h3>HauptActivity.java</h3>
<pre class="brush: java; gutter: true">package de.webducer.android.wrechner;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class HauptActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Init();
    }

    /**
     * Initialisierung des Menüs (wird nur ein mal aufgerufen)
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    	MenuInflater inflater = new MenuInflater(this);
    	inflater.inflate(R.menu.menu, menu);
    	return super.onCreateOptionsMenu(menu);
    }

    /**
     * Reagieren auf ein Klick auf ein Menüeintrag
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    	switch (item.getItemId()) {
    	// Ergebnisliste löschen
		case R.id.optLoeschen:
			TextView ergebnisse = (TextView)findViewById(R.id.txtErgebnisse);
			ergebnisse.setText("");

			break;

		// Programm schließen
		case R.id.optSchliessen:
			this.finish();

			break;

		default:
			break;
		}
    	return true;
    }

    /**
     * Initialisierung der Oberfläche
     */
    private void Init(){
    	// Button mit einem Listener verbinden
    	Button cmdBerechnen = (Button)findViewById(R.id.cmdBerechnen);
    	cmdBerechnen.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				kursBerechnen();
			}
		});
    }

    /**
     * Berechnung und Ausgabe des Ergebnisses
     */
    private void kursBerechnen(){
    	// Elemente auslesen
    	EditText txtBetrag = (EditText)findViewById(R.id.txtBetrag);
    	TextView txtErgebnis = (TextView)findViewById(R.id.txtErgebnisse);
    	Spinner selWaehrungStart = (Spinner)findViewById(R.id.selWaehrungStart);
    	Spinner selWaehrungEnde = (Spinner)findViewById(R.id.selWaehrungEnde);

    	Boolean failure = false;

    	// Uwandlung des Betrages in eine Zahl
    	String betragText = txtBetrag.getText().toString();
    	Double betrag = 0d;
    	if (betragText != null &amp;&amp; betragText != "") {
    		try {
    			betrag = Double.parseDouble(betragText);
			} catch (NumberFormatException e) {
				Toast.makeText(this, R.string.err_betarg_format, Toast.LENGTH_LONG).show();
				failure = true;
			}
		}

    	// Bestimmen der Ausgangs- und Zielwährung
    	int wahrungStart = selWaehrungStart.getSelectedItemPosition();
    	int waehrungEnde = selWaehrungEnde.getSelectedItemPosition();

    	// Bestimmen des jeweiligen Wechselkurses
    	String kursStartText = getResources().getStringArray(R.array.waehrung_kurs)[wahrungStart];
    	String kursEndeText = getResources().getStringArray(R.array.waehrung_kurs)[waehrungEnde];

    	// Umwandlung des Kurses in eine Zahl
    	Double kursStart = 0d;
    	Double kursEnde = 0d;
    	if (kursStartText != null &amp;&amp; kursStartText != "" &amp;&amp; !failure) {
			try {
				kursStart = Double.parseDouble(kursStartText);
			} catch (NumberFormatException e) {
				Toast.makeText(this, R.string.err_kurs_format, Toast.LENGTH_LONG).show();
				failure = true;
			}
		}
    	if (kursEndeText != null &amp;&amp; kursEndeText != "" &amp;&amp; !failure) {
			try {
				kursEnde = Double.parseDouble(kursEndeText);
			} catch (NumberFormatException e) {
				Toast.makeText(this, R.string.err_kurs_format, Toast.LENGTH_LONG).show();
				failure = true;
			}
		}

    	if(!failure){
	    	// Umrechnung
	    	Double ergebnis = betrag / kursStart * kursEnde;

	    	// Ergebnis ausgeben
	    	StringBuilder ergebnisText = new StringBuilder();
	    	ergebnisText.append(getResources().getStringArray(R.array.waehrung)[wahrungStart].subSequence(0, 3))
	    		.append(" ")
	    		.append(String.format("%.2f", betrag))
	    		.append(" = ")
	    		.append(getResources().getStringArray(R.array.waehrung)[waehrungEnde].substring(0, 3))
	    		.append(" ")
	    		.append(String.format("%.2f", ergebnis))
	    		.append("\n");
	    	txtErgebnis.setText(txtErgebnis.getText() + ergebnisText.toString());
    	}
    }
}</pre>
<p>In der Zeile 21 wird durch den Aufruf der Methode <code>setContentView(R.layout.main);</code> wiesen wir unseren Activity <code>HauptActivity.java</code> ein Layout zu, den wir wieder über die generierte Klasse &#8220;<code>R</code>&#8221; ansprechen.</p>
<p>Der Aufruf unserer eigenen Methode <code>Init()</code> in der Zeile 23 setzt den Listener für unseren Berechnungs-Knopf. Nun wenden wir uns der eigentlichen Berechnung zu (Zeilen 75 bis 142).</p>
<p>Als Erstes holen wir uns die Referenzen zu allen Views, die wir für unsere Berechnung benötigen (Betrag, Ausgangswährung, Endwährung und Ergebnisfeld).</p>
<p>In der Zeile 87 erhalten wir durch den Aufruf der Methode <code>getText()</code> den Betrag für die Umrechnung. Das ist allerdings ein Textfeld und wir benötigen eine Zahl. Aus diesem Grund konvertieren wir den erhaltenen Text in ein Double-Format (mit der vorherigen Prüfung, ob der Text überhaupt eingegeben wurde, Zeile 89).</p>
<p>In den Zeilen 99 und 100 erhalten wir den Index des ausgewählten Eintrages aus den Auswahlboxen der Währung. Jetzt kommt uns der zweite Array, in dem wir die Kurse definiert haben, zugute. Dieser ist genauso von der Reihenfolge her aufgebaut, wie das Währungs-Array. Nun können wir durch den Index aus den Zeilen 99 und 100 die Kurse ermitteln (Zeilen 103 und 104). Diese sind wiederum Texte und müssen zuerst in Double konvertiert werden, wie bereit beim Betrag.</p>
<p>Wenn alle Konvertierungen ohne Fehler durchgelaufen sind, berechnen wir nun in der Zeile 128 den umgerechneten Betrag. Um eine schöne Anzeige zu erhalten, formatieren wir nur ein wenig unsere Ausgabe. Die Anzeige soll dann in etwa folgendermassen aussehen:</p>
<pre class="brush: text; gutter: true">EUR 125,00 = USD 172,44</pre>
<p>Damit wir auch eine Geschichte unserer Berechnungen erhalten, hängen wir in der Zeile 140 unser Ergebnis an den vorhandenen Text an.</p>
<p>Um dem Benutzer zu signalisieren, dass mit der Berechnung etwas schief gelaufen ist, erzeugen wir bei einem Konvertierungsfehler einen Toast (kleine Benachrichtigung, die kurz auf dem Bildschirm erscheint). Das erfolgt in den Zeilen 93, 113 und 121. Wenn Sie einen solchen Fehler provozieren wollen, tauschen Sie einfach in der <code>array.xml</code>-Datei in dem Werte-Array die Punkte durch die Kommas aus (erzeugt Fehler beim Konvertieren).</p>
<h2>Lokalisierung</h2>
<p>Die Lokalisierung ist unter Android relativ einfach gelöst. Die Ressourcen, die keinen Länder-Postfox haben, gehören zu der Standardsprache (in unseren Fall Deutsch). Die Standardsprache muss immer vollständig sein. Weitere Sprachen dagegen nicht. Wird eine spezielle Übersetzung nicht gefunden, wird die der Standard-Übersetzung genommen.</p>
<p>In unserer App müssen die Daten aus der <code>strings.xml</code> und <code>arrays.xml</code> Dateien übersetzt werden. Dafür klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie <code>Android Tools</code> -&gt; <code>New Ressource File...</code> . Wie im Bild zu sehen ist, muss für neue Sprache nun unter &#8220;<code>Available Qualifiers</code>&#8221; &#8220;<code>Language</code>&#8221; auswählen und auf der rechten Seite den zweistelligen Ländercode eingeben (&#8220;<code>en</code>&#8221; für Englisch). Nun kann der Inhalt der beiden Dateien in die neuen kopiert werden und die Werte übersetzt werden. Die neuen Dateien landen im Ordner &#8220;<code>res/values-en</code>&#8220;.</p>
<h3>strings.xml</h3>
<pre class="brush: xml; gutter: true">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;resources&gt;
	&lt;!-- Globale Strings --&gt;
	&lt;string name="app_name"&gt;Currency Calculator&lt;/string&gt;

	&lt;!-- View Texte --&gt;
    &lt;string name="betrag_eingeben"&gt;Please type the value to calculate!&lt;/string&gt;
    &lt;string name="cmd_berechnen"&gt;Calculate&lt;/string&gt;

    &lt;!-- Menü --&gt;
    &lt;string name="opt_loeschen"&gt;Clear Result List&lt;/string&gt;
    &lt;string name="opt_loeschen_kurz"&gt;Clear&lt;/string&gt;
    &lt;string name="opt_schliessen"&gt;Close App&lt;/string&gt;
    &lt;string name="opt_schliessen_kurz"&gt;Close&lt;/string&gt;

    &lt;!-- Fehlertexte --&gt;
    &lt;string name="err_betarg_format"&gt;The value has wrong format!&lt;/string&gt;
    &lt;string name="err_kurs_format"&gt;The currency value has wrong format!&lt;/string&gt;
&lt;/resources&gt;</pre>
<h3>arrays.xml</h3>
<pre class="brush: xml; gutter: true">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;resources&gt;
    &lt;string-array name="waehrung"&gt;
        &lt;item&gt;EUR - Euro&lt;/item&gt;
        &lt;item&gt;USD - American Dollar&lt;/item&gt;
        &lt;item&gt;AUD - Australian Dollar&lt;/item&gt;
        &lt;item&gt;RUB - Russian Rubel&lt;/item&gt;
        &lt;item&gt;CUD - Canadian Dollar&lt;/item&gt;
        &lt;item&gt;GBP - Great Britain Pound&lt;/item&gt;
    &lt;/string-array&gt;
&lt;/resources&gt;</pre>
<h2>Menü</h2>
<p>Nun gehen wir an das Menü. Dafür erstellen wir wieder eine neue Android Ressource-Datei von Typ Menü. Diese XML-Datei landet im Ordner &#8220;<code>res/menu</code>&#8220;.</p>
<h3>menu.xml</h3>
<pre class="brush: xml; gutter: true">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;menu
  xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    &lt;item
    	android:title="@string/opt_loeschen"
    	android:titleCondensed="@string/opt_loeschen_kurz"
    	android:id="@+id/optLoeschen"
    	android:icon="@drawable/opt_clear" /&gt;
    &lt;item
    	android:title="@string/opt_schliessen"
    	android:titleCondensed="@string/opt_schliessen_kurz"
    	android:id="@+id/optSchliessen"
    	android:icon="@drawable/opt_close" /&gt;
&lt;/menu&gt;</pre>
<p>In unseren Activity-Java-Datei müssen nur noch wenige Zeilen hinzugefügt werden, um dem Menü ein Leben einzuhauchen. In den Zeilen 30 bis 34 wir das Menü initialisiert (ähnlich, wie das Layout in der <code>onCreate</code>-Methode). Dafür dient die überschriebene Methode <code>onCreateOptionsMenu()</code>. Unter Optionsmenü versteht man unter Android das Menü, das durch das Betätigen der Menütaste erscheint.</p>
<p>Die Auswertung, welches der Menüpunkte nun ausgewählt wurde, erfolgt in der überschriebenen Methode <code>onOptionsItemSelected()</code>. Über die Item-ID können wir bestimmen, was nun ausgewählt wurde und abhängig davon unseren Code ausführen (hier ist ein CASE-Konstrukt sehr gut geeignet, um die Menüpunkte zu unterscheiden und den Code übersichtlich zu halten). Für das Schließen unseren App benötigen wir nur eine Zeile mit <code>this.finish()</code> (Zeile 51). Um die Ergebnisse zurückzusetzen, müssen wir wieder die Referenz auf das View holen und deren Text auf einen leeren Text setzen (Zeilen 44 und 45).</p>
<p>Damit ist unsere App so weit funktionsfähig und einsatzbereit. Die Kurse können sehr einfach in der XML-Datei angepasst und erweitert werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2011/10/android-erste-app-wahrungsrechner-%e2%80%93-teil-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android: Erste App (Währungsrechner) &#8211; Teil 1</title>
		<link>http://blog.webducer.de/2011/09/android-erste-app-wahrungsrechner-teil-1/</link>
		<comments>http://blog.webducer.de/2011/09/android-erste-app-wahrungsrechner-teil-1/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 14:56:30 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Workshop]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[Goolge]]></category>
		<category><![CDATA[Rechner]]></category>
		<category><![CDATA[Währung]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=145</guid>
		<description><![CDATA[Dieser Beitrag zeigt an einer sehr einfach gehaltenen App, wie man seine erste App für Android erstellen kann. Dabei werden die benötigten Elemente und Schritte detailiert beschrieben und bebildert. Das fertige Projekt kann unter dem unten stehenden Link von GitHub heruntergeladen (oder geklonnt) werden.]]></description>
			<content:encoded><![CDATA[<p>Dieser Beitrag zeigt an einer sehr einfach gehaltenen App, wie man seine erste App für Android erstellen kann. Dabei werden die benötigten Elemente und Schritte detailliert beschrieben und bebildert. Das fertige Projekt kann unter dem unten stehenden Link von GitHub heruntergeladen (oder geklont) werden.</p>
<p><a title="Währungsrechner Code bei GitHub" href="https://github.com/WebDucer/BlogBeitraege/tree/master/Waehrungsrechner" target="_blank">GitHub Projekt-Repository</a></p>
<h2>Projektbeschreibung (Zielsetzung)</h2>
<p>In diesem Beitrag wird ein einfacher Währungsrechner erstellt. Folgende Aufgaben / Voraussetzungen muss die fertige App erfüllen:</p>
<ul>
<li>Eingabe eines Betrages zum Umrechnen</li>
<li>Validierung der Eingaben (nur Zahlen)
<ul>
<li>Auswahl der Ausgangs- und Zielwährung</li>
</ul>
</li>
<li>Berechnung des Betrages in der Zielwährung</li>
<li>Ausgabe der Berechnung
<ul>
<li>Die letzen Ergebnisse in einer Liste ausgeben</li>
</ul>
</li>
<li>Löschen der Ergebnisliste über ein Menü</li>
<li>Beenden der App über ein Menü</li>
<li>Mehrsprachigkeit</li>
</ul>
<p>Durch diese relativ einfache Anwendung werden die unter Android am meisten benutzte Elemente vorgestellt.</p>
<h2>Anlegen des Projektes unter Eclipse</h2>
<p>Eine genaue Beschreibung, wie Sie Eclipse auf Ihrem System einrichten, finden Sie unter &#8220;<a title="Android: Eclipse installieren und einrichten" href="http://blog.webducer.de/2011/09/android-eclipse-installieren-und-einrichten/">Android: Eclipse installieren und einrichten</a>&#8220;. Im Beitrag &#8220;<a title="Android: Neues Projekt anlegen" href="http://blog.webducer.de/2011/09/android-neues-projekt-anlegen/">Android: Neues Projekt anlegen</a>&#8221; finden Sie die Beschreibung, wie Sie ein neues Android-Projekt mithilfe des Assistenten unter Eclipse anlegen. Für das folgende Projekt sollten Sie die folgenden Werte beim Anlegen des Projektes angeben, um den Beschreibungen und Code-Ausschnitten besser folgen zu können:</p>
<ul>
<li>Project name: Waehrungsrechner</li>
<li>Contents: Create new project in workspace</li>
<li>Build target: Android 2.2 (API Level 8 )</li>
<li>Application name: Waehrungsrechner</li>
<li>Package name: de.webducer.android.wrechner</li>
<li>Create Activity (angehackt): HauptActivity</li>
<li>Min SDK Version: 8</li>
</ul>
<p>Nach der Neuanlage des Projektes wird der erste Bildschirm bereits mit einem Element, dass den Text &#8220;Hallo World&#8221; enthält. Nun können Sie das Projekt zum ersten Mal starten. Dafür gehen Sie wie folgt vor:</p>
<ol>
<li>Markieren Sie im &#8220;Package Explorer&#8221; das Projekt</li>
<li>Klicken Sie mit der rechten Maustaste darauf und</li>
<li>wählen Sie im Kontextmenü den Punkt &#8220;Run as&#8221; -&gt; &#8220;Android Application&#8221;</li>
</ol>
<p>Nach einiger Zeit startet zuerst der eingerichtete Emulator (das kann abhängig vom Rechner auch einige Minuten dauern). Danach startet im Emulator das Programm. Schließen den Emulator nicht, dann wird die neue Version sehr schnell auch auf dem Emulator angezeigt.</p>
<p>Aber nun der Reihe nach. Zuerst erkläre ich die Datei-Struktur von unserem Projekt.</p>
<h2>Ordner und Dateistruktur des Projektes</h2>
<div id="attachment_259" class="wp-caption alignright" style="width: 160px"><a href="http://blog.webducer.de/wp-content/uploads/2011/09/Projektstruktur.png"><img class="size-thumbnail wp-image-259" title="Projektstruktur" src="http://blog.webducer.de/wp-content/uploads/2011/09/Projektstruktur-150x150.png" alt="Projektstruktur" width="150" height="150" /></a><p class="wp-caption-text">Projektstruktur</p></div>
<dl>
<dt>src</dt>
<dd>In diesem Verzeichnis liegen die Quellcode-Dateien zu Ihrer App (Java-Dateien). Im Moment sollte in diesem Ordner nur die Datei &#8220;HauptActivity.java&#8221; liegen (im entsprechenden Package &#8220;de.webducer.android.wrechner&#8221;).</dd>
<dt>gen</dt>
<dd>Das ist ein automatisch generiertes Verzeichnis von Android. Die automatisch generierte Klasse &#8220;R&#8221; beinhaltet die Verweise auf die Ressourcen-Variablen und dient zum Zugriff auf diese aus dem Quellcode heraus. Zu den Ressourcen gehören unter anderen die übersetzbaren Strings, Layouts, Farben, Arrays, Bilder usw.</dd>
<dt>Android 2.2</dt>
<dd>In diesem Ordner ist die Android-Bibliothek abgelegt. Abhängig von der ausgewählten Android-SDK-Version wird eine andere Nummer angezeigt.</dd>
<dt>assets</dt>
<dd>In diesem Ordner werden Ressourcen abgelegt, die nicht über den Ressourcen-Manager verwaltet werden und in Unterverzeichnisse gegliedert werden können.</dd>
<dt>res</dt>
<dd>In diesem Ordner werden Ressourcen abgelegt, die über den Android-Ressource-Manager zur Verfügung gestellt werden und in der R.-Klasse abgebildet werden. Die einzelnen Unterordner werden weiter unten beschrieben.</dd>
<dt>drawable-XX</dt>
<dd>In diesen Ordnern werden die Bilder für die App gespeichert. XX steht dabei für eine bestimmte Ausflösungsdichte und wird dynamisch abhängig vom Auflösungsvermögen des Zielbildschirms ausgelesen.</dd>
<dt>layout</dt>
<dd>In diesem Ordner liegen die Layout-Definitionen für unsere App. In unserem Fall sollte am Anfang nur die Datei &#8220;main.xml&#8221; vorliegen.</dd>
<dt>values</dt>
<dd>In diesem Ordner werden unterschiedliche Werttypen gespeichert. Unter anderem sind hier die Strings-Definitionen für die Mehrsprachigkeit einer App definiert. Weitere Wertgruppen sind zum Beispiel Farben, Designs, Arrays usw.</dd>
<dt>AndroidManifest.xml</dt>
<dd>Diese Datei definiert unsere App und regelt unter anderem auch die notwendigen Berechtigungen.</dd>
</dl>
<h2>Das Layout</h2>
<div id="attachment_266" class="wp-caption alignright" style="width: 160px"><a href="http://blog.webducer.de/wp-content/uploads/2011/09/Waehrungsrechner-Layout.png"><img class="size-thumbnail wp-image-266" title="Währungsrechner-Layout" src="http://blog.webducer.de/wp-content/uploads/2011/09/Waehrungsrechner-Layout-150x150.png" alt="Währungsrechner-Layout" width="150" height="150" /></a><p class="wp-caption-text">Währungsrechner-Layout</p></div>
<p>Unser Layout für die App besteht aus folgenden Elementen (Widgets):</p>
<ul>
<li>EditText: Für die Eingabe des Betrages für die Umrechnung</li>
<li>Spinner: Zwei Auswahlboxen für die Auswahl der Ausgangs- und der Zielwährung</li>
<li>Button: Knopf, um die Umrechnung anzustoßen</li>
<li>TextView: Bereich, in dem die Ergebnisse angezeigt werden (zusammen mit älteren Umrechnungen)</li>
</ul>
<h3>main.xml</h3>
<pre class="brush: xml; gutter: true">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    &gt;
    &lt;EditText
    	android:layout_height="wrap_content"
    	android:id="@+id/txtBetrag"
    	android:layout_width="fill_parent"
    	android:hint="@string/betrag_eingeben"
    	android:inputType="numberDecimal"&gt;
    &lt;/EditText&gt;
    &lt;LinearLayout
    	android:orientation="horizontal"
    	android:weightSum="3"
    	android:layout_height="wrap_content"
    	android:layout_width="fill_parent"&gt;
	    &lt;Spinner
	    	android:layout_height="wrap_content"
	    	android:layout_width="0dp"
	    	android:layout_weight="1"
	    	android:id="@+id/selWaehrungStart"&gt;
	    &lt;/Spinner&gt;
	    &lt;Spinner
	    	android:layout_height="wrap_content"
	    	android:layout_width="0dp"
	    	android:layout_weight="1"
	    	android:id="@+id/selWaehrungEnde"&gt;
	    &lt;/Spinner&gt;
	    &lt;Button
	    	android:text="@string/cmd_berechnen"
	    	android:id="@+id/cmdBerechnen"
	    	android:layout_width="0dp"
	    	android:layout_weight="1"
	    	android:layout_height="wrap_content"&gt;
	    &lt;/Button&gt;
	&lt;/LinearLayout&gt;
	&lt;ScrollView
		android:layout_height="fill_parent"
		android:layout_width="fill_parent"&gt;
	    &lt;TextView
	    	android:id="@+id/txtErgebnisse"
	    	android:layout_width="fill_parent"
	    	android:layout_height="fill_parent"
	    	android:gravity="top"&gt;
	    &lt;/TextView&gt;
	&lt;/ScrollView&gt;
&lt;/LinearLayout&gt;</pre>
<p>Ein Android-Layout besteht aus einfachen Views (wie EditText, Button usw.) und den sogenannten View-Gruppen-Elementen, die weitere Elemente enthalten dürfen. Das oberste Element ist immer eine View-Gruppe. In unserem Fall ist es ein <code>LinearLayour</code>. Diese Gruppe richtet die enthaltenen Elemente abhängig von der Orientierung neben- (horizontal) oder übereinander (vertical) an (Zeilen 4 und 17). Das Linear-Layout Element aus der Zeile 2 ordnen somit alle enthaltenen Elemente untereinander. Und das Linear-Layout aus Zeile 15 ordnet die 3 enthaltenen Elemente nebeneinander.</p>
<p>Die Angabe in allen Views <code>android:layout_width</code> bestimmt die Bereite des Elementes, <code>android:layout_height</code> die Höhe. Es sind folgende Werte möglich:</p>
<ul>
<li><code>fill_parent</code> (oder <code>match_parent</code>): View nimmt die gesamte Breite / Höhe ein, die das Elternelement zur Verfügung stellt.</li>
<li><code>wrap_content</code>: View nimmt die Breite / Höhe des eigenen Inhaltes ein.</li>
<li>Wert in Pixel (px) oder Device Independent Pixel (dp / dip).</li>
</ul>
<p>Somit nimmt unser LinearLayout aus Zeile 2 die gesamte Breite und Höhe (ganzer Bildschirm), das EditText dagegen zwar die gesamte Breite, aber nur eigene Höhe ein.</p>
<p>In der Zeile 10 sehen wir ein spezielles Konstrukt (<code>android:id="@+id/txtBetrag"</code>). Mit dieser Angabe &#8220;<code>@+id/</code>&#8221; teilen wir dem Compiler mit, dass dieses Element eine eindeutige ID erhalten soll, gefolgt von dem Namen, den wir frei vergeben können. Über diese ID können wir später auf das View aus dem Quellcode zugreifen (<code>R.id.txtBetrag</code>).</p>
<p>In der Zeile 12 (<code>android:hint="@string/betrag_eingeben"</code>) kommt wieder ein spezieller Android-Konstrukt. Über die Angabe &#8220;<code>@string/</code>&#8221; können wir auf die String-Ressourcen aus dem &#8220;<code>res</code>&#8220;-Ordner zugreifen. Das sind die übersetzten Text-Platzhalter. Die string.xml folgt weiter unten. Die Angabe <code>android:hint</code> legt einen Hinweistext fest, der nach der Eingabe der ersten Zahlen verschwindet.</p>
<p>Die Angabe in der Zeile 13 (<code>android:inputType="numberDecimal"</code>) legen wir fest, dass im Eingabefeld nur positive Zahlen eingegeben werden dürfen.</p>
<p>Damit wir die 3 Views nebeneinander und in der gleichen Breite darstellen, nutzen wir statt der absoluten Breitenangabe (z.B. Zeile 22 <code>android:layout_width="0dp"</code>) eine relative Angabe zum Eleternelemet. LinearLayout aus Zeile 15 definiert, dass den Kindelementen eine Gewichtungssumme von 3 zur Verfügung gestellt wird (Zeile 17 <code>android:weightSum="3"</code>). Die 3 Views haben jeweils eine Gewichtung von 1 (Zeile 23 <code>android:layout_weight="1"</code>), also genau 1/3 der Gesamtgewichtung.</p>
<p>In der Zeile 40 ist das TextView innerhalb eines ScrollView (View-Gruppe) platziert. Das erlaubt uns später durch die Ergebnisse zu scrollen, falls es mehr sein werden, als der Platz auf dem Bildschirm erlaubt.</p>
<p>Mit der Zeile 47 (<code>android:gravity="top"</code>) geben wir an, dass der Text oben (im Bezug zum Elternelement) platziert werden soll.</p>
<h3>strings.xml</h3>
<pre class="brush: xml; gutter: true">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;resources&gt;
    &lt;string name="betrag_eingeben"&gt;Bitte den Betrag hier eingeben!&lt;/string&gt;
    &lt;string name="app_name"&gt;Währungsrechner&lt;/string&gt;
    &lt;string name="cmd_berechnen"&gt;Berechnen&lt;/string&gt;
&lt;/resources&gt;</pre>
<p><a title="Android: Erste App (Währungsrechner) – Teil 2" href="http://blog.webducer.de/2011/10/android-erste-app-wahrungsrechner-%e2%80%93-teil-2/">Android: Erste App (Währungsrechner) – Teil 2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2011/09/android-erste-app-wahrungsrechner-teil-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android: Neues Projekt anlegen</title>
		<link>http://blog.webducer.de/2011/09/android-neues-projekt-anlegen/</link>
		<comments>http://blog.webducer.de/2011/09/android-neues-projekt-anlegen/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 04:05:23 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Workshop]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Einführung]]></category>
		<category><![CDATA[Projekt]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=146</guid>
		<description><![CDATA[Der erste Schritt zu der eigenen App ist ein neuer Android Projekt. Dieser Beitrag zeigt, wie dies unter Eclipse zu erledigen ist.]]></description>
			<content:encoded><![CDATA[<p>Der erste Schritt zu der eigenen App ist ein neuer Android Projekt. Dieser Beitrag zeigt, wie dies unter Eclipse zu erledigen ist.</p>

<a href='http://blog.webducer.de/2011/09/android-neues-projekt-anlegen/new-android-project/' title='New Android Project'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/New-Android-Project-150x150.png" class="attachment-thumbnail" alt="New Android Project" title="New Android Project" /></a>
<a href='http://blog.webducer.de/2011/09/android-neues-projekt-anlegen/project-wizzard-1/' title='Project Wizzard 1'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/Project-Wizzard-1-150x150.png" class="attachment-thumbnail" alt="Project Wizzard 1" title="Project Wizzard 1" /></a>
<a href='http://blog.webducer.de/2011/09/android-neues-projekt-anlegen/project-wizzard-2/' title='Project Wizzard 2'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/Project-Wizzard-2-150x150.png" class="attachment-thumbnail" alt="Project Wizzard 2" title="Project Wizzard 2" /></a>
<a href='http://blog.webducer.de/2011/09/android-neues-projekt-anlegen/project-wizzard-3/' title='Project Wizzard 3'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/Project-Wizzard-3-150x150.png" class="attachment-thumbnail" alt="Project Wizzard 3" title="Project Wizzard 3" /></a>

<p>Neues Android-Projekt wird über das Menü „<strong><code>File</code></strong>“ → „<strong><code>New</code></strong>“ → „<strong><code>Android Project</code></strong>“ angelegt (siehe Bild). Sollte dieser Menüpunkt nicht sichtbar sein, gehen Sie auf „<strong><code>Others</code></strong>“ und wählen Sie dann im folgenden Dialog „<strong><code>Android Project</code></strong>“.</p>
<p>Im folgenden Assistenten müssen folgende Angaben gemacht werden (siehe Bilder):</p>
<ul>
<li>Project name: Projektname ohne Sonderzeichen (z.B.: <strong><code>MeineApp</code></strong>)</li>
<li>Build Target: Compiler-Version, mit der die App kompiliert wird (z.B.: 8 für Android 2.2 Geräte)</li>
<li>Application name: Bezeichnung der App, so wie diese im Menü des Smartphones erscheinen soll (z.B.: <strong><code>Meine Erste App</code></strong>)</li>
<li>Package name: Hierarchische Bezeichnung des Java-Packages. Oft als umgekehrte URL angegeben (z.B.:  <strong><code>de.meinedomein.appname</code></strong>)</li>
<li>Min SDK version: minimale Anforderungen an das Gerät (z.B.: 4 für Android 1.6)</li>
</ul>
<p>Für komplexere Apps ist es empfehlenswert zur App auch TestUnits zu schreiben, um bei neueren Versionen die Funktionalität automatisiert testen zu können. Das kann im nachfolgenden Dialog mit erledigt (siehe Bild) oder später dem Projekt hinzugefügt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2011/09/android-neues-projekt-anlegen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android: Eclipse installieren und einrichten</title>
		<link>http://blog.webducer.de/2011/09/android-eclipse-installieren-und-einrichten/</link>
		<comments>http://blog.webducer.de/2011/09/android-eclipse-installieren-und-einrichten/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 19:16:28 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Einrichten]]></category>
		<category><![CDATA[Einstieg]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=148</guid>
		<description><![CDATA[Für die Android-Programmierung bietet sich sehr gut die Entwicklungsumgebung Eclipse mit den Android Development Tools von Google an. In diesem Beitrag beschreibe ich die Installation von beiden, um mit der Android-Programmierung anschließend sofort loslegen zu können. Installation von Eclipse Eclipse Classic ab Version 3.5 herunterladen (www.eclipse.org/downloads/). Die heruntergeladene Datei in einen Ordner entpacken (z.B.: C:\Entwicklung\Eclipse [...]]]></description>
			<content:encoded><![CDATA[<p>Für die Android-Programmierung bietet sich sehr gut die Entwicklungsumgebung Eclipse mit den Android Development Tools von Google an. In diesem Beitrag beschreibe ich die Installation von beiden, um mit der Android-Programmierung anschließend sofort loslegen zu können.</p>

<a href='http://blog.webducer.de/2011/09/android-eclipse-installieren-und-einrichten/install-new-software/' title='Install New Software'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/Install-New-Software-150x150.png" class="attachment-thumbnail" alt="Install New Software" title="Install New Software" /></a>
<a href='http://blog.webducer.de/2011/09/android-eclipse-installieren-und-einrichten/adt-2/' title='ADT'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/ADT1-150x150.png" class="attachment-thumbnail" alt="ADT" title="ADT" /></a>
<a href='http://blog.webducer.de/2011/09/android-eclipse-installieren-und-einrichten/adt-url-2/' title='ADT URL'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/ADT-URL1-150x150.png" class="attachment-thumbnail" alt="ADT URL" title="ADT URL" /></a>
<a href='http://blog.webducer.de/2011/09/android-eclipse-installieren-und-einrichten/preferences-2/' title='Preferences'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/Preferences1-150x150.png" class="attachment-thumbnail" alt="Preferences" title="Preferences" /></a>
<a href='http://blog.webducer.de/2011/09/android-eclipse-installieren-und-einrichten/android-sdk-download/' title='Android SDK Download'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2012/01/Android-SDK-Download-150x150.png" class="attachment-thumbnail" alt="Android SDK Download" title="Android SDK Download" /></a>
<a href='http://blog.webducer.de/2011/09/android-eclipse-installieren-und-einrichten/avd-device-2/' title='AVD Device'><img width="150" height="150" src="http://blog.webducer.de/wp-content/uploads/2011/09/AVD-Device1-150x150.png" class="attachment-thumbnail" alt="AVD Device" title="AVD Device" /></a>

<h2>Installation von Eclipse</h2>
<ol>
<li>Eclipse Classic ab Version 3.5 herunterladen (<a title="Downloadseite des Eclipse Projektes" href="http://www.eclipse.org/downloads/" target="_blank">www.eclipse.org/downloads/</a>).</li>
<li>Die heruntergeladene Datei in einen Ordner entpacken (z.B.: <code>C:\Entwicklung\Eclipse</code> unter Windows, oder <code>/Users/Shared/Entwicklung/Eclipse</code> unter Mac OS X).</li>
<li>Eclipse starten und das Standard-Workplace (z.B.: <code>C:\Entwicklung\Android</code> unter Windows oder <code>/Users/Shared/Entwicklung/Android</code> unter Mac OS X) vergeben.</li>
</ol>
<h2>Installation von Android Development Tools (ADT)</h2>
<ol>
<li>Android SDK für das gewünschte Betriebssystem herunterladen (<a title="Downloadseite von Android SDK" href="http://developer.android.com/sdk/index.html" target="_blank">http://developer.android.com/sdk/index.html</a>).</li>
<li>Die heruntergeladene Datei in einen Ordner entpacken (z.B.: <code>C:\Entwicklung\AndroidSDK</code> unter Windows oder <code>/Users/Shared/Entwicklung/AndroidSDK</code> unter Mac OS X).</li>
<li>Eclipse starten und zu <strong><code>Help → Install New Software</code></strong> gehen.</li>
<li>Bei „<strong><code>Work with:</code></strong>“ auf „<strong><code>Add...</code></strong>“ klicken, um neues Software-Repository hinzuzufügen (siehe Bild).</li>
<li>Namen frei vergeben und als „Location“ <code>https://dl-ssl.google.com/android/eclipse/</code> eingeben.</li>
<li><strong>OK </strong>klicken.</li>
<li>Developer Tools als zu installierende Komponenten auswählen (es dauert einige Zeit, bis die Repository eingelesen wird).</li>
<li>Die Installation mit „<strong><code>Next</code></strong>“ → „<strong><code>Next</code></strong>“ → „<strong><code>Accept</code></strong>“ und „<strong><code>Finish</code></strong>“ abschließen.</li>
<li>Eclipse neu starten.</li>
<li>Gehen Sie zu Preferences (unter Winsdows über <strong><code>Window → Preferences,</code></strong> unter Mac OS X über <strong><code>Eclipse → Prefenrences</code></strong> zu erreichen.</li>
<li>Gehen Sie zum Punkt „<strong><code>Android</code></strong>“ und tragen Sie da den Speicherort von Android-SDK ein (nach dem Vorschlag wäre es unter Windows der Ordner C:\Entwicklung\AndroidSDK und unter Mac OS X /Users/Shared/Entwicklung/AndroidSDK).</li>
<li>Nun gehen Sie zu „<strong><code>Window</code></strong>“ → „<strong><code>Android-SDK Manager</code></strong>“ und installieren Sie die benötigten (z.B.: Android 1.6 und Android 2.2) oder alle SDK-Versionen.</li>
<li>Nach dem Neustart von Eclipse gehen Sie wieder zu „<strong><code>Window</code></strong>“ → „<strong><code>AVD Manager</code></strong>“.</li>
<li>Legen Sie mit „<code><strong>New</strong></code>“ die virtuellen Android-Geräte, für die Sie entwickeln möchten (z.B.: ein Android 2.2 Gerät mit WXGA Auflösung [800x480] und 2GB SD-Karte). Sie können auch mehrere virtuelle Geräte anlegen und beim Start eines Android-Projektes dann eins davon auswählen.</li>
<li>Damit sind alle Vorbereitungen für die Android-Programmierung getroffen.</li>
</ol>
<h2>Update</h2>
<ul>
<li>22. Januar 2012: Anpassungen an ADT Revision 16</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2011/09/android-eclipse-installieren-und-einrichten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Erfahrungen mit Windows 7 auf einem Netbook (ASUS EeePC 1000H)</title>
		<link>http://blog.webducer.de/2010/06/erfahrungen-mit-windows-7-auf-einem-netbook-asus-eeepc-1000h/</link>
		<comments>http://blog.webducer.de/2010/06/erfahrungen-mit-windows-7-auf-einem-netbook-asus-eeepc-1000h/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 10:31:41 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[EeePC]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[ASUS]]></category>
		<category><![CDATA[Erfahrung]]></category>
		<category><![CDATA[Netbook]]></category>
		<category><![CDATA[W7]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows XP]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=59</guid>
		<description><![CDATA[Nach über einem halben Jahr des Einsatzes von Windows 7 auf meinem EeePC kann ich nur eine positive Bilanz ziehen. Installation Vor der Windows 7 Installation sollte der ASUS Empfehlung nach, zuerst das aktuelle Update für BIOS installiert werden (momentan Version 2204). Die Installation von Windows 7 auf einem Netbook gestaltet sich endlich sehr einfach [...]]]></description>
			<content:encoded><![CDATA[<p>Nach über einem halben Jahr des Einsatzes von Windows 7 auf meinem EeePC kann ich nur eine positive Bilanz ziehen.</p>
<h2>Installation</h2>
<p>Vor der Windows 7 Installation sollte der ASUS Empfehlung nach, zuerst das aktuelle Update für BIOS installiert werden (momentan Version 2204).</p>
<p>Die Installation von Windows 7 auf einem Netbook gestaltet sich endlich sehr einfach und bedarf kein DVD-Laufwerk mehr, wie es bei XP oder Vista der Fall war. Microsoft liefert hierfür ein Tool namens &#8220;<a title="Windows 7 USB/DVD Download Tool" href="http://emea.microsoftstore.com/DE/de-DE/Hilfe/USB-DVD-Downloadtool-fur-Windows-7" target="_blank">Windows 7 USB/DVD Download Tool</a>&#8220;, mit dem eine ISO-Datei von Wndows 7 direkt auf ein USB-Stick transferiert und dieses bootbar gemacht wird. Das konnte ich auf dem damals noch installierten Windows XP auf dem Netbook ohne Weiteres durchführen. Das einzige Problem stellt sich wahrscheinlich für die meisten, das &#8220;Beschaffen&#8221; eines ISO-Abbildes von Windows 7. Diejenigen, die einen Vertrag mit Microsoft haben (z.B. Action Pack), können die ISO direkt herunterladen. Wenn man Windows 7 bei Microsoft und einigen Partnern in der digitalen Version bestellt, bekommt man auch ein ISO-Abbild zu Download angeboten. Alle anderen müssen, wohl oder übel, auf einem Rechner mit DVD-Laufwerk eine ISO-Datei von der Original-Windows 7 DVD erstellen (z.B. mit Nero oder <a title="InfraRecorder" href="http://infrarecorder.org/" target="_blank">InfraRecorder</a> unter Windows oder <a title="Burn" href="http://burn-osx.sourceforge.net/Pages/English/home.html" target="_blank">Burn</a> unter MacOS X).</p>
<p>Um vom USB-Stick zu installieren, muss beim ASUS EeePC 1000H beim Start des Netbooks die &#8220;ESC&#8221;-Taste gedrückt werden. Dann erscheint ein Menü zur Auswahl des Boot-Laufwerkes (Festplatte, SD-Karte, falls eingesteckt, externes DVD-Laufwerk, falls angeschlossen und USB-Stick). Die weitere Windows 7 Installation verläuft, als ob man Windows 7 von der DVD installieren würde.</p>
<p>Nach der Installation wurden die komplette Hardware ,ohne zusätzliche Treiber, direkt erkannt und das Netbook war soforteinsatzbereit. ASUS liefert aber auch direkt Windows 7 Treiber.</p>
<h2>Windows 7 Vorteile gegenüber Windows XP</h2>
<h3>Aufwachen</h3>
<p>Windows 7 scheint im Alltag flotter zu arbeiten, als Windows XP auf demselben Gerät es tat. Das gilt insbesondere für den von mir oft eingesetzten Bereitschaftsmodus (Suspend to RAM). Das Netbook wacht in der Regel (es gibt nur selten Ausnahmen) in weniger als 5 Sekunden auf. Bis ich mich neu eingeloggt habe (1-2 Sekunden), ist auch das WLAN wieder da. Unter Windows XP musste ich zum Teil über 15 Sekunden nach dem Anmelden auf eine neue Verbindung zum WLAN warten.</p>
<p>In über 6 Monaten Einsatz ist das Gerät kein einziges Mal abgestürzt. Und das Gerät läuft oft über eine Woche ohne Herunterfahren (nur Bereitschaft, wenn dieser mal nicht benötigt wird).</p>
<h3>Akku</h3>
<p>Der Akku hält erfreulicherweise genauso lange/kurz, wie auch unter Windows XP. Mit WLAN und ausgeschalteten Bluetooth hält dieser bei ständigem im Internet surfen und Last.fm hören ca. 3,5 Stunden durch. Die theoretischen 7 Stunden hielt das Netbook auch unter Windows XP nie durch. Am Anfang waren es knapp 5,5 &#8211; 6 Stunden, dann pendelte sich der Akku aber auf ca. 3,5 &#8211; 4 Stunden.</p>
<h3>Internet</h3>
<p>Im Internet bin ich mit Firefox und Opera unterwegs. Es unterstützen aber mittlerweile alle Browser. Es geht um den Vollbild-Modus. Bei IE, Firefox, Opera, Chrome wechselt man zu und von diesem Modus durch Drücken der &#8220;F11&#8243;-Taste. Mittlerweile surfe ich nur in diesem Modus.</p>
<p>Bei Chrome und Opera muss man leider den Vollbild-Modus verlassen, um eine neue Adresse einzugeben. Bei Firefox und IE reicht es mit der Maus nach oben zu gehen. Dann erscheint die Adressleiste und man kann die neue Adresse eingeben.</p>
<h2>Windows 7 Einschränkungen</h2>
<h3>Arbeitsspeicher</h3>
<p>Den 1GB RAM merkt man bei Windows 7 eher schneller als unter Windows XP. Wenn man Firefox mit 3-4 Tabs startet (ca. 250MB verbrauch), dazu noch OpenOffice auf hat (ca. 150MB) und iTunes startet, ist Schluss mit lustig. RAM ist voll und es macht kein Spaß mehr mit dem Gerät zu arbeiten. Meine nächste Anschaffung werden wohl 2GB RAM für mein Netbook sein :-)</p>
<h3>Auflösung</h3>
<p>Eine weitere, ab und zu sehr hinderlicher, Einschränkung ist die Auflösung. Unter Windows XP konnte man die Auflösung auch höher drehen, als das Bildschirm es eigentlich könnte (1024&#215;768). Das geht mit den ASUS Treibern leider nicht mehr. Man kann zwar auf 800&#215;600 herunter schalten, aber nicht höher, als die native Auflösung des Netbooks. Bei Programmen, die eine Auflösung von mehr als 1024&#215;600 verlangen gibt es dann nur zwei Auswege:</p>
<ol>
<li>Anschließen eines externen Bildschirms, das eine höhere Auflösung hat,</li>
<li>oder Installation eines alternativen Grafiktreibers (findet man in einigen EeePC Foren).</li>
</ol>
<p>Ich habe mich für die erste Variante entschieden, da ich erstens nicht so viele Programme habe, die das verlangen, und zweitens ich bereits einen externen Bildschirm habe, denn ich dafür einsetzen kann.</p>
<p>Als weitere Maßnahme habe ich die Startleiste recht angeordnet, sodass mir die 600 Pixel Höhe auch wirklich zur Verfügung stehen.</p>
<h3>Langsames Aufwachen</h3>
<p>Es passiert sehr selten, aber ab und zu schon, dass das Netbook über 30 Sekunden zum Aufwachen braucht. Dann ist dieser aber ganz normal weiter benutzbar. In den über 6 Monaten täglichen Einsatzes passierte es noch kein einziges Mal, dass das Netbook gar nicht mehr aufwachte oder mit einem Blue Screen sich verabschiedete.</p>
<p>Nur wenn man das RAM ausreizt und das Betriebssystem zum Cachen auf die Festplatte gezwungen wird, ist es ab und zu schneller den Rechner hart auszuschalten (langes Drücken auf den Ausschaltknopf) und neu zu starten, als zu warten, bis die notwendigen Befehle (Programme beenden und Neustarten) vom Betriebssystem umgesetzt werden. Mit der Zeit kennt man aber die Grenzen des 1GB sehr gut und vermeidet solche &#8220;Ausrutscher&#8221;.</p>
<h3>Treiber</h3>
<p>ASUS schein momentan noch Probleme mit zumindest einem Treiber zu haben. Nach der Installation von &#8220;ASUS Instant Key Utility&#8221; wird bei mir beim Start von Windows immer die Meldung gezeigt, dass der Touchpad Treiber nicht gefunden werden kann. Es sind allerdings alle bei ASUS verfügbare (auch für den Touchpad) Treiber installiert. Entweder ist hier das Utility, oder der Treiber defekt. Und es ist kein Update in Sicht.</p>
<h2>Fazit</h2>
<p>Im Ganzen bin ich sehr mit Windows 7 auf meinem Netbook zufrieden. 2GB RAM sind zwar zu empfehlen, man kann aber auch mit 1GB RAM relativ gut damit arbeiten, wenn man ein paar Vorsichtsmaßnahmen trifft (nur wenige Programme parallel laufen lassen).</p>
<p>Wer eine freie Windows 7 Lizenz noch hat, würde ich zum Umstieg von Windows XP auf Windows 7 raten, besonders da die Installation mittlerweile ohne Probleme auch von einem USB-Stick klappt.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2010/06/erfahrungen-mit-windows-7-auf-einem-netbook-asus-eeepc-1000h/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mehrere gleichnamige Zertifikate unter Thunderbird nutzen</title>
		<link>http://blog.webducer.de/2010/02/mehrere-gleichnamige-zertifikate-unter-thunderbird-nutzen/</link>
		<comments>http://blog.webducer.de/2010/02/mehrere-gleichnamige-zertifikate-unter-thunderbird-nutzen/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 21:50:52 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[certificate]]></category>
		<category><![CDATA[digital]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[Thunderbird]]></category>
		<category><![CDATA[trustcenter]]></category>
		<category><![CDATA[Zertifikat]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=81</guid>
		<description><![CDATA[Heute bin ich mit einem Problem gestoßen. Ich habe mir für meine zwei Haupt-Email-Adressen Zertifikate bei trustcenter.de bestellt.  Naturgemäß lauten beide auf meinen Namen. Theoretisch sollte es damit auch keine Probleme geben, da beide ja auf unterschiedliche Email-Adressen ausgestellt sind. Auf dem Mac unter Mail gab es auch keine Probleme. Beide Zertifikate wurden problemlos importiert [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_84" class="wp-caption alignleft" style="width: 310px"><a href="http://blog.webducer.de/wp-content/uploads/2010/02/Thunderbird1.png"><img class="size-medium wp-image-84" title="Zertifikatübersicht" src="http://blog.webducer.de/wp-content/uploads/2010/02/Thunderbird1-300x194.png" alt="Zertifikatübersicht" width="300" height="194" /></a><p class="wp-caption-text">Zertifikatübersicht</p></div>
<p>Heute bin ich mit einem Problem gestoßen. Ich habe mir für meine zwei Haupt-Email-Adressen Zertifikate bei trustcenter.de bestellt.  Naturgemäß lauten beide auf meinen Namen. Theoretisch sollte es damit auch keine Probleme geben, da beide ja auf unterschiedliche Email-Adressen ausgestellt sind.</p>
<p>Auf dem Mac unter Mail gab es auch keine Probleme. Beide Zertifikate wurden problemlos importiert und konnten zum Signieren und Verschlüsseln benutzt werden.</p>
<h1>Problem</h1>
<div id="attachment_85" class="wp-caption alignright" style="width: 310px"><a href="http://blog.webducer.de/wp-content/uploads/2010/02/Thunderbird2.png"><img class="size-medium wp-image-85" title="Zertifikatzuordnung" src="http://blog.webducer.de/wp-content/uploads/2010/02/Thunderbird2-300x137.png" alt="Zertifikatzuordnung" width="300" height="137" /></a><p class="wp-caption-text">Zertifikatzuordnung</p></div>
<p>Auf dem EeePC bin ich vor Kurzem von Windows Live-Mail auf Thunderbird 3.0 umgestiegen. Der Import verlief auch ohne Probleme und es wurden beide Zertifikate in der Übersicht angezeigt. Das Problem taucht auf, wenn man versucht die Zertifikate den einzelnen Email-Adressen zuzuweisen. In der Drop-Down-Liste erscheint nur ein einziges Zertifikat statt der beiden importierten.</p>
<p>Einzeln importiert funktionieren diese problemlos. Zusammen importiert, wird nur ein Zertifikat angezeigt.</p>
<p>Nach langer Recherche konnte die Ursache in der Bildung der Drop-Down-Liste von Thunderbird festgestellt werden. Zur Bildung der Liste werden bei Thunderbird nur Vor- und Nachnahme benutzt (CN), aber nicht die erweiterten Felder des Zertifikates. Viele andere Zertifikathersteller schreiben in die CN noch weitere Daten, sodass das beschriebene Problem meines Wissens nur bei trustcenter.de auftritt. Die Auszeichnung, wie trustcenter.de dies tut, entsprich der Empfehlung des Zertifikatstandards.</p>
<h1>Lösung</h1>
<div id="attachment_87" class="wp-caption alignleft" style="width: 310px"><a href="http://blog.webducer.de/wp-content/uploads/2010/02/Thunderbird3.png"><img class="size-medium wp-image-87" title="Allgeminer Name" src="http://blog.webducer.de/wp-content/uploads/2010/02/Thunderbird3-300x253.png" alt="Allgeminer Name" width="300" height="253" /></a><p class="wp-caption-text">Allgeminer Name</p></div>
<p>Um das Problem bei Thunderbird und trustcenter.de zu umschiffen, habe ich eins von meinen Zertifikaten gesperrt und ein neues beantragt. Dieses Mal aber in dem Feld Vorname nicht nur meinen Vornamen eingegeben, sondern &#8220;Herr &#8230;&#8221;.</p>
<p>Nach dem neuen Import hat Thunderbird nun beide Zertifikate richtig aufgelistet und ich konnte diese den jeweiligen Email-Adressen zuordnen.</p>
<div id="attachment_86" class="wp-caption alignright" style="width: 310px"><a href="http://blog.webducer.de/wp-content/uploads/2010/02/Thunderbird4.png"><img class="size-medium wp-image-86 " title="Alternativer Name" src="http://blog.webducer.de/wp-content/uploads/2010/02/Thunderbird4-300x93.png" alt="Alternativer Name" width="300" height="93" /></a><p class="wp-caption-text">Alternativer Name</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2010/02/mehrere-gleichnamige-zertifikate-unter-thunderbird-nutzen/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Umstellung des Benutzerverzeichnisses &#8220;/Users&#8221; auf eine andere Partition unter Mac OS X</title>
		<link>http://blog.webducer.de/2010/02/umstellung-des-benutzerverzeichnisses-mac-os-x/</link>
		<comments>http://blog.webducer.de/2010/02/umstellung-des-benutzerverzeichnisses-mac-os-x/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 23:19:48 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Benutzer]]></category>
		<category><![CDATA[Benutzerverzeichnis]]></category>
		<category><![CDATA[Folder]]></category>
		<category><![CDATA[MAc]]></category>
		<category><![CDATA[move]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[User]]></category>
		<category><![CDATA[verschieben]]></category>
		<category><![CDATA[Verzeichnis]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=66</guid>
		<description><![CDATA[Es gibt mehrere Möglichkeiten diese Aufgabe zu lösen. Ich stelle hier zwei Wege, wie man entweder das Benutzer-Verzeichnis eines Benutzers verschiebt, oder den kompletten Benutzer-Ordner umlenkt (gilt auch für allen danach neu angelegte Benutzer). 1. Benutzer-Verzeichnis eines Benutzers verschieben. Melden Sie sich am besten als ein anderer Benutzer, als der, den Sie &#8220;umziehen&#8221; möchten. Öffne [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt mehrere Möglichkeiten diese Aufgabe zu lösen. Ich stelle hier zwei Wege, wie man entweder das Benutzer-Verzeichnis eines Benutzers verschiebt, oder den kompletten Benutzer-Ordner umlenkt (gilt auch für allen danach neu angelegte Benutzer).</p>
<h2>1. Benutzer-Verzeichnis eines Benutzers verschieben.</h2>
<div id="attachment_67" class="wp-caption alignleft" style="width: 160px"><a href="http://blog.webducer.de/wp-content/uploads/2010/01/Benutzer.png"><img class="size-thumbnail wp-image-67 " title="Systemeinstellungen -&gt; Benutzer" src="http://blog.webducer.de/wp-content/uploads/2010/01/Benutzer-150x150.png" alt="Systemeinstellungen -&gt; Benutzer" width="150" height="150" /></a><p class="wp-caption-text">Bild 1: Systemeinstellungen: Benutzer</p></div>
<p>Melden Sie sich am besten als ein anderer Benutzer, als der, den Sie <em>&#8220;umziehen&#8221;</em> möchten.</p>
<p>Öffne Sie die Systemeinstellungen und gehen Sie auf das Punkt Benutzer (siehe Bild 1). Unter Benutzer schalten Sie zuerst die Änderungsfunktion frei (das geschlossene Schloss unten links anklicken und mit Administratorrechten freigeben). Nun können Sie unter den Benutzer auswählen, dessen Benutzerordner Sie verschieben möchten. Klicken Sie auf diesen mit der rechten Maustaste (Kontextmenü) oder &#8220;Ctrl +  linke Maustaste&#8221;. Im Kontextmenü den Punkt &#8220;Erweiterte Optionen&#8221; auswählen. Es gibt ja nur diesen Kontextmenü-Eintrag :-) (siehe Bild 2).</p>
<div id="attachment_68" class="wp-caption alignright" style="width: 160px"><a href="http://blog.webducer.de/wp-content/uploads/2010/01/Erweiterte-Optionen.png"><img class="size-thumbnail wp-image-68" title="Erweiterte Optionen" src="http://blog.webducer.de/wp-content/uploads/2010/01/Erweiterte-Optionen-150x150.png" alt="Erweiterte Optionen" width="150" height="150" /></a><p class="wp-caption-text">Bild 2: Erweiterte Optionen</p></div>
<p>Im neuen Unterfenster kann unter anderem auch der Benutzerordner neu festgelegt werden (siehe Bild 3).</p>
<div id="attachment_69" class="wp-caption alignleft" style="width: 160px"><a href="http://blog.webducer.de/wp-content/uploads/2010/01/Ordner-ändern.png"><img class="size-thumbnail wp-image-69" title="Ordner ändern" src="http://blog.webducer.de/wp-content/uploads/2010/01/Ordner-ändern-150x150.png" alt="Ordner ändern" width="150" height="150" /></a><p class="wp-caption-text">Bild 3: Ordner ändern</p></div>
<p>Der Zielordner muss auf dabei bereits vorhanden sein.</p>
<p>Diese Methode hat einen entscheidenden Nachteil. Für jeden neu angelegten Benutzer muss die Prozedur wiederholt werden. Das ist zwar im häuslichen Bereich bei 2-3 Benutzern vertretbar, bei mehr Benutzern empfehle ich aber die zweite Methode: &#8220;Umlenken des gesamten /Users Ordners&#8221;.</p>
<h2>2. Umlenken des gesamten /Users Ordners</h2>
<p>Für diese Methode müssen wir uns des Terminals bemühen, da die Umlenkung des /User-Ordners durch einen so genannten <a title="Symbolischer Link (Wikipedia)" href="http://de.wikipedia.org/wiki/Symbolischer_Link">symbolischen Link</a> geschehen wird.</p>
<p>Als Erstes meldet man sich als Administrator an. Nach der Anmeldung sollten keine Programme im Hintergrund laufen (Mail usw.), da sonst das Löschen nicht richtig funktioniert (/Users wird sofort wieder neu angelegt). Das einzige Programm, das laufen soll, ist ein Terminalfenster.</p>
<p>Im zweiten Schritt wird das /Users-Verzeichnis auf die Zielpartition kopiert. Entweder über das Terminal oder auch mit dem Finder.</p>
<pre># sudo cp -Rp /Users /Volumes/NeuePartition/Users</pre>
<p>Als Nächstes muss das &#8220;alte&#8221; /Users-Verzeichnis gelöscht werden. Das erledigt man auch am besten im Terminal-Fenster.</p>
<pre># sudo rm -R /Users</pre>
<p>Im letzten Schritt legt man das Symbolische Link an, damit das Verzeichnis /Users auf den Ordner auf der anderen Partition zeigt.</p>
<pre># sudo ln -s /Volumes/NeuePartition/Users/ /Users</pre>
<p>Jetzt nur noch abmelden und neu anmelden. Alle Benutzer liegen nun auch der anderen Partition, auch neu angelegte.</p>
<p>Wer auf Nummer sicher gehen will, sollte diese Operationen entweder von einer Installation auf einer externen HDD starten oder von der Boot-DVD (Terminalfenster aufrufen, bevor die Installation anfängt). Dann sägt man sprichwörtlich nicht an dem Ast, auf dem man gerade sitzt.</p>
<p>In diesem Fall muss <strong>/Users</strong> durch <strong>/Volumes/SystempartitionName/Users</strong> ersetzt werden.</p>
<p>Auf demselben Weg kann auf Wunsch auch das Programm-Verzeichnis auf eine andere Partition &#8220;verschoben&#8221; werden.</p>
<p>Nach der Neuinstallation des Systems muss man nur den symbolischen Link neu setzten und alle Benutzer (incl. aller deren Einstellungen) sind wieder da.</p>
<p>Ich hoffe dieser Beitrag hat einigen geholfen, das Mac OS X noch ein wenig komfortabler zu machen.</p>
<p><span style="color: #ff6600;"><strong>WARNUNG:</strong> Das Arbeiten im Terminal mit administrativen Rechten erfolgt auf eigene Gefahr. Jeder, der sich auch das Terminal begibt, sollte wissen, was er mit dem System mach, da es hier keinen doppelten Boden und keine Sicherheitsabfragen gibt. Ein SuperUser darf eben <strong>ALLES</strong> machen, ohne Nachfragen.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2010/02/umstellung-des-benutzerverzeichnisses-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Update von Windows XP auf SP3 unter Snow Leopard (Bootcamp 3.0)</title>
		<link>http://blog.webducer.de/2009/10/update-von-windows-xp-auf-sp3-unter-snow-leopard-bootcamp-3-0/</link>
		<comments>http://blog.webducer.de/2009/10/update-von-windows-xp-auf-sp3-unter-snow-leopard-bootcamp-3-0/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 10:14:54 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Bootcamp]]></category>
		<category><![CDATA[SP3]]></category>
		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=46</guid>
		<description><![CDATA[Die Neuerung, die Snow Leopard in Verbindung mit Bootcamp mit sich bringt, ist dass man nun auf die OS X Laufwerke unter Windows lesend zugreifen kann. Dieses an sich sehr schönes Feature bringt aber zugleich auch Probleme bei einer Neuinstallation von Windows XP (&#60; SP3). Wenn man versucht SP3 nach der Installation der Treiber zu [...]]]></description>
			<content:encoded><![CDATA[<p>Die Neuerung, die Snow Leopard in Verbindung mit Bootcamp mit sich bringt, ist dass man nun auf die OS X Laufwerke unter Windows lesend zugreifen kann. Dieses an sich sehr schönes Feature bringt aber zugleich auch Probleme bei einer Neuinstallation von Windows XP (&lt; SP3). Wenn man versucht SP3 nach der Installation der Treiber zu installieren, sieht Windows auch die Mac-Partitionen, die richtigerweise vor der Windows-Partition sitzen. SP3 versucht aber auf die erste Partition einige Dateien zu schreiben. Diese ist aber Mac OS X Systempartition, auf die Windows nur Schreibzugriff hat. Die Installation bricht immer wieder ab.</p>
<p>Die Lösung liegt darin, das Feature, die Mac-Partitionen zu sehen, temporär auszuschalten. Dazu muss im Ordner:</p>
<pre>c:\Windows\System32\Drivers</pre>
<p>In diesem Ordner muss die Datei <strong>AppleMNT.sys</strong> umbenannt werden. Nach dem Neustrat von Windows, werden die Mac-Partitionen nicht mehr erkannt und man kann den SP3 wie gewohnt installieren. Nach der Installation kann die Datei AppleMNT wieder zurück umbenannt werden.</p>
<p>Die Problematik ist auch bei <a title="Bootcamp 3.0 und Windows XP SP3" href="http://support.apple.com/kb/HT3841?viewlocale=de_DE">Apple Support</a> gut erklärt.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2009/10/update-von-windows-xp-auf-sp3-unter-snow-leopard-bootcamp-3-0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bootcam Installation mit mehr als 2 Partitionen</title>
		<link>http://blog.webducer.de/2009/10/bootcam-installation-mit-mehr-als-2-partitionen/</link>
		<comments>http://blog.webducer.de/2009/10/bootcam-installation-mit-mehr-als-2-partitionen/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 09:59:50 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Bootcamp]]></category>
		<category><![CDATA[EFI]]></category>
		<category><![CDATA[Parallelinstalltion]]></category>
		<category><![CDATA[Partitionen]]></category>
		<category><![CDATA[rEFI]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=43</guid>
		<description><![CDATA[Nach dem Kauf eines Mac mini und deren Aufrüstung auf 4GB RAM und 500GB HDD (7200 U/min) stand nun die Frage, wie man am besten die lieb gewonnenen Strategiespiele auch unter dieser Maschine spielen soll. Der Grafikchip (nVidia GeForce 9400) ist dafür eigentlich völlig ausreichend. Den ersten Test machte ich mit Windows XP unter VMWare [...]]]></description>
			<content:encoded><![CDATA[<p>Nach dem Kauf eines Mac mini und deren Aufrüstung auf 4GB RAM und 500GB HDD (7200 U/min) stand nun die Frage, wie man am besten die lieb gewonnenen Strategiespiele auch unter dieser Maschine spielen soll. Der Grafikchip (nVidia GeForce 9400) ist dafür eigentlich völlig ausreichend. Den ersten Test machte ich mit Windows XP unter VMWare Fusion und Anno 1701. Das Ergebnis war leider nicht zufriedenstellend.</p>
<p>Die zweite Möglichkeit liegt bei Bootcamp. Den Assistenten gestartet, der meldet aber:</p>
<blockquote><p>&#8220;<strong>Das Startvolume kann weder partitioniert noch in einer Einzelpartition wiederhergestellt werden.</strong><br />
Für die Installation von Windows muss das Startvolume entweder ein als Mac OS-Extended (Journaled) formatiertes Einzelvolume oder bereits durch den Boot Camp-Assistenten partitioniert sein.&#8221;</p></blockquote>
<p>Nach einiger Suche im Internet war die Ursache relativ schnell gefunden. Bootcamp funktioniert nur, wenn auf der Festplatte max. 2 Partitionen vorliegen (eine davon Windows Partition). Bei meiner Installation habe ich allerdings noch eine dritte Partition, auf der das <a title="Umstellung des Benutzerverzeichnisses “/Users” auf eine andere Partition unter Mac OS X" href="http://blog.webducer.de/2010/02/umstellung-des-benutzerverzeichnisses-mac-os-x/" target="_self">User-Verzeichnis</a> liegt. Somit war der Assistent nutzlos.</p>
<p>Weitere Recherchen ergaben dann 3 mögliche Vorgehensweisen:</p>
<ol>
<li>Benutzung von nur 2 Partitionen (Mac + Windows).</li>
<li>Herumbasteln an der boot.ini, damit Windows von der richtigen Partition startet.</li>
<li>Ein alternativer Bootmanager.</li>
</ol>
<p>Da ich in Zukunft flexibel bleiben möchte (Parallelinstallation von weiteren Betriebssystemen &#8211; Windows 7, Ubuntu usw.), habe ich mich für die 3. Variante entschieden.</p>
<p>Nach einiger Suche bin ich auf den Bootloader <a title="rEFIt Projekt-Homepage" href="http://refit.sourceforge.net/">rEFIt</a> gestossen. Nach der einfachen Installation des rEFIt Bootloaders auf die Mac OS X Systempartition habe ich noch rEFIt aktiviert, damit dieser <strong>immer</strong> erscheint.</p>
<p>Dafür musste ich unter Terminal folgendes ausführen:</p>
<pre>cd /efi/refit/
enable-always.sh</pre>
<p><img class="size-medium wp-image-52 alignright" title="rEFIt Bootmenü" src="http://blog.webducer.de/wp-content/uploads/2009/10/01010103-300x225.jpg" alt="rEFIt Bootmenü" width="300" height="225" />Nach dem Anlegen der 3. Partition für Windows (mit Festplattendienstprogramm) startete ich die Windows-Installation von der CD. Nach dem ersten Neustrat während der Installation tauchte schon Windows als Startoption in rEFIt. Unter Windows wurde ganz normal dann alles installiert, incl. der Treiber von der Mac OS X DVD.</p>
<p>Das einzige Problem, dass bei der Installation von Windows XP bei mir auftrat, war die Installation von SP 3 mit den Treibern von Mac OS X 10.6 (Snow Leopard). Wie das funktioniert, beschreibe ich im <a title="XP SP3 Installation unter Bootcamp 3.0" href="http://blog.webducer.de/2009/10/update-von-windows-xp-auf-sp3-unter-snow-leopard-bootcamp-3-0/">nächsten Beitrag</a>.</p>
<p>Auf der rEFIt Projekt-Homepage steht, dass es manchmal bei Mac OS X Updates zu Störungen kommen kann. Dann muss rEFIt einfach neu installiert werden. Beim Update von 10.6 auf 10.6.1 traten keine Komplikationen auf.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2009/10/bootcam-installation-mit-mehr-als-2-partitionen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Duden Korrektor für OpenOffice unter Linux (Ubuntu)</title>
		<link>http://blog.webducer.de/2009/08/duden-korrektor-fur-openoffice-unter-linux-ubuntu/</link>
		<comments>http://blog.webducer.de/2009/08/duden-korrektor-fur-openoffice-unter-linux-ubuntu/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 05:14:01 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[EeePC]]></category>
		<category><![CDATA[OpenOffice.org]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=22</guid>
		<description><![CDATA[So wie wahrscheinlich viele, leide auch ich unter der mangelhaften Rechtschreibkorrektur. Viele Fehler werden entweder gar nicht erkannt, oder falsch als Fehler gekennzeichnet. Insbesondere bei vielen zusammengeschriebenen Wörtern versagt die Prüfung komplett. Um diesen Mangel zu beseitigen, benutzte ich schon seit Jahren unter Windows den Duden Korrektor (seit Version 3.5) für OpenOffice. Unter Windows klappt [...]]]></description>
			<content:encoded><![CDATA[<p>So wie wahrscheinlich viele, leide auch ich unter der mangelhaften Rechtschreibkorrektur. Viele Fehler werden entweder gar nicht erkannt, oder falsch als Fehler gekennzeichnet. Insbesondere bei vielen zusammengeschriebenen Wörtern versagt die Prüfung komplett.</p>
<p>Um diesen Mangel zu beseitigen, benutzte ich schon seit Jahren unter Windows den Duden Korrektor (seit Version 3.5) für OpenOffice. Unter Windows klappt so weit alles gut, da der XP bis dahin praktisch nur in 32-Bit-Version lief.</p>
<p>Seit über 3 Jahren nutze ich vermehrt Linux, als primäres Betriebssystem, und seit einem Jahr noch Mac OS X 10.5 (Leopard) für meine Frau. Also wurde kurzerhand der Duden Korrektor (Version 5.0 mittlerweile) auch auf diese Systeme installiert, theoretisch. Bei Mac gibt es keine Probleme. Die Erweiterung läuft auf 64-Bit.</p>
<p>Unter Linux ist ein 64-Bit-System dagegen eine absolute Bremse. Es funktioniert einfach nicht. Auch konnte ich bis jetzt keine Workarounds finden, die eine funktionierende Umgebung erzeugen. Unter 32-Bit läuft es dagegen ohne Probleme (EeePC 1000H).</p>
<p>Die Anfragen an Duden Verlag direkt ergaben nichts. Es kommt nur die Antwort, das 64-Bit-Systeme nicht unterstützt werden, auch nicht in der Zukunft. Mittlerweile steht sogar in den Systemanforderungen (Version 6.0), dass Windows XP und Vista nur in den 32-Bit-Versionen unterstützt werden. Bei Linux wird merkwürdigerweise keine solche Ausnahme angegeben.</p>
<p>P.S.: Ein schneller Test der Version 5.0 mit OpenOffice 3.1 unter Windows 7 x64 RC1 zeigte, dass auch hier keine Inkompatibilitäten auftreten.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2009/08/duden-korrektor-fur-openoffice-unter-linux-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testbericht: SanDisk Ultra Backup 32GB</title>
		<link>http://blog.webducer.de/2009/08/testbericht-sandisk-ultra-backup-32gb/</link>
		<comments>http://blog.webducer.de/2009/08/testbericht-sandisk-ultra-backup-32gb/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 05:28:42 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Technik]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[Tecchannel]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[USB Stick]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=20</guid>
		<description><![CDATA[Vor ein paar Wochen wurde in tecchannel.de nachgefragt, ob jemand einen 32 GB großen USB-Stick mit Backup Funktionen testen könnte. Ich habe mich da kurzerhand angemeldet und nach kurzer Zeit den USB-Stick auch zum Testen geliefert bekommen. Meinen Testbericht können Sie bei tecchannel.de nachlesen: SanDisk Ulta Backup 32GB Mittlerweile stehen auch Testberichte von 3 weiteren [...]]]></description>
			<content:encoded><![CDATA[<p>Vor ein paar Wochen wurde in tecchannel.de nachgefragt, ob jemand einen 32 GB großen USB-Stick mit Backup Funktionen testen könnte. Ich habe mich da kurzerhand angemeldet und nach kurzer Zeit den USB-Stick auch zum Testen geliefert bekommen. Meinen Testbericht können Sie bei tecchannel.de nachlesen:</p>
<p><a title="Lesertest: SanDisk Ultra Backup 32GB" href="http://www.teccommunity.de/articles/article/443/sandisk_ultra_backup_32gb/detail" target="_self">SanDisk Ulta Backup 32GB</a></p>
<p>Mittlerweile stehen auch Testberichte von 3 weiteren Testern zur Verfügung:</p>
<p><a title="Erfahrungsbericht des SanDisk Ultra Backup 32GB als Festplattenersatz" href="http://www.teccommunity.de/articles/article/445/erfahrungsbericht_des_sandisk_ultra_backup_32gb_als_festplattenersatz/detail" target="_blank">Erfahrungsbericht des SanDisk Ultra Backup 32GB als Festplattenersatz (von Legionen)</a></p>
<p><a title="TecChannel Lesertest: SanDisk Ultra Backup 32 GByte" href="http://www.teccommunity.de/articles/article/448/tecchannel_lesertest_sandisk_ultra_backup_32_gbyte/detail" target="_blank">TecChannel Lesertest: SanDisk Ultra Backup 32 GByte (von Linuxgirl)</a></p>
<p><a title="Lesertest 32 Gbyte SanDisk Ultra Backup USB-Stick (Test)" href="http://www.teccommunity.de/articles/article/464/lesertest_32_gbyte_sandisk_ultra_backup_usb_stick/detail" target="_blank">Lesertest 32 Gbyte SanDisk Ultra Backup USB-Stick (Test)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2009/08/testbericht-sandisk-ultra-backup-32gb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erste Erfahrungen mit TYPOlight unter IIS und MySQL</title>
		<link>http://blog.webducer.de/2009/08/erste-erfahrungen-mit-typolight-unter-iis-und-mysql/</link>
		<comments>http://blog.webducer.de/2009/08/erste-erfahrungen-mit-typolight-unter-iis-und-mysql/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 08:39:24 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[Contao Open Source CMS]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[CMS]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=12</guid>
		<description><![CDATA[TYPOlight mit XAMPP oder bei einem Shared Host Provider aufzusetzen, ist vergleichsweise einfach und unproblematisch. Vor kurzen wurde mir aber eine Aufgabe gestellt, die nicht mehr so einfach zu lösen war. TYPOlight sollte auf einem Windows 2003 Server laufen, und möglichst mit Windows Bordmitteln. Das hieß nichts anderes, als dass CMS unter IIS 6.0 und [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Offizielle Homepage von TYPOlight" href="http://www.typolight.de" target="_blank">TYPOlight</a> mit <a title="Offizielle Homepage der XAMPP Entwickler" href="http://www.apachefriends.org" target="_blank">XAMPP</a> oder bei einem Shared Host Provider aufzusetzen, ist vergleichsweise einfach und unproblematisch.</p>
<p>Vor kurzen wurde mir aber eine Aufgabe gestellt, die nicht mehr so einfach zu lösen war. TYPOlight sollte auf einem Windows 2003 Server laufen, und möglichst mit Windows Bordmitteln. Das hieß nichts anderes, als dass CMS unter IIS 6.0 und MS SQL 2005 laufen sollte.</p>
<p>Die Verwendung der MS SQL Datenbank scheiterte nach mehreren Versuchen komplett. Da fehlt einfach noch die Erfahrung in der Community. Es ist zwar ein Abstraktionslayer für die MS Datenbank vorhanden, aber bis jetzt gibt es keine positiven Rückmeldungen, dass TYPOlight wirklich damit läuft, und vor allem, wie man dieses einrichtet. Vielleich finde ich noch in meiner Freizeit ein wenig Zeit und probiere es zum Laufen zu bekommen.</p>
<p>Als erstes Testsystem benutzte ich Windows XP mit IIS 5.0.  Grundsätzlich läuft TYPOlight auch unter IIS 5.0, allerdings mit mehr Einschränkungen, als unter IIS 6.0. Auf beiden Windowsumgebungen wurde PHP 5.3 und MySQL 5.0 verwendet (Version 5.1 hat einen defekten Windows Installer, der unter Server 2003 die Installation versagt).</p>
<p>Der einzige Unterschied zwischen IIS 5.0 und IIS 6.0, den ich feststellen konnte, war, dass es unter IIS 5.0 keine Suchmaschinenfreundliche URLs möglich sind. Man muss immer &#8220;Keine Seitenaliase verwenden&#8221; aktivieren, damit die Seiten überhaupt aufgerufen werden können. Somit ergeben sich aber folgende URLs:<br />
www.domain.de/index.php?id=123</p>
<p>Unter IIS 6.0 können suchmaschinenfreundliche URLs verwendet werden, so wie diese standardmäßig von TYPOlight generiert werden (ohne Zuhilfenahme von HTACCESS).<br />
www.domain.de/index.php/alias.html</p>
<p>Weiterhin müssen für den TYPOlight Ordner (oder nur tl_files und tmp Ordner) die Rechte für den IIS-Benutzer (Vollzugriff) gesetzt werden, damit TYPOlight in diese Ordner auch schreiben kann. Wer die Dateien über die integrierte Verwaltung hoch laden will, wird hier auf <a title=" Datei-Upload unter IIS in Verbindung mit PHP" href="http://blog.webducer.de/2009/08/datei-upload-unter-iis-in-verbindung-mit-php/" target="_self">mein anderes Eintrag</a> verwiesen, damit die PHP-Temp-Einstellung richtig funktioniert.</p>
<p>Solange man MySQL als Datenbank einsetzt, spricht eigentlich nichts dagegen den IIS als Webserver zu nutzen. Microsoft ist ja immer mehr bemüht auch PHP direkt in Visual Studio und andere Produkte einzubinden, sodass eine bessere Zusammenarbeit zu erwarten ist. Für eine leichte Installation ist sowohl FastCGI als auch PHP 5.2 über den Microsoft Web-Installer verfügbar (www.microsoft.com/web). Die einzige Schwierigkeit, die noch bleibt, ist die Unterstützung von .htaccess Dateien, die man von Apache her kennt und die von vielen PHP-Projekten für die Generierung freundlicher URLs verwendet werden. Es gibt zwar schon ISAPI Erweiterungen die htaccess nachbilden, aber zumindest bei TYPOlight ist es noch nicht ausreichend, um 100% Funktionalität und Stabilität zu gewährleisten.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2009/08/erste-erfahrungen-mit-typolight-unter-iis-und-mysql/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Datei-Upload unter IIS in Verbindung mit PHP</title>
		<link>http://blog.webducer.de/2009/08/datei-upload-unter-iis-in-verbindung-mit-php/</link>
		<comments>http://blog.webducer.de/2009/08/datei-upload-unter-iis-in-verbindung-mit-php/#comments</comments>
		<pubDate>Sat, 01 Aug 2009 18:48:00 +0000</pubDate>
		<dc:creator>WebDucer</dc:creator>
				<category><![CDATA[IIS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Contao Open Source CMS]]></category>
		<category><![CDATA[Datei]]></category>
		<category><![CDATA[Upload]]></category>

		<guid isPermaLink="false">http://blog.webducer.de/?p=5</guid>
		<description><![CDATA[Nach den ersten Gehversuchen mit TYPOlight unter Windows läuft das System nun stabil und flott (mit ein paar Einschränkungen). Nach dem der Kundenbereich erstellt wurde, sollte auch eine Uploadmöglichkeit her. Also schnell ein Formular mit Upload-Möglichkeit angelegt und getestet. Theoretisch funktioniert, aber nicht so wirklich. Im Uploadordner landen merkwürdigerweise nur 0kB große Dateien. Zugriffsberechtigungen überprüft, [...]]]></description>
			<content:encoded><![CDATA[<p>Nach den ersten Gehversuchen mit TYPOlight unter Windows läuft das System nun stabil und flott (mit ein paar Einschränkungen). Nach dem der Kundenbereich erstellt wurde, sollte auch eine Uploadmöglichkeit her. Also schnell ein Formular mit Upload-Möglichkeit angelegt und getestet. Theoretisch funktioniert, aber nicht so wirklich. Im Uploadordner landen merkwürdigerweise nur 0kB große Dateien.</p>
<p>Zugriffsberechtigungen überprüft, stimmt alles, also blieb nichts anderes übrig, als zu googln. Der erste Hinweis kam, dass in der PHP.ini ein Temp-Ordner für Uploads definiert ist, auf den der IIS-Benutzer aber keine Schreibrechte hat (c:\Windows\Temp). Also in der PHP.ini den Ordner auf c:\Upload-Temp geändert und dem IIS-Benutzer auf diesen Ordner volle Rechte vergeben. Zwecklos. Es landen weiterhin 0kB Dateien im Zierordner. Auch ein Neustart brachte keine Besserung.</p>
<p>Nach mehreren Stunden Recherche im Internet kam der entscheidende Hinweis, dass der Temp Ordner unbedingt innerhalb des Root-Verzeichnisses der aufrufenden Homepage liegen muss, sonst kann IIS in Verbindung mit PHP keine temporären Daten in diesen schreiben.</p>
<p>Die Änderung der PHP.ini-Datei führte nun zum gewünschten Ergebnis. Der Upload funktioniert nun einwandfrei.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webducer.de/2009/08/datei-upload-unter-iis-in-verbindung-mit-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

