AUTOMATYZACJA I PLANOWANIE

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

Download "AUTOMATYZACJA I PLANOWANIE"

Transkrypt

1 WYDZIAŁ PODSTAWOWYCH PROBLEMÓW TECHNIKI POLITECHNIKI WROCŁAWSKIEJ AUTOMATYZACJA I PLANOWANIE PRACY W SYSTEMIE JACEK TOPOLSKI Praca inżynierska napisana pod kierunkiem dr Marcina Zawady WROCŁAW 2012

2

3 Spis treści 1 Analiza 7 2 Użyte techniki oraz technologie Podpinanie filtrów na komunikaty systemowe Dopasowanie wzorca obrazu Język skryptowy Lua Reprezentacja danych Tabele Definiowanie własnych funkcji Platforma programistyczna Qt System bazy danych SQLite Projekt systemu Założenia Wykorzystanie Komunikacja system-użytkownik

4 3.4 Baza danych Główne moduły systemu Działanie i współpraca modułów dla silnika skryptów Moduł Calendar Moduł Recorder Moduł ScreenSaver Plan rozwoju aktualnej wersji A Instalacja i wdrożenie systemu 41 B Przykładowe wykorzystanie 43 C Zawartość płyty CD 47

5 Wstęp Wiele rzeczy w dzisiejszych czasach zostało bardzo zautomatyzowane. Dotyczy to nie tylko pracy, w której potrzebna jest bardzo duża precyzja produkcji, ale także do rutynowych, prostych, aczkolwiek żmudnych zadań. Podobne sytuacje mają także miejsce w systemach komputerowych, w których zachodzi potrzeba regularnego wykonywania czynności takich jak np. tworzenie kopii zapasowych czy testowanie funkcjonalności oprogramowania. Do takich właśnie celów służą programy automatyzujące, które pozwalają odciążyć użytkownika i ułatwiają mu skupienie się na innych zadaniach. Jednak trzeba pamiętać o tym, że aplikacje tego typu to zwykłe maszyny potrafiące jedynie interpretować i wykonywać rozkazy, zatem trzeba je dokładnie opisać i wykonywać w miarę prostych okolicznościach. Celem tej pracy dyplomowej jest zaprojektowanie i zaimplementowanie systemu Do- ForMe! umożliwiającego automatyzację zadań w systemie oraz ich planowanie na przyszłość. Aplikacja wspomagająca wymienione zadania będzie spełniała następujące założenia funkcjonalne: wykonywanie skryptu Lua z określonymi zadaniami dla systemu, wspomaganie tworzenia skryptów za pomocą zbioru listy komend oraz sprawdzania poprawności kodu, możliwość automatycznego utworzenia skryptu na podstawie działań użytkownika w systemie, szybkie i intuicyjne zarządzanie wykonywaniem skryptów (tzw. harmonogram) z poziomu wbudowanego kalendarza, określanie zakresu działania nagrywacza skryptów (= co ma nagrywać), podsystem przypominający o zbliżaniu się akcji, 5

6 6 definiowanie obszaru ekranu, który ma się pojawić przed kontynuowaniem skryptu. Istnieje wiele tego typu systemów, które wspomagają automatyzację np. AutoClickExtreme [1], WinAutomation [2], Macro Scheduler [3] czy WinBatch [4], jednak wszystkie te programy przedstawiają harmonogram zadań jako mało wygodną listę elementów, na której ciężko znaleźć szukany element, gdy na liście jest duża ich ilość, ponieważ takie listy zwykle nie mają żadnego sposobu grupowania. Ponadto systemy te wykorzystują swoje własne języki skryptowe (lub zdarzenia - w przypadku listy akcji zamiast skryptów 1 ), dlatego nie będą mogły być ulepszane bez dodatkowego nakładu pracy programistów danej aplikacji. W przypadku systemu DoForMe! został wykorzystany język skryptowy Lua, który jest rozwijany przez zewnętrzne osoby, dzięki temu wystarczy zaktualizować odpowiednią bibliotekę i przekompilować projekt. Pierwszy rozdział zawiera szczegółową analizę zagadnienia, w którym zostanie zawarta m.in. głęboka analiza porównawcza z istniejącymi systemami, które oferują podobną funkcjonalność. Drugi rozdział został poświęcony na dokładne wytłumaczenie pojęć oraz technik użytych w projekcie. Zostaną tutaj również pokrótce opisane technologie jakie zostały wykorzystane do stworzenia projektu DoForMe!. Trzeci rozdział zawiera informacje o sposobie zaprojektowania i wykonania właściwego projektu. Zostały tutaj opisane najważniejsze moduły systemu, jak również aktualne problemy, które powinny zostać rozwiązane w kolejnej wersji systemu. Czwarty rozdział zawiera podsumowanie projektu. W dodatkach A i B zawarte są informacje dotyczące sposobu wdrożenia systemu a także przykładowy scenariusz wykorzystania. Dodatek C zawiera spis najważniejszych plików systemu, które zostały umieszczone na płycie CD. Projekt systemu DoForMe! został zaimplementowany w języku C++ w standardzie C++03 (z kilkoma elementami C++11, które są wspierane przez Microsoft R Visual C++). Oprócz tego zostały użyte biblioteki Qt 4.8.2, SQLite oraz Lua 5.1. Do kompilacji został wykorzystany wbudowany w środowisko Microsoft R Visual Studio 2010 Professional kompilator Microsoft R Visual C++. 1 będzie to wyjaśnione w rozdziale 1

7 Rozdział 1 Analiza W tym rozdziale zostanie omówiony proces automatyzacji, czyli działania które użytkownik musi wykonać w celu zautomatyzowania zadania. Przybliżony zostanie m.in. sposób przechowywania zadania w programie, sposób ich wykonywania a także podsystemy umożliwiające zarządzanie harmonogramem zadań oraz powiadamianie użytkownika o zbliżających się lub zakończonych zadaniach. Oprócz tego opisane zostaną aspekty prawne dotyczące jednej z funkcjonalności umożliwiającej nagrywanie działań użytkownika a także szczegółowe różnice funkcjonalne pomiędzy istniejącymi systemami, które umożliwiają automatyzację pracy. W celu zautomatyzowania pracy należy określić zbiór zasad i instrukcji dla systemu operacyjnego. Należy pamiętać, że komputer to zwykła niemyśląca maszyna potrafiąca jedynie interpretować rozkazy, dlatego instrukcje dla systemu operacyjnego muszą być precyzyjne i uważnie dobierane. Sposób zdefiniowania instrukcji wejściowych może mieć różną postać. Na przykład takie systemy jak AutoClickExtreme oraz WinAutomation operują na liście, na której znajdują się poszczególne akcje użytkownika [5] [6] (np. kliknięcie czy poruszenie myszą) - prezentuje to rysunek 1.1. Takie rozwiązanie jest prostsze gdy docelowa grupa użytkowników ma niewiele wspólnego z programowaniem, ponieważ użytkownik nie operuje na języku programowania. Poniżej został zaprezentowany sposób prezentacji tego samego zadania przez systemy AutoClickExtreme oraz DoForMe!. 1 for i=1, 121, 1 do 2 moveto(i, 200) 3 end 4 leftclick () 5 for i=121, 14, -1 do Listing 1.1: Sposób prezentacji zadania przez system DoForMe! 7

8 8 ROZDZIAŁ 1. ANALIZA 6 moveto(i, 200) 7 end 8 leftclick () Rysunek 1.1: Sposób prezentacji zadania przez system AutoClickExtreme W przypadku bardziej doświadczonych użytkowników taka lista akcji ogranicza ich m.in. w szczegółowej modyfikacji wykonywania zadania. Na przykład w powyższym przykładzie z AutoClickExtreme (rysunek 1.1) nie jest możliwa modyfikacja sposobu ruchu kursora myszy (ani nawet podglądu po jakich współrzędnych kursor myszy się porusza) [7]. Co więcej, struktura pliku z zapisanymi akcjami jest bardziej skomplikowana niż w przypadku prostego pliku tekstowego ze skryptem, przez co trudniejsze jest odgadnięcie co robi dane zadanie nie posiadając odpowiedniego oprogramowania. Listing 1.2 prezentuje małą część pliku z zapisanym zadaniem z rysunku 1.1. Listing 1.2: Wycinek pliku z zapisanym zadaniem z powyższego przykładu z AutoClickExtreme num =0// ver =5.9 UN =000003, node =0, TypeAct =4 { x962y501t0x961y501t } UN =000004, node =0, TypeAct =1 { MainWindow : exe="c:\ Windows\ Explorer. EXE", SbyExe =0 capt=" Program Manager", class=" Progman", typecaptsearch =4 handle =10148 ChildWindow : capt=" FolderView ", class=" SysListView32 ", typecaptsearch =0 hierarchy ="((0:0))", id=1, handle =1014c enable =1... } Mimo wszystko uparty użytkownik, który ma nieco więcej doświadczenia zauważy, że można odczytać współrzędne ruchu kursora myszy zaglądając do zapisanego pliku (ciąg

9 9 x962y501t0...), aczkolwiek nie należy to do standardowej funkcjonalności programu a tym bardziej nie jest to rozwiązanie zbyt ergonomiczne. W przypadku gdy użytkownik nie ma doświadczenia w programowaniu skryptowym, system oferuje zbyt mało intuicyjne zarządzanie tworzeniem zadania lub po prostu jest to pierwsze zetknięcie użytkownika z systemem, który nie zna jeszcze dostępnych funkcji, możliwe jest użycie tzw. nagrywacza (ang. recorder). Jest to podsystem monitorujący dane wprowadzane do komputera (ang. keylogger) z możliwością utworzenia zadania na podstawie zarejestrowanych działań użytkownika. Takie rozwiązanie jest dostępne w bardzo wielu systemach automatyzujących (np. AutoClickExtreme [8], WinAutomation [9] czy Macro Scheduler [10]). Jednak nieodpowiednie użycie nagrywacza może doprowadzić do złamania prawa. Zgodnie z kodeksem karnym, osoba nie może uruchomić oprogramowania z taką funkcjonalnością na systemie innej osoby bez jej zgody (lub wiedzy) w celu np. wykradnięcia danych czy wyrządzenia innych szkód materialnych [11]. Po etapie utworzenia skryptu użytkownik jest już gotowy aby uruchomić swój skrypt, jednak wymaga to osobistej interwencji w systemie. W celu zautomatyzowania uruchamiania skryptów oferowane są różnego rodzaju harmonogramy. W przypadku AutoClickExtreme została użyta prosta lista z zadaniami, do których przypisana jest godzina wywołania. Jest to rozwiązanie dosyć nieczytelne w przypadku dużej ilości zadań w harmonogramie, w szczególności gdy użytkownik dodaje je nie po kolei, ponieważ pomoc programu nie wspomina o żadnym sposobie sortowania takiej listy [5]. Bardzo podobne rozwiązanie posiada system WinAutomation, oferujący jednak sortowanie takiej listy względem wybranego przez nas parametru za pomocą kliknięcia nagłówka odpowiedniej kolumny 1. W systemie DoForMe! został zaimplementowany całkowicie odmienny sposób zarządzania zadaniami. Do tego celu wykorzystuje się wbudowany kalendarz, na który nakłada się zadania na odpowiednie dni określając godzinę oraz powtórzenia. Porównanie sposobów prezentacji zadań w harmonogramach zostało zaprezentowane na rysunku 1.2. Takie rozwiązanie oferuje z miejsca grupowanie po miesiącu, dzięki czemu możliwym jest powielenie zadań w obrębie jego powtórzeń aby użytkownik posiadał ogólny obraz jak zostały rozłożone jego zadania w czasie. W przypadku listy zadań jest to niemożliwe dopóki nie zastosujemy jakiegoś rodzaju filtrowania, ponieważ powtórzenia typu co 2 dni czy w każdy piątek są nieskończone. Ponadto takie rozwiązanie umożliwia informowanie użytkowników w sposób graficzny o potencjalnych konfliktach, np. w sytuacji gdy w danym dniu, o tej samej godzinie jest więcej niż jeden skrypt do wykonania. Po utworzeniu harmonogramu skryptów użytkownik wciąż może przebywać w syste- 1 wersja 4.0.2

10 10 ROZDZIAŁ 1. ANALIZA (a) Sposób prezentacji harmonogramu przez system AutoClickExtreme - brak sortowania, przez co lista staje się mało czytelna gdy dodawanie są zadania w nieodpowiedniej kolejności (b) Sposób prezentacji harmonogramu przez system WinAutomation - sortowanie po ostatniej kolumnie (c) Sposób prezentacji harmonogramu przez system DoForMe! - zadania przypisane do odpowiednich dni miesiąca; zaznaczony dzień 13 wrzesień - kolizja dwóch zadań (Job 1 oraz Job 2) Rysunek 1.2: Porównanie sposobów prezentacji harmonogramu zadań przez różne systemy mie. Dlatego niewygodne byłoby wykonywanie zadania o określonej godzinie bez uprzedniego powiadomienia o tym użytkownika. Różne systemy mają różne sposoby powiadamiania użytkownika o zadaniach z harmonogramu, które będą np. wykonane w najbliższym czasie, są aktualnie wykonywane lub zakończono ich wykonywanie. Jednym ze sposobów jest wykorzystanie prostego powiadomienia wyświetlonego na ekranie, które oferuje np. WinAutomation i które nie wymaga interwencji użytkownika [12]. Takie powiadomienie posiada jednak wadę w przypadku gdy użytkownik aktualnie pracuje na komputerze, bowiem ten sposób nie oczekuje od użytkownika żadnej odpowiedzi, dlatego gdy nadej-

11 11 dzie czas na uruchomienie zadania, system po prostu przejmie kontrolę nad komputerem i wykona swoje zadanie jednocześnie przerywając pracę użytkownika. Jednak system umożliwia także wyświetlenie okna dialogowego, które wymaga akcji ze strony użytkownika, ale wspomniane rozwiązanie nie jest dostępne z poziomu opcji programu a jedynie poprzez odpowiednie zdefiniowanie akcji w zadaniu do wykonania. Wadą takiego rozwiązania jest to, że posiadając dużą ilość zadań musielibyśmy do każdego z osobna dodać ręcznie powiadomienie. Tego typu powiadomienie oferuje także m.in. Macro Scheduler [13]. W przypadku systemu DoForMe! nie ma potrzeby odwoływania się do akcji/skryptu zadania, wystarczy zaznaczenie odpowiedniej opcji programu, która ma efekt globalny. Dodatkowo możliwe jest dodanie także powiadomienia dźwiękowego. Kolejną bardzo ważną rzeczą, która jest niezbędna do w miarę inteligentnego automatyzowania zadań, jest sposób sprawdzenia stanu systemu operacyjnego, aplikacji czy innej rzeczy, którą chcemy zautomatyzować. Innymi słowy, system automatyzujący musi w jakiś sposób dowiedzieć się czy np. tworzenie kopii zapasowej danych zakończyło się, aby wykonać kolejne czynności. Jest to zagadnienie dosyć złożone zważywszy na to, że każda aplikacja czy system posiadają zróżnicowane stany, które informują użytkownika o tym, że jakieś zadanie zostało zakończone. Może to być np. wyświetlenie tekstu lub obrazka, albo uaktywnienie jakiegoś przycisku czy całkowite wyjście z programu. Wygodnym sposobem, zarówno dla użytkownika jak i programisty, jest pobranie fragmentu zrzutu ekranu (ustalonego przez użytkownika) i przed wykonaniem ustalonych poleceń sprawdzenie czy dany fragment zawiera się w aktualnym obrazie ekranu - jeśli nie, skrypt zostanie wstrzymany i będzie mógł kontynuować pracę tylko w przypadku gdy odnajdzie taki fragment na ekranie. Taki sposób został wykorzystany w programie AutoClickExtreme [14] jak i w Do- ForMe! ze względu na jego uniwersalność oraz prostotę użytkowania, aczkolwiek stawia to pewne wymogi dla użytkownika aby fragmenty, które zaznacza były unikalne w obrębie całego ekranu, oraz w miarę możliwości małe bez zbędnych elementów, w celu znalezienia danego fragmentu na ekranie w rozsądnym czasie. Gdy obraz do znalezienia jest zbyt duży to może dojść do wielu niepotrzebnych porównań, które mogą kosztować sporo czasu. Porównanie sposobów zaznaczania fragmentu ekranu znajduje się na rysunku 1.3. (a) Gorsze zaznaczenie, ponieważ posiada dużo nic nieznaczącego tła (b) Lepsze zaznaczenie, ponieważ ogranicza się do konkretnego obiektu Rysunek 1.3: Sposoby zaznaczeń fragmentu ekranu

12 12 ROZDZIAŁ 1. ANALIZA Co więcej, wspomniany sposób otwiera także inną możliwość. Gdy podany fragment ekranu nie zostanie znaleziony skrypt zostanie wstrzymany i będzie mógł kontynuować dopiero wtedy, gdy pojawi się na ekranie. Dzięki temu możliwe jest naprowadzenie (poprzez działania użytkownika) skryptu na właściwą ścieżkę, w przypadku gdy w jakichś okolicznościach się zgubi.

13 Rozdział 2 Użyte techniki oraz technologie W tym dziale zostaną wytłumaczone pojęcia, które zostały zawarte w dalszej części pracy a także zostaną przybliżone w skrócie technologie użyte do stworzenia systemu. 2.1 Podpinanie filtrów na komunikaty systemowe Aplikacje posiadające tzw. pętlę komunikatów (ang. message loop), czyli pętlę przetwarzającą przychodzące komunikaty są w stanie odbierać komunikaty systemowe na podstawie zdarzeń, które miały miejsce w obrębie okna aplikacji lub całego systemu [15] (np. wciśnięcie lewego przycisku myszy generuje komunikat WM_LBUTTONDOWN). Zanim komunikat dotrze do aplikacji, przechodzi on przez mechanizm systemowy, który odpowiednio je przygotowuje aby następnie trafiły do konkretnego okna aplikacji [16] [17]. Właśnie we wspomnianym mechanizmie obsługi komunikatów, aplikacja może zainstalować swój własny podsystem (ang. hook 1 ) służący np. do monitorowania kolejki komunikatów. Technika ta dzieli się m.in. na sposoby w jakie zostaje zainstalowana w systemie oraz na zakres przechwytywanych informacji. Jest stosowana głównie do szpiegowania lub łagodniej mówiąc, pobierania pewnych informacji, które są głębiej zakorzenione w aplikacji. Nie oznacza to, że takie dane są zawsze tajne i ich odczytanie jest przestępstwem. Dane takie służą bardzo często do dokładniejszego przestudiowania danej aplikacji jeśli dokumentacja techniczna jest mocno wybrakowana lub w ogóle jej nie ma. Za pomocą tej 1 w dalszej części pracy może wystąpić angielski termin 13

14 14 ROZDZIAŁ 2. UŻYTE TECHNIKI ORAZ TECHNOLOGIE techniki możliwe jest przechwytywanie komunikatów jakie są wysyłane do aplikacji, dzięki temu można łatwo przefiltrować lub po prostu odczytać ich zawartość. Do tego służą tzw. procedury podpinajace (ang. hook procedures) uruchamiane za pomocą systemowego mechanizmu komunikatów w odpowiedzi na jakieś zdarzenie. Takie procedury definiowane są przez programistę w kodzie własnego programu lub w zewnętrznej bibliotece DLL. Sposób instalacji podsystemu filtrowania komunikatów dla myszy i klawiatury dzieli się na tzw. wstrzykiwanie (ang. injecting), czyli wstrzyknięcie podsystemu do filtrowania komunikatów do uruchomionych procesów oraz na niskopoziomowe (ang. low level), czyli te, które działają na trochę niższym poziomie abstrakcji pobierając komunikaty od sterownika urządzenia. W przypadku tych pierwszych, kod, który implementuje daną procedurę podpinającą musi znajdować się w osobnej bibliotece DLL. W innym przypadku jeśli kod procedury będzie przynależał do procesu, który ją zainstalował wtedy będzie możliwe pozyskanie tylko tych komunikatów, które są przesyłane do tego procesu, zatem gdy np. użytkownik kliknie na pulpit, komunikat zostanie wysłany do wątku pochodzącego od procesu explorer.exe, więc nie będzie możliwości żeby go odebrać z poziomu innej aplikacji. W przypadku gdy kod będzie zaimplementowany w bibliotece DLL będzie on załadowany (używając funkcji WinAPI - SetWindowsHookEx) przez system operacyjny do wszystkich procesów w systemie. Należy jednak mieć na uwadze, że jeśli jest potrzeba objęcia zakresem wszystkich procesów, trzeba stworzyć dwie implementacje - dla procesów 32- oraz 64-bitowych, ponieważ nie można załadować 32-bitowej implementacji do 64-bitowego procesu. Z kolei drugi rodzaj instalacji nie wymaga dodatkowych implementacji, ponieważ nie bazuje on na koncepcji wstrzykiwania DLL do procesów. Sposób jego działania, jak sama nazwa wskazuje, polega na przechwytywaniu komunikatów już na poziomie sterownika urządzenia. Oczywiście takie komunikaty także muszą przejść przez systemowy mechanizm komunikatów. Wydawać by się mogło, że instalacja takim sposobem zwiększa wydajność w porównaniu do jego poprzednika, jednak tak nie jest. Głównym waskim gardłem 2 (ang. bottleneck) jest tutaj moment zmiany kontekstu, w którym dana procedura podpinająca przetwarza komunikat. Przetwarzanie takiego komunikatu musi odbywać się zawsze w kontekście procesu, który zainstalował procedurę podpinającą w systemie. Przykładowo, aplikacja A instaluje niskopoziomowego hook a w systemie, poczym w aplikacji B następuje zdarzenie np. kliknięcia myszą. W tym momencie systemowy mechanizm obsługujący komunikaty przygotowuje komunikat dla tego zdarzenia, który docelowo ma zostać przesłany do aplikacji B, jednak zanim to nastąpi mechanizm uruchamia wcze- 2 jest to zjawisko, w którym wydajność lub pojemność całego systemu jest ograniczona poprzez pewne komponenty, źle dobrane algorytmy lub zasoby

15 2.2. DOPASOWANIE WZORCA OBRAZU 15 śniej zainstalowanego hook a. Wtedy aby można było przetworzyć ten komunikat kontekst musi zostać zmieniony na aplikację A, ponieważ to z tego procesu została zainstalowana dana procedura. Gdy zakończy się przetwarzanie komunikatu przez procedurę komunikat przekazywany jest do kolejnej procedury podpinającej, a więc do kolejnego kontekstu. Po przetworzeniu komunikatu przez wszystkie hook i (w tym przykładzie występowała tylko jedna), kontekst jest ostatecznie zmieniany z powrotem na aplikację B, z której nastąpiło dane zdarzenie. Dosyć często występowały sytuacje, w których aplikacje nieodpowiednio korzystały z tej techniki w wersji niskopoziomowej, tzn. procedury zbyt długo przetwarzały komunikaty, co prowadziło do spowalniania działania całego systemu. Z tego powodu Microsoft R w systemach od wersji 7 i późniejszych wprowadził pewne ograniczenie, które po prostu usuwa danego hook a z mechanizmu do obsługi komunikatów. Domyślny czas przeznaczony dla procedury wynosi 300ms i jest on zapisany w rejestrze pod kluczem: HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout w przypadku gdy procedura przekroczy zdefiniowany powyżej czas system bez żadnego poinformowania usunie hook a. Nie ma żadnego sposobu aby aplikacja otrzymała informację o tym, że hook została usunięta [18]. 2.2 Dopasowanie wzorca obrazu Jest to technika wykorzystywana do wyszukiwania obrazu w obrazie (ang. template matching) [19]. Wydawać się to może prostym zagadnieniem gdy przeszukiwanie obrazu wykonuje się piksel po pikselu sprawdzając każdą z wartości RGB, aczkolwiek staje się ono trudniejsze gdy zostaną wzięte pod uwagę czynniki takie jak szum obrazu oraz tolerancja (czyli jak maksymalnie mogą różnić się obrazy aby można było stwierdzić, że są takie same ) a także sposób porównywania obrazów, np. na podstawie porównania każdego piksela (ang. naive template matching), skali szarości (ang. grayscale-based matching) czy krawędzi (ang. edge-based matching). Mimo, że technika ta rozciąga się na różne poziomy zaawansowania to jednak na potrzeby projektu DoForMe! nie trzeba było wykorzystywać bardziej zaawansowanych algorytmów, ponieważ system nie wykorzystuje obrazów utworzonych np. za pomocą aparatu czy skanera a jedynie zrzuty ekranu, dzięki temu są one zawsze takie same i nie posiadają cech takich jak szum.

16 16 ROZDZIAŁ 2. UŻYTE TECHNIKI ORAZ TECHNOLOGIE 2.3 Język skryptowy Lua Lua jest jednym z przenośnych języków skryptowych [20] najczęściej wykorzystywanym w branży gier komputerowych [21], który zbliżony jest najbardziej do języków proceduralnych. Działa na każdej maszynie, która udostępnia kompilator ANSI C, począwszy od systemów wbudowanych aż do superkomputerów. Umożliwia między innymi rozszerzalność (dodawanie) funkcji, których implementacje egzystują w zewnętrznym kodzie. Implementacje Lua dostępne są m.in. dla języka C/C++, Java TM [22] lub Delphi [23]. Ponadto od roku 2003, gdy zadebiutowała wersja 5.0, działa na wirtualnej maszynie Parrot, która jest znacznie wydajniejsza w przypadku dostępu do zmiennych lokalnych. Co więcej posiada automatyczne zarządzanie pamięcią wraz ze swoim własnym odśmiecaczem pamięci (ang. garbage collector), który został dodany w wersji 5.1 i który jest niezwykle istotny w dynamicznie zmieniającym się otoczeniu jak gry komputerowe Reprezentacja danych Dane w Lua reprezentowane są jako pary (t,v) gdzie wartość zmiennej typu t rezyduje w oznakowanej unii v. Struktury zostały przedstawione na listingach 2.1 oraz 2.2. typedef struct { int t; Value v; } TObject; Listing 2.1: Główna struktura przechowująca dane typedef union { GCObject * gc; void *p; lua_number n; int b; } Value; Listing 2.2: Unia przechowująca wartości danej Wartość t struktury TObject oznacza jakim typem jest wartość v. Wartości logiczne (pole b) oraz liczbowe (pole n) są reprezentowane bezpośrednio w unii, za to wartości typu string, tabele, funkcje, wątki (pole gc) oraz dane zdefiniowane przez użytkownika (pole p) - jako wskaźniki. Wartość nil nie jest reprezentowana za pomocą struktury Value, ponieważ do jej identyfikacji wystarczy sama wartość t struktury TObject.

17 2.3. JEZYK SKRYPTOWY LUA 17 Rozwiązanie takie ma oczywiście swoje konsekwencje. Na przykład kopiowanie wartości może być w niektórych przypadkach dosyć kosztowne. Weźmy dla przykładu kopiowanie liczby 64-bitowej typu double na maszynie 32-bitowej: Tablica 2.1: Reprezentacja bitów liczby typu double w strukturze TObject INT DOUBLE PADDING WORD WORD WORD WORD Padding jest pewnym wyrównaniem rozmiaru struktury tak aby kolejne dane zaczynały się na bajcie, który jest wielokrotnością rozmiaru słowa dla danego procesora. Ponadto rozmiar takiej struktury danych powinien być równy wielokrotności rozmiaru największego pola. Na przykład taka struktura z C++ (założono, że rozmiar typu całkowitego (int) wynosi 4 bajty a podwójnej precyzji (double) 8): class TestClass { int a; double b; }; Listing 2.3: Przykład padding u zajmuje w pamięci 16 bajtów, mimo że sizeof(int) + sizeof(double) = = 12, ponieważ największym jej polem jest zmienna podwójnej precyzji równa 8 bajtów, zatem rozmiar struktury powinien być wielokrotnością 8 - najbliższą taką liczbą, większą od 12, jest 16. Wracając do konsekwencji użycia takich struktur na dane w Lua - rozmiar struktury TObject jest równy 12 bajtów (16 bajtów jeśli uwzględnimy padding). Maszyna 32-bitowa, kopiuje dane w porcjach po 4 bajty, tzw. słowo (ang. word), zatem aby skopiować liczbę podwójnej precyzji potrzebne jest 3 (lub 4) kopiowań słów Tabele Język ten nie udostępnia typu tablicowego, dlatego do symulowania tablic wykorzystywane są właśnie tabele. Tabela jest połączeniem zwykłej tablicy z tablicą haszującą, przedstawia to rysunek 2.1.

18 18 ROZDZIAŁ 2. UŻYTE TECHNIKI ORAZ TECHNOLOGIE Rysunek 2.1: Struktura tabeli w Lua. 100,2 200, Możliwymi konfiguracjami par są x 9.2, 1 Ponadto jej rozmiar jest dynamiczny - rozszerza się gdy zostanie dodany do niej jakiś element oraz kurczy podczas usuwania (poprzez przypisanie nil a). Gdy tabela potrzebuje więcej miejsca, rozmiary tablicy liczone są na nowo. Rozmiarem tablicy jest największe takie n, dla którego przynajmniej połowa elementów w tablicy pomiędzy 1 a n (aby uniknąć marnowania miejsca przy tablicach rzadkich 3 ) oraz przynajmniej 1 element pomiędzy n a n (aby uniknąć rozmiaru n gdy n 2 jest wystarczające) są w użyciu. Po obliczeniu nowego rozmiaru wszystkie elementy są wstawiane ponownie do nowo utworzonej struktury. Dzięki temu, że tabela wykorzystuje także zwykłą tablicę, to w niektórych przypadkach możliwe jest zmniejszenie zużycia pamięci nawet dwukrotnie, ponieważ tablica nie wymaga dodatkowej pamięci na klucze. Ponadto dostęp do danych za pomocą klucza liczbowego jest szybszy, ponieważ nie wymaga wykonania procedury haszującej w połączeniu z metodą Brent a, która jest wykorzystywana do rozwiązywania kolizji Definiowanie własnych funkcji Jedną z najważniejszych możliwości Lua jest definiowanie własnych funkcji (których implementacje egzystują w naszym programie), które można wykorzystać podczas późniejszego pisania skryptów. Wszystkie funkcje, muszą przyjmować jako argument zmienną typu lua_state* oraz zwracać typ int. Po utworzeniu implementacji funkcji z odpowiednią sygnaturą trzeba ją zarejestrować w silniku Lua za pomocą funkcji lua_register(). 3 są to tablice, w których większość pól jest pusta

19 2.4. PLATFORMA PROGRAMISTYCZNA QT 19 Po pierwsze, silnik Lua nie posiada globalnych zmiennych, a co za tym idzie, wszystkie wartości określające stan interpretera są trzymane w strukturze lua_state. Po drugie, funkcja musi zwracać wartość liczbową, która określa ile argumentów zwraca dana funkcja, ponieważ język Lua umożliwia zwracanie przez funkcje wielu wyników [24]. Interpreter języka Lua bazuje na rejestrach, które są umieszczane na stosie w tzw. rejestrach aktywacyjnych (ang. activation records). Są to struktury, do których wstawiane są wszystkie zmienne lokalne funkcji (do zmiennych lokalnych funkcji zaliczają się także argumenty funkcji), dzięki którym wydajność dostępu do zmiennych została bardzo zwiększona, ponieważ nie używają one wielu instrukcji wrzucających i pobierających dane ze stosu, które są dosyć kosztowne w przypadku kopiowania wartości (zostało to omówione w rozdziale 2.3.1). Gdy dochodzi do momentu interpretowania zdefiniowanej przez programistę funkcji, na stosie zostaje przydzielona pamięć na rejestry aktywacyjne na tyle duża by pomieścić przebywające tam rejestry, które przechowują argumenty funkcji. Zatem aby ich użyć należy je uprzednio pobrać z tych rejestrów. Służą do tego wbudowane w Lua funkcje typu lua_tostring() czy lua_tonumber(). 2.4 Platforma programistyczna Qt Jest to zestaw bibliotek i narzędzi posiadających bardzo duże możliwości. Służą nie tylko do tworzenia graficznego interfejsu użytkownika (ang. GUI - Graphical User Interface), ale posiadają także dobrze rozbudowany odpowiednik biblioteki STL oraz obsługę sieci, OpenGL, XML, SVG, multimediów i wiele innych. Biblioteka odpowiadająca za interfejs użytkownika posiada dużo gotowych komponentów, które w połączeniu z wizualnym edytorem okna aplikacji dają duże możliwości. Platforma została wykorzystana m.in. w środowisku KDE [25], Autodesk Maya oraz Mathematica [26]. Cechami szczególnymi są m.in.: przenośność (nawet w obrębie systemów wbudowanych) - obsługuje m.in.: Windows oraz Linux (razem z wersjami dla systemów wbudowanych), Mac, Solaris, idea sygnał-gniazdo (ang. signal-slot) dodatkowy tzw. kompilator meta obiektów (ang. MOC - Meta Object Compiler)

20 20 ROZDZIAŁ 2. UŻYTE TECHNIKI ORAZ TECHNOLOGIE Idea sygnał-gniazdo jest fundamentem dla komunikacji pomiędzy obiektami w aktualnej wersji Qt. Zastępuje ona koncepcję zdarzeń w aplikacji, która zazwyczaj opiera się na funkcjach zwrotnych (ang. callbacks), czyli wskaźników do funkcji, które są przekazywane jako argument do innej funkcji identyfikującej dane zdarzenie. Rozwiązanie bazujące na wspomnianych funkcjach zwrotnych nie posiada cech bezpiecznego typowania (ang. type-safe), czyli nigdy nie można być pewien co tak naprawdę zostało przekazane do funkcji zwrotnej. Obrazuje to przykład 2.4, który się skompiluje, aczkolwiek wystąpi błąd w czasie działania programu: Listing 2.4: Przykład braku bezpiecznego typowania w przypadku użycia standardowych funkcji zwrotnych 1 #include <string > 2 #include <iostream > 3 4 typedef void( * MyCallback )( std :: string* ); 5 6 void mycallback ( std :: string* somedata ) { 7 if( somedata ) 8 std :: cout << somedata ->c_str (); 9 } void ourprocessingfunc ( MyCallback mycallback, void* somedataforcallback ) { 12 mycallback ( ( std :: string* ) somedataforcallback ); 13 } int main ({ 16 char * somedata = "a text"; 17 ourprocessingfunc ( mycallback, somedata ); 18 return 0; 19 } Oczywiście odnosi się to ogólnie do funkcji w C++, nie tylko do ich wyspecjalizowanego odpowiednika. W przypadku sygnałów i gniazd, sygnatura funkcji zwrotnej (funkcji zadeklarowanej jako gniazdo, czyli funkcji, która zostanie wywołana w odpowiedzi na wyemitowany sygnał) musi odpowiadać sygnaturze funkcji identyfikującej dane zdarzenie (funkcja zadeklarowana jako sygnał), dzięki temu nie ma możliwości przekazania jej parametrów nieodpowiedniego typu, ponieważ wystąpi błąd kompilacji. Przykład ilustruje listing 2.5 (clicked() oraz functohandlebuttonclick() mają takie same sygnatury). Listing 2.5: Przykład użycia techniki sygnał-gniazdo - wywołanie funkcji funcforbuttonclick() gdy przycisk zostanie naciśnięty (clicked()) connect( ButtonObj, SIGNAL( clicked ()), MainAppClass, SLOT( funcforbuttonclick ()) )

21 2.5. SYSTEM BAZY DANYCH SQLITE 21 Aby możliwe było użycie nowych własności jakie wprowadza Qt, niezbędny jest dodatkowy kompilator, który przekształca makra specyficzne dla Qt na kod C++. Jest nim tzw. kompilator meta obiektów, który umożliwia między innymi użycie wspomnianej idei sygnałów i gniazd. Kompilator ten generuje pliki o nazwie moc_nazwaklasy.cpp dla każdej klasy, która korzysta ze specyficznych makr pochodzących z Qt, a następnie kompiluje je kompilatorem C++. Mimo, że technika ta pozwala na wykorzystanie pewnych nowych mechanizmów jakie oferuje Qt to niestety nie współpracuje ona z szablonami z C++ [27]. 2.5 System bazy danych SQLite Jest to system do zarządzania relacyjną bazą danych [28]. Bazy takie służą do przechowywania danych w dużych tabelach, z których można pobierać dane na podstawie zapytań SQL. W odróżnieniu od innych systemów, SQLite jest bardzo prosty w przypadku złożoności administrowania bazą oraz nie wymaga dużych zasobów komputerowych, przez co jest używany m.in. w systemach mobilnych typu Android [29] czy ios [30]. Głównymi cechami tego systemu są m.in. brak dodatkowego procesu dla serwera, innymi słowy nie uruchamia się zewnętrznego serwera w celu używania bazy danych, lecz wystarczy kompilacja projektu z dołączonym kodem źródłowym dla SQLite. Dzięki takiemu rozwiązaniu nie zmusza się użytkownika do konfiguracji serwera, ponieważ go nie ma. Co więcej, system ten jest w pełni przenośny, ponieważ istnieją implementacje dla różnych przenośnych języków programowania. Ponadto dzięki temu, że system egzystuje w postaci kodu, jest on bardzo prosty w przystosowaniu go do projektów. Dla przykładu SQLite dla C/C++ rezyduje w dwóch plikach - sqlite3.h oraz sqlite3.c, zatem wystarczy proste dodanie plików do projektu i jego skompilowanie. Kolejną zaletą tego systemu jest to, że wszystkie dane wrzucane do bazy danych znajdują się w pojedynczym pliku, dzięki temu wszystko jest w jednym miejscu i przez to jest łatwe do przenoszenia (oczywiście jest możliwość utworzenia pliku dla każdej tabeli z osobna). Ze względu na prostotę zarządzania oraz łatwość przystosowania go do projektów, został on użyty także w projekcie DoForMe!.

22 22 ROZDZIAŁ 2. UŻYTE TECHNIKI ORAZ TECHNOLOGIE

23 Rozdział 3 Projekt systemu W tym rozdziale zostaną przybliżone bardziej szczegółowe informacje na temat wykorzystania funkcjonalności systemu. Ponadto najważniejsze funkcjonalności zostaną uzupełnione o odpowiednie diagramy i dokładne ilustracje wraz z opisem o sposobie ich działania. Zostanie omówiony i uzasadniony wybór bazy danych przechowującej zadania oraz ustawienia użytkownika, a także przybliżony zostanie sposób komunikacji systemu z użytkownikiem. Na końcu zostaną przedstawione wady aktualnej wersji systemu. 3.1 Założenia System jest przeznaczony dla każdego rodzaju użytkownika, który potrzebuje zautomatyzować swoją pracę w systemie. Podczas projektowania systemu założono, że użytkownik nie potrafi programować, jednak zalecana jest podstawowa znajomość programowania skryptowego w celu wykorzystania pełnego potencjału systemu. Architektura systemu jest jednowarstwowa - pracuje w obrębie systemu użytkownika bez potrzeby komunikacji z jakimkolwiek serwerem zewnętrznym lub Internetem. Ponadto dzięki braku odwołań do rejestru oraz folderów innych niż główny folder programu system jest całkowicie przenośny pomiędzy komputerami (w obrębie systemów Windows TM ) bez potrzeby przeinstalowywania oprogramowania. Mimo, że użyte technologie są przenośne to funkcjonalność symulacji urządzeń wejścia (mysz oraz klawiatura), którą udostępnia oprogramowanie, korzysta ze specyficznych części systemu Microsoft R Windows TM, dlatego też aplikacja działa tylko na tym systemie operacyjnym. 23

24 24 ROZDZIAŁ 3. PROJEKT SYSTEMU 3.2 Wykorzystanie Sposób korzystania z systemu jest niezależny od rodzaju użytkowników. Każdy użytkownik chcąc uzyskać dany wynik musi poczynić te same kroki. Ponadto system nie udostępnia możliwości logowania na żadne konta, dlatego też należy zachować ostrożność w razie gdy komputer jest używany przez kilku użytkowników i tworzymy skrypty, które logują nas w nasze prywatne miejsca typu konto pocztowe czy bankowe. Diagram użycia został zaprezentowany na rysunku 3.1. Rysunek 3.1: Diagram prezentujący sposób korzystania z systemu

25 3.2. WYKORZYSTANIE 25 System może zostać wykorzystany przez programistę np. do testowania oprogramowania. Dzięki możliwości automatyzacji może on po prostu stworzyć skrypty klikające po jego aplikacji za każdym razem gdy zmienił w większym lub mniejszym stopniu kod programu aby sprawdzić czy nadal wszystko działa. Oczywiście ze względu na większą uniwersalność systemu DoForMe! nie wyprze on wyspecjalizowanych odpowiedników, które istnieją tylko w celu testowania oprogramowania jak np. Telerik Test Studio [31]. Rysunek 3.2: Diagram prezentujący wykorzystanie systemu do testowania oprogramowania Kolejnym dobrym wykorzystaniem jest użycie aplikacji do prezentacji np. jakiegoś narzędzia. W Internecie jest wiele filmów, które np. prezentują jakąś funkcjonalność w systemie tzw. videotutoriale mające dosyć dużą objętość w przypadku gdy chcemy je gdzieś przesłać, zatem lepiej jest stworzyć (napisać lub nagrać) kilku-kilobajtowy skrypt i odtworzyć go za pomocą opisywanego systemu. Dzięki takiemu rozwiązaniu użytkownik może na żywo (we własnym systemie) śledzić poczynania kolejnych kroków. Ciekawostką wykorzystania systemu może być narysowanie fraktala paproć Barnsley a (ang. Barnsley Fern) w programie Microsoft R Paint. Skrypt wykonujący wspomnianą czynność znajduje się na listingu 3.1. Listing 3.1: Przykład skryptu systemu DoForMe! rysującego fraktal Barnsley a w programie Microsoft R Paint (założono że w programie wybrano już odpowiednie narzędzie do rysowania; należy także zapewnić odpowiedni rozmiar płótna - minimum 676x637 - oraz zmaksymalizować program; rysowanie zostało wykonane w rozdzielczości 1366x768; ważne jest aby całe płótno było widoczne na ekranie) 1 -- inicjalizacja tablic w ktorych trzymamy wspolrzedne pikseli 2 x = {}; y = {}; x[1] = 0; y[1] = jakosc obrazu 4 quality = for n = 1, quality, 1 do 6 r = math. random () 7 if r <= 0.01 then 8 x[n+1] = 0 9 y[n+1] = 0.16 * y[n] 10 elseif r <= 0.08 then 11 x[n+1] = 0.2 * x[n] * y[n] 12 y[n+1] = 0.23 * x[n] * y[n] elseif r <= 0.15 then

26 26 ROZDZIAŁ 3. PROJEKT SYSTEMU 14 x[n+1] = * x[n] * y[n] 15 y[n+1] = 0.26 * x[n] * y[n] else 17 x[n+1] = 0.85 * x[n] * y[n] 18 y[n+1] = * x[n] * y[n] end przeskalowanie wspolrzednych z [-3,3] do [0,480] 22 x[n] = (x[n] + 3) * z [0,10] do [0,400] 24 y[n] = y[n] * end offset dla MS Paint zeby przesunac rysowanie na odpowiedni obszar z plotnem 27 offsetx = 80; offsety = trzeba dodac odstep czasowy co kazdy narysowany piksel poniewaz Paint nie wyrabia z rysowaniem 30 setinterval (2) 31 for i = 1, quality, 1 do "400 - y[i]" jest w celu odwrocenia obrazu w pionie 33 leftclickat ( offsetx + x[i], offsety y[i]) 34 end Rysunek 3.3: Przykład wyrysowanego fraktala z listingu 3.1 w programie Microsoft R Paint

27 3.3. KOMUNIKACJA SYSTEM-UŻYTKOWNIK Komunikacja system-użytkownik W większości przypadków do komunikacji z użytkownikiem system używa prostych okien dialogowych z pytaniami, które umożliwiają wybranie jednej z kilku odpowiedzi. W niektórych sytuacjach system wyświetla czasowy komunikat, w którym nie jest wymagany (aczkolwiek możliwy) żaden wybór. Przykład takiego okna dialogowego prezentuje obrazek 3.4. Rysunek 3.4: Przykład czasowego okna dialogowego informującego użytkownika o zbliżającym się zadaniu. Kliknięcie przycisku Run uruchamia natychmiastowo zbliżające się zadanie, Suspend - wstrzymuje zadanie oraz okno aby nie zostało zamknięte po określonym czasie, Ignore - zamyka okno oraz ignoruje dane zadanie. Po określonym czasie okno dialogowe znika i wykonuje się domyślna akcja (w przykładzie z rysunku 3.4 akcja ta będzie równoznaczna z naciśnięciem przycisku Run). Przykładowo, gdy zbliża się zadanie do wykonania może się zdarzyć, że użytkownik nie będzie obecny przy systemie, dlatego wymusza to utworzenie czasowego komunikatu, który zniknie i podejmie domyślne działanie wywołujące dane zadanie. W przypadku gdy zadanie zostanie zakończone warto poinformować o tym użytkownika, że już może wykonywać swoje działania w systemie operacyjnym, aczkolwiek takie powiadomienie także musi być czasowe, ponieważ jeśli użytkownik nie jest obecny przy komputerze, to po wywołaniu wielu zadań, na pulpicie będzie wiele pootwieranych okien dialogowych, które mogą ostatecznie spowolnić pracę systemu lub po prostu zdenerwować użytkownika gdy wróci. Ważnym faktem dotyczącym powiadomień użytkownika jest to aby tekst w oknie dialogowym był możliwie jak najkrótszy, ponieważ większość użytkowników traci chęć czytania czegokolwiek w kontakcie z obcym oprogramowaniem, nawet jeśli ma do dyspozycji bardzo przejrzystą dokumentację [32]. Dlatego też w systemie zostały zastosowane także inne formy powiadomień, którymi są powiadomienia graficzne występujące na kalendarzu. Każda komórka kalendarza została

28 28 ROZDZIAŁ 3. PROJEKT SYSTEMU określona innym kolorem, który określa jej stan - istnienie co najmniej jednego zadania, zaznaczone zadanie, zaznaczona data, aktualna data czy kolizja zadań. Ponadto w przypadku kolizji zadań, zostało to także oznaczone dodatkową grafiką aby podkreślić, że stało się coś ważnego. Co więcej, osoba dotknięta daltonizmem jest w stanie rozpoznać dzięki temu czy istnieje konflikt zadań czy nie. Wygląd komórki w każdym stanie został zaprezentowany na rysunku 3.5. (a) Zaznaczona data (b) Aktualna data (c) Zaznaczone zadanie (d) Istnieją zadania (e) Konflikt zadań Rysunek 3.5: Oznaczenia poszczególnych stanów komórek Abstrahując od tematu, do pewnej formy komunikacji możemy zaliczyć także pomocników programu. Rodzajem takiej funkcjonalności w systemie jest lista, która zawiera wszystkie możliwe do wykorzystania w skryptach komendy (rysunek 3.6). Z natury osoby wykorzystujące systemy komputerowe próbują minimalizować zużycie swojej własnej, ludzkiej pamięci, dlatego oczekują aby aplikacja pamiętała pewne rzeczy za nich. Przykładem może być linia komend, która w większości została wyparta przez GUI głównie dlatego, że użytkownicy musieli pamiętać komendy [33]. Oprócz samego wyświetlania, poprzez dwukrotne kliknięcie elementu, możliwe jest dodanie komendy do okna ze skryptem. Rysunek 3.6: Lista komend udostępnionych użytkownikowi do użycia w skryptach

29 3.4. BAZA DANYCH Baza danych W dzisiejszych czasach dostępnych jest kilka systemów do zarządzania bazą danych, m.in. MySQL, PostgreSQL czy SQLite, które są systemami wolnodostępnymi oraz komercyjne systemy typu Oracle, IBM DB2 czy Microsoft SQL Server. Projekt DoForMe! nie wykorzystuje intensywnie bazy danych, dlatego jako silnik do tego celu został wykorzystany SQLite. Uzasadnienie takiego wyboru wiąże się z lekkością interfejsu oraz tym, że nie potrzeba uruchamiać dodatkowego procesu dla serwera, dzięki czemu możliwe jest łatwe przenoszenie systemu pomiędzy różnymi komputerami. W projekcie całą bazę danych tworzą trzy tabele, których struktury zostały zaprezentowane na rysunku 3.7. Rysunek 3.7: Diagram UML tabel wykorzystywanych w projekcie Tabela Actions przechowuje wszystkie zadania, które zostały dodane do kalendarza. W przypadku gdy zadanie posiada powtórzenia, do bazy zostaje zapisane tylko jedno zadanie z dodatkową informacją o powtórzeniach (czyli przynajmniej jedna z wartości w kolumnach xdays oraz days będzie różna od 0). Pole date przechowuje datę w formie YYYY-MM-DD, a time w HH:MM:SS. Kolumna xdays określa co ile dni ma się wykonywać dane zadanie. Najbardziej skomplikowaną wartością jest tutaj days, która przyjmuje wartości typu TINYINT (jest to odpowiednik char a z C pod względem ilości bitów), aczkolwiek jest ona używana jako maska bitów. Zmienna tego typu składa się z 8 bitów, z których użyto 7 na dni tygodnia. Dzięki takiemu rozwiązaniu możliwe jest proste stworzenie sumy zbioru, czyli na przykład ustalenie aby dane zadanie wykonywało się zawsze w piątki i soboty. Kolejną tabelą jest tabela ExcludedDates, która jest powiązana z Actions. W opisywanym systemie istnieje funkcjonalność wykluczenia jakiejś daty z powtórzeń, np. wy-

30 30 ROZDZIAŁ 3. PROJEKT SYSTEMU konywanie zadania co 2 dni z wyłączeniem dnia 1 stycznia. Wszystkie wykluczone daty są przechowywane w ExcludedDates. Każdy wiersz tej tabeli posiada referencje do zadania w postaci id wiersza z tabeli Actions. Na przykład jeśli zostaną wykluczone daty oraz to do tabeli ExcludedDates zostaną dodane następujące wiersze (założono, że id zadania jest równe 6): Ostatnią i najprostszą tabelą jest Settings, która przechowuje preferencje użytkownika. Działa ona na zasadzie prostej struktury typu klucz-wartość, gdzie w kluczu przechowujemy informacje o danej opcji programu a w wartości jej stan. Ze względu na to, że niektóre komponenty mają różne typy wartości (np. checkbox i pole tekstowe posiadają odpowiednio typ logiczny oraz łańcuch tekstowy) został wybrany bardziej ogólny typ TEXT, do którego można konwertować większość innych typów. Wszystkie tabele przy każdym zapisie do bazy są całkowicie czyszczone a ich zawartość wypełniana jest na nowo. 3.5 Główne moduły systemu W tym podrozdziale zostaną opisane moduły systemu, które stanowią rdzeń dla najważniejszych funkcjonalności Działanie i współpraca modułów dla silnika skryptów Przy analizie zagadnienia zostało powiedziane, że do definiowania zbioru poleceń, które ma wykonać komputer używa się języka skryptowego Lua. W tym podrozdziale zostanie bliżej opisane w jaki sposób zaimplementowany w ramach projektu silnik dla skryptów radzi sobie z interpretacją poleceń. Bardzo ważnym faktem (i oczywistym) silnika Lua jest to, że gdy skrypt zostanie wczytany, to po jego uruchomieniu silnik wykonuje każdą instrukcję po kolei (w sensie tak jak została napisana logika skryptu). Jest to logiczne i wydaje się normalne zachowanie, aczkolwiek w pewnych przypadkach może to być pewnym utrudnieniem.

31 3.5. GŁÓWNE MODUŁY SYSTEMU 31 Przykładem, na którym zostanie omówione owe utrudnienie będzie prosty skrypt wykonujący dwa kliknięcia myszą. Pierwszym kliknięciem zostaje wciśnięty przycisk, który wyświetla jakieś okno dialogowe, za to drugim kliknięciem zostanie wciśnięty inny przycisk ale już na nowo otwartym oknie. Skrypt może wyglądać np. tak: leftclickat( 100, 100 ) leftclickat( 200, 200 ) Powyższy skrypt zrobi dokładnie to co zostało dla niego zdefiniowane (czyli kliknie dwa razy w miejscach o podanych współrzędnych), jednakże może się zdarzyć, że po pierwszym kliknięciu okno dialogowe może nie zdążyć pojawić się przed drugim kliknięciem. Jedno z rozwiązań samo się narzuca - trzeba dodać jakieś uśpienie pomiędzy tymi dwoma kliknięciami, aby okno dialogowe miało czas na wyświetlenie się. Innym sposobem jest bardziej zaawansowany podsystem, który poszukuje ustalonego przez użytkownika fragmentu ekranu tak jak zostało to opisane przy rozdziale analizy zagadnienia. Jednak w tym podrozdziale uwaga zostanie skupiona wokół uśpienia, ponieważ w pewnym przypadku wymagało to odpowiedniego zaprojektowania takiego silnika. Istnieje wiele sposobów na rozwiązanie takiego uśpienia, zostanie tutaj opisana część z nich, która została zaimplementowana w systemie DoForMe!. Pierwszym sposobem, jaki może się narzucić na myśl, jest nowa komenda, która zatrzymuje wykonanie skryptu w określonym miejscu na określony czas. Rozwiązanie takie daje szereg zalet, aczkolwiek są także i wady: + precyzja - wiadomo dokładnie gdzie i na ile zostanie zatrzymane wykonanie skryptu + modyfikowalność - bez problemu można dodać lub usunąć uśpienie w konkretnym miejscu + prostota - w przypadku gdy jest dużo komend, które muszą być wywoływane w pewnych odstępach czasu, trzeba dodać dużo uśpień, przez co traci się na przejrzystości kodu - zwiększenie objętości kodu Kolejnym pomysłem może być parametryzowalny odstęp czasowy co każdą instrukcję w taki sposób aby nie było potrzeby umieszczania co każdą komendę uśpienia. Aby osiągnąć taki efekt trzeba poczynić pewne przygotowania w przypadku wykonywania instrukcji

32 32 ROZDZIAŁ 3. PROJEKT SYSTEMU przez silnik skryptów. Przy okazji zostanie wytłumaczony sposób przechowywania implementacji poleceń w klasie LuaApiEngine, które zostały udostępnione użytkownikowi. Problem ten został rozwiązany za pomocą utworzenia nowego stosu, na który odkładane są poszczególne komendy. Sposób wykonywania skryptu przez interpreter Lua pozostaje bez zmian, zmiana jest dopiero w przypadku implementacji poszczególnych komend. Jeszcze przed problemem uśpienia, implementacje funkcji dostępnych w skryptach miały bezpośrednio zaimplementowany kod akcji, który dana komenda miała wykonać. Zmiana dotyczy tego, że teraz każde udostępnione użytkownikowi polecenie realizowane jest za pomocą dwóch oddzielnych funkcji, z których pierwsza tylko wrzuca wskaźnik na stos do drugiej funkcji, która faktycznie posiada implementację danego polecenia. Gdy Lua zinterpretuje już cały skrypt to wtedy zostanie uruchomiony licznik ściągający co jakiś czas po jednej komendzie ze stosu w celu jej wykonania. Sposób ten został zaprezentowany na rysunku 3.8. Rysunek 3.8: Schemat prezentujący działanie zaimplementowanego silnika dla skryptów Dzięki takiemu podejściu czas pomiędzy komendami (opóźnienie_licznika()) jest wartością parametryzowalną, zatem możliwa jest jego zmiana nawet podczas wykonywania

33 3.5. GŁÓWNE MODUŁY SYSTEMU 33 skryptu. Ta właściwość zostanie później wykorzystana. Cechami takiego rozwiązania są m.in.: + parametryzowalny czas pomiędzy wykonaniami komend, + uśpienie jest niewidoczne z poziomu kodu, dzięki temu kod jest przejrzysty, + od strony programistycznej możemy w łatwy sposób filtrować i modyfikować komendy ściągane ze stosu. - więcej roboty od strony programistycznej - trzeba odpowiednio zaprojektować strukturę kodu, - dla każdej komendy potrzeba dwóch funkcji - jedna funkcja, która wrzuca na stos wskaźnik do drugiej funkcji - uśpienie bazuje na wartości ustawionej w opcjach programu, zatem po przeniesieniu skryptu na inny komputer może się on inaczej zachowywać (jednak problem ten może zostać rozwiązany za pomocą nowej komendy, która zostanie przedstawiona w kolejny akapicie). Kolejny pomysł bazuje głównie na poprzednim. Jak już wcześniej zostało wspomniane, czas po którym jest wykonana następna komenda jest wartością parametryzowalną i można zmienić ją nawet podczas działania skryptu. Dzięki temu bardzo łatwo wykorzystać ten fakt wprowadzając nową komendę, która faktycznie będzie zmieniała opóźnienie czasowe podczas działania skryptu. Innymi słowy po napisaniu kodu: setinterval(1000) command1() command2() command3() pomiędzy wszystkimi komendami, które są wywoływane po funkcji setinterval() będzie odstęp czasowy równy 1 sekundzie. Zaletami takiego sposobu są: w sytuacji, gdy w jakimś miejscu (ale nie wszędzie) powinno występować wiele takich samych uśpień pomiędzy komendami, możemy je zastąpić jedną komendą, w połączeniu ze sleep(int) daje komfortowe narzędzie do manipulowania opóźnieniami,

34 34 ROZDZIAŁ 3. PROJEKT SYSTEMU dzięki istnieniu funkcji w kodzie staje się on przenośny (nie tak jak w przypadku globalnej opcji programu) Moduł Calendar Do stworzenia harmonogramu dla zadań został użyty kalendarz wbudowany w bibliotekę Qt. W celu dostosowania go do wymaganych potrzeb została nadpisana funkcja rysująca komórkę kalendarza. Zostało to bardzo wygodnie zaprojektowane (od strony Qt), ponieważ taka funkcja przyjmuje jako argumenty datę oraz współrzędne prostokąta przy odrysowywaniu poszczególnych komórek [34]. Rozwiązanie takie w porównaniu do zwykłych list zadań, cechuje się paroma zaletami, m.in. to, że programista bez żadnego wysiłku otrzymuje grupowanie zadań po dniach oraz umożliwia większą czytelność i bardziej intuicyjną modyfikację istniejących zadań, ponieważ powtórzenia także są widoczne na kalendarzu. Mimo, że większa część kalendarza jest za darmo z Qt to podstawą jest odpowiednie dobranie struktury przechowującej dane o zadaniach. Do takiego harmonogramu zostały dodane dwie struktury typu klucz-wartość, w których kluczem jest data a wartością lista przechowująca zadania dla konkretnej daty. Jedna z map przechowuje wszystkie zadania, które zostały dodane do kalendarza, nie uwzględniając ich powtórzeń, dlatego staje się ona bazą dla drugiej mapy. Ta druga z kolei przechowuje jedynie powtórzenia ograniczając je tylko do aktualnie wybranego przez użytkownika miesiąca. Dlatego też pierwsza z map jest tworzona tylko podczas wczytywania zadań z bazy danych oraz uaktualnia się w momencie dodawania nowych, jednak nie ulega zmianie podczas zmiany miesiąca widocznego na kalendarzu w przeciwieństwie do drugiej mapy, która musi uaktualnić powtórzenia dla nowo wyświetlonego miesiąca. Ze względu na to, że podczas wyświetlania danego miesiąca użytkownik jest w stanie zobaczyć parę dni pochodzących od innych miesięcy aktualna implementacja wylicza powtórzenia także dla jednego poprzedniego oraz następnego miesiąca, jednak da się to zoptymalizować aby wyliczało tylko dla maksymalnej liczby widocznych dni z innego miesiąca. Liczba ta jest równa 14, ponieważ kalendarz tworzy szachownicę rozmiaru 7x6 (pominięto pola na nazwy dni tygodnia oraz numer tygodnia), czyli 42 pola. Gdy pola zostaną wypełnione dniami pochodzącymi z nieprzestępnego lutego (czyli z miesiąca o najmniejszej liczbie dni aby uwidocznić jak najwięcej dni innych miesięcy) otrzymamy = 14 wolnych pól.

35 3.5. GŁÓWNE MODUŁY SYSTEMU Moduł Recorder Moduł ten umożliwia przetwarzanie działań użytkownika na odpowiednie komendy, które następnie dodawane są do okna z kodem skryptu. W trakcie nagrywania inicjalizowany jest także licznik obliczający ile czasu minęło pomiędzy dwoma komunikatami. Implementacja modułu opiera się na działaniu funkcji podpinających niskiego poziomu, które egzystują w systemowym mechanizmie do obsługi komunikatów. W zależności od ustawień użytkownika filtrują one komunikaty systemowe pochodzące od klawiatury oraz myszy. W momencie pojawienia się nowego komunikatu jest on przekazywany do odpowiedniej funkcji (na rysunku keyboardhookprocedure w przypadku komunikatu pochodzącego od klawiatury i mousehookprocedure w przypadku myszy), która została zdefiniowana przy tworzeniu hook a. Przekazywaniem komunikatów w odpowiednie miejsce zajmuje się mechanizm systemowy odpowiadający za obsługę komunikatów, w którym uprzednio został zainstalowany hook. Po otrzymaniu przez funkcję podpinającą danego komunikatu rozpoczyna się proces przefiltrowywania jego treści aby np. pobrać kod wciśniętego klawisza lub sprawdzić który przycisk myszy został wciśnięty i na jakich współrzędnych. Na podstawie tych informacji moduł przygotowuje odpowiednią komendę i wysyła ją prosto do okna zawierającego skrypt. Schemat działania (bez uwzględnienia licznika) został zaprezentowany na rysunku 3.9. Rysunek 3.9: Uproszczony schemat działania hook a dla modułu Recorder

36 36 ROZDZIAŁ 3. PROJEKT SYSTEMU Moduł ScreenSaver Podsystem ten umożliwia użytkownikowi zaznaczenie fragmentu ekranu, który jest następnie zapisywany do pliku jako bitmapa i wykorzystywany do wyszukiwania go na aktualnym ekranie. Do wyszukiwania fragmentu ekranu został wykorzystany naiwny algorytm, który próbuje dopasować szukany obrazek przesuwając go o pojedyncze piksele. Przedstawia to rysunek Rysunek 3.10: Kolejność porównywania obrazu podczas przeszukiwania innego obrazu Jest to rozwiązanie dosyć mało wydajne, ale może zostać w łatwy sposób usprawnione - najpierw wyszukując samego obramowania, a dopiero po jego znalezieniu porównywać resztę pikseli. Funkcjonalność ta zostaje uruchomiona w momencie wykonania odpowiedniej kombinacji klawiszy w trakcie nagrywania skryptu za pomocą modułu Recorder a. W momencie przejścia w tryb zaznaczania fragmentu ekranu niezbędne jest zignorowanie przetwarzania komunikatów przez funkcje podpinające wykorzystywane w module Recorder (czyli przekazanie komunikatów dalej nic z nimi nie robiąc), ponieważ w sytuacji gdy użytkownik nagrywa działania myszą to przy zaznaczaniu fragmentu ekranu (który wymaga działania za pomocą myszy) jednocześnie zapisze swoje ruchy i kliknięcia do skryptu. Podsystem ten reaguje na komunikat zwolnienia lewego przycisku myszy, który przywraca pierwotne działanie nagrywacza, tym samym zapisując zaznaczoną bitmapę do pliku oraz tworząc odpowiednią komendą wstrzymującą działanie skryptu w przypadku braku bitmapy na ekranie. Jest to wygodne rozwiązanie, ponieważ nie zmusza użytkownika do kliknięcia kolejnej kombinacji klawiszy aby powrócić do normalnego trybu, aczkolwiek w przypadku gdy użytkownik chce zaznaczyć więcej fragmentów musi powtórzyć przejście do trybu zaznaczania fragmentu ekranu, jednak zaleca się używanie jednego unikalnego obrazka w skali ekranu ze względu na wydajność algorytmu znajdowania obrazka. Jak zostało wcześniej powiedziane, po przejściu do opisywanego trybu użytkownik

37 3.6. PLAN ROZWOJU AKTUALNEJ WERSJI 37 musi wykonać pewną kombinację klawiszy na klawiaturze. Taki zabieg rodzi kolejny problem - zanim użytkownik naciśnie wszystkie przyciski z danej kombinacji nagrywacz nagra część z tych klawiszy, mimo że ich nie powinno być. Dlatego po odczytaniu specjalnej kombinacji należy ją usunąć ze skryptu. Moduł ScreenSaver został zaimplementowany na podstawie pobierania zrzutu aktualnego stanu ekranu i stworzenia nowej formatki pokrywającej cały ekran, na której jest wyrysowywany uprzednio zrobiony zrzut ekranu. Dopiero po tych etapach użytkownik ma możliwość zaznaczenia danego fragmentu ekranu, czyli tak naprawdę fragmentu bitmapy, którą jest zrzut ekranu. 3.6 Plan rozwoju aktualnej wersji Aktualna wersja, mimo że posiada już całą założoną funkcjonalność nadal wymaga dopracowania w niektórych obszarach. Jednym z nich jest jej rdzeń wykorzystywany do uruchamiania skryptów posiadający pewne ograniczenie, przez które praca z systemem może wydać się użytkownikowi mało ergonomiczna. Jak wiadomo z rozdziału 3.5.1, to co ma wykonać system w ramach utworzonego skryptu, zostaje wrzucone do pomocniczej struktury przechowującej wskaźniki do odpowiednich funkcji, które następnie wywoływane są jedna po drugiej. Takie rozwiązanie uniemożliwia wykorzystanie zwracanych wartości przez funkcje udostępnione użytkownikowi, co nie pozwala na wykorzystanie maksymalnego potencjału systemu. Nawet jeśli funkcja by coś zwracała to w obecnej strukturze ze wskaźnikami nie ma żadnych informacji dotyczących przepływu sterowania danego skryptu, dlatego zwróconych wartości nie dałoby się wykorzystać np. w instrukcji warunkowej. Najrozsądniejszym rozwiązaniem tego problemu byłoby zrezygnowanie z aktualnej struktury (idei wskaźników na funkcje, które przechowują prawdziwą implementację) i wykorzystanie bezpośredniej implementacji w połączeniu z wątkami, które mają możliwość ich uśpienia. Dzięki temu w dosyć łatwy sposób możemy zaprojektować strukturę, która zachowuje funkcjonalność poprzedniej, ponieważ funkcje sleep() i jej podobne, których implementacje aktualnie opierają się na licznikach, mogłyby zostać zastąpione poprzez uśpienie wątku. Wątki nie są dostępne natywnie w C++03, (aczkolwiek są już w C++11 [35] [36]), dlatego trzeba by było użyć zewnętrznej biblioteki, np. Qt lub BOOST. Kolejnym obszarem, który wymaga usprawnienia jest algorytm przeszukiwania obrazu w celu znalezienia fragmentu ekranu zaznaczonego przez użytkownika. W aktualnej wersji został użyty naiwny algorytm, który został opisany (wraz z uwzględnieniem możliwości

38 38 ROZDZIAŁ 3. PROJEKT SYSTEMU ulepszania) w rozdziale 3.5.4, jednak lepszym wyborem byłoby użycie biblioteki OpenCV, która oferuje szeroką funkcjonalność w zakresie obrazów (oraz wideo), a także wydajniejsze algorytmy. Innym usprawnieniem jest zastąpienie techniki hookingu za pomocą jego wyspecjalizowanego odpowiednika działającego na wyższym poziomie abstrakcji - Raw Input API. Oprócz tego, że jest on znacznie wydajniejszy niż dosyć kosztowne instalowanie hook ów niskopoziomowych, może on zapobiec oznaczaniu aplikacji jako potencjalnie niebezpiecznej przez niektóre systemy antywirusowe. Kolejna wersja systemu powinna także posiadać usprawnienie dotyczące podsystemu odpowiadającego za pobieranie fragmentu ekranu. W przypadku gdy użytkownik określa dla skryptu fragment ekranu, który musi się pojawić jest to bardzo często jakiś rodzaj przycisku, dlatego po jego zaznaczeniu użytkownik chce go po prostu wcisnąć. Problemem jest jednak to, że w przypadku ponownego odtworzenia skryptu, dany przycisk może zostać znaleziony, ale już w innym miejscu, wtedy jednak współrzędne kliknięcia nie zostaną przesunięte do nowej pozycji, a powinny. Dlatego wymagane jest wprowadzenie współrzędnych relatywnych do zaznaczonego fragmentu.

39 Podsumowanie Nie od dziś znano pojęcie takie jak automatyzacja. Korzysta się z niego w wielu obszarach technicznych, dzięki któremu poprawia się komfort korzystania z wielu rzeczy, w tym także użycia systemów komputerowych. W dzisiejszych czasach każdy człowiek odczuwa ogrom pracy jaki niesie za sobą korzystanie z komputera, dlatego coraz popularniejsze stają się systemy automatyzujące zadania potrafiące odciążyć użytkownika od pracy. Wiele dzisiejszych systemów posiada swoją własną funkcjonalność automatyzacji, jednak są one wtedy zazwyczaj ograniczone do automatyzacji zadania jakie wykonuje dane oprogramowanie, dlatego systemy takie jak DoForMe! kontrolujące urządzenia wejścia jak mysz czy klawiatura pozwalają na sterowanie komputerem niezależnie od tego z jakiej aplikacji się korzysta. Stworzenie systemu DoForMe! wypełnia kolejną lukę w oprogramowaniach tego typu w ramach coraz to wygodniejszej automatyzacji. Wprowadza on całkowicie nowy sposób zarządzania zdefiniowanymi zadaniami za pomocą intuicyjnego podsystemu kalendarza oraz wykorzystuje rozbudowany język skryptowy Lua, który osiągnął ostatnimi czasy duży sukces. Dzięki wykorzystaniu tego języka, możliwe jest ulepszenie języka skryptowego wykorzystywanego do definiowania zadania bez dodatkowego nakładu pracy samego programisty tworzącego system, ponieważ język Lua rozwijany jest niezależnie od projektu DoForMe!. Zastosowanie takiego podejścia przenosi się także na wartości ekonomiczne. Proces automatyzacji i tworzenia sposobów jego osiągnięcia będzie wciąż brnął naprzód, niezależnie od tego czy jest to system komputerowy czy urządzenie elektroniczne. Jest to nieodłączny element dzisiejszej rzeczywistości, który ułatwia proces większości czynności z jakimi człowiek spotyka się w codziennym życiu. 39

40 40 ROZDZIAŁ 3. PROJEKT SYSTEMU

41 Dodatek A Instalacja i wdrożenie systemu Instalacja programu odbywa się poprzez skopiowanie folderu DoForMe z załączonej płyty CD na własny dysk twardy. W przypadku gdy użytkownik jest w posiadaniu systemu Microsoft R Windows TM w wersji Vista TM lub wyższej to po skopiowaniu folderu na dysk, na którym został zainstalowany system operacyjny, aplikację należy urchamiać z prawami administratora. W innym przypadku (np. na innej partycji) nie są wymagane prawa administratora. Rysunek A.1: Widok na główne okno aplikacji 41

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

5.4. Tworzymy formularze

5.4. Tworzymy formularze 5.4. Tworzymy formularze Zastosowanie formularzy Formularz to obiekt bazy danych, który daje możliwość tworzenia i modyfikacji danych w tabeli lub kwerendzie. Jego wielką zaletą jest umiejętność zautomatyzowania

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Instalacja SQL Server Express. Logowanie na stronie Microsoftu

Instalacja SQL Server Express. Logowanie na stronie Microsoftu Instalacja SQL Server Express Logowanie na stronie Microsoftu Wybór wersji do pobrania Pobieranie startuje, przechodzimy do strony z poradami. Wypakowujemy pobrany plik. Otwiera się okno instalacji. Wybieramy

Bardziej szczegółowo

Programowanie na poziomie sprzętu. Programowanie w Windows API

Programowanie na poziomie sprzętu. Programowanie w Windows API Programowanie w Windows API Windows API Windows Application Programming Interface (API) to zestaw funkcji systemu operacyjnego Windows, które umożliwiają aplikacjom korzystanie z wszystkich usług systemu.

Bardziej szczegółowo

INFORMATYKA TECHNICZNA Metody wprowadzania obiektów w programie AutoCAD za pomocą języka AutoLISP

INFORMATYKA TECHNICZNA Metody wprowadzania obiektów w programie AutoCAD za pomocą języka AutoLISP INFORMATYKA TECHNICZNA Metody wprowadzania obiektów w programie AutoCAD za pomocą języka AutoLISP 1. WPROWADZENIE Cel ćwiczeń: zapoznanie z możliwościami wykorzystania systemów CAx w procesie automatyzacji

Bardziej szczegółowo

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

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

Bardziej szczegółowo

URLOPY BY CTI. Instrukcja obsługi

URLOPY BY CTI. Instrukcja obsługi URLOPY BY CTI Instrukcja obsługi 1. Wstęp.... 3 2. Uruchomienie programu.... 4 3. Rozpoczęcie pracy w programie.... 6 4. Widok kalendarza.... 8 5. Widok pracowników.... 10 6.Tabela z danymi... 11 1. Wstęp.

Bardziej szczegółowo

Wprowadzenie do projektu QualitySpy

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

Bardziej szczegółowo

Kadry Optivum, Płace Optivum. Jak przenieść dane na nowy komputer?

Kadry Optivum, Płace Optivum. Jak przenieść dane na nowy komputer? Kadry Optivum, Płace Optivum Jak przenieść dane na nowy komputer? Aby kontynuować pracę z programem Kadry Optivum lub Płace Optivum (lub z obydwoma programami pracującymi na wspólnej bazie danych) na nowym

Bardziej szczegółowo

PRZYJĘTE ZASADY GRY...3 ZAŁOŻENIA PROJEKTU...4 CZYM JEST I DLACZEGO QT?...5 DIAGRAM KLAS...7 DIAGRAM GRY SINGLE PLAYER...8 DIAGRAM MULTIPLAYERA...

PRZYJĘTE ZASADY GRY...3 ZAŁOŻENIA PROJEKTU...4 CZYM JEST I DLACZEGO QT?...5 DIAGRAM KLAS...7 DIAGRAM GRY SINGLE PLAYER...8 DIAGRAM MULTIPLAYERA... WARCABY Spis treści PRZYJĘTE ZASADY GRY...3 ZAŁOŻENIA PROJEKTU...4 CZYM JEST I DLACZEGO QT?...5 DIAGRAM KLAS...7 DIAGRAM GRY SINGLE PLAYER...8 DIAGRAM MULTIPLAYERA...9 1.PRZYJĘTE ZASADY GRY 1. W grze bierze

Bardziej szczegółowo

Ćwiczenie: JavaScript Cookies (3x45 minut)

Ćwiczenie: JavaScript Cookies (3x45 minut) Ćwiczenie: JavaScript Cookies (3x45 minut) Cookies niewielkie porcje danych tekstowych, które mogą być przesyłane między serwerem a przeglądarką. Przeglądarka przechowuje te dane przez określony czas.

Bardziej szczegółowo

Płace Optivum. 1. Zainstalować serwer SQL (Microsoft SQL Server 2008 R2) oraz program Płace Optivum.

Płace Optivum. 1. Zainstalować serwer SQL (Microsoft SQL Server 2008 R2) oraz program Płace Optivum. Płace Optivum Jak przenieść dane programu Płace Optivum na nowy komputer? Aby kontynuować pracę z programem Płace Optivum na nowym komputerze, należy na starym komputerze wykonać kopię zapasową bazy danych

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

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

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

Expo Composer. www.doittechnology.pl 1. Garncarska 5 70-377 Szczecin tel.: +48 91 404 09 24 e-mail: info@doittechnology.pl. Dokumentacja użytkownika

Expo Composer. www.doittechnology.pl 1. Garncarska 5 70-377 Szczecin tel.: +48 91 404 09 24 e-mail: info@doittechnology.pl. Dokumentacja użytkownika Expo Composer Dokumentacja użytkownika Wersja 1.0 www.doittechnology.pl 1 SPIS TREŚCI 1. O PROGRAMIE... 3 Wstęp... 3 Wymagania systemowe... 3 Licencjonowanie... 3 2. PIERWSZE KROKI Z Expo Composer... 4

Bardziej szczegółowo

Sposób tworzenia tabeli przestawnej pokażę na przykładzie listy krajów z podstawowymi informacjami o nich.

Sposób tworzenia tabeli przestawnej pokażę na przykładzie listy krajów z podstawowymi informacjami o nich. Tabele przestawne Tabela przestawna to narzędzie służące do tworzenia dynamicznych podsumowań list utworzonych w Excelu lub pobranych z zewnętrznych baz danych. Raporty tabeli przestawnej pozwalają na

Bardziej szczegółowo

Program RMUA. Instrukcja konfiguracji i pracy w programie. (Wersja 2)

Program RMUA. Instrukcja konfiguracji i pracy w programie. (Wersja 2) Program RMUA Instrukcja konfiguracji i pracy w programie (Wersja 2) 1 Wstęp Program RMUA powstał w związku z obowiązkiem przekazywania ubezpieczonym informacji rocznej zwanej wcześniej RMUA. Aplikacja

Bardziej szczegółowo

Voicer. SPIKON Aplikacja Voicer V100

Voicer. SPIKON Aplikacja Voicer V100 Voicer SPIKON Aplikacja Voicer V100 SPIKON Voicer Aplikacja Voicer w platformie SPIKON dedykowana jest przede wszystkim konsultantom kampanii wirtualnego Call Center. Dając łatwy dostęp do najważniejszych

Bardziej szczegółowo

Na komputerach z systemem Windows XP zdarzenia są rejestrowane w trzech następujących dziennikach: Dziennik aplikacji

Na komputerach z systemem Windows XP zdarzenia są rejestrowane w trzech następujących dziennikach: Dziennik aplikacji Podgląd zdarzeń W systemie Windows XP zdarzenie to każde istotne wystąpienie w systemie lub programie, które wymaga powiadomienia użytkownika lub dodania wpisu do dziennika. Usługa Dziennik zdarzeń rejestruje

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej.

Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej. Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej. Dział Zagadnienia Wymagania podstawowe Wymagania ponadpodstawowe Arkusz kalkulacyjny (Microsoft Excel i OpenOffice) Uruchomienie

Bardziej szczegółowo

Produkcja by CTI. Proces instalacji, ważne informacje oraz konfiguracja

Produkcja by CTI. Proces instalacji, ważne informacje oraz konfiguracja Produkcja by CTI Proces instalacji, ważne informacje oraz konfiguracja Spis treści 1. Ważne informacje przed instalacją...3 2. Instalacja programu...4 3. Nawiązanie połączenia z serwerem SQL oraz z programem

Bardziej szczegółowo

6.4. Efekty specjalne

6.4. Efekty specjalne 6.4. Efekty specjalne Rozdział ten będzie poświęcony efektom specjalnym, które również znalazły swoje zastosowanie w programie MS PowerPoint 2007. Pierwszym typem efektów jaki zostanie poddany naszej analizie

Bardziej szczegółowo

Automatyzowanie zadan przy uz yciu makr języka Visual Basic

Automatyzowanie zadan przy uz yciu makr języka Visual Basic Automatyzowanie zadan przy uz yciu makr języka Visual Basic Jeśli użytkownik nie korzystał nigdy z makr, nie powinien się zniechęcać. Makro jest po prostu zarejestrowanym zestawem naciśnięć klawiszy i

Bardziej szczegółowo

Instrukcja użytkownika

Instrukcja użytkownika Instrukcja użytkownika Menadżer Licencji Wersja 2013.0.1 Spis treści 1 WPROWADZENIE... 3 2 AKTUALIZACJA SERWISU KLUCZA HASP ORAZ ZDALNEGO SERWISU KLUCZA... 3 3 INSTALACJA... 3 4 MONITOR MENADŻERA LICENCJI...

Bardziej szczegółowo

System magazynowy małego sklepu.

System magazynowy małego sklepu. System magazynowy małego sklepu. dokumentacja użytkownika. Mariusz Grabowski e-mail: mariosh@interia.pl Jabber ID: mariosh@jabber.autocom.pl Spis treści 1 Wstęp. 2 2 Przed uruchomieniem. 3 3 Korzystanie

Bardziej szczegółowo

Stawiamy pierwsze kroki

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

Bardziej szczegółowo

edycja szablonu za pomocą programu NVU

edycja szablonu za pomocą programu NVU edycja szablonu za pomocą programu NVU 2 Edycja szablonu za pomocą dodatkowego oprogramowania daje nam znacznie więcej możliwości. Zarówno posiada wiele dodatkowych opcji formatowania tekstu jak również

Bardziej szczegółowo

WINDOWS Instalacja serwera WWW na systemie Windows XP, 7, 8.

WINDOWS Instalacja serwera WWW na systemie Windows XP, 7, 8. WINDOWS Instalacja serwera WWW na systemie Windows XP, 7, 8. Gdy już posiadamy serwer i zainstalowany na nim system Windows XP, 7 lub 8 postawienie na nim serwera stron WWW jest bardzo proste. Wystarczy

Bardziej szczegółowo

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

Pracownia internetowa w każdej szkole (edycja Jesień 2007) Instrukcja numer D1/05_03/Z Pracownia internetowa w każdej szkole (edycja Jesień 2007) Opiekun pracowni internetowej cz. 1 Ręczne zakładanie kont użytkowników (D1) Jak ręcznie założyć konto w systemie

Bardziej szczegółowo

Część I Rozpoczęcie pracy z usługami Reporting Services

Część I Rozpoczęcie pracy z usługami Reporting Services Spis treści Podziękowania... xi Wprowadzenie... xiii Część I Rozpoczęcie pracy z usługami Reporting Services 1 Wprowadzenie do usług Reporting Services... 3 Platforma raportowania... 3 Cykl życia raportu...

Bardziej szczegółowo

Leszek Stasiak Zastosowanie technologii LINQ w

Leszek Stasiak Zastosowanie technologii LINQ w Leszek Stasiak Zastosowanie technologii LINQ w C# 1. Wstęp - połączenie Do naszych zadań będziemy używać Microsoft Visual Studio 2010. Stwórzmy nowy projekt Windows Form Application. Mając do dyspozycji

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

VinCent Administrator

VinCent Administrator VinCent Administrator Moduł Zarządzania podatnikami Krótka instrukcja obsługi ver. 1.01 Zielona Góra, grudzień 2005 1. Przeznaczenie programu Program VinCent Administrator przeznaczony jest dla administratorów

Bardziej szczegółowo

Bazy danych - wykład wstępny

Bazy danych - wykład wstępny Bazy danych - wykład wstępny Wykład: baza danych, modele, hierarchiczny, sieciowy, relacyjny, obiektowy, schemat logiczny, tabela, kwerenda, SQL, rekord, krotka, pole, atrybut, klucz podstawowy, relacja,

Bardziej szczegółowo

Aplikacje w środowisku VBA. Visual Basic for Aplications

Aplikacje w środowisku VBA. Visual Basic for Aplications Aplikacje w środowisku VBA Visual Basic for Aplications Podstawowe informacje o VBA Visual Basic for Aplications, w skrócie VBA, to język programowania rozwijany przez Microsoft, którego zastosowanie pozwala

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

ABC 2002/XP PL EXCEL. Autor: Edward C. Willett, Steve Cummings. Rozdział 1. Podstawy pracy z programem (9) Uruchamianie programu (9)

ABC 2002/XP PL EXCEL. Autor: Edward C. Willett, Steve Cummings. Rozdział 1. Podstawy pracy z programem (9) Uruchamianie programu (9) ABC 2002/XP PL EXCEL Autor: Edward C. Willett, Steve Cummings Rozdział 1. Podstawy pracy z programem (9) Uruchamianie programu (9) Obszar roboczy programu (10) o Pasek tytułowy (10) o Przyciski Minimalizuj

Bardziej szczegółowo

Polecenia wsadowe. Automatyzacja procesów przemysłowych jest głównym celem rozwoju oprogramowania

Polecenia wsadowe. Automatyzacja procesów przemysłowych jest głównym celem rozwoju oprogramowania Polecenia wsadowe Wstęp Automatyzacja procesów przemysłowych jest głównym celem rozwoju oprogramowania dedykowanego maszynom CNC. SigmaNEST wychodzi naprzeciw użytkownikom programu, dlatego dla dodatkowego

Bardziej szczegółowo

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

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

Bardziej szczegółowo

Delphi podstawy programowania. Środowisko Delphi

Delphi podstawy programowania. Środowisko Delphi Delphi podstawy programowania Środowisko Delphi Olsztyn 2004 Delphi Programowanie obiektowe - (object-oriented programming) jest to metodologia tworzeniu programów komputerowych definiująca je jako zbiór

Bardziej szczegółowo

Laboratorium 1 - Programowanie proceduralne i obiektowe

Laboratorium 1 - Programowanie proceduralne i obiektowe Laboratorium 1 - Programowanie proceduralne i obiektowe mgr inż. Kajetan Kurus 4 marca 2014 1 Podstawy teoretyczne 1. Programowanie proceduralne (powtórzenie z poprzedniego semestru) (a) Czym się charakteryzuje?

Bardziej szczegółowo

Podręcznik użytkownika Obieg dokumentów

Podręcznik użytkownika Obieg dokumentów Podręcznik użytkownika Obieg dokumentów Opracowany na potrzeby wdrożenia dla Akademii Wychowania Fizycznego im. Eugeniusza Piaseckiego w Poznaniu W ramach realizacji projektu: Uczelnia jutra wdrożenie

Bardziej szczegółowo

LABORATORIUM 6: ARKUSZ MS EXCEL JAKO BAZA DANYCH

LABORATORIUM 6: ARKUSZ MS EXCEL JAKO BAZA DANYCH UNIWERSYTET ZIELONOGÓRSKI INSTYTUT INFORMATYKI I ELEKTROTECHNIKI ZAKŁAD INŻYNIERII KOMPUTEROWEJ Przygotował: dr inż. Janusz Jabłoński LABORATORIUM 6: ARKUSZ MS EXCEL JAKO BAZA DANYCH Jeżeli nie jest potrzebna

Bardziej szczegółowo

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller Dokumentacja systemu NTP rekrut Autor: Sławomir Miller 1 Spis treści: 1. Wstęp 1.1 Wprowadzenie 1.2 Zakres dokumentu 2. Instalacja 2.1 Wymagania systemowe 2.2 Początek 2.3 Prawa dostępu 2.4 Etapy instalacji

Bardziej szczegółowo

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski. Bazy danych ITA-101. Wersja 1

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski. Bazy danych ITA-101. Wersja 1 Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Bazy danych ITA-101 Wersja 1 Warszawa, wrzesień 2009 Wprowadzenie Informacje o kursie Opis kursu We współczesnej informatyce coraz większą

Bardziej szczegółowo

Instrukcja do programu Przypominacz 1.6

Instrukcja do programu Przypominacz 1.6 Instrukcja do programu Przypominacz 1.6 Program Przypominacz 1.6 pozwala w prosty sposób wykorzystać dane z systemu sprzedaży Subiekt GT do prowadzenia tzw. miękkiej windykacji poprzez wysyłanie kontrahentom

Bardziej szczegółowo

Rozpoczęcie pracy z programem.

Rozpoczęcie pracy z programem. Rozpoczęcie pracy z programem. Po zainstalowaniu programu należy przygotować program do wykonywania kopii zapasowej baz danych. W tym celu należy uruchomić z menu start Panel sterowania a następnie wybrać

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

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

Temat: Organizacja skoroszytów i arkuszy

Temat: Organizacja skoroszytów i arkuszy Temat: Organizacja skoroszytów i arkuszy Podstawowe informacje o skoroszycie Excel jest najczęściej wykorzystywany do tworzenia skoroszytów. Skoroszyt jest zbiorem informacji, które są przechowywane w

Bardziej szczegółowo

Szpieg 2.0 Instrukcja użytkownika

Szpieg 2.0 Instrukcja użytkownika Szpieg 2.0 Instrukcja użytkownika Spis treści: Wstęp: 1. Informacje o programie 2. Wymagania techniczne Ustawienia: 3. Połączenie z bazą danych 4. Konfiguracja email 5. Administracja Funkcje programu:

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

Tworzenie prezentacji w MS PowerPoint

Tworzenie prezentacji w MS PowerPoint Tworzenie prezentacji w MS PowerPoint Program PowerPoint dostarczany jest w pakiecie Office i daje nam możliwość stworzenia prezentacji oraz uatrakcyjnienia materiału, który chcemy przedstawić. Prezentacje

Bardziej szczegółowo

QUERY język zapytań do tworzenia raportów w AS/400

QUERY język zapytań do tworzenia raportów w AS/400 QUERY język zapytań do tworzenia raportów w AS/400 Dariusz Bober Katedra Informatyki Politechniki Lubelskiej Streszczenie: W artykule przedstawiony został język QUERY, standardowe narzędzie pracy administratora

Bardziej szczegółowo

BACKUP BAZ DANYCH FIREBIRD

BACKUP BAZ DANYCH FIREBIRD BACKUP BAZ DANYCH FIREBIRD SPIS TREŚCI Informacje ogólne... 2 Tworzenie projektu... 2 Krok 1: Informacje podstawowe... 2 Krok 2: Dane... 3 Backup bazy umieszczonej na serwerze... 3 Bezpośredni backup pliku

Bardziej szczegółowo

REFERAT PRACY DYPLOMOWEJ

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

Bardziej szczegółowo

Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9

Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9 Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9 Uruchamianie edytora OpenOffice.ux.pl Writer 9 Dostosowywanie środowiska pracy 11 Menu Widok 14 Ustawienia dokumentu 16 Rozdział 2. OpenOffice

Bardziej szczegółowo

MS EXCEL KURS DLA ZAAWANSOWANYCH Z WYKORZYSTANIEM VBA

MS EXCEL KURS DLA ZAAWANSOWANYCH Z WYKORZYSTANIEM VBA COGNITY Praktyczne Skuteczne Szkolenia i Konsultacje tel. 12 421 87 54 biuro@cognity.pl www.cognity.pl MS EXCEL KURS DLA ZAAWANSOWANYCH Z WYKORZYSTANIEM VBA C O G N I T Y SZKOLENIE MS EXCEL KURS ZAAWANSOWANYCH

Bardziej szczegółowo

Projektowanie baz danych za pomocą narzędzi CASE

Projektowanie baz danych za pomocą narzędzi CASE Projektowanie baz danych za pomocą narzędzi CASE Metody tworzenia systemów informatycznych w tym, także rozbudowanych baz danych są komputerowo wspomagane przez narzędzia CASE (ang. Computer Aided Software

Bardziej szczegółowo

Ogranicz listę klasyfikacji budżetowych do powiązanych z danym kontem księgowym

Ogranicz listę klasyfikacji budżetowych do powiązanych z danym kontem księgowym Zależności i kontrola danych budżetowych w systemie Sz@rk FK 1. Wstęp Począwszy od wersji Sz@rk FK 2011 (11.03.30) wprowadzono do programu finansowoksięgowego nowe możliwości dotyczące kontrolowania poprawności

Bardziej szczegółowo

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS PROBLEMY TECHNICZNE Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS Jeżeli stwierdziłeś występowanie błędów lub problemów podczas pracy z programem DYSONANS możesz skorzystać

Bardziej szczegółowo

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi) Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie drugie (jedne zajęcia) Temat: Procesy i sygnały w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Budowa procesu

Bardziej szczegółowo

Instrukcja instalacji i obsługi programu Szpieg 3

Instrukcja instalacji i obsługi programu Szpieg 3 COMPUTER SERVICE CENTER 43-300 Bielsko-Biała ul. Cieszyńska 52 tel. +48 (33) 819 35 86, 819 35 87, 601 550 625 Instrukcja instalacji i obsługi programu Szpieg 3 wersja 0.0.2 123 SERWIS Sp. z o. o. ul.

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

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

System rezerwacji online

System rezerwacji online Spis treści 1. Część widoczna dla klientów dokonujących rezerwacji...1 1.a. Ogólne informacje...1 1.b. Etapy w rezerwacji...3 I. Etap 1 wybór dat początku i końca pobytu oraz wybór pokoi...3 II. Etap 2

Bardziej szczegółowo

Podręcznik Użytkownika LSI WRPO

Podręcznik Użytkownika LSI WRPO Podręcznik użytkownika Lokalnego Systemu Informatycznego do obsługi Wielkopolskiego Regionalnego Programu Operacyjnego na lata 2007 2013 w zakresie wypełniania wniosków o dofinansowanie Wersja 1 Podręcznik

Bardziej szczegółowo

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego 2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego produktu. 23 czerwca 2014 Spis treści 3 Spis treści...5

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

MS Word 2010. Długi dokument. Praca z długim dokumentem. Kinga Sorkowska 2011-12-30

MS Word 2010. Długi dokument. Praca z długim dokumentem. Kinga Sorkowska 2011-12-30 MS Word 2010 Długi dokument Praca z długim dokumentem Kinga Sorkowska 2011-12-30 Dodawanie strony tytułowej 1 W programie Microsoft Word udostępniono wygodną galerię wstępnie zdefiniowanych stron tytułowych.

Bardziej szczegółowo

Pierwsze kroki z easy Soft CoDeSys. 2009 Eaton Corporation. All rights reserved.

Pierwsze kroki z easy Soft CoDeSys. 2009 Eaton Corporation. All rights reserved. Pierwsze kroki z easy Soft CoDeSys Tworzenie prostego programu Rozpoczęcie pracy 2 Tworzenie prostego programu Wybór aparatu 3 Tworzenie prostego programu Wybór języka programowania Do wyboru jest sześć

Bardziej szczegółowo

Podstawy Programowania 2

Podstawy Programowania 2 Podstawy Programowania 2 Laboratorium 7 Instrukcja 6 Object Pascal Opracował: mgr inż. Leszek Ciopiński Wstęp: Programowanie obiektowe a programowanie strukturalne. W programowaniu strukturalnym, któremu

Bardziej szczegółowo

Instrukcja logowania do systemu e-bank EBS

Instrukcja logowania do systemu e-bank EBS Instrukcja logowania do systemu e-bank EBS 1. Instalacja programu JAVA Przed pierwszą rejestracją do systemu e-bank EBS na komputerze należy zainstalować program JAVA w wersji 6u7 lub nowszej. Można go

Bardziej szczegółowo

Notepad++ / PuTTY. Interaktywne środowisko programowania w języku ForthLogic. www.plcmax.pl. Wersja dokumentu P.1. Wersja dokumentu NP1.

Notepad++ / PuTTY. Interaktywne środowisko programowania w języku ForthLogic. www.plcmax.pl. Wersja dokumentu P.1. Wersja dokumentu NP1. F&F Filipowski sp.j. ul. Konstantynowska 79/81 95-200 Pabianice tel/fax 42-2152383, 2270971 e-mail: Hfif@fif.com.pl www.fif.com.pl Notepad++ / PuTTY Interaktywne środowisko programowania w języku ForthLogic

Bardziej szczegółowo

Instrukcja do programu Przypominacz 1.5

Instrukcja do programu Przypominacz 1.5 Instrukcja do programu Przypominacz 1.5 Program Przypominacz 1.5 pozwala w prosty sposób wykorzystać dane z systemu sprzedaży Subiekt GT do prowadzenia tzw. miękkiej windykacji poprzez wysyłanie kontrahentom

Bardziej szczegółowo

Tablet bezprzewodowy QIT30. Oprogramowanie Macro Key Manager

Tablet bezprzewodowy QIT30. Oprogramowanie Macro Key Manager Tablet bezprzewodowy QIT30 Oprogramowanie Macro Key Manager Spis treści 1. Wprowadzenie... 3 2. Panel Sterowania - wprowadzenie... 4 3. Instalacja... 5 3.1 Jak stworzyć nowy profil... 5 3.2 Jak zmodyfikować

Bardziej szczegółowo

Słowa kluczowe Sterowanie klawiaturą, klawiatura, klawisze funkcyjne, przesuwanie obiektów ekranowych, wydawanie poleceń za pomocą klawiatury

Słowa kluczowe Sterowanie klawiaturą, klawiatura, klawisze funkcyjne, przesuwanie obiektów ekranowych, wydawanie poleceń za pomocą klawiatury Obsługa za pomocą klawiatury Różnego typu interfejsy wykorzystują różne metody reagowania i wydawania poleceń przez użytkownika. W środowisku graficznym najpopularniejsza jest niewątpliwie mysz i inne

Bardziej szczegółowo

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości Rozpoczniemy od zaprojektowania bazy danych w programie SYBASE/PowerDesigner umieszczamy dwie Encje (tabele) prawym

Bardziej szczegółowo

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx 1. WPROWADZENIE Program AutoCAD ma wielu użytkowników i zajmuje znaczące miejsce w graficznym

Bardziej szczegółowo

4.2. Ustawienia programu

4.2. Ustawienia programu 4.2. Ustawienia programu Zmiana wielkości dokumentu Pracując w programie MS Excel 2010 niejednokrotnie doświadczysz sytuacji, w której otwarty przez Ciebie arkusz nie będzie mieścił się na ekranie monitora.

Bardziej szczegółowo

FAQ: 00000041/PL Data: 09/06/2012. Zastosowanie zmiennych Raw Data Type WinCC v7.0

FAQ: 00000041/PL Data: 09/06/2012. Zastosowanie zmiennych Raw Data Type WinCC v7.0 Zmienne typu Raw Data są typem danych surowych nieprzetworzonych. Ten typ danych daje użytkownikowi możliwość przesyłania do oraz z WinCC dużych ilości danych odpowiednio 208 bajtów dla sterowników serii

Bardziej szczegółowo

Instrukcja dotycząca generowania klucza dostępowego do Sidoma v8

Instrukcja dotycząca generowania klucza dostępowego do Sidoma v8 Szanowni Państwo! Instrukcja dotycząca generowania klucza dostępowego do Sidoma v8 Przekazujemy nową wersję systemu SidomaOnLine v8. W celu zalogowania się do systemu niezbędny jest nowy klucz dostępu

Bardziej szczegółowo

Podręcznik użytkownika

Podręcznik użytkownika Podręcznik użytkownika Moduł kliencki Kodak Asset Management Software Stan i ustawienia zasobów... 1 Menu Stan zasobów... 2 Menu Ustawienia zasobów... 3 Obsługa alertów... 7 Komunikaty zarządzania zasobami...

Bardziej szczegółowo

9.1.2. Ustawienia personalne

9.1.2. Ustawienia personalne 9.1.2. Ustawienia personalne 9.1. Konfigurowanie systemu Windows Systemy z rodziny Windows umożliwiają tzw. personalizację ustawień interfejsu graficznego poprzez dostosowanie wyglądu pulpitu, menu Start

Bardziej szczegółowo

Poradnik zetula.pl. Jak założyć konto na zetula.pl. i zabezpieczyć dane na swoim komputerze?

Poradnik zetula.pl. Jak założyć konto na zetula.pl. i zabezpieczyć dane na swoim komputerze? Poradnik zetula.pl Jak założyć konto na zetula.pl i zabezpieczyć dane na swoim komputerze? 1.Wejdź na stronę www.zetula.pl 2.Kliknij na odnośniku Utwórz nowe konto 3.Wypełnij formularz rejestracyjny. Pola

Bardziej szczegółowo

www.gim4.slupsk.pl/przedmioty

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

Bardziej szczegółowo

Kolumna Zeszyt Komórka Wiersz Tabela arkusza Zakładki arkuszy

Kolumna Zeszyt Komórka Wiersz Tabela arkusza Zakładki arkuszy 1 Podstawowym przeznaczeniem arkusza kalkulacyjnego jest najczęściej opracowanie danych liczbowych i prezentowanie ich formie graficznej. Ale formuła arkusza kalkulacyjnego jest na tyle elastyczna, że

Bardziej szczegółowo

Océ Podręcznik użytkownika

Océ Podręcznik użytkownika Océ Podręcznik użytkownika Océ Client Tools Instrukcje podstawowej obsługi Copyright 2010 Océ Wszelkie prawa zastrzeżone. Żadna część tego podręcznika nie może być powielana, kopiowana, adaptowana ani

Bardziej szczegółowo

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED Podręcznik użytkownika Katowice 2010 Producent programu: KAMSOFT S.A. ul. 1 Maja 133 40-235 Katowice Telefon: (0-32) 209-07-05 Fax:

Bardziej szczegółowo

Aplikacja (oprogramowanie) będzie umożliwiać przygotowanie, przeprowadzenie badania oraz analizę wyników według określonej metody.

Aplikacja (oprogramowanie) będzie umożliwiać przygotowanie, przeprowadzenie badania oraz analizę wyników według określonej metody. Załącznik nr 1 Specyfikacja przedmiotu zamówienia Aplikacja (oprogramowanie) będzie umożliwiać przygotowanie, przeprowadzenie badania oraz analizę wyników według określonej metody. Słowniczek pojęć Badanie

Bardziej szczegółowo

Bydgoskie Centrum Archiwizacji Cyfrowej sp. z o.o.

Bydgoskie Centrum Archiwizacji Cyfrowej sp. z o.o. STRONA GŁÓWNA ` Usługa earchiwizacja.pl przeznaczona jest zarówno dla osób indywidualnych, jak i firm. Wykorzystuje zasadę przetwarzania danych w chmurze. Pozwala to na dostęp do własnej bazy dokumentów

Bardziej szczegółowo

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński Plan Prezentacji. Programowanie ios. Jak zacząć? Co warto wiedzieć o programowaniu na platformę ios? Kilka słów na temat Obiective-C.

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

Tworzenie bazy danych na przykładzie Access

Tworzenie bazy danych na przykładzie Access Tworzenie bazy danych na przykładzie Access Tworzenie tabeli Kwerendy (zapytania) Selekcja Projekcja Złączenie Relacja 1 Relacja 2 Tworzenie kwedend w widoku projektu Wybór tabeli (tabel) źródłowych Wybieramy

Bardziej szczegółowo

Opis szybkiego uruchomienia programu APBSoft

Opis szybkiego uruchomienia programu APBSoft Opis szybkiego uruchomienia programu APBSoft www.telmatik.pl Program APBSoft należy instalować z otrzymanej płyty CD albo pobrać ze strony www.telmatik.pl. W drugim przypadku program dostarczany jest w

Bardziej szczegółowo