<?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/"
	>

<channel>
	<title>Fredriks anteckningar</title>
	<atom:link href="http://wendt.se/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://wendt.se/blog</link>
	<description>Tankar, idéer och reflektioner</description>
	<pubDate>Sun, 22 Aug 2010 22:08:43 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='wendt.se' port='80' path='/blog/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>Agile Testing Days 2010 coming up</title>
		<link>http://wendt.se/blog/2010/08/23/agile-testing-days-2010-coming-up/</link>
		<comments>http://wendt.se/blog/2010/08/23/agile-testing-days-2010-coming-up/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 22:08:43 +0000</pubDate>
		<dc:creator>Fredrik Wendt</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[agile]]></category>

		<category><![CDATA[atd]]></category>

		<category><![CDATA[coding dojo]]></category>

		<category><![CDATA[conference]]></category>

		<category><![CDATA[tdd]]></category>

		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://wendt.se/blog/?p=385</guid>
		<description><![CDATA[In about six weeks I&#8217;ll give a talk at Agile Testing Days together with Emily Bache. The talk&#8217;s title is set to &#8220;The Coding Dojo
as a forum for teaching TDD&#8221; and we are last to speak on Wednesday before the final key note of the day (and the &#8220;chill out&#8221; event). I&#8217;m looking forward to [...]]]></description>
			<content:encoded><![CDATA[<p><div class="wp-caption alignright" style="width: 210px"><a href="http://www.agiletestingdays.com/"><img title="I'm a speaker at Agile Testing Days 2010" src="http://wendt.se/gfx/speaker_at_agiletestingdays.jpg" alt="Speaker at Agile Testing Days 2010" width="200" height="100" /></a><p class="wp-caption-text">I&#39;ll Be There</p></div><br />
In about six weeks I&#8217;ll give a talk at <a href="http://www.agiletestingdays.com">Agile Testing Days</a> together with <a href="http://emilybache.blogspot.com/">Emily Bache</a>. The talk&#8217;s title is set to &#8220;The Coding Dojo<br />
as a forum for teaching TDD&#8221; and we are last to speak <a href="http://www.agiletestingdays.com/overview.php">on Wednesday</a> before the final key note of the day (and the &#8220;chill out&#8221; event). I&#8217;m looking forward to the conference which I&#8217;m sure will be full of insights and rewarding in many ways.</p>
]]></content:encoded>
			<wfw:commentRss>http://wendt.se/blog/2010/08/23/agile-testing-days-2010-coming-up/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bok: Test-Driven Development</title>
		<link>http://wendt.se/blog/2010/08/17/bok-test-driven-development/</link>
		<comments>http://wendt.se/blog/2010/08/17/bok-test-driven-development/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 20:30:04 +0000</pubDate>
		<dc:creator>Fredrik Wendt</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[bok]]></category>

		<category><![CDATA[bokrecension]]></category>

		<category><![CDATA[book]]></category>

		<category><![CDATA[isbn]]></category>

		<category><![CDATA[review]]></category>

		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://wendt.se/blog/?p=383</guid>
		<description><![CDATA[Test-Driven Development By Example
av Kent Beck
ISBN: 9780321146533
Detta är en bok som i tre steg visar hur Kent Beck tycker man skall skriva kod. Boken är lättläst, enkel att förstå och Beck är ganska tydlig i vad  han menar och hur han föreslår att man skall jobba.
Min behållning av boken är den lilla privata lappen med &#8220;test [...]]]></description>
			<content:encoded><![CDATA[<h1>Test-Driven Development <strong>By Example</strong></h1>
<h2>av Kent Beck</h2>
<p>ISBN: 9780321146533</p>
<p>Detta är en bok som i tre steg visar hur Kent Beck tycker man skall skriva kod. Boken är lättläst, enkel att förstå och Beck är ganska tydlig i vad  han menar och hur han föreslår att man skall jobba.</p>
<p>Min behållning av boken är den lilla privata lappen med &#8220;test att skriva&#8221; - något som han alltså förespråkar men som jag själv aldrig använt i större utsträckning. Jag petar istället ner alla test-idéer i kod, typ:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// FIXME: testa null</span></pre></div></div>

<p>Om jag skall ge mig på att sammanfatta vad han förespråkar så är det:</p>
<ul>
<li>börja litet</li>
<li>använd en lista där du skriver upp testfall som du vet eller kommer på behöver testas</li>
<li>låt design växa fram</li>
<li>använd refaktoreringssteget till att skriva den riktiga implementation</li>
<li>misslyckas man med ett stort test, skriv ett mindre istället</li>
<li>få hellre ett test till att gå igenom än att ha vacker kod</li>
</ul>
<p>Jag rekomenderar boken till någon som har ett hum om vad TDD är men som inte sett hur det kan fungera i praktiken. Kodexemplen är visserligen ganska lätta men det intressanta är att se hur han jobbar med problemlösning, vad TDD-metodiken ger och att det banne mig inte är svårt att börja.</p>
]]></content:encoded>
			<wfw:commentRss>http://wendt.se/blog/2010/08/17/bok-test-driven-development/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Build.version</title>
		<link>http://wendt.se/blog/2010/08/08/buildversion/</link>
		<comments>http://wendt.se/blog/2010/08/08/buildversion/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 21:08:58 +0000</pubDate>
		<dc:creator>Fredrik Wendt</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://wendt.se/blog/?p=381</guid>
		<description><![CDATA[Med hjälp av MANIFEST

&#60;build&#62;&#60;plugins&#62;&#60;plugin&#62;
				&#60;groupid&#62;org.codehaus.mojo&#60;/groupid&#62;
				&#60;artifactid&#62;maven-buildnumber-plugin&#60;/artifactid&#62;
				&#60;version&#62;0.9.6&#60;/version&#62;
				&#60;executions&#62;
					&#60;execution&#62;
						&#60;phase&#62;validate&#60;/phase&#62;
						&#60;goals&#62;
							&#60;goal&#62;create&#60;/goal&#62;
						&#60;/goals&#62;
					&#60;/execution&#62;
				&#60;/executions&#62;
			&#60;/plugin&#62;
&#60;/plugins&#62;&#60;/build&#62;

Denna plugin kräver att man satt upp SCM ordentligt så att versionnummer kan hämtas därifrån!

&#60;build&#62;&#60;plugins&#62;&#60;plugin&#62;
				&#60;groupid&#62;org.apache.maven.plugins&#60;/groupid&#62;
				&#60;artifactid&#62;maven-war-plugin&#60;/artifactid&#62;
				&#60;version&#62;2.0&#60;/version&#62;
				&#60;configuration&#62;
					&#60;archive&#62;
						&#60;manifestentries&#62;
							&#60;implementation -Build&#62;${buildNumber}&#60;/implementation&#62;
						&#60;/manifestentries&#62;
					&#60;/archive&#62;
				&#60;/configuration&#62;
			&#60;/plugin&#62;
&#60;/plugins&#62;&#60;/build&#62;


	private String readBuildNumber&#40;ServletContext servletContext&#41; &#123;
		try &#123;
			URL resource = servletContext.getResource&#40;&#34;/META-INF/MANIFEST.MF&#34;&#41;;
			InputStream manifestStream = resource.openStream&#40;&#41;;
			Manifest mf = new Manifest&#40;manifestStream&#41;;
			Attributes atts = mf.getMainAttributes&#40;&#41;;
			String value = atts.getValue&#40;&#34;Implementation-Build&#34;&#41;;
			if &#40;value == null&#41; &#123;
				throw new IllegalArgumentException&#40;&#34;Implementation-Build attribute is not set in MANIFEST &#34; + resource.toExternalForm&#40;&#41;&#41;;
			&#125;
			manifestStream.close&#40;&#41;;
			return [...]]]></description>
			<content:encoded><![CDATA[<h2>Med hjälp av MANIFEST</h2>

<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;build<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupid<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.codehaus.mojo<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupid<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactid<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-buildnumber-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactid<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>0.9.6<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
					<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
						<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>validate<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
						<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
							<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>create<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
						<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
					<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Denna plugin kräver att man satt upp SCM ordentligt så att versionnummer kan hämtas därifrån!</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;build<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupid<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.apache.maven.plugins<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupid<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactid<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-war-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactid<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2.0<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
					<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;archive<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
						<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;manifestentries<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
							<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;implementation</span> -Build<span style="color: #000000; font-weight: bold;">&gt;</span></span>${buildNumber}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/implementation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
						<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/manifestentries<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
					<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/archive<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> readBuildNumber<span style="color: #009900;">&#40;</span>ServletContext servletContext<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #003399;">URL</span> resource <span style="color: #339933;">=</span> servletContext.<span style="color: #006633;">getResource</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/META-INF/MANIFEST.MF&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">InputStream</span> manifestStream <span style="color: #339933;">=</span> resource.<span style="color: #006633;">openStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">Manifest</span> mf <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Manifest</span><span style="color: #009900;">&#40;</span>manifestStream<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">Attributes</span> atts <span style="color: #339933;">=</span> mf.<span style="color: #006633;">getMainAttributes</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">String</span> value <span style="color: #339933;">=</span> atts.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Implementation-Build&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>value <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">IllegalArgumentException</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Implementation-Build attribute is not set in MANIFEST &quot;</span> <span style="color: #339933;">+</span> resource.<span style="color: #006633;">toExternalForm</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			manifestStream.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">return</span> value<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">IllegalStateException</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Failed to read Implementation-Build attribute from MANIFEST.MF&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>

<h2>Eller som vanlig resource (properties)</h2>

<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;build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;resources<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;resource<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;directory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>src/main/resources<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/directory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filtering<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/filtering<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/resource<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/resources<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://wendt.se/blog/2010/08/08/buildversion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>assertThat(Hamcrest).looksNice();</title>
		<link>http://wendt.se/blog/2010/08/02/assertthathamcrestlooksnice/</link>
		<comments>http://wendt.se/blog/2010/08/02/assertthathamcrestlooksnice/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 10:06:11 +0000</pubDate>
		<dc:creator>Fredrik Wendt</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[jsolutions]]></category>

		<category><![CDATA[assertThat]]></category>

		<category><![CDATA[hamcrest]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[junit]]></category>

		<category><![CDATA[tdd]]></category>

		<category><![CDATA[testing]]></category>

		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://wendt.se/blog/?p=374</guid>
		<description><![CDATA[I väntan på David Saff&#8217;s alternative assertThat(x).y() så nöjer jag mig med:

public class EmptyMatcher extends TypeSafeMatcher&#38;lt;Collection &#60; ?&#62;&#62; &#123;
&#160;
    @Override
    public boolean matchesSafely&#40;Collection&#60; ?&#62; c&#41; &#123;
        return c.isEmpty&#40;&#41;;
    &#125;
&#160;
    public void describeTo&#40;Description desc&#41; &#123;
   [...]]]></description>
			<content:encoded><![CDATA[<p>I väntan på David Saff&#8217;s alternative <code>assertThat(x).y()</code> så nöjer jag mig med:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> EmptyMatcher <span style="color: #000000; font-weight: bold;">extends</span> TypeSafeMatcher<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>Collection <span style="color: #339933;">&lt;</span> <span style="color: #339933;">?&gt;&gt;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> matchesSafely<span style="color: #009900;">&#40;</span>Collection<span style="color: #339933;">&lt;</span> <span style="color: #339933;">?&gt;</span> c<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> c.<span style="color: #006633;">isEmpty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> describeTo<span style="color: #009900;">&#40;</span>Description desc<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        desc.<span style="color: #006633;">appendText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;empty&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Factory
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> lt<span style="color: #339933;">;</span>T<span style="color: #339933;">&gt;</span> Matcher<span style="color: #339933;">&lt;</span> <span style="color: #339933;">?</span> <span style="color: #000000; font-weight: bold;">super</span> Collection<span style="color: #339933;">&lt;?&gt;&gt;</span> isEmpty<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">new</span> EmptyMatcher<span style="color: #009900;">&#40;</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>som gör att man kan skriva trevlig enkelt läsbar kod, t ex:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@Test
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> filteringAnEmptyListReturnsAnEmptyList<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">List</span> anEmptyList <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">List</span> result <span style="color: #339933;">=</span> testee.<span style="color: #006633;">filter</span><span style="color: #009900;">&#40;</span>emptyList<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    assertThat<span style="color: #009900;">&#40;</span>result, isEmpty<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// men helst: assertThat(result).isEmpty();</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://wendt.se/blog/2010/08/02/assertthathamcrestlooksnice/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Webbtryck.se igång</title>
		<link>http://wendt.se/blog/2010/07/12/webbtryckse-igang/</link>
		<comments>http://wendt.se/blog/2010/07/12/webbtryckse-igang/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 12:08:17 +0000</pubDate>
		<dc:creator>Fredrik Wendt</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wendt.se/blog/?p=372</guid>
		<description><![CDATA[Tomas Ekman (tidigare på Tryck Till Tusen Grafiska, nu på Brilliant Smile) frågade mig om jag kunde göra en web-to-print-lösning åt honom. Det gjorde jag på knappt 25 timmar och resultatet kör nu live på webbtryck.se.
Lösningen fungerar fint och Tomas kunder (mäklare där två kontor nu kör för fullt) är nöjda, så pass nöjda att [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://caught.se">Tomas Ekman</a> (tidigare på Tryck Till Tusen Grafiska, nu på <a href="http://brilliantsmile.se">Brilliant Smile</a>) frågade mig om jag kunde göra en web-to-print-lösning åt honom. Det gjorde jag på knappt 25 timmar och resultatet kör nu live på <a title="Webbtryck.se - förenklar beställning av mallbaserade trycksaker" href="http://webbtryck.se">webbtryck.se</a>.</p>
<p>Lösningen fungerar fint och Tomas kunder (mäklare där två kontor nu kör för fullt) är nöjda, så pass nöjda att jag skall försöka se om vi inte kan få fler kunder att använda systemet.</p>
]]></content:encoded>
			<wfw:commentRss>http://wendt.se/blog/2010/07/12/webbtryckse-igang/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Optimera Stockholm</title>
		<link>http://wendt.se/blog/2010/05/31/optimera-stockholm/</link>
		<comments>http://wendt.se/blog/2010/05/31/optimera-stockholm/#comments</comments>
		<pubDate>Mon, 31 May 2010 18:39:51 +0000</pubDate>
		<dc:creator>Fredrik Wendt</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[optsthlm]]></category>

		<category><![CDATA[squid]]></category>

		<category><![CDATA[swdc]]></category>

		<category><![CDATA[tcp]]></category>

		<category><![CDATA[web]]></category>

		<category><![CDATA[webb]]></category>

		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://wendt.se/blog/?p=367</guid>
		<description><![CDATA[Det är lite lockande att som Göteborgare passa på att skämta om bästkust och hur man har behov av optimering i Stockholm medan allt är fint i Götet, men dagens seminarie/minikonferens (twittertag #optsthlm) på ämnet webboptimering/webbprestanda förtjänar inget annat än lovord! Talarnas ämnen och innehåll var mycket väl utspridda över hela problemrymden från server till [...]]]></description>
			<content:encoded><![CDATA[<p>Det är lite lockande att som Göteborgare passa på att skämta om bästkust och hur man har behov av optimering i Stockholm medan allt är fint i Götet, men <a href="http://www.internetdagarna.se/pages/seminarier/optimera-sthlm">dagens seminarie/minikonferens</a> (twittertag <a href="http://twitter.com/#search?q=%23optsthlm">#optsthlm</a>) på ämnet webboptimering/webbprestanda förtjänar inget annat än lovord! Talarnas ämnen och innehåll var mycket väl utspridda över hela problemrymden från server till klient och allt där mellan.<span id="more-367"></span>Organisatörerna skötte sig bra i alla hänseende, t ex i form av val av lokal, livesändning (som flera följde och kommenterade över twitter), strömförsörjning, hålla tiden och i allmänhet hålla sig i bakgrunden för att släppa fram talare och deras ämnen. Kanon! Innan jag sammanfattar dagens ämnen skall kort konstruktiv kritik framföras för det som kan förbättras: starta en kvart senare (9:15 istället för 9) så hinner man som Göteborgare och lite mer fikatid så blir det perfekt! :)</p>
<h2>Introduktion</h2>
<p><em>Måns Jonasson (<a href="http://twitter.com/mansj">@mansj</a>) </em>från .SE började med att jämföra med webben 1996, en tid då alla satt med 14.4-modem och bandbredd var både långsamt och smalt. På den tiden optimerade alla sina webbsidor för att ladda snabbt - optimering var naturligt och vanliga webbkonton hos t ex Algonet tilldelades hela 5 MB lagringsplats. Nu för tiden är disk på servrar billigt, liksom bandbredd (trafik och kapacitet) och Måns pekar på någon form av &#8220;alla har ju bredband ändå&#8221;-mentalitet. Tre saker utpekas som orsaker till att optimering inte genomförs:</p>
<ul>
<li>tidsbrist nedprioriterar optimering,</li>
<li>erfarenhetsbrist - &#8220;varför skall man bry sig om att vinna en sekund snabbare laddning&#8221;?</li>
<li>pengar - det kostar.</li>
</ul>
<p>(Jag hade ju hävdat att tid är pengar och därför är det bara två punkter som pekas ut &#8230; :)</p>
<h2>Hälsoläget</h2>
<p><em>Patrik Wallström (<a href="http://twitter.com/pawal">@pawal</a>)</em> från .SE tog därefter över stafettpinnen och berättade om vad &#8220;Rapport Hälsoläget&#8221; är och hur .SE mäter och utvärderar hur &#8220;internet&#8221; fungerar. Bl a innehåller rapporten analys av DNS-delegeringen (<a href="http://dnscheck.iis.se/">dnscheck</a>) av domäner under .se, kontroll av e-postsystem (<a href="http://mailcheck.iis.se/">mailcheck</a>) inkl anti-phishing-tekniker som SPF, DKIM, TLS*, ADSP.</p>
<p>Hälsoläget är numera data-insamlad en gång i månaden. Medelstorlek på en webbplats under .se ligger på ca 200KB, fler och fler använder gzip. De 100 snabbaste siterna var i princip &#8220;It works!&#8221;-sidor från Apache (föga intressant) så Patrik hade istället tittat på de 100 långsammaste, som alla var långsamma CMS-installationer (Joomla, WordPress, Sharepoint). För identifiering har trends.builtwith.com använts hittills, men whatweb kommer nog användas (och utökas) i framtiden. Förslag på vad som kan och bör mätas mottogs tacksamt och jag föreslog att man försöker mäta upp hur dåliga DNS-servrarna är hos <span style="text-decoration: line-through;">ComHem</span> de få ISP:er vi har i landet (eftersom ISP:erna själva inte ser det som ett problem tycker jag det skall lyftas fram av de som kan lyfta fram det i ljuset).</p>
<h2>Optimera WordPress</h2>
<p><a href="http://twitter.com/eriktorsner">Erik Torsner</a> från <a href="http://twitter.com/loadimpact">LoadImpact.com</a> pratade om problemen som WordPress dras med och det främsta är minnesförbrukning för att generera sidor. En ren 2.9-installation kräver 16 MB per anrop till en sida med ett bloginlägg. Plugins som All-in-one SEO och Similar Posts lägger vardera på 1 MB. Värstingen är WPML (flerspråksplugin) som trycker upp minnesförbrukningen till 70 MB per anrop!</p>
<p>Ett par tips lämnades. Först ett par allmäna som att se över databas och mäta minnes- och CPU-förbrukning (lägg in en memory_get_peak_usage() i footern). Därefter tipsades om att använda en cache-funktion, t ex någon av alla de WP-plugins som finns. W3 Total Cache (W3TC) kan komprimera, minifiera, kombinera script-anrop och stödjer hosting av media på CDN. Dessutom kan den &#8220;kortsluta&#8221; (kringgå hade jag kallat det) PHP-stacken genom att skriva ner resultatet för en sida till disk och låta Apache serva den direkt (via mod_rewrite-magi).</p>
<p><a href="http://swedishstartups.ning.com/profile/RagnarLonn">Ragnar Lönn</a> från samma bolag fortsatte sedan med att tipsa om mätverktyg. Påminde också om att Google sedan 2008 väger in landningssidans laddtid i AdWords quality score. Han nämnde också Shopzilla som genom att sänka sin laddtid från 7 sekunder till 2, såg:</p>
<ul>
<li>25 % fler sidvisningar,</li>
<li>10 % ökade intäkter, och</li>
<li>fick 50 % lägre infrastrukturkostnader.</li>
</ul>
<p><em>Sidanalys</em></p>
<ul>
<li>Firebug med
<ul>
<li>YSlow och</li>
<li>Google Page Speed.</li>
</ul>
</li>
</ul>
<p>(Ragnar påstår i förbifarten att POST för Ajax är lika bra som GET(!) - YSlow hävdar motsatsen.)</p>
<p><em>Extern sidanalys (alla gratis i viss omfattning, men inte fria)</em></p>
<ul>
<li>pingdom tools (minus är att de inte parse:ar CSS:en och därmed inte tankar grafik som tankas i vanliga fall)</li>
<li>Load Impact Page Analyzer - emulerar olika klienter, kan begränsa bandbredd</li>
<li>webpagetest.org - bara IE7 IE8</li>
<li>browsershots.org</li>
</ul>
<p><em>Lasttest<br />
</em></p>
<ul>
<li>grinder (saknar bra medföljande GUI)</li>
<li>openSTA (windows only)</li>
<li>Apache Bench</li>
<li>Load Impacts eget verktyg</li>
<li>browsermob.com</li>
<li>loadstorm</li>
</ul>
<p>Fikapaus med frukt, kaffe/te och småmackor.</p>
<h2>Ajax och REST</h2>
<p><em><a href="http://twitter.com/stpe">Stefan Pettersson</a></em> från Netlight pratade sedan om hur han föreslår att man kan  &#8220;Snabbare tjänster med Ajax och REST&#8221;. Innehållet var det inget fel på  alls men så basic att jag inte förde en enda anteckning (förutom på min  frågelapp, nämligen att de &#8220;hajpade noSQL-alternativen&#8221; faktiskt också skalar  bort en box i hans presentation - datakonverteringen, lite bakläxa där  tycker jag på ett annars bra innehåll).</p>
<h2>Mer data på kortare tid, tack!</h2>
<p><a href="http://twitter.com/bagder">Daniel Stenberg</a> från haxx fortsatte sedan med den tekniktungaste presentationen som rörde sig på transportnivå och pratade om problem med TCP och möjligheter med nya protokoll och experiment. Han sammanfattade själv i följande punkter:</p>
<ul>
<li>RTT står i princip still trots att bandbredd ökar</li>
<li>TCP har fördröjning och det drabbar HTTP (och alternativ finns, men till skillnad från IPv4-IPv6 så står ingen och säger &#8220;nu MÅSTE vi byta&#8221;, betänk t ex alla brandväggslösningar som inte vill ha SCTP)</li>
<li>använda rätt API:er (libevent vs poll/select) - upp till 70 % bättre throughput</li>
<li>WebSockets, SPDY, SCTP, MPTCP</li>
</ul>
<p>Daniel skulle inte bli förvånad om MPTCP (multi path) blir verklighet snart, dvs att man kan nyttja t ex både WLAN och GPRS/motsv från sina mobila enheter samtidigt.</p>
<p>Lunch.</p>
<h2>Skalbarhet i molnet</h2>
<p><a href="http://twitter.com/martinkallstrom">Martin Källström</a> från Twingly gick igenom grunderna i skalbarhet och landade tillslut i att det finns ingen teknik som ger skalbarhet från början, utan detta är något man bygger in i s in applikation (om han inte kört dotnet så mycket kanske han vetat att JEE-specen tar upp horisontell skalbarhet och &#8220;ger&#8221; (säljer in) stöd för det).</p>
<p>Konkreta tips delas liksom erfarenheter av t ex Amazon S3 (dyrt, långsamt, support kostar extra). Det dyra för twingly är de ca 4 miljarder anropen man får per månad - datamängden är inte stor alls. För skalning av long-polling-lösningar (Comet) använder man Hetzner.de. Andra erfarenheter Martin talade om var problematik kring:</p>
<ul>
<li>nertid och serverflytt,</li>
<li>Comet kräver systemkonfiguration som saknades i VPS,</li>
<li>fluktuerande valuta (balansera med intäkter i de aktuella valutorna).</li>
</ul>
<h2>Klientsideoptimering</h2>
<p><a href="http://twitter.com/svante">Svante Adermark</a> (med kompis) från <a href="http://twitter.com/trimlabb">Trimlabb</a> (del av Fleecelabs) var först ut på detta ämne och gav en presentation som innehållsmässigt var väldigt lik <a href="http://wendt.se/blog/2010/02/10/webboptimering/">den presentation jag höll</a> för dotnet- och JavaForum i februari! (Jag försökte ha bilder istället för text.) Vi hade nästan exakt samma rekomendationer om lågt hängande frukter och ev skillnader tjötade vi om under eftermiddagens</p>
<p>Fikapaus.</p>
<h2>Optimering av stockholm.se</h2>
<p><a href="http://twitter.com/icaaq">Isac Lagerblad</a> från Creuna pratade sedan om hur man hade tagit steget ut ur garderoben och tagit tag i webbplatsens prestanda med bl a CSS-spriting, minifiering och konkatenering &#8230; Dyrast tyckte Isac att konkatenering varit, samt underhåll av CSS-sprites.</p>
<h2>JavaScriptoptimering</h2>
<p><a href="http://twitter.com/jakewins">Jacob Hansson</a> från Skyforge och VoltVoodoo höll dagens intressantaste presentation (tyckte jag) med lite tips och nyheter som jag inte sett tidigare: Speedtracer för Google Chrome. Seesmic hade tjänat tre sekunder i uppstarttid på någon applikation genom att slå ihop Ajax-anrop istället för att skicka dem ett och ett. Rekomenderade också att man lägger tid på code-splitting (optimera startsida från de andra t ex).</p>
<p>Övriga tips var att hålla sig under 50 millisekunder i all exekvering. Med QUnit och JSLitmus föreslog Jacob att man skall se till att man håller sig under den gränsen (regressionstester) och jake är ett byggverktyg som han förordade. För testning i multipla browsers nämnde han två lösningar: JS Test Driver och Mozillas croud source-baserade lösning.</p>
<p>Ingen nämnde under dagen lazy-laddning av JavaScript som kommer utkommenterad från serversidan, som sedan kan aktiveras vid behov genom att evaluera koden utan start- och slutmarkörer: eval(src.substring(2, src.length - 2)).</p>
<h2>Squid och andra cachelösningar</h2>
<p><a href="http://devel.squid-cache.org/hno/">Henrik Nordström</a> avslutade dagen genom att titta på hur man kan sätta upp squid som reverse proxy för att avlasta, lastbalancera osv. Henrik gav sig också på att uppmuntra till alla att få Etag-headern rätt använd - modigt! :)</p>
<h2>Sammanfattning</h2>
<p>Detta var kanon och blev lite plåster på såren för att jag missar SWDC i år också. :P</p>
]]></content:encoded>
			<wfw:commentRss>http://wendt.se/blog/2010/05/31/optimera-stockholm/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Speed Matters</title>
		<link>http://wendt.se/blog/2010/05/29/speed-matters/</link>
		<comments>http://wendt.se/blog/2010/05/29/speed-matters/#comments</comments>
		<pubDate>Sat, 29 May 2010 11:26:51 +0000</pubDate>
		<dc:creator>Fredrik Wendt</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[speed]]></category>

		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://wendt.se/blog/?p=365</guid>
		<description><![CDATA[Some high traffic sites conducted research and uncovered the following:

Google.com: +500 ms (speed decrease) -&#62; -20% traffic loss [1]
Yahoo.com: +400 ms (speed decrease) -&#62; -5-9% full-page traffic loss (visitor left before the page finished loading) [2]
Amazon.com: +100 ms (speed decrease) -&#62; -1% sales loss [1]

[1] http://home.blarg.net/~glinden/StanfordDataMining.2006-11-29.ppt
[2] http://www.slideshare.net/stoyan/yslow-20-presentation
]]></description>
			<content:encoded><![CDATA[<p>Some high traffic sites conducted research and uncovered the following:</p>
<ul>
<li>Google.com: +500 ms (speed decrease) -&gt; -20% traffic loss [1]</li>
<li>Yahoo.com: +400 ms (speed decrease) -&gt; -5-9% full-page traffic loss (visitor left before the page finished loading) [2]</li>
<li>Amazon.com: +100 ms (speed decrease) -&gt; -1% sales loss [1]</li>
</ul>
<p>[1] <a href="http://home.blarg.net/~glinden/StanfordDataMining.2006-11-29.ppt">http://home.blarg.net/~glinden/StanfordDataMining.2006-11-29.ppt</a><br />
[2] <a href="http://www.slideshare.net/stoyan/yslow-20-presentation">http://www.slideshare.net/stoyan/yslow-20-presentation</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wendt.se/blog/2010/05/29/speed-matters/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Signeringsfest: GPG och CA Fire and Forget</title>
		<link>http://wendt.se/blog/2010/05/15/signeringsfest-gpg-och-ca-fire-and-forget/</link>
		<comments>http://wendt.se/blog/2010/05/15/signeringsfest-gpg-och-ca-fire-and-forget/#comments</comments>
		<pubDate>Sat, 15 May 2010 10:19:31 +0000</pubDate>
		<dc:creator>Fredrik Wendt</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wendt.se/blog/?p=361</guid>
		<description><![CDATA[Jag var för första gången med vid en stor &#8220;signeringsfest&#8221; på Fosdem2010 - över 250 nycklar var inskickade men i slutändan var det inte fler än 80 som dök upp i kylan och duggregnet. (Jag själv kom 20 minuter sent.)
Hur som haver - efteråt gäller det att signera och få iväg de signerade nycklarna. Till [...]]]></description>
			<content:encoded><![CDATA[<p>Jag var för första gången med vid en stor &#8220;signeringsfest&#8221; på Fosdem2010 - över 250 nycklar var inskickade men i slutändan var det inte fler än 80 som dök upp i kylan och duggregnet. (Jag själv kom 20 minuter sent.)</p>
<p>Hur som haver - efteråt gäller det att signera och få iväg de signerade nycklarna. Till detta finns caff, CA Fire and Forget, som just gör det man vill:</p>
<ul>
<li>hämtar hem nyckeln</li>
<li> signerar den</li>
<li>skickar den krypterad till mottagarens adress (bara mottagaren med rätt privat nyckel kan läsa signaturen).</li>
</ul>
<p><code>caff -m yes -u 9B1E4234 `cat keys-to-sign.txt`</code></p>
<p>och detta kommer i paketet <tt>signing-party</tt>.</p>
<p>Det finns dock inget som plockar ut fingerprintdelen ur den ASCII-fil som distribueras, så jag fick hacka ihop detta själv med lite python:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
&nbsp;
indicies = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
keysByIndex = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
lastIndex = <span style="color: #008000;">False</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># get the indexes of the keys &quot;verified&quot;, as they appear on the key paper (000, 001, ...)</span>
<span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;id-verified.txt&quot;</span><span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#41;</span> == <span style="color: #ff4500;">4</span>:
    indicies.<span style="color: black;">append</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span>:<span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># build up index &gt; key part</span>
<span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ksp-fosdem2010.txt&quot;</span><span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #483d8b;">&quot;Fingerprint OK&quot;</span> <span style="color: #ff7700;font-weight:bold;">in</span> line:
    lastIndex = line<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span>:<span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span>
  <span style="color: #ff7700;font-weight:bold;">else</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> lastIndex:
      key = line<span style="color: black;">&#91;</span><span style="color: #ff4500;">12</span>:<span style="color: #ff4500;">20</span><span style="color: black;">&#93;</span>
      keysByIndex<span style="color: black;">&#91;</span>lastIndex<span style="color: black;">&#93;</span> = key
      lastIndex = <span style="color: #008000;">False</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># write keys out to file</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;You've mareked %s out of %s - verify this before running caff&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>indicies<span style="color: black;">&#41;</span>, <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>keysByIndex<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
out = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;keys-to-sign.txt&quot;</span>, <span style="color: #483d8b;">&quot;w&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> index <span style="color: #ff7700;font-weight:bold;">in</span> indicies:
  key = keysByIndex<span style="color: black;">&#91;</span>index<span style="color: black;">&#93;</span>
  out.<span style="color: black;">write</span><span style="color: black;">&#40;</span>key<span style="color: black;">&#41;</span>
  out.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; &quot;</span><span style="color: black;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://wendt.se/blog/2010/05/15/signeringsfest-gpg-och-ca-fire-and-forget/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Peka och klicka-fel</title>
		<link>http://wendt.se/blog/2010/05/14/peka-och-klicka-fel/</link>
		<comments>http://wendt.se/blog/2010/05/14/peka-och-klicka-fel/#comments</comments>
		<pubDate>Fri, 14 May 2010 13:21:12 +0000</pubDate>
		<dc:creator>Fredrik Wendt</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wendt.se/blog/?p=359</guid>
		<description><![CDATA[Jag är helt övertygad om att haveriet i Malmö hade kunnat undvikas om det varit färre peka-och-klicka-kurser för nätverskfolk.
Efter det inträffade har sjukhuset fått installerat en så kallad spanning tree-funktion som förhindrar störningar på grund av felkopplade kablar.
]]></description>
			<content:encoded><![CDATA[<p>Jag är helt övertygad om att <a href="http://www.idg.se/2.1085/1.318433/skulle-koppla-in-dator---sankte-sjukhus">haveriet i Malmö</a> hade kunnat undvikas om det varit färre peka-och-klicka-kurser för nätverskfolk.</p>
<blockquote><p>Efter det inträffade har sjukhuset fått installerat en så kallad spanning tree-funktion som förhindrar störningar på grund av felkopplade kablar.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://wendt.se/blog/2010/05/14/peka-och-klicka-fel/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Getting Things Done &amp; Pomodoro</title>
		<link>http://wendt.se/blog/2010/05/14/getting-things-done-pomodoro/</link>
		<comments>http://wendt.se/blog/2010/05/14/getting-things-done-pomodoro/#comments</comments>
		<pubDate>Fri, 14 May 2010 08:14:13 +0000</pubDate>
		<dc:creator>Fredrik Wendt</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[applet]]></category>

		<category><![CDATA[debuild]]></category>

		<category><![CDATA[gnome]]></category>

		<category><![CDATA[gtd]]></category>

		<category><![CDATA[pomodoro]]></category>

		<category><![CDATA[timer]]></category>

		<guid isPermaLink="false">http://wendt.se/blog/?p=357</guid>
		<description><![CDATA[Emellanåt har jag fler än två saker att göra på jobbet (annat var det förr!) så mitt behov av pomodoro eller annan strategi för att beta av en att göra-lista är mycket begränsat. Lite då och då sitter jag dock med en &#8220;privat&#8221; att göra-lista (som bara växer) och nu är ett sådant tillfälle - [...]]]></description>
			<content:encoded><![CDATA[<p>Emellanåt har jag fler än två saker att göra på jobbet (annat var det förr!) så mitt behov av pomodoro eller annan strategi för att beta av en att göra-lista är mycket begränsat. Lite då och då sitter jag dock med en &#8220;privat&#8221; att göra-lista (som bara växer) och nu är ett sådant tillfälle - &#8220;dags att testa pomodoro&#8221; tänkte jag och letar upp en <a href="https://launchpad.net/pomodoro-timer">Pomodor-timer för Gnome</a> lite snabbt.</p>
<p>Den visar sig inte vara översatt till svenska (använder gtranslator för detta) och den kommer inte förkompilerad som binär. Det var längesedan jag byggde debianpaket, men det brukar vara ganska enkelt. Låt oss se:</p>
<p><code>sudo aptitude install debian-builder</code></p>
<p>Efter uppackning av tar-bollen kör jag debuild som säger:</p>
<p><code>dpkg-checkbuilddeps: Ej uppfyllda byggberoenden: cdbs (&gt;= 0.4.43) debhelper (&gt;= 6) python-distutils-extra (&gt;= 2.10)</code></p>
<p>Så vi drar in dem med: <code>sudo aptitude install cdbs debhelper python-distutils-extra</code> och kör <code>debuild</code> igen.</p>
<p>Bygget fungerade tyvärr inte ändå och fick <a href="https://bugs.launchpad.net/pomodoro-timer/+bug/580379">rapporteras som en bugg</a>. Använder tills vidare <code>timer-applet</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://wendt.se/blog/2010/05/14/getting-things-done-pomodoro/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
