Startsidan

Prenumerera på mina inlägg:
RSS-flöde

Kontakta mig gärna via e-post:
anders.fjeldstad@gmail.com

Följ mig via Twitter:
twitter.com/Hihaj

Sök bland alla inlägg:

Inlägg i kategorin "Teknik"

Noterat under utveckling av ny LunarBlogGrabber

söndag 24 maj 2009 | Kategorier: .NET, Bloggar, Teknik | Inga kommentarer

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 – 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.

Läs vidare »

Hantera WebBrowser-kontrollens minnesläckor

måndag 23 februari 2009 | Kategorier: .NET, Microsoft, Teknik | Inga kommentarer

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 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.

Efter lite Googlande kunde jag konstatera att minnesläckorna i WebBrowser-kontrollen är kända av Microsoft, och att det även finns ”hotfixes” 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.

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å frigörs så mycket arbetsminne som möjligt. Så här kan det se ut i ett program skrivet med C#:

// Importera metoder från kernel32.dll, någonstans i klassdefinitionen...
[DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetSize", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
internal static extern bool SetProcessWorkingSetSize(IntPtr pProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize);

[DllImport("KERNEL32.DLL", EntryPoint = "GetCurrentProcess", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
internal static extern IntPtr GetCurrentProcess();

// ...och frigör arbetsminne där det passar.
IntPtr pHandle = GetCurrentProcess();
SetProcessWorkingSetSize(pHandle, -1, -1);

Så var det med den saken. Den ursprungliga forumtråden där jag läste om detta hittar du här, och Microsofts dokumentation av de aktuella metoderna i kernel32.dll finns här. Hoppas det hjälper någon.

Allt flyttat från Loopia till Binero

tisdag 17 februari 2009 | Kategorier: Teknik | 2 kommentarer

Jag skrev tidigare att jag skaffat ett webbhotellskonto hos Binero. Idag har jag flyttat allt jag hade hos Loopia till Binero, så det kan hända att något missats eller så. Säg till om ni ser något skumt.

Shit, jag kom precis på att jag glömt skapa upp alla mailkonton…och nu strular Bineros kontrollpanel lite, bra början! Wohoo! Så försök inte skicka något till @fjeldstad.se eller @fjeldstadmedieteknik.se just nu…

Vista, trådlöst nätverk och Linksys WRT54GL

torsdag 16 oktober 2008 | Kategorier: Microsoft, Teknik | Inga kommentarer

I ett tidigare inlägg skrev jag om hur jag med ett kommando lyckades få min jobbdator med Vista att kommunicera med det trådlösa nätverket på min arbetsplats. Jag har dock hela tiden haft problem med att samma dator inte har kunnat få någon IP-adress från routern i nätverket hemma, varken via kabel eller WLAN. Nu har jag äntligen hittat problemet, genom gammal hederlig ad-hoc trial and error…

Routern som jag har är en Linksys WRT54GL med programvaran DD-WRT installerad. Jag är på det hela taget mycket nöjd med den – den är den tredje jag testat sedan jag flyttade till Stockholm och den är helt överlägsen de tidigare när det gäller stabilitet och funktionalitet. Men, som det visade sig, den var i sitt defaultutförande (eller möjligen i DD-WRT:s defaultutförande) inte helt Vista-kompatibel.

Problemet har alltså varit att Vista har kunnat koppla upp sig mot routern, men aldrig fått någon IP-adress. Under nätverksinställningarna har det stått att nätverket är ”Local only” och sådana saker, vilket förstås inte stämmer.

Lösningen: I DD-WRT, gå in under Setup > Basic Setup > Network Address Server Settings (DHCP). Kryssa ur ”Use DNSMasq for DHCP”. Klicka på Apply Settings. Klart! Vista kommer nu kunna få en IP-adress precis som alla de andra barnen.

Då kan man förstås lite nyfiket undra vad DNSMasq är för något. Jag googlade det och fick reda på att det är en ”lättvikts- och lättkonfigurerad DNS-forwarder och DHCP-server designad för små nätverk”. Jag har ingen aning om varför den inte funkade med Vista i kombination med min routerkonfiguration eller hur min router väljer att lösa DHCP- och DNS-frågan när jag stängt av denna funktion, och jag orkar inte bry mig heller riktigt. Det funkar – det är allt som spelar roll.

Första timmen med Google Chrome

onsdag 03 september 2008 | Kategorier: Teknik | 10 kommentarer

Nu har jag testat betaversionen av den nya webbläsaren Google Chrome i någon timme och jag måste säga att jag gottar mig. Den installerar snabbt, importerar bokmärken, sparade lösenord och historik från Firefox (eller annan webbläsare), renderar sidor och exekverar Javascript blixtsnabbt, har ett rent och snyggt användargränssnitt…en massa bra saker.

En detalj: det vore trevligt att kunna dubbelklicka på den lediga ytan på ”fliklisten” för att öppna en ny flik, på samma sätt som man gör i Firefox. Den lilla ”+”-knappen som man använder för att öppna nya flikar i Chrome är lite väl pluttig tycker jag, plus att den ligger väldigt nära ”stäng”-knappen för fliken längst till höger. Man kan förstås öppna flikar på annat sätt, som att trycka ctrl+t, men ändå.

Detta är en programvara som jag trots dess tidiga version utan att tveka skulle kunna rekommendera mina föräldrar att installera. Det man får tänka på är att vissa webbplatser kanske inte känner igen den – exempelvis testade jag att logga in på Swedbanks internetbank och då fick jag ett meddelande från banken om att webbläsaren kanske inte skulle stödjas, men det var bara att klicka ”Fortsätt”, allt verkade fungera minst lika bra som tidigare.

Än så länge är jag alltså riktigt imponerad och börjar utveckla ett visst beroende…