<?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; java</title>
	<atom:link href="http://sterkblanding.no/blog/tag/java/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>Code templates &#8211; ukjent gullgruve for utviklere ?</title>
		<link>http://sterkblanding.no/blog/2011/09/07/code-templates-ukjent-gullgruve-for-utviklere/</link>
		<comments>http://sterkblanding.no/blog/2011/09/07/code-templates-ukjent-gullgruve-for-utviklere/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 19:34:01 +0000</pubDate>
		<dc:creator>Anders Karlsen</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=1234</guid>
		<description><![CDATA[Mange som programmerer enten i java eller i andre programeringsspråk har en gullgruve rett under beina uten å vite om det, nemlig deres utviklingsmiljø eller IDE (Integrated Developing Enviroment). Jeg vil her beskrive Code Templates som finnes i de fleste IDE-er, og som kan hjelpe deg til en mer effektiv programmeringshverdag. Code templates kan generere [...]]]></description>
			<content:encoded><![CDATA[<p>Mange som programmerer enten i java eller i andre programeringsspråk har en gullgruve rett under beina uten å vite om det, nemlig deres utviklingsmiljø eller IDE (Integrated Developing Enviroment). Jeg vil her beskrive Code Templates som finnes i de fleste IDE-er, og som kan hjelpe deg til en mer effektiv programmeringshverdag. Code templates kan generere de rutinepregede delene av koden for deg slik at du kan konsentrere deg om det som gir forretningsverdi.</p>
<p><span id="more-1234"></span></p>
<p><em>Ville du ha brukt notepad til å skrive kode ?</em><br />
Selvsagt (forhåpentligvis) ikke. Vi bruker IDE til programmering fordi det gir en sikrere og raskere prosess. Moderne IDE-er inneholder et arsenal av verktøy. En av disse er code templates. Jeg skal her gå igjennom hvordan man kan bruke de innebygde code templatene eller endre disse slik at de passer perfekt. Man kan også lage nye selv. Jeg vil her bruke Eclipse og Java som et eksempel. Code templates finnes derimot i flere IDE-er (som for eksempel InteliJ og Netbeans) og kan også benyttes på samme måte i andre programeringsspråk enn java.</p>
<h2>Bruk de innebygde code templatene</h2>
<p>Eclipse kommer med mange innebygde templates. Disse listes opp under Preferences-Java-Editor-Templates. For å aktivere templaten i koden trykker du &#8220;Ctrl-Space-Space&#8221;.</p>
<p>Skal du opprette en junit-test (og det gjør du vel en del ganger?) finnes det en template for å dette. Denne ser slik ut:</p>
<p><a href="http://sterkblanding.no/files/2011/09/testtemplate.jpg"><img class="alignnone size-full wp-image-1242" src="http://sterkblanding.no/files/2011/09/testtemplate.jpg" alt="" width="512" height="75" /></a></p>
<p><a href="http://sterkblanding.no/files/2011/09/testtemplate.jpg"></a>Her lages det en metode annotert med test. org.junit.Assert importeres statisk. Og cursoren settes inne i metoden. Det opprettes også en variabel (testname). Dette gjør at brukeren skriver rett etter genereringen fylles inn der.</p>
<p>Det er fullt mulig å editere på templatene hvis de ikke passer helt. Dersom man for eksempel bruker fest assert så trenger man ikke statisk import av org.junit.Assert. Det er bare å slette den delen.</p>
<p>Ta deg tid til å ta en titt på de innebygde templatene. Det er antgelig flere ting du gjør ofte som det finnes templates som gjør denne jobben lettere.</p>
<h2>Lag dine egne templates</h2>
<p>Man kan også lage sine egne templates. Her skal vi ta for oss to eksempler.</p>
<h2>Template for equals metode</h2>
<p>Vi skal her se på en template for en eguals metode (Jada, det finnes mange andre måter for å enkelt lage en equalsmetode, men dette er et eksempel)</p>
<p><a href="http://sterkblanding.no/files/2011/09/equaltemplate1.jpg"><img class="alignnone size-full wp-image-1238" src="http://sterkblanding.no/files/2011/09/equaltemplate1.jpg" alt="" width="446" height="326" /></a></p>
<p>Minst 99% av alle equalsmetoder starter med å sjekke at objektet er av riktig type. Siden klassenavnet varierer fra klasse til klasse (duh), bruker vi en variabel &#8220;enclosing_type&#8221;. Denne erstates med navnet på klassen vi er i. I tillegg caster vi deretter objektet til den aktuelle typen. Det er i tillegg lagt på en nullsafe equalsmetode som kan brukes til å sjekke de aktuelle atributtene. Vi har også tatt med en gyldig (men ikke veldig bra) implementasjon av hashCode slik at man oppfyller kontrakten mellom equals og hashcode.</p>
<h2>Template for å generere en factory metode</h2>
<p>Mange ganger er det nyttig å opprette en klasse med en statisk metode. Følgende template hjelper deg på vei her :</p>
<p><a href="http://sterkblanding.no/files/2011/09/createTemplate.jpg"><img class="alignnone size-full wp-image-1240" src="http://sterkblanding.no/files/2011/09/createTemplate.jpg" alt="" width="662" height="128" /></a></p>
<p>Som vi ser brukes det mye av de samme teknikkene som i equals templaten. Det som er nytt er bruken av variable. Variable er felt som brukeren kan editere på umiddelbart etter å ha kjørt templaten. Her bruker vi dette til å redigere på variabelnavnet (som jo varierer mye fra klasse til klasse). Feltnavnet brukeren skriver inn oppdateres tre steder:</p>
<ol>
<li>I feltnavnet</li>
<li>I parameteren til metoden</li>
<li>I tilordningen på begge sider av likhetstegnet.</li>
</ol>
<p>Disse templatene er bare eksempeler. I et hvert domene finnes det noe som gjøres mange ganger og er nesten likt. Tenk deg om. Antagelig finnes det noe code templates kan hjelpe deg med. Hvis du vil kopiere noen av templatene fra eksemplene finner du dem og noen til <a href="https://github.com/anders88/eclipseTemplates/blob/master/templates.txt">her</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2011/09/07/code-templates-ukjent-gullgruve-for-utviklere/feed/</wfw:commentRss>
		<slash:comments>2</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>Hvordan endre en statisk klasse til en dynamisk singleton</title>
		<link>http://sterkblanding.no/blog/2010/01/21/hvordan-endre-en-statisk-klasse-til-en-dynamisk-singleton/</link>
		<comments>http://sterkblanding.no/blog/2010/01/21/hvordan-endre-en-statisk-klasse-til-en-dynamisk-singleton/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 08:52:05 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=40</guid>
		<description><![CDATA[Har du arvet kode fra noen andre? Er det ingen tester på kodebasen? Er all koden limt fast sammen med kall på statiske metoder som ikke lar seg erstatte med mocker i testene dine? Det er mulig å gjøre en disiplinert refaktorisering fra denne situasjonen til et mockbart design der alle kallene går via en [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>Har du arvet kode fra noen andre? Er det ingen tester på kodebasen? Er all koden limt fast sammen med kall på statiske metoder som ikke lar seg erstatte med mocker i testene dine?</div>
<div><span id="more-40"></span></div>
<div>Det er mulig å gjøre en disiplinert refaktorisering fra denne situasjonen til et mockbart design der alle kallene går via en singleton som kan erstattes under testing. Her er en oppskrift for å endre en statisk klasse til en singleton:</div>
<div>
<ol>
<li>Gitt at den originale klassen heter StaticService. Kopier klassen til en ny klasse som blir implementasjonsklassen, for eksempel kallt ServiceImplementation</li>
<li>ServiceImplementation trenger å kun ha ikke-statiske metoder. Dette er lett å fikse ved en tekstlig &#8220;søk/erstatt&#8221; av &#8220;public static&#8221; med &#8220;public&#8221;. Normalt vil dette søket kun treffe metodene som du trenger, men det er mulig du må ettergå steget for hånd.</li>
<li>For å kunne mocke ut ServiceImplementation er det kjekt å ha et interface, for eksempel kallt ServiceInterface. Din IDE har antageligvis innebygget støtte for dette. Se etter &#8220;Extract Interface&#8221; i Refactoring menyen.</li>
<li>La en ny klasse ServiceDelegator som skal erstatte StaticService.  Legg til en private static felt til ServiceInterface. I code menyen til IDEA og i Source menyen finnes valget &#8220;(Generate) Delegate methods&#8221;. IDEA gjør disse metodene static dersom feltet er static, men det gjør dessverre ikke Eclipse. I Eclipse må man bruke &#8220;søk/erstatt&#8221; for å legge til &#8220;static&#8221; (erstatt &#8220;public&#8221; med &#8220;public static&#8221;, men pass opp for &#8220;public class&#8221; i toppen av filen)</li>
<li>Så kommer det skumle. Slett StaticService og omdøp ServiceDelegator til static service. Her vil refactoringstøtten i IDE&#8217;en din virke mot deg. All koden burde nå fortsatt kompilere uten endring.</li>
<li>Så er det bare å gjøre instansfeltet i servicen aksesserbart av testene (for eksempel med en setter) og du kan mocke ut ServiceInterface til hjertens lyst og glede</li>
</ol>
</div>
<p>Lykke til med ditt testbare prosjekt!</p></div>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/01/21/hvordan-endre-en-statisk-klasse-til-en-dynamisk-singleton/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Min første katacast</title>
		<link>http://sterkblanding.no/blog/2010/01/21/min-f%c3%b8rste-katacast/</link>
		<comments>http://sterkblanding.no/blog/2010/01/21/min-f%c3%b8rste-katacast/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 08:51:40 +0000</pubDate>
		<dc:creator>Johannes Brodwall</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://sterkblanding.no/?p=42</guid>
		<description><![CDATA[Etter at jeg så noen artige eksempler på programmere som jobbet med øvelsesprogrammering på KataCasts, bestemte jeg meg for å spille inn min egen video. Jeg er rimelig fornøyd, men jeg feilberegner bakgrunnsmusikken med cirka ett minutt. (Det gikk fortere på innspillingen enn på generalprøven). Uten mer om og men, poster jeg en video her [...]]]></description>
			<content:encoded><![CDATA[<p>Etter at jeg så noen artige eksempler på programmere som jobbet med øvelsesprogrammering på <a href="http://www.katacasts.com/">KataCasts</a>, bestemte jeg meg for å spille inn min egen video. Jeg er rimelig fornøyd, men jeg feilberegner bakgrunnsmusikken med cirka ett minutt. (Det gikk fortere på innspillingen enn på generalprøven).</p>
<p><span id="more-42"></span></p>
<p>Uten mer om og men, poster jeg en video her av hvordan jeg liker å jobbe med tester for å drive fram &#8220;kravene&#8221; til en applikasjon og refactoring for å forme designet til applikasjonen. Se spesielt rundt 11:30 minutter inn i videoen hvor jeg refactorer inn et regelmotordesign i en fungerende løsning.</p>
<p>Oppgaven kalles &#8220;Fizz buzz kataen&#8221;. Den går ut på å generere en sekvens av nummer der hvert tall som er delelig på 3 erstattes med &#8220;fizz&#8221; og alle tall som er delelig på 5 erstattes med &#8220;buzz&#8221;. Så starten blir &#8220;1, 2, fizz, 4, buzz, fizz, 7, 8, fizz, buzz, 11, etc.&#8221; Seks minutter inn i kataen endres kravet (og musikken!): Nå skal man kunne programmere inn hvilke erstatningsregler som gjelder. Som eksempel bruker jeg at &#8220;tall delelig med 2 skal erstattes med &#8216;coconut&#8217; og tall delelig med 7 skal erstattes med &#8216;banana&#8217;&#8221;.</p>
<p>Takk til Emily Bache for inspirasjon til oppgaven.</p>
<p><a href="http://vimeo.com/8459948">Fizz buzz code kata</a> av <a href="http://vimeo.com/user2873956">Johannes Brodwall</a> på <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Jeg bruker <a href="http://www.jetbrains.com/idea/free_java_ide.html">IntelliJ IDEA Community Edition</a> på Windows Vista (!) til å løse oppgaven. Videoen er filmet med <a href="http://www.bbsoftware.co.uk/BBFlashBack_FreePlayer.aspx?cc=true">BB FlashBack Express</a> (som er gratis), konvertert til AVI med Windows Media 1 codec og lastet opp til Vimeo.</p>
<p>Denne blogposten var originalt publisert på engelsk på <a href="http://johannesbrodwall.com">min personlige blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sterkblanding.no/blog/2010/01/21/min-f%c3%b8rste-katacast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

