Otaczają nas zewsząd. Na pierwszy rzut oka niewidoczne, ukryte

Wielkość: px
Rozpocząć pokaz od strony:

Download "Otaczają nas zewsząd. Na pierwszy rzut oka niewidoczne, ukryte"

Transkrypt

1

2

3

4 OD REDAKCJI Otaczają nas zewsząd. Na pierwszy rzut oka niewidoczne, ukryte w kieszeniach mijających nas przechodniów, zamknięte w teczkach bądź neseserach. Cały czas aktywne, tworzą gigantyczną, ruchomą sieć, która oplata nasz świat. Dzięki nim, możemy porozumiewać się niemalże bez ograniczeń i mieć nieprzerwany dostęp do informacji czy rozrywki... Czy to wstęp do powieści typu science-fiction? Oczywiście, że nie: łatwo odgadnąć, iż mowa tu o nowoczesnych urządzeniach mobilnych. Kiedy myślimy o przytoczonych powyżej faktach, dochodzimy do wniosku, iż przyszło nam żyć w niesamowitych czasach rozkwitu Ery Informacji. W przeciągu ostatnich 30 lat byliśmy świadkami szalonego boomu komputerów osobistych, rewolucji internetowej, zaś ostatnio lawinowego rozwoju urządzeń przenośnych. Jednakże kolejne lata obserwacji kolejnych nowinek technologicznych utwierdzają nas w przekonaniu, iż dziedzina Informatyki, a szczególnie działka wytwarzania oprogramowania - jest ciągle tym smolistym grzęzawiskiem nie do pokonania, o którym pisał w 1975 roku Frederick P. Brooks Jr. w swoim bestsellerze p.t. Mityczny osobomiesiąc. Odpowiedź na pytanie 'dlaczego?' jest prosta: czynnik ludzki. Po prostu nie da się raz zaprojektować i stworzyć miliona kopii idealnego programisty tak jak to się z robi z procesorami czy innymi układami elektronicznymi. Kolejne pokolenia inżynierów oprogramowania trzeba żmudnie i nieustannie edukować i wychowywać ciągle od nowa i od nowa. Jednakże, o dziwo cały czas znajdują się chętni do tego aby brnąć we wspomniane wcześniej grzęzawisko, uczyć się i ujarzmiać niezbadane dotąd obszary informatycznej wiedzy oraz praktyki. Dlaczego tak się dzieje? Może dlatego, że programowanie daje Człowiekowi niespotykane dotąd możliwości kreowania otaczającej go rzeczywistości, co z kolei niesie niesamowitą satysfakcję. Może to właśnie ten entuzjazm napędzany poprzez kolejne pokolenia informatyków sprawia, iż ta młoda dziedzina wiedzy rozwija się tak dynamicznie... Drogi Czytelniku, mamy zaszczyt oddać do Twoich rąk pierwszy, pilotażowy numer SDJ: Biblia Programisty Programowanie Urządzeń Mobilnych. Nie bez przyczyny tematem przewodnim tej nowej serii zostało programowanie urządzeń mobilnych. Na kartach pisma, które trzymasz w ręku znajdziesz rozwiązania szeregu problemów, z którymi tu i teraz zmagają się programiści, ujarzmiający nowinki technologiczne ukryte w naszych kieszeniach. Prezentowany materiał został dobrany przekrojowo, tak abyś miał okazję przekonać się o różnorodności rozwiązań mobilnych. Wierzymy, iż niezależnie od tego czy jesteś doświadczonym programistą czy też świeżo upieczonym studentem informatyki, przedstawione tu informacji pokażą Ci nowe kierunki i pomogą pewniej poruszać się po technologicznych meandrach programowania nowoczesnych telefonów komórkowych. Mamy również nadzieję, iż przedstawione artykuły będą dla Ciebie bodźcem do zgłębiania nowych zagadnień i poszerzania swojej wiedzy. Na koniec chcieliśmy podkreślić, iż Redakcji SDJ bardzo zależy na zapoznaniu się z Twoją opinię o niniejszym numerze, zarówno w odniesieniu do prezentowanej treści jak i formy. Jeśli zechciałbyś podzielić się Twoimi uwagami w tym temacie, to zapraszamy do kontaktu. Łukasz Łopuszański Redaktor naczelny Rafał Kocisz Redaktor prowadzący 4 SDJ Extra 34 Biblia

5

6 SDJ Extra 34 Biblia SPIS TREŚCI 10 Opis DVD PROGRAMOWANIE WINDOWS MOBILE 12 RIL API w sercu telefonu Przemysław Mogaj Radio Interface Layer (RIL) jest kluczowym elementem odpowiadającym za komunikacje pomiędzy systemem Windows Mobile a siecią GSM. W środowisku programistów WM panuje opinia, że API do obsługi RIL jest niejasne i trudne w użyciu. W artykule postaramy się pokazać, jak powiada przysłowie nie taki diabeł straszny jak go malują. 24 RAPI Współpraca komputerów desktop z Windows CE i Mobile Daniel Stoiński Czasami podłączamy urządzenie mobilne wyposażone w Windows CE/Mobile do komputera stacjonarnego, aby skopiować pliki, połączyć się z Internetem czy wygodnie wysłać z klawiatury kilka SMS-ów. W świecie mobilnych urządzeń Microsoftu te i wiele innych ciekawych funkcji dostępnych jest za pośrednictwem biblioteki RAPI. Nie tylko dla MS Windows. 40 Rozpocznij Przygodę z Windows Mobile Zobacz, jak to się robi w technologii Microsoft Daniel Dudek Firma Microsoft od wielu lat wspiera programistów aplikacji mobilnych, dając im coraz nowsze i lepsze narzędzia. Z roku na rok programiści mają dostęp do większej ilości zasobów urządzeń mobilnych, a prostota, z jaką można tworzyć takowe aplikacje w chwili obecnej, nie odstrasza już nowych adeptów tej sztuki. 46 MS SQL SERVER CE 3.5 Jak wykorzystać w swojej aplikacji silnik SQL Servera CE 3.5. Łukasz Strąk Dzięki nowej wersji SQL Servera CE możesz zarządzać danymi poprzez zapytania bez konieczności instalacji dodatkowych usług i bez dostępu do Internetu. Ułatwia to dystrybucję oprogramowania. W artykule znajdziesz informacje, które pozwolą Ci rozpocząć pisanie aplikacji wykorzystujących SQL Server CE. 56 Moc pod kontrolą Efektywne zarządzanie zasilaniem w aplikacjach dla systemu Windows Mobile Marian Witkowski Odwiecznym problemem i wyzwaniem dla konstruktorów urządzeń mobilnych była możliwość ich długiej pracy z wykorzysta- 6 SDJ Extra 34 Biblia

7 Miesięcznik Software Developer s Journal (12 numerów w roku) jest wydawany przez Software Press Sp. z o.o. SK niem zasilania bateryjnego. Cel ten został w dużej mierze osiągnięty, ale mimo wszystko źle napisana aplikacja potrafi zmusić użytkownika do częstszego używania ładowarki. Dyrektor wydawniczy: Anna Adamczyk Redaktor naczelny: Łukasz Łopuszański lukasz.lopuszanski@software.com.pl Redaktor prowadzący: Rafał Kocisz rafal.kocisz@software.com.pl PROGRAMOWANIE SYMBIAN OS 62 Obsługa akcelerometru na platformie Series60 Wykorzystaj w pełni możliwości telefonu komórkowego! Rafał Kocisz, Wojciech Gasek Akcelerometr, bądź inaczej sensor ruchu, od stosunkowo niedawna jest wykorzystywany jako rozszerzenie technologicznych możliwości nowoczesnych telefonów komórkowych. Artykuł pokazuje, jak oprogramować akcelerometr w aplikacjach Symbian OS, działających na platformie S60, oraz jak w praktyce wykorzystać potencjał tego urządzenia. 78 SDL na Symbianie Cztery porty Bartosz Taudul W jaki sposób można wykorzystać jedną z najlepszych i najszerzej wykorzystywanych bibliotek ułatwiających tworzenie gier? Czy jest dostępna jej implementacja na Symbiana? Na co należy zwrócić szczególną uwagę podczas jej użytkowania? Odpowiedzi na wszystkie te pytania (i nie tylko) znajdują się w artykule. PROGRAMOWANIE ANDROID 90 Android Market bliżej dewelopera Stworzenie aplikacji to dopiero początek. Dowiedz się, jak ją sprzedać! Adam Skrzyszewski Głównym zmartwieniem deweloperów planujących sprzedaż swoich programów jest dotarcie do odpowiedniej grupy odbiorców. Android Market, jako oficjalna platforma dystrybucyjna, zakłada nieograniczony dostęp do wszystkich posiadaczy urządzeń z oprogramowaniem Google. Czy zastanawiałeś się, jak wykorzystać ten ogromny potencjał? 98 Android na przykładzie: geotagging zdjęć Praktyczne wykorzystanie najciekawszych funkcji mobilnej platformy firmy Google Piotr Buła Android to nowa, otwarta platforma mobilna od Google. W artykule przedstawiono ciekawsze jej możliwości, na przykładzie aplikacji umożliwiającej geotagging zdjęć wykonanych za pomocą telefonu komórkowego opartego na tej platformie. Korekta: Tomasz Łopuszański Projekt okładki: Agnieszka Marchocka Monika Grotkowska Skład i łamanie: Monika Grotkowska monika.grotkowska@software.com.pl Tomasz Kostro tomasz.kostro@software.com.pl Dział produkcji i kolportażu: Alina Stebakow alina.stebakow@software.com.pl Kierownik produkcji: Andrzej Kuca andrzej.kuca@software.com.pl Nakład: egz. Adres korespondencyjny: Software Press Sp. z o.o. SK, ul. Bokserska 1, Warszawa, Polska tel , fax cooperation@software.com.pl Dział reklamy: adv@software.com.pl Obsługa prenumeraty: EuroPress Polska software@europress.pl Dołączoną do magazynu płytę DVD przetestowano programem AntiVirenKit firmy G DATA Software Sp. z o.o. Redakcja dokłada wszelkich starań, by publikowane w piśmie i na towarzyszących mu nośnikach informacje i programy były poprawne, jednakże nie bierze odpowiedzialności za efekty wykorzystania ich; nie gwarantuje także poprawnego działania programów shareware, freeware i public domain. Uszkodzone podczas wysyłki płyty wymienia redakcja. Wszystkie znaki firmowe zawarte w piśmie są własności odpowiednich firm. Zostały użyte wyłącznie w celach informacyjnych. Redakcja używa systemu automatycznego składu Osoby zainteresowane współpracą prosimy o kontakt: cooperation@software.com.pl Druk: ArtDruk Wysokość nakładu obejmuje również dodruki. Redakcja nie udziela pomocy technicznej w instalowaniu i użytkowaniu programów zamieszczonych na płycie DVD dostarczonej razem z pismem. Sprzedaż aktualnych lub archiwalnych numerów pisma po innej cenie niż wydrukowana na okładce bez zgody wydawcy jest działaniem na jego szkodę i skutkuje odpowiedzialnością sądową. 7

8 SDJ Extra 34 Biblia 118 Google Android Programowanie z wykorzystaniem Google Maps Igor Kruk W artykule JME MIDlet Przelicznik walut na podstawie kursów NBP opisuje architekturę JME oraz prezentuje sposób, w jaki można rozpocząć przygodę z programowaniem z wykorzystaniem tej technologii. Artykuł poświęcony jest platformie Android, na której można tworzyć zaawansowane aplikacje m.in. z wykorzystaniem Google Maps. 124 Google Android Programowanie interfejsu użytkownika pod Android OS Tomasz Milczarek Artykuł jest wprowadzeniem do programowania interfejsu użytkownika (UI User Interface) na platformie Google Android. Omawia podstawowe komponenty interfejsu i sposoby rozmieszczania ich na ekranie. Przedstawia również tworzenie formularzy, przenoszenie danych między formularzami oraz interakcję między różnymi ekranami użytkownika. PROGRAMOWANIE JAVAME 148 JME na przykładzie Przelicznik walut na podstawie kursów NBP Igor Kruk Jeszcze kilka lat temu obsługa technologii Java była informacją, która miała zachęcić do zakupu telefonu komórkowego. Przez tych kilka lat nastąpił znaczny rozwój komórek i choć obecnie większość z nich posiada własny system operacyjny i nie służą już tylko do wykonywania rozmów i przesyłania wiadomości, to technologia JME jest nadal popularna. 154 Klasyczna platformówka na komórkę Piszemy grę bazującą na platformie Java Micro Edition Cezariusz Klonkowski Tworzenie każdej gry, nawet najprostszej, łączy w sobie wiele wyzwań, z którymi musi uporać się programista. Tworzenie aplikacji dla platformy mobilnej niesie dodatkowe problemy. Jednak satysfakcja z napisania własnej, nawet bardzo prostej gry na telefon komórkowy, jest bezcenna! Jeśli chciałbyś poczuć taką satysfakcję, to przeczytaj ten artykuł. PROGRAMOWANIE IPHONE OS 132 Poznajemy iphone SDK Pierwsze kroki Tomasz Dubki Nikt nie zaprzeczy, że jednym z najpopularniejszych urządzeń mobilnych ostatnich 12 miesięcy jest iphone. Doskonały wygląd zewnętrzny, przejrzysty graficzny interfejs użytkownika oraz bogata funkcjonalność to tylko niektóre jego cechy. W niniejszym artykule przedstawimy to urządzenie z punktu widzenia programisty. 140 Objective-C kontra Java i C++ Wprowadzenie do języka Rafał Kocisz Java i C++ panują niepodzielnie w działce technologii mobilnych. Język Objective-C jest stosunkowo nowym graczem na tym rynku, stoi jednak za nim potężna marketingowa siła platformy Apple iphone/ itouch. Niniejszy artykuł zawiera szybkie wprowadzenie do Objective-C oraz porównanie jego możliwoci z językami Java i C Testowanie aplikacji na platformie JME Zbieranie informacji debugowych w ograniczonym środowisku uruchomieniowym Marcin Maciejewski ROZWIĄZANIA MOBILNE 172 Lotus Notes Traveler Andrzej Olsztyński W tym roku, zgodnie z danymi IBM, po raz pierwszy w historii, więcej ludzi na świecie będzie miało telefon komórkowy niż stacjonarny. Wiele produktów IBM jest dostępnych na platformach mobilnych. Ostatnim ważnym wydarzeniem w tym zakresie było wprowadzenie oprogramowania Lotus Notes Domino, czyli pakietu IBM do pracy grupowej na iphone. 8 SDJ Extra 34 Biblia

9 178 Stary software nowa platforma Kamil Kowalski, Artur Chruściel W jednym z numerów SDJ (2/2009) przybliżyliśmy profil prac zespołu zajmującego się rozwojem oprogramowania dla radiotelefonów systemu TETRA w krakowskim centrum Motoroli. Dziś przyjrzymy się problemom, przed którymi stanęliśmy w ostatnich latach w związku z migracją na nowe platformy sprzętowe. 182 Oracle SPATIAL Opis podstawowych funkcjonalności opcji Oracle SPATIAL dedykowanej dla systemów GIS Tomasz Murtaś Poprzez opcję SPATIAL baza danych zyskuje możliwość zarządzania danymi o charakterze przestrzennym. To zupełnie nowy wymiar pozwalający jeszcze precyzyjniej odwzorowywać rzeczywistość, modelować dane i analizować zależności. 186 Wzorce projektowe w Java Card Leszek Siwik, Krzysztof Lewandowski, Adam Woś Tworzenie oprogramowania wymaga starannego projektu i dużej dokładności. Platforma Java Card do tej pory pozostawała swego rodzaju skansenem, gdzie szeroko akceptowany był kod, który w innych obszarach byłby absolutnie nieakceptowalny. Z pewnością warto więc poświęcić czas na zapoznanie się z dobrymi praktykami projektowania i programowania 206 Flash Lite Grzegorz Trubiłowicz, Mateusz Pietrek, Karol Bednarz Flash Lite pomimo kilku lat na rynkach całego świata nadal pozostaje nieodkrytym środowiskiem. Jest to jednak rozwiązanie dające ogromne możliwości, dlatego warto się mu bliżej przyjrzeć. FELIETONY 214 Raport większości Arkadiusz Merta Technologie mobilne otwierają nowe możliwości być może jeszcze bardziej rewolucyjne niż zjawisko Internetu. W odróżnieniu od Sieci tort jest dzielony na innych zasadach, i to przez znacznie większą ilość graczy. 217 Ruch jest wszystkim [cel niczym] Arkadiusz Merta Co napędza rozwój technologi mobilnych? Czy to nasze potrzeby, czy potrzeba zwiększenia naszej efektywności. 192 Open GL ES 1.x Fakty i mity Krystian Kostecki Programowanie aplikacji na urządzenia przenośne jest fascynującym zajęciem. Dodanie im trzeciego wymiaru sprawia jeszcze większą satysfakcję. Czy tworzenie efektownej, ale i wydajnej grafiki na te malutkie urządzenia nie jest abstrakcją lub mitem? Jak wykorzystać moc krzemu, który mieści się w dłoni? Czy można wierzyć standardom? Oceńcie sami. 9

10 Opis CD Kursy WINDOWS MOBILE Kurs podstaw tworzenia aplikacji na Windows Mobile (kurs w języku angielskim). Szkolenie zostało podzielone na 7 działów: wprowadzenie emulatory podstawy programowania aplikacji okienkowych zaawansowane aplikacje Windows Forms wykorzystanie baz danych bezpieczeństwo programowanie mobilnych aplikacji internetowych W każdym z działów możemy wybrać jaki sposób podania tych samych zagadnień jest dla nas najwygodniejszy dokument, laboratoria hands-on-lab, webcast z prezentacją czy screencast z kodem. Mobile development is growing fast, and Windows Mobile is at the forefront with over 18 million phones shipped last year and many more cutting-edge devices on the way. Visual Studio developers have tremendous opportunities in this space. Why? Developing for a Windows Mobile phone leverages your existing coding experience and takes it to new heights. In this track, we ll go through the fundamentals of building mobile applications. You ll learn how to set up Visual Studio with the latest SDK and device emulators, and you ll see how to build, deploy and debug applications. We ll also explore AJAX capabilities that offer the richness of the desktop for mobile devices. Level 1: Mobile Development Introduction Level 2: Device Emulators Level 3: Mobile Windows Forms Development Level 4: Advanced Mobile Windows Forms Development Level 5: SQL Server CE Introduction Level 6: Security and Deployment Level 7: Mobile Web Development Google Android Programowanie interfejsu użytkownika pod Android OS Screencast jest wprowadzeniem do programowania interfejsu użytkownika (UI User Interface) na platformie Google Android. Omawia podstawowe komponenty interfejsu i sposoby rozmieszczania ich na ekranie. Przedstawia również tworzenie formularzy, przenoszenie danych między formularzami oraz interakcję między różnymi ekranami użytkownika Google Android charakteryzuje się bogatym zestawem komponentów pozwalającym na realizację nawet najbardziej skomplikowanych interfejsów. W przypadku developerów niezbyt zadowolonych ze standardowej biblioteki, zawsze pozostaje możliwość rozszerzania istniejących już komponentów. Z racji tego, że Android tworzony jest przez firmę Google, istnieje łatwy dostęp do takich komponentów jak MapView czy WebView, umożliwiających korzystanie w tworzonych aplikacjach z Google Maps oraz pozwalających na łatwe przeglądanie zawartości Internetu. To znacznie poszerza krąg pomysłów na aplikacje, już na starcie pozwala uczynić je bardziej ciekawymi i konkurencyjnymi. Można sądzić, że powyższe zalety (prostota tworzenia interfejsów, duży wybór komponentów, łatwe wykorzystanie Google Maps i Internetu) spowodują, że Android OS umocni swoją pozycję w świecie platform programistycznych na urządzenia mobilne. Dzięki temu tutorialowi dowiesz się, jak poprawnie rozmieścić komponenty komponenty użytkownika na ekranie, jak tworzyć poszczególne widgety, jak ekrany użytkownika współpracują ze sobą. Pierwsza część screencasta stanowi omówienie idei stojącej za powstaniem Google Android OS, podstawowych zasad, które przyjęli twórcy tego systemu oraz przedstawiona jest jego architektura. Omówione zostały typowe kontrolki i ich zastosowanie. Druga część screencasta przedstawia przykład tworzonej aplikacji realizującej wykresy biorytmów. Tworzenie aplikacji zostało pokazane w następujących krokach: tworzenie nowego projektu w środowisku Eclipse ADT (Android Development Toolkit); konfiguracja projektu; tworzenie podstawowej klasy akcji; tworzenie layoutu; definiowanie widoków w plikach XML; oprogramowywanie kontrolek; oprogramowywanie zdarzeń w Google Android; interakcja pomiędzy kontrolkami a klasą typu Activity; stworzenie przejścia między dwoma ekranami użytkownika; przesyłanie danych między ekranami; stworzenie własnego widoku. Narzędzia Windows Mobile 6.5 Developer Toolkit Wydana na początku czerwca 2009 dokumentacja, przykładowy kod, nagłówki, biblioteki oraz emulatory do najnowszej wersji systemu Windows Mobile 6.5. Dostępne są dwie wersje w zależności od tego czy interesuje nas pisanie aplikacji dla systemu Windows Mobile Professional czy Standard. 10 SDJ Extra 34 Biblia

11 Opis CD Toolkit wymaga instalacji Windows Mobile 6 SDK (do pobrania bezpłatnie ze stron Microsoftu). Aplikacje Consumer Solution Accelerator Consumer Solution Accelerator jest wzorcową aplikacją dla Windows Mobile napisaną w językach C# i C++, w oparciu o.net Compact Framework 3.5. Aplikacja ma na celu ułatwić użytkownikowi dotarcie na spotkanie prezentuje mapy wykorzystując nawigację GPS, szacuje czas przejazdu, informuje uczestników spotkania w razie ewentualnego spóźnienia. Wraz z kodem aplikacji czytelnicy otrzymują zestaw dokumentów opisujących krok po kroku poszczególne etapy tworzenia danej aplikacji. Od wprowadzenia, przez dobór architektury aż po dodawanie do projektu kolejnych elementów kodu. Czytelnicy mogą sami stworzyć aplikacje na podstawie dokumentów lub uczyć się przez czytanie gotowego kodu. Materiały dodatkowe do artykułów Redakcja nie udziela pomocy technicznej w instalowaniu i użytkowaniu programów zamieszczonych na płytach CD-ROM dostarczonych razem z pismem. Jeśli nie możesz odczytać zawartości płyty CD, a nie jest ona uszkodzona mechanicznie, sprawdź ją na co najmniej dwóch napędach CD. W razie problemów z płytą, prosimy pisać pod adres: cd@software.com.pl 11

12 Programowanie Windows Mobile RIL API w sercu telefonu Radio Interface Layer (RIL) jest kluczowym elementem odpowiadającym za komunikacje pomiędzy systemem Windows Mobile a siecią GSM. W środowisku programistów WM panuje opinia, że API do obsługi RIL jest niejasne i trudne w użyciu. W tym artykule postaram się pokazać, że jak powiada przysłowie nie taki diabeł straszny jak go malują. Dowiesz się: Czym jest Radio Interface Layer; Jak używać RIL API; W jaki sposób stworzyć serwis systemowy Windows Mobile; W jaki sposób korzystać z rejestrów systemu Windows Mobile. Poziom trudności Powinieneś wiedzieć: Jak programować w języku C++; Podstawy WINAPI. Pamiętam jakby to było wczoraj: dostałem do analizy kod źródłowy, należało stwierdzić, czy flow programu jest zgodny z przyjętą koncepcją. Kod ani długi, ani krótki, zadanie wydawało się więc proste, i uznałem, że to nagroda za wcześniejszy okres wytężonej pracy... Kilka godzin i kaw, później niebezpiecznie blisko zbliżyłem się do granicy załamania nerwowego, a moje myśli skakały pomiędzy planem zamachu na osobę, która wymyśliła, że wszystko dzieje się asynchronicznie, a rozważaniami na temat sposobów na skrócenie swoich cierpień. Tak właśnie wyglądał mój pierwszy kontakt z RIL'em. Niestety, a może właśnie stety od tamtego czasu nader często przyszło mi pracować w oparciu o wspomniane API. Swoimi doświadczeniami postaram się podzielić w tym artykule, a ponieważ w moim odczuciu najlepiej uczyć się na bazie przykładów, dlatego też, aby zobrazować podstawowe mechanizmy, pokażę Ci drogi czytelniku, jak stworzyć prostą aplikację, która pozwoli na blokowanie połączeń telefonicznych, a dodatkowo wyśle informacyjnego SMS'a do osoby, która próbowała się z Tobą skontaktować. Ale po kolei... Wiem, że najchętniej uruchomiłbyś IDE i zaczął pisać kod, na początek warto jednak powiedzieć słów kilka o tym, czym jest RIL. Pomyśl teraz chwilę o urządzeniach z systemem Windows Mobile można wymienić dwie ich główne linie rozwojowe. Po pierwsze są to urządzenia klasy PDA (ostatnimi czasy na wymarciu), z drugiej zaś strony urządzenia, które można sklasyfikować jako tzw. Smartphony. Jaka jest pomiędzy nimi różnica? Oczywiście te drugie pozwalają na szeroko rozumianą komunikację pomiędzy urządzeniem a siecią GSM/UMTS. I tu na scenę wchodzi właśnie RIL (Radio Interface Layer). Mówiąc o RIL, mamy na myśli pewne warstwy abstrakcji, które oddzielają sprzęt od systemu myślę, że jak najbardziej będzie tu na miejscu porównanie do sieciowego modelu OSI zostało to pokazane na Rysunku 1. Na samym szczycie hierarchii mamy aplikacje wchodzące w bezpośrednią komunikację z użytkownikiem i dostarczające mu funkcjonalność związaną z telefoniczną stroną urządzeń z WM (zauważ, że pod pojęciem OEM nie kryją się tylko aplikacje dostarczane przez producenta telefonu, ale również twoje). Szczebel niżej kryje się tzw. RIL Proxy to właśnie z nim będziesz miał do czynienia, tworząc aplikacje oparte o Radio Interface Layer. Wywołując funkcje wchodzące w skład RIL API, tak naprawdę wysyłasz zapytania do Proxy, w odpowiedzi otrzymując wyniki. RIL Proxy tłumaczy twoje zapytania na odpowiednie polecenia typu DeviceIOControl, i wysyła je do sterownika modemu (radia). Następnie te polecenia tłumaczone są na komendy AT, które wędrują do urządzenia, by tam zostać odpowiednio przetworzone. Taka architektura ma wiele zalet. Po pierwsze wymaga na producentach sprzętu radiowego stworzenie sterowników w taki sposób, aby były kompatybilne z RIL API- (jak już wspomniałem, cała komunikacja w systemie WM jest oparta właśnie o RIL'a). To z kolei pozwala producentom telefonów na wybór szerokiej gamy podzespołów, bez przejmowania się narzutem czasu niezbędnym do wypuszczenia produktu na rynek. Inną zaletą jest fakt asynchroniczności do- RIL: Szybki start Aby tworzyć aplikacje w oparciu o RIL API, musisz mieć dostęp do symboli znajdujących się w pliku RIL.DLL na urządzeniu. Można go uzyskać w sposób dwojaki. Pierwszą drogą jest użycie funkcji LoadLibrary, a następnie zmapowanie potrzebnych symboli. Innym rozwiązaniem jest dołączenie do projektu statycznej biblioteki RIL.LIB oraz załączenie pliku nagłówkowego RIL.H. Ponieważ pliki te nie wchodzą w skład Windows Mobile SDK, konieczne jest zdobycie ich z innych źródeł. Microsoft dołącza je do OEM Adaptation Kit(OAK) zestawu bibliotek i plików nagłówkowych przeznaczonych do współpracy z pakietem Platform Builder. Niezbędne pliki można również pobrać z tej strony: ~itsme/projects/xda/ril.html. Przed kompilacją musisz pamiętać, aby do dodatkowych bibliotek linkera dodać bibliotekę RIL.LIB. 12 SDJ Extra 34 Biblia

13 RIL API w sercu telefonu stępu do sprzętu pozwala to na uniknięcie sytuacji, w której jedna aplikacja zawłaszcza modem, odcinając dostęp do niego pozostałej części systemu. Do 2004 roku RIL API przeznaczone było do wewnętrznego użytku Microsoftu, a nawet po tej dacie Microsoft zalecał, aby używać API takich jak TAPI, SMS API, SIM API... Ostatnio jednak certyfikowany trener Microsoftu stwierdził, że to podejście jest już nieaktualne, i gigant z Redmond poprosił swoich trenerów, aby spopularyzowali bezpośrednie korzystanie z Radio Interface Layer. Jakie może to Tobie, jako programiście, przynieść korzyści? Po pierwsze może się to przyczynić do wzrostu wydajności Twojej aplikacji(wszystkie wspomniane powyżej API są tylko wrapperami na RIL). Po drugie wydaje mi się, że każdy, kto był zmuszony do pracy z chociażby z TAPI, doceni prostotę RIL. Kolejnym argumentem jest to, że przy użyciu jednego API jest się w stanie kontrolować całość telefonicznej strony systemu. Pozwala to zaoszczędzić czas, zostaje bowiem zdjęta z programisty konieczność przyswajania wielu różniących się architekturami metod dostępu do poszczególnych funkcji. Mimo że RIL API zostało upublicznione, to jednak pliki nagłówkowe nie są niestety dołączone do Windows Mobile SDK. Aby dowiedzieć się skąd je zdobyć oraz jak zacząć pracę, spójrz proszę do ramki RIL: Szybki Start. Najtrudniejszy pierwszy krok Spójrzmy na aplikację okiem przysłowiowego Kowalskiego. Przeciętny użytkownik nie jest świadom tego, jak wiele skomplikowanych działań podejmowanych jest za tzw. frontendem dla niego aplikacja jest tożsama z tym, co może zobaczyć na wyświetlaczu. W tym artykule skupię się jednak na tym, co się dzieje w tle programowanie interfejsu użytkownika pozostawiając innym autorom. Aby jednak nie stawiać Cię przed koniecznością ręcznego edytowania rejestrów (dlaczego właśnie rejestrów, niech pozostanie jeszcze przez chwilę tajemnicą), stworzyłem bardzo prostą aplikację, której ekran można zobaczyć na Rysunku 2 (kod aplikacji znajduje się na płycie DVD). Aplikacja ta daleka jest od doskonałości i przewidziana jest do użytku na platformie WM Professional, wydaje mi się jednak, że stanowić będzie dobry starter do dalszych działań. We wstępie określiliśmy mniej więcej, co będzie robić nasza aplikacja. Pora zastanowić się teraz nad znalezieniem odpowiedzi na pytanie jak? na to pytanie odpowiadać będziemy krok po kroku, w myśl zasady po nitce do kłębka. Rejestry systemowe Rozpocznijmy od znalezienia sposobu na zapisywanie konfiguracji naszej aplikacji. Przez konfigurację będziemy tu rozumieć trzy rodzaje informacji. Po pierwsze czy nasza aplikacja powinna być aktualnie aktywna, czy nie? Po drugie czy powinniśmy odrzu- Rysunek 1. Schemat architektury RIL Rysunek 2. Przykładowy interfejs użytkownika Rejestry Typy wartości REG _ SZ łańcuch tekstowy zakończony znakiem końca łańcucha( /0); REG _ EXPAND _ SZ łańcuch tekstowy zakończony znakiem końca łańcucha, zawierający w sobie zmienne środowiskowe(np. %PATH%); REG _ MULTI _ SZ seria łańcuchów tekstowych oddzielonych znakami końca łańcucha i zawierająca, zakończona podwójnym znakiem końca łańcucha; REG _ DWORD 4-bajtowa wartość binarna; REG _ BINARY dowolna wartość binarna; REG _ DWORD _ BIG _ ENDIAN wartość typu DWORD przechowywana w formacie big endian; REG _ DWORD _ LITTLE _ ENDIAN to samo co REG_DWORD; REG _ LINK łącze symboliczne; REG _ NONE wartość nieokreślona; REG _ RESOURCE _ LIST lista zasobów sterownika. 13

14 Programowanie Windows Mobile Listing 1. RegistryHelper.h #ifndef _REGISTRYHELPER_H_ #define _REGISTRYHELPER_H_ #define MAX_BLOCKED_NUM 40 #define MAX_TEXT_LENGTH 256 #define MESSAGE_BUFFER_SIZE 161 #define SOFTWARE_KEY #define MESSAGE_VALUE #define REJECT_ALL_CALLS_VALUE cać wszystkie przychodzące połączenia? Po trzecie jeśli nie mamy odrzucać wszystkich połączeń, to czy są takie numery, które powinniśmy blokować? W ramach konfiguracji musimy również uwzględnić treść wiadomości SMS, która zostanie przesłana do odrzuconego numeru, jak również liczbę numerów, które będziemy blokować(tak dla ułatwienia sobie życia). Zastanówmy się, w jaki sposób taką konfigurację możemy przechowywać? Pierwsze instynktownie nasuwające się rozwiązanie to zapisywanie jej w pliku. Historia zapisywania konfiguracji w plikach ma długą tradycję. Kiedyś aplikacje z PC-towych wersji Windowsa używały do tego celu plików INI. Osobiście uważam, że jeśli chodzi o konfigurację opartą o pliki doskonale sprawdza się format XML, jednak z powodu braku natywnego wsparcia dla tego formatu, ta droga wydaje się zbyt pracochłonna. Na szczęście system Windows Mobile- (podobnie jak i inne systemy z rodziny Windows) dostarcza bardzo przyzwoity system przechowywania konfiguracji są to rejestry systemowe. Rejestry można traktować jako pewien rodzaj bazy danych, zawierającej zbiór kluczy i wartości, przy czym klucze mogą zawierać w sobie zarówno inne klucze, jak i wartości. W ten sposób tworzy się drzewiasta struktura, która w swoich liściach zawiera konkretne wartości, a klucze stanowią ich gałęzie. Od korzenia tego drzewa odchodzą trzy główne pnie: HKEY_LOCAL_MACHINE, HKEY_ CURRENT_USER, oraz HKEY_CLASSES_ROOT. L"\\Software\\SDJ\\CallRejecter" L"Message" L"RejectAllCalls" #define BLOCKED_LIST_VALUE L"BlockedList" #define ACTIVATE_SERVICE_VALUE typedef struct callrejectersettings_tag DWORD dwactivateservice; DWORD dwblockall; DWORD dwblockedcount; TCHAR tcmessage[message_buffer_size]; L"ActivateService" TCHAR tcblockedlist[max_blocked_num][max_text_length]; CALLREJECTERSETTINGS, *LPCALLREJECTERSETTINGS; VOID ConvertToStringsArray(TCHAR lpszoutput[][max_text_length],lptstr lpszinput,lpdword lpdwcount); VOID ConvertToRegMultiSz(LPTSTR lpszoutput,tchar lpszinput[][max_text_length],dword ncount); DWORD CalculateRegMultiSzSize(TCHAR lpszinput[][max_text_length], DWORD ncount); BOOL SetDwordValue(DWORD dwvalue,lptstr lpszkey, LPTSTR lpszvalueid); BOOL SetSzValue(TCHAR lpszvalue[message_buffer_size],lptstr lpszkey, LPTSTR lpszvalueid); BOOL SetMultiSzValue(TCHAR lpszvalue[][max_text_length],dword ncount,lptstr lpszkey,lptstr lpszvalueid); BOOL GetDwordValue(LPDWORD lpdwvalue,lptstr lpszkey,lptstr lpszvalueid); BOOL GetMultiSzValue(TCHAR lpszvalue[][max_text_length],lpdword lpdwcount,lptstr lpszkey,lptstr lpszvalueid); BOOL GetSzValue(TCHAR lpszvalue[message_buffer_size],lptstr lpszkey,lptstr lpszvalueid); BOOL ReadSettings(LPCALLREJECTERSETTINGS lpcrssettings); BOOL SaveSettings(CALLREJECTERSETTINGS crcsettings); #endif Pierwszy przechowuje konfigurację sprzętową oraz ustawienia aplikacji, drugi jak wskazuje nazwa przechowuje dane specyficzne dla użytkownika, a ostatni informacje na temat skojarzeń plików i obiektów OLE. Ważną zaletą rejestrów jest to, że ich zawartość zostaje zachowana po restarcie urządzenia. Oczywiście nie należy umieszczać wartości gdziekolwiek wprowadziłoby to tylko bałagan i utrudniło ewentualne analizy. Zwyczajowo przyjęło się umieszczać konfigurację aplikacji w następującej ścieżce rejestru: HKEY_LOCAL_MACHINE\ Software\Nazwa firmy\nazwa aplikacji. Tak też uczynimy i my. Jako nazwę firmy przyjmiemy SDJ, a jako nazwę aplikacji CallRejecter. Rejestry mogą przechowywać wartości różnego typu, od wartości liczbowych typu DWORD, przez łańcuchy tekstowe, aż po wartości binarnych(uprasza się jednak, aby nie próbować tam wpychać obrazków czy innych plików binarnych). Lista możliwych typów wartości została przedstawiona w ramce Rejestry typy wartości. Należy w tym miejscu jeszcze wspomnieć o kilku zasadach, którymi powinno się kierować, dodając do rejestru własne klucze i wartości (ma to znaczący wpływ na wydajność dostępu do rejestrów): należy sprawić, by struktura zagnieżdżonych kluczy była tak płytka, jak to tylko możliwe; zamiast zagnieżdżonych kluczy, jeśli to tylko możliwe, należy używać wartości; jedna wartość powinna przechowywać tak wiele informacji, jak to tylko możliwe(np. jeśli będziemy posiadać wartości dotyczące czasu i daty warto rozważyć połączenie ich w jedną wartość. Samo dostarczenie odpowiednio sformatowanej struktury, pozwalającej na grupowanie różnych informacji, na niewiele by się zdało, gdyby nie funkcje pozwalające operować na rejestrach. Do podstawowych operacji wystarczy używać czterech podstawowych funkcji: RegCreateKeyEx, RegQueryValueEx. RegSetValueEx, RegCloseKey. Pierwsza z nich tworzy klucz lub, jeśli ten istnieje otwiera go. Aby używać dwóch kolejnych funkcji (odpowiednio: odczyt i zapis wartości), należy podać uchwyt do klucza zwrócony przez pierwszą funkcję. Po zakończeniu operacji na kluczu należy zamknąć uchwyt do niego przy użyciu ostatniej z funkcji. Oczywiście zbiór funkcji służących operacjom na rejestrach jest obszerniejszy(patrz odnośnik w ramce W Sieci). Tutaj wyjaśniono jedynie te najczęściej stosowane. 14 SDJ Extra 34 Biblia

15 RIL API w sercu telefonu Listing 2. RegistryHelper.cpp (Wycinek) #include "stdafx.h" #include <windows.h> #include "RegistryHelper.h" BOOL ReadSettings(LPCALLREJECTERSETTINGS lpcrssettings) memset(lpcrssettings,0,sizeof(callrejectersettings)); if (!GetDwordValue(&(lpcrsSettings->dwActivateService),SO FTWARE_KEY,ACTIVATE_SERVICE_VALUE)) return FALSE; if (!GetDwordValue(&(lpcrsSettings->dwBlockAll),SOFTWARE_ KEY,REJECT_ALL_CALLS_VALUE)) return FALSE; if (!GetSzValue(lpcrsSettings->tcMessage,SOFTWARE_ KEY,MESSAGE_VALUE)) return FALSE; if (!GetMultiSzValue(lpcrsSettings->tcBlockedList,&(lpcr ssettings->dwblockedcount),software_ KEY,BLOCKED_LIST_VALUE)) return FALSE; return TRUE; BOOL SaveSettings(CALLREJECTERSETTINGS crssettings) if(!setdwordvalue(crssettings.dwblockall,software_ KEY,REJECT_ALL_CALLS_VALUE)) return FALSE; if(!setdwordvalue(crssettings.dwactivateservice,software _KEY,ACTIVATE_SERVICE_VALUE)) return FALSE; if(!setszvalue(crssettings.tcmessage,software_ KEY,MESSAGE_VALUE)) return FALSE; if(!setmultiszvalue(crssettings.tcblockedlist,crssettings.dwblockedcount,software_key,blocked_ LIST_VALUE)) return FALSE; return TRUE; BOOL GetDwordValue(LPDWORD lpdwvalue,lptstr lpszkey,lptstr lpszvalueid) BOOL bresult = FALSE; HKEY hkey; DWORD dwdisposition; DWORD dwtype; DWORD dwsize; DWORD dwrejectallcalls; if(error_success == RegCreateKeyEx(HKEY_LOCAL_MACHINE, lpszkey,0, NULL, 0, 0, NULL, &hkey, &dwdisposition)) dwtype = 0; dwsize = 0; if (ERROR_SUCCESS == RegQueryValueEx(hkey, lpszvalueid, 0, &dwtype, NULL, &dwsize)) if ((REG_DWORD == dwtype)&&(dwsize>0)) dwrejectallcalls=0; if (ERROR_SUCCESS == RegQueryValueEx(hkey, lpszvalueid, 0, &dwtype, reinterpret_cast<lpbyte>(&dwrejectall Calls), &dwsize)) *lpdwvalue=dwrejectallcalls; bresult = TRUE; RegCloseKey(hkey); return bresult; BOOL SetDwordValue(DWORD dwvalue,lptstr lpszkey, LPTSTR lpszvalueid) BOOL bresult = FALSE; HKEY hkey; DWORD dwdisposition; DWORD dwtype; DWORD dwsize; DWORD dwrejectallcalls; if(error_success == RegCreateKeyEx(HKEY_LOCAL_MACHINE, lpszkey, 0, NULL, 0, 0, NULL, &hkey, &dwdisposition)) dwtype = REG_DWORD; dwrejectallcalls=dwvalue; dwsize = sizeof(dword); if (ERROR_SUCCESS == RegSetValueEx(hkey, lpszvalueid, 0, dwtype, reinterpret_cast<lpbyte>(& dwrejectallcalls), dwsize)) bresult=true; RegCloseKey(hkey); return bresult; 15

16 Programowanie Windows Mobile Na Listingach 1 i 2 przedstawiony został fragment kodu wrappera, który posłuży nam do zapisywania/odczytywania ustawień naszej aplikacji. Kod na listingu drugim jest niekompletny, przedstawione zostały jedynie funkcje związane z odczytem/ zapisem wartości typu REG_DWORD(przez analogie łatwo jest dopisać funkcje dla pozostałych typów wartości). Dodatkowo umieszczone na Listingu 2 zostały funkcje czytające/zapisujące całość naszych ustawień do/z struktury typu CALLREJECTERSETTINGS(zdefiniowanej na Listingu 1). Prześledźmy krok po kroku operacje odczytu(funkcja GetDwordValue) i zapisu(funkcja SetDwordValue) umieszczone na Listingu 2. Rozpocznijmy od tej drugiej. W pierwszym kroku staramy się otworzyć interesujący nas klucz: RegCreateKeyEx(HKEY_LOCAL_MACHINE, lpszkey, 0, NULL, 0, 0, NULL, &hkey, &dwdisposition)) Jako pierwszy parametr podajemy wartość klucza głównego, natomiast drugi to wartość podklucza. Gdybyśmy chcieli iterować od korzenia do konkretnej gałęzi drzewa, mysielibyśmy wywoływać tę funkcję tak długo, aż doszlibyśmy do interesującego nas klucza. Istnieje na szczęście prostszy sposób. Wystarczy podać jeden z kluczy głównych, a następnie ścieżkę prowadzącą bezpośrednio do interesującego nas klucza(w naszym przypadku będzie ona miała wartość(\software\sdj\callrejecter). Rysunek 3. Przykładowy wpis do rejestrów dotyczący usługi LgeCCoreDrv Wartości argumentów ustawionych na zero lub NULL, oraz ostatniego argumentu są mało istotne. Pod wartość hkey podstawiony zostanie uchwyt do klucza, o który wnioskowaliśmy (w naszym przypadku to będzie klucz CallRejecter). Następnie musimy zainicjalizować parametry, które przekażemy do funkcji: RegSetValueEx(hkey, lpszvalueid, 0, dwtype, reinterpret_cast<lpbyte>(&dwre jectallcalls), dwsize)). Funkcja ta przyjmuje wartość uchwytu do klucza, który pobraliśmy w poprzednim kroku, a następnie łańcuch określający nazwę wartości, którą chcemy ustawić. Kolejny argument jest zarezerwowany i musi być ustawiony na zero, następnie musimy podać typ wartości(dla tej konkretnej sytuacji będzie to REG_DWORD), a na końcu bufor, który zawiera wartość do zapisu. W ostatnim parametrze przekazujemy rozmiar bufora. Finalnym krokiem jest zwolnienie uchwytu do wcześniej pobranego klucza (RegCloseKey(hkey)). Jeśli teraz przyjrzysz się funkcjom odczytującym, zauważysz zapewne, że w zasadzie nie różnią się one znacząco. Jedyną różnicą (oprócz użycia funkcji RegQueryValueEx w miejsce funkcji RegSetValueEx) jest to, iż tym razem nie musimy inicjalizować konkretnymi wartościami zmiennych odpowiedzialnych za typ oraz rozmiar na konkretne wartości. O ile w przypadku wartości typu REG_DWORD rozmiar bufora będzie miał zawsze tę samą wartość (sizeof(dword), o tyle już w przypadku wartości typu REG_SZ lub REG_MUL- TI_SZ musimy wcześniej zaalokować odpowiednią ilość pamięci. W tym celu przy pierwszym użyciu dodajemy operację odczytu, w której zamiast wskaźnika na bufor, przekazujemy wartość NULL. W ten sposób dokonamy jedynie odczytu rozmiaru danej wartości (w bajtach) oraz jej typu. Serwisy systemowe Mając ustalony sposób, w jaki będziemy przechowywać ustawienia dla naszej aplikacji, wypadałoby zastanowić się, co będzie stanowiło jej szkielet. Jak już wspomniałem, chcielibyśmy, aby nasza aplikacja działała w trybie 24/7, czyli zawsze, kiedy uruchomione jest urządzenie. Możemy to zrobić na dwa sposoby. Pierwszym jest standardowa aplikacja, która po uruchomieniu będzie ustawiać się w tryb oczekiwania na nadejście odpowiednich komunikatów, a następnie umieścić ją w sekcji autostart urządzenia. Rozwiązanie to jest jednak mało eleganckie - nie powinno się tworzyć w ten sposób programów, które nie komunikują się bezpośrednio z użytkownikiem. Inżynierowie projektujący system Windows Mobile w celu realizacji zadań uruchamianych w tle dostarczyli programistom mechanizm w postaci tzw. serwisów systemowych, czyli aplikacji, które z założenia nie będą wchodzić w bezpośrednią interakcję z użytkownikiem na poziomie graficznym. Zadaniem serwisów jest monitorowanie stanu systemu i reagowanie na zmiany w nim zachodzące. W ten właśnie sposób zaprogramujemy postawione sobie zadanie. Serwisy (zwane też usługami) są realizowane w postaci dynamicznie łączonych bibliotek DLL ( jeśli nie wiesz jeszcze, w jaki sposób takie biblioteki tworzyć, spójrz proszę do ramki W sieci, jeden z linków prowadzi do artykułu na ten temat) ładowanych przez jeden z ważniejszych procesów systemowych Services.exe. Aż do wersji Windows CE 4.2.NET programiści w ce- Serwisy Rejestry Poniżej zamieszczony został zbiór możliwych wartości związanych z inicjalizacją serwisu przez proces Services.exe. W nawiasach podano typ danej wartości. Context (REG _ DWORD) wartość inicjalizująca przekazywana do procedury inicjalizacyjnej; Description (REG _ SZ) opis serwisu; DisplayName (REG _ SZ) nazwa serwisu; Dll (REG _ SZ) dynamicznie łączona biblioteka (DLL) zawierająca serwis; Flags (REG _ DWORD) określa zbiór flag używanych do modyfikacji zachowania funkcji ActivateServices. Oto poprawne wartości flag: DEVFLAGS _ NONE (0x ): brak określonych flag; DEVLFAGS _ UNLOAD (0x ): wyładuj serwis po powrocie z funkcji xxx _ Init; DEVFLAGS _ LOADLIBRARY (0x ): skorzystaj z funkcji LoadLibrary do załadowania pliku DLL usługi; DEVFLAGS _ NOLOAD (0x ): nie ładuj serwisu; DEVFLAGS _ TRUSTEDCALLERONLY (0x ) : serwis może być wywołany tylko przez zaufane procesy; Index (REG _ SZ) indeks (instancji serwisu); Keep (REG _ DWORD) jeśli ustawiony na 0, serwis zostanie wyładowany natychmiast po inicjalizacji; Order (REG _ DWORD) kolejność, w jakiej ładowane są serwisy, serwis o najniższej wartości ładowany jest w pierwszej kolejności; Prefix (REG _ SZ) trzyliterowy prefiks definiujący usługę wraz z wartością indeksu pozwala na odwołanie się do konkretnej instancji serwisu. 16 SDJ Extra 34 Biblia

17 RIL API w sercu telefonu lu realizacji zadań serwisów zmuszeni byli używać systemu sterowników dopiero w tej wersji pojęcie to zostało wprowadzone do rodziny CE. W związku z tymi zaszłościami historycznymi usługi odziedziczyły po sterownikach pewne cechy, jak np. punkty wejścia, lub również trzyliterowy prefiks, który wraz z numerem instancji serwisu służy do pobrania uchwytu. Skąd jednak zarządca serwisów systemowych wie, że dany serwis ma zostać załadowany? I czy samo załadowanie serwisu do pamięci oznacza, że będzie on działał? Odpowiem w pierwszej kolejności na pytanie drugie: nie, sama obecność usługi w pamięci nie oznacza jej działania (oczywiście w sensie spełniania funkcji, dla której serwis został stworzony, w dalszym ciągu serwis jest gotowy do odbierania komunikatów od procesu Services.exe). Dlaczego? Otóż dlatego, że serwis może znajdować się w kilku stanach: może być uruchomiony lub też wstrzymany, dochodzi do tego jeszcze kilka mniej istotnych stanów. Wróćmy więc do pierwszego pytania. Spójrz proszę na Rysunek 3. Przedstawiony tam został wycinek systemowych rejestrów zawierający wpisy dla usługi LgeCCoreDrv. Znajdują się tam informacje na temat wszystkich ważnych właściwości związanych z inicjalizacją serwisu (spójrz na ramkę Serwisy rejestry). Jeśli podobny wpis dodasz do rejestru dla swojego serwisu (w ścieżce HKEY_LOCAL_MACHINE\Services\ Nazwa serwisu), wówczas zostanie on załadowany wraz ze startem systemu (pamiętaj jednak, że załadowany to nie to samo, co uruchomiony). Innym sposobem na załadowanie serwisu bez konieczności tworzenia wpisu w rejestrze jest użycie funkcji RegisterService (jest ona zdefiniowana w pliku nagłówkowym Services.h). Jest jeszcze trzecia droga łącząca zalety obydwu rozwiązań. Jest nią funkcja ActivateService. W zaprojektowanym przeze mnie GUI pozwoliłem sobie na użycie właśnie tego ostatniego podejścia. Funkcja ActivateService przyjmuje dwa argumenty: pierwszy określający nazwę klucza rejestrów zawierającego informację o usłudze, drugi jest natomiast zarezerwowany i powinien zostać ustawiony na zero. Wspomniałem wcześniej o punktach wejścia do serwisu. Są to funkcje o z góry zdefiniowanych nazwach, które pozwalają procesowi Services.exe na komunikację z załadowaną biblioteką DLL. Istnieje dziesięć standardowych punktów wejścia: xxx_init, xxx_deinit, xxx_open, Listing 3. CallRejecterService.cpp #include "stdafx.h" #include <windows.h> xxx_close, xxx_read, xxx_write, xxx_ Seek, xxx_iocontrol, xxx_powerdown oraz xxx_powerup. Jak już wspomniałem, jest to spadek z czasów, gdy jako dostawców usług używano sterowników. W procesie implementacji xxx w nazwach funkcji zamieniamy oczywiście na trzyliterowy prefiks, pod jakim serwis funkcjonuje w systemie. Na szczęście nie musimy implementować wszystkich funkcji. Pominiemy funkcje wynikające z podejścia do serwisu jako pliku (Open, Close, Read, Write, Seek). Na Listingu 3 został przedstawiony szkielet naszego serwisu. Zauważmy, że w miejsce xxx wstawiliśmy trzyliterowy prefiks CRS (dla ciekawskich wymyśliłem go jako akronim od Call Rejecter Service). Musimy jeszcze sprawić, aby nasze funkcje były widoczne na zewnątrz pliku DLL. Możemy to zrobić dwojako, po pierwsze możemy do tego użyć dyrektywy declspec(dllexport) przy definicji funkcje; drugim sposobem jest dołączenie do projektu pliku DEF. Taki przykładowy plik definicji został przedstawiony na Listingu 4. Czas wyjaśnić znaczenie poszczególnych funkcji, zanim przejdziemy do ich implementacji. CRS_Init jak nietrudno się domyślić, ta funkcja jest wywoływana podczas inicjowania serwisu, co może nastąpić w dwóch sytuacjach: w wyniku wywołania funkcji RegisterService lub w momencie, w którym następuje inicjalizacja procesu Services.exe. W tym drugim przypadku jako argument do funkcji przekazana zostanie umieszczona w rejestrach wartość Context. W przypadku powodzenia, powinna zostać zwrócona wartość niezerowa, w przeciwnej sytuacji usługa zostanie wyładowana. Nie trzeba być orłem, aby odgadnąć przeznaczenie funkcji CRS_Deinit. Jako jedyny argument przyjmuje ona wartość zwróconą przez poprzednią funkcję. Pamiętajmy, że skoro funkcja CRS_Init zwraca wartość typu BOOL APIENTRY DllMain( HANDLE hmodule, DWORD ul_reason_for_call, return TRUE; DWORD CRS_Init(DWORD dwdata) DWORD dwcontext = 1; return dwcontext; LPVOID lpreserved ) DWORD CRS_Deinit(DWORD dwcontext) return TRUE; DWORD CRS_IOControl(DWORD dwdata, DWORD dwcode, PBYTE pbufin, DWORD dwlenin, PBYTE return TRUE; void CRS_PowerDown(DWORD dwcontext) return; void CRS_PowerUp(DWORD dwcontext) return; Listing 4. CallRejecterService.def LIBRARY EXPORTS CRS_Init CRS_Deinit CRS_IOControl CRS_PowerDown CRS_PowerUp "CallRejecterService" pbufout, DWORD dwlenout, PDWORD pdwactualout) 17

18 Programowanie Windows Mobile Listing 5. Funkcja CRS_IOControl DWORD CRS_IOControl(DWORD dwdata, DWORD dwcode, PBYTE pbufin, DWORD dwlenin, PBYTE pbufout, DWORD dwlenout, PDWORD pdwactualout) switch(dwcode) case IOCTL_SERVICE_QUERY_CAN_DEINIT: if ((pbufout) && (dwlenout >= sizeof (BYTE))) *pbufout = 1; if (pdwactualout) *pdwactualout = sizeof(byte); case IOCTL_SERVICE_REFRESH: UpdateConfiguration(); break; return TRUE; Listing 6. Brakująca zawartość pliku CallRejecterService.cpp #include <Service.h> #include "RilHelper.h" BOOL APIENTRY DllMain( HANDLE hmodule, DWORD ul_reason_for_call, LPVOID lpreserved ) return TRUE; DWORD CRS_Init(DWORD dwdata) DWORD dwcontext = 0; if (UpdateConfiguration()) if SUCCEEDED(InitializeCallRejecter()) dwcontext = 1; return dwcontext; DWORD CRS_Deinit(DWORD dwcontext) DeinitializeCallRejecter(); return TRUE; void CRS_PowerDown(DWORD dwcontext) DeinitializeCallRejecter(); return; void CRS_PowerUp(DWORD dwcontext) InitializeCallRejecter(); return; DWORD, to w łatwy w sposób można na nią rzutować wskaźnik na dowolną strukturę czy typ. Dzięki takiemu rozwiązaniu możemy uniknąć stosowania zmiennych globalnych. Para funkcji CRS_PowerUp i CRS_PowerDown służy do przygotowania serwisu na przejście urządzenia w stan niskiego poboru energii, a potem na przywrócenie odpowiedniego stanu po powrocie do normalnego stanu zasilania. Funkcje te przyjmują jako argument wartość zwróconą przez CRS_Init (vide unikanie zmiennych globalnych). Powinieneś zawsze obsłużyć w swoim serwisie te dwie funkcje, tak aby możliwe było przed przejściem w stan obniżonego zużycia energii zwolnienie jak największej liczby zasobów przywłaszczonych przez usługę. Ostatnia funkcja (CRS_IOControl) odpowiada za komunikację aplikacji zewnętrznych z usługą. To właśnie tu trafiają komunikaty wysłane chociażby przy użyciu funkcji ServiceIOControl. Na Listingu 5 została umieszczona wypełniona funkcja CRS_IOControl naszego serwisu. W naszym prostym serwisie obsłużymy jedynie dwa komunikaty, zachęcam jednak do eksperymentów z innymi, jak również do definiowania swoich. Pierwszym z obsłużonych komunikatów jest IOCTL_SERVICE_QU- ERY_CAN_DEINIT. Może być on np. następstwem wywołania funkcji DeregisterService (której zadaniem jest wyładowanie serwisu). Jeżeli usługa z jakiegoś powodu nie może być wyładowana, wówczas w buforze wyjściowym powinna ustawić zero, jeżeli wartość w buforze będzie niezerowa, oznacza to, że będzie mogła zostać wywołana funkcja CRS_Deinit. Drugim komunikatem obsłużonym w naszym serwisie jest IOCTL_SERVICE_RE- FRESH, którym subtelnie sugerujemy serwisowi, że powinien ponownie wczytać swoją konfigurację, ponieważ uległa ona zmianie. Co prawda nie zdefiniowaliśmy jeszcze funkcji UpdateConfiguration, ale zapewniam Cię, że gdybyś zdefiniował chociażby puste ciało tej funkcji, dokonał odpowiednich wpisów w rejestrach i wrzucił skompilowaną bibliotekę na urządzenie, byłbyś w stanie uruchomić naszą usługę (a nawet udałoby Ci się ją zatrzymać) Nuda, nic się nie dzieje... Gdybyśmy poprosili inżyniera Mamonia o komentarz na temat naszego oprogramowania, tak pewnie by je właśnie podsumował i nie ma w tym nic dziwnego, zważywszy na fakt, iż w tej chwili nasza usługa nie robi właściwie nic (a już zdecydowanie nie to, do czego ją przewidzieliśmy). Pora więc nieco ożywić akcję i wprowadzić wreszcie na scenę głównego bohatera tego artykułu. Najpierw jednak spójrzmy na Listing 6 umieściłem na nim wypełnione ciała pozostałych funkcji, nie przejmujemy się przy tym faktem, że wprowadzone zostały ko- 18 SDJ Extra 34 Biblia

19 RIL API w sercu telefonu lejne funkcje, o których implementacji nic nie wiemy. Za chwilę wszystko stanie się jasne (o ile już nie jest). Na Listingach 7 i 8 została przedstawiona pozostała część naszego serwisu (ta, która wreszcie coś robi). Jak wspomniałem we wstępie, RIL API ma wśród wielu programistów opinię, nazwijmy to delikatnie, niezbyt przyjemnego dzieje się tak prawdopodobnie dlatego, że z jednej strony większa część funkcji wchodzących w jego skład ma charakter asynchroniczny, z drugiej zaś sama architektura jest typowym przykładem event-driven programming. Chcąc skorzystać z dobrodziejstw dostarczanych przez Radio Interface Layer, musisz w pierwszej kolejności zarejestrować połączenie z RIL Proxy. Robi się to przy użyciu funkcji RIL_ Initialize. Funkcja ta przyjmuje jako pierwszy argument numer Proxy, do którego chcemy się podłączyć (nie wiem, jaka jest prawidłowość, ale w tym miejscu działa przeważnie tylko wartość 1). Kolejne dwa parametry to wskaźniki na funkcje, za pomocą których RIL Proxy będzie się komunikowało z naszą aplikacją, następnie musimy podać klasę notyfikacji, które chcielibyśmy otrzymywać. Następny parametr typu DWORD to wartość, którą będziemy przekazywać do dwóch wspomnianych wcześniej funkcji pamiętaj, że podobnie jak w przypadku Listing 7. RilHelper.h #ifndef _RILHELPER_H_ #define _RILHELPER_H_ #include "ril.h" #define RIL_TIMEOUT 3000 #define HANGUP_SUCCESS L"HangUpSuccess" #define HANGUP_FAIL L"HangUpFail" #define GETMSGCONFIG_SUCCESS L"GetMsgConfigSuccess" #define GETMSGCONFIG_FAIL L"GetMsgConfigFail" #define SENDMSG_SUCCES L"SendMsgSuccess" #define SENDMSG_FAIL L"SendMsgFail" enum RilFunctions HANGUP,GETMSGCONFIG,SENDMESSAGE; HRESULT InitializeCallRejecter(); HRESULT DeinitializeCallRejecter(); BOOL IsOnBlockedList(LPTSTR lpsznumber); BOOL UpdateConfiguration(); VOID RilNotifyCallback(DWORD dwcode, const void* lpdata, DWORD cbdata, DWORD dwparam ); VOID RilResultCallback(DWORD dwcode, HRESULT hrcmdid, const void* lpdata, DWORD cbdata, DWORD dwparam); HRESULT GetMsgConfig(); HRESULT SendSMS(RILADDRESS radest); #endif R E K L A M A 19

20 Programowanie Windows Mobile Listing 8. RilHelper.cpp #include "stdafx.h" #include "RilHelper.h" #include "RegistryHelper.h" HRESULT hrresults[3]=e_fail,e_fail,e_fail; HANDLE hevents[6]=null,null,null,null,null; HRIL hril=null; LPRILMSGCONFIG g_lprmcmsgconfig = NULL; CALLREJECTERSETTINGS g_crssettings=; HRESULT GetMsgConfig() HRESULT hr = E_FAIL; DWORD dwevent=0; if (hril) hr = RIL_GetMsgConfig(hRil); hrresults[getmsgconfig] = hr; if(succeeded(hr)) dwevent = WaitForMultipleObjects(2,&hEvents[2*GETMS GCONFIG],FALSE,100*RIL_TIMEOUT); switch(dwevent) case WAIT_OBJECT_0: hr = S_OK; break; default: hr = E_FAIL; return hr; HRESULT SendSMS(RILADDRESS radest) RILMESSAGE rm=; HRESULT hr = E_FAIL; DWORD dwevent = 0; if (hril) rm.cbsize = sizeof(rilmessage); rm.dwparams = RIL_PARAM_M_SVCCTRADDRESS RIL_PARAM_ M_TYPE RIL_PARAM_M_DESTADDRESS RIL_PARAM_M_PROTOCOLID RIL_PARAM_ M_MSGLENGTH RIL_PARAM_M_FLAGS RIL_PARAM_M_VPFORMAT RIL_PARAM_ M_DATACODING RIL_PARAM_M_VP RIL_PARAM_M_MSG; rm.rasvcctraddress.cbsize = g_lprmcmsgconfig- >rasvcctraddress.cbsize; rm.rasvcctraddress.dwnumplan = g_lprmcmsgconfig->rasvc CtrAddress.dwNumPlan; rm.rasvcctraddress.dwparams = g_lprmcmsgconfig->rasvcc traddress.dwparams; rm.rasvcctraddress.dwtype = rm.rasvcctraddress.dwtype; _tcscpy_s(rm.rasvcctraddress.wszaddress,256,g_ lprmcmsgconfig->rasvcctraddress.wszad dress); rm.dwtype = RIL_MSGTYPE_OUT_SUBMIT; rm.dwflags = RIL_MSGFLAG_NONE; rm.msgoutsubmit.dwprotocolid = RIL_MSGPROTOCOL_SMETOSME; rm.msgoutsubmit.radestaddress.cbsize = radest.cbsize; rm.msgoutsubmit.radestaddress.dwnumplan = radest.dwnumplan; rm.msgoutsubmit.radestaddress.dwparams = radest.dwparams; rm.msgoutsubmit.radestaddress.dwtype = radest.dwtype; _tcscpy_s(rm.msgoutsubmit.radestaddress.wszaddress,256,radest.wszaddress); rm.msgoutsubmit.rmddatacoding.cbsize = sizeof(rilmsgdcs); rm.msgoutsubmit.rmddatacoding.dwparams = RIL_PARAM_ MDCS_TYPE RIL_PARAM_MDCS_ALPHABET; rm.msgoutsubmit.rmddatacoding.dwtype = RIL_DCSTYPE_ GENERAL; rm.msgoutsubmit.rmddatacoding.dwalphabet = RIL_ DCSALPHABET_DEFAULT; rm.msgoutsubmit.rmddatacoding.dwmsgclass = RIL_ DCSMSGCLASS_0; rm.msgoutsubmit.rmddatacoding.dwflags = RIL_DCSFLAG_NONE; SYSTEMTIME curtime; GetLocalTime(&curTime); rm.msgoutsubmit.stvp.wyear = curtime.wyear; rm.msgoutsubmit.stvp.wmonth = curtime.wmonth; rm.msgoutsubmit.stvp.wdayofweek = curtime.wdayofweek; rm.msgoutsubmit.stvp.wday = curtime.wday; rm.msgoutsubmit.stvp.whour = curtime.whour; rm.msgoutsubmit.stvp.wminute = curtime.wminute; rm.msgoutsubmit.stvp.wsecond = curtime.wsecond; rm.msgoutsubmit.stvp.wmilliseconds = curtime.wmilliseconds; rm.msgoutsubmit.cchmsglength = wcstombs(reinterpret_ cast<char *>(rm.msgoutsubmit.rgbmsg),g _crssettings.tcmessage,256); hr = RIL_SendMsg(hRil,&rm,RIL_SENDOPT_NONE); hrresults[sendmessage] = hr; if(succeeded(hr)) dwevent = WaitForMultipleObjects(2,&hEvents[2*SENDM ESSAGE],FALSE,RIL_TIMEOUT); switch(dwevent) case WAIT_OBJECT_0: hr = S_OK; break; default: hr = E_FAIL; return hr; VOID RilResultCallback(DWORD dwcode, HRESULT hrcmdid, const void* lpdata, DWORD cbdata, DWORD dwparam) if (dwcode = RIL_RESULT_OK) if (hrcmdid==hrresults[hangup]) SetEvent(hEvents[2*HANGUP]); 20 SDJ Extra 34 Biblia

ActiveXperts SMS Messaging Server

ActiveXperts SMS Messaging Server ActiveXperts SMS Messaging Server ActiveXperts SMS Messaging Server to oprogramowanie typu framework dedykowane wysyłaniu, odbieraniu oraz przetwarzaniu wiadomości SMS i e-mail, a także tworzeniu własnych

Bardziej szczegółowo

Politechnika Poznańska, Instytut Informatyki, TWO/GE. Programowanie dla ios

Politechnika Poznańska, Instytut Informatyki, TWO/GE. Programowanie dla ios Politechnika Poznańska, Instytut Informatyki, TWO/GE Programowanie dla ios 13 stycznia 2012 Urządzenia ios Urządzenie Data prezentacji iphone 9.01.2007/06.2007 ipod touch 5.09.2007 iphone 3G 9.06.2008

Bardziej szczegółowo

System zarządzający grami programistycznymi Meridius

System zarządzający grami programistycznymi Meridius System zarządzający grami programistycznymi Meridius Instytut Informatyki, Uniwersytet Wrocławski 20 września 2011 Promotor: prof. Krzysztof Loryś Gry komputerowe a programistyczne Gry komputerowe Z punktu

Bardziej szczegółowo

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA W ELBLĄGU INSTYTUT INFORMATYKI STOSOWANEJ Sprawozdanie z Seminarium Dyplomowego Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Bardziej szczegółowo

MonoGame. Wieloplatformowe gry w C# Mateusz Cicheński

MonoGame. Wieloplatformowe gry w C# Mateusz Cicheński MonoGame Wieloplatformowe gry w C# Mateusz Cicheński Plan prezentacji Założenia Alternatywy Narzędzia Różnice między WP8, ios, Android DEMO Podsumowanie Założenia CEL: Stworzenie wieloplatformowej gry

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

Wprowadzenie do projektu QualitySpy

Wprowadzenie do projektu QualitySpy Wprowadzenie do projektu QualitySpy Na podstawie instrukcji implementacji prostej funkcjonalności. 1. Wstęp Celem tego poradnika jest wprowadzić programistę do projektu QualitySpy. Będziemy implementować

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Android - wprowadzenie. Łukasz Przywarty 171018

Android - wprowadzenie. Łukasz Przywarty 171018 Android - wprowadzenie Łukasz Przywarty 171018 Ramowy plan prezentacji Czym jest Android: definicja, krótka historia. Architektura systemu. Architektura aplikacji. Właściwości systemu. Środowisko deweloperskie.

Bardziej szczegółowo

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą

Bardziej szczegółowo

Projektowanie, tworzenie aplikacji mobilnych na platformie Android

Projektowanie, tworzenie aplikacji mobilnych na platformie Android Program szkolenia: Projektowanie, tworzenie aplikacji mobilnych na platformie Android Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Projektowanie, tworzenie aplikacji mobilnych

Bardziej szczegółowo

Technologia Flash cieszy się coraz większą popularnością. Liczba dostępnych

Technologia Flash cieszy się coraz większą popularnością. Liczba dostępnych Flash i PHP 01 Technologia Flash cieszy się coraz większą popularnością. Liczba dostępnych narzędzi do tworzenia prostych oraz złożonych interaktywnych animacji wzrasta z dnia na dzień. Trzeba przyznać,

Bardziej szczegółowo

World Wide Web? rkijanka

World Wide Web? rkijanka World Wide Web? rkijanka World Wide Web? globalny, interaktywny, dynamiczny, wieloplatformowy, rozproszony, graficzny, hipertekstowy - system informacyjny, działający na bazie Internetu. 1.Sieć WWW jest

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Systemy mobilne. Laboratorium. Dostęp do danych GPS w Windows Phone 7

Systemy mobilne. Laboratorium. Dostęp do danych GPS w Windows Phone 7 Systemy mobilne Laboratorium Dostęp do danych GPS w Windows Phone 7 1. Wprowadzenie Laboratorium ma na celu zapoznanie się z narzędziami dostępu do danych dotyczących lokalizacji w urządzeniach mobilnych

Bardziej szczegółowo

Czym są właściwości. Poprawne projektowanie klas

Czym są właściwości. Poprawne projektowanie klas Z akcesorów get i set korzysta każdy kto programuje w C#. Stanowią one duże udogodnienie w programowaniu obiektowym. Zapewniają wygodę, bezpieczeństwo i znacząco skracają kod. Akcesory są ściśle związane

Bardziej szczegółowo

Międzyplatformowy interfejs systemu FOLANessus wykonany przy użyciu biblioteki Qt4

Międzyplatformowy interfejs systemu FOLANessus wykonany przy użyciu biblioteki Qt4 Uniwersytet Mikołaja Kopernika w Toruniu Wydział Matematyki i Informatyki Wydział Fizyki, Astronomii i Informatyki Stosowanej Agnieszka Holka Nr albumu: 187396 Praca magisterska na kierunku Informatyka

Bardziej szczegółowo

REFERAT PRACY DYPLOMOWEJ

REFERAT PRACY DYPLOMOWEJ REFERAT PRACY DYPLOMOWEJ Temat pracy: Projekt i implementacja środowiska do automatyzacji przeprowadzania testów aplikacji internetowych w oparciu o metodykę Behavior Driven Development. Autor: Stepowany

Bardziej szczegółowo

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

Bardziej szczegółowo

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna Strona 1 z 9 «Przykładowe zadania do cz. III ćwiczeń z genetyki Java pierwsze kroki w programowaniu (01)» Kategoria: java, Tagi: eclipse - java - programowanie. Autor: Grzegorz, napisał dnia: February

Bardziej szczegółowo

Windows 10 - Jak uruchomić system w trybie

Windows 10 - Jak uruchomić system w trybie 1 (Pobrane z slow7.pl) Windows 10 - Jak uruchomić system w trybie awaryjnym? Najprostszym ze sposobów wymuszenia na systemie przejścia do trybu awaryjnego jest wybranie Start a następnie Zasilanie i z

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Stawiamy pierwsze kroki

Stawiamy pierwsze kroki Stawiamy pierwsze kroki 3.1. Stawiamy pierwsze kroki Edytory tekstu to najbardziej popularna odmiana programów służących do wprowadzania i zmieniania (czyli edytowania) tekstów. Zalicza się je do programów

Bardziej szczegółowo

uczyć się bez zagłębiania się w formalnym otoczeniu,

uczyć się bez zagłębiania się w formalnym otoczeniu, CZĘŚĆ 3 - INTERNET 3.1 WSTĘP Internet jest globalnym zbiorem połączonych ze sobą komputerów, które przesyłają informacje między sobą za pośrednictwem szybkich połączeń sieciowych oraz linii telefonicznych.

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8 Programowanie Urządzeń Mobilnych Laboratorium nr 7, 8 Android Temat 1 tworzenie i uruchamianie aplikacji z użyciem Android SDK Krzysztof Bruniecki 1 Wstęp Platforma Android jest opartym na Linuxie systemem

Bardziej szczegółowo

Tworzenie oprogramowania

Tworzenie oprogramowania Tworzenie oprogramowania dr inż. Krzysztof Konopko e-mail: k.konopko@pb.edu.pl 1 Tworzenie oprogramowania dla systemów wbudowanych Program wykładu: Tworzenie aplikacji na systemie wbudowanym. Konfiguracja

Bardziej szczegółowo

Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych

Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych rk Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych pojęć, prawdopodobnie zastanawiasz się, kiedy zaczniesz

Bardziej szczegółowo

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski Agenda Dlaczego PhoneGap i co to jest? Możliwości PhoneGap Jak pisać aplikacje z PhoneGap? Konfiguracja i przykład aplikacji

Bardziej szczegółowo

Rejestr HKEY_LOCAL_MACHINE

Rejestr HKEY_LOCAL_MACHINE Rejestr HKEY_LOCAL_MACHINE Poddrzewo HKEY_LOCAL_MACHINE zawiera dane konfiguracyjne lokalnego systemu. Informacje tutaj przechowywane są wykorzystywane przez aplikacje i sterowniki urządzeń, a także przez

Bardziej szczegółowo

www.gim4.slupsk.pl/przedmioty

www.gim4.slupsk.pl/przedmioty Lekcja 4. Program komputerowy - instalacja i uruchomienie 1. Rodzaje programów komputerowych 2. Systemy operacyjne 3. Instalowanie programu 4. Uruchamianie programu 5. Kilka zasad pracy z programem komputerowym

Bardziej szczegółowo

Biorąc udział w projekcie, możesz wybrać jedną z 8 bezpłatnych ścieżek egzaminacyjnych:

Biorąc udział w projekcie, możesz wybrać jedną z 8 bezpłatnych ścieżek egzaminacyjnych: Egzaminy na plus Stres na minus! Zdawaj bezpłatne egzaminy Microsoft, Linux, C++ z nami i zadbaj o swoją karierę. Oferujemy Ci pierwsze certyfikaty zawodowe w Twojej przyszłej karierze, które idealnie

Bardziej szczegółowo

1.Wstęp. 2.Generowanie systemu w EDK

1.Wstęp. 2.Generowanie systemu w EDK 1.Wstęp Celem niniejszego ćwiczenia jest zapoznanie z możliwościami debuggowania kodu na platformie MicroBlaze oraz zapoznanie ze środowiskiem wspomagającym prace programisty Xilinx Platform SDK (Eclipse).

Bardziej szczegółowo

2.5 Dzielenie się wiedzą

2.5 Dzielenie się wiedzą 2.5 Dzielenie się wiedzą 2.5.1 Baza wiedzy zespołu Tworzenie bazy wiedzy w OneNote, zapoznanie się z przykładowymi bazami wiedzy, stworzenie struktury bazy wiedzy, zdefiniowanie własnych tagów, stworzenie

Bardziej szczegółowo

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop. 2017 Spis treści O autorach 11 Podziękowania 12 Wprowadzenie 13 CZĘŚĆ I ZACZNIJ PROGRAMOWAĆ JUŻ DZIŚ Godzina 1. Praktyczne

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

Platformy programistyczne:.net i Java L ABORATORIUM 7,8: HACKATHON - JTTT

Platformy programistyczne:.net i Java L ABORATORIUM 7,8: HACKATHON - JTTT Platformy programistyczne:.net i Java L ABORATORIUM 7,8: HACKATHON - JTTT O co chodzi? - Przypomnienie Hackathon - http://en.wikipedia.org/wiki/hackathon A hackathon is an event in which computer programmers

Bardziej szczegółowo

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego. Umiejętność czytania oraz tworzenia diagramów klas UML jest podstawą w przypadku zawodu programisty. Z takimi diagramami będziesz spotykał się w przeciągu całej swojej kariery. Diagramy klas UML są zawsze

Bardziej szczegółowo

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC Akademia MetaPack Uniwersytet Zielonogórski Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC Krzysztof Blacha Microsoft Certified Professional Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC Agenda:

Bardziej szczegółowo

Dokumentacja projektu QUAIKE Architektura oprogramowania

Dokumentacja projektu QUAIKE Architektura oprogramowania Licencjacka Pracownia Oprogramowania Instytut Informatyki Uniwersytetu Wrocławskiego Jakub Kowalski, Andrzej Pilarczyk, Marek Kembrowski, Bartłomiej Gałkowski Dokumentacja projektu QUAIKE Architektura

Bardziej szczegółowo

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch INFORMATOR TECHNICZNY WONDERWARE Informator Techniczny nr 60 04-12-2002 Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch Wstęp PoniŜsza dokumentacja oparta na przykładach stworzonych

Bardziej szczegółowo

REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania

REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania Autor: Anna Nowak Promotor: dr inż. Jan Kowalski Kategorie: gra logiczna Słowa kluczowe: Sudoku, generowanie plansz, algorytmy,

Bardziej szczegółowo

MAMP: Można to pobrać i zainstalować z XAMPP: Można go pobrać i zainstalować z

MAMP: Można to pobrać i zainstalować z   XAMPP: Można go pobrać i zainstalować z WordPress : Omówienie I Instalacja Na początek, dlaczego byłbyś zainteresowany wykorzystaniem WordPressa razem z PhoneGap? Zapytałbym: "Dlaczego byś nie?" Moim zdaniem WordPress jest jednym z najłatwiejszych

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Pliki zorganizowano w strukturze drzewiastej odzwierciedlając strukturę logiczną aplikacji:

Pliki zorganizowano w strukturze drzewiastej odzwierciedlając strukturę logiczną aplikacji: Technologia wykonania projektu: HTML5 Javascript: o jquery (1.9.1), o CreateJS (0.6.1): EaselJS, TweenJS, PreloadJS. Części funkcjonalne projektu: Strona internetowa pliki strony internetowej zlokalizowane

Bardziej szczegółowo

Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod:

Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod: 1. Listener dla przycisku. Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod: W linii 24 tworzymy globalną metodę mglobal_onclicklistener,

Bardziej szczegółowo

Przewodnik instalacji i rozpoczynania pracy. Dla DataPage+ 2013

Przewodnik instalacji i rozpoczynania pracy. Dla DataPage+ 2013 Przewodnik instalacji i rozpoczynania pracy Dla DataPage+ 2013 Ostatnia aktualizacja: 25 lipca 2013 Spis treści Instalowanie wymaganych wstępnie komponentów... 1 Przegląd... 1 Krok 1: Uruchamianie Setup.exe

Bardziej szczegółowo

Uruchamianie bazy PostgreSQL

Uruchamianie bazy PostgreSQL Uruchamianie bazy PostgreSQL PostgreSQL i PostGIS Ten przewodnik może zostać pobrany jako PostgreSQL_pl.odt lub PostgreSQL_pl.pdf Przejrzano 10.09.2016 W tym rozdziale zobaczymy, jak uruchomić PostgreSQL

Bardziej szczegółowo

Webowy generator wykresów wykorzystujący program gnuplot

Webowy generator wykresów wykorzystujący program gnuplot Uniwersytet Mikołaja Kopernika Wydział Fizyki, Astronomii i Informatyki Stosowanej Marcin Nowak nr albumu: 254118 Praca inżynierska na kierunku informatyka stosowana Webowy generator wykresów wykorzystujący

Bardziej szczegółowo

[Junior Developer - pierwsza praca jako programista - JavaDevMatt] 1. Sponsorzy Partnerzy projektu O czym i dla kogo jest ta książka?

[Junior Developer - pierwsza praca jako programista - JavaDevMatt] 1. Sponsorzy Partnerzy projektu O czym i dla kogo jest ta książka? Spis treści 1. Sponsorzy 11 2. Partnerzy projektu 13 3. O czym i dla kogo jest ta książka? 15 4. Skąd pomysł na napisanie książki? 18 4.1. Co nowego w tym wydaniu? 20 5. Z jakich powodów nie warto zostać

Bardziej szczegółowo

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 1, część 2 1 Język JAVA podstawy Plan wykładu: 1. Krótka historia Javy 2. Jak przygotować sobie środowisko programistyczne 3. Opis środowiska JDK 4. Tworzenie programu krok po

Bardziej szczegółowo

SOA Web Services in Java

SOA Web Services in Java Wydział Informatyki i Zarządzania Wrocław,16 marca 2009 Plan prezentacji SOA 1 SOA 2 Usługi Przykłady Jak zacząć SOA Wycinek rzeczywistości Problemy zintegrowanych serwisów : Wycinek Rzeczywistości Zacznijmy

Bardziej szczegółowo

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans. GRZEGORZ FURDYNA Krótka Historia Co to jest NetBeans? Historia Wersje NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły NetBeans Profiler Narzędzie do projektowania GUI Edytor NetBeans

Bardziej szczegółowo

Paragon Boot Media Builder

Paragon Boot Media Builder PARAGON Software GmbH ul. Śląska 22/21 42 217 Częstochowa, Polska Tel. +48 (34) 343 81 81 Internet: www.paragon software.pl E mail kontakt@paragon software.pl Paragon Boot Media Builder Podręcznik użytkownika

Bardziej szczegółowo

To sposób w jaki użytkownik wchodzi w interakcje z systemem. Środowisko graficzne używa kombinacji graficznych elementów(przyciski, okna, menu) i

To sposób w jaki użytkownik wchodzi w interakcje z systemem. Środowisko graficzne używa kombinacji graficznych elementów(przyciski, okna, menu) i Aleksandra Dębiecka To sposób w jaki użytkownik wchodzi w interakcje z systemem. To sposób w jaki użytkownik wchodzi w interakcje z systemem. Środowisko graficzne używa kombinacji graficznych elementów(przyciski,

Bardziej szczegółowo

Projekt Hurtownia, realizacja rejestracji dostaw produktów

Projekt Hurtownia, realizacja rejestracji dostaw produktów Projekt Hurtownia, realizacja rejestracji dostaw produktów Ćwiczenie to będzie poświęcone zaprojektowaniu formularza pozwalającego na rejestrację dostaw produktów dla naszej hurtowni. Dane identyfikujące

Bardziej szczegółowo

Podręcznik użytkownika platformy szkoleniowej Audatex. wersja 1.2

Podręcznik użytkownika platformy szkoleniowej Audatex. wersja 1.2 Podręcznik użytkownika platformy szkoleniowej Audatex wersja 1.2 Warszawa 2015 Spis treści 1. Zakup kursu... 3 2. Logowanie do systemu... 3 2.1. Jak zalogować się do systemu?... 3 2.2. Co zrobić kiedy

Bardziej szczegółowo

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski -

SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski - S t r o n a 2 SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski - Copyright by Artur Niewiarowski 2013 ISBN: 978-83-937802-0-4 - Artur Niewiarowski Self-Publishing - All rights reserved. Wszelkie prawa

Bardziej szczegółowo

Aplikacja Sieciowa wątki po stronie klienta

Aplikacja Sieciowa wątki po stronie klienta Aplikacja Sieciowa wątki po stronie klienta Na ostatnich zajęciach zajmowaliśmy się komunikacją pomiędzy klientem a serwerem. Wynikiem naszej pracy był program klienta, który za pomocą serwera mógł się

Bardziej szczegółowo

Przewodnik Szybki start

Przewodnik Szybki start Przewodnik Szybki start Program Microsoft Access 2013 wygląda inaczej niż wcześniejsze wersje, dlatego przygotowaliśmy ten przewodnik, aby skrócić czas nauki jego obsługi. Zmienianie rozmiaru ekranu lub

Bardziej szczegółowo

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop. 2016 Spis treści Wprowadzenie 11 Adresaci książki 12 Co wyróżnia tę książkę na

Bardziej szczegółowo

Programowanie aplikacji na urządzenia mobilne

Programowanie aplikacji na urządzenia mobilne Informatyka I Programowanie aplikacji na urządzenia mobilne dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 JME - Java Platform Micro Edition JME platforma Java przeznaczona

Bardziej szczegółowo

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

EW1051 Czytnik kart inteligentnych ID USB 2.0

EW1051 Czytnik kart inteligentnych ID USB 2.0 EW1051 Czytnik kart inteligentnych ID USB 2.0 2 POLSKI EW1051 Czytnik kart inteligentnych ID USB 2.0 Spis treści 1.0 Wprowadzenie... 2 1.1 Funkcje i właściwości... 2 1.2 Zawartość opakowania... 2 2.0 Instalacja

Bardziej szczegółowo

Ulotka skrócona Moduł Analizy BI. Wersja: 2013.0.1

Ulotka skrócona Moduł Analizy BI. Wersja: 2013.0.1 Ulotka skrócona Moduł Analizy BI Wersja: 2013.0.1 Spis treści 1. Reinstalacja z poprzedniej wersji... 3 2. Raporty Wzorcowe... 5 2.1 Nowości... 5 2.2 Zmiany... 6 3. Ogólne... 6 3.1 Nowości... 6 3.2 Zmiany...

Bardziej szczegółowo

Projekt Hurtownia, realizacja rejestracji dostaw produktów

Projekt Hurtownia, realizacja rejestracji dostaw produktów Projekt Hurtownia, realizacja rejestracji dostaw produktów Ćwiczenie to będzie poświęcone zaprojektowaniu formularza pozwalającego na rejestrację dostaw produktów dla naszej hurtowni. Dane identyfikujące

Bardziej szczegółowo

PROJEKT WSPÓŁFINANSOWANY ZE ŚRODKÓW UNII EUROPEJSKIEJ W RAMACH EUROPEJSKIEGO FUNDUSZU SPOŁECZNEGO OPIS PRZEDMIOTU. studia pierwszego stopnia

PROJEKT WSPÓŁFINANSOWANY ZE ŚRODKÓW UNII EUROPEJSKIEJ W RAMACH EUROPEJSKIEGO FUNDUSZU SPOŁECZNEGO OPIS PRZEDMIOTU. studia pierwszego stopnia OPIS PRZEDMIOTU Nazwa przedmiotu Programowanie i obsługa systemów mobilnych Kod przedmiotu Wydział Instytut/Katedra Kierunek Specjalizacja/specjalność Wydział Matematyki, Fizyki i Techniki Instytut Mechaniki

Bardziej szczegółowo

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer; 14.3. Podstawy obsługi X Window 14.3. Podstawy obsługi X Window W przeciwieństwie do systemów Windows system Linux nie jest systemem graficznym. W systemach Windows z rodziny NT powłokę systemową stanowi

Bardziej szczegółowo

Poradnik opracowany przez Julitę Dąbrowską.

Poradnik opracowany przez Julitę Dąbrowską. Poradnik opracowany przez Julitę Dąbrowską. Pobrany ze strony www.kalitero.pl. Masz pytania skontaktuj się ze mną. Dokument stanowi dzieło w rozumieniu polskich i przepisów prawa. u Zastanawiasz się JAK

Bardziej szczegółowo

Windows Mobile. Andy Wigley, Daniel Moth, Peter Foot, Microsoft Mobile Development Handbook, Microsoft Press 2007

Windows Mobile. Andy Wigley, Daniel Moth, Peter Foot, Microsoft Mobile Development Handbook, Microsoft Press 2007 Windows Mobile Andy Wigley, Daniel Moth, Peter Foot, Microsoft Mobile Development Handbook, Microsoft Press 2007 Wykład 14-2 Windows CE Modułowy system operacyjny Platform Builder pozwala na wybranie tych

Bardziej szczegółowo

Re_Forms 21 Często zadawane pytania (FAQ)

Re_Forms 21 Często zadawane pytania (FAQ) Re_Forms 21 Często zadawane pytania (FAQ) 1 Level Dlaczego trzeba konwertować Oracle Forms? Nie trzeba, ale można. Konwersja jest interesującą ekonomicznie alternatywą dla przepisywania krytycznych systemów

Bardziej szczegółowo

timetrack Przewodnik Użytkownika timetrack Najważniejsze Funkcje

timetrack Przewodnik Użytkownika timetrack Najważniejsze Funkcje timetrack Przewodnik Użytkownika timetrack jest łatwą w obsłudze aplikacją, stworzoną do rejestracji czasu. Pozwala ona na zapisywanie czasu spędzonego z klientami oraz podczas pracy nad projektami i zadaniami

Bardziej szczegółowo

A Zasady współpracy. Ocena rozwiązań punktów punktów punktów punktów punktów

A Zasady współpracy. Ocena rozwiązań punktów punktów punktów punktów punktów A Zasady współpracy Ocena rozwiązań 3.0 25 40 punktów 3.5 41 65 punktów 4.0 66 80 punktów 4.5 81 100 punktów 5.0 101 130 punktów Warunki zaliczenia przedmiotu Student uzyska ocenę zaliczającą (3.0) o ile

Bardziej szczegółowo

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery http://xqtav.sourceforge.net XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery dr hab. Jerzy Tyszkiewicz dr Andrzej Kierzek mgr Jacek Sroka Grzegorz Kaczor praca mgr pod

Bardziej szczegółowo

Swing Application Framework czyli tam i z powrotem. Copyright Piotr Kochański & Erudis, www.erudis.pl

Swing Application Framework czyli tam i z powrotem. Copyright Piotr Kochański & Erudis, www.erudis.pl Swing Application Framework czyli tam i z powrotem Informacje o mnie Imię: Piotr Nazwisko: Kochański Praca: programista Java, PHP + kilka egzotycznych wynalazków Miejsce pracy: firma Erudis (prawdopodobnie

Bardziej szczegółowo

Tak przygotowane pliki należy umieścić w głównym folderze naszego programu. Klub IKS www.informatyka.edu.pl

Tak przygotowane pliki należy umieścić w głównym folderze naszego programu. Klub IKS www.informatyka.edu.pl To jeden z ostatnich odcinków naszego kursu. Mam nadzieję, że pisanie własnego programu było ciekawym doświadczeniem. Zaproponowana w tym odcinku funkcja uatrakcyjni twój program. Stworzymy tak zwane okno

Bardziej szczegółowo

tel. (+48 81) 538 47 21/22 fax (+48 81) 538 45 80 Cel przedmiotu

tel. (+48 81) 538 47 21/22 fax (+48 81) 538 45 80 Cel przedmiotu 0-68 Lublin tel. (+48 8) 538 47 / fax (+48 8) 538 45 80 Przedmiot: Programowanie aplikacji Rok: 4 Semestr: 7 Rodzaj zajęć i liczba godzin: Studia stacjonarne Studia niestacjonarne Wykład 30 4 Ćwiczenia

Bardziej szczegółowo

Instrukcja instalacji serwera bazy danych Microsoft SQL Server Express 2014

Instrukcja instalacji serwera bazy danych Microsoft SQL Server Express 2014 Instrukcja instalacji serwera bazy danych Microsoft SQL Server Express 2014 Instrukcja jest przeznaczona dla użytkowników systemu Bibliotekarz.NET Web Platform. Instrukcja została przygotowana 26.07.2016.

Bardziej szczegółowo

Konspekt pracy inżynierskiej

Konspekt pracy inżynierskiej Konspekt pracy inżynierskiej Wydział Elektryczny Informatyka, Semestr VI Promotor: dr inż. Tomasz Bilski 1. Proponowany tytuł pracy inżynierskiej: Komunikator Gandu na platformę mobilną Android. 2. Cel

Bardziej szczegółowo

Opis zmian funkcjonalności platformy E-GIODO wprowadzających możliwość podpisania wniosku bezpośrednio w oknie przeglądarki.

Opis zmian funkcjonalności platformy E-GIODO wprowadzających możliwość podpisania wniosku bezpośrednio w oknie przeglądarki. Opis zmian funkcjonalności platformy E-GIODO wprowadzających możliwość podpisania wniosku bezpośrednio w oknie przeglądarki. Wstęp. Opisane poniżej zmiany wprowadzają modyfikacje platformy e-giodo w zakresie

Bardziej szczegółowo

MVVM Light Toolkit. Julita Borkowska

MVVM Light Toolkit. Julita Borkowska MVVM Light Toolkit Julita Borkowska Czym jest MVVM Light Toolkit? MVVM Light Toolkit został stworzony w 2009 roku przez Laurenta Bugnion. Jest to biblioteka dostarczająca zestaw komponentów pomocnych podczas

Bardziej szczegółowo

edycja 1 opracowany zgodnie z Zarządzeniami Wewnętrznymi PWr. nr 14/2012 i 15/2012 i 34/2012

edycja 1 opracowany zgodnie z Zarządzeniami Wewnętrznymi PWr. nr 14/2012 i 15/2012 i 34/2012 Wrocław, 18.05.2015 Program kształcenia i plan studiów podyplomowych: Android i ios nowoczesne aplikacje mobilne edycja 1 opracowany zgodnie z Zarządzeniami Wewnętrznymi PWr. nr 14/2012 i 15/2012 i 34/2012

Bardziej szczegółowo

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

Bardziej szczegółowo

Pracownia internetowa w szkole ZASTOSOWANIA

Pracownia internetowa w szkole ZASTOSOWANIA NR ART/SBS/07/01 Pracownia internetowa w szkole ZASTOSOWANIA Artykuły - serwery SBS i ich wykorzystanie Instalacja i Konfiguracja oprogramowania MOL Optiva na szkolnym serwerze (SBS2000) Artykuł opisuje

Bardziej szczegółowo

Instrukcja instalacji Mobile Marketing Pro

Instrukcja instalacji Mobile Marketing Pro Instrukcja instalacji Mobile Marketing Pro Przed rozpoczęciem instalacji MMPro należy pobrać i zainstalować dwa wymagane darmowe komponenty niezbędne do prawidłowego działania programu. Net Framework 2.0

Bardziej szczegółowo

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE WINDOWS 1 SO i SK/WIN 006 Wydajność systemu 2 SO i SK/WIN Najprostszym sposobem na poprawienie wydajności systemu, jeżeli dysponujemy zbyt małą ilością pamięci RAM

Bardziej szczegółowo

Forex PitCalculator INSTRUKCJA UŻYTKOWNIKA

Forex PitCalculator INSTRUKCJA UŻYTKOWNIKA Forex PitCalculator Forex PitCalculator jest aplikacją służącą do obliczania podatku należnego z tytułu osiągniętych na rynku walutowym zysków. Jest to pierwsze tego typu oprogramowanie na polskim rynku.

Bardziej szczegółowo

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami: Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie

Bardziej szczegółowo

Usługi analityczne budowa kostki analitycznej Część pierwsza.

Usługi analityczne budowa kostki analitycznej Część pierwsza. Usługi analityczne budowa kostki analitycznej Część pierwsza. Wprowadzenie W wielu dziedzinach działalności człowieka analiza zebranych danych jest jednym z najważniejszych mechanizmów podejmowania decyzji.

Bardziej szczegółowo

Strona tytułowa, zgodnie z wymaganiami zamieszczonymi na stronie www uczelni. Wzór strony dostępny jest w dzienniku wirtualnym - 1 -

Strona tytułowa, zgodnie z wymaganiami zamieszczonymi na stronie www uczelni. Wzór strony dostępny jest w dzienniku wirtualnym - 1 - Strona tytułowa, zgodnie z wymaganiami zamieszczonymi na stronie www uczelni. Wzór strony dostępny jest w dzienniku wirtualnym - 1 - Spis treści 1 Wstęp... 3 1.1 Cel pracy... 3 1.2 Układ pracy... 4 2 Podstawy

Bardziej szczegółowo

TWORZENIE PREZENTACJI MS POWERPOINT

TWORZENIE PREZENTACJI MS POWERPOINT TWORZENIE PREZENTACJI MS POWERPOINT Wstęp TWORZENIE PREZENTACJI MS POWERPOINT Czasami zdarza się, że zostajemy poproszeni o poprowadzenia spotkania czy szkolenia w firmie, w której pracujemy lub po prostu

Bardziej szczegółowo

PLAN REALIZACJI MATERIAŁU NAUCZANIA Z INFORMATYKI II. Uczeń umie: Świadomie stosować się do zasad regulaminów (P).

PLAN REALIZACJI MATERIAŁU NAUCZANIA Z INFORMATYKI II. Uczeń umie: Świadomie stosować się do zasad regulaminów (P). PLAN REALIZACJI MATERIAŁU NAUCZANIA Z INFORMATYKI II DZIAŁ I: KOMPUTER W ŻYCIU CZŁOWIEKA. 1. Lekcja organizacyjna. Zapoznanie uczniów z wymaganiami edukacyjnymi i PSP. 2. Przykłady zastosowań komputerów

Bardziej szczegółowo

Instrukcja instalowania aplikacji TNS mobistat. Smartfon Android. Help Desk helpdesk@mobistat.pl +48 504 129 635

Instrukcja instalowania aplikacji TNS mobistat. Smartfon Android. Help Desk helpdesk@mobistat.pl +48 504 129 635 Instrukcja instalowania aplikacji TNS mobistat Smartfon Android Help Desk helpdesk@mobistat.pl +48 504 129 635 Kilka uwag ogólnych W razie gdy mamy wątpliwości czy któryś z elementów ścieżki badania działa

Bardziej szczegółowo

Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki. Paweł Parys. Nr albumu: 209216. Aukcjomat

Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki. Paweł Parys. Nr albumu: 209216. Aukcjomat Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki Paweł Parys Nr albumu: 209216 Aukcjomat Praca licencjacka na kierunku INFORMATYKA w zakresie INFORMATYKA Praca wykonana pod kierunkiem

Bardziej szczegółowo

Dysk 20GB przestrzeni Ajax Ajax 1.0 Baza danych MS SQL 2005 lub 2008 Express Java Java 6 run time Microsoft Silverlight 3.

Dysk 20GB przestrzeni Ajax Ajax 1.0 Baza danych MS SQL 2005 lub 2008 Express Java Java 6 run time Microsoft Silverlight 3. Systemy do kompleksowej administracji środowiskiem IT : Symantec Management Platform Solutions - rozwiązanie ułatwiające zarządzanie zasobami informatycznym Głównym zadaniem podlegającym kompetencji działu

Bardziej szczegółowo

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Jak napisać program obliczający pola powierzchni różnych figur płaskich? Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy

Bardziej szczegółowo

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i Program szkolenia: Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Produktywne tworzenie aplikacji webowych z

Bardziej szczegółowo

1. Opis aplikacji. 2. Przeprowadzanie pomiarów. 3. Tworzenie sprawozdania

1. Opis aplikacji. 2. Przeprowadzanie pomiarów. 3. Tworzenie sprawozdania 1. Opis aplikacji Interfejs programu podzielony jest na dwie zakładki. Wszystkie ustawienia znajdują się w drugiej zakładce, są przygotowane do ćwiczenia i nie można ich zmieniac bez pozwolenia prowadzącego

Bardziej szczegółowo

Symulator tabletu z systemem Windows 8.

Symulator tabletu z systemem Windows 8. Symulator tabletu z systemem Windows 8. Witam w mojej kolejnej publikacji, tym razem dowiesz się: - Jak uruchomić symulator tabletu z w pełni funkcjonalnym systemem operacyjnym Windows 8; - Jak wykorzystać

Bardziej szczegółowo