V dnešním článku se seznámíme s vybranými programovacími jazyky a knihovnami, které je možné použít pro výuku základů počítačové grafiky popř. pro tvorbu programů a jednoduchých her, u nichž je vyžadována nějaká forma grafického výstupu. Zaměření dále prezentovaných nástrojů přitom odpovídá znalostem a zkušenostem žáků základních škol.

Obsah

1. Programovací jazyky a knihovny určené pro výuku základů počítačové grafiky

2. Systém Scratch

3. Skládání složitějších programů s využitím jednotlivých bloků

4. Přednosti, zápory a omezení Scratche

5. Projekt Snap!

6. Basic-256

7. Instalace Basicu-256 na Fedoře

8. Základní strukturované příkazy z Basicu-256

9. Grafický výstup v Basicu-256

10. Odkazy na Internetu

1. Programovací jazyky a knihovny určené pro výuku základů počítačové grafiky

It's a bit like learning natural languages: the earlier the better.

Michael Kölling

V současnosti existuje a je aktivně používáno [1] několik desítek programovacích jazyků, ať již jazyků interpretovaných či překládaných do nativního kódu nebo bajtkódu. Až na několik výjimek se však jedná o jazyky, které nejsou příliš vhodné pro první seznámení dětí s návrhem algoritmů a jednoduchých aplikací. Z tohoto důvodu vzniklo a stále ještě vzniká poměrně velké množství projektů, jejichž cílem je seznámit děti předškolního věku či děti na prvním stupni ZŠ se základem algoritmizace a mnohdy i s tvorbou počítačové grafiky (protože grafický výstup či dokonce animace jsou nepochybně atraktivní). Jmenujme například projekty Logo, Scratch, BYOB, Snap!, Alice, Android App Inventor, Starlogo, Etoys, DesignBlocks, Pocket Code, Hopscotch, Blockly, Greenfoot, Processing, GameMaker nebo poněkud kontroverzní Microsoft Small Basic.

01

Obrázek 1: Moderní integrovaná vývojová prostředí jsou sice pro amatérské i profesionální programátory velmi užitečná, ovšem při výuce může jejich velká variabilita být v některých ohledech spíše kontraproduktivní.

Oblíbeným jazykem v této oblasti je Logo (a mnohé jeho dialekty), které jsem dříve taktéž prosazoval. Ovšem ukazuje se, že i na prvním stupni základní školy je dosti složité vysvětlit pojem úhlu, který je v Logu celkem zásadní (v programech se ovládá želvička pohybující se po ploše obrazovky). Naproti tomu nemají děti prakticky žádný problém s pochopením principu bitmapové grafiky a pixelů; možná se ani není čemu divit, neboť tato generace již vyrůstá na Minecraftu :-). I z tohoto důvodu budou v dnešním článku popsány dva dosti odlišné projekty: Scratch se zaměřením na vizuální tvorbu programů, který používá želví grafiku známou z Loga a projekt nazvaný Basic-256, v němž lze několika málo příkazy vykreslit i poměrně složité rastrové obrázky. Kromě Scratche se zmíníme i o příbuzném projektu Snap!.

02

Obrázek 2: Grafické uživatelské rozhraní aplikace Imagine Logo, což je jedna z moderních variant Loga.

2. Systém Scratch

Scratch uses hands-on, active learning; it is visually appealing; it allows users to express their own creativity and to build on their own experiences; it gives immediate, understandable feedback; and it allows users to avoid syntax errors without focusing on minutiae, freeing them to focus on processes and concepts.

NCWIT study

Některé v praxi používané programovací jazyky (například Python či spíše Lua) je sice možné použít pro výuku programování, ovšem pro děti předškolního věku nebo pro děti na prvním stupni základních škol se podle mého názoru příliš nehodí, a to hned z několika důvodů. Jedním z těchto důvodů je nutnost zápisu algoritmů pomocí více či méně strukturovaného textu, jehož syntaxe je hlídána buď interpretrem či překladačem. Jedná se o nejdéle používaný způsob programování, jehož počátky můžeme hledat v hluboké počítačové minulosti, protože první překladač pracující se strojovým textem byl vytvořen již v rozmezí let 1951 až 1952 Grace Hopperovou v rámci projektu A-0 (Arithmetic Language version 0), který byl později následován známým FORTRANem navrženým Johnem W. Backusem a jeho vývojovým týmem. Ovšem v průběhu oněch cca šedesáti let se znovu a znovu objevovaly více či méně úspěšné pokusy o vizuální návrh algoritmů, tj. o tvorbu programů nikoli zápisem strukturovaného zdrojového textu, ale návrhem algoritmů pomocí diagramů vytvářených například s využitím myši, gesty či v minulosti pomocí světelného pera.

03

Obrázek 3: Bloky, z nichž se programy tvořené ve Scratchi skládají, jsou na základě své funkce rozděleny do osmi kategorií. Povšimněte si, že prostředí Scratche bylo téměř kompletně počeštěno; jedna z mála částí ponechaná v angličtině je nápověda k jednotlivým příkazům (i když i tato část se pravděpodobně brzy přeloží).

Poměrně dobře známé jsou například pokusy o přímý „překlad“ klasických vývojových diagramů, využití takzvaných kopenogramů atd. V současnosti někteří analytici a vývojáři využívají vizuální/grafický jazyk UML (což je ovšem jen pomůcka) či BPM (návrh business procesů, ovšem s vhodně zvolenými bloky se vlastně jedná o plnohodnotný jazyk). V oblasti software určeného pro výuku programování se využívá podobný princip, jako v případě vývojových diagramů – možnost zápisu (či možná lépe řečeno deklarace) algoritmů s využitím bloků představujících jednotlivé příkazy či volané funkce, které jsou doplněny o základní strukturované příkazy určené pro tvorbu rozhodovacích podmínek a programových smyček. Na tomto principu, tj. na vylepšených a vizuálně přitažlivějších vývojových diagramech, je postaven i projekt Scratch, v němž jsou uživatelům nabídnuty základní stavební bloky, z nichž se program skládá, přičemž je ponecháno pouze na uživateli, jakým způsobem tyto bloky využije ve svých programech.

04

Obrázek 4: Programy se ve Scratchi tvoří přetahováním příkazových bloků z oblasti umístěné v levé části okna do střední oblasti, zde nadepsané „Skripty“ (nová verze Scratche používá nepatrně odlišný design grafického uživatelského rozhraní).

Díky způsobu implementace skládání bloků pod sebe, popř. do sebe (s využitím „zámků“, podobně jako u puzzle) je zajištěno, že program bude po syntaktické stránce vždy v pořádku, což je důležité, protože odpadá pro děti nudná oprava překlepů, hledání chybějících středníků, hlídání párovosti závorek i další činnosti spojené s prací s běžnými programovacími jazyky. Uživatel se tedy musí starat o to podstatné – o sémantiku navrhované aplikace.

05

Obrázek 5: Editor bitmapových spritů zabudovaný přímo ve Scratchi.

3. Skládání složitějších programů s využitím jednotlivých bloků

Tvorba programů ve Scratchi je jednoduchá a po krátkém zaučení i intuitivní – v levé části okna (Scratch verze 1) se postupně vybírají příkazové bloky, které se přetahují do prostřední části okna, kde se z těchto bloků může skládáním tvořit program či programy. Běžný příkazový blok je vizuálně představován obdélníkem s několika výčnělky připomínajícími puzzle. Programové smyčky a podmínky jsou vyobrazeny jako složitější tvary umožňující vkládání dalších bloků dovnitř svého těla. Pomocí těchto výčnělků se bloky spojují dohromady tak, aby tvořily sekvenci či dokonce strukturovaný program. V případě, že je zapotřebí sekvenci příkazů změnit, je možné bloky od sebe rozdělit, popř. vybraný blok smazat (přes menu zobrazené po stisku pravého tlačítka myši), zkopírovat (opět přes pravé tlačítko myši) či přesunout. Společně spojené bloky tvoří program, který je možné spustit doubleclickem. Na ploše Skripty je možné vytvořit i více programů, každý je tvořený množinou spojených bloků. Činnost každého bloku lze nezávisle na vlastním programu taktéž jednoduše ověřit – opět doubleclickem.

06

Obrázek 6: Velmi jednoduchá simulace Brownova pohybu naprogramovaná ve Scratchi.

Vizuální tvorba programů s využitím skládání příkazových bloků tvoří pouze jednu část snadnosti použití Scratche při výuce programování. Druhou částí je takzvaná pracovní (kreslicí) plocha s volitelným pozadím, po níž se mohou v závislosti na volaných příkazech pohybovat takzvané sprity, které navíc mohou při svém pohybu za sebou kreslit křivku (tj. stopu pohybu). Pod pojmem sprite je ve Scratchi myšlen rastrový obrázek, který může představovat například postavu či jiný pohyblivý nebo i statický předmět ve hře, zatímco pozadí umístěné na pracovní plochu (taktéž se jedná o rastrový obrázek) je většinou neměnné a může představovat pozadí hry, místnost, ve které se odehrává nějaký dialog atd. Scratch díky možnosti prakticky neomezeného pohybu spritů po pracovní ploše s volitelným kreslením cesty (stopy pohybu), kterou sprity vykonaly, umně integruje jak možnosti programovacích jazyků typu Karel či Baltazar (sprity umístěné a pohybující se po pomyslné šachovnici) a taktéž výše zmíněného programovacího jazyka Logo s neodmyslitelnou želvou, která se může pohybovat libovolným směrem po ploše.

07

Obrázek 7: Program pro vykreslení spirály, v němž se používá proměnná i programová smyčka.

08

Obrázek 8: Spirála vykreslená předchozím programem.

4. Přednosti, zápory a omezení Scratche

Projekt Scratch se po relativně krátké době po svém představení veřejnosti stal velmi populární a to nejenom mezi učiteli základních škol (v USA a dalších zemích), ale i na středních školách a na školách vysokých (především na fakultách netechnického zaměření, to je ovšem již téma přesahující zaměření tohoto článku). Důvodů, které vedly k této popularitě bylo a je několik, největším však zůstává možnost vytvoření i poměrně složitého programu bez toho, aby byl uživatel nucen zdlouhavě studovat syntaxi a sémantiku jazyka, učit se ovládat vývojové prostředí nebo prostředí interpretru a navíc ještě reagovat na různá mnohdy kryptická chybová hlášení (ze syntaxe většiny běžných programovacích jazyků vyplývá, že například chybějící uzavírací závorka nebo klíčové slovo ukončující nějaký blok, vede ke vzniku chybového hlášení na jiném místě v programu, než kde se skutečně chyba nachází, což může být zejména pro začátečníky velmi frustrující).

09

Obrázek 9: Program sloužící pro vykreslení květu složeného z kružnic.

Další předností Scratche je jeho orientace na tvorbu multimediálních programů a taktéž možnost snadno prezentovat výsledný projekt na Internetu, což děti může motivovat k tvorbě i poměrně komplikovaných aplikací (prozatím je tato možnost vykoupena nutností používat Flash, což může v některých případech sdílení projektů komplikovat, nicméně elegantní řešení tohoto problému nabízí dále zmiňovaný projekt Snap!). Nesmíme zapomenout ani na to, že další přednosti Scratche by se mohly objevit při jeho použití v učebnách vybavených interaktivními tabulemi – jedná se vlastně o ideální aplikaci, která by mohla možnosti těchto tabulí plně využít.

10

Obrázek 10: Výsledek běhu programu z obrázku číslo 6.

Musíme se však zmínit i o některých problémech, kterými projekt Scratch trpí. Mnohé problémy či možná lépe řečeno omezení částečně vyplývají z toho, že jeho tvůrci nechtěli zbytečně komplikovat uživatelské rozhraní Scratche ani počet dostupných funkcí. Z těchto snah o minimalismus vyplývá mj. i například neexistence funkcí umožňujících práci se soubory, funkcí pro komunikaci přes počítačovou síť atd. Tento nedostatek je možné řešit nainstalováním různých modifikací (modů) Scratche, které však nejsou oficiálně podporovány. Ovšem mnohem závažnější je nemožnost tvorby vlastních stavebních bloků, které by nahrazovaly podprogramy/procedury/funkce. Právě z tohoto důvodu vzniklo několik rozšíření Scratche, především projekt BYOB – Build Your Own Block, který byl nahrazen novějším projektem nazvaným Snap! (http://snap.berkeley.edu/).

11

Obrázek 11: Výsledek běhu programu, v němž jsou použity proměnné a řídicí bloky.

5. Projekt Snap!

Jak již bylo naznačeno v předchozí kapitole, je Snap! dalším nástrojem, který je možné v případě potřeby využít pro výuku základních konceptů používaných při programování. Zjednodušeně řečeno je možné říci, že Snap! je obdobou Stratche a projektu BYOB (Build Your Own Block) přeneseného do prostředí Webu (HTML5+CSS+JavaScript), čímž odpadá nutnost instalace celého relativně velkého běhového prostředí Scratche a navíc se díky tomu, že Snap! běží přímo ve webovém prohlížeči, může tento projekt používat na širokém spektru různých zařízení, včetně tabletů a smartphonů (zde bude limitujícím faktorem velikost displeje). Navíc díky této vlastnosti projektu Snap! odpadají problémy s jeho nasazením do výuky (administrátoři se nemusí starat o instalaci ani o udržování projektu). Prakticky všechny důležité vlastnosti Scratche zůstaly zachovány a navíc mají uživatelé možnost tvorby vlastních bloků a tím pádem i jednoduchého rozšiřování možností programovacího „jazyka“ (viz též screenshot číslo 14).

12

Obrázek 12: Prostředí programu Snap!

13

Obrázek 13: Editor spritů (stále se jedná o webovou aplikaci).

14

Obrázek 14: Vytvoření nového bloku uživatelem.

6. Basic-256

Dostáváme se k poněkud kontroverznímu tématu – k použití programovacího jazyka BASIC pro výuku programování resp. pro tvorbu jednoduché počítačové grafiky. Pod pojmem „BASIC“ se může skrývat široké množství programovacích jazyků, které mnohdy nemají s původním prakticky nestrukturovaným BASICem známým z dob osmibitových mikropočítačů prakticky nic společného. Mnohdy právě naopak: některé moderní jazyky, v jejichž názvu se vyskytuje slovo „BASIC“ jsou plně strukturované, některé podporují objektově orientované programování (založené buď na třídách či na posílání zpráv objektům), mnohé BASICy nabízí uživatelům i pokročilé datové typy, jako jsou asociativní pole atd. A právě takovým poměrně moderním dialektem BASICu je Basic-256 zmíněný v tomto článku. Důvod, proč je zde tato aplikace zmíněna je jednoduchý – v Basic-256 se velmi snadno pracuje s grafikou, což je samozřejmě pro potřeby výuky ideální (je například velmi snadné vytvořit si programovou pomůcku pro výuku matematiky či geometrie).

15

Obrázek 15: Informace o projektu Basic-256.

Jak již bylo napsáno v předchozím odstavci, Basic-256 se od klasické školy BASICu v mnoha ohledech odklání, což je ostatně jen dobře. Jedná se o interpret doplněný o jednoduché vývojové prostředí s grafickým uživatelským rozhraním, který byl navržen s ohledem na to, aby se tento dialekt mohl použít při výuce programování, především na středních školách (podle mého názoru se však hodí spíše na základní školy). Tomu odpovídá jak jednoduchost a přehlednost vlastního vývojového prostředí, tak i sémantika jazyka, která samozřejmě podporuje strukturované programování. Na Internetu je dostupná cca 300stránková učebnice programování, v níž jsou použity příklady naprogramované právě v Basicu-256. Nejedná se však v žádném případě o učebnici, která by pouze popisovala syntaxi tohoto jazyka, právě naopak – ukázána je například práce se základními datovými strukturami (seznamy, zásobníkem, frontou) spolu s vysvětlením, jak jsou tyto datové struktury a operace nad nimi interně implementovány. Kromě toho lze v této učebnici najít i mnohé základní algoritmy, například řazení prvků v posloupnosti.

16

Obrázek 16: Uživatelské rozhraní je velmi jednoduše ovladatelné.

7. Instalace Basicu-256 na Fedoře

Podívejme se nyní na postup při instalaci balíčku Basic-256 do systému Fedora. Tento balíček sice není součástí standardních repositářů, ovšem i tak je jeho instalace velmi snadná.

Nejprve je nutné stáhnout RPM určený pro vaši verzi Fedory, což zajistí jeden z následujících příkazů (předpokládám, že dnes se již nové verze Fedory provozují výhradně na strojích s 64bitovou architekturou, v případě potřeby však balíček Basic-256 existuje i ve 32bitové variantě):

wget http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_21/x86_64/basic256-1.1.4.0-9.1.x86_64.rpm

či:

wget http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_22/x86_64/basic256-1.1.4.0-9.1.x86_64.rpm

Celý průběh stažení balíčku může vypadat takto:

wget http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_21/x86_64/basic256-1.1.4.0-9.1.x86_64.rpm
 
--2015-07-16 12:24:38--  http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_21/x86_64/basic256-1.1.4.0-9.1.x86_64.rpm
Resolving download.opensuse.org (download.opensuse.org)... 2001:67c:2178:8::13, 195.135.221.134
Connecting to download.opensuse.org (download.opensuse.org)|2001:67c:2178:8::13|:80... failed: Connection refused.
Connecting to download.opensuse.org (download.opensuse.org)|195.135.221.134|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://ftp.linux.cz/pub/linux/opensuse/repositories/home:/zhonghuaren/Fedora_21/x86_64/basic256-1.1.4.0-9.1.x86_64.rpm [following]
--2015-07-16 12:24:38--  http://ftp.linux.cz/pub/linux/opensuse/repositories/home:/zhonghuaren/Fedora_21/x86_64/basic256-1.1.4.0-9.1.x86_64.rpm
Resolving ftp.linux.cz (ftp.linux.cz)... 2001:718:801:230::cd, 147.251.48.205
Connecting to ftp.linux.cz (ftp.linux.cz)|2001:718:801:230::cd|:80... failed: Connection refused.
Connecting to ftp.linux.cz (ftp.linux.cz)|147.251.48.205|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 520184 (508K) [application/x-rpm]
Saving to: basic256-1.1.4.0-9.1.x86_64.rpmâ
 
100%[======================================] 520,184     3.04MB/s   in 0.2s   
 
2015-07-16 12:24:39 (3.04 MB/s) - basic256-1.1.4.0-9.1.x86_64.rpmâ saved [520184/520184]

Následně se provede instalace příkazem:

sudo yum localinstall --nogpgcheck basic256-1.1.4.0-9.1.x86_64.rpm 

Opět se jen pro úplnost podívejme na průběh instalace:

sudo yum localinstall --nogpgcheck basic256-1.1.4.0-9.1.x86_64.rpm 
Loaded plugins: langpacks, refresh-packagekit
Examining basic256-1.1.4.0-9.1.x86_64.rpm: basic256-1.1.4.0-9.1.x86_64
Marking basic256-1.1.4.0-9.1.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package basic256.x86_64 0:1.1.4.0-9.1 will be installed
--> Processing Dependency: libQt5Core.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64
--> Processing Dependency: libQt5Gui.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64
--> Processing Dependency: libQt5Multimedia.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64
--> Processing Dependency: libQt5Network.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64
--> Processing Dependency: libQt5PrintSupport.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64
--> Processing Dependency: libQt5SerialPort.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64
--> Processing Dependency: libQt5Sql.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64
--> Processing Dependency: libQt5WebKit.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64
--> Processing Dependency: libQt5Widgets.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64
--> Running transaction check
---> Package qt5-qtbase.x86_64 0:5.3.2-4.fc21 will be installed
---> Package qt5-qtbase-gui.x86_64 0:5.3.2-4.fc21 will be installed
--> Processing Dependency: libxcb-render-util.so.0()(64bit) for package: qt5-qtbase-gui-5.3.2-4.fc21.x86_64
--> Processing Dependency: libxcb-keysyms.so.1()(64bit) for package: qt5-qtbase-gui-5.3.2-4.fc21.x86_64
--> Processing Dependency: libxcb-image.so.0()(64bit) for package: qt5-qtbase-gui-5.3.2-4.fc21.x86_64
--> Processing Dependency: libxcb-icccm.so.4()(64bit) for package: qt5-qtbase-gui-5.3.2-4.fc21.x86_64
---> Package qt5-qtmultimedia.x86_64 0:5.3.2-1.fc21 will be installed
--> Processing Dependency: libopenal.so.1()(64bit) for package: qt5-qtmultimedia-5.3.2-1.fc21.x86_64
--> Processing Dependency: libQt5Quick.so.5()(64bit) for package: qt5-qtmultimedia-5.3.2-1.fc21.x86_64
--> Processing Dependency: libQt5Qml.so.5()(64bit) for package: qt5-qtmultimedia-5.3.2-1.fc21.x86_64
---> Package qt5-qtserialport.x86_64 0:5.3.2-1.fc21 will be installed
---> Package qt5-qtwebkit.x86_64 0:5.3.2-1.fc21 will be installed
--> Processing Dependency: libQt5Sensors.so.5()(64bit) for package: qt5-qtwebkit-5.3.2-1.fc21.x86_64
--> Processing Dependency: libQt5Positioning.so.5()(64bit) for package: qt5-qtwebkit-5.3.2-1.fc21.x86_64
--> Running transaction check
---> Package openal-soft.x86_64 0:1.15.1-2.fc21 will be installed
---> Package qt5-qtdeclarative.x86_64 0:5.3.2-1.fc21 will be installed
--> Processing Dependency: libQt5XmlPatterns.so.5()(64bit) for package: qt5-qtdeclarative-5.3.2-1.fc21.x86_64
---> Package qt5-qtlocation.x86_64 0:5.3.2-1.fc21 will be installed
---> Package qt5-qtsensors.x86_64 0:5.3.2-1.fc21 will be installed
---> Package xcb-util-image.x86_64 0:0.3.9-2.fc21 will be installed
---> Package xcb-util-keysyms.x86_64 0:0.3.9-2.fc21 will be installed
---> Package xcb-util-renderutil.x86_64 0:0.3.8-3.fc21 will be installed
---> Package xcb-util-wm.x86_64 0:0.4.1-2.fc21 will be installed
--> Running transaction check
---> Package qt5-qtxmlpatterns.x86_64 0:5.3.2-1.fc21 will be installed
--> Finished Dependency Resolution
 
Dependencies Resolved
 
================================================================================
 Package             Arch   Version          Repository                    Size
================================================================================
Installing:
 basic256            x86_64 1.1.4.0-9.1      /basic256-1.1.4.0-9.1.x86_64 1.8 M
Installing for dependencies:
 openal-soft         x86_64 1.15.1-2.fc21    fedora                       185 k
 qt5-qtbase          x86_64 5.3.2-4.fc21     updates                      2.9 M
 qt5-qtbase-gui      x86_64 5.3.2-4.fc21     updates                      4.8 M
 qt5-qtdeclarative   x86_64 5.3.2-1.fc21     updates                      2.8 M
 qt5-qtlocation      x86_64 5.3.2-1.fc21     updates                      166 k
 qt5-qtmultimedia    x86_64 5.3.2-1.fc21     updates                      685 k
 qt5-qtsensors       x86_64 5.3.2-1.fc21     updates                      194 k
 qt5-qtserialport    x86_64 5.3.2-1.fc21     updates                       60 k
 qt5-qtwebkit        x86_64 5.3.2-1.fc21     updates                       10 M
 qt5-qtxmlpatterns   x86_64 5.3.2-1.fc21     updates                      1.1 M
 xcb-util-image      x86_64 0.3.9-2.fc21     fedora                        13 k
 xcb-util-keysyms    x86_64 0.3.9-2.fc21     fedora                       9.5 k
 xcb-util-renderutil x86_64 0.3.8-3.fc21     fedora                        11 k
 xcb-util-wm         x86_64 0.4.1-2.fc21     updates                       23 k
 
Transaction Summary
================================================================================
Install  1 Package (+14 Dependent packages)
 
Total size: 25 M
Total download size: 23 M
Installed size: 80 M
Is this ok [y/d/N]: y
Downloading packages:
 
(1/14): openal-soft-1.15.1-2.fc21.x86_64.rpm               | 185 kB   00:00
(2/14): qt5-qtbase-5.3.2-4.fc21.x86_64.rpm                 | 2.9 MB   00:00
(3/14): qt5-qtbase-gui-5.3.2-4.fc21.x86_64.rpm             | 4.8 MB   00:00
(4/14): qt5-qtdeclarative-5.3.2-1.fc21.x86_64.rpm          | 2.8 MB   00:00
(5/14): qt5-qtlocation-5.3.2-1.fc21.x86_64.rpm             | 166 kB   00:00
(6/14): qt5-qtmultimedia-5.3.2-1.fc21.x86_64.rpm           | 685 kB   00:00
(7/14): qt5-qtsensors-5.3.2-1.fc21.x86_64.rpm              | 194 kB   00:00
(8/14): qt5-qtserialport-5.3.2-1.fc21.x86_64.rpm           |  60 kB   00:00
(9/14): qt5-qtwebkit-5.3.2-1.fc21.x86_64.rpm               |  10 MB   00:00
(10/14): qt5-qtxmlpatterns-5.3.2-1.fc21.x86_64.rpm         | 1.1 MB   00:00
(11/14): xcb-util-image-0.3.9-2.fc21.x86_64.rpm            |  13 kB   00:00
(12/14): xcb-util-keysyms-0.3.9-2.fc21.x86_64.rpm          | 9.5 kB   00:00
(13/14): xcb-util-renderutil-0.3.8-3.fc21.x86_64.rpm       |  11 kB   00:00
(14/14): xcb-util-wm-0.4.1-2.fc21.x86_64.rpm               |  23 kB   00:00
---------------------------------------------------------------------------
Total                                            13 MB/s |  23 MB     00:01
 
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : qt5-qtbase-5.3.2-4.fc21.x86_64                     1/15
  Installing : qt5-qtxmlpatterns-5.3.2-1.fc21.x86_64              2/15
  Installing : qt5-qtserialport-5.3.2-1.fc21.x86_64               3/15
  Installing : xcb-util-wm-0.4.1-2.fc21.x86_64                    4/15
  Installing : openal-soft-1.15.1-2.fc21.x86_64                   5/15
  Installing : xcb-util-keysyms-0.3.9-2.fc21.x86_64               6/15
  Installing : xcb-util-image-0.3.9-2.fc21.x86_64                 7/15
  Installing : xcb-util-renderutil-0.3.8-3.fc21.x86_64            8/15
  Installing : qt5-qtbase-gui-5.3.2-4.fc21.x86_64                 9/15
  Installing : qt5-qtdeclarative-5.3.2-1.fc21.x86_64             10/15
  Installing : qt5-qtlocation-5.3.2-1.fc21.x86_64                11/15
  Installing : qt5-qtsensors-5.3.2-1.fc21.x86_64                 12/15
  Installing : qt5-qtwebkit-5.3.2-1.fc21.x86_64                  13/15
  Installing : qt5-qtmultimedia-5.3.2-1.fc21.x86_64              14/15
  Installing : basic256-1.1.4.0-9.1.x86_64                       15/15
  Verifying  : xcb-util-renderutil-0.3.8-3.fc21.x86_64            1/15
  Verifying  : qt5-qtlocation-5.3.2-1.fc21.x86_64                 2/15
  Verifying  : basic256-1.1.4.0-9.1.x86_64                        3/15
  Verifying  : qt5-qtxmlpatterns-5.3.2-1.fc21.x86_64              4/15
  Verifying  : qt5-qtsensors-5.3.2-1.fc21.x86_64                  5/15
  Verifying  : qt5-qtdeclarative-5.3.2-1.fc21.x86_64              6/15
  Verifying  : qt5-qtbase-5.3.2-4.fc21.x86_64                     7/15
  Verifying  : xcb-util-image-0.3.9-2.fc21.x86_64                 8/15
  Verifying  : qt5-qtbase-gui-5.3.2-4.fc21.x86_64                 9/15
  Verifying  : qt5-qtserialport-5.3.2-1.fc21.x86_64              10/15
  Verifying  : xcb-util-keysyms-0.3.9-2.fc21.x86_64              11/15
  Verifying  : qt5-qtmultimedia-5.3.2-1.fc21.x86_64              12/15
  Verifying  : qt5-qtwebkit-5.3.2-1.fc21.x86_64                  13/15
  Verifying  : openal-soft-1.15.1-2.fc21.x86_64                  14/15
  Verifying  : xcb-util-wm-0.4.1-2.fc21.x86_64                   15/15
 
Installed:
  basic256-1.1.4.0-9.1.x86_64

Dependency Installed:
  openal-soft.x86_64 0:1.15.1-2.fc21         qt5-qtbase.x86_64 0:5.3.2-4.fc21
  qt5-qtbase-gui.x86_64 0:5.3.2-4.fc21       qt5-qtdeclarative.x86_64 0:5.3.2-1.fc21
  qt5-qtlocation.x86_64 0:5.3.2-1.fc21       qt5-qtmultimedia.x86_64 0:5.3.2-1.fc21
  qt5-qtsensors.x86_64 0:5.3.2-1.fc21        qt5-qtserialport.x86_64 0:5.3.2-1.fc21
  qt5-qtwebkit.x86_64 0:5.3.2-1.fc21         qt5-qtxmlpatterns.x86_64 0:5.3.2-1.fc21 
  xcb-util-image.x86_64 0:0.3.9-2.fc21       xcb-util-keysyms.x86_64 0:0.3.9-2.fc21
  xcb-util-renderutil.x86_64 0:0.3.8-3.fc21  xcb-util-wm.x86_64 0:0.4.1-2.fc21
 
Complete!

Poznámka – stejný balíček určený původně pro Fedoru 21 mi ve skutečnosti bez jakýchkoli problémů pracoval i v poněkud obstarožní Fedoře 19, protože nedošlo k zásadním změnám v požadovaných knihovnách.

17

Obrázek 17: Do bitmapy je možné vykreslit mřížku, což je velmi užitečné, neboť se tak zvýrazní souřadnicový systém.

8. Základní strukturované příkazy z Basicu-256

Basicu-256 jsou k dispozici prakticky všechny základní příkazy určené pro tvorbu strukturovaných programů složených z funkcí, subrutin (podprogramů), programových smyček a rozvětvení. Nalezneme zde i typicky BASICovou smyčku typu For-Next, která je podle mého názoru čitelnější, než podobně koncipovaná smyčka používaná v jazycích C, C++, Java či JavaScript. Podívejme se jen ve stručnosti na základní příklady:

i = 1
while i<1000
   print i
   i=i*2
end while
 
1
2
4
8
16
32
64
128
256
512
for i=10 to 0 step -2
   print i
next i
 
10
8
6
4
2
0
x=10
do
   print x
   x=x/2
until x<0.1
 
10
5
2.5
1.25
0.625
0.3125
0.15625
for i=0 to 20
   print i;
   if i % 2 =0 then
      print " sude"
   else
      print " liche"
   endif
next i
 
Zaciname
0 sude
1 liche
2 sude
3 liche
4 sude
5 liche
6 sude
7 liche
8 sude
9 liche
10 sude
11 liche
12 sude
13 liche
14 sude
15 liche
16 sude
17 liche
18 sude
19 liche
20 sude

18

Obrázek 18: Práce s rastrovou grafikou je v Basicu-256 skutečně snadná.

Kromě strukturovaných řídicích konstrukcí lze v Basicu-256 používat i (nechvalně) známé absolutní skoky, tj. příkazy typu GOTO a GOSUB), ovšem čísla řádků jsou nahrazena mnohem čitelnějšími textovými návěštími (label). Čísla řádků jsou považována za speciální typ návěští a jejich použití je doporučováno pouze při převodu starších programů do Basicu-256.

x: print "Old school style"
   goto x
 
Old school style
Old school style
Old school style
...
...
...

19

Obrázek 19: Zobrazení průběhu funkce.

9. Grafický výstup v Basicu-256

Vývojové prostředí Basicu-256 obsahuje kromě velmi jednoduchého textového editoru i možnost zobrazení okna s hodnotami proměnných a taktéž grafickou oblast, do níž je možné provádět vykreslování. Ostatně právě možnost práce s grafikou, i když jsou k dispozici pouze základní vykreslovací příkazy, je pro jazyk určený pro výuku programování nedocenitelná. Zajímavé je, že grafickou plochu je možné zvětšit a dokonce lze vykreslit i mřížku a zvýraznit tak obrázek složený z (větších) pixelů. Taktéž je podporována práce se sprity, což relativně snadným a pochopitelným způsobem studentům přibližuje techniku používanou v 2D hrách. Ostatně podívejme se na trojici demonstračních příkladů, v nichž jsou použity základní grafické příkazy pro vymazání obrazovky, vykreslení bodu a taktéž pro vykreslení úsečky:

20

Obrázek 20: Lissajousovy obrazce.

21

Obrázek 21: Pokud je vykreslování pomalé, je možné zakázat automatické obnovování bitmapy po každém příkazu; o obnovení se postará explicitně zavolaný příkaz refresh.

10. Odkazy na Internetu

  1. Seriál Letní škola programovacího jazyka Logo
    http://www.root.cz/serialy/letni-skola-programovaciho-jazyka-logo/
  2. Scratch: oficiální stránka projektu
    http://scratch.mit.edu/
  3. Scratch: galerie projektů vytvořených ve Scratch
    ihttp://scratch.mit.edu/galleries/browse/newest
  4. Scratch: nápověda
    file:///usr/share/scratch/Help/en/index.html
  5. Scratch: obrazovky nápovědy
    file:///usr/share/scratch/Help/en/allscreens.html
  6. Scratch (Wikipedie CZ)
    http://cs.wikipedia.org/wiki/Scratch
  7. Scratch (programming language)
    http://en.wikipedia.org/wiki/Scratch_(programming_language)
  8. Scratch Modification
    http://wiki.scratch.mit.edu/wiki/Scratch_Modification
  9. Scratch Lowers Resistance to Programming
    http://www.wired.com/gadgetlab/2009/03/scratch-lowers/
  10. Snap!
    http://snap.berkeley.edu/
  11. Prostředí Snap!
    http://snap.berkeley.edu/snapsource/snap.html
  12. Alternatives to Scratch
    http://wiki.scratch.mit.edu/wiki/Alternatives_to_Scratch
  13. Basic-256 home page
    http://www.basic256.org/index_en
  14. Basic-256 Language Documentation
    http://doc.basic256.org/doku.php
  15. Basic-256 Art Gallery
    http://www.basic256.org/artgallery
  16. Basic-256 Tutorial
    http://www.basic256.org/tutorials
  17. Why BASIC?
    http://www.basic256.org/whybasic
  18. A book to teach ANYBODY how to program a computer (using BASIC)
    http://www.basicbook.org/