sobota, 12 stycznia 2008

Witaj świecie!

Dusia patrzy z zainteresowaniem na co Michał robi przy komputerze. Michał podniósł głowę od komputera i spojrzał na nią.
Uśmiechnął się. Dusia siadła obok niego.
 -- Możesz mi wytłumaczyć nad czym teraz siedzisz? - spytała się zalotnie.
 -- Czytam dokumentację z Nokii o programowaniu na komórki w języku programowania C++. - odrzekł z poczuciem pewności siebie.
 -- A czy to jest tak interesujące, że musisz tyle czasu nad tym spędzać ?
 -- Miła Dusiu zawsze co mnie interesuje to spędzam przy tym sporo czasu, a programowanie na komórki jest czymś nad czym trzeba poswięcić sporo czasu. Byłoby mi miło gdybym Cię też nauczył programowania na komórki.
-- Chyba żartujesz Michale, mnie chcesz uczyć czegoś nad czym nie mam pojęcia do czego mi się przyda.
-- Otóż warto jest zadać sobie sporo trudu i nauczyć się czegoś nowego od kogoś kogo lubisz, żebyś wiedziała o tym z jakimi problemami zmaga się twój ulubiony programista. - powiedział żartobliwie
Dusia roześmiała się i objęła go swoimi ramionami.
-- No to zobaczymy czy uda się  Ci mnie nauczyć. Musisz się liczyć z tym że jestem bardzo dociekliwa i nie przepuszczę żadnej linijki kodu.  - rzekła chichocząc.
Michał położył palec na jej ustach. Dusia spoważniała,ale nadal obejmowała Michała patrząc się w monitor.
--- Możemy zacząć Dusiu? - spytał się nieśmiało
-- Dobrze - odpowiedziała cichutko
Michał otworzył program Carbide.c++.
-- Co to za program?
--- To jest program który jest edytorem dla programistów C++ programujących na komórki Dusiu.
--- Aha chyba się pogubię... - rzekła ze spuszczonym tonem
--- Jak masz przewodnika to się nie zgubisz nawet w lesie.
Michał wybrał z menu File --> New --> Symbian OS C++ Project
-- Najpierw wybierzemy aplikację konsolową czyli taką w trybie tekstowym, łatwiej zrozumiesz Dusiu programowanie w C++
-- Dobrze....
Michał wybrał Generic Symbian OS i rozwinał  na  Basic  Console  Application (EXE) i następnie kliknał w Next
-- Teraz wybierzemy nazwę dla naszej aplikacji. Jaką proponujesz?
--  Nie mam  pojęcia.... a może być nazwa "Moja pierwsza aplikacja"?
-- Trochę za długa jak na początek. Proponuję krótszą nazwę "Witaj"
--- Zgadzam się, a zresztą ty wiesz Michale jak ma być najlepiej.
Michał wpisał Witaj i kliknał w Next
-- Dusiu widzisz teraz wybieramy platformę Symbiana której mamy zainstalowany emulator czyli program, który będzie sytmulował na komputerze komórkę
-- Michał a jak wygląda ten emulator?
--- To tego jeszcze dojdziemy bo czeka nas jeszcze konfiguracja tego emulatora
--- Zrozumiałam i idziemy dalej
Michał wybrał tylko Emulator Debug WINSCW [S60_3rd_MR] i kliknął Next
--- Teraz Carbide wygenrowało nam losowy identyfikator dla naszej aplikacji. Otóz w systemie Symbian każda aplikacja musi mieć unikalny numer, bo to jest związane po częsci z polityka bezpieczeństwa tego systemu co sprawia że ten system jest uwazany za zbyt restrykcyjny dla tych którzy chcą tworzyć darmowe aplikacje. Duże firmy zawsze znajdą pieniądze, żeby kupować podpisy i identyfikatory dla swoich aplikacji.
-- Ciekawe, ale pomimo tego są wirusy na Symbiana.
--- Oczywiście Dusiu, że są, ale to tak się dzieje jak się instaluje wszystko nie sprawdzając czy aplikacja jest podpisana zaufanym podpisem.
--- To jest trochę skomplikowane dla mnie Michale
--- Wyjaśnię Ci to w odpowiednim czasie.
Michał wpisał w pole  Author : Mike & Dusia i kliknął Finish.
--- Dusiu Carbide.c++ wygenerowało nam trochę kodu, żebyśmy nie musieli pisać od nowa, ale teraz trzeba będzie skonfigurować emulator.
--- Michale ja chcę żebyś mi wyjaśnił kod.- rzekła stanowczo
--- Najpierw musisz zobaczyć to w działaniu, a potem Ci wyjaśnie kod w C++ dobrze?
--- Niech Ci będzie....
Michał przełączył edytor na  na menadżera  plików  czyli Windows  Explorera na ścieżkę E:\Symbian\9.1\S60_3rd_MR\Epoc32\Data
--- Dusiu tutaj mamy pliki  konfiguracyjne emulatora. Sam  główny  plik konfiguracyjny emulatora to epoc.ini
Michał otwiera plik epoc.ini w notatniku. i wpisuje w pierwszej linijce  wiersza tekst textshell i zapisuje plik poprzez zamknięcie.
--- Dusiu wpisałem w pierwszej linjce pliku konfiguracyjnego emulatora to że ma działać w trybie tekstowym
--- Co to znaczy? - zrobiła minę zaciekawionego dziecka
Michał pogłaskał ją czule
--- To oznacza że będziemy widzieli okienko w którym będzie sam tekst.
--- Zrozumiałam a mogę to zobaczyć?
--- Oczywiście
Michał przełączył z powrotem na Carbide.c++ i wcisnął  CTRL+F11
---  Co to za sztuczki Michale  co  mam uczyć się na pamięć  skrótów klawiszowych?
--- Są bardzo potrzebne szybciej się robi niż gdybyś miała programować za pomocą myszki. - odpowiedział śmiejąc się.
--- Ale jesteś przemądrzały a do czego ten skrót?
W tym momencie pojawił się emulator przysłaniajac niebieskie okienko konsoli. Więc Michał odsunął emulator na lewo ekranu.
--- Widzisz Dusiu ten skrót służył do uruchamiania aplikacji w emulatorze. Teraz mamy emulator i niebieskie okienko konsoli. W tym okienku widać c:\ prawda?
--- No widzę a co mam tam wpisać?
--- Nazwę aplikacji czyli Witaj
Dusia wpisała i na okienku konsoli widać było c:\Witaj.exe
--- Co dalej Michale?
--- Wciśnij Enter
Dusia wcisnęła Enter i na okienku konsoli pojawiło się HelloWorld! [press any key]
--- No i to wszystko? - na jej twarzy pojawiło się zdziwienie
--- Tak Dusiu trzeba było najpierw Ci pokazać, a potem omawiać kod źródłowy.
--- Właśnie... ale kod mi wyjaśnisz innym razem. A teraz chcę Cię Michale pocałować za to wszystko.
Dusia siadła Michałowi na kolanach i długo namiętnie się całowali. 

Pierwsze kroki w programowaniu na Symbian OS w C++

Ta notatka jest dość stara - czytelników odsyłam do tego artykułu Programowanie Symbiana pod Windows 7

Oczywiście, że trzeba znać C++, ale programowania pod Symbianem można nauczyć się i nie jest to coś bardzo wymagającego. Po pierwsze trzeba przygotować sobie środowisko pracy, narzędzi dla programistów jest sporo.Po drugie trzeba być bardzo cierpliwym - bo droga do napisania prostej aplikacji "Witaj Świecie" i uruchomienia tej aplikacji w komórce jest bardzo długa. Po trzecie większość czasu spędza się przy pracy w emulatorach danej platformy określonego producenta np: Series 60 3 edycji czy w UIQ 3.

Wbrew pozorom na początku ważny jest wybór środowiska programistycznego w którym będzie się programować. To jest spowodowane tym że praca programisty urządzeń mobilnych wymaga potem przerabiana kodu C++ pod określoną platformą.

Najczęściej wybieranym środowiskiem programistycznym jest Carbide C++ Express które można ściągnąć z Forum Nokii.
Zanim się zainstaluje trzeba najpierw zainstalować ActivePerl-5.6.1.635 , czy JRE a dopiero następnie trzeba ściągnąć odpowiednie SDK z kompilatorami (ja wybrałem S60 3rd Edition, MR) Wtedy można zacząć instalację IDE.
Tak naprawdę poznawanie zacznie się z linii poleceń
najpierw sprawdzamy czy mamy zainstalowane SDK - wystarczy że w pliku wsaadowym *.bat wpiszemy polecenie

devices

powinno się pojawić

S60_3rd_MR:com.nokia.S60 - default

co oznacza ze mamy zainstalowane SDK i przystogowane do pracy. Następnie sprawdzimy czy zadziała emulator. Idziemy do folderu z plikami przykładowymi z SDK E:\Symbian\9.1\S60_3rd_MR
\S60Ex\helloworldbasic
poszukamy w folderze pliku E:\Symbian\9.1\S60_3rd_MR\S60Ex\helloworldbasic\group\bld.inf który jest plikiem informującym o tym jaką zawartość jest potrzebna do skompilowania (natomiast plikiem konfigurującym proces kompilacji jest helloworldbasic.mmp).
W tym folderze tworzymy plik wsadowy z poleceniem wygenerowania pliku abld.bat.( to jest plik wsadowy który odpowiada za proces kompilacji)

bldmake bldfiles

Mając już wygenerowany plik wsadowy abld.bat można już uruchamić emulator i skompilować aplikację w trybie debugowania w tym celu trzeba stworzyć nowy plik wsadowy z poleceniem


abld build winscw udeb

A teraz zrobimy to samo z Carbide C++. Uruchamiamy Carbide.c++ . Z menu wybieramy File - Import... Wybieramy "Symbian OS Bld.inf file". Podajemy ścieżkę E:\Symbian\9.1\S60_3rd_MR\S60Ex\helloworldbasic\group\bld.inf Wybieramy SDK i Build Configuration "Emulator Debug (winscw) [S60_3rd_MR]". Następnie wybieramy plik konfiguracyjny i wybieramy 2 pliki helloworldbasic.mmp i Icons_scalable_dc.mk Kolejny krok to wskazanie głównego folderu gdzie znajdują pliki aplikacji i nadanie nazwy projektowi helloworldbasic. Po wykonaniu wystarczy wybrać z menu Run - Run... i po pojawieniu się okna wcisnąć w przycisk Run.

piątek, 11 stycznia 2008

Aplikacje na komorke Series 60 w Pythonie

Coraz więcej aplikacji na komórki powstaje na platformę mobilną Series 60 dzięki językowi skryptowemu Python
Ja często zauważam że większość aplikacji jest pakowana do paczek instalacyjnych *.sis Jest to dobre rozwiązanie dla kogoś kto nie ma zamiaru  poprawiać aplikacje. Natomiast mnie jako programiście interesuje to jak został napisany kod w Pythonie i mam pewne zasady zarządzania bibliotekami i roszerzenaimi dla PyS60. Zazwyczaj robie tak, że jak jest jakaś paczka do zainstalowania w plikach *.sis to ja wypakuję (programikiem SISXplorer)  a następnie  kopiuję plik wykonywalny *.py do folderu e:\Python a pliki klasy i modułów *.py i *pyc do e:\Python\lib Gdy mam binarne rozszerzenia bibliotek do Pythona napisane w C++ Symbiana to trzeba przygotować własny  plik instalacyjny  i podpisać je własnym certyfikatem.

Uprzedzam czytelników że w większości przypadków trzeba dokonywać drobnych zmian w kodach źródłowych plików *.py żeby działało.
Druga rzecz to upewnić się czy ma się aktualną wersję Python for S60 zainstalowaną w komórce Ostatnia wersja to 1.4.1

Moja lista aplikacji w Pythonie

pyRecoder for S60
- prosta aplikacja do nagrywania filmików wideo w formacie *.3gp. Każdy plik jest zapisywany w folderze e:\pyvideos
pySpy - złożona aplikacja która pozwala zamienić komórkę w narzędzie do prowadzenia monitoringu wideo
wikkit
- aplikacja do dodawania notatek
pyFTPclientS60 - prosty klient do anominowego FTP
pyEdit - prosty notatnik
pyExchange - aktualny kurs walut
pyFileManager - menadżer plików
Instant Photo Show - przeglądarka zdjęć
pyEkran - programik do migotania komórką
mobioo - czyta pliki OpenOffice  w formacie  *.odt
mparta - czyta tylko pliki w formacie *.pdf
Sydewynder - aplikacja do zarządzania SMS może służyć jako serwer aplikacji SMSowej
PySystemUtilities - aplikacja do robienia zrzutu ekranu komórki
Paint 1.60b - edytor plików graficznych (uwaga trzeba znać rosyjski i mieć czcionki do cyrylicy)
TimeCorrect - synchrinizacja czasu z zegarami atomowymi (aplikacja rosyjska)
controlBlue - sterowanie komórką z Bluetootha komputera (podobną funkcjonalność ma PyS60RemoteControl czy Amora dla Linuxa)
mobileGTD - program do zarządzania czasem
pys60dict
- program do przeglądania własnych słowników z http://freedict.org/en/
Object Browser - dobre narzędzie dla programistów  przeglądarka obiektów w klasach i modułach Pythona
S60 Python NMEA Info Viewer - przeglądarka danych z GPS
Ped - edytor skryptów w Python for S60 (inne edytory to są PyED EasyEdit)
Google Calendar upload script - skrypt do uaktualniania kalendarza Google


czwartek, 10 stycznia 2008

Polish Flex User Group

Firma Janmedia zrobiła sobie "prezent" - tworzy serwis dla programistów Flex 2 - FlexTech. Od pewnego czasu w internecie istnieje serwis Polish Flex User Group prowadzony przez Pawła Chmiela (szkoda że w ciągu 20 dni nic nie zrobili na tej stronie - widocznie są nawaleni pracą) . Zakładanie grup Adobe jest bardzo proste. Wystarczy zgłosić że się ma co najmniej 6 osób na właściwych stanowiskach, założoną stronę WWW i terminarz spotkań. Na razie w skład tej grupy wchodzą sami pracownicy firmy Janmedia: Paweł Cichoń, Jakub Andrzejewski, Kevin May, Mirosław Pośpiech. Mogliby mnie zaprosić do współtworzenia tego serwisu - ale skoro to jest wewnętrzna inicjatywa Janmedia to ja nie mieszam się w to. Przedstawiciel firmy Adobe na Polskę Rafał Kania poprosił ich żeby brali udział w Adobe AIR Tour Europe w Warszawie 15 stycznia 2008 roku.

Oto program tego spotkania w Warszawie:
Andrew Shorten (45 min)
General intro
Flex Builder 3
Enrique Duvos (45 min)
Open source
Data services
Paweł Cichoń (15 min)
Polish Flex User Group Presentation - FlexTech
FlexTech Experience Presentation (Internal and External Projects)
Understanding the Purpose of Flex
Why We Develop in Flex
Jakub Andrzejewski (15 min)
Flex and Usability - Playful Experience with Flex
Documenting Flex
Kevin May (15 min)
Adaptive Process in the Context of Flex Projects
Effective Practices in Selling Flex Projects - Open Hours and Adaptive Contracts
Mirosław Pośpiech (15 min)
Managing Flex Project in the Context of Modern Organizational Structures
Flex Common Development Process

Ciekawą rzeczą jest to ze w Polsce mamy na razie Polish Adobe User Groups prowadzoną przez Krzysztofa Satołę i Marcina Klimka oraz Adobe Creative Suite User Group prowadzoną przez Anię i Pawła Zakrzewskich. Życzę sobie żeby te 3 grupy ze sobą dobrze współpracowały.

poniedziałek, 7 stycznia 2008

Klient pocztowy we Flashu

Na forum flashzone.pl prowadziłem dość interesującą rozmowę na temat tego jak w FlashPlayer 9 można obsługiwać klienta poczty. Cały pomysł Mateusza Małczaka polegał na tym żeby napisać jakiś mikro serwer na jakimś porcie który by nadsłuchiwał żądania na danym porcie od FlashPlayera. Teraz sztuka polega na tym że w kodzie Action Script piszemy tak

Security.loadPolicyFile("xmlsocket://serwerpoczty.com:878");
co oznacza na serwerze poczty na porcie 878 jest ten mikroserwer. FlashPlayer zanim nawiąże połączenie pod tym portem wysyła zapytanie do tego mikroserwera
 <policy-file-request />  
i oczekuje że serwer mu odpowie
<cross-domain-policy>
<allow-access-from domain="*" ports="*">
</allow-access-from> </cross-domain-policy>

A ponieważ zapytanie i odpowiedz wyszły z portu mniejszego niż 1024 to w ten sposób Flash Player otrzymał dostęp do wszystkich portów serwera.
Więcej informacji można przeczytać w dokumentacji ActionScript

sobota, 5 stycznia 2008

Podpisywanie aplikacji AIR

Od pewnego czasu interesuję się podpisami elektronicznymi. Najbardziej znane jest wykorzystywanie podpisów do uwierzytelnienia komunikacji pomiędzy przeglądarka a serwerem w protokole HTTPS. Drugą rzeczą znaną dziedziną w której używa podpisywania jest podpisywanie aplikacji na komórki z Symbianem i midletów J2ME (podpisywać też można dokumenty MS Office i OpenOffice). Trzecią dziedzina jest podpisywanie korespondencji emailowej. Zauważyłem że nie jest to dziedziny szczególnie popularne z kilku powodów:
przede wszystkim z powodów wysokich kosztów jakie muszą ponosić Ci którzy chcą podpisywać swoje aplikacje. Kolejną rzeczą jest to podpisywaniem aplikacji to interesują się głównie Ci którzy mają Symbiana (bo ten system wymaga żeby w większości przypadków aplikacje były podpisane). Ale jak wiadomo można zawsze sobie wygenerować certyfikaty i na podstawie nich tworzyć podpisy. Więcej informacji o generowaniu podpisów można sobie przeczytać w artykule o tworzeniu własnego certyfikatu OpenSSL X.509. O podpisywaniu aplikacji pod Symbianem można przeczytać w tym artykule (chociaż już trochę sie zmieniło na stronie SymbianSigned.com). W większości przypadków dla aplikacji pod Symbianem (szczególnie midletów J2ME trzeba sie pogodzić z tym że instaluje się je niepodpisane albo można sobie wygenerować własny certyfikat do podpisywania midletów co jest pokazane w tym artykule)

W stronę wymogu podpisywania aplikacji też idzie technologia Adobe AIR (widocznie zapomnieli że podpisywanie aplikacji Shockwave w Director też przyczyniło się do upadku tej technologii). Otóż w wersji finalnej AIR trzeba będzie podpisywać certyfikatami CA. (albo w razie czego sami będziemy generować podpisy dla plików *.airi)
Zanim zajmiemy się tworzeniem własnych podpisów dla AIR polecam zapoznanie się z artykułami Packaging an AIR installation file using the AIR Developer Tool a także z Digitally signing an AIR file można też przeczytać wątek o używaniu rożnych formatów certyfikatów. Mamy też opis jak tworzyć własny certyfikat do podpisywania. Oto przykład (a plik adt.bat znajduje się w AIR SDK)

adt -certificate -cn MojCert -o "Michal Malaj"
-c PL 2048-RSA newcert.pfx #haslo#
Wyjaśnienie ważniejszych przełączników:
-certificate - informuje że chcesz wygenerować certyfikat
-cn - oznacza podanie nazwy certyfikatu
-0 - oznacza podanie imienia i nazwiska (opcjonalne)
-c - oznacza podanie dwuliterowego skrótu kraju (opcjonalnie)
dalej kolejność jest ważna (sposób szyfrowania, nazwa pliku z wygenerowanym ceryfikatem, hasło do certyfikatu)

a potem podczas tworzenia pliku AIR warto użyć
adt -package -storetype pkcs12 -keystore newcert.pfx
-keypass #haslo# myApp.air myApp.xml myApp.html
AIRAliases.js image.gif

piątek, 4 stycznia 2008

Programowanie GPS

Zainteresowało mnie to jak programuje się GPS w komórkach z systemem Symbian 9. Mam zewnętrzny odbiornik GPS Nokia LD-3W, który jest odbiornikiem działającym w Bluetooth 2.0 przesyłającym dane w formacie NMEA 0183 v. 3.01. Na początek postanowiłem sprawdzić działanie w takich aplikacjach jak Google Mobile Maps i w Nokia Maps. Jak zdążyłem zauważyć Google Mobile Maps jest aplikacją J2ME, a Nokia Maps aplikacją Symbianową. Osobiście najbardziej mi przypadła do gustu aplikacja Google z tego powodu, że przekazywała mi informację o tym, że oczekuje informacji od odbiornika GPS i stan otrzymanych informacji np: o satelitach GPS z którymi udało się nawiązać kontakt. Natomiast Nokia Maps jest aplikacją offline, trzeba było załadować do karty pamięci mapy za pomocą aplikacji Nokia Map Loader, w przypadku Polski to było jakieś 9 MB danych.

Jak wiadomo dane są są przesyłane w NMEA 0183 Jest to format tekstowy do wymiany danych od satelitów do odbiorników GPS. Więcej o tym można przeczytać w tym dokumencie (po polsku). W tej sytuacji trzeba znać się na programowaniu Bluetooth aby te dane odebrać do komórki. Nokia LD-3W wykorzystuje profil Serial Port Profile. W internecie znalazłem informacje i przykładowe aplikacje o tym jak zaprogramować aplikację przetwarzającą dane z tego odbiornika. W J2ME dobrze pokazano to na tym przykładzie parsera NMEA, oraz aplikacji Bluetooth Jest jeszcze przykład z J4ME Bluetooth GPS package który pozwala na wykorzystanie z JSR-179 Location API. Ale najciekawsze to były przykłady z Pythonem. Pewien programista Nick Burch napisał sporo kodu w PyS60 Ja ściągnąłem mnea_info_v3_027.sis rozpakowałem to programikiem SISXplorer a następnie wypakowałem skrypty default.py, geo_helper.py oraz pexif.py i przegrałem je do komórki. Tak więc na podstawie tego kodu miałem parser NMEA, komunikację z odbiornikiem Bluetooth, czy robienie zdjęć z zapisanymi danymi EXIF. Więcej informacji o tym programiku można znaleźć w wpisie na blogu autora.