3767
Comment: converted to 1.6 markup
|
7237
|
Deletions are marked like this. | Additions are marked like this. |
Line 3: | Line 3: |
2007/08 -- ZS | 2009/10 -- LS == Downloady pre cvičenia == [[attachment:zadanie.pdf]] ## ## [[attachment:gallery.tar.gz]] ##[[attachment:passwd.txt]] ## [[attachment:zadanie2.pdf]] ##[[attachment:zadanie_opr.pdf]] ##== Uploady == ##[[/Uploady]] |
Line 7: | Line 22: |
## Doplň vyučujúcich |
|
Line 10: | Line 23: |
* Jozef Martin Kollar jmkollar@penguin.sk | == Konzultačné hodiny == V utorok 16:00-17:00. Radšej ale konzultuje priamo na cvičení. |
Line 21: | Line 37: |
* Textový editor vim | |
Line 23: | Line 38: |
* Základy internetových protokolov == Témy na skúšku == 1. Súborový systém, užívatelia a skupiny, prístupové práva 2. Procesy, signály, rúry. 3. Regulárne výrazy. 4. Náčrt riešenia jednoduchého problému v shelli. 5. Náčrt jednoduchého programu v Pythone. 6. Základy internetových protokolov IP, TCP, UDP, HTTP. == Komentáre ku skúške == V prvom zadaní ste nevedeli zabezpečiť, aby nikto okrem vlastníka nevedel zmazať súbor. Treba dať súbor do osobitného adresára a revokovať zápisové práva pre skupinu a ostatných. Nevedeli ste (až na výnimku) význam setgid na adresár. umask malo byť 007. Druhé zadanie dopadlo pomerne dobre, máte o tom správnu predstavu. Ale niektorí si myslíte, že sa forkuje ls, prípadne nepíšete čo sa forkuje. Forkuje sa shell. V treťom zadaní bol problém s tým, že väčsinou neviete spätné referencie -- to je nutné, ak chceme vybrať riadky s rovnakým prvým aj posledným znakom. Takto: {{{ '^\(.\).*\1$' |
== Skúška == <<Pozor>> Termíny skúšky sú na http://is.stuba.sk. Skúška bude prebiehať písomne. Obsah viď nižšie. Ihneď po napísaní vaše písomky opravím, potom budem prípadne ešte konzultovať s tými ľuďmi, ktorí budú na hranici alebo nebudú spokojní s hodnotením. <<Pohov>> Z Vychodila treba vedieť: * Kapitola 3: od začiatku až po 3.6 včítane * Kapitola 4: od začiatku až po 4.3 včítane * Kapitola 5: v tej miere ako bolo odprednášané, najmä * štruktúra príkazového riadku, úvodzovky, apostrofy, medzery, opačné lomítka atď * presmerovanie vstupu a výstupu, {{{>,<,>>,<<,|}}} * skripty, mechanizmus fungovania konštrukcie {{{!#}}} * premenné, špeciálne premenné, argumenty skriptov * kontrola toku programu : {{{if,while,for}}} * princíp fungovania {{{if}}} a {{{while}}} cez exit status * príkaz {{{test}}} * Kapitola 6: * základné programy pre prácu s textom {{{sort,cut,paste}}} * regulárne výrazy, program {{{grep}}} * program {{{sed}}} (iba príkaz s) Z Pythonu treba vedieť základy: * zabudované dátové typy * základy programovania ({{{for,while,if}}}) * funkcie a parametre ({{{def}}}) * triedy ({{{class}}}) Na skúške sa vás: * Spýtam na pár vecí z kapitoly 3 a 4. * Napíšete mi jeden-dva jednoduché príkazové riadky vykonávajúce zadanú činnosť. Nemusíte sa učiť všetky options všetkých príkazov, ak bude niečo treba vedieť, prezradím to. Ide mi o overenie znalosti princípu fungovania. * Bude zadanie o regulárnych výrazoch. * Napíšete krátky program v Pythone. Pravdepodobne to bude nejaká trieda. == Výsledky == [[/Výsledky]] == Zadanie na druhé zápočtové cvičenie == <<Pozor>> Toto zadanie si vypracujte doma. Ak to zvládnete sami, nemali by ste mať na skúšobnom cvičení problém. Môžete si samozrejme navzájom pomáhať. Zadania nebudem zbierať. Na cvičení vám dám urobiť niečo podobné, takže si vypracované zadania doneste, pomôže vám to. Body dostanete za to, čo urobíte priamo na cvičení. Skúšobné cvičenie bude 11.5.2010 počas cvičenia. <<Pohov>> Napíšte modul `stack.py`, ktorý obsahuje implementáciu * triedy `Stack` a * funkcie `stack_from_string` Trieda `Stack` implemetuje takéto metódy: ||`__init__(self)` || Inicializuj zásobník ako prázdny.|| ||`push(self,what)` || Vloží `what` na vrch zásobníka.|| ||`peek(self)` || Vráti objekt, ktorý je na vrchu zásobníka, pričom ho nevyberá.|| ||`pop(self)` || Vyberie objekt zo zásobníka, návratová hodnota je tento objekt. Ak je zásobník prázdny, môže (a má) vyvolať výnimku.|| ||`empty(self)`||Vyprázdni zásobník.|| ||`__repr__(self)`||Vráti reťazec, v ktorom sú zreťazené `repr(x)` pre všetky objekty `x` v zásobníku, oddelené medzerami. Vrch zásobníka je na konci tohto reťazca.|| Okrem triedy `Stack` obsahuje modul `stack` aj takúto funkciu: ||`stack_from_string(s)`||Ako parameter očakáva reťazec celých čísel oddelených medzerami, napr. `"1 -20 17 4 5"`. Vráti `Stack` naplnený týmito číslami, pričom vrchné číslo je na konci s.|| === Príklad použitia modulu na príkazovom riadku Pythonu === {{{#!python >>> import stack >>> s=stack.Stack() >>> s.push(10) >>> s.push(-10) >>> s.push(100) >>> print s 10 -10 100 >>> s.peek() 100 >>> print s 10 -10 100 >>> s.pop() 100 >>> print s 10 -10 >>> s.empty() >>> print s >>> s.pop() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/gejza/vyuka/python_vyuka/stack.py", line 31, in pop return self.l.pop() IndexError: pop from empty list >>> s2=stack.stack_from_string("1 2 3 17") >>> print s2 1 2 3 17 >>> s2.pop() 17 >>> print s2 1 2 3 >>> |
Line 50: | Line 150: |
Toto vám výrazne komplikovalo život pri robení shellovského scriptu, ale poradili ste si. V skripte bolo najjednoduchšie použiť {{{ sed 's/.*BODY=\([0-9]*\).*/\1/ }}} na vystrihnutie bodov z každého riadku. Python nemal dobre snáď nikto, väčšinou ste sa vôbec netrápili s tým, že ak robíte novú maticu, musíte si ju najprv vytvoriť. Za skutočnú chybu som ale považoval, ak ste proste prebehli maticu a urobili {{{ A[i,j]=A[j,i] }}} toto predsa celú maticu zničí. Pre zaujímavosť prikladám mimoriadne expertné riešenie, využívajúce Python nadoraz: {{{ [list(x) for x in zip(*A)] }}} == Výsledky skúšky == || Hrabovský || A || || Hlavatý || B || || Zachar || A || || Mucha || A || || Uherčík || B || || Zacharovská || B || || Pinteš || C || || Macák || A || == Domáce zadania == [[/Zadanie1| prvé]] |
== Ďalšie cvičenia == [[ /CviceniaZoShellu | Cvičenia zo shellu]] [[attachment:python_zadania.pdf | Cvičenia z Pythonu]] |
Line 95: | Line 159: |
=== Pythonovské programy === * [[/Fork|fork(), wait(), SIGCHLD]] * [[/Pipe|pipe()]] * [[/Socket| UNIXové sockety]] === Skripty === |
* [[attachment:tahak_unix.pdf|Ťahák - príkazy v UNIXe]] * [[attachment:tahak_python.pdf|Ťahák - Python (komplexný)]] * [[http://www.yukoncollege.yk.ca/~ttopper/COMP118/rCheatSheet.html|Ťahák - Python (jednoduchší)]] ##=== Pythonovské programy === ## * [[PocitacoveSiete/Fork|fork(), wait(), SIGCHLD]] ## * [[PocitacoveSiete/Pipe|pipe()]] ## * [[PocitacoveSiete/Socket| UNIXové sockety]] ## * [[PocitacoveSiete/TCPSocket | Klient a server TCP]] ## * [[PocitacoveSiete/Sumator | TCP server pre scitanie cisel]] ## * [[PocitacoveSiete/ChatServer | Chatovací server - multithreading]] ## * [[PocitacoveSiete/Webserver | "Webovsky server" implementovaný na úrovni socketov]] ## * [[attachment:cgi-server.tar.gz | CGI server a skripty]] |
Line 109: | Line 177: |
1. ''Začínáme programovat v jazyce Python'', Daryl Harms, Kenneth !McDonald; Computer Press, 2003 (nie je nutné, stačí dokumentácia v systéme) | 1. ''Začínáme programovat v jazyce Python'', Daryl Harms, Kenneth !McDonald; Computer Press, 2003 1. ''Learning Python",, Mark Lutz, David Ascher; O'Reilly 2007, http://slav0nic.org.ua/static/books/python/OReilly.Learning.Python.3rd.Edition.Oct.2007.eBook-BBL.rar |
Line 116: | Line 185: |
1. ''A Byte of Python'', Swaroop C H, http://www.swaroopch.com/notes/Python 1. ''How to Think Like a Computer Scientist'', Jeffrey Elkner, Allen B. Downey and Chris Meyers, http://openbookproject.net//thinkCSpy/ |
|
Line 120: | Line 191: |
1. http://www.py.cz/ Český server venovaný Pythonu, obsahuje aj dokumentáciu k starším verziám Pythonu |
|
Line 123: | Line 196: |
20 bodov zo 40. Body sa budú udeľovať v rámci cvičení. | 15 bodov z 30. Body sa budú udeľovať v rámci cvičení. Budú 2 zápočtové cvičenia, jedno zo shell scriptov a jedno z Pythonu. |
Operačné systémy
2009/10 -- LS
Downloady pre cvičenia
Vyučujúci
Gejza Jenča gejza.jenca@stuba.sk
Konzultačné hodiny
V utorok 16:00-17:00. Radšej ale konzultuje priamo na cvičení.
Stručná osnova predmetu
- Princípy OS Unix/Linux
- Základy práce so systémom
- Súborový systém
- Užívatelia a skupiny
- Procesy, rúry
- Prehľad základných utilít
- Programovanie v shelli, skripty
- Programovací jazyk Python
Skúška
Termíny skúšky sú na http://is.stuba.sk. Skúška bude prebiehať písomne. Obsah viď nižšie. Ihneď po napísaní vaše písomky opravím, potom budem prípadne ešte konzultovať s tými ľuďmi, ktorí budú na hranici alebo nebudú spokojní s hodnotením. |
Z Vychodila treba vedieť:
- Kapitola 3: od začiatku až po 3.6 včítane
- Kapitola 4: od začiatku až po 4.3 včítane
- Kapitola 5: v tej miere ako bolo odprednášané, najmä
- štruktúra príkazového riadku, úvodzovky, apostrofy, medzery, opačné lomítka atď
presmerovanie vstupu a výstupu, >,<,>>,<<,|
skripty, mechanizmus fungovania konštrukcie !#
- premenné, špeciálne premenné, argumenty skriptov
kontrola toku programu : if,while,for
princíp fungovania if a while cez exit status
príkaz test
- Kapitola 6:
základné programy pre prácu s textom sort,cut,paste
regulárne výrazy, program grep
program sed (iba príkaz s)
Z Pythonu treba vedieť základy:
- zabudované dátové typy
základy programovania (for,while,if)
funkcie a parametre (def)
triedy (class)
Na skúške sa vás:
- Spýtam na pár vecí z kapitoly 3 a 4.
- Napíšete mi jeden-dva jednoduché príkazové riadky vykonávajúce zadanú činnosť. Nemusíte sa učiť všetky options všetkých príkazov, ak bude niečo treba vedieť, prezradím to. Ide mi o overenie znalosti princípu fungovania.
- Bude zadanie o regulárnych výrazoch.
- Napíšete krátky program v Pythone. Pravdepodobne to bude nejaká trieda.
Výsledky
Zadanie na druhé zápočtové cvičenie
Toto zadanie si vypracujte doma. Ak to zvládnete sami, nemali by ste mať na skúšobnom cvičení problém. Môžete si samozrejme navzájom pomáhať. Zadania nebudem zbierať. Na cvičení vám dám urobiť niečo podobné, takže si vypracované zadania doneste, pomôže vám to. Body dostanete za to, čo urobíte priamo na cvičení. Skúšobné cvičenie bude 11.5.2010 počas cvičenia. |
Napíšte modul stack.py, ktorý obsahuje implementáciu
triedy Stack a
funkcie stack_from_string
Trieda Stack implemetuje takéto metódy:
__init__(self) |
Inicializuj zásobník ako prázdny. |
push(self,what) |
Vloží what na vrch zásobníka. |
peek(self) |
Vráti objekt, ktorý je na vrchu zásobníka, pričom ho nevyberá. |
pop(self) |
Vyberie objekt zo zásobníka, návratová hodnota je tento objekt. Ak je zásobník prázdny, môže (a má) vyvolať výnimku. |
empty(self) |
Vyprázdni zásobník. |
__repr__(self) |
Vráti reťazec, v ktorom sú zreťazené repr(x) pre všetky objekty x v zásobníku, oddelené medzerami. Vrch zásobníka je na konci tohto reťazca. |
Okrem triedy Stack obsahuje modul stack aj takúto funkciu:
stack_from_string(s) |
Ako parameter očakáva reťazec celých čísel oddelených medzerami, napr. "1 -20 17 4 5". Vráti Stack naplnený týmito číslami, pričom vrchné číslo je na konci s. |
Príklad použitia modulu na príkazovom riadku Pythonu
1 >>> import stack
2 >>> s=stack.Stack()
3 >>> s.push(10)
4 >>> s.push(-10)
5 >>> s.push(100)
6 >>> print s
7 10 -10 100
8 >>> s.peek()
9 100
10 >>> print s
11 10 -10 100
12 >>> s.pop()
13 100
14 >>> print s
15 10 -10
16 >>> s.empty()
17 >>> print s
18
19 >>> s.pop()
20 Traceback (most recent call last):
21 File "<stdin>", line 1, in <module>
22 File "/home/gejza/vyuka/python_vyuka/stack.py", line 31, in pop
23 return self.l.pop()
24 IndexError: pop from empty list
25 >>> s2=stack.stack_from_string("1 2 3 17")
26 >>> print s2
27 1 2 3 17
28 >>> s2.pop()
29 17
30 >>> print s2
31 1 2 3
32 >>>
Ďalšie cvičenia
Materiály
Literatúra
Linux: Příručka českého uživatele, Vilém Vychodil; Computer Press 2003, Brno (je žiadúce, aby každý mal svoju kópiu)
Začínáme programovat v jazyce Python, Daryl Harms, Kenneth McDonald; Computer Press, 2003
Learning Python",, Mark Lutz, David Ascher; O'Reilly 2007, http://slav0nic.org.ua/static/books/python/OReilly.Learning.Python.3rd.Edition.Oct.2007.eBook-BBL.rar
The Art of Unix Programming, Eric S. Raymond, http://www.faqs.org/docs/artu/
Umění programování v Unixu, Eric S. Raymond, (český preklad horeuvedeného)
How To Ask Questions The Smart Way, Eric Steven Raymond, http://www.catb.org/~esr/faqs/smart-questions.html
Dive into Python, Mark Pilgrim, http://www.diveintopython.org/
Advanced Bash-Scripting Guide, Mendel Cooper, http://tldp.org/guides.html
GNU/Linux Command-Line Tools Summary, Gareth Anderson, http://tldp.org/guides.html
A Byte of Python, Swaroop C H, http://www.swaroopch.com/notes/Python
How to Think Like a Computer Scientist, Jeffrey Elkner, Allen B. Downey and Chris Meyers, http://openbookproject.net//thinkCSpy/
Webové stránky
http://www.root.cz/clanky/regularni-vyrazy-1/ seriál o regulárnych výrazoch od P. Satrapu
http://www.py.cz/ Český server venovaný Pythonu, obsahuje aj dokumentáciu k starším verziám Pythonu
Podmienky na zápočet
15 bodov z 30. Body sa budú udeľovať v rámci cvičení. Budú 2 zápočtové cvičenia, jedno zo shell scriptov a jedno z Pythonu.
Príklady a cvičenia