Mazanie na ekranie

Dziś, gdy duży nacisk kładzie się na mobilność, urządzenia takie jak smartfony albo handheldy stają się coraz mniejsze i coraz bardziej skomplikowane. Należy oczekiwać, że w niedługim czasie różne odmiany naszych cyfrowych asystentów (PDA) będą oferowały funkcjonalność niewiele mniejszą od tej udostępnianej przez zwykłe komputery stacjonarne i laptopy.

Choć miniaturowe urządzenia z łatwością mieszczą się w kieszeni, to z drugiej strony duży rozmiar też ma swoje zalety. Kiedy korzystamy ze zwykłego peceta, to nie mamy problemów z wprowadzaniem doń danych. O wiele gorzej jest w wypadku “mikrusów” – te czasami nawet nie oferują pełnowymiarowej, normalnej klawiatury w układzie QWERTY.

Producenci mobilnych urządzeń elektronicznych już dosyć dawno wpadli na pomysł zaopatrzenia miniaturowych komputerków w interfejsy dotykowe. Pozwalają one wprowadzać dane i manipulować nimi za pomocą rysików, które spełniają funkcję elektronicznych piór. Oczywiście skutkuje to podniesieniem poprzeczki dla programistów tworzących aplikacje działające na handheldach albo palmtopach. Najważniejszym problemem staje się zrozumienie odręcznie napisanych znaków.

Przekleństwo różnorodności

Interfejs urządzenia wyposażonego w elektroniczne pióro przekształca linie kreślone przez użytkownika w ich cyfrową reprezentację. Transformacja taka jest dokonywana albo za pomocą odpowiedniego modułu sprzętowego, albo też za pośrednictwem specjalnego oprogramowania. Kiedy napis zostanie już przekonwertowany do postaci numerycznej, można go swobodnie przekształcać dalej. W efekcie powstaje zestaw konkretnych poleceń, które powinny zostać wykonane przez komputer bądź wprowadzane są takie dane jak notatki, poprawki do dokumentów itp.

Jedną z głównych przeszkód w popularyzacji takiej właśnie metody operowania informacjami jest brak jednolitego, powszechnie uznanego standardu, opisującego “cyfrowy atrament”. Obecnie mamy do czynienia z sytuacją, w której każdy program bądź urządzenie elektroniczne rozpoznające pismo odręczne wykorzystuje swój własny, wewnętrzny format przechowywania danych. Skutki takiego stanu rzeczy są oczywiste: swobodne operowanie informacjami okazuje się nieraz niemożliwe. Dziś jeszcze trudno wyobrazić sobie przesyłanie odręcznych notatek między handheldami różnych producentów. Bywa zresztą nawet gorzej – czasami nie sposób wymieniać informacji między aplikacjami pracującymi na tym samym urządzeniu.

Starania o ujednolicenie formatu “cyfrowego atramentu” podjęły różne organizacje. Jedną z nich jest konsorcjum W3C (World Wide Web Consortium), które zaprezentowało standard InkML – Ink Markup Language. Pozwala on na zapisywanie w jednolitej postaci odręcznych notatek, wprowadzonych np. na ekran palmtopa. Jeżeli propozycja W3C zyska uznanie, to swobodna wymiana danych między różnymi aplikacjami będzie już możliwa. Podkreślmy, że chodzi nie tylko o programy internetowe, choć oczywiście W3C takie właśnie aplikacje ma przede wszystkim na myśli.

Iksy, igreki, kolory i grubości

Standard proponowany przez W3C został przygotowany na bazie języka XML. Dzięki temu każda osoba zainteresowana wykorzystaniem InkML-a będzie mogła bez większych problemów zaadaptować go do swoich potrzeb.

Przyjrzyjmy się przykładowemu dokumentowi, utworzonemu z wykorzystaniem InkML-a. Prezentujemy go w ramce na sąsiedniej stronie. Opis odręcznych notatek znajdziemy pomiędzy specjalnymi znacznikami <ink> oraz </ink>. Kształt nakreślonej linii jest definiowany między znacznikami <trace>. W najprostszym wypadku mamy do czynienia z wektorową reprezentacją obiektu pokazywanego metodą “punkt po punkcie”. Samym obiektem może być litera, symbol, cyfra, fragment szkicu itp. Każdy wprowadzony na ekranie znak powinien zostać opisany osobno, a zatem np. wszystkie literki przedstawione są oddzielnie jako ciągi kartezjańskich współrzędnych XY.

Kształt wpisywanych znaków to oczywiście jeszcze nie wszystko. Twórcy standardu InkML pomyśleli także o wprowadzaniu dodatkowych informacji, pozwalających doprecyzować wygląd rysowanych “kresek”. Są nimi na przykład kolor i szerokość linii tworzącej obiekt oraz rodzaj powierzchni, na której piszemy. Wspomniane parametry definiuje się pomiędzy znacznikami <brush>. Informacje dotyczące całego dokumentu (takie jak choćby rodzaj “powierzchni”, na której piszemy, pióra i formatu wyświetlania napisów) znajdziemy między znacznikami <context>. Możliwe jest ponadto etykietowanie danych (znacznik

<traceRef>

) oraz łączenie wielu obiektów w grupy – o ile tylko wszystkie znaki zostały zapisane z wykorzystaniem podobnie zdefiniowanego pióra.

Taką reprezentację “cyfrowego atramentu” można jeszcze wzbogacić. InkML potrafi przechowywać dodatkowe informacje opisujące prędkość prowadzenia elektronicznego pióra, jego przyspieszenie albo orientację.

Podpis “z wolnej ręki”

Przykłady zastosowań standardu InkML zostały zaprezentowane na stronie internetowej W3C. Znajdziemy tam cyfrową fotografię z odręcznym komentarzem, aplikację pozwalającą użytkownikom przechowywać odręczne notatki albo dwukierunkową transmisję “atramentu”, dzięki której możliwe jest odręczne uzupełnianie formularzy na urządzeniach pozbawionych klawiatury.

W chwili obecnej standard jest jeszcze w fazie rozwoju i trudno znaleźć komercyjne urządzenia korzystające z InkML-a. Pamiętajmy jednak, że zarówno programiści, jak i twórcy urządzeń na pewno zrobią wszystko, aby w przyszłości łatwiej nam się pracowało ­z komputerami wyposażonymi w interfejsy dotykowe.

Niech zresztą przemówią wielcy informatycznego świata – inżynierowie firmy Hewlett-Packard. Kiedy pracowali oni nad utworzeniem zbioru tagów XML opisujących “cyfrowy atrament” (tzw. hwDataset), mieli do wyboru rozmaite formaty i specyfikacje zapisu odręcznych notatek. Ostatecznie zdecydowali się na użycie standardu InkML.

Przykładowy dokument InkML
Najważniejsze elementy dokumentu zapisanego w formacie InkML znajdziemy między znacznikami oraz. Właśnie tam podawane są kartezjańskie współrzędne kreślonej odręcznie linii oraz parametry pióra, takie jak jego kolor (np. blackPen) oraz grubość linii (np. normal).

<ink>
<defs>
<brush id=”blackPen”>
<traceFormat id=”normal”>
<context id=”context”
brushRef=”blackPen”
traceFormatRef=”normal”>
</defs>
<traceGroup contextRef=”context”>
<trace>
70 160 100 170 120 170 83 200 83 243 95 273
114 310 120 340 115 360 80 371 60 360
</trace>
<trace>

</ink>

Więcej:bezcatnews