Monday, April 30, 2007

Jeg er ved at lande efter en omgang foredrag rundt i landet omkring udvikling med ASP.NET2 (samt en del andet), og lovede at vende retur med svar på et par spørgsmål. Jeg har undervist på Teknologisk den sidste uges tid, og har derfor ikke lige kunne finde tiden.

Lidt overraskende så er det jeg har fået flest spørgsmål omkring min brug af PowerShell til at teste kode, og i den forbindelse min dynamiske leg med Microsoft Agent (de små skønne og idag komplet oversete animerede figurer der kan tilgås gemme COM) gennem Microsoft PowerShell. Som en i Aalborg tørt spurgte efter foredraget; ”Er du ikke lige lidt for nørdet en gang i mellem?” J Det kan han jo have lidt ret i – men jeg vil nu tage det som et kompliment.

Til alle dem der har spurgt hvordan de kan lege med Merlin, Ginie, Max, Peedy og alle de andre karakterer fra Microsoft Agent gennem PowerShell - here we go:

1)      Download og installer PowerShell

2)      Download og installer Microsoft Agent – herunder også de karakterer du ønsker (der findes også et hav på nettet). Det er muligt du allerede har Agent installeret. Prøv evt. nedenstående kode først.

3)      Åben PowerShell (Kør -> PowerShell)

4)      Skriv følgende:

$agent = new-object -comobject agent.control.2
$agent.connected = 1
$agent.characters.load("merlin","c:\windows\msagent\chars\merlin.acs")
$merlin = $agent.characters.character("Merlin")

Så skulle Merlin være klar til brug gennem $merlin. Prøv

$merlin.show()
$merlin.moveto(400,500)
$merlin.Play("DoMagic1")
$merlin.think("Jeg tænker.....")
$merlin.play("congratulate")
$merlin.play("pleased")
$merlin.play("Wave")
$merlin.hide()

Det giver en ide om hvad Merlin kan – men læs dokumentationen. Det er ikke småting Merlin kan udsættes for – selv talegenkendelse er muligt.

En sidegevinst ved at lege med Merlin gennem PowerShell var i øvrigt at se min snart 4 årige søn lyse op over at se far ”styre” troldmanden ved at skrive kode ;) Ikke at han forstod en bønne af hvad jeg lavede, men han fattede tydeligvis at jeg ved at skrive kode kunne få noget til at ske. Jeg kunne sågar forklare ham hvad er en løkke er ved at få Merlin til at løbe i ring. Det burde give en del interessante ansigtsudtryk hos pædagogerne i børnehaven når de under rundskreds har ”hvad laver far og mor” tema, og Mikkel fortæller at far sidder på kontoret og fortæller en troldmand hvad han skal lave ;)

I den mere alvorlige ende kan man måske undre sig over at jeg ”leger” med PowerShell i forbindelse med udvikling (det er jo ellers primært til administratorer), men jeg kan godt lide at tingene kan testes dynamisk ind i mellem uden hele tiden at skulle kompilere. PowerShell er jo bygget ovenpå .NET og det er derfor nemt at teste og bruge både indbyggede og egne klasser. Her testes eksempelvis et datalag i en DLL-fil:

[reflection.assembly]::loadfile("c:\temp\odense.tinglysning.datalag.dll")
[odense.tinglysning.datalag.ejerlavshelper] | get-member -static
[odense.tinglysning.datalag.ejerlavshelper]::antalejerlav()
[odense.tinglysning.datalag.ejerlavshelper]::FindIndleveringsstedEfterSøgning("Aalb","").Rows.Count
$res = [odense.tinglysning.datalag.ejerlavshelper]::FindIndleveringsstedEfterSøgning("Aalb","").Rows
$res | foreach-object {$_.item("ejerlavsbetegnelse") }

Det ser lidt nørdet ud (skyldes mest at der her kaldes statiske metoder) men man fanger hurtigt syntaksen, og det er en fed fornemmelse at loade en DLL dynamisk, og så fyre et par metodekald af for at se om den nu gør hvad man regnede med.

(Ok - sidste afsnit gjorde måske det hele lidt lidt for nørdet alligevel)