Build: The future of C#

by DotNetNerd 14. May 2018 17:02

Along the same line as the TypeScript talk, Mads Thorgersen and Dustin Campbell did a great talk about the future of C#, opening with some statistics that show how loved and widely used the language really is. Even though I am very much in love with F#, I am also quite happy doing my work in C#, as I have been for 14 years, so it is nice to see innovation in the language continue, and especially that they keep on drawing inspiration from F#.

More...

Simply being lazy and concurrent

by dotnetnerd 18. November 2017 20:25

I recently worked on a long running migration project, where we needed to ensure that some of the sql migration scripts were only called once per entity that was migrated, in a threadsafe manner. I looked to the System.Collections.Concurrent namespace, but none of the classes were really a good match. Basically what I needed was the ability to run a part of the migration that was identified by key, but ensure that it would only run once, although different parent strategies might try and run it.

More...

Pattern matching on its way to C#

by DotNetNerd 3. February 2015 16:47

csharp As the design notes for C# 7 reveals, Microsoft are thinking about introducing pattern matching into C# in version 7. I was really happy when I first heard this, because pattern matching is one of the things I often miss from F#, where I wrote about the joy of pattern matching way back in the beginning of 2008. It doesn't get much more nice and succinct than this.

match value with
| "a" -> printfn "The value was an a"
| "b" -> printfn "The value was a b"
| _ -> printfn "Unknown value"

More...

Yearning for some learning?

by DotNetNerd 1. April 2011 19:57

A piece of advise that is often given to developers who want to keep improving, is to learn a new programming language every year. I mostly think it holds true if you try to learn a new paradigme – because just learning new syntax won’t really get you anywhere.

Koans

One way of learning a new language is of course to buy a book or two, and start reading and doing some samples and small applications. Another way of going about it is to try some of the koans, interactive interpreters and introductory guides that can be found online.

1000_jaws_koan

More...

JAOO Århus 2009

by DotNetNerd 8. October 2009 17:56

Actually I had not planned to go to JAOO this year, but first my good colleagues who run ANUG struck a good deal where Mads Torgersenand Oren Eini alias Ayende Rahienwould give a special talk in the evening for the usergroup. This was simply too good to pass up. After all, how often do you get the chance to see one of the Danes from the C# language team and Ayende – who is the guy behind tools like NHibernate and Rhino.Mocks.

On top of the “Geek night” as it was coined, I ended up going Wednesday for the .NET track as well. To my gain a colleague who already had a ticket could not go, so I was lucky enough to get the offer to go in his place.

It ended up being a very interesting night and day I think – with my only small complaint to Trifork, who did brilliantly, being that the .NET track was held in a building that was below par compared to “Musik huset” where the rest was held.

Key points for me was hearing Mads, Ayende twice and Udi Dahan. Madses talked about what it is like to work in the C# team, and the considerations they have to take. This was really interesting and its hard not to be a bit hit by national pride that there are actually two Danes on a team like that. 

Ayende mostly talked about his own projects with the talks focused around NH Prof and NHibernate. It is impressive to see him with a keyboard, even though I had hoped the focus of his talks would have been a bit wider. The one general issue he talked about was at the ANUG talk where he talked about concepts and features. On the upside in the day session we did get to see some of the stuff he has added to NHibernate where especially NHibernate Search looked quite interesting.

Udi Dahan gave my personal “talk of the day”, because I think he got the focus of the talk right, and managed to make it fun and interesting. The subject was pretty broad being “Scalability, Availability and Reliability”, but he made it pretty concrete without making it about a single product. The focus was on how a one way messaging architecture based around transactional queues could solve a lot of the typical issues that we run into as developers. Actually the fact that he has worked on NServiceBus did not come up until the talk was basically over and it was just named as a possible solution amongst a bunch of others.

NServiceBus will be the focus of the next ANUG meeting where my colleague Lasse Eskildsen will  be showing a bunch of good examples on how it can be used. So this was the perfect fuel to light up my interest for the subject. Besides what I have already written about there is one more topic that tickled my taste buds, which is Scala. It does not take much to get me going when it comes to programming languages, so maybe it is just me, but I think Ill have to take a look even though my focus right now is more on IronPython.

 

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:

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: ,

Feed-Me.dk release og Lang.NET inspiration

by DotNetNerd 22. February 2008 19:49

Feed-me.dk release 

Det seneste års tid er jeg i stor stil røget med på rss bølgen, og er begyndt at abonnere på en række feeds for at følge med i diverse nyheder - især inden for .NET udvikling. Jeg er dog tit løbet på det problem at der er feeds som indimellem indeholder nogle virkelig interessante indlæg, men som desværre hovedsageligt drukner i personlige historier, som jeg er knap så interesseret i. Jeg har derfor nu lavet en service som jeg stiller gratis til rådighed på http://www.feed-me.dk, hvor det er mulige at sammensætte et feed der er kombineret af andre feeds, og filtreret ud fra nøgleord man indtaster som har ens interesse. Man kan desuden selv vælge om man vil have feedet i RSS eller Atom format, ved at angive dette som en del af url'en i et REST format. Eksempelvis har jeg lavet et udviklings feed som kan ses her: http://www.feed-me.dk/feed.svc/UdviklingsDemo/rss - hvor url'en viser at det sammensatte feed er navngivet UdviklingsDemo og at jeg vil se den i rss format.

Da servicen er gratis håber jeg at brugerne er så flinke at holde øje med mine google reklamer, og klikker på dem de synes er interessante, og eventuelt bruge den søgebar jeg har inkluderet i bunden. Ideen er at jeg vil give 20% af de penge jeg eventuelt tjener til kræftens bekæmpelse, idet det er en sygdom jeg selv har haft tæt inde på livet. Skulle du finde servicen interessant men synes der mangler en eller anden feature må du meget gerne skrive om dit ønske, da jeg gerne udvider den. Som det tydeligt fremgår af siden er jeg ikke den store designhaj, men pointen er også klart at lave en teknisk velfungerende løsning, så det er heller ikke mange minutter der er spildt på design.

Lang.NET

En af de nyheder jeg senest er faldet over ved at abonnere på blogs rundt omkring er, at der for nylig blev afholdt Lang.NET symposium (http://langnetsymposium.com/talks.asp), hvorfra der er udgivet en række interessante webcasts. En af de casts jeg især synes var interessant var Eric Meijer der talte om Volta. Jeg synes det er et virkeligt interessant eksperiment, og håber da meget det kan udvikle sig til et alternativ til den måde man udvikler applikationer på idag. Kort fortalt går Volta ud på at man koder en applikation som single tier, og vilta frameworket kan så ved hjælp af MSIL rewriting splitte applikationen i flere lag, lave asynchronous kald og sørge for at oversætte koden så den kan afvikles i det miljøet tilbyder i et givent scenarie. Noget der især virker som sort magi på mig er tanken om at frameworket kan omdanne kode i et CLR sprog til javascript - dette har naturligvis sine begrænsninger men er alligevel ganske fascinerende.

Udover Volta var der også andre interessante taler af blandt andet danske Anders Hejlsberg, der talte om C# 3.0 og kort kommer ind på nogen af de ting de har på tegnebrættet til version 4.0 eller hvad den nu kommer til at hedde. Også F# som jeg har rodet lidt med i fritiden her på det sidste var der et par taler omkring - hvor den ene dog mest omhandlede parsere og leksere, som er en af de ting F# tilbyder nogle specielle features til at understøtte.

Tags: , ,

.NET 3.5 og Visual Studio 2008

by DotNetNerd 15. April 2007 16:26

Vistual Studio 2008.

Jeg har kigget på den nye udgave af Visual Studio 2008 der efter planen skal udkomme engang i løber af anden halvdel af 2007. VS2008 shippes med en del features som enhver udvikler har savnet tidligere, samtidig med det er udviklet til at arbejde med den nye .NET 3.5 framework der udgives ved sammen lejlighed.

I kategorien af features som har været savnet kan jeg nævne at VS2008 giver mulighed med at arbejde med alle tidligere udgaver af frameworket tilbage til 2.0, således at man ikke skal have de "gamle" udgaver af Visual Studio installeret blot for at kunne vedligeholde et eksisterende projekt. En ekstra bonus i den sammenhæng er at man derved kan bruge de forbedrede debugging værktøjer når man f.eks arbejder med et .NET 2.0 projekt.

Udover bagudkompatibilitet er der kommet intellisence og debugging funktionalitet til JavaScript (herunder også Ajax). Det er ihvertfald en ting jeg selv har savnet i lang tid, så man kan komme væk fra at debugge via alert statements, og man slipper for at sidde og ærge sig over at man ikke kan huske hvad en member hedder. Til brug sammen med javascript er der udviklet nye xmlkommentar standarder der passer til beskrivelse af ting der er javascript specifikke.

Sidst men ikke mindst kan jeg nævne at der naturligvis også kommer en række værktøjer til at understøtte .NET 3.0 - hvor især et tool ved navn Cider til at arbejde med XAML til Windows Presentation Foundation virker interessant. Samarbejdet med andre applikationer som for eksempel Expression Studio skulle også være noget der etr tænkt meget over, så der er uden tvivl nogle interessante ting i vente der også.

.NET 3.5 - whats new?!.

Det helt store samtale emne omkring .NET 3.5 har været LINQ som står for Language Integrated Query. Idéen med LINQ er at gøre det lettere at arbejde med data - noget som vores egen Anders Hejlsberg har været en af de store bagmænd til. Udover og i forbindelse med udviklingen af LINQ kommer der også en række udvidelser til både C# og VB som nu udkommer i versionerne C# 3.0 og VB 9.

Både C# og VB udvides med extention methods samt object- og collection initializers. Begge sprog får også nogle sprogspecifikke udvidelser, som for C# inkluderer automatic properties og mulighed for implicit typespecifik deklarering.

C# 3.0 og VB 9 udvidelser.

Som sagt udvides begge sprog med det der kaldes extention methods, object- og collection initializers.

Extention methods er en måde hvorpå man kan tilføje metoder til en type, som bedst er illustreret med et lille eksempel. Hvis du idag skal checke om en streng validerer som en gyldig email vil du typisk lave en metode på en anden klasse der kan lave valideringen. Med extention methods kan du istedet føje metoden til string således at du kan skrive:

if (txtEmail.IsValidEmail)
{
   
}

Det eneste det kræver er at du definerer en statisk klasse, med din metode der tager typen der skal udvides som parameter og bruger keywordet "this" foran.

public static class MyExtensions
{
    public static bool IsValidEmail(this string s)
    {
        Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
        return regex.IsMatch(s);
    }
}


Når der er gjort kan du blot importere klassen ved hjælp af en using statement og så er metoden tilgængelig på typen string.

using MyExtentions;

Object initializers er en mere elegant måde at initialisere et objekt på, således at instantiering og tildeling af værdier til properties gøres mere kompakt. Igen er det nok bedst illustreret ved et kort eksempel

Customer customer = new Customer { Name = "Allan", City = "Nyborg" };

På samme vis giver collection initializers mulighed for at skabe collections og fylde dem på en mere kompakt måde.

List<Customer> customers = new List<Customer>()
{
    new Customer{Name = "Allan", City = "Nyborg"},
    new Customer{Name = "Lena", City = "Hundslev"}
};


Sprogspecifikke udvidelser.

Som tidligere nævnt er der også kommet nogle sprogspecifikke udvidelser til både C# og VB. Til C# er der tale om automatic properties og så et nyt keyword "var".

Automatic properties går at man kan deklarere properties uden at skulle have en underliggende private member til at holde værdien. Naturligvis skal der stadig være noget til at holde værdien, men dette er nu håndterert af compileren så det er muligt at deklarere en property blot ved at skrive:

public string Name
{
    get;
    set;
}


Var keywordet er en udvidelse der grunder i at LINQ syntaksen skal have mulighed for at man implicit kan lave en variabel der alligevel har den rigtige type og ikke blot er af typen object.

var customer = new Customer { Name = "Allan", City = "Nyborg" };

Kort fortalt vil det sige at ovenstående "customer" handle har fat i et objekt af typen Customer, de typen udledes automatisk.

VB får den samme mulighed, men dog uden et nyt keyword da sproget allerede idag har keywordet Dim - objekter bliver frem over bare instantieret med den rigtige tyåe frem for som object selvom man ikke skriver "As Customer".

En anden smart feature der kommer til VB er muligheden for at arbejde med XML inline i koden, således at man kan skrive:

XElement element = <customer>
                                  <name>Christian</name>
                                  <city>Odense</city>
                              </customer>

LINQ - en ny måde at arbejde med data.

Det absolut mest omtalte emne i forbindelse med .NET 3.5 har været LINQ. Da dette er et større emne gemmer jeg det til en seperat artikel, men jeg kan dog lige nævne kort at LINQ er en ny måde at arbejde med data på hvad enten det skal hentes fra en database, et xml dokument eller fra nogle objekter i memory.

Idéen er at lave en fælles syntaks til at definere funktioner der kan bearbejde data på en måde der i nogen grad minder om SQL. Derved slipper man for at skulle arbejde på en forskellig måde alt efter om man arbejder med en sql, xml eller hvad det nu kan være, og samtidig arbejder man med typestærke og extensible objekter - frem for querys der er definerede som strenge.

Tags: , , ,

Who am I?

My name is Christian Holm Diget, 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.

Microsoft Certified Professional Developer

Microsoft Most Valuable Professional

Month List