Generátor mocnin dvojky

Začalo to nějak takto

V předmluvě Stopařova průvodce se praví: „Vesmír je velký, fakt velký, ani by jste nevěřili, jak hrozně moc úžasně velký je; a tak dále. Také se tam praví, že pokud se zhluboka nadechnete, můžete ve vesmírném vakuu přežít asi 30 vteřin. Ovšem vzhledem k té velikosti je pravděpodobnost, že vás během té doby někdo zachrání rovna jedna ku dvěma na dvě miliardy sedmdesát devět miliónů čtyřista šedesát tisíc třista čtyřicátou sedmou, což je náhodou také telefoní číslo izlingtonského bytu, kam se Arthur vydal na maškarní večírek a potkal dívku, kterou se mu nepodařilo sbalit.

Vzdělanější z vás poznali, že se jedná o úryvek z filmu Stopařův průvodce po galaxii. Ono číslo 22 079 460 347 mě fascinovalo a inspirovalo k vytvoření tohoto programu. Řekl jsem si, že toto číslo by bylo zajímavé si vyčíslit. A tak jsem začal pracovat na jeho vyčíslení. Aby to však nebylo tak jednoduché, vzal jsem to obecněji a vytvořil jsem univerzální generátor mocnin dvojky od 20 do 24 294 967 296 s tím, že vygenerované číslo se uloží do textového souboru. A jako třešničku jsem k tomu dodal ještě soubory BIN.TXT a HEX.TXT, které tak zadané číslo uloží kromě dekadické soustavy také v binární a hexadecimální.

Při tvorbě programu jsem však zjistil, že kromě toho, že nemám dostatečně dobrý hardware na odzkoušení plné funkce programu (momentálně mě tížil nedostatek místa na disku, takže soubor s binárním číslem 2150 000 000 se mi na disk vešel jen tak tak. Po dopsání algoritmu na generování dekadického čísla jsem pak zjistil, že doba generování je exponenciálně závislá na velikosti zadaného exponentu, takže zatímco číslo 210 000 mi vyplivl asi po 3 sekundách, číslo 2100 000 se generovalo asi minutu, generování 21 0000 000 jsem po asi hodině zastavil.

Účel programu, zhmotnit číslo 22 079 460 347, sice nebyl naplněn, nicméně program je hotov a co je hlavní, uveřejňuji zde jeho zdrojové kódy (ty jsou ovšem jen pro silnější povahy!).

Binární číslo

Zapsat binární číslo bylo to nejjednodušší, proto tím také začínám. Máte-li totiž číslo 2n, pak zapsáno binárně je vlastně tvořeno tolika ciframi, kolik je exponent n. Samozřejmě, že binární číslo začíná vždy jedničkou, takže ji tam stačí prostě vepsat. Tím by byl algoritmus hotov: Vypíšeme jedničku a za i n nul. Pro přehlednost (má-li u kupy nul přehlednost vůbec smysl) jsem použil i oddělovač číslic, klasicky binárně po čtveřicích. Podstatně se tak algoritmus zrychlil, protože je rychlejší vypsat tisíckrát ‚ 0000‘ než čtyřtisíckrát ‚0‘.

Aby však byl zápis validní, musel jsem si číslo na čtveřice rozdělit a zjistit co mi zbyde a to dát na začátek (například číslo 26D=100 0000B). Tento zbytek se určí opravdu doslova – v 7. řádku se prostě vypíše po jedné tolik nul, kolik zbývá (počítá se zbytek po celočíselném dělení – 8. řádek) do kompletní čtveřice a teprve potom už se vypíšou kompletní čtveřice (řádek 11).

 

Hexadecimální číslo

U hexa čísla je situace podobná jako u binárního. Ve své podstatě stačí říci, že každé 4 cifry binárně jsou 1 cifra hexadecimálně. Tím pádem má-li binární číslo třeba 1000 kompletních čtveřic, v hexa soustavě to bude rovných 250 cifer. Všechny (až na jednu) kompletní binární čtveřice jsou však nulové a tak se opět do hexadecimálního soubru zapíše n-krát ‚ 00‘, neboť hexadecimální čísla se oddělují po dvojicích cifer.

Ovšem problém nastal u té nekompletní úvodní dvojice cifer (například 223D=80 00 00H) neboť ta narozdíl od binárního čísla není pouze 1 a několik nul. Nabývá hodnot 1H (dvojnásobek je) 2H (další dvojnásobek je) 4H (pak) 8H (poté pozor, nikoliv 16H, ale) 10H, 20H, 40H, 80H a 1 00H, tedy 1H a další kompletní dvojice.

O vygenerování tohoto začátku se starají řádky 9 až 23. Nejdříve si opět určí zbytek, stejně jak u binárního čísla (jen pochopitelně s jiným dělitelem), a poté by stačilo vyčíslit 2tento zbytek a převést toto číslo do hexadecimální soustavy. Číslo by sice by nebylo moc velké (nejvyšší hodnota by byla 80H, 128D), takže by tomuto postupu moc nebránilo. Ale to málo je jednak, fakt, že jazyk C nenabízí moc funkcí k umocňování (funkce pow nefungovala, tak jak měla) a pro převody číslených soustav neznám žádnou, a navíc by to bylo zbytečně časově náročné, když to jde i trošku „oprasit“.

Prostě se zeptá jestli ten zbytek je v hexa soustavě jednociferný (řádek 12), a pokud je, tak tu 1 cifru vyčíslí a vypíše. Pokud není, je tedy dvojciferný, vyčíslí tu první cifru a za ni vepíše nulu. Poslední řádek (25.) pak doplní zbývající, kompletní dvojce.

 

Dekadické číslo

Algoritmus pro generování dekadického čísla je z této trojice nejšílenější a proto si jej nechávám úplně na závěr. Dvojkový a šestnáctkový měly totiž základ, který určitým způsobem stál na čísle 2, jehož mocniny jsme chtěli zpracovávat. Ale desítka, ta je sice pětinásobkem dvojky, ale ta pěkta nám tam pořád hapruje a dělá velké problémy.

První myšlenka algoritmu měla fungovat asi nějak tak, že cyklus n-krát (kde n je počet mocnin), prodvojnásobí číslo počínaje jedničkou ( přičemž nás zajímá pouze poslední cifra, zbytek se ignrouje) ale po každé, když přeteče do vyššího řádu, zinkrementuje se (už jenom kvůli tomuto názvu jsem to chtěl napsat 😉 registr postupných inkrementací, jehož obsah by se pak předal dál a stejným způsobem násobil a násobil, a toto celé by se pak nějak opakovalo, až by se došlo do stavu, kdy by byl RPI prázdný, tedy už by nemělo co přetékat.

Bohužel tento systém selhal a tak mě napadl druhý, a to ten, že jsem zjistil, že čísla se v každém řádu opakují – pro řád jednotek je to (1), 2, 4, 8, (1)6, (3)2, a znovu. Opakují-li se takto čísla v jednotkách, opakují se i v desítkách, stovkách, tisících … Jenže perioda tohoto opakování rostla exponenciálně s řádem (pro jednotky zmiňované 4 čísla, pro desítky 20, pro stovky 100, pro tisíce 500, …) a navíc mě nenapadlo, jak ty data získat.

Jedinná použitelná metoda byla průběžné násobení a přičítání přetečení, tedy metoda, jakou to počítají děti na základní škole. Opravdu, musel jsem si vytvořit (dynmické) pole, ve kterém jsou uloženy jednotlivé cifry. Vzhledem k tomu, že ukládat 1 číslici, tedy číslo 0 až 9 na 4Byty dávalo účinnost asi 0,000002‰, tak mě napadlo, že když tam dám místo jedné cifry 3, nejen že se zjednoduší oddělování tisíců, ale možná to bude i rychlejší.

Doba generování 2100 000 snížíla z cca 57 sekund na pouhých 23. Jen tak z hecu jsem tam zkusil uložit těch cifer šest (čímž se ovšem naprosto brutálně zkomplikoval výpis do souboru a počet cifer se také musí celý přepočítávat) avšak když jsem zjistil, že čas je ještě téměř poloviční (14 vteřin), a paměti je také potřeba polovina, zmlkl jsem a nechal to tak.

Popis funkce algoritmu

Algoritmus tedy začne zalokováním paměti do zásoby (1 tisíc prvků). Poté začne násobit dvěma prvky pole (řádek 15), z nichž první začíní čislem 1 (řádek 9) a když už bude větší než 1 000 000 (řádek 17), tak uloží do proměnné carry jedničku (řádek 19), která se přičte v dalším „řádu“ (v další šestici). Jakmile dojede jednou (projde všechny číslice), ptá se, jestli přetekl i ten poslední řád (řádek 22)(třeba přechod z 512 na 1024), a tak zvýší počet řádů, které má procházet (řádek 29), automaticky tam zapíše tu jedničku, která do něj přetekla (řádek 28), ale to až po té, co si je jist, že ještě sem může zapisovat (že má ještě zalokovaný dostatek paměti; jinak si musí zabrat místo na dalších 2 000 prvků).

Jakmile číslo vygeneruje, musí poměrně složitě to, co má v paměti vypsat do souboru, tak aby to nějak vypadalo. To znamená, že čísla rozdělí na první a zbývající 3 cifry, které vypíše po sobě, avšak první musí vypsat bez bezvýznaných nul ( a to se v 34. řádku rozhoduje jestli tak má učinit u té první nebo až zbývající trojice). Součastně se musí hlídat, aby nevypsal dvakrát to samé nebo se nepokusil vypsat data, která už nepatří tomuto programu. S poslední šesticí cifer jsem měl problém vypsat ji v cyklu na 37 řádku a tak ji vypisuji zvlášť o řádek níž.

Tím, že v proměnné pocet majíce původně sloužit k uchování počtu cifer je uložen počet šestic cifer, je třeba určit přesný počet cifer. Ty se určují tak, že vezme první šestici a postupně ji provnává s mocninami desíti.

 

Stažení programu

Program jsem tvořil v mém IDE C write’n’run 1 (verze 2 je ke stažení zde) na Ubuntu, takže je primárně optimalizován na linuxové operační systémy. Při jeho tvorbě jsem s ním však měl nemalé problémy (proto jsem jej také tvořil měsíc) a při tom jsem jej zkoušel i na Windows, takže dodám i Windows verzi.

Nicméně zatím zde dodávám alespoň zdrojový kód:

Stažení zdrojového kódu generátoru mocnin dvojky.

a automatickou instalačku pro linux (stačí uložit a spustit):

Instalačka pro Linux ZDE

 

On-line verze programu

Ještě před tím, než jsem začal psát tento program v jazyce C, vytvořil jsem jej v PHP. Tuto prvotní verzi algoritmu samozřejmě dodávám také. Akorát on-line verze je omezena na exponent 5 000.

On-line verze zde

Bash a shellové skripty v Linuxu

Pro pochopení, Bash je jeden z několik unixových shellů. Myslím, že ten nejrozšířenější a nejznámější. Podporuje i některé konstrukce, které z něj však dělají plnohodnotný programovací jazyk určený k psaní skriptů (kromě samotných příkazú). Unixových skriptů. Hlavu bych za to nedal, ale je to něco jako DOSovské BAT soubory. Stejně jako ty DOSovské skripty lze i ty Unixácké snadno spouštět (a samozřejmě také upravovat) a oproti jiným programovacím jazykům umožňují rejpat se v celém počítači, od souborů na pevném disku až po datum a čas. Bashové skripty jsou totiž primárně tvořeny většinou linuxovými příkazy.

Takovéto skripty by nám v celku k ničemu nebyly (asi těžko bychom vytvářeli soubor s názvem „Zadejte váš věk:“ a pak jej pomocí příkazu ls (výpis obsahu adresáře) nechali vypsat na obrazovku, jakožto oznámení obsluze, aby zadala svůj věk), tak nám kromě pánaboha při tvorbě skriptů pomáhají základní příkazy jazyka Bash. Toto není návod na psaní skriptů (toho je plný internet – obzvláště linuxácké portály) a tak zmíním například příkaz echo (=ozvěna; co mu zadáte jako parametr, to vám vrátí na obrazovku – klasický vypisovací příkaz) a jeho protějškem je příkaz read. Tyto příkazy se nastavují klasickými „pomlčkovými“ parametry, takže echo -n "Jméno: " díky prvnímu parametru po vypsání textu neprovede odřádkování.

Pořád bychom toho asi ani moc nenapsali. Samozřejmě, že Bash umí i podmínky a cykly. Zajímavě funguje příkaz if – parametr podmínka se nevkládá do kulaté závorky jako v Céčku, ale do hranaté (a navíc je ohraničen mezerami). Na tom by nebylo nic až tak moc zvláštní, avšak zvláštností je to, že ona hranatá závorka je ve skutečnosti program (myslím, že ve skutečnosti je to symbolický odkaz na program test, ale to vcelku nehraje roli) jemuž dáváme parametry (například [ -e "Martin.txt" ] zjištuje, jestli soubor Martin.txt existuje.

Kromě těchto standartních vlastností umí i další. Kupříkladu velice šikovnou pomůckou jsou roury. Ty umí vzít výstup jednoho příkazu a poslat je rourou na vstup druhého. Takže příkazem calc provedeme nějaký složitější výpočet (Bash umí jen základní pětici matematických operací, zbytek se musí řešit jinak, což je celkem nevýhoda) a výsledek tohoto výpočtu pošleme na vstup mkdir a on nám vytvoří složku s názvem o dané číselné hodnotě jakoby v jednom příkazu a bez nějakého ukládání do proměnných. Naprosto úžasnou funkcí bashe je však snadné ukládání do souborů. Prostě výstup souboru přesměrujete do ‚názvu souboru‘ a ono to tam pošle. Nejsou třeba žádné inicializace souborů, kontroly existence a tak (ale musíte mít k zápisu do souboru patřičná přístupová práva).

Je třeba si uvědomit, že v linuxu to buďto vyjde a nebo ne a pak je to v … na konci roury (obrazně řečeno). Každý příkaz vždy vrací číselnou hodnotu. Je-li nulová, pak vše proběhlo v pořádku. Je-li nenulová, pak byla někde chyba. K chybě patří i třeba překlep v zápisu parametrů, takže když při zápisu podmínky do hranaté závorky zapomenete oddělit název příkazu [ od jeho parametrů, vyhodnotí podmínku vždy jako nepravdivou, což programátorovi může ze začátku dělat problémy.

Abych to nějak shrnul, v Bashi se člověk opravdu vyblbne. Kdo je magor jako já, může si klidně napsat skript, který po připojení foťáku k počítači jej automaticky namountuje ( mount – příkaz, který po hardwarovém připojení zařízení jej připojí i softwarově), vytvoří v počítači složku s názvem dnešního data a zkopíruje tam všechny nové fotky a přitom vám bude v průběhu kopírování zobrazovat kolik ještě procent a času zbývá.

Napříkald můj kamarád si vytvořil program, který odešle zadaná klíčová slova na images.google, stáhne jeden z nelzeneách obrázků a nastaví vám jej jako pozadí plochy. Skript má 3 řádky (1.- odeslání požadavku na images.google.cz a vybrání obrázku, 2.-stažení obrázku, nastavení jako pozadí).

Já osobně v Bashi programuji raděj, než třeba v klasickém C. Jeden z důvodů je ten, že skripty není třeba kompilovat, jsou přímo připraveny ke spuštění, a druhak díky tomu, že syntaktické chyby, které vám kompilátor (myslím ten klasický, konzolový – gcc ) vyplivne jenom jako číslo řádku a stručný popis, kterému stejně málokdo porozumí. V Bashi se vám tato hláška objeví až přímo za chodu, takže přesně víte občas i víte, kde chybu hledat.

Bash prostě dokáže ušetřit čas, je to jazyk, který se hodí, prostě si můžete pěkně pohrát s celým systémem a to my Linuxáci máme přece tak rádi!

Zde je článek o mém skriptu C write ‚n‘ run, vývojovém prostředí pro jazyk C v textové konzoli.

Nebojte se příkazové řádky

  1. K čemu je příkazová řádka?
  2. Příklad první – instalace programu
  3. Příklad druhý – složité nastavení
  4. Porovnání Terminálu a Grafického prostředího v praxi
  5. Další „programy“ a jejich protějšky
  6. Pár slov na závěr

Příkazová řádka je nedílnou součástí Unixových operačních systémů. Mnoho lidí však stále tvrdí, že to k ničemu. Oproti Windows, kde příkazová řádka slouží jen jako doplnění funkce a málokdo ji používá, Linuxová příkazová řádka je silný pilíř, na kterém stojí celý operační systém.

Dalším pozitivem Shellu (tak se říká linuxové příkazové řádce) je ten fakt, že pokud máte například linuxový server (a že jich je!), takže nač zbytečně plýtvat jeho výkonem pro grafické prostředí, které stejně použijete třeba jen jednou za týden, takže ani není snaha některé serverové příkazy přetvářet do grafického režimu (a některé ani nejdou).

Příklad první – instalace programu

Někde, myslím, že někde na stránkách Ubuntu, jsem našel velice zajímavý argument pro příkazovou řádku. Představte si, že si chcete nainstalovat nějaký program. Spustíte Centrum Softwaru, naťukáte název programu, počkáte, až se vám najde, kliknete na Nainstalovat, zadáte heslo a už to jede.

Nebo kliknete na ikonku Terminálu (já jako správný linuxák ji mám vždy po ruce na hlavním panelu, avšak už ji nepoužívám, protože jsem se naučil klávesovou zkratku Ctr+Alt+T) a napíšete:

Nebo, pokud jste hodně líní, tak si ten příkaz prostě zkopírujete z toho článku, který právě čtete a z pravidla tam někde bude. Zmáčknete Enter, a zadáte heslo a už to jede.

Kolik času jste ušetřili?

Příklad druhý – složité nastavení

Ale opusťme obyčejné stahování a instalaci programu. Představme si něco složitějšího. Co kdybychom operací podobných té předchozí museli udělat víc za sebou, třeba 6 (například nastavit něco, nastavit něco jiného, to první přenastavit, restartovat to, zkontrolovat to, vrátit to druhé do původního stavu)?

Klik, klik, klik ,klik, … po desítkách kliknutí bude hotovo. Když si otevřete terminál, vložíte tam postupně všechny ty požadované příkazy (buďto jste si je zkopírovali z toho návodu na netu, nebo je prostě znáte) a o tom, jestli to budete mít hotové za 20 nebo 30 sekund rozhoduje pouze, jak rychle umíte psát.

Porovnání Terminálu a Grafického prostředí v praxi

Krásou linovýxh příkazů je fakt, že velká část základních programů v grafickém prostředí má své předchůdce i v příkazové řádce. Zde máte několik nejtypičtějších příkladů:

Centrum Software Ubuntu vs. Aptitude

Na obrázku dole vidíme náš první probíraný přiklad. Jak v grafickém režimu v Centru software pro Ubuntu (kdo nepoznal, je to vlevo) i v jeho konzolovém protějšku Aptitude (vpravo) jsem vyhledal „program“ (ona je to ve skutečnosti hra 🙂 SuperTuxKart. Můžete vidět, že text je naprosto stejný (až na grafickou adaptaci – jiné písmo, odrážky a tak).

Aptidude a Centrum software Ubuntu
Aptidude a Centrum software Ubuntu

Sledování systému vs. Top

Další ukázkovou dvojicí jsem vybral velmi podstatnou část každého operačního systému, a to konkrétně pro Ubuntu program Sledování systému. Program mimo jiné vypisuje seznam všech běžících procesů. Tuto funkci nese také konzolový program Top . Nevím sice co to znamená (buďto se jmenuje podle hlavičky nahoře, já osobně bych řekl, že top znamená table of processes, avšak ani jedno se nepotvrdilo, takže prostě top), ale používám jej když si omylem zasekám počítač a potřebuje onen problematický program ukončit. Tak si najdu v top jeho pid (process ID) a pak ho kill nu.

Top a Sledování systému
Top a Sledování systému

Mozilla/5.0 vs. W3m

Další, velmi významný program je internetový prohlížeč. Kromě prohlížeče Mozilla/5.0, který používáte vy, existují i další. Mezi nimi i třeba konzolový prohlížeč w3m . Na obrázku dole můžete vidět část této stránky (starší verzi) zobrazené právě ve w3m.

Samozřejmě, že zásadní nevýhodou konzolových prohlížečů je většinou totální ignorace jak kaskádových stylů, tak i javascriptů ( a dalších, jako obrázky, objekty, …).

Pokud však jen potřebujete rychle najít nějakou informaci na některé stránce jejíž adresu znáte, tak místo spouštění třeba Mozilly, datlení adresy do adresního řádku a pak teprve študovali, stisknete Ctrl+Alt+T, napíšete w3m < adresa >, dáte Enter a je hotovo.

W3m a tato stránka
W3m a tato stránka

Další „programy“ a jejich protějšky

Datum a čas

Naprosto úžasná dvojce příkazů, kterou pravděpodobně používá každý, je date a cal. Po instalaci Ubuntu máte na horním panelu vpravo program Hodiny, který zobrazuje datum a čas ( v trochu civilizovanější formě než onen příkaz date).

Když na něj kliknete, zobrazí se kalendář na celý tento měsíc. Tuto funkci zastává program cal (od slova calender). Pokud však napíšete příkaz cal <?php echo StrFTime("%Y",Time()); ?>, program vám zobrazí v krásné tabulce (3 x 4 měsíců) kalendář na celý rok.

Můžete si také zobrazit, třeba, který den začne prosinec 2046, nebo si zjistit, že Mistr Jan Hus byl upálen → v sobotu (pro neznalce 6. 7. 1415, tedy cal 7 1415). A právě pro tyto účely jej používám, neboť když si rozkliknu program Hodiny, a chtěl bych se podívat právě na onoho mistra Jana Husa, musel bych se k němu prostě proklikat (a že by to bylo kliků).

Příkazy date a cal a Hodiny
Příkazy date a cal a Hodiny

Vypnutí počítače

Mou oblíbenou hříčkou je pak vypínání. Vypnout počítač lze různými způsoby. Od Harwarového vytržení ze zásuvky nebo vytažení baterie notebooku přes stisk/podržení tlačítka na pc, až po kliknutí na Vypnout… A nebyl by to Linux, kdyby na to neměl příkaz. Má jich dokonce několik: < poweroff, shutdown nebo třeba halt. Já obvykle (večer) než noťas vypínám jej ještě nechám (samozřejmě kvůli facebooku) nějakou tu minutku zapnutý a ještě něco kutím po bytě. Poté už ani nesedám na židli, a vzhledem k tomu, že ze stoje se jednak hůře manipuluje s myší a druhak je na LCD blbě vidět, tak obvykle jen spustím terminál kombinací Ctrl+Alt+T a napíšu příkaz sudo poweroff (načež zadám heslo) a počítač se vypne.

Úplně stejnou funkci provede kliknutí na Vypnout… v nabídce Appletu upozornění pro sezení (defaultně úplně vpravo nahoře). Když na to kliknete, po potvrzení (což nahrazuje zadání hesla – aby si ten počítač nemohl vypnout jen tak leckdo a to bez předchozího uložení rozpracované práce) se prostě provede příkaz poweroff.

Jak to tak bývá, samotné vypínací příkazy nám poskytují zpravidla víc funkcí než obyčejné 1 kliknutí. Šikovným je v této situaci napřiklad zápis shutdown -h +15 – počítač vypne za 15 minut (můžete tak někoho velice nemile překvipit ;-)).

Poweroff a Vypnutí přes Applet upozornění pro sezení
Poweroff a Vypnutí přes Applet upozornění pro sezení

Zavření terminálu

Poslední příkaz, který bych zmínil, je velice prostý: exit. Prostě opustí, ukončí (v grafickém prostředí se to projeví zavřením okna) tento terminál. Je to substituce za kliknutí na křížek v rohu, případně jiný způsob ukončení, jako je Alt+F4, nebo třeba sebevražedný příkaz kill < PID procesu gnome-terminal >.

Tento příkaz používám velmi často, jednak když už jsem namlátil do klávesnice všechny ty příkazy, tak než abych pak tam myší najížděl na onen křížek, prostě napíšu exit, a druhak se tento způsob ukončování terminálu doporučuje jako jako jediný validní způsob ukončení terminálu.

Nejlepším kamarádem přikazu exit je příkaz logout. Zatímco exit se používá v Terminálu, příkaz logout vám schramtsne většinou jen klasická dálnopisová konzola (Ctr+Alt+F<1 až 6>), jinak mají stejnou funkci.

Exit a klasické zavření
Exit a klasické zavření

Pár slov na závěr

Kromě toho, že umět pracovat s příkazovou řádkou je vcelku machrovinka, tak vám to může pomoct i například, když vám spadne systém (třeba kvůli přetížení) a musíte nouzově zachraňovat a zálohovat přes konzoli. Kromě toho bych také řekl, pro starší stroje, mezi jejichž vlastníky se hrdě hlásím, může sloužit ke zrychlení práce. Na co je mi graficky perfektní program pro zobrazení využití paměti, když mi bohatě stačí jedno číslo, které si najdu třeba ve výstupu příkazu free -mos 1?

Navíc, jak jsem psal ze začátku, jsou počítače (především servery), kde se ničím jiným než s textovou konzolí nesetkáte. A pokud s počítačem alespoň trochu umíte, je dobré se naučit i používat příkazovou řádku.

A to se ani nezmiňuji o psaní shellových skriptů, neboť jak nám na výšce dokázali, je to získáte tím opravdu velmi mocný nástroj:

Příkazy – programy a prográmky
+
Interní příkazy jazyka Bash
+
přesměrování vstupů a výstupů, roury
+
soubory
=
COKOLIV!

Windows XP vs. Ubuntu 10.04

Zapínám notebook. Po uvítacím logu COMPAQ se mi zobrazí bootovaci menu. Většinou už jsem předem rozhodnut, ale přece jen chvíli zauvažuji, než zvolím vhodný operační systém pro mou následující práci. Pokud bych se do 10 sekund nerozhodl, padá volba automaticky na jednu z nepopulárnějších Linuxových distribucí – Ubuntu (10.04). A právě v tomto článku se pokusím vám popsat, proč kurzor nemám nastaven na „druhém“ (ve skutečnosti asi na 6.) řádku, tedy Microsoft Windows XP Profesional.

Ubuntu.
Ubuntu - Linux for Human Beings

První důvod, který bych tu nijak zvlášť nerozebíral je ten, že po nainstalování Ubuntu se mi nastavilo jako primární operační systém a mě se nechtělo měnit. Proč také? Ale ten druhý…

Před pár dny (leden 2011) mě napadla poměrně jednoduchá a názorná substituce pro ukázku obou, nejpoužívanějších operačních systémů. Začnu tedy tím známějším.

Microsoft Windows

logo Windows
logo Windows

Operační systém Mircosoft Windows si můžete představit jako byt. Za pár tisíc si koupíte byt, který budete užívat, stejně jako operační systém. Po nastěhování (operačního systému na disk) máte ve vašem jinak prázdném bytě něco už předchystané, neboť to spadá k přinejmenším k základnímu vybavení. Stejně tak jak po nastěhování do vašeho nového bytu zjišťujete, že v předsíni máte vestavěnou vestavnou skříň, u oken radiátory, a v koupelně vanu, tak stejně tak zjišťujete, že máte najednou v počítači Internet Explorer, Windows media player, či Windows Life messenger. Pokrčíte tedy rameny, neboť víte, že programy, které tam máte jsou nezbytné. Když se však rozhlédnete, tak zjišťujete že kromě něčeho vestavěného v tom bytě není už v podstatě nic.

Kancelářský balíček, který vyrábí ta firma, od které máte být, by ve vaší pracovně rozhodně neměl chybět. Zjišťujete však, že vás vyjde na skoro tolik, jako celý být. Nicméně pak ještě od společnosti Electronics Arts koupíte nějaká ta autíčka, aby si děti měly s čím hrát a nějaký ten Photoshop, aby si měly v čem upravovat profilovky na facebook. Takže už máte v bytě nějaký ten základní nábytek. „Ale ještě by to necho chtělo – jasné, chce to novou tapetu (plochy).“ Hned to vypadá lépe, ale pořád vám tu necho chybí. Velké společnosti už vám nepomohou, a tak se vydáte do do města. „To je ono, tady rozdávají něco zadarmo. Květináčky, stolečky, lampičky, to je přesně ono. Výborně, stolička, co ještě? Kobereček! A co dál? Ještě si vemu Adobe Reader, a k němu taky PDF Creator. Nesmím zapomenout taky na WinRar. A co s tou vanou? Tady vidím sprchové kouty Mozilla. Ten model Firefox se mi líbí, tak si ho vezmu.“ Pokud se vám bude chtít, tak tu vanu vybouráte a vyhodíte, ale většinou si ji tam lidé nechávají.

plocha Windows
Výchozí plocha čerstvě po nainstalování Windows XP

Tak si tak spokojeně žijete v tom svém bytečku. Některé komponenty, které používáte jsou doslova ruční práce – prostě nějaký programátor sedl, a vyprodukoval nějakou jednoduchou blbost, jako kalendář, který vám ukazuje, kdo má dnes svátek a podobně.
Po čase se vám toho všelijakého softwarového haraburdí různých výrobců, firem, funkcí a principů nahromadí tolik, že si budete muset sehnat nějaký čistič (obvykle taky bývá zadarmo), aby vám tam udělal pořádek. Jenže semtam nějaký ten program spadne a rozbije se. Čistič sice vyhodí ty celé kusy, ale ty drobné střípky zůstanou někde v koutě. Nehledě na to, že si občas domů donesete buďto nějakou blbost, kterou vám vnutili třeba za účelem reklamy (různé vzorky, vzorečky, a další dema a shareware). No a samozřejmě čistič, který má tomuto bránit, to považuje za něco, co používáte a nevyhodí to. Řešení je buďto pořídit si lepší, placený čistič, nebo to nejnutnější odstěhovat na víkend na chatu, flashku a podob. a z bytu všechno vyházet, vymalovat, naformátovat, a všechno znovu nastěhovat (dá se říci metoda Noemova Archa).

Ubuntu

logo Ubuntu
logo Ubuntu

Oproti tomu Ubuntu, si můžete představit, jako auto. Přijdete a dostanete auto. Kromě toho, že ho dostanete zadarmo, tak jej klidně můžete „stáhnout z internetu“, tedy dodají vám jej až do domů. V okamžiku, kdy vám jej přistaví před dům je auto po pár formalitách, jako je natankování nádrže, nastavení jazyka, napsání seznamu uživatelů a samotné předání klíčků, připravené k jízdě bez sebemenších problémů. V autě je opravdu všechno co potřebujete – motor, karosérie, sedačky, světla, program pro grafiku – Gimp, nějaký ten kecálek (Empathy) a tak dále.

Ubuntu, respektive samotné linuxové jádro, je totiž vlastně motor (souhlasíte jistě se mnou, že bez motoru by to nebylo auto) obalený fůrou dodatečných komponent počínaje karosérií (grafické prostředí), koly (ovladače) přes klimatizaci (kancelářský balíček OpenOffice) až po např. zadní stěrač (BitTorrent). Vy, samozřejmě, v okamžiku, kdy si auto koupíte, tak ho máte v nějaké výbavě (výbavy se mění s „distribucemi“ – Ubuntu, Kubuntu, …). Například v autě Ubuntu sice nemáte parkovacího asistenta, za to tam ale máte vyhřívané sedačky.

Plocha Ubuntu
Výchozí plocha čerstvě po nainstalování Ubuntu 10.04

Ale co je důležité, pokud by jste toho parkovacího asistenta mermomocí chtěli, tak není nic jednoduššího, než zavolat na technickou, jestli by vám ho neposlali. V Ubuntu nikam nemusíte volat, stačí prostě kliknout na „Centrum softwaru pro Ubuntu“ a vyťukat název hledané komponenty, která se vám ihned stáhne a pravděpodobně i namontuje do toho vašeho autíčka. Na vás už je pak jenom seřízení nastavení, jako např. nastavení teploty. Stejně tak, pokud si budete myslet, že parkovacího asistenta vůbec nepoužíváte, že by jste si jej vymontovali, tak není problém. Dokonce, pokud se vám třeba nebude líbit karosérie, tak by neměl být problém ani s ní (i když jsem to ještě nikdy nedělal). Kdyby jste chtěli, můžete si karoserii odmontovat úplně a pracovat jen v příkazové řádce. V tom případě vám ovšem bude například klimatizace (nebo grafický program Gimp) k ničemu :-).

Díky tomuto systému se vám v počítači nehromadí žádný nepořádek, a když se vám náhodou některá komponenta pokazí, tak si ji prostě necháte poslat znovu, reinstalujete ji. Dokonce, pokud se vám něco nezdá, tak vám mohou umožnit si tu komponentu upravit dle vašich potřeb a dát k dispozici ostatním uživatelům vaší vylepšenou verzi (tomu se říká open-source).

Shrnutí

Tux, symbol Linuxu vyjadřuje svůj názor na Windows
Tux, symbol Linuxu vyjadřuje svůj názor na Windows

Já bych prostě řekl, že Linux má něco do sebe, připadá mi logičtější a spořádanější než Windows, kde si každý dělá co chce. V Linuxu spolu programy spolupracují, protože je všechny vyvíjí jedna komunita lidí, což je nesporná výhoda, ale i nevýhoda (když spadne jeden program, hroutí se celý systém jak domeček z karet).

Abych byl upřímný, Moje XPéčka v porovnání s Lucid Lynx mi přijdou určitým způsobem stabilnější, padají méně. Jenže zkuste si na téměř 10 let starém stroji hrát se složitými vektorovými obrazy! Systém se uživateli snaží vyhovět, takže je schopný se třeba na 10 minut zaseknout nad operací, kterou mu zadal, bez ohledu na to, že na to nemá, a systém začne ukončovat různé procesy, aby získal nějaké to procento CPU navíc.

U Windows, pokud by takováto situace nastala, máte možnost tyto programy poukončovat přes Správce úloh, nebo počítač nemilosrdně restartovat. U Linuxu se znalejší uživatel přepne do příkazové řádky a za současného provádění jiné činnosti (například úklid na stole), neboť je počítač stále velmi vytížen a každá operace najednou trvá opravdu monohonásobně delší čas, může pracovat alespoň tam.

Ještě bych dodal fakt, že až na tyto stavy totálního vytížení mi jak XPéčka z roku 2001 tak Lucid Lynx z dubnu 2010 (Ubuntu 10.04) jedou téměř stejně rychle. A nedokáži si představit, jak by asi na mém notebooku jely např. sedmičky, které jsou o půl roku starší než ono Ubuntu.

Explore Ubuntu.
Like it?
Install it.
Love it!
ubuntu

Ubuntu je prostě změna, ale ne zase tak veliká, jak se může zdát. Netvrdím, že k lepšímu, ale myslím, že horší to určitě nebude. Podpoříte tím asi 2% menšinu.

Kdyby jste Ubuntu opravdu chtěli zkusit, prostě jděte na stránky Ubuntu – Ubuntu.cz → a stáhněte si ho.

Moje vývojové prostředí pro textovou konzoli linuxu

Začalo to takhle:

Ti bystřejší pochopili, že se jedná o programování v jazyce C. Ano, takto jsem začínal já programovat v Céčku.

Vzhledem k tomu, že mě v textové konzoli bavilo pracovat, neviděl jsem důvod proč si instalovat nějaké grafické vývojové prostředí. Avšak psát tyto příkazy pořád dokola mě po pár úpravách zdrojového kódu přestalo bavit, ale napadlo mě, že bych si na to mohl napsat skript. Skript prostě provedl výše napsané 4 příkazy a skončil. V případě potřeby jsem jej spustil znovu a znovu a znovu, doku nebyl prográmek hotov.

Když jsem to zabalil do cyklu (abych jej nemusel spouštět pořád dokola), bylo potřeba v určitý okamžik zeptat se uživatele, zda-li chce program ukončit. V tom se ve mně zrodila myšlenka jakéhosi ‚menu‘. Tam by si uživatel mohl zvolit nejen ukončení, ale také jednotlivé příkazy (editace, kompilace, spuštění). Kromě toho si mohl zvolit pracovní soubor, no a pomalu z toho začalo vznikat vývojové prostředí.

Díky jeho funkcím jsem jej nazval skromně C write ‚n‘ run (Céčko – napiš a spusť) a od té doby, jsem jej používal a příležitostně i poupravil o nové funkce.

Postupnými úpravami se však objevilo několik chyb, a navíc, při příchodu na vysokou v září 2011 jsem prošel vstupním kurzem Linuxu, kde jsem se dozvěděl kupu nových informací, které mě přivedly k tomu, abych si C-wnr napsal komplet znovu. Stalo se tak, a vzniklo C-write ‚n‘ run 2.


Stažení C write ‚n‘ run 2.1 (9,3kB)

Upozornění: 13. prosince 2011 v kolem 13. hodiny byla vydána verze 2.1, která odstraňuje problém kompilace matematických funkcí (kompilátor ‚neznal‘ funkce z knihovny math.h) přidáním parametru -lm.

 

 

Krásou C-wnr je však to, že pouhou změnou několika málo příkazů (v podstatě jen jednoho jediného a textové omáčky kolem) tak můžete získat vývojové prostředí pro jazyk Pascal:

Pascal-wnr-2 dodám, až jej budu mít vytvořený.

nebo Java-write ‚n‘ run:

také dodám později.