wtorek, 17 lutego 2009

Mała flaszka z winem

Dzisiaj było bardzo mroźno. Michał wrócił do domu bardzo podniecony. Daria otworzyła drzwi.
-- Czemu tak bardzo cieszysz się?
-- Bo są same fajne rzeczy.
"Programiści to jacyś ciekawi ludzie, zawsze coś ciekawego znajdą" - Daria pomyślała - "Szkoda ze nie zawsze potrafię do końca zrozumieć dlaczego są tacy, ciągle czegoś muszą się uczyć"
-- Może zjesz najpierw mój obiadek ?
-- Dobrze kochana Dusiu.
Daria poszła do kuchni, a Michał przebrał się. Wkrótce zobaczył na stole obiad - lazanię. Michał usiadł spojrzał na Darię. Najbardziej spodobały się mu się jej nogi.
-- Smacznego Michałku...
-- No tak Dusiu, Adobe wypuściło wersję FlashLite 3.1 dla developerów. Tylko na razie u mnie zainstalowało się, ale nie wiem jak uruchomić to na e51. FlashLite 2.0 Ale mnie najbardziej cieszy to, że mam dostęp do Adobe Mobile Packager. To narzędzie pozwala mi na robienie paczek instalacyjnych dzięki któremu można uruchamiać pliki SWF FlashLite jak aplikacje. Oczywiście, że warto poznać sposób jak uruchomić pliki SWF pisząc program do uruchomienia.
-- Smakuje Ci moja lazania Michałku?
-- Oczywiście Dusiu
Daria usiadła na krześle i wyeksponowała swoje nogi. Michał uśmiechnął się na nią Popatrzyli się nawzajem znaczącym wzrokiem, jakby odgadnęli swoje intencje.
-- Oj Michałku.... masz kosmate myśli.
Zaśmiali się głośno.
-- Tak więc FlashLite może świetnie wykorzystać jako graficzny frontend aplikacji na komórkę. W Symbianie 9.2 masz możliwość osadzenia pliku w aplikację dzięki Flash Viewer Framework API i jest też przykład do wykorzystania. Na tym to nie kończy się, bo w Symbianie 9.3 masz widżety, w których możesz wykorzystać pliki SWF do uatrakcyjnienia swoich aplikacji internetowych na komórkę.
-- Jak ja dzisiaj wyglądam? -- spytała się z troską
"Widzę jak Michałek zaczyna mi z taką pasją opowiadać o technologiach to mam ochotę na skonsumowanie go" - pomyślała z satysfakcją - "Skuszę Michałka winem".
-- Cudownie, ładnie Ci w tych pończochach.
-- Poczekasz na mnie? -- prowokacyjnie spytała się
Michał skinął głową i zjadł posiłek. Daria poszła do salonu. Po pewnym czasie przyniosła wino i 2 kieliszki do wina.
-- Dokończę rozważania o FlashLite. Ograniczeniem tej technologii FlashLite jest brak możliwości wykorzystania programistyczne możliwości komórki. Więc powstało trochę rozwiązań których zadaniem była komunikacja z właściwą aplikacją. Takie rozwiązania to: SWF2GO, KuneriLite, Janus Symbian Enigine, Flyer, Project Capuchin, Jarpa Natomiast w Symbianie 9.4 a właściwie S60 edycji 5 Nokia dodała Platform Services umożliwiając dostęp do funkcjonalności komórki z poziomu ActionScriptu
-- Kochany Michałku napijesz się wina?
-- Bardzo mało, czyli możesz wpić całe wino, a zostawić mi tylko jedną kropelkę.
-- Nie bądź taki skromny, zależy mi na Ciebie!
Daria usiadła mu na kolanach, nalała wina do kieliszka i przyłożyła ten kieliszek wina do jego ust. Michał skosztował i zakręciło mu się w głowie.

niedziela, 15 lutego 2009

W towarzystwie Symbiana

Michał siedział sobie w pokoiku na krześle i patrzył w okno . Padał śnieg. Daria leżała sobie na łóżku. Zerknęła na Michała.
-- Michałku kochany kiedy zaczniesz pisać bloga?
-- Którego bloga?
-- O tym co piszesz na blogu o nas czyli o technologiach Adobe.
-- Technologie rozwijają się tak szybko jak trąba powietrzna która zmiata po drodze
Jak wtedy byłem w centrum wichury to pisałem jednak to teraz wyrzuciło mnie z tej trąby.
-- Co chcesz przez to powiedzieć?
-- Że mam wrażenie, że jestem niepotrzebny Adobe w Polsce, zrobiłem co do mnie należało, dostałem podziękowanie, pozostały tylko dobre wspomnienia.
-- Michałku nie załamuj się, bo mnie się to udzieli się.
Michał westchnął, odwrócił wzrok od jej i spojrzał na okno. Daria rozpłakała się.
-- Michałku, dlaczego tak robisz? Zawsze wierzę w Ciebie, a Ty mnie kolejny raz zawiodłeś. Zawsze myślałam że będziesz świetnym pisarzem, a pisać Tobie się nie chce.
Przecież czekam na Twój romans programistyczny. Kiedy go skończysz?
Spojrzał na nią. Jej łzy ciekły po policzkach. Udzieliło mu się to. Rozpłakał się. Poczuł wstyd i poczucie winy. Usiadł obok niej i przytulił się do niej. W milczeniu płakali razem.

Nagle zadzwoniła komórka. Daria powiedziała:
-- Michałku Twoja komórka dzwoni.
Michał wstał i poszedł po komórkę. Po pewnym czasie wrócił.
-- Dusiu, za godzinę przyjadą Krzysiek z Kasią. Krzysiek chce ze mną porozmawiać o komórkach, a Kasia chciałaby Cię poznać.
Lekki uśmiech pojawił się na twarzy Darii. Przetarła oczy mokre dłońmi.

Po godzinie czasu przygotowań. Daria siedziała w swojej wieczorowej sukni w kuchni. Czekając na gości. Nagle Michał wpadł do kuchni. Daria podeszła do niego.
-- Michał jakoś ten krawat krzywo założyłeś.
Daria poprawiła mu krawat. Michał mocno ją objął i namiętne pocałował w jej usta.
Nagle usłyszeli dzwonek od drzwi.
Daria poszła otworzyć drzwi. Przywitali się.
-- Hej Michale. Bez GPS w komórce nie trafiłbym do Ciebie.
-- Miło że korzystasz tej technologii, może będę mógł zrobić jakiś pożytek z tego GPSa dla Ciebie
-- Miło Cię widzieć Dusiu - rzekła Kasia
-- Mnie też - odpowiedziała Daria -- zapraszam do salonu.
Krzysiek wziął torbę z laptopem. Daria z Kasią zaczęły krzątać się po kuchni i przyniosły do salonu herbatę i przekąski
Krzysiek usiadł na krześle
-- Michale skoro komórki są tak inteligentne to dlaczego tak mało się pisze o programowaniu na komórki.
-- Bo komórki jak wiesz wymagają innego sposobu programowania niż to do czego się uczyli programiści.
-- Możesz to wyjaśnić?
-- Programuje się na komórki głownie w języku Java i w C++ pod Symbianem.
Oczywiście że większe możliwości mają programiści C++, ale programiści od Javy na komórki mają też sporo pole do popisu.
-- Zawsze chciałem nauczyć się programować na C++.
Michał uśmiechnął się.
-- Do nauki programowania C++ na komórki potrzebne są takie rzeczy: pogodzić się z tym że kod jest niezrozumiały na początku nauki, pisać kod tak jak nakazuje konwencja, czytać dużo kodów i materiałów z sieci. I przede wszystkim znaleźć kogoś kto ci pomoże rozpocząć wspinaczkę po programowaniu.
-- Wspinaczkę?
-- Tak, w porównaniu do tego żeby wyświetlić tekst "Witaj świecie" w C++ na Symbianie w wersji na platformę S60 w edycji 3 trzeba sporo napisać kodu w Carbide.C++ i skompilować to w odpowiednim SDK dla odpowiedniego modelu komórki.
-- Przecież mi mówiłeś że uczysz się C++ na Symbiana
-- Uczę się bo to co ma do zaoferowania Python (PyS60) nie wystarcza mi, i jak trzeba coś więcej to już trzeba po programować w C++ rozszerzenia do Pythona.
A tak przy okazji zastanawiam się czy jest coś fajnego w tym programowaniu na komórki.
-- I co znalazłeś fajnego?
-- Że właściwie Symbian to taki stary system operacyjny, który ma duże perspektywy rozwoju pomimo konkurencji ze strony iPhona (z Macem) G1 (z Androidem) HTC (z Windows Mobile). Tą wojnę może wygrać tylko ten kto dostarczy najlepsze wsparcie dla programistów. Na dzień dzisiejszy największe możliwości mają programiści pod Symbianem. Ale konkurencja ma duży atut. Dostarczają jeden produkt i właściwie jeden język programowania.
-- A dlaczego uważasz ze to jest atut?
-- Bo nie musisz przejmować się tym, że konkurencja napisze podobny program w innym języku programowania. - Michał zaśmiał się
-- Nie do końca zrozumiałem Michale
-- Ludzie nie lubią wybierać racjonalnie. Wolą żeby ktoś za nich zdecydował. Z takiego podejścia wykorzystał Apple, wprowadził iPoda czy iPhona informując programistów możecie kupować nasz jeden produkt i programować tylko w ObjeciveC. Inaczej mówiąc nie masz wyboru i to jest zaleta. Druga sprawa to marketing wszyscy kojarzą iPhona z Apple. W przypadku komórek to ludziom kojarzą się z ograniczeniami.
Większości ludziom nazwy typu Symbian, S60, czy UIQ nic nie mówią. Marketingiem komórek zajmują się operatorzy, którzy nie wnikają jaki system operacyjny jest w komórce. Po drugie nadmiar komórek powoduje to że trzeba reklamować to w taki sposób żeby za ludzi dokonywać wyboru.
-- A jak to ma do programowania na komórki.
-- Że ktoś kto pisze program na komórki to musi mieć całą szafę komórek, żeby móc sprawdzić jak to zadziała. W praktyce to powoduje że wejść na ten rynek programowania na komórki jest bardzo trudno. Jak ktoś kto wcześniej miał do czynienia z programowaniem to po pierwszym poznaniu się z programowaniem w C++ na Symbiana, może czuć się zagubiony.
-- Dlaczego?
-- Musiałbym spróbować Ci to wyjaśnić. W Pythonie na komórki wystarczy taki kod

print u"witaj"

a w C++ to trzeba znać to jak jest zbudowany framework AVKOM który odpowiada za wyświetlanie na wyświetlaczu komórki z Symbianiem w wersji na platformę S60.
-- A mógłbyś mi to pokazać na moim laptopie taki kod w C++?
Krzyś otworzył swojego laptopa. Michał poszedł do pokoju po USB z swoim SDK i swoim kodami źródłowymi.
-- Znowu nasi chłopcy będą siedzieć przy kodowaniu - westchnęła Kasia - Michał potrafi zatrzymać mojego Krzysia tak że nie daje mu spać ze mną
-- Nie dziwię się temu, mnie potrafi tak długo tłumaczyć, aż zrozumiem. Przeważnie chodzę z tego powodu niewyspana. Michałek ma swój urok i nadmiar cierpliwości.
Michał zaśmiał się
- Dziękuję za komplement Dusiu - odpowiedział z nutką ironii - Mam pomysł podłączymy Twojego laptopa do telewizora i będziecie oglądać to ja z Krzysiem robię.
-- Dobry pomysł - odpowiedział Krzysiek i mrugnął okiem do Kasi.
-- Tylko proszę nie dłużej niż 15 minut wam daję - odpowiedziała z sarkazmem
-- Ja to lobię patrzeć i słuchać co Michałek mam do powiedzenia mimo że często nie rozumiem tego za pierwszym razem. Ale jak któryś raz to tłumaczy to dużo lepiej to rozumiem. Kasiu też nadal nie rozumiem tego programowania do końca, ale podziwiam Michałka za jego próby wytłumaczenia tego czym się zajmuje.
Krzysiek podłączył kabelek od telewizora do swojego laptopa i wszyscy widzieli to co ma na ekranie telewizora.
-- Masz zainstalowane któreś SDK S60 w edycji 3?
-- Mam
Krzysztof wszedł na E:\Symbian\9.2\S60_3rd_FP1 w swoim laptopie
-- No teraz jesteśmy tam gdzie robi się programy komórkę. Widzisz folder S60Ex?
-- Tak
-- Tutaj masz sporo przykładów do nauki programowania w C++
Wszyscy zobaczyli zawartość E:\Symbian\9.2\S60_3rd_FP1\S60Ex
-- Teraz wejdziemy w podstawowy przykład w którym spróbujuę wyjaśnić na czym polega programowanie prostej aplikacji na komórkę. Wchodzimy w katalog HelloWorldBasic
zobaczyli zawartość E:\Symbian\9.2\S60_3rd_FP1\S60Ex\HelloWorldBasic
-- Mamy tam kilka folderów. Folder group zawiera informacje o tym jak ba być kompilowane, folder data zawiera informacje o tym jakie będzie manu aplikacji oraz pliki lokalizacyjne, ale nie zawiera wersji dla języka polskiego - to trzeba samemu stworzyć. Folder gfx zawiera grafikę która będzie wyświetlana w menu w komórce. Jednym z ważniejszych folderów z kodem to są folder inc który zawiera pliki nagłówkowe. Pliki nagłówkowe informują kompilator o tym co ma zostać napisane w kodzie. A sam kod programu znajduje się w folderze src. Już sam taki podział folderów wymusza pewien podział pracy nad pisaniem aplikacji na komórkę.
-- a co z folderem doc?
-- Folder doc to dokumentacja dla programistów,który chcieliby wiedzieć jak wygląda proces tworzenia programu.
-- No to możesz mi wytłumaczyć jak krok po kroku wygląda zaprogramowanie programu w komórce Michale?
-- No to otwórz plik E:/Symbian/9.2/S60_3rd_FP1/S60Ex/HelloWorldBasic/doc/index.html w tym dokumencie masz to opisane. Programowanie w C++ w Symbianie wymusza trzymanie się pewnej konwencji nazewniczej. Wszystkie klasy pochodzą od klasy CBase, co powoduje ze większość klas mają nazwy zaczynające się od C. Gównie dlatego że żeby używać bardzo oszczędnego sposobu zarządzania danymi w stosie w pamięci. A stos to taki sposób przechowywania danych w pamięci.
-- A dużo to wymaga pamięci w komórce?
-- Na stosie tak, ale jak prowadzisz higieniczny tryb życia Kasiu to nie grozi Ci wylew mózgu. Od programisty zależy to czy długo pożyjesz bez wylewu.
Dusia zaśmiała się, a Kasia poczuła się zmieszana.
-- Michałek często tak opowiada używając nietypowych porównań
-- Zanim cokolwiek programista zechce napisać kod musi coś wiedzieć o architekturze.
-- Architektura? A programista ma wiedzieć coś o gotyku? - spytała z sarkazmem Dusia
-- Dusiu zanim zaczniesz budować dom musisz określić styl jak to ma w ostateczności wyglądać. W programowaniu architektura programu oznacza głównie to jak zadziałać program. Jak uruchamiamy program w komórce to na szczęście dla programisty to programista nie musi zajmować się wszystkim. W systemie operacyjnym Symbian wszystko jest biblioteką, czyli wszyscy muszą ze sobą współpracować według określonych reguł.
-- Przy czytaniu książek? -- znowu Dusia śmiała się do rozpuku.
-- Dusia no tak przecież nie zaczniesz czytać książek po węgiersku w bibliotece jak nie umiesz węgierskiego. Podobnie z programowaniem pod Symbianem - trzeba poznać specyficzną gramatykę i jak pisownię w języku C++. Język C możesz porównać do alfabetu łacińskiego, ale skoro Węgrzy mają całkiem dziwny język to podobnie pod Symbianem C++ jest też dziwny. Warto jednak poznać ten węgierski Dusiu.
-- Ale skaczesz z kwiatka na kwiatek
-- Jak uruchamiasz program to biblioteka w Symbianie zwana framworkiem ładuje Twój program z metody E32Main() która jest w pliku helloworldbasic.cpp Ta metoda wywołuje funkcję NewApplication(). Ta funkcja tworzy ma pamięci obiekt typu CHelloWorldBasicApplication kod tego jest w pliku helloworldbasicapplication.cpp Obiekt ten jest w pamięci i każdy może dostać się do niego poprzez wskaźnik. Wskaźnik to taka informacja o tym w którym miejscu w pamięci to się znajduje. Ten obiekt przechowuje informację o identyfikatorze aplikacji CHelloWorldBasicApplication::AppDllUid, który jest potrzebny do sprawdzenia czy dana aplikacja została już uruchomiona. Każda aplikacja w Symbianie wymusza utworzenie obiektu typu CApaDocument który służy za podstawę tworzenia właściwej aplikacji. Jest to spowodowane tym że do działania aplikacji trzeba wciągnąć jak najwięcej obiektów zainteresowanych działaniem Twojej aplikacji. Gdy zostanie utworzony obiekt typu CHelloWorldBasicDocument który jest w pliku helloworldbasicdocument.cpp to aplikacja zostaje załadowana na stos czyszczący, który zarządza alokowaniem pamięci na działanie programu. Następnie wywoływana jest metoda CHelloWorldBasicDocument::CreateAppUiL, która tworzy w pamięci obiekt CHelloWorldBasicAppUi typu CEikAppUi i zwraca adres do pamięci ( czyli ten wskaźnik gdzie to jest w pamięci). Trzeba zwrócić uwagę na mechanizm podwójnego konstruktora w pliku helloworldbasicappui.cpp. W praktyce ten mechanizm polega na tym że podczas tworzenia obiektu wszystkie informacje o tym obiekcie muszą być utracone. Dopiero uruchomienie CHelloWorldBasicAppUi::ConstructL() powoduje inicjalizację składowych.
Jest to bardzo dobry sposób na zarządzenie pamięcią w sytuacji wystąpienia wycieku pamięci.
-- Czyli tak naprawdę tworzymy w pamięci pusty obiekt, żeby sprawdzić czy jest jeszcze trochę pamięci do wykorzystania i dopiero potem wypełniamy tą pamięć danymi z wywołania drogiego konstruktora. A co będzie jak zabraknie pamięci?
-- Wystąpienie wyjątku czyli wylew pamięci. W praktyce to oznacza że jak programista napisał kod w którego wynika że może wystąpić wyjątek to nie dojdzie do zawieszenia komórki ani programu tylko program najnormalniej na świecie zamknie się. W konwencji to oznacza że programiści przy końcu nazwy funkcji i metod klasy nadają literkę L. W praktyce to oznacza tyle że jak nie powiedzie się wywołanie danej składowej to zamknie się cała aplikację.
-- Zrozumiałem Michale
-- Zaczyna to być nudne Michale - odrzekła Kasia
-- Pójdziemy Kasiu do kuchni wypichcić? -- spytała się Daria
Kasia kiwnęła głową i poszły razem do kuchni.
-- W pliku helloworldbasicappui.cpp masz obsługę poleceń w metodzie
CHelloWorldBasicAppUi::HandleCommandL() w tej metodzie też masz opisaną jak ładować dane z plików z zasobów czyli z pliku HelloWorldBasic.rsg. Natomiast nie wspomniałem o tym że drugi konstruktor czyli CHelloWorldBasicAppUi::ConstructL() wywołuje CHelloWorldBasicAppView::NewL tworząc obiekt typu AppView, który odpowiada za narysowanie na wyświetlaczu z metody CHelloWorldBasicAppView::Draw która jest w pliku helloworldbasicappview.cpp
-- Michał, kobiety się obraziły, myślę że na dzisiaj nam wystarczy. Chciałbym jeszcze do tego wrócić. Może byś mi to opisał w emailu.
-- Masz rację. zamkniemy Twój laptop i wyłączymy telewizor