torsdag den 20. august 2009

Composite Application Guidance for WPF and Silverlight

Jeg faldt over denne her da jeg var inde på MSDN forleden dag. Den er klart et kig værd hvis man syntes man mangler lidt viden om og eksempler på IoC og Dependency Injection.

Mvh Thomas

mandag den 13. juli 2009

inSSIDer - vis signalstyrker for trådløse netværk

I aftes tog jeg netbook'en med ud på altanen og nød aftensolen. Forbindelsen var lidt sløv så snart kredsede tankerne om hvordan den kunne forbedres. Flytte accesspointet, anskaffe en repeater, bedre antenner?

Et godt første skridt er jo altid at gøre ting målbare, så man kan se effekten af éns eksperimenter. Jeg har gennem årene jævnligt kikket efter et "netværk-signalstyrke-sniffer"-program, men der er forbavsende få og endnu færre gode. Det bedste for 1-2 år siden var netstumbler, hvis udvikling stoppede i 2004. Det kunne gøres bedre. Og ja, det kan det: inSSIDer fra MetaGeek. Det har netop, hvad man har brug for, og ulig de mange andre, jeg har prøvet, viser det faktisk signalstyrkerne på en pæn og overskuelig grafisk måde (ja, hvor svært ka' det være, tænker man).

Det første der stod klart var, hvor trangt der var på channel 6, som min router automatisk havde valgt. Det blev hurtigt ændret til channel 13, hvor der pt er dejlig fredeligt. Min kurve er den gule:

Såvidt signalet i stuen. Ude i køkkenet er det en del svagere, og der dukkede endda endnu flere trådløse netværk op, så der prøvede jeg at rumstere lidt med routerens tre antenner. Effekten var ret tydelig:

Desværre gav ændrede antenne-positioner mest en forringelse, men det er jo også værd at vide.

Resultat: netværket er blevet en del hurtigere både i køkkenet og udenfor, hvilket jo er herligt. Og hvis jeg beslutter mig for fx at flytte routeren har jeg nu endelig et brugbart værktøj til at se, hvad effekt det har.

mandag den 22. juni 2009

Linq Pad

Et lille gratis værktøj man kan bruge til at skrive og teste sine Linq queries hurtigt og nemt. En stor fordel hvis man har en lang test turnaround tid.

http://www.linqpad.net/

søndag den 7. juni 2009

Listen to your Customers 1 - “Rigmanden fra Sydfrankrig”

Som nyuddannet datalog blev jeg i forsommeren 1993 ansat i hyperCOM – et nu hedengangent iværksætterfirma, der fik brugt en del risikovillige millioner, som bl.a. Michael Matthiesen leverede inden 2M Invest så dagens lys.

hyperCOM havde en god idé, en teknologisk kapabel mand blandt stifterne, de rigtige forbindelser (CNN og Reuters) og en investor i ryggen. I 1993, ja det har man efterhånden glemt, fandtes Internettet ikke rigtigt, så folkene bag hyperCOM tænkte, hvad nu hvis man kunne bruge tekst-TV-signalet (se wikipedia om Teletext) som en kommunikationskanal på en ny måde? PC’en var jo rimeligt udbredt, så hvad nu hvis man på en computer kunne modtage data via et TV signal? Og hvad nu hvis man f.eks. kunne sende real-time handelsdata fra Europas børser? Den slags oplysninger var dengang en yderst bekostelig affære. Reuters kunne levere oplysningerne via modem-opkoblinger og specielle datanet, og det kostede omkring 300.000 kr. pr. måned for en såkaldt Reuters-feed. En service for de få. Men hvad nu hvis man kunne sælge en delmængde af disse data til et langt større publikum?

Det satsede man på. hyperCOM fik aftaler i hus med Reuters, der skulle levere dataene. CNN skulle via deres satelitbårne TV-signal sende dataene, som en del af en ny tekst-TV nyhedstjeneste, som de samtidig skulle lancere. hyperCOM skulle – hold lige på hat og briller – leverer HW og SW til udsendelse af tekst-TV-data, software til redigering af tekst-TV sider, som journalister hos CNN skulle bruge, opbygge og drive den nye journalistiske enhed hos CNN og levere HW og SW til modtagelse og visning af tekst-TV data på PC’er hos de kunder, der gerne ville abonnere på en letvægts Reuters-feed. De kunder, der reelt skulle betale for gildet. Og det hele skulle gå vildt hurtigt, og vi var ikke sindsygt mange mennesker i firmaet.

Jeg trak frinummer til militæret, men jeg tænker af og til tilbage på min “soldatertid” hos hyperCOM. Jeg husker f.eks. en dag, hvor jeg, og en håndfuld andre softwareudviklere havde arbejdet uafbrudt i mere end et døgn, simpelthen faldt af kontorstolen og faldt i søvn på gulvet, for nogle timer senere at vågne op og bare arbejde videre igen. Ikke specielt effektivt, men memorabelt…

Historien om “Rigmanden fra Sydfrankrig” er en af historierne fra min soldatertid. Det er også en historie om at det ofte kan betale sig at lytte til kunderne og lidt mindre til ens egne fikse ideer.

- o – O – o -

En eftermiddag ringer telefonen i udviklingsafdelingen. En sjældenhed. Typisk nogen der har ringet forkert eller også et privatopkald. Mobiltelefoner var stadig større end de var udbredte. Morten Konradsen, præsenterer en mand sig. Han siger han har hørt om hyperCOM på CNN. Han synes det lyder spændende, men han vil høre om vi ikke har tænkt på at lave en lille boks, som man kunne slutte til TV’et, så han kunne se dataene fra Reuters direkte på TV’et, for Konradsen havde ikke nogen PC, og han havde heller ikke tænkt sig at købe en.

Jeg sagde, at det mente jeg ikke var planen, men jeg ville gerne spørge min chef, hvilket jeg gjorde umiddelbart efter. “Det har vi tænkt på”, sagde min chef. “Der går nok et halvt år”. Jeg ringede til Kondradsen og sagde “der går nok et halvt år”.

De næste måneder afslørede at Konradsen ikke var den tålmodige type. Jeg erfarede også at han var pensioneret udenlandsdansker bosidende i Sydfrankrig med sin kone efter at havde solgt sit firma. Og så var han teknisk interesseret. Han ville vide alt om hvordan det hele egentlig virkede.

Konradsen ringede jævnligt og han spurgte altid efter mig. Jeg oplyste altid loyalt at boksen indgik i planerne, men at jeg ikke rigtigt vidste hvor langt projektet var. Jeg benyttede også lejligheden til at fortælle Konradsen, at det ikke var så svært med en PC, og at han sikkert godt kunne lære at bruge en. Konradsen var ligeglad. For ham var det nemmere med TV’et og mere end nok. Bare han fik sin boks.

Som månederne gik blev snakkene med Konradsen lettere anstrengte, for jeg fornemmede godt at der ikke skete noget med boksen, og jeg tvivlede en del på om den overhovedet indgik i planen, og om der overhovedet blev tænkt seriøst på muligheden. Da jeg fattede sympati for Konradsen skinnede det nok efterhånden igennem at boksen ikke ligefrem var på trapperne, så Konradsen sagde: “ærgerligt, men så må jeg jo beholde min Reuters-feed i stedet for”. Øjeblikkeligt stod det klart, at hvis manden havde råd til en Reuters-feed, så måtte det være en smal sig at betale for at få en af os til flyve til Sydfrankrig med alt udstyr og undervise Konradsen i betjeningen af en PC og vores software. Konradsen bad mig stille ham om til salgsafdelingen.

Et par timer senere dukkede salgsdirektøren op og sagde “hvem af jer skal til Nice i weekenden?”. “Hvis det handler om Konradsen, så må det være mig”, sagde jeg hurtigt inden andre skulle forsøge at møffe sig ind på opgaven.

Fredag formiddag står jeg i Københavns Lufthavn med en vognfuld kasser og en del spekulationer om hvem Konradsen egentlig er. Aftalen er at han vil hente mig i Nice og jeg derefter i løbet af weekenden skal lære ham at betjene en PC med Windows 3.1 og hyperCOM programmet til modtagelse af Reuters data.

Nice er ikke så ringe igen. Konradsen venter på mig i solskinnet. Han er en mand omkring de 60 gætter jeg på. Jeg ved ikke helt hvad jeg har forventet, men hans fremtoning og hans lidt lurvede Mercedez stationcar dæmper mine forventninger. OK, lidt penge har han vel tjent, men så er det nok heller ikke mere… men det var det.

Efter en god halv times kørsel, hvor Konradsen beretter om området og lidt om sin fortid nærmer vi os hans bolig “Domaines des TB”. Efter at have kørt med en høj pudset mur på en tre meteres højde til venstre for os i et godt stykke tid tager Konradsen farten af bilen og med en fjernbetjening åbner han en meget stor sort smedejernsport. Nogle veltrimmede jagthunde løber os i møde mens flere gartnere er igang med at trimme parken.

Hvis jeg havde været i tvivl var jeg det ikke længere. Konradsen var rigmand af den rigtige slags. Dem med et overdådigt slot i Sydfrankrig, en park så gigantisk at det dårligt gav mening at bevæge sig rundt i mindre end en golf-bil. I parken et par håndfulde gæsteboliger, der fik de fleste villaer i danmark til at ligne hønsehuse. En yacht med fast besætning. Smukke døtre på min alder. De var dog i London den weekend…

Det er nok ikke svært at regne ud at jeg havde en oplevelsesrig tur, som jeg kan berette meget mere om en anden gang.

- o – O – o -

Konradsen havde stiftet en teknisk virksomhed og han havde udviklet den til noget meget meget stort. En mand der havde lært at han altid kunne stole på sine vurderinger.

Konradsen var mildest talt hurtig i opfattelsen og kontant i sine udmeldinger. Han lærte faktisk at betjene Windows 3.1 på en weekend. Han lærte også at bruge hyperCOM softwaren. Og han undlod ikke at fortælle, at det ville være meget bedre at bruge en boks og et TV, for så sjovt syntes han heller ikke det var med den computer, og hans kone syntes den var frygtelig grim. Og ja, den grå HP computer lignede faktisk lo.. i hans gigantiske maghogni-beklædte kontor med dybe chesterfield læderlænestole.

Jeg lyttede interesseret på alle hans mange historier, men det var først flere år senere, da hyperCOM var gået konkurs, at det gik op for mig at den vigtigste historie (for hyperCOM) var den historie Konradsen var blevet ved med at gentage fra jeg første gang havde ham i røret til jeg forlod ham i lufthavnen i Nice: Kunderne ville have en boks, de kunne slutte til et TV. De ville ikke have en computer.

Selvfølgelig havde han ret. De fleste kunder var jo velhavere. Mange var oppe i årene. Alle kunne betjene et fjernsyn. Og de handlede med deres opsparede midler via telefonen. En boks ville være uendelig enkel at levere og alle kunderne ville kunne slutte den til deres TV uden hjælp. Nærmest ingen kunder ville på det tidspunkt være i stand til at få en computerløsning til at fungere. Og den blotte forestilling om hvad det kunne indebære gjorde selvfølgelig at ingen (eller rettere alt alt for få) var interesserede i løsningen, på trods af at ideen faktisk var rigtig god og at kundepotentialet var tilstede.

Listen to your customers

Det kan ikke siges for ofte. Det kan ikke gøres for meget. Alle gør det for lidt. At the end of the day, er det faktisk ret ligegyldigt, hvad du forestiller dig er det rigtige at gøre. Også selvom du har tænkt rigtigt rigtigt meget over det. Det der betyder noget er at udvikle, producere og levere det som kunderne har brug for. Og her er det sjovt nok en fordel at lytte til kunderne.

Havde hyperCOM valgt en knapt så sexet løsning: boksen, så havde firmaet måske fået luft under vingerne i tide. Men vi var teknikere og meget meget kloge. Faktisk var vi langt klogere end kunderne – troede vi. Konradsen var nu alligevel den klogeste.

Note: Morten Konradsen er ikke rigmandens rigtige navn. Alt andet er som jeg husker det.

lørdag den 6. juni 2009

MSBuild og custom Tasks

Vi bruger MSBuild som basis for vores natlige build og test af vores aktive projekter. Man kan læse mere om de overordnede koncepter omkring MSBuild her.

De fleste af de projekter som kører i denne natlige cyklus løber igennem en række faste punkter og enkelte projekter har derudover en række special punkter. De faste punkter er typisk:

  1. Hent den seneste code fra source control
  2. Opdater versionen og tag source control så den præcise kode benyttet til at udføre det givne build kan hentes igen på tagget
  3. Compiler de konkrete projekter og producer konkret output i form af executables og assemblies
  4. Kør tests på de compilede assemblies
  5. Zip alt output sammen og kopier til netværksdrev
  6. Send email med rapport til et antal modtagere

Rimelig standard cyklus som producerer konkret output der kan benyttes og en rapport og en email der fortæller om kvaliteten af den natlig build. De fleste af disse punkter kan opnåes ved at kombinere de eksisterende Tasks der bliver leveret med MSBuild og Tasks fra allerede eksisterende biblioteker der kan hentes f.eks. her og her.

Helt afhængig af det konkrete projekt er der dog typisk en række andre punkter som indgår i listen af punkter i den natlige build. Nogle af disse punkter kunne vi ikke helt opfylde med eksisterende Tasks og vi har derfor implementeret en række custom Tasks som opfylder vores behov. Det er meget nemt at implementere sådanne custom Tasks og inkludere dem i vores autobuild cyklus. Du kan finde en god og hurtig introduktion til hvordan custom Tasks kan implementeres her.

Nogle eksempler på custom Tasks som vi har kørende er:

  • SourceHeaderTask som indsætter en konfigurerbar header i vores kildekode filer som f.eks. en copyright notice
  • CodeInspectTask som ud fra et regulært udtryk kan løbe vores kildekode igennem og finde linjer med f.eks. TODO som indikerer hvad vi mangler at tage hånd om
  • PB6Task som er en Task vi gør meget brug af i vores device projekter da den kører PlatformBuild 6 og bygger CE images og SDK
  • SolutionFileParserTask som ud fra en solution file returnerer alle file inkluderet i alle project i denne solution. Denne task bruges primært til at få et håndtag til alle disse filer som kan sende ind i andre Tasks så som SourceHeaderTask nævnt ovenfor
  • PEVerifyTask som kører PEVerify for at sikre at vores assemblies er IL korrekte hvilket er vigtigt specielt hvis IL manipuleres direkte af f.eks. obfuscatorer eller ILMerge

Ud over disse tasks har vi også implementeret en custom logger som hjælper os med at producere en god rapport og sikrer at emails sendes ud selv om enkelte skridt i listen måtte fejl. Læs mere om custom logger i MSBuild her.

torsdag den 4. juni 2009

Generer dokumentation som del af autobuild

En af de ting vi gerne vil gøre som del af vores natlig build er at generere udvikler dokumentation eller Help files. Disse hjælpe filer kan distribueres som del af det output som ellers genereres fra det natlig build såsom executables og assemblies. Dokumentation kan bygges ud fra den rå dokumentation som genereres sammen med outputtet i form de kommentarer som er udtrukket fra kildekoden og som ender i XML filer som del af compileringen.

Tidligere var NDoc det værktøj man skulle gribe efter, men det er ikke længere up to date og kan f.eks. ikke håndtere generics. Derimod har Microsoft selv udviklet et værktøj kaldet SandCastle som kan generere både den klassiske dokumentation i chm filer og den nyere version i HxS filer som man kender fra Visual Studio og andet.

Selve flowet for at generere dokumentationen består af en række skridt og det er muligt at tilrette disse skridt og ændre i templates for at generere præcis det output format man ønsker. Det er dog typisk lidt for omstændigt at få denne process kørt og vil kræve en del kommando-linje kald for at køre selv da SandCastle i sig selv ikke har en visual frontend.

Heldigvis er der hjælp at hente. Sandcastle Help File Builder er netop en visual frontend til SandCastle hvor man via en UI kan konfigurere hvorledes dokumentation skal skabes og gemme denne konfiguration i en projekt fil som kan køres som del af en autobuild. Dermed kræver genereringen af dokumentation kun at man installerer de nødvendige dele på sin build server, skaber sin konfigurations fil via UI’en og indfører følgende i sin .proj autobuild fil:

   1:  <MSBuild Projects="$(SandcastleProjectFile)" />
hvor $SandcastleProjectFile peger på konfigurationsfilen. Bemærk som tidligere nævnt at alt dette kræver at man har installeret de dele som Sandcastle Help File Builder kræver og sørg også for at de relative stier til XML filerne med den rå dokumentation er korrekte på build maskinen.

Den eneste lille hage ved denne process er, at hvis man som os kører dette SandCastle project som del af en eksisterende build via MSBuild Tasken, så introducerer den følgende warning i build outputtet (som du sikkert kan ignoreres):

   1:  BHT0001: Unable to get executing project: Unable to obtain internal reference. The specified project will be loaded but command line property overrides will be ignored. (SHFB, line 0)

Nul indlæg og Nul læsere

Ja, så kan det kun gå fremad. I slutningen af maj 2008 var der heller ingen, der kendte til vores gratis performance profiler EQATEC Profiler. I dag er der mere end 18.000, der har downloaded programmet.

Og det var så første indlæg.