fredag 7 november 2008

Att mäta total storlek på en webbsida

Denna vecka har jag tagit tag i problemet att mäta hur stor en webbsida är. Det låter kanske trivialt till att börja med, men faktum är att det faktiskt är ganska knepigt att göra det korrekt. Med total storlek menar jag bilder, CSSer, JavaScript, Flashar, osv. Ok, det låter fortfarande inte så krångligt, men det är faktiskt ganska problematiskt om man ska ta hänsyn till innehåll som hämtas och genereras av JavaScript. Hur mäter man exempelvis hur mycket data som laddas ner för en dynamisk sida i sann webb 2.0-anda?

Visst, ett enkelt svar är att ta fram Net-fliken i Firebug och bara scrolla längst ner:



Men det jag vill göra är att mäta och regelbundet kunna övervaka storleken på en webbsida. Dessutom vill jag automatisera det programmatiskt.

Första delen av lösningen stavas WebDriver. Ett fantastiskt litet Google-projekt som ger dig access till en webbläsare via ett Java-API. Med WebDriver har jag möjlighet att styra en webbläsare, i det här fallet Firefox. Exekvera JavaScript, ställa om inställningar, traversera DOMen och en hel rad andra användbara saker.

För att hämta en webbsida och titta efter ett element kan du:

FirefoxDriver driver = new FirefoxDriver();
driver.get("http://www.athega.se");
String thirdParagraph = driver.findElementByXPath("//div[class='heading']/p[3]").getText();
driver.quit();

Det som sker när du kör ovanstående kod är att en ren instans av Firefox startas. Sidan hämtas och DOMen parsas. Till sist stängs den startade Firefoxinstansen ned.

Eftersom det är en riktigt webbläsarinstans som körs, krävs en grafisk miljö för att köra ovanstående kod. Om denna kod ska köras på en server eller någonstans där man inte vill att en webbläsare ska blinka fram kan jag rekommendera att titta på Xvfb, en X-server som körs direkt i minnet utan någon grafisk utskrift.

Den andra delen av lösningen på att mäta sidstorleken började som ett skämt från min kollega Tobias när vi var och köpte finkaffe och slutade med att helt enkelt inspektera cachen som skapats till den rena Firefoxinstansen. Genom att mäta storleken på cachen, vet vi hur mycket data som laddats ner för sidan. Detta kan göras på flera sätt, men ett smidigt sätt är att fråga Firefox genom att skriva in about:cache i adressfältet.

Sista steget är att kontinuerligt övervaka sidstorleken. I det här fallet la jag upp en övervakning i OP5 (som kostar pengar), som bygger vidare ovanpå nagios (som är gratis och alldeles toppen).

Resultatet i en graf:


måndag 27 oktober 2008

En mycket märklig dag

Idag känns det väldigt konstigt att vara islänning.

onsdag 8 oktober 2008

Från Dafla Power till Spotify



Det är fantastiskt. 1994 eller möjligen början på 1995 streamade jag för första gången musik över Internet. Det var på en Solaris, med Netscape 2.0 (tror jag). Musiken lät jämförelsevis helt fantastiskt. Filen låg på en server någonstans i USA och var i filformatet mp2. Det sjuka var att den bara spelade direkt. Man behövde inte ens vänta på att den laddades ner.

Sedan kom filformatet mp3 och nu började det låta precis som det skulle! Jag delade vid den här tiden (1996) rum med ett mumintroll och vi började rippa skivor. Det tog en förmiddag per skiva ungefär. Det dröjde inte länge innan behovet av ett jukeboxliknande program tog överhanden och med Perl i fingrarna tog det inte heller lång tid. Inom kort utvecklades den till en internradio med streamad mp3 och webbaserat gränssnitt, komplett med önskningar, möjlighet att byta låt och visning av skivomslag. Det låter kanske inte som så mycket att hänga i julgranen, men kom ihåg att detta var tolv år sedan!

Varför den kom att heta Dafla Power är en annan historia.

Några år senare hade vi besök av några killar från Spray. De var intresserade av Dafla och vi skrev ihop ett litet avtal som gick ut på att de skulle få låna Dafla Power mot att vi skulle få vidareutveckla en version för publikt användande. Försöket gick bra och en tid senare föddes Spraydio, fast de tyckte att de gjort så många förändringar att avtalet inte längre gällde. Trist!

Men Dafla har fortsatt att vara vår trotjänare på kontoret. Musik sprids mellan anställda och före detta anställda. Ny musik upptäcks och vyer vidgas. Tänk dig att alltid bara vara ett litet klick ifrån din favoritlåt. Tänk dig att alltid ha tillgång till ett stort arkiv med musik där den där låten ligger som ni diskuterade på lunchen. Visst vore det härligt?

Nu (ja eller för ett år sedan för de lyckliga betatestarna) har denna möjlighet kommit till alla. Spotify är här och är för världen, vad Dafla är för Athega. All (nästan) musik du behöver, bara ett litet klick bort och helt gratis. Om du kan leva med litet reklam då och då (för 9 kr för ett dygn, eller 99 kr i månaden blir det reklamfritt). På något sätt har svenskarna (!) bakom Spotify fått till dealar med de stora musikbolagen, Warner, Sony, Universal, osv. Du kan lägga upp dina spellistor och dela med dig av dem till andra, låta dem lägga till låtar och det här är bara första versionen.

Min kollega Peter, tipsade mig idag om Listiply, som är en tjänst som några Spotifyfans skapat där man kan dela med sig av sina listor.

Jag kommer alltid att ha ett ömt hjärta för Dafla, men Spotify rockar!

onsdag 17 september 2008

Supporten har humor

Ibland när man buggrapporterar något är man litet irriterad på systemet. Så även denna gång, när jag skulle rapportera en uppenbar bug i det norska publiceringssystem jag jobbar med för tillfället.

Min irritatiton byttes snabbt mot ett gapflabb när jag läste vem som tog emot ärendet (jag antar att det inte betyder samma sak på norska).

tisdag 16 september 2008

IE8 gör webbläsardjungeln ännu tätare

Konkurrens är bra, men det gör inte livet lättare för en webbutvecklare. Genom åren har vi lärt oss hata eller älska ett begrepp som quirks mode (beroende på var du kommer ifrån) och ibland känt oss duktiga när vi lyckats validera våra XHTML-dokument.

Nu tätnar webbläsardjungeln med bland annat Chrome från Google och IE8 från Microsoft. Om alla webbläsare skulle använda webkit eller gecko vore det lättare att skapa webbsidor som ser likadana ut, oavsett webbläsare, oavsett plattform och kanske till och med oavsett version. En självklar utopi och kanske inte ens eftersträvansvärt. Fast vilken dröm.

Innan varje ärende i vår JIRA får markeras klar, måste en test göras i en rad olika webbläsare. Detta arbete tar mer och mer tid. Tänk dig att behöva köra igenom ett testfall om och om igen för, IE6, IE7, FF2, FF3, Safari och Opera. Tänk dig nu att behöva göra detta även för Chrome och IE8. Detta är tyvärr en verklighet att acceptera och hantera.

För att ytterligare krångla till det har man i den senaste betan av IE8 infört Compatibility View, som gör att IE8 eller till och med användaren kan välja att låta IE8 bete sig som IE7. Visserligen litet bättre än betaettans Emulate IE7-knapp, men vad fasen? Kan vi inte lämna alla gamla IE-versioner bakom oss någon gång?

För att ge webbutvecklare en möjlighet att påverka vad som sker i IE8 har man dessutom infört speciella metataggar att lägga till i webbsidorna. För betaettan var det för att få sidan att renderas i "standards mode" och för betatvåan för att inte visa Compatibility View-knappen.

(bilden hämtad från IEBlog)

När man strävar efter en tillvaro där man kan skapa webbplatser utan att behöva tänka på vilken webbläsare de visas med, känns detta återigen som ett steg i helt fel riktning.

Suck!

måndag 4 augusti 2008

Det regnar igen! (eceTweaks)

Nu regnar det så där mycket igen. Semestern tog slut för mindre än 24 timmar sedan. För en gångs skull fick jag till kombinationen semestersegling och bra väder. Förra veckan var ju helt fantastisk!

Men det här inlägget ska handla om en uppdatering till Firefoxtillägget, eceTweaks, som jag skrev om i början av min semester. En sak som jag irriterat mig på i Escenics webbstudio är att man alltid kommer till en förhandsgranskningssida då man loggar in. Denna sida öppnar sedan själva webbstudion i ett popup-fönster. Så vill kanske vissa ha det, men inte jag. Jag vill ha webbstudion direkt och helt skippa förhandsgranskningssidan.



Denna funktion är nu tillgänglig i eceTweaks 0.1.3. Fler tweaks kommer vid nästa lämpliga regn!

lördag 12 juli 2008

Firefoxtillägg för Escenics webbstudio

Semester i vårt lilla hus på Älö i Västerviks skärgård. Det regnar. Verkligen öser ner. Inte hela tiden, men så där varannan dag. Det passar mig perfekt! Jag har länge tänkt titta på hur det går till att göra tillägg till Firefox.

Som användare av Escenic tvingas man då och då in i webbstudion och det är ingen rolig historia. Detta tror jag alla som provat kan intyga. Framför allt inte när man ska redigera sektionsparameterar i ett oerhört litet textfält på fem rader:



Att fixa till denna tokighet passar utmärkt som utmaning för ett första Firefoxtillägg. Om du är van vid XML, CSS och JavaScript är det enda du behöver lära dig XUL eller XML User Interface Language. XUL är, som namnet antyder, ett XML-baserat språk från Mozilla för att skapa användargränsnitt och används dessutom internt i Firefox.

För att skapa inställningsrutan i mitt tillägg där man kan välja antal rader och kolumner (två inmatningsrutor) gör man så här:


<groupbox>
<vbox align="left">
<label control="section_rows" value="Rader"/>
<textbox preference="pref_section_rows" id="section_rows" size="3">
<label control="section_cols" value="Kolumner"/>
<textbox preference="pref_section_cols" id="section_cols" size="3"/>
</vbox>
<groupbox>


Detta skapar en liten ruta med titeln "Sektionsparametrar", som innehåller två inmatninsfält för rader och kolumner. Notera att man kan lägga till vanlig CSS direkt på elementen.


Mitt första Firefoxtillägg kallar jag för eceTweaks. Det enda det gör är just att lösa problemet med de små textrutorna man redigerar sektionsparametrar i. Det förvalda läget ger dig en textruta som är 90 tecken bred och 20 rader hög, men det går enkelt att ändra genom tilläggets inställningssida. Så länge ingen har laddat ner tillägget och dessutom gett det någon form av betyg, kommer det ligga kvar i Mozillas Experimental-sandlåda. Så ladda gärna ner och sätt betyg!

Det går utmärkt att önska framtida funktionalitet genom att kommentera detta inlägg.

fredag 27 juni 2008

Server too busy – som det borde rapporteras

För någon som är relativt ny i Jaiku-världen och inte har sett deras 503-felsida, "Server too busy", började jag skratta ganska mycket när jag alldeles nyss möttes av följande sida.

Tänk om Athegas sida kunde vara lika eftertraktad så att vi kunde visa vår Star Wars-inspirerade felsida (som om vi hade någon). Vem tar på sig att fixa det?

onsdag 25 juni 2008

Litet väl genomskinligt?

Nu är den här, artiklar som uppdaterar sig själva på aftonbladet.se. Ett exempel på snitsiga användningsområden är Marcus Leifbys direktrapporteringar, som skrivs direkt på plats och uppdateras nästan varje minut. Tidigare har läsaren behövt ladda om sidan för att se om det hänt något. Nytt är nu att brödtexten gulmarkeras för att snabbt och tydlig informera läsaren att något har hänt.

Själva uppdateringen sker med ett vanligt asynkront XHR och är inget sexigt i sig. Gulmarkeringen sker med YUIs ColorAnim och är inte heller den så mycket att prata om.

Färganimeringen sker först från transparent till gult.

var anim = new YAHOO.util.ColorAnim(div, {backgroundColor: { to:"#FFFFCC"}});

När musen förs över brödtexten, tillbaka till transparent. Här uppstår det första problemet.

var anim = new YAHOO.util.ColorAnim(div, {backgroundColor: { to:"transparent"}});

YUI stödjer inte animering till transparent. Därför försöker jag ta reda på vilken bakgrundsfärg som gäller för diven som innehåller brödtexten genom att jobba mig uppåt i DOM-strukturen.

var Dom = YAHOO.util.Dom;
var parent = Dom.get(div);
var bgColor = Dom.getStyle(parent, 'backgroundColor');
while (parent && bgColor == 'transparent')
parent = parent.parentNode;
bgColor = Dom.getStyle(parent, 'backgroundColor');
if (parent.tagName.toUpperCase() == 'HTML') {
bgColor = '#fff';
}
}

Saken är biff! Efter tester i FF2/FF3, IE6/IE7 och Opera fick jag problem i Safari, mitt andra problem. Allting fungerade förutom att den gula färgen inte försvann när jag förde musen över brödtexten. Stöder inte Safari onmouseover på divar? Nej - det var inte det. Det visade sig till slut att transparent i Safari kallas:

rgba(0, 0, 0, 0)

Alltså, för att hitta den egentliga bakgrundsfärgen på en div som fungerar i de allra flesta webbläsarna, kan följande kod användas:

var Dom = YAHOO.util.Dom;
var parent = Dom.get(div);
var bgColor = Dom.getStyle(parent, 'backgroundColor');
while (parent && (bgColor == 'transparent' || bgColor == 'rgba(0, 0, 0, 0)')) { // rgba is Safari-transparent
parent = parent.parentNode;
bgColor = Dom.getStyle(parent, 'backgroundColor');
if (parent.tagName.toUpperCase() == 'HTML') {
bgColor = '#fff';
}
}

tisdag 17 juni 2008

FF3 är bara timmar bort

Med bara timmar kvar till släppet av Firefox 3 är det hög tid att börja förbereda nedladdningsfingret. Ett världsrekordsförsök, som vi har all anledning att stötta. Tänk er bara att tvingas utveckla i IE, inte bara utveckla för IE.

Så ladda ner, uppgradera eller byt till Firefox 3 nu!

Download Day

fredag 13 juni 2008

Nej, jag är inte besviken!

Det är fantastiskt vilket genomslag den nya iPhonen har fått i media, bland kollegor, bland late adopters och early adopters. Veckan har jag spenderat med att berätta att jag inte känner mig lurad, besviken eller arg på att jag så kort tid innan den nya iPhonen släpptes köpte den gamla. Det är många som undrar just det nämligen.

Jag visste när jag köpte den att det alldeles strax skulle komma en ny. Jag resonerade som följer. Jag var oerhört nöjd, exalterad och glad för min iPod Touch (som jag köpte samma timme den släpptes i USA). Först låste jag inte ens upp den, men efter några veckor kände jag mig tvingad och sedan var det ju ingen återvändo!

Jag har sedan slutet av nittiotalet varit helt beroende av min Palm. Då var det en Palm Pilot II. Jag importerade en från USA eftersom den hade bakgrundsbelysning. Nu senast var det en Palm Treo 650. Jag var nästan ensam om den eftersom så få förstår vilken bra PDA/Telefon den är. Jag har vid flera tillfällen provat att ta mig an HTC-telefoner med hemska Windows i och det går bara inte. Man får ju vänta i dagar på att den ska reagera på saker man gör.

Efter någon månad med min Touch insåg jag att den telefon jag varit beroende av, mycket för PDAn i den, helt plötsligt bara hade blivit en telefon för mig. Jag bar med mig Touchen överallt och var konstant frustrerad över att jag inte kunde hitta en öppen accespunkt. Touchen har ju ingen telefon i sig ;) Det naturliga svaret på mina problem var självklart iPhonen. Hur ska man då kunna hålla sig när man bor granne med Apple Storen i San Francisco under JavaOne?!

Alltså, 3G, GPS, bättre batteritid och pris. Allt finns i iPhone 3G. Vem behöver GPS när trianguleringen fungerar så läskigt bra (ja, jag bor i en tätort ;) Det enda jag verkligen kommer att sakna är i så fall Turbo 3G om den går att använda istället för en dongel till datorn. Om jag sedan kan använda den med Telenor - ja, då är det dax att byta.

Men som det är nu är jag en löjligt lycklig gamla-iPhone-kille.

måndag 9 juni 2008

\\\\\\\\

Jag måste bara kort få meddela att det ibland går litet orm i escapandet av strängar. Framför allt om man pysslar med reguljära uttryck i Java.

Idag skulle jag escapea alla backslashar (\) i en sträng. Jag ville helt enkelt byta ut dom mot två backslashar (\\).

I perl hade jag,

$txt = 'hej\n'
$txt =~ s/\\/\\\\/g
print $txt

> hej\\n

vilket ju känns ganska rakt på. Backslashen i sig måste escapeas med en backslash (\\). För att få två backslashar i den resulterande strängen blir det således (\\\\).

Nu över till Java:

String txt = "hej\\n";
txt = txt.replaceAll("\\\\", "\\\\\\\\");
System.out.println(txt);

> hej\\n

Härligt va?! ;) Anledningen till alla backslashar är att man först måste escapea backslashen i Javasträngen och sedan en gång till i det reguljära uttrycket.

För att få två backslashar måste man alltså

2 * 2sträng * 2regexp = 8

torsdag 5 juni 2008

Artikelkommentarer


Aftonbladet var verkligen inte först ut med detta, men sedan några timmar går det nu att kommentera artiklar på Aftonbladet. Inte alla ännu, utan bara artiklar på Fotbolls-EM-siten, http://www.aftonbladet.se/sportbladet/fotboll/fotbollsem2008/. Den första artikeln som fick kommentarer handlar om Ljungberg.

Artikelkommentarerna hanteras av Snack, Aftonbladets samlade plats för läsarmedverkan. Integrationen med publiceringssystemet för aftonbladet.se, Escenic, har jag jobbat med denna vecka. Det känns himla roligt att få komma i mål, lagom till EM och med en lösning som jag tror håller. Det är alltid en utmaning att skapa dynamiskt innehåll på en site med den enorma trafikmängd som aftonbladet.se hanterar.

På lördag drar EM igång och i samband med det kommer jag hänga på mina övervakningssidor för att se att det håller. Håll gärna tummarna!

På det privata planet har denna vecka varit fantastiskt intensiv. Helger, kvällar och mornar har varit en enda lång packorgie. Vi har nämligen köpt en ny lägenhet, ett rum större i samma hus där vi bor. Vi ska inte flytta än på ett tag, men den gamla lägenheten måste säljas och det innebär home staging. Sist jag sålde en lägenhet plockade man undan litet personliga detaljer som foton på familj och smutstvätt kanske. Det har ändrats litet. Vi fick en lista på några A4-sidor med "åtgärder" och har i princip tömt hela lägenheten och bara lämnat kvar viss möblering. I onsdags var första visningen, ytterligare två på söndag och måndag är planerade. Tipsa era vänner! ;)

Under visningstiden bor vi på Degerholmen (ute i skärgården i närheten av Torö, Nynäshamn) hos världens bästa svägerska och svåger.

Dit ska jag nu!

måndag 12 maj 2008

JavaOne 2008 - Groovy och Grails

Egentligen handlar inte detta om Groovy eller Grails. Det handlar lika mycket om Ruby och Rails eller JRuby. Det är ju i det stora hela i princip samma sak. Rails som ett MVC-webbramverk har länge legat högt upp på min privatprojektslista (alltför länge). Athegas techdagar har handlat om Ruby on Rails, men jag har lyckats missa dom. Därför var det Graeme Rocher från G2One Inc som på JavaOnes första dag äntligen bände upp ögonen på mig. Jag gick i taket!

Så elegant! Under den tio minuter långa frågestunden som följde efter hans 50 minuterssession, skapade jag min första Grails-applikation – gnote, för att spara anteckningar från exempelvis JavaOne-sessioner. :)

Om du också vill skapa din första Grails-applikation på tio minuter, kan du följa denna minitutorial.

Ladda ner och packade upp Groovy och Grails:

wget http://dist.codehaus.org/grails/grails-bin-1.0.2.tar.gz
wget http://dist.groovy.codehaus.org/distributions/groovy-binary-1.5.6.zip

Sätt några miljövariabler:

export GRAILS_HOME=/usr/local/grails-1.0.2/
export GROOVY_HOME=/usr/local/groovy-1.5.6/
export PATH=$PATH:$GRAILS_HOME/bin:$GROOVY_HOME/bin

När miljön är på plats är det bara att skapa applikationen:

grails create-app gnote

Mina anteckningar måste sparas någonstans, så jag skapar en Note-klass:

cd gnote
grails create-domain-class Note

Jag editerar den skapade filen, grails-app/domain/Note.groovy, och lägger till två fält, note och title:

class Note {
String title
String note
}

Till sist vill jag klistra ihop allt med en View och en Controller:

grails generate-all Note

Klart! Starta webbappen:

grails run-app

Det fungerar!


Allt jag behöver göra för att kunna droppa den här applikationen i min favorit-container (Tomcat, Resin, Glassfish, etc.) är:

grails war

Det ger mig en war med kompilerad Javakod innehållandes min applikation, som under ytan förlitar sig på kända ramverk såsom, Hibernate, Spring och log4j.

Därför skulle jag vilja tacka Graeme Rocher, för att du bände upp mina ögon. Jag kan tänka mig en rad olika områden, där jag kommer använda Groovy och Grails framöver.

fredag 9 maj 2008

JavaOne 2008 - Dag 1

Den stora kick-offen! Java + YOU. Spåret i år – det handlar om dig (och Java då förstås). Den stora General Sessions-salen fylls med ca 15 000 människor och på scenen dansar ett ganska trist dansgäng som inte hade klarat uttagningarna till ens den nordiska varianten av So You Think You can Dance. Till cool musik hoppar James Gosling fram och börjar kasta egenhändigt designade T-shirts på publiken med hjälp av en jätteslangbella. Tyvärr har de ingen rökmaskin, det enda som saknas för att vinna över de sista tvivlarna på hur mycket geek JavaOne faktiskt är.

Två saker står ut från öppningsnumret. Neil Young kommer in och berättar att han älskar Java och Blu-ray och passar samtidigt på att sälja på oss hans liv i form av Blu-ray-diskar. Samtidigt hävdar Suns VD att det finns en JVM i alla Blu-ray-spelare. Det hade jag ingen aning om. På vägen ut försöker Neil ta med sig demo-PS3an, fast han skojar bara.

Det andra är att Suns VD, Jonathan Schwartz, är sjukt lik vår finansminister, Anders Borg. Kolla bara; till vänster Jonathan i en bild jag tog på invigningstalet och till höger en bild på Anders som Mats Strand tagit vid ett helt annat tillfälle. Jag har inte gjort något annat med bilderna än att jag frilagt dem.

JavaFX
Tydligen var JavaFX den stora grejen förra året på JavaOne, men då var ju inte jag här så därför var det ganska roligt att se hur lätt man kan skapa allt från GUI-komponenter till grafisk effekter såsom morphning eller animationer. Tyvärr krävs Java 6 som av någon mycket märklig anledning inte finns till min 32-bitars MacOs X. :(

keyFrames: [
KeyFrame {
time: 0s
values: [
geom => shape1 tween Interpolator.EASEBOTH,
color => Color.YELLOW tween Interpolator.EASEBOTH
]
},
KeyFrame {
time: 3s
values: [
geom => shape2 tween Interpolator.EASEBOTH,
color => Color.GREEN tween Interpolator.EASEBOTH
]
}
]

Mycket mer kod än så behövs inte för att morpha från en gul form till en annan, grön form tre sekunder. Ganska intressant. Vem vinner kriget, Microsoft (Silverlight), Adobe (Flex/Air) eller Sun (JavaFX)?

Störst för mig denna dag var ändå Groovy och Grails. Det kräver sin egen post!

onsdag 7 maj 2008

JavaOne 2008 - Java University

Det är ett helt samiskt tempo på sessions, BOFar, Labbar och fester, så det har varit svårt att hinna med att rapportera från JavaOne 2008. Därför kommer här nu en första rapport från i onsdags, två-tre dagar för sent.

Jag hade två kurser inbokade, Developing Enterprise Applications with the Spring Framework på förmiddagen och
Web 2.0: Leveraging the Project jMaki and Google Web Toolkits for Rapid Website Development på eftermiddagen.

Tyvärr satt ingen av kurserna så där perfekt som jag hade hoppats. Chris Richardson, som höll i kursen, lyckades i alla fall få mig att på allvar titta närmare på AOP, aspektorienterad programmering. En annan mycket viktig fördel som Spring hjälper dig med är decoupling (vad man nu kallar det på svenska). Ju öppnare och renare du lyckas hålla det mellan dina klasser och moduler, desto lättare blir det att testa, underhålla och förstå koden. Dessutom låser du dig inte till ett visst teknikval i samma utsträckning.

Vore det inte märkligt att behöva bestämma sig för en livsmedelsaffär där man handlar och sedan behöva leva med det valet för resten av sitt liv?

public class You {
private Konsum store = new Konsum();

public void shop() {
store.shop();
}
}

I det här fallet är You starkt kopplad till affären Konsum och det är svårt eller omöjligt att byta affär utan att skriva om koden. Om vi nu istället tänker oss att vi har ett interface, Store, som representerar en affär där vi handlar och låter något annat (Spring) avgöra var vi handlar:

public class You {
private Store store

public void setStore(Store store) {
this.store = store;
}

public void shop() {
store.shop();
}
}

I Springs konfigurationsfil:

...
<bean id="icaStore" class="se.athega.stores.Ica"/>
<bean id="you" class="se.athega.persons.You"/>
<property name="store"><ref bean="icaStore"></property>
</bean>

...

Allt jag behöver göra nu för att byta affär är att ändra i en XML-fil. När jag vill testa You kan jag enkelt mocka Store och livet har blivit så mycket enklare.

På eftermiddagen var jag på väckelsemöte för Google Web Toolkits. Själva frälsningen stod David Geary för. Han menade att det var synd om alla som använde Struts och skrek "AJAX!" varje gång något hände på sidan utan att den laddades om, även om det bara var att uppdatera ett textfält. Förutom GWT, fick jag en introduktion till JMaki som är en wrapper runt de flesta populära Web 2.0 JavaScript-ramverken, såsom Dojo, YUI, etc. Jag kommer definitivt att använda JMaki för de fall jag behöver blanda de olika ramverken.

Fördelarna med GWT är framför allt att du kan programmera med Layout-paneler och UI-komponenter på samma sätt som du skulle om du gjorde ett desktopprogram. GWT översätter sedan Javakoden du skriver till HTML, CSS och JavaScript, helt automagiskt. Detta ger dessutom en fantastisk fördel tillsammans med Googles fakebrowser, som du kan använda under utveckling, där du kan debugga och stega dig igenom kod, oavsett om det är serverkod eller klientkod.

söndag 4 maj 2008

Avstamp

När jag var 22 år gammal, startade vi Athega. Det är över tio år sedan nu. Jag kan fortfarande komma ihåg känslan när vi, alla fyra samtidigt höll i kuvertet till PRV, på väg in i den gula brevlådan. Vi hade en idé om att Internet kunde användas till mer än hypade webbsidor, skapade av glödheta så kallade webbyråer. Vår plan var att utveckla tre produkter, vilka vi hade någorlunda färdiga på ritbordet.

Den första var ett system för undersökningsföretag att enkelt kunna göra enkätundersökningar på nätet. Den andra ett verktyg för att ta bort flaskhalsen (en HTML-kunnig person) att publicera information på intranätet eller hemsidan. Tanken var att informationslämnaren själv skulle kunna uppdatera sidan. Den tredje var ett system för att skapa en produktkatalog med detaljerad produktinformation, handel med kundvagn och avancerad administration.

1997 fanns ingen av dessa lösningar i någon speciellt imponerande utsträckning. 1999 fanns de dock allihop på marknaden, Vestigo (webbenkäter), Athega NetPublisher (CMS), Athega BizKit (produktkatalog) och hos företag som Skandia, Ericsson och Allgon.

Idag känns det inte särskilt revolutionerande att prata om webbapplikationer, men på den tiden var vårt mantra, ”Hej, vi kommer från Athega. Vi är inte en webbyrå”. Athega kom under åren att utvecklas till ett företag man vände sig till för skräddarsydda webblösningar. När man behövde något som inte gick att köpa i krympplast och kartong. Parallellt med detta började vi också hyra ut specialister inom systemutveckling och projektmetodiker.

Tidigt började varje Athegian skriva fredagsrapporter på vårt intranät. Tanken var att en gång i veckan dela med sig av nya erfarenheter, idéer och tankar. Kort sagt var det som en intern blogg, fast begreppet ”blogg” var inte uppfunnet ännu.

Välkommen till min fredagsrapport!