V akademickem roce 2011/2012 vedu cviceni z predmetu Uvod do UNIXu (NSWI095), najdete nas v laboratori SU2 kazdy ctvrtek od 14:00. Tady najdete podminky pro zapocet, seznam domacich ukolu, a dle moznosti se budu snazit tvorit i nejake kratke zpravodajstvi ze cviceni.
Cvicim skupinu c. 33, ovsem i studenti odjinud jsou vrele vitani!
Pokud ke mne chcete chodit na cviceni, musite se zapsat
v grupicku _a_ zaroven mi
poslat mail.
(Evolucne stabilni strategii je psat do subjectu [NSWI095].)
Cilem cviceni je seznamit Vas se zaklady praktickeho a efektivniho pouzivani UNIXu a jeho prikazove radky resp. shelloveho interpreteru. Radu uloh, at uz se tykaji automatizace Vasi prace ci Vaseho systemu, nebo treba zpracovani velkeho mnozstvi dat, ktere byste museli drive zdlouhave delat rucne nebo na ne psat specialni programy, po absolvovani cviceni zvladnete naskriptovat behem nekolika minut prostou kombinaci hrsti UNIXovych prikazu. Podminkou k ziskani zapoctu je bud napsat zapoctovou pisemku a nejaky ten domaci ukol, nebo odevzdat zapoctak.
Cesta ditete: Semestr je rozdelen na tri bloky po cca ctyrech tydnech, na konci kazdeho bloku dostanete ctyri domaci ukoly, na jejich odladeni a finalni odevzdani budete mit 14 dni. Z kazdeho bloku byste pritom meli odevzdat alespon jednu ulohu; pokud nejaky blok propasnete, muzete si ulohu nahradit, ale jen ulozkou z dalsiho bloku. (Ovsem s prubehem semestru se slozitost zadani bude samozrejme zvysovat. ;-) Ukoly poslete co nejdrive, abyste do zacatku dalsiho cviceni stihli jeste proiterovat pripadna opravena reseni, budu-li mit vyhrady (coz se stava dost casto).
Zapoctova pisemka se bude programovat na poslednim cviceni (pokud budete planovat predtermin, dejte mi vcas vedet). Pisemka bude obnaset napsani (na pocitaci) nejakeho jemne netrivialniho programu (v tom spravnem jazyce, pochopitelne). Primarni ucel pisemky je dat Vam moznost si na vetsi uloze vyzkouset, co Vas ceka pri zkousce a jake mate sance si s tim poradit. Pocet opravnych pokusu neni omezen.
Cesta lva: Zapoctovy program by mel byt v rozsahu minimalne dvojnasobku zkouskove pisemky, a to v libovolne kombinaci shellu, sedu a awku. Tato moznost je v zasade urcena pro ty, kteri se jiz s UNIXem dobre kamaradi, neco velkeho uz napsali a ted je nebavi chodit na cviceni a otravovat se s nejakou pisemkou - v posuzovani zapoctaku tedy budu relativne prisny. Na zapoctaku se se mnou pokud mozno domluvte predem a to do nejake trochu rozumne doby (pokud mozno ne 24. zari vecer). Na cvicenich budete samozrejme stale vitani. (Nemate-li zadny napad, co psat, zkuste bych se podivat na stranky cviceni z minulych let a vybrat si nektery z nejtezsich domacich ukolu: napada mne shop, nejaka lehce rozsirena verze jednoho z stur, rall, cprp, seex, shvm, find... Ovsem fantazii se meze nekladou!
Heuristika: Napiste one-liner, ktery jednoduse spocita vzdalenost dvou znaku v abecede. Zvladnete-li to bez potizi behem minuty, s UNIXem si asi celkem dobre rozumite.
Obecna poznamka: Ulohy nejsou dokonale formulovane, s takovymi se obvykle nepotkate ani v realnem zivote programatora; soucasti zadani je tedy aplikace Vaseho zdraveho rozumu. Kreativni (ale chytre) interpretace a reseni vitana.
| 16. 2. | mlrg | 0 | Poslete mi mail, ze ke mne budete chodit na cviceni - staci, kdyz napisete sve jmeno. Tahle uloha je povinna pro uplne vsechny! |
| sshl | 0 | Vyzkousejte se zalogovat pres ssh do labu: ssh VASLOGIN@u-pl27.ms.mff.cuni.cz
(Na Windows pouzijte program PuTTY.)
| |
| 22. 3. | jpnm | 1 | Predstavte si, ze nase laborator je v Japonsku: soubor passwd (v labu vygenerujete
prikazem getent passwd) prepiste tak, jak se casto prepisuji japonska
jmena v anglosaskem svete - napr. "Hayao Miyazaki" se prepise na "MIYAZAKI Hayao".
Treba radku pasky:x:2089:100:Petr Baudis:/home/pasky:/bin/bash byste
tedy meli prepsat na pasky:x:2089:100:BAUDIS Petr:/home/pasky:/bin/bash.
Muzete predpokladat, ze kazde jmeno se bude skladat alespon ze dvou slov.
|
| wcfq | 1 | Napiste skript, ktery na standardnim vstupu dostane nejaky cesky nebo anglicky text
se slovy oddelenymi mezerami a obsahujici interpunkcni znamenka "." a "," (idealni
text je napriklad (pravda latinske) Lorem ipsum).
Vypiste deset nejcasteji se vyskytujicich slov (hint: tr(1) s \n)
a spoctete (celkovy ci jednotlivy) percentualni podil techto slov na celkovem poctu
slov v souboru (zkuste si z poctu slov vygenerovat automaticky aritmeticky vyraz a pipe do bc(1)).
| |
| l10u | 1 | Vypiste uzivatelska jmena poslednich deseti (ruznych!) prihlasenych uzivatelu
(serazena podle casu prihlaseni). Seznam nedavnych prihlaseni na danem pocitaci
ziskate prikazem last. Muze se Vam hodit prikaz nl.
| |
| mllg | 1 | Logovani prichozich mailu: vzdy, kdyz Vam prijde mail, ulozte na konec souboru
mail.log ve Vasem domovskem adresari radku ve formatu "datum subject"
(subject je anglicky predmet a v mailu ho najdete jako hlavicku
Subject), a to tak, aby Vam samozrejme mail take dosel a ulozil se,
krom toho, ze ho zpracuje skript.Tato uloha je zejmena o samostatnem hledani v ruznych materialech a dokumentaci a experimentovani (v labu by to melo fungovat). Muze se Vam hodit zjistit neco o souboru ~/.forward (take se mu rika "dot forward")
Na vytahnuti subjectu se vam muze hodit program formail(1)
(ale pozor, neni to standardni nastroj, takze u zkousky s nim pravdepodobne neuspejete - zatim vsak nemate jine nacini).
| |
| 12. 4. | urlr | 1 | Napiste regexp matchujici co nejpresneji a nejspolehliveji internetovou adresu neboli URL (tedy aby postihl co nejvice spravnych URL a zaroven co nejmene stringu, ktere URL nejsou). Muzete uvazovat pouze rozsirene a bezne uzivane formaty URL. K reseni pripojte nejaky netrivialni slovni popis, treba na jake vsechny formaty regexp (ne)funguje apod. K cemu by se takovy regularni vyraz napriklad pouzil v praxi? |
| ccom | 1 | Napiste skript, ktery spolehlive prekonvertuje v C/C++/C# zdrojaku //-komentare na /*-*/-komentare. Spolehlive rozumi se tak, aby osetril mozny vznik vnorenych komentaru, pokud se uvnitr //-komentare objevi /*-*/-komentar. Zaroven by se mel pokusit vyresit alespon jednu ze dvou moznych situaci - vyskyt // uvnitr retezce (tam by konverze probihat nemela) nebo elegantni konverze viceradkovych //-komentaru na pouze jeden /*-*/ blok. | |
| htoc | 1 | Napiste skript, ktery vezme HTML stranku, vyparsuje z ni vsechny nadpisy
(Tela elementu h1 az h6 - tzn. bez tagu samotnych!
Nadpis 2. urovne "Jean-luc Picard" tedy bude v dokumentu
vypadat treba jako <h2>Jean-luc Picard</h2>.
Muzete predpokladat, ze cely nadpis vcetne tagu zabere prave jeden radek.)
a nadpisy (pokud mozno zabalene do odpovidajiciho HTML; vygooglete
si "seznamy v HTML" apod.)
ulozi korektne hierarchicky usporadane zpatky do HTML stranky misto
radku obsahujiciho "@TOC@". Testovat skript muzete na homepage naseho
cviceni (musi byt schopny zvladnout vsechny nadpisy na teto strance).
| |
| poke | 1 | Parser Pokedexu: Pokemoni jsou podivne male potvurky, ktere ziji ve vlastnim svete,
maji ruzne atributy a specialni utoky a existuje kolem nich spoustu ruznych
RPG-like her atd. Seznamu vsech pokemonu se rika Pokedex, jeden takovy najdete
na http://kam.mff.cuni.cz/~pasky/pokedex.txt a vasim ukolem je prechroustat jej
do skriptove privetivejsi podoby - se souborem v puvodnim formatu se automaticky
pracuje velice nesikovne (chceme-li napriklad delat statistiky pokemonu, nebo si
napsat vlastni RPG). Vasim ukolem je navrhnout vhodnou reprezentaci Pokedexu a napsat konvertor z pokedex.txt do teto reprezentace. Reprezentace by mela umoznovat snadny pristup k mnozine pokemonu i lookup konkretniho pokemona. Pro jednoduchost muzete ignorovat informace o special moves, TMs, HMs atd. - staci z pokedexu cist pro kazdeho pokemona atributy jen po prvni prazdnou radku. | |
| 3. 5. | rtab | 1 | Napiste tabulacni program. Na vstupu dostanete soubor treba ve formatu
CSV a vypiste jej se sloupeckami zarovnanymi tak, aby zacinaly na
kazdem radku na te same x-ove souradnici. Ve vychozim rezimu by mel
sirky sloupecku nastavit automaticky podle nejdelsi polozky v kazdem
sloupecku. Pomoci parametru na prikazove radce by melo jit zmenit
mezeru mezi dvema sloupecky a rucne nastavit sirku urciteho sloupecku
(klidne i tak, ze nektere radky jeho obsah budou muset mit oriznuty).
Deadline tohoto ukolu je az posledni cviceni. |
| mcal | 1 | Kalendar: Naimplementujte jednoduchou verzi prikazu cal,
ktera vypise bud aktualni mesic, nebo mesic podle dvojice parametru
MONTH YEAR. Vystupni format by mel byt identicky jako
u prikazu cal (nebo lepsi) - nemusite ale zvyraznovat aktualni den.
K vypoctu cisla dne v tydnu muzete pouzit bud nektery ze standardnich
publikovanych vzorecku (pak byste jej ale meli pochopit), nebo vyuzit
prikaz date.
Deadline tohoto ukolu je az posledni cviceni. | |
| shrk | 1 | Kreslime zraloka - Vas skript dostane na vstupu posloupnost radku
se souradnicemi ve formatu
[x,y] ca pro kazdy radek na souradnici x,y virtualniho platna nakresli znak c. Na konci vstupu program platno vykresli na obrazovku. Skript bere jako dva povinne parametry sirku a vysku platna, a jako dalsi nepovinny parametr -b - v takovem pripade
nakresli kolem platna ramecek. (Predpokladejte, ze znaku na platne
budou az tisice, kresleni by tedy melo byt rozumne efektivni. Platno
bude obvykle velke radove 120x40.)Testovaci sada (pamatujte, rozbalite prikazem tar xvvfj shrk.tar.bz2).
Deadline tohoto ukolu je az posledni cviceni. | |
| wifi | 1 | Napiste interaktivni skript pro sledovani WiFi siti. Mejme dva prikazy:
Vas skript ma za ukol prehledne vypsat site, ktere jsou k dispozici (treba s nejakou semi-grafickou indikaci sily signalu a indikaci, zda je sit nejak chranena (viz polozka Encryption key); kazda sit by nemela zabrat vice nez 1-2 radky). Site skript ocisluje. Pak pocka na vstup uzivatele, ktery muze:
Deadline tohoto ukolu je az posledni cviceni. |
Pokud sami v mailu nenapisete opak, souhlasite s pripadnym vystavenim Vaseho dilka na webu.
getent passwd). Umazavani prvniho radku. Jak editovat soubory (vim+vimtutor / emacs, mcedit / joe / nano, gedit / kate) a jak vypada skript. wget. SMS ulozka. Aritmeticka expanze $((...)), specialni promenna $RANDOM.bc. Prikazova substituce $(...) resp. `...`. Velmi jemny uvod do promennych x=...; echo $x, parametry ($1, ...). Prumerna delka radku, znaky a kodovani a konce radku. Rozsireni SMS ulohy (ruska ruleta, logovani). date. Docasne soubory ($$, mktemp). Escaping (\ ) + quoting ('', "").sort | uniq -c | sort -n.ps axu. Vice sedariny (zpracovani mailu). find, xargs.awk '{print$1}'. Navratove kody, podminky a cykly. Vlastni implementace seq. while read. Hadani cisel.trap. Kompendium ulozek. Zamysleni nad nahodnymi cisly. cc, clear, reset (IOCCC). Parsovani parametru; idiom: while [ -n "$1" ]; do case "$1" in -r) rep=1;; -m) shift; max="$1";; *) echo "Bad parameter: $1" >&2; exit 1;; esac shift done
eval a hledani bezpecnostni diry. Vseobecny mix ulozek.(Jde pouze o datum posledni aktualizace tabulky. V privalu desitek ukolu muze trvat nekolik dni, nez se dostanu k tomu Vasemu. Nepanikarte, neozvu-li se do 3-4 dni, pripomente se, prosim.)
| Jmeno | Priklady | Bodu | Pisemka | Z |
|---|---|---|---|---|
| Samuel Bartos | jpnm(1) htoc(1) | 2 | ||
| Anton Khodos | l10u(1) ccom(1) | 2 | ||
| Tereza Klimosova | 0 | |||
| A748l | wcfq(1) l10u(1) jpnm(1) mllg(1) htoc(1) poke(1) shrk(1) | 3 | ||
| Ondrej Papik | jpnm(1) ccom(1) | 2 | ||
| Tomas Pokorny | wcfq(1) urlr(1) | 2 | ||
| Jan Skrle | urlr(1) | 1 | ||
| Jiri Svancara | jpnm(1) ccom(1) | 2 | ||
| Duc Trung Ha | mllg(1) l10u(1) jpnm(1.5) wcfq(1) ccom(1) htoc(1) urlr(1) poke(1) | 2.5 | ||
| Natalia Tyrpakova | jpnm(1) ccom(1) rtab(1) | 3 | ||
| Daniel Viktorin | jpnm(1) l10u(1.5) wcfq(1) ccom(1) htoc(1) | 2.5 | ||
| --- Pan Po --- | 0 |
Potrebujete-li s necim poradit, udelate nejlepe, kdyz mi napisete mail. Konkretni dotazy muzeme vyresit rovnou po mailu.
Pokud budete mit nejake obecnejsi nejasnosti, nezoufejte, domluvime se a nekdy se potkame. Cas mivam obvykle po cviceni, jinak se na MS vyskytuji nikoliv uplne pravidelne, lec kazdopadne velmi casto, v kancelari c. 322 (3. patro, naproti S3) nebo v malostranskem Starbucks. ;-)