Skip to Content »

Life of Recht » archive for 'Java'

 Bule i bil

  • November 9th, 2006
  • 5:39 pm

Jaja, en gang skal jo være den første, men det er nu alligevel træls, især når man ikke selv er ude om det. Da jeg skulle på arbejde i morges (på gå-ben) kom jeg til at se, at nogen havde efterladt et større mærke i siden af min bil… Det viste sig at nogen havde været imod med en bil, og at der var kommet en fin ridse gennem lakken. Og selvfølgelig ikke nogen seddel om, at vedkommende var klar over det.

Heldigvis kan jeg da huske, at jeg parkerede ved siden af en blå Fiat Panda, og den holdt da også på parkeringspladsen da jeg kom hjem. En lille opmåling og nærmere eftersyn på pandaens kofanger afslørede da også, at der snildt kunne være tale om den skyldige. Nu skal jeg så bare have fundet frem til ejermanden.

 Træstruktur i en database

  • June 21st, 2006
  • 10:21 pm

Jeg fik lige et link til, hvordan man gemmer en hierarkisk datastruktur i en database på en måde, der også er pladseffektiv.

Den normale måde er at have en tabel med (id, parentId) – det er lige til at implementere, og passer fint på en objektmodel ovenpå. Desværre er den model meget ineffektiv, da forespørgsler typisk medfører rekursivitet, og dermed flere forespørgsler til databasen.

Det kan afhjælpes ved at indføre noget redundans – det mest kendte eksempel er vist det, hvor der er en række for hver efterfølger til en parent sammen med et niveau – dvs (id, parentId, level). Den struktur er optimeret til forespørgsler, til gengæld tager det noget mere plads, og det er mere kompliceret at flytte knuder rundt.

En anden udgave, der er ca. lige så effektiv, er beskrevet på SitePoint. Her inddeles træet i deltræer, hvor knuderne i et deltræ får tildelt værdier, der ligger i et kendt udfaldsrum. Dermed kan man spørge på alle knuder, hvor værdien er mellem to værdier, og på den måde få alle børn ud. Interesting stuff.

 JAOO

  • June 8th, 2006
  • 6:20 pm

Reklame:
De vigtigste talere og emner er ved at falde på plads for årets JAOO, så det er vist bare med at få sig meldt til. Personligt har jeg tænkt mig at klone mig i 5, så jeg kan følge alle tracks.
Uanset hvad, så er det bare med at få meldt sig til. Nu.

 JavaOne overstået

  • May 20th, 2006
  • 7:20 am

Så kom jeg alligevel helskindet igennem JavaOne. Det har været en ganske lærerig oplevelse, og der er en hel del emner, jeg kan putte på min liste over ting, jeg skal have kigget på engang. Det værste er sådan set, at mange af tingene er så nye, at de ikke vil indgå i mit daglige arbejde i lang tid, men så er det jo altid godt, at man også kan lave noget i fritiden…

Nå, men dagen gik med en session for alle med Scott McNealy, James Gosling og andre berømtheder. Det var ikke videre teknisk, men med den slags personer gør det ikke så meget.
Derefter blev det til en session om JMX, hvilket var en af de mindre heldige sessions. Den blev holdt af to indere og en fra Spring, og de to indere trak det godt ned – både fordi de ikke helt var til at forstå og fordi de ikke rigtigt magtede at forklare emnet.
Videre til Scott Ambler, der holdt en session om, hvorfor agile processer virker, og hvad de går ud på. En farlig type, der havde masser af gode pointer – og som sagde lige lovlig mange ting, der passer lidt for godt på det projekt, jeg er på for tiden. Det er altid godt at blive bekræftet i sådan noget.
Dagen blev sluttet af med en gang tomgangstale af en fra Adobe – emnet er jeg lidt usikker på. Jeg troede at det skulle handle noget om forskellige frameworks til klientudvikling, men det gjorde det absolut ikke. I stedet var det en eller anden løst sammenhængende snak om forskellige teknologier, og hvor godt det kunne være, hvis tingene passede lidt bedre sammen.

Da alt det seriøse var overstået, fik jeg shoppet lidt – mest bøger og lidt tøj, og aftenen blev sluttet af med burger og milk shake. De to ting ligger nu så godt i maven, at jeg vist bare skal i seng.

 3. dag til JavaOne

  • May 19th, 2006
  • 7:37 am

Jeg kom lige til at se, at jeg slet ikke havde skrevet noget om dag 3 til JavaOne, så det skal der da lige rettes op på. Dagen startede lidt sløvt efter gårsdagens indtag af alkohol, så jeg kom ikke lige til den første session – sådan kan det jo gå, man kan ikke nå det hele.

Den første session jeg var til var om EJB3. Jeg har hørt om emnet før et eller andet sted, men jeg har ikke set nærmere på det. På trods af, at jeg egentlig havde prøvet på at tage en af de sessions, der lødt lidt mere avanceret, så var der alligevel ikke noget videre nyt. Det var de sædvanlige demoer af, hvordan annotations gør alt lettere, og hvordan man pakker en enterprise-applikation sammen. Ikke noget overraskende.
Derefter en session omkring scripting i Java5/6, specielt med Groovy. Det ser ud til at være et spændende sprog, men jeg har endnu ikke helt set lyset mht. scripting. Min første tanke er, at det virker som en panikhandling, især efter at Ruby on Rails er begyndt at få succes. Det giver mening at bruge et scriptingsprog masser af steder, men jeg kan ikke helt se, hvorfor det skal ind i en jvm – det gør om ikke andet langsommere at eksekvere et script på den måde. Der er muligvis visse hjørner, hvor det kan være brugbart, fx til DSL eller fx specificering af testcases. Det skal blive spændende og se, om det nogensinde slår igennem.

Manden bag JGoodies holdt en session omkring data binding. Det var en lidt underlig session, for han endte næsten med at anbefale, at man ikke skulle bruge hans binding-library, men at man i stedet skulle holde sig til en traditionel MVP-tilgang. Jeg synes nu, at det andet så smartere ud, men det er muligvis et spørgsmål om smag.

En rimelig kort dag blev sluttet af med “Extreme GUI Makeover”, hvor et par gutter fra Suns Swing-team viste, hvordan man laver gøgl med swing. Det var ret godt, og faktisk var mange af de ting de viste ikke voldsomt svære at lave. Det siger en hel del om Swing, og hvor fleksibelt det egentligt er.

 Constructor Builder Pattern

  • May 19th, 2006
  • 12:46 am
Joshua Bloch præsenterede et interessant pattern i hans Effective Java Reloaded session. Dem der har læst Effective Java ved, at han er stor fortaler for objekter, der ikke kan ændres efter de er blevet instantieret. Det synspunkt har jeg arvet, og det fungerer fint – bortset fra et lille problem, nemlig at hvis et objekt har mange attributter, så bliver klassens constructor temmelig stor. Det bliver kun værre når nogle attributter ikke er påkrævede. Enten skal man fylde defaultværdier i, eller også skal man lave en hel stak constructors – hvor mange ved man aldrig helt, for det kommer jo an på brugen. Det er der imidlertid en løsning på, der er baseret på Builder Pattern, hvor man først bruger en builder til at konfigurere med, og derefter får et færdigt objekt. I constructor-tilfældet ser det nogenlunde således ud:
public class Test {
private final String name;
private final String field;

private Test(TestBuilder builder) {
name = builder.name;
field = builder.field;
}

public static class TestBuilder {
private String name;
private String field;

public TestBuilder name(String name) {
this.name = name;
return this;
}

public TestBuilder field(String field) {
this.field = field;
return this;
}

public Test build() {
return new Test(this);
}
}

public static void main(String[] args) {
Test t = new Test.TestBuilder().
name("name").field("f").build();
}
}

Det har oven i købet den fornemme sideeffekt, at man får noget, der ligner navngivne parametre – dvs. ikke noget med at huske på, hvilken rækkefølge parametrene kommer i længere. Har en klasse nogle attributter, der er påkrævede, skal de bare tilføjes i constructoren til builderen.

Nu er der så bare lige nogen, der skal lave et lille source-plugin til eclipse, der lige som “Generate Setters and Getters” kan autogenerere sådan en builder – det burde ikke være noget videre problem.

 Dag 2 til JavaOne

  • May 18th, 2006
  • 8:42 am

Så er dag 2 til JavaOne stort set overstået. Dagens sessions inkluderede Joshua Bloch om Java Puzzles og Effective Java Reloaded. Den første omhandlede relativt skumle features i Java 5, mens den anden handlede om best practices i generics.
Derudover var jeg til en stak sessions om desktop java, bl.a. om Mattise fra Netbeans. Jeg er selv flittig Eclipsebruger, men man må nok sige, at de har gjort et eller andet rigtigt mht. guibuilder i Netbeans. Det er man nok tvunget til at se nærmere på på et tidspunkt.
Et andet af indlæggene om desktop var fra manden bag JGoodies, der fortalte noget om, hvordan man laver gode Swing-applikationer. Endelig var der også en session om data binding. Generelt var der ikke så meget nyt, men det de bekræftede, at der er en masse at hente, fx ved at bruge gui-builders og andre frameworks i stedet for at gøre alt manuelt.

Endnu en gang gik jeg glip af aftenens BOFs, da vi var meldt til en Geronimofest. Det viste sig, at der var gratis drikkelse, og at de godt kunne finde ud af at lave nogle gode (og temmelig stærke) white russians, plus at der var god mad. Det var godt, men vi blev smidt ud da festen lukkede kl 22. Heldigvis fandt vi en Sunfest, hvor alt åbenbart også var gratis, så det var ok… Lige indtil nogle amerikanske typer, vi havde mødt tidligere på aftenen, mente at vi skulle videre… Hvad de ikke lige havde fortalt os var, at vi skulle videre til en eller anden skummel stripklub, der endda kostede 20$, og som ekstra bonus ikke havde nogen bar (fordi det efter sigende gjorde det tilladt for mindreårige at komme ind)... Bitter afslutning på en ellers glimrende aften.

 Første dag på JavaOne

  • May 17th, 2006
  • 6:20 am

En hurtig opdatering fra JavaOne: Dagen gik med et par keynotes, og så en session om hvad der sker i desktop java i version 6. Det var nogenlunde interessant, men det var delt mellem tre forskellige talere, der var af meget varierende kvalitet.
Derefter holdt Ben Galbraith, som jeg tidligere har set i anden anledning. Han holdt et oplæg om, hvordan man på 8 måder kan blive mere effektiv til at lave Swing. Ganske interessant, men ikke voldsomt meget nyt – problemet er bare at få implementeret de 8 forslag i virkeligheden, hvilket godt kan være noget svært. Det kommer nok engang…

Derefter gik det ud over concurrency i Java5, hvilket var en lidt langhåret session – det er sådan noget vist altid. Det gav et fint indblik i, hvordan den nye api fungerer, og hvordan den kan hjælpe gevaldigt på diverse tråd-løsninger af varierende kvalitet, som man ellers får brygget sammen.
Selvom jeg havde planlagt mere, blev den sidste session om TestNG, der er et alternativ til Junit. Jeg har haft luret lidt på det, men aldrig rigtigt rodet med det. Derfor gav denne session et fint indblik i, hvilke features det har, som junit ikke helt kan klare. Det er specielt i forhold til at definere suites og afhængigheder, der ser interessant ud. Derudover er der også et koncept om dataproviders, så der er en standardiseret måde at pumpe data ind i testcases med. Denne session blev i øvrigt holdt af Hani fra BileBlog.

Dagen blev sluttet af med en tur i biografen til en film, der næsten ikke kan blive mere amerikansk: Mission Impossible 3. Og nej, de bliver bestemt ikke bedre med alderen.

 JavaONE nærmer sig

  • May 10th, 2006
  • 7:08 pm

Så er de sidste detaljer om JavaONE ved at være på plads – jeg har fået en mængde dollars, rejseforsikring, flybillet, registreringsbevis og alt det andet, der skulle være nødvendigt. Der mangler sådan set kun een væsentlig ting, og det er en eller anden form for kuffert. Det må jeg se, om jeg kan købe lørdag.

 Test Driven Development

  • May 4th, 2006
  • 9:40 pm

TDD lyder som en glimrende, men det er noget svært at praktisere i virkeligheden – det er sådan noget med disciplin og sager, og så bliver det straks værre.
For dem, der ikke kender så meget til det, eller som gerne vil lære et par tricks til Eclipse, er der lidt hjælp at hente i denne lille introduktionsvideo om TDD i Eclipse.