Sunday, June 28, 2009

Ny version av Page Type Builder som möjliggör enklare testning

I början av månaden skrev jag om ett projekt som då var på experimentstadiet, Page Type Builder. Sedan dess har jag uppdaterat det tre gånger och vi har börjat använda det i ett projekt.

Hittills har jag fått en hel del positiv feedback och många bra idéer om hur det kan vidareutvecklas, både inifrån det projekt där vi använder det och från EPiServer och andra EPiServer partners.

Idag släppte jag version 0.7 vilken är den fjärde versionen (versionsnumreringspolicyn kräver lite arbete). Denna version innehåller klassen PageDataFactory som till viss del erbjuder samma metoder som EPiServers DataFactory. Dock returnerar denna klass PageData objekt med rätt underliggande typ för sidor vars sidtyper är deklarerade i kod. PageDataFactory möjliggör också testning utan att man behöver gå mot DataFactory då denna, eller rättare sagt den klass som delegerar till DataFactory, kan mockas.

Såväl koden som en assembly som är färdig att användas kan laddas ned från projektets site på CodePlex .Mer om vad denna version innehåller finns att läsa på min blog på EPiServer Labs.

Alla som laddar hem projektet, testar det, kollar igenom koden och ger mig feedback får en gratis badtermometer*!

*Gäller så länge lagret räcker.

Friday, June 26, 2009

Nansen får två nya medarbetare

Det har varit hemligt ett tag men nu är det officiellt. Nansen anställer Emil Cardell som närmast kommer från Valtech och Jenny Ney från Halvarsson & Halvarsson.


Emil har lång erfarenhet av EPiServer Community tack vare sina roller på Valtech och Trive. Emil kommer på Nansen att arbeta som teknisk produktionsledare och systemarkitekt inom Microsoft .NET, och EPiServer (CMS och Community).

Jenny kommer på Nansen att arbeta med kundansvar samt strategi- och affärsutveckling på nätet. I och med en bakgrund från Halvarsson & Halvarsson, OMX, SIX och SEB kommer Jenny även att bli vår expert i frågor som rör Investor Relations.

Välkomna säger vi till Emil och Jenny som kommer att börja under sommaren. I och med detta är vi numera totalt 20 medarbetare på Nansen.

Nansen blir EPiServer Most Valued Professional

Nansen har fått en medarbetare invald i EPiServers allra finaste sällskap. Det är Joel Abramhamsson som sedan en tid har bloggatEPiServer World som numera kan titulera sig EMVP (EPiServer Most Valued Professional).


Eftersom vi på Nansen är fokuserade och specialiserade på EPiServers plattformar känns det naturligtvis extra kul (och nästan som en självklarhet) att vi är representerade även i EMVP-gruppen.


Stort grattis säger vi till Joel!

Wednesday, June 24, 2009

Pacman twittrar


halva nansen drog till London


jaha. idag så drog halva Nansen till London och @Media 2009.
kvar här på kontoret sitter jag, stekarmackan, PRAOtjejen, jonpet och joepet.
ytterligare några sitter ute hos kund.
men DrKraft, Kalasklas, Lillstrumpa, Kalpau (aka K2), PassJohan, Datapata, Gnagarmartin

Vi hoppas på mycket blogginlägg från London. Helst på okristliga tider. och bilder.
liveblogging emotses med spänning.
hare så kul i London!

Tuesday, June 23, 2009

Disk alignment best practices for SQL Server

There comes a time for most developers when they are in a project without a DBA and they are stuck as the involuntary DBA (Paul Randal has a great blog post about the matter), yes, there are those cases. In fact for most small to mid-sized applications there’s a chance that you will end up in that position.
I was recently given the task to set up a new SQL server instance and decided to get it right from the start. I had earlier listened to several Run As Radio shows where they talked about the importance of disk arrays and the way disks are partitioned. The way the sectors and stripes are configured from start is of major significance to the performance that the SQL server will be able to give. There is no way of using code to get around the fact that the sectors in the spindles are misaligned. This paper written by Jimmy May, Denny Lee explains the basics of disk alignment and gives you some tips of how to set up your system before you start installing.

The whitepaper gives two small equations on how to know if you disks are misaligned, when you use this two equations the result should be an integer, if not, then you have a misaligned drive

Partition_Offset ÷ Stripe_Unit_Size

Stripe_Unit_Size ÷ File_Allocation_Unit_Size

“Of the two, the first is by far the most important for optimal performance. The following demonstrates a common misalignment scenario: Given a starting partition offset for 32,256 bytes (31.5 KB) and stripe unit size of 65,536 bytes (64 KB), the result is 0.4921875. This is not an integer; therefore the offset & strip unit size are not correlated. This is consistent with misalignment.
However, a starting partition offset of 1,048,576 bytes (1 MB) and a stripe unit size of 65,536 bytes produces a result of exactly 8, an exact integer, which is consistent with alignment.”

To get the first part, the offset write this line into the console

wmic partition get BlockSize, StartingOffset, Name, Index

The second part of the equation is harder to get. Windows it self does not provide a good way to get the stripe unit size. To get the actual numbers you'll have to check with your vendor.

On the other hand, the File allocation unit size can be found by typing

fsutil fsinfo ntfsinfo c:
You will have to do this for each drive.After you know this then you know if you need to repartition the drive to the recommended cluster size for SQL server of 64KB.

Check out the links and resources in the white paper and Paul Randal’s blog for more information.

Thursday, June 18, 2009

NDC day 1

The first day of the Norwegian Developers Conference has come to an end. The day has been as one expected, packed with great talks, demos and new thinking.


After Uncle Bob Martins initial keynote speech I went to listen to Scott Hanselman and his talk about some of the new features in .NET4 the implications and benefits. The new ID handling in ASP.NET is certainly interesting. Then you have the whole ASP.NET MVC, MEF and the DLR, that actually is a statically typed dynamic call.... yeah you read it right, confusing but kinda cool.


11:30 Richard Campbell talked about "The scaling habits of ASP.NET applications".

In the speech he stated the thing that should be obvious to all. Get the Data Right! Before you start looking for bugs and debugging your application (if it's not an utterly obvious bug) Get your numbers straight. If you don't know what the root source of the error is there is no reason to go searching your code for flaws.

As an example Richard took the fact that when getting a page the initial request will not be that big, and even if it is it will still be just one request. But then when the browser starts parsing the code with all it's script includes, images flash files and so on, every resource will create an extra request to the server. If you don't know that the requests, like in the example Richard told, is filling up the GC (garbage collection) and thus triggering a App Pool reset, stopping all coming requests for more resources and page loads, then all debugging and performance tuning you did is just a waist of time. If you instead had optimized the session then you wouldn't have that problem.


The 13:30 slot went to Uncle Bob, he was actually acting stand in for Ayende Rahien. Uncle Bob did a good job, it was his usual Clean Code talk about being a professional developer. There where no surprises there, though it's always good to be reminded of it.


It's getting late so I'l leave you with a cliff hanger to the next post.


PS

Just listened to .NET Rocks show #455 (where they read my letter and totally misspelled my name :) It's about things that we as involuntary DBA's should know. Listen to it it's more on the IT side of things but very interesting.

DS

Wednesday, June 17, 2009

Nansen gör hembesök


I dagarna drar NDC, Norwegian Developers Conference igång i Oslo. Vi kan då inte låta bli att passa på att hälsa på våra vänner i öst. Sen att det blir ett av årets mesta konferenser med årets mest gedigna talarlista, som vi för övrigt tog upp i tidigare poster.

Det här kommer att bli några riktigt hypade dagar, hoppas att alla lever upp till sina rykten.

Monday, June 15, 2009

lite lite folk på kontoret idag

*EKOekokoko*
japp, det är lite småtomt i kodarrummet idag!
många sitter ute hos kund och jobbar och vissa andra är på semester.
jonpet är i staterna och steker medans jonas steker söderut. sen har han mage att twittra upp bilder på det!
lite väl magstarkt med tanke på vilket väder vi andra får stå ut med här i sverige...

Bing vs Google

Techcrunch har en intressant artikel som tar upp sökresultat i sökmotorerna Bing och Google.
Vi har ju alla vant oss vid google och att söka på internet heter numera "att googla". det går knappt att tänka sig internet utan google. har det kommit en ny king of the hill nu?
Microsofts Bing?
"Mycket tveksamt" säger nog de flesta. jaja, men vissa av er kanske kommer ihåg sökmotorn Altavista. den var grym. den var kung. den ägde. ALLA använde altavista (typ 107% av alla webbanvändare). men var finns altavista nu?
kom ihåg det när ni läser artikeln

http://www.techcrunch.com/2009/06/15/the-postman-always-bings-twice

Saturday, June 13, 2009

Är Activator.CreateInstance långsam? - Ett litet experiment

Igår, när jag funderade lite på PageTypeBuilderprojektet behövde jag ett svar på frågan i rubriken, dvs är Activator.CreateInstance långsam. Jag googlade runt och hittade en hel del intressanta artiklar, bland annat denna som är lite off topic men intressant. Till slut bestämde jag mig ändå för att göra ett eget litet experiment.

Jag skapade en ny klass med tio sträng-properties (jag experimenterade med andra varianter också men klassens utformning verkade inte spela någon roll) vilken jag instansierade mellan 1 000 och 10 000 000 gånger, dels genom att använda dess konstruktor och dels genom att använda Activator.CreateInstance. Resultatet visas i tabellen nedan.

Antal instanser Konstruktor (s) Per instans (ms) CreateInstance (s) Per instans (ms)
1000 0 0,00000 0,0156 0,01560
10000 0 0,00000 0,0313 0,00313
100000 0 0,00000 0,3594 0,00359
1000000 0,0625 0,00006 3,5468 0,00355
10000000 0,5156 0,00005 35,4219 0,00354

Den totala tidsåtgången i sekunder visas i nedan diagram.



Tidsåtgången per instans visas i nedan diagram.



Nu var ju detta test långt ifrån vetenskapligt men om man ändå försöker sig på att dra en slutsats så kan vi börja med att konstatera att tidsåtgången för att skapa en instans med Activator.CreateInstance visserligen är avsevärt högre än att använda konstruktorn (vilket man ju i vissa lägen inte kan, exempelvis då vi vet vilken typ vi vill instansiera först vid runtime) men att den samtidigt är försumbar då vi bara vill skapa ett mindre antal objekt.

Friday, June 12, 2009

fan va vi har kul på skeppsbron

ok, det regnar och vädret ut ser ut skit.
men när man har såna här fredagsmöten så är det ändå jävligt kul att leva!
det går bra för nansen och vi har storslagna planer för framtiden och vi dricker corona med lime!

dock så måste jag förbättra mig i virtua tennis. dubbelpisk av johan idag.
och då fick han ändå en AIK-matchtröja av mig imorse!
oförskämt att inte låta mig vinna...

Log4Net - The process cannot access the file because it is being used by another process

Jag har under en lite väl lång tid bankat huvudet i väggen när jag försökt göra det möjligt att hämta hem Log4Net-loggfiler via FTP. Trots att jag hade specat lockingModel value="MinimalLock" i configen för mina appenders fick jag felmeddelandet "The process cannot access the file [sökväg till loggfilen] because it is being used by another process". Inte heller lyckades jag skapa en ASP.NET sida som visade innehållet trots att jag vid öppnande av filen angav FileAccess.Read och FileShare.Read.

Till slut visade det sig att lösningen låg i att i configen av appendersen använda typen "log4net.Appender.RollingFileAppender+MinimalLock" eller "log4net.Appender.FileAppender+MinimalLock" istället för bara "log4net.Appender.RollingFileAppender" respektive "log4net.Appender.FileAppender".

Vet inte om jag ska känna mig dum eller sur med tanke på den enkla lösningen... :)

Thursday, June 4, 2009

Geekmeet Stockholm


Kvällens Geek Meet går i välgörenhetenstecken. Vi på Nansen bestämde oss för ge ett bidrag till Rädda Barnen kvällen till ära.


Ses där!

Mattias på Söderhavet invald i styrelsen för Sveriges designer

Idag är vi lite extra stolta här på Skeppsbron. Mattias CD på vår systerbyrå Söderhavet har blivit invald i styrelsen för Sveriges designer.

Sveriges designer är Sveriges bredaste branschorganisation för designer verksamma inom grafisk-, industri-, interaktions-, mode-, möbel-, produkt- textil-, och webbdesign. Via möten, mingel och Internet driver de viktiga branschfrågor.

Kul, spännande och ett stort grattis till Mattias!

Monday, June 1, 2009

Typad åtkomst av EPiServer Properties och arv mellan sidtyper - Ett experiment

Nu har det varit helg igen och trots att viss återhämtning var nödvändig efter The Copa har jag haft svårt att hålla mig borta från tangentbordet. Resultatet blev ett experiment med att skapa en EPiServer plugin som låter användaren (utvecklaren) definiera sidtyper i kod och tillhörande blogginlägg med nedladdningsbar källkodEPiServer Labs.
Det här är långt ifrån det första försök som görs att skapa möjlighet till arv mellan sidtyper och typad åtkomst till properties. Exempel på andra är Fredrik Tjärnbergs Page Type Tool och Daniel Rodin och Mikael Nordbergs lösning.
Det intressanta med den lösning jag jobbat på är den helt enkapsulerar sidors egenskaper i objekt utan att egenskaperna för den delen är knepiga att komma åt eller att det krävs svårläst kod för att komma åt dem, något som till stor del möjliggjorts genom att EPiServer har lagt till generiska metoder för hämtning av PageData-objekt i version R2 SP2 RC av EPiServer CMS som nyligen släpptes.