Tip: Wolfram|Alpha

Schon vor einiger Zeit wurde ich auf Wolfram Alpha aufmerksam, allerdings war ich bis vor kurzem der Meinung es ist ein etwas besserer Taschenrechner. Nun wurde ich eines besseren belehrt, indem ich auf zwei Videos hingewiesen wurde, in denen sehr schön die Mächtigkeit von Wolfram Alpha demonstriert wird.

Beispiel:
“2 cups orange juice + 1 slice cheddar cheese” liefert eine genaue Auflistung der Kalorien und Bestandteile und Rechnungen wie “height of mt everest / length of golden gate bridge” sind damit auch kein Problem mehr.

Part 1
Part 2

http://www.wolframalpha.com/

Reinschauen lohnt auf jeden Fall :-)

Keine Kommentare

Probleme und Lösungen mit JS/jQuery

Nachdem ich mich die letzte Woche mit jQuery etwas beschäftigt habe, möchte ich hier einmal kurz die aufgetretenen Probleme und die damit verbundenen Lösungen festhalten:

Parallele Abläufe
Da es in Javascript und somit auch in jQuery keine Threads gibt und eine endlose while Schleife keine Parallelität bietet (und ausserdem den Browser abstürzen lässt) muss ein anderes Konstrukt herhalten. Die Lösung hier lautet Rekursion (schön erklärt von Markus Kühle auf Javathreads).

setTimeout mit Parametern
Auf anhieb findet man für die Rekursion viele Beispiele mit der setTimeout Methode, leider aber immer ohne Parameterübergabe (in meinem Beispiel der CountUp):

setTimeout("countUp()", 1000);

Sobald nun countUp() mit einem Parameter übergeben werden soll, funktioniert dieser Aufruf nicht mehr. Die Lösung war, den ersten Parameter der setTimeout Methode durch eine Funktion zu ersetzen:

setTimeout(function(){
	countUp(date);
}, 1000);

Countup und die Zeit
Ich hatte eigentlich erwartet dass mich Google mit kleinen Codeschnipseln überhäuft wenn es um einen Simplen Countup für Zeit geht. Gefunden habe ich ein paar wenige, die aber so unschön anzuschauen waren, dass ich mir kurzerhand was kleines Simples selbst zusammengeschrieben habe:

//Parameter inzwischen global um einfach und dynamisch zur Laufzeit zu ändern
var year, month, day;
 
function countUp(){
        //month-1 da die Monate von 0-11 codiert sind
	var startDate = new Date(year, month-1, day, 0, 0, 0);
	var currentDate = new Date();
 
	var diff = new Date(currentDate.getTime() - startDate.getTime());
 
	//(diff.getYear()-70) da der Zeitliche Nullpunkt bei 1970 liegt, und wir nur die Anzahl der Jahre benötigen
	var diffString = "Years " + (diff.getYear()-70) + " Months " + diff.getMonth() + " Days " + diff.getDate() + 
		" Hours " + diff.getHours() + " Minutes " + diff.getMinutes() + " Seconds " + diff.getSeconds();
 
        //String schreiben
	$('#countUpDiv').html(diffString);
 
        //rekursiver Aufruf
	setTimeout(function(){
		countUp();
	}, 1000);
}

noch ein Tip zum Schluss
Um die komplette jQuery Doku auch offline (solls ja ab und zu geben…) nutzen zu können, gibts diese auch als PDF oder sogar als Windows Help File zum Download.
Link

Keine Kommentare

Nichtraucher mit jQuery

Nachdem ich seit inzwischen 3 Wochen dem Laster des Rauchens trotze und in meiner freien Zeit vor Praxisphase und Bachelorarbeit noch etwas sinnvolles machen wollte, habe ich mich etwas mit dem Javascript/AJAX Framework jQuery beschäftigt. Beides kombiniert, kommt bei mir eine kleine Nichtraucher”Uhr” raus:

Zur Zeit wird das Datum der letzten Zigarette (, durchschnittliches Gerauche und Preis einer Schachtel erfasst und daraus die Zeit als Nichtraucher und das dabei gesparte Geld errechnet.

In Zukunft wird die Toplist noch um das gesparte Geld erweitert, eine kleine API gebastelt die die “Uhr” ausgeben kann (ohne angemeldet zu sein) und bei ganz viel Laune wird noch das Standarddesign ersetzt.

Wer sich nicht registrieren will, kann sich mit test/test auch das innenleben mal amschauen.

Eine schöne Sache dieses jQuery :-)

2 Kommentare

Rückmeldung zum Wintersemester 2010/11

Zur Erinnerung: vor einer knappen Woche hat wieder die Rückmeldefrist fürs nächste Semester begonnen (231 Euro) und kann bis zum 04.08.2010 überwiesen werden.

Alle benötigten Daten sind hier zu finden: Link

Keine Kommentare

Java 4-Ever

Ein kleines Video was grade unter den Kommilitonen die Runde macht und mehr als sehenswert ist!

Edit: Video tut wieder!

Keine Kommentare

iPad nun doch nützlich!

War eigentlich meine Idee, doch nach kurzem gegoogle musste ich feststellen, zumindest die Idee hatten schon andere:

Bildursprung ist leider nimmer festzustellen (wahrscheinlich dailyburn.com )

Keine Kommentare

RESTful Redirect über onchange Javascript Event

Für unser “Projekt Systementwicklung” basteln wir grade ein Web Frontend für die weTravel iPad App. In diesem Zusammenhang wollten wir über eine Select-Box zwischen verschiedenen, hochgeladenen Reports wechseln.

Eigentlich keine große Sache:

<select onchange="javascript:window.location=this.value">
  <option value="url" >anderer Beitrag</option>
</select>

Aber: mit diesem Skript wird in REST nur der letzte Parameter (also zB beitrag/3/kommentar/8… ) geändert, also die 8 einfach durch die url ersetzt und somit ist es nicht möglich nur den Beitrag (in meinem Beispiel) zu ändern.

Die Lösung ist denkbar simpel: wir schreiben die komplette URL und konstruieren uns den kompletten Pfad neu. Über einen Slash vor this.value im kleinen Javascript können wir nun die komplette URL löschen:

onchange="javascript:window.location= '/' + this.value"

und die url im value Parameter entsprechend nachzukonstruieren, bei uns in Rails hätte es so aussehen:

<option value=<%= "beitrag/" + beitrag.id.to_s + "/kommentar" %>

Wie immer, wenn mans einmal gesehen hat ist es eine total simple Geschichte, der Trick der uns gefehlt hatte war der Slash im onchange um die komplette URL zu löschen :-)

Keine Kommentare

Little School Helper – Zeugnis schreiben leicht gemacht

Sodale,

nach ca 1 Jahr Freizeitentwicklung, vielen Pausen, einem kompletten Neustart aufgrund fehlender Planung und der Weitsicht im Datenbankdesign, möchte ich nun den “Little School Helper” vorstellen.

Die Idee entstand durch meine Mutter: Zuzuschauen wie die heutigen Grundschullehrer Zeugnisse schreiben macht jeden Informatiker traurig. Das werden Wordtemplates auf USB Sticks ausgetauscht um sich im schlimmsten Fall gegenseitig das Geschriebene zu überschreiben oder im Klassensaal zu vergessen.

Es musste also ein System her was zentralisiert die Zeugnisse speichert und jedem, auch den gleichzeitigen Zugriff auf ein Zeugnis, von Zuhause aus ermöglicht. Da kam die Idee: ich will das Zeugnisschreiben für Grundschullehrer vereinfachen! Das Ziel war also gesteckt, nix großes, doch das Vorgenommene gut zu machen war der Anspruch an mich selbst.

Nach einer Version mit der Grundfunktionalität war ich dann 2 Tage bei einem guten Freund (Link) im Büro um das Design auch entsprechend ansprechend zu bauen. Unschönerweise muss ich mich da die Tage noch mit den ganzen CSS Hacks auseinandersetzen, da der IE zT einfach nicht im Kontext bleibt und ganz andere Parents / Childs anspricht als mein Freund der Firefox… steht also noch auf der TODO Liste.

Inzwischen wurde der Little School Helper einem kleineren Kreis an Lehrern und Direktoren vorgestellt und noch einige Wünsche / Änderungen realisiert und stelle Ihn nun hier vor um vieleicht noch mehr Feedback von Fachfremden, aber technisch versierterem Publikum zu bekommen.

Die Featureliste ist inzwischen auch um einiges angewachsen, über Statistiken, automatisierte Schuljahreswechsel, eine komplette Rechteverwaltung der Kollegen, bis hin zu PDF Generierung von echten Zeugnis Templates (bisher nur für RLP). Eine Doku ist noch nicht fertig, deshalb ists am einfachsten sich das ganze mal selber anzuschauen:

Eine Testversion gibts hier, mit Benutzername: admin und Passwort: test kann man sich anmelden und die komplette Funktionalität testen.

Übrigens: ich suche zur Zeit eine Grundschule die sich den Little School Helper mal genauer anschauen, und vieleicht sogar im produktiven Zeugnisschreiben benutzen/testen möchte. Wer also selbst als lehrendes Organ tätig ist oder jemanden kennt für den es von Interesse sein könnte: meldet euch bitte unter littleschoolhelper@drailing.net

Wie immer, über Feedback egal welcher Form freue ich mich sehr :-)

Grüße,
Christian

1 Kommentar

Umlautefix für das Adminpanel

So einfach kanns sein, wenn man weiß wies geht :-)

Um mit meinem Adminpanel auch Umlaute schreiben zu können muss nur eine kleine Zeile (in Zeile 307) eingefügt werden:

306 - $input = $input."?>";
307 - $input = utf8_encode($input);
308 - fwrite($datei, $input);

Den Downloadlink habe ich inzwischen auch im Ursprungspost ersetzt.

Keine Kommentare

Adminpanel für blueimp AjaxChat

Hiho,

auf blueimp.net gibts einen Open Source Ajax Chat der auf jedem Webserver mit php und MySql ganz einfach installiert werden kann. Das ist ne super Sache um sich schnell mit mehreren Menschen abzustimmen ohne ICQ Nummern oder Emailadressen austauschen zu müssen. Bei mir kommt er zB für ein Browserspiel zum Einsatz.

Leider ist die Verwaltung noch etwas unkonfortabel, alle Benutzer müssen über eine “users.php” Datei in ein Array eingepflegt werden. (je nach Konfiguration kann man sich auch ohne Passwort einloggen)

Dazu habe ich mir was kleines einfallen lassen um die Benutzer über eine Datenbanktabelle zu pflegen und ein kleines funktionales Adminpanel gebastelt :-)

Kurze Featureliste:
* Adminaccount:
– Benutzer anlegen (auch Moderator)
– Benutzer löschen
– Passwort für Benutzer zurücksetzen
* Useraccount
– eigenes Passwort ändern

Die Idee dahinter ist ganz simpel:
Wir legen alle Benutzer in einer Datenbank ab und schreiben die Datei (users.php), die Benutzer verwaltet bei Änderungen neu.

Um diese Administration zu ermöglichen brauchen wir Schreibrechte auf CHAT_ROOT/lib/data/users.php und müssen eine Benutzertabelle in der Datenbank anlegen:

Im INSERT Statement kann ein beliebiger Adminbenutzer angelegt werden, hier als Standard als Benutzername und Passwort “admin”.

CREATE TABLE `ajax_chat_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` text,
  `password` text,
  `role` text,
  PRIMARY KEY (`id`)
) 
 
INSERT INTO `ajax_chat_user` VALUES ('1', 'admin', 'admin', 'AJAX_CHAT_ADMIN');

In der Datei “admin.php” muss dann noch die entsprechende Datenbankverbindung an mehreren Stellen eingetragen werden.

$db = new mysqli( 'localhost', 'db-user-name', 'db-pw', 'db-name' );

Am einfachsten über suchen / ersetzen:
“db-user-name” -> eigener Datenbankbenutzer
“db-pw” -> zugehöriges Datenbankpasswort
“db-name” -> Datenbankname

Falls der Adminbenutzer einen anderen Namen als “admin” bekommen hat, müsst ihr in der Datei auch noch an 2 Stellen den entsprechend gewählten Namen eintragen (Zeile 289 und 325), einmal für das schreiben der users.php, und einmal um das evtl versehentliche Löschen zu verhindern.

Die admin.php dannach einfach ins Rootverzeichnis des Chats legen, und über www.url-to-chat.net/admin.php einloggen.

Bekannte Fehler:
- Beim Schreiben der Datei werden Umlaute nicht richtig dargestellt, daher können zur Zeit keine Benutzer/Passwörter mit Umlauten verwendet werden.

Kommentiert ist so gut wie nix, dafür sollte der Code recht sprechend und leicht zu verstehen sein.
Zum Download gehts hier: ajaxchat_adminpanel_fix

Über Feedback jeglicher Art würde ich mich natürlich freuen :-)

Grüße,
Christian

Nachtrag:
ACHTUNG!
Falls ihr die kleine Erweiterung benutzen wollt: Es wird die Datei in der die Benutzer zuvor verwaltet wurden gnadenlöse überschrieben!
Bedeutet: Wenn zuvor Benutzer in der Datei gepflegt wurden, sollte man sich ein Backup machen und diese dann über die Oberfläche in die Datenbank eintragen.

Keine Kommentare