czwartek, 31 stycznia 2008

Przeminelo z wiatrem

Niebo było pochmurne. Deszcz padał. Michał trzymał parasolkę w ręku. Dusia szła przy nim przytulona. Szli przez park. Mijali drzewa wzdłuż alejki.
-- Michałku o czym myślisz?
-- O tym co mam do zrobienia. Próbuję ustalić priorytety na luty.
Wiatr zerwał się. Krople deszczu spłynęły po policzkach. Dusia patrzyła w jego oczy.
-- No tak myślę, że ważne jest podzielenie czasu na naukę programowania Ciebie Dusiu w Caribe.c++. Otóż ostatnio pobrałem nowszą wersję Carbide.c++ 1.3 beta. W niej mogę do końca marca poznać wszystkie zakamarki programowania pod platformę S60 i UIQ 3. Myślę, że niedługo jeszcze w tym roku wypuszczą platformę S60 5th edition. Ostatnio też planują wydać książkę o programowaniu gier pod Symbianem w C++.
--- Coś jeszcze ? --- spytała sie Dusia zaciekawiona
--- No mamy przed sobą przyszłość w technologii Adobe. Włączenie się w prace zespołu Flextech.pl pod przewodnictwem Pawła Cichonia. Mamy tez sporo ciekawych nowych bibliotek programistycznych do przetestowania. Takimi wersjami są Papervision3D 2.0 czy WOW. A także taka biblioteka As3Eval która pozwala na wykorzystywanie dynamicznego kodu w ActionScript 3. Adobe też, już opublikowało nową wersję serwera dla programistów Flash Media Server 3 do nadawania filmów wideo i telewizji na żywo przez internet.
--- Rzeczywiście Michałku, kolejny miesiąc zapowiada się interesująco.
Dusia stanęła i ogarnęła Michała całowała go mocno w usta. A wiatr rozwiewał jej włosy.

wtorek, 29 stycznia 2008

Marsz Mendelsona

Jest bardzo późno. Michał z ulgą wszedł do domu. Szybko zdjął garnitur. Umył się. Poszedł do pokoju. Siadł przy łóżku. Spojrzał na Dusię. Dusia spała. Położył się obok niej. Dusia poczuła obecność Michała
--- Michałku już wróciłeś. Jak się cieszę, że jesteś ze mną. Jak było na weselu?
--- Dobrze, że Ciebie nie było --- odpowiedział zmęczonym głosem
--- Dlaczego?
--- Bo twój brzuszek mógłby zaboleć i obawiałbym się o Twoje nogi z powodu bólu kostki. Myślę, że dobrze jak jesteś na szpilkach jak kochamy się, ale zawsze noszenie szpilek nie jest dobre.
Michał lizał jej brzuszek. Dusia popatrzyła na niego groźnym okiem.
--- Ja chcę Tobie zawsze się podobać i nie tylko gdy się kochamy. Szkoda, że nie wziąłeś mnie jako osobę towarzyszącą.
--- Miałem opory, jesteś zbyt piękna, ale obawiałem się, że wywołam zgorszenie jak się z Tobą się pojawię.
--- Dlaczego wywołałbyś zgorszenie? Przecież jesteś bardzo przystojnym mężczyzną Michasiu więc w czym byłby problem?
--- Dusia, nie lubię wesel, ani imprez gdzie jest wiele ludzi. Wolę kameralne spotkania.
--- Wiem o tym, ale wypadało, żebym została przedstawiona rodzinom
--- Dusia, na to przyjdzie odpowiedni czas -- odpowiedział stanowczo ale smutnym głosem
Dusia to wyczuła. Siadła na brzuchu Michała
--- Kochaj mnie Michale!
Michał trzymał jej biodra. Dusia dążyła do uniesienia. Po uniesieniu położyła się na piersiach Michała
--- Michałku co robiłeś na weselu?
--- Myślałem o Tobie i o kognitywistce a także o sztucznej inteligencji.
--- Wiem, że zawsze o mnie myślisz, ale co ma do tego kognitywistka i sztuczna inteligencja na weselu. Tańczyłeś?
--- Nie. A to ma tylko tyle wspólnego że robiłem notatki o tym.
--- To pewnie zjadłeś cały stół ---- powiedziała ze złośliwością
--- Jedzenia trochę było, ale poza jednym ciastem, którego próbowałem --- ciast i słodyczy nie jadłem
--- A kobiety się podobały?
--- Owszem były eleganckie, ale żadna nie dorównuje Tobie urodzie ani elegancji. Zresztą najwięcej komplementów słyszałem od dojrzałych kobiet.
--- Dziwne jak Ty Michałku wytrzymałeś tyle czasu sam.
--- Wolałem myśleć o kognitywistce czyli o nauce o umyśle.
Michał mówił dalej ściszonym głosem
--- Czy umysł może zrozumieć samego siebie? Celem kognitywistki jest zrozumienie sposobu działania umysłu. Polega to na budowaniu prostych modeli wyjaśniających jego działanie. Do tej pory psychologia głownie szukała odpowiedzi na to,ale szukała też jakiś mierzalnych empirycznych metod do wyjaśnienia tego jak działa myślenie. To co szukamy jest nazywane "algorytmem myślenia". Inaczej spojrzano na to jak naukowcy doszli do że rozumienie języka zależy od przyjętego modelu opartego na przetwarzaniu informacji. Jaki był numer telefonu Władysława Jagiełły? - pokazuje że to co kryje sie za pojęciami determinuje nasze poznanie świata.

Dusia zasnęła. Ich oddechy zrównały się. Powoli pojawiał się świt....

P.S. Dla czytelników zamieszczam zdjęcie nowożeńców.

poniedziałek, 28 stycznia 2008

Przy filiżańce kawy

Dusia zrobiła śniadanie. Zawołała Michała. Michał przyszedł po paru minutach. Wyglądał na niewyspanego. Dusia nalała jemu kawy do filiżanki. Przyniosła mu kawę do stołu. Michał czule uszczypnął w jej pośladek. Dusia zaśmiała się
--- Napij się kawy lepiej.
Siadła obok niego i patrzyła sie w jego oczy.
--- Dobrą kawę zrobiłaś. Ta kawa dobrze smakuje programistom Javy --- podniósł filiżankę kawy
--- A dlaczego im?
--- Bo mają w logo filiżankę z kawą...
--- Zbożową? --- spytała się śmiejąc
--- Nie wiem jaka to kawa zresztą... trzeba by twórców Javy się spytać. Ale to było tak dawno że wątpię, żeby pamiętali, jaką kawę wtedy pili.
Dusia była trochę zaskoczona taką ripostą. Michał zawsze miał ostatnie słowo do powiedzenia i żarty traktował bardzo poważnie.
--- Mówiłeś mi że warto poznawać rozwiązania firmy Adobe dla korporacji i dużych firm. Dlaczego?
--- To ma do tego że firma Adobe swoje produkty dla firm dostarcza w języku programowania Java. W tej sytuacji do programowania tych produktów trzeba znać ten język programowania.
Michal napił się kawy.
--- A co można zrobić z tym językiem programowania ? --- Dusia zrobiła minę ciekawskiej kobiety
--- Zaprogramować to co jest potrzebne w firmie. W praktyce obecnie najważniejsze jest posiadanie serwera internetowego w JEE. Do wyboru jest wiele rozwiązań JRun, JBoss, Tomcat, IBM WebSphere, BEA WebLogic. Trzeba też mieć bazę danych Obecnie firma może sobie wybierać pomiędzy MySQL, PostgreSQL, Oracle czy MS SQL Server. W firmie powinno też być środowisko pracy wyposażone w edytor dla programisty taki jak Eclipse, NetBeans, IntelliJ.
Teraz coraz większe znaczenie mają aplikacje które pozwalają modelować procesy biznesowe i szybko z nich generować kod dla programisty. Takimi narzędziami mogą być Oracle BPEL Process Manager, Microsoft BizTalk Server, Cape Clear ESB, Borland Caliber. Warto też zainwestować w narzędzia do obsługi pracy zepołowej repozytorium kodu czy obsługi rożnego rodzaju diagramów takie jak Borland Together, Magic Draw, Microsoft Visio, Visual Paradigm for UML. Widać że tych narzędzi jest sporo. Tak więc inwestycja musi być bardzo dobrze przemyślana pod kątem zasobów kadrowych. -- Michał zauważył, że kawa w filiżance mu stygnie.
--- Wygląda, że programiści Javy muszą znać na tym wszystkim i ciągłe się uczyć i poznawać nowe technologie i narzędzia. A firmy muszą dużo inwestować. -- powiedziała ze współczuciem.
--- Sporo zależy od tego czy zaprogramowanie przyniesie korzyści, często jest tak, że firma musi się przekształcać tak jak zaprojektowano procesy i oprogramowanie do tego. Dobry projektant musi znać się na otoczeniu firmy zanim zacznie uwzględniać procesy biznesowe i przenosić to do oprogramowania. -- Michał wypił filiżankę kawy --- Dusiu chodź do komputera coś Ci pokażę
Michał umył filiżanki kawy. Razem wyszli z kuchni. Następnie objął ramieniem Dusię i razem siedli do komputera. Michał włączył komputer.
--- Dusiu chcę Ci pokazać to na przykładzie Adobe LiveCycle Data Services ES.
Komputer się uruchomił i Michał pokazał jej folder D:\lcds
--- Adobe LiveCycle Data Services ES jest tym czego potrzebuje duża i mała firma która potrzebuje jakiegoś oprogramowania które pozwoli jej na zrobienie oprogramowania na własny użytek. Załóżmy że firma potrzebuje prostego systemu komunikacyjnego z możliwością generowania dokumentacji i zarządzaniem danymi z bazy danych.
--- A co to jest ten własny użytek? Nie lepiej jest kupić jakieś gotowe rozwiązanie?
--- Dusiu każda firma jest inna. I to co się opłaca zależy od skali problemu. Firma i tak będzie wolała zatrudnić programistę, który będzie zajmował się dostosowywaniem oprogramowania do własnych potrzeb firmy niż zdać się na firmę z zewnątrz. Problem jest też natury prawnej, otóż gdyby firma zechce te własne dostosowane rozwiązanie sprzedawać jako usługę to złamałaby warunki licencji dla tej wersji Express.
--- Szczerze mówiąc nie za bardzo rozumiem zawiłości licencyjnych.
--- Nie przejmuj się Dusiu większość programistów też ma problemy z tym, więc warto omawiać te sprawy z prawnikami, bo licencje są konstruowane pod kątem prawa amerykańskiego. Dusia uruchamiamy serwer aplikacyjny JRun, klikając w plik D:\lcds\jrun4\bin\startJRun.bat
Dusia zobaczyła okno z komunikatami.
--- Co tam pisze ?
--- To są komunikaty o tym co zostaje uruchomione razem z serwerem aplikacyjnym JRun. Możemy teraz zobaczyć ten serwer w działaniu. Dusiu wpisz http://localhost:8700/
Dusia wpisała to. Strona się otworzyła się.
--- Ale cieszę się, że to działa. Mogę kliknąć w link Samples Application? - spytała się z radością
--- Oczywiście jesteś na stronie http://localhost:8700/samples/ Mamy tam szybki kurs i 9 przykładów pokazujących co można zrobić z tym oprogramowaniem. Otwórz Firefoxa i jak Internet Explorer i wpisz taki adres http://localhost:8700/samples/dashboard/dashboard.mxml
--- O jakie ładne wykresy i tabelki. --- westchnęła z podziwem
--- Ustaw te okna przeglądarek tak obok siebie i poruszaj suwakiem z zakresem miesięcy.
--- Zauważyłam że jak zmienię w jednym oknie to w tym drugim będzie też zmiana, jakby synchronizowało się.
--- Dobrze zauważyłaś. Właśnie taką synchronizację zawdzięczamy technologii Java Message Service. a teraz wpiszemy http://localhost:8700/samples/pdfgen/pdfgen.mxml
--- No mam jakąś wizytówkę Mam kliknąć w przycisk "Create PDF"?
--- Tak pozwoli Ci to tworzyć unikalne dokumenty PDF. Mogę Ci pokazać kod w ActionScript 3 który przekształca grafikę, co widzisz w format danych Base64, aby można to było przesłać jako tekst na serwer.

private function generatePDF():void
{
var snapshot:ImageSnapshot = ImageSnapshot.captureImage(balanceSheet);
balanceSheetImage = ImageSnapshot.encodeImageAsBase64(snapshot);

snapshot = ImageSnapshot.captureImage(earnings);
earningsImage = ImageSnapshot.encodeImageAsBase64(snapshot);

service.generatePDF(xmlModel);
}

A kod MXML przekazuje dane do serwera w postaci dokumentu XML

Serwer po wysłaniu danych XML przesyła Tobie Dusiu adres strony pod którą jest wygenerowany dokument PDF.
--- A skąd o tym wiesz?
--- Wystarczylo zajrzeć do pliku D:\lcds\samples.war, który jest archiwum tych przykładów i plikiem z którego serwer JRun wykorzystuje do uruchamiania aplikacji .
--- Zaciekawiasz mnie tym jeszcze bardziej. A co jeszcze mi pokażesz?
--- Wpisz http://localhost:8700/samples/sqladmin/sqladmin.mxml Masz tutaj panel administracyjny dla bazy danych plikowej, a taką bazą danych w pliku jest HSQL Database.
--- No widzę jakie duże możliwości maja programiści Michale, a kiedy ja to wszystko zrozumiem --- powiedziała z nutką wątpliwości.
Michał przytulił Dusię, pogłaskał po długich włosach. I tak sobie przytuleni patrzyli przed siebie, słuchając własnego oddechu i bicia serca.


sobota, 26 stycznia 2008

Widok z okna

Michał wstał i podszedł do okna. Zobaczył staw pokryty lodem, poprószony śniegiem. W dali na horyzoncie zobaczył szczyt kaplicy z krzyżem. Dalej były tylko łąki i rowy melioracyjne. Niebo było szare, przesłonięte chmurami. Popatrzył na otoczenie. Zauważył pasiekę z niebieskimi i żółtymi ulami wzdłuż ogrodzenia. Za ogrodzeniem było boisko, a w dali zagajnik leśny. Odwrócił się od okna, spojrzał na Dusię. Spała w negliżu na kanapie. Zamyślony nad jej pięknem, poszedł do kuchni. Nastawił czajnik i garnek z mlekiem. Wziął głębokie talerze i przygotował pieczywo. Nalał gorącego mleka do talerzy, wsypał płatki kukurydziane. Poszedł do Dusi. Dusia była przebudzona. Uśmiech się pojawił na ich twarzach.
---- Jesteś świetnym kochankiem --- powiedziała z radością w oczach
---- Dziękuję za komplement umiłowana. Zapraszam na śniadanie. --- podał jej rękę
Dusia podała mu swoją rękę i poszli sobie do kuchni. Siedli przy stole.
--- Czego mnie dzisiaj nauczysz mój mistrzu ? --- spytała się z radością w oczach
--- Jak patrzeć w okno... ---- odpowiedział zamyślony --- bardzo trudno jest dobrze patrzeć w świat okien
W milczeniu jedli śniadanie. Dusia wiedziała, że jak Michał ma jakiś problem programistyczny to się robi poważny.
--- Pomóc Ci ? ---- spytała się nieśmiało
--- Tak bardzo proszę, może jak uda mi się wytłumaczyć problem Tobie przy komputerze to będę rozumiał swój problem
--- Dobrze, jak się ubiorę, bo pewnie znowu zamiast myśleć o programowaniu będziesz myślał o mojej urodzie ---- powiedziała z nutką ironii
Dusia wyszła z kuchni, Michał pozostał i posprzątał po śniadaniu.
Po godzinie czasu Michał włączył swój komputer i intensywnie myślał o programowaniu graficznego interfejsu użytkownika w Symbianie. Programy w Symbianie mają okienka,. które informują użytkownika o jego interakcji z programem. Dla programistów Symbiana przygotowano odpowiedni sposób tworzenia aplikacji z graficznym interfejsem użytkownika. Zrozumienie tego było troską Michała. Uruchomił Carbide.c++ i zaczął czytać dokumentację.
Dusia tym razem ubrała sie na sportowo w dresie i siadła obok Michała.
--- Co ty tak szybko czytasz dokumentację po angielsku? Nie mogę się nadziwić tempem w jakim przyswajasz te informacje...
--- Jak chodziłem do podstawówki to na każdej przerwie między lekcjami, nawet tej z 5 minutami uciekałem do biblioteki, żeby przeczytać na miejscu książki. Zresztą bibliotekarka była atrakcyjną kobietą dla mnie wtedy. --- zamyślił się --- To mnie nauczyło, że należy szybko czytać i umieć selekcjonować informacje do czytania. Wracam do okienek. Najpierw powiem Ci jak działają okienka w Symbianie.
--- Dobrze..
--- W tym wszystkim jest pewien porządek. Aplikację można podzielić na 2 części. Pierwsza cześć to interfejs użytkownika, a druga część to silnik aplikacji. architekci często nazywają pierwsza część widokiem (ang. View) a druga cześć modelem (ang. Model). Takie rozdzielenie jest korzystne ze względów takich że łatwiej potem przerobić kod źródłowy na inne platformy Symbiana. Najbardziej znane platformy Symbiana to Series 60 i UIQ. Trzeba tak pisać kod, żeby współpracował z wieloma platformami Symbiana. Bo to co różni te platformy to że dostarczają innego interfejsu programistycznego do obsługi interfejsu graficznego.
--- A co to jest ten interfejs graficzny i czym się różni od interfejsu programistycznego?
--- Interfejs programistyczny informuje programistę co może wykorzystać w swoim kodzie. a interfejs graficzny informuje użytkownika jak ma korzystać z aplikacji. Tak mogę w bardzo dużym uogólnieniu Ci wyjaśnić. W praktyce polega to napisaniu kodu, który spełniał by pewne założenia.
--- Jakie założenia? ---- Dusia próbowała ogarnąć to co mówił Michał
--- Założenia jakie wymyślili architekci inżynierii programowania obecnie często są nazywane wzorcami projektowymi. Są to bardzo abstrakcyjne uwagi na temat tego jak mamy pisać kody aplikacji. W pewnym sensie one stają sie żargonem pozwalającym na płynną komunikację pomiędzy programistami w zespole Teraz Ci pokażę jak programiści opisują tworzenie aplikacji okienkowej w Symbianie.
W Symbianie jest framework aplikacyjny który jest biblioteką do tworzenia własnych programów. Czyli programista na bazie tej biblioteki może tworzyć własne aplikacje. W praktyce wygląda to tak że koder w Caribe.c++ wykorzystuje szkielet wygenerowanej aplikacji .Co ten szkielet zawiera?
---- Ale to już jakiś horror skoro mi mówisz o szkieletach. ---- zażartowała Dusia. Michał zaśmiał sie.
---- Rzeczywiście jest to horror, gdy ktoś pierwszy raz siądzie do kodu z C++. Czarna magia. Nie bez powodu Ci, którzy się znają na takim programowaniu mogliby zostać odebrani jako czarnoksiężnicy. Nie dziwię się temu, że Ci którzy są hakerami, mają przeważnie czarną legendę w potocznym rozumieniu. Aby lepiej wytłumaczyć zmienne procesy architekci często wykorzystują rysunki z takimi schematami., które nazywają diagramami UML.
---- Ojejku, ale to wszystko jest takie tajemnicze i... --- zamyśliła się --- takie romantyczne.
Dusia patrzyła się na diagramy UML.
---- Dobry obraz jest wart tysiąca słów. Szkielet aplikacji w Symbianie tez wskazuje jak działa aplikacja.
Jak aplikacja zostaje uruchomiona to najpierw jest wywoływana funkcja E32Main() Ona jest punktem wyjścia do dalszego działania. Następnie wywoływana jest też funkcja NewApplication() Tworzy ona w pamięci komórki obiekt aplikacji W następnej kolejności jest wywoływany obiekt dokumentu z funkcją CreateDocumentL(), a ta funkcja z kolei wywoła jego konstruktor NewL(). W tym czasie też z obiektu dokumentu zostaje wywołana funkcja CreateAppUiL() odpowiadająca utworzenie obiektu interfejsu użytkownika w funkcji CreateAppUiL() a ta funkcja z kolei też wywoła jego konstruktor. Ten konstruktor sprawia, że wszystkie dane odpowiadającej za interfejs aplikacji są w pamięci zerowane. a w następnej kolejności jest tworzony obiekt kontainera. Kontainer (inaczej zwany widokiem) to taki zasobnik danych gdzie programista będzie mógł sterować kontrolkami i oknami aplikacji. Natomiast aby narysować na wyświetlaczu komórki musi zostać wywołana funkcja z CCoeControl::ActivateL().
Dusia wysłuchała tego wszystkiego i poczuła się zagubiona
---- Po co tyle powiązań?
----.Dusia wynika to z troski architektów o to aby proces tworzenia aplikacji był bardzo ogólny i abstrakcyjny. A do programisty należy wykorzystanie tych ogólnych i abstrakcyjnych mechanizmów w swojej aplikacji. Architekci sposób działania aplikacji Symbiana opisaliby trochę inaczej. Aplikacja jest miejscem z którego program zaczyna działanie, jest elementem wykorzystującym framework aplikacji Symbiana, którą dla komórek z platformą S60 jest nazywany AVKON. Dla aplikacji podstawą jest klasa CAknApplication. Dokument tworzy kontroler aplikacji. Dla dokumentu podstawą jest klasa CAknDocument. Kontroler odpowiada za interfejs użytkownika a także z interakcją użytkownika i za wyświetlaniem na wyświetlaczu przez serwer okienek. Dla kontrolera podstawą jest klasa CAknAppUi Model to już zestaw klas odpowiedzialnych za logikę aplikacji. Model jest tworzony przez dokument, natomiast kontroler i widok mają dostęp do danych modelu. Widok odpowiada za prezentację danych w modelu. Dla widoku podstawą jest klasa CAknView.
---- Czy to coś jak mi kiedyś tłumaczyłeś, że łatwiej jest budować na czymś abstrakcyjnym, aby lepiej opisać rzeczywistość ?
---- To tak jak z interfejsem Rzecz tworzyło się klasę abstrakcyjna Dom implementującą składowe tego interfejsu. Na bazie tej klasy można było utworzyć klasę Budynek czy klasę Budowla. To są jak idee, które przekształcają się w byty. Jak klasa z biblioteki jest wywoływana to tworzy się w pamięci urządzenia informację wypełniona konkretnymi danymi. Tak powstają z klas obiekty
---- Michale zauważyłeś jak potrafisz odwracać kota ogonem od programowania skaczesz w filozofię, a znając Ciebie to pewnie zaraz wymyślisz teologię z informatyki --- zaśmiała się.
Michał puścił okiem, dał do zrozumienia, że z tym się zgodził. Uruchomił nowy projekt w Carbide.c++ Wybrał S60 3rd Edition i zaznaczył S60 3rd Edition GUI Application. Projekt nazwał Okienko. Następnie wybrał tworzony kod będzie uruchomiony pod emulatorem. W Basic Setting zamiast tekstu "Hello World" wpisał "Nasze okienko". Kliknął Finish. Carbide.c++ wygenerowało kod. Uruchomił emulator.
--- Dusiu chcę ci pokazać kod.
--- Michale innym razem. Powiedz mi czy w Polsce są ludzie, którzy piszą programy na Symbiana?
--- Oczywiście , największy udział w popularyzowaniu wiedzy w Polsce o programowaniu na Symbianie w C++ mają Sebastian Wieczorek (pracuje w firmie Softline), który pod nickiem sebax publikował kurs programowania w "Internetowej gazetce KF". Twórca serwisu Symbian4u Rafał Misiarek też zaczął pisać o programowaniu na Symbiana. Sporo osób programujących w Symbianie pracuje w firmie BLStream czy w Psiloc, bądź w eLeader. Innym przykładem jest tworzenie oprogramowania w Symbianie w Polsce przez zagraniczne firmy np: Mobica Ltd
--- To tych ludzi jednak jest trochę.
--- Problem jest w tym, że trudno jest ich zatrzymać w kraju (a szczególnie kobiety - programistki Justyna Żmuda i Joanna Trochnimiuk).
Dusia zadowolona ze Michał stał sie pogodniejszy. Pocałowała go w policzek. .

wtorek, 22 stycznia 2008

Deszczowy dzień

Michał wrócił z pracy z mokrą różą. Dusia jak zwykle siedziała na fotelu i czytała swoje książki o feng-shui. Michał usiadł u jej stóp. Dusia pogłaskała po głowie.
--- Pewnie jesteś głodny? --- spytała się z troską
--- Owszem trochę, wolę tym razem napić się herbaty z cytryną.
Dusia popatrzyła się na Michała, wyglądał przygnębiająco. Domyśliła się, że go boli głowa. Nachyliła się nad nim i pocałowała go w czoło. Michał poczuł jej oddech. Wstał. Razem poszli do kuchni. Dusia naparzyła herbaty, a Michał pokroił cytrynę. Z dużymi kubkami gorącej herbaty siedli przy stole.
--- Zawsze mnie imponujesz Michale. A co dzisiaj było w pracy?
--- Rozmowa podsumowująca rok. Właściwie nabrałem dystansu do pracy. Ważne, że staram się robić dobrze, chociaż czasami zdarzają się odstępstwa.
--- Cieszę się Michale. A jakie są wnioski z rozmowy?
--- Że będę starał się rozwijać swoją rolę jako konsultant i ewangelizator technologii firmy Adobe. A w firmie dalej będę testerem, bo też robię dobrze.
--- A z czego widzisz swoją rolę konsultanta?
--- Dusiu, otóż myślę, że firmie Adobe najlepiej wyjdzie współpraca z integratorami wielkich systemów informatycznych w dużych korporacjach i w administracji publicznej.
Michał zamyślił się, patrzył się na jej warkocz, którym Dusia bawiła się. Napił się herbaty.
--- Coś się stało? --- przerwała ciszę.
--- Nic, myślałem o procesach biznesowych w firmach, a także o procesach decyzyjnych w administracji. Cały klucz do sukcesu firmy Adobe może być w dostarczeniu narzędzi dla obsługi procesów biznesowych w firmach i jak do obsługi działalności administracji publicznej. konkurencja jest na tym rynku jest duża, ale Adobe ma asa w rękawie.
--- Co to takiego ? - spytała się zaciekawiona
--- Integracja narzędzi wspomagających modelowanie tych procesów z aplikacjami obsługującymi elektroniczny obieg dokumentacji. Dusiu wyobraź sobie że trzeba przesyłać podpisane podpisem elektronicznym faktury do klientów. W jakim formacie wysłać fakturę? Najlepiej wygenerować PDF z podpisem elektronicznym firmy. Taki dokument może zostać odczytany przez klienta w programie Adobe Reader. Albo pomyśl sobie o wielkim systemie finansowym, gdzie bez przerwy zmieniają sie reguły, bo politycy zawsze coś tam zmieniają w przepisach. Potrzebny jest taki system informatyczny w którym bardzo szybko dostosuje się do tych reguł. Cała rzecz jest w tym, że jedna zmiana formularza podatkowego niesie skutki dla całego systemu informatycznym, zarówno na poziomie interfejsu użytkownika i jak na poziomie bazy danych.
---- Czy to oznacza, że trzeba od nowa wydrukować miliony formularzy podatkowych?
---- Dusiu obawiam się ze dojdzie do sytuacji w której "komputery" będą decydować o tym jakie przepisy prawne ustanawiać. W tym momencie gdyby uwzględnić szybkość zmian to rzeczywiście trzeba by na bieżąco drukować miliony formularzy Wtedy potrzebny jest taki system który na bieżąco obliczał stan finansów publicznych. A na podstawie tego komputery będą przekazywać dane. Rzecz w tym że te dane muszą być tak przedstawione aby decydenci podejmowali decyzje o wydawaniu środków publicznych. Najprościej to polegało by na tym, że w jednym oknie widzi sie wykresy, a pod spodem wypełniony formularz dzięki któremu decydent kliknie w przycisk "Zatwierdź".
---- Ale ktoś to musi zrobić żeby wyświetlały sie wykresy i formularze?
---- Właśnie tutaj chodzi o automatyzację generowania wykresów, tabelek czy formularzy elektronicznych. W praktyce wygląda podobnie to do pracy z programami do rysowania i do programowania w jednym. Jest w tym sporo klikania i rysowania schematów. Potem to wszystko jest zamieniane w kod przez system i generowane są formularze, wykresy czy same aplikacje, które ułatwiają pracę decydentom. Mało ludzi wie, że w PDF można wypełnić formularz i zapisać dane w tym PDF i wysłać taki dokument do urzędu czy do firmy pocztą elektroniczną czy przez stronę internetową.
---- To jest naprawdę ciekawe.
Dusia zasłuchana rozpinała koszulę.
---- Firma Adobe dostarcza taki pakiet narzędzi do tego celu o nazwie Adobe LiveCycle ES. Są dwie edycje Adobe LiveCycle ES Business Transformation Edition i Adobe LiveCycle ES Data Capture Edition Te wersje różnią się skalą zastosowania. Każda z tych edycji zawiera narzędzie dla programistów Adobe LiveCycle Workbench ES (jest wersja trial do ściągnięcia) Jest w tym też narzędzie LiveCycle Designer ES (jest też wersja trial), które służy generowania formularzy PDF ze odpowiednio przygotowanych schematów (dokumentów *.XML i *.XSD). Natomiast do tworzenia aplikacji z wykresami czy tabelami uaktualnianymi na żywo oraz komunikacji pomiędzy tymi aplikacjami służą głownie LiveCycle Data Services ES (jest wersja do ściągnięcia) jako serwer aplikacyjny, który zarządza danymi oraz Adobe Flex Builder do tworzenia wykresów czy tabel w plikach *.SWF W najbliższej przyszłości będzie można tworzyć dodatkowo aplikacje komputerowe oparte na silniku Adobe Integrated Runtime wykorzystujące technologię Ajax Data Services
Michał wypił herbatę. Dusia pochwaliła się nowym biustonoszem i siadła mu na kolanach.

poniedziałek, 21 stycznia 2008

Studenckie czasy....

Michał zastał Dusię, która czytała książki z zarządzania służbą zdrowia. Przypomniał sobie, że na studiach teraz zbliża się sesja egzaminacyjna. Patrzył na nią, jak czyta książki.
--- Dusia jak wolno czytasz te książki? --- spytał się z ironią w głosie.
--- A co Ci do tego co czytam... - odburknęła nie odrywając wzroku od książek - gdybyś wiedział jakie mamy prawo w Polsce to nie ponaglałbyś mnie.
--- Wiem Dusiu jakie mamy prawo w Polsce, to też przyczyna że na studiach prawniczych nie ma specjalizacji legislatorskiej, a po studiach aplikacji legislatorskiej. Nic nie poradzę na to.  A zresztą fajnie byłoby, gdyby każdy student zechciał się nauczyć programowania.
--- Nawet na resocjalizacji? --- spytała się z sarkazmem
--- Nawet bo programowanie jest w dzisiejszych czasach bardzo potrzebną. Nauka programowania uczy precyzji myślenia. Cała sztuka polega na tym że masz ograniczony zestaw poleceń i musisz z nimi zrobić to czego chcesz od maszyny. Programowanie to nie tylko kodowanie jak większość ludzi kojarzy. To też okazja do nauczenia się pracy zespołowej,. A tego niestety na studiach nie uczą dość dobrze.
--- Nudzisz mnie Michale, mam na głowie ważniejsze sprawy niż programowanie.
--- Nie bez powodu Dusia o tym wspominam, wystarczy że studenci zgłoszą się po oprogramowanie do nauki. Niechaj zakładają koła samokształceniowe i razem niech poznają technologie informatyczne tak konspiracyjnie jak ich rówieśnicy studiowali w czasie wojny w tajnych kompletach po mieszkaniach.
--- Aleś palnął porównanie do czasów wojny. Teraz mam inną młodzież , mało ambitną, uczącą się bez pasji na kilku kierunkach naraz, niekiedy nawet pracującą po nocach żeby zarobić na utrzymanie. Najgorsze jest to co nazwałabym słowami hiszpańskiego filozofa, że "umysły przeciętne i banalne, wiedząc o swej przeciętności i banalności, mają czelność domagać się prawa do bycia przeciętnymi i banalnymi i do narzucania tych cech wszystkim innym"
--- No cóż mnie chodziło o to, żeby studenci poczuli się wyjątkowi. Na przykład taką okazją jest uczenie się języka programowania. Firma Adobe nawet proponuje studentom za darmo edukacyjne wersje swojego oprogramowania. Wystarczy żeby weszli na tą stronę i poprosili dla siebie edukacyjna wersję programu Adobe Flex Builder. Czy to taki problem poprosić o to?
Dusia wstała, podeszła  do Michała  i pocałowała go  w usta, uśmiechnęła się życzliwie
--- Nie proszą, bo czują, że za tą prośbą idzie pewnego rodzaju zobowiązanie i dług wdzięczności wobec firmy.
W milczeniu usiedli razem trzymając się za ręce.

niedziela, 20 stycznia 2008

Cudowny zapach

Dusia weszła po cichu ukradkiem, żeby Michał jej nie zauważył. Michał siedział przy komputerze jak zwykle nocną porą. Dusia dotknęła jego ramienia. Michał wystraszył się. Dusia zaśmiała sie głośno.
--- Michale nad czym tak długo siedzisz?
--- Nad pisaniem bibliotek w języku programowania C dla innego języka programowania Pythona.
--- A co w tym jest takiego interesującego?
--- To, że można rozszerzać możliwości programowania w języku Python. Na przykład zechcesz prowadzić korespondencję za pomocą zaszyfrowanych SMS. Jedyną rzeczą jest to, że musisz znać hasło. Tym hasłem może być data.
--- No już wiem co chcesz napisać, ale dlaczego w języku programowania Python a nie C++?
--- Już Ci tłumaczę Dusia. Otóż programiści wolą mieć dużo małych programików, które robią jakaś funkcjonalność dobrze. Powiedzmy, że ktoś napisał bibliotekę czyli taki programik, który będzie można dołączać do innych programów. Mnie zainteresowała biblioteka do szyfrowania. Ale w Symbianie C++ nie ma takiej biblioteki publicznie dostępnej. Firma Nokia zaproponowała, żeby programiści napisali taką bibliotekę P.I.P.S. dla Symbiana. Jest ona dostępna w tym miejscu. Teraz gdy mam do napisania dzięki tej bibliotece szyfrowanie SMS to muszę wybrać w jakim języku programowania to napiszę. Obecnie na komórki można programować w takich językach programowania jak C++, Java, Python czy Open C, Postanowiłem napisać kod w Open C i w Pythonie.
Dusia zasłuchana patrzyła ze zdziwieniem
--- Ale z Ciebie Michale poliglota! Jak można się nauczyć tylu języków programowania?
--- Z pasja można sie nauczyć. Pokaże Ci kod do wysyłania SMS dobrze?
Dusia wyjęła z kieszeni szlafroka lakier i zaczęła lakierować paznokcie u stóp. Michał napisał kod w Pythonie:

messaging.sms_send(rcp, txt)

a potem w Symbian C++

RSendAs srv;
if ( srv.Connect() == KErrNone )
{
CleanupClosePushL(srv);
RSendAsMessage msg;
CleanupClosePushL(msg);
msg.CreateL(srv, KSenduiMtmSmsUid);
msg.AddRecipientL(recipient,RSendAsMessage::ESendAsRecipientTo);
msg.SetBodyTextL(message);
msg.SendMessageAndCloseL();
CleanupStack::Pop(&msg);
}
else
{
CleanupClosePushL(srv);
}


--- Ale kod w Pythonie to jedna linijka kodu!? Kod w C++ jest taki skomplikowany. Po co mnie uczysz C++?
--- Żebyś była wyjątkowa!!! Właśnie chciałem Ci pokazać dlaczego powstają nowe języki programowania. Programiści piszą je przede wszystkim, żeby ułatwić innym i sobie pisanie kodu aplikacji. Ale to niesie pewne niebezpieczeństwo. Ci, którzy zaczynają naukę od takich języków jak Java czy Python zapominają często o tym jak wygląda działanie programu w systemie operacyjnym Symbian, ponieważ te języki programowania upraszczają pewne działania. Na przykład w tych językach programowania programista nie musi zajmować się zarządzaniem danych w pamięci, natomiast programując w C++ musi o tym pamiętać.
--- Ale ja nadal nie wiem po co mam poznawać C++ skoro są łatwiejsze języki programowania niż C++ na Symbianie?
--- Dusiu, warto poświecić więcej czasu na zrozumienie takich rzeczy jak zarządzanie pamięcią czy obsługa sytuacji krytycznych w Symbianie, albo nauczyć się pisać kod według określonych konwencji nazewniczych. Dzięki temu masz większy dostęp do możliwości tego systemu operacyjnego. Aplikacje pisane w C++ powinny działać szybciej. Znajomość C++ pozwoli Tobie na rozszerzanie możliwości tych języków, które są napisane w C++.
--- Czy to oznacza, że inne języki programowania są zależne od C++?
--- W praktyce tak. Na przykład kod źródłowy języków takich jak Python jest napisany w C++. To pozwala innym programistom rozszerzać możliwości takiego języka. Ja właśnie zajmuję się dzisiaj takim przypadkiem. Chcę napisać rozszerzenie do języka programowania Python S60 do szyfrowania. Interfejs graficzny użytkownika aplikacji ma być napisany w języku programowania Python, bo zajmuje mniej kodu niż jego odpowiednik w C++. Dusiu, pokażę Ci kawałek kodu z pliku nagłówkowego s60_crypt.h
Dusia wróciła do lakierowania paznokci. Michał napisał kod:

#ifndef S60_CRYPT_H
#define S60_CRYPT_H

extern void
s60_encrypt(int len,
char* in,
char* out,
char* password,
int passlen);

extern void
s60_decrypt(int len,
char* in,
char* out,
char* password,
int passlen);

#endif

--- Michale przypomnij mi do czego są używane pliki nagłówkowe.
--- Informują kompilatora jakie funkcje mają zawierać. W tym przypadku mamy dwie funkcje. Jedna służy do szyfrowania a druga do odszyfrowania.
--- I to wszystko?
--- Nie Dusiu, trzeba jeszcze napisać jak ma działać takie szyfrowanie i odszyfrowywanie,
Dusia wyszła z pokoju. Michał napisał kod w Open C w pliku s60crypt.c

#include <stddef.h>
#include <openssl/rc4.h>
#include <openssl/md5.h>

void s60_encrypt(int len, unsigned char* in, unsigned char* out, unsigned char* password, int passlen)
{
unsigned char digest[MD5_DIGEST_LENGTH];
RC4_KEY key;

MD5(password, passlen, digest);

RC4_set_key(&key, MD5_DIGEST_LENGTH, digest);
RC4(&key, len, in, out);
}

void s60_decrypt(int len, unsigned char* in, unsigned char* out, unsigned char* password, int passlen)
{
unsigned char digest[MD5_DIGEST_LENGTH];
RC4_KEY key;

MD5(password, passlen, digest);

RC4_set_key(&key, MD5_DIGEST_LENGTH, digest);
RC4(&key, len, in, out);
}

Dusia wróciła z flakonikiem. Popatrzyła na Michała zalotnie.
-- No widzę kod, ale nic nie rozumiem z tego. Chyba pożegnam się z marzeniami o programowaniu. Przerażasz mnie.
-- Już po kilku dniach panikujesz - uśmiechnął się - najpierw trzeba sie oswoić z tym okropnym wyglądem potwora. Obserwuj potwora pomimo, że nic nie rozumiesz. Potraktuj lekcje programowania jak naukę czytania chińskich znaków (ideogramów).
--- Nie dam sie nabrać Michale! - odpowiedziała wkurzona
--- Dusiu został nam jeszcze jeden plik źródłowy dla tego rozszerzenia. To jest plik wraper.c
Dusia patrzyła bezradna na Michała. Chciała żeby ją sie zajął. Postawiła swoje stopy na jego kolanach. Rozluźniła szlafrok i odsłoniła swoje wdzięki. Michał pisał kod i od czasu do czasu uśmiechał się zalotnie. Dusia zaczęła rozpinać jego koszulę. Z kobiecej przekory przeszkadzała mu. Michał napisał taki kod w języku Open C

#include <Python.h>
#include "s60crypt.h"

static PyObject* pycrypt_encrypt(PyObject* self, PyObject* args)
{
char* data;
int datalen;
char* pw;
int pwlen;
char* out;
PyObject* result;

if (!PyArg_ParseTuple(args, "s#s#", &data, &datalen, &pw, &pwlen))
return NULL;

out = (char*)malloc(datalen);
if (!out)
return PyErr_NoMemory();

s60_encrypt(datalen, data, out, pw, pwlen);

result = Py_BuildValue("s#", out, datalen);
free(out);
if (!result)
return PyErr_NoMemory();

return result;
}

static PyObject* pycrypt_decrypt(PyObject* self, PyObject* args)
{
char* data;
int datalen;
char* pw;
int pwlen;
char* out;
PyObject* result;

if (!PyArg_ParseTuple(args, "s#s#", &data, &datalen, &pw, &pwlen))
return NULL;

out = (char*)malloc(datalen);
if (!out)
return PyErr_NoMemory();

s60_decrypt(datalen, data, out, pw, pwlen);

result = Py_BuildValue("s#", out, datalen);
free(out);
if (!result)
return PyErr_NoMemory();

return result;
}


static const PyMethodDef PyCryptMethods[] =
{
{"encrypt", pycrypt_encrypt, METH_VARARGS},
{"decrypt", pycrypt_decrypt, METH_VARARGS},
{NULL, NULL}
};

DL_EXPORT(void) initpycrypt(void)
{
(void)Py_InitModule("pycrypt", PyCryptMethods);
}

--- Dusiu nie łaskocz mnie.
Dusia zrzuciła szlafrok i otworzyła flakonik. Cudowny zapach fiołków uniósł sie w pokoju.
-- Michale namaść mnie olejkiem. Chcę być królową programistów.
Postawiła flakonik i zaczęła namaszczać Michała po jego plecach. Michał zaśmiał się głośno.
--- A ja mam być królem programistów? Nie wiem, czy do tego się nadaję. Teraz pozostaje mi plik napisać plik dla kompilatora, żeby wiedział co ma skompilować. Taki plik to pycrypt.mmp i wygląda tak:

TARGET pycrypt.dll
TARGETTYPE dll
UID 0x00000000 0x0CBDC9B9
EXPORTUNFROZEN

CAPABILITY NetworkServices LocalServices ReadUserData WriteUserData UserEnvironment

NOSTRICTDEF

USERINCLUDE ..\include
SYSTEMINCLUDE \epoc32\include
SYSTEMINCLUDE \epoc32\include\stdapis
SYSTEMINCLUDE \epoc32\include\python

SOURCEPATH ..\src

SOURCE s60crypt.c
SOURCE wrapper.c

LIBRARY libc.lib
LIBRARY euser.lib
LIBRARY libcrypt.lib
LIBRARY libcrypto.lib
LIBRARY python222.lib

I jeszcze trzeba dodać plik tworzący bibliotekę bld.inf Kompilator musi wiedzieć na jaką architekturę procesorów ma skompilować ten kod

PRJ_PLATFORMS
ARMV5 ARMV5_ABIV2 GCCE WINSCW

PRJ_MMPFILES
pycrypt.mmp

--- Dusiu zostało mi skompilować
--- Michale nie teraz. Teraz jesteś mój i ja chcę, żebyś mnie popieścił.
Michał zapisał pracę i klęknął przy niej. Michał nalał na dłoń olejku i namaścił jej stopy. Jej ciało przenikał cudowny zapach.

środa, 16 stycznia 2008

Cicha herbaciarnia

Dzień zapowiadał sie na słoneczny. Michał wysłał SMS do Dusi: "Zapraszam do herbaciarni". Dusia odpisała: "Dziękuję. Świetny pomysł". Michał czekał w herbaciarni na Dusię przy zarezerwowanym stoliku. Przeglądał Google Readers w komórce. Nagle usłyszał otwierane drzwi. Weszła Dusia. Ich spojrzenia sprawiły uśmiech na ich twarzach. Michał zdjął jej czarne palto i powiesił na wieszaku. Podał jej rękę i skłonił się całując jej dłoń. Ona siadła do stolika. Michał spoglądał na jej szyję z pięknymi koralowymi koralami. Biała koszula uwidaczniała jej piersi. Na ramionach miała czarny żakiet. Przyszła kelnerka i spytała sie jaką podać herbatę. Dusia zaczęła przeglądać menu, Michał powiedział
-- Dusia wybierzmy sobie jakaś herbatę której jeszcze nie piliśmy.
-- Dobry pomysł. Jaką proponujesz?
-- Herbatę ulung 乌龙茶. (czyta się lóng chá)
--- A co to takiego?
--- Herbata z pełnych sfermentowanych liści herbacianych.- ze znawstwem odrzekł
Kelnerka odeszła z zamówieniem. Dusia patrzyła na Michała z satysfakcją
-- Czyżbyś znał chiński Michale? - spytała się zaskoczona
-- Interesuję się sinologią Dusiu , wiec mam wiedzę o języku chińskim.
--- To powiedz mi coś po chińsku
--- 我爱你 (czyta się: ài )
--- Ładnie brzmi. A co to oznacza?
--- Ja kocham Cię -- odpowiedział zalotnie
Dusia zaśmiała się
--- Ja też - odrzekła
Zapadła cisza. Michał położył swoja dłoń na jej dłoni. Dusia położyła drugą dłoń na jego dłoni a Michał następną. Tak patrzyli na siebie w oczy.
Przyszła kelnerka i przyniosła im herbatę w filiżankach.
-- Podobno miałeś być na konferencji w Warszawie Michale.
-- Owszem, ale w pracy miałem do testowania sklep internetowy wiec bardziej wolałem zająć sie tym.
-- A o czym to miała być za konferencja?
-- Technologiom internetowym firmy Adobe, o których między innymi piszę swój blog. Co raz więcej ludzi się tym interesuje więc często czytają mojego bloga.
-- Ale nie pojechałeś jednak.
--- Nie przejmuj się Dusia, najważniejsze jest to, że są ludzie którzy mają wizję co chcą robić z daną technologią i jak chcą ją popularyzować.
--- Możesz mi to wyjaśnić.?
--- Nie jest problemem wymyślić jakiś język programowania czy technologię. Adobe wymyśliło i wprowadziło nowe technologie takie jak Flex 3, Adobe Integrated Runtime czy nowsze wersje Flash Playera i sporo pomniejszych inicjatyw. Najważniejsze jest to, żeby ludzie ją znali i używali. To tego potrzebny jest dobry marketing. Dobry marketing w przypadku programistów czy zaawansowanych użytkowników polega na tym, że dostarcza się dobrą dokumentację i sporo artykułów o tym jak używać danej technologii i jakie problemy ona rozwiązuje. Bardzo duży wpływ na popularyzację technologii mają blogi. A ponieważ jest duża konkurencja w tym rynku to zawsze dąży się do popularyzacji technologii na rynkach lokalnych. Inaczej pisząc trzeba dotrzeć z informacja o tych technologiach w jeżyku którego używają zaawansowani użytkownicy. i programiści. Dlatego ważne są inicjatywy takie jak Adobe Tour, gdzie pracownicy firmy Adobe jeżdżą po świecie i opowiadają o tych technologiach firmy Adobe dla internetu.
--- Ale wspominałeś mi o konkurencji. Co to za konkurencja?
--- Dusia duze i małe firmy zawsze starają się o to żeby ich produkt był używany. Ale jak przekonać ich? Prezentując swoje produkty na tle konkurencji.
Na przykład firma Microsoft konkuruje z firmą Adobe na polu technologii z bogatym interfejsem użytkownika. Ale są też takie firmy które chcą dostarczyć produkty pozwalajace wykorzystać potencjał technologii internetowych firmy Adobe dostarczając innych narzędzi. Tymi przykładem są platforma Neko wraz z nowym językiem programowania HaXe czy technologia OpenLaszlo.
--- A co ty Michale chciałeś powiedzieć na tej konferencji?
--- Że warto robić razem serwis dla kogoś po polsku, kto chciałby poznać i nauczyć się tych technologii internetowych firmy Adobe. Tym miejscem będzie serwis FlexTech.pl W tym serwisie głownie będę koncentrował się takim kursie tej technologii Adobe Flex i AIR oraz zamieszczał informacje ze świata dotyczące tych technologii. Moja wizja serwisu skłąda sie za następujących działów: "Newsy" będą zawierać nowości ze świata RIA czyli technologii z bogatym interfejsem użytkownika, głownie to maja być 3 - 4 zdaniowe informacje o jakmś tam wydarzeniu. "Biblioteka" będzie zawierała biblioteki w języku programowania ActionScript 3 oraz ciekawe przykłady z kodem źródłowym Adobe Flex 2/3 oraz AIR. "Kurs" miałby opierać się na tłumaczeniu materiałów z Getting Started Flex 3 and AIR. "Społeczność" to mają być wizytówki ludzi w Polsce zainteresowanych tymi technologiami oraz "Biznes" zawierający wizytówki firm (agencji reklamowych i ich klientów) którzy korzystają z tych technologii
--- Ambitne przedsięwzięcie. Jestem dumna z tego i zawsze Cię będę wspierać - powiedziała wzruszona
Michał zauważył łzy z radości w jej oczach....

poniedziałek, 14 stycznia 2008

Refleksje przy kolacji ze świecami.

Michał pogodził się z tym, że nie będzie na konferencji Adobe AIR Tour w Warszawie. Przywitał się z Dusią namiętnym pocałunkiem, wręczył jej różę. Dusia uwielbia dostawać róże. Zawsze trzyma 13 róż w wazoniku na stole w kuchni, a potem je suszy  w piwnicy.  Dusia  uwielbia  chodzić na szpilkach i eksponować swoje nogi w zmysłowych samonośnych pończochach z koronkowym  wykończeniem. Na sobie zamiast sukienki miała finezyjny fartuszek. Michał przebrał się i poszedł do kuchni. Dusia akurat zmywała naczynia, Michał objął ją i pocałował w szyję. Dusia poczuła się podniecona.
-- Mogę dokończyć zmywanie ?
-- Oczywiście ja natomiast nakryję stół.
Michał zmywał, a Dusia ze swoja gracją ustawiała zastawę na stole. Potem przyniosła z kuchni garnek z flakami i nalała je na talerz. Wzięła chleb i pokroiła go cienko i ułożyła w koszyczku. Michał skończył zmywanie. Popatrzył na nią z uśmiechem
-- Czegoś mi brakuje na tym stole - powiedział zalotnie
-- Czego?
-- Czego co pasowałoby do nas w taki wieczór...
-- Czyżby?
Michał wyszedł i po chwili wrócił ze świecznikiem i świecami. Postawił je, Dusia zapaliła śwece. Michał zgasił światło i razem siedli do stołu. Blask promieni padał na ich twarze. Michał powiedział
--Zauważyłem że  technologie szybko się rozwijają a to wpływa na ich rozwój i  jest spełnianiem potrzeb ludzi.  
--- Bo potrzeba jest matką wynalazków - odpowiedziała
-- Myślę Dusiu że raczej o tym że to technologia wywiera taki duży wpływ że kreuje to jakie mamy mieć potrzeby.
Zapadła cisza. słychać było stukot łyżki o talerz żupy
-- Michale a jak widzisz siebie w takim świecie. Nie rozumiem dlaczego programiści używają tylu różnych języków i powstają nowe.
-- Dusiu dzisiejszy świat jest jak burza wokół Ciebie a Ty jesteś spokojna bo nie przejmujesz się tą burzą tylko uważasz jak idziesz po skalnej ścieżce nad przepaścią. Języki programowania są do siebie bardzo podobne w gramatyce, różnią się sposobem pisania i tym do czego zostały stworzone i jakie problemy programiści chcieli rozwiązywać.
-- A jakie problemy maja rozwiązywać programiści?
--- Uniwersalne - roześmiał się i spojrzał na nią a potem na talerz z gorącymi flakami -- a tak poważnie wśród programistów są różne role takie jak architekci, analitycy, koderzy czy testerzy. Każdy z nich ma swoje zadanie do spełnienia w opisywaniu jakiejś rzeczywistości aby można było ja zrozumieć i wykorzystać ją
--- A kim są architekci, bo mi się zawsze kojarzyli z projektantami domów.
--- Architekt programista ma na zadanie zaprojektować system informatyczny. Takim systemem może być na przykład sklep internetowy czy program do rejestracji pacjentów w przychodni. W tym pomaga mu analityk który zbiera informacje jak to ma działać i przekazuje te informacje do architekta i testera. Architekt uwzględnia to i nanosi to na projekt. Tester natomiast sprawdza jakie okoliczności trzeba jeszcze uwzględniać w funkcjonalnościach. Architekt podejmuje jedna z kluczowych decyzji jakiego języka programowania będzie trzeba użyć do budowy systemu. Razem z analitykiem przy wsparciu testera przygotowują specyfikację czyli dokument będący jakby planem budowy. Potem wyznaczają zadania koderom co mają napisać w danym języku programowania, tester w tym czasie ma przygotować procedury do testowania czy wszystko działa tak jak trzeba. Koderzy piszą kod a tester i analityk na bieżąco śledzą postępy pracy i uwagi przesyłają do architekta. On podejmuje decyzje o tym co można zmienić w czasie tworzenia systemu.
Znowu zapadła cisza. Szybko kończyli jeść zupę.
--- Czy o tym czy to przyniesie  zyski decyduje też analityk? -- spytała się z nutką ciekawości
--- Dusiu stroną finansową czy marketingową zajmują się inne osoby. Ale często jest tak że kierownictwo firmy decyduje o budżecie projektu a architekt musi tak to zaprojektować żeby pieniędzy starczyło na zbudowanie takiego systemu.
---To bardzo źle, że kierownictwo decyduje o budżecie bo jak to w życiu chcieliby dużo, ale tanim kosztem - powiedziała ze smutkiem
--- Dusiu właśnie kończy się to w większości katastrofą - firma plajtuje, a klient musi szukać kolejnego kto zechce to poprawiać projekt systemu
--- To klient też traci zamiast zyskać
Dusia odeszła od stołu, zabrała talerze. Podeszła do kuchni włączyła gaz pod patelnią. Podgrzała kotlety schabowe z frytkami. Zapach  smalcu  rozniósł  się  po kuchni. nałożyła sobie  na talerz surówkę z marchwi i podała Michałowi talerz. Sama siadła na wznak na krześle.
--- A co to ma wspólnego z językami programowania? - spytała się patrząc w jego twarz
--- A bardzo banalny - popularność jakiegoś języka programowania wpływa na to że sporo ludzi go chce poznać i nauczyć się. Firmy mają też pewność że łatwiej im będzie znaleźć pracowników - programistów. Trzeba też Dusiu wziąć pod uwagę, że najwięcej kosztuje nie stworzenie systemu ale jego utrzymanie.
--- Dlaczego? - spytała się przekornie
--- Bo to są koszty  administrowania  - czyli  pilnowania  systemu żeby działał i dalsza jego rozbudowa. Bardzo często jest tak, że nad administrowaniem i rozbudowa pracują już inni ludzie niż Ci którzy to tworzyli. A to zajmuje wiele czasu. Dlatego dobrze jest jak istnieje dokumentacja czy zbiór dobrych praktyk. Gorzej jest jak koder dostanie sam kod bez dokumentacji.
Michał jadł ze smakiem schabowego a Dusia pałaszowała surówkę. Często  dokarmiała  Michała  swoją surówką wkładała mu do ust swój widelec. Śmiała się głośno z tego. Jak zjedli  patrzyli  w oczy  nawzajem  widząc blask  płomieni świec w oczach. Dusia wstała i pocałowała Michała w czoło czule. Michał poczuł jak jej serce bije jak szalone. Michał powoli rozpiął jej fartuszek.  Dusia delikatnie sięgneła po banana obrała go i pokazała czego chce. Michał klęknał przed nią i pocałował jej kolana, aż Dusia zgasiła świece...

niedziela, 13 stycznia 2008

Tajemniczy kod

Michał usłyszał stukot szpilek Dusi. Dusia przyniosła kubek gorącej herbaty. Michał spojrzał na nią. Miała na sobie czarną satynową suknię przepasaną czarnym pasem. Długi jasny warkocz spoczywał na jej piersiach. Spuścił wzrok z niej. Dusia postawiła kubek obok monitora. I usiadła obok Michała
--- Przyniosłam Ci herbatę
--- Dziękuję bardzo miła Dusiu.
Michał przypomniał że że obiecał jej że będzie uczył ją programowania. Uruchomił Carbide.c++
--- Dusiu możemy zacząć?
--- Dobrze, niech Ci będzie, aczkolwiek wolałabym poplotkować z Tobą.
--- O Dodzie? - zdziwiony -- Myślę że ciekawsze były czasy przed wojną, gdy było coś takiego jak burleska.
--- Michał wiem, że lubisz historię, ale nie wiem co to burleska.
--- Teraz to można by nazwać erotyczną sztuką teatralną.
Dusia  zarumieniła  się.
--- Miałeś mi wyjaśnić ten kod który robił to  niebieskie  okienko.
--- Świetnie Dusiu. już Ci wyjaśniam
Michał otworzył projekt Witaj
--- Dusiu Carbide.c++ wygenerował nam kod w języku programowania  C++ ,  ale przy tej okazji  wygenerował nam  sporo  plików.  Najważniejsze  to są  pliki  Witaj.h, Witaj.cpp   oraz pliki specyficzne dla Symbiana bld.inf, Witaj.mmp, ABLD.bat, Witaj_EKA2.pkg
--- Widzę że jest sporo tych plików. A do czego one są?
--- W języku C++ są tak zwane pliki nagłówkowe. One  zawierają  deklaracje  co  będzie  w  kodzie  źródłowym. Właściwy kod w języku C++ jest w pliku Witaj.cpp. Ale zanim kod zostanie zamieniony w postać zrozumiałą dla systemu operacyjnego Symbian trzeba przygotować plik bld.inf Ten plik zawiera informacje o tym jak zamienić kod w jeżyku C++ do postaci pliku wykonywalnego najczęściej  z  rozszerzeniem  *.exe Plik bld.inf wymaga też pliku konfiguracyjnego który poinformuje z jakich bibliotek Symbiana na korzystać nasz programik. Tym plikiem jest plik Witaj.mmp. Dwa ostatne pliki są potrzebne Carbide.c++ żeby uruchomił emulator czy przygotował pliki *.sis do wysłania na komórkę.
--- Ale mnie to przytłacza Michale
--- Na początku każdego to przytłacza Dusiu. W miarę upływu czasu wszystko stanie się zrozumiałe.
--- Wierze jednak że mnie tego nauczysz Michale.
--- Na początku nauki trzymaj się zasady "Wierzę w to aby zrozumieć" a jak się nauczysz będziesz mogła hołdować zasadzie "Trzeba zrozumieć aby uwierzyć" powiedział z filozoficzną nutka w głosie
--- Ty na wszystko masz odpowiedz - odpowiedziała z zazdrością
--- Więc zobaczymy co mamy w pliku Witaj.h


#ifndef __WITAJ_H__
#define __WITAJ_H__


//  Include Files

#include <e32base.h>


//  Function Prototypes

GLDEF_C TInt E32Main();


#endif  // __WITAJ_H__


--- Wygląda tajemniczo Michale
--- Tak naprawdę zadaniem plików nagłówkowych jest informowanie co ma być w kodzie i jakie inne pliki nagłówkowe maja być załadowane. Program który czyta pliki nagłówkowe *.h  i kod źródłowy w plikach *.cpp aby zamienić to na postać zrozumiałą nazywa się kompilatorem. Program Carbide.c++ wie jak wywołać kompilator więc w tej chwili wiedza na temat tego jak działa kompilator nie jest konieczna. W tym kodzie najważniejsze dla nas jest funkcja GLDEF_C TInt E32Main(); do której kod zobaczymy w pliku Witaj.cpp. To informuje że program jak zacznie pracę to musi naipierw wywołać tą funkcję E32Main();
--- A co to jest funkcja?
--- Dla ciebie wystarczy żebyś wiedziała że to jest takie polecenie które ma wykonać program. Programista może tworzyć wiele róznych funkcji w programie czyli tak naprawdę tworzy różnego rodzaju polecenia. Niektóre polecenia są jakby narzucone nam i my musimy stosować takie nazwy funkcji
--- Czyli w tym pliku deklarujemy polecenia jakie będziemy uzywać?
--- Brawo że załapałaś zauważ ze mamy też #include <e32base.h> to oznacza że będziemy też używać funkcji i poleceń jakie są w pliku e32base.h.
--- A gdzie jest ten plik?
--- Dusiu nie martw się Carbide.c++ wie gdzie ten plik jest. A tak poważnie on jest na dysku E:\Symbian\9.1\S60_3rd_MR\Epoc32\include\e32base.h.
--- Michale napij się mojej herbatki - rzekła zalotnie     
Michał z uśmiechem pije herbatkę z kubka. Po wypiciu pocałował Dusię w policzek.
--- Dziękuję za smaczną herbatkę malinową.
--- A teraz mi pokażesz ten drugi kod?
--- Plik Witaj.cpp będzie jeszcze bardziej tajemniczy, więc omówimy go kawałku oto pierwszy kawałek - tajemniczo spojrzał na Dusię

//  Include Files 

#include "Witaj.h"
#include <e32base.h>
#include <e32std.h>
#include <e32cons.h>            // Console


//  Constants

_LIT(KTextConsoleTitle, "Console");
_LIT(KTextFailed, " failed, leave code = %d");
_LIT(KTextPressAnyKey, " [press any key]\n");


//  Global Variables

LOCAL_D CConsoleBase* console;  // write all messages to this


--- Rzeczywiście programiści powariowali pisząc coś takiego. Jak to można normalnie czytać? - powiedziała z żalem
--- Nie dziw się Dusiu. Kiedyś kapłani i skrybowie w starożytnym Egipcie umieli pisać i czytać hieroglify. Dzisiaj tylko garstka naukowców. Podobnie jest z programowaniem dzisiaj tylko twórcy systemu Symbian i Ci którzy tworzą oprogramowanie do tego systemu. A miliony ludzi nie zna się na tym, pomimo że używają komórek.
--- Masz rację. Jak to poznam to będę wyjątkowa dzięki Tobie Michale.
--- Jak widzisz kod w Witaj.cpp jest długi ale bardzo charakterystyczny. Najpierw trzeba wskazać pliki nagłówkowe które informują z czego będziemy korzystać. widać w tym też nasz Witaj.h  Potem mamy coś charakterystycznego dla Symbiana sposób w jaki używa sie tekstu. To jest taka funkcja _LIT() jej zadaniem jest przypisywanie zmiennej do jakiegoś ciągu znaków.
--- Co to jest zmienna?
--- Jak sama nazwa wskazuje jest to coś co możesz zmieniać.  ---  roześmiał  się  ---  a tak  poważnie zmienna to jest coś co możesz przechować w pamięci podczas działania programu.
--- No tak mamy wiedzieć jak to się zmienia?
--- Oczywiście   Widzisz coś takiego CConsoleBase* console; , to informuje o tym że załadowałaś do pamięci zmienną o nazwie console która zawiera w sobie polecena typu CConsoleBase. Typ CConsoleBase to jest informacja dla programu z czym zmienną console ma kojarzyć.
--- Och czy te typy są podejrzane? - spytała się przestraszona
--- Nie bój się Dusiu. My programiści mówimy typ w kontekście  takim  jakiego  rodzaju  ma być informacja.
--- To już jestem spokojna o te typy.
--- Cieszę się, pokażę Ci dalszy kod.

//  Local Functions

LOCAL_C void MainL()
    {
    //
    // add your program code here, example code below
    //
    console->Write(_L("Hello, world!\n"));
    }


LOCAL_C void DoStartL()
    {
    // Create active scheduler (to run active objects)
    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
    CleanupStack::PushL(scheduler);
    CActiveScheduler::Install(scheduler);

    MainL();

    // Delete active scheduler
    CleanupStack::PopAndDestroy(scheduler);
    }

--- Ojejku wszystko jest po angielsku. Na dodatek ten angielski jest bardzo dziwny.
--- Mamy tutaj 2 funkcje pierwsza z nich MainL() pisze na konsoli Hello, world!. Druga  funkcja DoStartL() napierw uruchamia zasoby komórki które są potrzebne, wykonuje pierwsza funkcję a potem zwalnia zasoby.
--- Niewiele z tego zrozumiałam Michale
--- Komórki tak naprawdę  zaprojektowano tak  żeby  były  bardzo  oszczędne  i do  programisty  należy to jak będzie zarządzał pamięcią komórki. Stąd jest wielka troska żeby optymalnie zarządzać pamięcią i zasobami. Dlatego na moment wykonania napisu angażuje sie zasoby komórki a jak napisze to się zwalnia.
--- Jakie to mogą być zasoby?
--- w komórce masz przeważnie mało pamięci i wolny procesor a także to że trzeba szanować prąd z komórki. W tej sytuacji ważne jest to żeby szybko zwalniać zasoby które w danej chwili są nie potrzebne.
--- Trochę już mnie to nuży Michale ile jeszcze zostało? -- spytała się z nutką rezygnacji
--- Została jeszcze ta główna  funkcja  E32Main()

GLDEF_C TInt E32Main()
    {
    // Create cleanup stack
    __UHEAP_MARK;
    CTrapCleanup* cleanup = CTrapCleanup::New();

    // Create output console
    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(KConsFullScreen,KConsFullScreen)));
    if (createError)
        return createError;

    // Run application code inside TRAP harness, wait keypress when terminated
    TRAPD(mainError, DoStartL());
    if (mainError)
        console->Printf(KTextFailed, mainError);
    console->Printf(KTextPressAnyKey);
    console->Getch();
   
    delete console;
    delete cleanup;
    __UHEAP_MARKEND;
    return KErrNone;
    }

---- Michale to już ponad moje siły.
--- Dusiu powiem Ci tyle że ta funkcja ma na celu otwarcie konsoli, wywołanie funkcji DoStartL() i obsługę błędów w przypadku gdyby coś nieoczekiwanego działo np: zabrakło prądu w baterii. Ale to tylko tyle na dziś
Dusia popatrzyła na kod i posmutniała
--- Sporo  nauki przede mną Michale  jestem na to wkurzona
--- Tak trzeba się nauczyć języka  programowania  C++ pod kątem Symbiana. - odpowiedział spokojnym głosem
--- Wiem - łzy pociekły z jej oczu
Michał objął ją ramieniem, co Dusię uspokoiło. Dusia  zdjęła  pas, rozpuściła włosy. i  wstała. Michał objął jej biodra Dusia pociągnęła suknię do góry aż przeszedł dreszcz podniecenia.

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.