środa, 30 maja 2012

HTML5 - IndexedDB, File API, Media Capture API i dalsza przyszłość

Za co cenisz swój dotychczasowy ulubiony język, technologię czy bazę danych? Że możesz za ich pomocą stosunkowo prosto przechowywać dane, przeszukiwać, operować na nich. Że możesz łatwo operować na plikach czy multimediach, nie tylko je odtwarzać ale i tworzyć przez nagrywanie. Przykłady można mnożyć. Za co nie lubiłeś HTML i Java Script na stronach webowych? Że nie umożliwiły dokonania w prosty sposób bardziej wyrafinowanych operacji, że w różnych przypadkach potrzebny były wtyczki albo strona serwerowa. A jeśli porzucimy stereotypy, przyjmiemy że wszystko jest pewną umową i od tej pory HTML i JavaScript potrafią wszystko to, co inne języki? Przecież każda funkcja w danym środowisku programistycznym i tak jest przełożeniem na funkcję z API konkretnego systemu operacyjnego. Skoro udawało się to z innymi językami, czemu miałoby się to nie udać z HTML i JS?  Na razie mówi się zasadniczo o przeglądarkach, ale są widoki, że przyjdzie dzień, że nie będzie niczego obecnie powszechnie używanego i wszystkie aplikacje na smartfonach, tabletach, komputerach będzie można pisać w technologiach wywodzących się z dzisiejszych stron web. 

Skąd taka przedmowa? W taki nastrój może wprowadzić prezentacja The Future of HTML5, z której pozwoliłem zrobić sobie trochę notatek. Oczywiście nie jest to już dzisiaj żadne odkrycie. Już znacznie wcześniej zaczęły się pojawiać biblioteki JS opakowujące API systemowe na telefony, powstał jakiś czas temu PhoneGap, wreszcie Microsoft na Windows 8 udowodnił, że tworzenie aplikacji natywnych Metro w HTML5 i JS może być bardzo proste i wysokopoziomowe, na takim samym poziomie abstrakcji jak w przypadku aplikacji XAML. Aczkolwiek to jest jeszcze konkretna platforma, a dzisiejszy wstęp dotyczył tego tematu w aspekcie ogólnym, międzyplatformowym.

Zacznijmy od lokalnej bazy danych. Aplikacje natywne mogą przechowywać dane w tzw. lokalnych bazach. A co ze stronami web?  Owszem mamy w HTML5 WebStorage, ale ma ograniczoną pojemność (taki odpowiednik Isolated Storage znanego z Silverlight i .NET). Tradycyjne bazy jednak nie wszyscy lubią, język SQL ma swoją specyfikę. Otóż jest dobra wiadomość, w HTML5 do obsługi lokalnej bazy danych nie trzeba będzie w ogóle znać SQL, wystarczy znajomość Java Script.

image

Jak MS w swoim “labie” obsłużył testowo fallback dla IndexedDB:

image

Jednak docelowego programistę w HTML5 nie będzie interesował sposób implementacji dostępu do lokalnej bazy danych przez producenta przeglądarki. Wystarczy jedynie operować na wysokopoziomowym API w JavaScript:

image

image

Nawet jest odpowiednik kursora -:)

image

Co, jeśli chcielibyśmy odczytać informacje z wybranych plików wskazanych przez użytkownika wyłącznie po stronie klienta napisanego w JavaScript?  Wyrzekając się stereotypów i myśląc kategoriami czysto abstrakcyjnymi nie znajdujemy tutaj ograniczeń. Niech od tej pory w JavaScript, daje się tak samo operować na plikach jak w Silverlight czy .NET.

image

image

image

image

image

image

image

image

Jak wyświetlić obrazek z wczytanego pliku? Specyfikacja proponuje coś takiego jak Blob, który może być źródłem obrazka i uzyskuje go się bezpośrednio z obiektu pliku. Hola? Czy ja już gdzieś tego pomysłu nie widziałem?  Tak, taki patent występuje też w API dla aplikacji Metro HTML5 w Windows 8.

image

image

Koala też przeszedł do HTML5 –Puszczam oczko

image

image

Gdy chcemy dzisiaj nagrać głos czy wideo z kamerki internetowej, nie kojarzymy z tym czystego HTML. Zaraz myślimy o wtyczkach. Czy słusznie? Skoro API systemowe dało się opakować w Silverlight czy Flash, to równie dobrze to samo API może opakować producent przeglądarki i udostępnić je po prostu jako zestaw metod w Java Script:

image

Nagrywanie głosu do pliku możliwe byłoby w następujący sposób:

image

image

image

Podobnie może być realizowane nagrywanie video:

image

image

Rok temu trwały nad tym prace i np. nie było jeszcze implementacji po stronie MS do preview obrazu –Uśmiech

image

Idźmy dalej. Skoro mamy audio i video, to czemu nie obsługiwać mowy?

image

Inne jeszcze, spośród bardzo wielu specyfikacji:

image

image

A skoro ukończone zostaną obecne specyfikacje, to co dalej z rozwojem HTML5? Oczywiście dalsza integracja składających się na niego technologii oraz implementacja dalszych specyfikacji, pokrywających coraz to bardziej wyrafinowane obszary (są dyskusje nad DRM, pełnoekranowym video, większym wsparciem dla urządzeń… czyli to, w czym dzisiaj wtyczki i obecnie używane technologie są jeszcze lepsze).

image

Przewiduje się, że z czasem HTML5 wyjdzie z przeglądarek i będzie w nim możliwe także tworzenie aplikacji poza przeglądarkami …(już dziś są takie rozwiązania np. aplikacje Metro w Windows 8, ale nie są przenośne). Ale zaraz skąd ja to znam? Czy takiej drogi nie przeszedł właśnie Flash i Silverlight? I ten kontekst pozwala spojrzeć na HTML5, jako na rodzący się w pewnych bólach (zwłaszcza na początku), ustandaryzowany przez różne porozumienia ponad podziałami “Silverlight następnej generacji” na wszystkie platformy i urządzenia (tak jak kiedyś były binarne protokoły sieciowe niekompatybilne ze sobą, a potem przyszły webserwisy oparte oparte na wspólnych standardach). BTW Java też miała być kiedyś wszędzie, jednak aplety nie są już dziś powszechne. Może to co nie udało się samemu Sunowi czy samemu Microsoftowi, uda się teraz wspólnym standardom, które nie są związane z konkretnym producentem ?

image

1 komentarz:

Wojciech Roszkowski pisze...

Bardzo fajnie napisane. Jestem pod wrażeniem i pozdrawiam.