<?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>Sterk blanding &#187; Thomas Kjeldahl Nilsson</title>
	<atom:link href="http://sterkblanding.no/blog/author/thomanil/feed/" rel="self" type="application/rss+xml" />
	<link>http://sterkblanding.no</link>
	<description>– Sterke meninger om IT og ledelse</description>
	<lastBuildDate>Wed, 11 Jan 2012 10:00:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Hvordan lage minesveiper i JavaScript på under 14 minutter</title>
		<link>http://sterkblanding.no/blog/2011/03/25/hvordan-lage-minesveiper-i-javascript-pa-under-14-minutter/</link>
		<comments>http://sterkblanding.no/blog/2011/03/25/hvordan-lage-minesveiper-i-javascript-pa-under-14-minutter/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 09:48:08 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=1139</guid>
		<description><![CDATA[Denne øvelsen ble opprinnelig utført foran publikum på Go Open / Communities in Action eventet i mars 2011. En code kata er en enkel øvelse for å skjerpe programmeringsferdighetene dine. Det vil si &#8211; du trener bare problemløsning den første gangen du utfører øvelsen. Så gjentar du øvelsen, om og om igjen, til det sitter i [...]]]></description>
			<content:encoded><![CDATA[<p><em>Denne øvelsen ble opprinnelig utført foran publikum på Go Open / Communities in Action eventet i mars 2011.</em></p>
<p>En <a title="Code Kata" href="http://codekata.pragprog.com/">code kata</a> er en enkel øvelse for å skjerpe programmeringsferdighetene dine. Det vil si &#8211; du trener bare problemløsning den første gangen du utfører øvelsen. Så gjentar du øvelsen, om og om igjen, til det sitter i fingerspissene. Og hver gang prøver du å gjøre det litt kjappere. Hensikten er å trene hastighet, teknikk og verktøy.</p>
<p>I klippet under lager jeg en variant av <a title="Minesweeper code kata" href="http://codingdojo.org/cgi-bin/wiki.pl?KataMinesweeper">Minesweeper</a> kataen i JavaScript.</p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="640" height="480"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=21474244&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=21474244&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="480"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p>(Kjør den i fullscreen for å se koden mer tydelig)</p>
<p>Merk: Jeg bruker testdrevet utvikling gjennom det meste av prosessen. På slutten dropper jeg TDD når jeg gjør det visuelle og selve spillmekanikken. Dette kunne også testes fra kode, men jeg droppet det for å gjøre den mer artig å se på. <img src='http://sterkblanding.no/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Du kan <a title="Minesveiper kata kode" href="https://github.com/thomanil/sweeper">se på koden i github-kontoen min</a>. Hver commit er en separat gjennomkjøring av øvelsen fra scratch.</p>
<p>Jeg brukte følgende libraries og verktøy:</p>
<ul>
<li><a title="Underscore.js library" href="http://documentcloud.github.com/underscore/">Underscore.js</a></li>
<li><a title="jQuery framework" href="http://jquery.com/">jQuery</a></li>
<li><a title="Grid.js library" href="https://github.com/thomanil/Grid">Grid.js</a></li>
<li><a title="clAutotest tool" href="https://github.com/thomanil/clAutotest">clAutotest</a></li>
<li><a href="http://macromates.com/">TextMate</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2011/03/25/hvordan-lage-minesveiper-i-javascript-pa-under-14-minutter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hvordan komme i gang med blogging  (del II)</title>
		<link>http://sterkblanding.no/blog/2011/01/04/hvordan-komme-i-gang-med-blogging-del-ii/</link>
		<comments>http://sterkblanding.no/blog/2011/01/04/hvordan-komme-i-gang-med-blogging-del-ii/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 19:25:09 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Kompetanse]]></category>
		<category><![CDATA[Presentasjonsteknikk]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=1015</guid>
		<description><![CDATA[Nytt år, nye muligheter. Kanskje du skal skrive litt i 2011? I fjor skrev Johannes en artikkel med råd om blogging. Her er flere skrivetips: &#8220;Obvious to you. Amazing to others.&#8221; Du har garantert noe nyttig å dele. De fleste av oss er spesialiserte i ulike fagområder og ferdigheter. Ting som virker trivielle eller åpenbare for [...]]]></description>
			<content:encoded><![CDATA[<p>Nytt år, nye muligheter. Kanskje du skal skrive litt i 2011? I fjor skrev Johannes en <a href="http://sterkblanding.no/blog/2010/02/16/hvordan-komme-i-gang-med-blogging/">artikkel med råd om blogging</a>. Her er flere skrivetips:</p>
<p><span id="more-1015"></span></p>
<h1>&#8220;Obvious to you. Amazing to others.&#8221;</h1>
<p>Du har garantert noe nyttig å dele. De fleste av oss er spesialiserte i ulike fagområder og ferdigheter. Ting som virker trivielle eller åpenbare for deg kan være kjempenyttig for andre. Så tenk deg om: <a href="http://sivers.org/obvious">sitter du på noe som virker &#8220;for åpenbart&#8221; til å dele med andre</a>?</p>
<h1>Ide-skuffen</h1>
<p>Det er vanskelig å både finne en ide <strong>og</strong> skrive ferdig en god blogpost på en og samme kveld. Det er derfor lurt å samle og bearbeide ideer over tid.</p>
<p>Kjøp en notatblokk. Ta den med deg overalt. Hver gang du får en ide eller innsikt som muligens flere har nytte av, så skriver du den ned, kanskje med et par setninger. Snart har du en haug ideer og tanker som du kan skrive om.</p>
<p>Slik gjør jeg det: på laptopen min ligger en mappe som jeg kaller &#8220;ide-skuffen&#8221;. Til enhver tid ligger det 10-20 filer der med ulike ideer. Jeg skriver litt i dem når jeg kommer på nye poenger. Når en tekstene har nok kjøtt på beina så lager jeg bare en renskrevet blogpost av den.</p>
<h1>Lang eller kort tekst?</h1>
<p>En blogpost er ikke en skolestil. Det er ingen formelle krav om lengde eller struktur, så ikke stress over det: bare få ut stoffet ditt på en form som noenlunde lesbar. Finn en stil som er komfortabel for deg.</p>
<p>Her er to vidt forskjellige eksempler: <a href="http://sethgodin.typepad.com/">Seth Godin</a> og <a href="http://steve-yegge.blogspot.com/">Steve Yegge</a>. De har svært ulik form: Godin skriver noe hver eneste dag, ofte bare en paragraf eller to. Yegge derimot publiserer sjelden nye artikler, til gjengjeld skriver han da <a href="http://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html">laaange tekster.</a></p>
<h1>Still krav til deg selv</h1>
<p>Det er lettere å få ting gjort når man har milepæler. Hvis man bare &#8220;venter på inspirasjonen&#8221; så koker det fort vekk i kålen. Jeg synes det er enklere å produsere ting når jeg har faste frister; jeg forsøker å ferdigstille en tekst hver kalender-måned (til enten <a href="http://sterkblanding.no">sterkblanding.no</a> eller min personlige blogg).</p>
<h1>Skriveteknikk</h1>
<p>De fleste av oss kan bli flinkere i grunnleggende skriveteknikk. Noen enkle grep gjør ikke bare blogging, men <strong>alt</strong> du skriver mer lesbart. Eksempler:</p>
<ul>
<li>Det er lettere å lese tekst brutt opp i paragrafer &#8211; unngå &#8220;wall of text&#8221;.</li>
<li>Skriv aktivt og stramt. <em>&#8220;Jeg grep pennen&#8221; </em>er mer lesbart enn <em>&#8220;pennen ble etterhvert hurtig grepet av meg&#8221;</em>.</li>
<li>Bruk enkelt, effektivt språk. <em>&#8220;Utføre&#8221;</em> er mer lesbart enn <em>&#8220;operasjonalisere&#8221;</em>.</li>
</ul>
<p>En bok jeg liker godt er <a href="http://en.wikipedia.org/wiki/The_Elements_of_Style">&#8220;The Elements of Style&#8221;</a> av Strunk &amp; White. Den er snart hundre år gammel men inneholder eviggrønne råd om skriveteknikk. Og den er selvfølgelig lettlest!</p>
<h1>Tenk om noen er uenige med meg?</h1>
<p>Hvis du er så heldig å få kommentarer der folk er uenige med deg så er det et tegn på at du gjør noe riktig: da skriver du iallfall engasjerende! Forsøk å få folk til å tenke &#8220;Ja!&#8221; eller &#8220;Nei!&#8221;&#8230; ikke et svakt &#8220;Tja&#8221;. <img src='http://sterkblanding.no/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><em>Nå, hva venter du på? Skriv! </em></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2011/01/04/hvordan-komme-i-gang-med-blogging-del-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Frihet til å lære: egenopplæring for systemutviklere</title>
		<link>http://sterkblanding.no/blog/2010/10/31/frihet-til-a-l%c3%a6re-egenoppl%c3%a6ring-for-systemutviklere/</link>
		<comments>http://sterkblanding.no/blog/2010/10/31/frihet-til-a-l%c3%a6re-egenoppl%c3%a6ring-for-systemutviklere/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 21:14:21 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Kompetanse]]></category>
		<category><![CDATA[Kursing]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[kompetanse]]></category>
		<category><![CDATA[kunnskapsmedarbeider]]></category>
		<category><![CDATA[læring]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=955</guid>
		<description><![CDATA[For noen dager siden besøkte jeg Dagen@IFI på UiO, hvor jeg promoterte Steria for informatikk-studenter. En student fortalte om en bekymring han hadde: &#8220;Dersom jeg velger feil kurs på skolen &#8211; låser jeg meg da til feil karriere?&#8221; Han ble lettet da jeg forsikret ham om at det ikke var tilfelle. For heldigvis er arbeidslivet [...]]]></description>
			<content:encoded><![CDATA[<p>For noen dager siden besøkte jeg <a href="http://dagen.at.ifi.uio.no/">Dagen@IFI</a> på UiO, hvor jeg promoterte Steria for informatikk-studenter. En student fortalte om en bekymring han hadde: <em>&#8220;Dersom jeg velger feil kurs på skolen &#8211; låser jeg meg da til feil karriere?&#8221;</em> Han ble lettet da jeg forsikret ham om at det ikke var tilfelle. For heldigvis er arbeidslivet det man selv gjør det til: du kan utvikle deg selv og skifte retning underveis.</p>
<p>Systemutviklere er både heldige og uheldige. Vi kan tilegne oss kunnskap og ferdigheter helt på eget initiativ, men vi tvinges også til å gjøre det for å holde oss relevante, ettersom teknologi endrer seg raskt.</p>
<p>Selv synes jeg at det er topp å plukke opp nye ting &#8211; her er noen metoder for å lære&#8230;</p>
<p><span id="more-955"></span></p>
<h1>Bredde eller dybde?</h1>
<p><strong>Tenk på kunnskap som personøkonomi.</strong> Ikke invester alt i en aksje <em>(&#8220;Jeg kan bare Java!&#8221;)</em>. Spre eggene dine over flere kurver. For all del: legg ned tid i mainstream-teknologi som er populær idag. C# og Java f.eks er lavrisiko med grei avkastning. Men se også på nisje-teknologi (la oss si F# eller Scala, for eksempel) Disse er mer høyrisiko fordi det absolutt ikke er sikkert de blir populære i fremtiden. Smale temaer gir til gjengjeld langt høyere avkastning <em>hvis</em> de slår an: du får et fortrinn fordi du var tidlig ute.</p>
<p><strong>Balanse mellom generelle og spesialiserte emner.</strong> Brede, eviggrønne felt (f.eks OO-design, regular expressions, statistikk) hjelper deg i mange år, uavhengig av domener og platformer. Men ikke overse domenekunnskap og platformspesifikke verktøy (Oracle og Microsoft) som gjør deg mer ettertraktet i prosjekter her og nå.</p>
<p><strong>Kultiver personlige styrker.</strong> Hvis du bare kan “litt om alt” så er det vanskelig å utmerke seg. Finn en eller to ting som er dine hovedpillarer, som du stadig forbedrer og behersker bedre enn andre.  Hva gjør at du skiller deg ut? Hva er ditt <em>&#8220;Unique Selling Point&#8221;</em>?</p>
<h1>Studieteknikk-kungfu</h1>
<p><strong>Du har et enormt arsenal av studieteknikker.</strong> Min erfaring: jeg lærer meg ting langt mer effektivt nå enn da jeg var i skoleverket eller på universitetet. Dels fordi jeg har blitt flinkere til å lære, men mest fordi vi har fått flere måter å tilegne oss kunnskap. Her er en liten godtepose av muligheter:</p>
<ul>
<li><a href="http://see.stanford.edu/">Universiteter</a> <a href="http://ocw.mit.edu/index.htm">verden</a> <a href="http://www.ocwconsortium.org/">over</a> legger ut åpen “courseware”: videoforelesninger, notater, pensum, oppgaver, fritt tilgjengelig på nett.</li>
<li><a href="http://peepcode.com/">Screencasts</a> er en fin blanding av foredrag og praktiske demonstrasjoner. Noen av dem må du betale for. De er derfor ofte <em>optimalisert</em> for å levere lærdom og verdi, mer enn en umotivert foreleser på Blindern noengang blir&#8230;</li>
<li><em>“So You&#8217;d Like To&#8230;”</em>-guidene hos Amazon.com er i noen tilfeller knallbra utvalg av faglitteratur og fungerer bra som utgangspunkt for selvstudium.</li>
<li>Online nyhetsblogger og foredrag fra konferanser gjør deg oppdatert på tilstanden i fagfeltet ditt.</li>
<li>Podcasts og lydbøker gjør iPoden din til en forelesningssal &#8211; kanskje mens du tar oppvasken?</li>
<li>Møt andre engasjerte i meetups, brukergrupper, code camps og online studiegrupper. Få feedback fra likesinnede, ikke gjem deg bort!</li>
<li>Open source lar deg kikke bak kulissene og se hvordan andre utviklere jobber og tenker.</li>
<li>Mindmapping er en sterk måte å ta gode, raske notater mens du studerer.</li>
</ul>
<p>Og dette var bare en tilfeldig utvalg. Med andre ord: dersom du begrenser deg til å kun lese en papirbok i ny og ne så handicapper du deg selv. <em>Du har mange muligheter!</em></p>
<p><strong>Absorber som en svamp.</strong> Hvis jeg har en ekstrem &#8220;læredag&#8221; så hører jeg på en podcast når jeg går til stasjonen på morran, leser litt i en relatert bok mens jeg sitter på toget, plugger inn iPoden igjen når jeg bytter over til tbanen til jobben, samme opplegg på veien hjem på ettermiddagen, og setter meg ned og koder en prototyp etter at ungene har lagt seg. Teknikkene nevnt i forrige avsnitt gjør det stadig enklere å presse inn læring flere steder i hverdagen enn man kunne før.</p>
<p><strong>Jevn progresjon</strong>. Store skippertak <em>kan</em> fungere, men det er i lengden bedre å lære litt hver dag istedet. Når man er student så fungerer sånne &#8220;overdoser&#8221; til en viss grad, men det blir vanskeligere når du har jobb og familie. Tenk bærekraftig tempo&#8230;</p>
<h1>Bruk det du lærer</h1>
<p><strong>Jobb med relevante prosjekter i arbeidstida.</strong> Dette er idealsituasjonen, men lar seg ikke alltid gjøre. Prosjekter krever vanligvis at vi leverer det vi allerede behersker, ikke det vi ønsker å lære mer om. Derfor kan det bli nødvendig å&#8230;</p>
<p><strong>Lage ting på fritida.</strong> Bruk det du har lært til å gjøre sideprosjekter på egenhånd. Ambisjon og omfang trenger ikke være all verden, bare du lager noe konkret og nyttig. Du kan lage et verktøy eller en tjeneste som bare du selv trenger, eller slippe det som open source eller en kommersiell tjeneste for hele verden. Poenget er at du anvender kunnskapen til noe konstruktivt. Det kan være slitsomt å bruke fritida til dette &#8211; til gjengjeld eier du selv det du lager. Og du får en &#8220;portfolio&#8221; å vise til.</p>
<p><strong>Lær det bort til andre!</strong> Når du formidler til andre (f.eks via kurs, blogging, foredrag) så tvinges du selv til å få bedre grep på stoffet ditt.  Du trenger ikke være guru for å lære bort ting &#8211; det holder at du har noenlunde grep om temaet og evner å formidle det godt.</p>
<p><em>Robert &#8220;Uncle Bob&#8221; Martin sa på et av foredragene sine at en profesjonell utvikler må bruke tjue timer hver uke på å forbedre seg som håndtverker. Dette er kanskje ekstremt &#8211; men hvor mye gjør du selv? Og hvordan lærer du nye ting? Del gjerne av egen erfaring i kommentarene under!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/10/31/frihet-til-a-l%c3%a6re-egenoppl%c3%a6ring-for-systemutviklere/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Interaktiv programmering: utforsking, læring og produktivitet</title>
		<link>http://sterkblanding.no/blog/2010/09/09/interaktiv-programmering-utforsking-l%c3%a6ring-og-produktivitet/</link>
		<comments>http://sterkblanding.no/blog/2010/09/09/interaktiv-programmering-utforsking-l%c3%a6ring-og-produktivitet/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 08:42:01 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=781</guid>
		<description><![CDATA[Dette er blog-versjonen av et foredrag som jeg holdt på JavaZone 2010. Jeg har fått dilla på dynamiske programmeringsspråk (JavaScript, Ruby, Lisp, med flere) i det siste. Et av fellestrekkene ved slike språk er at de lar deg programmere interaktivt. Vet du ikke hva interaktiv programmering er? Flott, da har du kommet til riktig artikkel! [...]]]></description>
			<content:encoded><![CDATA[<p><em>Dette er blog-versjonen av et foredrag som jeg holdt på JavaZone 2010.</em></p>
<p>Jeg har fått dilla på dynamiske programmeringsspråk (JavaScript, Ruby, Lisp, med flere) i det siste. Et av fellestrekkene ved slike språk er at de lar deg programmere interaktivt. Vet du ikke hva interaktiv programmering er? Flott, da har du kommet til riktig artikkel!</p>
<p><span id="more-781"></span></p>
<p>Ideen bak er ganske enkel, men jeg tror det er enklere å vise hva det er først, istedet for å skrive masse forklarende tekst. Her er et eksempel, demonstrert med IRB (Interactive Ruby):</p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="600" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=14709877&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=14709877&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="400"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p>Hva skjer her?</p>
<p>Vel, jeg skriver ekstremt grunnleggende Ruby-kode. Men se hva som skjer underveis. Hver Ruby-setning jeg skriver inn blir evaluert og kjørt av systemet. Resultatet spyttes tilbake på kommandolinja. Systemet husker hva jeg gjør. Jeg definerer variabler og funksjoner. Jeg kan bruke og bygge videre på dem, og jeg får umiddelbar feedback på alt jeg gjør. Og jeg slipper å kompilere eller restarte koden min hver gang jeg prøver noe nytt.</p>
<p>Den vanlige prosessen vår for systemutvikling er som et stålverk. Vi lager en støpeform (skriver kode i en IDE). Så støper vi en klump stål (kompilering/restart). Dersom stålklumpen ikke har riktig form, så er det tilbake til tegnebordet for å justere støpeformen. Denne feedback-løkka er mye raskere enn før takket være raskere kompilering, bedre maskiner og enhetstesting &#8211; men vi kaster likevel bort en del tid når vi løper frem og tilbake på denne måten.</p>
<p>Interaktiv programmering derimot er mer som å jobbe med leire. Vi arbeider med samme stykke materiale kontinuerlig. Vi klatter på litt kode, ser hvordan det ser ut. Tar vekk ting, bytter ut, former, eksperimenterer.</p>
<p>Dette er ikke en erstatning for hvordan vi vanligvis arbeider, men mer et nyttig tilbehør. Du bygger ikke en produksjonsbil med leire, men det er mye lettere å lage f.eks en design-prototype med leire enn med stål. På samme måte kan interaktiv programmering være et bra hjelpemiddel og supplement for seriøs systemutvikling.</p>
<p>Helt konkret: hvorfor er interaktiv programmering nyttig?</p>
<ul>
<li><strong>Du arbeider raskere</strong>, fordi feedback-løkka er kortere.</li>
<li><strong>Du slipper unna med mindre kode</strong>, fordi du bruker mindre tid på å bygge infrastruktur og &#8220;boilerplate&#8221;.</li>
</ul>
<p>Mer komplisert er det ikke. Jeg mistenker imidlertid at det ene bruksområdet ovenfor ikke overbeviser helt. Jeg skal derfor vise flere eksempler, og du kan tenke over hvordan disse teknikkene passer inn i din egen verktøykasse.</p>
<p>Jeg bruker jevnlig interaktiv programmering til følgende:</p>
<ul>
<li>Utforsking og læring</li>
<li>Grensesnitt mot backend-system</li>
<li>Frontend-utvikling og prototyping</li>
</ul>
<p>Utforsking og læring har vi allerede sett via IRB-klippet over. Neste eksempel er et interaktiv programmering som grensesnitt mot et kjørende system &#8211; i dette tilfellet en Ruby on Rails-applikasjon.</p>
<p>I filmklippet som følger lenger ned starter jeg et interaktivt konsoll på en lokal testserver. Der har jeg tilgang til det samme api&#8217;et, databasekoblinger etc som forretningslogikken i backenden av systemet mitt. Dette lar meg gå inn i en kjørende applikasjon og prøve ut nye ting, trekke ut informasjon eller gjøre små oppdateringer -<strong> mens systemet fremdeles kjører.</strong></p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="600" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=14709904&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=14709904&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="400"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p>Man kan bruke dette konsollet til system-administrasjon i et produksjonssystem: istedet for å bygge tidkrevende web-admin-funksjonalitet i systemet ditt, så kan du la døra stå åpen for å ta de mer sjeldne oppgavene direkte i det interaktive konsollet. Bygg eventuelt web-UI for manglende ting dersom du ender med å gjøre samme oppgave om og om igjen på kommandolinja.</p>
<p>Dette shellet kan også brukes under utviklingsløpet for å se &#8220;hvordan ting arter seg&#8221; før man velger å forfølge noen bestemt løsningsretning med unit-tester, web-grensesnitt osv osv.</p>
<p>La oss flytte oss opp til frontend-utvikling. Når vi utvikler web-grensesnitt så har vi et annet interaktivt miljø vi kan bruke: Firebug-konsollet. Her er en liten demonstrasjon.</p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="600" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=14711715&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=14711715&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="400"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p>Dette var et veldig enkelt eksempel. Jeg bruker imidlertid samme teknikker når jeg jobber med mer komplekse webapplikasjoner: da bruker jeg hyppig konsollet for å prøve ut ting &#8220;live&#8221;.  Metodikker som f.eks testdrevet utvikling er flott for backend-utvikling, men i visuell/frontend-utvikling er det ofte vanskelig å lage programmatiske tester siden man ikke helt vet hvordan ting kommer til å se ut og oppføre seg i nettleseren. Kanskje vet du ikke engang helt &#8220;hva du leter etter&#8221; på forhånd? Da er det fint å kunne prøve seg fram litt før man skriver for mye kode.</p>
<p>Nå vet jeg hva du tenker. &#8220;Men Thomas, jeg har ikke lyst å sitte og skrive kode rett inn i disse kommandolinje-greiene. Jeg liker editoren min mye bedre!&#8221; Jeg forstår den innvendingen. Du kan eventuelt skrive koden i editoren og manuelt lime den inn på kommandolinja, men det er blir fort litt knotete. Vi har mer lyst til å arbeide i en skikkelig IDE, og sende kode derfra til det interaktive miljøet.  Vi skal se på et eksempel på slik arbeidsflyt i et språk som heter Clojure.</p>
<p>Clojure er et ungt, lovende programmeringsspråk. Det er bare noen år gammelt, men er bygget på moden teknologi. Clojure er implementert i Java, snakker pent med Java-biblioteker, og basert på LISP (en over 50 år gammel dialekt av programmeringsspråk). Det vi hittil har kalt &#8220;interaktive konsoller&#8221; blir ofte kalt Read-Eval-Print-Loops (REPL). Dette utrykket kommer opprinnelig fra LISP, som har hatt slike verktøy (og kultur for å bruke dem aktivt) i mange år.</p>
<p>La oss se på et eksempel i Clojure. Jeg holder meg i editoren min, og sender funksjoner og kommandoer til REPL-prosessen rett fra editoren min. I dette tilfellet bruker jeg dette til å jobbe smidig med 3d-grafikk (jeg er veldig uerfaren på dette området, og trenger derfor umiddelbar feedback på alt jeg gjør).  Klippet under starter med å demonstrere helt grunnleggende ting, så tar vi steget opp til grafikk-arbeid. Mot slutten implementerer jeg rendering av et veldig enkelt  Tetris-spill.</p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="600" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=14709925&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=14709925&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="400"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p><strong>Hva har vi sett så langt?</strong></p>
<p>Interaktiv programmering gir deg rask feedback. Det lar deg jobbe hurtigere, skrive mindre kode, lære og utforske, snakke direkte med kjørende systemer, og gjøre effektiv prototyping og visuell utvikling.</p>
<p>Nå tenker du kanskje: &#8220;jeg arbeider med Java til daglig, hvordan kan jeg bruke disse greiene til noe nyttig?&#8221; Vel, alle disse teknikkene kan brukes sammen med Java-kode.  Ruby kan kjøres på Java: JRuby er en moden platform som snakker pent sammen med Java-komponenter. JavaScript likeså: du kan enkelt kjøre JavaScript på serversiden som et interaktivt skall rundt applikasjonen din. Clojure er allerede bygd i, og beregnet for bruk sammen med, vanlig Java (3D-eksemplet ovenfor bruker allerede et Java-API for OpenGL-grafikk).</p>
<p>Det er derfor ikke mye som skal til for å få slike interaktive skall rundt din egen applikasjon. Kan du lukte mulighetene her?</p>
<p>Til slutt vil jeg gjerne at du tar en kikk på filmklippene under. De er eksempler på s.k. Livecoding, en aktivitet som ligger i skjæringspunktet mellom programmering og performance-kunst. Det som skjer i klippene under er at utvikleren koder opp improviserte algoritmer for lyd og musikk live foran publikum. Kanskje ikke nyttig umiddelbart nyttig for deg og meg, men det er et interessant eksempel på interaktiv programmering tatt til sin ytterste konsekvens.</p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="600" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2433947&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=2433947&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="400"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<p><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="600" height="400"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2502546&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=2502546&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="400"></embed></object><p><!-- End of Artiss Code Embed code -->
</p>
<h2>Referanser:</h2>
<p><a href="http://en.wikipedia.org/wiki/Read-eval-print_loop">A list of REPL environments</a></p>
<p><a href="http://tagaholic.me/2009/05/11/demystifying-irb-commands.html">Demystifying IRB commands (interactive Ruby)</a></p>
<p><a href="http://slash7.com/2006/12/21/secrets-of-the-rails-console-ninjas/">Secrets of the Rails Console Ninjas</a></p>
<p><a href="http://getfirebug.com/wiki/index.php/Console_Panel">The Firebug Console Panel</a></p>
<p><a href="http://clojure.org/getting_started">Clojure.org: &#8216;Getting started&#8217;</a></p>
<p><a href="http://technomancy.us/126">in which are found tricks of the trade concerning clojure authorship</a></p>
<p><a href="http://wiki.github.com/ztellman/penumbra/getting-started">Penumbra OpenGL framework: &#8216;Getting started&#8217;</a></p>
<p><a href="http://impromptu.moso.com.au/resources.html">Impromptu livecoding environment introduction</a></p>
<p><a href="http://impromptu.moso.com.au/gallery.html">Andrew Sorenson livecoding videos</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/09/09/interaktiv-programmering-utforsking-l%c3%a6ring-og-produktivitet/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Lær deg et scriptspråk!</title>
		<link>http://sterkblanding.no/blog/2010/06/30/l%c3%a6r-deg-et-scriptsprak/</link>
		<comments>http://sterkblanding.no/blog/2010/06/30/l%c3%a6r-deg-et-scriptsprak/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 18:53:52 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=722</guid>
		<description><![CDATA[La oss si at du er en systemutvikler. Du er ansatt for din ekspertise i et av de &#8220;to store&#8221; applikasjonsspråkene &#8211; Java eller C#. Disse språkene kan brukes til svært mange oppgaver. Du kan teoretisk løse ethvert problem med dem, og de er sannsynligvis hovedgrunnen til at cv-en din er salgbar. Så hvorfor lære [...]]]></description>
			<content:encoded><![CDATA[<p>La oss si at du er en systemutvikler. Du er ansatt for din ekspertise i et av de &#8220;to store&#8221; applikasjonsspråkene &#8211; Java eller C#. Disse språkene kan brukes til svært mange oppgaver.  Du kan teoretisk løse ethvert problem med dem, og de er sannsynligvis hovedgrunnen til at cv-en din er salgbar. <strong>Så hvorfor lære noe mer enn Java eller C#?</strong></p>
<p>Jeg skal fortelle deg hvorfor du bør lære deg et s.k. scriptspråk. Scriptspråk har andre styrker enn Java og C#, og tilfører allsidighet og produktivitet til verktøyskuffen din. En kompetent håndtverker bruker mer enn hammer på jobb: skrutrekker, meisel og knipetang må også med.</p>
<p><span id="more-722"></span></p>
<p>Steve Yegge skrev for noen år siden en glimrende artikkel om hvordan han skiller gode utviklere fra svakere kandidater under jobbintervjuer <sup><a href="#yegge_article">[1]</a></sup>.  Et av poengene hans er at mange utviklere har en akilles-hel: det ene språket de mestrer er ikke ideellt til alle situasjoner. De er &#8220;<strong>one trick ponies&#8221;</strong>.</p>
<p>Her er et intervjuspørsmål som Yegge bruker til å teste kandidater:</p>
<blockquote><p>Last year my team had to remove all the phone numbers from 50,000<br />
Amazon web page templates, since many of the numbers were no longer in<br />
service, and we also wanted to route all customer contacts through a<br />
single page.</p>
<p>Let&#8217;s say you&#8217;re on my team, and we have to identify the pages having<br />
probable U.S. phone numbers in them. To simplify the problem slightly,<br />
assume we have 50,000 HTML files in a Unix directory tree, under a<br />
directory called &#8220;/website&#8221;. We have 2 days to get a list of file<br />
paths to the editorial staff. You need to give me a list of the .html<br />
files in this directory tree that appear to contain phone numbers in<br />
the following two formats: (xxx) xxx-xxxx and xxx-xxx-xxxx.</p></blockquote>
<p>Hvordan ville du løse dette problemet? Hint: Java og C# er ikke førstevalget til Steve, ei heller mitt. Du KAN løse dette og mange lignende problemer i Java eller C#, men et scriptspråk lar deg løse problemet raskere og mer elegant.</p>
<p><strong>Så hva er scriptspråk og hvorfor er de så nyttige?</strong> Jeg definerer kort og godt disse til å være <a href="http://www.ruby-lang.org/en/">Ruby</a>, <a href="http://www.python.org/">Python</a>, og <a href="http://www.perl.org/">Perl</a>. Alle tre er modne, populære språk. Det betyr ikke så mye hvilket av dem du lærer først: alle sammen deler de fleste av følgende styrker:</p>
<ul>
<li>Førsteklasses støtte for å manipulere tekster og filer.</li>
<li>Fungerer bra sammen med kommandolinje-verktøy og shellscripting, spesielt på unix-systemer.</li>
<li>Enkle å komme igang med. Vanligvis preinstallert på Unix, Linux og OS X-systemer.</li>
<li>Gode til proof of concepts og prototyper. Passer bra til å rask iterere frem og demonstrere konsepter.</li>
<li>Ypperlige til å automatisere oppgaver (f.eks scripting av operativsystemer, applikasjoner, byggeprosesser).</li>
<li>Er gjerne dynamisk typede språk, noe som lar deg bruke mindre tid på syntax og mer tid på selve oppgaven du skal løse. <sup><a href="#yegge_video">[2]</a></sup></li>
<li>Kan kjøre oppå, eller sammen med, de tyngre platformspråkene (se <a href="http://jruby.org/">JRuby</a>, <a href="http://ironruby.net/">IronRuby</a>). Best of both worlds!</li>
<li>Gir deg et nytt perspektiv på platformer og språk du allerede mestrer. Det er alltid nyttig å utvide horisontene sine! <sup><a href="#martin_video">[3]</a></sup></li>
</ul>
<p>Høres dette nyttig ut? <strong>Har du lyst til å lære mer? </strong>En god måte å komme igang på kan være å lese denne boka:</p>
<p style="text-align: center"><a href="http://pragprog.com/titles/bmsft/everyday-scripting-with-ruby"><img class="aligncenter size-full wp-image-733" src="http://sterkblanding.no/files/2010/06/rubyBookCover.jpg" alt="" width="300" height="300" /></a></p>
<p>eller denne:</p>
<p style="text-align: center"><a href="http://www.amazon.com/Python-Nutshell-Second-OReilly/dp/0596100469"><img class="aligncenter size-full wp-image-734" src="http://sterkblanding.no/files/2010/06/pythonBookCover.jpg" alt="" width="145" height="217" /></a></p>
<p>Sett deg så ned med et konkret prosjekt<strong>. </strong> Finn f.eks en &#8220;tidstyv&#8221; i hverdagen din &#8211; en rutine som kan automatiseres. Lag et script som løser problemet ditt.</p>
<p>Vips: fremtidig tid spart, og du har begynt å legge et <strong>nytt, kraftig verktøy</strong> i reportoaret ditt!</p>
<h2>Referanser:</h2>
<p>1) <a id="yegge_article" href="http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions">Yegges artikkel om intervju-spørsmål</a><br />
2) <a id="yegge_video" href="http://www.youtube.com/watch?v=tz-Bb-D6teE">Yegge om styrkene til scriptspråk/dynamiske språk (video)</a><br />
3) <a id="martin_video" href="http://www.akitaonrails.com/2010/06/16/railsconf-2010-video-interview-robert-martin-english">Robert &#8220;Uncle Bob&#8221; Martin om hvorfor du bør lære nye språk (video)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/06/30/l%c3%a6r-deg-et-scriptsprak/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Hold stø kurs med autotesting!</title>
		<link>http://sterkblanding.no/blog/2010/05/31/hold-st%c3%b8-kurs-med-autotesting/</link>
		<comments>http://sterkblanding.no/blog/2010/05/31/hold-st%c3%b8-kurs-med-autotesting/#comments</comments>
		<pubDate>Mon, 31 May 2010 19:14:04 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=643</guid>
		<description><![CDATA[Unit-tester er nyttig for de fleste systemutviklere. Noen av oss kjører strikt, metodisk testdrevet utvikling. Andre bruker bare automatiserte tester nå og da som sikkerhetsnett for å unngå regress-feil. Hvor ofte fyrer du selv av testene dine? Kjører du testsuiten din en gang i ny og ne, eller strikt for hver metode du implementerer? Jeg [...]]]></description>
			<content:encoded><![CDATA[<p>Unit-tester er nyttig for de fleste systemutviklere.</p>
<p>Noen av oss kjører strikt, metodisk testdrevet utvikling. Andre bruker bare automatiserte tester nå og da som sikkerhetsnett for å unngå regress-feil. <strong>Hvor ofte fyrer du selv av testene dine?</strong> Kjører du testsuiten din en gang i ny og ne, eller strikt for hver metode du implementerer?</p>
<p>Jeg liker å kjøre testene mine <strong>ofte</strong> mens jeg arbeider. Det jeg liker enda bedre er å la utviklingsmiljøet mitt kjøre dem for meg, automatisk. Poenget med yrket vårt er jo nettopp å automatisere og effektivisere arbeidsprosesser &#8211; dette forsøker jeg å gjøre også med mine egne rutiner og verktøy. La oss se hvordan vi kan få til dette.</p>
<p><span id="more-643"></span></p>
<p>Mange av oss bruker allerede <a href="http://martinfowler.com/articles/continuousIntegration.html">Continuous Integration</a> for å oppdage feil i den felles kodebasen. Personlig autotesting er det neste, logiske steget: enhetstestene våre burde kjøre i bakgrunnen hver gang vi endrer noe, og gi oss umiddelbar tilbakemelding når vi knekker funksjonalitet. På denne måten oppdager vi våre egne feil før resten av teamet blir påvirket av dem.</p>
<p>Det finnes flere verktøy som gjør dette for deg:</p>
<ul>
<li><span style="font-family: arial, sans-serif"><a href="http://improvingworks.com/products/infinitest/">Infinitest</a> (Java)</span></li>
<li><span style="font-family: arial, sans-serif"><a href="http://www.zenspider.com/ZSS/Products/ZenTest/">Autotest / ZenTest</a> (Ruby)</span></li>
<li><span style="font-family: arial, sans-serif"><a href="http://github.com/lacostej/nosyd">Nosyd</a> (Python)</span></li>
</ul>
<p><strong>Det er imidlertid ikke vanskelig å lage et enkelt autotest-verktøy på egen hånd</strong>. Jeg synes at det er en god ide å bruke litt tid her og der på å forbedre sitt eget utviklingsmiljø. Vi har jo muligheten til å lage våre egne verktøy (<a href="http://no.wikipedia.org/wiki/Smed">smeden</a> er en av få håndverkere som kan si det samme). Som utvikler bør man iallfall klare å slipe sine egne kniver, for å si det sånn. Og dette er en god anledning!</p>
<p><a href="http://sterkblanding.no/files/2010/05/smedVerktoy.jpg"><img class="alignleft size-full wp-image-669" style="margin-top: 0px;margin-bottom: 0px;margin-left: 10px;margin-right: 10px" title="smedVerktoy" src="http://sterkblanding.no/files/2010/05/iStock_000012701407Small.jpg" alt="" width="211" height="296" /></a></p>
<p><strong>Et naivt script for autotesting implementerer du på en ettermiddag.</strong> Alt du trenger er et lite program som reagerer på endringer i prosjektfilene dine, og kjører testene etter behov.</p>
<p>Algoritmen er enkel: La scriptet kjøre regelmessig, f.eks hvert sekund. Kontroller &#8220;forrige endring&#8221;-klokkeslettet for alle filene i prosjektet. Dersom klokkeslettet på en eller flere filer har endret seg siden forrige kontroll, så kjør enhetstestene til prosjektet. Analyser output fra testkjøringen, og se hvorvidt noen tester feilet eller kode knakk helt (exceptions). <strong>Gi så klar tilbakemelding om testene er ok eller feilet.</strong></p>
<p>Tilbakemeldingen kan være litt grafikk og lyd på desktopen (for eksempel med <a href="http://growl.info/">Growl</a> eller <a href="http://www.fullphat.net/index.php">Snarl</a>), en <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=67492">lavalampe</a> på pulten, <a href="http://marketplace.eclipse.org/content/eclipse-xps">blinkende LED-lamper</a> på laptopen&#8230; vær kreativ<strong>!</strong> Bare sørg for er at du får en tydelig tilbakemelding på hvorvidt testene feiler eller ikke.</p>
<p><strong>Filmklippet under viser hvordan mitt eget autotest-miljø fungerer.</strong> Koden er i dette tilfellet skrevet i et språk som heter <a href="http://clojure.org">Clojure</a> og ser derfor kanskje litt pussig ut, men ikke heng deg opp i det: det som demonstreres er at jeg knekker og fikser tester, og får automatisk godt synlig feedback på dette underveis.</p>
<p style="text-align: center"><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="480" 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=11633909&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="640" height="480" src="http://vimeo.com/moogaloop.swf?clip_id=11633909&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><!-- End of Artiss Code Embed code -->
</p>
<p>Ikke spesielt komplisert.</p>
<p><strong>&#8220;Dette ser jo genialt ut! Hvorfor bruker ikke alle autotest-verktøy allerede?&#8221;</strong></p>
<p>Vel, det finnes dessverre noen utfordringer.</p>
<p>Dersom autotesting skal fungere hensiktsmessig må testsuiten som kjøres kun bestå av raske enhetstester, ikke tunge integrasjonstester. Og enhetstestene må gå kjapt! En test-run må ta sekunder, ikke minutter, ellers mister du gevinsten ved den umiddelbare feedbacken.</p>
<p>Problemet med trege tester er betydelig. Det finnes workarounds: man kan analysere avhengigheter mellom tester og kode, kun kjøre de berørte testene, kjøre raske tester først, feilende tester først, nylig feilende tester først&#8230; Men mange av oss har dessverre erfart at det er vanskelig å få til et godt fungerende opplegg for dette i et vanlig moderat stort utviklingsprosjekt.</p>
<p>Så er ikke autotesting nyttig likevel, da? Jo! Autotesting fungerer <strong>knallbra</strong> i<strong> små prosjekter</strong> (som ikke har samlet på seg så mye kode ennå) og <strong>egenopplæring</strong> (når du lærer nye verktøy og språk og ønsker å ta små steg med kjapp feedback). Det kan kanskje også fungere i større prosjekter <strong>dersom</strong> du har muligheten til å segmentere koden og testene dine i mindre moduler på en hensiktsmessig måte.</p>
<p>I bunnen av denne artikkelen har jeg vedlagt et eksempel på hvordan et enkelt autotest-script kan se ut, implementert i <a href="http://ruby-lang.org/">Ruby</a>. Scriptet er skrevet for OS X-miljø, men koden bør være relativt lesbar og enkel å porte til ditt eget favorittspråk og utviklingsmiljø.</p>
<p><strong>Happy testing!</strong></p>
<p><em>Eksempel:</em></p>
<p><code> </code></p>
<p><code> </code></p>
<p><code></p>
<pre># Command line command which launches all unit tests
RUN_TESTS_CMD = "mvn clean test"

# Pick up any changes in files matching this filepath
FILES_TO_MONITOR = "**/*.java"

# Determine test outcome by scraping test output for #telltale signs of failure or exceptions</pre>
<pre>def test_failed?(test_output)
  return (test_output["FAIL in"] != nil) # Any 'FAIL in' strings in test result indicates failure
end

def exception_occurred?(test_output)
  return (test_output["EXCEPTION in"] != nil)
end

# Indicate test state by turning the background color of the test terminal
# a different color - yellow red og green. Currently uses Mac AppleScripts, but could be
# an audible signal, lava lamp, or anything else instead.

def indicate_tests_running
  `osascript bin/autotest/make-term-yellow`
  puts "\n\n\n----------------------------------"
  puts "TESTRUN STARTED #{Time.now}"
  puts "----------------------------------\n\n\n"
end  

def indicate_test_success(description)
  `osascript bin/autotest/make-term-green`
  puts description
end  

def indicate_test_errors(description)
  `osascript bin/autotest/make-term-red`
  puts description
end  

$monitored_files = {} # Stores the last changed time of each file    

def files_changed? # Check if any files have been touched/saved since last check
  file_changed = false;  

  Dir[FILES_TO_MONITOR].each do |filepath|
    if(!File.new(filepath).ctime.eql?($monitored_files[filepath]))
      file_changed = true;
      $monitored_files[filepath] = File.new(filepath).ctime
    end
  end  

  return file_changed
end  

def run_test
  indicate_tests_running
  result = `#{RUN_TESTS_CMD}`  #Run the tests, pipe resulting console output back
  display_results(result)
end    

def display_results(testOutput)
  if test_failed?(testOutput)
    indicate_test_errors("SOME TEST(S) FAILED\n"+testOutput)
  elsif exception_occurred?(testOutput)
    indicate_test_errors("EXCEPTIONS OCCURRED\n"+testOutput)
  else
    indicate_test_success("ALL TESTS SUCCEED\n"+testOutput)
  end
end  

def test_loop
  while true
    if files_changed?
      run_test
    end
    sleep(1) #seconds between each poll for file changes
  end
end  

test_loop # Start testing!</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/05/31/hold-st%c3%b8-kurs-med-autotesting/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Slik forbereder og gjennomfører du et teknisk kurs</title>
		<link>http://sterkblanding.no/blog/2010/04/25/slik-forbereder-og-gjennomf%c3%b8rer-du-et-teknisk-kurs/</link>
		<comments>http://sterkblanding.no/blog/2010/04/25/slik-forbereder-og-gjennomf%c3%b8rer-du-et-teknisk-kurs/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 15:26:31 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Brukervennlighet]]></category>
		<category><![CDATA[Kursing]]></category>
		<category><![CDATA[Presentasjonsteknikk]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[kurs]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=387</guid>
		<description><![CDATA[Jeg holdt nylig en teknisk workshop for noen kollegaer, og forsøkte da å markedsføre, forberede og gjennomføre kurset på en hensiktsmessig måte. Her er noen prinsipper og teknikker som fungerer bra. Markedsføring Begynn med grunnleggende markedsundersøkelse. Hvem ønsker du å nå, og hva trenger de å lære om temaet ditt? Skriv  en velformulert invitasjon til [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg holdt nylig en <a href="http://sterkblanding.no/blog/2010/03/24/kom-igang-med-javascript/">teknisk workshop</a> for noen kollegaer, og forsøkte da å markedsføre, forberede og gjennomføre kurset på en hensiktsmessig måte. Her er noen prinsipper og teknikker som fungerer bra.</p>
<p><span id="more-387"></span></p>
<h2>Markedsføring</h2>
<p>Begynn med grunnleggende <strong>markedsundersøkelse</strong>. Hvem ønsker du å nå, og hva trenger de å lære om temaet ditt?</p>
<p><a href="http://sterkblanding.no/files/2010/04/admin-ajax.php_.jpeg"><img class="alignright" style="margin-left: 15px;margin-right: 15px" title="megafonMann" src="http://sterkblanding.no/files/2010/04/admin-ajax.php_.jpeg" alt="" width="320" height="213" /></a></p>
<p>Skriv  en velformulert invitasjon til kurset. Lag en skikkelig <em>pitch</em> &#8211; selg temaet ditt godt! Bruk grunnleggende <a href="http://www.amazon.com/22-Immutable-Laws-Marketing/dp/1861976100/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1271401727&amp;sr=8-1">prinsipper</a> fra <a href="http://www.amazon.com/Copywriters-Handbook-Third-Step-Step/dp/0805078045/ref=sr_1_3?ie=UTF8&amp;s=books&amp;qid=1271401787&amp;sr=1-3">markedsføring</a>: fortell hvorfor leseren skal bry seg (<em>benefits</em>) før du røper konkret pensum og detaljer for kurset (<em>features</em>).</p>
<p>Annonser kurset ditt i mange kanaler: email, sosiale medier, ansikt til ansikt. Jo fler fora jo bedre.</p>
<p>Sørg for at det er <strong>lett å melde seg på</strong>. Tenk på dette som å gjøre prospekter til kunder &#8211; gjør terskelen for &#8220;kjøp&#8221; så lav som mulig.</p>
<p>Nå strømmer forhåpentligvis påmeldingene inn. Bruk litt tid på å<strong> ta kontakt med hver deltaker</strong>. Gjør dette så tidlig som mulig. Send påmeldingsbekreftelse og ytterligere praktisk informasjon, og undersøk samtidig erfaringsnivået og forventningene til den enkelte &#8211; dette lar deg skreddersy innholdet i kurset.</p>
<h2>Planlegging og struktur</h2>
<p>Etter stegene ovenfor bør du ha et visst inntrykk av hvem som kommer til å dukke opp på workshopen. Generaliser denne informasjonen i <a href="http://www.stevebromley.com/blog/tag/persona/">personaer</a> &#8211; skal opplegget ditt passe for både <em>Programmerer Pia</em> og <em>Mellomleder Magnus?</em><br />
<a href="http://sterkblanding.no/files/2010/04/steinpaastein.jpg"><img class="alignleft" title="steinpaastein" src="http://sterkblanding.no/files/2010/04/steinpaastein.jpg" alt="" width="259" height="238" /></a></p>
<p><a href="http://sterkblanding.no/files/2010/04/steinpaastein.jpg"></a>Tenk grundig gjennom overordnet struktur og pensum. Brainstorm omfang og innhold for kurset med fleksible teknikker som <strong>whiteboard</strong>, <strong>skisser</strong> og <a href="http://en.wikipedia.org/wiki/Mind_map">tankekart</a>. Feiltrinn er enkle å fikse på dette stadiet; etter at du har begynt å implementere kurset blir de langt mer tidkrevende (akkurat som systemutvikling).</p>
<p><strong>Hvordan skal du lære bort?</strong> Dersom du har nok tid så bør du vurdere en kombinasjon av metoder. Litt foredrag, litt &#8220;tegn og fortell&#8221;, og rikelig med praktiske oppgaver. Hver person har sin egen måte å lære på, forsøk derfor å formidle materialet på flere måter for å treffe alle. Det gjør ikke noe at materialet derfor blir gjentatt; repetisjon hjelper folk å lære.</p>
<p>Presenter både grunnleggende fakta og relatert kontekst. Med andre ord, fortell både &#8220;hva er det?&#8221; og &#8220;hvorfor skal jeg bry meg?&#8221;. Mikro og makro.</p>
<p>Publikum kan ha varierende grad av erfaring og kunnskap om temaet du lærer bort. Forsøk i så fall å gi noe til både nybegynnerne og de erfarne elevene.</p>
<p>Jeg liker å starte med litt forelesning med praktiske demonstrasjoner underveis. Dette gir folk et fundament. Så bør folk få praktiske øvelser å jobbe med. <strong>Fortell, demonstrer, la folk prøve selv</strong>. (Resten av artikkelen antar at du følger dette formatet).</p>
<h2>Foredraget</h2>
<p>Start sterkt. Presenter en klar agenda &#8211; &#8220;hva skal vi lære idag, og hvorfor?&#8221; Bruk minimal tid på å introdusere deg selv; deltakerne er interessert i hva du ønsker å lære dem, ikke hvem du er.</p>
<p>Unngå foiler med masse tekst. <strong>Korte tekster</strong> er bra, enkeltord bedre, et enkelt illustrerende bilde er best. Kanskje du til og med slipper unna med å bare fortelle, dersom du gjør det tydelig nok?</p>
<p>Korte foiler er bedre enn tettskrevne. Så. Korte. Poenger. Som. Mulig. Hver foil fungerer da også som en veldig presis huskelapp for deg som forteller.</p>
<p>Foilene dine trenger ikke være kunstverk, men tenk litt <strong>grunnleggende grafisk design</strong>:</p>
<ul>
<li>Finn en generell stil på forhånd slik at materiellet blir så konsistent som mulig. Presenterer du samme type informasjon (eksempler, kode, lister&#8230;) gjentatte ganger? Lag da en konsekvent mal for hvordan disse foil-typene skal se ut. Kode bør f.eks alltid ha samme font og størrelse.</li>
<li>Bruk stor skrifttype. Velg farger som gir god kontrast mot hverandre. Hvordan kommer materialet ditt til å se ut når det projiseres på en hvit skjerm? I dagslys? Ti meter unna?</li>
<li>Bruk repetisjon. Innhold som gjentas er lettere å huske.</li>
<li>Bruk kontrast. Innhold som &#8220;hopper ut av siden&#8221; er minneverdig.</li>
<li>Bruk bilder av <a href="http://www.istockphoto.com/index.php">høy kvalitet</a>. Unngå kjedelig clip-art.</li>
<li>Skriv kortfattet tekst med mye whitespace rundt &#8211; la innholdet ditt &#8220;puste&#8221;.</li>
<li>Kutt ut standard-malene for powerpoint. Firmalogoer og andre grafiske snurredipperier er greit på introduksjonen og avslutningen av foredraget, men på resten av foilene medfører det bare visuelt støy.</li>
</ul>
<h2>Øvelsene</h2>
<p>Ta høyde for å bruke mye tid på å lage bra praktiske øvelser<strong>.</strong> Dette er noen poenger å tenke på:</p>
<ul>
<li>Øvelsene bør være enkle i starten. <strong>La eleven føle seg flink!</strong></li>
<li>Lag et bredt utvalg av oppgaver, og gjøre det mulig å løse dem i fri rekkefølge. En lang kjede av påbyggende oppgaver kan føre til at en feil i en tidlig øvelse ødelegger for eleven senere &#8211; i verste fall setter eleven seg helt fast. La eleven hoppe til en hvilken som helst annen øvelse når som helst.</li>
<li>Ta høyde for at folk har forskjellig erfaringsnivå og produktivitet. En måte å gjøre dette på er å legge til en &#8220;bonusoppgave&#8221; for de flinkeste i klassen på hver øvelse.</li>
<li><strong>Ikke krev at deltakerne skal forberede seg</strong> nevneverdig før kurset. Gjør det istedet enkelt å komme igang på selve workshopen. Tenk <a href="http://www.amazon.com/Design-Everyday-Things-Donald-Norman/dp/0465067107/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1271402199&amp;sr=1-1">brukeropplevelse</a>! For eksempel: dersom oppgavene krever programmering så bør du forsøke å gi et ferdig konfigurert utviklingsmiljø til eleven.</li>
<li>Anta i utgangspunktet at internett og intranett ikke er tilgjengelig, så slipper du å få ubehagelige overraskelser. Forsøk istedet å gi elevene alt de trenger for å komme igang på selve workshopen.</li>
<li>Sørg for at det er enkelt å distribuere ut handouts. Kjøp en haug usb-pinner, last inn filer på dem før kurset starter.</li>
</ul>
<h2>Siste forberedelser</h2>
<p>Når grunnleggende struktur og innhold er på plass bør du trene på stoffet og polere det ytterligere. <strong>Øving, forbedring, øving, forbedring.</strong> Iterer på innholdet flere ganger. Dette er som vanlig skriveprosess; hver gang du kommer tilbake til stoffet ditt med friske øyne så ser du ting som kan forbedres.</p>
<p>Forsøk å bli ferdig med det meste av forberedelser noen dager før kurset. Da gir du deg selv langt bedre margin for å avsløre og utbedre uventede mangler i opplegget ditt. Den siste kvelden før kurset passer best til rolig refleksjon og eventuell siste finpuss.</p>
<h2>D-dagen</h2>
<p>Møt opp tidlig. Undersøk kursrommet. Sett opp din egen pc og juster lysnivået i rommet &#8211; du har ikke lyst til å jakte etter kabler, lysbrytere og gardiner underveis i kurset.</p>
<p>Hils på folk etterhvert som de dukker opp. Prøv å få til litt småprat. Du ønsker å <strong>skape kontakt</strong> med deltakerne så tidlig som mulig, så tjuvstart med dette før selve kurset starter. Det er langt mindre skummelt å prate til en forsamling dersom du har noen kjente og vennlige ansikter i forsamlingen allerede.</p>
<p>Så kommer den utfordrende biten (iallfall for meg!): selve foredraget. Forsøk å være  avslappet og tydelig. Kontroller kroppsspråket ditt. Hold et rolig og jevnt tempo. Gjør som sangere og kamsportutøvere: bruk magen aktivt. <strong>Hent stemmen din dypt i magen, ikke øverst i halsen.</strong></p>
<p><a href="http://sterkblanding.no/files/2010/04/dirigent1.jpg"><img class="alignright size-full wp-image-409" style="margin-left: 15px;margin-right: 15px" title="dirigent" src="http://sterkblanding.no/files/2010/04/dirigent1.jpg" alt="" width="320" height="265" /></a></p>
<p>Besvar korte spørsmål underveis. Henvis lengre diskusjoner til oppsummeringen på slutten. Spesielt smale temaer kan eventuelt tas på tomannshånd etter kurset.</p>
<p><strong>Engasjer publikum</strong>. Still både retoriske og reelle spørsmål til rommet. La folk svare med håndsopprekning, individuelle svar eller gruppesamtaler. Oppfordre salen til å delta aktivt!</p>
<p>Del inn foredraget i <strong>korte sesjoner med hyppige pauser</strong> underveis, for eksempel en halvtime av gangen med fem minutter pause mellom. Gjør disse periodene enda kortere dersom rommet er smått og trangt; lav oksygentilførsel er ikke bra.</p>
<p>Vår oppmerksom på publikums reaksjon underveis, og tilpass tempo og innhold hvis nødvendig. Dersom tilskuerne kjeder seg bør du skynde deg til en mer spennende del av presentasjonen. Dersom de ser ut til å &#8220;falle av lasset&#8221; bør du senke tempoet og forklare tydeligere.</p>
<p>Gi folk<strong> handouts etter foredraget, ikke før</strong>. Du kjemper allerede om oppmerksomhet mot mange laptoper og mobiltelefoner i rommet, ikke undergrav deg selv ytterligere ved å gi ut lesestoff i tillegg. Fokus skal være på deg og hva du sier, ikke noen utskrifter du har delt ut.</p>
<p>Når de praktiske øvelsene starter bør du forsøke å aktivt sirkulere i rommet. Prat med deltakerne, sjekk hvordan det går med hver person/gruppe. Tilby hjelp hvis det er nødvendig. <strong>Vær tilstede som instruktør</strong>. Det er lett å stille spørsmål til deg hvis du er i nærheten og tydelig oppmerksom. En &#8220;fjern lærer bak et stort skrivebord&#8221; virker ikke like tilgjengelig.</p>
<p>Til slutt: be publikum om direkte tilbakemelding. Hva synes de kan bli bedre? Basert på dette, <strong>hold en enda bedre workshop neste gang</strong>! <img src='http://sterkblanding.no/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Referanser</h2>
<p><a href="http://www.amazon.com/Presentation-Zen-Simple-Design-Delivery/dp/0321525655/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1271425907&amp;sr=1-1">Presentation Zen</a> inneholder enkle tips rundt foredragsholding og slides-mekking.</p>
<p><a href="http://headrush.typepad.com/">Creating Passionate Users</a> er en fantastisk blogg om brukervennlighet og pedagogikk. Den oppdateres ikke lenger, men arkivene er en gullgruve.</p>
<p><a href="http://www.ted.com/">TedTalks</a> har masse eksempler på flinke foredragsholdere. Se og lær!</p>
<h2>Bidragsytere</h2>
<p>Takk til <a href="http://no.linkedin.com/in/sivfjellkarstad">Siv Fjellkårstad</a>, <a href="http://johannesbrodwall.com/">Johannes Brodwall</a> og<a href="http://no.linkedin.com/pub/markus-krüger/2/b2/892"> Markus Krüger, </a>som alle var så vennlige å dele av sine egne kurs-erfaringer!</p>
<p><em>Dette er et levende dokument. Kom gjerne med egne erfaringer i kommentarfeltet under &#8211; jeg fletter inn gode forslag i artikkelen.</em></p>
<p><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/04/25/slik-forbereder-og-gjennomf%c3%b8rer-du-et-teknisk-kurs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kom igang med JavaScript!</title>
		<link>http://sterkblanding.no/blog/2010/03/24/kom-igang-med-javascript/</link>
		<comments>http://sterkblanding.no/blog/2010/03/24/kom-igang-med-javascript/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 06:25:32 +0000</pubDate>
		<dc:creator>Thomas Kjeldahl Nilsson</dc:creator>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Smidig]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=185</guid>
		<description><![CDATA[Stadig mer programvare utvikles som rike webapplikasjoner, og brukere og kunder stiller stadig høyere krav til disse løsningene. JavaScript er derfor i ferd med å bli et av de viktigste verktøyene våre for moderne applikasjonsutvikling.

Språket blir dessverre behandlet som den stygge andungen av mange utviklere fordi det tradisjonelt oppleves som knotete, skjørt og lite vedlikeholdbart. Slik trenger det ikke være!

Vi i Steria har utviklet et gratis, nedlastbart kurs som oppdaterer deg på dette området. Denne workshopen introduserer ferdighetene, teknikkene og verktøyene som gjør JavaScript-utvikling langt mer overkommelig enn tidligere. Alt materiale i kurset er fritt tilgjengelig til din egen bruk.]]></description>
			<content:encoded><![CDATA[<p>Stadig mer programvare utvikles som rike webapplikasjoner, og brukere og kunder stiller stadig høyere krav til disse løsningene. JavaScript er derfor i ferd med å bli et av de <strong>viktigste verktøyene</strong> våre for moderne applikasjonsutvikling.</p>
<p>Språket blir dessverre behandlet som den stygge andungen av mange utviklere fordi det tradisjonelt oppleves som knotete, skjørt og lite vedlikeholdbart. Slik trenger det ikke være!</p>
<p>Vi i Steria har utviklet et <strong>gratis, nedlastbart</strong> kurs som oppdaterer deg på dette området. Denne workshopen introduserer ferdighetene, teknikkene og verktøyene som gjør JavaScript-utvikling langt mer overkommelig enn tidligere. Alt materiale i kurset er fritt tilgjengelig til din egen bruk.<span id="more-185"></span></p>
<p>Du kan bruke foilene, forelesningsnotatene og øvelsene som <strong>personlig studiemateriell</strong>. Du kan også holde kurset som en formell <strong>workshop</strong> sammen med kollegaer eller kunder. Workshopen tar omtrent en halv dag (3-4 timer) når det gjøres skikkelig &#8211; beregn halvannen time forelesning, minst halvannen time praktiske øvelser.</p>
<p style="text-align: center"><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slides-100310162930-phpapp02&rel=0&stripped_title=javascript-neednt-hurt-3390657" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slides-100310162930-phpapp02&rel=0&stripped_title=javascript-neednt-hurt-3390657" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><!-- End of Artiss Code Embed code -->
</p>
<h2 style="text-align: center"><a title="Download link" href="http://kjeldahlnilsson.net/jsnh.zip"><strong><span style="color: #ff6600"><span style="text-decoration: none"><span style="color: #0000ff">LAST NED HER</span></span></span></strong></a></h2>
<p style="text-align: center"><em>(Inneholder slides, forelesningsnotater, øvelser, løsninger, eksempler, verktøy. Utgitt under en Creative Commons Attribution 3.0 lisens. Du kan bruke, endre og dele det fritt, så lenge du krediterer opphavsmannen.)</em></p>
<p>Hvis du ikke har kapasitet til å kjøre kurset selv kan du ta kontakt med <a title="Steria Norge link" href="http://steria.no">Steria</a>; vi kan holde kurset i dine lokaler, i og rundt Oslo.</p>
<p>La oss avslutte med en smakebit. Filmklippet under illustrerer et av temaene som workshopen tar for seg, nemlig <a title="Wikipedia TDD link" href="http://en.wikipedia.org/wiki/Test-driven_development">testdrevet utvikling</a> i JavaScript. Enjoy!</p>
<p style="text-align: center"><!-- Artiss Code Embed v1.5 | http://www.artiss.co.uk/artiss-code-embed -->
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" 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=9453172&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="640" height="424" src="http://vimeo.com/moogaloop.swf?clip_id=9453172&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><!-- End of Artiss Code Embed code -->
</p>
<p><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/03/24/kom-igang-med-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

