Technologie informacyjne wykład 4 wer. 1.1 Wojciech Myszka 14 listopada 2009 1
Część I Oprogramowanie i różne sprawy z tym związane
User Oprogramowanie: podstawowe, systemowe, użytkowe wer. 1.6 Application Operating System Hardware Wojciech Myszka 7 listopada 2009
Trochę historii... 1. Od czego zacząć? 2. Co to jest program? Program (1973) ciąg dyrektyw mających spowodować określone działanie automatu będący algorytmem zakodowanym w jakimś języku programowania. 3. Co to jest automat? Automat (1973) obiekt działający w pełnym cyklu swojej pracy bez bezpośredniego udziału człowieka zgodnie z założonym algorytmem funkcjonowania.
Trochę historii... 1. Co to jest automat (cd) Automat (2008) urządzenie, maszyna lub ich zestaw, wykonujące samoczynnie cykl czynności lub operacji określony konstrukcją lub programem, nie wymagające bezpośredniego udziału człowieka. 2. Automat (po angielsku) An automaton (plural: automata or automatons) is a self-operating machine. The word is sometimes used to describe a robot, more specifically an autonomous robot. Used colloquially, it refers to a mindless follower.
Automaty też historia The Canard Digérateur, or Digesting Duck, was an automaton in the form of duck, created by Jacques de Vaucanson in 1739. The mechanical duck appeared to have the ability to eat kernels of grain, and to metabolise and defecate them. While the duck did not actually have the ability to do this - the food was collected in one inner container, and the feces being produced from a second, so that no actual digestion took place - Vaucanson hoped that a truly digesting automaton could one day be designed. Voltaire wrote that "without [...] the duck of Vaucanson, you have nothing to remind you of the glory of France." ("Sans...le canard de Vaucanson vous n auriez rien qui fit ressouvenir de la gloire de la France.") This is often misquoted as "Without the shitting duck, we would have nothing to remind us of the glory of France." Za Wikipedią (Digesting Duck)
Digesting Duck
Cybernetyczny żółw Greya Waltera
Trochę historii... 1. Krosna Jacquarda (1804) 2. Pierwszy program Ada Lovelace dla maszyny analitycznej Charlesa Babbage a (1843) 3. George Bool i algebra Boole a (1847) 4. Zuse Plankalkul pierwszy prawdziwy język programowania komputerów (lata 40) 5. John Von Neumann (1945)
Generacje oprogramowania 1. Pierwsza (1950-) druciki, przekaźniki, przełączniki... 2. Druga (1955-) assembler (język niskiego rzędu bardzo blisko kodu maszynowego podobny do języka MARIE) 3. Trzecia (koniec lat 50.) języki symboliczne 4. Czwarta nie jest potrzebna znajomość języka programowania; komputerowi przekazywana jest informacja CO ma zrobić (a nie JAK ma zrobić jak w przypadku generacji III). Wadą takich narzędzi jest to, że utworzone w ten sposób programy są zasobożerne i nieefektywne. 5. Piąta Na razie w głowach tych, którzy chcą wymyślić co to ma być...
Oprogramowanie komputera Program binarny: 1. Zależy od procesora 2. Zależy od Systemu Operacyjnego
Oprogramowanie komputera Program binarny: 1. Zależy od procesora 2. Zależy od Systemu Operacyjnego Jak powstaje oprogramowanie? Języki programowania: 1. Język maszynowy 2. Assembler 3. Makro assembler 4. Języki wysokiego rzędu 5. Systemy automatycznego tworzenia programów
Warstwy oprogramowania komputera 1. Firmware urządzeń 2. Basid Input-Output Sysetm (BIOS) 3. Oprogramowanie systemowe (System operacyjny, drajwery urządzeń,... ) 4. Narzędzia programistyczne (wszystko co potrzebne do napisania nowego programu) 5. Oprogramowanie użytkowe Podział dosyć sztuczny i często trudny do zauważenia.
Model oprogramowania komputera
Model oprogramowania komputera Zakłada się, że (we współczesnych i nowoczesnych) systemach komputerowych oprogramowanie aplikacyjne nie ma bezpośredniego dostępu do sprzętu. Poprawną komunikację zapewniają: standardowe interfejsy (protokół komunikacyjny) urządzeń standardowe interfejsy (programistyczne) BIOSu standardowe interfejsy (programistyczne) Systemu Operacyjnego
System Operacyjny i jego funkcje Podstawowy element oprogramowania komputera stanowiący rodzaj interfejsu pomiędzy sprzętem (hardware), a cała resztą świata. Jedną z podstawowych funkcji Systemu Operacyjnego jest obsługa (zapewnienie niezbędnej komunikacji) wszystkich komponentów komputera. Realizowane jest to przez tak zwane sterowniki (driver) i urządzenia wirtualne.. Inne funkcje usługowe to zarządzanie zasobami (przydział zasobów) komputera na rzecz programów i użytkowników: przydział pamięci, przydział miejsca na dysku, przydział czasu procesora, rezerwacja wszelkich zasobów, dbanie o równomierne wykorzystanie zasobów. Ochrona zasobów/danych
Podstawowe koncepty Dwa tryby pracy: 1. System Operacyjny 2. Program użytkowy Maszyna wirtualna (rodzaj kapsułki dzięki której program myśli, że ma do wyłącznej dyspozycji cały komputer. Proces (task) Wątek (thread) Urządzenie wirtualne
Diagram stanu
Diagram stanu Klikamy na ikonę Nowy Gotowy
Diagram stanu Klikamy na ikonę Nowy Gotowy System Operacyjny czeka na zasoby i uruchamia Gotowy Uruchomiony
Diagram stanu Klikamy na ikonę Nowy Gotowy System Operacyjny czeka na zasoby i uruchamia Gotowy Uruchomiony Po pewnym czasie (gdy upłynie timeout) Uruchomiony Gotowy
Diagram stanu Klikamy na ikonę Nowy Gotowy System Operacyjny czeka na zasoby i uruchamia Gotowy Uruchomiony Po pewnym czasie (gdy upłynie timeout) Uruchomiony Gotowy Oczekiwanie na reakcję użytkownika Uruchomiony Zablokowany
Diagram stanu Klikamy na ikonę Nowy Gotowy System Operacyjny czeka na zasoby i uruchamia Gotowy Uruchomiony Po pewnym czasie (gdy upłynie timeout) Uruchomiony Gotowy Oczekiwanie na reakcję użytkownika Uruchomiony Zablokowany Reakcja użytkownika Zablokowany Gotowy
Diagram stanu Klikamy na ikonę Nowy Gotowy System Operacyjny czeka na zasoby i uruchamia Gotowy Uruchomiony Po pewnym czasie (gdy upłynie timeout) Uruchomiony Gotowy Oczekiwanie na reakcję użytkownika Uruchomiony Zablokowany Reakcja użytkownika Zablokowany Gotowy Program wykona instrukcję STOP Uruchomiony Koniec
Historia Uniksa http://www.levenez.com/unix/
Historia Windows http://www.levenez.com/windows/
Oprogramowanie użytkowe Oprogramowanie użytkowe (Application Software) to podklasa oprogramowania komputera służąca do realizacji zadań, które chce wykonać użytkownik. Przykłady: procesory tekstu, edytory, arkusze kalkulacyjne, programy do odtwarzania plików multimedialnych,... oprogramowanie napisane przez użytkownika... gry?...
Warstwy oprogramowania (raz jeszcze)
Część II Algorytmy początek zasadniczej części wykładu
Algorytmy. Podstawowe konstrukcje algorytmiczne (przegląd, podział zadania, programowanie dynamiczne, rekurencja,... wer. 1.4 Wojciech Myszka 10 listopada 2009
Krótkie podsumowanie Wiemy: 1. co to jest komputer 2. z jakich elementów jest skonstruowany. 3. co to jest procesor... 4. i jak działa 5. troszeczkę o tym, że komputery potrzebują programów 6. co to jest program Nie bardzo wiemy: 1. skąd się bierze program 2. i czy na pewno jest niezbędny...
Jak powstaje program Na podstawie http://www.projectcartoon.com/
Jak powstaje program To był oczywiście żart... Ale to jest jakoś tak: Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie...
Jak powstaje program To był oczywiście żart... Ale to jest jakoś tak: Rozmowa z klientem Projekt i algorytm(y) Programowanie Testy Dokumentacja Instalacja u klienta Eksploatacja/Wsparcie...
Algorytm Słowo algorytm jest bardzo nowe (w pewnym sensie). Pochodzi od nazwiska Muhammed ibn Musa Alchwarizmi perskiego matematyka (IX w) i pierwotnie oznaczało (każde) obliczenia w dziesiętnym systemie obliczeniowym. Algorytm to jednoznaczny przepis przetworzenia w skończonym czasie pewnych danych wejściowych do pewnych danych wynikowych. (Wikipedia) Czasami rezygnuje się z żądania skończoności. Czasami, jeżeli algorytm się nie kończy nazywamy go metodą obliczeniową.
Algorithm In mathematics, computing, linguistics and related subjects, an algorithm is a sequence of finite instructions, often used for calculation and data processing. It is formally a type of effective method in which a list of well-defined instructions for completing a task will, when given an initial state, proceed through a well-defined series of successive states, eventually terminating in an end-state. The transition from one state to the next is not necessarily deterministic; some algorithms, known as probabilistic algorithms, incorporate randomness.
Algorytm I Przepis kucharski Składniki: 22 dag twardej czekolady półsłodkiej, 2 łyżki stołowe wody, 1 filiżanki cukru pudru, 6 jajek 4 rozdzielonych na żółtka i białka...
Algorytm II Przepis kucharski Przepis: Włóż czekoladę z dwiema łyżkami stołowymi wody do garnka o podwójnym dnie. Kiedy czekolada się rozpuści, domieszaj cukier puder; dodaj po trochu masło. Odstaw. Ubijaj żółtka około 5 minut, aż staną się gęste i nabiorą koloru cytrynowego. Delikatnie dołóż czekoladę. Ponownie lekko podgrzej, aby rozpuścić czekoladę, jeśli to będzie konieczne.
Algorytm III Przepis kucharski Domieszaj rum i wanilię. Ubijaj białka aż do spienienia. Ubijając dodaj 2 łyżki stołowe cukru i ubijaj dalej, aż utworzą się sztywne pagórki. Delikatnie połącz białka z masą czekoladowo-żółtkową. Wlej do oddzielnych naczyń, które będą podane na stół. Ochładzaj przez co najmniej 4 godziny. Wedle życzenia podawaj z bitą śmietaną. Wyjdzie z tego 6 do 8 porcji.
Algorytm Euklidesa Oto jedna z jego wersji algorytmu Euklidesa: Dane są dwie dodatnie liczby całkowite m i n, należy znaleźć ich największy wspólny dzielnik (NWD) tj. największą dodatnią liczbę całkowitą, która dzieli całkowicie zarówno m jak i n. 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Dzielenie z resztą Dygresja bo 5 3 = 12 3 = 1.6666(6) = 1.6667 = 1 reszta 2 1 3 + 2 = 5
Algorytm Euklidesa Przykład l m n r 24 44 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład m n r 24 44 24 24/44 = 0 r 24 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład l m n r 24 44 24 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład l m n r 24 44 24 44 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład l m n r 24 44 24 44 24 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład m n r 24 44 24 44 24 20 44/24 = 1 r 20 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład l m n r 24 44 24 44 24 20 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład l m n r 24 44 24 44 24 20 24 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład l m n r 24 44 24 44 24 20 24 20 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład m n r 24 44 24 44 24 20 24 20 4 24/20 = 1 r 4 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład l m n r 24 44 24 44 24 20 24 20 4 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład m n r 24 44 24 44 24 20 24 20 4 20 l 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 l 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 20/4 = 5 r 0 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Algorytm Euklidesa Przykład m n r 24 44 24 44 24 20 24 20 4 20 4 0 l 1. [Znajdowanie reszty] Podziel m przez n i niech r oznacza resztę z tego dzielenia. (Mamy 0 r < n.) 2. [Czy wyszło zero?] Jeśli r = 0 zakończ algorytm; odpowiedzią jest n. 3. [Upraszczanie] Wykonaj m n, n r i wróć do kroku 1.
Skończoność Po pierwsze powinien być skończony; oznacza to, że po skończonej (być może bardzo dużej) liczbie kroków algorytm się zatrzyma. 1 Pytanie pomocnicze: Co gwarantuje, że algorytm Euklidesa zakończy się w skończonej liczbie kroków? Procedura, która ma wszystkie cechy algorytmu poza skończonością nazywana jest metodą obliczeniową. Podaj przykłady metod obliczeniowych realizowanych przez rzeczywiste komputery. 1 Ale sama skończoność to jednak za mało z praktycznego punktu widzenia dobry algorytm powinien gwarantować, że obliczenia zostaną zakończone w skończonym ale rozsądnym czasie!
Cechy algorytmu II Dobre zdefiniowanie Po drugie powinien być dobrze zdefiniowany. Każdy krok algorytmu musi być opisany precyzyjnie. Wszystkie możliwe przypadki powinny być uwzględnione, a podejmowane akcje dobrze opisane. 2 Oczywiście język naturalny nie jest wystarczająco precyzyjny może to prowadzić do nieporozumień. z tego powodu używa się bardziej formalnych sposobów zapisu algorytmów, aż po języki programowania... 2 Zwracam też uwagę, że algorytmy kucharskie nie są odpowiednio precyzyjne: co to znaczy lekko podgrzej?
Cechy algorytmu III Dane wejściowe Po trzecie powinien mieć precyzyjnie zdefiniowane dane wejściowe. Pewne algorytmy mogą nie mieć danych wejściowych (mieć zero danych wejściowych). Dane wejściowe to wartości, które muszą być zdefiniowane zanim rozpocznie się wykonanie algorytmu.
Cechy algorytmu IV Dane wyjściowe Po czwarte zdefiniowane dane wyjściowe. Daną wyjściową algorytmu Euklidesa jest liczna n która jest naprawdę największym wspólnym dzielnikiem danych wejściowych. Osobną sprawą jest pokazanie skąd wynika, że wynik algorytmu Euklidesa jest rzeczywiście NWD liczb m i n.
Cechy algorytmu V Efektywność Po piąte algorytm powinien być określony efektywnie to znaczy jego operacje powinny być wystarczająco proste by można je (teoretycznie?) wykonać w skończonym czasie z wykorzystaniem kartki i ołówka.
Problem 1 Wejście: Dwie liczby J i K Wynik: Liczba J 2 + 3K Prosty problem wymagający wykonania elementarnych obliczeń arytmetycznych na dwu liczbach wejściowych.
Problem 2 Wejście: Liczba dodatnia K Wynik: Suma liczb całkowitych od 1 do K Problem arytmetyczny, ale liczba obliczeń zmienia się w zależności od danych wejściowych.
Problem 3 Wejście: Liczba dodatnia K Wynik: TAK gdy K jest liczbą pierwszą, NIE, gdy taką nie jest. Problem decyzyjny. Zadanie jest również arytmetyczne, ale wynik nie jest numeryczny.
Problem 4 Wejście: Lista L słów w języku polskim. Wynik: Lista L uporządkowana alfabetycznie (leksykograficznie) Nie jest to problem arytmetyczny, konieczne jest operowanie na zmiennej liczbie danych słów.
Problem 5 Wejście: Mapa drogowa z zaznaczonymi miastami i odległościami między nimi, na której są wyróżnione dwa miasta A i B. Wynik: Opis najkrótszej ścieżki (trasy) od A do B Problem poszukiwania wśród wszystkich najlepszego wariantu rozwiązania
Problem 6 Wejście: Zbiór osób znajdujących się w pomieszczeniu. Wynik: Wysokość osoby najwyższej (najniższej).
Problem 6 Wejście: Zbiór osób znajdujących się w pomieszczeniu. Wynik: Wysokość osoby najwyższej (najniższej). lub Wskazanie osoby najwyższej
Problem 6 Wejście: Zbiór osób znajdujących się w pomieszczeniu. Wynik: Wysokość osoby najwyższej (najniższej). lub Wskazanie osoby najwyższej Do czego sprowadza się różnica między tymi algorytmami?
Przykład 7
Przykład 8
Przykład 9
Algorytmy podsumowanie Zadanie algorytmiczne składa się ze: scharakteryzowania dopuszczalnego, być może nieskończonego zbioru potencjalnych zestawów danych wejściowych; specyfikacji pożądanych wyników jako funkcji danych wejściowych. Zakłada się, że zadany jest albo zestaw dozwolonych akcji (operacji) podstawowych albo konfiguracja sprzętowa, w którą je wbudowano. Rozwiązanie zadania algorytmicznego stanowi algorytm złożony z elementarnych instrukcji zadających akcje z ustalonego zbioru.
Część III Charles Babbage
Charles Babbage ur. 26 grudnia 1791 r. zm. 18 października 1871 Ukończył uniwersytet w Cambridge. Zajmował się organizacją produkcji w fabrykach. Zwolennik wysokiej specjalizacji siły roboczej. Poświęcił 35 lat życia na konstruowanie maszyn liczących: Maszyna różnicowa Drukarka do maszyny różnicowej Maszyna analityczna
Maszyna różnicowa Rodzaj kalkulatora opertego na metodach różnicowych. Zrobiona z brązu. Składała się z 25 000 elementów. Ważyła 13 600 kg. Nie została nigdy ukończona. Fragment złożony po śmierci Babbage a przez jego syna z części znalezionych w szopie.
Maszyna analityczna I Mechaniczny komputer ogólnego zastosowania. Pierwsza idea 1837, nie został ukończony do śmierci (1871). Główne zadanie tablicowanie funkcji logarytmicznych i trygonometrycznych przybliżanych wielomianami interpolacyjnymi. Napędzany silnikiem parowym. Programowany za pomocą kart perforowanych (krosna Jacquarda!). Urządzenia wyjściowe: drukarka, ploter i dzwonek. Pamięć: 1000 liczb 50. cyfrowych. Arytmometr wykonywał cztery operacje, porównania i pierwiastki kwadratowe.
Maszyna analityczna II Język programowania zbliżony do współczesnych języków programowania (MARIE!). Ocenia się, że koncept był znacznie bardziej zaawansowany niż późniejsze (lata 40. XX w) konstrukcje. Ideę Babbage a najlepiej zrozumiałą Ada Augusta hrabina Lovelance napisała pierwszy program (i została uznana za pierwszą programistkę). Podjęto próbę realizacji maszyny. Zaangażowany w nią był syn Babbage a.
Czasy współczesne 1. Podjęto szereg prób realizacji komputerów Babbage a Back Computer History Museum, Mountain Viev, CA i filmik(i) na YouTube Z klocków Lego Z elementów Meccano
Część IV Prawa autorskie, patenty i inne takie
Prawo autorskie (USA) Prawo autorskie: ochrona przed nieautoryzowanym kopiowaniem. Ochronie nie podlegają: niezakończone prace tytuły i krótkie frazy, slogany pomysły artykuły użytkowe
Prawo patentowe (USA) Prawo patentowe: ochrona idei przed wykorzystaniem Lata 70-te: Oprogramowanie traktowane było jako zapis algorytmu matematycznego, a te podobnie jak prawdy naukowe nie podlegały patentowaniu. Lata 80-te: Amerykański Sąd Najwyższy zmusił Urząd Patentowy do zmiany zdania. Programy komputerowe stawały się coraz częściej fragmentem procesów technologicznych. Lata 90-te: W długotrwałym procesie decyzyjnym uznano, że praktycznie każdy program komputerowy może być opatentowany.
Prawo patentowe (Europa) Nie można patentować: 1. Odkryć, teorii naukowych i metod matematycznych. 2. Dzieła sztuki (aesthetic creations) 3. Schematy, zasady i metody rozumowania używane podczas przemyśleń, rozgrywanie gier, prowadzenia biznesu oraz tworzenia programów komputerowych 4. Sposobów prezentowania informacji. Prawo patentowe przewiduje, że w pewnych sytuacjach metody komputerowe mogą być patentowane. Od 1978 EPO udzieliła ok. 30000 patentów zaimplementowane komputerowo wynalazki.
Prawo patentowe (Polska) 1. W zasadzie programy nie podlegają patentowaniu. 2. W praktyce na terenie Polski podlegają ochronie patenty softwareowe. 3. Warto poczytać o tym na stronach Piotra VaGli Waglowskiego w dziale patenty.
Prawo w sieci Piotr Waglowski, Prawo w sieci. Zarys regulacji internetu, Wydawnictwa HELION, Gliwice 2005 obieg informacji w internecie własność intelektualna handel elektroniczny zagrożenia historia regulacji w Polsce i na świecie
Wolna kultura Lawrence Lessig, Wolna kultura, Wydawnictwa Szkolne i Pedagogiczne SA, Warszawa 2005 http://www.futrega.org/wk/ multimedia patenty publikacje naukowe ocena naukowców inspiracja prac naukowych