onsdag 17 april 2013

Soppa - eller vad vi kan göra med jSoup och Apache Derby

Jag har letat efter hjälpmedel att analysera en webbsajt. Och inte hittat något bra.

Det finns sajter som analyserar enstaka sidor men jag har inte hittat något bra verktyg för att analysera en hel sajt.

Eftersom en sajt snabbt blir stor så tror jag att man måste ha ett verktyg som man kan köra på sin klient. Mycket data måste sparas och analyseras.

Min tanke var också att verktyget skulle vara enkelt att använda av en icke tekniskt kunnig webbmaster men ändå ha möjligheten att konfigurera mycket.

Kan vi bygga något sådant?

Hämta och analysera webbsidor

jSoup är ett bibliotek som man kan använda för att hämta och analysera HTML-sidor. Det är enkelt att använda för att hämta sidor och plocka ut delar av HTML sidan. Man kan plocka ut delar med hjälp av CSS selectors. Exempel:

doc = Jsoup.connect("http://www.bth.se").get();
Elements html = doc.select("html")

Lagring

För att kunna lagra de data man behöver för en sådan här typ av applikation behöver man något typ av databasmotor. Jag har fastnat för Apache Derby.

Fördelen med Apache Derby är att man kan använda den inbäddad. Man behöver alltså inte köra den som en server. Det gör att den är mycket lätt att sätta upp och använda. Egentligen behöver man bara inkludera jar-filen för att man ska kunna få det att fungera. Easy peasy.

Intressanta problem

Eftersom sajter idag ofta är dynamiska och komplicerade så kommer man ställas inför ett antal intressanta problem.

Hur, till exempel, ska vi bestämma om två olika URLar returnerar samma sida? Min teori nu är att man ska titta på längden av texten på sidan tillsammans med antalet tokens som man hittar på sidan. Jag tror att man då får ett bra mått som man kan använda för att bestämma om man har dubletter.

En annan fråga är hur man ska undvika att hamna i oändliga loopar när man hanterar URLar med URL-parametrar. På BTH t ex så använder vi idag Lotus Notes/Domino och där är det mycket lätt att hamna i oändliga loopar så man måste på något sätt hantera detta.

tisdag 9 april 2013

Systemförvaltare för Agresso

Nu är det officiellt att jag ska börja jobba som bl. a. systemförvaltare av Agresso.

Tanken är att vi ska kunna göra mer själva på BTH och minska kostnaden för konsulttjänster samtidigt som vi ska bli en bättre beställare gentemot vårt konsultstöd.

Saker som vi borde kunna klara av själva är att skapa exporter och importer till systemet, att hantera flödena på egen hand och att kunna skapa bättre rapporter.

Som jag ser på det kommer min ny roll ha tre delar:
  1. Systemförvaltare
  2. Projektledare
  3. Data- och systemexpert
Egentligen börjar jag inte med detta förrän i maj, men eftersom detta tangerar min roll i E-inköpsprojektet så kommer jag börja så smått redan nu.

onsdag 3 april 2013

Effective Java

Programmeringsböcker har en tendens att vara tjocka tegelstenar med kod sida upp och sida ner. Men emellanåt hittar man böcker som är mer reflekterande.


Effective Java av +Joshua Bloch är en sådan bok. Det är ju en bok om Javaprogrammering men visdomen i boken går ofta att applicera på andra programmeringsspråk också.

Boken är indelad i 78 punkter. Var och en på ett par tre fyra sidor. Varje punkt tar upp en specifik aspekt av Javaprogrammering. Sett ur ett brett perspektiv. Det kan handla om objekt, api design, undantag med mera.

Exempel. Punkt 15. Undvik förändringsbara objekt (mutability). Javas objekt är som grund förändringsbara. Men man kan göra ett Javaobjekt oförändringsbart (immutable) genom att följa fem regler.
  1. Skapa inga metoder som kan förändra ett objekts tillstånd.
  2. Se till att klassen inte kan ärvas (med final).
  3. Gör alla fält final.
  4. Gör alla fält privata (private).
  5. Se till att klassen själv är den enda som har tillgång till förändringsbara komponenter (kontroll, kontroll och kontroll).
Fördelen med objekt som inte kan förändras (immutable objects) är att de är enkla att förstå, de är trådsäkra i sig själva och är bra byggstenar för mer avancerade objekt.

Det är få programmeringsböcker som har fått mig att tänka så mycket, och djupt, som Effective Java. Rekommenderas varmt.