Datepicker für Formulare mit jQuery UI

Immer wieder gestaltet man als Webworker Formulare für Websites, die Felder für Datumswahl beinhalten. Ich zeige in diesem Blogpost auf, wie man diese Aufgabe schnell und elegant mit Hilfe von jQuery UI löst.

Als erstes braucht man natürlich die jQuery-Javascript-Bibliothek in der Applikation (http://jquery.com/), für den produktiven Einsatz wird selbstverständlich die minimierte Version eingesetzt. Zusätzlich benötigt man den UI-Core, der bei Google Code unter http://jquery-ui.googlecode.com/svn/trunk/ui/jquery.ui.core.js erhältlich ist und zum guten Schluss das Datepicker-Plugin unter http://jquery-ui.googlecode.com/svn/trunk/ui/jquery.ui.datepicker.js.

Auf der HTML-Seite werden die JS-Files nun im Header eingebunden. Ausserdem bindet Ihr ein CSS ein, das Ihr Euch am besten direkt von http://blog.jqueryui.com/2010/02/jquery-ui-download-builderthemeroller-status/ holt:

<html>
<head>
<title>jquery ui form test</title>
<script type="text/javascript" src="/js/jquery-1.4.1.min.js"></script>
<script type="text/javascript" src="/js/jquery.ui.core.js"></script>
<script type="text/javascript" src="/js/jquery.ui.datepicker.js"></script>
<link rel="stylesheet" href="/styles/ui_sunny.css" type="text/css" media="all" />
</head>

Im Body wird das Formular gecodet. Das Vor-Belegen der beiden Formularfelder mit dem aktuellen Datum (und dem aktuellen Datum plus 1 Tag), sowie das Handling für Formular anzeigen/Formular bearbeiten habe ich hier mit Coldfusion gelöst, kann man ja jeweils auch in der Lieblings-Sprache seiner Wahl umsetzen:

<body>
<cfset currentDateFrom = createODBCDate(now()) />
<cfset currentDateFrom = DateFormat(currentDateFrom,"dd-mm-yyyy") />
<cfset currentDateTo = createODBCDate(now()) + 1 />
<cfset currentDateTo = DateFormat(currentDateTo,"dd-mm-yyyy") />


<cfif cgi.REQUEST_METHOD eq "POST">
<cfdump var="#form#">
<cfelse>

<script type="text/javascript">
$(function() {
$("#datepickerFrom").datepicker({ dateFormat: 'dd-mm-yy' });
$("#datepickerTo").datepicker({ dateFormat: 'dd-mm-yy' });
});
</script>
<form name="DateForm" method="post" action="#cgi.script_name#">
<p>
<label for="datepickerFrom">Start-Datum:</label>
<input class="inputDate" id="datepickerFrom" name="datepickerFrom" style="width:100px" value="<cfoutput>#currentDateFrom#</cfoutput>" />
</p>
<p>
<label for="datepickerTo">Ende-Datum:</label>
<input class="inputDate" id="datepickerTo" name="datepickerTo" style="width:100px" value="<cfoutput>#currentDateTo#</cfoutput>" />
</p>
<p><input type="submit" value="Auswertung starten" /></p>
</form>
</cfif>
</body>
</html>

Hier ist der Aufruf des Datepickers an die Formular-Elemente mit den ID’s „datepickerFrom“ und „datepickerTo“ gebunden, als zusätzlicher Paramter wird das Datum in einem bestimmten Format festgelegt. Ein schöne Übersicht aller möglichen Attribute, Events und Methoden ist unter http://jqueryui.com/demos/datepicker/ zu finden. Unter dieser Adresse gibt es auch eine Demo von allen möglichen schicken UI-Themes.

Als Ergebnis erhalten wir also nun ein Formular mit 2 Datumswahl-Feldern, nach dem Abschicken wir nur ein Dump des Formular-Objekts angezeigt. Das sollte als Grundgerüst für den weiteren Ausbau genügen – viel Spass damit.

perfektes Paging von Ergebnissen mit der Pagination.cfc

Abteilung super-praktisch: die Paging-Komponente von Nathan Strutz. Das seitenweise Durchblättern durch Ergebnisse einer Datenbank-Abfrage (oder eines Array, eines Struct), gehört zu den Aufgaben, die für Programmierer immer wiederkehren. Ich selbst habe solche Paging-Funktionalitäten in veschiedenen Ausführungen oft selber entwickelt, das Thema Code-Reuse hatte ich nicht weiter berücksichtigt. Continue reading

Scripte beobachten und debuggen mit Javascript Deobfuscator

Scripte beobachten und debuggen mit Javascript Deobfuscator

Scripte beobachten und debuggen mit Javascript Deobfuscator

Abteilung kleine Helferlein: der Javascript Deobfuscator ist eine Firefox Extension, die sich prima eignet, um eventuellen Problemen mit JS-Code auf die Schliche zu kommen. Die Erweiterung zeigt an, welcher Skripte auf der Website ausgeführt werden, auch wenn der JS-Code dynamisch generiert wird. Die Extension ist über das Extras-Menü vom Firefox zu öffnen, die jeweilige Ansicht im Popup gibt Informationen, welche Skripte kompiliert beziehungsweise ausgeführt werden. Hier gibts die Extension zum Download.

CFC zum Erzeugen von Google Sitemaps

Auf RIAForge gibt es eine nette CFC zum Erzeugen von Google XML Sitemaps: den Google Sitemap XML Generator.
Die Komponente erzeugt ein XML-File nach dem Sitemap-Protokoll (http://www.sitemaps.org), das von vielen Suchmaschinen wie Google, Bing und Yahoo unterstützt wird. Die Sitemap ergibt sich dabei aus dem Spidern des Navigationsbaums im Query-Format oder eben als XML-Sitemap.

Hier gehts zum Download der CFC bei RIAForge

Hier gehts zum Downlaod der CFC bei Github

Euer FCKEditor geht plötzlich nicht mehr im Firefox?

Neues aus der Abteilung Kuriositäten: wenn Ihr den FCKEditor einsetzt und Euch wundert, dass dieser plötzlich unter Firefox 3.6 nicht mehr geht, dann hier die Lösung dazu: es liegt eher am Jahr 2010, ist halt unglücklich mit dem Erscheinen des neuen Firefox zusammengefallen. Im Connector werden die Gecko-Browser mit folgender Überprüfung versehen, wenn der Paramter checkBrowser aktiviert ist:

stResult = reFind( "gecko/(200[3-9][0-1][0-9][0-3][0-9])", sAgent, 1, true );

Prima, also wahrscheinlich so ziemlich das gleiche lustige Problem wie mit den EC-Karten.
Dies müsst Ihr also ersetzen durch eine zeitgemäße Prüfung, wenn Ihr den Editor auch weiterhin verwenden wollt:

stResult = reFind( "gecko/(20[0-9][0-9][0-1][0-9][0-3][0-9])", sAgent, 1, true );

Optional kann man natürlich auch den Browsercheck durch die Deaktivierung des Paramters checkBrowser komplett umgehen.

Achtung bei Objekterstellung mit create object aus CFC (Railo 3.1.2)

Aus aktuellem Anlass ein kleiner Hinweis. Ich habe bis dato immer in meinem Code geschrieben:

<cfset myObj = CreateObject("component","dir.bla.blub.cfc").init(COOKIE.myID)>

Nun war ich nach dem Umstieg auf Railo 3.1.2 plötzlich mit der Fehlermeldung konfrontiert, dass die Komponente am angegebenen Ort nicht mehr gefunden wird:

invalid component definition, can't find dir.bla.blub.cfc

Die Lösung ist sehr simpel, ich wusste nur nicht, das Komponentenaufrufe auch ohne die Endung .cfc möglich sind. In der aktuellen Version würde Railo also webservice.bla.blub.cfc.cfc aufrufen wollen, deswegen muss man einfach diese Schreibweise verwenden:

<cfset myObj = CreateObject("component","dir.bla.blub").init(COOKIE.myID)>

An dieser Stelle herzlichen Dank an den Kollegen Michael Hnat von Bluegras für den Hinweis.

statt ls -l auch den Alias ll benutzen

ls -l wird unter Linux benutzt, um den Inhalt eines Verzeichnisses anzuzeigen. Da man das wirklich oft braucht, ist es praktisch, wenn man auch die Kurzform ll benutzen kann. Ist ll noch nicht bekannt, muss man in seinem Home-Verzeichnis die .bashrc editieren

cd ~
less .bashrc

Eventuell habt Ihr in der Datei auch schon die benötigten Aliase stehen, dann einfach nur die Rauten, die die Zeilen auskommentieren, entfernen.
Falls die Aliase noch nicht da sind, einfach die folgenden Zeilen (ohne Rauten natürlich) in die .bashrc reinkopieren und speichern:

# some more ls aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'

Danach könnt Ihr die Kurzformen ll und la verwenden und spart so wieder Tipparbeit.

how-to: railo / resin installation on ubuntu minimal os

I hope this tutorial will save you a few hours of trouble, it’s a complete step-by-step tutorial of a railo/resin installation on Linux Ubuntu OS.
You’ll be able to deliver cfml via port 8600 and apache-port 80 as well.

If you prefer the german version, click here

First of all, you need some compliler-tools, wget for downloading the sources, the java enviroment and additional apache-modules (for example apxs2).

sudo apt-get install build-essential
sudo apt-get install apache2 sun-java6-jdk
sudo apt-get install wget
sudo apt-get install apache2-threaded-dev

Now go to http://www.getrailo.org/index.cfm/download/ and download the current railo server version (all os version without jre).
In my case this was today:

wget http://www.getrailo.org/down.cfm?item=/railo/remote/download/3.1.2.001/server/all/railo-3.1.2.001-resin-without-jre.tar.gz

Now move the tarball to /opt/ and extract the tarball:

mv railo-3.1.2.001-resin-without-jre.tar.gz /opt/.
tar -xvzf railo-3.1.2.001-resin-without-jre.tar.gz

Create a symlink and change the user for your convinience:

sudo ln -s railo-3.1.2.001-resin-without-jre railo
sudo chown -R username railo

Grats, Railo and Resin ist installed now. Please start the shellscript:

./opt/railo/bin/httpd.sh

Run the service in background using (currently railo/resin would stop after closing the shell)

./opt/railo/bin/httpd.sh &

Now you can browse to http://domain.com:8600 ant a test page should appear. From here you can navigate to the railo admin located under http://cfml.domain.com/railo-context/admin/web.cfm.

Now we have to explain apache that it should deliver cfml:

cd /opt/railo
sudo ./configure --with-apxs=/usr/bin/apxs2
sudo make
sudo make install

Warning: if an error occures while doing the configure or make, the makefile isn’t right. In that case please got to /opt/railo/ and rename the Makefile.in to Makefile.in.bak. Then rename the Makefile.am to Makefile.in:

root@blabla:/opt/railo# mv Makefile.in Makefile.in.bak
root@blabla:/opt/railo# mv Makefile.am Makefile.in

Then execute an „make clean“ in the directory /opt/railo/ and do the configure,make an make install again, it will run correctly now.
Remember to restart apache:

sudo /etc/init.d/apache2 restart

Now you can access the railo admin via apache, too: http://domain.com/railo-context/admin/web.cfm
Browse to http://domain.de/caucho-status to see the status of mod-caucho.

At least you have to configure the apache vhost and the resin.conf to provide multiple hosts. Here’s an example:

less /etc/apache2/sites-available/default

Define one more virtual host:

<VirtualHost *:80>
ServerName playgroundcfml.domain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/playground/
<Directory /var/www/playground/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>

Restart apache again and create the host entry on your local machine. The last point is to tell resin.conf the host:

less /opt/railo/conf/resin.conf

search for the host definition beginning:

<!-- configures the default host, matching any host name -->
<host id="" root-directory=".">

after the closing </host> you should add:

<host id="playgroundcfml.domain.com">
<root-directory>/var/www/playground</root-directory>
<web-app id="/">
<document-directory></document-directory>
</web-app>
</host>

Furthermore it is important to define the right port in the following tag – here’s the setting how apache webserver will talk to resin server:

<!-- define the servers in the cluster -->
<server id="" address="127.0.0.1" port="6800">
</code>

Resin will discover the changes automatically and restart the service, you'll not to do that on your own.
That's all, enjoy!

CFML ausliefern mit Railo / Resin Installation auf Ubuntu Server

Dieses How-To könnte Euch einiges an Arbeit sparen, ich zeige Schritt für Schritt auf, wie man einen Railo-Server mit Resin unter Ubuntu aufsetzt, cfm kann dann über Port 8600 ausgeliefert werden, außerdem konfigurieren wir den Apachen für die CFML-Auslieferung.

Please note: version in english is here

Ich gehe von einem minimal installiertem Ubuntu-System aus. Als erstes benötigt man das Paket build-essential, das uns die grundlegenden Tools für das Kompilieren zur Verfügung stellt, außerdem brauchen wir noch wget, Java und einige Komponenten (zum Beispiel apxs2), die beim normalen Apache nicht beiliegen, deswegen würde ich zu Beginn empfehlen:

sudo apt-get install build-essential
sudo apt-get install apache2 sun-java6-jdk
sudo apt-get install wget
sudo apt-get install apache2-threaded-dev

Geht nun auf http://www.getrailo.org/index.cfm/download/ und holt Euch die aktuelle Version vom Railo Server (all OS Version ohne JRE).

In meinem Fall war das heute:

wget http://www.getrailo.org/down.cfm?item=/railo/remote/download/3.1.2.001/server/all/railo-3.1.2.001-resin-without-jre.tar.gz

Verschiebt den Downlaod nach /opt/ und entpackt den Tarball dort:

mv railo-3.1.2.001-resin-without-jre.tar.gz /opt/.
tar -xvzf railo-3.1.2.001-resin-without-jre.tar.gz

Nun könnt Ihr einen Symlink einrichten und den User anpassen, um das Handling zu erleichtern:

sudo ln -s railo-3.1.2.001-resin-without-jre railo
sudo chown -R username railo

So, nun sollte Railo und Resin bereits fertig installiert sein, startet das Shellscript

./opt/railo/bin/httpd.sh

Dann solltet Ihr in der Konsole bereits die Ausgaben sehen. Als Hintergrundprozess laufen lassen könnt Ihr Railo/Resin mit

./opt/railo/bin/httpd.sh &

Damit läuft der Dienst auch weiter, wenn die Konsole wieder geschlossen wird. Wenn Ihr nun im Browser die URL http://domain.de:8600 aufruft, dann sollte bereits die Testseite mit Link zum Railo-Admin erscheinen.

Nun lassen wir den Apache noch cfml ausliefern, macht bitte als root Folgendes:

cd /opt/railo
sudo ./configure --with-apxs=/usr/bin/apxs2
sudo make
sudo make install

Achtung: sollte das so nicht fuktionieren und Fehler beim configure oder make auftauchen, dann ist das Makefile.in aus der Distribution nicht korrekt. In diesem fall geht Ihr nach /opt/railo/ und sichert Euch die Makefile.in weg, umbenennen in Makefile.in.bak und benennt Euch die Makefile.am um in Makefile.in

root@blabla:/opt/railo# mv Makefile.in Makefile.in.bak
root@blabla:/opt/railo# mv Makefile.am Makefile.in

Danach in /opt/railo/ ein make clean in der Konsole ausführen und das configure, make und make install von oben nochmals durchführen, es wird nun problemlos durchlaufen.

Nun muss der Apache neu gestartet werden:

sudo /etc/init.d/apache2 restart

Nun solltet Ihr den Railo-Administrator auch unter http://domain.de/railo-context/admin/web.cfm aufrufen können, CFML wird also auch vom Apachen ausgeliefert. Unter der URL http://domain.de/caucho-status seht Ihr die Informationen zum Mod Caucho.

Jetzt werden wir die Apache-Config und die Resin-Config anpassen, um multiple Hosts definieren zu können, anhand des nachstehenden Beispiels könnt Ihr vorgehen:

less /etc/apache2/sites-available/default

Hier definiert Ihr nun einen weiteren Virtual Host:

<VirtualHost *:80>
ServerName playgroundcfml.hetzner.de
ServerAdmin webmaster@localhost
DocumentRoot /var/www/playground/
<Directory /var/www/playground/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>

Apache wiederum restarten nach dieser Änderung ( /etc/init.d/apache2 restart), wenn Ihr Euch dann einen entsprechenden Eintrag in Eure lokale Hosts gmacht habt, sollte das mit HTML-Files bereits klappen. Nun gleichen wir die Resin-Konfiguration noch an:

less /opt/railo/conf/resin.conf

Hier sucht Ihr am besten nach dem bereits definierten host, der so beginnt:

<!-- configures the default host, matching any host name -->
<host id="" root-directory=".">

Nach dem schließendem </host> dieser Definition fügt Ihr Euren neuen Eintrag hinzu:

<host id="playgroundcfml.hetzner.de">
<root-directory>/var/www/playground</root-directory>
<web-app id="/">
<document-directory></document-directory>
</web-app>
</host>

Wichtig ist desweiteren, dass der Port im nachstehenden Tag passt, denn dort wird festgelegt, wie der Apache Webserver mit dem Resin-Server spricht:

<!-- define the servers in the cluster -->
   <server id="" address="127.0.0.1" port="6800">
</code>

Resin sollte die Änderung der Config automatisch bemerken und sich selber restarten, danach seid Ihr auch in der Lage, CFML direkt für diese Vhost-Definition auszuführen. Viel Spass damit, ich hoffe, diese Anleitung hat Euch etwas Zeit gespart.

Launchy – open source keystroke launcher für Windows/Linux

launchy - der open source keystroke launcher für win/linux

launchy - der open source keystroke launcher für win/linux

Abteilung kleine Programme, die das Leben etwas leichter machen: Launchy, das kostenlose Tool zum „Programme starten im Mac-Style“
Per Default-Einstellung könnt Ihr nach der Installation Programme per Tasten-Kombination Alt+Space starten – Launchy öffnet sich und während Ihr die ersten Buchstaben des Programms, das Ihr starten möchtet, eingebt, bietet Launchy bereits passende Vorschläge an. Das geht sehr schnell und sehr schick. Mac-User kennen das ja längst von Ihrer Spotlight-Suche. Unter Windows 7 gibt es sowas nun auch, da muss man aber immer erst auf den Windows-Button in der Taskleiste klicken.

Hier geht es zur Website von Launchy und bei Sourceforge.net gibt es den kostenlosen Download.