
24. februar 2009
Mass Effect 2 er endelig på vej
Jeg er godt nok ikke færdig med Mass Effect endnu, men alligevel glæder jeg mig til Mass Effect 2 er klar. Jeg skal helt sikkert have det.
Mass Effect er simpelthen et fantastisk spil. Det er storslået og omfattende, og har en historie som er både fængende og medrivende.
Universet er ikke som vi kender det fra Star Wars, men derimod mere sådan som vi kan forestille os at tingene vil komme til at se ud i en mulig fremtid.
Har du ikke prøvet Mass Effect endnu, og har interesse i omfattende rollespil, kan jeg varmt anbefale det. Men vær forberedt på at bruge en del tid på det.
Suk.. så mangler jeg selvfølgeligt stadig at finde ud af hvornår jeg skal kaste mig over Fallout 3

21. februar 2009
Here we go again
For lidt over et år siden blev jeg træt af min hjemmelavede og lettere forældede blog og skiftede til
blogger.com. De havde et fint Out-Of-The-Box system, hvor man fik det hele forærende, men med meget begrænsede muligheder for at tilpasse det som man gerne ville have det. Derfor var jeg hurtig til at skifte tilbage til et site jeg selv kunne passe og pleje. Valget faldt på
DasBLOG, fordi det var OpenSouce, ASP.NET og nemt at tilpasse som man ville.
Desværre er der også nogel begrænsninger i DasBLOG, og som det ofte sker med OpenSource projekter, mistede projektet momentum hen over året. Dette betød at DasBLOG blev overhalet indenom af
BlogEngine.NET.
Jeg har i den seneste uges tid rodet lidt rundt med at sætte et teststite op med BlogEngine.NET, for først og fremmest at se om det er noget der duer, og i så fald at konvertere indlæg og endeligt skifte dette site ud med den nye version.
Testsitet blev oprettet, BlogEngine.NET blev uploaded direkte, uden at jeg pillede ved noget, og vupti.. 1 stk. Blog. Så bliver det dælme ikke nemmere

Så kastede jeg mig over at ændre design på sitet, så det kom til at ligne dette site så meget som muligt, dog med en række forbedringer jeg længe har haft planer om. Igen en positiv overraskelse. BlogEngine.NET kommer med en lang række themes, og finder man ikke lige et man kan lide, er det nemt at oprette et selv.
Mit nye theme er endnu ikke helt på plads, men det er allerede ret tæt på at være som jeg gerne vil have det.
Som ekstra bonus findes der tools til at importere eksisterende blogindlæg, inkl. billeder og andet hejs, fra DasBLOG. Rigtigt lækkert og det tog ikke mange minutter at få alt flyttet over på testsitet. Det eneste der ikke helt ser ud til at være helt iorden, er hvis jeg fra et blogindlæg linker til et andet. Det er der jo ikke rigtigt noget at sige til, da URL strukturen jo ikke er den samme i de to bog systemer.
Som tingene flasker sig lige i øjeblikket kan det ikke vare voldsomt lang tid før jeg er istand til at deploye en ny version her på sitet. Happy days

18. februar 2009
Noget sneg sig under min Star Wars radar
Jeg faldt, ganske tilfældigt over dette lille klip. En reklame for en Star Wars (-ish) film som kan købes i butikkerne allerede nu (jeg har dog ikke set den nogen steder, men cdon.com har den
her)
Anyhoo.. jeg er som det jo nok er gået op for folk, Star Wars Fan, såvel som Simpsons Fan. Og selv om Family Guy på ingen måde når de højder Simpsons gør på kult-meteret, så er det alligevel værd at se. Når man så slår det sammen med Star Wars, så KAN det vel nærmest kun blive et hit

Jeg vil straks bestille et eksemplar af dette lovende produkt

17. februar 2009
Hvad betyder de nye regler i F1?
Det forklarer Red Bull køreren Sebastian Vettel i dette lille filmklip:
Kort fortalt får bilerne mindre bagvinge, justerbar forvinge, Slicks (dæk uden mønster) er tilbage og så skal bilerne have fjernet alle de sære udvoksninger der i tidens løb er vokset ud overalt, for at fremme downforce og airflow.
Den nok mest interessante nyskabelse er et nyt kinetisk boost system, der består af et batteri der opsamler kinetisk energi når bilen bremses. Køreren har derefter mulighed for at udløse den energi som ~86HK ekstra i en kort periode.
Alle disse regler er lavet for at give mere spændende kørsel, med flere overhalinger og mere spænding i løbene. Om det så bliver en succes kan kun tiden vise..
..men JEG glæder mig ihvertfald til F1 2009 

16. februar 2009
Nogle spiludviklere er bare rigtigt innovative
Igår var jeg lidt efter de spiludviklere der lavede MineSweeper Flags demoen til Xbox Live Arcade.
For at lade det hele gå lidt mere retfærdigt til vil jeg da lige gøre opmærksom på at der skam stadig findes nogle rigtigt fede og nyskabende spil derude. Spillet
Replica er f.eks. et godt eksempel på at superfancy grafik og den slags slet ikke er nødvendigt for at lave et godt spil.
Det er længe siden jeg har hygget mig så længe med et spil der er så simpelt.
Kanon idé og rigtig fed atmosfære der er i spillet. Prøv det!!
Spil Replica her

15. februar 2009
Nogle spiludviklere fatter bare ikke en brik
Det var sådan en hyggelig lille afslapningssøndag idag. Udenfor dalede sneen stille ned, og der var derfor ingen grund til at gå udenfor. Man risikerede jo at ødelægge idyllen

Istedet valgte jeg at fyre op under Xboxen, for at se om der var kommet noget sjovt på Xbox Live Arcade.
Minesweeper Flags fangede min opmærksomhed. Jeg mener. Minesweeper på en Xbox? Det lød umiddelbart som noget af et ripoff at forsøge at sælge det gode gamle Minesweeper, som alle jo fik gratis med når de installerede Windows på en PC. Bevares, det koster godt nok kun 400 Microsoft Points, men alligevel. Nysgerrigheden fik overtaget, og jeg downloadede en demo. Nu skulle jeg se om det kunne byde på noget nyt og spændende.
Når man starter spillet op får man så lidt salgs-snak om de nye gamemodes og multiplayer features. Jap-jap.. hurtigt videre og igang med et lille demospil. Cool nok, man kan vælge et landskab hvor i minerne er placeret. Lidt mere tiltalende end de grå firkanter man har på Windows versionen. Nå, men så måtte man jo lige prøve. Klik, klik, klik og klik... og så et irriterende vindue der poppede op på skærmen for at fortælle hvor fantastisk dette spil var, og at jeg måtte slippe de 400 Points, for at få lov at spille mit spil færdigt.
WTF?? Som om man på fire klik kan afgøre om et spil er godt eller ej? Kunne man i det mindste ikke få lov at afdække f.eks. 75% af banen før den kom, eller lavet noget andet som li'som kunne fortælle mig at der ville være meget mere fidus i at købe hele spillet. Sandheden er jo nok at Minesweeper Flags ikke har ret meget nyt at byde på, men når man nu har et så stort marketingsapperat som Xbox Live Arcade MarketPlace til rådighed, så fatter jeg ikke at det ikke kunne lade sig gøre at diske op med noget lidt mere interessant. 400 Points herfra får de ihvertfald ikke. Dertil er jeg for nårlig. Jeg har jo ikke engang kunne vurdere om det er de 400 Points værd.
Istedet har jeg kastet mig over demoen til
Braids. Jeg hentede den for efterhånden længe siden, men fik aldrig rigtigt fanget det. Nu prøver jeg det igen, og er tilbøjelig til at tro det godt kunne være 1200 Points værd

9. februar 2009
Predicate metoder på Generic Collections
Helt tilbage i .NET 2.0 fik man mulighed for at benytte de såkaldte Predicate metoder på (blandt andet) collections af typen
System.Collection.Generic.List<T>.
Blandt disse Predicate metoder er FindAll, som i overensstemmelse med navnet finder alle elementer i listen, der overholder det givne predicate. (
Se MSDN dokumentationen for FindAll)
FindAll giver altså mulighed for at have en liste over dinosaurer, og så finde alle dem der ender på "saurus". Meget nyttigt

Heldigvis kan FindAll bruges til meget mere end det.
Det er nemlig også muligt at andvende en Delegate som Predicate, og så bliver FindAll for alvor interessant.
I forbindelse med en opgave på mit arbejde har jeg haft behov for at lave nogle Collections der nedarver fra
System.Collection.Generic.List og der på har jeg lavet nogle metoder med lidt ekstra funktionalitet. Nu kan jeg naturligvis ikke diske op med koden jeg har lavet, men principperne og scenariet kan vi godt lige vende her: Sagen er at jeg har en meget MEGET stor collection af elementer, hvert element kan være af en given type, defineret ved en Enum. Jeg har nu brug for at kunne bede listen om at give mig alle elementer af en given type (GetTypeSubCollection) og antallet af elementer af en given type (CountByType).
Koden så nogenlunde således ud for hhv. GetTypeSubCollection og CountByType (Objekttyper og variable navne er frit opdigtet, og overholder ikke de retningslinier jeg normalt benytter

:
public MyCollection GetTypeSubCollection(MyTypeEnum type)
{
var matchingElementCollection = new MyCollection();
foreach(MyCollectionElement element in this)
{
if ( element.Type == type)
{
matchingElementCollection.add(element);
}
}
return matchingElementCollection;
}
public int CountByType(MyTypeEnum type)
{
int count = 0;
foreach(MyCollectionElement element in this)
{
if ( element.Type == type)
{
count++;
}
}
return count;
}
Da jeg jo godt kan lide at udforske mulighederne i .NET Frameworket tænkte jeg at jeg ville prøve at se om der var noget fidus i at benytte FindAll, da det jo burde være en oplagt måde at opnå samme resultater som ovenstående, men med mindre kode.
Jeg endte med med følgende:
public MyCollection GetTypeSubCollection(MyTypeEnum type)
{
var matchingElementCollection = new MyCollection();
matchingElementCollection.AddRange(
this.FindAll(delegate(MyCollectionElement element){
return element.Type == type;
})
);
return matchingElementCollection;
}
public int CountByType(MyTypeEnum type)
{
return this.FindAll(delegate(MyCollectionElement element){
return element.Type == type;
}).Count;
}Metoderne gør det samme. Unit tests viser også at resultaterne stemmer overens. Der er en anonym delegate der klarer det predicate vi skal bruge. Og da vi benytter alle de nye smarte fiksfakserier burde det jo bare være topklasse. Men i eksperimentets hellige navn (og da der som sagt er MANGE elementer i min collection) lavede jeg lige en hurtig sammenligning af de forskellige implementationer. Resultatet overraskede mig faktisk en smule:
Der var 282664 elementer i min collection under testen.
GetTypeSubCollectionFør refaktorering: 13ms. Fandt 271081 matches.
Efter refaktorering: 24ms. Fandt 271081 matches.
CountByTypeFør refaktorering: 10ms. Fandt 271081 matches.
Efter refaktorering: 18ms. Fandt 271081 matches.
Ikke lige det resultat jeg havde forventet. Mit bud er at instantieringen af den anonyme delegate er skyld i at de refaktorerede metoder er næsten dobbelt så lang tid om at eksekvere som de originale implementationer. Det er lidt overraskende at der er så stor forskel, og jeg havde faktisk forventet at ListAll havde været hurtigere end foreach.
Tidstagningen taler dog sit klare sprog, og jeg endte med at vende tilbage til de oprindelige implementationer.

Derudover viser det også at det ind imellem godt kan betale sig at måle på sine optimeringer. Måske er der også andre steder hvor ens optimeringer virker modsat det forventede. Steve Mcconnell skriver i
Code Complete 2 (totalt yndlingsbog) at tidsmålinger bør indgå som et testparameter, især ved tidskritiske operationer. Det må det her nævnte eksempel da siges at være et tydeligt eksempel på