Meer duidelijkheid over HTML5 vs Silverlight

In een blog post op ‘The Silverlight Blog’ geeft Microsoft meer duidelijkheid over welke (toekomstige) rol Silverlight heeft in het licht van de HTML5 ontwikkelingen.

Wat ik er uit kan halen:

  • Silverlight blijft belangrijk (voor plug-ins en voor Windows Phone).
  • Aan HTML5 tooling wordt gewerkt en hier zal in de toekomst ook meer nadruk op worden gelegd.
  • Silverlight 5 wordt getoond op MIX11, waarbij diverse plug-in scenario’s worden gedemonstreerd.
  • Er is geen algemeen geldende richtlijn te geven voor het gebruik van een bepaalde technologie. Ontwikkelaars moeten zelf altijd een afweging maken met de wetenschap dat er geen enkel tool bestaat dat alles afdekt.
Advertenties
Geplaatst in HTML5, Silverlight | Een reactie plaatsen

Handmatig plaatsen van een WPF window

Bij het positioneren van visuals, gebruikt WPF ‘device independent pixels’ (DIP). Een DIP is altijd 1/96 inch groot.

WPF zorgt zelf voor opschaling wanneer de schermresolutie anders is dan 96 pixels per inch (dpi). Bijvoorbeeld in het geval van een laptop die een 120 dpi scherm heeft.

Bij het handmatig positioneren van een WPF window, maak je gebruik van de Left en Top properties. En ook dit zijn DIP properties.

Een tijdje terug wilde ik een WPF window positioneren op de plek van een button. Een gebruiker klikt op een button en het window verschijnt precies op die plek, zodat er geen grote muisbewegingen nodig zijn.

Ik loste dat als volgt op:

Point screenPos = button.PointToScreen(new Point(0,0));
dialog.Left = screenPos.X;
dialog.Top = screenPos.Y;

En dat werkte….. op mijn 96 dpi scherm. Helaas kwam ik al snel tot de ontdekking dat het op mijn laptop met 120 dpi scherm niet werkte.

Wat blijk nu? PointToScreen retourneert geen DIP coördinaat, maar een *echt* schermcoördinaat. Tsja… als ik de naamgeving van deze methode wat serieuzer had genomen, had ik het kunnen vermoeden.

Gelukkig is het mogelijk om een schermcoördinaat te transformeren naar een DIP coördinaat. Dat gaat via de PresentationSource klasse. De volgende helper method maakt het nu mogelijk om een DIP  coördinaat van een willekeurige WPF visual op te vragen:

public static Point DeviceIndependentPosition(Visual element)
{
    Point screenPos = element.PointToScreen(new Point(0, 0));
    PresentationSource src = PresentationSource.FromVisual(element);
    return src.CompositionTarget.TransformFromDevice.Transform(screenPos);
}

Eventueel kan hier een extension method (voor Visual) van gemaakt worden. Het plaatsen van een WPF window op de positie van een button is nu eenvoudig:

Point buttonDip = DeviceIndependentPosition(button);
dialog.Left = buttonDip.X;
dialog.Top = buttonDip.Y;
Geplaatst in .NET, C#, WPF | Een reactie plaatsen

Silverlight 5

De keynote van de op 2 december gehouden Silverlight Firestarter 2010 bracht eindelijk duidelijkheid over de toekomst van Silverlight. Tenminste… voor een deel.

Silverlight 5 brengt verbeteringen op de volgende twee punten:

  • Media
  • Toepassingen

In de keynote gaat Scott Guthrie hier verder op in.

In een eerdere blog post vroeg ik mij af in hoeverre Silverlight 4 geschikt is voor de desktop. Grootste struikelblok in mijn ogen is dat win32 dll’s niet gebruikt kunnen worden in Silverlight 4. Een ander punt is het ontbreken van 3D ondersteuning.

Beide punten worden in Silverlight 5 opgelost. 

Silverlight 5 kan zich daardoor voor een steeds groter deel meten met WPF. Dat is mooi. Maar dit roept toch ook weer een aantal vragen op:

  • Heeft WPF nog een toekomst naast Silverlight?
  • Zo ja: hoe onderscheidt WPF zich van Silverlight op termijn?
  • Wordt Silverlight steeds meer een Microsoft-gebonden technologie, wellicht met uitzondering van online mediatoepassingen?

Hoe mooi en wenselijk de nieuwe mogelijkheden van Silverlight 5 ook zijn, beantwoording van bovenstaande vragen zou veel meer duidelijkheid scheppen over hoe het Microsoft ontwikkellandschap er in de toekomst uit zal zien.

Nu bestaat bij mij de indruk dat Microsoft het zelf ook nog niet weet, of nog niet het achterste van zijn tong wil laten zien.

Geplaatst in Uncategorized | Een reactie plaatsen

Commotie rond Silverlight en HTML5

Silverlight ontwikkelaars werden onlangs opgeschikt door de volgende opmerking van Bob Muglia, president “Server en Tools” bij Microsoft:

Silverlight will continue to be a cross-platform solution, working on a variety of operating system/browser platforms, going forward. But HTML is the only true cross platform solution for everything, including (Apple’s) iOS platform.

Het startte allemaal met deze blog: http://www.zdnet.com/blog/microsoft/microsoft-our-strategy-with-silverlight-has-shifted/7834.

Die opmerking van Muglia kwam als een volkomen verrassing voor de Silverlight community. Binnen de korste keren ontstond er een ware commotie op twitter en in de blogosphere.

Lees bijvoorbeeld de volgende blogposts:

Waarom er nu zoveel commotie ontstond is voor mij niet helemaal goed te verklaren. Als het om webtechnologie gaat, zet Microsoft al geruime tijd voornamelijk in op de combinatie HTML/CSS/jQuery. Kijk naar de ontwikkelingen rond ASP.NET MVC. Hierin speelt Silverlight nauwelijks een rol. Hooguit als een plug-in voor het tonen van media, zoals bij Flash.

Kijk je aan de andere kant naar alle software die niet cross-platform hoeft te zijn, dan zie je dat Silverlight (of het grotere broertje WPF) op dit vlak goede diensten kan doen, juist vanwege de beter aansluiting op het onderliggende besturingssysteem. En bovendien, als Windows Phone 7 een succes wordt, dan wordt Silverlight logischerwijs ook een success.

Ik denk dus dat Microsoft op twee paarden tegelijk wedt: Open standaarden (HTML5, jQuery) voor het bouwen van cross-platform producten en eigen standaarden (XAML, Silverlight) voor een betere aansluiting op de eigen besturingssystemen. Daar zou veel voor te zeggen zijn.

Maar Microsoft heeft zich nu toch wel met een probleem opgezadeld. Want stel dat ik met HTML5 aan de slag wil, welke ontwikkeltools kan ik hiervoor dan het beste gebruiken? De kans dat je op dit moment uitkomt bij Adobe is erg groot. Het zal toch niet de bedoeling zijn dat Microsoft alle ASP.NET ontwikkelaars in de armen van Adobe drijft? Daarom “verdenk” ik Microsoft ervan om zeer binnenkort met tooling te komen rond HTML5. Als dit van hetzelfde niveau is als de tooling rond Silverlight, dan (en alleen dán) werkt de verschuiving naar HTML5 in het voordeel van Microsoft. Het alternatieve scenario, namelijk dat Microsoft Adobe koopt, acht ik onwaarschijnlijk.

Toevoeging (1 november 2010):

Bob Muglia heeft inmiddels gereageerd in een blogpost: http://team.silverlight.net/announcement/pdc-and-silverlight/

Make no mistake; we’ll continue to invest in Silverlight and enable developers to build great apps and experiences with it in the future.

Geplaatst in HTML5, Silverlight, WPF | Tags: , | Een reactie plaatsen

Asynchrone methods in C# en Visual Basic vNext

Een toekomstige versie van C# en Visual Basic maakt het werken met asynchrone methods een stuk makkelijker te maken dan nu het geval is. Anders Hejlsberg, de geestelijk vader van C#, maakte dit duidelijk tijdens de pdc10 conferentie in een presentatie met de titel “The Future of C# and Visual Basic”

Het komt er op neer dat het niet meer nodig is om met call backs te werken en dat de programmalogica  gelijk blijft aan synchrone methods. Een asynchrone method (aangegeven met het async keyword) wordt synchroon behandeld, met uitzondering van een operatie die wordt voorafgegaan door het await keyword. Dit is een asynchrone operatie. Alle statements volgend op deze asynchrone operatie worden uitgevoerd nadat de asynchrone operatie klaar is.

Voor meer informatie, bekijk de sessie via http://player.microsoftpdc.com

Geplaatst in .NET, C#, pdc2010 | Een reactie plaatsen

Silverlight 4 geschikt voor de desktop?

Als .NET desktopontwikkelaar kom je met WPF (Windows Presentation Foundation) ruimschoots aan je trekken. Maar bij Microsoft lijk de aandacht flink te verschuiven van WPF naar Silverlight.  Het zou me daarom niets verbazen wanneer WPF binnenkort ‘deprecated’ gaat worden voor de meest gangbare desktopapplicaties. Ik ben benieuwd welke mogelijkheden een volgende Silverlight versie op dat vlak zal bieden.

In dit artikeltje wil ik kijken in welke mate Silverlight op dit moment al geschikt is voor het bouwen van desktopapplicaties. Wat mij betreft moet Silverlight in dat geval de volgende functionaliteit kunnen bieden:

  1. Benaderen (lezen én schrijven) van het lokale bestandssysteem
  2. Printen
  3. Starten van native command line applicaties
  4. Aanroepen van native dll’s
  5. Installeerbaar buiten de context van een webbrowser.

Over de eerste twee punten kan ik kort zijn. Dat is met een Silverlight 4 OOB (out of browser) applicatie prima mogelijk, hoewel punt 1 wel wat restricties kent.

Ad 3) Het starten van native command line applicaties lijkt in eerste instantie niet mogelijk te zijn. Zo is het niet mogelijk om System.Diagnostics.Process te gebruiken. Toch bestaat er wel een mogelijk via COM interop. Een voorbeeld is te vinden in de volgende blog post: Silverlight 4 and command line execution. Toch kent dit zijn beperkingen, want het zal op deze manier waarschijnlijk niet mogelijk zijn om invoer en uitvoer om te leiden naar streams in de Silverlight applicatie. Omleidingen moeten dan via invoer- en uitvoerbestanden plaatsvinden. Maar dat is in de meeste gevallen geen onoverkomelijk probleem.

Ad 4) Helaas is het niet mogelijk om een native dll aan te roepen vanuit een Silverlight applicatie. Mogelijke workarounds zijn het gebruik van een COM-component of een WCF service (als onderdeel van een web service of een windows service) die als ‘wrapper’ fungeert voor de dll. Deze oplossingen zijn niet ideaal. Niemand gaat voor z’n plezier zelf met COM aan de slag om maar wat te noemen. Het voelt aan als teveel hocuspocus voor een nogal basale functionaliteit. Hopelijk dat een toekomstige versie van Silverlight verbeteringen kent op dit punt.

Ad 5) Het is mogelijk om een Silverlight 4 OOB applicatie te installeren zonder browser door een eenvoudig script te gebruiken. Voor meer informatie, zie: Installing Silverlight applications without the browser involved.

Natuurlijk is de uiteindelijke keuze voor WPF of Silverlight ook afhankelijk van andere factoren. Je kunt dan denken aan het moeten werken met 3D of de beschikbaarheid van bepaalde user controls.

Mijn voorlopige conclusie is dat Silverlight 4 in veel gevallen een volwaardig alternatief kan zijn voor WPF. Een struikelblok vormt nog het kunnen aanroepen van native dll’s. Hier is wel omheen te werken, maar dat kost naar mijn smaak nog teveel moeite.

Nu nog een mooi project vinden voor mijn eerste Silverlight desktopapplicatie. Knipogende emoticon

Geplaatst in .NET, Silverlight, WPF | 1 reactie

C++0x : auto declaraties

Jarenlang was C++ voor mij de belangrijkste programmeertaal. Hoewel ik nog steeds C++ projecten doe, is mijn aandacht de laatste jaren meer richting .NET en C# verschoven. Om die reden heb ik ook nooit veel interesse gehad voor C++0x: een nieuwe C++ standaard.

Laatst werd toch mijn interesse voor C++ weer gewekt door een serie op Channel 9 over de Standard Template Library (STL). Zijdelings kwamen hier ook een aantal interessante features van C++0x aan de orde. Features die me meteen aan C# deden denken.

Eén van die nieuwe features van C++0x is de introductie van het auto keyword. Voor degenen die bekend zijn met C#: het auto keyword is vergelijkbaar met het var keyword in C#.

De belangrijkste reden voor mij om het auto keyword te gaan gebruiken is: mezelf ergernis besparen en leesbaarheid van de code verhogen.

Neem bijvoorbeeld de volgende, volstrekt gebruikelijke, code om een associatieve lijst (met key en value elementen) te doorlopen:

map<int, vector<string>*> *m = new map<int, vector<string>*>();

// ... doe iets met m ... (code weggelaten)

for(map<int, vector<string>*>::iterator i = m->begin();
    i != m->end(); ++i)
{
    int key = i->first;
    vector<string>* value = i->second;

    // ... doe iets met key en value (code weggelaten)    
}

De declaratie syntax van de variabelen m en i ziet er belachelijk complex uit. Iemand die niet met C++ bekend is, zou denken dat de programmeur hier een beetje de hacker uit zit te hangen.

Hier komt auto van pas:

auto m = new map<int, vector<string>*>();

// ... doe iets met m ... (code weggelaten)

for(auto i = m->begin();
    i != m->end(); ++i)
{
    auto key = i->first;
    auto value = i->second;

    // ... doe iets met key en value (code weggelaten)    
}

Dat ziet er toch stukken beter uit! Bij het gebruik van auto zal de compiler het type afleiden uit de context. Het is dan niet nodig om het type expliciet te benoemen. Redundantie (in de vorm van het telkens herhalen van types) wordt op die manier voorkomen.

Alle type-informatie in bovenstaande voorbeeld is te vinden in de eerste regel. En dan alleen nog maar aan de rechterkant van het = teken. Op de plaatsen waar auto is gebruikt, is het type door de compiler af te leiden.

C++0x kent ook nog een voorstel om de for-lus syntax te vereenvoudigen. De for-lus zou er dan ongeveer zo uit kunnen zien:

for(auto i : *m)

Helaas wordt deze syntax niet ondersteund door Visual Studio 2010.

Geplaatst in C++ | Een reactie plaatsen