Optimera Stockholm

Det är lite lockande att som Göteborgare passa på att skämta om bästkust och hur man har behov av optimering i Stockholm medan allt är fint i Götet, men dagens seminarie/minikonferens (twittertag #optsthlm) på ämnet webboptimering/webbprestanda förtjänar inget annat än lovord! Talarnas ämnen och innehåll var mycket väl utspridda över hela problemrymden från server till klient och allt där mellan. Continue reading

Speed Matters

Some high traffic sites conducted research and uncovered the following:

  • Google.com: +500 ms (speed decrease) -> -20% traffic loss [1]
  • Yahoo.com: +400 ms (speed decrease) -> -5-9% full-page traffic loss (visitor left before the page finished loading) [2]
  • Amazon.com: +100 ms (speed decrease) -> -1% sales loss [1]

[1] http://home.blarg.net/~glinden/StanfordDataMining.2006-11-29.ppt
[2] http://www.slideshare.net/stoyan/yslow-20-presentation

Signeringsfest: GPG och CA Fire and Forget

Jag var för första gången med vid en stor “signeringsfest” på Fosdem2010 – över 250 nycklar var inskickade men i slutändan var det inte fler än 80 som dök upp i kylan och duggregnet. (Jag själv kom 20 minuter sent.)

Hur som haver – efteråt gäller det att signera och få iväg de signerade nycklarna. Till detta finns caff, CA Fire and Forget, som just gör det man vill:

  • hämtar hem nyckeln
  • signerar den
  • skickar den krypterad till mottagarens adress (bara mottagaren med rätt privat nyckel kan läsa signaturen).

caff -m yes -u 9B1E4234 `cat keys-to-sign.txt`

och detta kommer i paketet signing-party.

Det finns dock inget som plockar ut fingerprintdelen ur den ASCII-fil som distribueras, så jag fick hacka ihop detta själv med lite python:

#!/usr/bin/python
 
indicies = []
keysByIndex = {}
lastIndex = False
 
# get the indexes of the keys "verified", as they appear on the key paper (000, 001, ...)
for line in open("id-verified.txt"):
  if len(line) == 4:
    indicies.append(line[0:3])
 
# build up index > key part
for line in open("ksp-fosdem2010.txt"):
  if "Fingerprint OK" in line:
    lastIndex = line[0:3]
  else:
    if lastIndex:
      key = line[12:20]
      keysByIndex[lastIndex] = key
      lastIndex = False
 
# write keys out to file
print "You've mareked %s out of %s - verify this before running caff" % (len(indicies), len(keysByIndex))
out = open("keys-to-sign.txt", "w")
for index in indicies:
  key = keysByIndex[index]
  out.write(key)
  out.write(" ")

Peka och klicka-fel

Jag är helt övertygad om att haveriet i Malmö hade kunnat undvikas om det varit färre peka-och-klicka-kurser för nätverskfolk.

Efter det inträffade har sjukhuset fått installerat en så kallad spanning tree-funktion som förhindrar störningar på grund av felkopplade kablar.

Getting Things Done & Pomodoro

Emellanåt har jag fler än två saker att göra på jobbet (annat var det förr!) så mitt behov av pomodoro eller annan strategi för att beta av en att göra-lista är mycket begränsat. Lite då och då sitter jag dock med en “privat” att göra-lista (som bara växer) och nu är ett sådant tillfälle – “dags att testa pomodoro” tänkte jag och letar upp en Pomodor-timer för Gnome lite snabbt.

Den visar sig inte vara översatt till svenska (använder gtranslator för detta) och den kommer inte förkompilerad som binär. Det var längesedan jag byggde debianpaket, men det brukar vara ganska enkelt. Låt oss se:

sudo aptitude install debian-builder

Efter uppackning av tar-bollen kör jag debuild som säger:

dpkg-checkbuilddeps: Ej uppfyllda byggberoenden: cdbs (>= 0.4.43) debhelper (>= 6) python-distutils-extra (>= 2.10)

Så vi drar in dem med: sudo aptitude install cdbs debhelper python-distutils-extra och kör debuild igen.

Bygget fungerade tyvärr inte ändå och fick rapporteras som en bugg. Använder tills vidare timer-applet.

Internet Explorer under Ubuntu 10.04

Ja – min arbetsgivare använder en lösning för registrering av utlägg som är hårt knuten till ActiveX-komponenter. Därför är det smidigt att kunna köra Internet Explorer under Ubuntu GNU/Linux 10.04 (äks Lucid Lynx). Paketet som de flesta kört heter IEs4Linux och man får installera det själv – Ubuntu paketerar det inte.

Jag drog in det och instruktionerna på hemsidan stämmer, men jag fick (som andra också rapporterat) problem med GTK+ pga att jag körde flera skärmar. Med flaggan –no-gui körde installationsprogrammet ies4linux utan större problem – flash-installationen sparkade bakut men det gör mig inget.

Eclipse och TDD

Eclipse är ganska svagt utrustat från start för att köra TDD effektivt. Det verkar inte komma ifrån att code completion måste utföras med CTRL+mellanslag – här kommer IntelliJ för alltid lysa med sin vackerhet (där mellanslag eller tab är “markören” som kollar om den skall auto-complete:a).

Favorites

Följande klasser är bra att peta in i varje workspace Window » Preferences » Java » Editor » Content Assistant » Favorites:

  • java.util.Arrays.*
  • java.util.Collections.*
  • org.junit.Assert.*
  • org.mockito.BDDMockito.*
  • org.mockito.Matchers.*
  • org.mockito.Mockito.*
  • org.mockito.MockitoAnnotations.*

Templates

Börja med att ta bort  alla SWT, ta bort test för JUnit 3.

WORK IN PROGRESS!

before

${staticImport:importStatic('org.mockito.MockitoAnnotations.initMocks')}
@${beforeAnnotation:newType(org.junit.Before)}
public void ${setup}() throws Exception {
  initMocks(this);
  testee = new ${cursor};
}

Det är givetvis trevligare med @RunWith(MockitoJUnitRunner.class). MoreUnit kan hjälpa till med att sätta upp detta.

mock

@Mock private ${type} ${mock};

bdd – BDD-ish Test

@Test public void statement() throws Exception {
    given(${mock}.${method}).willReturn(${value});
 
    // WHEN ${when}
    ${testee}.${act};
 
    // THEN ${then}
    verify(${mock}).${method}(${arguments});
}

tdd – TDD test

@Test public void statement() throws Exception {
    // Arrange
    // Act
    // Assert
}