.NET

C# i fornyet kamp

c-sharp-and-npm

Da jeg i 2000 hørte at Microsoft var på vej med et nyt sprog var jeg skeptisk; jeg var lige gået i gang med Java og synes at det var en drøm at arbejde med. Det var allerede en stor mundfuld at skulle lære JVM stakken – hvad skulle vi dog med endnu et sprog? Og der var da også mange ligheder; sprogene lignede…

Bedre softwaretests med fuld isolation

_DSC0011

Hvis en integrationstest fejler, skal det helst være fordi at vi enten har lavet en kodefejl, eller at vi er ved at opgradere versionen af den komponent vi tester. Hvis testen fejler på grund af sideeffekter i den kontekst vi lever f.eks. brugere opretter data, systemer går ned eller at vi mister kontakten på grund af netværksfejl er det et problem – måske er…

Serilog

serilog

NLog, Log4Net, MS Enterprise Library, SmartInspect, ObjectGuy, Logary. There are plenty of frameworks to choose from when it comes to logging on the .NET platform. You can even setup logging right out of the box by using System.Diagnostics. Also logging is really easy to achieve – here is a very naive logging “framework”: In 2013 Nicholas Blumhardt released a new logging framework called Serilog…

Nedtælling til Websikkerhed – nr. 9 brug af komponenter med kendte sikkerhedshuller

_DSC0568

Selv vores forældre er ved at have lært at opdateringer til windows er vigtige – uanset om viljen er baseret på teknisk indsigt eller nagende popups. Men på trods af at vi måske formår at holde vores operativsystem opdateret er der mange andre flader der, pga. manglende opdateringer, er sårbare over for angreb. Det kan være den webserver vi benytter, de frameworks vi benytter…

Nedtælling til Websikkerhed – nr. 10 uvaliderede redirects og forwards

sikkerhed

Sikkerhedsbrud i webapplikationer er et stadig stigende problem. Gang på gang skriver pressen om indbrud og kompromitterede systemer ved de store spillere på internettet og vi er så småt begyndt at diskutere hvornår en hacking-skandale er en reel krigshandling. Som udviklere har vi et fælles ansvar at leve op til – vore applikationer er kun så sikre som deres svageste led. Open Web Application…

Agil arkitektur med isolerede koncepter

_DSC0382

Fælles for de agile udviklingsprocesser er, at de lægger op til at vi leverer små forretningsværdiskabende stykker af funktionalitet. Når leverancen fejler, er det tit på grund af eksisterende kompleksiteter – domænet, datamodellen eller infrastrukturen forhindrer os i at nå målet. Principper som DRY (Don’t Repeat Yourself) gør at vi ivrigt genbruger og skaber bindinger og samtidigt maler vi os selv op i et…

CQRS med ElasticSearch

_DSC0365Elasticsearch

Når data gemmes i ElasticSearch, sker det ved hjælp af en struktur kaldet et dokument. Hvert dokument består af de felter man som bruger kommer med, samt et antal faste felter. Ét af disse felter er et id der unikt identificerer dokumentet og kan, fra grænsefladens side, bruges til at lave opdateringer og overskrivninger af dokumentet. Under overfladen foregår tingene lidt anderledes. Lucene, der…

Introduktion til CQRS og event sourcing #6

I det forrige indlæg viste jeg Cirqus’ konfigurations-API, som helt objektivt set i høj grad kan klassificeres som “lækker”, måske endda “herre-nice”. Nu skal vi snakke lidt mere om event-processering – eller “projektioner”, som det også kaldes – altså det her, der sker med events efter at de er blevet genereret. “Projektioner” er i dette eksempel begrænset til views, altså materialiserede read-modeller i en…

Microsoft i skyen

En ting som der bliver snakket næsten endnu mere om end Big Data er skyen, og i dag er jeg taget på Azure DevCamp for at lære hvordan det hænger sammen i en Microsoft verden. Hos Microsoft ved siden af den store Tuborg flaske, blev vi fortalt om den imponerende arkitektur som ligger bag det mange hovedet monster. Jeg ved ikke nok om skyer…

Introduktion til CQRS og event sourcing #4

Nu hvor vi de foregående tre indlæg har arbejdet os hen til at kunne processere commands, så mangler vi bare det sidste trin i raketten for at kunne slutte cirklen: Views. Views dannes ud fra events efterhånden som de sker, og med Cirqus foregår dette ved at man installerer en passende IEventDispatcher implementation. En IEventDispatcher er en dims, der får mulighed for at gøre…