Arkiv för april, 2009

Låt inte Tomcat jobba i onödan

Ett vanligt upplägg för en lastad sajt med någorlunda statiskt innehåll ser ut enligt nedan:

Upplägg, lastad sajt

Upplägg, lastad sajt

I korthet innebär det att den största delen av trafiken hanteras av enkla webbcachear som leverar sidor till slutanvändarna. Med ett visst intervall efterfrågar cachearna frontarna efter nytt innehåll. Frontarna kan exempelvis köra en eller flera Tomcat-instanser som genererar innehållet. På detta sätt kan även riktigt stora siter klara sig på ett tiotal maskiner.

För alla JSP-sidor som Tomcat-frontarna genererar åt cachearna skapas nu en session, precis som Servlet-standarden föreskriver. Det är helt i sin ordning, fast helt onödigt i det här fallet. Det genererade innehållet levereras inte direkt till slutanvändaren, utan till cachen. Kan man få servlet-motorn att inte skapa sessioner i onödan och på så sätt spara sina dyra resurser?

Ja, ett sätt är att överst i sin JSP-sida helt enkelt utbrista:

<%@page session="false"%>

Dock är det kanske inte att föredra i ett litet större projekt med hundratals JSP-sidor. Det man letar efter är ett sätt att slå av det centralt för alla JSP-sidor. Min första instikt var att konfiguerar Jasper, som kompilerar JSP-sidorna att inte skapa sessioner om man inte explicit bad om det. Någon sådan parameter hittade jag tyvärr inte. Personer som har liknande frågor på nätet får istället frågan; ”Varför vill du slå av sessioner? De är ju en del av standarden!”

Mitt nästa spår var att automatiskt försöka inkludera ovanstående direktiv för varje genererad sida. Från och med JSP 2.0 (som inte direkt kom ut igår) går det att få till ganska enkelt med något som kallas för implicit includes.

Börja med att lägga till ett jsp-config-direktiv i din web.xml:

<!-- Disable the use of sessions -->
<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <include-prelude>/WEB-INF/jspf/disableSession.jspf</include-prelude>
  </jsp-property-group>
</jsp-config>

Detta matchar alla JSP-filer (med filändelsen .jsp) och inkluderar innehållet av filen disableSession.jspf precis som om du skulle ha skrivit

<%@include file="/WEB-INF/jspf/disableSession.jspf"%>

högst upp i varenda JSP-fil.

Notera att filen som inkluderas är av typen .jspf, ett JSP-fragment. Detta är nödvändigt och säkerställer bland annat att du inte råkar in i några oändliga inkluderingsloopar. Att filen ligger i mappen /WEB-INF/jspf är rekommenderat och förhindrar även direkt access för en slutanvändare.

Testa! Tomcat kommer att kasta fel i loggarna så fort du försöker skapa en session, men om du har det som jag är det precis så du vill ha det!

Screen capture online

Jag har länge använt ett screen capture-program för att komplettera dokumentation och manualer med tutorials som är lätta för användarna att ta till sig.

När det handlar om en steg för steg beskrivning av något i ett applikation tycker jag det både är väldigt bekvämt, för mig som gör det, och mycket lätt att förstå för användarna. Min erfarenhet är att det blir ett mycket uppskattat och givande komplement till övrig dokumentation.

På mitt uppdrag har jag arbetat med ett par olika lösningar för att spela desktop och visa hur man gör saker och sedan publicera dessa på support-web-sidor. Det kan handla om allt från hur en miljö är uppbyggt till handgrepp vid installationer mm. Jag tycker tekniken nästan kan mäta sig med att sitta bredvid någon och förklara. Speciellt om det är svåra gränssnitt där det finns många möjligheter att klicka bort sig eller när det gäller applikationer som inte är helt logiska.
Jag blev väldigt nyfiken när jag fick höra talas om en online screen recorder-tjänst som heter screentoaster. Efter registrering kom jag igång relativt snabbt.

Inom någon minut hade jag spelat in en första testfilm. Dom inspelade filmerna går sedan direkt att publicera till olika tjänster. Mycket lätt att använda och dom flesta funktioner finns där. Spela in från webcam och att lägga på ljud eller inte.

Prova så får ni se…

Inspelad Finder

Ruby on Rails under Nginx med Phusion Passenger

Nginx

Sedan några timmar så kan man köra Phusion Passenger under Nginx!

Phusion Passenger och Apache har under en tid varit det populäraste sättet att enkelt driftsätta Ruby on Rails och Rack-applikationer. Nu kan man alltså välja att köra Passenger under den ryska (och tokigt snabba) Nginx.

Det enda man behöver göra är:

  1. Installera gem: sudo gem install passenger
  2. Köra Nginx installern: sudo passenger-install-nginx-module
  3. Konfigurera (Det mesta sköts automagiskt)
  4. Starta

Mer ingående instruktioner finns på Phusion’s blogg

Phusion Passenger

Hongli Lai och Ninh Bui presenterade Phusion Passenger (också känd som mod_rails) under RailsConf 2008, det var då jag verkligen fick upp ögonen för projektet.

I den nya versionen har Phusion-grabbarna förutom att man nu kan använda sig av två olika webbservrar för att köra Passenger lagt till:

  • Stöd för ”chunked file uploads”
  • Stöd för Capistranos sätt att sköta driftsättning (Symlänkning av current osv.)
  • Förmåga att ladda application_controller.rb från en icke-standard sökväg
  • ”Worker process event hooks” för Rack

Nginx

Nginx driver ett flertal stora webbplatser, såsom WordPress, Hulu, Github, och Ohloh. Den serverar mer än två miljoner webbplatser och är därmed den näst populäraste webbservern under Linux.

Fördelning mellan olika webbservrar

Athegas öppna källkod används av Valmyndigheten

I mitt förra inlägg berättade jag om en Perl-modul som vi släppt som öppen källkod. Det visade sig att denna kod ganska snabbt skulle komma till nytta. Häromdagen fick jag ett e-postmeddelande från Valmyndigheten där de berättade att de använder modulen och att den passar deras behov perfekt. De använder den för att konvertera positionen för alla vallokaler från RT90 till SWEREF99 för presentation på en karta på webben.

Modulen hittar ni här: Geo::SweGrid