<?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; Tutorial</title>
	<atom:link href="http://heig.de/tag/tutorial/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>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>Farbpaletten einfach generieren</title>
		<link>http://heig.de/2009/09/farbpaletten-einfach-generieren/</link>
		<comments>http://heig.de/2009/09/farbpaletten-einfach-generieren/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 20:35:59 +0000</pubDate>
		<dc:creator>gk</dc:creator>
				<category><![CDATA[.web]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[farben]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://heig.de/?p=182</guid>
		<description><![CDATA[Ich bin ehrlich: Ich habe kein Händchen für Farbpaletten. Wem es ganau so geht, der sollte sich den Color Scheme Designer 3 anschauen. Ein, wie ich finde, grandioses Tool um schnell akzeptable Farbkombinationen zu erzeugen.
Neben der Funktion &#8220;Randomize Palette&#8221;, die auf Knopfdruck neue Paletten generiert kann man über eine vielzahl von Reglern die Farbpaletten manuell [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_197" class="wp-caption alignright" style="width: 160px"><a rel="lightbox" href="http://heig.de/wp-content/uploads/color-scheme-designer.jpg"><img class="size-thumbnail wp-image-197" title="Color Scheme Designer" src="http://heig.de/wp-content/uploads/color-scheme-designer-150x150.jpg" alt="Ein Generator für Farbpaletten" width="150" height="150" /></a><p class="wp-caption-text">Screenshot</p></div>
<p>Ich bin ehrlich: Ich habe kein Händchen für Farbpaletten. Wem es ganau so geht, der sollte sich den <a title="Color Scheme Designer 3" href="http://colorschemedesigner.com/" target="_blank">Color Scheme Designer 3</a> anschauen. Ein, wie ich finde, grandioses Tool um schnell akzeptable Farbkombinationen zu erzeugen.</p>
<p>Neben der Funktion &#8220;Randomize Palette&#8221;, die auf Knopfdruck neue Paletten generiert kann man über eine vielzahl von Reglern die Farbpaletten manuell feinjustieren. Zudem generiert das Tool eine Vorschau für jeweils eine dunkle und eine helle Website.</p>
<p>Natürlich kann dieses Tool die Arbeit eines guten Designers nicht ersetzten, es erleichert den &#8220;Codern&#8221; unter uns die Arbeit trotzem sehr <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/farbpaletten-einfach-generieren/feed/</wfw:commentRss>
		<slash:comments>0</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>10</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>0</slash:comments>
		</item>
		<item>
		<title>Acronis True Image Error E000807D8</title>
		<link>http://heig.de/2008/02/acronis-true-image-error-e000807d8/</link>
		<comments>http://heig.de/2008/02/acronis-true-image-error-e000807d8/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 17:41:09 +0000</pubDate>
		<dc:creator>gk</dc:creator>
				<category><![CDATA[.off topic]]></category>
		<category><![CDATA[.tutorials]]></category>
		<category><![CDATA[Acronis]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://heig.de/index.php/2008/02/22/acronis-true-image-error-e000807d8/</guid>
		<description><![CDATA[The Acronis true Image Management Console fails to connect to a remote (or local) computer. In our case it is Acronis True Image Echo BUILD 8039. In the windows eventlog you see the error EventId 7034, Source Service Control Manager.
You can fix the problem editing the folowing registry hive:
HKEY_LOCAL_MACHINE\SOFTWARE\Acronis\Encryption\Server,
rename the  &#8220;Server&#8221; folder to &#8220;Server1&#8243;
After [...]]]></description>
			<content:encoded><![CDATA[<p>The Acronis true Image Management Console fails to connect to a remote (or local) computer. In our case it is Acronis True Image Echo BUILD 8039. In the windows eventlog you see the error EventId 7034, Source Service Control Manager.</p>
<p>You can fix the problem editing the folowing registry hive:</p>
<p>HKEY_LOCAL_MACHINE\SOFTWARE\Acronis\Encryption\Server,</p>
<p>rename the  &#8220;Server&#8221; folder to &#8220;Server1&#8243;</p>
<p>After that you should restart the &#8220;Acronis Remote Agent&#8221; Service.</p>
<p>Have fun using Acronis, in my opinion it is the best backup software with the worst support ever! <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/02/acronis-true-image-error-e000807d8/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
