<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alt om ingenting og litt i mellom &#187; Jobb</title>
	<atom:link href="http://hovenko.no/blog/category/jobb/feed/" rel="self" type="application/rss+xml" />
	<link>https://hovenko.no/blog</link>
	<description>En blogg av Knut-Olav</description>
	<lastBuildDate>Mon, 10 Mar 2025 19:25:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Modulbasert utvikling og arkitektur</title>
		<link>https://hovenko.no/blog/2018/01/30/modulbasert-utvikling-og-arkitektur/</link>
		<comments>https://hovenko.no/blog/2018/01/30/modulbasert-utvikling-og-arkitektur/#comments</comments>
		<pubDate>Tue, 30 Jan 2018 19:24:13 +0000</pubDate>
		<dc:creator>Knut-Olav</dc:creator>
				<category><![CDATA[Arkitektur]]></category>
		<category><![CDATA[Jobb]]></category>
		<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[arkitektur]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[teknologi]]></category>

		<guid isPermaLink="false">http://hovenko.no/blog/?p=621</guid>
		<description><![CDATA[IT-prosjekter handler ofte om å flytte og konvertere data mellom IT-systemer, i forskjellige presentasjonsformer og koble data fra flere datakilder. Når man kjører flere slike prosjekter samtidig og over lengre tid med betydelig antall ressurser blir det aktuelt å tenke litt større og legge en strategi for hvordan informasjon skal flyte og behandles på tvers [...]]]></description>
			<content:encoded><![CDATA[<p>IT-prosjekter handler ofte om å flytte og konvertere data mellom IT-systemer, i forskjellige presentasjonsformer og koble data fra flere datakilder.</p>
<p>Når man kjører flere slike prosjekter samtidig og over lengre tid med betydelig antall ressurser blir det aktuelt å tenke litt større og legge en strategi for hvordan informasjon skal flyte og behandles på tvers av organisasjonen.</p>
<p>Med modulbasert utvikling kan man utføre prosjekter med mange personer, gjerne delt i flere grupper. Det kan gjerne sees på som et bestiller- og leverandør-forhold, eller &#8220;klient og tjener&#8221;, hvor klienten definerer hva som forventes av den andre modulen å ta i mot og returnere av data og på hvilke formater utvekslingen skal foregå.</p>
<p>Moduler kan integreres i systemer via kompilatorlenking mot definerte grensesnitt, som funksjonssignaturer i et &#8220;interface&#8221; fra objektorientert programmering eller en &#8220;header&#8221;-fil, eller med meldinger som sendes på en meldingsbuss. Å binde seg til et definert grensesnitt har fordeler med at man kan få en kompilator til å sjekke gyldigheten av kontrakten, at man snakkes felles språk, men det gjør det vanskeligere dersom en av partene har andre behov og trenger å endre en funksjonssignatur.</p>
<p>Meldingsbasert integrasjon defineres på et høyere nivå enn ved funksjonssignaturer, for eksempel at grensesnittet bare definerer hvordan meldingen kan sendes og hvordan svaret kan mottas. Ulempen med meldingsbasert kommunikasjon er at det stiller høyere krav til validering, versjonering og bakoverkompatiblitet, siden en av partene kan oppgraderes til nyere versjon mens det finnes andre systemer som fremdeles <em>snakker det gamle språket</em>. Ved meldingsbasert kommunikasjon bør det skrives en spesifikasjon for formatet på meldingene, for eksempel i form av et XSD-skjemadokument dersom kommunikasjonen pakkes som XML-meldinger, eller Protocol Buffers hvis meldingene er mindre og tydelig definerte.</p>
<p>For enklere systemer holder det kanskje med et format på forespørsler ala: <tt>customer search 'ola normann'</tt> hvor &#8220;customer&#8221; kan være navnet på modulen, &#8220;search&#8221; kan være funksjonen i modulens grensesnitt og &#8220;ola normann&#8221; er parameteren til funksjonen. Responsen kan for eksempel være kolonne- og radbasert, som et regneark.<br />
Mange muligheter!</p>
<p>Internett kan sees på som et modulbasert system. Veldig forenklet så kan nettleseren, altså klienten i vårt tilfelle, sende en forespørsel mot en adresse eller filsti til en webserver, altså tjeneren, som kan svare med et HTML-dokument. Det ligger en kontrakt til grunn om et felles grensesnitt som gjør at denne kommunikasjonen fungerer, og en slik kontrakt er HTTP-spesifikasjonen. Det er mulig å basere internkommunikasjon i sitt modulbaserte system over HTTP med for eksempel SOAP, Corba, REST, Thrift, for å nevne noen teknikker. Denne type meldingsbasert kommunikasjon har noen svakheter, blant annet krever det ekstra dataprosessering for å oversette objekter og datastrukturer til og fra meldinger som kan sendes over HTTP. Dette er også dens store fordel, da modulene kan lager i forskjellige programmeringsspråk og kjøre på forskjellige plattformer.</p>
<p>For å oppnå en smidig integrasjon mellom modulene trengs det presis og hyppig koordinering på tvers av utviklingsgruppene. Man må ta et steg tilbake for å få et overblikk over systemet som helhet.</p>
<p><em>Dette er i hovedsak en liten rant jeg skrev i 2011, og jeg mener den fortsatt holder vann – men ta den gjerne med en klype salt…</em></p>
]]></content:encoded>
			<wfw:commentRss>https://hovenko.no/blog/2018/01/30/modulbasert-utvikling-og-arkitektur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KMail &#8211; Use GSSAPI for authentication to IMAP account</title>
		<link>https://hovenko.no/blog/2012/09/21/kmail-use-gssapi-for-authentication-to-imap-account/</link>
		<comments>https://hovenko.no/blog/2012/09/21/kmail-use-gssapi-for-authentication-to-imap-account/#comments</comments>
		<pubDate>Fri, 21 Sep 2012 09:05:37 +0000</pubDate>
		<dc:creator>Knut-Olav</dc:creator>
				<category><![CDATA[English-posts]]></category>
		<category><![CDATA[Jobb]]></category>
		<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[GSSAPI]]></category>
		<category><![CDATA[KMail]]></category>
		<category><![CDATA[MS Exchange]]></category>

		<guid isPermaLink="false">http://hovenko.no/blog/?p=779</guid>
		<description><![CDATA[On a freshly installed Debian testing with KDE desktop, i set up KMail to read email from our corporate MS Exchange server using the IMAP protocol. The curiosity in me wanted to check out GSSAPI for authentication, but the IMAP server replied with SASL(-4): no mechanism available: no worthy mechs found. Of course, I need [...]]]></description>
			<content:encoded><![CDATA[<p>On a freshly installed Debian testing with KDE desktop, i set up KMail to read email from our corporate MS Exchange server using the IMAP protocol.</p>
<p>The curiosity in me wanted to check out GSSAPI for authentication, but the IMAP server replied with <strong>SASL(-4): no mechanism available: no worthy mechs found</strong>.</p>
<p>Of course, I need the krb5-user package and run the kinit command to retrieve a valid Kerberos session ticket. What wasn&#8217;t so obvious was the need for the package <strong>libsasl2-modules-gssapi-mit</strong>. Voila! Got me some emails <img src='https://hovenko.no/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>https://hovenko.no/blog/2012/09/21/kmail-use-gssapi-for-authentication-to-imap-account/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaZone jz10 dag 2</title>
		<link>https://hovenko.no/blog/2010/09/19/javazone-jz10-dag-2/</link>
		<comments>https://hovenko.no/blog/2010/09/19/javazone-jz10-dag-2/#comments</comments>
		<pubDate>Sun, 19 Sep 2010 00:01:55 +0000</pubDate>
		<dc:creator>Knut-Olav</dc:creator>
				<category><![CDATA[Jobb]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaZone]]></category>
		<category><![CDATA[teknologi]]></category>

		<guid isPermaLink="false">http://hovenko.no/blog/?p=473</guid>
		<description><![CDATA[Nå er det riktignok gått halvannen uke siden JavaZone var over, men en kort oppsummering av dag to kan allikevel tillates. På den andre dagen, 9. september, lærte jeg litt om &#8220;Matching Engines&#8221;, om høye krav til ytelse og nøyaktighet og fikk virkelig innblikk i at tid koster penger, spesielt på nedetid. Videre lærte jeg [...]]]></description>
			<content:encoded><![CDATA[<p>Nå er det riktignok gått halvannen uke siden JavaZone var over, men en kort oppsummering av dag to kan allikevel tillates.</p>
<p>På den andre dagen, 9. september, lærte jeg litt om &#8220;Matching Engines&#8221;, om høye krav til ytelse og nøyaktighet og fikk virkelig innblikk i at tid koster penger, spesielt på nedetid.</p>
<p>Videre lærte jeg ikke så mye nytt om offentlige data. Synd at hele panelet utelukkende bestod av folk som ønsker fri tilgang til offentlige data, men ingen med myndighet til å kunne gjøre noe med det.</p>
<p>Så skulle jeg lære om hva jeg gjør feil med domenedrevet design (DDD), men foredragsholderen var forsinket, så jeg sneik meg inn på en sesjon om planlegging og å ta valg i utviklingsteam. Spesielt én ting fant jeg svært interessant, å premiere feiling for å oppmuntre til å ta sjanser og utfordre seg selv.</p>
<p>Videre lærte jeg hvordan man kan implementere Dungeon and Dragons i RESTful web services basert på prinsippene rundt <a href="http://en.wikipedia.org/wiki/HATEOAS">HATEOAS</a>, å bruke HTTP som motoren til å drive tilstand i applikasjoner.</p>
<p>Så lærte jeg at man må kjøpe Coherence for å bekjempe ytelsesproblemer i systemer. Et foredrag med stort preg av å selge inn Oracle-produktet, dessverre.</p>
<p>Så forvillet jeg meg inn på et foredrag om vedlikehold og utvikling av legacy-systemer.</p>
<p>Til slutt så fikk jeg med meg foredraget om domenedrevet design som ble satt opp. Greit å bli oppdatert på de mer vanskelige aspektene rundt denne teknikken, og selv om foredraget var kort så passet det egentlig bra som avslutning på JavaZone.</p>
<p>Nå er video av foredragene lagt ut på <a href="http://streaming.java.no/tcs/">java.no</a>. Har allerede sett noen lyntaler og lengre foredrag, og kan anbefale lyntalene om &#8220;97 things every programmer should know&#8221; og &#8220;Hjemmelaget er bedre enn takeout&#8221;, hvor begge lufter tanker om å kaste idéer og kode som blir for vanskelige å integrere eller som kommer i veien.</p>
<p>Selv så er jeg dårlig på å kaste kode, men jeg har i det siste kastet kode et par ganger, og selv om det gjør vondt der og da, så savner jeg ikke koden jeg skrev. Det er faktisk deilig å ikke ha uinnsjekket kode liggende over lengre tid.</p>
<p>Det jeg skal ta med videre fra JavaZone 2010 er idéene rundt HATEOAS og event drevet arkitektur. Sistnevnte har jeg allerede utforsket mye på fra før, og dette er motoren for å dytte data rundt i prosjektet jeg for tiden jobber på.</p>
]]></content:encoded>
			<wfw:commentRss>https://hovenko.no/blog/2010/09/19/javazone-jz10-dag-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaZone jz10 dag 1</title>
		<link>https://hovenko.no/blog/2010/09/09/javazone-jz10-dag-1/</link>
		<comments>https://hovenko.no/blog/2010/09/09/javazone-jz10-dag-1/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 22:41:43 +0000</pubDate>
		<dc:creator>Knut-Olav</dc:creator>
				<category><![CDATA[Jobb]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaZone]]></category>
		<category><![CDATA[teknologi]]></category>

		<guid isPermaLink="false">https://hovenko.no/blog/2010/09/09/javazone-jz10-dag-1/</guid>
		<description><![CDATA[Dag 1 er over for JavaZone 2010. Det har vært mange temaer og tankene svever nå litt rundt i skyen foreløpig. Jeg lærte i dag at hvis man plasserer en Map/Reduce-jobb hos Amazon, så tar det ca 30 ganger lenger tid å kjøre enn på en laptop. Jeg lærte at hvis webappen din sliter under [...]]]></description>
			<content:encoded><![CDATA[<p>Dag 1 er over for <a href="http://jz10.java.no/">JavaZone 2010</a>. Det har vært mange temaer og tankene svever nå litt rundt i skyen foreløpig.</p>
<p>Jeg lærte i dag at hvis man plasserer en Map/Reduce-jobb hos Amazon, så tar det ca 30 ganger lenger tid å kjøre enn på en laptop.</p>
<p>Jeg lærte at hvis webappen din sliter under høy last mot eksterne ressurser, så legg inn sleep(1).</p>
<p>Jeg lærte at Collaborative Filtering kan være et spennende tiltak for å gi noe ekstra tilbake til brukerne.</p>
<p>Jeg lærte at det finnes mange tilnærminger til eventdrevet design.</p>
<p>Jeg lærte at Datalagringsdirektivet har forkjempere og motstandere som ikke alltid klarer å finne ut hvordan livets, trygghetens og frihetens vektskål skal balanseres.</p>
<p>Jeg lærte at RESTful ikke handler om XML og pene URL-er, men om å håndtere state mellom klient og tjener og at resten er bare hjelpemidler for å komme seg dit.</p>
<p>Jeg lærte at det finnes alltid et sikkerhetstiltak som man ikke har tenkt på eller ikke har forstått konsekvensene av.</p>
<p>Jeg lærte at Java har en tung vei å gå for å skape typeorienterte vaner.</p>
<p>Jeg lærte at man bør ha fulladet telefon før man drar på JavaZone.</p>
]]></content:encoded>
			<wfw:commentRss>https://hovenko.no/blog/2010/09/09/javazone-jz10-dag-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cowboy coding</title>
		<link>https://hovenko.no/blog/2009/12/09/cowboy-coding/</link>
		<comments>https://hovenko.no/blog/2009/12/09/cowboy-coding/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 21:09:28 +0000</pubDate>
		<dc:creator>Knut-Olav</dc:creator>
				<category><![CDATA[English-posts]]></category>
		<category><![CDATA[Jobb]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Cowboy Coding]]></category>
		<category><![CDATA[Methodology]]></category>
		<category><![CDATA[prosjektstyring]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://hovenko.no/blog/2009/12/09/cowboy-coding/</guid>
		<description><![CDATA[Cowboy coding seems interesting, and it might be just that I have been doing when developing Madcow, a PHP web framework. However, it is not the same as Scrum. Many projects tend to fail using the Scrum methodology, possibly because of the lack of clearly defined roles, and then fall back to something looking like [...]]]></description>
			<content:encoded><![CDATA[<p>Cowboy coding seems interesting, and it might be just that I have been doing when developing <a href="http://madcow.no/" title="Madcow The PHP web framework">Madcow</a>, a PHP web framework.</p>
<p>However, it is not the same as Scrum. Many projects tend to fail using the Scrum methodology, possibly because of the lack of clearly defined roles, and then fall back to something looking like Cowboy Coding.</p>
<p>Unfortunately, it seems that the project I am currently working on at work is exactly that, Cowboy Coding, not Scrum&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>https://hovenko.no/blog/2009/12/09/cowboy-coding/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress plugins &#8211; Front Controller</title>
		<link>https://hovenko.no/blog/2007/03/08/wordpress-plugins-front-controller/</link>
		<comments>https://hovenko.no/blog/2007/03/08/wordpress-plugins-front-controller/#comments</comments>
		<pubDate>Thu, 08 Mar 2007 21:05:05 +0000</pubDate>
		<dc:creator>Knut-Olav</dc:creator>
				<category><![CDATA[Jobb]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">/blog/2007/03/08/wordpress-plugins-front-controller/</guid>
		<description><![CDATA[WordPress støtter utvidelser via plugins. Plugins kommuniserer med WordPress-kjernen ved å hekte seg på kroker (hooks). Disse krokene blir eksekvert visse steder i koden, for eksempel når en side med poster skal vises, når en bruker opprettes eller når en post slettes. Det er en handlingskrok (action hook) som heter &#8220;init&#8221; som blir kalt på [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.wordpress.org">WordPress</a> støtter utvidelser via plugins. Plugins kommuniserer med WordPress-kjernen ved å hekte seg på kroker (hooks). Disse krokene blir eksekvert visse steder i koden, for eksempel når en side med poster skal vises,  når en bruker opprettes eller når en post slettes.</p>
<p>Det er en handlingskrok (action hook) som heter &#8220;init&#8221; som blir kalt på rett før themet skal lastes inn for presentasjon av postene. Når denne kroken skal eksekveres er plugins lastet og innstillinger lest fra databasen, så denne kroken egner seg svært godt for det jeg nå skal vise, nemlig hvordan man kan kalle på funksjoner i sin egen plugin med via lenker på siden, med HTML forms eller via Javascript og AJAX.</p>
<p>Jeg har ofte hatt behov for å kalle på funksjoner i min plugin fra Javascript på siden, også kjent som Ajax/Web2.0. Jeg har utviklet en plugin som lar brukeren sette et filter, slik at kun innlegg som matcher dette filteret vil bli vist. Jeg skrev denne pluginen på jobben og den er foreløpig kun for internt bruk og er derfor ikke tilgjengelig, men det hindrer meg ikke i å forklare hvordan jeg har brukt denne teknikken.</p>
<p>Dette filteret settes i cookie i nettleseren til brukeren slik at filteret er aktivt helt til brukeren bytter til et annet filter. Filtere kan ligge i nivåer underhverandre. Tenk på det som kategoriene i WordPress, hvor kategorier kan ha en forelderkategori. Jeg skal her vise to eksempler hvor jeg først bruker en link for å bytte til et annet filter, for så å vise hvordan jeg bruker AJAX for å hente en liste med filter.</p>
<p>Linken for å bytte filter kan for eksempel se slik ut:<br />
<code><br />
&lt;a href="http://example.com/?myplugin=set&#038;filter=sport"&gt;Sport&lt;/a&gt;<br />
</code></p>
<p>Da har jeg behov for en sjekk i min plugin, som jeg har valgt å kalle &#8220;myplugin&#8221; (ja, jeg vet, men dette er ikke navnet på min ekte plugin <img src='https://hovenko.no/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ), for å kunne snappe opp ønsket om å bytte filteret til &#8220;sport&#8221;. Jeg har valgt kodeordet &#8220;myplugin&#8221;, det samme som navnet på pluginen jeg har skrevet for å minke risikoen for navnekollisjon. Jeg har en funksjon jeg har hengt på &#8220;init&#8221;-kroken som sjekker om kodeordet er blitt angitt i adressen samt om det finnes en passende handling å utføre.</p>
<p>I eksempelet nedenfor viser jeg også PHP-kode som tar i mot ønsket om å liste ut alle filtere som har et angitt filter som forelder. Legg merke til dersom testen matcher &#8216;list&#8217; vil den printe ut listen for så å dø, hardt og brutalt. Dette er faktisk ønskelig fordi vi skal utføre et asynkront kall med Javascript, noe som betyr at nettsiden ikke skal lastes på nytt, men bare en liten del av nettsiden skal oppdateres. Det som PHP-scriptet skriver ut i eksempelet nedenfor blir hentet opp av Javascriptet som utførte kallet, klar til å inkluderes på nettsiden. Om det er en &lt;select&gt;-liste, en rekke med checkboxer eller noe annet som gjøres med denne listen bestemmes av Javascriptet.</p>
<pre>
<code>
$myplugin = new MyPlugin();
add_action('init', array(&#038;$myplugin, 'check_action'));
//
// Hovedklassen i min plugin
class MyPlugin {
    function check_action() {
        $action = _REQUEST['myplugin'];
        switch($action) {
            case 'set':
                $this->set_filter($_REQUEST['filter']);
                break;
            case 'list':
                $list = $this->get_list($_REQUEST['parent']);
                echo $list;
                exit;
        }
    }
    // Setter nytt filter
    function set_filter($filter = '') {
        // Setter en cookie for brukerens nettleser
    }
    // Returnerer en liste med filtere som har en angitt forelder
    function get_list($parent = '') {
        // finner og returnerer listen med angitt forelder
    }
}
</code>
</pre>
<p>Hvordan Javascriptet som utfører dette asynkrone kallet er programmert skal jeg ikke komme inn på her. Det er et for stort tema å skrive om i denne artikkelen, men det finnes gode ressurser på Internett om AJAX, <a href="http://www.google.com">Google</a> vet det meste. Det kan være verdt å sjekke ut <a href="http://www.scss.com.au/family/andrew/webdesign/xmlhttprequest/">Cross-Browser XMLHttpRequest</a>, som gjør det enklere å bruke Ajax uten at man vrir seg i smerte over de mange forskjellige teknikkene som er brukt i nettlesere.</p>
]]></content:encoded>
			<wfw:commentRss>https://hovenko.no/blog/2007/03/08/wordpress-plugins-front-controller/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>eAccelerator &#8211; en PHP-akselerator</title>
		<link>https://hovenko.no/blog/2007/03/07/eaccelerator-en-php-akselerator/</link>
		<comments>https://hovenko.no/blog/2007/03/07/eaccelerator-en-php-akselerator/#comments</comments>
		<pubDate>Tue, 06 Mar 2007 23:04:04 +0000</pubDate>
		<dc:creator>Knut-Olav</dc:creator>
				<category><![CDATA[Jobb]]></category>
		<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[akselerator]]></category>
		<category><![CDATA[eAccelerator]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">/blog/2007/03/07/eaccelerator-en-php-akselerator/</guid>
		<description><![CDATA[Jeg har utviklet en nettside, basert på WordPress, hvor vi hadde et problem med at den brukte alt for lang tid på å levere sidene til brukere, selv med bare 10-15 samtidige brukere. Problemet lå på Apache, som fikk serverloaden opp i omkring 7-8. Oppslag av hostnames i Apache var skrudd av og loggfilene var [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg har utviklet en nettside, basert på <a href="http://www.wordpress.org">WordPress</a>, hvor vi hadde et problem med at den brukte alt for lang tid på å levere sidene til brukere, selv med bare 10-15 samtidige brukere. Problemet lå på Apache, som fikk serverloaden opp i omkring 7-8. Oppslag av hostnames i Apache var skrudd av og loggfilene var satt til å roteres hver dag for å forhindre alt for store filer. Siden PHP kjøres gjennom mod_php var dette neste stedet å undersøke. WordPress med et utallig antall plugins resulterer i svært mange PHP-filer som må lastes for hver eneste gang en nettside hentes. Selv et lite Javascript kan kreve mye ressurser dersom dette scriptet har behov for selv bare én enkelt variabel fra databasen. En caching-løsning som cacher HTML-sidene basert på URL og cookies, ala WP-Cache, var ikke noen god løsning, fordi sidene som vises for innloggede brukere ikke bare bestemmes av URL og cookies, men også av variabler hentet fra en database. Memcache ble benyttet for å cache variabler fra databasen for å minke antallet spørringer mot denne, men det hjalp ikke i lengden.</p>
<p>Løsningen på ytelsesproblemet kom med <a href="http://eaccelerator.net/">eAccelerator</a>, en cache-løsning for PHP som cacher de kompilerte PHP-filene, slik at PHP ikke behøver å lese og kompilere alle PHP-filene for hver sidelasting. Andre nettbaserte løsninger som for eksempel benytter Java EE (Enterprise Edition) har en server som hele tiden kjører selv om ingen brukere besøker siden. Fordelen med dette er at alle filer med tilhørende klasser og andre ressurser allerede er lastet inn i minnet på serveren, noe som sparer diskaktivitet og prosessorkraft når brukere besøker siden din.</p>
<p>I dette prosjektet ble versjon 0.9.5 av eAccelerator benyttet. Uten å kjøre nøyaktige benchmarktester så virket denne løsningen betraktelig raskere; sidene lastet raskere i nettleserene og serverloaden er blitt gjennomsnittlig lavere.</p>
<p>eAccelerator finnes ikke i pakkesystemene til Ubuntu eller FreeBSD, så denne må manuelt lastes ned og kompileres. Man trenger dev-pakkene for PHP for å kompilere eAccelerator, da man trenger verktøyet phpize. Dev-pakken på Ubuntu heter php5-dev, eller php4-dev dersom denne versjonen benyttes.<br />
<code><br />
phpize<br />
./configure --enable-eaccelerator \<br />
    --with-php-config=/usr/bin/php-config<br />
make &#038;&#038; make install<br />
</code></p>
<p>Deretter må den aktuelle php.ini-filen som Apache benytter seg av for mod_php oppdateres med følgende innstillinger. Bemerk at kun første linjen er påkrevd. Standard katalog for cache-filene er /tmp/eaccelerator, så denne må opprettes og det må gis skriverettigheter til brukeren som Apache kjører som. På distribusjoner hvor /tmp katalogen slettes ved booting av operativsystemet bør cache_dir settes til en annen katalog, for eksempel /var/cache/eaccelerator. Verdiene i eksempelet nedenfor er hentet fra <a href="http://eaccelerator.net/wiki/InstallFromSource">eAccelerator &#8211; Installing from source</a>.<br />
<code><br />
extension="eaccelerator.so"<br />
eaccelerator.shm_size="16"<br />
eaccelerator.cache_dir="/tmp/eaccelerator"<br />
eaccelerator.enable="1"<br />
eaccelerator.optimizer="1"<br />
eaccelerator.check_mtime="1"<br />
eaccelerator.debug="0"<br />
eaccelerator.filter=""<br />
eaccelerator.shm_max="0"<br />
eaccelerator.shm_ttl="0"<br />
eaccelerator.shm_prune_period="0"<br />
eaccelerator.shm_only="0"<br />
eaccelerator.compress="1"<br />
eaccelerator.compress_level="9"<br />
</code></p>
<p>WordPress har et litt rufsete rykte, blant annet på grunn av at en WordPress-side ikke tåler trykket dersom en artikkel skrevet i en WordPress-blogg havner på forsiden av for eksempel <a href="http://www.digg.com">Digg</a>. Muligens kan en slik cache-løsning være redningen for WordPress, og forsåvidt andre PHP-applikasjoner.</p>
<p><em>Oppdatering 07.03.2007 08:38 CET</em><br />
Et problem med eAccelerator er at instansvariabler deklarert med protected vil få eAccelerator til å krasje dersom en klasse som arver på denne forsøker å aksessere disse protected variablene. Løsningen på dette er å deklarere dem som public. Ikke spesielt god designmetodikk, men det fungerer&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>https://hovenko.no/blog/2007/03/07/eaccelerator-en-php-akselerator/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>En kort vinterferie i Trysil</title>
		<link>https://hovenko.no/blog/2007/02/21/en-kort-vinterferie-i-trysil/</link>
		<comments>https://hovenko.no/blog/2007/02/21/en-kort-vinterferie-i-trysil/#comments</comments>
		<pubDate>Wed, 21 Feb 2007 22:21:13 +0000</pubDate>
		<dc:creator>Knut-Olav</dc:creator>
				<category><![CDATA[Ferier]]></category>
		<category><![CDATA[Jobb]]></category>
		<category><![CDATA[Tv, Film og Musikk]]></category>
		<category><![CDATA[film]]></category>
		<category><![CDATA[pub]]></category>
		<category><![CDATA[Skihytta]]></category>
		<category><![CDATA[slalåm]]></category>
		<category><![CDATA[snø]]></category>
		<category><![CDATA[Trysil]]></category>
		<category><![CDATA[vinterferie]]></category>

		<guid isPermaLink="false">/blog/2007/02/21/en-kort-vinterferie-i-trysil/</guid>
		<description><![CDATA[Jeg tok meg fri fra fredag, uke 7, til tirsdag, uke 8, for å ta meg en liten vinterferie. Hvor mye fri det ble på fredagen er en annen sak, siden jeg jobbet til langt på natt, faktisk helt til morgenen på fredagen, for å bli ferdig med det aller viktigste på et utviklingsoppdrag før [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg tok meg fri fra fredag, uke 7, til tirsdag, uke 8, for å ta meg en liten vinterferie. Hvor mye fri det ble på fredagen er en annen sak, siden jeg jobbet til langt på natt, faktisk helt til morgenen på fredagen, for å bli ferdig med det aller viktigste på et utviklingsoppdrag før jeg kunne ta meg en velfortjent ferie.</p>
<p><a href="http://hoven.ws/files/2007-02-18-trysil/img_0534_800x600.jpg" class="thickbox" title="Dynka i snø"><img src="http://hoven.ws/files/2007-02-18-trysil/img_0534_250x188.jpg" class="alignright" style="float: right;" alt="Dynka i snø" /></a></p>
<p>I helgen har jeg stått mye på slalåm, selv om det kanskje ble like mye afterski. Forholdene var ikke helt på topp. Det snødde mye både lørdag og søndag, med tett tåke på lørdag, som gjorde det vanskelig å se hvor man kjørte. Resultatet av dette var et lite fall etter at lårene mine ikke tålte alle humpene i bakken i større og større fart, da de var alt for &#8220;ødelagte&#8221; til at jeg orket å svinge så mye. Da var det deilig å ha Skihytta å komme til, og første pilsen var på bordet fem over tolv. Skal sies at vi var ute i bakkene halv ti. På Skihytta ble vi sittende en stund, kun avbrutt av en liten pub-til-pub-runde til Fageråsen før vi kom tilbake til Skihytta på afterski. Det var innleid en trubadur som spilte og sang, men for å være helt ærlig så var &#8220;pausemusikken&#8221; hakket bedre, en godfull Donald-imitator som sang med hele sjela og skapte god stemning på stedet.</p>
<p>På søndag merket jeg det harde føret fra dagen før, og det tok ikke lange tiden før lårene mine atter en gang var potetmos. Forholdene var noe bedre på søndag, så det gikk an å ta det litt mer med ro. Det ble en pub-til-pub-runde denne dagen også, med et stopp innom Knettsetra før vi tok turen videre til Fageråsen og endte opp på Skihytta. Det var tydeligvis ikke nok aktivitet i bakkene, for da vi kom hjem dro Magnus meg ut igjen og opp på taket for å hente capsen hans som vi kasta opp dagen før. For å toppe det hele så hoppa vi ut av vinduet i andre etasje og ned i løssnøen. Greit nok det, men jeg så vel egentlig ut som den avskyelige snømannen til slutt&#8230;</p>
<p><a href="http://hoven.ws/files/2007-02-18-trysil/img_0537_800x600.jpg" class="thickbox" title="Magnus ga seg ikke"><img src="http://hoven.ws/files/2007-02-18-trysil/img_0537_250x188.jpg" class="alignleft" style="float: left;" alt="Magnus ga seg ikke" /></a></p>
<p>Dette er tredje helgen på rad som jeg har sått på slalåm. Det var deilig å få stått litt på slalåm igjen. Jeg ikke hadde muligheten til det i fjor, da jeg var syk i vinterferien da jeg var her oppe på Trysil.</p>
<p>Helgen har vært preget av mye ski, mye afterski, boblebad og film og musikk på full guffe. Jeg rakk ikke se hele Live 8 i vinterferien i fjor, men jeg klarte å se plate 1, 2 og 3 denne gangen, nå gjenstår kun plate 4, den får jeg ta når jeg kommer hjem. Jeg har fortsatt tilgode å se hele U2-konserten Vertigo på DVD, det har liksom alltid vært noe i veien&#8230;</p>
<p>Mandagen gikk egentlig bare med til surr, med PC, film og musikk.</p>
<p>Nå er det tirsdag, og det er snart på tide å dra hjemover. Jeg tar et stopp i Oslo og innom jobben på allmøte og så &#8220;Linpro-kveld&#8221;, for å få med meg foredraget om Jini og sosialisere med ansatte over litt øl og mat.</p>
]]></content:encoded>
			<wfw:commentRss>https://hovenko.no/blog/2007/02/21/en-kort-vinterferie-i-trysil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Leilighet og jobb</title>
		<link>https://hovenko.no/blog/2006/10/15/leilighet-og-jobb/</link>
		<comments>https://hovenko.no/blog/2006/10/15/leilighet-og-jobb/#comments</comments>
		<pubDate>Sun, 15 Oct 2006 16:21:56 +0000</pubDate>
		<dc:creator>Knut-Olav</dc:creator>
				<category><![CDATA[Jobb]]></category>
		<category><![CDATA[Livet i leilighet]]></category>
		<category><![CDATA[Drammen]]></category>
		<category><![CDATA[leilighet]]></category>
		<category><![CDATA[Linpro]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tog]]></category>

		<guid isPermaLink="false">/v2/2006/10/15/leilighet-og-jobb/</guid>
		<description><![CDATA[Vel, ting har skjedd de siste månedene. For det første så fikk jeg meg en jobb rett etter sommerferien. Jeg startet 1. august i Linpro AS, et firma spesialisert på Linux. Det burde passe meg utmerket, hehe. Jeg jobber som utvikler og er for tiden ute på konsulentoppdrag. Av andre ting som har skjedd så [...]]]></description>
			<content:encoded><![CDATA[<p>Vel, ting har skjedd de siste månedene. For det første så fikk jeg meg en jobb rett etter sommerferien. Jeg startet 1. august i <a href="http://www.linpro.no">Linpro AS</a>, et firma spesialisert på Linux. Det burde passe meg utmerket, hehe. Jeg jobber som utvikler og er for tiden ute på konsulentoppdrag.</p>
<p>Av andre ting som har skjedd så har jeg kjøpt meg leilighet i Drammen, sentralt og med god utsikt over Drammenselva og Bragernes torg, med bokstavelig talt gåavstand til togstasjonen. Det tar meg omtrent 3 minutter fra jeg er ute av leiligheten til jeg er på togstasjonen <img src='https://hovenko.no/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Riktignok bruker jeg mye av dagen til reise, men på toget kan jeg arbeide eller sysle med andre ting på laptopen&#8230;</p>
<p>Nå sitter jeg her i sofaen i leiligheten min med 20 Mbit Internett-tilkobling og taster på laptopen. Jeg har nettopp satt opp en OpenBSD-router og et trådløst aksesspunkt. Bare jeg får testkjørt routeren litt så havner den vel inn i rack-skapet. Nå bruker jeg bare en PC med et helt vanlig og kjedelig tower-kabinett, men jeg får etterhvert kjøpe meg et 14&#8243; dypt rack-kabinett.</p>
<p>Nå er det pizza-tid og Dexter på Cartoon Network <img src='https://hovenko.no/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>https://hovenko.no/blog/2006/10/15/leilighet-og-jobb/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>J.A. Magnussen 100 år</title>
		<link>https://hovenko.no/blog/2006/04/06/ja-magnussen-100-ar/</link>
		<comments>https://hovenko.no/blog/2006/04/06/ja-magnussen-100-ar/#comments</comments>
		<pubDate>Thu, 06 Apr 2006 18:49:44 +0000</pubDate>
		<dc:creator>Knut-Olav</dc:creator>
				<category><![CDATA[Fester]]></category>
		<category><![CDATA[Jobb]]></category>
		<category><![CDATA[100 år]]></category>
		<category><![CDATA[2006]]></category>
		<category><![CDATA[damer]]></category>
		<category><![CDATA[dans]]></category>
		<category><![CDATA[firmafest]]></category>
		<category><![CDATA[hotell]]></category>
		<category><![CDATA[J. A. Magnussen]]></category>
		<category><![CDATA[jubileum]]></category>
		<category><![CDATA[Sundvollen]]></category>

		<guid isPermaLink="false">/v2/2006/04/06/ja-magnussen-100-ar/</guid>
		<description><![CDATA[I år er J. A. Magnussen 100 år og dette ble feiret uten å holde tilbake på noe som helst. 260 ansatte ble med på festen som ble holdt på Sundvollen Hotell med overnatting. Kvelden startet med litt underholdning med revy og fortsatte så med en lengre middag. Jeg er ganske stolt av meg selv, [...]]]></description>
			<content:encoded><![CDATA[<p>I år er J. A. Magnussen 100 år og dette ble feiret uten å holde tilbake på noe som helst. 260 ansatte ble med på festen som ble holdt på Sundvollen Hotell med overnatting. Kvelden startet med litt underholdning med revy og fortsatte så med en lengre middag. Jeg er ganske stolt av meg selv, for jeg spiste alt vi fikk servert til middagen&#8230; til og med laksen som var forrett! Jeg har ikke kommet over det sjokket helt enda. Det var flere innslag av underholdning fra noen av de ansatte, til og med J. A. Magnussens eget &#8220;revylag&#8221; som gjorde en parodi av Grandiosa-sangen. Det må sies at jeg hater den Grandiosa-sangen. Jeg sov knapt et sekund den natta fordi den låta hadde gnagd seg godt inn i hjernebarken min. Uansett så var det kanskje ikke helt meningen å sove så mye heller denne natta da&#8230;</p>
<p>Etter middagen ble det dansing og enda mer drikking, for det var nok av bar-bonger i omløp den kvelden. Faren min slo meg da, han dansa før meg, men jeg kom raskt etter. Det ble også mye dans, det var nærmest umulig for meg å bevege meg igjennom dansegulvet uten å bli dratt med på to, tre danser. Det var utrolig morsomt, trolig den beste festen jeg noen gang har vært på og som jeg kanskje noen gang vil ha vært på. Tenk dere, rundt 240 damer av 260 personer på festen&#8230; tror dere jeg koste meg eller, hehe&#8230; <img src='https://hovenko.no/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Forrige firmafest jeg var på, som var julebordet i 2005, så endte det med at jeg strippa litt, riktignok bare på overkroppen. Nok en gang overrasket jeg mange med å komme labbendes i morgenkåpe utenpå skjorte og dressbukse ned til middagssalen, hvor bandet spilte en av sine siste låter, for å danse. Mammaen min fikk seg kanskje en liten overraskelse, mens de andre begynner vel kanskje å bli vendt til min noe merkelige oppførsel på disse festene&#8230; Jeg lurer litt på hvorfor alle lo så veldig da&#8230; *klør seg på hodet*</p>
<p>Kanskje ikke fullt så imponerende at jeg kun ble kjent med én ny person i løpet av festen, som var hun som satt ved siden av meg ved middagsbordet, hehe. Ellers var det veldig hyggelig å treffe igjen kjente fra </p>
]]></content:encoded>
			<wfw:commentRss>https://hovenko.no/blog/2006/04/06/ja-magnussen-100-ar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
