Pár střípků o SilverLight

Tuto středu (27. září 2007) se v Gopasu konala přednáška Štěpána Bechynského s názvem SilverLight. V tomto článku bych vám chtěl představit co jsem se ve zhruba dvouhodinové přednášce dozvěděl.

Nejdříve pár slov o SilverLightu přímo od Microsoftu:

Microsoft® Silverlight™ is a cross-browser, cross-platform plug-in for delivering the next generation of .NET based media experiences and rich interactive applications for the Web. Silverlight offers a flexible programming model that supports AJAX, VB, C#, Python, and Ruby, and integrates with existing Web applications. Silverlight supports fast, cost-effective delivery of high-quality video to all major browsers running on the Mac OS or Windows.

Uvedená marketingová definice se jeví celkem správná s jednou podstatnou poznámku – platí pouze pro SilverLight 1.1, který se nachází v Alpha verzi (ostrá verze prý bude v dubnu 2008). Proč to uvedu dále v článku.

Architektura SilverLight aplikace

SilverLight aplikace se skládá ze tří částí:

  • XHTML stránka
  • XAML soubor
  • soubory s aplikační logikou

Stručně popsané části si pojďme prohlédnout podrobněji:

XHTML stránka

XHTML stránka je hostitelem SilverLight aplikace. Je zapotřebí si do prohlížece stáhnout a instalovat (podobně jako u Adobe Flashe) plugin. V současnosti jsou podporovány následující browsery:

  • platforma Windows: IE6, IE7, Firefox, (připravuje se podpora Opery)
  • platforma Mac: Safari
  • platforma Linux: připravuje se ve spolupráci s firmou Novell (projekt Mono a MoonLight)

A jak tedy začlenit SilverLight aplikaci do XHTML stránky? Zde je ukázka:

...
<head>
  <title>My Silverlight Application</title>

  <!-- Helper files for initializing and creating the Silverlight plug-in -->
  <script type="text/javascript" src="js/Silverlight.js"></script>
  <script type="text/javascript" src="js/CreateSilverlight.js"></script>

  <!-- Application event-handler functions -->
  <script type="text/javascript" src="js/eventhandlers.js"></script>
</head>
...
<body>
  <div id="slPluginHost" >
    <script type="text/javascript">
      // Create a variable that references the HTML element that hosts the plug-in.
      var parentElement = document.getElementById("slPluginHost");

      // Initialize and create the plug-in.
      createSilverlight();
    </script>
  </div>
</body>
...

Soubor SilverLight.js obsahuje funkce nutné pro přístup k SilverLight komponentě vložené do stránky. Fuknce createSilverLig­ht() může vypadat následovně:

function createSilverlight()
{
    Silverlight.createObject(
        "plugin.xaml",                      // Source property value.
        parentElement,                      // DOM reference to hosting DIV tag.
        "myPlugin",                         // Unique plug-in ID value.
        {                                   // Plug-in properties.
            width:'1024',                   // Width of rectangular region of plug-in in pixels.
            height:'530',                   // Height of rectangular region of plug-in in pixels.
            inplaceInstallPrompt:false,     // Determines whether to display in-place install prompt if invalid version is detected.
            background:'white',             // Background color of plug-in.
            isWindowless:'false',           // Determines whether to display plug-in in windowless mode.
            framerate:'24',                 // MaxFrameRate property value.
            version:'1.0'                   // Silverlight version.
        },
        {
            onError:null,                   // OnError property value -- event-handler function name.
            onLoad:null                     // OnLoad property value -- event-handler function name.
        },
        null,                               // initParams -- user-settable string for information passing.
        null);                              // Context value -- passed to Silverlight.js onLoad event handlers.
}

Anglickým komentářům je myslím dobře rozumět, takže v rychlosti nejdůležitější parametry:

plugin.xaml
název souboru s definicí uživatelského rozhraní
parentElement
odkaz na element v kontextu XHTML stránky, kdo kterého se má SilverLight aplikace přidat

XAML soubor

XAML je značkovací jazyk pro definici uživatelské rozhraní. Jedná se v podstatě o XML soubor.

V XAML souboru se nadefinuje uživatelské rozhraní a handlery událostí.

Aplikační logika

Pokud se bavíme o SilverLight 1.0 tak se aplikační logika omezuje na javascriptové funkce, které jsou ze SilverLight aplikace volány. Tyto funkce mohou být umístěny v externích souborech nebo přímo v XHTML stránce.

V SilverLight 1.1 je situace dočista jiná. Přímo v XAML souboru je možno definovat code begind zdroj. Tím zdrojem může být buď kompilovaný kód nebo skript. Z kompilovaných jazyků bude podporován C# a VB.NET. Jejich běh bude zajišťovat CLR integrovaný v pluginu. Ze skriptovacích jazyků budou podporovány Javascript, Python a Ruby. jejich běh bude zajišťovat DLR. Ani v jednom případě tedy není nutné mít na klientu nainstalovaný MS.NET.

Tohle se mi hodně líbí – možnost definovat aplikační logiku v DLL souboru. Výkon aplikace bude oproti javascriptovému řešení určitě nesrovnatelný (podle slov pana Bechynského je to o 4 řády).

Ještě bych chtěl zmínit, že se připravuje podpora Web Services.

Vývojové nástroje

Základním vývojovým nástrojem je Microsoft Visual Studio 2008. Po stažení příslušného pluginu si můžete přímo založit nový SilverLight projekt.

XAML soubor lze editovat v programu Microsoft Expression Blend 2. V blendu si můžete vektorově nakreslit grafiku a opatřit ji například animátory. Ty se rozdělují podle datového typu animované vlastnosti.

Po založení nového SilverLight 1.1 projektu se vytvoří prádný XAML soubor a rovnou také code behind stránky v jazyce C#.

Další zajímavosti

  • Zaujala mě snadná komunikace mezi XHTML stránkou a SilverLight aplikací. Kupříkladu ze SilverLight aplikace máte pomocí statické property přístup k DOM hostitelské stránky, se kterým můžete dělat do se vám zlíbí.
  • Z kontextu javascriptu v XHTML stránce lze volat třídy a metody v SilverLight aplikaci. Takže například můžete spouštět C# kód v DLL z javascriptu – neuvěřitelné. Přístup je samozřejmě pouze ke spřávně oanotovaným třídám a metodám.
  • Další skvělá věc je, že si mezi SilverLightem a javascriptem ve stránce můžeme posílat i komplexní data – například doménové objekty. Komunikace probíhá pomocí JSONu.
  • Už dnes je SilverLight neporazitelné v oblasti videa. V USA prý existují televize, které svůj program vysílají po internetu a pomocí SilverLightu jej lze přehrávat v HD kvalitě.
  • Velikost pluginu, který je nutno nainstalovat do prohlížeče je ve verze 1.0 asi 1.5 MB, verze 1.1 bude mít asi 4.5 MB.
  • SilverLight má obdobu cookies (SharedObject v případě Flashe) – možno uložit až 4 MB dat.

Závěr

SilverLight (a obzvláště verze 1.1) se mi moc líbí. Je vidět, že se Microsoft rozhlédl kolem sebe (Flash) a udělal svoje řešení, které netrpí některými neduhy konkurence. Uvidíme, jak se v budoucích měsících SilverLight rozšíří. V Čechách jsem o něm zatím skoro neslyšel. Už několik měsíce nesleduju dění kolem JavaFX, ale bojím se, že SilverLight má zatím navrch.

Odkazy

Celý článek 2 komentářů 30. September 2007

Zajímavé linky 10 - Zend Framework in action, TDD, Doctrine

Celý článek 2 komentářů 25. September 2007

Zajímavé linky 9 - JavaFX, Spring Web Flow, JBoss Seam, jQuery 1.2

Celý článek Přidat komentář 12. September 2007

Zend Framework - benchmark pro PHP a Smarty view vrstvu

Jedním z důležitých kriterií při tvorbě webových stránek je rychlost jejich generování. V systémech jako je Java nebo Asp.Net je nám hej – náročné operace (start ORM nástroje atd) si odbydeme při startu aplikace a při obsluhování požadavků se využívá již vytvořených objektů.

Ve skriptovacích jazycích – mám na mysli konkrétně PHP – jsme na tom jinak. Při zpracování požadavku se musí celá naše aplikace postavit a po jejím skončení se zase sbourá. V PHP si nemůžeme dovolit startovat při každém požadavku náročné části systému.

Celý článek 12 komentářů 11. September 2007

Dilbert a Java

Pousmál jsem se nedávno při čtení článku Jak se plánují projekty.

Dnes jsem se v mojí RSS čtečce dopracoval k článku, který informuje o dalším Dilbertovi na programátorské téma – nyní přímo javovské.

Takto tedy vypadá páteční Dilbert:

Celý článek 1 komentář 8. September 2007

DWR - AJAX knihovna pro remotování Java objektů

Pomocí DWR můžete volat Javovský kód přímo z Javascriptu z prostředí internetového prohlížeče na klientském počítači. DWR se samo postará o vykonání asynchronního požadavku na server a převod objektů z javovského světa do javascriptového.

Kromě toho má DWR sadu Utilit, které pomáhají v manipulaci s odesíláním a zpracováním příjímaných dat – plnění selektu daty, přidávání řádků do tabulky atd.

Celý článek 13 komentářů 7. September 2007

Google Reader vs Opera

Právě jsem si přečetl článek Google Reader umí konečně hledat a řekl jsem si, že Google Reader také vyzkouším.

Otevřel jsem si tedy novou záložku v Opeře vyťukal jsem adresu…a…nic. Vše co se zobrazilo bylo pouze logo v levém horním rohu a lišta s navigací v rohu pravém. Toť vše.

Nemám nic proti Googlu a jeho AJAXovým aplikacím ba naopak. O to víc kroutím hlavou na tím, že nedokážou (nebo nechtějí) Google Reader otestovat i pod Operou, která už rozhodně není zcela neznámým browserem. Dle statistik používá Operu 15% návštěvníků mého blogu (pro úplnost Gecko 60%, IE 21%).

Jako RSS klienta používám Operu. Jak jsem napsal jako browser používám Operu. A hádejte jakého mailového klienta používám? Správně – opět Opera.

Okno opery se zobrazením adresářů pošty a RSS (Novinky) v dolní části

Výhody Opery oproti IE a Mozille spatřuji v následujícím:

  • rychlost zobrazování stránek
  • integrace browseru, rss čtečky, mailového klienta do jednoho programu
  • mouse gestures
  • vymakané klávesové zkratky skoro na všechno

Celý článek 2 komentářů 6. September 2007

Certifikace - můj pohled na věc

Před několika málo okamžiky jsem si přečetl zajímavý článek od kamaráda Romana Pichlíka s názvem Certifikace – děkuji nechci.

Nedá mi to a musím některé věci z článku okomentovat.

Pokud budu mluvit konkrétně,tak Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0. mě neláká z toho důvodu, že nenosím v hlavě ani kompilátor, ani interpretr a už vůbec si nedovedu představit jak runtime zpracovávám v hlavě (překlad, interpretace, výpis výstupu) zdrojový kód na kusu papíru. Ušetřený procesorový čas budu raději věnovat jiným samovzdělávacím aktivitám.

Asi jsem nepochopil slova o nošení kompilátor v hlavě. Při pohledu na přehled požadavků ke zkoušce Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 se mi naopak zdá (a při studiu na zkoušku se to potvrdilo), že se jedná o užitečné a praktické okruhy otázek.

Faktem je, že jsem při studiu na tuto zkoušku objevil mnoho střípků do mého poznání Javy, které mi až dosud chyběly. Programování (Java) je kromě mojí práce i můj velký koníček, takže i sve svém volném čase studuju novinky atd., takže při přípravě na zkoušku jsem pouze na dva týdny (z toho jeden v nemocnici) jedhoduše sáhl ke studiu otázek z okruhu požadavků.

Ovšem uznávám, že tento certifikát má jistou vypovídající hodnotu. Jestli tato hodnota napoví cosi o tom, že držitel dokáže v hlavě překládat a provádět java kód a nebo o tom, že má dobré znalosti Javy, záleží pouze a jenom na interpretaci toho kdo na certifikát pohlíží. Co se týká pokročilejších certifikací od Sunu, tak tam bych byl ještě obezřetnější.

Opět jsme u toho překládání a provádění kódu v hlavě…Myslím, že je dobré, když programátor umí číst kód a rozumí tomu jak funguje. Dnes například zatraceně dobře vím jaký je rozdíl v tom, když kolekci Set naimplementuju ja HashSet nebo TreeSet (rozdíl je například v tom, že TreeSet umožňuje mít kolekci seřazenou a vyžaduje, aby objekty v kolekci implementovali rozraní Comparable).

Myslím, že certifikace je jako kterýkoliv jiný stupeň vzdělání. Vysoká škola (vystudoval jsem spalovací motory na ČVUT v Praze) mi pro mojí současnou pozici programátora dala jednu podstatnou věc – vědomí, že se člověk může naučit skutečně všechno.

Certifikace samozřejmě není všechno. Jak už to tak bývá – i vysokou školu vystuduje hlupák. U certifikátů to může být zrovna tak. V mém případě mělo složení certifikátu ještě jeden podstatný důvod. Abych jednoduše zjistil, jak na tom moje znalosti Javy jsou. Ve firmě jsem v Javě programoval pouze já a vůbec jsem netušil jak dobře ji vlastně ovládám.

Asi nejvíce mi vadí fakt, že nalévají do hlavy pouze a jenom pravdu od Sunu. To bohužel vede k tomu, že je do člověka v některých případech napumpovaná teorie, která je v praxi nepoužitelná. A tak člověk bohužel získá deformovaný pohled na ostatní technologie.

Tady je patrně řeč o některý složitějších zkouškách (např. Sun Certified Enterprise Architect). V základním certifikátu je řeč v podstatě jenom o základních principech jazyka a API. Není tam tedy prostor pro žádnou pravdu od Sunu.

Na závěr malá zkušenost z praxe – jak jsem již psal v minulém postu prodělal jsem několik pohovorů. Ani na jedno z míst by měl personální agentura nedoporučila nebýt certifikátu. Většina firem chce Java programátory s praxí delší než mých 2,5 roku. Částečnou náhražkou je právě vlastnictví vzpomínaného glejtu.

Certifikát nechápu jako něco, na co se člověk nadrtí (jako na zkoušku na vejšce) a pak to zapomene. Takto to snad ani dělat nejde. Myslím, že je to spíš o tom posbírat a sesumírovat již zažité znalosti.

Závěr

Podle mě je úplně jedno jestli člověk studuje nové věci kvůli tomu, aby si udělal certifikát, nebo z jiného důvodu. Tak či onak si rozšiřuje obzory a někam se posouvá.

Celý článek 14 komentářů 29. August 2007

Další krůček - Macromedia Flash 8 Exam

minulém článku jsem psal, že se se připravuji na další zkoušku – byla jí Macromedia Flash 8 Exam.

Musím přiznat, že složení této zkoušky pro mě bylo o dost snažší než v případě té sunovské. Dokazuje to i skóre 97% (1 chybná odpověď).

Flashem pracuji v Gopasu asi dva roky. Používáme ho jako běhové prostředí pro e-learningové kurzy.

Moje plány do nejbližší budoucnosti

V poslední době jsem prodělal několik pohovorů (např. ve firmách Hewlett-Packard nebo Avedya a zjistil jsem, že firmy mají zájem o lidi, kteří jsou seznámeni s pokročilejšími technologiemi z rodiny J2EE. Mluvím například o JMS a EJB. Takže moje self studium se bude ubírat tímto směrem.

Pomalu se začnu připravovat na zkoušku Sun Certified Web Component Developer for the Java 2 Platform, která se mi zdá podle přehledu požadavků velmi zajímavá.

A nakonec musím zmínit Maven. Tento buildovací nástroj se těší v posledních týdnech mezi českými javisty velkému zájmu (CZJUG – hvězdy září v Září, Co bych rád slyšel v září na CZJUG, Pozvánka: Maven – praktické nasazení a také e-mailová konference na konference@ja­va.cz).

Celý článek 7 komentářů 24. August 2007

Zajímavé linky 8 - Spring Batch, Spring Web Services, JPA 2, Integrační testy

Jak jste si mohli všimnout nové články nyní na blogu moc nepřibývají. Má to několik důvodů – nekonečné práce na dostavování domu, příprava na další certifikát (o který se jedná bude možná trochu překvapení), návštěva posilovny (konečně jsem opět začal pravidelně cvičit), čtení publikací (mám rozečteno několik více či méně zajímavých knih, po přečtení je zde představím).

Ale nyní již k tomu nejzajímavějšímu co mi přinesl RSS klient

  • Rodina produktů se slovem Spring v názvu se rozrůstá. Nedávno například o Spring Batch. K čemu je Spring Batch dobrý bych si dovolil citovat přímo z homepage projektu:

Spring Batch provides a technical framework and programming model to support long-running processes that perform a given set of tasks repetitively. A typical batch program generally reads a large number of records from a database, file, or queue, processes the data in some fashion, and then writes back data in a modified form. Spring Batch automates this basic batch iteration, providing the capability to process similar transactions as a set, typically in an offline environment without any user interaction.

Dalším nový produktem jsou Spring Web Services. Zde je výčet klíčových vlastností:

  • Making the best practice the easy practice: Spring Web Services makes enforcing best practices easier. This includes practices such as the WS-I basic profile, Contract-First development, and having a loose coupling between contract and implementation.
  • Powerful mappings: You can route an incoming XML request to any handler depending on message payload, SOAP Action header, or XPath expression.
  • XML API support: Incoming XML messages can be handled in standard JAXP APIs such as DOM, SAX, and StAX, but also JDOM, dom4j, XOM, or even marshalling technologies.
  • Flexible XML Marshalling: The Object/XML Mapping module in the Spring Web Services distribution supports JAXB 1 and 2, Castor, XMLBeans, JiBX, and XStream. Because it is a separate module, you can use it in other environments as well.
  • Reuse of your Spring expertise: Spring-WS uses Spring application contexts for all configuration, which gets you up-and-running quickly. Also, the architecture of Spring-WS resembles that of Spring-MVC.
  • Support for WS-Security: WS-Security allows you to sign SOAP messages, encrypt and decrypt them, or authenticate against them. And it integrates with Spring Security!

Celý článek Přidat komentář 18. August 2007

Novější články Starší články


Kategorie

Odkazy

Zdroje

Locations of visitors to this page