Novinky v Silverlight 3.0 - finální verze je venku

V pátek 10. 7. 2009 byla uvolněna finální verze (RTW - Ready To Web) třetí generace Microsoft RIA platformy Silverlight. K instalaci se dostanete na hlavních stránkách produktu. První dotaz, který každý uživatel i vývoj ale bude mít je "co je v této verzi nového a jak je velká". Druhá část odpovědi je docela jednoduchá 4.6 MB, tedy značně šokující, zejména po té, co si přečtete následující odstavce obsahující pouze rozšíření, nikoli veškerou funkcionalitu, kterou Silverlight nasbíral od verze 1.0. Mohu-li vyjádřit osobní názor programátora, pak to bude docela krátce - "fakt smekám klobouk před schopnostmi Silverlight vývojového teamu".

Co je tedy nového?

Seznam bych rozdělil do následujících kapitol. Jejich pořadí není náhodné ani abecední, nýbrž vyjadřuje důležitost podle mého názoru. Každý vývojář nebo uživatel může mít ale potřeby nastaveny jinak.

  • Rozšířená datová podpora
  • Schopnost běhu mimo prohlížeč
  • Vysoká RIA produktivita
  • Nové grafické efekty
  • Podpora pro video a audio ve vysoké kvalitě
  • Zvýšená výkonnost

Schopnost běhu mimo prohlížeč

Silverlight dnes nabízí možnost instalace aplikace přímo do lokálního operačního systému. Na rozdíl od běžných desktopových aplikací ale běží v sandboxu, který zamezuje spouštění maligního kódu nedobrovolně staženého z internetu. Diskuse, která proběhla na Živě ohledně bezpečnosti, je tedy zcela výsledkem neznalosti produktu. Lokální instalace se z pohledu koncového uživatele chová jako desktopová - je reprezentována zástupcem na ploše nebo ve start nabídce a běží bez nutnosti instalace jakéhokoli dalšího softwaru. Funguje i při dočasné chybějící konektivitě do internetu. Pro vývojáře jsou připraveny následující technologie:

  • Nasazení aplikace jedním klikem s umístěním odkazů do start menu a na desktop
  • Díky sandboxu není nutná elevace práv při instalaci aplikace. Stejně tak nejsou vyžadována dodatečná práva při běhu aplikace.
  • Automatický update aplikace po jejím startu. Pokud je dostupná konektivita, je nová verze detekována, stažena a nainstalována.
  • Je detekována síťová konektivita a na jejím základně je možné rozhodnout, zda dat poslat přímo na server nebo dočasně uložit v Isolated Storage.

Rozšířená datová podpora

Běh aplikace mimo prohlížeč a rozšířená datová podpora dělají ze Silverlightu 3.0 vhodný framework pro psaní i složitějších LOB (Line of Business) aplikací. Nejen, že je možné aplikaci provozovat v online i offline scénáři, ale máme k dispozici i celou řadu nástrojů pro práci s daty. Bez nich je velmi otrocké vytvářet webové verze známých desktopových produktů. Zde je také zřetelné, jaké má Microsoft s platformou Silverlightu záměry - vytvořit nejen kvalitní konkurenční platformu k existujícím RIA technologiím, ale využít zkušeností, které máme na poli funtime prostředí pro business aplikace.

Ale zpět k tématu rozšířené datové podpory. S příchodem trojkové verze lze v pluginu najít tyto novinky:

  • Podpora pro business objekty - jednoduché stažení, sortování, filtrování a stránkování s podporou jako na klientovi tak serveru s n-vrstvou architekturou. Na straně klienta je to nový CollectionView a množina operací pro práci s daty na serveru. Serverovou stránku pak realizují .NET RIA services.
  • Validace vstupu - obdobně jako v ASP.NET i v SL je dnes možné validovat vstup uživatele a vizuálně jej informovat o jeho chybách.
  • Vylepšený Databinding - pomocí tzv. ElementName bindingu lze provázat vlastnost ovládacího prvku k vlastnosti jiného prvku nebo CLR objektu přímo v XAML kódu. Vedle ElementName bindingu existuje i RelativeSource binding pro propojení prvku sama se sebou nebo s daty šablony, pokud je její součástí.
  • Datový formulář - nový ovládací prvek podporující pole (fields), validaci, updatování a stránkování dat.

Pro další informace doporučuji si přečíst tento dokument a prohlédnout živý příklad.

Vysoká RIA produktivita

Byť jsem tuto skupinu novinek dal třetí v pořadí, je nutné zdůraznit její enormní význam.

  • V první řadě to je absolutní změna v přístupu Microsoftu ke zdrojový kódům. Všech více než 60 ovládacích prvků bylo uvolněno se svými zdrojovými kódy jako projekt Silverlight Toolkit. Je velice nepravděpodobné si na vlastní pěst modifikovat samotný SL runtime, ale s ovládacími prvky je to něco jiného. Po tom volalo hodně programátorů. Příklady všech komponent uvidíte např. zde.
  • Druhou zásadní oblastí je podpora SEO. Vyhledávání na internetu a RIA technologie často nejdou spolu dohromady. Po celé 2 předchozí roky jsme dostávali dotazy od vývojářů na téma SEO. Dnes je tato otázka řešitelná pomocí business objektů na straně serveru společně s ASP.NET ovládacími prvky a site mapou. Díky nim lze datově řízený klientský RIA obsah převést na snadně indexovatelný HTML obsah. Příklad leze najít třeba tady.
  • Posledním, neméně důležitý vylepšením, zejména z pohledu koncového uživatele, je podpora bookmarků uvnitř RIA aplikace. V anglické dokumentaci je tato vlastnost nazývána Deep Linking.

Nové grafické efekty

Mí přátelé pracující v oblasti grafiky a vizualizace mi asi pěkně vynadají. Posunout tuto nejvíce nadupanou skupinu novinkami až na 4. místo je asi trestuhodné. Omlouvám se a jako zadostiučinění jí budu věnovat více prostoru :-).

  • Nejdříve bych asi měl zmínit podporu hardwarové akcelerace , a tedy přenesení výpočetního výkonu z CPU na GPU. Aplikace, které by významně zacloumaly procesorem, dnes mohou konzumovat pouhý zlomek výkonu. Více informaci se také dozvíte zde.
  • Jednou z žádostí na funkci SL byla podpora 3D. Opovědí je ve verzi 3.0 je tzv. perspektivní 3D, které umožňuje v 3D prostoru pohybovat rovinou, na které jsou umístěny jednotlivé elementy. Vedle typický posunů, rotací nebo zvětšování jsou dále k dispozici fronty ve 3D a přechody. Pěkná ilustrace možností je vidět třeba zde.
  • Používáte pixel shadery pro generování grafických efektů? Nebo jste si napsali dokonce někdy svůj vlastní? Pokud ano, v obou případech, Silverlight je další platformou, kde se můžete vyřádit. K dispozici jsou jednoduché shadery jako rozmazání nebo vržení stínů. Jejich architektura je však otevřená a lze napsat a použít vlastní. Zkuste se podívat na demo. Všimněte si, že shader lze aplikovat nejen na bitovou mapy, ale i video nebo ovládací prvky.
  • Pro zvýšení výkonu překreslování obsahu aplikace je k dispozici možnost Bitmapové cache. Zvolený obsah, který nemusí měnit svou velikost, je možné z vektorové formy převést na bitovou mapu a tu lokálně cachovat. Mohou to být jak jednotlivé grafické elementy, text, ale i ovládací prvky. Typickým kandidátem je například pozadí aplikace.
  • Byť je veškerá grafika v Silverlightu vektorová, obdobně jako ve WPF, ve verzi 3.0 přibývá nové Bitmapové API. Díky němu je možné manipulovat s jednotlivými pixely bitový map. Třída WritableBitmap umožňuje manipulaci a vykreslování bitových map na úrovni jednotlivých framů. S výhodou lze použít pro snímání videa, datovou vizualizaci nebo algoritmické generování obsahu. Každý asi někdy viděl vizualizaci Mandelbrotovy množiny - fraktálů. Zde si můžete s jedním vyhrát (určitě si vyzkoušejte funkci zoomu - zvětšení vybrané plochy).
  • Jedna z prvních aplikací, kterou jsem před lety předváděl ve WPF, uměla dynamicky měnit svůj vzhled pomocí tzv. témat. Tento luxus je nyní dostupný i v Silverlightu. Od verze 3.0 lze vytvořit téma pro aplikaci zcela samostatně a následně jej za běhu aplikace aplikovat. Navíc jde při vytváření témat použít typické kaskádování stylů jako známe u CSS. Jednoduché demo je k vidění zde.
  • Animace v předchozích verzích Silverlight neumožňovaly simulaci přirozeného pohybu, jako jsou například odrazy. Zavedením tzv. Easing funkcí, lze nyní realisticky simulovat tyto pohyby. Dokonce lze pohyb popsat vlastními matematickými funkcemi pro simulaci libovolného chování. Pěkně demo je součástí MSDN dokumentace.
  • K dalším rozšířením patří například rychlejší vykreslování a animace textu, případně možnost využití lokálních fontů. Ty se vykreslují pomocí elementu Glyphs. Více lze najít opět v MSDN dokumentaci.

Podpora pro video a audio ve vysoké kvalitě

Video obsah vévodí internetu. Je to tak rozšířené médium, že i naše české vývojářská jednotka založila projekt Microsoft televize (MSTV) J. Silverlight od svého počátku byl v této oblasti velice silnou technologií, zejména díky VC-1 kodeku a kombinace s Windows Media Services. Výkon, vysoká kvalita kódování, nižší celková cena řešení vůči konkurenci byly předností. Ve verzi 3.0 přesto byly přidány velice významná rozšíření.

  • První novinkou bych asi jmenoval podporu živého i on-demand streamování v plném HD (720+) rozlišení kombinované s technologií Smooth Streaming. Úkolem "plynulého streamování" je zajistit, že obraz je vždy nepřerušovaný a nestává se z něj přehlídka po sobě jsoucích trhaných úseků připomínající prezentaci v PowerPointu. Dynamicky se vyhodnocuje přenosová kvalita síťového připojení a dále pak výkon klientského CPU. Ve spolupráci s IIS Media Services a integrovanou HTTP media delivery platform se zajistí tento plynulý provoz. Naprosto jedinečný příklad této technologie s vizualizovanou analýzou streamingu si můžete spustit zde.
  • VC-1/WMA kodek je výtečným produktem, ale zábavní průmysl používá i další, neméně kvalitní technologie. Do SL 3.0 byla proto přidána podpora MPEG4 ve formátu H.264 s ACC pro vysoce kvalitní audio.
  • Streamování HD videa a jeho vykreslování na plné obrazovce je výpočetně velice náročná operace. Aby byl obraz plynulý i na počítačích s nižším výkonem, např. noteboocích nebo netboocích, je pro vykreslování HD videa podporována i GPU akcelerace.
  • Přestože Silverlight implementuje nejpoužívanější kodeky, může často vyvstat požadavek použít kodek jiný. Konkurenční technologie v této oblasti nedávají téměř žádný prostor. Silverlight 3.0 poprvé nabízí možnost využít své vlastní kodeky nebo kodeky třetích stran, díky otevření AV pipeline. Pomocí Raw AV Pipeline lze dekódování streamu předat externí komponentě a samotné vykreslení opět ponechat na Silverlightu. Jednoduché demo lze vidět třeba zde.

Zvýšená výkonnost

Předchozí odstavce obsahují samy o sobě celou řadu novinek, které patří do kategorie zvyšování výkonu. V této poslední se chci věnovat několika tématům, které se logicky nikam nevešly.

  • První je schopnost lokálně cachovat aplikační knihovny tak, že mohou být sdíleny mezi jednotlivými aplikacemi, aniž by se musely opakovaně stahovat. Knihovny jsou staženy na lokální počítač při prvním přístupu a následně zpřístupněny i ostatních SL aplikacím. Toto nastavení lze aplikovat jak na své vlastní knihovny, tak na originální knihovny Microsoftu.
  • Vylepšený Deep Zoom. Tato technologie poprvé uvedené ve verzi 2.0 byla nyní zdokonalena a daleko plynuleji umožňuje vykreslovat obrázky v super vysokém rozlišení. Příklady Deep Zoomu, stejně jako celé řady ostatních částí Silverlightu najdete na online verzi Silverlight SDK. Ke každému příkladu zde jsou k dispozici i plné zdrojové kódy. Pokud někdy budete potřebovat rychle najít jednoduché demo, toto je jediné místo, které si dejte mezi oblíbené položky.
  • Komunikace prostřednictvím XML má celou řadu výhod, ale i jednu nevýhodu - objem dat. Pokud nám na tomto parametru záleží, což je vždy, když jde o výkon, můžeme s výhodou využít binárního XML. Data jsou při této formě komunikace komprimována a jejich přenos je významně zrychlen.
  • A tímto jsem se dostal k poslední novince, kterou je schopnost komunikace mezi Silverlight aplikacemi běžícími na jedné stránce. Díky Local Connection není nutné s daty putovat z jedné komponenty na server a zpět do komponenty druhé. Snadno tak může např. předávat data list box v jedné aplikaci grafu nebo datagridu v aplikaci druhé.

Chtěl jsem tento článek napsat kratší a publikovat jej již v pondělí. Seznam novinek mne ale tak nadchnul, že mi to zabralo 2 večery a 4 A4 stránky, než jsem to dal dohromady. Pevně věřím, že novinky nadchly i vás a napíšete nám, své názory. Jinak se můžete těšit na celou řadu pořadů na toto téma, které budeme publikovat na www.mstv.cz

Dalibor Kačmář, Platform Strategy Advisor