<?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>heig.de &#187; .tutorials</title>
	<atom:link href="http://heig.de/category/tutorials/feed/" rel="self" type="application/rss+xml" />
	<link>http://heig.de</link>
	<description>digital life by Gregor Kulikowski</description>
	<lastBuildDate>Mon, 26 Apr 2010 19:31:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ESXi: Virtuelle Thin-Provisioned Festplatten klonen</title>
		<link>http://heig.de/2010/04/esxi-virtuelle-thin-provisioned-festplatten-klonen/</link>
		<comments>http://heig.de/2010/04/esxi-virtuelle-thin-provisioned-festplatten-klonen/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 09:55:18 +0000</pubDate>
		<dc:creator>gk</dc:creator>
				<category><![CDATA[.software]]></category>
		<category><![CDATA[.tutorials]]></category>
		<category><![CDATA[vmware esxi thin provisioned hdd]]></category>

		<guid isPermaLink="false">http://heig.de/2010/04/esxi-virtuelle-thin-provisioned-festplatten-klonen/</guid>
		<description><![CDATA[ESXi CLI:

vmkfstools -i "source.vmdk" -d thin "destination.vmdk"

]]></description>
			<content:encoded><![CDATA[<p>ESXi CLI:<br />
<code><br />
vmkfstools -i "source.vmdk" -d thin "destination.vmdk"<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://heig.de/2010/04/esxi-virtuelle-thin-provisioned-festplatten-klonen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UPEK FingerPrint Reader: Password Bank für Firefox 3.5</title>
		<link>http://heig.de/2009/12/upek-fingerprint-reader-password-bank-fur-firefox-3-5/</link>
		<comments>http://heig.de/2009/12/upek-fingerprint-reader-password-bank-fur-firefox-3-5/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 09:59:51 +0000</pubDate>
		<dc:creator>gk</dc:creator>
				<category><![CDATA[.software]]></category>
		<category><![CDATA[.tutorials]]></category>
		<category><![CDATA[Fingerprint]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[UPEK]]></category>
		<category><![CDATA[Vista]]></category>

		<guid isPermaLink="false">http://heig.de/?p=254</guid>
		<description><![CDATA[So ein FingerPrint Reader im Notebook ist schon was feines, vorausgesetzt die Software von dem Ding läuft gut. In meinem Dell XPS sitzt ein Leser der Firma UPEK. Leider hat Dell weder Software mit 64Bit Unterstützung noch mit Firefox 3.5 Erweiterung im Angebot. Die von Dell zum Download angebotene uralt UPEK ProtectorSuite QL 5.6 ist [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-259" title="fingerprint" src="http://heig.de/wp-content/uploads/fingerprint1.jpg" alt="fingerprint" width="128" height="128" />So ein FingerPrint Reader im Notebook ist schon was feines, vorausgesetzt die Software von dem Ding läuft gut. In meinem Dell XPS sitzt ein Leser der Firma UPEK. Leider hat Dell weder Software mit 64Bit Unterstützung noch mit Firefox 3.5 Erweiterung im Angebot. Die von Dell zum Download angebotene uralt UPEK ProtectorSuite QL 5.6 ist mittlerweile überholt.</p>
<p>UPEK Vertreibt seine Software jedoch ausschließlich über OEMs. Da Dell keine aktuelle Version hat, habe ich einfach mal bei Lenovo geschaut. Und siehe da: UPEK ProtectorSuite QL 5.8 mit 64Bit Unterstützung:</p>
<p><span style="text-decoration: underline;">Windows Vista x64</span><br />
<a href="http://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles/fprx64_584_5476ww.exe"> http://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles/fprx64_584_5476ww.exe</a></p>
<p><span style="text-decoration: underline;">Windows Vista x86 und XP</span><br />
<a href="http://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles/fprx32_584_5476ww.exe">http://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles/fprx32_584_5476ww.exe</a></p>
<p>Eine Extension für Firefox 3.5, die mit der Protector Suite QL kommuniziert kann unter folgendem Link heruntergeladen werden:</p>
<p><a title="UPEk Package Download" href="http://files.upek.com/GetPackage.asp?Key=T3L211M1FJS1ORDL02KC3696DM4V21PI">http://files.upek.com/GetPackage.asp?Key=T3L211M1FJS1ORDL02KC3696DM4V21PI</a></p>
<p>Ich habe die Software auf einem Dell XPS1330 Notebook mit Vista x64 installiert und es funktioniert einwandfrei!</p>
]]></content:encoded>
			<wfw:commentRss>http://heig.de/2009/12/upek-fingerprint-reader-password-bank-fur-firefox-3-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>heig.de endlich mit gravatars</title>
		<link>http://heig.de/2009/11/heig-de-endlich-mit-gravatars/</link>
		<comments>http://heig.de/2009/11/heig-de-endlich-mit-gravatars/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 23:08:37 +0000</pubDate>
		<dc:creator>gk</dc:creator>
				<category><![CDATA[.tutorials]]></category>
		<category><![CDATA[.web]]></category>
		<category><![CDATA[gravatar]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://heig.de/?p=234</guid>
		<description><![CDATA[Endlich habe ich mal ein wenig zeit gefunden um mein Wordpress Theme Gravatar-fähig zu gestalten. Zwei Dinge mussten getan werden

Folgenden Codeschnipsel  in der comments.php hinzuefügt



&#60;?php if &#40;function_exists&#40;&#8216;get_avatar&#8217;&#41;&#41;: ?&#62;


&#60;?php echo get_avatar&#40;$comment, 48&#41;; ?&#62;


&#60;?php endif; ?&#62;




Das Stylesheet um die .avatar Klasse erweitert



.avatar&#123;


&#160; float: right;


&#160; margin: 3px 0 15px 10px;


&#160; border: 1px solid #333;


&#125;





That&#8217;s it! Die ausführliche Doku [...]]]></description>
			<content:encoded><![CDATA[<p>Endlich habe ich mal ein wenig zeit gefunden um mein Wordpress Theme Gravatar-fähig zu gestalten. Zwei Dinge mussten getan werden</p>
<ol>
<li>Folgenden Codeschnipsel  in der comments.php hinzuefügt
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/function_exists"><span class="kw3">function_exists</span></a><span class="br0">&#40;</span><span class="st0">&#8216;get_avatar&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>: <span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> get_avatar<span class="br0">&#40;</span><span class="re0">$comment</span>, <span class="nu0">48</span><span class="br0">&#41;</span>; <span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <span class="kw1">endif</span>; <span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
</li>
<li>Das Stylesheet um die .avatar Klasse erweitert
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re1">.avatar</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">float</span>: <span class="kw1">right</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">margin</span>: <span class="re3">3px</span> <span class="nu0">0</span> <span class="re3">15px</span> <span class="re3">10px</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">border</span>: <span class="re3">1px</span> <span class="kw2">solid</span> <span class="re0">#<span class="nu0">333</span></span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</li>
</ol>
<p>That&#8217;s it! Die ausführliche Doku zur Funktion get_avatar() ist <a title="get_avatar()" href="http://phpdoc.wordpress.org/trunk/WordPress/_wp-includes---pluggable.php.html#functionget_avatar" target="_blank">hier</a> nachzulesen.</p>
]]></content:encoded>
			<wfw:commentRss>http://heig.de/2009/11/heig-de-endlich-mit-gravatars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vista, Gruppenrichtlinien, Login-Skripte und Netzlaufwerke</title>
		<link>http://heig.de/2009/11/vista-gruppenrichtlinien-login-skripte-und-netzlaufwerke/</link>
		<comments>http://heig.de/2009/11/vista-gruppenrichtlinien-login-skripte-und-netzlaufwerke/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 22:26:59 +0000</pubDate>
		<dc:creator>gk</dc:creator>
				<category><![CDATA[.software]]></category>
		<category><![CDATA[.tutorials]]></category>
		<category><![CDATA[GPO]]></category>
		<category><![CDATA[Group Policy]]></category>
		<category><![CDATA[Login Script]]></category>
		<category><![CDATA[Netzlaufwerk]]></category>
		<category><![CDATA[Vista]]></category>

		<guid isPermaLink="false">http://heig.de/?p=225</guid>
		<description><![CDATA[Netzlaufwerke, die unter Windows Vista über ein Login-Skript, welches mit Hilfe einer Gruppenrichtlinie verteilt wurde, sind für nicht-administrative Benutzer unsichtbar. Dieses Verhalten liegt an der UAC von Vista...]]></description>
			<content:encoded><![CDATA[<p><a href="http://heig.de/wp-content/uploads/1257457412_Network-Driveoffline.png" rel="lightbox[225]"><img class="alignright size-full wp-image-226" title="1257457412_Network Drive(offline)" src="http://heig.de/wp-content/uploads/1257457412_Network-Driveoffline.png" alt="1257457412_Network Drive(offline)" width="128" height="128" /></a>Eigentlich bin ich kein Vista-Gegner, im Gegenteil. Ich finde es in vieler Hinsicht besser und schneller als XP &#8211; und trotzdem habe ich Vista heute verflucht!</p>
<p>Vista Rechner in einer Windows 2003 Domäne sind eine Qual &#8211; man findet immer wieder neue Hindernisse. Bei aktivierter UAC z.B. sind per Login-Script gemappte Netzlaufwerke für nicht-administrative Benutzer auf einem Vista Computer unsichtbar. Das Phänomen tritt jedoch lediglich bei Skripten auf, die über Gruppenrichtlinien verteilt werden. ..<span id="more-225"></span></p>
<p>Microsoft begründet dieses Verhalten wir folgt:</p>
<blockquote><p>UAC may prevent Group Policy logon scripts from appearing to work properly. For example, a domain environment contains a GPO that includes a logon script to map network drives. A nonadministrative user logs on to the domain from a Windows Vista computer. After Windows Vista loads the desktop, the nonadministrative user starts Windows Explorer. The user sees their mapped drives. Under the same environment, an administrative user logs on to the domain from a Windows Vista computer. After Windows Vista loads the desktop, the administrative user starts Windows Explorer. The user does not see their mapped drives.</p>
<p>When the administrative user logs on, Windows processes the logon scripts using the elevated token. The script actually works and maps the drive. However, Windows blocks the view of the mapped network drives because the desktop uses the limited token while the drives were mapped using the elevated token.</p></blockquote>
<p>(Quelle <a title="Deploying Group Policies under Windows Vista" href="http://technet.microsoft.com/en-us/library/cc766208%28WS.10%29.aspx" target="_self">http://technet.microsoft.com/en-us/library/cc766208%28WS.10%29.aspx</a>)</p>
<p>Kurz zusammengefasst: Die GPO wird in einer Sitzung mit erhöhten Rechten verarbeitet. Der Explorer-Prozess des Benutzers läuft in der Sitzung mit eingeschränkten Rechten und &#8217;sieht&#8217; die gemappten Laufwerke nicht.</p>
<p>Also falls es Probleme mit Netzlaufwerken auf Vista Rechenrn gibt, prüfen ob die Login-Skripte richtig ausgeführt werden und ggf die UAC ausschalten.</p>
<p>Kann die UAC aus Sicherheitsgründen nicht ausgeschaltet werden, so soll laut [<a title="UAC Problem with login scripts" href="http://help.lockergnome.com/vista/UAC-problem-login-scripts--ftopict31024.html" target="_blank">LINK</a>] auch folgender Registry-Wert das Problem beheben:</p>
<blockquote><p><span>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System<br />
EnableLinkedConnections =(dword)1 </span></p></blockquote>
<p><span>Ich hatte bislang noch keine Möglichkeit das zu testen, gescheige denn zu recherchieren was der Wert macht, werde es aber ASAP nachholen! </span></p>
<p><span>P.S.: In einer 2008 Domäne können Netzlaufwerke übrigens ohne Skript per GPO gemappt werden, dort tritt dieser Effekt nicht auf.<br />
</span></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 9px; width: 1px; height: 1px;">phänomen</div>
]]></content:encoded>
			<wfw:commentRss>http://heig.de/2009/11/vista-gruppenrichtlinien-login-skripte-und-netzlaufwerke/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>David.fx iPhone Client zu langsam?</title>
		<link>http://heig.de/2009/09/david-fx-iphone-client-zu-langsam/</link>
		<comments>http://heig.de/2009/09/david-fx-iphone-client-zu-langsam/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 19:27:28 +0000</pubDate>
		<dc:creator>gk</dc:creator>
				<category><![CDATA[.tutorials]]></category>
		<category><![CDATA[David.fk]]></category>
		<category><![CDATA[failed]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://heig.de/?p=209</guid>
		<description><![CDATA[Viel Beworben, hoch gelobt und trotzdem manchmal ein wenig träge: Der native David.fx-Client für das iPhone. Diese kostenlose App aus dem Hause Tobit verbindet das iPhone online mit dem David-Server in der Firma und ermöglicht den Zugriff auf RSS-Feeds, E-Mails, Kontakte, Kalender und sogar Faxe und Voice-Mail Nachrichten. Funktionell ist diese App kaum zu toppen [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="lightbox" href="http://heig.de/wp-content/uploads/tobit.jpg"><img class="alignright size-thumbnail wp-image-210" title="Tobit David.fx" src="http://heig.de/wp-content/uploads/tobit-150x150.jpg" alt="Tobit David.fx" width="150" height="150" /></a>Viel Beworben, hoch gelobt und trotzdem manchmal ein wenig träge: Der native David.fx-Client für das iPhone. Diese kostenlose App aus dem Hause Tobit verbindet das iPhone online mit dem David-Server in der Firma und ermöglicht den Zugriff auf RSS-Feeds, E-Mails, Kontakte, Kalender und sogar Faxe und Voice-Mail Nachrichten. Funktionell ist diese App kaum zu toppen und trotzdem stört etwas: Die Startzeit.</p>
<p>Im Auslieferungszustand braucht die App auf einem iPhone 3G je nach Verbindungsgeschwindigkeit bis zu 20 Sekunden zum starten. Jeder Admin sagt: Ist doch akzeptabel für einen online Zugriff, schließlich muss alles erst übertragen werden. Leider sieht das der Benutzer anders: 20 Sekunden sind zu lang um während eines Telefonates &#8220;mal eben&#8221; einen Termin zu finden. Natürlich kann man darüber streiten, aber ich kann die Beschwerden der Benutzer verstehen. Für &#8220;mal eben&#8221; 20 Sekunden zu lang.</p>
<p>Mit einigen einfachen Optimierungen lässt sich die Startzeit jedoch verkürzen. Die App braucht umso länger, je mehr Einträge aktualisiert werden müssen. Deswegen sollte man entweder den Ticker oder den Eingang automatisch aktualisieren lassen. Wird beides aktiviert, werden Daten redundant geladen und die App braucht länger. Wen ohnehin nur der Eingang interessiert kann den Ticker abschalten. Zudem empfiehlt es sich die Anzahl der zu aktualisierenden Einträge zu reduzieren. Bei deaktiviertem Ticker und 5 automatisch geladenen Mails verkürzt sich die Startseit auf ca 8 Sekunden. Entfernt man in der Konfiguration noch den zusätzlichen Port 81 kann man weitere 2 Sekunden einsparen.</p>
<p>So sind in meinen Augen 6 Sekunden Startzeit etwas alltagstauglicher als die anfänglichen 20 Sekunden, aber immer noch micht genug <img src='http://heig.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Kommentare mit weiteren Tipps sind herzlich willkommen!</p>
]]></content:encoded>
			<wfw:commentRss>http://heig.de/2009/09/david-fx-iphone-client-zu-langsam/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Die Wahrheit über relative Schriftgrößen</title>
		<link>http://heig.de/2009/09/die-wahrheit-uber-relative-schriftgrosen/</link>
		<comments>http://heig.de/2009/09/die-wahrheit-uber-relative-schriftgrosen/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 20:16:50 +0000</pubDate>
		<dc:creator>gk</dc:creator>
				<category><![CDATA[.tutorials]]></category>
		<category><![CDATA[.web]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[font]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[size]]></category>

		<guid isPermaLink="false">http://heig.de/?p=190</guid>
		<description><![CDATA[Usability und Barrierefreiheit werden im heutigen Web groß geschriben. Wer eine Website &#8220;usable&#8221; gestalten möchte kommt um relative Schriftgrößen nicht herum. In der Theorie ist dies ein sehr gutes Konzept, denn der User kann im Browser selbest bestimmen, in welcher Größe die Schrift dargestellt werden soll. In der Praxis jedoch, wird Fließtext oft mit 75% [...]]]></description>
			<content:encoded><![CDATA[<p>Usability und Barrierefreiheit werden im heutigen Web groß geschriben. Wer eine Website &#8220;usable&#8221; gestalten möchte kommt um relative Schriftgrößen nicht herum. In der Theorie ist dies ein sehr gutes Konzept, denn der User kann im Browser selbest bestimmen, in welcher Größe die Schrift dargestellt werden soll. In der Praxis jedoch, wird Fließtext oft mit 75% oder 80% definiert. Der <a title="dotfly blog" href="http://blog.dotfly.de/" target="_blank">dotfly blog</a> schildert im Artikel &#8220;<a title="Die Farce mit den relativen Schriftgrößen" href="http://blog.dotfly.de/artikel/die-farce-mit-den-relativen-schriftgroessen/" target="_blank">Die Farce mit den relativen Schriftgrößen</a>&#8220;, warum dieses Vorgehen genau das Gegenteil von &#8220;Usability&#8221; bewirkt. Ein wirklich lesenswerter Artikel für alle Web-Designer und solche die es werden wollen <img src='http://heig.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://heig.de/2009/09/die-wahrheit-uber-relative-schriftgrosen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Strato Managed Server &#8211; PHP generell mit PHP5?!</title>
		<link>http://heig.de/2009/07/strato-managed-server-php-generell-mit-php5/</link>
		<comments>http://heig.de/2009/07/strato-managed-server-php-generell-mit-php5/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 19:28:27 +0000</pubDate>
		<dc:creator>gk</dc:creator>
				<category><![CDATA[.tutorials]]></category>
		<category><![CDATA[.web]]></category>

		<guid isPermaLink="false">http://heig.de/?p=164</guid>
		<description><![CDATA[PHP5 als Default für *.php Dateien mit Hilfe von .htaccess. Folgenden Code zur .htaccess hinzufügen:
AddType application/x-httpd-php5 .php ]]></description>
			<content:encoded><![CDATA[<p>Eigentlich hatte ich die Hoffunung, dass man sich bei einem Managed Server nicht mehr um die Konfiguration des selbigen kümmern muss &#8211; tja falsch gedacht. Bei Strato werden *.php Dateien per default mit PHP4 ausgeführt und nicht wie benötigt mit PHP5 (warum eigentlich?)</p>
<p>Aber dafür ist ja die Hotline da, die macht das schon -  denkste! Die sind nur bis 20:00Uhr da und es war gerade 20:02Uhr als ich angerufen habe. Zum Glück bin ich nicht der Einzige, der auf einem Strato-Server *.php Dateien standardmäßig mit PHP5 ausführen will. Der .htaccess Befehl, den die  Jungs von <a href="http://www.script-artists.de" target="_blank">Scrpit Artists</a> <a title="Und wieder was gelernt" href="http://www.script-artists.de/2008/01/wieder-was-gelernt-strato-und-php5.html" target="_blank">gebloggt</a> haben funktioniert zum Glück auch auf Managed Servern. Gott seid Dank, denn bei Managed Servern fehlt der Eintrag im Kundenmenü!</p>
<p>Folgende Zeile in der .htaccess setzt PHP5 als default für *.php-Dateien:<br />
<code><br />
AddType application/x-httpd-php5 .php<br />
</code></p>
<p>So, Abend/Nacht gerettet, bin dann mal wieder Server einrichten&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://heig.de/2009/07/strato-managed-server-php-generell-mit-php5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Photoshop und Wacom Bamboo Stiftdruck unter Vista</title>
		<link>http://heig.de/2009/04/photoshop-wacom-bamboo-stiftdruck-vista/</link>
		<comments>http://heig.de/2009/04/photoshop-wacom-bamboo-stiftdruck-vista/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 21:43:15 +0000</pubDate>
		<dc:creator>gk</dc:creator>
				<category><![CDATA[.tutorials]]></category>
		<category><![CDATA[bamboo]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[Stiftdruck]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Wacom]]></category>

		<guid isPermaLink="false">http://heig.de/?p=114</guid>
		<description><![CDATA[Als Hobbyfotograf nutze ich zur Bildbearbeitung das Wacom Bamboo Tablet. Ein großartiges Gerät was zuverlässig seinen Zweck erfüllt und dabei noch relativ günstig in der Anschaffung war.
Merkwürdig ist nur, dass der Stiftdruck unter Vista nicht so richtig will. Hat man den Bamboo-Treiber frisch installiert funktionier der Stiftdruck bis zum nächsen Neustart. Es scheint, dass der [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_115" class="wp-caption alignright" style="width: 160px"><a rel="lightbox" href="http://heig.de/wp-content/uploads/windows-dienste-deaktivieren.jpg"><img class="size-thumbnail wp-image-115" title="windows-dienste-deaktivieren" src="http://heig.de/wp-content/uploads/windows-dienste-deaktivieren-150x150.jpg" alt="Bild1" width="150" height="150" /></a><p class="wp-caption-text">Bild1</p></div>
<p>Als Hobbyfotograf nutze ich zur Bildbearbeitung das Wacom Bamboo Tablet. Ein großartiges Gerät was zuverlässig seinen Zweck erfüllt und dabei noch relativ günstig in der Anschaffung war.</p>
<p>Merkwürdig ist nur, dass der Stiftdruck unter Vista nicht so richtig will. Hat man den Bamboo-Treiber frisch installiert funktionier der Stiftdruck bis zum nächsen Neustart. Es scheint, dass der Vista &#8220;Tablet PC-Eingabedienst&#8221; was damit zu tun hat. Dieser Dienst wird beim booten von Vista automatisch gestartet sobalt ein Tablet installiert ist. Aufgefallen ist mir dieses Problem in Photoshop, andere Anwendungen habe ich nicht getestet.</p>
<div id="attachment_116" class="wp-caption alignright" style="width: 160px"><a rel="lightbox" href="http://heig.de/wp-content/uploads/windows-dienste-eigenschaften-deaktivieren.jpg"><img class="size-thumbnail wp-image-116" title="windows-dienste-eigenschaften-deaktivieren" src="http://heig.de/wp-content/uploads/windows-dienste-eigenschaften-deaktivieren-150x150.jpg" alt="Bild2" width="150" height="150" /></a><p class="wp-caption-text">Bild2</p></div>
<p>Das Problem lässt sich jedoch beheben, indem man den Windows-Dienst  &#8220;Tablet PC-Eingabedienst&#8221; beendet und deaktiviert. In der Windows Diensteverwaltung (Start-&gt;Ausführen-&gt;&#8217;services.msc&#8217; eingeben oder Windowstaste+R-&gt;&#8217;services.msc&#8217; eingeben) die Eigenschaften des Dienstes &#8220;Tablet PC-Eingabedienst&#8221; aufrufen (Siehe Bild1). In den Eigenschaften den Dienst zuwerst beenden und dann die Startart auf deaktiviert setzten (Bild2). Mir hat&#8217;s geholfen!</p>
]]></content:encoded>
			<wfw:commentRss>http://heig.de/2009/04/photoshop-wacom-bamboo-stiftdruck-vista/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHP-WebService mittels SOAP &#8211; Tutorial</title>
		<link>http://heig.de/2009/03/php-webservice-mittels-soap-tutoria/</link>
		<comments>http://heig.de/2009/03/php-webservice-mittels-soap-tutoria/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 23:40:27 +0000</pubDate>
		<dc:creator>gk</dc:creator>
				<category><![CDATA[.tutorials]]></category>
		<category><![CDATA[persistent]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Webservice]]></category>
		<category><![CDATA[WSDL]]></category>

		<guid isPermaLink="false">http://heig.de/?p=72</guid>
		<description><![CDATA[Dieses Tutorial beschreibt, wie man mit PHP in kürzester Zeit einen SOAP WebService erstellt, der mit Persistenz umgehen kann und WSDL-Dateien selber generiert.
Wenn es in PHP-Projekten um Client-Server-Kommunikation, ins Besondere um RPC, geht, lässt man sich schnell dazu verleiten &#8220;mal eben&#8221; was eigenes zu bauen, obwohl es doch einige Standards für RPC gibt. Viele &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p><span style="text-decoration: underline;">Dieses <em>Tutorial </em>beschreibt, wie man mit <em>PHP </em>in kürzester Zeit einen <em>SOAP WebService </em>erstellt, der mit <em>Persistenz</em> umgehen kann und <em>WSDL</em>-Dateien selber generiert.</span></p>
<p>Wenn es in PHP-Projekten um Client-Server-Kommunikation, ins Besondere um <a title="Wikipedia - RemoteProcedureCall" href="http://de.wikipedia.org/wiki/Remote_Procedure_Call">RPC</a>, geht, lässt man sich schnell dazu verleiten &#8220;mal eben&#8221; was eigenes zu bauen, obwohl es doch einige Standards für <a title="Wikipedia - RemoteProcedureCall" href="http://de.wikipedia.org/wiki/Remote_Procedure_Call">RPC</a> gibt. Viele &#8211; genau wie ich auch &#8211; scheuen den Aufwand sich in Monster wie <a title="Wikipedia - SOAP" href="http://de.wikipedia.org/wiki/SOAP" target="_blank">SOAP</a> oder das etwas schlankere <a title="Wikipedia - XML-RPC" href="http://de.wikipedia.org/wiki/XML-RPC" target="_blank">XML-RPC</a> einzuarbeiten. Mit den richtigen Tool&#8217;s jedoch können PHP-Klassen jedoch mit geringstem Mehraufwand über <a title="Wikipedia - SOAP" href="http://de.wikipedia.org/wiki/SOAP" target="_blank">SOAP</a> zugänglich gemacht werden.</p>
<p><span id="more-72"></span></p>
<div id="attachment_79" class="wp-caption alignright" style="width: 160px"><a rel="lightbox" href="http://heig.de/wp-content/uploads/phpinfo_soap_screenshot.jpg"><img class="size-thumbnail wp-image-79" title="phpinfo_soap_screenshot" src="http://heig.de/wp-content/uploads/phpinfo_soap_screenshot-150x150.jpg" alt="PHP mit aktiviertem SOAP" width="150" height="150" /></a><p class="wp-caption-text">PHP mit aktiviertem SOAP</p></div>
<p>Die Einzige Vorraussetzung ist einen Webserver mit PHP5.0.3 oder aktueller und aktiviertem <a title="PHP: SOAP - Munual" href="http://de3.php.net/manual/de/book.soap.php" target="_blank">SOAP</a>.</p>
<p>Leider ist die native SOAP-Implementation von PHP jedoch relativ kryptisch und bietet momentan keine Möglichkeit <a title="Wikipedia - WSDL" href="http://de.wikipedia.org/wiki/Web_Services_Description_Language" target="_blank">WSDL</a> Dateien zu generieren.  Die <strong>W</strong>eb <strong>S</strong>ervices <strong>D</strong>escription <strong>L</strong>anguage ist eine plattform-, programmiersprachen- und protokollunabhängige Beschreibungssprache für Netzwerkdienste (Web Services) zum Austausch von Nachrichten auf Basis von XML. Über diese WSDL-Dateien können dann Client-Stubs, z.B. in .NET komplett generiert werden.</p>
<p>Abhilfe schafft da der <a title="PHP Webservice Helper" href="http://www.jool.nl/new/1,webservice_helper.html" target="_blank">Webservice-Helper</a> [nachfolgend WSH genannt] von <a title="jool.nl" href="http://jool.nl" target="_blank">jool.nl</a>. Der WSH nimmt einem jegliche Arbeit ab, um Klassen und Objekte über SOAP bereitzustellen.Zusätzlich generiert der WSH automatisch WSDL-Dateien. Diese WSDL&#8217;s können dann, wie gesagt zum generieren von Clients in beliebigen Sprachen benutzt werden.</p>
<p>Also den WSH <a title="Download-Seite" href="http://www.jool.nl/new/2,download.html" target="_blank">herunterladen</a> und entpacken. Standardmäßig kann der WSH auf Klassen zugreifen die in den folgenden Unterordnern liegen:</p>
<ul>
<li>lib/data_objects/<span style="color: #888888;"><em>Klassenname</em>.class.php</span></li>
<li>lib/soap/<span style="color: #888888;"><em>Klassenname</em>.class.php</span></li>
<li>lib/<span style="color: #888888;"><em>Klassenname</em>.class.php</span></li>
</ul>
<p>Der Dateiname muss sich aus dem Klassennamen und &#8220;.class.php&#8221; zusammensetzten. Es ist jedoch auch möglich, Klassen aus anderen Ordnern bereitzusetellen. Dazu muss die Autoload-Funktion in der <em>common.php</em> angepasst  werden.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/** autoload functie voor PHP5 */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> __autoload<span class="br0">&#40;</span><span class="re0">$classname</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="st0">&quot;lib/data_objects/$classname.class.php&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">include</span><span class="br0">&#40;</span><span class="st0">&quot;lib/data_objects/$classname.class.php&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elseif</span><span class="br0">&#40;</span><a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="st0">&quot;lib/soap/$classname.class.php&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">include</span><span class="br0">&#40;</span><span class="st0">&quot;lib/soap/$classname.class.php&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elseif</span><span class="br0">&#40;</span><a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="st0">&quot;lib/$classname.class.php&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">include</span><span class="br0">&#40;</span><span class="st0">&quot;lib/$classname.class.php&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Die dort definierten Suchpfade und auch Dateinamen (.class.php) können nach belieben geändert werden. Ist der Zugriff konfiguriert, müssen die Klassen noch in der <em>config.php</em> freigegeben werden.</p>
<p><strong>config.php</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/* All the allowed webservice classes */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$WSClasses</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;BeispielKlasse&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;TestKlasse&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;Klasse&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* The classmap associative array. When you want to allow objects as a parameter for</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* your webservice method. ie. saveObject($object). By default $object will now be</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;* a stdClass, but when you add a classname defined in the type description in the @param</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* documentation tag and add your class to the classmap below, the object will be of the</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* given type. Requires PHP 5.0.3+</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$WSStructures</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;TestDatentyp&quot;</span> =&gt; <span class="st0">&quot;TestDatentyp&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Alle Klassen, die über SOAP betreitgestellt werden sollen müssen im Array <em>$WSClasses</em> aufgeführt werden. Damit wird sichergestellt, dass über die autoload Funktion keine ungewollten Dateien aufgerufen werden. Objekte bzw. strukturierte Datentypen, die als Paramer oder Rückgabewert einer Funktion genutzt werden, sollten noch im Array <em>$WSStructures</em> aufgeführt werden, damit man einen typisierten Austausch dieser Daten realisieren kann.</p>
<p>Typisierte Daten in PHP?! Ja genau. Damit die ganze Geschichte funktioniert muss der PHP Code Dokumentiert/Typisiert werden. Die Syntax der Dokumentation ist analog der von <a title="The compolete documentation soulution for php" href="http://www.phpdoc.org/" target="_blank">phpDocumentor</a>, jedoch wird nur ein Teil der Schlüsselwörter benutzt. Jeder Parameter und der Rückgabewert einer Methode muss Typisiert werden. Das geschieht durch die Schlüsselwörter @param und @return um Doc-Block (/**  */). Dazu ein kleines Beispiel:</p>
<p><strong>BeispielKlasse.class.php</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; * Beispiel einer Dokumentierten Klasse</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> BeispielKlasse<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Funktion mit mehreren Parametern und ohne Rückgabewerte</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Aufbau: @return datentyp|void</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Aufbau: @param datentyp $parametername Beschreibung</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @return void</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @param sting $text Ein übergebener String</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @param int $number Ein Integer</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @param boolean $something Ein boolean-Wahrheitswert</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> foo<span class="br0">&#40;</span><span class="re0">$text</span>, <span class="re0">$number</span>, <span class="re0">$something</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * Funktion mit einfachem Rückgabewert</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * @return string</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span>&nbsp;helloWorld<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;Hallo Welt&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * Funktion die ein Array eines komplexen Datentyps zurückgibt</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * @return TestDatentyp[]</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> helloWorld<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$objects</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="kw2">new</span> TestDatentyp<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$objects</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="kw2">new</span> TestDatentyp<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$objects</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="kw2">new</span> TestDatentyp<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$objects</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="kw2">new</span> TestDatentyp<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$objects</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Natürlich muss der genutzte Datentyp <span class="st0">&quot;TestDatentyp&quot;</span> auch definiert und ebenfalls typisiert werden:</div>
</li>
</ol>
</div>
<p><strong>TestDatentyp.class.php</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; * Beispiel eines strukturierten Datentyps mit zwei Attributen.</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> TestDatentyp<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Name einer Person</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @var string</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Alter einer Person</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @var int</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$age</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Geschlecht einer Person</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @var boolean</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$gender</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Name einer Person</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @var string</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$name</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//&#8230;weitere, auch strukturierte Attribute / Funktionen möglich</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Sind alle Klassen geschrieben ist der WebService fertig. Denn der WSH sorgt nun dafür, dass alle Methoden, die public sind, über SOAP bereit gestellt werden. Die passende WSDL zum WebService gibts automatisch dazu. Unter folgendem Pfad kann man die WDSL beziehen:</p>
<pre>http://deinserver/service.php?class=<em>BeispielKlasse</em>&amp;wsdl</pre>
<p>Mit dieser WSDL-Datei kann man nun auf einfachste Weise Client-Stubs generieren. Ein Tutorial dazu werde ich die Tage mal verfassen.</p>
<p>Bei der Arbeit mit diesem PHP WebService wird man auf zwei größere Hürden stoßen:</p>
<ol>
<li> Persistenz</li>
<li>Codeänderungen</li>
</ol>
<p>Zu 1: Die PHP-SOAP-Engine kennt zwei Persistenz-Modi: <em>SOAP_PERSISTENCE_SESSION</em> und <em>SOAP_PERSISTENCE_REQUEST. </em>Der <em>SOAP_PERSISTENCE_SESSION-</em>Modus ist der schönere von beiden <img src='http://heig.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , PHP-Objekte werden mit all Ihren Attributen in einer Session gespeichert und sind somit über mehrere Aufrufe persistent. Da PHP Cookies nutzt um die Session-ID an den Client zu übermitteln, muss sichergestellt sein, dass der SOAP-Client dies auch unterstützt.<br />
Der <em>SOAP_PERSISTENCE_REQUEST</em>-Modus hingegen deaktiviert die Persistenz und versetzt den WebService in den Amnesie-Modus <img src='http://heig.de/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Leider ist die Persistenz im WSH standardmäßig deaktiviert. Um die szu ändern muss folgende Codezeile in der service.php ersetzt werden:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$WSHelper</span>-&gt;<span class="me1">setPersistence</span><span class="br0">&#40;</span>SOAP_PERSISTENCE_REQUEST<span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>ersetzten durch</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$WSHelper</span>-&gt;<span class="me1">setPersistence</span><span class="br0">&#40;</span>SOAP_PERSISTENCE_SESSION<span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Zu 2: Damit die ganze WebService Sache einigermaßen performant bleibt, arbeiten sowohl der WSH alsauch die nativen PHP-Methoden mit Caches. Damit äußere Strukturänderungen an den über SOAP bereitgestellten Klassen angewandt werdem müssen der WSDL-Cache und der PHP-Cache gelöscht werden. Die WSDL-Dateien befinden sich im Unterordner <em>&#8216;wsdl&#8217;</em> vom WSH. Bei geändertem Code einfach alle Datien löschen, damit diese neu generiert werden können. Dazu sollte man noch den WSDL-Cache von PHP löschen. Dieser befindet sich im tmp-Ordner des Servers (/tmp). Alle Dateien die mit <em>&#8216;wsdl-&#8217;</em> beginnen löschen &#8211; dann klappts auch mit den Änderungen</p>
<p>In diesem Sinne, viel Erfolg. Fragen bitte als Kommentar posten!</p>
]]></content:encoded>
			<wfw:commentRss>http://heig.de/2009/03/php-webservice-mittels-soap-tutoria/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Changing keymap in Ubuntu</title>
		<link>http://heig.de/2008/07/changing-keymap-in-ubuntu/</link>
		<comments>http://heig.de/2008/07/changing-keymap-in-ubuntu/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 10:20:57 +0000</pubDate>
		<dc:creator>gk</dc:creator>
				<category><![CDATA[.off topic]]></category>
		<category><![CDATA[.tutorials]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://heig.de/index.php/2008/07/07/changing-keymap-in-ubuntu/</guid>
		<description><![CDATA[ Well there are MANY different ways to change the keymap in an ubuntu system. I tried to find a simple soulution, without installing any additional packages to an Ubuntu JeOS.  The following lines first change the running keymap and then writes the boot time configuration:
Code:
sudo loadkeys de
sudo /etc/init.d/console-setup start

Have fun changing keymaps  [...]]]></description>
			<content:encoded><![CDATA[<p> Well there are MANY different ways to change the keymap in an ubuntu system. I tried to find a simple soulution, without installing any additional packages to an Ubuntu JeOS.  The following lines first change the running keymap and then writes the boot time configuration:</p>
<p>Code:<br />
<code>sudo loadkeys de<br />
sudo /etc/init.d/console-setup start<br />
</code></p>
<p>Have fun changing keymaps <img src='http://heig.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://heig.de/2008/07/changing-keymap-in-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

