Category Archives: Programmering

ASP.NET MVC + Castle Windsor + NHibernate

Jeg har i den sidste tid arbejdet på at etablere webprojekt, der benytter sig af en håndfuld interessante teknologier, og vil i den forbindelse lige dele en håndfuld ressourcer, der har været nyttige for mig.

Grundlæggende går det ud på at lave en webarkitektur, som giver en høj grad af afkobling mellem komponenter, så man opnår øget testbarhed og mulighed for at konfigurere og komponere sit system på en lettere måde.

ASP.NET MVC

MVC frameworket er ude i beta og så ready-for-prime-time at man godt kan bygge rigtige ting med det (se f.eks. stackoverflow.com), og det giver fuld markup-kontrol og andre fordele for folk, der er lidt trætte af traditionelle webforms.

Castle Windsor

Windsor er en Dependency Injection container fra Castle Project.

DI er en teknik, der gør det let at vælge composition fremfor inheritance, når man designer objektorienteret. Nedarvning er godt til meget, men bliver nemt noget uoverskueligt rod, hvis man vælger at nedarve blot for at udvide funktionalitet — her er komposition tit et bedre valg. Og med en DI container bliver det meget lettere at designe og vedligeholde hvilke komponenter man udvider sin funktionalitet med.

NHibernate

NHibernate er en Object/Relational Mapper (ORM), og en .Net port fra javamoderen Hibernate. NHibernate er som Castle Windsor open source og en meget udbredt ORM.

NHibernates nærmeste Microsoft-konkurrent er nok MS Entity Framework (EF), men EF vurderes af mange til ikke at være modent nok til at kaste sig over før den næste version og andre igen mener at man helt skal holde sig væk. NHibernate kan ikke sammenlignes med Linq2Sql, som har et helt andet og reduceret featureset.

Outtro

Det link, som jeg har fået mest ud af har jeg gemt til sidst. Jeffrey Palermo, der er ved at skrive en bog om Mvc-frameworket, er tovholder på open source eksempelprojektet CodeCampServer.

Projektet benytter sig af Windsor, Mvc og NHibernate, det indeholder masser af unittests og er et rigtigt godt eksempel på at strukturere et webprojekt.

Happy hacking.

Boganbefaling: Release IT

Michael T. Nygard: Release It! – Design and Deploy Production-Ready Software

Hvis man laver kompleks software med en masse integrationspunkter og kender til udfordringerne med at få dragen til at flyve, så vil man stensikkert kunne få en masse ud af at læse denne bog.

Det gjorde jeg i hvert fald.

Der er en masse gode implementation-patterns og gode pragmatiske best-practices.

Læs evt reviews på amazon, inden du køber.

[via Sinatra.dk, for en rum tid siden, men hans site er nede ligenu... han har måske ikke læst bogen grundigt nok]

OIOREST workshop writeup

Jeg var i dag til workshop i It- og Telestyrelsen (ITST) i Bredgade, hvor emnet var REST i det offentlige.

Udgangspunktet var REST og den prototypeservice som ITST har stillet til rådighed på oiorest.dk.

Som jeg sidst skrev har jeg været med til at skrive et lille ruby library, som kan bruges til at tilgå de offentlige data, som udstilles på oiorest.dk, og det har vist sig at man på under 15 timer kan komme utroligt langt.

Vi var et par og tyve stykker og folk var blandede leverandører og offentlige arkitekturansvarlige, de fleste med et ønske om at finde ud af, hvad det der REST det egentlig er for noget. Så hvis man vidste noget om REST, mashups og web 2.0 så var der lidt tomgang i starten.

Der blev desværre brugt lidt for meget energi på at retfærdiggøre REST i forhold til WS-*, WSDL og SOAP, der blev forsvaret med næb og klør fra den etablerede enterprise verden.

En af de mere interessante diskussioner (open space, der fungerede fino) var udfordringen med at få data til folket. Under sloganet “Free Willy,” som René Løhde, evangelist fra Microsoft, skreg ud i lokalet.

Problemet er, at mange af de data som er offentlige og handler om os alle sammen faktisk ikke bare lige kan åbnes op til den brede offentlighed kvit og frit, da disse data er pålagt afgifter.

Offentlige data, som ikke er personfølsomme, findes i forskellige kategorier eller prisklasser. Noget data, som f.eks. CVR (Det centrale virksomhedsregister), sælger data til offentligheden gennem tre store distributører, og er selvfinanceret. Det vil sige at man ikke umiddelbart kan frigive offentlig virksomhedsdata uden at påvirke et eksisterende økosystem.

Der findes dog nogle lavthængende frugter, som godt kan frigives.

De data som repræsenteres i oiorest.dk skal gøres til en permanent løsning og fungere som et eksempel til efterfølgelse for andre offentlige instititutioner, og dette er allerede planen fra ITST’s side.
Men hvis det virkelig skal batte, så skal ITST eksponere disse data permanent med opdateret data så folk ude i landet kan få øjenene op for fordelene ved at bruge det. Smid lidt ekstra geodata oveni så valgkredse, skoledistrikter, kommuner og regioner også får polygoner til at definere deres geografiske afgrænsnin , så ville staten kunne glæde sig over de innovationsmuligheder der ville følge i kølvandet.
Det ville være en god start. Og der arbejdes på en lobbypressurgræsrodsbevægelse.

I mellemtiden prøver vi at få nogle flere med til at committe til vores lille OIORest ruby/rails plugin ActiveOIO – oiorest på google code. Hvis du vil være med, så smid mig en mail. Jeg skal nok hælde noget dokumentation i en readme-fil snart, men indtil videre står der noget på wikien.

Undskyld, det blev fandme et langt indlæg…

Danmark eksponeret som REST

It- og Telestyrelsen har smidt et midlertidigt eksperiment i luften: Danmark web service – et REST eksperiment

Det er superfedt.

Det gør det muligt med meget lidt kode at trække offentligt tilgængelige oplysninger ud af etaten — om kommuner, sogne, postdistrikter, valgdistrikter, skoledistrikter, adresser og regioner. Se deres eksempler her.

Kollega Jesper fra justaddwater.dk og jeg flikkede i aftes et one-file-lib sammen, som gør det muligt at bruge oiorest.dk som en ActiveResource fra Rails/Ruby. ActiveOIO klassen er lagt ud på google code, find den her. For railsfolk kan vejledning indtil videre findes i denne tråd fra CopenhagenRBs udmærkede google gruppe/mailinglist.

Endnu er det ikke helt klart, hvor OIOREST er på vej hen og vores lille proof-of-concept kan ikke trække så meget af vores energi da servicen ikke er noget man som sådan kan stole på bliver i denne verden, for som ITST siger på sitet:

Formålet med web servicen er dels at ekseperimentere med design af REST baserede web services; dels at vise et eksempel på et design af en REST baseret web service. Formålet er ikke at etablere en driftklar web service. Danmark web servicen lukkes når den har opfyldt sit formål.

Så selvom kodefristelsen lurer er det begrænset hvor meget tid man har lyst til at kaste efter noget der risikerer at blive lukket uden varsel.

Hvis man er til den slags, så er der også en workshop d. 22 april, hvor man sikkert kan få lidt mere fremtid. Hvis man ikke havde en i forvejen.

Update 5/4: så har jeg lavet oiorest/ActiveOIO projektet på google code om til et  rails plugin og kodet lidt mere på det, så det kan bruges ud af boksen. Se instruktioner på wikien. Og giv endelig lyd hvis du har lyst til at bidrage selv!

Natnrderi

Jeg burde være i byen, til koncert med Megadeth eller bare sove.

I stedet er jeg ved at blive sindssyg i mit forsøg på at bygge Mono på OS X – omtrent sådan her, men det spiller ikke rigtigt.

Målet er at eksperimentere med IronRuby under OS X, men jeg nærmer mig snart det punkt, hvor jeg hopper over smertegrænsen og bare laver mine eksperimenter under Windows XP gennem VMWare Fusion. Der må også være grænser for, hvor stædig man kan tillade sig at være.

IronRuby og open source bevægelsen

I øjeblikket kører der en interessant og rather-intense-ish diskussion på mailinglisten for Microsofts IronRuby.

Charles Oliver Nutter fra Sun og med- om ikke hovedansvarlig for JRuby, startede tråden “Public versus private discussion and community momentum“.

I know there’s always thoughts about secrecy and springing the next big software surprise on the world when working at Microsoft, but secrecy is poison to an OSS community. If you want to get people excited about helping out and getting involved, you can’t keep them in the dark about portions of the development process.

Kernen i diskussionen er spørgsmålet om Microsoft med deres Open Source tilgang til IronRuby er villige til at tage skridtet fuldt ud og åbne for de interne diskussioner om udviklingen af IronRuby og DLR.

IronRuby landet

Så er den første sending af Microsofts ruby-implementation, IronRuby, landet.

John Lam annoncerer her, og ScottGu uddyber.

Hanselman demoer også.

Det er stadig pre-alpha, så forvent ikke De Gyldne Løver på DVD, men man kan compile og fx køre eksempler, hvor man jonglerer WPF med Ruby.

Både IronRuby microsofts DLR (dynamic language runtime, der er et dynamisk lag ovenpå CLR’en) bliver open sourcet så det er slet ikke så skidt og ondt endda.

Lidt om Silverlight

SilverlightBo Drejer fra Microsoft havde i dag fået Beau Ambur til at give et 3-timers crash course i Silverlight for en mindre forsamling hos Microsoft i Hellerup.

Beau arbejder i Metaliq og står bag Top Banana — en videoredigerings webapp, der kører direkte i browseren og som har en ret høj wauw-faktor (youtube screencast her). Den blev gennemdemoet i dagens arrangement, og det var ganske inspirerende og imponerende.

Tanker fra dagen:

  1. Silverlight sparker ret meget røv, men med mindre man er Chris Sells, er man vist tvunget til at bruge Expression Blend til at generere ens xaml filer. Og derfor bliver det, som andre før har pointeret, ikke interessant at lave silverlight uden Visual Studio og Expression suiten på windows. Men så er vi heldigvis i virtualiseringens guldalder.
  2. Jeg er ikke sikker på at jeg er selvskrevet til at blive Silverlight-gud. Med mindre jeg kan teame op med nogle giftige designer dudes. Men den type samarbejde lægger Silverlight og de omkringliggende tools meget godt op til.
  3. Der er basis for utroligt grimme silverlight sites, der bare er for meget. Når folk på MySpace begynder at embedde Popfly apps vil der blive slået nye æstetiske bundrekorder.
  4. Før Silverlight 1.1 går ud af alpha og understøtter IronRuby, gider jeg ikke gå i gang. Der er ikke tid nok i verden.
  5. Silverlight har endnu ikke et widget library, så hvis man vil lave brugerinterfaces skal man lave alle widgets fra bunden.
  6. Det kunne være interessant at eksperimentere med en Silverlight front-end mod en Rails backend, når ruby som sprog kommer ind i Silverlights DLR — det kunne blive en fin stack-udvidelse.
  7. Beau var lidt for meget showcase og lidt for lidt kode.
  8. Silverlight? Måske. Silver Bullet? Nope.

Over and out. Nu venter jeg bare på at Drejer får fingrene i John Lam — så tropper jeg hoppende op igen.

Serveradministration aus der Hölle.

DebianAf de ting, der tager lang tid, når man ikke ved, hvad der foregår, og uendeligt kort tid, når man ved, hvad der foregår, forekommer systemadminstration mig at være det værste.

Jeg er næsten igennem at sætte en VPS rails-server op hos det tyske hostingfirma hexonet (mere specifikt en billig premium) og Linux serveropsætning er en disciplin, jeg aldrig rigtigt har lært at føle mig helt tryg ved.

Det er en sej kamp, hvor man går et par meter frem, støder på en mur, googler sig over muren, fortsætter et par meter, støder på en højere mur, googler, græder, gør noget der tilsyneladende virker, fortsætter et par meter…

Men nu er den der så også næsten.

For de rails-interesserede: Det er på Debian, og jeg har den russiske http-server/proxy nginx til at køre foran et lille mongrel-cluster, og det virker umiddelbart super tjept. Men nu har jeg heller ikke en ægte applikation oppe endnu, da capistrano står og hvæser af mig…

Bag om Sliknavn – produktionsnoter

PHPForleden kodede jeg dimsen, der finder dit sliknavn.

Det foregik i sofaen, mens jeg så et afsnit af Unge Mødre i fjerneren, og i aftes pudsede jeg den lidt af.

Ideen kom, fordi jeg ved et tilfælde fandt ud af, at hvis man skriver en ulovlig url på slikleksikon, så spørger den, om man mente noget andet. Eks: slikleksikon.org/julemanden.

Udskift ‘julemanden’ i eksemplet ovenfor med dit eget navn, så kan du se hvad jeg mener.

Nu bliver det teknisk, så læs kun videre, hvis du er middelsvært til stærkt nørdet.

Jeg ville egentlig have lavet det som en javascript-only dims, der kun eksisterer i selve blogindlægget, da det er interessant at lege med grænserne for hvad et blogindlæg kan være. Men da javascript ikke kan læse urler på andre domæner, måtte jeg lave en stump php, gør det hårde arbejde (sliknavn.php), og så kan man kalde sin php med noget asynkront javascript (sliknavn.js).

Problemet er nu at få det regulære udtryk i phps preg_match til at fange æøå, hvilket jeg ikke kan finde ud af. Så hvis der er ÆØÅ i det foreslåede sliknavn, får man “ikke noget sliknavn” fejlen, hvilket selvfølgelig er en løgnagtig eufemisme for “jeg kan ikke kode”. Er du en djævelsk php-hacker, kan du måske løse problemet for mig?

Update
Så er der action på æøå. Regex rettet og efterfølgende urlencoding interop problem mellem php og javascript løst med denne snippet. Pastie-links ovenfor er opdaterede, hvis det interesserer nogen. View source på siden, hvis du vil se, hvordan ajaxen er blandet.