Matilde

April 19th, 2009

Jeg er så heldig å ha blitt pappa til ei lita jente med navn Matilde! Hun ble født på UNN tirsdag 14.04.2009 klokka 14:39 og var 3630 gram og 50 cm lang.

XPlanner installation

April 19th, 2009

XPlanner is a project planning and tracking tool for eXtreme Programming (XP) teams. This guide describes how to install XPlanner on a Windows XP system.

Installation of required software

  1. Download and install JDK 6 Update 13
  2. Copy the file C:\Program Files\Java\jdk1.6.0_13\bin\msvcr71.dll into C:\WINDOWS\system\ (details)
  3. Download and install Apache Tomcat 6.0.18
  4. Download and unzip XPlanner Version 0.7b7
  5. Copy the extracted folder xplanner-0.7b7-war\xplanner\ into C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\

Configuration of XPlanner

Specify the database credentials in the XPlanner database configuration file xplanner-custom.properties which is located inside the C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\xplanner\WEB-INF\classes\ folder.

Adjustment of XPlanner source code

XPlanner does not officially support the versions of Java and Tomcat that we have installed, but only minor adjustments needs to be taken to get up and running.

C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\xplanner\WEB-INF\classes\spring-beans.xml. Replace (details):

...
<property name="repositories">
    <map>...</map>
</property>
...

with:

...
<property name="repositories">
    <bean class="java.util.HashMap">
        <constructor-arg>
            <map>...</map>
        </constructor-arg>
    </bean>
</property>
...

C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\xplanner\WEB-INF\jsp\common\WEB-INF\jsp\common\footer.jsp line 43. From:

...
    <bean:message key="footer.message" 
        arg0="<%=productionSupportEmail%>" 
        arg1="<%=issueLink%>" 
        arg2="<%=appUrl+"/do/systemInfo"%>"/>
...

to:

...
    <bean:message key="footer.message" 
        arg0="<%=productionSupportEmail%>" 
        arg1="<%=issueLink%>" 
        arg2='<%=appUrl+"/do/systemInfo"%>'/>
...

C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\xplanner\WEB-INF\jsp\view\notes.jsp line 86. From:

...
<xplanner:link page="/do/delete/note" onclick='<%="return confirm('Do you want to delete note \\\\'" + StringUtilities.replaceQuotationMarks(StringEscapeUtils.escapeJavaScript(note.getSubject())) + "\\\\'?')"%>'>
    <html:img page="/images/delete.gif" alt="delete" border="0"/>
    <xplanner:linkParam id="oid" name="note" property="id"/>
</xplanner:link>
...

to:

...
<xplanner:link page="/do/delete/note">
    <html:img page="/images/delete.gif" alt="delete" border="0"/>
    <xplanner:linkParam id="oid" name="note" property="id"/>
</xplanner:link>
...

Note that this removes the confirmation of deleting comments in XPlanner.

Start XPlanner

The last step is to start XPlanner from the Tomcat Web Application Manager.

Tanker rundt implementasjon av ESXi i mitt LAN

August 15th, 2008

For ikke lenge siden lastet jeg ned VMware ESXi. En del spam fra VMware om viktige oppdateringer de siste dagene har minnet meg på at jeg er nødt til å se nærmere på ESXi. I dag slettet jeg den gamle ISO–en og lastet ned siste versjon.

Disse to videoklippene gir en fin introduksjon til ESXi:

For øyeblikket kjører jeg VMware Server på serveren min som er en AMD Athlon 64 X2 4600+ med 4GB RAM og seks disker. Ved hjelp av mdadm har jeg satt opp 3 av diskene i et RAID 5 array som gir 1TB redundant data. Host OS er Ubuntu Server Edition 6.10.

Etter å ha diskutert litt på IRC–kanalen #linuxhelp.no og sett videoklippene på YouTube så er jeg blitt overbevist om at det lønner seg å bytte ut VMware Server med VMware ESXi. Det er imidlertid et problem. ESXi støtter ikke software RAID. Mine undersøkelser rotet meg borti tanker rundt:

  1. Internet SCSI protocol (iSCSI)
  2. Openfiler
  3. Network block device (NBD)
  4. RAID kontroller

1. Internet SCSI protocol (iSCSI)

iSCSI er en protokoll der SCSI kommandoer blir sendt over TCP. ESXi støtter denne protokollen. Jeg kunne derfor ha satt opp en ny server med Ubuntu Server Edition og RAID 5. Deretter kunne jeg gjort diskene tilgjengelig for ESXi–serveren ved hjelp av iSCSI, og på den måten hatt redundans på mine virtuelle maskiner. Det finnes også ferdige “iSCSI and IP SAN solutions” der ute som dessverre ikke er et reelt alternativ for meg. Snufs. iSCSI virker lovende, men på grunn av at jeg trenger en ekstra fysisk server så er ikke dette løsningen for meg.

For mer informasjon se:

2. Openfiler

Openfiler er et operativsystem spesielt egnet for å dele data. Støttede protokoller er blant annet:

Openfiler virker som et lovende operativsystem, og jeg er absolutt nødt til å teste det. En server med Openfiler og en med ESXi hadde vært en meget spennende løsning, men igjen siden jeg trenger en ekstra server så er ikke dette et alternativ for meg.

For mer informasjon om Openfiler se:

3. Network block device

Ved hjelp av NBD så kan man mounte devicer som ligger på andre maskiner. Dette alternativet fører også til at jeg måtte ha hatt en ekstra server.

For mer informasjon se:

4. RAID kontroller

Det billigste og mest miljøvennlige alternativet er uten tvil å kjøpe meg en RAID kontroller som støttes av ESXi. Det kan se ut som det kan bli Adaptec RAID 3805. Kortet koster en formue så det blir nok VMware server en stund til. Snufs.

PHPFeedSync

July 6th, 2008

Today I released my first open source project. The PHPFeedSync project aims to be a complete PHP implementation of the FeedSync protocol. You can find the project here: http://www.codeplex.com/phpfeedsync/.

Some floating issues

August 18th, 2007

I have written an article that shed light on some floating issues. Take a look if it interests you.

Informasjon til arbeidsgiver

March 30th, 2007

Nøkkelkompetanse

  • XML-teknologier
  • PHP, Java, C#, .NET
  • Microsoft Visual C# 2005 Express edition (Visual Studio)
  • HTML, CSS, JavaScript/JScript (ECMAScript)
  • Adobe Creative Suite 2
  • Linux, Apache, MySQL
  • SMS

Hovedfokus

Hovedfokus i prioritert rekkefølge:

  1. Brukervennlighet
  2. Gjenbrukbar data
  3. Dataformater
  4. Gjenbrukbar kode

Error reporting in PHP

March 21st, 2007

Some way down the road the default php.ini started to get shipped with settings that stopped the error printing. The default location of this file is /usr/local/lib/php.ini, and the most common settings that controls the error reporting behaviour is listed below:

error_reporting = E_ALL | E_ERROR | ... | E_USER_NOTICE
display_errors = On | Off
log_errors = On | Off

First of all error_reporting decides what type of errors or messages that will be taken care of in the first place. See php.ini for details. Then you have the options to:

  1. Print the error as part of the HTML by setting display_errors to On
  2. Log the error to Apaches error_log by setting log_errors to On
  3. Or both print and log the errors and messages

There is a reason why they stopped to display errors as a default thing. This is because you are risking to leak sensitive information about your server configuration. A way to achive instant information about errors, and keep the rest of your web site safe, is to alter the settings for just the scripts you are working with at run time. It can be done like this:

ini_set('display_errors','On');
error_reporting(E_ALL);

Suggested readings:

Character encodings by example

March 20th, 2007

In this text I asume you have a basic understanding of character sets. Take a look at the reference section if you need to take a look into that area. You can use the code charts at http://www.unicode.org/charts/ to see the code points of the characters we will use. I use Microsoft Calculator to convert between hex, decimal and binary numbers.

In this example we will write a Java program that writes bytes to text files. The files will consist of characters encoded in ISO–8859–1 (Latin–1) and the UTF–8 encoding of the Unicode character set. We will use Microsoft Notepad, to view these files.

The Java program

The program below takes a file name and binary strings as arguments. Each binary string represents one byte in the text file, so make sure not to exceed a string length of 8 to get expected results. If you want to you can modify the main method to use decimal numbers instead.

import java.io.*;
 
public class Bits {
 
    public static void main(String[] args) throws Exception {	
	FileOutputStream out = new FileOutputStream(args[0]);
	for (int i = 1; i < args.length; i++) {
	    int bits = Integer.parseInt(args[i],2);
	    System.out.print("Byte " + i + ": " + args[i] + " ");
	    System.out.print(bits + " ");
	    System.out.println(Integer.toHexString(bits));
	    out.write(bits);
	}
	out.close();
    }
}

Example 1

Find the character A in the Basic Latin code chart. Notice it has the hexadecimal code point 0041 or if converted the binary code point 1000001. Lets write a byte with this value to the text file example1.txt:

java Bits example1.txt 1000001

If you open the file with Microsoft Notepad you will see that it contains the letter A as expected. If you pick save as from the menu you can see that notepad suggests the ANSI encoding. ANSI is an extended ASCII encoding, as is Latin–1. ANSI and Latin–1 has differences, but we will use characters that are encoded the same way for both encodings. So just think of ANSI as Latin-1 throughout the text.

Example 2

Click the save as option in the notepad menu. Save example1.txt as example2.txt with the UTF–8 encoding. Take a look at the file properties of the newly created file. Notice that it has a size of 4 bytes, but if you open it again it still contains the lonely letter A. The 3 new bytes are located at the beginning of the file, and is the Byte Order Mark (BOM) for the UTF–8 encoding. The BOM is the only way for notepad to know that this is a text document encoded in UTF–8, and not Latin–1. This is because the character A is encoded the same way for both encodings. Let’s create example2.txt manually:

java Bits example2.txt 11101111 10111011 10111111 1000001

Example 3

Let’s try to encode a character that is encoded differently in the two encodings. Below we make three text files with the Norwegian letter Å. One encoded in Latin–1, the second in UTF–8 and the last one in UTF–8 too, but without the BOM. The Latin-1 chart tells us that Å has the hexadecimal code point 00C5. If we convert it using Microsoft Calculator we get the binary string 11000101 or the decimal number 197.

java Bits example3-1.txt 11000101
java Bits example3-2.txt 11101111 10111011 10111111 11000011 10000101
java Bits example3-3.txt 11000011 10000101

Notice that notepad recognizes the UTF–8 encoded Å in example3-3.txt even though we left out the BOM. Also notice that we need two bytes to encode Å in UTF–8. Some characters in UTF–8 is even encoded in four bytes. The combination of the two bytes 11000011 and 10000101 is decoded into the code point 197 when read. 197 references the letter Å for both the Unicode and the Latin–1 character set.

Now I hope you have a better understanding of how characters are encoded. If you want to know more you could take a look at the suggested readings. I personally recommend the XML in a Nutshell book. It’s almost everything you need.

Suggested readings

Påska 2007 i Lofoten

March 9th, 2007

I år har jeg vært i Lofoten i påska. Det har vært et fryktelig vær stort sett hele tia, så det har vært mye innesitting.

Jeg bestilte 3 stk Scythe Ninja Plus før påske. Tok med meg den ene av disse siden den var bestilt til min lillebror Terje. Kjøleren var mye større enn jeg hadde forventet, og den lot seg montere uten problemer.

På tirsdag kjørte Ramona, Per Ole, Terje og jeg til Bø. Jeg var litt i ura å så på gamle lekeplasser innimellom steinene. De er selvsagt mindre i dag enn de var på den tid, og jeg tok meg opp på den største og hoppet ned. Litt stolt, for det var litt skummelt. Det hadde jeg neppe gjort i gamle dager. Vi var også en tur på Ramberg der vi blant annet inspiserte bua til onkel Jan.

Jeg har jobbet en del med funksjonaliteten i bloggen min i påska. Har fått på plass paging, støtte for tags og kategorisering. Når det gjelder den siste så “mounter” jeg poster i kategoritreet. Jeg kan mounte samme post flere plasser.

Jeg har lenge tenkt på å finne meg en wiki som er enkel å bruke, og som ikke trenger database. Etter litt fram og tilbake fant jeg siden WikiMatrix som er et veldig bra verktøy for å finne wikier ut fra forskjellige behov. Fikk opp en liste med ca 10 wikier som samsvarte med mine ønsker, og etter å ha forhørt meg litt på IRC så gikk jeg for DokuWiki. Jeg var ikke helt fornøyd meg standard utseende på DokuWiki og lagde derfor en egen template. Jeg har kalt malen for “LessWiki” siden jeg blant annet har fjernet en del knapper som jeg syntes var forstyrrende. Jeg har også prøvd å gjøre innholdet mer lesbart ved å minske bredden på området med tekst til rundt 500 piksler. Du kan laste ned malen her. Jeg har opprettet en wiki som jeg kan bruke til forskjellig her.

På langfredag dristet vi oss ut i skitværet og kjørte til Voll. Der fikk jeg for første gang sett melkeroboten in action. Imponerende sak. Med denne blir kyrne automatisk melket. Før kyrne melkes blir de ledet inn til roboten ved hjelp av en databrikke som åpner portene slik at kyrne kommer seg inn på rett plass. Denne brikken sørger også for at det blir delt ut riktig mengde for på kraftforstasjonen.

På lørdag var vi en tur hos onkel Arne. Der installerte vi VMware, og installerte så openSUSE i en virtuell maskin. Så så vi litt på OpenOffice og både pappa og onkel syntes det så greit nok ut til at de ønsket å teste det. Vi fikk også CD-spiller med MP3-støtte hos Arne til bilen. Dermed slapp vi den lange kjøreturen til Tromsø i taushet.

Senere på lørdag rippet pappa og jeg litt musikk, slik at jeg fikk vist han litt av biblioteksfunksjonene i Windows Media Player 11.

Replay Manager

January 14th, 2007

Replay Manager er en Windows-applikasjon som jeg har skrevet i C#. Utviklingsverktøyet jeg har brukt er Microsoft Visual C# 2005 Express edition.

Warcraft III er et mye spilt real time strategy spill. Når man er ferdig med en omgang av spillet så lagres kampen automatisk i fila LastReplay.w3g. Denne fila overskrives for hver omgang. Derfor må man ta en kopi av fila hvis man ønsker å bevare kampen, før man setter i gang med en ny. Det finnes utallige websider der man kan laste ned meget underholdende kamper mellom verdens beste spillere.

Replay Manager lagrer og organiserer Warcraft III replays automatisk. Måten dette gjøres på er å først overvåke fila LastReplay.w3g. Hvis denne endres på noen måte så tas det en kopi. Replay Manager sender så fila til en web service på wcportal.net som jeg har utviklet i PHP5. Fila parses av en parser utviklet i PHP av Juliusz Gonera. Web servicen henter så ut parset informasjon, og sender denne tilbake i XML format til Replay Manager. Denne informasjonen lagres så i ei XML-fil på klientmaskinen. Her kan du se et eksempel på ei slik fil. Replay–fila får nytt navn basert på parset informasjon. Fila blir også registrert i et register som Replay Manager bruker for å holde oversikt over replays på maskinen.

I selve applikasjonen finner man to WebBrowser–kontroller. I den venstre finner man ei liste med replays fra replay-registeret. Klikker man på en av disse så vises detaljer i browseren til høyre. Replay Manager bruker registeret, XML–fila som ble generert av Web Servicen og ei XSLT–fil for å generere lista og detaljvisningen. Høyreklikk og “save target as” hvis du har problemer med å få sett XSLT–fila på en skikkelig måte.

Programmet har også andre funksjoner som å laste opp replays til wcportal.net, vise fram RSS fra wcportal.net, med mer.

Replay Manager er ikke ferdig utviklet, men kan demonstreres for interessert arbeidsgiver. Send meg en e–post hvis du ønsker mer informasjon.