<?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>Neysors BLOG! &#187; Programming</title>
	<atom:link href="http://blog.neysor.net/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.neysor.net</link>
	<description></description>
	<lastBuildDate>Fri, 05 Feb 2010 09:14:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>FH Technikum Wien Kalender synchron in Google Kalender</title>
		<link>http://blog.neysor.net/2010/02/05/fh-technikum-wien-kalender-synchron-in-google-kalender/</link>
		<comments>http://blog.neysor.net/2010/02/05/fh-technikum-wien-kalender-synchron-in-google-kalender/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 09:09:29 +0000</pubDate>
		<dc:creator>Neysor</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[FH Kalender]]></category>
		<category><![CDATA[FH Technikum Wien]]></category>
		<category><![CDATA[Google Kalender]]></category>
		<category><![CDATA[PHP HTTP Login]]></category>

		<guid isPermaLink="false">http://blog.neysor.net/?p=237</guid>
		<description><![CDATA[Google Kalender unterstützt leider kein Login für Kalender die per URL hinzugefügt werden. Daher lässt sich auch der FH Kalender vom Technikum Wien nicht direkt synchronisieren. In diesem Tutorial wird erklärt wie man es dennoch ganz einfach erledigen kann...]]></description>
			<content:encoded><![CDATA[<p>Jeder kennt das Problem:<strong> Zu viele Termine!</strong> Als ob das nicht reichen würde, stehen die auch noch in den<strong> unterschiedlichsten Kalendern!</strong> In der Arbeit verwendet man Exchange, zu Hause vielleicht noch einen eigenen privaten und zu guter letzt wird einem der Stundenplan von der FH auch noch so aufgedrängt.</p>
<p>Was macht man nun? Man versucht sich alles in einem <strong>Kalender synchron zu halten</strong>. Mit vielen E-Mail Clients ist es ganz einfach: ICal Datei anklicken, Kalender abonnieren, fertig! (<em><strong>Tipp</strong>: Bei Outlook muss man statt https:// auf webcal:// ändern, sonst geht da auch nix</em>)</p>
<p><strong>Leider funktioniert Google Kalender nicht mit der ICal Datei </strong>der <a title="FH Technikum-Wien" href="http://www.technikum-wien.at/" target="_blank">Fachhochschule Technikum Wien</a>.<br />
<strong>Warum?</strong> Weil <strong>Google Kalender keine HTTP Authentifizierung unterstützt</strong> und man sich für seinen privaten Kalender leider einloggen muss.</p>
<p><strong>Es funktioniert allerdings trotzdem</strong>, mit einem <strong>kleinen Trick.</strong> Was ihr dazu <strong>benötigt </strong>ist ein <strong>PHP fähiger Webserver</strong>. Den bekommt ihr auch bei <strong>vielen Anbietern gratis, </strong>falls ihr noch keinen habt. <a title="Lass mich für dich googlen ! :)" href="http://www.google.athttp://lmgtfy.com/?q=Gratis+php+Webspace" target="_blank">Einfach ein wenig googlen</a>. <em>(Ich habe vor meinem jetzigen noch <a title="Funpic" href="http://www.funpic.de" target="_blank">funpic.de</a> benutzt und war sehr zufrieden. Das ist allerdings schon Jahre her <img src='http://blog.neysor.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</em></p>
<p>So nun weiter:<br />
Ihr müsst eine <strong>neue PHP Datei</strong> erstellen. Das ist einfach eine normale Textdatei (*.txt) die ihr auf .php umbenennt. Als <strong>Inhalt</strong> schreibt ihr <strong>folgendes </strong>(<em>macht einfach copy+paste</em>):</p>
<pre class="brush: php;">
&lt;?php
$url = &quot;xyz&quot;;
$lines = file($url);
foreach ($lines as $line_num =&gt; $line) {
    $line = str_replace(&quot;PRODID:FH Technikum Wien&quot;,&quot;PRODID:FH Technikum Wien\nX-WR-TIMEZONE:Europe/Vienna&quot;,$line);
	echo $line;
}
?&gt;
</pre>
<p><strong>Statt </strong>dem <strong>xyz </strong>in der 2. Zeile müsst ihr eine <strong>veränderte </strong>Version der<strong> ICal URL</strong> angeben. Ich erkläre es hier an meinem Beispiel: meine ICAL URL lautet</p>
<pre class="brush: plain;">https://cis.technikum-wien.at/cis/private/lvplan/stpl_kalender.php?type=student&amp;pers_uid=tm09m002&amp;ort_kurzbz=&amp;stg_kz=301&amp;sem=2&amp;ver=B&amp;grp=%20&amp;gruppe_kurzbz=&amp;begin=1265324400&amp;ende=1278280800&amp;format=ical&amp;version=2&amp;target=ical</pre>
<p>Nun fügt ihr <strong>zwischen </strong>dem https:// und dem cis.technium-wien.at euren <strong>Usernamen und euer Passwort</strong> ein und zwar so, dass ihr<strong> username:passwort@</strong> schreibt. In meinem Beispiel (<em>natürlich nicht mit meinem echten Passwort</em>) sieht das dann so aus:</p>
<pre class="brush: plain;">https://tm09m002:MeinGenialesPasswort@cis.technikum-wien.at/cis/private/lvplan/stpl_kalender.php?type=student&amp;pers_uid=tm09m002&amp;ort_kurzbz=&amp;stg_kz=301&amp;sem=2&amp;ver=B&amp;grp=%20&amp;gruppe_kurzbz=&amp;begin=1265324400&amp;ende=1278280800&amp;format=ical&amp;version=2&amp;target=ical</pre>
<p>Damit seid ihr auch schon fast fertig. Ihr <strong>speichert die PHP Datei ab</strong>. Der <strong>Name </strong>der Datei ist <strong>irrelevant</strong>, nennt sie allerdings einfachhalber &#8220;fhcalendar.php&#8221; Diese &#8220;fhcalendar.php&#8221; <strong>ladet </strong>Ihr nun auf euren <strong>Webspace hoch</strong>. Hier nehme ich nun als Beispiel meinen Webspace. Ich lade sie also unter<a title="- Link funktioniert nicht! -" href="http://www.neysor.net/fhcalendar.php" target="_blank"> http://www.neysor.net/fhcalendar.php</a> hoch.</p>
<p><strong><span style="color: #ff0000;">Wichtig: Keine Angst, euer Passwort ist über diese URL nicht lesbar, allerdings euer Kalender! Deswegen, solltet ihr die Adresse geheimhalten, falls ihr nicht wollt, dass man euren Kalender lesen kann. </span></strong><em><span style="color: #ff0000;"><span style="color: #000000;">(und deshalb werdet ihr unter der URL auch nicht meinen Kalender finden <img src='http://blog.neysor.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</span></span></em><strong><span style="color: #ff0000;"><br />
</span></strong></p>
<p>Diese <strong>URL </strong>gebt ihr nun im Menü <strong>bei Google Kalendar</strong> an (<em><strong>Hinzufügen-&gt;Über URL hinzufügen</strong></em>) und schon habt ihr den FH Kalender<strong> immer synchron</strong>. Das ganze müsst ihr jedes Semester wiederholen (bzw. die URL anpassen), da sich die Adresse der ICal Datei pro Semester ändert.</p>
<p><strong>Jetzt zur kurzen Erklärung was passiert:</strong><br />
Die fhcalender.php <strong>liest einfach die ICal Datei aus</strong> und gibt sie genau so wieder. Durch das username:passwort@ <strong>erledigt </strong>die <strong>PHP </strong>Datei den <strong>Login </strong>für euch.</p>
<p>Die zusätzliche Funktion &#8220;string_replace&#8221; fügt nur das Attribut der Zeitzone hinzu. Google Kalender stellt sonst alle Termine eine Stunde vor, weil er denkt, dass die Ical Datei in Zeitzone +0 ist und nicht  +1 wie in eurem Kalender.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.neysor.net/2010/02/05/fh-technikum-wien-kalender-synchron-in-google-kalender/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>FindMe</title>
		<link>http://blog.neysor.net/2009/12/07/findme/</link>
		<comments>http://blog.neysor.net/2009/12/07/findme/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 14:46:36 +0000</pubDate>
		<dc:creator>Neysor</dc:creator>
				<category><![CDATA[JavaME]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[FindMe]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Positionssoftware]]></category>
		<category><![CDATA[Sourceforge]]></category>

		<guid isPermaLink="false">http://blog.neysor.net/?p=223</guid>
		<description><![CDATA[FindMe
Nicht mehr suchen, sondern finden!
Kurzfassung:

Das ist das Motto einer Positionssoftware für Mobiltelefone.
Diese Software betreibt allerdings kein Map-Matching um den Nutzer selbst auf eine Karte zu finden. Nein vielmehr findet sie Freunde des Nutzers in der Umgebung.
Dies soll den Nutzer ein nerviges Suchen von Freunden in großen Menschenmengen ersparen oder aber auch Informationen geben, wie weit [...]]]></description>
			<content:encoded><![CDATA[<p><strong>FindMe<br />
</strong><em>Nicht mehr suchen, sondern finden!</em></p>
<p><em><a href="http://blog.neysor.net/wp-content/uploads/2009/12/projektlogo_transparent.png" rel="wp-prettyPhoto[g223]"><img class="aligncenter size-full wp-image-228" title="projektlogo_transparent" src="http://blog.neysor.net/wp-content/uploads/2009/12/projektlogo_transparent.png" alt="projektlogo_transparent" width="344" height="259" /></a></em><span style="text-decoration: underline;"><strong>Kurzfassung:</strong></span><em><br />
</em></p>
<p>Das ist das Motto einer <strong>Positionssoftware für Mobiltelefone</strong>.<br />
Diese Software betreibt allerdings <strong>kein Map-Matching</strong> um den Nutzer selbst auf eine Karte zu finden. Nein vielmehr findet sie <strong>Freunde des Nutzers in der Umgebung</strong>.</p>
<p>Dies soll den Nutzer ein nerviges <strong>Suchen von Freunden in großen Menschenmengen</strong> ersparen oder aber auch Informationen geben, <strong>wie weit der jeweilige Freund entfernt ist</strong>, der einen abholen soll. Abgesehen von netten Informationen ist sicher ein gewisser Spaßfaktor in der Freizeit gegeben.</p>
<p><span style="text-decoration: underline;"><strong>Entstehungsgeschichte:</strong></span></p>
<p>Diese Software entstand in einem Unterrichtsfach des Studiengangs &#8220;<a title="Intelligente Verkehrssysteme" href="http://www.technikum-wien.at/studium/bachelor/intelligente_verkehrssysteme/" target="_blank">Intelligente Verkehrssysteme</a>&#8221; der <a title="FH Technikum Wien" href="http://www.technikum-wien.at/" target="_blank">FH Technikum Wien</a>. In diesem Unterrichtsfach musste ein Projekt bis zur Bachelorarbeit gestaltet werden. Das &#8220;FindMe&#8221; Team hatte dann die Idee dieser Applikation.</p>
<p>In 4 Semestern wurde sie dann umgesetzt und ist heute bei <a title="Findme bei Sourceforge" href="http://sourceforge.net/projects/findme/" target="_blank">Sourceforge</a> unter der <a title="GPL" href="http://de.wikipedia.org/wiki/GPL">GPL</a> zu finden.</p>
<p><strong><span style="text-decoration: underline;">Wie FindMe funktioniert:</span><br />
</strong></p>
<p>Um die Funktion von FindMe zu gewährleisten wurde das<strong> System in 3 Teile unterteilt</strong>. Dem GPS Empfänger, dem Server und dem Handy. Hier der Systemüberblick:<a href="http://blog.neysor.net/wp-content/uploads/2009/12/sysueberblick.png" rel="wp-prettyPhoto[g223]"><img class="aligncenter size-full wp-image-226" title="Systemüberblick" src="http://blog.neysor.net/wp-content/uploads/2009/12/sysueberblick.png" alt="Systemüberblick" width="527" height="458" /></a>Das Handy erhält über die<strong> Bluetoothverbindung die GPS Daten</strong> und sendet Sie an den Server. Gleichzeitig kontrolliert das Handy ob neue<strong> Freundschaftsanfragen</strong> vorhanden sind und lädt die <strong>Positionsdaten von benötigten Freunden herunter</strong>.</p>
<p><strong>Freundschaftseinladungen sind analog den sozialen Netzwerken</strong> wie<a title="Facebook" href="http://www.facebook.com" target="_blank"> Facebook</a> und co. umgesetzt. Erst wenn beide Parteien die Freundschaft akzeptiert haben, können daten versendet werden.</p>
<p><span style="text-decoration: underline;"><strong>Aussehen der Applikation auf dem Mobiltelefon:</strong></span></p>
<p>Da das Projektteam wollte, dass es auf so gut wie jedem Mobiltelefon läuft, wurde das <strong>Design recht schlicht gestaltet.</strong> Ein <strong>Freund </strong>wird durch einen<strong> farbigen Punkt</strong> repräsentiert und man <strong>selbst </strong>ist immer der <strong>rote Punkt in der Mitte</strong>. Ein blauer Pfeil zeigt die berechnete <strong>Nordrichtung </strong>an. Das ganze funktioniert auch mit <strong>Fixpunkten</strong>.</p>
<p><a href="http://blog.neysor.net/wp-content/uploads/2009/12/screens123.png" rel="wp-prettyPhoto[g223]"><img class="aligncenter size-full wp-image-231" title="screens123" src="http://blog.neysor.net/wp-content/uploads/2009/12/screens123.png" alt="screens123" width="558" height="238" /></a>Mehr Screenshots findet ihr im <a title="Benutzerhandbuch FindMe" href="http://sourceforge.net/projects/findme/files/Benutzerhandbuch/FindMe_Benutzerhandbuch.pdf/download" target="_blank">Benutzerhandbuch</a>!</p>
<p><span style="text-decoration: underline;"><strong>Kann man FindMe nun einfach downloaden und schon gehts los?</strong></span></p>
<p>Nein, das kann man<strong> leider derzeit nicht</strong>. Wie bereits erwähnt <strong>benötigt </strong>das System einen <strong>Server</strong>. Dieser ist derzeit <strong>inaktiv</strong> und wird nicht mehr verwendet. Da das Projekt allerdings <strong>unter GPL als OpenSource verfügbar</strong> ist, kann man es gerne downloaden auf seinem eigenen Server und Mobiltelefon installieren und dann loslegen.</p>
<p><span style="text-decoration: underline;">An dieser Stelle möchte ich mich noch einmal sehr bedanken bei meinen Kollegen die mit mir dieses Projekt damals umgesetzt haben!</span></p>
<ul>
<li>Christoph Chmela</li>
<li>Petrina Papazek</li>
<li>und Lucas Weiß</li>
</ul>
<p><strong>Mehr informationen?</strong></p>
<p><a title="Findme bei Sourceforge" href="http://sourceforge.net/projects/findme/" target="_blank">http://sourceforge.net/projects/findme/</a></p>
<p><strong>Dort findet ihr alles von Projektplänen bis Quelltext, JavaDoc bist Vortragsmaterialien!</strong><br />
Derzeit ist alles mal soweit hochgeladen, um optisch bessere Aufbereitung werde ich mich zukünftig kümmern. Falls irgendwer interesse hat dieses Projekt weiterzuführen, ist er herzlich eingeladen mich zu kontaktieren!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.neysor.net/2009/12/07/findme/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gestreifte Tabelle mit JavaScript Teil 1</title>
		<link>http://blog.neysor.net/2009/09/19/gestreifte-tabelle-mit-javascript-teil-1/</link>
		<comments>http://blog.neysor.net/2009/09/19/gestreifte-tabelle-mit-javascript-teil-1/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 18:07:56 +0000</pubDate>
		<dc:creator>Neysor</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[gestreifte tabelle]]></category>
		<category><![CDATA[rgb hex js]]></category>
		<category><![CDATA[stripe]]></category>
		<category><![CDATA[striped table]]></category>
		<category><![CDATA[tabelle]]></category>

		<guid isPermaLink="false">http://blog.neysor.net/?p=172</guid>
		<description><![CDATA[Gestreifte Tabellen kennt jeder. Helfen sie doch sehr die richtige Tabelle nicht]]></description>
			<content:encoded><![CDATA[<p>Jeder kennt den Effekt der gestreiften Tabelle. Sind die Zeilen abwechselnd in unterschiedlichen Farben, verliert man nicht so einfach den Überblick. Oftmals wird diese nette optische Unterstützung serverseitig (z.B.: in PHP) gelöst, aber manchmal ist es doch einfacher es mit JavaScript zu erledigen.</p>
<p>Doch wie macht man das nun einfach in JavaScript? Ich werde nun erklären wie das geht und einige Erweiterungen dazu geben.</p>
<p>Ich möchte hier kurz erwähnen, dass ich auch einige Ideen aus dem Internet habe, jedoch die Quellen nicht mehr finden kann! Sollte ich die Seite finden die mir den Anstoß gegeben hat, werde ich sie natürlich als Quelle führen!</p>
<p><strong>Leider gibt es das Problem, dass CSS Eigenschaften auf der Tabellenreihe nicht ziehen. Deswegen färben wir jede Tabellendata (&lt;td&gt;)  einzeln.</strong></p>
<pre class="brush: jscript;">
/**
* Funktion zum streifen einer Tabelle
* @param id: Die Tabelle muss über eine ID verfügen und die wird hier übergeben
*/
function stripe(id) {
	//Variable fürs Farbwechseln
	var even = false;
	//Farbe für ungerade Zeilen
	var evenColor = &quot;#ffffff&quot;;
	//Farbe für gerade Zeilen
	var oddColor = &quot;#eeeeff&quot;;
	//Wir holen uns das Objekt der Tabelle
	var table = document.getElementById(id);
	//Wenn wir keine Tabelle erhalten haben, dann ist hier Ende
	if(! table) { return; }
	//Wir wollen nur den Tabllenbody streifen.
	var tbodies = table.getElementsByTagName(&quot;tbody&quot;);
	//Wichtig hier ist es, dass es laut Definition mehrere tbodys geben kann! Deswegen die Schleife
	for (var h = 0; h &lt; tbodies.length; h++) {
		//Wir holen uns die Reihen
		var trs = tbodies[h].getElementsByTagName(&quot;tr&quot;);
		//Wir laufen eine Reihe nach der anderen durch
		for (var i = 0; i &lt; trs.length; i++) {
			//Wir laufen nun alle Tabellendata durch
			for (var j = 0; j &lt; tds.length; j++) {
				//Jetzt noch schnell den Hintergrund färben
				tds[j].style.backgroundColor = even ? evenColor : oddColor;
			}
			//Farbwechsel realisieren
			even =  ! even;
		}
	}
}
</pre>
<p>Ist jetzt glaube ich nicht so schwer. Deswegen werden wir diese Funktion erweitern!</p>
<p>Nehmen wir einmal an, wir wollen über ein PHP Script <strong>bestimmte Zellen schon vorfärben die unsere Funktion nicht ändern soll.</strong> Das heißt es sollen <strong>nur die geändert werden die keine Hintergrundfarbe besitzten.</strong></p>
<p>Auch das ist noch relativ einfach gemacht. Wir müssen dazu nur eine if verzweigung vor dem färben hinzufügen <img src='http://blog.neysor.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: jscript; first-line: 25; highlight: [26];">
for (var j = 0; j &lt; tds.length; j++) {
				if(!tds[j].style.backgroundColor){
					tds[j].style.backgroundColor = even ? evenColor : oddColor;
				}
			}
</pre>
<p>Das war einmal Teil I des Berichts. Im zweiten Teil zeige ich euch dann, wie man markierungen von Zeilen mit einer erweiterten Variante der Funktion realisieren kann.</p>
<p>Ebenso zeig ich euch eine Einfach variante mit der man auf unterschiedlichen Farben reagieren kann.</p>
<p>Denn leider ist es nicht möglich mit einem</p>
<pre class="brush: jscript; light: true;">
if(tds[j].style.backgroundColor == &quot;#FFFFFF&quot;)
</pre>
<p>zu vergleichen. Vor allem weil wenn man mit einem</p>
<pre class="brush: jscript; light: true;">
alert(tds[j].style.backgroundColor);
</pre>
<p>Im InternetExplorer den Hexwert erhält und im FireFox einen rgb wert.<br />
Freut euch schon auf Teil 2 <img src='http://blog.neysor.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.neysor.net/2009/09/19/gestreifte-tabelle-mit-javascript-teil-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vorladen von Bildern mit Statusanzeige</title>
		<link>http://blog.neysor.net/2009/09/05/vorladen-von-bildern-mit-statusanzeige/</link>
		<comments>http://blog.neysor.net/2009/09/05/vorladen-von-bildern-mit-statusanzeige/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 22:26:23 +0000</pubDate>
		<dc:creator>Neysor</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[preload Images]]></category>
		<category><![CDATA[vorladen von Bildern]]></category>

		<guid isPermaLink="false">http://blog.neysor.net/?p=154</guid>
		<description><![CDATA[Es gibt bereits sehr viele Scripte die Bilder vorladen mit oder ohne Statusanzeige.
Allerdings sind mir diese oft zu groß oder gewesen oder haben nur alle Bilder geladen die bereits über einen &#60;img&#62; Tag in der Homepage waren. Ich brauchte aber ein sehr kleines Script, da es auf mobilen Endgeräten ausgeführt werden sollte. Und es sollte [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt bereits sehr viele Scripte die Bilder vorladen mit oder ohne Statusanzeige.</p>
<p>Allerdings sind mir diese oft zu groß oder gewesen oder haben nur alle Bilder geladen die bereits über einen &lt;img&gt; Tag in der Homepage waren. Ich brauchte aber ein sehr <strong>kleines Script</strong>, da es auf <strong>mobilen Endgeräten ausgeführt werden sollte</strong>. Und es sollte nicht automatisch alle Bilder laden sondern <strong>erst auf Knopfdruck.</strong></p>
<p>Leider habe ich dann nichts mehr passendes gefunden, deshalb habe ich mir folgende Funktionen selber geschrieben.</p>
<p>Das preloading wird erst ausgelöst wenn man die Funktion <em>startPreloading()</em> aufgerufen wird. Dann wird der Browser durch das erzeugen eines neuen Bilders und dem <strong>zuweisen einer URL dazu veranlasst dieses Bild zu laden.</strong> (Eigentlich erst durch das zuweisen der URL)</p>
<p>Über das <a href="http://de.selfhtml.org/javascript/objekte/images.htm#complete">Attribut &#8220;complete&#8221;</a> kann nun überprüft werden ob das Laden beendet ist. Ein counter zählt die fertigen durch. Sind alle fertig geladen, dann wird die Funktion <em>doSomething()</em> aufgerufen. <strong>Wichtig dabei ist, dass man die 250ms pause beibehält. Denn wenn man keine Pause einbaut, erzeugt man ein Script, welches den Browser blockiert bis es fertig ist!</strong></p>
<pre class="brush: jscript;">
//Liste der Bilder
var global_imageList = new Array(&quot;bild1.jpg&quot;,&quot;bild2.jpg&quot;,&quot;bild3.jpg&quot;);
//Funktion die das Preloading startet
function startPreloading(){
	//Statusmeldung aktualisieren
	document.getElementById(&quot;status&quot;).innerHTML = &quot;Lade Bilder für Animation...&quot;;
	pictures = new Array();
	if(global_imageList != null &amp;&amp; global_imageList.length &gt; 0){
		//Jedes Bild laden
		for(i=0;i&lt;global_imageList.length;i++){
			tmp_img = new Image();
			tmp_img.src = url;
			pictures[i] = tmp_img;
		}
	}
	//Funktion zum kontrolieren aufrufen
	preloading(pictures);
}

function preloading(pictures){
	counter = 0;
	for(i=0;i&lt;pictures.length;i++){
		if(pictures[i].complete){
			counter++;
		}
	}
	//Wenn alle Bilder geladen sind
	if(counter == pictures.length){
		//Jetzt sind alle Bilder geladen, also:
		doSomething();
	//Sonst status
	} else {
		document.getElementById(&quot;status&quot;).innerHTML = &quot;Lade Bilder für Animation... (&quot;+counter+&quot;/&quot;+pictures.length+&quot;)&quot;;
		//Eine Pause einlegen, sonst bleibt das Script hängen
		setTimeout(function(){preloading(pictures);},250);
	}
}
</pre>
<p>Das Script ist nun auch einfach anzupassen. Man muss nur die global_Imagelist mit seinen Bildern einfügen. Die Statusanzeige Passiert als text, indem der &lt;div&gt; Block mit dem Namen &#8220;Status&#8221; verändert wird.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.neysor.net/2009/09/05/vorladen-von-bildern-mit-statusanzeige/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Excel mit C# lesen</title>
		<link>http://blog.neysor.net/2009/05/25/excel-mit-c-sharp-lesen/</link>
		<comments>http://blog.neysor.net/2009/05/25/excel-mit-c-sharp-lesen/#comments</comments>
		<pubDate>Mon, 25 May 2009 21:25:26 +0000</pubDate>
		<dc:creator>Neysor</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Excel]]></category>

		<guid isPermaLink="false">http://blog.neysor.net/?p=121</guid>
		<description><![CDATA[In einem Ferialpraktikum hatte ich einmal das Problem, dass ich eine Exceldatei aus einer C# Anwendung lesen musste. Dazu habe ich mir 2 Klassen geschrieben. myExcelApplication, welches mir eine Instanz von Microsoft Excel öffnet und nach Beendigung wieder schließt. Und myWorkbook, welche mir den Zugriff auf ein Workbook ermöglicht.
Wichtig sind vor allem die Referenzen. Man [...]]]></description>
			<content:encoded><![CDATA[<p>In einem Ferialpraktikum hatte ich einmal das Problem, dass ich eine Exceldatei aus einer C# Anwendung lesen musste. Dazu habe ich mir 2 Klassen geschrieben. <strong>myExcelApplication</strong>, welches mir eine Instanz von <a href="http://office.microsoft.com/de-at/excel/" title="Microsoft Excel" target="_blank">Microsoft Excel</a> öffnet und nach Beendigung wieder schließt. Und <strong>myWorkbook</strong>, welche mir den Zugriff auf ein Workbook ermöglicht.</p>
<p>Wichtig sind vor allem die Referenzen. Man muss <strong>Microsoft.Office.Core</strong> sowie <strong>Microsoft.Office.Interop.Excel</strong> einbinden, damit es sicher funktioniert <img src='http://blog.neysor.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: csharp; collapse: true; light: false; toolbar: true;">
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices; //Für DllImport!
using System.Diagnostics; //Für Process
</pre>
<p><strong>myExcelApplication:</strong></p>
<pre class="brush: csharp; collapse: true; light: false; toolbar: true;">
public class myExcelApplication : IDisposable
{
	#region user32 Funktionen
	// Windows OS Funktionen deklarieren
	[DllImport(&quot;user32&quot;)]
	private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

	[DllImport(&quot;user32.dll&quot;, SetLastError = true)]
	static extern uint GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);

	// Ende Os Funktionen
	#endregion

	public Excel.ApplicationClass ExApp; //Besitzt alle Excelfunktionen
	private string ApplicationID; //Ist meine Programmid
	private IntPtr hWnd; // Window Handle
	private int iProcID; // Prozess ID des markierten EXCELs
	private Process p = null; // entsprechendes Process object
	public myExcelApplication()
	{
		//defaulteinstellungen
		System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(&quot;en-US&quot;);
		this.ApplicationID = &quot;Excel_&quot; + System.Guid.NewGuid().ToString().ToUpper(); //ID erzeugen
		this.ExApp = new Excel.ApplicationClass(); //Excelklasse zuweisen
		this.ExApp.DisplayAlerts = false; //keine Warnmeldungen Anzeigen
		this.ExApp.AskToUpdateLinks = false; //Updateabfrage deaktivieren
		this.ExApp.Visible = false; //unsichtbar
		this.ExApp.Caption = this.ApplicationID; //Id zuweisen

	}
	~myExcelApplication()
	{
		this.Dispose();
	}

	#region IDisposable Members

	public void Dispose()
	{
		/*
		 * Folgendes funktioniert nicht:
		 * ExApp.Application.Quit(); oder this.ExApp.Quit();
		 * Leider weiß ich nicht mehr woher ich das habe.
		 * Aber deswegen haben wir die EXCEL Applikation markiert
		 */
		hWnd = FindWindow(null, ApplicationID);
		if (hWnd == IntPtr.Zero) return;
		// zu dem Fenster holen wir uns die Prozess-ID ...
		GetWindowThreadProcessId(hWnd, out iProcID);
		if (iProcID == 0) return;
		// erzeugen ein entsprechendes .NET Prozess Objekt ..
		p = Process.GetProcessById((int)iProcID);
		if (p == null) return;
		// jetzt ist Feierabend ...
		p.CloseMainWindow();    // schliesse Fenster
		p.Refresh();            // gebe alle Prozess-Informationen frei
		if (p != null)
		{
			p.Kill();               // und tschuess ...
		}
	}

	#endregion
}
</pre>
<p><strong>myWorkbook:</strong></p>
<pre class="brush: csharp; collapse: true; light: false; toolbar: true;">
public class myWorkbook
{
	public Excel.Workbook myWb;
	public string Datei;
	public myExcelApplication ExApp;
	public bool schreibschutz = false;
	private bool _calculation;
	public bool calculation
	{
		get { return this._calculation; }
		set
		{
			this._calculation = value;
			this.calculate();
		}
	}
	public string aktivsheet;

	public myWorkbook(string datei, myExcelApplication EApp)
	{
		this.Datei = datei;
		this.ExApp = EApp;
	}
	public myWorkbook()
	{
		//leerer konstruktor
	}
	public void open()
	{
		try
		{
			this.myWb = ExApp.ExApp.Workbooks.Open(this.Datei, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
		}
		catch (Exception e)
		{
			//
		}
		//this.myWb = ExApp.ExApp.Workbooks.Open(this.Datei, 0, true, 5, &quot;&quot;, &quot;&quot;, true,Excel.XlPlatform.xlWindows, &quot;\t&quot;, false, false, 0, true, false, false);

		if (this.myWb.ReadOnly) { this.schreibschutz = true; }
		this.calculation = false; //Abschalten der automatischen Berechnung
	}
	public void close()
	{
		object Save = Excel.XlSaveAction.xlSaveChanges; //Speichern oder nicht speichern Variable hier setzen
		this.calculation = true; //Noch einmal schnell rechnen lassen vorm schließen
		this.myWb.Close(Save, Type.Missing, Type.Missing); //schließen
	}
	private void calculate()
	{
		//Schaltet automatische Berechnung ab bzw. aktiviert sie wieder
		if (!this.calculation)
		{
			this.ExApp.ExApp.Calculation = Excel.XlCalculation.xlCalculationManual;
		}
		else
		{
			this.ExApp.ExApp.Calculation = Excel.XlCalculation.xlCalculationAutomatic;
			this.ExApp.ExApp.Calculate();
		}
	}
	public Excel.Range Zelle(int Zeile, int Spalte)
	{
		return (Excel.Range)((Excel.Worksheet)this.myWb.Worksheets[this.aktivsheet]).Cells[Zeile, Spalte];
	}
	public Excel.Range Zelle(int Zeile, int Spalte, string Worksheet)
	{
		return (Excel.Range)((Excel.Worksheet)this.myWb.Worksheets[Worksheet]).Cells[Zeile, Spalte];
	}
}
</pre>
<p>Hier ein Beispiel, wie man mit diesen Klassen, die Erste Zelle des Blattes &#8220;Tabelle1&#8243; auslesen kann:</p>
<pre class="brush: csharp;">
//Applikation starten
myExcelApplication EApp = new myExcelApplication();
//Workbook erzeugen
myWorkbook ExcelFile = new myWorkbook(&quot;c:\\test.xls&quot;, EApp);
//Excelfile öffnen
ExcelFile.open();
//Sheet wählen
ExcelFile.aktivsheet = &quot;Tabelle1&quot;;
//Zeile auslesen
String zelle1 = ExcelFile.Zelle(1, 1).Value2;
//Workbook schließen
ExcelFile.close();
//Applikation schließen
EApp.Dispose();
</pre>
<p><em><strong>Tipp:</strong></em> Schaltet die automatische Berechnung von Zellen ab und erst kurz vorm speichern wieder an. Das spart oftmals wertvolle Rechenzeit <img src='http://blog.neysor.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.neysor.net/2009/05/25/excel-mit-c-sharp-lesen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX light &#8211; Kleine Abfragen ohne großes Framework</title>
		<link>http://blog.neysor.net/2009/05/22/ajax-light-kleine-abfragen-ohne-groses-framework/</link>
		<comments>http://blog.neysor.net/2009/05/22/ajax-light-kleine-abfragen-ohne-groses-framework/#comments</comments>
		<pubDate>Fri, 22 May 2009 18:37:57 +0000</pubDate>
		<dc:creator>Neysor</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Quick and Dirty]]></category>

		<guid isPermaLink="false">http://blog.neysor.net/?p=106</guid>
		<description><![CDATA[AJAX ist eine nette Sache! Dieses Akronym steht für „Asynchronous JavaScript and XML“ und ermöglicht unter anderem dynamisches Nachladen von Inhalten in die HTML Seite. Wer sich ganz genau dafür interessiert, kann ja auf WIKIPEDIA nachschauen  
Natürlich findet man jetzt eine große Menge an Bibliotheken die man nutzen kann und sollte, aber hier möchte [...]]]></description>
			<content:encoded><![CDATA[<p>AJAX ist eine nette Sache! Dieses Akronym steht für „Asynchronous JavaScript and XML“ und ermöglicht unter anderem dynamisches Nachladen von Inhalten in die HTML Seite. Wer sich ganz genau dafür interessiert, kann ja auf <a title="AJAX auf Wikipedia" href="http://de.wikipedia.org/wiki/AJAX" target="_blank">WIKIPEDIA</a> nachschauen <img src='http://blog.neysor.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Natürlich findet man jetzt eine große Menge an Bibliotheken die man nutzen kann und sollte, aber hier möchte ich euch eine <a title="Quick and Dirty" href="http://en.wikipedia.org/wiki/Quick-and-dirty" target="_blank">Quick and Dirty</a> Lösung zeigen.</p>
<pre class="brush: jscript;">
//AJAX Initialisieren und Funktionen zur Handhabung
var request = false;

// Request senden
function setRequest(url,send,irfunction) {
	// Request erzeugen
	if (window.XMLHttpRequest) {
		request = new XMLHttpRequest(); // Mozilla, Safari, Opera
	} else if (window.ActiveXObject) {
		try {
			request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
		} catch (e) {
			try {
				request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
			} catch (e) {}
		}
	}
		// überprüfen, ob Request erzeugt wurde
	if (!request) {
		alert(&quot;Kann keine XMLHTTP-Instanz erzeugen&quot;);
		return false;
	} else {
		// Request öffnen
		request.open('post', url, true);
		// Requestheader senden
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
		// Request senden
		request.send(send);
		// Request auswerten
		request.onreadystatechange = function() {
			interpretRequest(irfunction);
		}
	}
}
// Request auswerten
function interpretRequest(irfunction) {
	switch (request.readyState) {
		// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
		case 4:
			if (request.status != 200) {
				alert(&quot;Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:&quot;+request.status);
			} else {
				irfunction();
			}
			break;
		default:
			break;
	}
}
//ENDE AJAX Funktionen
</pre>
<p>Wie verwendet man diese Funktionen nun richtig?</p>
<p>Angenommen wir haben eine Formular bei dem sich ein User registrieren muss und wir wollen checken ob der Nick schon vorhanden ist.</p>
<p>Dazu verwenden wir eine PHP Datei, die auf im selben Ordner liegt und abfrage.php heißt. Diese macht uns eine MYSQL Abfrage und liefert uns dann false zurück, wenn der Nickname schon vorhanden ist. Die 2 JavaScript Funktionen die wir zusätzlich noch in der HTML Datei brauchen sind folgende:</p>
<pre class="brush: jscript;">
function check_name(nick) {
	//Request abschicken mit Post Variable Nickname
	setRequest(&quot;/abfrage.php&quot;,&quot;nickname=&quot;+nick,check_name_finish);
}
function check_name_finish() {
	var content = request.responseText;
	//Do something
}
</pre>
<p>Die Funktion <em>check_name(nick)</em> <strong>wird vom Inputfeld aufgerufen</strong>, wenn dieses nicht mehr beschrieben wird.  (siehe Code vom Inputfeld). Ist Funktion <em>check_name(nick)</em> <strong>mit der Ausführung fertig</strong>, wird Funktion <em>check_name_finish()</em> <strong>aufgerufen und ausgeführt</strong>. Diese hat nun in der Variable <strong>content</strong> die Antwort der Abfrage und kann nun darauf reagieren.</p>
<p>Und das Inputfeld würde so aussehen:</p>
<pre class="brush: xml; light: true;">
&lt;input type=&quot;text&quot; name=&quot;nickname&quot; value=&quot;&quot; onblur=&quot;check_name(this.value)&quot;&gt;
</pre>
<p>Wie bereits erwähnt ist das hier nur Quick and Dirty! Getestet habe ich es mit den neuesten Versionen von IE und FireFox. Viel Spass damit!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.neysor.net/2009/05/22/ajax-light-kleine-abfragen-ohne-groses-framework/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Variable Variablennamen in PHP</title>
		<link>http://blog.neysor.net/2009/05/09/variable-variablennamen-in-php/</link>
		<comments>http://blog.neysor.net/2009/05/09/variable-variablennamen-in-php/#comments</comments>
		<pubDate>Sat, 09 May 2009 19:32:39 +0000</pubDate>
		<dc:creator>Neysor</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[variablennamen]]></category>

		<guid isPermaLink="false">http://blog.neysor.net/?p=52</guid>
		<description><![CDATA[Ofmals kann es sehr Hilfreich sein, wenn man die Variablennamen variabel angeben kann. Dies ist in PHP sehr einfach möglich indem man noch ein zusätzliches $ vorransetzt.

$var = &#34;test&#34;;
$test = &#34;Hallo&#34;;
echo $$var;

Dieses Beispiel liefert ein schönes &#8220;Hallo&#8221; zurück.
Das ganze kann man sogar noch besser nutzen!
Besitzt man zum Beispiel mehrere Variablen die sich nur am Schluss [...]]]></description>
			<content:encoded><![CDATA[<p>Ofmals kann es sehr Hilfreich sein, wenn man die <strong>Variablennamen variabel angeben kann.</strong> Dies ist in PHP sehr einfach möglich indem man noch ein<strong> zusätzliches $ vorransetzt.</strong></p>
<pre class="brush: php;">
$var = &quot;test&quot;;
$test = &quot;Hallo&quot;;
echo $$var;
</pre>
<p>Dieses Beispiel liefert ein schönes &#8220;Hallo&#8221; zurück.</p>
<p>Das ganze kann man sogar noch besser nutzen!<br />
Besitzt man zum Beispiel mehrere Variablen die sich nur am Schluss durch eine Zahl unterscheiden  (z.b.: Feld1, Feld2, Feld3, Feld4) so kann man diese schnell in ein Array umwandeln!</p>
<pre class="brush: php;">
$Feld1 = &quot;Das&quot;;
$Feld2 = &quot; ist&quot;;
$Feld3 = &quot; ein&quot;;
$Feld4 = &quot; Test&quot;;

for($i=1;$i&lt;=4;$i++){
	$array[$i] = ${&quot;Feld&quot;.$i};
	echo $array[$i];
}
</pre>
<p>Dieses Beispiel gibt &#8220;Das ist ein Test&#8221; zurück.</p>
<p>Einfach oder? <img src='http://blog.neysor.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.neysor.net/2009/05/09/variable-variablennamen-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
