ext.data.writer og CRUD

Jeg har kigget lidt nærmere på ext.data.writer og har delt nogle noter her :

http://pedant.dk/archive/CRUD_in_extjs_3_0.pdf

Basalt set kan man nu på en nem måde foretage sig de fleste operationer man kunne forvente sig i en webapplikation der snakker med en database. Det er der jo sådan set ikke noget banebrydende i – nu kan man det også fra extjs . Jeg eksperimenterer i øjeblikket med hvordan man bruger denne nye funktionalitet nemmest – det gør jeg iøjeblikket i :

http://github.com/jacobandresen/yase/tree/master

Lowpro og behaviour

Det er meget vigtigt at udskille javascript fra HTML når man koder webapplikationer. På den facon bliver koden nemmere at vedligeholde og overskue. Prøv at søge efter “unobtrusive javascript”.

Morgan Roderick har givet en introduktion til “Lowpro” . Morgan har bemærket at selv om Dan Webb kommer fra den rigtige side af bæltet, så staver han “Behavior” forkert . Hvis du har de tilbøjeligheder så kan du hente en ny udgave af Ben Nolans “Behaviour” , der er tilrettet af Jakob Kruse her : http://www.kruse-net.dk/behaviour/.

Begge biblioteker gør nogenlunde det samme. Det ser dog ud til at man kan pille event callbacks væk fra “lowpro” efter at man har puttet dem på. Det kan man vist ikke i “Behaviour”.

Bemærk at begge biblioteker er gode at anvende sammen med prototypejs.

Introduktion til Ext.Direct

Jeg har lavet en præsentation af hovedtrækkene i Extjs 3.0 :  Extjs 3.0  The good stuff

Der er mange flotte farver og kode i ! ;)

ext 2009 konference

Jeg er iøjeblikket i Orlando til den første extjs brugerkonference. extjs blev startet af Jack Slocum mens han var hos Yahoo   – biblioteket er nu kommet i 3. version . Hele vejen igennem har det været Jacks vision at skabe et sammenhængende rammeværktøj  til at lave komplekse webapplikationer.

extjs 3.0 RC1 er tilgængelig  fra http://extjs.com/products/extjs/download.php

Den største nyhed for extjs 3.0 er introduktionen af Ext.direct , der introducerer en sammenhængende model for at opdatere data vha forskellige serverside teknologier . Ifbm launch af 3.0 vil der blive præsenteret Routers for Ruby/merb , java, C# og php.  Jeg snakker iøjeblikket med Data access om at de bør introducere en ext 3.0 router  for visual dataflex..

En af de mere visuelt imponerende ting er introduktionen af en RowEditor , der introducerer inplace redigering i et extjs grid vha extjs DataStore arkitektur .

Mit indtryk herfra er at extjs firmaet har gode forbindelser til Adobe , Sun  og Dell samt en større liste af amerikanske virksomheder (bestbuy som et eksempel) . Det virker som at  folk begyndte at bruge extjs for omkring et år siden ifbm extjs 2.0..

afprøvning af groovy på tomcat5.5 på ubuntu vha mysql

Jeg har iøjeblikket brug for at kunne afprøve flere forskellige måder at implementere ting i java ifbm prototypning.  Under prototypning kan det være forbundet med ulemper at benytte hele J2EE stakken under udvikling da det kan tage unødigt lang tid at kompilere og deploye Derfor har jeg valgt at kigge på groovy .

Da det iøjeblikket er for webapplikationer jeg undersøger , så har jeg valgt at køre under tomcat5.5 på min testmaskine.
tomcat5.5 og groovy kan nemt installeres sammen på ubuntu. Det gøres sådan her (jeg antager at du allerede har installeret mysql og den virker)


sudo apt-get install tomcat5.5 tomcat5.5-admin groovy

For at få tomcat5.5 til at køre groovy til demonstrationsformål har jeg sat “TOMCAT5_SECURITY=no” i filen “/etc/init.d/tomcat5.5″. I et produktionsmiljø bør man gøre sig overvejelser om brugen af classloaders.

Jeg har til demonstrationsformål valgt at rette filen /etc/tomcat5.5/tomcat-users.xml til således at bruger “tomcat” har roles=”tomcat,admin,manager” – derved kan jeg logge ind i  /manager/ vha ‘tomcat’ og ‘tomcat’ .Bemærk at der nederst på manager-siden står “WAR file to deploy”. Her kan du uploade flg. fil : groovytest.war

Herefter kan der ses et resultat i  /groovytest/ på testmaskinen. groovy testkoden ser således ud:


Sql.loadDriver("com.mysql.jdbc.Driver");
sql = Sql.newInstance("jdbc:mysql://localhost:3306/test", "web","sockmonkey");

sql.eachRow("select * from test") {
println it.id + " " + it.name
}
print "mere test"

“test.groovy”  henviser til en database “test” med tabellen “test”. Disse kan skabes vha filen “test.sql” der er vedlagt i groovytest.war

war-filen indeholder mysql-driveren , så forbindelsen mellem mysql og groovy skulle fungere der. Men hvis du vil forsøge dig med at køre test.groovy fra kommandolinjen , så kan du også det , hvis du kopierer mysql-connector-java-3.1.14-bin.jar over i din ~/.groovy/lib/ . På den facon kan du afvikle testen på serveren uden om tomcat.

Brug af java reflection til at generere JSON data

Jeg arbejder iøjeblikket på en opgave , hvor jeg har behov for at bringe datamodellen ud til behandling i javascript på en nem facon . Ifbm med denne opgave har jeg tænkt på hvordan man kunne gøre det vha reflection.

Hvis vi antager flg klasser :


class A{
public int B;
public int C;
public D F;
public D G;
};

class D {
public String E;
}

og at de var initialiseret således:

A a=new A();
a.B=1;
a.C=2;
a.F=new D();
a.F.E="test";
a.G=new D();
a.G.E="test2";

Så kunne man kigge på selve java objekterne vha reflection for at generere JSON output til bruge i javascript således:


public class JsonEmit{
public static String emit(Object target) throws Exception{
StringBuilder sb=new StringBuilder();
sb.append("{");
Class targetClass=target.getClass();
Field[] publicFields = targetClass.getFields();
for (int i=0;i String sFieldName = publicFields[i].getName();
Class typeClass = publicFields[i].getType();
String sFieldType = typeClass.getName();
Object value = publicFields[i].get(target);
if(value!=null){
sb.append(sFieldName+":");
if(typeClass.isPrimitive()
||sFieldType=="java.lang.String"){
sb.append("""+value.toString()+""");
}else{
sb.append(JsonEmit.emit(value));
}
}
if(i!=(publicFields.length-1))
sb.append(",");
}
sb.append("}");
return(sb.toString());
}

På den facon vil man kunne genere JSON ved et simpelt kald til

JsonEmit.emit(a)

hvorefter man vil se

{B:"1",C:"2",F:{E:"test"},G:{E:"test2"}}

hvordan man omgår 'this' scope problemer for closures

Man kan ikke uden videre bruge ‘this’ i en indre anonym funktion der bruger information fra en ydre. (se en god beskrivelse ifbm closures i  kapitel 4 i “Javascript: the good parts” ).

Problemet kan omgåes ved at benytte “bind” fra prototypejs på flg. facon:


ComboBox.prototype.loader= function (){
if(this.dataStore[this.paramName]===undefined){
new Ajax.Request (
this.url,{
method: 'post',
asynchronous: true,
parameters: this.parameters,
onSuccess: function (transport){
var response=transport.responseText;
this.dataStore.data[this.paramName]=response.evalJSON();
this.render();
}.bind(this),
onFailure: function (transport){
alert('failed to retrieve '+this.paramName+' data');
}.bind(this)
}
}

nedarvning i javascript

Jeg har fornyligt genopfrisket hvordan man laver nedarvning i javascript . Det centrale i forståelsen af nedarvning i javascript er forståelsen at javascript er et prototype -baseret sprog og ikke et klassebaseret sprog. Her er et eksempel , der gerne skulle lave en alert-box med “I am a pig”:


function animal () {
this.name = "nothing yet";
this.legs=4;
};
tiger = new animal;
tiger.name="tiger";
pig = new animal;
pig.name="pig";

animal.prototype.classify = function (){
alert( ' I am a ' + this.name );
};
pig.classify();

Bemærk brugen af prototype her, der tilføjer en ny funktion classify, der benytter den allerede eksisterende værdi “name”.

Du kan også bruge klasser vha prototypejs som beskrevet her (Så skal du dog benytte prototype js biblioteket)

educ2008 dag 2

Eddy Kleinjan havde den uheldige opgave at holde hans indlæg under ‘the graveyard shift’ fra kl 09.00 til 09.45 hvor vi alle sammen sad og sov p.gr.af nattens udskejelser på Bakken dagen før. Derefter gik præsentationerne ned ad bakke indtil omkring efter frokost hvor Harm Wibier havde et fremragende indlæg om AJAX biblioteket (det ser iøvrigt ud til at Data Access Europe nu har sørget for at deres AJAX applikationer kan køre på firefox 3).

[jalbum_album:/album/EDUC2008]

Den engelske dataflex gruppe
fortalte om deres arbejde med dataflex på mobile enheder og deres wrapper for CodeJock. Nils Svedmyr har også gang i en international indsats for at lave en dataflex wrapper for CodeJocks Report objekt . Jeg regner med at kode en del på dette på projekt i løbet af 2008.

educ2008 dag 1

Så er educ2008 begyndt . Direktøren for det hele Chip Casaneve ( nej ikke ham her ) har lige udnævtnt front-it til Channel partner for sverige. Tillykke med det Klaus og Charlotte.

front-it bliver svensk channel partner

Mike Peat gennemgik senere på dagen en database synkroniseringsmekanisme han har implementeret for oxygen applikationen der håndterer abonnementer på blade.

Om aftenen var vi på bakken og spiste i Peter Lieps hus (hvor dataflex bandet spillede – HØJT).