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)

brug af datastores og data-views i extjs

Jeg har kigget lidt på extjs javascript bibliotekerne og kan lide hvad jeg har set indtil videre. En af de gode ting ved extjs er konceptet med datastores som kan benyttes som datagrundlag for et grid

Designet tillader at man benytte forskellig datastores afhængigt af hvilken underliggende transportform man bruger fra serveren. En default Ext.data.Store bruger xml til at udveksle data, mens en Ext.data.JsonStore bruger json til at udveksle data . Dette design muliggør at man kan benytte f.eks grids eller dataviews uafhængigt af transportformatet. Meninen er så at man skifter datastore hvis man skifter dataformat – og bibeholder den kode man har skrivet til sit grid.

Jeg har pillet lidt ved et af eksemplerne fra ext-js distroen her:

Eksemplet er oprindeligt fra her : http://extjs.com/deploy/dev/examples/view/data-view.html

Det ser iøvrigt ud til at der iøjeblikket ( 2008-04-01) er noget specielt med lokale links i mit nye extjs tema på min blog. Det må jeg lige kigge lidt nærmere på (det ser ud til at lokale links ikke åbner fra sider inde wordpress med det nye extjs tema).

opdatering 2008-04-13: Jeg har nu valgt at disable det extjs tema, der skabte problemerne. Det burde nu være muligt at kunne klikke på interne links igen

@media AJAX 2007 dag 2

Brendan Eich startede dagen med snakke om udfordringerne for javascript 2 og de udfordringer javascript samfundet står overfor . Brendan fortalte en del om ScreamingMonkey
. Det vakte latter i hele salen ,da Brendan lavede et publicity stunt ved at skyde skrigende tøjaber ud til folk i salen.  Du kan iøvrigt selv købe en her .

Efter Brendans indlæg fortalte John Resig om jquery , der er et nyt javascript bibliotek , der rent funktionalitetsmæssigt overlapper med prototype javascript biblioteket som jeg er vant til at bruge. Nogle af de lækre ting, som John har puttet ind i jquery er understøttelse af css 3 selectors samt at der basal xpath udvælgelse understøttet biblioteket. Rent arkitekturmæssigt så baserer jquery sig på ‘chaining’ således at der kan udtrykkes jquery udvælgelser i lange kæder – for på den måde at kunne foretage udvælgelser mest effektivt. John gav også en garanti for at all div’s er indhentet før at en action udføres i jquery – et problem som jeg har set optræde i prototype. John anbefalede en bog, der hed “Learning JQuery”

[jalbum_album:/album/at media AJAX 2007 dag 2/]

Dan Web kom med et meget praktisk og teknisk orienteret indlæg , hvor han tale om “metaprogrammering af javascript”. Her fik f.eks indsigt i hvordan man laver prototypebaseret nedarvning i objektorienteret javascript – her nævnte han at den del gængse problemer med dette kan løse ved at bruge Class.Create fra prototypejs biblioteket.

Douglas Crockford listede de gode og dårlige ting, som han kender til javascript.

Dårlige

  • eval ( han sagde “eval is a cry for help”)
  • chek om en værdi er undefined eller null vha == . Her skulle man bruge === istedet
  • ++ og — kan føre til utilsigtede fejl

Gode

  • lambdaer
  • dynamiske objekter
  • loose typing

Derudover forklarede Douglas javascript closures på en facon , der rent faktisk gav mening .

Konference sluttede med en paneldebal, hvor fremtiden for javascript blev debatteret.

Vi tilbragte aftenen sørst med at købe bøger hos Foyles . Her købte jeg nogle bøger om javascript og Ruby on Rails.
Dernæst sluttede vi aftenen af på en af de mange Angus Steak Housei London.

@media AJAX 2007 dag 1

På første dag af @media AJAX 2007 fik vi en oversigt af folkene fra http://www.ajaxian.com med “the state of AJAX”. Dion og Ben gav os en opsummering af hvad de havde set som en udfordring for 2006 og hvilke ting der var blevet løst iløbet af året. En ting der har vakt opsigt er den ny javascript fortolker på vej ind i firefox kaldet “tamarin”, der drastisk vil forbedre hastigheden for javascript. Det bliver spændende om der kommer ligende dramatiske hastigheds forbedringer for javascript på internet explorer i fremtiden (ellers kunne jeg forstå at der arbejdes på at gøre “tamarin” tilgængelig fra Internet Explorer også )

[jalbum_album:/album/at media AJAX 2007 dag 1/]

Derek Featherstone bidrog med nogle relevante betragtninger om hvad man gøre for at sikre at ens AJAX applikationer også kan tilgåes fra en screen reader. Jeg havde personligt ikke selv tænkt meget på problemstillingen før Dereks indlæg – så dette var noget godt input at tage med hjem. Derek kom også med nogle betragtninger om at man kun bør overføre data ifbm “onfocus” events i widgets – og udvælge det relevante data for så på den måde at sikre at der bruges mindre tid på at indhente data fra serveren.

Senerehen kom Stuart Langridge med et meget humoristisk indlæg om “how to destroy the web” (hvordan man kan ødelægge internettet) . Stuart nævnte mange af de fejl som vi alle sammen laver , når vi koder webapplikationer – og fremhævede gentagne gang at hvis vi bliver ved med det , så kan vi sagtens ødelægge internettet! Specifikt bed jeg mærke i at hvis man gerne vil ødelægge internettet , så skal man skrive AJAX applikationer, der benytter “polling” – dvs der bliver ved med at forespørge efter nye informationer på serveren med et regulært interval. Her er strålende eksempel den chatserver , som vi havde kørende på http://citypolarna.se , der regelmæssigt lavede “polling” efter nye beskeder. Stuart nævnt her at man kunne anvende teknologien fra “cometd” til at omgå dette problem. Problemet ser ud til at være så alment at nogen ligefrem har følt trang til at lave sitet http://www.cometdaily.com !

Peter-Paul Koch ( som driver den berømte http://quirksmode.org ) sluttede dagen af med et praktisk indlæg om en AJAX applikation han havde skrevet . ppk havde nogle meget relevante argumenter over hvorfor man skulle udvælge XML fremfor json til dataudveksling. ppk fremførte at XML er mere velkendt end json i forrretnignsverdenen – og at man derfor bør vælge XML for at kunne kommunikere bedre sammen om løsningen.

Vi sluttede aftenen med en god middag på http://mangotree.co.uk

ankomst til @media AJAX 2007

Så er vi ankommet til London for at deltage i konferencen @media AJAX 2007. Meningen med denne konference er at lære mere om hvad der rører sig i AJAX verdenen iøjeblikket . I aften har vi spist aftensmad på http://www.sherlockholmespub.com

[jalbum_album:/album/at Media AJAX 2007 ankomst]

Det blever spændende at følge åbningen af konferencen imorgen.

Jeg skal også med til @media Ajax

I november samles en del prominente figurer inden for AJAX verdenen i London . Der kommer Brendan “jeg opfandt javascript” Eich . Douglas “Jeg opfandt JSON” Crockford. Det skal også blive praktisk at blive opdateret af folkene bag ajaxian.com.

@media ajax button

Hvis du ikke har en billet til konferencen , så skynd dig, du kan nå det endnu !

Artikel om Firebug i Dr Dobbs

Et af de værktøjer som jeg finder uundværlige i mit daglige arbejde er “Firebug” skrevet af Joe Hewitt. Firebug er et plugin til firefox browseren som letter fejlsøgning af javascript kode i webapplikationer . Joe Hewitt har givet en udmærket introduktion til Firebug i Dr Dobbs Journal : http://www.ddj.com/dept/debug/196802787

AJAX patterns

Efter at have rodet rundt med diverse bøger og hjemmesider om javascript for at lære mere om AJAX teknologier har jeg fundet :

http://ajaxpatterns.org/Patterns

Her er der listet de væsentligste design patterns inden for AJAX verdenen – eksempelvis kigger jeg nu på http://ajaxpatterns.org/Patterns#Browser-Server_Dialogue for at løse de skalabilitetsproblemer , der har været på citypolarna

AJAX skaber mere traffik


Problemet med at lave en asynkron http flerbruger chat på en standard host

Nå. Det ser ud til at b-one ikke kan lide den ekstra traffik , som brugen af min AJAX chat har genereret på citypolarna.se . Det får mig til at tænke på hvordan man egentligt kan lave ajax løsninger , der skalerer fornuftigt på normale http servere. Det kan jo være både godt at dårligt at der er kommet mere traffik på serveren (men det skulle helst ikke være min implementation, der er skyld i det).

Lidt piveri over manglende sessionshåndtering i http protokollen

Som vi alle ved, så er http protokollen tilstandsløs. Dette vanskeliggør at lave ‘push update’ til en specifik web klient , der kører for en specifik bruger. Det er også vanskeligt at ‘skubbe’ alle nye beskeder ud til alle browsere – uden at lave en speciel løsning på en anden måde.

En dyr måde at kode en flerbruger chat

vi kunne kigge på at sammenkoble sessions-information håndteret eksempelvis af php eller asp sammen med en speciel server proces, der fastholder kontakten til klienterne. Klienten kunne så komunikere med denne serverproces vha. sockets. (Dette ville så inkludere at bruge java eller flash på klientsiden)

En billigere måde at lave den på

Man kunne også på serversiden holde styr hvad der blev sendt til den pågældende klient sidste gang, for derefter kun at sende de seneste opdateringer. Problemet med denne tilgang er at dette ville kræve en fornuftige måde at opdatere tabeller i alle browsere på. Det ved jeg ikke lige hvordan man gør endu.

opdatering 2007-11-20: Jeg er nu blevet gjort opmærksom på webstedet http://www.cometdaily.com , hvor man kan læse mere om problemstillingen.