<?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>Kruse-Net.dk</title>
	<atom:link href="http://www.kruse-net.dk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kruse-net.dk</link>
	<description>Det man blogger er man selv...</description>
	<lastBuildDate>Tue, 06 Apr 2010 09:28:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>da</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Fortryd exclusive edit i CVS</title>
		<link>http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/</link>
		<comments>http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 09:28:16 +0000</pubDate>
		<dc:creator>Jakob Kruse</dc:creator>
				<category><![CDATA[Dagens tip]]></category>
		<category><![CDATA[cvs]]></category>

		<guid isPermaLink="false">http://www.kruse-net.dk/?p=261</guid>
		<description><![CDATA[Et tilbagevendende problem, især i forbindelse med nyere versioner af TortoiseCVS, som har exclusive edit funktionalitet som standardopsætning, er at der dukker filer op i mine CVS checkouts i read-only tilstand. CVS understøtter denne funktionalitet, hvor man manuelt skal &#8220;låse en fil op&#8221; før man retter i den, men jeg synes den er mere besvær [...]]]></description>
			<content:encoded><![CDATA[<p>Et tilbagevendende problem, især i forbindelse med nyere versioner af TortoiseCVS, som har exclusive edit funktionalitet som standardopsætning, er at der dukker filer op i mine CVS checkouts i read-only tilstand. CVS understøtter denne funktionalitet, hvor man manuelt skal &#8220;låse en fil op&#8221; før man retter i den, men jeg synes den er mere besvær end den er værd.</p>

<p>Hvis man helst er fri, og man alligevel får koblet funktionaliteten til for nogle filer, så kan den være besværlig at få koblet fra igen, i hvert fald med TortoiseCVS. Men her er opskriften, som kræver en kommando-prompt, samt evt. at man er administrator på CVS serveren.</p>

<p>Hvis filerne er låst af en anden bruger startes med (det er dette trin der kræver at man er admin, ellers må man finde den pågældende bruger og bede vedkommende om at låse filerne op):</p>

<div class="hl-surround" ><div class="hl-main"><pre>cvs unedit -u &lt;brugernavn&gt; &lt;filnavn&gt;</pre></div></div>

<p>Derefter:</p>

<div class="hl-surround" ><div class="hl-main"><pre>cvs update -k-c &lt;filnavn&gt;
cvs commit -f &lt;filnavn&gt;</pre></div></div>

<p>Så skulle problemet være løst. Det kan dog være nødvendigt manuelt at fjerne read-only attributten. Bemærk at man kan bruge wildcards i filnavnet, og at der <strong>ikke</strong> er mellemrum mellem &#8220;-k&#8221; og &#8220;-c&#8221;.</p>


<div class="shr-bookmarks shr-bookmarks-expand">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/feed" rel="nofollow" class="external" title="Abonnér på kommenentarere til dette indlæg?">Abonnér på kommenentarere til dette indlæg?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/&amp;title=Fortryd+exclusive+edit+i+CVS" rel="nofollow" class="external" title="Del dette på del.icio.us">Del dette på del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/&amp;title=Fortryd+exclusive+edit+i+CVS" rel="nofollow" class="external" title="Digg dette!">Digg dette!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/&amp;title=Fortryd+exclusive+edit+i+CVS&amp;desc=Et%20tilbagevendende%20problem%2C%20is%C3%A6r%20i%20forbindelse%20med%20nyere%20versioner%20af%20TortoiseCVS%2C%20som%20har%20exclusive%20edit%20funktionalitet%20som%20standardops%C3%A6tning%2C%20er%20at%20der%20dukker%20filer%20op%20i%20mine%20CVS%20checkouts%20i%20read-only%20tilstand.%20CVS%20underst%C3%B8tter%20denne%20funktionalitet%2C%20hvor%20man%20manuelt%20skal%20%22l%C3%A5se%20en%20fil%20op%22%20f%C3%B8r%20" rel="nofollow" class="external" title="Tilføj dette på Diigo">Tilføj dette på Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/&amp;bm_description=Fortryd+exclusive+edit+i+CVS&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Tilføj dette til Mister Wong">Tilføj dette til Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/&amp;title=Fortryd+exclusive+edit+i+CVS" rel="nofollow" class="external" title="Del dette på Mixx">Del dette på Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/&amp;title=Fortryd+exclusive+edit+i+CVS" rel="nofollow" class="external" title="Del dette på Reddit">Del dette på Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/&amp;title=Fortryd+exclusive+edit+i+CVS" rel="nofollow" class="external" title="Faldet over noget godt? Del det på StumbleUpon">Faldet over noget godt? Del det på StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/" rel="nofollow" class="external" title="Del dette på Technorati">Del dette på Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Fortryd+exclusive+edit+i+CVS+-+http://b2l.me/nf4vk&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet dette!">Tweet dette!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.kruse-net.dk/2010/04/06/fortryd-exclusive-edit-i-cvs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scanduc 09</title>
		<link>http://www.kruse-net.dk/2009/09/25/scanduc-09/</link>
		<comments>http://www.kruse-net.dk/2009/09/25/scanduc-09/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 13:10:01 +0000</pubDate>
		<dc:creator>Jakob Kruse</dc:creator>
				<category><![CDATA[Konferencer]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[dataflex]]></category>
		<category><![CDATA[HL7]]></category>
		<category><![CDATA[opensearch]]></category>
		<category><![CDATA[stockholm]]></category>

		<guid isPermaLink="false">http://www.kruse-net.dk/?p=258</guid>
		<description><![CDATA[Så nærmer 
Scanduc &#8216;09 i Stockholm sig sin ende. For dem der ikke kender den er det den 1½-årlige skandinaviske DataFlex konference. For mit vedkommende startede konferencen onsdag aften &#8212; visse deltagere startede tidligere med nogle præ-konference kurser.

I onsdags var jeg så heldig at få chancen for at snakke med Sonny Falk om 
mit nylige [...]]]></description>
			<content:encoded><![CDATA[<p>Så nærmer 
<a  href="http://www.scanduc.com/" onclick="javascript:pageTracker._trackPageview('/external/www.scanduc.com/');" >Scanduc</a> &#8216;09 i Stockholm sig sin ende. For dem der ikke kender den er det den 1½-årlige skandinaviske DataFlex konference. For mit vedkommende startede konferencen onsdag aften &#8212; visse deltagere startede tidligere med nogle præ-konference kurser.</p>

<p>I onsdags var jeg så heldig at få chancen for at snakke med Sonny Falk om 
<a  href="http://www.kruse-net.dk/wp/wp-content/uploads/2009/09/VDF-Feature-Requests-for-WebApp.pdf" onclick="javascript:pageTracker._trackPageview('/downloads/wp/wp-content/uploads/2009/09/VDF-Feature-Requests-for-WebApp.pdf');" >mit nylige oplæg til forbedringer i WebApp Server</a>. Udgangspunktet var at forsøge at få tilføjet understøttelse for lidt mere detaljeret kontrol over web service formater end automatisk konvertering af interne dataformater giver. Desværre lader det til at 
<a  href="http://www.hl7.org/" onclick="javascript:pageTracker._trackPageview('/external/www.hl7.org/');" >HL7 systemet</a> (et større internationalt sundhedssektor system) spænder ben for mine ønsker. For det første fordi implementering af mine ønsker ikke umiddelbart er nok til at understøtte HL7, og for det andet fordi den retning jeg har udstukket i mit oplæg bliver for kompliceret at forlænge til noget der kan understøtte HL7. Og DataAccess vil gerne understøtte HL7.</p>

<p>I går, torsdag, startede selve foredragene så. Som deltager i Synergy i New Orleans tidligere på året må jeg sige at der var lidt langt mellem guldkornene i går. Dagens højdepunkter var en snak om Web 2.0 Applications af Mike Peat, ikke mindst fordi han nævnte mit navn et par gange undervejs, og så en meget fin bådtur i går aftes. Web 2.0 snakken var en fin lejlighed for Mike til at gøre lidt reklame for &#8220;single-page webapps&#8221;, og samtidig at øge opmærksomheden omkring de nye JSON features der blev tilføjet til VDF i version 15.0. Dagens øvrige præsentationer var mere eller mindre kopier fra Synergy.</p>

<p>Dagen i dag er startet lidt bedre. Knut Sparhell startede med en fin præsentation af hvordan man &#8220;åbner&#8221; sit site for søgemaskiner (via opensearch search provider metadata og support-services) og feed readers (via RSS/Atom feeds). Klaus Berthelsen tog over med en fin præsentation af versioneringssystemer (SVN specifikt), som DataFlex udviklere af en eller anden grund meget sjældent bruger (hvilket er komplet uforståeligt for mig). Vincent&#8217;s traditionelle &#8220;skuffe-præsentation&#8221; (af ting fra Vincents skuffe) var underholdende som sædvanlig. Hans meget brugbare utilities kan hentes på 
<a  href="http://www.dataaccess.eu/" onclick="javascript:pageTracker._trackPageview('/external/www.dataaccess.eu/');" >dataaccess.eu</a>, og der følger som regel kildekode med som er god at lære af. Eddys præsentation af SaaS og Cloud Computing var forfriskende. Det er helt sikkert tillokkende at kunne 
<a  href="http://aws.amazon.com/ec2/" onclick="javascript:pageTracker._trackPageview('/external/aws.amazon.com/ec2/');" >&#8220;købe&#8221; en server på 10 minutter og køre den for 19 cents i timen</a>.</p>

<p>Konkluderende er det en fin konference Front-IT har sat sammen her, desværre med lidt flere gengangere end jeg havde forventet, og det har været en fornøjelse at deltage. Jeg er nødt til at nævne stedet dog: det har foregået på SAS Radisson Strand Hotel i centrum af Stockholm, og det har været lidt skuffende på trods af de fem stjerner på døren. Udsigten fra værelset er skøn (ud over havnen) og sengen er formentlig den bedste jeg har oplevet på et hotelværelse, men så slutter fornøjelsen også. Deres mad har mildest talt været skuffende, og service-niveauet har været ringe. Det er synd, for det er jo sådan noget man senere husker konferencen for &#8212; &#8220;nåå ja, det var dér hvor de serveren torsk med fennikel til frokost&#8221;.</p>

<p>Lad mig slutte med konferencens bedste citat, fra John Tuohy: &#8220;There&#8217;s actually this crazy thing you could do, where you could check the documentation&#8230; but realistically nobody ever does that.&#8221;</p>


<div class="shr-bookmarks shr-bookmarks-expand">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.kruse-net.dk/2009/09/25/scanduc-09/feed" rel="nofollow" class="external" title="Abonnér på kommenentarere til dette indlæg?">Abonnér på kommenentarere til dette indlæg?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.kruse-net.dk/2009/09/25/scanduc-09/&amp;title=Scanduc+09" rel="nofollow" class="external" title="Del dette på del.icio.us">Del dette på del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kruse-net.dk/2009/09/25/scanduc-09/&amp;title=Scanduc+09" rel="nofollow" class="external" title="Digg dette!">Digg dette!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kruse-net.dk/2009/09/25/scanduc-09/&amp;title=Scanduc+09&amp;desc=S%C3%A5%20n%C3%A6rmer%20Scanduc%20%2709%20i%20Stockholm%20sig%20sin%20ende.%20For%20dem%20der%20ikke%20kender%20den%20er%20det%20den%201%C2%BD-%C3%A5rlige%20skandinaviske%20DataFlex%20konference.%20For%20mit%20vedkommende%20startede%20konferencen%20onsdag%20aften%20--%20visse%20deltagere%20startede%20tidligere%20med%20nogle%20pr%C3%A6-konference%20kurser.%0D%0A%0D%0AI%20onsdags%20var%20jeg%20s%C3%A5%20heldig%20at%20f%C3%A5" rel="nofollow" class="external" title="Tilføj dette på Diigo">Tilføj dette på Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.kruse-net.dk/2009/09/25/scanduc-09/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.kruse-net.dk/2009/09/25/scanduc-09/&amp;bm_description=Scanduc+09&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Tilføj dette til Mister Wong">Tilføj dette til Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kruse-net.dk/2009/09/25/scanduc-09/&amp;title=Scanduc+09" rel="nofollow" class="external" title="Del dette på Mixx">Del dette på Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.kruse-net.dk/2009/09/25/scanduc-09/&amp;title=Scanduc+09" rel="nofollow" class="external" title="Del dette på Reddit">Del dette på Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kruse-net.dk/2009/09/25/scanduc-09/&amp;title=Scanduc+09" rel="nofollow" class="external" title="Faldet over noget godt? Del det på StumbleUpon">Faldet over noget godt? Del det på StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.kruse-net.dk/2009/09/25/scanduc-09/" rel="nofollow" class="external" title="Del dette på Technorati">Del dette på Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Scanduc+09+-+http://b2l.me/bzfhe&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet dette!">Tweet dette!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.kruse-net.dk/2009/09/25/scanduc-09/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JSLint Multi 1.1</title>
		<link>http://www.kruse-net.dk/2009/04/20/jslint-multi-11/</link>
		<comments>http://www.kruse-net.dk/2009/04/20/jslint-multi-11/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 21:02:23 +0000</pubDate>
		<dc:creator>Jakob Kruse</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jslint]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.kruse-net.dk/?p=199</guid>
		<description><![CDATA[

Michael Schøler og jeg har netop frigivet version 1.1 af vores Yahoo! Widget til kontrol af Javascript filer: 
JSLint Multi. Vi er meget glade for at kunne meddele at JSLint Multi nu er den &#8220;officielle&#8221; JSLint widget, og der er sket kraftige forbedringer siden version 1.0, hvorfor vi anbefaler at alle opdaterer med det samme.

Siden [...]]]></description>
			<content:encoded><![CDATA[<iframe scrolling="no" frameborder="0" src="http://badge.ydp.clientapps.yahoo.com/badge/widgets/badge?aid=w6586&#038;tc=575757&#038;bc=1a1a1a&#038;cn=jslint-multi" style="width:180px;height:190px;padding:0;border:0;float:right" allowTransparency="true"></iframe>

<p>
<a  href="http://michael.hinnerup.net/" onclick="javascript:pageTracker._trackPageview('/external/michael.hinnerup.net/');" >Michael Schøler</a> og jeg har netop frigivet version 1.1 af vores Yahoo! Widget til kontrol af Javascript filer: 
<a  href="http://code.google.com/p/jslint-multi-widget/" onclick="javascript:pageTracker._trackPageview('/external/code.google.com/p/jslint-multi-widget/');" >JSLint Multi</a>. Vi er meget glade for at kunne meddele at JSLint Multi nu er den &#8220;officielle&#8221; JSLint widget, og der er sket kraftige forbedringer siden version 1.0, hvorfor vi anbefaler at alle opdaterer med det samme.</p>

<p>Siden vi frigav version 1.0 har Yahoo! godkendt og inkluderet JSLint Multi på deres widget site. Hvis du 
<a  href="http://widgets.yahoo.com/widgets/jslint-multi" onclick="javascript:pageTracker._trackPageview('/external/widgets.yahoo.com/widgets/jslint-multi');" >henter og installerer JSLint Multi derfra</a>, får du automatisk tilbudt opdateringer for fremtiden. Hvis du bruger en af de få browsere Yahoo&#8217;s inpage installer understøtter kan du også anvende knappen til højre. Bemærk dog at Yahoo! til tider kan være lang tid om at få opdateret deres Widget Gallery, så der kan gå noget tid før version 1.1 dukker op dér.</p>

<p>Nyhederne i version 1.1 er:</p>

<ul>
<li>JSLint er opdateret til 2009-04-19 versionen.</li>
<li>Der er tilføjet understøttelse for den nye &#8220;newcap&#8221; option, som gør det muligt at fravælge kontrol af at constructors starter med stort bogstav.</li>
<li>Der er tilføjet understøttelse for den nye &#8220;immed&#8221; option, som gør det muligt at kontrollere anbefalet syntaks for &#8220;immediate function invocations&#8221;.</li>
<li>Vi har opdaget en alvorlig memory leak i Yahoo! Widget Engine og arbejdet udenom den. Som følge deraf bruger JSLint Multi nu langt mindre hukommelse end før!</li>
<li>Der er bedre understøttelse for Mac, med hjælp fra Harry Whitfield.</li>
<li>Der bruges nu en minified udgave af JSLint (så widget&#8217;en loader lidt hurtigere).</li>
<li>Endelig vises udgaven af JSLint der anvendes nu i titel-linien.</li>
</ul>

<p>Vi ønsker alle Happy Linting!</p>

<p>(men pas på, den <em>vil</em> irritere dig!)</p>


<div class="shr-bookmarks shr-bookmarks-expand">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.kruse-net.dk/2009/04/20/jslint-multi-11/feed" rel="nofollow" class="external" title="Abonnér på kommenentarere til dette indlæg?">Abonnér på kommenentarere til dette indlæg?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.kruse-net.dk/2009/04/20/jslint-multi-11/&amp;title=JSLint+Multi+1.1" rel="nofollow" class="external" title="Del dette på del.icio.us">Del dette på del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kruse-net.dk/2009/04/20/jslint-multi-11/&amp;title=JSLint+Multi+1.1" rel="nofollow" class="external" title="Digg dette!">Digg dette!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kruse-net.dk/2009/04/20/jslint-multi-11/&amp;title=JSLint+Multi+1.1&amp;desc=%0D%0A%0D%0AMichael%20Sch%C3%B8ler%20og%20jeg%20har%20netop%20frigivet%20version%201.1%20af%20vores%20Yahoo%21%20Widget%20til%20kontrol%20af%20Javascript%20filer%3A%20JSLint%20Multi.%20Vi%20er%20meget%20glade%20for%20at%20kunne%20meddele%20at%20JSLint%20Multi%20nu%20er%20den%20%22officielle%22%20JSLint%20widget%2C%20og%20der%20er%20sket%20kraftige%20forbedringer%20siden%20version%201.0%2C%20hvorfor%20vi%20anbefaler%20a" rel="nofollow" class="external" title="Tilføj dette på Diigo">Tilføj dette på Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.kruse-net.dk/2009/04/20/jslint-multi-11/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.kruse-net.dk/2009/04/20/jslint-multi-11/&amp;bm_description=JSLint+Multi+1.1&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Tilføj dette til Mister Wong">Tilføj dette til Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kruse-net.dk/2009/04/20/jslint-multi-11/&amp;title=JSLint+Multi+1.1" rel="nofollow" class="external" title="Del dette på Mixx">Del dette på Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.kruse-net.dk/2009/04/20/jslint-multi-11/&amp;title=JSLint+Multi+1.1" rel="nofollow" class="external" title="Del dette på Reddit">Del dette på Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kruse-net.dk/2009/04/20/jslint-multi-11/&amp;title=JSLint+Multi+1.1" rel="nofollow" class="external" title="Faldet over noget godt? Del det på StumbleUpon">Faldet over noget godt? Del det på StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.kruse-net.dk/2009/04/20/jslint-multi-11/" rel="nofollow" class="external" title="Del dette på Technorati">Del dette på Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=JSLint+Multi+1.1+-+http://b2l.me/bzpa6&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet dette!">Tweet dette!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.kruse-net.dk/2009/04/20/jslint-multi-11/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JSON er ikke Javascript</title>
		<link>http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/</link>
		<comments>http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 09:08:48 +0000</pubDate>
		<dc:creator>Jakob Kruse</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[ecmascript]]></category>
		<category><![CDATA[eval]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.kruse-net.dk/?p=241</guid>
		<description><![CDATA[Jeg arbejder en del med både 
JSON og 
Javascript, og oplever hyppigt at folk blander de to sammen. Oftest fordi de ikke rigtigt har forstået hvad JSON er. De ved at navnet kommer fra &#8220;JavaScript Object Notation&#8221; og konkluderer hurtigt (og lidt forhastet) at &#8220;JSON jo bare er Javascript objekter&#8221;. Og selvom det er helt [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg arbejder en del med både 
<a  href="http://json.org/" onclick="javascript:pageTracker._trackPageview('/external/json.org/');" >JSON</a> og 
<a  href="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf" onclick="javascript:pageTracker._trackPageview('/external/www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf');" >Javascript</a>, og oplever hyppigt at folk blander de to sammen. Oftest fordi de ikke rigtigt har forstået hvad JSON er. De ved at navnet kommer fra &#8220;JavaScript Object Notation&#8221; og konkluderer hurtigt (og lidt forhastet) at &#8220;JSON jo bare er Javascript objekter&#8221;. Og selvom det er helt forkert er det svært at bebrejde dem deres opfattelse. Populariseringen af JSON trak i høj grad på at &#8220;JSON er Javascript&#8221; og at enhver Javascript fortolker derfor umiddelbart kunne behandle JSON. Efter at JSON er blevet populært har det også smittet af den modsatte vej, hvor Javascript objekter nu 
<a  href="http://www.hinnerup.net/2008/03/07/javascript_json_selfref_bug_or_not/" onclick="javascript:pageTracker._trackPageview('/external/www.hinnerup.net/2008/03/07/javascript_json_selfref_bug_or_not/');" >ses omtalt som</a> &#8220;JSON objekter&#8221;.</p>

<p>Men JSON er ikke Javascript.</p>

<p>JSON er data. Det er et format hvormed man kan beskrive primitive datatyper og hierarkiske data-strukturer som en simpel tegnsekvens. I alle de velkendte programmeringssprog &#8212; inklusive Javascript &#8212; vil JSON optræde i form af en streng, dvs. imellem citationstegn. Strengen er opbygget efter samme syntaks som den notation hvormed man beskriver datastrukturer i Javascript, deraf navnet.</p>

<p>JSON er dog mere end objekter. Det kommer ofte som en overraskelse for folk at en JSON streng både kan starte med &#8220;{&#8221; og &#8220;[". Sidstnævnte bruges til at beskrive en sorteret sekvens af elementer, typisk kaldt for et array. En JSON datastruktur kan (naturligvis) indeholde primitive data-typer (tal, strenge, boolske værdier og den særlige værdi <code>null</code>), men den kan ikke kun være en primitiv værdi. Den skal starte med enten "{" eller "[".</p>

<p>Under populariseringen af JSON blev det ofte fremhævet at JSON data i en Javascript fortolker let kunne "deserialiseres" (konverteres) til en hierarkisk Javascript datastruktur ved brug af <code>eval(...)</code>. Det er ikke helt korrekt, og jeg har flere gange oplevet overraskelse over at <code>eval(...)</code> fejler på JSON data, hvis ikke man tilføjer et sæt parenteser til strengen. Selv nu, hvor <code>eval(...)</code> af sikkerhedsmæssige årsager frarådes, også til JSON data, lader der til at være ringe forståelse for disse fejl.</p>

<p>Forklaringen er dog ret simpel. <code>eval(...)</code> er lavet til at afvikle et Javascript program. Det er det eneste den kan. Den afvikler et Javascript program som man giver til funktionen i en streng, og så returnerer den værdien af programmets sidste erklæring. Og JSON er jo ikke Javascript. Grunden til at det alligevel virker i nogle tilfælde, og at det (for gyldig JSON) altid kan bringes til at virke ved at tilføje et sæt parenteser, er at en JSON struktur mere eller mindre tilfældigt er meget tæt på at kunne fortolkes som et Javascript program.</p>

<p>I ECMAScript definitionen (ECMA-262), som definerer Javascript sproget, kan man bl.a. læse følgende:</p>

<ol>
<li>"... if the parameter to the built-in eval function is a string, it is treated as an ECMAScript Program."</li>
<li>Et ECMAScript program består af en sekvens af erklæringer ("Statement" eller "FunctionDeclaration").</li>
<li>En erklæring ("Statement") kan være en række forskellige ting (se afsnit 12 i ECMA-262), hvoraf de eneste interessante i denne sammenhæng er en "Block" eller en "ExpressionStatement".</li>
<li>En "Block" er en sekvens af erklæringer imellem et sæt krøllede parenteser: "{ ... }".</li>
<li>En "ExpressionStatement" består af et enkelt udtryk ("Expression") efterfulgt af et valgfrit semikolon.</li>
<li>Et udtryk ("Expression") kan være en række forskellige ting (se afsnit 11 i ECMA-262), hvoraf de eneste interessante i denne sammenhæng er en "ArrayLiteral" ("[ ... ]&#8220;), en &#8220;ObjectLiteral&#8221; (&#8220;{ &#8230; }&#8221;) eller et udtryk i parenteser.</li>
</ol>

<p>Hvis en JSON streng der starter med en &#8220;{&#8221; evalueres med <code>eval(...)</code>, så vil den blive opfattet som en &#8220;Block&#8221; fra punkt 4 ovenfor, fordi denne har højere prioritet i ECMAScript grammatikken end en &#8220;ExpressionStatement&#8221;. Hvis JSON strengen starter med &#8220;[&#8221; vil den blive opfattet som en &#8220;ArrayLiteral&#8221; og vil dermed blive konverteret korrekt, forudsat naturligvis at der er tale om gyldig JSON. Under alle omstændigheder kan man pakke JSON strengen ind i et sæt parenteser. Strengen vil så ikke længere være gyldig JSON, men parenteserne får strengen til at blive opfattet som et udtryk, og får dermed det oprindelige JSON indhold til at blive opfattet korrekt som en &#8220;ArrayLiteral&#8221; eller en &#8220;ObjectLiteral&#8221;, og parenteserne ændrer ikke værdien af udtrykket.</p>

<p>Bemærk at den gyldige syntaks for Javascript arrays (specifikt &#8220;ArrayLiteral&#8221;) og objekter (specifikt &#8220;ObjectLiteral&#8221;) tillader en del mere end den gyldige syntaks for JSON arrays og objekter. F.eks. kan både Javascript arrays og objekter indeholde funktions-erklæringer, variabel-referencer, brug af indbyggede objekter som f.eks. Date og Math, samt den særlige værdi &#8220;undefined&#8221;, ingen af hvilke er gyldige i JSON. Navne på egenskaberne i et JSON objekt skal desuden være i dobbelte citationstegn, hvilke ikke er et krav for Javascript objekter. Gyldig JSON kan valideres med 
<a  href="http://jsonlint.com/" onclick="javascript:pageTracker._trackPageview('/external/jsonlint.com/');" >JSONLint</a>.</p>


<div class="shr-bookmarks shr-bookmarks-expand">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/feed" rel="nofollow" class="external" title="Abonnér på kommenentarere til dette indlæg?">Abonnér på kommenentarere til dette indlæg?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/&amp;title=JSON+er+ikke+Javascript" rel="nofollow" class="external" title="Del dette på del.icio.us">Del dette på del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/&amp;title=JSON+er+ikke+Javascript" rel="nofollow" class="external" title="Digg dette!">Digg dette!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/&amp;title=JSON+er+ikke+Javascript&amp;desc=Jeg%20arbejder%20en%20del%20med%20b%C3%A5de%20JSON%20og%20Javascript%2C%20og%20oplever%20hyppigt%20at%20folk%20blander%20de%20to%20sammen.%20Oftest%20fordi%20de%20ikke%20rigtigt%20har%20forst%C3%A5et%20hvad%20JSON%20er.%20De%20ved%20at%20navnet%20kommer%20fra%20%22JavaScript%20Object%20Notation%22%20og%20konkluderer%20hurtigt%20%28og%20lidt%20forhastet%29%20at%20%22JSON%20jo%20bare%20er%20Javascript%20objekter%22.%20Og" rel="nofollow" class="external" title="Tilføj dette på Diigo">Tilføj dette på Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/&amp;bm_description=JSON+er+ikke+Javascript&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Tilføj dette til Mister Wong">Tilføj dette til Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/&amp;title=JSON+er+ikke+Javascript" rel="nofollow" class="external" title="Del dette på Mixx">Del dette på Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/&amp;title=JSON+er+ikke+Javascript" rel="nofollow" class="external" title="Del dette på Reddit">Del dette på Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/&amp;title=JSON+er+ikke+Javascript" rel="nofollow" class="external" title="Faldet over noget godt? Del det på StumbleUpon">Faldet over noget godt? Del det på StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/" rel="nofollow" class="external" title="Del dette på Technorati">Del dette på Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=JSON+er+ikke+Javascript+-+http://b2l.me/bzpa8&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet dette!">Tweet dette!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.kruse-net.dk/2009/03/27/json-er-ikke-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Kruse-Net præsenterer: Keyboard.js</title>
		<link>http://www.kruse-net.dk/2009/03/02/keyboardjs/</link>
		<comments>http://www.kruse-net.dk/2009/03/02/keyboardjs/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 19:25:11 +0000</pubDate>
		<dc:creator>Jakob Kruse</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://www.kruse-net.dk/?p=212</guid>
		<description><![CDATA[En klassisk mangel i browser-baserede applikationer er fornuftige tastatur-genveje. Dette skyldes til dels at alt hvad 
W3C&#8217;s &#8220;DOM Level 2&#8243; specifikation (fra 2000, men stadig den nyeste der overhovedet nævner events) har at sige om emnet er:

The DOM Level 2 Event specification does not provide a key event module. An event module designed for use [...]]]></description>
			<content:encoded><![CDATA[<p>En klassisk mangel i browser-baserede applikationer er fornuftige tastatur-genveje. Dette skyldes til dels at alt hvad 
<a  href="http://www.w3.org/TR/DOM-Level-2-Events/events.html" onclick="javascript:pageTracker._trackPageview('/external/www.w3.org/TR/DOM-Level-2-Events/events.html');" >W3C&#8217;s &#8220;DOM Level 2&#8243; specifikation</a> (fra 2000, men stadig den nyeste der overhovedet nævner events) har at sige om emnet er:</p>

<blockquote>The DOM Level 2 Event specification does not provide a key event module. An event module designed for use with keyboard input devices will be included in a later version of the DOM specification.</blockquote>

<p>Som følge heraf håndteres keyboard events vidt forskelligt i forskellige browsere, med kaos til følge for den der måtte ønske at anvende dem.</p>

<p><strong>Keyboard.js</strong> er mit bidrag til at forsøge at bringe orden i dét kaos, og gøre det lettere at implementere tastatur-genveje i browser-baserede applikationer. <strong>Keyboard.js</strong> er én Javascript-fil på 23 KB (12,6 KB minified). Den definerer to globale objekter, &#8220;KEY&#8221; og &#8220;Keyboard&#8221;, som kan bruges til at definere tastatur-genveje. <strong>Keyboard.js</strong> er lavet specielt til danske tastaturer og er testet i Internet Explorer 7, Firefox 2, Firefox 3 og Safari 3 på Windows, og i Safari 3 på Mac. <strong>Keyboard.js</strong> kræver enten 
<a  href="http://www.prototypejs.org/" onclick="javascript:pageTracker._trackPageview('/external/www.prototypejs.org/');" >Prototype</a> eller 
<a  href="http://jquery.com/" onclick="javascript:pageTracker._trackPageview('/external/jquery.com/');" >jQuery</a>.</p>

<h2>Anvendelse</h2>

<p>Definér en global tastatur-genvej:</p>

<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">Keyboard</span><span class="hl-default">.</span><span class="hl-identifier">registerGlobal</span><span class="hl-brackets">(</span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">CTRL</span><span class="hl-code"> + </span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">F</span><span class="hl-code">, </span><span class="hl-identifier">mySpecialFindFunction</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>

<p>Definér en lokal tastatur-genvej, som kun har effekt når fokus er indenfor et givet element. &#8216;myDiv&#8217; kan her være et DOM objekt eller et id. Bemærk at det pågældende element automatisk bliver gjort fokusérbart (i Safari er det dog kun input-elementer der kan tage fokus):</p>

<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">Keyboard</span><span class="hl-default">.</span><span class="hl-identifier">register</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">myDiv</span><span class="hl-quotes">'</span><span class="hl-code">, </span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">CTRL</span><span class="hl-code"> + </span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">SHIFT</span><span class="hl-code"> + </span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">ESC</span><span class="hl-code">, </span><span class="hl-identifier">myFingerBreaker</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>

<p>Hvis der skal defineres flere tastatur-genveje på samme objekt kan det betale sig at anvende en &#8220;handler&#8221;:</p>

<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-reserved">var </span><span class="hl-identifier">handler</span><span class="hl-default"> = </span><span class="hl-identifier">Keyboard</span><span class="hl-default">.</span><span class="hl-identifier">handlerFor</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">myMenu</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-identifier">handler</span><span class="hl-default">.</span><span class="hl-identifier">register</span><span class="hl-brackets">(</span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">LEFT</span><span class="hl-code">,  </span><span class="hl-identifier">goLeft</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-identifier">handler</span><span class="hl-default">.</span><span class="hl-identifier">register</span><span class="hl-brackets">(</span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">RIGHT</span><span class="hl-code">, </span><span class="hl-identifier">goRight</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-identifier">handler</span><span class="hl-default">.</span><span class="hl-identifier">register</span><span class="hl-brackets">(</span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">UP</span><span class="hl-code">,    </span><span class="hl-identifier">goUp</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-identifier">handler</span><span class="hl-default">.</span><span class="hl-identifier">register</span><span class="hl-brackets">(</span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">DOWN</span><span class="hl-code">,  </span><span class="hl-identifier">goDown</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>

<p><strong>Keyboard.js</strong> indeholder to kontroller af de registreringer man foretager. For det første får man besked hvis man kommer til at binde den samme tast to gange på samme element. For det andet får man en advarsel hvis der er kendte problemer med den tast man binder. F.eks.:</p>

<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">Keyboard</span><span class="hl-default">.</span><span class="hl-identifier">registerGlobal</span><span class="hl-brackets">(</span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">CTRL</span><span class="hl-code"> + </span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">ZERO</span><span class="hl-code">, </span><span class="hl-identifier">myZeroFunction</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-comment">//=&gt; &quot;Ctrl+0 is unmappable in Win-IE7, Win-Safari3 (reset zoom)&quot;</span></pre></div></div>

<p>Hvis man ønsker at binde en tast trods advarslen skal man tilføje en ekstra parameter &#8216;true&#8217;:</p>

<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">Keyboard</span><span class="hl-default">.</span><span class="hl-identifier">registerGlobal</span><span class="hl-brackets">(</span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">CTRL</span><span class="hl-code"> + </span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">ZERO</span><span class="hl-code">, </span><span class="hl-identifier">myZeroFunction</span><span class="hl-code">, </span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>

<p>Endelig er det muligt eksplicit at angive kontekst for event handleren (dvs. værdien af &#8220;this&#8221; når funktionen kaldes). Som standard er kontekst det element som tasten er bundet til, men en anden kontekst kan defineres ved at angive et array i stedet for en funktion:</p>

<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">Keyboard</span><span class="hl-default">.</span><span class="hl-identifier">registerGlobal</span><span class="hl-brackets">(</span><span class="hl-identifier">KEY</span><span class="hl-code">.</span><span class="hl-identifier">F4</span><span class="hl-code">, </span><span class="hl-brackets">[</span><span class="hl-identifier">myContext</span><span class="hl-code">, </span><span class="hl-identifier">myDropDownHandler</span><span class="hl-brackets">])</span><span class="hl-default">;</span></pre></div></div>

<h2>Yderligere detaljer</h2>

<p>For KEY-navne og yderligere detaljer, se toppen af <strong>Keyboard.js</strong>.</p>

<h2>Test-side</h2>

<p>Jeg har lavet en simpel test-side som indeholder alle taster understøttet af <strong>Keyboard.js</strong>, samt de grundlæggende taste-kombinationer. 
<a  href="http://www.kruse-net.dk/wp/wp-content/uploads/2009/03/keyboard.html">Se siden her</a>.</p>

<h2>Download</h2>

<ul>
<li>
<a  href="http://www.kruse-net.dk/wp/wp-content/uploads/2009/03/keyboard.js">keyboard.js</a> (23 KB)</li>
<li>
<a  href="http://www.kruse-net.dk/wp/wp-content/uploads/2009/03/keyboard-min.js">keyboard-min.js</a> (12,6 KB, komprimeret med 
<a  href="http://www.crockford.com/javascript/jsmin.html" onclick="javascript:pageTracker._trackPageview('/external/www.crockford.com/javascript/jsmin.html');" >JSMin</a>)</li>
</ul>

<h2>Licens</h2>

<p><strong>Keyboard.js</strong> frigives under LGPL licensen.</p>


<div class="shr-bookmarks shr-bookmarks-expand">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.kruse-net.dk/2009/03/02/keyboardjs/feed" rel="nofollow" class="external" title="Abonnér på kommenentarere til dette indlæg?">Abonnér på kommenentarere til dette indlæg?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.kruse-net.dk/2009/03/02/keyboardjs/&amp;title=Kruse-Net+pr%C3%A6senterer%3A+Keyboard.js" rel="nofollow" class="external" title="Del dette på del.icio.us">Del dette på del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kruse-net.dk/2009/03/02/keyboardjs/&amp;title=Kruse-Net+pr%C3%A6senterer%3A+Keyboard.js" rel="nofollow" class="external" title="Digg dette!">Digg dette!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kruse-net.dk/2009/03/02/keyboardjs/&amp;title=Kruse-Net+pr%C3%A6senterer%3A+Keyboard.js&amp;desc=En%20klassisk%20mangel%20i%20browser-baserede%20applikationer%20er%20fornuftige%20tastatur-genveje.%20Dette%20skyldes%20til%20dels%20at%20alt%20hvad%20W3C%27s%20%22DOM%20Level%202%22%20specifikation%20%28fra%202000%2C%20men%20stadig%20den%20nyeste%20der%20overhovedet%20n%C3%A6vner%20events%29%20har%20at%20sige%20om%20emnet%20er%3A%0D%0A%0D%0AThe%20DOM%20Level%202%20Event%20specification%20does%20not%20provide%20a" rel="nofollow" class="external" title="Tilføj dette på Diigo">Tilføj dette på Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.kruse-net.dk/2009/03/02/keyboardjs/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.kruse-net.dk/2009/03/02/keyboardjs/&amp;bm_description=Kruse-Net+pr%C3%A6senterer%3A+Keyboard.js&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Tilføj dette til Mister Wong">Tilføj dette til Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kruse-net.dk/2009/03/02/keyboardjs/&amp;title=Kruse-Net+pr%C3%A6senterer%3A+Keyboard.js" rel="nofollow" class="external" title="Del dette på Mixx">Del dette på Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.kruse-net.dk/2009/03/02/keyboardjs/&amp;title=Kruse-Net+pr%C3%A6senterer%3A+Keyboard.js" rel="nofollow" class="external" title="Del dette på Reddit">Del dette på Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kruse-net.dk/2009/03/02/keyboardjs/&amp;title=Kruse-Net+pr%C3%A6senterer%3A+Keyboard.js" rel="nofollow" class="external" title="Faldet over noget godt? Del det på StumbleUpon">Faldet over noget godt? Del det på StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.kruse-net.dk/2009/03/02/keyboardjs/" rel="nofollow" class="external" title="Del dette på Technorati">Del dette på Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Kruse-Net+pr%C3%A6senterer%3A+Keyboard.js+-+http://b2l.me/bzpaB&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet dette!">Tweet dette!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.kruse-net.dk/2009/03/02/keyboardjs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hvilken skive?</title>
		<link>http://www.kruse-net.dk/2008/09/15/hvilken-skive/</link>
		<comments>http://www.kruse-net.dk/2008/09/15/hvilken-skive/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 14:17:08 +0000</pubDate>
		<dc:creator>Jakob Kruse</dc:creator>
				<category><![CDATA[Dagens tip]]></category>

		<guid isPermaLink="false">http://www.kruse-net.dk/?p=170</guid>
		<description><![CDATA[Hermed et lille tip til dem der efterhånden er på PC nummer 3, 4, 5 eller 42 derhjemme:

Med hver PC følger et antal CD&#8217;er og/eller DVD&#8217;er. De skal sjældent bruges, for de er som regel allerede lagt ind på maskinen når den modtages. Men uheld kan jo som bekendt ske, og når de gør, så [...]]]></description>
			<content:encoded><![CDATA[<p>Hermed et lille tip til dem der efterhånden er på PC nummer 3, 4, 5 eller 42 derhjemme:</p>

<p>Med hver PC følger et antal CD&#8217;er og/eller DVD&#8217;er. De skal sjældent bruges, for de er som regel allerede lagt ind på maskinen når den modtages. Men uheld kan jo som bekendt ske, og når de gør, så er det ret rart at vide hvilke skiver der hører til hvilken maskine. Et simpelt trick, som jeg selv har haft stor glæde af, er straks efter modtagelsen af en maskine at putte alle skiverne ned i en plastikpose/lomme og udenpå skrive maskinens navn og nummer.</p>

<p>Den dag uheldet er ude ved du lige præcis hvilke skiver du skal have fat i!</p>


<div class="shr-bookmarks shr-bookmarks-expand">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.kruse-net.dk/2008/09/15/hvilken-skive/feed" rel="nofollow" class="external" title="Abonnér på kommenentarere til dette indlæg?">Abonnér på kommenentarere til dette indlæg?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.kruse-net.dk/2008/09/15/hvilken-skive/&amp;title=Hvilken+skive%3F" rel="nofollow" class="external" title="Del dette på del.icio.us">Del dette på del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kruse-net.dk/2008/09/15/hvilken-skive/&amp;title=Hvilken+skive%3F" rel="nofollow" class="external" title="Digg dette!">Digg dette!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kruse-net.dk/2008/09/15/hvilken-skive/&amp;title=Hvilken+skive%3F&amp;desc=Hermed%20et%20lille%20tip%20til%20dem%20der%20efterh%C3%A5nden%20er%20p%C3%A5%20PC%20nummer%203%2C%204%2C%205%20eller%2042%20derhjemme%3A%0D%0A%0D%0AMed%20hver%20PC%20f%C3%B8lger%20et%20antal%20CD%27er%20og%2Feller%20DVD%27er.%20De%20skal%20sj%C3%A6ldent%20bruges%2C%20for%20de%20er%20som%20regel%20allerede%20lagt%20ind%20p%C3%A5%20maskinen%20n%C3%A5r%20den%20modtages.%20Men%20uheld%20kan%20jo%20som%20bekendt%20ske%2C%20og%20n%C3%A5r%20de%20g%C3%B8r%2C%20s%C3%A5%20er%20d" rel="nofollow" class="external" title="Tilføj dette på Diigo">Tilføj dette på Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.kruse-net.dk/2008/09/15/hvilken-skive/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.kruse-net.dk/2008/09/15/hvilken-skive/&amp;bm_description=Hvilken+skive%3F&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Tilføj dette til Mister Wong">Tilføj dette til Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kruse-net.dk/2008/09/15/hvilken-skive/&amp;title=Hvilken+skive%3F" rel="nofollow" class="external" title="Del dette på Mixx">Del dette på Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.kruse-net.dk/2008/09/15/hvilken-skive/&amp;title=Hvilken+skive%3F" rel="nofollow" class="external" title="Del dette på Reddit">Del dette på Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kruse-net.dk/2008/09/15/hvilken-skive/&amp;title=Hvilken+skive%3F" rel="nofollow" class="external" title="Faldet over noget godt? Del det på StumbleUpon">Faldet over noget godt? Del det på StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.kruse-net.dk/2008/09/15/hvilken-skive/" rel="nofollow" class="external" title="Del dette på Technorati">Del dette på Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Hvilken+skive%3F+-+http://b2l.me/bzpba&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet dette!">Tweet dette!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.kruse-net.dk/2008/09/15/hvilken-skive/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Firefox 3.0</title>
		<link>http://www.kruse-net.dk/2008/06/18/firefox-30/</link>
		<comments>http://www.kruse-net.dk/2008/06/18/firefox-30/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 08:14:06 +0000</pubDate>
		<dc:creator>Jakob Kruse</dc:creator>
				<category><![CDATA[Set i verden]]></category>
		<category><![CDATA[addon]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[opgradering]]></category>

		<guid isPermaLink="false">http://www.kruse-net.dk/?p=163</guid>
		<description><![CDATA[Så kom dagen hvor Firefox 3.0 blev udgivet. Og en stor dag det er. Folk der allerede har opgraderet er dog måske løbet ind i et problem med opgradering af addons fra en tidligere Firefox installation. Noget lader til at være knækket for Mozilla i kampens hede.

Jeg har gravet lidt i problemet, som viser sig [...]]]></description>
			<content:encoded><![CDATA[<p>Så kom dagen hvor Firefox 3.0 blev udgivet. Og en stor dag det er. Folk der allerede har opgraderet er dog måske løbet ind i et problem med opgradering af addons fra en tidligere Firefox installation. Noget lader til at være knækket for Mozilla i kampens hede.</p>

<p>Jeg har gravet lidt i problemet, som viser sig at være en (formentlig midlertidig) fejl på Mozillas addons site, 
<a  href="https://addons.mozilla.org/" onclick="javascript:pageTracker._trackPageview('/external/addons.mozilla.org/');" >addons.mozilla.org</a>.</p>

<p>Det korte af det lange er, at hvis du i skrivende stund vil downloade en opdatering til en af dine addons, og den grønne knap &#8220;Add to Firefox&#8221; melder om problemer med downloaden, så gør sådan i stedet:</p>

<ul>
<li>Højreklik på den grønne knap</li>
<li>Vælg &#8220;Copy link location&#8221; / &#8220;Kopier link-adresse&#8221;</li>
<li>Højreklik på adresse-linien og &#8220;Paste&#8221; / &#8220;Sæt ind&#8221;</li>
<li>Tilføj følgende til slutningen af adressen: &#8220;?file_id=&lt;filnummer&gt;&#8221;, hvor &#8220;&lt;filnummer&gt;&#8221; er det tal der står lige efter &#8220;/file/&#8221; i adressen.</li>
<li>Tryk enter, så downloades opdateringen</li>
</ul>

<p>Jeg regner med at Mozilla har løst problemet inden længe!</p>


<div class="shr-bookmarks shr-bookmarks-expand">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.kruse-net.dk/2008/06/18/firefox-30/feed" rel="nofollow" class="external" title="Abonnér på kommenentarere til dette indlæg?">Abonnér på kommenentarere til dette indlæg?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.kruse-net.dk/2008/06/18/firefox-30/&amp;title=Firefox+3.0" rel="nofollow" class="external" title="Del dette på del.icio.us">Del dette på del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kruse-net.dk/2008/06/18/firefox-30/&amp;title=Firefox+3.0" rel="nofollow" class="external" title="Digg dette!">Digg dette!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kruse-net.dk/2008/06/18/firefox-30/&amp;title=Firefox+3.0&amp;desc=S%C3%A5%20kom%20dagen%20hvor%20Firefox%203.0%20blev%20udgivet.%20Og%20en%20stor%20dag%20det%20er.%20Folk%20der%20allerede%20har%20opgraderet%20er%20dog%20m%C3%A5ske%20l%C3%B8bet%20ind%20i%20et%20problem%20med%20opgradering%20af%20addons%20fra%20en%20tidligere%20Firefox%20installation.%20Noget%20lader%20til%20at%20v%C3%A6re%20kn%C3%A6kket%20for%20Mozilla%20i%20kampens%20hede.%0D%0A%0D%0AJeg%20har%20gravet%20lidt%20i%20problemet" rel="nofollow" class="external" title="Tilføj dette på Diigo">Tilføj dette på Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.kruse-net.dk/2008/06/18/firefox-30/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.kruse-net.dk/2008/06/18/firefox-30/&amp;bm_description=Firefox+3.0&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Tilføj dette til Mister Wong">Tilføj dette til Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kruse-net.dk/2008/06/18/firefox-30/&amp;title=Firefox+3.0" rel="nofollow" class="external" title="Del dette på Mixx">Del dette på Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.kruse-net.dk/2008/06/18/firefox-30/&amp;title=Firefox+3.0" rel="nofollow" class="external" title="Del dette på Reddit">Del dette på Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kruse-net.dk/2008/06/18/firefox-30/&amp;title=Firefox+3.0" rel="nofollow" class="external" title="Faldet over noget godt? Del det på StumbleUpon">Faldet over noget godt? Del det på StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.kruse-net.dk/2008/06/18/firefox-30/" rel="nofollow" class="external" title="Del dette på Technorati">Del dette på Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Firefox+3.0+-+http://b2l.me/bzpbc&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet dette!">Tweet dette!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.kruse-net.dk/2008/06/18/firefox-30/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Treasure Hunt #4</title>
		<link>http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/</link>
		<comments>http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 23:09:30 +0000</pubDate>
		<dc:creator>Jakob Kruse</dc:creator>
				<category><![CDATA[Set i verden]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[primtal]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[treasure hunt]]></category>

		<guid isPermaLink="false">http://www.kruse-net.dk/?p=162</guid>
		<description><![CDATA[Fjerde og sidste spørgsmål i denne omgang har nu været tilgængeligt i et døgns tid. Opgaven handler om primtals-sekvenser. Man får oplyst fire tal (n1, n2, n3 og n4) og skal så finde et tal som har de egenskaber at det:


er et primtal
kan udtrykkes som summen af n1 på hinanden følgende primtal
kan udtrykkes som summen [...]]]></description>
			<content:encoded><![CDATA[<p>Fjerde og sidste spørgsmål i denne omgang har nu været tilgængeligt i et døgns tid. Opgaven handler om primtals-sekvenser. Man får oplyst fire tal (n1, n2, n3 og n4) og skal så finde et tal som har de egenskaber at det:</p>

<ul>
<li>er et primtal</li>
<li>kan udtrykkes som summen af n1 på hinanden følgende primtal</li>
<li>kan udtrykkes som summen af n2 på hinanden følgende primtal</li>
<li>kan udtrykkes som summen af n3 på hinanden følgende primtal</li>
<li>kan udtrykkes som summen af n4 på hinanden følgende primtal</li>
</ul>

<p>Da n&#8217;erne er ret høje (op til omkring 800 i de to tilfælde jeg har set) er der tale om en opgave som kræver lidt regnearbejde.</p>

<p>Jeg har løst opgaven ved at generere en liste med den første million primtal (programmer til dette findes let på Google), samt skrive og køre et lille Ruby script vist nedenfor. Scriptet indlæser listen af primtal (denne antages at ligge i en fil ved navn &#8216;primes.txt&#8217; i samme mappe som scriptet) til både et Hash og et Array. Derefter filtreres primtals-Hash&#8217;et først på alle n1-sekvenser, derefter på n2-, n3- og n4-sekvenser. For begge tilfælde jeg har prøvet har resultatet været et enkelt tal. Hvis der ikke findes resultater kan det måske være nødvendigt med mere end 1 million primtal.</p>

<p>Scriptet ser ud som følger (på 
<a  href="http://en.wikipedia.org/wiki/Answer_to_Life%2C_the_Universe%2C_and_Everything" onclick="javascript:pageTracker._trackPageview('/external/en.wikipedia.org/wiki/Answer_to_Life%2C_the_Universe%2C_and_Everything');" >42</a> linier naturligvis):</p>

<div class="hl-surround" style="height:420px;"><div class="hl-main"><pre><span class="hl-identifier">ph</span><span class="hl-default"> = {} </span><span class="hl-comment"># prime hash
</span><span class="hl-var">$pa</span><span class="hl-default"> = </span><span class="hl-brackets">[] </span><span class="hl-comment"># prime array

</span><span class="hl-identifier">n1</span><span class="hl-default"> = </span><span class="hl-number">31
</span><span class="hl-identifier">n2</span><span class="hl-default"> = </span><span class="hl-number">63
</span><span class="hl-identifier">n3</span><span class="hl-default"> = </span><span class="hl-number">415
</span><span class="hl-identifier">n4</span><span class="hl-default"> = </span><span class="hl-number">799

</span><span class="hl-identifier">File</span><span class="hl-default">.</span><span class="hl-identifier">open</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">primes.txt</span><span class="hl-quotes">'</span><span class="hl-brackets">) </span><span class="hl-reserved">do</span><span class="hl-default"> |</span><span class="hl-identifier">f</span><span class="hl-default">|
  </span><span class="hl-identifier">f</span><span class="hl-default">.</span><span class="hl-identifier">each </span><span class="hl-reserved">do</span><span class="hl-default"> |</span><span class="hl-identifier">l</span><span class="hl-default">|
    </span><span class="hl-identifier">ph</span><span class="hl-brackets">[</span><span class="hl-identifier">l</span><span class="hl-code">.</span><span class="hl-identifier">to_i</span><span class="hl-brackets">]</span><span class="hl-default"> = </span><span class="hl-reserved">true
    </span><span class="hl-var">$pa</span><span class="hl-default">.</span><span class="hl-identifier">push</span><span class="hl-brackets">(</span><span class="hl-identifier">l</span><span class="hl-code">.</span><span class="hl-identifier">to_i</span><span class="hl-brackets">)
  </span><span class="hl-reserved">end
end
</span><span class="hl-var">$pmax</span><span class="hl-default"> = </span><span class="hl-var">$pa</span><span class="hl-brackets">[</span><span class="hl-var">$pa</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">-</span><span class="hl-number">1</span><span class="hl-brackets">]
</span><span class="hl-identifier">puts </span><span class="hl-quotes">&quot;</span><span class="hl-string">Loaded #{$pa.length} primes from #{$pa[0]} to #{$pmax}</span><span class="hl-quotes">&quot;

</span><span class="hl-reserved">def </span><span class="hl-identifier">search</span><span class="hl-brackets">(</span><span class="hl-identifier">filter</span><span class="hl-code">, </span><span class="hl-identifier">length</span><span class="hl-brackets">)
  </span><span class="hl-identifier">result</span><span class="hl-default"> = {}
  </span><span class="hl-var">$pa</span><span class="hl-default">.</span><span class="hl-identifier">each_index </span><span class="hl-reserved">do</span><span class="hl-default"> |</span><span class="hl-identifier">n</span><span class="hl-default">|
    </span><span class="hl-identifier">slice</span><span class="hl-default"> = </span><span class="hl-var">$pa</span><span class="hl-default">.</span><span class="hl-identifier">slice</span><span class="hl-brackets">(</span><span class="hl-identifier">n</span><span class="hl-code">, </span><span class="hl-identifier">length</span><span class="hl-brackets">)
    </span><span class="hl-reserved">if </span><span class="hl-identifier">slice</span><span class="hl-default">.</span><span class="hl-identifier">length</span><span class="hl-default"> == </span><span class="hl-identifier">length </span><span class="hl-reserved">then
      </span><span class="hl-identifier">sum</span><span class="hl-default"> = </span><span class="hl-identifier">slice</span><span class="hl-default">.</span><span class="hl-identifier">inject</span><span class="hl-default"> {|</span><span class="hl-identifier">sum</span><span class="hl-default">, </span><span class="hl-identifier">n</span><span class="hl-default">| </span><span class="hl-identifier">sum</span><span class="hl-default"> + </span><span class="hl-identifier">n</span><span class="hl-default"> }
      </span><span class="hl-identifier">result</span><span class="hl-brackets">[</span><span class="hl-identifier">sum</span><span class="hl-brackets">]</span><span class="hl-default"> = </span><span class="hl-reserved">true if </span><span class="hl-identifier">filter</span><span class="hl-brackets">[</span><span class="hl-identifier">sum</span><span class="hl-brackets">]
    </span><span class="hl-reserved">end
    break if </span><span class="hl-identifier">sum</span><span class="hl-default"> &gt; </span><span class="hl-var">$pmax
  </span><span class="hl-reserved">end
  </span><span class="hl-identifier">result
</span><span class="hl-reserved">end

</span><span class="hl-identifier">p1</span><span class="hl-default"> = </span><span class="hl-identifier">search</span><span class="hl-brackets">(</span><span class="hl-identifier">ph</span><span class="hl-code">, </span><span class="hl-identifier">n1</span><span class="hl-brackets">)
</span><span class="hl-identifier">puts </span><span class="hl-quotes">&quot;</span><span class="hl-string">#{p1.length} of those primes can be expressed as the sum of #{n1} consecutive primes</span><span class="hl-quotes">&quot;
</span><span class="hl-identifier">p2</span><span class="hl-default"> = </span><span class="hl-identifier">search</span><span class="hl-brackets">(</span><span class="hl-identifier">p1</span><span class="hl-code">, </span><span class="hl-identifier">n2</span><span class="hl-brackets">)
</span><span class="hl-identifier">puts </span><span class="hl-quotes">&quot;</span><span class="hl-string">#{p2.length} of those primes can be expressed as the sum of #{n2} consecutive primes</span><span class="hl-quotes">&quot;
</span><span class="hl-identifier">p3</span><span class="hl-default"> = </span><span class="hl-identifier">search</span><span class="hl-brackets">(</span><span class="hl-identifier">p2</span><span class="hl-code">, </span><span class="hl-identifier">n3</span><span class="hl-brackets">)
</span><span class="hl-identifier">puts </span><span class="hl-quotes">&quot;</span><span class="hl-string">#{p3.length} of those primes can be expressed as the sum of #{n3} consecutive primes</span><span class="hl-quotes">&quot;
</span><span class="hl-identifier">p4</span><span class="hl-default"> = </span><span class="hl-identifier">search</span><span class="hl-brackets">(</span><span class="hl-identifier">p3</span><span class="hl-code">, </span><span class="hl-identifier">n4</span><span class="hl-brackets">)
</span><span class="hl-identifier">puts </span><span class="hl-quotes">&quot;</span><span class="hl-string">#{p4.length} of those primes can be expressed as the sum of #{n4} consecutive primes</span><span class="hl-quotes">&quot;

</span><span class="hl-identifier">p4</span><span class="hl-default">.</span><span class="hl-identifier">each </span><span class="hl-reserved">do</span><span class="hl-default"> |</span><span class="hl-identifier">p</span><span class="hl-default">, </span><span class="hl-identifier">b</span><span class="hl-default">|
  </span><span class="hl-identifier">puts p
</span><span class="hl-reserved">end</span></pre></div></div>

<p>Eksempel output fra kørsel af programmet er:</p>

<div class="hl-surround" ><div class="hl-main"><pre>Loaded 1000000 primes from 2 to 15485863
5314 of those primes can be expressed as the sum of 31 consecutive primes
18 of those primes can be expressed as the sum of 63 consecutive primes
1 of those primes can be expressed as the sum of 415 consecutive primes
1 of those primes can be expressed as the sum of 799 consecutive primes
6814289</pre></div></div>

<p>God fornøjelse!</p>


<div class="shr-bookmarks shr-bookmarks-expand">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/feed" rel="nofollow" class="external" title="Abonnér på kommenentarere til dette indlæg?">Abonnér på kommenentarere til dette indlæg?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/&amp;title=Google+Treasure+Hunt+%234" rel="nofollow" class="external" title="Del dette på del.icio.us">Del dette på del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/&amp;title=Google+Treasure+Hunt+%234" rel="nofollow" class="external" title="Digg dette!">Digg dette!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/&amp;title=Google+Treasure+Hunt+%234&amp;desc=Fjerde%20og%20sidste%20sp%C3%B8rgsm%C3%A5l%20i%20denne%20omgang%20har%20nu%20v%C3%A6ret%20tilg%C3%A6ngeligt%20i%20et%20d%C3%B8gns%20tid.%20Opgaven%20handler%20om%20primtals-sekvenser.%20Man%20f%C3%A5r%20oplyst%20fire%20tal%20%28n1%2C%20n2%2C%20n3%20og%20n4%29%20og%20skal%20s%C3%A5%20finde%20et%20tal%20som%20har%20de%20egenskaber%20at%20det%3A%0D%0A%0D%0A%2A%20er%20et%20primtal%0D%0A%2A%20kan%20udtrykkes%20som%20summen%20af%20n1%20p%C3%A5%20hinanden%20f%C3%B8lgen" rel="nofollow" class="external" title="Tilføj dette på Diigo">Tilføj dette på Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/&amp;bm_description=Google+Treasure+Hunt+%234&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Tilføj dette til Mister Wong">Tilføj dette til Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/&amp;title=Google+Treasure+Hunt+%234" rel="nofollow" class="external" title="Del dette på Mixx">Del dette på Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/&amp;title=Google+Treasure+Hunt+%234" rel="nofollow" class="external" title="Del dette på Reddit">Del dette på Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/&amp;title=Google+Treasure+Hunt+%234" rel="nofollow" class="external" title="Faldet over noget godt? Del det på StumbleUpon">Faldet over noget godt? Del det på StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/" rel="nofollow" class="external" title="Del dette på Technorati">Del dette på Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Google+Treasure+Hunt+%234+-+http://b2l.me/bzpbd&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet dette!">Tweet dette!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.kruse-net.dk/2008/06/04/google-treasure-hunt-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Treasure Hunt #3</title>
		<link>http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/</link>
		<comments>http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/#comments</comments>
		<pubDate>Wed, 28 May 2008 06:53:45 +0000</pubDate>
		<dc:creator>Jakob Kruse</dc:creator>
				<category><![CDATA[Set i verden]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[netværk]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[treasure hunt]]></category>

		<guid isPermaLink="false">http://www.kruse-net.dk/?p=160</guid>
		<description><![CDATA[Så er der kommet et nyt spørgsmål på 
treasurehunt.appspot.com. Denne gang er der tale om en netværksopgave. Googles computer genererer en liste af noder i et netværk samt hver nodes routing tabel (heldigvis kun tre indgange pr. node) og default route. Opgaven er så at afgøre den korrekte sti fra én node til en anden.




Opgaven [...]]]></description>
			<content:encoded><![CDATA[<p>Så er der kommet et nyt spørgsmål på 
<a  href="http://treasurehunt.appspot.com/" onclick="javascript:pageTracker._trackPageview('/external/treasurehunt.appspot.com/');" >treasurehunt.appspot.com</a>. Denne gang er der tale om en netværksopgave. Googles computer genererer en liste af noder i et netværk samt hver nodes routing tabel (heldigvis kun tre indgange pr. node) og default route. Opgaven er så at afgøre den korrekte sti fra én node til en anden.</p>

<p>
<a rel="lightbox"  href='http://www.kruse-net.dk/wp/wp-content/uploads/2008/05/treasure3.png'><img src="http://www.kruse-net.dk/wp/wp-content/uploads/2008/05/treasure3-300x232.png" alt="" title="Google Treasure Hunt #3" width="300" height="232" class="aligncenter size-medium wp-image-161" /></a></p>

<p>Opgaven forekommer ret simpel. For de fleste noders vedkommende står destinations-adressen direkte i routing tabellen så sporet er let at følge. For nogle enkelte noder skal man matche en subnet mask i routing tabellen. Der skal man huske på at et mønster som xxx.yyy.zzz.0/24 matcher alle adresser i intervallet xxx.yyy.zzz.1 &#8211; xxx.yyy.zzz.254.</p>

<p>God fornøjelse!</p>


<div class="shr-bookmarks shr-bookmarks-expand">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/feed" rel="nofollow" class="external" title="Abonnér på kommenentarere til dette indlæg?">Abonnér på kommenentarere til dette indlæg?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/&amp;title=Google+Treasure+Hunt+%233" rel="nofollow" class="external" title="Del dette på del.icio.us">Del dette på del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/&amp;title=Google+Treasure+Hunt+%233" rel="nofollow" class="external" title="Digg dette!">Digg dette!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/&amp;title=Google+Treasure+Hunt+%233&amp;desc=S%C3%A5%20er%20der%20kommet%20et%20nyt%20sp%C3%B8rgsm%C3%A5l%20p%C3%A5%20treasurehunt.appspot.com.%20Denne%20gang%20er%20der%20tale%20om%20en%20netv%C3%A6rksopgave.%20Googles%20computer%20genererer%20en%20liste%20af%20noder%20i%20et%20netv%C3%A6rk%20samt%20hver%20nodes%20routing%20tabel%20%28heldigvis%20kun%20tre%20indgange%20pr.%20node%29%20og%20default%20route.%20Opgaven%20er%20s%C3%A5%20at%20afg%C3%B8re%20den%20korrekte%20sti" rel="nofollow" class="external" title="Tilføj dette på Diigo">Tilføj dette på Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/&amp;bm_description=Google+Treasure+Hunt+%233&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Tilføj dette til Mister Wong">Tilføj dette til Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/&amp;title=Google+Treasure+Hunt+%233" rel="nofollow" class="external" title="Del dette på Mixx">Del dette på Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/&amp;title=Google+Treasure+Hunt+%233" rel="nofollow" class="external" title="Del dette på Reddit">Del dette på Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/&amp;title=Google+Treasure+Hunt+%233" rel="nofollow" class="external" title="Faldet over noget godt? Del det på StumbleUpon">Faldet over noget godt? Del det på StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/" rel="nofollow" class="external" title="Del dette på Technorati">Del dette på Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Google+Treasure+Hunt+%233+-+http://b2l.me/bzpbf&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet dette!">Tweet dette!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.kruse-net.dk/2008/05/28/google-treasure-hunt-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Treasure Hunt #2</title>
		<link>http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/</link>
		<comments>http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/#comments</comments>
		<pubDate>Mon, 19 May 2008 19:07:21 +0000</pubDate>
		<dc:creator>Jakob Kruse</dc:creator>
				<category><![CDATA[Set i verden]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[treasure hunt]]></category>

		<guid isPermaLink="false">http://www.kruse-net.dk/?p=159</guid>
		<description><![CDATA[Så blev klokken 19:07, og Googles anden opgave blev offentliggjort. For dem der ikke har knækket den endnu serverer jeg her en mulig løsning, under brug af gængse unix shell værktøjer.]]></description>
			<content:encoded><![CDATA[<p>Så kom tiden &#8212; kl. 19:07 præcis, lokal tid &#8212; for den anden opgave i Google Treasure Hunt. Det der efterspørges denne gang er at trække nogle linjer ud af nogle bestemte filer i en større struktur, leveret i form af en zip-fil.</p>

<p>Opgaven kan besvares forholdvis trivielt, ved at trævle hele strukturen igennem, men det tager noget tid. Det er helt sikkert mere oplagt at trække på den nærmeste Unix command line.</p>

<p>Konkret skal man udtrække et bestemt linjenummer &#8220;N&#8221; fra filer der opfylder et bestemt mønster &#8220;A&#8221;, og summere indholdet. Det samme gør man med linje nummer &#8220;M&#8221; fra filer der opfylder mønster &#8220;B&#8221;. Og til sidst multiplicerer man disse to tal. De to summer kan udtrækkes på følgende måde (f.eks. med hjælp fra Cygwin hvis man befinder sig på en Windows maskine):</p>

<div class="hl-surround" ><div class="hl-main"><pre>find . -path &quot;&lt;mønster&gt;&quot; -exec sed -n '&lt;linjenummer&gt;p' '{}' \; | (tr '\n' +; echo 0) | bc</pre></div></div>

<p>For mit vedkommende var de konkrete kommando-linjer:</p>

<div class="hl-surround" ><div class="hl-main"><pre>find . -path &quot;*abc*.js&quot; -exec sed -n '4p' '{}' \; | (tr '\n' +; echo 0) | bc
=&gt; 22054

find . -path &quot;*EFG*.pdf&quot; -exec sed -n '3p' '{}' \; | (tr '\n' +; echo 0) | bc
=&gt; 25964</pre></div></div>

<p>Hvilket førte til resultatet 572610056. Men det vil naturligvis være et nyt resultat hver gang. God fornøjelse!</p>


<div class="shr-bookmarks shr-bookmarks-expand">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/feed" rel="nofollow" class="external" title="Abonnér på kommenentarere til dette indlæg?">Abonnér på kommenentarere til dette indlæg?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/&amp;title=Google+Treasure+Hunt+%232" rel="nofollow" class="external" title="Del dette på del.icio.us">Del dette på del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/&amp;title=Google+Treasure+Hunt+%232" rel="nofollow" class="external" title="Digg dette!">Digg dette!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/&amp;title=Google+Treasure+Hunt+%232&amp;desc=S%C3%A5%20blev%20klokken%2019%3A07%2C%20og%20Googles%20anden%20opgave%20blev%20offentliggjort.%20For%20dem%20der%20ikke%20har%20kn%C3%A6kket%20den%20endnu%20serverer%20jeg%20her%20en%20mulig%20l%C3%B8sning%2C%20under%20brug%20af%20g%C3%A6ngse%20unix%20shell%20v%C3%A6rkt%C3%B8jer." rel="nofollow" class="external" title="Tilføj dette på Diigo">Tilføj dette på Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.mister-wong.com/addurl/?bm_url=http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/&amp;bm_description=Google+Treasure+Hunt+%232&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Tilføj dette til Mister Wong">Tilføj dette til Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/&amp;title=Google+Treasure+Hunt+%232" rel="nofollow" class="external" title="Del dette på Mixx">Del dette på Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/&amp;title=Google+Treasure+Hunt+%232" rel="nofollow" class="external" title="Del dette på Reddit">Del dette på Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/&amp;title=Google+Treasure+Hunt+%232" rel="nofollow" class="external" title="Faldet over noget godt? Del det på StumbleUpon">Faldet over noget godt? Del det på StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/" rel="nofollow" class="external" title="Del dette på Technorati">Del dette på Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Google+Treasure+Hunt+%232+-+http://b2l.me/bzhrx&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet dette!">Tweet dette!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.kruse-net.dk/2008/05/19/google-treasure-hunt-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
