<?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>BEKK Open &#187; Teknologi</title>
	<atom:link href="http://open.bekk.no/category/bekk/tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://open.bekk.no</link>
	<description>Et innblikk i hva som skjer i BEKK</description>
	<lastBuildDate>Fri, 10 Sep 2010 16:43:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Riktig beskyttelse mot Cross Site Scripting- og SQL-injection-angrep</title>
		<link>http://open.bekk.no/2010/06/25/riktig-beskyttelse-mot-cross-site-scripting-og-sql-injection/</link>
		<comments>http://open.bekk.no/2010/06/25/riktig-beskyttelse-mot-cross-site-scripting-og-sql-injection/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 12:11:49 +0000</pubDate>
		<dc:creator>Erlend Oftedal</dc:creator>
				<category><![CDATA[Sikkerhet]]></category>
		<category><![CDATA[sql-injection]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://open.bekk.no/?p=2798</guid>
		<description><![CDATA[De siste årene har vi sett flere massive SQL-injection- og Cross Site Scripting (XSS)-angrep mot store siter. Twitter hadde nylig en XSS-feil og i begynnelsen av juni var det et stort angrep mot siter som kjørte en bestemt annonsekomponent. Beskyttelse mot denne type angrep, krever at man tenker på kontekst når man skriver kode.
Validering av [...]]]></description>
			<content:encoded><![CDATA[<p>De siste årene har vi sett flere massive <a href="http://www.owasp.org/index.php/SQL_Injection">SQL-injection</a>- og <a href="http://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29">Cross Site Scripting (XSS)</a>-angrep mot store siter. Twitter hadde nylig en XSS-feil og i begynnelsen av juni var det <a href="http://blog.eeye.com/network-security/mass-infection-via-sql-injection-of-iis-websites">et stort angrep mot siter som kjørte en bestemt annonsekomponent</a>. Beskyttelse mot denne type angrep, krever at man tenker på kontekst når man skriver kode.</p>
<p><strong>Validering av input er ikke løsningen</strong><br />
Tidligere snakket man ofte om at manglende validering av input var årsaken til disse feilene. Dette er dessverre ikke riktig. Validering av input handler om å sjekke at input er riktig i forhold til domenet. Dette vil riktignok stoppe mange angrep, men på langt nær alle. Et godt eksempel er navnet &#8220;Ken-Martin O&#8217;Conner&#8221;. Dette etternavnet inneholder flere tegn som også er kontrolltegn i SQL. For å kunne godta dette navnet må man ved validering av input godta bånde bindestrek og fnutter. Dermed vil man også tillate et angrep som <code>' OR '' LIKE '' --</code>. Man kan selvsagt forsøke å gjøre valideringen enda strenger, men man risikerer kjapt å avvise gyldig input.</p>
<p>Jeg sier ikke at validering av input er unødvendig &#8211; det er bare ikke løsningen på dette problemet.</p>
<p><strong>Kontekst og escaping</strong><br />
Problemet ved både XSS- og SQL-injection-feil er at data flyter fra en kontekst og over i en annen. Ved overgang fra f.eks. javakode til SQL, må vi sørge for at vi beholder semantikken. Skal vi sette inn en datastreng i en SQL-spørring, må vi sørge for at det forblir en streng. Dette gjør vi ved å foreta output escaping. For SQL er løsningen enkelt og greit å ta i bruk parameteriserte spørringer (prepared statements). Bruker vi prepared statements og gir inn parametrene i etterkant, vil rammeverket håndtere escaping av kontrolltegn for oss.</p>
<p>For XSS er det desverre noe vanskeligere. Når data forlater vår applikasjon og går over til noe browseren skal tolke, er det nemlig flere mulige kontekster. Vi kan skrive ut innhold i javascript, javascript i HTML, mellom HTML-tagger, i HTML-attributter osv. Og flere av disse kontekstene må behandles forskjellig. Vi kan begynne med input som skrives ut mellom HTML-tagger. Dette er den enkleste konteksten. Vi kan bruke dette eksempelet:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;div&gt;Du søkte på &quot;her kommer inputten&quot;&lt;/div&gt;</pre></div></div>

<p>For å hindre kjøring av script her, må vi sørge for at input ikke kan åpne nye tagger, f.eks. en <code>&lt;script&gt;</code>-tag. Dette gjør vi selvsagt da ved å erstatte <code>&gt;</code> med <code>&amp;gt;</code> og <code>&lt;</code> med <code>&amp;lt;</code>.</p>
<p>I HTML-attributter, må vi også passe oss for enkle eller doble fnutter alt etter hva som er brukt. Et eksempel på denne konteksten kan være:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;input type=&quot;text&quot; value=&quot;her kommer inputten&quot;  name=&quot;searchValue&quot; /&gt;</pre></div></div>

<p>Et typisk angrep ville i dette tilfellet ha brutt ut av <code>value</code>-attributtet og åpnet en javascript-event (f.eks. <code>onclick</code> eller <code>onmouseover</code>). Her må vi altså <code>"</code> med <code>&amp;quote;</code> og <code>'</code> med <code>&amp;#x27;</code> eller <code>&amp;#39;</code>. Men i noen tilfeller glemmer utviklere å bruke fnutter til å avgrense attributtverdier, så til og med et mellomrom kan lede til problemer.</p>
<p>Ser vi på javascript i HTML, kan det se slik ut:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">...
&lt;body&gt;
&lt;script&gt;
var searchTerms = 'her kommer inputten';
&lt;/script&gt;&lt;code&gt;
...
&lt;/body&gt;
...</pre></div></div>

<p>Her er det kanskje lett å tenke at det holder å legge til en backslash forann eventuelle enkle fnutter (<code>'</code> blir til <code>\'</code>), men vi må huske at vi er i en såkalt <strong>dobbel-kontekst</strong>: Javascript-kontekst inni en HTML-kontekst. Vi må derfor også passe oss for HTML-tegn. <a href="http://erlend.oftedal.no/blog/?blogid=91">Her er et eksempel på hvorfor man må escape for begge kontekster</a>.</p>
<p>For mer informasjon om de forskjellige XSS-kontekstene, se <a href="http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet">OWASP XSS Prevention Cheat Sheet</a>.</p>
<p>For .NET finnes det et bibliotek kalt <a href="http://wpl.codeplex.com/">Web Protection Library</a>. Dette biblioteket har en komponent som heter AntiXSS, som kan escape for forskjellige kontekster. For Java kan man f.eks. benytte <a href="http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encoder.html">encoderen i ESAPI</a>.</p>
<p><strong>Oppsummert</strong><br />
Beskyttelese mot disse angrepene må gjøres med kontekstbasert escaping idet vi bytter fra en kontekst til en annen.</p>
]]></content:encoded>
			<wfw:commentRss>http://open.bekk.no/2010/06/25/riktig-beskyttelse-mot-cross-site-scripting-og-sql-injection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hvorfor trenger DIN bedrift en strategi for sosiale medier?</title>
		<link>http://open.bekk.no/2010/06/16/hvorfor-trenger-din-bedrift-en-strategi-for-sosiale-medier/</link>
		<comments>http://open.bekk.no/2010/06/16/hvorfor-trenger-din-bedrift-en-strategi-for-sosiale-medier/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 09:38:00 +0000</pubDate>
		<dc:creator>Rune F. Åsprang</dc:creator>
				<category><![CDATA[BEKK Management Consulting]]></category>
		<category><![CDATA[Virksomhet 2.0]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[forretningsutvikling]]></category>
		<category><![CDATA[innovasjon]]></category>
		<category><![CDATA[sosial programvare]]></category>
		<category><![CDATA[sosiale medier]]></category>
		<category><![CDATA[sosiale nettverk]]></category>
		<category><![CDATA[strategi]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://open.bekk.no/?p=2791</guid>
		<description><![CDATA[Norske virksomheter har brukt noen år på å bestemme seg for å bruke sosiale medier. Fra ”forbudstiden” i 2006-2007, da flere bedrifter nedla forbud mot bruk av Facebook i arbeidstiden (se her for et eksempel – det føles lenge siden nå, gjør det ikke?), har nå de aller fleste norske bedrifter bestemt seg for å [...]]]></description>
			<content:encoded><![CDATA[<p>Norske virksomheter har brukt noen år på å bestemme seg for å bruke sosiale medier. Fra ”forbudstiden” i 2006-2007, da flere bedrifter nedla forbud mot bruk av Facebook i arbeidstiden (se <a href="http://www.adressa.no/nyheter/trondheim/article858958.ece">her</a> for et eksempel – det føles lenge siden nå, gjør det ikke?), har nå de aller fleste norske bedrifter bestemt seg for å ha et bevisst forhold til sosiale medier. Dialog som angår bedrifter pågår i sosiale medier og bedriftene ønsker altså å ha et bevisst forhold til dette, men hva gjør man så? Trenger bedriftene en egen strategi for tilstedeværelse i sosiale medier?</p>
<p>I en nylig publisert undersøkelse fra Dataforeningen konkluderes det med at 8 av 10 norske bedrifter har bestemt seg for å bruke sosiale medier – dette er 25 % mer enn for et halvt år siden. Undersøkelsen sier videre at 74% prosent av norske virksomheter har hatt sosiale medier som tema for diskusjon i ledergruppen. 67% av respondentene i undersøkelsen mener at virksomheter som ikke har en strategi for sosiale medier vil møte problemer. Det er altså ingen tvil om at holdningene til sosiale medier er i kraftig endring i norske bedrifter!</p>
<p><strong>Skeptisk?</strong></p>
<p>Motargumentene mot store norske virksomheters tilstedeværelse i sosiale medier vil alltid være tilstede. Frykt for at brukerne på sosiale medier er negative, angst for delekultur og åpenhet og spørsmål rundt personvern og IT-sikkerhet er vanlige motargumenter mot å ta skrittet ut i de sosiale medienes verden. Men veier fordelene opp for ulempene?</p>
<p><strong>Sosiale medier har sine fordeler!</strong></p>
<p>En bevisst tilstedeværelse i sosiale medier gir mulighet til å utnytte markedets engasjement for selskapets merkevare(r) til selskapets fordel. Dialog i sosiale medier fostrer innovasjon – ideer  til forbedring oppstår lettest gjennom dialog og samspill. Sosiale medier er som skapt for dette. Bedrifter som lytter til varepraten i sosiale medier, og bruker dette aktivt i sin forretningsutvikling, utvikler produkter som kundene vil betale for!</p>
<p>Sosiale medier byr på en unik mulighet til å synliggjøre bedriftens handlekraft og smidighet. Hvilke andre muligheter har en bedrift til å fortelle markedet daglig om hva man gjør for å utvikle bedre produkter og tjenester og hvordan man jobber for sine kunder? Benytter man seg av mulighetene de sosiale mediene gir bygger man etter min mening omdømme med en effektivitet som tidligere var umulig.</p>
<p><strong>Trenger man en strategi for sosiale medier da?</strong></p>
<p>Varepraten og dialogen om virksomheter går i de sosiale mediene uansett, man må forholde seg til disse mediene enten man vil eller ikke. Edgar Valdmanis i Dataforeningen <a href="http://www.idg.no/computerworld/karriere/article163545.ece">oppsummerer dette</a> på en glimrende måte: ”Dine ansatte er der, dine kunder er der, dine leverandører er der. Hvis du neglisjerer dette, er det på egen risiko!”</p>
<p>Store norske virksomheter bør derfor investere tid og ressurser i å utarbeide en strategi for sin tilstedeværelse i sosiale medier. Strategien bør gjøres lett tilgjengelig for alle ansatte – enkelhet og evnen til å fatte seg i korthet er suksessfaktorer i så måte. Som et minimum bør en strategi for tilstedeværelse i sosiale medier klart definere hva man ønsker å oppnå (mål), hva man skal gjøre (satsingsområder) og hvor man skal gjøre det (Twitter? Facebook? Egen blogg? Eget nettsamfunn?).</p>
<p><strong>Investering i strategi vil tilbakebetales!</strong></p>
<p>Investeringen i en strategi for tilstedeværelse i sosiale medier vil tilbakebetales gjennom økt effekt av ressursbruk på sosiale medier og økt seriøsitet i sosiale medier.</p>
<p>Økt effekt av ressursbruken på sosiale medier oppnår man gjennom at strategien gir en klar retning og et fokus til satsingen i sosiale medier. Dette forenkler prioritering av ressursbruken på sosiale medier og man unngår bruk av ressurser på områder der forventet effekt er lav.</p>
<p>Bedrifter som har en strategi for tilstedeværelse i sosiale medier opplever økt grad av seriøsitet i sosiale medier blant de ansatte. Ansatte som er trygge på at ledelsen har en plan for bedriftens tilstedeværelse i sosiale medier unngår å ”ta ansvar” for å svare på bedriftens vegne når de finner det for godt. <a href="http://thomasmoen.com/wimpgate">Wimpgate</a> og <a href="http://www.arnsteinlarsen.no/2009/04/warnerfail-hvorfor-sa-stor-stahei/">Warnerfail</a> er eksempler de fleste bedrifter forsøker å unngå.</p>
<p>For å etablere en profesjonell tilstedeværelse i sosiale medier trenger man altså en strategi som definerer fokus for tilstedeværelsen. Det å definere fokus handler mer om å velge bort enn å velge. Hva vil vi oppnå med vår tilstedeværelse i sosiale medier? Hva skal vi gjøre i sosiale medier? Hvordan skal vi fremstå? Hvilke kanaler skal vi bruke? Hvilke avdelinger eller forretningsområder skal være ansvarlige?</p>
<p>Dette er sentrale spørsmål som må besvares i en strategi for tilstedeværelse i sosiale medier. Og ja, jeg mener at DIN bedrift trenger en strategi for tilstedeværelse i sosiale medier!</p>
]]></content:encoded>
			<wfw:commentRss>http://open.bekk.no/2010/06/16/hvorfor-trenger-din-bedrift-en-strategi-for-sosiale-medier/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Komponentbaserte webrammeverk: Tapestry 5</title>
		<link>http://open.bekk.no/2010/06/03/komponentbaserte-webrammeverk-tapestry-5/</link>
		<comments>http://open.bekk.no/2010/06/03/komponentbaserte-webrammeverk-tapestry-5/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 15:17:30 +0000</pubDate>
		<dc:creator>Thomas Fossum</dc:creator>
				<category><![CDATA[BEKK]]></category>
		<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[Webarkitektur]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[webrammeverk]]></category>

		<guid isPermaLink="false">http://open.bekk.no/?p=2746</guid>
		<description><![CDATA[Nytt prosjekt, nye muligheter!
Når man planlegger et utviklingsprosjekt for web vil dette som oftest innebære et valg av webrammeverk. Det er etterhvert blitt svært mange å velge blant, og det kan være en utfordring å få oversikt over hva som skiller de ulike rammeverkene. Tradisjonelle action-baserte webrammeverk som Struts2 og Spring MVC har modne og [...]]]></description>
			<content:encoded><![CDATA[<p>Nytt prosjekt, nye muligheter!</p>
<p>Når man planlegger et utviklingsprosjekt for web vil dette som oftest innebære et valg av webrammeverk. Det er etterhvert blitt svært mange å velge blant, og det kan være en utfordring å få oversikt over hva som skiller de ulike rammeverkene. Tradisjonelle action-baserte webrammeverk som Struts2 og Spring MVC har modne og velprøvde API, og blir ofte valgt fordi man her har erfaring fra før og fordi rammeverkene støttes av en stor community. Men blant alternativene som bør vurderes finnes en rekke komponent-baserte rammeverk med en mer høynivå tilnærming. Disse rammeverkene lover rask og effektiv utvikling med et minimum av konfigurasjon, og konfigurerbare, kraftige komponenter som holder på sin egen tilstand og gir rik funksjonalitet rett ut av boksen. Rammeverkene er ment å være utviklervennlige, med utstrakt implementasjon av best pactices.</p>
<p>Tapestry er et open source komponent-basert webrammeverk som har vært under utvikling siden starten av 2000-tallet. Med versjon 5 har rammeverket fått mye oppmerksomhet og positiv omtale. I likhet med Wicket er det nå tatt inn som et Apache-prosjekt, noe som betyr at kildekoden er tilgjengelig med Apache Software Licence 2.0.</p>
<h3>Hvorfor skal så du vurdere dette rammeverket kontra tradisjonelle action-baserte webrammeverk?</h3>
<p>Utviklerne bak Tapestry har definert fire egenskaper som de anser som de viktigste for et rammeverk:</p>
<ul>
<li>Enkelhet &#8211; å utvikle webapplikasjoner skal ikke trenge å være så komplisert. Mye kompleksitet blir håndtert av rammeverket, som utvikler skal du få fokusere på forretningslogikk.</li>
</ul>
<ul>
<li>Konsistens &#8211; Rammeverket skal ha en konsistent oppførsel, med komponenter som er &#8220;self contained&#8221;, altså holder på sin egen tilstand. Webapplikasjoner lagd med Tapestry skal ha en uniform struktur og utviklere skal kunne bygge på best practices.</li>
</ul>
<ul>
<li>Effektivitet &#8211; Applikasjoner basert på Tapestry skal ha god ytelse og skalerbarhet. Utviklingsprosessen skal også være så effektiv som mulig.</li>
</ul>
<ul>
<li>Tilbakemelding &#8211; Rammeverket skal gi god og relevant informasjon til utvikler hvis feilsituasjoner oppstår.</li>
</ul>
<h3>Hvordan er så dette implementert i Tapestry 5?</h3>
<p><strong><span style="color: #000000;">Enkelhet</span></strong></p>
<p>En webapp lagd i Tapestry består av et sett med sider som håndteres av rammeverket. En side består av en template (med en eller flere gjenbrukbare komponenter) og en tilhørende javaklasse med samme navn. Javaklassen er en POJO uten avhengigheter til andre deler av rammeverket; ingen superklasse som må extendes, ingen interface må implementeres.</p>
<p>Denne understøttende javaklassen tilsvarer en Controller i et action-basert rammeverk, og håndterer events som kommer fra viewet. Dette ligner mye på måten tradisjonelle desktop-applikasjoner fungerer, og innebærer et høyere nivå av abstraksjon fra request/response-modellen som f.eks Struts2 og Spring MVC bruker. Urler og request-parametere er erstattet av metoder og egenskaper ved side-objekter. Komponenter er også bygget opp på samme måte; en template og en javaklasse med samme navn, uten avhengigheter. Bruken av POJOs gjør det lett å lage egne testbare komponenter, samt å utvide eksisterende komponenter.</p>
<p>Så hvordan kan Tapestry sette sammen templates og tilhørende javaklasser når disse ikke arver fra en rammeverkspesifikk superklasse eller implementerer bestemte interfaces? Tapestry bruker bytecode weaving til å legge til tapestryspesifikk kode ved runtime. Dette skjer ved at sider og komponenter bruker annotations for å beskrive hvordan rammeverket skal håndtere koden. En kan også bruke navnekonvensjon på metoder som lytter på events, og dermed redusere bruken av annotations. Den utstrakte bruken av annotations og navnekonvensjoner øker lesbarheten og reduserer mengden boilerplate kode.</p>
<p>En siste viktig detalj mht enkelhet er at konfigurasjon gjøres programatisk i en egen javaklasse. Dette gir svært lite deklarasjon i XML å forholde seg til, kun web.xml. Tapestry kommer med en defaultkonfigurasjon som man kan utvide og endre ved behov.</p>
<p><strong><span style="color: #000000;">Konsistens</span></strong></p>
<p>Et viktig designprinsipp for Tapestry er &#8220;convention over configuration&#8221;. Sider, komponenter, templates, services etc må ligge i bestemte kataloger, og følge bestemte navnekonvensjoner. Det man tjener på dette er redusert behov for konfigurasjon, samt en konsistent struktur på webapplikasjonen.</p>
<p>Alle komponenter er self-contained og kan plasseres på hvilken som helst side. De holder sin egen state uten behov for parametere.</p>
<p><strong><span style="color: #000000;">Effektivitet</span></strong></p>
<p>I likhet med andre komponentbaserte webrammeverk er Tapestry svært velegnet til prototyping og rask utvikling av webapplikasjoner.</p>
<p>Kraftige, gjenbrukbare komponenter gir mye funksjonalitet ut av boksen, og disse er enkle å modifisere og utvide. Det er også enkelt å utvikle egne komponenter. Rammeverket kommer med bl.a URL-håndtering, mulighet for tilstandshåndtering på klient eller server, inputvalidering, internationalization, AJAX-støtte og feilrapportering innebygget, og integrasjon mot en rekke kjente rammeverk som Spring og Hibernate er inkludert.</p>
<p>Som utvikler ønsker man å produsere mest mulig funksjonalitet raskest mulig, med færrest mulig feil. Code-test-deploy roundtrip bør derfor være så kort som mulig, og rammeverket må understøtte testdrevet utvikling. Nettopp effektivitet og testbarhet er blant Tapestrys sterkeste kort.</p>
<p>Med live class reloading av alle komponent-klasser trenger man ikke redeploye aplikasjonen for å se resultatet av en endring i koden. Tapestry har en egen classloader som ser etter endringer i koden, og dette muliggjør høy produktivitet. Ettersom komponentene i Tapestry håndterer sin egen tilstand og eventhandling abstraherer bort mye kompleksitet kan utviklere heller konsentrere seg om forretningslogikk. Tapestry er også velegnet for TDD, med sider og komponenter som er POJOs uten avhengigheter til rammeverket.</p>
<p>Et annet viktig prinsipp for Tapestry er &#8220;static structure, dynamic behavior&#8221;.<br />
Med dette menes at strukturen til en gitt side er statisk mens logikken i komponentene gjør at sidene likevel er dynamiske. Med en statisk instans av strukturen for en side kan denne pooles av rammeverket. Dette gjør at en side som aksesseres flere ganger vil gjenbrukes, noe som er gunstig både for ytelse og skalering. Tapestry lagrer mindre data i HttpSession enn andre komponentbaserte rammeverk som JSF og Wicket, fordi bare data fra en side lagres, ikke hele side-instansen.</p>
<p><strong><span style="color: #000000;">Tilbakemelding</span></strong></p>
<p>Når en feilsituasjon oppstår vil Tapestry gi utvikler en detaljert og informativ feilmelding. Feilmeldingen vil referere til riktig kodelinje i den originale kildekoden, med et utsnitt av den aktuelle kodebiten og en mulig feilårsak og løsning.</p>
<h3>Så er alt bare gull og Tapestry 5 et soleklart valg i ditt neste prosjekt?</h3>
<p>Det er endel aspekter man bør være klar over når man vurderer Tapestry.</p>
<p>Rammeverket har fått endel pepper for manglende bakoverkompatibilitet ved major releases. Versjon 5 er en omfattende omskrivning ift v4, og en migrering av et eldre prosjekt vil være tidkrevende. Nå loves det fra utviklerne at man f.o.m v5 ikke skal få dette problemet så lenge selve grunnkonseptene ikke endres.</p>
<p>Komponenter som håndterer sin egen tilstand gjør at man kan få mye data i session scope og dermed stort minneforbruk; dette er en generell problemstilling for komponentbaserte webrammeverk. Tapestry håndterer dette vha førnevnte side-pooling og lagring kun av data for en side i session. Man kan også optimalisere applikasjonen ved å sette en grense for antall sider i session.</p>
<p>Bruken av en pool med side-instanser begrenser også den potensielt uheldige effekten for ytelse som runtime bytecode weaving kan ha. Sider vil ta kun ta lenger tid å laste ved førstegangs aksess, så dette er ikke et større problem i Tapestry enn f.eks i JSP.</p>
<p>Feilsøking i generert tapestrykode kan være frustrerende. Koden du har skrevet blir vevd sammen med tapestrykode runtime, og en bug kan ligge i koden fra rammeverket. Du har da muligheten til å sette loglevel til DEBUG, og få ut logg for den endelige, genererte koden.</p>
<p>Lærekurven kan være bratt hvis man tidligere kun har skrevet webapplikasjoner i action-baserte rammeverk. Erfaring fra utvikling av desktop-applikasjoner vil være relevant for det programmeringsparadigmet man bruker i Tapestry. Dokumentasjonen er blitt mye bedre med versjon 5, og veien til den første Hello World-applikasjonen er ikke lang.</p>
<p>Tapestry har færre brukere og aktive commiters enn f.eks Struts2, Spring MVC og JSF, men community er i vekst nå som Tapestry er blitt et Apacheprosjekt.</p>
<h3>Konklusjon</h3>
<p>Hvis du skal vurdere webrammeverk til en applikasjon med et rikt GUI og ønsker å utvikle dette uten bruk av plugins må komponentbaserte webrammeverk vurderes. Med Apache i ryggen og en økende brukermasse er Tapestry 5 et webrammeverk i positiv utvikling.</p>
<p>Tapestry gir deg et bibliotek med kraftige, utvidbare og godt dokumenterte komponenter, og sikrer en rask utviklingssyklus med live class reloading. Rammeverket forenkler utvikling av rike GUI for web og er godt egnet for testdrevet utvikling. For å oppnå enkelhet ved utvikling må man ofre noe fleksibilitet. Ved å akseptere de valg som er gjort i rammeverket får man konsistens, på bekostning av ubegrenset mulighet til å implementere egne patterns.</p>
<p>Tapestry 5 bør være på lista når webrammeverk skal velges i ditt neste prosjekt.</p>
]]></content:encoded>
			<wfw:commentRss>http://open.bekk.no/2010/06/03/komponentbaserte-webrammeverk-tapestry-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automated functional testing of iPhone apps with iCuke</title>
		<link>http://open.bekk.no/2010/06/02/automated-functional-testing-of-iphone-apps-with-icuke/</link>
		<comments>http://open.bekk.no/2010/06/02/automated-functional-testing-of-iphone-apps-with-icuke/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 12:05:20 +0000</pubDate>
		<dc:creator>Aslak Hellesøy</dc:creator>
				<category><![CDATA[Fri Programvare]]></category>
		<category><![CDATA[Kvalitet og testing]]></category>
		<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[icuke]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://open.bekk.no/?p=2735</guid>
		<description><![CDATA[Seeing the downloads of the open source BDD/Acceptance Testing tool Cucumber skyrocketing is great, but seeing what insane extensions the community comes up with is even greater.
UK-based super hacker and long time Cucumber contributor Rob Holland announced iCuke yesterday. iCuke is a Cucumber extension that lets you write automated functional tests for iPhone apps. Here [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://open.bekk.no/wp-content/uploads/2010/06/icuke.png"><img class="size-full wp-image-2737 alignleft" title="icuke" src="http://open.bekk.no/wp-content/uploads/2010/06/icuke.png" alt="" width="110" height="203" /></a>Seeing the downloads of the open source BDD/Acceptance Testing tool Cucumber <a href="http://rubygems.org/gems/cucumber">skyrocketing</a> is great, but seeing what insane extensions the community comes up with is even greater.</p>
<p>UK-based super hacker and long time Cucumber contributor Rob Holland <a href="http://www.unboxedconsulting.com/blog/cucumber-iphone-icuke">announced iCuke yesterday</a>. iCuke is a Cucumber extension that lets you write automated functional tests for iPhone apps. Here is a little teaser&#8230;</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12230690&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=12230690&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/12230690">iCuke</a> from <a href="http://vimeo.com/user1178904">Aslak Hellesøy</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>For questions about iCuke, please use the <a href="http://groups.google.com/group/icuke">iCuke mailing list</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://open.bekk.no/2010/06/02/automated-functional-testing-of-iphone-apps-with-icuke/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Det lønner seg å dele: GoOpen 2010</title>
		<link>http://open.bekk.no/2010/05/04/det-l%c3%b8nner-seg-a-dele-goopen-2010/</link>
		<comments>http://open.bekk.no/2010/05/04/det-l%c3%b8nner-seg-a-dele-goopen-2010/#comments</comments>
		<pubDate>Tue, 04 May 2010 21:07:41 +0000</pubDate>
		<dc:creator>Jon Grov</dc:creator>
				<category><![CDATA[BEKK]]></category>
		<category><![CDATA[Fri Programvare]]></category>
		<category><![CDATA[friprog]]></category>
		<category><![CDATA[offentlig]]></category>

		<guid isPermaLink="false">http://open.bekk.no/?p=2696</guid>
		<description><![CDATA[Nasjonalt kompetansesenter for fri programvare, ofte kalt Friprogsenteret, arrangerer hvert år konferansen GoOpen. Flere av våre kunder tjener på pragmatisk og effektiv bruk av fri programvare. Se vår direktør for kundeutvikling, Jon Fageraas, fortelle hvorfor dyp kunnskap om både fri programvare og etablerte kommersielle produkter er nødvendig for å være en god leverandør.


Blant konferanseforedragene var [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.friprog.no/" target="_blank">Nasjonalt kompetansesenter for fri programvare</a>, ofte kalt Friprogsenteret, arrangerer hvert år konferansen <a href="http://www.goopen.no" target="_blank">GoOpen</a>. Flere av våre kunder tjener på pragmatisk og effektiv bruk av fri programvare. Se vår direktør for kundeutvikling, Jon Fageraas, fortelle hvorfor dyp kunnskap om både fri programvare og etablerte kommersielle produkter er nødvendig for å være en god leverandør.</p>
<div style="width: 425px;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="250" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=10920934&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="425" height="250" src="http://vimeo.com/moogaloop.swf?clip_id=10920934&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<p>
Blant konferanseforedragene var <a href="http://www.avinor.no" target="_blank">Avinors</a> erfaringer med offentliggjøring av data (som du også kan lese mer om <a href="http://open.bekk.no/2009/12/13/hva-skjer-nar-man-gir-bort-flydata-gratis/" target="_blank">her</a>),  <a href="http://www.norwegian.no">Norwegians</a> sofistikerte og sammensatte arkitektur for flyreservasjon, samt <a href="http://www.nav.no">NAVs</a> nye <a href="http://www.nav.no/stillinger/index.jsf" target="_blank">stillingssøk</a> basert på søkemotoren <a href="http://lucene.apache.org/solr/" target="_blank">Solr</a>. Sistnevnte ble filmet, se foredraget til NAVs portalansvarlig Magnus Børnes Hellevik sammen med Carl Christensen lenger ned.</p>
<div id="__ss_3814222" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="GoOpen 2010: Avinor" href="http://www.slideshare.net/Friprog/goopen-2010-ann-kristin-hansen">GoOpen 2010: Avinor</a></strong><object id="__sse3814222" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=ann-kristinhansenavinor-100422041507-phpapp01&amp;stripped_title=goopen-2010-ann-kristin-hansen" /><param name="name" value="__sse3814222" /><param name="allowfullscreen" value="true" /><embed id="__sse3814222" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=ann-kristinhansenavinor-100422041507-phpapp01&amp;stripped_title=goopen-2010-ann-kristin-hansen" name="__sse3814222" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<div id="__ss_3814231" style="width: 425px;"><strong style="display: block; margin-top: 12px; margin-bottom: 0px; padding-bottom: 0px;"><a title="GoOpen 2010: Norwegian" href="http://www.slideshare.net/Friprog/goopen-2010-hvard-haug-hanssen">GoOpen 2010:  Norwegian</a></strong><object id="__sse3814231" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=havardhaughanssennorwegian-100422041605-phpapp01&amp;stripped_title=goopen-2010-hvard-haug-hanssen" /><param name="name" value="__sse3814231" /><param name="allowfullscreen" value="true" /><embed id="__sse3814231" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=havardhaughanssennorwegian-100422041605-phpapp01&amp;stripped_title=goopen-2010-hvard-haug-hanssen" name="__sse3814231" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<div style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a href=" http://vimeo.com/11049845">GoOpen 2010: NAV</a></strong><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="252" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=11049845&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="425" height="252" src="http://vimeo.com/moogaloop.swf?clip_id=11049845&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<div style="margin-top: 10px">Stor takk til Friprogsenteret, og ikke minst til bidragsyterne, for at presentasjonene er gjort tilgjengelig.</div>
]]></content:encoded>
			<wfw:commentRss>http://open.bekk.no/2010/05/04/det-l%c3%b8nner-seg-a-dele-goopen-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Om arkitektur og hvordan den blir til</title>
		<link>http://open.bekk.no/2010/04/12/om-arkitektur-og-hvordan-den-blir-til/</link>
		<comments>http://open.bekk.no/2010/04/12/om-arkitektur-og-hvordan-den-blir-til/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 07:13:44 +0000</pubDate>
		<dc:creator>Vidar Kongsli</dc:creator>
				<category><![CDATA[BEKK]]></category>
		<category><![CDATA[Systemarkitektur]]></category>
		<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[arkitektur]]></category>
		<category><![CDATA[metode]]></category>
		<category><![CDATA[prosess]]></category>
		<category><![CDATA[systemutvikling]]></category>

		<guid isPermaLink="false">http://open.bekk.no/?p=2580</guid>
		<description><![CDATA[I mitt tidligere innlegg &#8220;Om arkitektur&#8221; forsøkte jeg å si noe om hva  arkitektur innen informasjonsteknologi betyr og hvilket fokus  arkitekturarbeidet bør ha. Jeg forsøkte å analysere hva ordet arkitektur  kommer av og hvordan den klassiske tolkningen av ordet gikk ut på.  Videre forsøkte jeg å trekke paralleller til hvordan arkitektur [...]]]></description>
			<content:encoded><![CDATA[<p>I mitt tidligere innlegg &#8220;<a title="Første artikkel, &quot;Om arkitektur&quot;" href="http://open.bekk.no/2010/04/06/om-arkitektur/">Om arkitektur</a>&#8221; forsøkte jeg å si noe om hva  arkitektur innen informasjonsteknologi betyr og hvilket fokus  arkitekturarbeidet bør ha. Jeg forsøkte å analysere hva ordet arkitektur  kommer av og hvordan den klassiske tolkningen av ordet gikk ut på.  Videre forsøkte jeg å trekke paralleller til hvordan arkitektur bør  tolkes innen informasjonsteknologi. Minst like viktig er det å se på  hvordan en arkitektur blir til, og ikke minst hvilke oppgaver en  arkitekt bør ha i så henseende. I dette innlegget forsøker jeg å komme  med noen tanker rundt dette.</p>
<h3>&#8220;Jeg har sett mange gode arkitekturer som aldri ble noe av&#8221;</h3>
<p>Dette sitatet (fritt etter hukommelsen) hørte jeg fra en foreleser på en  konferanse for en tid tilbake. Min første tanke var: &#8220;var arkitekturen god hvis den  ikke ble noe av&#8221;? Hvis vi igjen skal se på gode, gamle <a title="Lenke til side om Vitruvius hos Wikipedia" href="http://en.wikipedia.org/wiki/Vitruvius">Vitruvius</a> som jeg  nevnte i mitt forrige innlegg; oppfyller arkitekturen som ikke ble noe  av ikke prinsippene <em>firmitatis utilitatis venustatis? </em>Ikke var  den robust, ikke var den nyttig for brukerne og den fikk aldri sjansen  til å vise sin skjønnhet. Vel. Mer fruktbart er det kanskje å spørre seg  hvorfor en arkitekturplan aldri ble noe av. Det kunne være at den ble  for dyr, det kunne være at den ikke løste utfordringene den skulle eller  det kunne være at den ikke hadde tilstrekkelig forankring i  organisasjonen. Like viktig som hva en arkitektur består av, er hvordan  den ble til.</p>
<h3>Arkitektur ikke bare en arkitekts anliggende</h3>
<p>Arkitektur er et tverrfaglig område. Det omhandler forretningen  (hvilken funksjonalitet er ønsket, og hvilken verdi gir den?),  økonomi/finans (hva er kostnadene? Oppstartskostnader vs. operasjonelle  kostnader, osv.) og ikke minst teknologi (modenhet, tilgjengelighet,  osv.). En god arkitekturprosess krever forankring og involvering fra  ulike deler av organisasjonen og jo mer eierskap de involverte føler, jo  større er sjansen for å lykkes. Et eksempel på dette er smidige  utviklingsprosjekter, der arkitekturspørsmål bør kunne diskuteres og  løses i utviklingsteamet. I den grad man har arkitekturprinsipper som  går på tvers av prosjekter, bør man sikre tilstrekkelig involvering på  tvers av prosjekter, f.eks. gjennom at arkitekter dedikeres til  prosjektene og kan jobbe tett med utviklingsteamene.</p>
<h3>Arkitektur og &#8220;Big Design Up Front&#8221;  &#8211; BDUF</h3>
<p>I mitt tidligere innlegg pekte jeg på at arkitektur er en delmengde av  design i den forstand at design kan skje på alle granularitetsnivåer og  kan gjerne omhandle en moduls eller applikasjons interne organisering,  mens arkitektur fokuserer på helheten og eksterne kvaliteter. I smidige  prosjekter ønsker man å unngå det man kaller &#8220;<a href="http://en.wikipedia.org/wiki/Big_Design_Up_Front">big design up front</a>&#8220;,  altså at design skjer før utviklingen eller implementasjonen starter.  Dette er et prinsipp som brukes uavhengig av hvilke smidige metoder som  benyttes, men jeg syns <a href="http://en.wikipedia.org/wiki/Lean_software_development">Lean Software Development</a> er nærmest å forankre  prinsippet teoretisk. I mine øyne er fravær av BDUF en følge av tre  Lean-prinsipper: 1) vektlegge læring, 2) ta avgjørelser så sent som  mulig og 3) mindre avfall, &#8220;eliminate waste&#8221;. Ved å kjøre  designprosessen som en del av utviklingsprosessen kan man ta med seg  læring inn i designprosessen. Videre kan man utsette designavgjørelser  lengre slik at man har mer informasjon og kunnskap tilgjengelig som  beslutningsgrunnlag og dermed forhåpentligvis ta en bedre avgjørelse enn  man kunne gjort tidligere. Til sist, hvis design gjøres samtidig som  implementasjonen, sparer man unødig ressursbruk til dokumentasjon i og  med at de involverte har informasjonen i mente allerede. Mer om  dokumentasjon senere&#8230;</p>
<p>Spørsmålet er om regelen om å unngå &#8220;big  design up front&#8221; også gjelder for arkitektur? Ja og nei. Noen  arkitekturavgjørelser må ofte tas før man starter implementasjon. Dette  kan for eksempel være hvilken implementasjonsplattform man ønsker å  bruke (Java EE eller .NET, for eksempel). Det som er viktig i slike  sammenhenger, er som jeg nevnte i forrige avsnitt at man utsetter  avgjørelser som er vanskelig å omgjøre så lenge som mulig. Spesielt  viktig er det også å utsette avgjørelser som introduserer mye  kompleksitet så lenge som mulig fordi kompleksitet ofte introduserer  avhengigheter. Disse bidrar så til å krympe mulighetsrommet for  arkitekturen. Med andre ord får man mindre frihetsgrader. I den grad man  kan gjøre det, bør man fatte avgjørelser som kan omgjøres for å unngå å  male seg inn i et hjørne. Et godt innlegg om det å utsette avgjørelser  finner du <a title="The principle of Last Responsible Moment" href="http://asserttrue.blogspot.com/2009/04/principle-of-last-responsible-moment_11.html">her</a>.</p>
<h3>Et dokument er ikke arkitektur</h3>
<p>&#8220;Leveransen fra arkitekturprosessen er et arkitekturdokument&#8221;. &#8220;I følge  rammeverk X skal leveransen fra arkitekturprosessen være et Y-diagram,  en Z-modell, &#8230; , samt en forretningmodell&#8221;.  Lyder kjent? Å ha noe  håndfast (i den grad man kan omtale et elektronisk dokument som  håndfast, man kan i det minste skrive det ut for å få noe håndfast) å  vise til som resultat av en investering gir en god og varm følelse. I  klassisk transaksjonstankegang er dette viktig fordi det er et synlig  bevis for hva man har fått igjen, og et sett arkitekturprinsipper som  eksisterer inni hodene på folk ikke gir den samme følelsen av å ha fått  noe tilbake.</p>
<p>Å benytte et rammeverk for arkitektur som definerer  et sett av dokumenter som skal produseres gir også troverdighet som det  er behagelig å lene seg på. Dette er selvfølgelig vissvass. Et  arkitekturrammeverk er et tomt skall uten innhold, og det er innholdet  som er viktig.</p>
<p>Arkitektur består av en del fokusområder /  kvaliteter (eksempelvis <em>firmitatis utilitatis venustati</em>s). Disse  er i stor grad ideer eller prinsipper, og det er veldig vanskelig å  formidle ideer og prinsipper i dokumenter. Enklere er det derimot å  overføre ideer muntlig, og enda bedre; hvis man selv har vært med på å  komme frem til disse har man en enda bedre forståelse (og ikke minst et  større eierskap). Dokumenter er den dårligste kommunikasjonsformen, og  burde brukes når andre former ikke er tilgjengelige. Dette kan være  tilfelle på grunn av avstand til brukere; både organisatorisk,  geografisk og i tid. Som jeg nevnte i forrige avsnitt; den  organisatoriske avstanden bør minimeres gjennom involvering, og som jeg  nevnte i avsnittet om BDUF, avstanden i tid bør minimeres ved å utsette  arkitekturavgjørelsene så lenge som mulig.</p>
<h3>Oppsummering</h3>
<p>Gjennom disse to innleggene om arkitektur har jeg vært innom flere  aspekter som kan oppsummeres som følger:</p>
<ol>
<li>Arkitektur fokuserer  på helheten og på eksterne kvaliteter (hva som er eksternt varierer dog  avhengig av perspektivet)</li>
<li>Arkitektur består av en del  kvalitetsområder eller prinsipper, eksempelvis <em>firmitatis utilitatis  venustati</em>s</li>
<li>Arkitekturarbeid er en tverrfaglig prosess der  involvering fra ulike deler av organisasjonen er viktig</li>
<li>Arkitektur  bør utvikles gradvis, parallelt med implementasjon der man underveis  nyttiggjør seg lærdom man opparbeider seg</li>
<li>Leveransen fra  arkitekturarbeid bør ikke defineres i form av dokumenter.  Kommunikasjonsformen bør tilpasses situasjonen.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://open.bekk.no/2010/04/12/om-arkitektur-og-hvordan-den-blir-til/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Om arkitektur</title>
		<link>http://open.bekk.no/2010/04/06/om-arkitektur/</link>
		<comments>http://open.bekk.no/2010/04/06/om-arkitektur/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 11:05:58 +0000</pubDate>
		<dc:creator>Vidar Kongsli</dc:creator>
				<category><![CDATA[BEKK]]></category>
		<category><![CDATA[Systemarkitektur]]></category>
		<category><![CDATA[arkitektur]]></category>
		<category><![CDATA[metode]]></category>
		<category><![CDATA[programvareutvikling]]></category>

		<guid isPermaLink="false">http://open.bekk.no/?p=2576</guid>
		<description><![CDATA[Innen IT-bransjen finner man &#8220;arkitektur&#8221; overalt. Vi har  systemarkitektur, databasearkitektur, data-arkitektur,  løsningsarkitektur, sikkerhetsarkitektur, integrasjonsarkitektur, og vi  har 3-lagsarkitekturer. Beveger man seg på spesifikke plattformer har  man J2EE-arkitektur og .NET-arkitektur. Nå om dagen sliter bransjen  (skal vi tro tidsånden) med monolittiske arkitekturer, og løsningen er  en tjenestebasert arkitektur. Betimelige spørsmål [...]]]></description>
			<content:encoded><![CDATA[<p>Innen IT-bransjen finner man &#8220;arkitektur&#8221; overalt. Vi har  systemarkitektur, databasearkitektur, data-arkitektur,  løsningsarkitektur, sikkerhetsarkitektur, integrasjonsarkitektur, og vi  har 3-lagsarkitekturer. Beveger man seg på spesifikke plattformer har  man J2EE-arkitektur og .NET-arkitektur. Nå om dagen sliter bransjen  (skal vi tro tidsånden) med monolittiske arkitekturer, og løsningen er  en tjenestebasert arkitektur. Betimelige spørsmål er hva arkitektur  egentlig er, hva kjennetegner god arkitektur og hvordan oppnår man den?</p>
<h3>Arkitektur  fokuserer på helheten</h3>
<p>Selv om man skal være forsiktig med å trekke  paralleller mellom arkitektur i IT-verdenen og den klassiske betydningen  av arkitektur, er det interessant å studere etymologien for å få en  forståelse av hva ordet har blitt brukt til og hva det har representert  tidligere. Ordet arkitektur stammer fra gresk &#8220;arkitekton&#8221; (via latin  &#8220;architechtura&#8221;) og er sammensatt av de to ordene &#8220;ὰρχι&#8221; (hoved- eller  sjef-) og &#8220;Τεκτονική&#8221; (håndtverker, bygger). En arkitekt er altså en  &#8220;sjefsbygger&#8221;.</p>
<p>Om arkitektur står det også å lese at den ble ofte  kalt <em>moderkunsten</em> fordi den fokuserte på <em>helheten</em> (kilde:  <a href="http://www.kunsthistorie.com/">kunsthistorie.com</a>). Dette er noe vi kan kjenne igjen daglig bruk av  arkitektur i vår bransje. Arkitektur handler om helheten, de store  linjene. Man kan snakke om &#8220;overliggende arkitektur&#8221;, selv om det  muligens er smør på flesk, men det gir ikke noen mening å snakke om  &#8220;detaljert arkitektur&#8221;. Man kan derimot snakke om &#8220;detaljert design&#8221;;  til forskjell fra arkitektur er design noe som kan gjelde ulike  granularitetsnivåer. Forskjellen mellom arkitektur og design er at  arkitektur fokuserer på helheten og et systems eksternt synlige,  ikke-funksjonelle kvaliteter, mens design gjerne kan omhandle interne  kvaliteter. Eksempelvis er intern kodeorganisering som noe som omhandler  design, men ikke arkitektur. Derimot er valg av plattform, f.eks. J2EE  eller .NET, noe som anligger arkitektur i og med at det sannsynligvis er  et valg som har noe å si for eksterne egenskaper. Dette er forøvrig  også en del av designet, og derav følger at arkitektur er en delmengde  av design.</p>
<h3>Den klassiske arkitekturen &#8211; <em>firmitatis utilitatis  venustatis</em></h3>
<p>I min noe vilkårlige og overfladiske omgang med  klassiske verker er jeg funnet &#8220;De architectura&#8221; (&#8220;Om arkitektur&#8221;) av  <a title="Link to page on Vitruvius on Wikipedia" href="http://en.wikipedia.org/wiki/Vitruvius">Vitruvius</a>. &#8220;De architectura&#8221; er antikkens mest kjente referanse for  definisjon av arkitektur. Den er inndelt i ti seksjoner og omhandler alt  fra byplanlegging, materialkunnskap og vanntilførsel til bruk av  maskiner. Vitruvius mener at en god bygning må etterleve de tre  prinsippene <em>firmitatis utilitatis venustatis</em> som kan oversettes  (av meg, <a href="http://penelope.uchicago.edu/Thayer/E/Roman/Texts/Vitruvius/home.html">via engelsk</a>) som:</p>
<ul>
<li>Styrke (eller robusthet) &#8211; den  skal være bygd på et solid fundament og bygd av nøye utvalgte materialer</li>
<li>Funksjonalitet  (eller brukbarhet) &#8211; gjennom en fornuftig sammensetning av dens deler  slik at delene kommer til sin rett</li>
<li>Skjønnhet &#8211; den skal ha  et fint utseende og fremstå som en helhet der alle delene er  proporsjonert i forhold til hverandre</li>
</ul>
<p>Er dette  prinsipper som også gir mening i vår bransje? Som jeg nevnte  innledningsvis, er det lett å gå seg vill i alle arkitekturbegrepene.  Fra nå av omtaler jeg &#8220;arkitektur innen informasjonsteknologi&#8221; kort og  godt som &#8220;arkitektur&#8221;, og når jeg omtaler arkitektur i klassisk forstand  som &#8220;bygningsarkitektur&#8221; eller &#8220;klassisk arkitektur&#8221;.</p>
<h3>Klassiske  prinsipper anvendt i vår hverdag</h3>
<h4>Styrke (eller robusthet)</h4>
<p>For  en bygning er det lett å være enig i at den må ha et tilstrekkelig  solid fundament og at den må være bygd av egnede materialer. For et  IT-system er ikke dette like intuitivt. Når det gjelder programvare  (&#8220;mykvare&#8221;) skal denne være myk og formelig for å kunne imøtekomme  fremtidige krav som oppstår gjennom systemets livssyklus. I motsetning  til styrke i form av fasthet eller ubevegelighet, er <span>&#8220;endringsvennlighet&#8221; (eng.  &#8220;changeability&#8221;)</span> en kvalitet som vi ønsker i arkitekturen  vår. Samtidig er det sjelden mulig å ha en arkitektur som er åpen for  alle mulige endringer, noen fundamenter må være fastere enn andre.  Utfordringen består i å forutse hvilke endringer som er sannsynlig kommer  og hvilke som er usannsynlige. Klarer man det, kan man sørge for at  designvalg ikke påvirker endringsvennligheten i negativ retning.  Man  kan muligens også snakke om at en arkitektur er &#8220;robust og slitesterk&#8221; i  den forstand at den skal kunne imøtekomme nye bruksmønster og at den  skal være skalerbar og anvendbar i ulike situasjoner. Jeg tør også påstå  at jo lavere kompleksitet arkitekturen har, jo større er  sannsynligheten for at den blir anvendbar i fremtiden.</p>
<h4>Funksjonalitet  (eller brukbarhet)</h4>
<p>Prinsippet <em>utilitatis</em> er noe som i mine  øyne er direkte overførbart til vår bransje. &#8220;Nytteverdi&#8221; er muligens et  enda bedre ord for denne egenskapen. Høy nytteverdi oppnås ved at  systemets ulike deler spiller sammen slik at hver enkelt del er  formålstjenlig og virker sammen i en helhet. Ikke vanskelig å være enig i  dette, utfordringen man har som arkitekt er ofte å sørge for et riktig  utvalg av komponenter og integrere disse slik at de spiller godt sammen.</p>
<h4>Skjønnhet</h4>
<p>Skal  vi anvende prinsippet om <em>venustatis</em> i vår hverdag, må vi kanskje  ha et litt videre perspektiv en visuell skjønnhet. (Uten at jeg skal  påstå at Vitruvius kun refererte til visuell skjønnhet.) Er skjønnhet  noe som vi arkitekter vanligvis fokuserer på?  Burde vi? Og hva er  &#8220;skjønnhet&#8221; i en arkitektur? I &#8220;<a href="http://www.python.org/dev/peps/pep-0020/">Zen of Python</a>&#8220;, som omhandler  designprinsipper for programmeringsspråket Python, sier Tim Peters at  &#8220;beautiful is better than ugly&#8221;. Dette hjelper oss kanskje ikke så mye  nærmere svaret. La oss heller snu om på det og si at skjønnhet er det  som behager og gleder folk, hva nå enn det er. Og hvem er folk? Jo, det  er sluttbrukere, arkitekter, driftspersonell og utviklere (blant andre).  &#8220;Vakker i sin enkelhet&#8221;, sier man ofte, og i mine øyne er enkelhet  viktig i en arkitektur. Er arkitekturen enkel og lett å forstå, så er  den &#8220;vakker i sin enkelhet&#8221;.</p>
<p>Som vi ser er de klassiske  prinsippene for arkitektur absolutt anvendbare på informasjonsteknologi,  og jeg tør påstå at de også gir verdi gjennom å hjelpe til gi innsikt i  hva man bør vektlegge.</p>
<h3>Moderne prinsipper for arkitektur</h3>
<p>Hvis  vi så forlater antikken og stiger inn i nåtiden så finnes det andre  oppfatninger om hva arkitektur omhandler. Her er en liste fra &#8220;<a href="http://oreilly.com/catalog/9780596517984">Beautiful  architecture</a>&#8221;  som jeg syns er nyttig:</p>
<ul>
<li>Funksjonalitet &#8211; hvilken  funksjonalitet som systemet tilbyr brukerne</li>
<li>Endringsvennlighet &#8211;  hvilke endringer kommer til måtte gjøres i fremtiden, og hvilke  endringer er ikke sannsynlige?</li>
<li>Ytelse &#8211; hva vil systemets ytelse  være?</li>
<li>Kapasitet &#8211; Hvor mange samtidige brukere skal systemet  betjene? Hvor store datamengder skal det behandle?</li>
<li>Økosystem &#8211;  hvordan vil systemet samhandle med andre systemer i økosystemet det skal  produksjonssettes i?</li>
<li>Modularitet &#8211; hvordan deler man opp jobben  med å utvikle systemet og i særdeleshet; hvordan kan systemet  modulariseres slik at modulene kan utvikles uavhengig av hverandre og  samtidig imøtekomme hverandres krav presist og enkelt?</li>
<li>Byggbarhet  &#8211; Kan systemet bygges som et sett av komponenter som kan implementeres  og verifiseres uavhengig av hverandre? Hvilke komponenter burde  gjenbrukes fra andre produkter og hvilke burde anskaffes fra eksterne  tilbydere?</li>
<li>Produktifisering &#8211; hvis systemet skal eksistere i  ulike versjoner, hvordan kan det utvikles som en produktlinje?</li>
<li>Sikkerhet  &#8211; Hvordan kan informasjonssikkerheten ivaretas?</li>
</ul>
<p>Denne  listen inneholder en del fellespunkter med de vi fant hos Vitruvius. I  tillegg tilføyer den en del punkter som er spesifikke for  informasjonsteknologi. Jeg syns dette er en nyttig liste; den har et  passe detaljnivå og er ikke for lang.</p>
<h3>Oppsummering</h3>
<p>Arkitektur  omhandler helheten i et system, til forskjell fra design. Arkitektur  adresserer eksterne kvaliteter, på ulike nivåer. Arkitektur innen  informasjonsteknologi og klassisk arkitektur har noen felles prinsipper  som bør vektlegges. I tillegg til dette har arkitektur innen  informasjonsteknologi noen prinsipper som er spesifikke for fagområdet.</p>
]]></content:encoded>
			<wfw:commentRss>http://open.bekk.no/2010/04/06/om-arkitektur/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Testing external services using Mockito in Cuke4Duke</title>
		<link>http://open.bekk.no/2010/03/01/testing-external-services-using-mockito-in-cuke4duke/</link>
		<comments>http://open.bekk.no/2010/03/01/testing-external-services-using-mockito-in-cuke4duke/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 21:24:34 +0000</pubDate>
		<dc:creator>Eirik Wang</dc:creator>
				<category><![CDATA[Fri Programvare]]></category>
		<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[cuke4duke]]></category>
		<category><![CDATA[mockito]]></category>

		<guid isPermaLink="false">http://open.bekk.no/?p=2483</guid>
		<description><![CDATA[When developing a system, you often end up in situations where you are depending on external components like web services. In this post I'll show you how you can use <a href="http://mockito.org/">Mockito</a> for mocking up fake responses, and verifying behaviour when using <a href="http://wiki.github.com/aslakhellesoy/cuke4duke/">Cuke4Duke</a>.]]></description>
			<content:encoded><![CDATA[<p>When developing a system, you often end up in situations where you are depending on external components like web services. In this post I&#8217;ll show you how you can use <a href="http://mockito.org/">Mockito</a> for mocking up fake responses, and verifying behaviour when using <a href="http://wiki.github.com/aslakhellesoy/cuke4duke/">Cuke4Duke</a>.</p>
<p>Lets start with a simple scenario. We want to verify that we call a web service with the correct parameters after processing a message. For this scenario I have created the interface of the web-service we want to verify behaviour from.</p>
<p>First we have to create a mock of the web service interface in spring config. We do this in spring so we can autowire the mock into services.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;sampleWsPortType&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.mockito.Mockito&quot;</span> <span style="color: #000066;">factory-method</span>=<span style="color: #ff0000;">&quot;mock&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;constructor-arg</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;no.bekk.ws.SampleWsPortType&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>The next step is to make a cucumber step for verifying that the service is called</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@StepDefinitions
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> WsSteps <span style="color: #009900;">&#123;</span>
    @Resource<span style="color: #009900;">&#40;</span>name <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;sampleWsPortType&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">private</span> SampleWsPortType sampleWsPortType<span style="color: #339933;">;</span>
    ......
    @Then<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;the person service receives person with name '(.*?)' and age '(.*?)':&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> personServiceReceivesInput<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> name, <span style="color: #003399;">Integer</span> age<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        ArgumentCaptor<span style="color: #339933;">&lt;</span>WsPerson<span style="color: #339933;">&gt;</span> capturedPerson <span style="color: #339933;">=</span> ArgumentCaptor.<span style="color: #006633;">forClass</span><span style="color: #009900;">&#40;</span>WsPerson.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        verify<span style="color: #009900;">&#40;</span>sampleWsPortType<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">addPerson</span><span style="color: #009900;">&#40;</span>capturedPerson.<span style="color: #006633;">capture</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        assertEquals<span style="color: #009900;">&#40;</span>name, capturedPerson.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        assertEquals<span style="color: #009900;">&#40;</span>age, capturedPerson.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">age</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>You can then use this step definition in a cucumber test.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">  Scenario: Post person data and verify that it is sent to the web service with correct parameters
    When I post the line '29;Ola Normann'
    Then the person service receives person with name 'Ola Normann' and age '29'</pre></div></div>

<p/>
<p>The next step is mocking response from the service. Use this when you are in need of data from a web service in your code. Open-ID integration for example.  </p>
<p/>
<p>
We do this using a Given step in cucumber. </p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">  Scenario: I want to get the correct age for a person.
    Given the web service returns '29' when queried for the age of 'Ola Normann'
    When I submit a request for the age for 'Ola Normann'
    Then the result is '29' returned</pre></div></div>

<p>To get this working we have to add a step definition to mock the return. We do this with Mockito&#8217;s &#8220;when&#8221; statement.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">    @Given<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;the web service returns '(.*?)' when queried for the age of '(.*?)'&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> personServiceShouldReturn<span style="color: #009900;">&#40;</span><span style="color: #003399;">Integer</span> age, <span style="color: #003399;">String</span> name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        when<span style="color: #009900;">&#40;</span>sampleWsPortType.<span style="color: #006633;">getAge</span><span style="color: #009900;">&#40;</span>eq<span style="color: #009900;">&#40;</span>name<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">thenReturn</span><span style="color: #009900;">&#40;</span>age<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://open.bekk.no/2010/03/01/testing-external-services-using-mockito-in-cuke4duke/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Kan en nettbank være sosial?</title>
		<link>http://open.bekk.no/2010/02/10/kan-en-nettbank-v%c3%a6re-sosial/</link>
		<comments>http://open.bekk.no/2010/02/10/kan-en-nettbank-v%c3%a6re-sosial/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 12:00:59 +0000</pubDate>
		<dc:creator>Lars Kristian Flem</dc:creator>
				<category><![CDATA[BEKK]]></category>
		<category><![CDATA[FUNK]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[Virksomhet 2.0]]></category>
		<category><![CDATA[sosial programvare]]></category>

		<guid isPermaLink="false">http://open.bekk.no/?p=2427</guid>
		<description><![CDATA[Ofte kan den sosiale dimensjonen tilføre noe nytt og gjøre en tjeneste mer attraktiv å bruke. Hvordan tenker studenter rundt personlig økonomi og sosiale nettjenester?
Vi var i Trondheim i forrige uke, og besøkte studenter ved Institutt for Produktdesign på NTNU for å holde workshop i forbindelse med iD-uken 2010. Vi tenkte at &#8220;sosial nettbank&#8221; kunne [...]]]></description>
			<content:encoded><![CDATA[<p>Ofte kan den sosiale dimensjonen tilføre noe nytt og gjøre en tjeneste mer attraktiv å bruke. <strong>Hvordan tenker studenter rundt personlig økonomi og sosiale nettjenester?</strong></p>
<p>Vi var i Trondheim i forrige uke, og besøkte studenter ved Institutt for Produktdesign på NTNU for å holde workshop i forbindelse med iD-uken 2010. Vi tenkte at &#8220;sosial nettbank&#8221; kunne være et artig tankeeksperiment for en workshop når man møter 50 engasjerte produktdesignstudenter. <a title="Funk metodekort" href="http://open.bekk.no/2010/01/28/funk-metodekort/">Vi tok med oss kortstokken</a> og følgende tenkte case til Trondheim:</p>
<p><img class="alignnone size-full wp-image-2433" title="SosialBanken Beta" src="http://open.bekk.no/wp-content/uploads/2010/02/sosialbanken.png" alt="SosialBanken Beta" width="527" height="155" /></p>
<p><strong>Visjon og mål</strong></p>
<blockquote><p>Ved å dra nytte av mekanismer fra sosiale nettmedier, skal banken få økt konkurransefortrinn og bli markedsleder innen forvaltning av personlig økonomi i løpet av 1 år.</p>
<p><em> </em></p>
<p>Gjennom informasjon om egne, venners og andres transaksjoner skal våre kunder øke kunnskap om egen økonomi og eget forbruk</p></blockquote>
<p>Hårete mål og investeringsvilje med andre ord. Denne banken skulle være annerledes.</p>
<p>Vi benyttet metodekortstokken som utgangspunkt for aktivitetene. Målet var å skape flest mulig uvanlige koblinger i en idéfase, og til slutt presentere konsept og funksjonalitet som en papirprototype.</p>
<p><img class="alignnone size-full wp-image-2452" title="Funk metodekort" src="http://open.bekk.no/wp-content/uploads/2010/02/metodekortene.png" alt="Funk metodekort" width="700" height="456" /></p>
<p>Studentene fikk presentert caset rett før de gikk over i en kreativ idéfase. For å tvinge frem konkrete forslag til funksjonalitet, ble studentene fasilitert med strenge tidsrammer. Gjennom assosiasjonslek og idéspinning i korte, intense intervaller, kom studentene opp med flere ti-talls idéer i hver gruppe. Deretter fikk de i oppgave å prioritere konseptene de kom frem til opp mot Sosialbankens mål og visjon.</p>
<p><img class="alignnone size-full wp-image-2437" title="idemyldring" src="http://open.bekk.no/wp-content/uploads/2010/02/idemyldring.png" alt="idemyldring" width="700" height="466" /></p>
<p>Papirprototypen skulle kommunisere konseptet og ved å spille ut sekvenser av funksjonene med papirskisser, skulle studentene demonstrere hvordan oppgaveflyten kunne fungere.</p>
<p><img class="alignnone size-full wp-image-2445" title="papirprototyper" src="http://open.bekk.no/wp-content/uploads/2010/02/papirprototyper.png" alt="papirprototyper" width="700" height="393" /></p>
<p><strong>Vi tror nettbanker har mye å hente på sosiale mekanismer.</strong> Det studentene viste oss, var ikke bare hvordan nettbanken kan integreres med eksisterende sosial programvare, som Facebook, men også hvordan <strong>nettverkseffekter kan gi grupper av venner gunstigere renter eller mindre gebyrer</strong> jo flere de blir. De mente det også ville gi banken flere, nye kunder raskt.</p>
<p>De viste oss hvor &#8220;stress&#8221; det kan være å dele utgifter: Hvorfor kan jeg ikke bare sende korttransaksjonen min til de vennene som var med på taxituren, la banken regne ut hva det blir på hver, også kan de trykke OK? &#8220;Jeg kan legge til venner i nettbanken og <strong>de kan forhåndsgodkjenne at jeg får lov til å sende dem krav</strong> på et sånt utlegg.&#8221;</p>
<p>Eller <strong>hva med en kalenderoppføring som krever at du har gjort innbetalingen for å kunne være med</strong>? Som forteller deg om innbetalingen er registrert i stedet for at du må skanne gjennom listen med alle transaksjonene dine?</p>
<p>Studentene foreslo &#8220;kollektiv økonomi&#8221; og &#8220;privat økonomi&#8221; i nettbanken, som hjelp til å holde oversikt over om du skylder eller fordrer penger til vennene i nettverket ditt. Det hadde vært genialt for <strong>bokollektiv som deler utgifter</strong> uten å ha felles økonomi.</p>
<p>De skisset på kollektive spareplaner til sommerens reise, hvor progresjonsbarer forteller hvem av vennene som har spart mest, og hvor mye de totalt sparer av hva de trenger. <strong>De blir motivert av å spare når de ser hva vennene sparer</strong>.</p>
<p>Dette er løsninger på behov studentene har i sin hverdag, og skissene deres støtter opp under hvordan de er vant med å løse oppgaver på nett. Det er lekent og fornuftig for kunder i deres målgruppe, og de argumenterte for klare konkurransefortrinn for banker som er villige til å <strong>tenke nytt rundt forvaltning av sosiale mikroøkonomier</strong>. En bank må ivareta personvern og transaksjonssikkerhet, men studentene ble oppfordret til å ikke la seg begrense av det i denne runden. En tilsvarende sesjon kunne vært brukt til å utforske den dimensjonen.</p>
<p><strong>Hva syntes de om teknikkene? </strong>Tilbakemeldingene vi fikk etter øvelsene var at de kreative øvelsene var engasjerende, samtidig som tidsstyringen hjalp gruppene å holde fokus. De så anvendelsen som relevant i egne studier. Vi håper studentene kan evaluere enda flere av metodekortene og har sendt kortstokk oppover så de kan teste og gjøre seg flere erfaringer. Workshopen var nyttig for oss for å få innspill til metodene vi bruker – det er noe vi kan tenke oss å gjøre mer.</p>
<p><strong>Ta kontakt med oss</strong> om du ønsker å høre eller se mer fra workshopen. Vi snakker gjerne med deg om hvordan disse tankene eller øvelsene kan passe med dine behov. I løpet av kort tid kan idéer bli til noe konkret som kan demonstreres for beslutningstakere, videreutvikles, testes på brukere eller skape grunnlag for videre idéutvikling.</p>
<p><em>Helle har erfaring med å designe brukervennlige løsninger for flere av BEKK’s kunder og holder engasjerende workshops. Lars K. er som tidligere bankmann over middels opptatt av nettbanker. Han jakter på oppgavefokus og løsninger som setter brukeren i sentrum.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://open.bekk.no/2010/02/10/kan-en-nettbank-v%c3%a6re-sosial/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Cross Site Scripting i flash</title>
		<link>http://open.bekk.no/2010/02/09/cross-site-scripting-i-flash/</link>
		<comments>http://open.bekk.no/2010/02/09/cross-site-scripting-i-flash/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 13:49:01 +0000</pubDate>
		<dc:creator>Erlend Oftedal</dc:creator>
				<category><![CDATA[BEKK]]></category>
		<category><![CDATA[Sikkerhet]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://open.bekk.no/?p=2416</guid>
		<description><![CDATA[Det har vært en del skriverier om sikkerhetsfeil i flash filer i det siste, f.eks. &#8220;Serious web vuln found in 8 million Flash files&#8221; og &#8220;XSS vulnerabilities in 34 millions flash files&#8221;. Det viser seg at dette ikke er et nytt problem, men snarere ett man ikke har fokusert på tidligere. Og her snakker vi [...]]]></description>
			<content:encoded><![CDATA[<p>Det har vært en del skriverier om sikkerhetsfeil i flash filer i det siste, f.eks. <a href="http://www.theregister.co.uk/2009/12/22/mass_flash_file_vulnerability/">&#8220;Serious web vuln found in 8 million Flash files&#8221;</a> og <a href="http://seclists.org/fulldisclosure/2010/Jan/178">&#8220;XSS vulnerabilities in 34 millions flash files&#8221;</a>. Det viser seg at dette ikke er et nytt problem, men snarere ett man ikke har fokusert på tidligere. Og her snakker vi da om feil i selve filene, ikke sikkerhetshull i selve flash-avspilleren.</p>
<p><strong>XSS i flash?</strong><br />
Problemene oppstår stort sett fordi flash-filmen tar inn parametere fra HTML/javascript. Disse parametrene brukes deretter uten å valideres først. Det kanskje vanligste eksempelet er at man ønsker å gjøre det enkelt å endre hvor brukeren skal sendes til når brukeren klikker på flashen. Dette kalles gjerne clickTag, og koden i selve flashen kan se slik ut:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">on <span style="color: #009900;">&#40;</span>release<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   getURL <span style="color: #009900;">&#40;</span>_root.<span style="color: #660066;">clickTAG</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;_blank&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Problemet med dette oppstår fordi man kan linke direkte til flash-filen og gi inn parametere som url-parametere slik:</p>
<pre>http://url/til/flash-fil.swf?clickTAG=http://her/skal/brukeren</pre>
<p>I et angrep, kan dette utnyttes slik:</p>
<pre>http://url/til/flash-fil.swf?clickTAG=javascript:alert("xss")</pre>
<p>Man kan altså spesifisere en &#8220;javascript:&#8221; url, og dermed vil javascriptet kjøres nå brukeren trykker på linken.</p>
<p>Denne URLen kan så spres til potensielle offer via f.eks. falske eposter, twitter eller instant messaging. Siden URLen peker på et domene man stoler på, er det større sjanse for at offeret klikker på linken, men det vil selvsagt også avhenge av både av innholdet i flash og epost/melding.</p>
<p><strong>Hva kan jeg gjøre?</strong><br />
For å hindre denne typen angrep, bør man gjøre inputvalidering på de data man tar inn. En første idé er kanskje at man skal sjekke at URLen ikke starter med &#8220;javascript:&#8221;, men denne formen for blacklisting har flere problemer. For det første kan det skrives på mange måter (javascript, JAVASCRIPT, jaVaScriPT), og i tillegg kan man f.eks. ha mellomrom først (&#8221; javascript:&#8221;). Videre kan man også ha f.eks. <a href="http://en.wikipedia.org/wiki/Data_URI_scheme">data URLer</a> og Flash sin egen <a href="http://www.adobe.com/support/flash/action_scripts/actionscript_dictionary/actionscript_dictionary073.html">&#8220;asfunction:&#8221;</a>.<br />
Det er derfor bedre å bruke whitelisting, og heller si hva man tillater URLene å starte med. På <a href="http://www.adobe.com/resources/richmedia/tracking/designers_guide/">Adobes &#8220;Designer&#8217;s Guide: Building Macromedia Flash Banners with Tracking Capabilities&#8221;</a> foreslås følgende kode:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">on <span style="color: #009900;">&#40;</span>release<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>_root.<span style="color: #660066;">clickTAG</span>.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;http:&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      getURL<span style="color: #009900;">&#40;</span>_root.<span style="color: #660066;">clickTAG</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;_blank&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Denne tillater kun URLer som begynner med &#8220;http:&#8221;. Man kan utvide denne til å støtte flere typer, f.eks. slik:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">on <span style="color: #009900;">&#40;</span>release<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>_root.<span style="color: #660066;">clickTAG</span>.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;http:&quot;</span> <span style="color: #339933;">||</span> _root.<span style="color: #660066;">clickTAG</span>.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">6</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;https:&quot;</span> <span style="color: #339933;">||</span> _root.<span style="color: #660066;">clickTAG</span>.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;/&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      getURL <span style="color: #009900;">&#40;</span>_root.<span style="color: #660066;">clickTAG</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;_blank&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Denne støtter både http, https og server-relative URLer (må begynne med slash). I de fleste tilfeller bør man gjøre dette enda strengere, ved å kun tillate URLer som peker på eget domene.</p>
<p><strong>Jeg vil lære mer</strong></p>
<ul>
<li><a href="http://www.adobe.com/devnet/flashplayer/articles/secure_swf_apps.html">Adobes guide &#8211; creating secure flash apps</a></li>
<li><a href="http://www.ivizsecurity.com/blog/web-application-security/testing-flash-applications-pen-tester-guide/">A Lazy Pen Tester’s Guide to Testing Flash Applications</a></li>
<li><a href="http://www.owasp.org/index.php/Category:OWASP_Flash_Security_Project">OWASP Flash Security Project</a></li>
<li><a href="http://link.brightcove.com/services/player/bcpid53904843001?bclid=26650927001&amp;bctid=26749138001">Video av &#8220;Blinded by flash&#8221;</a> (<a href="http://www.blackhat.com/presentations/bh-dc-09/Jagdale/BlackHat-DC-09-Jagdale-Blinded-by-Flash.pdf">slides</a>) &#8211; Prajakta Jagdale &#8211; Blackhat DC 2009</li>
<li><a href="http://www.blackhat.com/presentations/bh-dc-10/Bailey_Mike/BlackHat-DC-2010-Bailey-Neat-New-Ridiculous-flash-hacks-slides.pdf">Neat, New, and Ridiculous Flash Hacks</a> &#8211; Mike Bailey &#8211; Blackhat DC 2010</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://open.bekk.no/2010/02/09/cross-site-scripting-i-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
