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

Download ""

Transkrypt

1

2

3

4

5

6 01/2010 (181) SPIS TREŚCI 27 Opis DVD 06 Aktualności Rafał Kocisz BIBLIOTEKA MIESIĄCA 14 Box2D Fizyczny świat w pudełku Rafał Kocisz Znudziło Ci się skryptowanie animacji, czy definiowanie pseudo-realistycznych krzywych ruchu? Pragniesz dodać więcej realizmu do swojej aplikacji, lecz nie czujesz się Newtonem? Nic straconego, skorzystaj ze sprawdzonej już ścieżki, Box2D to biblioteka stworzona do symulacji fizycznych światów 2D, jest dla każdego i to kompletnie za darmo! KLUB TECHNICZNY 28 Serwer WWW w aplikacji AIR Wzbogacamy aplikację AIR o możliwość uruchomienia serwera sieciowego. Mateusz Małczak W artykule przyjrzymy się bliżej najnowszej wersji AIR 2.0 dostępnej aktualnie w wersji testowej as stronach Adobe. Omówimy jedną z nowinek, jaką jest znacznie wzbogacona obsługa gniazd sieciowych. 32 Technologie Progress OpenEdge Część 5. Wykorzystanie specyfikacji XML w aplikacjach OpenEdge Piotr Tucholski Technologie wykorzystujące standardy XML stały się nieodzownym elementem nowoczesnych systemów aplikacyjnych ze względu na uniwersalność i łatwość integracji. W OpenEdge zaimplementowana jest pełna obsługa standardowych modeli XML: DOM oraz SAX. PROGRAMOWANIE C++ 36 Komendy żądania jako obiekty Robert Nowak Reprezentacja żądania, czyli wołania funkcji lub metody przez obiekt, pozwala na rozdzielenie momentu tworzenia żądania od momentu jego zgłoszenia, co nazywamy opóźnionym wołaniem. Za pomocą przedstawionych technik można rozdzielić moduły, które tworzą żądania, od modułów, które wołają zawarte w nich funkcje lub metody, co pozwala redukować zależności w aplikacji. WARSZTATY 40 Czyń CUDA (część 2) Programowanie i optymalizacja jądra Michał Matuszak, Jacek Matulewski W poprzednim numerze SDJ opisaliśmy architekturę procesorów i pamięci kart graficznych wspierających technologię CUDA oraz strukturę korzystających z niej programów. Teraz skupimy się na programowaniu jąder (kerneli), a przede wszystkim omówimy kilka dróg do ich optymalizacji. 46 AJAX w jquery Jak stworzyć efektowną galerię w AJAX-ie z wykorzystaniem frameworka jquery cz. 2. Leszek Sewastianowicz Wielu programistów stawiających pierwsze kroki w jquery używa zazwyczaj jedynie podstawowych elementów tego frameworka. Częstą tego przyczyną jest niewiedza o jego możliwościach oraz problemy z dotarciem do mniej typowych rozwiązań. Ten artykuł omawia niektóre z nich filtry selektorów oraz wywołanie dowolnej akcji na obiekcie umieszczonym na stronie przy pomocy AJAX-a. PROGRAMOWANIE JAVA 50 Przewodnik po SCJP Czyli certyfikat z Javy część 2 Krzysztof Rychlicki - Kicior Proces zdobywania certyfikatów, potwierdzających umiejętności z różnych dziedzin wiedzy, stał się jednym z ważniejszych elementów osobistego rozwoju. Proces ten ma miejsce również w branży IT; certyfikaty dla programistów (Java lub.net), administratorów czy sieciowców (Cisco) można coraz częściej odnaleźć w CV osób starających się o pracę, zwłaszcza w owianym złą sławą kryzysie gospodarczym. 6 01/2010

7 APLIKACJE BIZNESOWE 56 Zbuduj XPages w nowym Lotusie Andrzej Olsztyński Wraz z nową wersją Lotus Notes Domino pojawiło się również poprawione i rozbudowane studio deweloperskie Domino Designer. Oprócz nowych funkcjonalności i ulepszonych narzędzi, niewątpliwą zaletą nowego wydania produktu jest możliwość komercyjnego użycia bezpłatnie. PROGRAMOWANIE PHP 62 Phalanger PHP z poziomu Visual Studio Grzegorz Pieniążek Phalanger jest kompilatorem języka PHP dla platformy.net. Umożliwia uruchamianie większości istniejących aplikacji napisanych w PHP, jak również rozszerzanie aplikacji PHP o dodatkowe funkcje, dostępne w.net Framework. EFEKTYWNOŚĆ PRACY 68 Kantclipse Czy etyka ma sens w programowaniu? Michał Bartyzel, Mariusz Sieraczkiewicz Przełom starego i nowego roku jest czasem, w którym rachujemy w sumieniach nasze postanowienia sprzed dwunastu miesięcy. Czasem jesteśmy zadowoleni, czasem nie. Nic straconego, gdyż mamy kolejną szansę, by zacząć na nowo. Oby ten artykuł choć w niewielkim stopniu przyczynił się do wzrostu Twojego zadowolenia za rok. WYWIADY lat minęło... Łukasz Łopuszański Software Developer s Journal obchodzi swoje 15-lecie. Przez te 15 lat bardzo wiele zmieniło się w dziedzinie tworzenia oprogramowania. Jak wiele? O to zapytaliśmy: Andrzeja Dopierały, Prezesa Oracle Polska; Dariusza Piotrowskiego, Dyrektora Działu Developer & Platform Group; Pawła Paneckiego, Software Group Manager IBM Polska; Lubomira Strojka, Dyrektora Rozwoju Rynku Rozwiązań BTO HP Polska; Jarosława Kanie, Prezesa BSC Polska; Kazimierza Eysymontta, Prezesa Zarządu Komtech, a także Ireneusza Medyńskiego, Prezesa firmy Quest Dystrybucja. Nie zapomnieliśmy spytać o to, jak będzie wyglądała przyszłość, a także co bardzo ważne dla naszych czytelników, w jaki sposób firmy mają zamiar wspierać polskich developerów. Miesięcznik Software Developer s Journal (12 numerów w roku) jest wydawany przez Software Press Sp. z o.o. SK Redaktor naczelny: Łukasz Łopuszański lukasz.lopuszanski@software.com.pl Projekt okładki: Agnieszka Marchocka Skład i łamanie: Monika Grotkowska monika.grotkowska@software.com.pl Kierownik produkcji: Andrzej Kuca andrzej.kuca@software.com.pl Dział produkcji i kolportażu: Alina Stebakow alina.stebakow@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ę CD 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 CD-ROM 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 Aktualności Google Image Swirl: nowe spojrzenie na wyszukiwanie obrazów Google Labs udostępniło kolejną interesującą usługę, tym razem związaną z wyszukiwaniem grafik. Google Image Swirl to usługa w fazie eksperymentalnej, ale efekty jej działania robią spore wrażenie. Obecnie wyszukiwanie obrazów w Googlach generuje wyniki analogicznie do wyników wyszukiwania tekstowego, jest to lista miniatur plików graficznych związanych z zapytaniem. Image Swirl może zasadniczo odmienić zasady przeszukiwania zasobów obrazów w sieci poprzez Google. Wyniki wyszukiwania poprzez Image Swirl prezentowane są w postaci zestawów miniatur w różny sposób tematycznie powiązanych z zapytaniem. Wybranie jednego zbioru generuje prezentacje kolejnych obrazów powiązanych tematycznie, powiązania są przejrzyście oznaczone w ramach swego rodzaju koła zależności. Pozwala to w sposób intuicyjny zawężać wynik wyszukiwania. W efekcie może to wyglądać przykładowo w ten sposób, że w polu wyszukiwania wpisujemy nazwę np. miasta, pojawiają się wówczas odpowiednie miniatury, wybieramy taką, która prezentuje ciekawy obiekt architektoniczny, pojawiają się kolejne obrazy, np. stare fotografie, najnowsze fotografie, nocne zdjęcia czy obrazy związane z tymże obiektem itd... Google Image Swirl funkcjonuje na razie w ramach jedynie ok. 200 tys. zapytań, w związku z czym aby obejrzeć zasady działania usługi, zaleca się skorzystanie z sugerowanych na stronie projektu haseł. Wśród funkcjonujących zapytań znalazły się jednak m. in. większe polskie miasta i sporo innych polskojęzycznych haseł, jest się więc czym pobawić. Google kupiło Gizmo5: czy powstanie konkurent Skype? Potwierdziły się nieoficjalne informacje: internetowy gigant przejął firmę Gizmo5 zajmującą się tworzeniem oprogramowania do komunikacji VoIP. Gizmo5 jest między innymi autorem komunikatora działającego na podobnej zasadzie jak Skype aplikacja bazuje na otwartym protokole SIP i umożliwia prowadzenie rozmów z osobami posiadającymi komputer, komórkę lub telefon stacjonarny. W związku z przejęciem firma wstrzymała rejestrację nowych użytkowników, choć osoby dotychczas korzystające z usług Gizmo5 nie zostaną pozbawione dostępu do swoich kont. Pracownicy wykupionej firmy mają dołączyć do ekipy Google Voice, jednak internetowy gigant nie precyzuje, nad czym wzbogacony kadrowo zespół będzie pracował. Patrząc na profil wykupionej firmy, można z dużym prawdopodobieństwem założyć, iż Google chce zwiększyć funkcjonalność swojej usługi Google Voice i komunikatora GTalk, by móc konkurować ze stale zyskującym na popularności Skype. Czy tak się stanie, czas pokaże. Google prezentuje Chrome OS 19 listopada br. Sundar Pichai i Matthew Papakipos z Google przedstawili całą prawdę o Google Chrome OS. Wiemy już, że wbrew wcześniejszym zapowiedziom nie zostanie przedstawiona testowa wersja Chrome OS ale zewnętrzni deweloperzy uzyskali dostęp do tego samego kodu, nad którym pracują inżynierowie Google'a. To, co pokazał gigant z Mountain View, wzbudziło niemałe kontrowersje. Wydaje się, że ludzie oczekiwali czegoś innego, choć nikt nie potrafi powiedzieć, czego. Chrome OS to po prostu mocno przerobiona przez Google- 'a wersja Debiana, na której działa przeglądarka Chrome. To wszystko w przestrzeni użytkownika nie mogą zostać uruchomione żadne inne binarne aplikacje. Oczywiście nie znaczy to, że pod spodem nie będzie działało nic innego z pobieżnej analizy udostępnionego przez Google kodu widać, że Chrome OS wykorzystuje dużą liczbę opensource'owych projektów systemu uwierzytelniania PAM, lekkiego bootloadera Syslinux, magistrali wejściowej Ibus, menedżera połączeń Connman i sterowników Host AP. Można się o tym przekonać, oglądając kod źródłowy systemu, udostępniony na stronie src.chromium.org. Niezwykle solidnie przyłożono się do kwestii bezpieczeństwa. Całe drzewo systemowe (root) będzie montowane w trybie tylko do odczytu, a przy każdym restarcie system będzie sprawdzał swoją integralność za pomocą kluczy kryptograficznych przypisanych plikom. Każda z uruchamianych aplikacji będzie działała wewnątrz własnej piaskownicy, bez dostępu do pozostałych. System będzie się też automatycznie aktualizował. A co zobaczy użytkownik? Na początku niezwykle szybki start systemu. 7 sekund tyle zajęło testowemu netbookowi uruchomienie przeglądarki po włączeniu. Trzeba przyznać, że wiele smartfonów uruchamia się dłużej. Zasługą nie jest tylko optymalizacja procedur startowych: oficjalnie Chrome OS kończy z erą twardych dysków. Nowy system ma działać tylko na urządzeniach z dyskami flash. Interfejsem użytkownika jest po prostu nieco zmieniona przeglądarka Chrome. Znajdą się w niej i okna aplikacji karty przeglądarki, i niezależne panele aplikacji takich jak Gtalk, przypominające np. znany z Facebooka czat. Nie jest to jednak wersja finalna Pichai zapowiedział, że interfejs użytkownika czeka jeszcze wiele zmian. Uruchamiane w Chrome OS aplikacje będą w stanie ciągłej synchronizacji z chmurą Google'a. Pliki lokalne będą otwierały się w aplikacjach webowych jak pokazano podczas prezentacji,.doc otworzy się w online'owej wersji Worda. Jednak użytkownicy będą mogli dane przechowywać też lokalnie, na wypadek niedostępności w Sieci tak jak to jest możliwe obecnie już dzięki technologii Gears. Mountain View zapowiada, że również protokoły komunikacji aplikacji webowych z lokalnym cache zostaną otwarte i udostępnione deweloperom. Powstaje pytanie: skąd wziąć Chrome OS? Oficjalnie odpowiedź jest tylko jedna: znikąd. Systemu Chrome OS nie będzie można pobrać z Sieci i zainstalować na własnym komputerze. Google najwyraźniej pozazdrościło Apple i oficjalną wersję z kolorowym logo będzie dostarczało na rynek wraz z urządzeniami od certyfikowanych producentów. Firma zamierza wspierać dwie architektury procesorów: x86 i ARM, kilka typów kart sieciowych, ograniczoną liczbę układów graficznych. Przygotowane zostaną referencyjne modele sprzętu, na którym wzorować będą się mogli pozostali producenci. Obecnie Google w kwestii stworzenia urządzeń z Chrome OS współpracuje z takimi producentami jak Acer, Asus, Freescale, Hewlett-Packard, Lenovo, Qualcomm, Texas Instruments i Toshiba. Pierwsze modele mają się pojawić pod koniec przyszłego roku i kosztować rozsądne pieniądze Pichai stwierdził, że chodzi o kwoty, których klienci dzisiaj się spodziewają. Oczywiście nic nie powstrzyma zainteresowanych projektem ludzi z hakerską żyłką, aby przerabiać Chromium OS opensource- 'ową wersję systemu tak, aby działała na innych maszynach, jednak ta wersja najprawdopodobniej nie będzie się cieszyła w takiej skali integracją z usługami Google'a. Więcej informacji o nowym systemie można znaleźć na stronie dev.chromium.org/chromium-os. Zawiera ona między innymi wszystkie niezbędne informacje o tym, jak zbudować własne Chrome OS. Pod adresem watch?v=0qro3gkj3qw&feature=player_embedded dostępny jest też film, mówiący co nieco o nowym systemie /2010

9 Aktualności Ranking Tiobe: zamknięcie roku 2009 Zgodnie z coroczną tradycją zamieszczamy podsumowanie roku dla rankingu prowadzonego przez Tiobe. Ranking ten bada popularność języków programowania. Reguły tworzenia rankingu opisane są pod adresem content/paperinfo/tpci/tpci_definition.htm. W przedstawionej tabeli wyszczególnić można sześć kolumn. Pierwsza z nich określa aktualną pozycję danego języka w rankingu (przedstawione tam dane odnoszą się do listopada 2009 roku). Druga kolumna zawiera listę pozycji poszczególnych języków sprzed dwunastu miesięcy (listopad 2008). Trzecia kolumna przedstawia nazwy języków, czwarta zmianę pozycji danego języka w skali roku. Piąta i szósta kolumna zawierają statystyki procentowe. Podsumowując tegoroczne wyniki rankingu, można stwierdzić, iż rok 2009 nie przyniósł nam rewolucji w dziedzinie popularności języków programowania. Czoło listy nieustannie okupują języki: Java, C, C++, PHP, Basic, C#, JavaScript, Python, Perl i Ruby. Java (podobnie jak w poprzednich latach) pozostaje na miejscu pierwszym, tuż za nią nieśmiertelny język C. Dość wysokie trzecie miejsce zajęło w tym roku PHP, spychając na czwarte miejsce język C++. Również Basic spadł o jedno oczko w dół na miejsce piąte. Za to C# sukcesywnie wspina się na szczyt rankingu w tym roku wskoczył o jeden szczebelek wyżej (z ósmego miejsca na siódme), spychając w dół Pythona. Python, Perl i Ruby niezmienni faworyci w dziedzinie języków skryptowych, tradycyjnie znalazły swoje miejsce w drugiej połowie pierwszej dziesiątki rankingu, zajmując kolejno 7, 8 i 10 miejsce. Druga dziesiątka rankingu Tiobe jest tradycyjnie mniej stabilna niemalże co roku pojawiają się tutaj różni egzotyczni goście. W 2009 roku gościem takim jest niewątpliwie język Objective-C, który przypłynął na wysokie fali popularności platformy iphone\ipod Touch. Lisp\Scheme oraz MATLAB wkroczyły pewnie w pierwszą dwudziestkę, zaś największym przegranym tego roku okazał się być język D, który odnotował spadek o 8 miejsc. Tabela 1. Zestawienie najpopularniejszych języków programowania (listopad 2009) Najpopularniejsze języki programowania (za Pozycja 11/ 2009 Pozycja 11/2008 Nazwa języka Zmiana pozycji Udział procentowy 11/ Java % -1.93% Zmiana od 11/ C % +2.04% 3 5 PHP % +1.24% 4 3 C % -0.36% 5 4 (Visual) Basic % -1.10% 6 7 C# % +1.32% 7 6 Python % -0.47% 8 9 Perl % -0.39% 9 10 JavaScript % -0.01% Ruby % -0.47% 11 8 Delphi % -1.88% PL/SQL % -0.03% Objective-C % +0.74% SAS % +0.09% Pascal % +0.14% ABAP % +0.07% Lisp/Scheme % +0.15% MATLAB % +0.15% Lua % +0.07% D % -0.90% YouTube wprowadza system automatycznego generowania napisów W serwisie YouTube pojawił się mechanizm do generowania napisów do umieszczanych tam filmów. Niestety działa on tylko wtedy, gdy osoby mówiące w nich używają języka angielskiego, i to najlepiej w jego amerykańskiej odmianie. W oficjalnym blogu Google'a czytamy: połączyliśmy technologię automatycznego rozpoznawania mowy z systemem napisów w YouTube, aby zaoferować automatyczne generowanie napisów. Korzystamy w tym z tych samych algorytmów co w Google Voice. Funkcja ta została domyślnie włączona dla klipów z kanałów partnerskich, które zawierają zwykle rozmaite wywiady i wystąpienia, m.in. uniwersytetów Berkeley, Stanford, MIT, Yale, ale także kanałów National Geographic czy PBS. Ciekawostką wartą odnotowania jest też wprowadzenie mechanizmu automatycznego dopasowywania napisów do klipu wideo. Wystarczy dostarczyć systemowi listę transkrypcyjną, a technologia ASR Google'a zsynchronizuje ją z wypowiadanymi w nagraniu kwestiami. Niestety nie ma wygodnego narzędzia do ręcznego poprawiania tak wygenerowanych napisów, a system rozpoznawania mowy bywa zawodny. Mimo to mechanizm ten na pewno zwiększy uniwersalność YouTube'a udostępni go nie tylko osobom mającym problemy ze słuchem, ale też tym, które angielski znają głównie z formy pisanej, mniej zaś z formy mówionej. Nowy Bing współpracuje z Wolfram Alpha Microsoft poinformował o rozpoczęciu wdrożenia nowej, odświeżonej i usprawnionej wersji wyszukiwarki Bing. Aktualizacja jest największą w krótkiej historii Binga (wyszukiwarka zadebiutowała w czerwcu 2009, zastępując Live Search). Ciekawostką jest fakt, że Microsoft nawiązał współpracę z eksperymentalną aplikacją (nie wyszukiwarką!) Wolfram Alpha, o której też było ostatnimi czasy dość głośno. Dzięki temu w Bingu pojawią się wyniki dostarczone przez Wolfram Alpha; póki co współpraca dotyczy danych na temat zdrowia i odżywiania. W samym Bingu również zmieniło się kilka rzeczy: wyszukiwarka Microsoftu wzbogacona została o zlokalizowane wyniki wyszukiwania dotyczące pogody i wydarzeń. Poprawiono także Bing Shopping, specjalną wyszukiwarkę dla kupujących, oraz funkcję Hover Preview, która umożliwia podgląd witryny lub dodatkowe wyszukiwanie w niej bezpośrednio ze strony wyników. Partnerstwo z Wolfram Alpha, które jak zapowiadają obie strony będzie się stopniowo rozszerzać, pokazuje, że Bing wyraźnie chce aspirować do roli aplikacji ułatwiającej podejmować decyzje, nie tylko zwykłej wyszukiwarki

10 Aktualności Google udostępnia kod źródłowy systemu Android 2.0 W pierwszej połowie listopada 2009 roku na rynku ukazał się pierwszy telefon z systemem operacyjnym Android w wersji 2.0. Teraz firma Google udostępniła wszystkim zainteresowanym kod źródłowy tego OSa. Co ciekawe, niektórzy programiści stworzyli już wersję Androida przeznaczoną dla pierwszego telefonu, jaki wyposażony był w oprogramowanie Google: T-Mobile G1. Kod źródłowy nowej wersji systemu operacyjnego Android od dawna wyczekiwany był przez wielu programistów oraz producentów telefonów komórkowych. Google postanowiło spełnić te oczekiwania, by ułatwić implementację tego OSa na nowe urządzenia oraz by uprościć tworzenie przeznaczonych na niego aplikacji. Okazało się, że programiści zainteresowani Androidem szybko skorzystali z nowych możliwości. Jak donosi serwis Mobilecrunch, system Google w wersji 2.0 całkiem nieźle spisuje się na telefonie G1. Jedynym problemem jest odtwarzanie plików audio oraz wideo, jednak wszystko wskazuje na to, że błędy związane z tą funkcjonalnością zostaną szybko usunięte przez specjalistów mających obecnie dostęp do kodu OSa stworzonego przez Google. Kod źródłowy systemu Google dostępny jest na stronie projektu Android (http: //source.android.com/). Przypominamy, że programiści chcący pisać aplikacje korzystające z możliwości nowego systemu powinni zaopatrzyć się w najnowszy Android SDK i AVD Manager. Czy Google Docs za rok zastąpią Office? David Girouard, prezes ds. segmentu przedsiębiorstw w Google, dość odważnie stwierdził, że już za rok firmy będą zastanawiać się nad rezygnacją z pakietu Microsoft Office. Miejsce jednego z czołowych produktów Microsoftu miałyby zająć Dokumenty Google. Korporacja z Mountain View stwierdza, że już wkrótce aplikacja ta będzie w stanie sprostać większości wymaganiom przedsiębiorstw. Na razie nie będziemy prosić ludzi, by pozbyli się pakietu Microsoft Office i korzystali z Dokumentów Google, ponieważ produkt ten nie jest jeszcze dojrzały przyznaje otwarcie Girouard. Zmienić ma to się jednak już w przyszłym roku, kiedy to firma wprowadzi do Dokumentów Google około trzydzieści do pięćdziesięciu poprawek. Aktualizacje mają zwiększyć ilość dostępnych funkcji i poprawić wydajność aplikacji. Nie sądzę, że Microsoft Office całkowicie zniknie. Zamiast tego, wyspecjalizuje się w oferowaniu pracownikom biur oprogramowania, które zawiera zaawansowane funkcje stwierdził Girouard. Według niego, Office dla większości ludzi jest narzędziem po prostu przeładowanym. PDC 2009: Microsoft otworzy kod kompilatorów W czasach gdy konkurencja wymyśla nowe języki programowania, Microsoft stawia na swoje sprawdzone rozwiązania takie jak Visual Basic i C# i robi wszystko, aby spełniały potrzeby deweloperów. Najnowszym ukłonem w ich stronę, ogłoszonym na PDC 2009, jest zapowiedź otworzenia kodu kompilatorów i dodanie obsługi programowania asynchronicznego. Trzy główne kwestie zajmują zespół odpowiedzialny za języki programowania w Microsofcie twierdzi Luca Bolognese, menedżer, który prowadził jedną z prezentacji. Pierwsza to dostarczenie usługi CaaS (ang. Compiler-as-a-Service), druga to wprowadzenie obsługi programowania asynchronicznego, a trzecia wprowadzenie niezmiennych obiektów (tj. takich, których stan nie może być zmieniony po tym, jak zostały stworzone). Te dwie ostatnie możliwości wprowadzono już w języku F# ale kluczowe dla Redmond C# i Visual Basic wciąż są ich pozbawione. Z kolei otwarcie kompilatorów ma pozwolić deweloperom na modyfikowanie ich wewnętrznych Android i Chrome OS mogą się połączyć Co wspólnego może ze sobą mieć środowisko uruchomieniowe dla przeglądarki Chrome na netbookach (Google Chrome OS) z pełnokrwistym systemem operacyjnym dla komórek (Android)? Oczywiście jądro Linuksa i engine renderujący WebKit. Jak stwierdził ostatnio współtwórca Google'a Siergiej Brin, oba systemy w przyszłości mogą się połączyć. Analitycy branży byli zaskoczeni ujawnieniem stworzenia Google Chrome OS-a w sytuacji, gdy gigant z Mountain View pracował już nad systemem Android, reklamowanym jako produkt idealny dla smartfonów i netbooków. Czy Chrome OS nie będzie bezsensownie konkurował z Androidem? Jaki sens jest wynajdywać otwarty system operacyjny, który zredefiniuje koncepcję korzystania z przenośnego komputera, gdy już opracowuje się inny otwarty system operacyjny, który redefiniuje koncepcję korzystania z urządzeń mobilnych? Ale od samego ogłoszenia prac nad Chrome OS, najwyżsi rangą pracownicy Google'a zbywali takie uwagi wzruszeniem ramion. W końcu szef rozwoju Androida Andy Rubin stwierdził, że producenci struktur, a w konsekwencji łatwiejszą refaktoryzację kodu i programowanie aspektowe (czyli wspierające separację zagadnień i dzielenie programu na niepowiązane funkcjonalnie części). Współczesne kompilatory to czarne skrzynki mówi Bolognese. Z jednej strony wsadza się do nich plik, a z drugiej wychodzi kod pośredniczący. Otwarte kompilatory będą przepisane w VB.NET i C#, łatwo będzie więc udostępnić do nich API i to pozwoli na uruchomienie kompilatorów jako usługi. Z niezmiennością obiektów i asynchronicznością może być jednak dość ciężko; Bolognese wyjaśniał, że próbowano wielu podejść, ale nie znaleziono na razie idealnego rozwiązania: staramy się na razie o tym myśleć jako o własności kompilatora. Microsoft chce także, aby kluczowe języki rozwijały się w drodze koewolucji innowacje wprowadzane do jednego wiązałyby się z szybkim wprowadzeniem ich do drugiego języka. Zdaniem Bolognese w przyszłości dominować będą deklaratywne, współbieżne języki o dynamicznej typizacji. sprzętu potrzebują różnych technologii dla różnych rzeczy, Android ma w sobie wiele unikatowych rozwiązań, przydatnych twórcom smartfonów, a z kolei Chrome przynosi własne, specyficzne benefity. Jednak wkrótce po publicznej prezentacji Chrome OS-a, Siergiej Brin stwierdził, że możliwa jest konwergencja obu systemów. Na razie na to za wcześnie, Android jest już dojrzałym, obecnym na rynku systemem, zaś Chrome OS jest we wczesnej fazie alfa ale w przyszłości, gdy komputery będą coraz bardziej mobilnymi urządzeniami, a smartfony będą w coraz większym stopniu małymi komputerami, dojdzie do takiego punktu rozwoju, w którym Google zaoferuje jeden system dla wszystkich urządzeń tego typu. Póki co, gigant będzie korzystał na przyjaznej wewnętrznej konkurencji pomiędzy deweloperami obu projektów, rozwijając każdy z nich z osobna /2010

11 Aktualności PubSubHubBub: RSS czasu rzeczywistego Klasyczne kanały RSS/Atom wiążą się z dwoma problemami: obciążają nadmiernie dostawcę treści ruchem (bo abonentom trzeba wysłać całą zawartość kanału) i nie są aktualizowane w czasie rzeczywistym: abonent musi sobie pobrać aktualizację sam. Google podczas ostatniego Web 2.0 Expo w Nowym Jorku publicznie przedstawiło nowy protokół, który ma zaradzić tym problemom. Nazywa się on pubsubhubbub. Idea, która stoi za tym Protokołem o Skomplikowanej Nazwie, jest dość prosta. Za pomocą centralnych węzłów i plików różnicowych kanały Atom i RSS zostają przekształcone w systemy aktualizacji treści czasu rzeczywistego, jednocześnie znacznie zmniejszając obciążenie ruchem sieciowym. Wydawca zakłada konto u dostawcy centralnego węzła, a następnie rozsyła subskrybentom swojego kanału informację kierującą ich na adres tego węzła i potwierdzającą, że jest to zaufane źródło. Subskrybent uzyskuje wówczas możliwość zapisania się do kanału czasu rzeczywistego. Gdy dostawca treści wprowadza do kanału nowy wpis, kanał zostaje przesłany do centralnego węzła. Węzeł porównuje go do poprzedniego przesłanego stanu, wyszukuje różnice, usuwa treści, które subskrybenci już przesłali, i rozsyła im za pomocą multicastu deltę kanału. Oczywiście dostawca treści może uruchomić własny centralny węzeł, dostarczający treści subskrybentom w czasie rzeczywistym. Cały system jest obsługiwany przez istniejące czytniki RSS/Atom. Jak stwierdził Brett Slatkin z zespołu Google App Engine: chodziło o stworzenie dobrego protokołu komunikacji między serwerami, który spełniałby wyśrubowane wymagania Google'a, dotyczące skalowalności, prostoty wdrażania i natychmiastowej syndykacji treści. RSS i Atom zaczynają już spowalniać przy setkach czy tysiącach aktualizacji dziennie my chcieliśmy pójść w stronę setek czy tysięcy aktualizacji na sekundę. PubSubHubBub ma pozwolić na powstanie zdecentralizowanych sieci społecznościowych, sfederalizowanego systemu wymiany wiadomości (coś w rodzaju a, tyle że lepszego) czy interaktywnych komentarzy na blogach. Już teraz, od jego (dość cichego) upublicznienia latem 2009 roku, nowy protokół wykorzystywany jest na wielu witrynach. Mogą z niego korzystać kanały z Feedburnera, a także aplikacje w stylu FriendFeed i Twitter- Feed. Plany Google'a są jednak zdaniem Slatkina znacznie większe. Gigant chce większego zaangażowania ludzi w Sieć, a najlepszym na to sposobem ma być wszystko to, co wznieca konwersację w czasie rzeczywistym między jednostkami. Chodzi o to, aby w przyszłości można było się podłączyć do grubej internetowej rury, zasubskrybować kanał ze wszystkim, co się zmienia, w miarę jak się zmienia ( ). Co z tego będzie miało Google? Możliwość indeksowania w czasie rzeczywistym wszystkiego, przez cały czas. Więcej o tym ciekawym projekcie można poczytać na stronie code.google.com/p/pubsubhubbub. PDC 2009: Internet Explorer 9 Przedstawione na PDC 2009 możliwości wstępnych wersji Internet Explorera 9 koncentrowały się na wydajności i grafice. Microsoft stawia najwyraźniej na sprzętową akcelerację. Po prezentacji nowego Internet Explorera przez szefa pionu Windows, Stevena Sinofsky ego, na temat możliwości IE9 wypowiedział się Dean Hachamovitch, główny menedżer odpowiedzialny za tę przeglądarkę. To bezpośrednie usprawnienie dla każdego, kto korzysta z WWW na co dzień webdeweloperzy mogą teraz bezpośrednio wykorzystać sprzętową akcelerację, aby ich tekst i grafika wyglądały i działały lepiej powiedział. Jest to możliwe dzięki porzuceniu dotychczasowego interfejsu GDI (Graphical Device Interface) na rzecz akcelerowanego interfejsu Direct 2D. Kolejna rzecz, nad którą pracują intensywnie twórcy IE9 to optymalizacja silnika JavaScript. John Montgomery z zespołu Internet Explorera stwierdził, że robocze kompilacje IE9 przechodzą już przez popularne testy wydajności JavaScriptu znacznie szybciej niż IE8 co więcej wciąż można z nich jeszcze trochę wycisnąć. Jednak Microsoft podkreśla, że nie tylko engine skryptowy się liczy, mimo tego, co mógłby sugerować wyścig ostatnich lat między Google, Apple i Mozillą. Ostatnią kwestią, która omawiana była na prezentacji to kompatybilność nowej przeglądarki z otwartymi standardami. Internet Explorer 9 potrafi wreszcie rysować ramkę o zaokrąglonych rogach, zaś w popularnym treści Acid3 zdobywa już 32 punkty (IE8 w najlepszym razie zdobywał 20 punków). Go: nowy język programowania od Google Google udostępniło Go, nowy język programowania. Reklamowany jest jako szybki i produktywny, a pisanie w nim aplikacji ma sprawiać przyjemność. Ma to być osiągnięte przez połączenie łatwości pisania charakterystycznej dla języków dynamicznych, takich jak Python, z wydajnością języków kompilowanych, takich jak C i C++. Zapewnia bezpieczeństwo typowania oraz dostępu do pamięci. Oferuje wskaźniki, ale nie obsługuje arytmetyki wskaźników. Język posiada również wbudowane wsparcie dla programowania równoległego. Tworzyć można tzw. goroutines, które wykonywane są jednocześnie, zaś dane pomiędzy nimi mogą być przekazywane za pomocą specjalnych kanałów. Wygląda na to, że Google osiągnęło swój cel. Nawet duże programy napisane w Go kompilują się krótko, a działają z szybkością zbliżoną do aplikacji napisanych w C. Programiści mają do wyboru dwa standardowe kompilatory: 6g i 8g (dla architektur x64 i x86) oraz kompilator alternatywny, noszący nazwę Gccgo i bazujący na GCC. Ten ostatni działa wolniej, ale generuje bardziej zoptymalizowany kod. Kod źródłowy kompilatora języka Go został otwarty i udostępniony na licencji BSD. Nie jest udostępniane w tej chwili żadne środowisko programistyczne dla Go, a jego standardowe biblioteki są dość ubogie. Nie ma też zbyt wielu przykładowych kodów źródłowych. Z tego powodu nowy język nie jest jeszcze gotowy do zastosowań produkcyjnych. Prace nad nim ciągle jednak trwają i można się spodziewać, że w niedługiej przyszłości Go stanie się interesującym narzędziem dla programistów. SPDY: Google chce usprawnić protokół HTTP Specjaliści z Mountain View postanowili popracować nad przyśpieszeniem działania Sieci poprzez modyfikację protokołu HTTP z wykorzystaniem nowej technologii o nazwie SPDY. SPDY jest nakładką na protokół HTTP, która umożliwia kompresję nagłówków, ustalanie priorytetowych żądań oraz wprowadza multipleksowe strumieniowanie. Pracę nad tą technologią rozpoczęliśmy przy okazji optymalizacji sposobów komunikacji pomiędzy przeglądarkami oraz serwerami stwierdzili na blogu Chromium Mike Belshe oraz Roberto Peon. Google przyznaje, że nowe rozwiązanie zostało do tej pory przetestowane jedynie w warunkach laboratoryjnych. Wyniki były jednak dość dobre: 25 najbardziej popularnych stron internetowych ładowało się do 55% szybciej niż normalnie. Specjaliści ze spółki z Mountain View zdają sobie jednak sprawę, iż nowa technologia wymaga jeszcze wielu usprawnień. W tym celu udostępniono jej dokumentację oraz kod na oficjalnej stronie Google (http: //dev.chromium.org/spdy)

12 Aktualności Epic Games udostępnia Unreal Development Kit Epic Games, znane graczom z takich hitów jak Gears of War czy Unreal Tournament, zdecydowało się udostępnić powszechnie narzędzia używane przy tworzeniu tytułów opartych na ich technologii Unreal Engine 3 i wydało Unreal Development Kit. Firma nie pobiera opłat w przypadku jego niekomercyjnych oraz naukowych zastosowań. Unreal Development Kit oferuje szerokiemu gronu odbiorców od studentów, poprzez osoby tworzące cyfrowe filmy (tzw. machinima) po artystów lub nawet studia telewizyjne szereg rozwiązań dostępnych dotąd tylko deweloperom. Z narzędzi tych od lat korzystają najwybitniejsze studia tworzące gry; teraz może zapoznać się z nimi praktycznie każdy. Epic Games zapewnia pełną dokumentację pakietu, obiecuje również regularne jego aktualizacje o wprowadzane na bieżąco do Unreal Engine 3 elementy. Najświeższy build UDK pobrać można ze strony Komisja Europejska przeciwna przejęciu Suna przez Oracle Po przedłużającym się dochodzeniu i patowej dla Suna sytuacji Komisja Europejska zakończyła nareszcie ocenę planowanego przejęcia firmy przez Oracle ocena jest jednak negatywna. Przypomnijmy, że Komisja Europejska badała całą sprawę od sierpnia 2009, by we wrześniu stwierdzić, że potrzebuje więcej czasu na bardziej wnikliwą analizę. Powodem przeciągającego się dochodzenia była w zasadzie jedna sprawa jak przejęcie Suna przez Oracle, producenta znanych rozwiązań bazodanowych, zakończy się dla projektu MySQL. Planowane przejęcie okazało się bardzo kontrowersyjne właśnie ze względu na MySQL nie zgadza się z nim Free Software Foundation i jeden z twórców MySQL, a były szef projektu apelował o jak najszybsze zakończenie sprawy tylko po to, by Sun nie upadł i nie odciął finansowania dla MySQL. Sprzeciw Komisji Europejskiej oznacza jednak, że sprawa zakończy się nieprędko. Władze antymonopolowe Unii Europejskiej obawiają się, że połączenie dwóch projektów bazodanowych tej rangi może zachwiać równowagę konkurencyjną na rynku. Oracle odpowiedziało niemal natychmiast, mówiąc, że wynik badań zdradza głębokie niezrozumienie zarówno zasad konkurencji na rynku baz danych, jak i wolnego oprogramowania. Firma dodaje, że połączenie z Oracle jest niezbędne dla konkurencyjności high-endowego rynku serwerów, rewitalizacji Sparca i Solarisa oraz umocnienia platformy deweloperskiej Javy. Co będzie się działo dalej, nie wiadomo: trudno wyobrazić sobie, by Oracle zrezygnował z MySQL, zaś mocno wycieńczony finansowo Sun może nie przetrwać kolejnej rundy negocjacji. Czas pokaże, czy decyzja Komisji Europejskiej podjęta w celu ochrony konkurencyjności faktycznie wpłynie pozytywnie na rynek... MonoVS: aplikacje dla Linuksa pod Visual Studio Visual Studio jest jednym z najpopularniejszych środowisk programistycznych na świecie jednak w przeciwieństwie do jego konkurentów, takich jak Eclipse, jest IDE ściśle związany z technologiami Microsoftu. Teraz, dzięki staraniom inżynierów Novella, w Visual Studio będzie można tworzyć aplikacje dla Linuksa (a konkretnie platformy Mono). Mono to wolna implementacja frameworku.net dla Linuksa, BSD, Mac OS-u X, a także Windows. Obecnie na Mono można uruchomić znaczną część aplikacji pisanych dla.net. Działają one na obsługiwanych systemach bez konieczności jakichkolwiek modyfikacji. Pozwala to firmom specjalizującym się w pisaniu aplikacji dla.net na powiększenie swojego grona klientów o użytkowników systemów uniksopodobnych. Jednak do tej pory nie było to takie proste w przeciwieństwie do narzędzi wykorzystywanych do programowania w.net dla Windows, narzędzia dostępne dla Mono wymagały włożenia znacznie więcej wysiłku w proces budowy aplikacji. Wydana przez Novella wtyczka MonoVS ma zmienić ten stan rzeczy. Miguel de Icaza, twórca Mono, stwierdził, że nie zamierza czynić z MonoVS konkurencji dla pakietu MonoDevelop (wykorzystywanego obecnie do pisania aplikacji na Mono) wtyczka ma przydać się programistom uzależnionym od Visual Studio, którzy nie chcą migrować na inne platformy. Wydanie MonoVS było możliwe dzięki zmianie polityki Microsoftu, która do niedawna zakazywała tworzenia wtyczek do Visual Studio, pozwalających na programowanie na innych platformach. Teraz Novell zamierza zbudować most ponad przepaścią między Visual Studio, jedną z wiodących na świecie platform deweloperskich a Linuksem, jedną z wiodących na świecie platform wdrożeniowych stwierdził de Icaza, dodając, że pozwoli to deweloperom znającym się na Windows i.net zaoferować swoje rozwiązania na rynku linuksowym, zaś niezależnym dostawcom oprogramowania tworzyć gotowe wirtualne urządzenia. MonoVS zawiera m.in. zdalny debugger, dzięki czemu po wdrożeniu aplikacji na Linuksie można ją testować z poziomu Windows. Gotowy system pakietowania automatycznie generuje paczki dla dystrybucji z rodziny SUSE oraz obrazy wirtualnych urządzeń. Dostępne jest także narzędzie do analizy możliwości migracji Mono Migration Analysis, pozwalające na wykrycie tych fragmentów kodu.net, których automatycznie na Mono się nie przeniesie. Jedyny problem z MonoVS to jej dostępność na pojedynczą dystrybucję Linuksa: SUSE Linux. Deweloperzy twierdzą jednak, że już wkrótce pojawią się rozszerzenia, umożliwiające wdrażanie na platformie RHEL oraz systemach zbudowanych na bazie Debiana (np. Ubuntu). Koszt osobistej licencji na MonoVS to 99 dolarów, zaś dla firm 249 dolarów. Dostępna jest też wersja Ultimate, zawierająca m.in. komercyjną licencję Mono ale ta kosztuje aż 2499 dolarów. Google otwiera bibliotekę narzędzi dla JavaScriptu Google otworzyło bibliotekę dla języka JavaScript, której używa w niektórych swoich aplikacjach webowych. Otworzono także źródła narzędzia do kompresji JavaScriptu. Biblioteka nosi nazwę Closure i zawiera szeroki zestaw funkcjonalności, od serializacji po standardowe komponenty dla interfejsu użytkownika. Wszystkie funkcje są tak napisane, aby mogły działać na każdej przeglądarce i mogą być łatwo wykorzystywane. Closure pozwala obejść niektóre ograniczenia i słabości JavaScriptu, np. wprowadzając zorientowane obiektowo dziedziczenie. Oferuje także przestrzenie nazw i obsługuje ładowanie modułów z rozwiązywaniem zależności. Kod źródłowy Closure jest dostępny na licencji Apache. Udostępniono także dokumentację do API i samouczki oraz Closure Compiler, napisane w Javie narzędzie do kompresji i optymalizacji JavaScriptu. Pozwala ono także przeprowadzać analizę kodu w celu odnalezienia typowych błędów programistycznych. Dostępne jest także API REST, które pozwala na zautomatyzowane użycie hostowanego Closure Compiler a. Programiści mają do dyspozycji również wtyczkę Firebug (Closure Inspector) służącą do debugowania skompresowanego kodu. Za jego pomocą można mapować skompresowany kod na oryginalny. Closure Compiler również jest dostępny na zasadach Apache License /2010

13 Aktualności Firefox ma 5 lat! 9 listopada 2009 roku przeglądarka Mozilla Firefox obchodziła piąte urodziny. Pierwsza stabilna wersja (1.0) tej opartej na silniku Gecko przeglądarki pojawiła się w 2004 roku. Swoimi funkcjami i szybkością działania wprowadziła na rynku przeglądarek niemałą rewolucję. Początkowo, jeszcze w fazie produkcji i beta-testów, przeglądarka nosiła nazwę Phoenix, później przez kilka miesięcy nazywała się Firebird. Ostatecznie, w związku z istnieniem innych produktów o powyższych nazwach, przed premierą zmieniono nazwę przeglądarki na Firefox. Rok później, w listopadzie 2005, pojawiła się odświeżona wersja 1.5, w której zadebiutował system automatycznych aktualizacji i drobne usprawnienia, takie jak chociażby zmiana kolejności kart za pomocą metody przeciągnij i upuść. Firefox mógł już także wówczas pochwalić się bardziej znaczącym udziałem w rynku przeglądarek: 8,5%. W roku 2006, tym razem w październiku, miała miejsce premiera zupełnie nowej wersji przeglądarki Firefox (2.0). Odtwarzanie sesji, wbudowane sprawdzanie pisowni, ochrona przed phishingiem oraz ponad tysiąc dodatków w postaci wtyczek, przyczyniły się do sporego sukcesu kolejnej odsłony Ognistego Liska. Udział w rynku w listopadzie 2006, miesiąc po premierze wersji 2.0, wyniósł 12,9%. W polskim Internecie to właśnie wersja 2.0 była pierwszą, która pokonała Internet Explorer'a; stało się to w kwietniu 2008 roku, na krótko przed premierą wersji trzeciej. Z Firefoksa 2.0 korzystało wówczas aż 34,7% polskich internautów. Wielka premiera trzeciej wersji przyszła dopiero po blisko dwóch latach: 17 czerwca 2008 roku, a przy tej okazji Mozilli udało się ustanowić światowy rekord liczby pobrań oprogramowania w ciągu 24 godzin. Firefoksa 3.0 pobrało wówczas ponad 8,2 mln użytkowników na całym świecie. Co nowego czekało na nich w nowej odsłonie Liska? Zasadniczo niewiele, poza odświeżonym interfejsem znalazły się tam nowe, bardziej kompleksowe mechanizmy zabezpieczeń i usprawnione zarządzanie pamięcią. Udział w rynku w miesiącu premiery wersji 3.0 wyniósł 19%. Czerwiec roku 2009 to z kolei premiera wersji 3.5, która wniosła do przeglądarki funkcję przeglądania prywatnego (bez zapisywania śladów), obsługę HTML 5 czy przeciągania kart na obszar okna przeglądarki, by zostały automatycznie otwarte w nowym oknie. Wersja ta wydana została aż w 73 wersjach językowych; liczba ta była niemal trzy razy większa, niż w przypadku wersji 1.0. Firefoksa używa obecnie 330 milionów ludzi na świecie. Przeglądarka ta jest oprogramowaniem wolnym i otwartym, a 40% kodu stworzone zostało przez wolontariuszy. Według stanu na koniec sierpnia 2009 liczba pobrań wszystkich wersji od początku istnienia Firefoksa przekroczyła miliard. Firefox jest dostępny w ponad 70 wersjach językowych, co przekłada się na 97% języków używanych przez światową populację internautów. Prawie wszystkie wersje językowe oprócz angielskiej są lokalizowane przez członków społeczności. Co ciekawe, ponad 50% globalnej liczby użytkowników Firefoksa używa wersji zlokalizowanych. iphone doczekał się wirusa... Posiadacze odblokowanych telefonów Apple muszą mieć się na baczności powstał pierwszy robak zdolny wykorzystać luki złamanego iphone a. Wirus nastawiony jest na atakowanie telefonów, w których przeprowadzono Jailbreak operację modyfikacji iphone a umożliwiającą korzystanie z nieautoryzowanych aplikacji dostępnych poza App Store. Robak do rozpowszechniania wykorzystuje protokół SSH, bazując na prostym założeniu, że spora grupa użytkowników nie zmienia domyślnego hasła dostępu. Gdy szkodnik znajdzie się już w telefonie ofiary, wyszukuje kolejne niezabezpieczone iphone y i wysyła im swoją kopię. Na szczęście Ikee (tak nazywa się wirus) nie czyni wielkich szkód. Ogranicza się do podmiany tapety na obrazek z wizerunkiem Ricka Astley a i wyświetlenia napisu ikee is never gonna give you up. Istnieje jednak ryzyko, że Ikee ulegnie modyfikacji i zacznie kraść dane właścicieli telefonów Apple, toteż wszystkim posiadaczom iphonów po Jailbreaku radzimy zmienić domyślne hasło SSH z alpine na dowolnie inny ciąg znaków. Amazon wydaje Kindle dla Windows Znany sklep internetowy Amazon wydał Kindle dla PC: softwarową wersję czytnika Kindle dającą dostęp do e-książek bezpośrednio na komputerze wyposażonym w system Windows. Aplikacja daje dostęp do kilkuset tysięcy publikacji zgromadzonych w Kindle Store, które standardowo zabezpieczone są mechanizmem DRM. Oprogramowanie umożliwia synchronizację ze sprzętowym czytnikiem i pobranie zgromadzonych w nim książek. Osoby nieposiadające fizycznego Kindle mogą powiązać program ze swoim kontem Amazon i czytać dostępne publikacje wyłącznie na ekranie komputera. Właściciele maszyn wyposażonych w Windows 7 i dotykowy ekran mogą ponadto powiększać tekst i kartkować wirtualną książkę, po prostu przesuwając palcami po ekranie. Oprogramowanie Kindle może działać na niemal każdym komputerze wyposażonym w system Windows XP lub nowszy: wymagania sprzętowe aplikacji są bardzo niewielkie. Co więcej, Amazon pracuje także nad wersją przeznaczoną dla systemów Mac OS X. RunRev: programowanie w języku (prawie) naturalnym? Starzy użytkownicy Macintoshy pamiętają pewnie język HyperTalk który służył do programowania zadziwiającego środowiska deweloperskiego HyperCard, który był chyba pierwszym udanym projektem hipermediów przed pojawieniem się WWW i pozwalał na szybkie budowanie w wizualny sposób bazodanowych aplikacji. Teraz kolejna inkarnacja tego pamiętającego lata osiemdziesiąte XX wieku języka szuka swojego miejsca, jako kolejny język dla WWW. Jest to efekt prac firmy Runtime Revolution, która wydała właśnie wersję 4.0 środowiska Revolution. Używany w nim język revtalk pozwala na programowanie w języku naturalnym, co w praktyce oznacza, że polecenia języka wyglądają (mniej więcej) jak realne zdania w języku angielskim. Na przykład, jeśli chcemy uzyskać dostęp do ostatniej linii na danej stronie WWW, piszemy po prostu: what is the last line on [URL]. Zdaniem Kevina Millera, dyrektora generalnego RunRev, oszczędność czasu programisty (aplikacje mogą być tworzone z wykorzystaniem nawet o 90% mniejszej liczby linii kodu), kompilacja do efektywnego kodu bajtowego i niezależność od platformy mają być tym, co przyciągnie deweloperów do projektu. Jednak prawdziwym przełomem w RunRev jest wprowadzenie obsługi WWW. Kod revtalk może być uruchamiany albo po stronie serwera (dzięki modułowi do serwera WWW), albo po stronie klienta tam z kolei zajmuje się nim binarna wtyczka do przeglądarki. Dostępne na własnościowej licencji środowisko deweloperskie można pobrać pod adresem jego podstawowa wersja (RevMedia) dostępna jest za darmo w wersjach dla Mac OS X-a, Linuksa i Windows

14 Biblioteka miesiąca Box2D Fizyczny świat w pudełku Znudziło Ci się skryptowanie animacji, czy definiowanie pseudorealistycznych krzywych ruchu? Pragniesz dodać więcej realizmu do swojej aplikacji, lecz nie czujesz się Newtonem? Nic straconego, skorzystaj ze sprawdzonej już ścieżki: Box2D to biblioteka stworzona do symulacji fizycznych światów 2D, dostępna dla każdego i to kompletnie za darmo! Dowiesz się Jak w prosty i przystępny sposób rozpocząć swą przygodę z Box2D; Do czego można zastosować Box2D; W jaki sposób definiować w Box2D fizyczne ciała sztywne i jak modyfikować ich właściwości. Poziom trudności Nie jestem fizykiem i (niestety) nie studiowałem tej pięknej dziedziny nauki, lecz podobnie jak zapewne większość z Was, lubię wprawiać grę w ruch, dawać życie jej obiektom. Czuję prawdziwą satysfakcję gdy ruch obiektów jest naturalny, realistyczny i sprawia, że świat gry przypomina świat rzeczywisty. Innymi słowy cieszy mnie jak gra odzwierciedla prawa natury z którymi spotykamy się w codziennym życiu. Biblioteka Box2D pozwala każdemu programiście na przeniesienie tych marzeń na ekrany PC etów, Smartphone ów i innych urządzeń, które można programować w języku C++. Interfejs biblioteki jest zadziwiająco prosty i nie wymaga biegłej znajomości praw fizyki. Opracowanie to opiera się na wersji omawianej biblioteki. Nawet ten sporych rozmiarów artykuł nie jest w stanie przekazać wszystkich możliwości Box2D, więc starałem się raczej zwrócić uwagę na niektóre, ważniejsze, aspekty jego użytkowania. Bardziej wnikliwe spojrzenie na szczegóły implementacji biblioteki znalazło swe miejsce w ramkach Dla dociekliwych, by Powinieneś wiedzieć Jak programować w języku C++; Jak wykonywać podstawowe operacje na wektorach i macierzach w przestrzeni dwuwymiarowej; Podstawowe prawa dynamiki ruchu brył sztywnych. nie przytłaczać treścią. Natomiast tematy z pogranicza fizyki teoretycznej zostały zamknięte w Ramkach Rozważania niepoprawnego fizyka (choć może lepiej ich nie czytajcie). Zawarte tu wzory, równania i przemyślenia, to tylko mój własny, uproszczony sposób postrzegania i tłumaczenia fizycznego świata, więc nie traktujcie ich zbyt serio, a raczej jako wstęp, czy wprowadzenie do wspaniałej i emocjonującej zabawy z fizyką i Box em. Powodzenia. Inicjalizacja symulacji fizycznej Zanim utworzysz i wprawisz w ruch swoje pierwsze fizyczne obiekty niezbędne jest utworzenie obiektu świata b2world. Obiekt ten definiuje podstawowe parametry symulacji, takie jak wielkość świata, wektor grawitacji. Odpowiada on także za zarządzanie pamięcią i tworzenie ciał sztywnych (i nie tylko) będących pod jego kontrolą. Teoretycznie możliwe jest utworzenie wielu instancji obiektów świata i przetwarzanie w ten sposób kilku symulacji jednocześnie, w praktyce korzystamy zazwyczaj z jednego. Do konstruktora b2world podajemy maksymalne rozmiary symulowanego świata w postaci AABB (patrz Słownik), dwuwymiarowy wektor grawitacji (przyspieszenie grawitacyjne), a także flagę informującą silnik, czy może wprowadzać on ciała w stan uśpienia (ang. sleep), gdy nie są aktualnie w ruchu (patrz Listing 1.). Bryła otaczająca (AABB), definiująca wielkość świata, powinna być tak dobrana, aby obejmowała ona wszystkie obiekty w scenie. Utworzenie obiektu poza obszarem tej bryły skończy się na asercji (niezorientowanych odsyłam do Słownika), co nie jest oczywiście błędem biblioteki. Natomiast wypadnięcie obiektu poza pre-definiowany obszar świata spowoduje jego zamrożenie (ang. freeze) i zakończenie jego symulacji. Sytuację taką możemy wykryć rejestrując odpowiedni obiekt słuchacza klasy pochodnej z b2boundarylistener. Tworząc własną implementację takiego słuchacza, należy rozszerzyć metodę Violation(), która zostanie wywołana w odpowiedzi na przekroczenie zakresu świata przez dowolne ciało. Jednak podobnie jak inne funkcje zwrotne (ang. callbacks) w Box2D metoda ta nie może modyfikować bieżącego obiektu świata (na przykład usuwać czy dodawać obiektów). Listing 2. prezentuje poprawny sposób usuwania obiektów, które wypadły poza obszar świata, ponieważ w metodzie Violation() obiekty nie mogą być bezpośrednio usuwane, są one dodawane do kolejki, która może być przetwarzana po update cie symulacji. Jednostki miary a stabilność symulacji Zarządzanie światem Box a wymaga przyjęcia ujednoliconej skali i pewnego zrozumienia miar przekazywanych i zwracanych z metod biblioteki. Przy tworzeniu obiektów, definiowaniu ich własności czy wprawianiu ciał w ruch posługujemy się wartościami, które mają swoje odzwierciedlenie w realnym świecie i są w rzeczywistości wielkościami mianowanymi (np. prędkość można opisać w m/s, km/h czy nawet węzłach). Standardowo arytmetyka w Box2D oparta jest na typie zmiennoprzecinkowym pojedynczej precyzji, float, choć może obsługiwać również operacje stałoprzecinkowe (zwróć uwagę na definicję typu float32 zlokalizowaną w pliku b2settings.h na definicję 14 01/2010

15 Box2D typu). Jednak niezależnie od wewnętrznego formatu danych (float czy Fixed) skala wartości używanych do interakcji i tworzenia świata ma decydujący wpływ na finalną jakość symulacji. Box2d został przygotowany do obsługi jednostek w kilogramach, metrach i sekundach. Oznacza to, iż jeśli przyjmiemy, że masa naszego obiektu definiowana jest w kilogramach, to jego kształt powinniśmy opisywać, używając metrów jako jednostki odległości, jednocześnie prędkość tego obiektu należy interpretować w m/s. Warty odnotowania jest też fakt, iż do symulacji ruchomych ciał zalecane jest używanie obiektów o wielkości od 0.1 do 10 metrów. Używanie tego systemu wielkości ma kluczowy wpływ na dokładność obliczeń, dlatego też zazwyczaj powinniśmy stosować pewien współczynnik skalowania do mapowania wielkości fizycznych na grafikę widzianą na ekranie monitora. Na pewno nie można pokusić się na przyjmowanie piksela ekranowego jako jednostki wielkości obiektów (1 piksel 1 metr), Box musiałby wtedy walczyć z obiektami rzędu wielkości Petronas Towers w Kuala Lumpur czy piramid w Gizie. Uwierzcie mi na słowo, że symulowanie takich kolosów nie jest najlepszą stroną żadnego silnika fizyki, tylko wyobraźcie sobie siły, jakie wiążą się z ruchem takich obiektów. Integracja i jakość symulacji Jak już wspomniałem, jednostki (skala) symulacji mają olbrzymi wpływ na jej dokładność, niestety nie tylko te wartości determinują precyzję obliczeń. Box2D do rozwiązania różniczkowych równań ruchu posługuje się numeryczną metodą aproksymacji Eulera. Nie muszę dodawać, iż jest to metoda obarczona pewnym błędem. Równania typu: dv = (F / m) dt gdzie dv i dt reprezentują nieskończenie małe zmiany prędkości i czasu, są przybliżane w dyskretnych momentach czasu za pomocą formuły (równania różnicowego): y ( x + x ) = y( x ) + x * y ( x ), gdzie x określa mierzalną (dyskretną) zmianę argumentu funkcji wielkość kroku różnicowania, a y (x) to wartość jej pochodnej. Rozpatrując tu równanie prędkości, mamy: v ( t + t ) = v( t ) + t * (F / m), innymi słowy prędkość w danym momencie czasu jest przybliżana na podstawie poprzedniej prędkości i różnicy czasowej pomiędzy tymi chwilami (pomnożonej de-facto przez jej pochodną, czyli przyspieszenie patrz Rysunek 1). Podobnie w przypadku obliczania pozycji (przemieszczenia ciała) posłużono się formułą: s ( t + t ) = s( t ) + t * v( t + t ). Aproksymacja tych i innych wielkości fizycznych jest wykonywana w dyskretnych momentach czasu poprzez wywołanie : b2world::step( float32 dt, int32 iterations ); Listing 1. Tworzenie obiektu świata i definiowanie parametrów symulacji bool allowsleep = true; b2vec2 gravityacc( 0.0f, -9.8f ); b2aabb worldaabb; worldaabb.lowerbound.set( f, 0.0f ); worldaabb.upperbound.set( 100.0f, 100.0f ); m_pworld = new b2world( worldaabb, gravityacc, allowsleep); return m_pworld; gdzie wielkość kroku t jest określona przez argument dt. Metoda ta służy do przetwarzania symulacji i jej wywołanie umieszczamy zazwyczaj w głównej pętli programowej, przekazując do niej czas (w sekundach), jaki upłyną od ostatniej ramki aplikacji. Niestety błąd metody Euler a, nawet dla małych wartości kroku, jest proporcjonalny do kwadratu kroku różnicowania i przestaje być akceptowalny dla większych wartości kroku (patrz Rysunek 1). Również bardzo małe wartości dt nie są pożądane, gdyż mogą powodować błędy zaokrągleń. Ponadto stabilność obliczeń może zakłócić duża zmienność tego kroku, dlatego zaleca się przetwarzanie symulacji ze stałym krokiem dt <= 1/60 (czyli częstotliwością 60 Hz). Oznaczało by to, iż aplikacja powinna przetwarzać główną pętlę z wydajnością 60 klatek na sekundę, co nie zawsze jest osiągalne. W związku z tym w wielu przypadkach krok symulacji nie może być bezpośrednio powiązany z częstotliwością odświeżania aplikacji. Zarządzanie pamięcią Ze względu na konieczność częstej alokacji małych obiektów, niejednokrotnie o bar- Listing 2. Implementacja słuchacza przekroczenia zakresu b2boundarylistener class CustomBoundaryListener : public b2boundarylistener public: void Violation( b2body* body ) private: ; // Use body user data to store game logic object pointer. PhysicEntity* entity = (PhysicEntity*)body->GetUserData(); m_destroyqueue.push_back( entity ); std::vector< PhysicEntity* > m_destroyqueue; // Somewhere else during world initialization m_pboundslistener = new CustomBoundaryListener; m_pworld->setboundarylistener( m_pboundslistener ); Listing 3. Usuwanie ciał z listy b2world b2body* bodynode = m_pworld->getbodylist(); while( bodynode ) // Store current body pointer b2body* tempptr = bodynode; // Get next body - iterates until NULL pointer received bodynode = tempptr->getnext(); // Destroy current body. Here you could also check // if body belongs to some objects class or has some // specified id using body user data: tempptr->getuserdata(); m_pworld->destroybody( tempptr ); 15

16 Biblioteka miesiąca Dla dociekliwych: Własny alokator Architektura biblioteki została tak zaprojektowana, iż możliwe jest użycie własnego, niskopoziomowego alokatora pamięci, skorzysta z niego również pool allocator. Implementacja Box a nie wykorzystuje bezpośrednio alokacji systemowej, a używa jedynie funkcji b2alloc i b2free, które ją przykrywają (standardowo wywołują one malloc i free z stdlib.h). Wystarczy zmienić implementację tych funkcji (plik b2settings.cpp), aby korzystać z możliwości własnego alokatora. Ułatwia to również migrowanie biblioteki na inne platformy. Dla dociekliwych: Stack allocator Podczas przetwarzania każdej ramki symulacji biblioteka intensywnie korzysta z pamięci tymczasowej, w związku z tym wprowadzono dodatkowy typ alokatora. Do alokacji krótkotrwałych buforów pomocniczych silnik używa stack allocator a (b2stackallocator). Choć jest to zaiste szczegół implementacji biblioteki, skrzętnie ukryty przed jej użytkownikiem, i nie implikuje on żadnych konsekwencji dla programisty, pozwolił on na utrzymanie dużej wydajności symulacji. Dla dociekliwych: Debug owanie pamięci W wersji debug owej biblioteki (makrodefinicja _ DEBUG) alokator używany przez silnik (b2blockallocator) ustawia zawartość zwolnionego bloku pamięci wartością 0xFD, co pozwala niekiedy zlokalizować problemy z odwołaniami do usuniętych obiektów. Aczkolwiek najczęściej pierwsze 4 bajty tego obszaru nie zawierają wartości 0xFD zapisany tam będzie adres następnego wolnego bloku w puli. Aby podejrzeć zawartość pamięci pod danym wskaźnikiem podczas sesji debug owej w środowisku Visual Studio, z menu głównego wybierz Debug->Windows->Memory->Memory1 (Alt+6), a następnie w pole adresu podaj adres zapisany pod wskaźnikiem (możesz też podać nazwę zmiennej wskaźnikowej, jeśli znajduje się ona w obszarze bieżącego break point a). Rozważania niepoprawnego fizyka: Ciała statyczne Główną cechą ciał statycznych jest brak masy czy też gęstości, a właściwie zerowa jej wartość. Jak już wcześniej wspomniałem, w Box2D ciała te nie podlegają wpływowi grawitacji, co zdaje się zgodne z prawem powszechnego ciążenia: F = G * (m1 * m2) / (r * r). Stąd łatwo wnioskować, że siła przyciągania niezależnie od odległości ciał, jak i stałej grawitacyjnej (G) jest zawsze równa zeru (masa jednego z ciał jest zerowa). Ciał tych nie może też wprawić w ruch żadna inna siła, co może nie jest już tak intuicyjne, biorąc pod uwagę szczególną teorię względności, która podaje, że ciała o zerowej masie poruszają się z prędkością równą prędkości światła (pomijając opory). Patrząc na formułę drugiej zasady dynamiki: a = F / m należałoby raczej rozumieć, że obiekty statyczne mają nieskończoną masę, dlatego myśląc o ciałach statycznych, lepiej pominąć względy matematyczno-estetyczne. Jednak zapewniam Was, że próby wprowadzenia tych ciał w ruch za pomocą metod: void b2body::applyforce( const b2vec2& force, const b2vec2& point ); void b2body::applytorque( float32 torque ); void b2body::applyimpulse( const b2vec2& imp, const b2vec2& point ); skończą się fiaskiem. Podobnie ustawienie prędkości liniowej czy kątowej: void b2body::setlinearvelocity( const b2vec2& v ); void b2body::setangularvelocity( float32 omega ); tych ciał nie spowoduje przemieszczenia czy obrotu tych ciał, choć może spowodować pewne komplikacje przeczytaj Ramkę Uwaga: Prędkości ciał statycznych. dzo krótkim czasie istnienia (np. dane kolizji), Box2D wykorzystuje własny alokator (b2blockallocator) pamięci zoptymalizowany do zarządzania małymi blokami tzw. pool allocator (patrz Słownik). Pozwala on na szybką alokację wielu obiektów, nawet w każdej ramce symulacji, bez ciągłej konieczności odwoływania się do pamięci systemowej (alokacji na stercie). Silnik rezerwuje większe pule pamięci, które są rozdzielane pomiędzy tworzone obiekty, a po ich zwolnieniu obszary te są zwracane z powrotem do puli. Fizyczna rezerwacja pamięci ze sterty (poprzez alokator systemowy) następuje tylko wtedy, gdy obsługiwana pula jest już niewystarczająca, następuje wtedy alokacja kolejnej puli. Podejście to zdecydowanie zmniejsza fragmentację pamięci, a także ogranicza obciążenie szyny systemowej. Wymaga jednak dostosowania się do przyjętych w bibliotece konwencji. W związku z tym tworzenie obiektów fizycznych (ciała sztywne, wiązania, kształty) nigdy nie odbywa się poprzez alokację systemową operator new czy funckję malloc, nigdy też nie używaj delete czy free do usuwania tych obiektów. Służą do tego metody fabryczne klasy b2world: b2body* b2world::createbody(const b2bodydef* bodydef); b2joint* b2world::createjoint(const albo metoda: b2jointdef* jointdef); b2shape* b2body::createshape(const b2shapedef* def); klasy b2body, pozwalająca na tworzenie kształtów. Parametry inicjalizacji tych obiektów są przekazywane w odpowiednich strukturach tak zwanych definicjach (b2bodydef, b2jointdef, b2shapedef). Silnik nie utrzymuje referencji do tych struktur, tylko kopiuje z nich dane, w związku z czym struktury te mogą być natychmiast usunięte lub użyte do utworzenia innych obiektów. Gdy zachodzi potrzeba usunięcia obiektów ze świata Box a, używamy metod: void b2world::destroybody(b2body* body); void b2world::destroyjoint (b2joint* joint); void b2body::destroyshape(b2shape* shape); Aczkolwiek należy pamiętać, że destruktor klasy b2world automatycznie usunie przynależne do świata obiekty (b2body, b2joint), podobnie jak destruktor klasy b2body usuwa wszystkie przypięte do ciała kształty (b2shape), wiązania i dane kolizji (b2contact). Box2d operuje na zwykłych wskaźnikach (brak obsługi smart pointers ani innego mechanizmu zliczania referencji), dlatego po usunięciu obiektu w gestii programisty leży usunięcie (wyzerowanie) wszystkich referencji do tego obiektu i obiektów przynależnych. Próba odwołania się do obiektu po jego usunięciu spowoduje niezdefiniowane błędy, a najprawdopodobniej crash aplikacji (zobacz 16 01/2010

17 Box2D też Ramkę Dla dociekliwych: Debug owanie pamięci). W dużych projektach warto więc pomyśleć o własnej implementacji uchwytów (ang. handle). Choć b2world usuwa wszystkie przynależne ciała i węzły w momencie destrukcji, niekiedy zachodzi potrzeba usunięcia pewnych obiektów jeszcze w trakcie trwania symulacji. Na przykład jeśli obiekt wypadł poza obszar zdefiniowanego świata lub gdy przeładowujemy część mapy gry. Usuwanie obiektów przynależnych do świata fizycznego Box a może wydawać się na początku nieco kłopotliwe, gdyż wymaga zrozumienia wewnętrznych struktur danych i operacji na nich wykonywanych. Wszystkie ciała fizyczne obsługiwane przez bibliotekę są w rzeczywistości węzłami swojej listy, dzięki czemu możliwa jest iteracja po obiektach danego typu. Biblioteka wykorzystuje te listy podczas przetwarzania ramki symulacji, z tego powodu nie można ich modyfikować (dodawanie/ usuwanie obiektów) w funkcjach zwrotnych słuchaczy: b2destructionlistener, b2boundarylistener, b2contactlistener. Funkcje zwrotne są wywoływane na etapie przetwarzania symulacji, czyli podczas iterowania po listach, a więc modyfikacja tych list może spowodować destabilizację aplikacji. Listy te można również wykorzystać do samodzielnego usuwania wielu obiektów, należy tu jednak zachować ostrożność, aby nie zakłócić spójności danych (czytaj: nie wyłożyć aplikacji). Najlepiej posłużyć się tu przykładem zamieszczonym w Listingu 3. statyczne, które nie wchodzą ze sobą w interakcje (nie kolidują ze sobą), nie podlegają działaniu siły grawitacji i nie posiadają masy; dynamiczne, mogą kolidować z innymi ciałami, zarówno statycznymi, jak i dynamicznymi, cechuje je przyspieszenie grawitacyjne i masa większa od zera. Tyle teorii, przejdźmy do praktyki. W bibliotece Box2D zanim utworzymy jakiekolwiek ciało, potrzebujemy jego definicji, czyli zastawu cech opisujących fizyczne (i nie tylko) własności tworzonej bryły. Dla przejrzystości i wygody programowania, wszystkie cechy potrzebne do inicjalizacji i tworzenia brył sztywnych zostały upakowane w strukturze b2bodydef i właśnie taką strukturę przekazuje się do metody fabrycznej b2world::createbody. Specyfikacja składowych struktury definicji została umieszczona w Tabelach 1 i 2. W tabelach znajduje się też krótkie wyjaśnienie wpływu poszczególnych składowych struktury na własności i symulację tworzonych brył, zarówno statycznych, jak i dynamicznych. Jeśli zerkneliście do Tabeli 1, to za pewne już wiecie, że to na etapie tworzenia obiektu decydujemy, czy będzie on ciałem statycznym, czy też ma podlegać symulacji ruchu (ciało dynamiczne). Decyduje o tym składowa definicji ciała massdata (struktura b2massdata), a dokładnie wartość masy w tej strukturze massdata.mass. Masa powyżej zera implikuje utworzenie ciała dy- Fizyka bryły sztywnej Pojęcie bryły sztywnej (ang. rigid body) pochodzi oczywiście z teorii fizyki i definiuje ciało, które nie zmienia swojej objętości ani kształtu. Innymi słowy poszczególne punkty tego ciała nigdy nie mogą się względem siebie przemieszczać. Box2D pozwala na symulację właśnie takiego typu obiektów fizycznych. W bibliotece można wyróżnić dwa rodzaje ciał sztywnych: Listing 4. Struktura definiująca rozkład masy ciała struct b2massdata ; // Body mass [kg] float32 mass; // Centroid position relative to b2vec2 center; body origin // Rotational inertia [kg-m^2] float32 I; Rysunek 1. Interpretacja graficzna i błąd metody Eulera. Źródło: Opracowanie własne Tabela 1. Składowe definicji ciała i ich znaczenie dla ciał statycznych Składowa massdata.mass Interpretacja dla ciał statycznych jeśli równa zero, wyznacza ciało statyczne Wartość domyślna 0.0f massdata.i nie dotyczy 0.0f massdata.center nie dotyczy b2vec(0.0f, 0.0f) userdata dane użytkownika NULL position pozycja w świecie b2vec(0.0f, 0.0f) angle kąt obrotu (w radianach) 0.0f lineardamping nie dotyczy 0.0f angulardamping nie dotyczy 0.0f allowsleep pozwalaj na usypianie true issleeping uśpiony po utworzeniu false fixedrotation nie dotyczy false isbullet nie dotyczy false 17

18 Biblioteka miesiąca Listing 5. Różne metody obliczania środka ciężkości bryły opisanej powierzchnią wypukłą //! Mass center calculus for non-uniform particles' mass distribution. b2vec2 CalcCentroid( const MassParticle* particles, unsigned int numparticles ) b2vec2 masscenter( 0.0f, 0.0f ); float totalmass = 0; for( unsigned int i = 0; i < numparticles; ++i ) masscenter += particles[i].mass * particles[i].pos; totalmass += particles[i].mass; masscenter *= 1.0f / totalmass; return masscenter; //! Centroid calculation for equal mass distribution on each vertex. b2vec2 CalcCentroid( const b2vec2* vertices, unsigned int numvertices ) b2vec2 masscenter( 0.0f, 0.0f ); for( unsigned int i = 0; i < numvertices; ++i ) masscenter += vertices[i]; masscenter *= 1.0f / numvertices; return masscenter; //! Calculate centroid as area weighted triangles' centers. b2vec2 CalcPolyCentroid( const b2vec2* vertices, unsigned int numvertices ) b2vec2 centroid( 0.0f, 0.0f ); float totalarea = 0.0f; const b2vec2 v0( 0.0f, 0.0f ); for( unsigned int i = 0; i < numvertices; ++i ) // Form triangles b2vec2 v1 = vertices[i]; b2vec2 v2 = i + 1 < numvertices? vertices[i+1] : vertices[0]; float32 trianglearea = b2cross(v1 - v0, v2 - v0) * 0.5f; centroid += trianglearea * (1.0f / 3) * (v0 + v1 + v2); totalarea += trianglearea; centroid *= 1.0f / totalarea; return centroid; Uwaga: Prędkości ciał statycznych Choć ustawienie prędkości liniowej czy kątowej ciała statycznego nie powoduje jego przemieszczenia (lub obrotu), to w wersji biblioteki istnieje błąd, który powoduje niepoprawną symulację kolizji z ciałami statycznymi o przypisanej prędkości. Choć prędkości brył statycznych powinny być zawsze ignorowane, w tym przypadku zostają uwzględnione przy kalkulacji odbicia ciał dynamicznych wchodzących z nimi w kolizję. Nie trzeba dodawać, że wyniki symulacji będą zaskakujące, dlatego też należy unikać bezsensownej (lub czasem przypadkowej) modyfikacji prędkości ciał statycznych. Pomocne tutaj mogą być metody pozwalające na sprawdzenie typu obsługiwanego obiektu: bool b2body::isstatic() const; bool b2body::isdynamic() const; namicznego. Natomiast ciała statyczne definiuje się, przypisując do tego pola wartość zero. Możliwe jest także obliczenie masy ciała na podstawie przyłączonych kształtów (b2body::setmassfromshapes), wtedy o faktycznej masie bryły decyduje gęstość (density) tworzących je kształtów więcej na ten temat w sekcji poświęconej kształtom. Martwa natura, czyli ciała statyczne W skrócie rzecz ujmując, do utworzenia ciał statycznych wystarczy w strukturze definicji (b2bodydef) podać jego pozycję (position) i ewentualnie kąt obrotu (angle). Inicjalizację pozostałych składowych struktury możemy zrzucić na konstruktor, ustawiane tam wartości domyślne są odpowiednie dla zdecydowanej większości przypadków. Oczywiście, gdy używamy tej samej definicji do tworzenia wielu ciał, w tym dynamicznych, należy zadbać o poprawne ustawienie pozostałych pól, a co najmniej ustawić wartość masy (massdata.mass) na zero, przecież to ona decyduje o tym, czy ciało będzie faktycznie statyczne. Osobnego wyjaśnienia wymaga składowa bool owska allowsleep. Ustawienie jej na true pozwala silnikowi na tymczasowe usypianie obiektów nie wchodzących w interakcję z pozostałymi ciałami (nie kolidujących) i nie będących w ruchu (co jest zawsze prawdą w przypadku ciał statycznych). Uśpione obiekty nie podlegają symulacji ruchu, dzięki czemu, szczególnie w przypadku martwej natury, pozwala zaoszczędzić parę cennych taktów procesora. Ze stanu uśpienia ciało jest wybudzane w odpowiedzi na kolizję z innym obiektem lub w przypadku zerwania jego wiązania (o nich później). Można go też wybudzić manualnie przez wywołanie metody: void b2body::wakeup(); Ciała dynamiczne i ich własności Jak już wspomniałem, w Box2D ciała dynamiczne tworzone są podobnie jak statyczne, z tą jednak różnicą, iż ich masa w strukturze definicji (b2bodydef) musi być większa od zera (massdata.mass > 0). Jeśli tak określimy masę obiektu, znaczenia nabierają pozostałe składowe struktury b2massdata, Listing 4. Naturalnie obliczenie środka ciężkości czy też momentu obrotowego może wydać się nieco problematyczne, na szczęście biblioteka może zrobić to za nas, bazując na geometrii i gęstości przyłączonych do ciała kształtów (o tym trochę później). Wystarczy wywołanie metody: void b2body::setmassfromshapes(); 18 01/2010

19 Box2D a obliczone wielkości fizyczne będą odzwierciedlały rzeczywisty rozmiar, gęstość i rozłożenie masy w obrębie ciała sztywnego. Oczywiście również wartość masy całkowitej ciała zostanie tu ponownie obliczona. Co więcej, użycie tej metody pozwala na zapewnienie prawidłowych relacji masa-gęstość-objętość pomiędzy obiektami w wirtualnym świecie Box a. Ponadto jest to wygodny i szybki sposób na aktualizację własności bryły po odłączeniu lub dołączeniu doń kształtów. W obliczu tych zalet zalecałbym używanie wyłącznie tej metody do ustalania masy tworzonych obiektów, szczególnie początkującym programistom fizyki. Struktura definicji ciała posiada jeszcze dwie ciekawe wartości, które mają wpływ na ruch tworzonej bryły, są to parametry wygaszania ruchu liniowego i obrotowego (lineardamping, angulardamping). Wartości te można kojarzyć z oporem w ośrodku ruchu (np. opór powietrza), jednak ich symulacja jest znacznie uproszczona w Box2D. W większości przypadków przyjmuje się wartości z zakresu 0-0.1, przy czym damping równy 0 oznacza brak oporu, a jego wielkość równa 1 powoduje pełne wygaszenie ruchu po sekundzie symulacji (wartość przybliżona, gdyż zmienne te podlegają całkowaniu w czasie). Dla zachowania realizmu i stabilności symulacji warto ustawić niewielką wartość oporu ruchu obrotowego, natomiast wygaszanie ruchu liniowego zazwyczaj ustalamy na zero, aby uniknąć sztucznego efektu pływania ciał (chyba że jest on zamierzony). Osobnego wyjaśnienia wymaga flaga isbullet, która ma znaczenie tylko dla ciał dynamicznych i powinna być stosowana tu z rozsądkiem. Ustawienie jej wartości na true powoduje uruchomienie kosztownego mechanizmu CCD (continuous collision detection) do precyzyjnego wykrywania kolizji pomiędzy ciałami dynamicznymi. Mechanizm ten został zaimplementowany, aby zapobiec przenikaniu (tunelowaniu) szybko poruszających się obiektów przez inne obiekty kolizyjne. Efekt ten powstaje, gdy obiekt porusza się na tyle szybko, że droga przebyta w jednym kroku symulacji pozwala na przemieszczenie się bryły z jednej strony na drugą stronę napotkanego na swej drodze obiektu. Implementacja CCD polega na rozciąganiu w obrębie jednej ramki ruchu obiektu, tak aby kolizja mogła zostać wykryta. Mechanizm ten jest standardowo używany przez Box2D do wykrywania kolizji ciał statycznych z ruchomymi bryłami (jest w tym przypadku mniej kosztowny obliczeniowo). Jednak przy wykrywaniu zderzeń dwóch brył dynamicznych wymaga już znacznie więcej Tabela 2. Definicja ciała dynamicznego, interpretacja parametrów i wartości domyślne Składowa massdata.mass Interpretacja dla ciał statycznych dla ciał dynamicznych zawsze większa od zera Wartość domyślna 0.0f massdata.i moment obrotowy 0.0f massdata.center środek ciężkości b2vec(0.0f, 0.0f) userdata dane użytkownika NULL position pozycja w świecie b2vec(0.0f, 0.0f) angle kąt obrotu (w radianach) 0.0f lineardamping wygaszanie ruchu liniowego 0.0f angulardamping wygaszanie ruchu obrotowego 0.0f allowsleep pozwalaj na usypianie true issleeping uśpiony po utworzeniu false fixedrotation wyłącz symulację obrotów false isbullet uruchom CCD false Dla dociekliwych: Masa, moment obrotowy i środek ciężkości Jeśli zastanawiasz się, jak rozumieć pojęcie masy, środka ciężkości czy momentu obrotowego i jaki wpływ mają te wielkości na symulację fizyczną, najlepiej przypomnieć sobie podstawy mechaniki. Do naszych celów wystarczy rozumieć masę jako miarę oporu ciała na próby wprawienia go w ruch liniowy lub zmiany jego prędkości (II zasada dynamiki). Analogicznie moment obrotowy jest miarą oporu ciała na ruch obrotowy. Środek ciężkości możemy natomiast interpretować jako punkt, wokół którego masa ciała jest równomiernie rozłożona, lub inaczej, punkt do którego przyłożenie dowolnej siły nie spowoduje ruchu obrotowego bryły. Aproksymacja tych wielkości zaiste nie opiewa o technologię rakietową i wymaga jedynie podziału ciała na skończoną liczbę punktów o niezerowej masie. Możemy tu przyjąć, że każdy wierzchołek jest takim punktem, a jego masa jest równa całkowitej masie obiektu podzielonej przez ilość wszystkich wierzchołków. Po przyjęciu takich uproszczeń centrum masy w notacji wektorowej wyrazimy jako: mc = ( particlepos i * particlemass i ) / totalmass. Jeśli natomiast założymy dodatkowo, że gęstość jest równomiernie rozłożona w obrębie bryły (wszystkie cząstki mają jednakową masę), wzór można uprościć do: mc = ( particlepos i ) / numparticles. Metody te dają całkiem poprawne wyniki dla wszystkich brył quasi-obrotowych i quasi-symetrycznych, jednak im większa asymetria kształtu bryły tym bardziej wynik będzie odbiegał od rzeczywistości. W tych sytuacjach lepszym sposobem jest podział bryły na obszary (np. trójkąty) o mierzalnej powierzchni i obliczanie centrum masy jako średniej ważonej ich pozycji: mc = ( trianglecenter i * trianglearea i ) / totalarea, gdzie: trianglecenter = ( v0 + v1 + v2 ) / 3, trianglearea = b2cross(v1 v0, v2 v0). Jako wierzchołek v0 przyjmujemy tu dowolny punkt w układzie lokalnym bryły (np. [0, 0]), wokół którego tworzymy wachlarz trójkątów na podstawie punktów brzegowych ciała. W ten sposób v0 jest punktem wspólnym wszystkich trójkątów. Metoda ta jest w istocie stosowana w bibliotece Box2D. Implementację tych prostych metod obliczania centrum masy znajdziecie na Listingu 5. Obliczanie momentu obrotowego dla brył quasi-symetrycznych można oprzeć na całce: I = (x2 + y2) dm, gdzie x i y określają pozycję cząstek bryły w stosunku do jej centrum masy, a m to ich masa. Upraszczając (dyskretyzując) ją do zbioru punktów opisujących kształt bryły, mamy: I = ( d i * particlemass i ). gdzie d i to odległość i-tej cząstki masy (wierzchołka) od środka ciężkości. 19

20 Biblioteka miesiąca obliczeń i dlatego musi być aktywowany przez programistę. Kolejna flaga fixedrotation pozwala na wyłączenie symulacji ruchu obrotowego dla danego ciała, co może być użyteczne w specyficznych przypadkach. Natomiast flaga issleeping pozwala na utworzenie obiektu w stanie uśpienia. W praktyce oznacza to, iż ciało zacznie się poruszać dopiero w odpowiedzi na interakcję z innymi obiektami (kolizja, zerwanie wiązania). Interpretację wszystkich składowych definicji w kontekście ciał dynamicznych zawiera Tabela 2. Listing 6. Różne metody tworzenia ciał i kształtów // Create static ground body in world center b2bodydef groundbodydef; groundbodydef.position.set( 0.0f, 0.0f ); Definiowanie kształtów bryły Po utworzeniu bryły i specyfikacji jej podstawowych własności przychodzi czas na nadanie jej kształtu. Ciało bez kształtu jest tylko programistycznym bytem, który nie definiuje nawet punktu w przestrzeni, więc żaden z niego użytek. Tworzenie i usuwanie kształtów odbywa się przez metody fabryczne klasy b2body: b2shape* b2body::createshape( b2shapedef* void b2body* groundbody = m_pworld->createbody( &groundbodydef ); // Attach rectangular shape to it b2polygondef groundshapedef; groundshapedef.setasbox( 20.f, 1.f ); groundbody->createshape( &groundshapedef ); // Create two circle shapes b2circledef circleshapedef; circleshapedef.radius = 0.5f; // Set circle position relative to body center circleshapedef.localposition.set( 0.0f, 0.0f ); // Create two dynamic circle bodies b2bodydef circlebodydef; // Set body world position and predefined mass circlebodydef.position.set( -1.f, 1.5f ); circlebodydef.massdata.mass = 0.3f; shapedef ); b2body::destroyshape( b2shape* shape ); Nie są to metody statyczne, więc łatwo się domyśleć, iż tworzony kształt jest własnością tylko konkretnej instancji bryły sztywnej i jest on automatycznie do niej przyłączany. Wskaźnik zwracany z metody m_pworld->createbody( &circlebodydef )->CreateShape( &circleshapedef ); circlebodydef.position.set( 1.f, 1.5f ); m_pworld->createbody( &circlebodydef )->CreateShape( &circleshapedef ); // Create trapezoid shape b2polygondef trapezshapedef; trapezshapedef.density = 1.0f; trapezshapedef.vertexcount = 4; trapezshapedef.vertices[3].set( -1.4f, 0.5f ); trapezshapedef.vertices[2].set( 1.4f, 0.5f ); trapezshapedef.vertices[1].set( 0.8f, 0.f ); trapezshapedef.vertices[0].set( -0.8f, 0.f ); // Attach shape to newly created body b2bodydef trapezbodydef; trapezbodydef.position.set( 0.f, 2.f ); b2body* trapezbody = m_pworld->createbody( &trapezbodydef ); trapezbody->createshape( &trapezshapedef ); // Calculate body mass from shape (with 1.0 density) // which makes body dynamic (mass > 0) trapezbody->setmassfromshapes(); CreateShape nigdy nie może zostać zwolniony za pomocą free/delete, a jedynym sposobem ręcznego usunięcia kształtu jest wywołanie metody b2body::destroyshape (więcej na ten temat w sekcji Zarządzanie pamięcią). Na szczęście destruktor b2body usuwa wszystkie przyłączone do ciała kształty, w związku z czym przechowywanie ich wskaźników i ręczne usuwanie nie jest konieczne. Wiemy już jak tworzyć i przyłączać do ciała geometrię, jednak do czego służy tajemnicza struktura b2shapedef? W zasadzie jest to tylko struktura bazowa, która definiuje zestaw podstawowych własności kształtu i nie może być bezpośrednio używana do tworzenia kształtów (choć architektura biblioteki właściwie pozwala na stworzenie instancji b2shapedef brak metod czysto wirtualnych sic). Możemy natomiast używać dwóch typów dziedziczących po niej b2circledef i b2polygondef, które służą odpowiednio do definiowania kół i wielokątów. W pierwszym przypadku ustalamy pozycję koła (względem centrum bryły rodzica) i jego promień (patrz Listing 6), w drugim natomiast mamy nieco więcej możliwości. Struktura b2polygondef pozwala na stworzenie prawie dowolnego wielokąta wypukłego zbudowanego maksymalnie z b2_maxpolygonvertices wierzchołków. W wersji biblioteki stała ta jest zdefiniowana w pliku b2settings.h i wynosi 8. Wielkość tą możemy zwiększyć i po pre-kompilowaniu biblioteki korzystać z większych wielokątów, jednak trzeba pamiętać, że wpłynie to na konsumpcję pamięci wierzchołki te są alokowane statycznie dla każdego kształtu typu b2polygonshape. Reasumując, do budowania złożonych geometrii użyjemy raczej kilku prostszych wielokątów niż jednego rozbudowanego. Struktura definicji wielokąta zawiera też dwie proste metody pozwalające na szybkie definiowanie prostokątów: void SetAsBox(float32 hx, float32 hy); void SetAsBox(float32 hx, float32 hy, const b2vec2& center, float32 angle); Pierwsza z nich tworzy prostokąt o wymiarach [2 * hx, 2 * hy] i centrum w [0, 0] (lokalnego układu odniesienia bryły), natomiast druga pozwala na utworzenie dowolnie obróconego prostokąta (parametr angle), którego środek znajduje się w punkcie center. Oczywiście w większości przypadków metody te nie zaspokoją Waszych potrzeb, więc trzeba uciec się do samodzielnej modyfikacji pól struktury. W tym celu wypełniamy tablicę vertices (maksymalnie b2 _ maxpolygonvertices pozycji), a w pole 20 01/2010

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

JavaFX. Technologie Biznesu Elektronicznego. Wydział Informatyki i Zarządzania Politechnika Wrocławska

JavaFX. Technologie Biznesu Elektronicznego. Wydział Informatyki i Zarządzania Politechnika Wrocławska JavaFX - wprowadzenie JavaFX Wydział Informatyki i Zarządzania Politechnika Wrocławska Definicja JavaFX - wprowadzenie Definicja Historia JavaFX Script Rich Internet Application JavaFX - rodzina technologii

Bardziej szczegółowo

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Studia podyplomowe dla nauczycieli INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Przedmiot JĘZYKI PROGRAMOWANIA DEFINICJE I PODSTAWOWE POJĘCIA Autor mgr Sławomir Ciernicki 1/7 Aby

Bardziej szczegółowo

Tworzenie aplikacji Web Alicja Zwiewka. Page 1

Tworzenie aplikacji Web Alicja Zwiewka. Page 1 Tworzenie aplikacji Web Alicja Zwiewka Page 1 Co to są web-aplikacje? Aplikacja internetowa (ang. web application) program komputerowy, który pracuje na serwerze i komunikuje się poprzez sieć komputerową

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

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

Programowanie Komponentowe WebAPI

Programowanie Komponentowe WebAPI Programowanie Komponentowe WebAPI dr inż. Ireneusz Szcześniak jesień 2016 roku WebAPI - interfejs webowy WebAPI to interfejs aplikacji (usługi, komponentu, serwisu) dostępnej najczęściej przez Internet,

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Język programowania prosty bezpieczny zorientowany obiektowo wielowątkowy rozproszony przenaszalny interpretowany dynamiczny wydajny Platforma

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

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

OpenLaszlo. OpenLaszlo

OpenLaszlo. OpenLaszlo OpenLaszlo Spis Treści 1 OpenLaszlo Co to jest? Historia Idea Architektura Jako Flash lub DHTML Jako servlet lub SOLO Jak to działa? Język LZX Struktura programu Skrypty Obiekty i klasy Atrybuty i metody

Bardziej szczegółowo

Wykład I. Wprowadzenie do baz danych

Wykład I. Wprowadzenie do baz danych Wykład I Wprowadzenie do baz danych Trochę historii Pierwsze znane użycie terminu baza danych miało miejsce w listopadzie w 1963 roku. W latach sześcdziesątych XX wieku został opracowany przez Charles

Bardziej szczegółowo

Piotr Dynia. PowerPivot. narzędzie do wielowymiarowej analizy danych

Piotr Dynia. PowerPivot. narzędzie do wielowymiarowej analizy danych Piotr Dynia PowerPivot narzędzie do wielowymiarowej analizy danych Od autora Wraz z wprowadzeniem na rynek nowej wersji pakietu Office: Microsoft Office 2010 udostępniono darmowy dodatek dla Excela o nazwie

Bardziej szczegółowo

Dokumentacja aplikacji Szachy online

Dokumentacja aplikacji Szachy online Projekt z przedmiotu Technologie Internetowe Autorzy: Jakub Białas i Jarosław Tyma grupa II, Automatyka i Robotyka sem. V, Politechnika Śląska Przedmiot projektu: Aplikacja internetowa w języku Java Dokumentacja

Bardziej szczegółowo

Symulator doboru koloru i przetłoczenia bramy garażowej oraz wzoru drzwi wejściowych. do elewacji budynku klienta

Symulator doboru koloru i przetłoczenia bramy garażowej oraz wzoru drzwi wejściowych. do elewacji budynku klienta Symulator doboru koloru i przetłoczenia bramy garażowej oraz wzoru drzwi wejściowych do elewacji budynku klienta Wszechobecna nowa technologia Smartfony obecnie coraz częściej zastępują zwykłe telefony

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

System komputerowy. Sprzęt. System komputerowy. Oprogramowanie

System komputerowy. Sprzęt. System komputerowy. Oprogramowanie System komputerowy System komputerowy (ang. computer system) to układ współdziałaniadwóch składowych: sprzętu komputerowegooraz oprogramowania, działających coraz częściej również w ramach sieci komputerowej.

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

System Zarządzania Treścią

System Zarządzania Treścią System Zarządzania Treścią Dawno, dawno temu, w latach 90-tych XX wieku publikowanie w Internecie nie było proste. Wymagało znajomości HTMLa do stworzenia strony, FTP do wysłania zawartości na serwer i

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

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

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

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa 1 Java Wprowadzenie 2 Czym jest Java? Język programowania prosty zorientowany obiektowo rozproszony interpretowany wydajny Platforma bezpieczny wielowątkowy przenaszalny dynamiczny Rozumiana jako środowisko

Bardziej szczegółowo

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ), PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 2. Przygotowanie środowiska pracy

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

Z usługi można korzystać jednocześnie na kilku urządzeniach. Jakość sygnału dostosowuje się do prędkości łącza.

Z usługi można korzystać jednocześnie na kilku urządzeniach. Jakość sygnału dostosowuje się do prędkości łącza. GSMONLINE.PL UPC wprowadza w Polsce Horizon TV 2014-05-21 UPC wprowadza do Polski usługę Horizon TV. Od 21.05 uzytkownicy pakietów Select Extra HD oraz Max Extra HD mogą korzystać ze specjalnej mobilnej

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

I. Informacje ogólne. Jednym z takich systemów jest Mambo.

I. Informacje ogólne. Jednym z takich systemów jest Mambo. MAMBO (CMS) I. Informacje ogólne CMS, Content Management System ("system zarządzania treścią") jest to jedna lub zestaw aplikacji internetowych pozwalających na łatwe utworzenie oraz późniejszą aktualizację

Bardziej szczegółowo

Serwery. Autorzy: Karol Czosnowski Mateusz Kaźmierczak

Serwery. Autorzy: Karol Czosnowski Mateusz Kaźmierczak Serwery Autorzy: Karol Czosnowski Mateusz Kaźmierczak Czym jest XMPP? XMPP (Extensible Messaging and Presence Protocol), zbiór otwartych technologii do komunikacji, czatu wieloosobowego, rozmów wideo i

Bardziej szczegółowo

Plan. Wprowadzenie. Co to jest APEX? Wprowadzenie. Administracja obszarem roboczym

Plan. Wprowadzenie. Co to jest APEX? Wprowadzenie. Administracja obszarem roboczym 1 Wprowadzenie do środowiska Oracle APEX, obszary robocze, użytkownicy Wprowadzenie Plan Administracja obszarem roboczym 2 Wprowadzenie Co to jest APEX? Co to jest APEX? Architektura Środowisko Oracle

Bardziej szczegółowo

Poniżej przedstawiamy 15 najważniejszych naszym zdaniem nowości, na które warto zwrócić uwagę podczas korzystania z Nougata.

Poniżej przedstawiamy 15 najważniejszych naszym zdaniem nowości, na które warto zwrócić uwagę podczas korzystania z Nougata. Przegląd zmian w nowym systemie Google. {reklama-artykul} Android 7.0 Nougat miał już swoją oficjalną premierę i trafił do pierwszych szczęśliwców - głównie posiadaczy urządzeń z serii Nexus. Wokół aktualizacji

Bardziej szczegółowo

ZAŁĄCZNIK NR 3 OPIS PRZEDMIOTU ZAMÓWIENIA DOTYCZĄCY WDROŻENIA PLATFORMY ZAKUPOWEJ

ZAŁĄCZNIK NR 3 OPIS PRZEDMIOTU ZAMÓWIENIA DOTYCZĄCY WDROŻENIA PLATFORMY ZAKUPOWEJ ZAŁĄCZNIK NR 3 OPIS PRZEDMIOTU ZAMÓWIENIA DOTYCZĄCY WDROŻENIA PLATFORMY ZAKUPOWEJ 1. PRZEDMIOT ZAMÓWIENIA Przedmiotem zamówienia jest dostarczenie i wdrożenie systemu informatycznego dalej Platforma zakupowa

Bardziej szczegółowo

REFERAT O PRACY DYPLOMOWEJ

REFERAT O PRACY DYPLOMOWEJ REFERAT O PRACY DYPLOMOWEJ Temat pracy: Projekt i realizacja elektronicznego dziennika ocen ucznia Autor: Grzegorz Dudek wykonanego w technologii ASP.NET We współczesnym modelu edukacji, coraz powszechniejsze

Bardziej szczegółowo

RFP. Wymagania dla projektu. sklepu internetowego B2C dla firmy Oplot

RFP. Wymagania dla projektu. sklepu internetowego B2C dla firmy Oplot RFP Wymagania dla projektu sklepu internetowego B2C dla firmy Oplot CEL DOKUMENTU Celem niniejszego dokumentu jest przedstawienie wymagań technicznych i funkcjonalnych wobec realizacji projektu budowy

Bardziej szczegółowo

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki Studia Podyplomowe INFORMATYKA Podstawy Informatyki Wykład V Rzut okiem na języki programowania 1 Kompilacja vs. interpretacja KOMPILACJA Proces, który przetwarza program zapisany w języku programowania,

Bardziej szczegółowo

Dokument Detaliczny Projektu

Dokument Detaliczny Projektu Dokument Detaliczny Projektu Dla Biblioteki miejskiej Wersja 1.0 Streszczenie Niniejszy dokument detaliczny projektu(ddp) przedstawia szczegóły pracy zespołu projektowego, nad stworzeniem aplikacji bazodanowej

Bardziej szczegółowo

REFERAT O PRACY DYPLOMOWEJ

REFERAT O PRACY DYPLOMOWEJ REFERAT O PRACY DYPLOMOWEJ Temat pracy: Projekt i implementacja mobilnego systemu wspomagającego organizowanie zespołowej aktywności fizycznej Autor: Krzysztof Salamon W dzisiejszych czasach życie ludzi

Bardziej szczegółowo

Firma Informatyczna ASDER. Prezentacja. Serwer danych lokalnych. Przemysław Kroczak ASDER 2012-08-06

Firma Informatyczna ASDER. Prezentacja. Serwer danych lokalnych. Przemysław Kroczak ASDER 2012-08-06 2012 Firma Informatyczna ASDER Prezentacja Serwer danych lokalnych Przemysław Kroczak ASDER 2012-08-06 Szanowni Państwo, W dzisiejszej coraz częściej trzeba współdzielić pliki między pracownikami/działami

Bardziej szczegółowo

Mateusz Kurleto NEOTERIC. Analiza projektu B2B Kielce, 18 października 2012

Mateusz Kurleto NEOTERIC. Analiza projektu B2B Kielce, 18 października 2012 2012 Pierwsze przymiarki do zakresu informatyzacji (rodzaj oprogramowania: pudełkowe, SaaS, Iaas, CC, PaaS. Zalety i wady: dostępność, koszty, narzędzia, ludzie, utrzymanie, bezpieczeństwo, aspekty prawne)

Bardziej szczegółowo

Co to jest smartfon?

Co to jest smartfon? Co to jest? jak korzystać w pełni ze a bez obaw o koszty Smartfon to połączenie telefonu i komputera. Ma wszystkie funkcje zwykłego telefonu komórkowego, czyli: połączenia głosowe SMS-y, MMS-y aparat foto

Bardziej szczegółowo

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE WINDOWS 1 SO i SK/WIN 007 Tryb rzeczywisty i chroniony procesora 2 SO i SK/WIN Wszystkie 32-bitowe procesory (386 i nowsze) mogą pracować w kilku trybach. Tryby pracy

Bardziej szczegółowo

[1/15] Chmury w Internecie. Wady i zalety przechowywania plików w chmurze

[1/15] Chmury w Internecie. Wady i zalety przechowywania plików w chmurze Chmury w Internecie Nota Materiał powstał w ramach realizacji projektu e-kompetencje bez barier dofinansowanego z Programu Operacyjnego Polska Cyfrowa działanie 3.1 Działania szkoleniowe na rzecz rozwoju

Bardziej szczegółowo

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 1. Wprowadzenie do aplikacji internetowych

Bardziej szczegółowo

egroupware czy phpgroupware jest też mniej stabilny.

egroupware czy phpgroupware jest też mniej stabilny. Opengroupware to projekt udostępniający kompletny serwer aplikacji oparty na systemie Linux. Dostępny na licencji GNU GPL, strona domowa: http://www.opengroupware.org/ Jego cechy to wysoka stabilność,

Bardziej szczegółowo

Szczegółowa specyfikacja funkcjonalności zamawianego oprogramowania.

Szczegółowa specyfikacja funkcjonalności zamawianego oprogramowania. Szczegółowa specyfikacja funkcjonalności zamawianego oprogramowania. Założenia projektowe systemu NETDOC. część 1: założenia ogólne i funkcjonalność rdzenia systemu Założenia ogólne Celem projektu jest

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

Czym jest technologia Bluetooth?

Czym jest technologia Bluetooth? Tomasz Merda Czym jest technologia Bluetooth? Czym jest technologia Bluetooth? Bluetooth to technologia pozwalająca na komunikację radiową na ograniczoną odległość (standardowo do 10 metrów). Przy pomocy

Bardziej szczegółowo

Java jako język programowania

Java jako język programowania Java jako język programowania Interpretowany programy wykonują się na wirtualnej maszynie (JVM Java Virtual Machine) Składnia oparta o język C++ W pełni zorientowany obiektowo (wszystko jest obiektem)

Bardziej szczegółowo

OPIS PRZEDMIOTU ZAMÓWIENIA

OPIS PRZEDMIOTU ZAMÓWIENIA ZAPYTANIE OFERTOWE Poznań, 8 lutego 2017 r. Szanowni Państwo, Uniwersytet Przyrodniczy w Poznaniu zwraca się z uprzejmą prośbą o przesłanie oferty handlowej na wykonanie usługi opracowania, uruchomienia

Bardziej szczegółowo

DESIGNER APPLICATION. powered by

DESIGNER APPLICATION. powered by DESIGNER APPLICATION powered by O FIRMIE HiddenData specjalizuje się w technologii dystrybucji treści video w Internecie oraz w budowie złożonych, funkcjonalnych aplikacji internetowych i mobilnych. Budujemy

Bardziej szczegółowo

Podstawy programowania. Wprowadzenie

Podstawy programowania. Wprowadzenie Podstawy programowania Wprowadzenie Proces tworzenia programu Sformułowanie problemu funkcje programu zakres i postać danych postać i dokładność wyników Wybór / opracowanie metody rozwiązania znaleźć matematyczne

Bardziej szczegółowo

Serwer druku w Windows Server

Serwer druku w Windows Server Serwer druku w Windows Server Ostatnimi czasy coraz większą popularnością cieszą się drukarki sieciowe. Często w domach użytkownicy posiadają więcej niż jedno urządzenie podłączone do sieci, z którego

Bardziej szczegółowo

Piotr Dynia. PowerPivot. narzędzie do wielowymiarowej analizy danych

Piotr Dynia. PowerPivot. narzędzie do wielowymiarowej analizy danych Piotr Dynia PowerPivot narzędzie do wielowymiarowej analizy danych Od autora Wraz z wprowadzeniem na rynek nowej wersji pakietu Office: Microsoft Office 2010 udostępniono darmowy dodatek dla Excela o nazwie

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

Tomasz Grześ. Systemy zarządzania treścią

Tomasz Grześ. Systemy zarządzania treścią Tomasz Grześ Systemy zarządzania treścią Co to jest CMS? CMS (ang. Content Management System System Zarządzania Treścią) CMS definicje TREŚĆ Dowolny rodzaj informacji cyfrowej. Może to być np. tekst, obraz,

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

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

Koncepcja wirtualnej pracowni GIS w oparciu o oprogramowanie open source

Koncepcja wirtualnej pracowni GIS w oparciu o oprogramowanie open source Koncepcja wirtualnej pracowni GIS w oparciu o oprogramowanie open source Dr inż. Michał Bednarczyk Uniwersytet Warmińsko-Mazurski w Olsztynie Wydział Geodezji i Gospodarki Przestrzennej Katedra Geodezji

Bardziej szczegółowo

weblsp Wybór przeglądarki i jej ustawienia Instrukcja ADH-Soft sp. z o.o., ul. 17 Stycznia 74, Warszawa

weblsp Wybór przeglądarki i jej ustawienia Instrukcja ADH-Soft sp. z o.o., ul. 17 Stycznia 74, Warszawa weblsp Wybór przeglądarki i jej ustawienia Instrukcja ADH-Soft sp. z o.o., ul. 17 Stycznia 74, 02-146 Warszawa www.adh.com.pl Spis treści 1. Wydajność aplikacji po stronie klienta... 3 2. Wybór przeglądarki

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

PRZYJAZNE ZARZĄDZANIE TREŚCIĄ TWOJEGO SERWISU WWW NALEŻYMY DO

PRZYJAZNE ZARZĄDZANIE TREŚCIĄ TWOJEGO SERWISU WWW NALEŻYMY DO PRZYJAZNE ZARZĄDZANIE TREŚCIĄ TWOJEGO SERWISU WWW NALEŻYMY DO Drupal jest obecnie jednym z najbardziej popularnych narzędzi do zarządzania treścią wityn internetowych. Jego bogata funkcjonalność pozwala

Bardziej szczegółowo

Bezpieczeństwo systemów komputerowych. Java i JavaScript. Java i JavaScript. Java - historia

Bezpieczeństwo systemów komputerowych. Java i JavaScript. Java i JavaScript. Java - historia Bezpieczeństwo systemów komputerowych Java i JavaScript mgr Katarzyna Trybicka-Francik kasiat@zeus.polsl.gliwice.pl pok. 503 Java i JavaScript używane w celu dodania cech interaktywności do stron WWW mogą

Bardziej szczegółowo

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji OMNITRACKER Wersja testowa Szybki przewodnik instalacji 1 Krok 1:Rejestracja pobrania (jeżeli nie wykonana dotychczas) Proszę dokonać rejestracji na stronieomninet (www.omnitracker.com) pod Contact. Po

Bardziej szczegółowo

Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów aplikacji SODiR w technologii JS/PKCS 12

Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów aplikacji SODiR w technologii JS/PKCS 12 Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów aplikacji SODiR w technologii JS/PKCS 12 Wersja 3.0 02-03-2017 Spis treści Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów

Bardziej szczegółowo

REFERAT PRACY DYPLOMOWEJ

REFERAT PRACY DYPLOMOWEJ REFERAT PRACY DYPLOMOWEJ Temat pracy: Projekt o implementacja pakietu gier planszowych realizowany na platformie Android Autor: Paweł Piechociński Promotor: dr Jadwiga Bakonyi Kategorie: gra planszowa

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

HTML, CSS i JavaScript / Laura Lemay, Rafe Colburn, Jennifer Kyrnin. Gliwice, cop Spis treści

HTML, CSS i JavaScript / Laura Lemay, Rafe Colburn, Jennifer Kyrnin. Gliwice, cop Spis treści HTML, CSS i JavaScript / Laura Lemay, Rafe Colburn, Jennifer Kyrnin. Gliwice, cop. 2017 Spis treści O autorach 11 Wprowadzenie 13 CZĘŚĆ I ROZPOCZĘCIE PRACY Lekcja 1. Co oznacza publikowanie treści w sieci

Bardziej szczegółowo

Przetwarzanie danych w chmurze

Przetwarzanie danych w chmurze Materiały dydaktyczne Katedra Inżynierii Komputerowej Przetwarzanie danych w chmurze Modele przetwarzania w chmurze dr inż. Robert Arsoba Robert.Arsoba@weii.tu.koszalin.pl Koszalin 2017 Wersja 1.0 Modele

Bardziej szczegółowo

System Kancelaris. Zdalny dostęp do danych

System Kancelaris. Zdalny dostęp do danych Kancelaris krok po kroku System Kancelaris Zdalny dostęp do danych Data modyfikacji: 2008-07-10 Z czego składaj adają się systemy informatyczne? System Kancelaris składa się z dwóch części: danych oprogramowania,

Bardziej szczegółowo

IBM SPSS Statistics Wersja 22. Linux - Instrukcja instalacji (licencja autoryzowanego użytkownika)

IBM SPSS Statistics Wersja 22. Linux - Instrukcja instalacji (licencja autoryzowanego użytkownika) IBM SPSS Statistics Wersja 22 Linux - Instrukcja instalacji (licencja autoryzowanego użytkownika) Spis treści Instrukcja instalacji.......... 1 Wymagania systemowe........... 1 Kod autoryzacji.............

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

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

omnia.pl, ul. Kraszewskiego 62A, 37-500 Jarosław, tel. +48 16 621 58 10 www.omnia.pl kontakt@omnia.pl

omnia.pl, ul. Kraszewskiego 62A, 37-500 Jarosław, tel. +48 16 621 58 10 www.omnia.pl kontakt@omnia.pl .firma Dostarczamy profesjonalne usługi oparte o nowoczesne technologie internetowe Na wstępie Wszystko dla naszych Klientów Jesteśmy świadomi, że strona internetowa to niezastąpione źródło informacji,

Bardziej szczegółowo

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone Typy przetwarzania Przetwarzanie zcentralizowane Systemy typu mainfame Przetwarzanie rozproszone Architektura klient serwer Architektura jednowarstwowa Architektura dwuwarstwowa Architektura trójwarstwowa

Bardziej szczegółowo

System kontroli wersji - wprowadzenie. Rzeszów,2 XII 2010

System kontroli wersji - wprowadzenie. Rzeszów,2 XII 2010 System kontroli wersji - wprowadzenie Rzeszów,2 XII 2010 System kontroli wersji System kontroli wersji (ang. version/revision control system) służy do śledzenia zmian głównie w kodzie źródłowym oraz pomocy

Bardziej szczegółowo

LearnIT project PL/08/LLP-LdV/TOI/140001

LearnIT project PL/08/LLP-LdV/TOI/140001 LearnIT project PL/08/LLP-LdV/TOI/140001 Newsletter Issue 2 April 2009 Drogi czytelniku, Przedstawiamy z przyjemnością drugie wydanie biuletynu projektu LearnIT. W tym wydaniu chcemy powiedzieć więcej

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

Nowe spojrzenie na prawo

Nowe spojrzenie na prawo LEX 2 Nowe spojrzenie na prawo Od 25 lat informujemy o prawie i tworzymy narzędzia przekazujące tę wiedzę. Szybko. Intuicyjnie. Nowocześnie. Stawiamy sobie za cel sprostanie wymaganiom naszych Klientów.

Bardziej szczegółowo

elektroniczna Platforma Usług Administracji Publicznej

elektroniczna Platforma Usług Administracji Publicznej elektroniczna Platforma Usług Administracji Publicznej Instrukcja użytkownika Instrukcja korzystania z certyfikatu wersja 7.6 Ministerstwo Spraw Wewnętrznych i Administracji ul. Batorego 5, 02-591 Warszawa

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

FAQ Systemu EKOS. 1. Jakie są wymagania techniczne dla stanowiska wprowadzania ocen?

FAQ Systemu EKOS. 1. Jakie są wymagania techniczne dla stanowiska wprowadzania ocen? 27.06.11 FAQ Systemu EKOS 1. Jakie są wymagania techniczne dla stanowiska wprowadzania ocen? Procedura rejestracji ocen wymaga podpisywania protokołów (w postaci wypełnionych formularzy InfoPath Forms

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

Szczegółowy opis zamówienia:

Szczegółowy opis zamówienia: Szczegółowy opis zamówienia: Rok 2016 budowa stron w html5 (8h v + 4h ćw) 8 szt. html5 - zaawans. (7h v + 5h ćw) 8 szt. programowania w java script (9h v + 7h ćw) 8 szt. java script zaawans (8h v + 4h

Bardziej szczegółowo

Podstawy technologii WWW

Podstawy technologii WWW Podstawy technologii WWW Ćwiczenie 8 PHP, czyli poczatki nowej, dynamicznej znajomosci Na dzisiejszych zajęciach rozpoczniemy programowanie po stronie serwera w języku PHP. Po otrzymaniu żądania serwer

Bardziej szczegółowo

Wyspecjalizowani w ochronie urządzeń mobilnych

Wyspecjalizowani w ochronie urządzeń mobilnych Wyspecjalizowani w ochronie urządzeń mobilnych Rozwiązania dopasowane do dużych i małych firm MDM 43-300 Bielsko-Biała, ul. Warszawska 28 tel./fax: +48 /33/ 822 14 85 Proget MDM Coraz większa ilość urządzeń

Bardziej szczegółowo

Procesowa specyfikacja systemów IT

Procesowa specyfikacja systemów IT Procesowa specyfikacja systemów IT BOC Group BOC Information Technologies Consulting Sp. z o.o. e-mail: boc@boc-pl.com Tel.: (+48 22) 628 00 15, 696 69 26 Fax: (+48 22) 621 66 88 BOC Management Office

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

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

Instrukcja aktywacji i instalacji Certum Code Signing

Instrukcja aktywacji i instalacji Certum Code Signing Instrukcja aktywacji i instalacji Code Signing S t r o n a 2 Spis treści 1 Opis produktu... 3 2 Instalacja certyfikatu... 3 2.1 Wymagania... 3 2.2 Aktywacja certyfikatu... 3 3 Wgrywanie certyfikatu na

Bardziej szczegółowo

NASZA MISJA. wszystkie nasze dzialania sfokusowane sa na efektywną, partnerską współprace.

NASZA MISJA. wszystkie nasze dzialania sfokusowane sa na efektywną, partnerską współprace. NASZA MISJA Aby tworzyć najbardziej użyteczne, najlepsze aplikacje ściśle dopasowane do Państwa wymagań i potrzeb oraz budżetu, który chcecie Państwo zainwestować. podstawa satysfakcjonujacej współpracy

Bardziej szczegółowo

Załącznik nr 1. Specyfikacja techniczna portalu internetowego Łódź, 15.10.2012 r.

Załącznik nr 1. Specyfikacja techniczna portalu internetowego Łódź, 15.10.2012 r. Załącznik nr 1. Specyfikacja techniczna portalu internetowego Łódź, 15.10.2012 r. Stworzenie platformy internetowej na potrzeby projektu. 1 Wykonanie portalu internetowego na potrzeby e-usługi, obejmującego

Bardziej szczegółowo

PRZYJAZNY PRZEWODNIK PO SMARTFONACH

PRZYJAZNY PRZEWODNIK PO SMARTFONACH PRZYJAZNY PRZEWODNIK PO SMARTFONACH 01 NAJPOTRZEBNIEJSZE INFORMACJE I PODPOWIEDZI CO TO SĄ SMARTFONY I DO CZEGO SŁUŻĄ? SMARTFONY TO NIE TYLKO TELEFONY NOWEJ GENERACJI. TO MULTIFUNKCJONALNE URZĄDZENIA,

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

Aplikacja serwerowa Platformy Prezentacyjnej Opis produktu

Aplikacja serwerowa Platformy Prezentacyjnej Opis produktu Aplikacja serwerowa Platformy Prezentacyjnej Opis produktu Polska Organizacja Turystyczna ul. Chałubińskiego 8 00-613 Warszawa Spis treści 1 Założenia wstępne... 1 1.1 Informacje wstępne... 1 1.2 Cel projektu...

Bardziej szczegółowo

W dalszej części dokumentu przedstawiamy skrócony opis kluczowych funkcji systemu. Niniejszy dokument nie zawiera opisu technicznego systemu.

W dalszej części dokumentu przedstawiamy skrócony opis kluczowych funkcji systemu. Niniejszy dokument nie zawiera opisu technicznego systemu. 1. Informacje Podstawowe Mediamanager 2.1 jest systemem wspierającym zarządzanie dokumentami elektronicznymi. Podstawowymi funkcjami realizowanymi przez oprogramowanie jest przetrzymywanie, zarządzanie

Bardziej szczegółowo

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3 Currenda EPO Instrukcja Konfiguracji Wersja dokumentu: 1.3 Currenda EPO Instrukcja Konfiguracji - wersja dokumentu 1.3-19.08.2014 Spis treści 1 Wstęp... 4 1.1 Cel dokumentu... 4 1.2 Powiązane dokumenty...

Bardziej szczegółowo