Zobrazují se příspěvky se štítkemWPF. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemWPF. Zobrazit všechny příspěvky

středa, června 13, 2007

Vítr změn (aneb Kde, sakra, vězí?)

Jistě, je to banální, ale koupil jsem si teď nedávno nový monitor. Po nějakém tom týdnu rozmýšlení jsem nakonec zvolil 20" širokoúhlý (s rozlišením 1680x1050, nebo tak něco). Je to velmi pěkná věc, také asi proto, že poměr 16:10 je nejblíže zlatému řezu ze všech. Ale co chci říct: přivedlo mě to k úvahám nad uživatelskými rozhraními, a jak nudná a stejná vlastně jsou.

Musím říct, že mě dost překvapuje, že po pětadvaceti letech vývoje používají operační systémy tu samou metaforu pro práci jako tehdy na začátku. Skoro všechny součásti hardwaru se za ty roky proměnily k nepoznání (ať už jde o výkon složitost, nebo kapacity), software, který uživatel nevidí, udělal obrovské pokroky (multitasking, správa paměti, různé tyhle síťové vrsty a frameworky obecně), objevilo se tolik různých aplikací, které jsou užitečné, a které tu předtím nebyly. Ale uživatelské rozhraní je pořád stejné: desktop, na který se dají házet ikony, které mají představovat soubory (ale také programy -- myslím, že tohle spoustu lidí dost mate, že ikona reprezentuje různé věci v různých situacích), okno, nějaké prvky na jeho zavření, přesunutí nebo změnu velikosti, nějaká ta lišta se seznamem spuštěných aplikací a to je všechno.

Říkám si: jasně, většina lidí asi tuhle abstrakci pochopí, ale když uvážíte, jak se osobní počítače změnily za dobu své existence, jsou všechny současné (mainstreamové, konzumentské) operační systémy dost trapné. Uvažte: jediné co všichni ti lidé, kteří pracují na rozšíření uživatelského rozhaní o 3D možnosti, dokázali zatím vymyslet je 3D přepínač aplikací a nějaké další trapné pokusy dodání třetího rozměru oknům, které jsou prostě z principu dvourozměrné, a další rozměr nemá smysl, dokud se zcela nezmění metafora, kterou operační systémy v uživatelském rozhraní používají. Tedy: samá pastva pro oči, žádná inovace. (Ach, ještě máme Ribbon, což je zajímavá věc, a je to od Microsoftu docela odvaha takhle zásadně změnit svou dojnou krávu -- Office. I když chápu, že koncentrace funkcí v Office už dosáhla hranice, kdy nebylo možné ho dále nutit lidem s tím, že obsahuje nové funkce, protože na ně stejně nikdo nepřišel. Ohledně UI MS Office je rozhodně zajímavé přečíst si blog Jensena Harrise An Office User Interface Blog.)

Samozřejmě, že změna metafory by nejspíše vyžadovala změnu ovládání, které by muselo nějak přirozeně reflektovat trojrozměrnost pracovní plochy, ale myslím si, že dneska není zase takový problém vyrobit pro jeden systém dvě rozhraní: jedno klasické 2D pro konzervativce a další opravdu 3D pro experimentátory a trhnout balík na prodeji předraženého ovladače.

Jedna věc, kterou jsem zapomněl napsat v textu o WPF byla, že WPF přímo vybízí k tomu, aby designeři designovali uživatelská rozhraní do problémové domény, a ne do operačního systému. Myslím tím to, že WPF umožňuje snadno implementovat takovou abstrakci, které odpovídá problému který řešíte, a ne aplikaci, která jen vypadá konzistentně s operačním systémem, ale jinak se používá špatně (samozřejmě ve WPF můžete UI přepínat podle potřeby).

To je rozhodně změna k lepšímu.

V jakémsi podcastu jsem slyšel (pokud si dobře vzpomínám), že všichni doktoři byli naprosto unešení z malého dema, které v Microsoftu sestavili aby předvedli možnosti WPF, a které imitovalo databázi pacientů. Prý lepší popsání problémů, které řeší zatím neviděli.

Rozumím tomu.

Uživatelská rozhraní často upadají do stereotypů, které vznikly před mnoha lety, kdy nebylo možné řešit rozhraní tak, jak je to přirozené, a tak se z různých důvodů se uživatelé přizpůsobovali aplikacím, místo aby to bylo naopak.

Dneska si myslím, že už takové ohýbání uživatelů není nutné. Tak doufám, že si toho někdo všimne...

sobota, dubna 28, 2007

WT^hPF

Tak. Tímto textem bych chtěl na nějakou dobu uzavřít diskusi o Microsoftu, Apple a podobných věcech.

Když teď nedávno Microsoft přejmenoval WPF/E na Silverlight, a všichni bloggeři se kolem této události začali rojit s tím, jestli Silverlight převálcuje Flash nebo ne, také jsem cítil potřebu se k tomu nějak vyjádřit. Nakonec jsem se rozhodl to neudělat, protože je podle mě na nějaké hodnocení brzo. Jednak Microsoft chystá ještě nějaké šokantní oznámení (bude Silverlight open-source? Tak ta velká novina je platformě nezávislá implementace CLR pro prohlížeče.), jednak mě vývoj webových aplikací tak úplně nezajímá. (Nicméně jsem chtěl poznamenat, že už delší dobu si myslím, že Apollo je ten Next Big Language, o kterém mluví Steve Yegge. Beru zpět. Teď myslím, že myslel JavaFX.)

Nicméně jsem se chtěl otřít o WPF, kterou se teď snažím nějak sestudovat (samozřejmě to jde pomalu, ale snažím se). Takže co je to WPF? Windows Presentation Foundation. (Pokud jde o mě, klidně bych celou tu věc pojmenoval Avalon i oficiálně, ne jen krycím jménem, ale jak známo, pojmenovávání věcí v Microsoftu je sofistikovaný proces, který vyústí v použití slova Microsoft nebo Windows v názvu, ať to zní jakkoliv pitomě -- tedy kromě sady programů Expression, které se, nějakým záhadným způsobem, tomuto jevu vyhnuly.) Pokud jste tenhle pojem ještě neslyšeli, určitě si přečtěte článek Windows Vista: more than just a pretty face, který poskytuje velmi slušný úvod do problematiky.

Takže ještě jednou: co je to WPF? Podívejte, všichni víme, že GDI(+), je zastaralá záležitost, že ji Microsoft držel při životě především proto, že si nechtěl utnout kus trhu s kancelářskými počítači, ve kterých ještě donedávna byly opravdu hloupé integrované grafické čipy, které neuměly nic, než převést kus operační paměti na analogové úrovně na D-SUB konektoru. Ovšem, doba se změnila, a i ten nejhorší integrovaný grafický čip dneska disponuje nějakou tou 2D/3D akcelerací, kterou je velká škoda nevyužít.

Takže se Microsoft rozhodl, že ve Windows Vista, bude 3D akcelerace tak nějak vyžadována, a že na ní bude postaveno celé zobrazování systému. A jelikož perspektivním vývojovým prostředím je .NET, vznikl .NET Framework 3.0 (který by ve skutečnosti spíše měl mít číslo 2.5, ale přeci nelze nový nablýskaný operační systém distribuovat s nějakou polovičatou verzí frameworku), který obsahuje, mimo jiné, WPF.

WPF je především prostředek, jak co nejvíce oddělit uživatelské rozhraní aplikace od výkonného kódu, a to tak, že uživatelské rozhraní bude definováno pomocí XML, respektive jeho "dialektu" XAML, který umožňuje popsat UI do takové hloubky, že pro řadu jednoduchých aplikací opravdu není potřeba psát skoro žádný kód (vážně -- poměrně sofistikovaný textový editor vygenerujete pomocí prvku System.Windows.Controls.RichTextBox a nějaké té bižuterie, s použitím asi 50 řádků kódu, které se starají o uložení a tisk dokumentu).

Kromě onoho zřejmého požadavku na oddělení kódu a uživatelského rozhraní z důvodu znovupoužitelnosti obého, je tu ještě bonusová možnost nechat nějakého grafika pracovat na rozhraní v poměrně sofistikovaném programu Expression Blend bez toho, aby něco věděl o programování (samozřejmě musí něco vědět o aplikaci a její struktuře, ale nemusí být seznámen s její vnitřní mechanikou). Také lze takový popis uživatelského rozhraní v XAML snadno vyměnit za jiný (třeba podle velikosti displeje, zvoleného režimu funkce programu, nebo cílové platformy).

WPF tedy umožňuje rozdělit vývoj logiky programu a jeho prezentační vrsty jak je to jen možné.

Současně s tím ovšem nabízí velmi vypečený způsob jak se zbavit všech těch problémů, které vznikají se stále rostoucím rozlišením displejů (písmenka jsou příliš malá!), nebo potřeby předělávat uživatelské rozhraní pokaždé, když program lokalizujete do nového jazyka, který místo textu o šesti znacích potřebuje znaků dvacet, protože všechny souřadnice jsou relativní a při změně velikosti ovládacího prvku, nebo okna, se umí dobře přizpůsobit novým podmínkám.

Dále je tu hierarchičnost prvků uživatelského rozhraní. Ve WinForms (tedy rozhraní, které používá GDI ve Windows do verze XP bez WPF), jste museli podstoupit bolestivý proces vlastního vykreslování, když jste chtěli do tlačítka dostat obrázek nebo dva řádky textu. S WPF napíšete něco ve smyslu <tlačíko pozadí="obrázek"><popiska text="hlavní"/><popiska text="vedlejší"/></tlačíko> a je to! A samozřejmě můžete definovat co se stane, když nad tlačítkem bude myš, včetně různých animací.

Čili variabilita je o několik řádů dál, než s použitím WinForms a GDI (a to vás nechci zdržovat básněním o tom, že takové tlačítko můžete namapovat na libovolný 3D povrch, takže pak můžete vytvářet skoro stejně sexy uživatelská rozhraní jaká používají Hollywoodské trháky).

Nějaké nevýhody? Ó jistě: použití WPF znamená, že se vaše aplikace na starších počítačích (řekněme starší než tři roky) zpomalí zhruba dvakrát (především na Windows XP je to hodně znát). A dále: dokud nevyjde nové Visual Studio (kódové označení Orcas, v současné době ve stádiu Beta 1), neexistuje nějaký spolehlivý nástroj, ve kterém by se dalo s WPF pracovat. Existují sice nějaká rozšíření Visual Studia 2005, ale věřte mi, pořád bude řešit nějaká neopodstatněná varování, IntelliSense funguje jen částečně a tak dále. Expression Blend už by měl být ve stavu RTM (Release To Market), ale jde o placený nástroj, a věřte, že XAML není myšleno jako jazyk, který budete psát ručně (i když leckdy nic jiného nezbývá).

Sečteno podtrženo: WPF je skvělá věc, která ovšem pro produkční aplikaci bude zajímavá někdy v půlce příštího roku, až budou všechny nástroje připraveny a penetrace Windows Vista dosáhne nějaké smysluplné úrovně.

Kde jsem to začal? Aha, Silverlight (podmnožina WPF) versus Flash. Upřímně: když jsem se tak díval na vývoj jmenných prostorů v .NET frameworku, domnívám se, že v Microsoftu opravdu existuje nějaký grand plan, ve kterém se dříve nebo později objevuje lehkotonážní managed framework pro prohlížeče -- to znamená, že bude notně ořezaný, třeba jako Compact .NET Framework (PDA a smartphones) nebo XNA Framework (XBox 360), ale nebudete muset stahovat 60MB záplat, které vám umožní jej provozovat, který umožní vyvíjet pro prohlížeče v C#, nebo jiném .NET kompatibilním jazyku.

Jak pak bude vypadat sronání Flash/Apollo a Silverlight/.NET? Který z těchto balíků zvítězí? Myslím si, že ten, který bude nabízet více zajímavých aplikací. Pokud Google začně vyvíjet v Appolo (což by se náramě hodilo třeba pro GMail, který by mohl stažené e-maily skladovat lokálně a odesílat odpovědi až se obnoví připojení k Internetu) a bude Flash aplikace tlačit svým zákazníkům, bude pozice Microsoftu jistě mnohem horší. Pokud se něco zlomí v Microsoftu a začne vyvíjet věci dost zajímavé na to, aby uživatelé počkali těch několik sekund než se stáhne pár mega Silverlight (nebo jej budou distribuovat jako doporučenou aktualizaci Windows), není výsledek vůbec jistý.

V každém případě bude pár následujích měsíců zajímavých. Uvidíme, jestli strategie vnucování se na obsazený trh skrze Windows Microsoftu tentokrát vyjde nebo ne.

Pokud ne, má pravdu Paul Graham, a Microsoft už je opravdu mimo mísu, ať má finanční výsledky jekékoliv.

PS: A ještě bych si dovolil doporučit vaší pozornosti starší podcast s Robertem Scoblem, který přináší mnoho zajímavých poznámek k tomu, jak funguje Microsoft uvnitř.

PPS: Ta věc s grafickými kartami mi připoměla, proč je dobré mít managed framework běžící na virtuálním stroji. Představte si, že Microsoft portuje CLR (Common Language Runtime, tedy virtuální stroj, na kterém běží .NET aplikace) na grafické procesory, takže aplikace mohou běžet paralelně nejen na hlavním procesoru (procesorech) vašeho počítače, ale i, na jinak zahálejícím, GPU...