<?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>Anders Fjeldstads blogg &#187; .NET</title>
	<atom:link href="http://blogg.fjeldstad.se/category/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogg.fjeldstad.se</link>
	<description>Välkommen hit</description>
	<lastBuildDate>Fri, 11 Jun 2010 12:56:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Boktips: Pro ASP.NET MVC av Steven Sanderson</title>
		<link>http://blogg.fjeldstad.se/2009/10/05/boktips-pro-asp-net-mvc-av-steven-sanderson/</link>
		<comments>http://blogg.fjeldstad.se/2009/10/05/boktips-pro-asp-net-mvc-av-steven-sanderson/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 15:00:55 +0000</pubDate>
		<dc:creator>Anders Fjeldstad</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Webbutveckling]]></category>

		<guid isPermaLink="false">http://blogg.fjeldstad.se/?p=370</guid>
		<description><![CDATA[Jag har precis läst klart boken Pro ASP.NET MVC av Steven Sanderson. Resultat: jag är gravt peppad att sätta igång med ASP.NET MVC! Jag gillade verkligen den här boken; Sanderson skriver strukturerat och koncist, med en blandning av djupdykningar i tekniken och konkreta kodexempel. Ett klart plus är också att han inte är associerad med Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>Jag har precis läst klart boken <strong><a href="http://www.bokus.com/b/9781430210078.html">Pro ASP.NET MVC</a></strong> av Steven Sanderson. Resultat: jag är gravt peppad att sätta igång med ASP.NET MVC! Jag gillade verkligen den här boken; <a href="http://blog.codeville.net/">Sanderson</a> skriver strukturerat och koncist, med en blandning av djupdykningar i tekniken och konkreta kodexempel. Ett klart plus är också att han inte är associerad med Microsoft &#8211; flera gånger understryker han att hans exempel inte handlar om &#8221;demoware&#8221; utformade att få ramverket att glänsa utan skulle kunna fungera i en verklig situation. Boken går igenom många aspekter av webbutveckling med snygg mjukvarudesign som röd tråd och jag upplevde att den förklarar principerna bakom MVC-mönstret på ett mycket grundligare sätt (och lämnar färre frågetecken) än exempelvis <em>Professional ASP.NET MVC 1.0</em> (av bland andra Scott Guthrie) som jag läst tidigare.</p>
<p>Om du är det minsta nyfiken på ASP.NET MVC så tycker jag absolut att du ska låna eller köpa den här boken. När jag skaffade den kostade den knappt 300 kr och det var den utan tvekan värd.</p>
<br /><a href="http://blogg.fjeldstad.se/?p=370#comments" title="Comments on &quot;Boktips: Pro ASP.NET MVC av Steven Sanderson&quot;"><img src="http://blogg.fjeldstad.se/wp-content/plugins/feed-comments-number/image.php?370" alt="Comments" /></a>]]></content:encoded>
			<wfw:commentRss>http://blogg.fjeldstad.se/2009/10/05/boktips-pro-asp-net-mvc-av-steven-sanderson/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lunarspindeln BETA</title>
		<link>http://blogg.fjeldstad.se/2009/07/05/lunarspindeln-beta/</link>
		<comments>http://blogg.fjeldstad.se/2009/07/05/lunarspindeln-beta/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 23:40:16 +0000</pubDate>
		<dc:creator>Anders Fjeldstad</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Allmänt]]></category>
		<category><![CDATA[Bloggar]]></category>

		<guid isPermaLink="false">http://blogg.fjeldstad.se/?p=328</guid>
		<description><![CDATA[Lunarspindeln är ett litet Windowsprogram som låter dig spara ner dina (eller andras) publika blogginlägg (i RSS- eller textformat) och galleribilder från Lunarstorm, vilket kan vara smidigt om du vill ta en säkerhetskopia eller flytta dina blogginlägg till ett annat bloggverktyg (exempelvis WordPress). Lunarspindeln är helt gratis att installera och använda. Programmet är tills vidare [...]]]></description>
			<content:encoded><![CDATA[<p>Lunarspindeln är ett litet Windowsprogram som låter dig spara ner dina (eller andras) publika blogginlägg (i RSS- eller textformat) och galleribilder från Lunarstorm, vilket kan vara smidigt om du vill ta en säkerhetskopia eller flytta dina blogginlägg till ett annat bloggverktyg (exempelvis WordPress). Lunarspindeln är helt gratis att installera och använda. Programmet är tills vidare i betaversion, så man får ha överseende med eventuella fel och brister.</p>
<p><span id="more-328"></span></p>
<p>För ganska precis två år sedan utvecklade jag <a href="http://blogg.fjeldstad.se/2007/07/08/lunarbloggrabber-05/">LunarBlogGrabber</a>, ett simpelt program som kunde hjälpa till med att spara ner en lokal kopia av ens dagbok/blogg på Lunarstorm. Jag gjorde det eftersom jag själv använt dagboksfunktionen på Lunarstorm när jag var yngre och ville ta en backup, men när jag väl var klar tänkte jag att det kanske fanns andra som kunde ha nytta av den. Och det fanns det &#8211; under tiden som gått sedan jag lade upp den första versionen har rätt många testat programmet och jag har fått en del kommentarer, vilket är kul.</p>
<p>LunarBlogGrabber hade flera svagheter. Dels var det ganska instabilt; det kunde sluta arbeta mitt i en lång nedladdning utan att användaren fick någon förklaring till vad som hände (eller ens <em>att </em>något hänt). Dessutom var man tvungen att skriva in sitt användarnamn och lösenord eftersom programmet loggade in som en representant för användaren, och alla var inte så sugna på att dela med sig av sitt lösenord till ett främmande program utvecklat av någon okänd typ, vilket är fullt förståeligt.</p>
<p>Nu har jag skrivit ett helt nytt program som angriper uppgiften på ett annorlunda sätt. Det nya programmet kallar jag för <strong>Lunarspindeln</strong> och en (gratis) betaversion finns tillgänglig för nedladdning lite längre ner på denna sida. Några features:</p>
<ul>
<li>Möjlighet att spara valfri användares publika blogginlägg på din dator. Blogginläggen sparas dels som RSS-fil (vilken kan användas för att importera bloggen i ett annat bloggverktyg, exempelvis WordPress) och dels som vanlig text (bra om man vill klistra in inläggen i ett Worddokument eller liknande).</li>
<li>Möjlighet att ladda ner valfri användares publika galleribilder.</li>
<li>Visar en bild på den valda användaren så att man kan vara säker på att man laddar ner rätt blogg eller galleri.</li>
<li>Kräver inte några Lunarstorm-inloggningsuppgifter.</li>
<li>Laddar automatiskt ner eventuella uppdateringar.</li>
</ul>
<blockquote><p>Ladda ner programmet här (packa upp zip-filen och kör <strong>setup.exe</strong>):</p>
<p><strong><a href="http://www.fjeldstad.se/lunarspindeln/Lunarspindeln.zip"><img class="alignnone size-full wp-image-329" style="vertical-align: middle;" title="Lunarspindeln" src="http://blogg.fjeldstad.se/wp-content/uploads/2009/07/save.png" alt="save" width="24" height="24" /></a> <a href="http://www.fjeldstad.se/lunarspindeln/Lunarspindeln.zip">Lunarspindeln.zip</a></strong></p>
<p>(Om du använder <strong>Internet Explorer</strong> kan du välja att istället <a href="http://www.fjeldstad.se/lunarspindeln/Lunarspindeln.application" target="_blank">installera programmet direkt</a>.)</p>
<p><strong>OBS: </strong>Om du får problem vid installationen, titta igenom systemkraven nedan &#8211; särskilt viktigt är .NET Framework 3.5.</p></blockquote>
<p><strong>Systemkrav:</strong></p>
<ul>
<li>Windows XP eller nyare (programmet är testat på Windows XP x64 och Windows 7 RC).</li>
<li>.NET Framework 3.5 (<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=sv&amp;FamilyID=ab99342f-5d1a-413d-8319-81da479ab0d7">hämta från Microsoft här</a>).</li>
<li>Cirka 400 kb ledigt hårddiskutrymme.</li>
<li>Internetuppkoppling.</li>
</ul>
<p><strong>Avgränsningar:</strong></p>
<ul>
<li>Endast publika blogginlägg kan laddas ner &#8211; hemliga/privata inlägg kommer inte att hämtas.</li>
<li>Endast bilder laddas hem från galleriet &#8211; filmer, ljud och övriga filtyper stöds inte.</li>
<li>Det är inte möjligt att välja vilken mapp nedladdade filer ska sparas i. De hamnar automatiskt i en mapp som heter &#8221;Lunarstorm&#8221; på skrivbordet. I Lunarstorm-mappen skapas en undermapp som heter samma sak som användarnamnet.</li>
</ul>
<p>Kom ihåg: jag tillhandahåller det här programmet för att vara schysst. Jag tar inget betalt för det men jag tar heller inte något ansvar för eventuella problem eller skador som kan uppstå som följd av användandet av programmet. Jag kan tyvärr inte garantera att programmet fungerar på alla datorer. Ställ gärna frågor om ni har några &#8211; jag lovar inte att lösa allas problem men jag kommer att läsa all feedback jag får.</p>
<br /><a href="http://blogg.fjeldstad.se/?p=328#comments" title="Comments on &quot;Lunarspindeln BETA&quot;"><img src="http://blogg.fjeldstad.se/wp-content/plugins/feed-comments-number/image.php?328" alt="Comments" /></a>]]></content:encoded>
			<wfw:commentRss>http://blogg.fjeldstad.se/2009/07/05/lunarspindeln-beta/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Kom ihåg att ange en path för dina cookies!</title>
		<link>http://blogg.fjeldstad.se/2009/05/27/kom-ihag-att-ange-en-path-for-dina-cookies/</link>
		<comments>http://blogg.fjeldstad.se/2009/05/27/kom-ihag-att-ange-en-path-for-dina-cookies/#comments</comments>
		<pubDate>Wed, 27 May 2009 09:49:52 +0000</pubDate>
		<dc:creator>Anders Fjeldstad</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Webbutveckling]]></category>

		<guid isPermaLink="false">http://blogg.fjeldstad.se/?p=321</guid>
		<description><![CDATA[Har du problem med mystiska dubbletter av cookies du skapat på en sajt dyker upp när du förväntar dig att de ska vara unika? Då kanske du gjort samma misstag som jag gjorde &#8211; missat att ställa in en path för varje cookie. Detta gäller oavsett om du använder dig av Javascript eller .NET-ramverkets WebBrowser-kontroll [...]]]></description>
			<content:encoded><![CDATA[<p>Har du problem med mystiska dubbletter av cookies du skapat på en sajt dyker upp när du förväntar dig att de ska vara unika? Då kanske du gjort samma misstag som jag gjorde &#8211; missat att ställa in en path för varje cookie. Detta gäller oavsett om du använder dig av Javascript eller .NET-ramverkets <code>WebBrowser</code>-kontroll för att skapa cookies. Fixen är lyckligtvis mycket simpel.</p>
<p><span id="more-321"></span></p>
<p>Jag skulle häromdagen skapa en cookie i .NET <code>WebBrowser</code>-kontrollen via <code>WebBrowser.Document.Cookies</code> och gjorde så här (min <code>WebBrowser</code>-instans heter &#8221;browser&#8221; i exemplen nedan):</p>
<pre><code>browser.Document.Cookies = "MyCookie=My value";</code></pre>
<p>Den (interna) webbapplikation som browsern navigerade runt i kunde sedan verifiera att cookien fanns och göra vissa saker baserat på det, följt av att sätta cookien till ett annat värde. Det var bara det att ibland verkade cookien ha flera olika värden under samma request, vilket orsakade ett oönskat beteende. När jag tittade närmare på det insåg jag att det <em>ibland </em>fanns dubbletter av cookien. Vadan?</p>
<p>Jag började med att ägna en eftermiddag åt att testa olika varianter av &#8221;kolla-om-cookien-finns-i-så-fall-sätt-den-till-ditten-annars-sätt-den-till-datten-eller-ta-bort-den&#8221; och andra dumheter tills det var dags att gå hem för dagen med bultande huvudvärk och dåligt humör.</p>
<p>Nästa dag inledde jag istället med att googla efter typ &#8221;duplicate cookies&#8221; och hittade ett kort <a href="http://jenseng.com/archives/000040.html">blogginlägg</a> med budskapet:</p>
<blockquote><p>Kom ihåg att alltid sätta <strong>path</strong> för dina cookies, annars defaultar den till den aktuella sidans URL vilket kan leda till dubbletter.</p></blockquote>
<p>Inlägget handlade visserligen om att sätta cookies genom Javascript och document.cookies, men det är mer eller mindre precis samma sak som att göra det via <code>WebBrowser.Document.Cookies</code>. Så hur sätter man path för en cookie? En ny googling tog mig till <a href="http://www.quirksmode.org/js/cookies.html">en beskrivning av cookies på Quirksmode.org</a> och insikten:</p>
<pre><code>browser.Document.Cookies = "MyCookie=My value; path=/";</code></pre>
<p>Genom det enkla tillägget började min cookie gälla för hela sajten och alla dubbletter försvann hux flux.</p>
<p><strong>Slutsats:</strong> Sätt alltid path för dina cookies och ta en paus med lite frisk luft och kanske ett mellanmål när du försöker lösa ett problem men är för trött för att inse att Google har svaret&#8230;</p>
<br /><a href="http://blogg.fjeldstad.se/?p=321#comments" title="Comments on &quot;Kom ihåg att ange en path för dina cookies!&quot;"><img src="http://blogg.fjeldstad.se/wp-content/plugins/feed-comments-number/image.php?321" alt="Comments" /></a>]]></content:encoded>
			<wfw:commentRss>http://blogg.fjeldstad.se/2009/05/27/kom-ihag-att-ange-en-path-for-dina-cookies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Noterat under utveckling av ny LunarBlogGrabber</title>
		<link>http://blogg.fjeldstad.se/2009/05/24/noterat-under-utveckling-av-ny-lunarbloggrabber/</link>
		<comments>http://blogg.fjeldstad.se/2009/05/24/noterat-under-utveckling-av-ny-lunarbloggrabber/#comments</comments>
		<pubDate>Sun, 24 May 2009 18:58:13 +0000</pubDate>
		<dc:creator>Anders Fjeldstad</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Bloggar]]></category>
		<category><![CDATA[Teknik]]></category>

		<guid isPermaLink="false">http://blogg.fjeldstad.se/?p=317</guid>
		<description><![CDATA[För några dagar sedan fick jag en förfrågan från en person som ville använda mitt snabbhack LunarBlogGrabber för att ladda ner, vad jag förstår, tusentals inlägg från sin blogg på Lunarstorm. Tydligen var inte mitt program riktigt vattentätt nog för den typen av jobb &#8211; jag har själv bara testat det med ett knappt hundratal [...]]]></description>
			<content:encoded><![CDATA[<p>För några dagar sedan fick jag en förfrågan från en person som ville använda mitt snabbhack <a href="http://blogg.fjeldstad.se/2007/07/08/lunarbloggrabber-05/">LunarBlogGrabber</a> för att ladda ner, vad jag förstår, tusentals inlägg från sin blogg på Lunarstorm. Tydligen var inte mitt program riktigt vattentätt nog för den typen av jobb &#8211; jag har själv bara testat det med ett knappt hundratal inlägg, och det tog ändå en liten stund. Med tanke på hur hastigt hopknackat programmet är och att det faktiskt har varit en hel del intresserade användare (där de flesta verkar ha lyckats med sina nedladdningar) blev jag sugen att skriva ihop en uppdaterad version. Det är i sig inte några tekniska problem, men det dök ändå upp en del frågor längs vägen.</p>
<p><span id="more-317"></span>Lunarstorm har alltid krävt autentisering för åtkomst till användarnas innehåll &#8211; man är tvungen att logga in med ett giltigt Lunarstormkonto för att kunna läsa sin egen eller andras blogginlägg, titta på bilder och så vidare. I den nuvarande versionen av LunarBlogGrabber (shit alltså, jag skulle verkligen behöva hitta på ett bättre namn&#8230;), som är ett Windowsprogram, använder jag .NET:s WebBrowser-kontroll för att låta användaren logga in på sajten. Programmet tar sedan över den inbyggda webbläsaren och använder den för att bläddra runt bland användarens blogginlägg och kopiera dess textinnehåll. Det är en ansats som fungerar, men WebBrowser-kontrollen är inte jättesnabb eftersom den ska rendera alla sidor och dessutom tycks den tendera att läcka minne över tiden (den använder ju Internet Explorer i bakgrunden).</p>
<p>En sak jag upptäckte när jag började skissa på en ny version var att <strong>blogginläggen på Lunarstorm inte längre kräver inloggning</strong>. Det betyder att vem som helst kan surfa in på en Lunarstormanvändares presentationssida och därifrån klicka vidare bland det innehåll som användaren lagt upp. Det går förstås inte att lämna kommentarer och liknande när man inte är inloggad, men att läsa andras tidigare kommentarer går fint. Jag är inte helt säker på varför Lunarstorm öppnats upp på det här sättet, men jag kan tänka mig att det har att göra med att företaget bakom vill ge möjligheter för externa tjänster att integrera med sajtens innehåll.</p>
<p>Det verkar dock som att utvecklarna bakom Lunarstorm har missat vissa grejer. Exempelvis:</p>
<ul>
<li>Som Lunarstormanvändare kan man välja att vara anonym, vilket innebär att man kan besöka andra användares presentationer och gå igenom deras material utan att de kan spåra besöket tillbaka till en själv. Det är även möjligt att ange att inga anonyma besökare ska få tillgång till ens material, vilket kan vara bra om man vill minska risken för att främlingar snokar runt bland ens grejer utan att tillkännage sig. <strong>Men:</strong> den spärren sätts ur funktion när besökaren inte är inloggad alls. En icke-inloggad besökare är ju per definition anonym, men ges alltså fri tillgång till samtliga användares publicerade material. Jag tror och hoppas att det här är en bugg, men det kan också vara ett medvetet, om än något svårförsvarat, designval.</li>
<li>Lunarstorm håller reda på hur många visningar som gjorts av respektive blogginlägg som en användare publicerat. På det sättet kan man se vilka inlägg som är mest populära, och man kan även se precis vilka användare som läst ett givet inlägg. Som jag förstår det är tanken att bara unika <em>läsare </em>ska räknas &#8211; om jag går in och läser en kompis inlägg idag och sedan igen om ett år räknas det fortfarande bara som en visning. Det gäller dock inte för ej inloggade besökare &#8211; där ökas läsarräknaren med ett snäpp varje gång man laddar om sidan, vilket gör att man utan problem skulle kunna förstöra lässtatistiken för varenda publik Lunarstormblogg om man ville. Detta är sannolikt en ren defekt.</li>
</ul>
<p>Den första punkten här spelar ingen större roll för mig i mitt utvecklingsarbete. Faktum är att den gör det enklare &#8211; så länge man utan inloggning kan surfa in på alla användares sidor och läsa deras (publika) inlägg behöver inte programmet vara inloggat, vilket är mycket positivt. En del användare har ställt sig frågande till om det är riskfritt att mata in sitt lösenord i ett fristående program så där, och jag tycker att det är en mycket befogad fråga. Det har visserligen blivit allt vanligare att webbtjänster ber om folks användarnamn och lösenord till deras webbmail för att kunna &#8221;hitta ens vänner&#8221;, men jag tycker att det är en tråkig utveckling där i sig legitima tjänster lär användarna ett beteende som kan få dem att råka illa ut vid kontakt med mindre seriösa webbplatser. Kan jag slippa fråga användarna om deras Lunarstormlösenord så gör jag gärna det.</p>
<p>Den andra punkten är lite mer problematisk. I praktiken innebär den att mitt program, om vi antar att det <em>inte </em>kommer att agera som en inloggad användare, kommer att påverka lässtatistiken för de blogginlägg som man väljer att ladda ner. Och i och med att programmet inte kräver något lösenord blir det möjligt för vem som helst som använder programmet att öka antalet läsningar för helt andra användare, vilket kanske inte är så kul för dem.</p>
<p>Å andra sidan är det fullt möjligt även utan mitt program. Och det känns fel att min programvara ska bygga runt en defekt som Lunarstorms utvecklare bär ansvaret för. Med andra ord lutar jag åt att låta den kommande versionen av LunarBlogGrabber agera helt anonymt och vara kapabelt att ladda ner godtyckliga användares publika blogginlägg.</p>
<p>Så ser det ut i nuläget. Jag kommer ha mycket att göra med andra mer kommersiella åtaganden under veckan som kommer, så jag vågar inte sätta något releasedatum för nästa version, men jag hoppas att det blir snart!</p>
<br /><a href="http://blogg.fjeldstad.se/?p=317#comments" title="Comments on &quot;Noterat under utveckling av ny LunarBlogGrabber&quot;"><img src="http://blogg.fjeldstad.se/wp-content/plugins/feed-comments-number/image.php?317" alt="Comments" /></a>]]></content:encoded>
			<wfw:commentRss>http://blogg.fjeldstad.se/2009/05/24/noterat-under-utveckling-av-ny-lunarbloggrabber/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hantera WebBrowser-kontrollens minnesläckor</title>
		<link>http://blogg.fjeldstad.se/2009/02/23/hantera-webbrowser-kontrollens-minneslackor/</link>
		<comments>http://blogg.fjeldstad.se/2009/02/23/hantera-webbrowser-kontrollens-minneslackor/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 18:51:37 +0000</pubDate>
		<dc:creator>Anders Fjeldstad</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Teknik]]></category>

		<guid isPermaLink="false">http://blogg.fjeldstad.se/?p=262</guid>
		<description><![CDATA[Jag har under de senaste åren vid ett flertal tillfällen stött på WebBrowser-kontrollen, som är en .NET wrapper-klass till en underliggande ActiveX-kontroll motsvarande en Internet Explorer-instans. Kontrollen gör det enkelt att lägga in ett webbläsarfönster i sina .NET-baserade Windowsprogram, och även om den är lite bänglig att jobba med så har den definitivt sina tillämpningsområden.
Nu [...]]]></description>
			<content:encoded><![CDATA[<p>Jag har under de senaste åren vid ett flertal tillfällen stött på WebBrowser-kontrollen, som är en .NET wrapper-klass till en underliggande ActiveX-kontroll motsvarande en Internet Explorer-instans. Kontrollen gör det enkelt att lägga in ett webbläsarfönster i sina .NET-baserade Windowsprogram, och även om den är lite bänglig att jobba med så har den definitivt sina tillämpningsområden.</p>
<p>Nu senast var det hos en kund som jag satt och fipplade med WebBrowser. Jag ville att popup-fönster skulle öppnas i en ny WebBrowser-kontroll istället för i ett vanligt Internet Explorer-fönster (vilket är standardbeteendet), och det gick att åstadkomma med lite pill. När användaren öppnat en popup och sedan stängde den så slängdes WebBrowser-instansen bort, med allt vad det innebär av Dispose():ande. Det jag insåg ganska snabbt var att det minne som allokerades vid skapandet av popup-webbläsaren inte frigjordes när den stängdes. En minnesläcka alltså. Detta var något som sett i tidigare projekt, men då handlade det mest om det minne som kontrollen läcker varje gång en ny sida laddas, vilket sker i ett mycket långsammare tempo. Jag hade aldrig tidigare kommit på varför minnesläckorna uppstått eller hur jag skulle komma till rätta med dem. Det har heller inte varit något affärskritiskt i de tidigare fallen, men för den här aktuella kunden var det just det.</p>
<p>Efter lite Googlande kunde jag konstatera att minnesläckorna i WebBrowser-kontrollen är <a href="http://support.microsoft.com/kb/943510/">kända av Microsoft</a>, och att det även finns &#8221;hotfixes&#8221; för dem (som jag tror ska vara inkluderade i diverse service packs för olika versioner av Windows). Jag provade att installera en sådan hotfix och kunde inte se någon skillnad överhuvudtaget.</p>
<p>Några timmar senare hittade jag däremot ett mycket intressant API-anrop som jag faktiskt tror löser min kunds problem, nämligen SetProcessWorkingSetSize i assemblyn kernel32.dll. Metoden används för att ställa in övre och undre gränser för det reserverade arbetsminnet för en given process, men om man anropar den med -1 som parametrar för gränserna så <em>frigörs så mycket arbetsminne som möjligt</em>. Så här kan det se ut i ett program skrivet med C#:<br />
<code><br />
// Importera metoder från kernel32.dll, någonstans i klassdefinitionen...<br />
[DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetSize", SetLastError = true, CallingConvention = CallingConvention.StdCall)]<br />
internal static extern bool SetProcessWorkingSetSize(IntPtr pProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize);</code></p>
<p><code>[DllImport("KERNEL32.DLL", EntryPoint = "GetCurrentProcess", SetLastError = true, CallingConvention = CallingConvention.StdCall)]<br />
internal static extern IntPtr GetCurrentProcess();</code></p>
<p><code>// ...och frigör arbetsminne där det passar.<br />
IntPtr pHandle = GetCurrentProcess();<br />
SetProcessWorkingSetSize(pHandle, -1, -1);</code></p>
<p>Så var det med den saken. Den ursprungliga forumtråden där jag läste om detta hittar du <a href="http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/88c21427-e765-46e8-833d-6021ef79e0c8/">här</a>, och Microsofts dokumentation av de aktuella metoderna i kernel32.dll finns <a href="http://msdn.microsoft.com/en-us/library/ms686234(VS.85).aspx">här</a>. Hoppas det hjälper någon.</p>
<br /><a href="http://blogg.fjeldstad.se/?p=262#comments" title="Comments on &quot;Hantera WebBrowser-kontrollens minnesläckor&quot;"><img src="http://blogg.fjeldstad.se/wp-content/plugins/feed-comments-number/image.php?262" alt="Comments" /></a>]]></content:encoded>
			<wfw:commentRss>http://blogg.fjeldstad.se/2009/02/23/hantera-webbrowser-kontrollens-minneslackor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MCPD!</title>
		<link>http://blogg.fjeldstad.se/2008/05/30/mcpd/</link>
		<comments>http://blogg.fjeldstad.se/2008/05/30/mcpd/#comments</comments>
		<pubDate>Fri, 30 May 2008 06:12:22 +0000</pubDate>
		<dc:creator>Anders Fjeldstad</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Avanade]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://blogg.fjeldstad.se/2008/05/30/mcpd/</guid>
		<description><![CDATA[Wooohoo! Efter ganska precis ett års periodiskt slit är jag äntligen Microsoft Certified Professional Developer inom Enterprise Applications (.NET 2.0)! I praktiken betyder detta att jag är en av de knappt 4.500 i världen som har orkat släpa sig igenom de fem proven och att Avanades certifieringskrav är uppfyllda för min del. FREEEEDOOOOOM!
]]></description>
			<content:encoded><![CDATA[<p>Wooohoo! Efter ganska precis ett års periodiskt slit är jag äntligen Microsoft Certified Professional Developer inom Enterprise Applications (.NET 2.0)! I praktiken betyder detta att jag är en av de <a href="http://www.microsoft.com/learning/mcp/certified.mspx">knappt 4.500</a> i världen som har orkat släpa sig igenom de fem proven och att Avanades certifieringskrav är uppfyllda för min del. FREEEEDOOOOOM!</p>
<br /><a href="http://blogg.fjeldstad.se/2008/05/30/mcpd/#comments" title="Comments on &quot;MCPD!&quot;"><img src="http://blogg.fjeldstad.se/wp-content/plugins/feed-comments-number/image.php?153" alt="Comments" /></a>]]></content:encoded>
			<wfw:commentRss>http://blogg.fjeldstad.se/2008/05/30/mcpd/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>MCTS gånger tre</title>
		<link>http://blogg.fjeldstad.se/2008/04/03/mcts-ganger-tre/</link>
		<comments>http://blogg.fjeldstad.se/2008/04/03/mcts-ganger-tre/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 17:40:49 +0000</pubDate>
		<dc:creator>Anders Fjeldstad</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Avanade]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://blogg.fjeldstad.se/?p=131</guid>
		<description><![CDATA[Kom precis hem från hemkammandet av min tredje MCTS-certifiering, &#8221;Microsoft Certified Technology Specialist: .NET Framework 2.0 Distributed Applications&#8221;. Grymt! Nu har jag &#8221;bara&#8221; kvar att skriva ett prov, sedan (om jag klarar det) är jag MCPD: Enterprise Applications Developer. Innan sommaren ska det ske!
]]></description>
			<content:encoded><![CDATA[<p>Kom precis hem från hemkammandet av min tredje MCTS-certifiering, &#8221;<a href="http://www.microsoft.com/learning/mcp/mcts/distapps/default.mspx">Microsoft Certified Technology Specialist: .NET Framework 2.0 Distributed Applications</a>&#8221;. Grymt! Nu har jag &#8221;bara&#8221; kvar att skriva ett prov, sedan (om jag klarar det) är jag <a href="http://www.microsoft.com/learning/mcp/mcpd/entapp/default.mspx">MCPD: Enterprise Applications Developer</a>. Innan sommaren ska det ske!</p>
<br /><a href="http://blogg.fjeldstad.se/?p=131#comments" title="Comments on &quot;MCTS gånger tre&quot;"><img src="http://blogg.fjeldstad.se/wp-content/plugins/feed-comments-number/image.php?131" alt="Comments" /></a>]]></content:encoded>
			<wfw:commentRss>http://blogg.fjeldstad.se/2008/04/03/mcts-ganger-tre/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fix f&#246;r whitespace-bugg i ASP.NETs UpdatePanel</title>
		<link>http://blogg.fjeldstad.se/2008/04/02/fix-fr-whitespace-bugg-i-aspnets-updatepanel/</link>
		<comments>http://blogg.fjeldstad.se/2008/04/02/fix-fr-whitespace-bugg-i-aspnets-updatepanel/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 14:14:30 +0000</pubDate>
		<dc:creator>Anders Fjeldstad</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Webbutveckling]]></category>

		<guid isPermaLink="false">http://blogg.fjeldstad.se/2008/04/02/fix-fr-whitespace-bugg-i-aspnets-updatepanel/</guid>
		<description><![CDATA[Idag satt jag i kanske tre timmar med en ruskigt irriterande IE-visningsbugg som jag trodde skulle driva mig till vansinne. MEN jag hittade till slut en fix, eller workaround i alla fall.
Felscenario: Om man har en UpdatePanel utan innehåll (eller med osynligt innehåll) så kommer den, när den uppdateras, att renderas som en div-tagg, förutsatt [...]]]></description>
			<content:encoded><![CDATA[<p>Idag satt jag i kanske tre timmar med en <em>ruskigt </em>irriterande IE-visningsbugg som jag trodde skulle driva mig till vansinne. MEN jag hittade till slut en fix, eller workaround i alla fall.</p>
<p><strong>Felscenario:</strong> Om man har en UpdatePanel utan innehåll (eller med osynligt innehåll) så kommer den, när den uppdateras, att renderas som en div-tagg, förutsatt att dess RenderMode är satt till Block, vilket är default. Taggen kommer, vare sig man vill eller ej, att innehålla en massa whitespace &#8211; som i sin tur triggar en visningsbugg i Internet Explorer 6. <a href="http://www.getfirefox.com">En vettig webbläsare</a> förstår att en div som bara innehåller whitespace inte har något innehåll och därför inte ska ta upp plats på sidan. Så är inte fallet för IE6 &#8211; där kommer nämligen div:en att få samma höjd som den aktuella fontstorleken.</p>
<p>Sjukt frustrerande! Om det hade varit en vanlig statisk div så hade man kunnat komma runt det hela genom att manuellt ta bort allt whitespace mellan taggarna, men det kan man inte på något enkelt sätt med en standardkontroll, om man inte vill skriva om hela renderingen för kontrollen. Det vill inte jag, i alla fall.</p>
<p><strong>Fix:</strong> Efter mycket lidande kom jag på en lösning. Lägg helt enkelt till ett absolutpositionerat element inuti UpdatePanel:en, till exempel s¥här:</p>
<p><code>&lt;asp:UpdatePanel ID="upTest" runat="server"&gt;<br />
&lt;ContentTemplate&gt;<br />
<span style="color: green;">&lt;div style="position: absolute; width: 0; height: 0;"&gt;&lt;/div&gt;</span><br />
&lt;/ContentTemplate&gt;<br />
&lt;/asp:UpdatePanel&gt;</code></p>
<p>Problemet löst! Visst, jag tycker inte om att lägga in markup som inte gör något, men om det krävs för att lösa en bugg som annars får sidan att se helt muppig ut s¥ implementerar jag den utan att blinka.</p>
<br /><a href="http://blogg.fjeldstad.se/2008/04/02/fix-fr-whitespace-bugg-i-aspnets-updatepanel/#comments" title="Comments on &quot;Fix f&ouml;r whitespace-bugg i ASP.NETs UpdatePanel&quot;"><img src="http://blogg.fjeldstad.se/wp-content/plugins/feed-comments-number/image.php?128" alt="Comments" /></a>]]></content:encoded>
			<wfw:commentRss>http://blogg.fjeldstad.se/2008/04/02/fix-fr-whitespace-bugg-i-aspnets-updatepanel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Passiva inkomster, ett personligt mål</title>
		<link>http://blogg.fjeldstad.se/2008/03/26/passiva-inkomster-ett-personligt-mal/</link>
		<comments>http://blogg.fjeldstad.se/2008/03/26/passiva-inkomster-ett-personligt-mal/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 22:02:54 +0000</pubDate>
		<dc:creator>Anders Fjeldstad</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ekonomi]]></category>
		<category><![CDATA[Företagande]]></category>

		<guid isPermaLink="false">http://blogg.fjeldstad.se/2008/03/26/passiva-inkomster-ett-personligt-mal/</guid>
		<description><![CDATA[Min absoluta målsättning när det gäller sysselsättning och privatekonomi är att jobba med något jag tycker är kul och som jag verkligen brinner för, arbeta &#8221;lagom&#8221; många timmar i veckan (vilket betyder ungefär &#8221;inte fler än att jag mår bra och trivs med det&#8221;) och tjäna tillräckligt mycket pengar för att känna att jag kan [...]]]></description>
			<content:encoded><![CDATA[<p>Min absoluta målsättning när det gäller sysselsättning och privatekonomi är att jobba med något jag tycker är kul och som jag verkligen brinner för, arbeta &#8221;lagom&#8221; många timmar i veckan (vilket betyder ungefär &#8221;inte fler än att jag mår bra och trivs med det&#8221;) och tjäna tillräckligt mycket pengar för att känna att jag kan göra det jag känner för och inte behöver svälta i alltför långa perioder.</p>
<p>Ser det ut såhär just nu? Inte på långa vägar. Jag har en vanlig anställning som sysselsätter mig mer eller mindre 40 timmar i veckan. Det jag gör är helt okej kul/utmanande/lärorikt. Jag är nöjd med den lön jag får för arbetet. Men jag hade ännu hellre själv velat disponera min tid, kunna arbeta intensivt under vissa perioder för att sedan ta det lugnare och göra annat under andra perioder. Inkomsten skulle vara mindre knuten till antalet arbetade timmar per vecka. Det hade varit något!</p>
<p><strong>Passiva inkomster</strong> är pengar man tjänar utan att utföra ett direkt proportionellt arbete. Exempel är förstås ränta på de pengar man har på banken, avkastning på aktier och fonder, royalties från en bok eller skiva man givit ut, hyresintäkter från en lägenhet man äger och hyr ut och så vidare. Det som är bra med passiva inkomster är att de ger en ett visst ekonomiskt svängrum &#8211; genom att inte behöva jobba en timme för att få motsvarande lön kan man använda den tiden till något annat istället. Men det kluriga är att hitta källor till passiva inkomster. Vi är ju i princip uppvuxna med konceptet att man skaffar sig en utbildning för att kunna få ett bra, stabilt jobb (underförstått: en anställning) &#8211; det är inte alls lika välbekant att sträva efter att skaffa sig passiva inkomstkällor eller göra långsiktiga investeringar.</p>
<p>Jag har funderat en del på vilka typer av passiva inkomstkällor som skulle kunna passa mig, och som jag faktikst också skulle kunna skaffa mig i praktiken. Några (mer eller mindre uppenbara) idéer:</p>
<ul>
<li><strong>Traditionellt sparande.</strong> Denna är egentligen rätt självklar, men svårare att realisera än man tror om man inte har tagit sparande på allvar tidigare. Jag satsar på att först skaffa mig en ordentlig buffert på ett <a href="http://konto.marginalen.se/">vanligt bankkonto (fast med bra ränta)</a> och sedan sätta igång med ett <a href="http://www.avanza.se">seriöst fondsparande</a>. Ränta på ränta &#8211; det blir faktiskt pengar till slut. Och det är bra att ha något undanstoppat både inför oförutsedda utgifter och pension.</li>
<li><strong>Annonsering på nätet.</strong> Om jag någonsin skapar en webbtjänst eller blogg som får tillräckligt många läsare/användare så behöver den faktiskt inte kosta pengar för att jag ska kunna tjäna en hacka. Nackdelen är förstås att jag själv tycker lite halvt illa om annonser. Donationer är ett alternativ.</li>
<li><strong>Serviceavtal med kunder.</strong> Jag har ju en <a href="http://www.fjeldstadmedieteknik.se">enskild firma</a> där jag pysslar med diverse system- och webbutveckling åt olika kunder. Genom att sluta någon form av <em>serviceavtal</em> kan jag garantera kunderna exempelvis kortare svarstider i supportfrågor, lägre timtaxa vid incidenter eller liknande mot att de betalar en fast avgift per månad.</li>
<li><strong>Sälja egenutvecklad programvara.</strong> Detta är nog det alternativ jag tror skulle vara både roligast och mest potentiellt lönsamt. Jag gillar att programmera och lära mig tillämpa både nya och gamla tekniska kunskaper för att lösa mer eller mindre vardagliga problem. En bra mix! Det skulle vara lite som att fortsätta i samma stil som <a href="http://blogg.fjeldstad.se/2007/07/08/lunarbloggrabber-05/">mitt program för att ladda ner och spara Lunarstorm-dagboksinlägg</a>, fast i en större skala och kanske med lite mer kommersiellt gångbara produktidéer. Jag har en del uppslag. Allt jag producerar kommer troligen dyka upp under <a href="http://www.fjeldstadmedieteknik.se">Fjeldstad Medieteknik</a>s flagga.</li>
</ul>
<p>Det finns förstås mer jag skulle kunna göra, men jag måste ju börja någonstans. Ett mål jag har satt upp (utan att räkna på det särskilt mycket) är att inom fem år ska minst 25% av min totala årsinkomst vara passiv. Realistiskt eller optimistiskt? Vi får väl se&#8230;</p>
<br /><a href="http://blogg.fjeldstad.se/2008/03/26/passiva-inkomster-ett-personligt-mal/#comments" title="Comments on &quot;Passiva inkomster, ett personligt mål&quot;"><img src="http://blogg.fjeldstad.se/wp-content/plugins/feed-comments-number/image.php?119" alt="Comments" /></a>]]></content:encoded>
			<wfw:commentRss>http://blogg.fjeldstad.se/2008/03/26/passiva-inkomster-ett-personligt-mal/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Indiespel på Xbox Live Arcade</title>
		<link>http://blogg.fjeldstad.se/2008/02/21/indiespel-pa-xbox-live-arcade/</link>
		<comments>http://blogg.fjeldstad.se/2008/02/21/indiespel-pa-xbox-live-arcade/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 11:50:22 +0000</pubDate>
		<dc:creator>Anders Fjeldstad</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://blogg.fjeldstad.se/2008/02/21/indiespel-pa-xbox-live-arcade/</guid>
		<description><![CDATA[Riktigt trevligt att Microsoft till slut börjar göra verklighet av planerna på att &#8221;öppna Live Arcade&#8221; för amatörutvecklare. Alla spel som skickas in måste godkännas på något sätt (ännu ej definierat) vilket ju är helt vettigt. Undrar just hur mycket merarbete detta kommer att innebära för Microsoft&#8230;? Men men, nu kan man i alla fall [...]]]></description>
			<content:encoded><![CDATA[<p>Riktigt trevligt att Microsoft till slut börjar göra verklighet av planerna på att &#8221;öppna Live Arcade&#8221; för amatörutvecklare. Alla spel som skickas in måste godkännas på något sätt (ännu ej definierat) vilket ju är helt vettigt. Undrar just hur mycket merarbete detta kommer att innebära för Microsoft&#8230;? Men men, nu kan man i alla fall säga att det finns en riktig anledning för hobbyister att börja titta på <a href="http://creators.xna.com/Education/GettingStarted.aspx">XNA Game Studio 2.0</a> &#8211; och kanske även något för kursansvariga på diverse universitetsutbildningar att ta hänsyn till?</p>
<p>FZ har skrivit lite om det hela här: <a href="http://www.fz.se/nyhetsarkiv/?id=23716">http://www.fz.se/nyhetsarkiv/?id=23716</a></p>
<br /><a href="http://blogg.fjeldstad.se/2008/02/21/indiespel-pa-xbox-live-arcade/#comments" title="Comments on &quot;Indiespel på Xbox Live Arcade&quot;"><img src="http://blogg.fjeldstad.se/wp-content/plugins/feed-comments-number/image.php?93" alt="Comments" /></a>]]></content:encoded>
			<wfw:commentRss>http://blogg.fjeldstad.se/2008/02/21/indiespel-pa-xbox-live-arcade/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

