sobota, 31 marca 2007

Platforma CURL

Jak chciałem sie dowiedzieć jaka technologia oferuje już to co ma Adobe Apollo jeżeli chodzi o pracę w trybie offline i jak zapisywanie danych z formularzy lokalnie (coś jak Shared Object). Przypomniało się mi jak 2002 roku zainstalowałem sobie CURL. To co mnie wtedy zafascynowało to, że obsługiwało to grafikę trójwymiarową dla internetu. Teraz mamy 2007 rok. Pomyślałem, że pewnie ta technologia dalej się rozwinęła się na lepsze, aczkolwiek jest znana tylko w wąskim gronie pasjonatów.

CURL chyba był pierwsza technologią internetową która postawiła na odejście od ograniczeń HTML dając programistom i projektantom dobre narzędzie do obsługi "elektronicznych formularzy". Kolejną zaletą była praca w trybie offline i późniejsza synchronizacja danych z tymi co się zmieniło. Koncepcja była banalna - zrobiono obiektowy język programowania interpretowany, którego celem było zarządzanie zawartością, obsługiwanie interaktywności, oraz dostarczenie biblioteki do obsługi grafiki 2D i 3D. Język ten jest dość dziwny w składni (podobny do LISP) co spowodowało że nikt poważnie go nie traktował. Platforma ta głownie jest znana w Japonii. Zresztą Japończycy potrafią u siebie rozwijać takie technologie, które gdzie nikt inny na świecie tego nie rozwija może z wyjątkiem języka Ruby. Wniosek dla mnie jest taki, że może CURL jest lepszą technologią RIA do zastosowań biznesowych niż Flex/Apollo, tylko ma tą słabość że prawie poza Japonią nikt go nie używa.
Aby używać platformy CURL trzeba zainstalować silnik wykonawczy CURL RTE który jest pluginem (kontrolką Active X). Można też ściągnąć środowisko programistyczne CURL IDE. Po zainstalowaniu można obejrzeć dema i gry. Aby programować i publikować aplikacje sieciowe w oparciu o platformę CURL trzeba otrzymać darmową licencję.

czwartek, 29 marca 2007

Flex 2 dla programistów JAVA

Ostatnio zainteresował mnie Flash Remoting. Więc poznaję możliwości jakie ma do zaoferowania Flex Data Services. Jak zauważyłem jest to dość poważne narzędzie dla programistów aplikacji serwerowych w Javie. Wzrost zainteresowania platformą aplikacji serwerowych Javy zależy od dobrej oferty hostingowej pozwalając programistom Javy przedstawiać rozwiązania po stronie serwera swoim klientom. Obserwuję też, że doświadczeni programiści PHP przechodzą na programowanie aplikacji serwerowych w Javie. Coś w tym jest, że programiści Javy mają większy prestiż niż ci od PHP.

Programiści aplikacji serwerowych Java EE bardzo ostrożnie patrzą na możliwości jakie daje do zaoferowania im możliwości programowania graficznego interfejsu użytkownika w Flex 2. Adobe stara się o integrację swoich produktów z serwerami aplikacji Java EE. Do swoich produktów dołącza swój serwer aplikacji JRun, tak więc programiści mogą tworzyć aplikacje serwerowe w oparciu o ten serwer. Flex Data Services jest konternerem dla tych aplikacji. Christophe Coenraets przygotował paczkę Flex TestDrive Server umożliwiajac programistom wykorzystanie Tomcat 5.5 , FDS 2.0.1, JOTM (JTA implementation), ActiveMQ (JMS implementation), Spring 2, Hibernate 3.2, HSQLDB 1.8. wraz z przykładami Ten programista też napisał artykuł o używaniu Springa 2 z Flex 2

Programiści z FarataSystems napisali kiedyś artykuł jak może wyglądać współpraca Flex 2 z aplikacjami serwerowymi na przykładzie wykorzystania POJO. Obecnie wydali książkę Rich Internet Application with Adobe Flex & JAVA Ta książka powinna być w ręku każdego programisty aplikacji serwerowych, który chce tworzyć aplikacje RIA. Ostatnio coraz większą uwagę na integrację technologii Flex z aplikacjami serwerowymi Java EE zwraca Bruce Eckel w swoim artykule. O wykorzystaniu JBoss można przeczytać po włosku instalacja, tworzenie EJB3, o integracji z EJB3. Można też stworzyc chata z wykorzystaniem JMS, albo z wykorzystaniem Flash Media Server. Tez można zapoznać się jak zrobić krok po kroku aplikacje do zarządzania kontaktami wykorzystującą FDS, Hibernate i MySQL.

Zaskoczyło mnie to że dzięki serializacji AMF3 można dokonywać przesyłania bardzo dużych danych w szybki sposób. Jak zapozna się dobrze z możliwościami Flex Data Services w wersji Express, to można potem wykorzystać możliwości jakie dają inne rozwiązania. Serializatorów AMF3 (Flash Remoting) współpracujących z aplikacjami serwerowymi Java EE jest kilka. Najdojrzalszy jest WebORB 2.0 for Java. Opensourcowym rozwiązaniem jest Granite Data Services. Red5 jest raczej jako zamiennikiem Flash Media Server 2, ale też można go spróbować wykorzystać ponieważ obsługuje AMF3. Warto przejrzeć szkolenie video z obsługi tej aplikacji. Dla tych których interesuje dobre wsparcie technologiczne proponowałbym zapoznać się z Wowza Media Server Dla kogoś kto lubi eksperymentować z Flash Remoting na koniec może wybrać sobie zabawkę dla odważnych Seasar (po japońsku). Dla lubiących ekstremalne wrażenia proponuję przestudiować kod deserializatora AMF3.

piątek, 23 marca 2007

Cairngorm 2

Cairngorm 2 to framework dla pewnej architektury danych w aplikacjach RIA który został opracowany dla technologii Flex 2.

5 powodów dla których warto zapoznać sie z tym frameworkiem:

  • Warto budować aplikacje RIA we Flex 2 (nie ma sensu używać tego frameworka do prostych aplikacji które korzystają z kilku linijek kodu AS3 w MXML)
  • Widziało się aplikacje RIA zbudowane w oparciu o ten framework. Większość tych aplikacji miała na celu pokazać jak rozwinąć dobre praktyki w tworzeniu aplikacji RIA. Wymagają one dogłębnego przestudiowania, a nie bezmyślnego przerabiania kodu do swoich potrzeb.
  • Przykładowe aplikacje RIA są czasami zbyt proste. Czasami warto pokazać złożone problemy na prostych przykładach w oparciu o przypadki użycia. Właściwie ten framework powstał żeby ułatwić pisanie dużych aplikacji, które mają dobry projekt programistyczny.
  • Rośnie liczba zainteresowanych stosowaniem tego frameworka. Duże aplikacje wymagają zatrudnienia wielu programistów , a oni muszą używać jakiegoś wspólnego frameworka aby móc coś wspólnie zrobić.
  • Znaleźć błąd - oczywiście, że nie ma doskonałych aplikacji i bibliotek oraz dlatego programiści mogą używać za darmo tego frameworka przyczyniając się do jego rozwoju.
Poznawanie frameworka to pewnego rodzaju wyzwanie. żeby zrozumieć jego działanie i potem stosować to. Nie należy sie spieszyć z tym zapoznaniem, bo uniknie się w przyszłości problemów z stosowaniem tego frameworka. Tworzenie aplikacji w tym frameworku można opisać tak:

"Najpierw rejestrujemy jedno zdarzenie w kontrolerze, następnie piszemy klasę polecenia, która ma pobrać dane i wtedy aktualizujemy lokalizację modelu (ang. model locator) wówczas gdy otrzymamy wyniki. Potem tworzymy klasę biznesowego delegata aby wywołał usługę sieciową. Usługa sieciowa jest zarejestrowana w lokalizacji usług. To cała filozofia frameworka"

Na początek sugeruję zapoznanie z szczegółową filozofią w 6 odcinkowym artykule. Dotyczy co prawda Cairngorma 0.99 ale założenia nie zmieniły się. Następnie można przeczytać porównanie z innym frameworkirm MVCS Joe Berkowitza (niektórym pewne rzeczy stają sie oczywiste jak z czymś porównamy). Warto czasem zrobić sobie przerwę w nauce Cairngorma 2. Wracając do poznawania proponuje zapoznać sie z szablonem przedstawiającym krok po kroku tworzenie prostej aplikacji. (kod). Dla przypomnienia prponuję przejrzeć artykuł (w czterach częsciach) Alexa Uhlmanna "Cairngorm Sample - How Bussiness Logic Can Managed Views" cz.1, cz.2, (kody) cz.3, cz.4 (kod) Są to świetne artykuły pokazujące zastosowanie "zwinnych metodyk" (ang. Agille). Od tej pory można wziąść się za analizowanie kodów źródłowych kilku aplikacji:

Darena Houlla "Multi-view contact management example" - kod
CairngormStore by Andy Rayne (2.0) kod , Renaun Erickson (2.1) kod, Chen Beker (2.1) kod - trzeba zmienić rozszerzenia na zip
Jesse Warden "Web Services and Cairngorm 2" - wykorzystuje Amazon API w działaniu (kod)
Benoit Hediard "Phones Cairngorm 2" - (kod)
Derek Wischusen "Issue Tracker" - aplikacja wykorzystująca Ruby on Rails a także WebOrb opisana w 4 odcinkowym artykule cz.1, cz.2, cz.3, cz.4 (kod jest w Flex 2 RoR SDK).
W Adobe Labs jest aplikacja NoteTag jako przykładowy projekt wykorzystania kodu do obsługi Blogera i deli.cio.us.

Ostatnio na konferencji WebDU Robin Hillard z RocketBoots przedstawił ciekawe spostrzeżenia dlaczego warto używać Cairngorm 2 w swojej prezentacji Easy As MVC

czwartek, 22 marca 2007

LiveCycles Data Services 2.5 beta

Na Adobe Labs mamy do ściągnięcia LiveCycles Data Services 2.5 beta. Adobe rozwija się w kierunku firmy tworzącej oprogramowanie dla programistów. Ostatnio Adobe wypuściło następcę Flex Data Services do beta testów.

Czym jest ten produkt serwerowy? To jest aplikacja J2EE

  • pozwala na synchronizację danych
  • paginację danych (dzielenie danych na mniejsze porcje)
  • może obsługiwać sytuacje w których doszło do rozłączenia z klientem
  • obsługa technologii typu "push" - automatycznie przesyłanie danych do klienta
  • pozwala na subskrypcję i publikowanie wiadomości z takich systemów jak Java Message Services
  • umożliwia współdzielenie danych pomiędzy wieloma użytkownikami.
  • możliwe jest przeprowadzanie testów wydajnościowych i funkcjonalnych
Niewiele jest informacji w internecie o tym jak korzystać z FDS. Najpierw trzeba ściągnąć Flex Data Services 2 Express i przejrzeć zawartą w nim dokumentację i oraz przestudiować przykłady

Potem warto przeczytać artykuły: Introduction to the Flex Message Service Setha Hodgsona i Seana Neville. Jest to artykuł wprowadzający czytelnika w tematykę używania wiadomości z systemów JMS. Natomiast Jeff Vroom napisał artykuł o wykorzystaniu zarządzania danymi w FDS: Architecting RIAs with Flex Data Management Services. Sporo informacji można znaleźć na blogu Victora Rubba , a takze sporo ciekawych przykładów na blogu Christophe Coenraets
Polecam zapoznanie sie z 30 Minutes Flex Test-Drive for Java Developers
Dla korzystających z FlashDevelop polecam zapoznanie sie z wtyczką do tego programu.

Powstały już nawet dwa produkty, które zamierzają konkurować z FDS. Są to opensourcowy Granite Data Services i jak komercyjny WebORB Presentation Server firmy Midnight Coders (ma korzystna cenę).

Natomiast Adobe wypuszczając LiveCycles Data Services 2.5 beta wzbogaciło go dodatkowe funkcjonalności
  • generowanie plików PDF
  • konfiguracja w trakcie działania usługi
  • Ajax Data Services - pozwala na wykorzystanie Ajax w współpracy z danymi
  • Flex-Ajax Bridge (FABridge) - mała biblioteka umożliwiająca skryptom Ajax zmieniać zawartość w aplikacjach Flex
  • wsparcie do synchronizacji z aplikacjami Apollo
  • Tunneling RTMP - pozwalający na obsługę aplikacji w przypadku gdy nie ma możliwości bezpośredniego połączenia z powodu stosowania firewalli
  • SQL Adapter pozwalający na uproszczenie programowanie danych z baz danych
  • zawiera nowa bibliotekę znaczników JSP do obsługi kodu ActionScript i MXML

poniedziałek, 19 marca 2007

Adobe Apollo już jest

Na stronie Adobe Labs jest już do ściągnięcia silnik, dokumentacja, SDK, plugin do Flex Buildera 2.0.1 ,a także ebook


Ciekawie prezentują się już pierwsze aplikacje (zanim klikniecie w linki trzeba zainstalować silnik Adobe Apollo)

Fresh - czytnik RSS
Maptacular - przykład wykorzystania Mapy Google
Scout - przeglądarka WWW. pokazuje możliwości silnika WebKit
Lookup - wykorzystanie usług sieciowych
PixelPerfect - wirtualna linijka na pulpicie
ScreenPlay - narzędzie graficzne

FineTuneDesktop - aplikacja która jest przykładem integracji usług serwisu WWW prosto na pulpit.
Bounce - prosta gierka

sobota, 17 marca 2007

Framework Artemis

Twórcami frameworka Artemis są Sean Christmann, Adam Flater i Tony Hillerson z EfectiveUI.




Na Apollo Camp zaprezentowano możliwości tego frameworka pokazując jego współpracę z Wii za pośrednictwem Bluetooth sterując nim grą w Apollo.

Celem tej biblioteki jest zapewnienie komunikacji pomiędzy silnikiem wykonawczym Apollo a innymi aplikacjami wykorzystującymi JRE. Przypuszczam że ta aplikacja masowo wykorzystuje Remoting w celu efektywnej komunikacji pomiędzy bibliotekami JAVA ai silnikiem wykonawczym Apollo. To oznacza że programiści JAVA będę musieli dołączać do swych aplikacji kod umożliwiający wymianę danych z silnikiem Apollo. Programiści Flex/Apollo będą dołączać komponent Artemisa w celu zapewnienia obsługi tych danych.
Szerokie możliwości oferuje komunikacja z bazami danych za pośrednictwem Generic JDBC Connection Library. Idea jest bardzo interesująca i umożliwia ściślejszą współpracę wielu technologii z silnikiem wykonawczym Apollo.

Jednakże trzeba być ostrożnym, bo Adobe Apollo zostało zaprojektowane do tego, żeby tworzyć bogaty interfejs użytkownika w aplikacjach internetowych. Doświadczenia użytkowników z aplikacjami AJAX i RIA można wykorzystać w tworzeniu aplikacji komputerowych. Wcześniej możliwe było wykorzystywanie klasy ActionScript ExternalInterface, aby kontrolka ActiveX Flash Player osadzonej w aplikacji mogła komunikować się z tą aplikacja. Takie rozwiązanie nie było popularne, ani bezpieczne.

piątek, 16 marca 2007

Adobe Flex 2 po stronie serwera

Do tej pory aby generować aplikacje Flash po stronie serwera trzeba było korzystać z różnego rodzaju aplikacji wspomagających takich jak Flex Data Services, czy ColdFusion bądź z serwerów Java (Tomcat, JBoss), które pozawalały na integrację z Flex 2 SDK i jego kompilatorem zawartym w nim. Adobe wypuściło moduł dla serwera Apache, narzędzie pozwalające generować aplikacje na bazie języka MXML bezpośrednio z poziomu serwera Apache (na Windowsie i na Linuksie) czy IIS. W ten sposób rozpoczyna sie szansa na szersze upowszechnienie się MXML i ActionScriptu 3 jako języka do budowania aplikacji internetowych po stronie serwera. Wymaga wsparcia ze strony innej technologii np: PHP, aby wygenerować kod MXML który będzie skompilowany do postaci bajtkodu SWF. Takie dynamiczne generowanie aplikacji RIA jest dużym krokiem naprzód w celu upowszechniania RIA.

Głównym konkurentem w tym jest Haxe. Zaletą Haxe jest to, że pozwala na generowanie kodu HTML, aplikacji komputerowych, kodu bibliotek AJAX, i jak bajtkodu dla SWF. Haxe też zawiera moduł dla Apache, co sprawia, że tworzenie aplikacji RIA po stronie serwera staje sie realne. OpenLaszlo mogłoby być interesującym rozwiązaniem gdyby istniał masowy hosting dla serwletów Javy. Interesujący może być dalszy rozwój technologii po stronie serwera gdyby ten moduł był za darmo i jak wielu usługodawców będzie instalować ten moduł na swoich serwerach.

środa, 14 marca 2007

Layout GUI typu "książka" vs "gazeta"

Koncepcja nowego layoutu GUI dla aplikacji internetowych (RIA) jest bardzo interesująca właśnie w kontekście rywalizacji Adobe z Microsoftem. Otóż powstało już kilka aplikacji których cechą jest to że prezentują trochę inne podejście do interfejsu użytkownika. Mianowicie treść jest przedstawiona w układzie gazetowym (szpaltowym). Twórcą takiego typu aplikacji internetowych jest firma Indentity Mine. Ciekawe informacje o tworzeniu tego typu aplikacji można przeczytać w blogu Scotta Guthrie

Główna cecha to zastosowanie "swobodnego przepływu layoutu dokumentu" pozwalająca na dynamiczne stronicowanie wobec wyboru rozmiaru skalowania zawartości. Zastosowanie do typografii technologii ClearType i OpenType sprawia, że czytelność zawartości jest o wiele lepsza bo przyjemniej mi się czyta. Pewnym "nie zauważonym" (bo ograniczonym tylko do IE i .NET3) jest zastosowanie uproszczonego XAML (ang. loose XAML) jako języka to prezentacji zawartości tekstowej w sposób szpaltowy. (przykład to artykuł o czekoladzie, woodgrove). Dla zainteresowanych stosowaniem uproszczonego XAML odsyłam do bloga Chaarlesa Petzolda i jego książki Applications = Code + Markup .

Adobe po cichu "rozwija" Adobe Digital Editions jako inny model tworzenia tego typu aplikacji. Wymaga odpowiedniego przygotowania zawartości i wysłania tego na serwer. Można definiować w jakim układzie maja być przedstawiona zawartość dzięki XSLT Format. Zaletą jest to, że użytkownik raz załaduje zawartość może wielokrotnie ją przeglądać offline. Tak naprawdę Adobe będzie zarabiało na licencjach na serwerze Adobe Content Server (ACS) DRM bazującym na Adobe LiveCycle do zarządzania zawartością dla takiej aplikacji

Wracając do layoutu interfejsu graficznego użytkownika mamy też nową propozycję: układ "książkowy". Idea (ang. book flip) takiego rozwiązanie nie jest nowa. Od dłuższego czasu takie rzeczy robiono we Flashu. Takim przykładem jest aplikacja WPF dla British Library do przeglądania manuskryptów. Dzięki WPF/E można już też robić taki layout. Oto przykład z Channel9. Programiści ActionScript 3 uważają, że też potrafią coś takiego zrobić, bo Ely opublikował nowy komponent FlexBook i jego kod żródłowy.
Uważam, że taki układ przyjmie się jak ustali się jego użyteczność. Jest wręcz wygodny dla małych i średnich serwisów internetowych. Ważnym czynnikiem mogłoby być wykreowanie mody na stosowanie takiego interfejsu graficznego tak jak było to w przypadku Lightboxa.

niedziela, 11 marca 2007

Mind Mapping i WebOS

Od pewnego czasu obserwuję pojawienie się nowych aplikacji internetowych, które chcą zmieniać wizerunek internetu jako narzędzi graficznych.
Mamy ostatnio 2 serwisy internetowe, które moim zdaniem staną się bardzo popularne. MindMeister i Mindomo. Są to serwisy internetowe, które pozwalają na stosowanie "map myśli". Mapy myśli to ciekawa technika notowania myśli, mająca coraz większą popularność. Mnie natomiast zaintrygowało to, że do dużych aplikacji internetowych lepiej używać technologii Flash niż opierać na technologiach DHTML (AJAX). Myślę, że Web 2.0 wyewoluuje w kierunku Web.2.0 +. Wyznacznikiem wtedy może być możliwość zastosowania operacji graficznych (i audiowizualnych) w panelach administracyjnych. Myślę także, że nowy interfejs użytkownika a szczególnie zastosowanie "ribbons" z Office 2007 będzie przykładem budowania nowych narzędzi nawigacyjnych na serwisach internetowych.
WebOS to koncepcja żeby osadzić kilka najczęściej używanych narzędzi w systemie operacyjnym przez użytkowników w interfejsie internetowym.
Mnie zainteresowały DesktopTwo i G.ho.st oraz Goowy a także Famster. One opierają sie na interfejsie we Flashu. Czyżby kończy sie era AJAX ?

Kolejne serwisy Web.2.0 wykorzystujace Flasha/Flexa
Netvibes.com, Wallop, Yourminis, Pageflakes

poniedziałek, 5 marca 2007

Polskie środowisko użytkowników Adobe Flex 2 i ActionScript 3

Od pewnego czasu zauważyłem, że blog Rafała Szemraja nick: sema zaczyna prezentować wyższy poziom wiedzy o programowaniu w Adobe Flex 2 i ActionScripcie 3 niż mój. Inną ciekawą osobą jest Artur Bilski nick: arthwood, który całkiem niedawno zaprezentował możliwości Flex 2 z Ruby on Rails. Innym Polakiem zainteresowanym możliwościami jakie daje programowanie w Javie jest Radosław Holewa, którego interesuje integracja Flexa z Mavenem. Podobnie jest z Bartkiem Soinem, którego interesuje integrowanie z EJB3. Bardzo interesujący artykuł o integracji Flasha z technologią PHP napisał dla magazynu PHP Solution Rafał Malinowski twórca niebanalnej biblioteki IoC dla ActionScript.

Ciekawą alternatywę wobec Adobe Flex 2 do wykorzystania RIA jest OpenLaszlo. Piszą o tym Łukasz Zmywaczyk twórca portalu o http://www.laszlo4u.pl/ i jak Rafał Tomaszewski twórca http://openlaszlo.org.pl/

Na stronie http://www.flexcoders.net/ w dniu 17 marca 2007 roku z Polski było zarejesteowanych 15 osób:
Są to między innymi:
Peter Blazejewicz - nick: peterb
Jakub Kożniewski - nick: jkozniewski
Sebastian Zarzycki - nick: rattkin
Rafał Skalski
Cyprian Kowalczyk
Łukasz Zwoliński
Roman Swoszewski
Artur Witek
Radosław Holewa
Arkadiusz Rajczyk
Bartłomiej Nowak
Paweł Sułkowski - nick: pawluś

Na forum FlashZone i Flab.pl udzielają się weterani Flasha (którzy i tak poznają ActionScript 3).
Jan Kłosiński nick: JanekCanI,
Marcin Strzałkowski
Bartłomiej Rozbicki - nick: ArsThanea,
Łukasz Dyszy - współwłaściciel MindChili
Radek Krzepkowski - nick: krzepa - programista AS w K2
Jakub Kożniewski - nick: jkozniewski
Paweł Piotrzkowski - nick: magnum
Maciej Wciślik - nick: inou
Maricin Ryżycki - nick: ryży - prowadzi firmę KM NET
Maciej Maliborski
- nick: maliboo
Konrad Mąkosa - nick: malak
Szymon Pawlica
Mateusz Protasewicz
- nick: proti
Sławomir Ossowski
- nick: wizzard
Mariusz Mielnik - nick: Lutek
Jakub Kuzimski - nick: qzim

czwartek, 1 marca 2007

Adobe Apollo już wkrótce

Wspomniałem już czym jest Adobe Apollo. Mike Chambers poinformował że już niedługo wypuści wersję silnika w wersji Alpha na Adobe Labs. Ale w internecie już wiele projektów można przekształcać do wersji pracującej z Adobe Apollo. Są to narzędzie do edycji video (Photobucket) sklep i serwis aukcyjny (eBay i EffectiveUI ) portal społecznościowy (yourminis), edytor tekstów (Virtual Ubiquity) organizer (Scrybe) aplikacje medyczne (Acesis) usługi GPS (Adobe Tour Tracker).
Myślę, że szykuje sie nam coś nowego tak jak w przypadku AJAXA, będziemy masowo używać zwrotu RIA na aplikacje korzystające z internetu i nie będące częścią przeglądarki, ale wykorzystujące to, że będą miały wbudowaną przeglądarkę internetową.

Pojawiła sie już pierwsza publikacja o Adobe Apollo - Apollo for Adobe Flex Developers Pocket Guide do ściągnięcia jest 4 rozdział o File System API tej pozycji.

Na stronie Adobe Labs od 17 marca można ją już ściągnąć w postaci pliku PDF (formalnie ma być dostępna od 19 marca).

Zainteresowanym tym czym jest Adobe Apollo mogą obejrzeć film o API Apollo