Archiv pro Červenec 2009
Jak na Unix - 3
V minulém dílu jsme se dozvěděli úvodní informace o shellu, co to vlastně shell je a k čemu slouží. V dalších článcích se budeme shellem zabývat hlouběji. Veškeré povídání o shellech a unixových systémech vychází ze zkušeností ze systému Solaris a Opensolaris, shell který zde budeme studovat je Bourne Again Shell, neboli Bash.
Pokud budeme chtít začít s prací s unixovým strojem, tak se musíme napřed přihlásit. Přihlášení je možné provádět na terminálu, emulátoru terminálu, nebo podobném zařízení. Po přihlášení se objeví výzva shellu, která potvrdí zdárné přihlášení.
ZJIŠTĚNÍ DRUHU SHELLU:
Abyste mohli zkoušet naše příklady bylo by dobré, kdybyste znali druh shellu Vašeho unixového stroje. Je to celkem jednoduché. Postup je zhruba takovýto, prostě napíšete v shellu ps a stisknete ENTER. S výrazem ps se ještě setkáme, takže se nelekejte, že nevíte co znamená.
ZPRACOVÁNÍ PŘÍKAZU SHELLEM:
Pokud budete v shellu zadávat nějaké příkazy, tak shell má “předprogramovaný” postup zpracování.
Postup je přibližně takovýto:
- detekce znaků rušících speciální význam znaků ( ‘, “, \)
- odstranění komentářů (# )
- oddělení příkazů
- přesměrování V/V
- náhrada - aliasů (zkratek příkazů),znaku tilda ( ~ ),příkazů(`příkaz `),aritmetických výrazů,parametrů a proměnných ($1, $HOME,…)
- rozdělení na slova
- náhrada jmen souborů ( *, ?, [ ] )
- nastavení parametrů
- hledání příkazu - absolutní/relativní cesta k příkazu, vnitřní příkaz interpretu,funkce, pokud je příkaz zadán pouze jménem a není to vnitřní příkaz ani funkce, pak se hledá první výskyt spustitelného programu v adresářích definovaných v proměnné PATH zleva doprava
PŘÍSTUP SUPERUŽIVATELE:
Na unixových systémech můžete být přihlášeni jako ROOT, neboli superuživatel. Možná bych s mírou větší nadsázky přirovnal přihlášení jako superuživatele k windosovskému účtu Administrátor. Jako ROOT máte veškerá práva k různým akcím na Unixu.
Jak již bylo v předchozím článku uvedeno, unix je víceuživatelským systémem, a proto ne každý může být vlastníkem rootovských práv. S těmito právy můžete například mazat a vytvářet soubory, měnit klíčové vlastnosti systému atd.
30. 7. 2009 | gisat_cz | 0
Ruby - cyklus while a until

CYKLUS WHILE:
Dalším hojně využívaným cyklem v jazyku Ruby je cyklus while.
Je velmi využívanou formou cyklu. Opět si vše ukážeme na příkladu: Představte si, že budete chtít opakovat nšjaký text až do doby než uživatel zmáčkne na klávesnici počítače písmeno k:
while($_!= “k”)
puts “Nezmáčkli jste písmeno k”
puts “Tento příklad ukončíte stiskem písmena k”
gets
chomp
end
Tady vidíte že konstrukce cyklu while je podobná například konstrukci if. Stejný význam jako má cyklus while má i cyklus for, o kterém si řekneme v dalším článku.
CYKLUS UNTIL:
Opět tu je jeden příkaz Ruby, který se mi zdá poněkud zbytečný, pokud jste se v některém mém předchozím článku setkali s cyklem unless tak cyklus until má podobnou funkci. Jednoduše se provede tehdy, když daný jev není pravdou. Podívejte se na příklad:
until($_== “k”)
puts “Nezmáčkli jste písmeno k”
puts “Tento příklad ukončíte stiskem písmena k”
gets
chomp
end
Jak vidíte výsledek příkladu s until vykonává přesný opak, vykoná kód tehdy pokud jste nezmáčkli na klávesnici počítače písmeno k. V dalším díle se budeme věnovat cyklu for.
30. 7. 2009 | gisat_cz | 1
Jemný úvod do základní syntaxe jazyka Awk - 1
V minulém článku o jazyku Awk jsme se seznámili se základními pojmy. Než však budeme plnohodnotně programovat musíme se seznámit se základními stavebními prvky jazyka Awk.
Program jAwk se skládá z jednotlivých bloků, obecně bych je označil zhruba takto:
vzorek {akce}
vzorek {akce}
Data v Awk jsou nejčastěji načítána buď ze standardního vstupu nebo vstupního souboru. Data čte Awk řádek po řádku a kontroluje, jestli daný řádek vyhovuje vzorku. Pokud je nalezena shoda, provede se příslušná akce, kterou jsme si nadefinovali. Poté jsou prověřovány další řádky a tak stále dokola až Awk dojde na konec souboru.
Řádky obsahující slova BEGIN a END se neporovnávají, protože se jedná o slova se speciálním významem. O těchto slovech si povíme později.
V části akce {akce} můžeme samozřejmě uvést jednotlivé příkazy, a to z obecného hlediska takto:
{prikaz1
prikaz2
}
Jednotlivé příkazy můžeme uvádět na jednu řádku, ale v tomto případě je musíme oddělit středníkem. Středník také můžeme dát na konec každého příkazu. První závorka musí být uvedena na řádku kde je daný vzorek.
Komentáře se vytváří znakem # například: # ja jsem komentar
Rozlišuje se celkem 6 druhů vzorků:
BEGIN{příkaz}
příkazy jsou vykonány před zpracováním prvního řádku vstupních dat, tyto příkazy jsou vykonány pouze jednou.
END{příkaz}
příkazy jsou vykonány po zpracování prvního řádku vstupních dat, tyto příkazy jsou vykonány pouze jednou.
výraz{příkaz}
příkazy jsou vykonány pro každý řádek, je-li výraz PRAVDA
/regulární výraz/{příkaz}
příkazy jsou vykonány pro každý řádek,odpovídá-li regulárnímu výrazu
složený vzorek{příkaz}
výraz můžeme spojovat pomocí operátorů, které určitě každý programátor dobře zná:
&& (logické AND)
|| (logické OR)
! negace
Příkazy jsou vykonány tehdy, odpovídají-li výše uvedeným operátorům.
vzorek1,vzorek2{příkaz}
Tímto definujeme oblast začínající prvním řádkem, pro který platí vzorek1 a končící posledním řádkem označující vzorek2.
BEGIN a END nemůžeme kombinovat s jinými vzorky. Vzorek BEGIN nemusí být nutně uveden na začátku programu.
29. 7. 2009 | gisat_cz | 0
Javascriptový objekt Date
Objekt Date můžete vytvořit pomocí konstruktoru Date(). Umožňuje nám například vytvoření datumu.
Uvedeme si několik příkladů na objekt date:
new Date(’2009 11 12′)
Tue May 26 2009 20:56:21 GMT+0200
METODY OBJEKTU DATE()
Jestliže vytvoříte objekt Date(), existuje spoustu metod a vlastností, které objekt Date() poskytuje.
Mnoho metod začíná bud set*() nebo get*() , například metoda setMonth(), getMonth(),getHours(), setHours() a řada dalších.
Například:
var d = new Date();
d.toString();
Výsledek: Tue May 26 2009 20:56:21 GMT+0200
Nastavíme měsíc na březen: d.setMonth(2);
d.getMonth();
Výsledek: 2
Kromě všech metod data instancí, jsou zde i dvě metody, které jsou vlastnosti
Kromě všech metod instance date, existují dvě metody, které jsou také vlastnostmi objektu Date(). Tyto metody nepotřebují instanci date. Fungují podobně jako metody objektu Math. V objektově orientovaných jazycích bychom je mohli označit jako statické.
Date.parse() - bere řetězec a vrací časové razítko.
Date.parse(’Jan 1, 2008′);
Výsledek: 1199174400000
Date.UTC() - parametry ve funkci jsou rok, měsíc, den, a výsledkem je časové razítko v univerzálním čase.
Výsledek: 1199145600000
Nyní si ukážeme jeden kuriózní příklad, zjistíme kolik let zbývá do narozenin v roce 2012:
var d = new Date(2012, 5, 20);
d.getDay();
Výsledek: 3
Dále si řekneme kolik pondělků , čtvrtků a pátků schází od 20.5.2012 do 20.5.3012:
Takže nastavíme si pole se dny: var stats = [0,0,0,0,0,0,0];
for (var i = 2012; i < 3012; i++) {
stats[new Date(i, 5, 20).getDay()]++;
}
[139, 145, 139, 146, 143, 143, 145]
Tedy 145 pondělků, 143 čtvrtků a 143 pátků
29. 7. 2009 | gisat_cz | 2
Ruby - příkaz case a ternární operátor

Ruby disponuje příkazem case, který se do jisté míry odpovídá příkazu switch. Prakticky se jedná o vícecestný příkaz if, a to velmi silný příkaz.
Dejme tomu, že byste měli proměnou, která vyžaduje větší množství instrukcí, a u nějaké se na základě rozhodnutí potřebujete zastavit a u jiné ne. Tak právě pro tyto případy je výhodnější než používat sadu if a elsif používat příkaz case.
Opět se radši podívejme na příklad:
prikaz=”pátek”
case prikaz
when “pondělí”
puts “Cože zase začátek pracovního týdne?”
when “úterý”
puts “sláva jeden den za sebou”
when “středa”
puts “půlka týdne pryč”
when “čtvrtek”
puts “blíží se pátek”
when “pátek”
puts “sláva bude víkend”
else “Tak to je opravdu nějaká chyba”
end
Pokud bychom to takto nenapsali, museli bychom vytvořit kód, který by byl směsicí příkazů if a elsif. Takto se celé konstrukci vyhneme nádherným příkazem case.
TERNÁRNÍ OPERÁTOR:
Jedná se opět o jednoduchou konstrukci, pomocí níž můžeme zpracovávat nějakou podmínku. Jeho syntaxe je následná:
podmínka ? pravdivá hodnota : nepravdivá hodnota
podívejte se na příklad:
den=”pátek”
vysledek=den!=”čtvrtek” ? “je jiný den” : “je pátek”
puts vysledek
29. 7. 2009 | gisat_cz | 2
Javascriptový objekt Number
Jedním ze základních objektů Javascriptu je objekt Number.
Objekt Number můžeme například použít na tyto účely:
- - nakonvertuje jakoukoli hodnotu na číslo, jeho použití je podobné jako u funkcí parseInt a parseFloat.
- - Vytvořením konstruktoru new vytvoříte nový objekt
var cislo=Number(”4.8“);
cislo;
Výsledek je: 4.8
typeof cislo;
Výsledek je: number
var cislo=new Number(”4.8“);
typeof cislo;
Výsledek je: object
Protože Number jsou objektem mají i své metody, které jednak zdědil po objektu Object(), má i své vlastní vlastnosti, tyto nejdou modifikovat:
Number.MAX_VALUE;
Výsledná hodnota je: 1.7976931348623157e+308
Number.MIN_VALUE;
Výsledná hodnota je: 5e-324
Number.POSITIVE_INFINITY
Výsledná hodnota je: Infinity
Number. NEGATIVE_INFINITY
Výsledná hodnota je: -Infinity
Number. NaN
Výsledná hodnota je: NaN
Objekt Number obsahuje také tři metody: toFixed(), toPrecision(),toExponential()
toFixed():
var n = new Number(123.456)
n.toFixed(1);
Výsledek: bude 123.5
Ale můžete také zadat i takto:
var n=123.456;
n.toFixed(1);
Výsledek: bude 123.5
Metoda toFidex() zaokrouhlí číslo na potřebný počet desetinných míst.
Všimněte si, že můžete používat tyto metody, aniž by se výslovně vytvářeli objekty Number. Dochází totiž k vytváření objektu Number na pozadí.
toExponential():
(12345).toExponential();
Výsledek: bude 1.2345e+4
Převádí číslo na vědecký, tedy exponenciální tvar.
28. 7. 2009 | gisat_cz | 0
Úvodem o programovacím jazyku Awk
Awk je univerzálním jyzykem, pomocí kterého můžeme zpracovávat textová data. Název AWK je odvozen z příjmení svých tvůrců, kterými jsou Alfred V. Aho, Peter J. Weinberger a Brian W. Kernighan.
AWK je příkladem jazyka, který značně využívá řetězcové datové typy, asociativní pole (tj. pole indexovaná řetězcovými klíči) a regulární výrazy. Síla, stručnost a omezení programů v AWK a skriptů v sedu inspirovaly Larryho Walla k vytvoření jazyka Perl.
Awk je velmi účinným prostředkem využívaným v operačních syst=mech na bázi UNIXu. Implementace AWK jsou jako instalovaný software dostupné také pro většinu dalších operačních systémů.
HISTORIE JAZYKA AWK:
První verze jazyka Awk vznikla v roce 1977, dnes se však používá pozdější verze vydaná v roce 1985. Díky těmto rozdílnýmm verzím Awk dochází ke konfliktu v názvech interpreta tohoto jazyka. Ve starších Unixech se stystémem System V se o Awk stará interpret nazvaný awk v novějších verzích je to nawk, s přechodem Unixu na verzi 3.1 můžeme hovořit o oawk
CÍL AWK:
hlavním cílem tohoto jazyka je usnadnit práci pri analýze, manipulaci a práci s daty.
Základní vlastností awk je zpracovávání textových dat. Můžeme jím zkoumat jestli daný text splňuje nebo nesplňuje podmínky, které jsme v awk zadali. Syntaxe jazyka awk je podobná syntaxi jazyka C.
POUŽITÍ JAZYKA:
Obecně vzato jsou programu awk předány dva druhy dat: příkazový soubor a primární vstupní soubor. Příkazový soubor (kterým může být buď skutečný soubor, nebo jej lze zadat přímo na příkazovém řádku) obsahuje sérii příkazů, které awk říkají, jak má být vstupní soubor zpracován.
Použití je velmi jednoduché, tedy pokud budeme potřebovat zpracovávat velká a objemná data, roztřiďovat je. Použití awk v těchto případech je velmi vítaným prostředkem. i přes své stáří je awk jedinečným nástrojem každého unixového programátora.
V dalších povídáních o awk se položíme do detailů o tomto jazyku.
28. 7. 2009 | gisat_cz | 2
Javascriptová vlastnost prototype - 2
Přidání metod a vlastností k prototypu konstruktoru funkce
V minulém díle jsme se seznámili se základy vlastnosti prototype a nyní budeme pokračovat v prohloubení znalostí.
Jak jistě víte, pomocí konstruktoru můžeme z funkce vytvořit objekt. Pokud z funkce pomocí operátoru new vytvoříme objekt, můžeme říci, že daná funkce je konstruktorem:
function jmeno(){}
var jmeno=new jmeno(); //funkce jmeno() je tedy konstruktorem
Hlavní myšlenkou je, že uvnitř funkce, můžeme pro přístup k proměnným používat slůvko this:
function Data(jmeno, vek){
this.jmeno=jmeno;
this.vek=vek;
this.vypis=function(){document.write(”Tvoje jméno je:”+this.jmeno +”a věk je: “+this.vek);}
}
Nyní si ukážeme jak můžeme výše uvedenou funkci rozšířit o nové vlastnosti a metody. Celou záležitost provedeme tak, že přidáme metody a vlastností k prototypové vlastnosti konstruktoru funkce:
Data.prototype.bydliste=”Praha”;
Data.prototype.pohlavi=”muzské”;
Data.prototype.info=function(){return “Má bydliště: “+this.bydliste + “Je pohlaví: “+this.pohlavi;};
Další možností jak dosáhnete stejného výsledku je, že zcela přepíšete prototyp objektu:
Data.prototype={
bydliste:”Praha”,
pohlavi:“muzské”,
info:function(){return “Má bydliště: “+this.bydliste + “Je pohlaví: “+this.pohlavi;}
};
Používání prototypových metod a vlastností:
Všechny vlastnosti a metody, které jste přidali do prototypu jsou ihned k dispozici jakmile vytvoříte pomocí konstruktoru z funkce objekt:
var kartoteka=new Data(”Jirka”,28);
document.write(kartoteka.bydliste); //výsledek je Praha
document.write(kartoteka.pohlavi); //výsledek je mužské
document.write(”\n”);
document.write(kartoteka.info()); //Výsledek je: Má bydliště: Praha, je pohlaví mužské
Používání vlastních vlastností(s this) versus prototypové vlastnosti
Ve výše udeveném příkladu funkce Data() jsme používali this k internímu přístupu k objektu. Mohli bychom také použít volání Data.prototype:
Data.prototype.info=function(){return “Má bydliště: “+ Data.prototype.bydliste + “Je pohlaví: “+ Data.prototype.pohlavi;};
Jaký je v tom rozdíl? Abychom si mohli odpovědět, musíme pochopit hlouběji funkci vlastnosti prototype. Podívejme se na náš vytvořený objekt:
var kartoteka=new Data(”Jirka”,28);
Jestliže přistupujete k vlastnosti kartoteka a budete volat:
kartoteka.jmeno;
Engine Javascriptu bude hledat všechny vlastnosti objektu až najde vlastnost s názvem jmeno a navrátí její hodnotu.
Co se bude dít, když budeme přistupovat k vlastnosti bydliste? Engine Javascriptu prohlédne všechny vlastnosti objektu kartoteka, a jestliže v nich nenajde vlastnost bydliste, tak bude volat vlastnost bydliste v prototypu, engine skriptu určí prototyp konstruktoru funkce(je to stejné jako kdybyste volali kartotéka.prototype.constructor), a jestliže je vlastnost nalezena v prototypu, vlastnost bydliste je použita:
kartoteka.bydliste;
Stejného výsledku bychom dosáhli, kdybychom k prototypu přistupovali přímo. Každý objekt má vlastnost constructor, která je vytvářena v referenci vytvářené objektem:
kartoteka.constructor;
Výsledek je Data(jmeno,vek)
kartoteka.constructor.prototype.bydliste;
Nyní se pokusíme jít ještě o krok dále. Každý objekt má konstruktor. Prototypem je objekt a ten tudíž musí mít také svůj konstruktor.
kartoteka.constructor.prototype.constructor;
Výsledek je Data(jmeno,vek)
kartoteka.constructor.prototype.constructor.prototype;
Výsledek: Tímto se dostaneme až k volání prototypu object(), stejného výsledku bychom dosáhli voláním kartoteka.toString;
27. 7. 2009 | gisat_cz | 3
Ruby - příkaz unless

V předchozím díle jste poznali příkaz if. Jazyk Ruby však disponuje také příkazem, který znamená právě opak příkazu if. Smysl příkazu unless bychom mohli přirovnat českému pokud není. Prostě se vykoná podmínka jestliže se vyhodnotí jako nepravdivá.
Vše si jako obvykle vysvětlíme na příkladu:
cast_dne=”noc”
unless (cast_dne==”den” )
puts “Dobrou noc”
end
Prostě se příkaz vykoná tehdy, není-li splněna podmínka, konkrétně tedy příkaz unless se vypíše tehdy pokud proměná cast_dne se nebude rovnat hodnotě den.
U příkazu unless nemůžeme používat příkaz elsif, také neexistuje opačný příkaz k příkazu elsif. Velmi často se příkaz unless používá s příkazem if:
jmeno==”Jirka”
if(jmeno==”Jirka”)
puts “To je Jirka”
end
unless(jmeno==”Petr”)
puts LTo je jiný člověk”
end
26. 7. 2009 | gisat_cz | 6
Javascriptová vlastnost prototype - 1
Již v dřívějších článcích, zvláště v povídáních o funkcích, jsem se letmo zmínil o vlastnosti prototype. V dalších následujících dílech se pokusím nastínit §vod do problematiky a její použití
Pochopení vlastnosti prototype je jednou ze základních znalostí programátora jazyka Javascript. Vlastnost prototype je novou záležitostí javascriptového jazyka. Jakmile prototype pochopíte jistě mi dáte za pravdu, že na něm není nic těžkého.
Nejlepším způsobem je zkoušet příklady a testy s prototypovou vlastností.
Zejména se budeme zabývat těmito tématy:
- Dozvíte se, že každá funkce má vlastnost prototype a jde z ní udělat objekt
- Naučíte se přidávat vlastnost prototype objektům
- Naučíte se používat vlastnosti přidané do vlastnosti prototype
- Dozvíte se rozdíl mezi vlastními vlastnostmi a vlastnostmi prototype
- Povíme si o __proto__ a o vlastnostech isPrototypeOf(),hasOwnProperty() a propertyIsEnumerable()
- a další……
Vlastnost prototype
Funkce jsou v Javascriptu objekty, které mají své metody a vlastnosti. Některé z těchto metod, se kterými jste se již mohli v předchozích článcích setkat jsou například apply(), call(),constructor(), a jiná se kterou se seznámíte nyní je vlastnost prototype.
Dejme tomu, že si vytvoříme funkci pokusna_funkce():
function pokusna_funkce(x,y){
return a + b; }
budeme chtít zjistit například počet parametrů ve funkci, tak prostě můžeme zavolat vlastnost length. K této vlastnosti přistoupíme prostě tak, že s funkcí budeme pracovat jako s objektem:
pokusna_funkce.length
Výsledek bude číslo 2, protože obsahuje dva parametry.
Pokud budeme chtít zjistit typ objektu funkce, prostě jednoduše zavoláme vlastnost constructor, která nám vrátí konstruktor daného objektu, a sice takto:
pokusna_funkce.constructor;
Výsledek bude Function()
prototype vlastnost je vytvořena poté, co je definována funkce. Počáteční hodnotou vlastnosti prototype je prázdný objekt Object():
typeof pokusna_funkce.prototype;
Výsledek bude object
Stejný výsledek byste obdrželi, pokud byste vytvořili toto:
pokusna_funkce.prototype={}
Tento výše uvedený prázdný objekt můžete rozšířit vlastnostmi a metodami. Nebudou mít žádný vliv na funkci pokusna_funkce(), budou použity pouze tehdy, pokud použijeme funkci pokusna_funkce() jako konstruktor.
V dalšém díle článků o vlastnosti prototype si povíme právě o přidání vlastností a metod použitím vlastnosti prototype.
26. 7. 2009 | gisat_cz | 0


