FH Technikum Wien Kalender synchron in Google Kalender

Feb 05
2010

Jeder kennt das Problem: Zu viele Termine! Als ob das nicht reichen würde, stehen die auch noch in den unterschiedlichsten Kalendern! 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.

Was macht man nun? Man versucht sich alles in einem Kalender synchron zu halten. Mit vielen E-Mail Clients ist es ganz einfach: ICal Datei anklicken, Kalender abonnieren, fertig! (Tipp: Bei Outlook muss man statt https:// auf webcal:// ändern, sonst geht da auch nix)

Leider funktioniert Google Kalender nicht mit der ICal Datei der Fachhochschule Technikum Wien.
Warum? Weil Google Kalender keine HTTP Authentifizierung unterstützt und man sich für seinen privaten Kalender leider einloggen muss.

Es funktioniert allerdings trotzdem, mit einem kleinen Trick. Was ihr dazu benötigt ist ein PHP fähiger Webserver. Den bekommt ihr auch bei vielen Anbietern gratis, falls ihr noch keinen habt. Einfach ein wenig googlen. (Ich habe vor meinem jetzigen noch funpic.de benutzt und war sehr zufrieden. Das ist allerdings schon Jahre her :) )

So nun weiter:
Ihr müsst eine neue PHP Datei erstellen. Das ist einfach eine normale Textdatei (*.txt) die ihr auf .php umbenennt. Als Inhalt schreibt ihr folgendes (macht einfach copy+paste):

<?php
$url = "xyz";
$lines = file($url);
foreach ($lines as $line_num => $line) {
    $line = str_replace("PRODID:FH Technikum Wien","PRODID:FH Technikum Wien\nX-WR-TIMEZONE:Europe/Vienna",$line);
	echo $line;
}
?>

Statt dem xyz in der 2. Zeile müsst ihr eine veränderte Version der ICal URL angeben. Ich erkläre es hier an meinem Beispiel: meine ICAL URL lautet

https://cis.technikum-wien.at/cis/private/lvplan/stpl_kalender.php?type=student&pers_uid=tm09m002&ort_kurzbz=&stg_kz=301&sem=2&ver=B&grp=%20&gruppe_kurzbz=&begin=1265324400&ende=1278280800&format=ical&version=2&target=ical

Nun fügt ihr zwischen dem https:// und dem cis.technium-wien.at euren Usernamen und euer Passwort ein und zwar so, dass ihr username:passwort@ schreibt. In meinem Beispiel (natürlich nicht mit meinem echten Passwort) sieht das dann so aus:

https://tm09m002:MeinGenialesPasswort@cis.technikum-wien.at/cis/private/lvplan/stpl_kalender.php?type=student&pers_uid=tm09m002&ort_kurzbz=&stg_kz=301&sem=2&ver=B&grp=%20&gruppe_kurzbz=&begin=1265324400&ende=1278280800&format=ical&version=2&target=ical

Damit seid ihr auch schon fast fertig. Ihr speichert die PHP Datei ab. Der Name der Datei ist irrelevant, nennt sie allerdings einfachhalber “fhcalendar.php” Diese “fhcalendar.php” ladet Ihr nun auf euren Webspace hoch. Hier nehme ich nun als Beispiel meinen Webspace. Ich lade sie also unter http://www.neysor.net/fhcalendar.php hoch.

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. (und deshalb werdet ihr unter der URL auch nicht meinen Kalender finden :D )

Diese URL gebt ihr nun im Menü bei Google Kalendar an (Hinzufügen->Über URL hinzufügen) und schon habt ihr den FH Kalender immer synchron. Das ganze müsst ihr jedes Semester wiederholen (bzw. die URL anpassen), da sich die Adresse der ICal Datei pro Semester ändert.

Jetzt zur kurzen Erklärung was passiert:
Die fhcalender.php liest einfach die ICal Datei aus und gibt sie genau so wieder. Durch das username:passwort@ erledigt die PHP Datei den Login für euch.

Die zusätzliche Funktion “string_replace” 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.

Bookmark and Share

FindMe

Dec 07
2009

FindMe
Nicht mehr suchen, sondern finden!

projektlogo_transparentKurzfassung:

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 der jeweilige Freund entfernt ist, der einen abholen soll. Abgesehen von netten Informationen ist sicher ein gewisser Spaßfaktor in der Freizeit gegeben.

Entstehungsgeschichte:

Diese Software entstand in einem Unterrichtsfach des Studiengangs “Intelligente Verkehrssysteme” der FH Technikum Wien. In diesem Unterrichtsfach musste ein Projekt bis zur Bachelorarbeit gestaltet werden. Das “FindMe” Team hatte dann die Idee dieser Applikation.

In 4 Semestern wurde sie dann umgesetzt und ist heute bei Sourceforge unter der GPL zu finden.

Wie FindMe funktioniert:

Um die Funktion von FindMe zu gewährleisten wurde das System in 3 Teile unterteilt. Dem GPS Empfänger, dem Server und dem Handy. Hier der Systemüberblick:SystemüberblickDas Handy erhält über die Bluetoothverbindung die GPS Daten und sendet Sie an den Server. Gleichzeitig kontrolliert das Handy ob neue Freundschaftsanfragen vorhanden sind und lädt die Positionsdaten von benötigten Freunden herunter.

Freundschaftseinladungen sind analog den sozialen Netzwerken wie Facebook und co. umgesetzt. Erst wenn beide Parteien die Freundschaft akzeptiert haben, können daten versendet werden.

Aussehen der Applikation auf dem Mobiltelefon:

Da das Projektteam wollte, dass es auf so gut wie jedem Mobiltelefon läuft, wurde das Design recht schlicht gestaltet. Ein Freund wird durch einen farbigen Punkt repräsentiert und man selbst ist immer der rote Punkt in der Mitte. Ein blauer Pfeil zeigt die berechnete Nordrichtung an. Das ganze funktioniert auch mit Fixpunkten.

screens123Mehr Screenshots findet ihr im Benutzerhandbuch!

Kann man FindMe nun einfach downloaden und schon gehts los?

Nein, das kann man leider derzeit nicht. Wie bereits erwähnt benötigt das System einen Server. Dieser ist derzeit inaktiv und wird nicht mehr verwendet. Da das Projekt allerdings unter GPL als OpenSource verfügbar ist, kann man es gerne downloaden auf seinem eigenen Server und Mobiltelefon installieren und dann loslegen.

An dieser Stelle möchte ich mich noch einmal sehr bedanken bei meinen Kollegen die mit mir dieses Projekt damals umgesetzt haben!

  • Christoph Chmela
  • Petrina Papazek
  • und Lucas Weiß

Mehr informationen?

http://sourceforge.net/projects/findme/

Dort findet ihr alles von Projektplänen bis Quelltext, JavaDoc bist Vortragsmaterialien!
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!

Bookmark and Share

Pixar Intro Parody

Oct 20
2009

Endlich Gerechtigkeit für das “I” :D Aber seht selbst:


Quelle: Collegehumor

Bookmark and Share

GPS Tracker i-gotU GT-200e im Test!

Sep 27
2009

Vor ein paar Wochen schrieb mich die Firma Mobile Action an und wollte dass ich Ihr Produkt i-gotU GT-200e teste. Da ich schon vorher GPS Software getestet habe (siehe GPS Cycle Computer) und mich allgemein dieser Tracker interessiert hat, habe ich natürlich freudig zugestimmt.

Nach nur wenigen Tagen hatte ich das Paket mit dem Empfänger erhalten. In der Verpackung enthalten sind das Gerät, ein Lade- und Übertragungskabel und ein Band zum Befestigen.

verpackung Recht praktisch finde ich, dass es nur ein Kabel sowohl zum Laden des Gerätes als auch zum Übertragen der Daten gibt. Immer wieder ärgere ich mich bei meiner alten Digicam, dass ich 2 unterschiedliche dafür brauche :)

Um das Device kann man einen Gummimantel anlegen, der es erlaubt das Befestigungsband zu montieren. Ebenso kann man auf der rechten oberen Ecke eine Schlaufe (ähnlich bei Handys oder Digicams) durchziehen. Leider ist keine Schlaufe im Umfang dabei und ebenso kein Klips. Das heißt, man muss sich das Gerät immer umbinden und kann es leider nirgends anklipsen. Ein Klips im Style von Apples IPod Shuffle Gen3 hätte mich vor allem beim laufen gefreut. Aber dazu nachher mehr.

sizeAuch nicht schlecht sind die Abmessungen des Gerätes. Um das ganze einmal plakativ zu zeigen, habe ich das Gerät neben eine 1-Euro Münze gelegt.

Man kann dadurch gut sehen, dass es in etwa in der Gröߟe eines Fahrradtachos ist, wenn auch ein wenig dicker.

Das Gewicht des Gerätes beträgt 42 Gramm.

Wozu braucht man nun so ein Gerät?
Im Gegensatz zu Navigationsgeräten oder anderen üblich bekannten GPS Empfängern, hat es kein Display. Das braucht ein Tracker auch nicht. Es soll lediglich die Strecke aufzeichnen die man zurücklegt, um sie dann auf seinen Computer laden zu können. Der Fokus bei einem solchen Gerät liegt in meinen Augen in einer langen Akkulaufzeit, einer wetterfesten Hülle und einer geringen Größe bei maximalen Speicher.

Dieses Gerät besitzt allerdings auch noch eine Bluetooth Schnittstelle um die GPS Daten mit anderen Geräten teilen zu können. Das finde ich, ist ein besonders gutes Feature! Denn wenn man sich irgendwo verläuft, kann man das Handy verwenden um sich zumindest die aktuelle Position auszugeben.

Aber auch Navigationssoftware auf Mobiltelefonen die kein GPS besitzten, kann dadurch verwendet werden. Leider konnte ich dieses Feature nicht testen, da mein Handy (Xperia X1) es nicht ermöglicht, über JavaME das Bluetooth Modul anzusprechen und damit meine Testsoftware zu verwenden. Ich versuche diesen Test später einmal nachzuholen.

Kommen wir nun zu meinen Tests!

Test 1: Einfach los!

Meiner Meinung nach muss ein solches Gerät ohne langer Spielerei funktionieren. Deswegen habe ich es kurzerhand genommen und bei einer Fahrt in die Stadt verwendet. Laut Anleitung einfach den Button 1,5 Sekunden drücken und los.

Gesagt getan habe ich den Button gedrückt und auf die Armatur des Autos “geworfen”. Am Ziel angekommen habe ich es abgeschaltet und beim Heimweg das selbe noch einmal.

Zuhause habe ich das Gerät angeschlossen und war doch überrascht, dass es so gut funktioniert hat. Meine Strecke wurde aufgezeichnet und die hin und Retourfahrt waren in 2 unterschiedlichen Farben. Einzig beim zurückfahren brauchte das Gerät doch länger die Satelliten zu finden und die Strecke ging aufgrund meiner Rücksichtslosigkeit verloren. :)

Über die mitgelieferte Software kann man die Strecke auch gleich auf a-trip.com hochladen und teilen. Bis zu 100MB werden einem dort zur Verfügung gestellt. Auf meine Anfrage bezüglich weiterer MB wurde mir erklärt, dass dies künftig möglich sein wird, jedoch noch weiterer Planung bedarf. Wird allerdings eine Route als TOP bewertet, dann befindet sie sich außerhalb dieser 100MB Grenze.

Diese Teststrecke findet ihr unter http://www.a-trip.com/tracks/view/33543

Man muss allerdings seine Strecke nicht hochladen. Man kann sie auch in GPX oder MHT konvertieren oder aber auch einfach nur in der Software verwalten.

Test2: Laufen mit i-gotU

Beim laufen möchte ich natürlich so wenig wie möglich an meinen Körper haben. Nicht einmal eine Uhr will ich haben. Also wohin mit dem i-gotU Receiver? Nach kurzem überlegen kam mir die Lösung! Einfach auf den Schuh befestigen!

schuhKlar reicht das Band auch aus den Receiver am Handgelenk zu befestigen, doch das fand ich persönlich nicht angenehm. Die Befestigung am Schuh war einfach ideal für mich. Das Gewicht des Gerätes war nicht merkbar und während des Laufens musste ich sogar kontrollieren, ob ich es eh noch nicht verloren hatte, weil so gut gehalten hat :)

Auch diese Strecke habe ich wieder auf a-trip.com hochgeladen und ihr könnt sie über http://www.a-trip.com/tracks/view/33544 aufrufen. Man merkt gleich die sportlichere Ansicht die ebenso auch Höhenmeter etc. anzeigt.

Test3: Radfahren und Geotagging

Als vorletzten Test wollte ich noch während einer Radfahrt das Geotagging ausprobieren. Das ist jetzt nicht unbedingt ein Feature des Gerätes als mehr auch der beigelegten Software. Ziel ist es, mithilfe der mitgetrackten Strecke, festzustellen wo die Fotos mit der Digicam aufgenommen wurden und sie dann geeignet auf eine Karte zu platzieren.

rad_seite

In meinem Test bin ich wieder eine Route auf der Donauinsel abgefahren und habe dabei während des Fahrens fotografiert. Zu Hause angekommen habe ich die Fotos sowie die Strecke in das Programm gespielt und dieses hat dann die Strecke generiert, welche ihr unter http://www.a-trip.com/tracks/view/33542 betrachten könnt. Ebenso spielt die Software die berechnete Geoinformation in die EXIF Header der Fotos zurück und ermöglicht so anderer Software auch auf diese Information zuzugreifen.

Trotz dessen, dass ich mich im schnitt mit 21km/h bewegt habe, hat die Software die Bilder auf ca. 10m genau setzten können. Ich finde das wirklich gut! Will man die Fotos genauer platziert haben, sollte man einfach nur länger am betreffenden Punkt stehen bleiben. Doch wer braucht das schon genauer?

rad_nah

Test4: Die Wasserleitung VS i-gotU

Wie bereits erwähnt muss so ein Gerät auch Wetterfest sein. Um das schnell zu testen, habe ich es einfach einmal unter meine Wasserleitung gehalten. Nach ein paar Sekunden habe ich das Gerät wieder aus dem Wasserstrahl geholt und es funktioniert noch immer einwandfrei. Somit ist dieser Test auch zu meiner Zufriedenheit erledigt :)

FAZIT:

Also ich bin sehr Zufrieden mit diesem Produkt. Es ist einfach zu bedienen, wiegt wenig und macht einen wetterfesten Eindruck (siehe Test4). Der Preis mit ca. 79€ ist auch günstig. Man kann ihn sowohl als externen GPS Empfänger verwenden als auch schön zum tracken seiner strecken. Durch das geringe Gewicht und die einfachen Befestigungsmöglichkeiten ist es ziemlich gut zum Einsetzten.

In meinen Tests ist mir jetzt nichts besonders negativ aufgefallen. Gerade die Software könnte noch ein wenig überarbeitet werden. Denn um den Titel einer Strecke zu ändern muss man doch recht kompliziert durchs Menü gehen :) Auch das ich auf der Karte mit dem mittleren Mausrad nicht zoomen konnte störte mich ein wenig :D

Alles in allem ein gutes Gerät das ich nur empfehlen kann.

Ich werde noch einiges weiter testen und wenn mir etwas besonders auffällt, erfährt ihr es als erstes :) Demnächst gehe ich auch wandern und beim Snowboarden den Winter wird das Gerät sicher nicht fehlen!

Edit: Habe die Modellnummer noch hinzugefügt um Verwechslungen vorzubeugen. Außerdem habe ich mich im Preis verschaut. Dies wurde nun korrigiert.

Bookmark and Share

Gestreifte Tabelle mit JavaScript Teil 1

Sep 19
2009

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.

Doch wie macht man das nun einfach in JavaScript? Ich werde nun erklären wie das geht und einige Erweiterungen dazu geben.

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!

Leider gibt es das Problem, dass CSS Eigenschaften auf der Tabellenreihe nicht ziehen. Deswegen färben wir jede Tabellendata (<td>)  einzeln.

/**
* 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 = "#ffffff";
	//Farbe für gerade Zeilen
	var oddColor = "#eeeeff";
	//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("tbody");
	//Wichtig hier ist es, dass es laut Definition mehrere tbodys geben kann! Deswegen die Schleife
	for (var h = 0; h < tbodies.length; h++) {
		//Wir holen uns die Reihen
		var trs = tbodies[h].getElementsByTagName("tr");
		//Wir laufen eine Reihe nach der anderen durch
		for (var i = 0; i < trs.length; i++) {
			//Wir laufen nun alle Tabellendata durch
			for (var j = 0; j < tds.length; j++) {
				//Jetzt noch schnell den Hintergrund färben
				tds[j].style.backgroundColor = even ? evenColor : oddColor;
			}
			//Farbwechsel realisieren
			even =  ! even;
		}
	}
}

Ist jetzt glaube ich nicht so schwer. Deswegen werden wir diese Funktion erweitern!

Nehmen wir einmal an, wir wollen über ein PHP Script bestimmte Zellen schon vorfärben die unsere Funktion nicht ändern soll. Das heißt es sollen nur die geändert werden die keine Hintergrundfarbe besitzten.

Auch das ist noch relativ einfach gemacht. Wir müssen dazu nur eine if verzweigung vor dem färben hinzufügen :)

for (var j = 0; j < tds.length; j++) {
				if(!tds[j].style.backgroundColor){
					tds[j].style.backgroundColor = even ? evenColor : oddColor;
				}
			}

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.

Ebenso zeig ich euch eine Einfach variante mit der man auf unterschiedlichen Farben reagieren kann.

Denn leider ist es nicht möglich mit einem

if(tds[j].style.backgroundColor == "#FFFFFF")

zu vergleichen. Vor allem weil wenn man mit einem

alert(tds[j].style.backgroundColor);

Im InternetExplorer den Hexwert erhält und im FireFox einen rgb wert.
Freut euch schon auf Teil 2 :)

Bookmark and Share

Noch immer Ärger mit Word 2007?

Sep 05
2009

Seit über 2 Jahren gibt es bereits das Office 2007 Paket. Microsoft brachte es gleichzeitig mit dem Betriebssystem Windows Vista am 30. Jänner 2007 heraus. Doch noch immer stelle ich fest, dass es Personen gibt, die das 2003 vorziehen.

Wenn man diese Frage wirklich auf Privatanwender auslegt, ist die Begründung oftmals die Bedienung. War doch die Menüführung von Office 2003  anders als die von 2007. Damals lernte man mühsam am Word 2003 wo die Menüpunkte versteckt waren und wie man sich sein Dokument zusammenbastelt.

Dabei hat Microsoft für den Umstieg interaktive Referenzhandbücher angelegt! Unter http://office.microsoft.com/de-at/word/HA100744321031.aspx kann man zum Beispiel das für Word öffnen.

Als Hauptansicht ist die Menüleite des alten Words zu sehen. Wählt man einen Menüpunkt aus, zeigt einem das Handbuch wo er nun im Word 2007 zu finden ist. Wer also willens ist umzulernen hat hiermit ein echt nettes Tool zur Verfügung.

Ich muss zugeben: Als ich meine erste größere Arbeit mit Word 2007 geschrieben hatte, war ich auch ein wenig frustriert. Es war ungewohnt und man lernt nicht gerne um, wenn man eigentlich wichtigeres zu machen hat. Allerdings ist es meiner Meinung nach wirklich einfacher zu bedienen!

Ebenso ärgerlich ist (passend zu dem Thema), dass noch immer nicht alle Leute in der Lage sind die neuen Dateiformate von Office 2007 zu öffnen. Also wenn ich davon ausgehe, dass der Empfänger es nur lesen möchte, schicke ich ein PDF, aber sonst muss er mit einem docx oder xlsx rechnen. :)

Die Hauptausrede Nr 1, warum man diese nicht öffnen kann? Ich habe leider nur Office 2003!

Aber Leute!
Dafür gibt es doch schon seit Ewigkeiten ein Update. Unter http://office.microsoft.com/de-at/word/HA100744321031.aspx kann man es downloaden und installieren. Damit kann man alle neuen Dateiformate im alten Office öffnen.

Warum allerdings einige Firmen das auch noch nicht installiert haben, ist mir ebenso ein Rätsel. :)

Naja soviel zum Ärger mit dem “neuen” Office 2007 :D

Bookmark and Share

Vorladen von Bildern mit Statusanzeige

Sep 05
2009

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 <img> 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 nicht automatisch alle Bilder laden sondern erst auf Knopfdruck.

Leider habe ich dann nichts mehr passendes gefunden, deshalb habe ich mir folgende Funktionen selber geschrieben.

Das preloading wird erst ausgelöst wenn man die Funktion startPreloading() aufgerufen wird. Dann wird der Browser durch das erzeugen eines neuen Bilders und dem zuweisen einer URL dazu veranlasst dieses Bild zu laden. (Eigentlich erst durch das zuweisen der URL)

Über das Attribut “complete” 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 doSomething() aufgerufen. 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!

//Liste der Bilder
var global_imageList = new Array("bild1.jpg","bild2.jpg","bild3.jpg");
//Funktion die das Preloading startet
function startPreloading(){
	//Statusmeldung aktualisieren
	document.getElementById("status").innerHTML = "Lade Bilder für Animation...";
	pictures = new Array();
	if(global_imageList != null && global_imageList.length > 0){
		//Jedes Bild laden
		for(i=0;i<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<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("status").innerHTML = "Lade Bilder für Animation... ("+counter+"/"+pictures.length+")";
		//Eine Pause einlegen, sonst bleibt das Script hängen
		setTimeout(function(){preloading(pictures);},250);
	}
}

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 <div> Block mit dem Namen “Status” verändert wird.

Bookmark and Share

Qando – Test

May 31
2009

Die WienerLinien und der Verkehrsbund Ost-Region stellen seit kurzem ein neues Mobiles Service zur Verfügung. Es nennt sich QANDO und soll immer genau über Fahrpläne und Abfahrtszeiten der öffentlichen Verkehrsmittel informieren. Die Auswahl der unterstützen Geräte ist sehr groß! Es gibt Versionen für JavaMe, Windows Mobile, IPhone, Nokia und Blackberry.

Da ich sehr oft mit den WienerLinien unterwegs bin, habe ich natürlich sofort das Programm für Windows Mobile downgeloadet und getestet.

Startet man das Programm so kommt man direkt in das Hauptmenü.

qando_hauptmenu

Wie man gleich sehen kann, wird die oberste WindowsMobile Leiste von diesem Quandobalken überschrieben. Das finde ich schon sehr schlecht, da man jetzt weder die Uhrzeit mehr sehen kann, noch andere wichtige Informationen die einem über diese Leite übermittelt werden (z.b. SMS Empfang etc.)

Die einzelnen Menüpunkte sind viel zu klein als das man sie gut mit dem Finger wählen kann. Vor allem bei Untermenüs oder der Scrollleiste wird das ganze dann ohne Stift zum Alptraum.

Die Fahrplanauskunft funktioniert wie auf www.wienerlinien.at. Einfach Start und Zielpunkt auswählen und schon bekommt man eine Route präsentiert. Dabei kann man seine GPS Position genauso verwenden wie Adresseangaben und Stationsamen. Ebenso wie auf der Homepage lassen sich kleine Kartenausschnitte anzeigen. Leider sind diese meiner Meinung nach oftmals viel zu klein. Man kann sie nicht scrollen und bekommt deshalb oftmals keinen ausreichenden Überblick.

Hier 3 Screenshots für die Fahrtplanauskunft von Reumannplatz zum Stephansplatz.

qando_fahrplan1 qando_fahrplan2 qando_fahrplan3

Die Echtzeitanzeige ist wirklich cool :) Man gibt einen Stationsbaneb an und erhält die dortige Abfahrtsanzeige. Ich habe mich jetzt nicht neben eine gestellt und die Zeiten verglichen, aber bin mit einen Bus gefahren und habe Stationen gewählt die vor mir lagen. Es hat ziemlich gut gepasst. Allerdings aufgepasst! Sie funktionieren nur so gut wie die in den Stationen. Das heißt 5min muss nicht 5min bedeuten, weil ja der Bus mal schneller und langsamer als geplant vorran kommen kann! Außerdem ist mir nicht ganz klar, warum ich keine Anzeigen von U Bahnen erhalten habe. Auch sind nicht alle Busse abgedeckt. Doch unter der grafischen Darstellung findet man noch als Text von allen Verkehrsmittel die nächsten Abfahrtszeiten als Text. Wenigstens was :)

qando_echtzeit1 qando_echtzeit2

Nett ist auch, dass man genau sieht was für ein Typ von Verkehrsmittel kommt. Also ein Doppelbus oder ein einfacher. Eine moderne ULF Straßenbahn, oder eine alte :) Negativ hingegen ist, dass man dauernd auf aktualisieren klicken muss. Hier hätte ich mir erwartet, dass alle 30Sekunden ein Autorefresh kommt! Außerdem baut sich bei jedem aktualisieren der ganze Bildschirm neu auf… Viel schöner wäre es, wenn sich nur die neuen Informationen überlagern würden. So hat man oftmals ein paar Sekunden einen weißen Schirm, bevor man wieder was sehen kann :)

Die restlichen Menüpunkte waren langweilig. Tickets brauche ich mir keine zu kaufen und die sonstigen Informationen sind kaum brauchbar. Gott sei dank kann man sich unter Optionen diese zusätzlichen Infos in den anderen Menüs deaktivieren!

MEIN FAZIT:

Für spontane und schnelle Information ist es recht nett, obwohl man sich mehr Finger-TouchSupport wünschen würde. Die Echtzeitanzeige ist prima, vor allem wenn man nicht ewig in der Station warten will, sondern den Bus genau timen möchte. Sollte man allerdings mehr Zeit für die Planung haben, würde ich weiterhin auf die Homepage der Wiener Linien schauen. Dort ist die Auskunft besser aufbereitet und man kann über GoogleMaps auch schöner die diversen Straßen anschauen, bevor man sich dort verläuft :D

Übrigens:

Die JavaME Version ist bei mir dauernd abgestürzt. Auch eine Freundin hatte Probleme mit ihrem Handy… Dieser Test ist nur für die WindowsMobile auf dem XperiaX1 gemacht worden. Ich nehme an durch das SDK vom IPhone wird dort z.b. der Finger-TouchSupport besser sein :)

Bookmark and Share

General Motors Crash Tests 1960

May 30
2009

Ich bin heute zufällig auf ein Crash Test Video auf Youtube gestoßen. Sehr beeindruckend und mit netter Musik untermalt. Dadurch wird das schreckliche Ergebnis ganz schön heruntergespielt :)

YouTubeLink: http://www.youtube.com/watch?v=Tb_e3tllSfE

Bookmark and Share

Excel mit C# lesen

May 25
2009

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 muss Microsoft.Office.Core sowie Microsoft.Office.Interop.Excel einbinden, damit es sicher funktioniert :)

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

myExcelApplication:

public class myExcelApplication : IDisposable
{
	#region user32 Funktionen
	// Windows OS Funktionen deklarieren
	[DllImport("user32")]
	private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

	[DllImport("user32.dll", 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("en-US");
		this.ApplicationID = "Excel_" + 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
}

myWorkbook:

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, "", "", true,Excel.XlPlatform.xlWindows, "\t", 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];
	}
}

Hier ein Beispiel, wie man mit diesen Klassen, die Erste Zelle des Blattes “Tabelle1″ auslesen kann:

//Applikation starten
myExcelApplication EApp = new myExcelApplication();
//Workbook erzeugen
myWorkbook ExcelFile = new myWorkbook("c:\\test.xls", EApp);
//Excelfile öffnen
ExcelFile.open();
//Sheet wählen
ExcelFile.aktivsheet = "Tabelle1";
//Zeile auslesen
String zelle1 = ExcelFile.Zelle(1, 1).Value2;
//Workbook schließen
ExcelFile.close();
//Applikation schließen
EApp.Dispose();

Tipp: Schaltet die automatische Berechnung von Zellen ab und erst kurz vorm speichern wieder an. Das spart oftmals wertvolle Rechenzeit :)

Bookmark and Share

Visit Our Friends!

A few highly recommended friends...

Archives

All entries, chronologically...

Pages List

General info about this blog...