TFSBuild og NUnit tests

by DotNetNerd 27. January 2009 17:30

Forleden sad jeg og bankede hovedet imod en mur i form af et build der skulle konfigureres til at afvikle NUnit tests. Jeg fandt en række forskellige eksempler, men det gav mig alligevel lidt bøvl. Løsningen viste sig imidlertid at være simpel nok, men det er det jo tit når det først virker.

  1. Hent og installer MSBuild Community tasks
  2. Konfigurer TFSBuild.proj, som findes igennem Team Explorer, under build definitions, hvor der skal tilføjes:

<Target Name="AfterCompile">
    <CreateItem Include="$(OutDir)..\**\*Test.dll">
      <Output TaskParameter="Include" ItemName="TestAssembly" />
    </CreateItem>
    <NUnit
      Assemblies="@(TestAssembly)"
      OutputXmlFile="$(OutDir)UnitTests.xml"
      ContinueOnError="false"
      ToolPath="C:\Program Files (x86)\NUnit 2.5\bin\net-2.0" />   
  </Target>

CreateItem bruges til at skabe en liste over assemblies der som konvention hedder noget med Test.dll til sidst, og denne liste fodres så til NUnit tasken, der desuden skal peges hen til hvor NUnit er installeret.

Efter at konfigurationen var på plads prøvede jeg Build Notification Tool som er en del af TFS powertools – det kan klart anbefales frem for blot at få tilsendt en stribe e-mails når builds er kørt.

Tags: ,

Technology overflow

by DotNetNerd 21. January 2009 19:24

Nye frameworks, tools og principper

Starten på det nye år, som samtig har været starten på nyt job for mig, har betydet at det var tid til at lære nogle frameworks at kende som jeg ikke tidligere har brugt professionelt. Det har været rigtigt spændende, men har også fået mit hoved til at eksplodere i forhold til tanken om at skulle blogge om det. Jeg vil derfor skrive lidt om hvad jeg har set på, fordi det nok er en del af de ting bloggen kommer til at omhandle fremadrettet.

Vi er en shop der gør alvor af at arbejde efter agile pricipper så jeg har haft tid til at kigge på ORM, Unit testing, mocking, Dependency Injection, Continuous Integration og Migrations. Dertil kommer Office Interop og ASP.NET MVC, som jeg endelig får mulighed for at bruge professionelt, hvor det ellers har været på todo-listen hjemme siden jeg fik leget med de helt tidlige bits. Og sidste men ikke mindst har jeg kigget op tools til synkronisering og deling af data.

Object relationel mappers

Mere præcist har jeg i forbindelse med ORM's kigget på NHibernate, Fluent NHibernate og LINQ to NHibernate, samtidig med at jeg har en bog på vej om LINQ to entities. Jeg håber LINQ to Entities udvikler sig til et reelt alternativ til NHibernate, som jeg lige knap synes det er idag. Hovedanklagen idag er at det ikke giver persistence ignorence, hvilket er et stort minus i forhold til at få et pænt løst koblet design. Det er dog et issue Microsoft er klar over, og noget de arbejder på til vNext. Et andet issue der arbejdes på som er væsentligt er iøvrigt model drevet design, hvor LINQ to Entities idag er meget datadriven.

Continuous Integration

Opsætning af et continuous integration miljø, som skal baseres på Team Foundation Server er en anden ting jeg er ved at se på. Umiddelbart virker det nemt at komme igang med, men udarbejdning af build scrips skal nok blive interessant at se på. En overvejelse er blandt andet om man skal holde sig til at bruge MS Build Server eller om NAnt viser sig at være den rigtige vej at gå?

Migrations

Migrator.NET har været rimeligt nemt at komme igang med, bortset fra at dokumentationen er rimeligt tynd, så selve konfigurationen skulle det lige pilles lidt ved for at få det til at spille.

Data synkronisering og deling af data

Idet jeg er begyndt at pendle er synkronisering af data imellem min desk- og laptop også blevet et super relevant emne, hvilket fik mig til at afprøve synctoy, live sync, mesh, skydrive samt servicen delicious. Mesh har jeg forelsket mig lidt i, selvom jeg må erkende at stabiliteten ikke er god nok endnu i beta versionen, samtidig med at de 5 GB plads man får idag er lidt tyndt når man på et skydrive får 25 GB.

Flickr og billedwidgets

by DotNetNerd 29. December 2008 11:29

En af mine gamle lidenskaber der indimellem popper frem er at lege med billeder, og nu jeg har haft ferie gav det sig udslag i at jeg ville prøve at lave en billedvæg til mit site, hvor billederne skulle trækkes fra flickr. Jeg havde egentlig forventet lidt bøvl, men selve det at trække billeder kræver ikke andet end følgende.

Flickr flickr = new Flickr("apiKey", "sharedSecret");
PhotoSearchOptions options = new PhotoSearchOptions();
options.Tags = "Christian";
options.Extras |= PhotoSearchExtras.DateTaken | PhotoSearchExtras.OriginalFormat;
options.UserId = flickr.PeopleFindByEmail("dotnetnerd@yahoo.com").UserId;
options.TagMode = TagMode.AnyTag;
options.SortOrder = PhotoSearchSortOrder.DateTakenDesc;
options.PerPage = 6;
Photos photos = flickr.PhotosSearch(options);

Photos indeholder så en PhotoCollection som hver har urls til billederne i original, medium, lille og thumbnail størrelse.

Herfra manglede jeg så bare en eller anden smart måde at vise billederne på. Jeg faldt hurtigt over FancyBox, som er en JQuery plugin der også er rigtigt nem at bruge, og lader brugere trykke på en thumbnail og se hele billedet. Dagen efter poppede der tilfældigvis en blogpost ind omkring TinySlideShow, som lige som navnet antyder giver mulighed for at lave et slideshow. Det skulle naturligvis også prøves af, og da jeg i noget tid gerne have ville finde på noget nyt til hovedsiden på dotnetnerd.dk var det jo oplagt.

 

Sidste dag hos Hedal:Kruse:Brohus

by DotNetNerd 19. December 2008 14:20

Så er min sidste dag hos Hedal:Kruse:Brohus overstået efter lige knap to rigtigt gode år. Det har været en fornøjelse at arbejder der, men jeg har haft brug for at kaste mig ud i nogen nye udfordringer, som jeg nu er sikker på jeg vil få hos Vertica hvor jeg starter fra begyndelsen af det nye år.

Nu vil jeg nyde min ferie, om end det også skal nørdes lidt hjemme i løbet af de 14 dage. God jul og godt nytår til jer derude.

Tags:

Årets blogger hos MSDN

by DotNetNerd 15. December 2008 07:19

Som afslutning på året vil Microsoft kåre årete blogger herhjemme, hvilket man kan læse mere om i den seneste udgave af MSDN flash newsletter.

Stem venligst på den blog du synes har været mest interessant på dorthelk@microsoft.com, med navnet på bloggeren, og den blog som du synes fortjener titlen.

Jeg vil naturligvis være glad for at modtage din stemme, da det kunne være en sjov titel af få. Det er desuden altid rart hvis folk sætter pris på det man skriver om - det er trodsalt det at det hele handler om ;-) 

Tags:

IronRuby - godt begyndt

by DotNetNerd 13. December 2008 19:49

Nu synes jeg igen det er ved at være på tide at rode lidt med et nyt sprog, så jeg har kastet mig over (Iron)Ruby, som opfylder samme krav som F# gjorde da jeg gik i krig med det. Det er nemlig et sprog der giver nye udfordringer idet jeg ikke får har arbejdet så meget med dynamiske sprog, og samtidig er det anvendeligt på .NET platformen.

Udover at IronRuby er anvendeligt på .NET platform er det samtidig Ruby varianter der er skrevet til andre platforme, så der er helt sikkert gode perspektiver i at lære sproget. En mulighed for fremtiden er også at se på Ruby on Rails, som de fleste nok har hørt omtalt som et virkelig interessant framework til udvikling af RAD MVC webapplikationer.

Hvis man skal i gang er der tre sider jeg vil anbefale som er:

http://ironruby.net/ - den officielle side der fungerer som en wiki.

http://www.ruby-lang.org/en/ - en god side om Ruby med adgang til en RIPL der kører i browseren så man kan lege lidt.

http://www.fincher.org/tips/Languages/Ruby/ - en rigtig god intro side der gør at min blogserie om emnet nok bliver en del kortere end den om F#, da man allerede kan finde meget her J

Derudover skal man for at komme i gang rubyforge.org. Herfra kan man hente og installere Ruby fra http://rubyforge.org/projects/rubyinstaller/ og nyeste version af IronRuby kan hentes fra deres svn repository svn://rubyforge.org/var/svn/ironruby. For at komme i gang kan man blot compile solutionen og køre console applikationen, så har man mulighed for at lege med lidt kode.

Tags:

Nye funktionelle tiltag i C# 4.0

by DotNetNerd 16. November 2008 09:23

Udover at inkludere features fra dynamiske sprog som er et af hovedområderne Microsoft arbejder med til C# 4.0 kommer der også nogle flere features inspireret af F# og funktionel programmering. Tupler og en Zip funktion til Enumerable klassen kan man læse om på codebetter idag.

Især tupler har jeg savnet indimellem, så jeg er spændt på at se hvordan de lykkedes med at integrere dem i C# med hensyn til dekomposition, da det er det sprængende punkt for hvor anvendelige de bliver. Zip funktionen ser også ud til at blive en ok tilføjelse, men de fleste opgaver den løser kan man trodsalt løst rimeligt simpelt i forvejen, og om ikke andet ville det være simpelt nok at skrive den selv som extention method. 

Alt i alt er det imidlertid rart at læse at de samarbejder med F# teamet for at gøre sprogene mere kompatible, og derved gøre det lettere at skrive moduler i de to sprog der kan bruges sammen. Idag er det en rimelig stor hemsko at man skal gøre en indsats for at ens API fra et F# modul kun anvender typer der er tilgængelige i andre sprog hvis modulerne skal bruges sammen.

Tags: ,

Demo søndag - C# futures og "Jasper"

by DotNetNerd 9. November 2008 15:22

Lidt af min søndag er gået med at kigge på videoer af hvad Microsoft arbejder på til .NET platformen, og i den forbindelse er jeg fladet over et par fede demoer som jeg lige vil gøre opmærksom på. 

Først og fremmest vil jeg anbetale at se Anders Hejlsbergs snak ved PDC om C# 4.0 hvor han faktisk også til sidst runder nogen af de ting de arbejder på til version 5.0. Helt kort kan jeg fortælle at 4.0 hovedsageligt handler om dynamic execution, og 5.0 handler om dynamic compilation. Det er virkelig interessant at se, og det giver nogle gode ideer til hvad de nye features kan bruges til igennem de demoer han viser frem.

Udover C# snakken fandt jeg en channel9 video om project Jasper som er en overbygning til entity frameworket der gør det muligt at lave iterativ RAD udvikling baseret på et dynamisk opbygget EDM schema. Det i sig selv virker rigtigt interessant, især når man tænker i hvad man kan lave i samspil med dynamiske sprog.

Jasper indeholder desuden kontroller til at lave simple CRUD websider til at manipulere data, sådan at man slipper for at skrive den sædvanlige databinding logik. Jeg er selv lidt skeptisk omkring den fremgangsmåde, da en del af logikken baseres på navngivningskonventioner hvilket gør at det virker lidt skrøbeligt. Det er imidlertid stadig interessant at se, og om ikke andet kan det være enormt nyttigt til at udvikle prototyper.

UPDATE: så kom der også lige et hotfix til VS som gør at man kan arbejde med debug/release versioner af javascript libs som eksempelvis JQuery :-)

Tags: ,

LINQ extensions - nogen ideer til hvad vi mangler?

by DotNetNerd 31. October 2008 11:32

En af de rigtigt fede ting ved LINQ er at det er så nemt at udvide, så jeg troede egentlig det ville vælte frem med extension librarys. Der er da også kommet nogen stykker man kan finde rundt omkring, men ikke gået så stærkt som jeg egentlig ville tro. Jeg overvejer derfor selv at begynde at lave et med nogle af de helt oplagte, som man ofte står og mangler med udgangspunkt i at extende IEnumerable<T>. Fra dag ét undrede jeg mig f.eks over at der ikke findes en ToCollection i samme stil som ToList? Nu jeg roder med Silverlight er ToObservableCollection også en der springer i tankerne?! Og i god funktionel stil undrer man sig også umiddelbart over at der ikke er en foreach, men det viser sig at være fordi VB ikke kan håndtere statement lambda udtryk. Det vil sige at man eksempelvis ikke kan skrive nedenstående - da det ikke returnerer en værdi.

function(p) Response.Write(p.Name) 

Statement lambda expressions virker imidlertid i C#, så den ryger stadig med i listen over metoder jeg gerne vil have med, især da den er helt oplagt at "låne" her. Klassen der kan hentes via linket indeholder desuden også er andre interessante extensions eksempelvis til at generere sequences ud fra algoritmer/enumerators og til at skrive pretty formated strings ud fra collections. Sidstnævnte kunne iøvrigt passende laves sammen med Scott Hanselmans "Pure evil ToString"

Diverse extensions til serialisering synes jeg også virker oplagte, omvend jeg nok vil ligge dem separat således at man ikke altid får dem med hvis man vil bruge de andre - ToJSON, ToYAML, ToXml, ToBinary osv springer mig umiddelbart i tankerne som muligheder? Hvis du ellers sidder med en god ide til hvad der mangler i standard pakken, så skriv endelig for jeg tager gerne imod forslag, da det kunne være interessant at lave en pakke andre også har gavn af.

Tags:

vNext features i C# og VB

by DotNetNerd 30. October 2008 22:09

Den seneste måned er der begyndt at blive talt om nye features i næste version af kernesprogene i .NET. Personligt er jeg glad for at der er nogen features der idag kun eksisterer i et af sprogene der bliver portet så de findes i begge sprog. Her er der umiddelbart tale om optionel arguments der kommer til C# og automated properties til VB. Begge features er små forbedringer, men nogen man indimellem savner når man, som mig, springer lidt imellem sprogene.

Udover denne synkronisering af sprogene kommer der naturligvis også helt nye tiltag. Herunder named parameters som man kender det fra blandt andet F#, og den mest omtalte feature som er dynamisk bundne metodekald. Sidstnævnte gør det muligt at deklarere et objekt med keywordet dynamic hvorefter man kan kalde metoder på det, som først bliver resolved på afviklingstidspunktet. Det gør det meget enklere at skrive kode som idag vil kræve brug af reflections Method.Invoke eller DynamicMethod.

For at se eksempler og læse mere kan du kigge her hvor Justin Etheredge laver en sammeligning af performance i forhold til reflection baserede løsninger.

Tags: ,

Who am I?

My name is Christian Holm Nielsen, and I work as an independent consultant, in Denmark, where I write code, give advice on architecture and help with training. On the side I get to do a bit of speaking and help with miscellaneous community events.

Some of my primary focus areas are code quality, programming languages and using new technologies to provide value.

Month List