<?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>LocalDev &#187; Tipps &amp; Tricks</title>
	<atom:link href="http://localdev.de/category/tipps-tricks/feed/" rel="self" type="application/rss+xml" />
	<link>http://localdev.de</link>
	<description>Web, Desktop &#38; Mobile Development</description>
	<lastBuildDate>Mon, 12 Jul 2010 15:39:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>String, Float, Int und Object in Array casten</title>
		<link>http://localdev.de/2010/05/string-float-int-und-object-in-array-casten/</link>
		<comments>http://localdev.de/2010/05/string-float-int-und-object-in-array-casten/#comments</comments>
		<pubDate>Mon, 17 May 2010 21:00:35 +0000</pubDate>
		<dc:creator>Fabian Martin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[dump]]></category>
		<category><![CDATA[Float]]></category>
		<category><![CDATA[Integer]]></category>
		<category><![CDATA[Object]]></category>
		<category><![CDATA[Objekt]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[Variable]]></category>

		<guid isPermaLink="false">http://localdev.de/?p=773</guid>
		<description><![CDATA[Schon gewusst das man, in PHP, Variablen ganz einfach in ein Array wandeln kann? String, Float, Integer Der Wert wird zur ersten Position im Array $strTest = &#34;Test&#34;; $arrTest = (array)$strTest; var_dump($arrTest); /** * array(1) { * [0]=&#62; * string(4) &#34;Test&#34; * } */ $intTest = 123; $arrTest = (array)$intTest; var_dump($arrTest); /** * array(1) { [...]]]></description>
			<content:encoded><![CDATA[<p>Schon gewusst das man, in PHP, Variablen ganz einfach in ein Array wandeln kann?</p>
<p><strong>String, Float, Integer</strong><br />
Der Wert wird zur ersten Position im Array</p>
<pre class="brush: php;">
$strTest = &quot;Test&quot;;
$arrTest = (array)$strTest;
var_dump($arrTest);

/**
 * array(1) {
 *  [0]=&gt;
 *  string(4) &quot;Test&quot;
 * }
 */

$intTest = 123;
$arrTest = (array)$intTest;
var_dump($arrTest);

/**
 * array(1) {
 *  [0]=&gt;
 *  int(123)
 * }
 */

$fltTest = 1.23;
$arrTest = (array)$fltTest;
var_dump($arrTest);

/**
 * array(1) {
 *  [0]=&gt;
 *  float(1.23)
 * }
 */
</pre>
<p><b>Objekte</b><br />
Die Eigenschaften des Objekts finden sich im Array als Werte wieder. Je nach Sichtbarkeit, hat der Schlüssel einen Prefix, oder auch nicht.</p>
<pre class="brush: php;">
class TestClass
{
	public $intPublicVar = 1;

	protected $intPortectedVar = 2;

	private $intPrivateVar = 3;
}

$objTest = new TestClass();
$arrTest = (array)$objTest;
var_dump($arrTest);

/**
 * array(3) {
 *  [&quot;intPublicVar&quot;]=&gt;
 *  int(1)
 *  [&quot;*intPortectedVar&quot;]=&gt;
 *  int(2)
 *  [&quot;TestClassintPrivateVar&quot;]=&gt;
 *  int(3)
 * }
 */
</pre>
]]></content:encoded>
			<wfw:commentRss>http://localdev.de/2010/05/string-float-int-und-object-in-array-casten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Python: Verzeichnis rekursiv leeren</title>
		<link>http://localdev.de/2010/05/python-verzeichnis-rekursiv-leeren/</link>
		<comments>http://localdev.de/2010/05/python-verzeichnis-rekursiv-leeren/#comments</comments>
		<pubDate>Mon, 03 May 2010 20:56:23 +0000</pubDate>
		<dc:creator>Fabian Martin</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[rekursiv]]></category>
		<category><![CDATA[rmdir]]></category>
		<category><![CDATA[unlink]]></category>
		<category><![CDATA[Verzeichnis]]></category>

		<guid isPermaLink="false">http://localdev.de/?p=758</guid>
		<description><![CDATA[Mit dem folgenden Code Schnipsel kann man in Python ein Verzeichnis rekursiv leeren. Abhängig davon ob es sich um eine Datei, ein Verzeichnis oder eine Verknüpfung handelt, wird die entsprechende Methode zum entfernen aufgerufen. for pathentry in os.walk('/path/to/dir', False): for dir in pathentry[1]: path = os.path.join(pathentry[0], dir) if os.path.islink(path): os.unlink(path) else: os.rmdir(path) for file in [...]]]></description>
			<content:encoded><![CDATA[<p>Mit dem folgenden Code Schnipsel kann man in Python ein Verzeichnis rekursiv leeren. Abhängig davon ob es sich um eine Datei, ein Verzeichnis oder eine Verknüpfung handelt, wird die entsprechende Methode zum entfernen aufgerufen.</p>
<pre class="brush: python;">
for pathentry in os.walk('/path/to/dir', False):
	for dir in pathentry[1]:
		path = os.path.join(pathentry[0], dir)
		if os.path.islink(path):
			os.unlink(path)
		else:
			os.rmdir(path)

	for file in pathentry[2]:
		path = os.path.join(pathentry[0], file)
		os.unlink(path)
</pre>
<p>Möchte man das Hauptverzeichnis anschließend auch noch löschen, reicht ein simples</p>
<pre class="brush: python; light: true;">
os.rmdir('/path/to/dir');
</pre>
]]></content:encoded>
			<wfw:commentRss>http://localdev.de/2010/05/python-verzeichnis-rekursiv-leeren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript: Prüfen ob Variable definiert ist</title>
		<link>http://localdev.de/2010/03/javascript-prufen-ob-variable-definiert-ist/</link>
		<comments>http://localdev.de/2010/03/javascript-prufen-ob-variable-definiert-ist/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 11:46:19 +0000</pubDate>
		<dc:creator>Fabian Martin</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[define]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[undefined]]></category>
		<category><![CDATA[Variable]]></category>

		<guid isPermaLink="false">http://localdev.de/?p=657</guid>
		<description><![CDATA[Bei Javascript, wie auch in anderen Sprachen, weiß man mitunter nie, ob eine Variable definiert wurde. Um dies zu überprüfen, nutze ich meist folgenden Code Schnipsel. if (typeof(VARIABLE) == &#34;undefined&#34;) { alert(&#34;VARIABLE ist nicht gesetzt&#34;); } Die Klammern bei typeof kann man weglassen. Ich persönlich habe es mir jedoch angewöhnt sie zu setzen, da hierdurch [...]]]></description>
			<content:encoded><![CDATA[<p>Bei Javascript, wie auch in anderen Sprachen, weiß man mitunter nie, ob eine Variable definiert wurde. Um dies zu überprüfen, nutze ich meist folgenden Code Schnipsel.</p>
<pre class="brush: jscript;">
if (typeof(VARIABLE) == &quot;undefined&quot;)
{
    alert(&quot;VARIABLE ist nicht gesetzt&quot;);
}
</pre>
<p>Die Klammern bei <em>typeof</em> kann man weglassen. Ich persönlich habe es mir jedoch angewöhnt sie zu setzen, da hierdurch die Zusammengehörigkeit der Werte besser zu erkennen ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://localdev.de/2010/03/javascript-prufen-ob-variable-definiert-ist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery: Zwischenspeichern von Ajax Anfragen verhindern</title>
		<link>http://localdev.de/2010/03/jquery-zwischenspeichern-von-ajax-anfragen-verhindern/</link>
		<comments>http://localdev.de/2010/03/jquery-zwischenspeichern-von-ajax-anfragen-verhindern/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 11:42:27 +0000</pubDate>
		<dc:creator>Fabian Martin</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://localdev.de/?p=622</guid>
		<description><![CDATA[Nichts ist schlimmer, als eine Ajax Anfrage die vom Browser zwischengespeichert wird. Das Ergebnis sollte sich ändern, aber im Browser bleibt alles gleich. Um dies zu verhindern, kann man die URL von Hand mit einem Unique String erweitern oder man setzt in jQuery die folgende Option. $(function() { $.ajaxSetup( { cache: false }); }); An [...]]]></description>
			<content:encoded><![CDATA[<p>Nichts ist schlimmer, als eine Ajax Anfrage die vom Browser zwischengespeichert wird. Das Ergebnis sollte sich ändern, aber im Browser bleibt alles gleich. Um dies zu verhindern, kann man die URL von Hand mit einem Unique String erweitern oder man setzt in jQuery die folgende Option.</p>
<pre class="brush: jscript;">
$(function()
{
    $.ajaxSetup(
    {
        cache: false
    });
});
</pre>
<p>An die aufgerufene URL wird nun ein Timestamp gehangen, durch den der Browser die Seite nicht mehr aus dem Zwischenspeicher holt.</p>
]]></content:encoded>
			<wfw:commentRss>http://localdev.de/2010/03/jquery-zwischenspeichern-von-ajax-anfragen-verhindern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 7 und Server 2008 R2 auf XenServer 5 installieren</title>
		<link>http://localdev.de/2010/03/windows-7-und-server-2008-r2-auf-xenserver-5-installieren/</link>
		<comments>http://localdev.de/2010/03/windows-7-und-server-2008-r2-auf-xenserver-5-installieren/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 11:27:05 +0000</pubDate>
		<dc:creator>Fabian Martin</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[VM]]></category>
		<category><![CDATA[Windows 6.1]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>
		<category><![CDATA[xe]]></category>
		<category><![CDATA[XenServer]]></category>

		<guid isPermaLink="false">http://localdev.de/?p=608</guid>
		<description><![CDATA[Als Softwareentwickler ist man darauf angewiesen, seine Software auf möglichst vielen Betriebssystemen zu testen. Um das zu machen setze ich gern Virtuelle Maschinen auf Basis des XenServers ein. Die Kombination aus XenServer und Windows 7 bzw. Server 2008 R2 klappt aber nicht auf Anhieb. Das Installationsprogramm stoppt während des Starts. Um Windows dennoch zu installieren, [...]]]></description>
			<content:encoded><![CDATA[<p>Als Softwareentwickler ist man darauf angewiesen, seine Software auf möglichst vielen Betriebssystemen zu testen. Um das zu machen setze ich gern Virtuelle Maschinen auf Basis des XenServers ein.</p>
<p>Die Kombination aus XenServer und Windows 7 bzw. Server 2008 R2 klappt aber nicht auf Anhieb. Das Installationsprogramm stoppt während des Starts. Um Windows dennoch zu installieren, braucht man nur die folgende kleine Anleitung befolgen.</p>
<ul>
<li>Wählt bei Templates &#8220;other install media&#8221; aus</li>
<li>Folgt dem weiteren Prozess bis zum letzten Schritt</li>
<li>Entfernt, im letzten Schritt, das Häkchen bei &#8220;Start VM automatically&#8221;</li>
<li>Öffnet die Shell und ermittelt mit dem Befehl &#8220;xe vm-list&#8221; die UUID eurer VM</li>
<li>Ruft nun den folgenden Befehl auf &#8220;xe vm-param-set uuid=&lt;UUID&gt; platform:viridian=false&#8221;</li>
</ul>
<p>Ihr seid nun bereit eure neue Windows VM zu installieren.</p>

<div class="ngg-galleryoverview" id="ngg-gallery-2-608">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-10" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://localdev.de/wp-content/gallery/windows-6-1-xenserver/windows_install.png" title=" " class="thickbox" rel="set_2" >
								<img title="windows_install" alt="windows_install" src="http://localdev.de/wp-content/gallery/windows-6-1-xenserver/thumbs/thumbs_windows_install.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-3" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://localdev.de/wp-content/gallery/windows-6-1-xenserver/step-1.png" title=" " class="thickbox" rel="set_2" >
								<img title="step-1" alt="step-1" src="http://localdev.de/wp-content/gallery/windows-6-1-xenserver/thumbs/thumbs_step-1.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-9" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://localdev.de/wp-content/gallery/windows-6-1-xenserver/step-7.png" title=" " class="thickbox" rel="set_2" >
								<img title="step-7" alt="step-7" src="http://localdev.de/wp-content/gallery/windows-6-1-xenserver/thumbs/thumbs_step-7.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-2" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://localdev.de/wp-content/gallery/windows-6-1-xenserver/con2.png" title=" " class="thickbox" rel="set_2" >
								<img title="con2" alt="con2" src="http://localdev.de/wp-content/gallery/windows-6-1-xenserver/thumbs/thumbs_con2.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


]]></content:encoded>
			<wfw:commentRss>http://localdev.de/2010/03/windows-7-und-server-2008-r2-auf-xenserver-5-installieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sharepoint Server 2010 Beta auf Windows Server 2008 R2 installieren</title>
		<link>http://localdev.de/2010/03/sharepoint-server-2010-auf-windows-server-2008-r2-installieren-allowinsecuretransport/</link>
		<comments>http://localdev.de/2010/03/sharepoint-server-2010-auf-windows-server-2008-r2-installieren-allowinsecuretransport/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 12:39:34 +0000</pubDate>
		<dc:creator>Fabian Martin</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Beta]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://localdev.de/?p=585</guid>
		<description><![CDATA[Wer den Sharepoint Server 2010 auf einem Windows Server 2008 R2 installieren möchte, wird spätestens beim Konfigurations-Assistenten ein Problem bekommen. Beim achten Schritt meldet der Assistent, das eine Ausnahme vom Typ Microsoft.Office.Server.UserProfiles.UserProfileException aufgetreten ist und er das Attribut allowInsecureTransport nicht kennt. Der Assistent beendet sich und bittet um die Behebung des Problems. Microsoft bietet über [...]]]></description>
			<content:encoded><![CDATA[<p>Wer den Sharepoint Server 2010 auf einem Windows Server 2008 R2 installieren möchte, wird spätestens beim Konfigurations-Assistenten ein Problem bekommen.</p>
<p>Beim achten Schritt meldet der Assistent, das eine Ausnahme vom Typ <em>Microsoft.Office.Server.UserProfiles.UserProfileException</em> aufgetreten ist und er das Attribut <em>allowInsecureTransport</em> nicht kennt. Der Assistent beendet sich und bittet um die Behebung des Problems.</p>
<p>Microsoft bietet über Microsoft Connect einen entsprechenden Hotfix an, der das Problem behebt. Nach der Installation muss man den Assistenten über das Startmenü noch einmal starten.</p>
<ul>
<li><a href="http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=23806" target="_blank">Windows 7, Windows Server 2008 R2</a></li>
</ul>

<div class="ngg-galleryoverview" id="ngg-gallery-1-585">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-1" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://localdev.de/wp-content/gallery/sharepoint-2010-beta-fehler/install_fehler.png" title=" " class="thickbox" rel="set_1" >
								<img title="install_fehler" alt="install_fehler" src="http://localdev.de/wp-content/gallery/sharepoint-2010-beta-fehler/thumbs/thumbs_install_fehler.png" width="87" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


]]></content:encoded>
			<wfw:commentRss>http://localdev.de/2010/03/sharepoint-server-2010-auf-windows-server-2008-r2-installieren-allowinsecuretransport/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Getter und Setter mit PDT generieren</title>
		<link>http://localdev.de/2010/02/php-getter-und-setter-mit-pdt-generieren/</link>
		<comments>http://localdev.de/2010/02/php-getter-und-setter-mit-pdt-generieren/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 11:40:25 +0000</pubDate>
		<dc:creator>Fabian Martin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Getter]]></category>
		<category><![CDATA[Klassen]]></category>
		<category><![CDATA[Kostenlos]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[PDT]]></category>
		<category><![CDATA[Properties]]></category>
		<category><![CDATA[Setter]]></category>

		<guid isPermaLink="false">http://localdev.de/?p=518</guid>
		<description><![CDATA[Eine Möglichkeit, automatisch Getter und Setter mit PDT zu generieren, habe ich noch nicht gefunden. Mit dem unten genannten Code, könnt Ihr das Erstellen von Gettern und Settern mit PDT aber beschleunigen. Erstellt hierzu ein neues Code Template (Window -> Preferences -> PHP -> Editor -> Templates) und gebt ihm den Namen &#8216;get&#8217;. In das [...]]]></description>
			<content:encoded><![CDATA[<p>Eine Möglichkeit, automatisch Getter und Setter mit PDT zu generieren, habe ich noch nicht gefunden. Mit dem unten genannten Code, könnt Ihr das Erstellen von Gettern und Settern mit PDT aber beschleunigen.</p>
<p>Erstellt hierzu ein neues Code Template (<em>Window</em> -> <em>Preferences</em> -> <em>PHP</em> -> <em>Editor</em> -> <em>Templates</em>) und gebt ihm den Namen &#8216;get&#8217;. In das Feld Pattern, fügt ihr den unten gezeigten Code ein.</p>
<p>Um nun Getter und Setter zu generieren, müsst ihr nur noch &#8216;get&#8217; in euren Editor tippen und die Tastenkombination STRG+Leertaste drücken. Der Code sollte erscheinen und der Cursor in der ersten Variable blinken. Mit Tab könnt ihr zwischen den Werten springen.</p>
<pre class="brush: php;">
/**
* Legt ${field} fest
*
* @param ${type} ${dollar}${field}
* @return void
*/
public function set${funcName}(${dollar}${field})
{
	${dollar}this-&gt;${field} = ${dollar}${field};
}

/**
* Gibt ${field} zurück
*
* @return ${type}
*/
public function get${funcName}()
{
	return ${dollar}this-&gt;${field};
}
</pre>
<p>Das ganze geht natürlich auch mit statischen Werten:</p>
<pre class="brush: php;">
/**
* Legt ${field} fest
*
* @param ${type} ${dollar}${field}
* @return void
*/
public static function set${funcName}(${dollar}${field})
{
	self::${dollar}${field} = ${dollar}${field};
}

/**
* Gibt ${field} zurück
*
* @return ${type}
*/
public static function get${funcName}()
{
	return self::${dollar}${field};
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://localdev.de/2010/02/php-getter-und-setter-mit-pdt-generieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery: Prüfen ob ein Objekt versteckt ist</title>
		<link>http://localdev.de/2010/01/jquery-prufen-ob-ein-objekt-versteckt-ist/</link>
		<comments>http://localdev.de/2010/01/jquery-prufen-ob-ein-objekt-versteckt-ist/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 23:23:34 +0000</pubDate>
		<dc:creator>Fabian Martin</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://localdev.de/?p=493</guid>
		<description><![CDATA[if($(&#34;#myDivID&#34;).is(&#34;:hidden&#34;)) { // Element ist versteckt }]]></description>
			<content:encoded><![CDATA[<pre class="brush: jscript;">
if($(&quot;#myDivID&quot;).is(&quot;:hidden&quot;))
{
    // Element ist versteckt
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://localdev.de/2010/01/jquery-prufen-ob-ein-objekt-versteckt-ist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET: Mails über SMTP mit SMTP Auth versenden</title>
		<link>http://localdev.de/2010/01/asp-net-mails-uber-smtp-mit-smtp-auth-versenden/</link>
		<comments>http://localdev.de/2010/01/asp-net-mails-uber-smtp-mit-smtp-auth-versenden/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 07:28:58 +0000</pubDate>
		<dc:creator>Fabian Martin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[E-Mail]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[SMTP]]></category>
		<category><![CDATA[SMTP Auth]]></category>

		<guid isPermaLink="false">http://localdev.de/?p=383</guid>
		<description><![CDATA[Mit dem folgenden Code Schnipsel lassen sich E-Mails über einen SMTP Server versenden, der eine Anmeldung mittels SMTP Auth erwartet. MailMessage Message = new MailMessage(); // Benutzername u. Passwort NetworkCredential UserNamePass = new NetworkCredential(&#34;username@example.org&#34;, &#34;password&#34;); // SMTP Client erstellen SmtpClient Client = new SmtpClient() { DeliveryMethod = SmtpDeliveryMethod.Network, Host = &#34;mail.example.org&#34;, UseDefaultCredentials = false, Credentials [...]]]></description>
			<content:encoded><![CDATA[<p>Mit dem folgenden Code Schnipsel lassen sich E-Mails über einen SMTP Server versenden, der eine Anmeldung mittels SMTP Auth erwartet.</p>
<pre class="brush: csharp;">
MailMessage Message = new MailMessage();

// Benutzername u. Passwort
NetworkCredential UserNamePass = new NetworkCredential(&quot;username@example.org&quot;, &quot;password&quot;);

// SMTP Client erstellen
SmtpClient Client = new SmtpClient()
{
	DeliveryMethod = SmtpDeliveryMethod.Network,
	Host = &quot;mail.example.org&quot;,
	UseDefaultCredentials = false,
	Credentials = UserNamePass
};

// Mail versenden
Client.Send(Message);
</pre>
<p>Das <em>MailMessage</em> Objekt muss natürlich noch mit den wichtigsten Daten (Empfänger, Betreff, Nachricht etc.) gefüllt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://localdev.de/2010/01/asp-net-mails-uber-smtp-mit-smtp-auth-versenden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lighttpd 1.4: HTTP 417 Expectation Failed</title>
		<link>http://localdev.de/2010/01/lighttpd-1-4-http-417-expectation-failed/</link>
		<comments>http://localdev.de/2010/01/lighttpd-1-4-http-417-expectation-failed/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 14:22:40 +0000</pubDate>
		<dc:creator>Fabian Martin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipps & Tricks]]></category>
		<category><![CDATA[417]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[cURL]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[Header]]></category>
		<category><![CDATA[Lighttpd]]></category>

		<guid isPermaLink="false">http://localdev.de/?p=417</guid>
		<description><![CDATA[Versucht man mit einer cURL oder .NET Anwendung POST Daten an einen Lighttpd 1.4 Server zu senden, bekommt man die Meldung HTTP/1.1 417 Expectation Failed Dies liegt daran, das die Programme einen Expect: 100-continue Header senden, und als Antwort 100 (Continue) oder 417 Expectation Failed erwarten. Lighty kennt den Header jedoch nicht, und antwortet deswegen [...]]]></description>
			<content:encoded><![CDATA[<p>Versucht man mit einer cURL oder .NET Anwendung POST Daten an einen Lighttpd 1.4 Server zu senden, bekommt man die Meldung</p>
<pre class="brush: plain;">

HTTP/1.1 417 Expectation Failed
</pre>
<p>Dies liegt daran, das die Programme einen <em>Expect: 100-continue</em> Header senden, und als Antwort <em>100 (Continue)</em> oder <em>417 Expectation Failed</em> erwarten. Lighty kennt den Header jedoch nicht, und antwortet deswegen mit dem besagten <em>417 Expectation Failed</em>.</p>
<p>Der <em>Expect: 100-continue</em> Header soll verhindern, das Daten an den Server gesendet werden, die nicht benötigt werden. Erkennt der Server z.B. das er die Anfrage ablehnen muss, kann er dies dem Client mitteilen, noch bevor die POST Daten übermittelt wurden.</p>
<p>Wer dennoch POST Daten an Lighty senden möchte, kann die folgenden Paramter anpassen:</p>
<p><strong>.NET</strong></p>
<pre class="brush: csharp;">

System.Net.ServicePointManager.Expect100Continue = false;
</pre>
<p><strong>cURL unter PHP</strong></p>
<pre class="brush: php;">
curl_setopt($objCurl, CURLOPT_HTTPHEADER, array('Expect: '));
</pre>
<p><strong>cURL auf der Kommandozeile</strong></p>
<pre class="brush: bash;">
curl -v -H &quot;Expect: &quot; -F &quot;field=value&quot; http://example.com/upload.php
</pre>
<p>Alternativ aktualisiert man auf Lighttpd 1.5. Dieser kennt den <em>Expect: 100-continue</em> Header und beantwortet entsprechende Anfragen korrekt.</p>
<p>Browser senden übrigens keinen <em>Expect: 100-continue</em> Header.</p>
]]></content:encoded>
			<wfw:commentRss>http://localdev.de/2010/01/lighttpd-1-4-http-417-expectation-failed/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/

Minified using memcached
Page Caching using memcached
Database Caching 6/14 queries in 0.005 seconds using memcached

Served from: localdev.de @ 2010-07-29 21:53:54 -->