Obsah
2. Instalace Squeaku a součásti jeho prostředí
3. Vývojové prostředí Squeaku a GUI Morphic
7. Obsah následující části seriálu
1. První kroky ve Squeaku
V úvodních dvou částech seriálu o programovacích jazycích vhodných pro výuku programování jsme se zmínili jak o dnes již „klasických“ výukových jazycích, jakým je kupříkladu Pascal či Logo (popř. o nových dialektech Loga, jakým je například NetLogo nebo Elica) a taktéž o těch programovacích jazycích, které se na školách používají teprve několik let (i když samotné jazyky mohou být mnohem starší). Příkladem jazyka patřícího do druhé skupiny je například Python, ke kterému v současnosti existuje celá řada integrovaných vývojových prostředí, z nichž některá jsou komerční, ale mnohem více jich je vyvíjených jako open source nástroje. Dnes a taktéž v několika následujících částech tohoto seriálu se seznámíme s programovacím jazykem Squeak, což je dialekt plně objektového programovacího jazyka Smalltalk-80, jenž je doplněný o komplexní vývojové prostředí založené na grafickém uživatelském rozhraní Morphic.

Obrázek 1: ERIC – jedno z mnoha vývojových prostředí určených pro psaní a ladění aplikací v Pythonu. V tomto prostředí lze plně využít reflexe jazyka Python (podobně jako je tomu ve Squeaku).
Squeak se v mnoha ohledech odlišuje od všech již popsaných či alespoň letmo zmíněných programovacích jazyků, takže si v dnešním článku některé jeho zajímavé vlastnosti popíšeme. Taktéž si popíšeme základní ovládací prvky, pomocí nichž je možné ve Squeaku vytvářet vlastní objekty, posílat jim zprávy či tyto objekty testovat. Mimo dalších informací se taktéž zmíníme o základním mechanismu, který ve Squeaku zajišťuje komunikaci mezi objekty – jedná se o takzvané „posílání zpráv“, které se sice podobá volání metod známému například z C++ či Javy, ovšem posílání zpráv je poněkud obecnější mechanismus.

Obrázek 2: Ukázka grafického uživatelského rozhraní Squeaku.
2. Instalace Squeaku a součásti jeho prostředí
Squeak je možné na mnoha distribucích Linuxu nainstalovat přímo pomocí nástrojů použitého balíčkovacího systému, ovšem v případě, že balíček s tímto jazykem není dostupný, nebo není dostupná poslední verze jazyka (konkrétně se jedná o verzi 4.1), lze si ze stránek http://www.squeak.org/ všechny potřebné soubory stáhnout a nainstalovat ručně, což není díky poněkud netradiční architektuře Squeaku vlastně vůbec nic složitého. Typická instalace Squeaku se skládá ze čtyř částí. První částí je virtuální stroj, který zajišťuje přenositelnost obrazu Sqeaku (viz další odstavec) na různé platformy. Většinou se jedná o spustitelný soubor doplněný o několik pomocných knihoven. Virtuální stroj je jediná část Squeaku, která se na jednotlivých platformách odlišuje. Dále se v instalaci Squeaku nachází soubor SqueakV_verze_.sources obsahující, jak již ostatně jeho název napovídá, zdrojové kódy všech tříd. Jedná se o jediný soubor, který je dnes již velmi rozsáhlý (cca 25 MB), ovšem tato velikost není podstatná, protože se ručně needituje.
Třetí částí instalace Squeaku je soubor nazvaný SqueakV_verze_.changes, jenž obsahuje změny oproti výše popsanému souboru se zdrojovými kódy všech tříd. Poslední částí instalace je jeden či více souborů s koncovkou .image, které obsahují stav všech objektů v systému (třídy a metody jsou též objekty, takže i jejich stav je zde zaznamenán). Obrazy systému (protože se skutečně nejedná o nic jiného, než o zakonzervovaný stav celého Squeaku) jsou uloženy jako binární data, na rozdíl od textového souboru se zdrojovými kódy a souboru se změnami. Důležité je, že jak samotný virtuální stroj, tak i soubor SqueakV_verze_.sources, jsou neměnné, tj. mohou být na disku uloženy pouze jedenkrát (ideálně s nastavenými právy pouze pro čtení) a sdílené mezi více uživateli. Z technologického hlediska je zajímavé, že soubory s obrazy systému obsahují stavy objektů, z nichž některé byly vytvořeny (myšleno je zde vytvoření jejich instance) již před více než 20 lety, takže lze Squeak považovat za jeden z nejdéle běžících systémů vůbec (jinými slovy – Squeak se nerestartuje, pouze hibernuje a opětovně probouzí, a to mnohdy na zcela odlišné platformě).
3. Vývojové prostředí Squeaku a GUI Morphic
Již v úvodní kapitole jsme si řekli, že Squeak používá vývojové prostředí s přenositelným a na všech platformách prakticky shodným grafickým uživatelským rozhraním Morphic (mimochodem, jedná se o projekt, který vznikl pro potřeby jazyka Self a posléze byl upraven pro Squeak). Vývojové prostředí se ovládá kombinací klávesnice a myši, což není nic překvapivého, protože moderní GUI vzniklo právě ve Smalltalku. Ve Squeaku je využito všech tří tlačítek myši (prostřední tlačítko lze v případě potřeby emulovat). V dokumentaci a nápovědě se jednotlivá tlačítka nepopisují podle toho, kde jsou na myši umístěna (tj. slovy pravé, levé, prostřední), ale barvami – je to ostatně logické, když si uvědomíme, že například na počítači nakonfigurovaném pro leváky, je funkce pravého a levého tlačítka prohozena.

Obrázek 3: Vývojové prostředí Squeaku s jedním otevřeným oknem a trojicí minimalizovaných oken.
Na většině počítačů je levé tlačítko myši totožné s červeným tlačítkem, pravé tlačítko s modrým tlačítkem a konečně prostřední tlačítko se žlutým tlačítkem. Většina ovládacích prvků je ve Squeaku sdružena v oknech, které je možné pomocí čtveřice ikon (viz třetí obrázek) zavřít, maximalizovat, minimalizovat atd. Navíc je možné stiskem modrého tlačítka myši (tj. dnes většinou scrollovacího kolečka) zobrazit kolem téměř jakéhokoli okna sadu ikon umožňujících s oknem provádět mnoho dalších operací. Zajímavá, i když popravdě řečeno nepříliš užitečná funkce (s příchodem smartphonů se užitečnost této funkce zvyšuje) se skrývá například pod modrou ikonou zobrazenou vlevo dole. S pomocí této ikony lze okno libovolným způsobem natočit. Další zajímavou funkcí je duplikace okna (ikona vpravo nahoře), která interně skutečně vede k duplikaci objektu, který okno představuje.

Obrázek 4: Zobrazení sady ikon okolo okna při stlačení modrého tlačítka myši, tj. většinou prostředního tlačítka popř. scrollovacího kolečka.

Obrázek 5: Natočení okna posunem modré ikony zobrazené vlevo dole pod oknem.
4. Okno „Workspace“
Nedílnou součástí vývojového prostředí Sqeaku jsou i různá kontextová menu. Ta mají dvě důležité vlastnosti – většinou se jedná o nemodální menu, takže mohou být zobrazena na obrazovce jako formulář či nemodální dialog a z „grafického“ hlediska se menu chovají podobně jako další okna, tj. lze jimi například otáčet nebo je lze klonovat. Velmi důležité je kontextové menu plochy celého prostředí, které se příhodně nazývá World menu. Toto menu lze zobrazit klikem levého (červeného) tlačítka myši na pracovní plochu prostředí – viz též šestý obrázek.

Obrázek 6: World menu zobrazené po stisku červeného (levého) tlačítka myši na ploše Squeaku.
Z tohoto menu lze mj. otevírat i různá důležitá okna, mezi jinými i okno Workspace. V tomto okně je možné provádět poměrně velké množství operací, především posílat zprávy různým objektům, zkoumat atributy těchto objektů, jejich metody (přesněji řečeno přes kontextové menu či klávesové zkratky otevírat příslušná okna) atd. V následujících kapitolách si některé operace, jenž lze provádět s využitím okna Workspace ukážeme.

Obrázek 7: Okno Workspace zobrazené přes příkaz vyvolaný z World menu.
5. Poslání zprávy objektu
Jednou ze základních operací, kterou je možné v okně Workspace provádět, je posílání zpráv různým objektům, ať již se jedná o objekty vytvořené samotným uživatelem nebo o objekty systémové (ostatně právě tímto způsobem je možné měnit chování celého prostředí, protože vše je zde objektem). Na obrázcích 8 až 10 je ukázán typický, i když současně i velmi jednoduchý příklad, jakým způsobem je možné poslat zprávu některému objektu a zobrazit výsledek, což je další objekt. Pokud do okna Workspace zapíšeme řetězec „6 * 7“ (bez uvozovek), je tento text Squeakem chápán jako poslání zprávy * s jedním parametrem (7) objektu 6. Ve Squeaku jsou totiž i celá čísla, podobně jako například čísla reálná či pravdivostní hodnoty, plnohodnotnými objekty, jimž lze posílat různé typy zpráv s různými parametry, nebo i zprávy bez parametrů, například 42 factorial.

Obrázek 8: Jednoduchý příkaz (poslání zprávy objektu 6) zapsaný v okně Workspace.
V jiných objektově orientovaných jazycích by se zápis „6 * 7“ nejspíše zapsal takto: „6.multiply(7)“, samozřejmě jen za předpokladu, že by v takovém jazyce byla čísla chápána jako plnohodnotné objekty, což s sebou přináší mnoho předností. O posílání zpráv si řekneme podrobnější informace až v následující části tohoto seriálu, nyní se vraťme k oknu Workspace. Pokud se má zpráva skutečně poslat a my budeme chtít zobrazit objekt, který může (ale nemusí) být výsledkem poslání této zprávy, lze pro tento účel použít příkaz print it dostupný z kontextového menu. Ovšem vzhledem k tomu, že se tento příkaz používá poměrně často, byla pro něj vytvořena i klávesová zkratka CTRL+p (malé „p“).

Obrázek 9: Výpis výsledku operace poslání zprávy pomocí příkazu „print it“.
Po provedení tohoto příkazu se výsledek zobrazí opět do okna Workspace, popř. se zde taktéž mohou zobrazit různá chybová hlášení.

Obrázek 10: Výsledek se zobrazil v okně Workspace.
6. Okno „Transcript“
Dalším důležitým oknem, které lze při programování použít, je okno Transcript. Toto okno si můžeme poněkud zjednodušeně představit jako standardní terminálový výstup, do nějž mohou různé procesy (či přesněji řečeno vlákna) zapisovat libovolné informace. Toto okno lze taktéž zobrazit přes kontextové World menu. Okno Transcript je (poněkud překvapivě :-) reprezentováno objektem Transcript, jemuž lze posílat různé zprávy. My si ukážeme typický příklad – vypsání řetězce zajištěného zprávou show: s jedním parametrem. Příkaz, který zajistí výpis řetězce, je ukázán na obrázku číslo 11.

Obrázek 11: Příkaz pro poslání zprávy objektu Transcript.
Poslání zprávy lze provést příkazem do it z kontextového menu, popř. klávesovou zkratkou CTRL+d (opět je zde použito malé písmeno!). Řetězec, který je předaný jako parametr zprávy, je skutečně vypsán do okna Transcript, o čemž se lze snadno přesvědčit (okno však musí být nejdříve otevřené, aby se v něm text zobrazil). Proč však používáme příkaz do it namísto již popsaného příkazu print it? I ten je samozřejmě možné použít, ovšem při jeho zavolání je do okna Workspace vypsán objekt navrácený po zavolání zprávy (v tomto případě se jedná o samotný výstupní proud).

Obrázek 12: Zavolání příkazu do it.

Obrázek 13: Okno Transcript po zavolání zprávy Transcript show: ‚řetězec‘.
7. Obsah následující části seriálu
V následující části seriálu o programovacích jazycích vhodných pro výuku programování si popíšeme další tři okna používaná při vývoji ve Squeaku. Jedná se o okna nazvaná Inspector, Object a především o velmi často využívané okno System Browser. Ovšem největší rozsah textu bude věnován samotné syntaxi a sémantice Squeaku. Řekneme si, které tři typy zpráv je možné v tomto programovacím jazyku používat při komunikaci mezi objekty, význam jeho klíčových slov (to je jednoduché, protože jich je jenom šest :-) a taktéž se zmíníme o tom, jakým způsobem je možné tvořit bloky kódu, podmínky a programové smyčky. Zajímavé je, že ve Squeaku jakožto plně objektově orientovaném programovacím jazyce, nejsou podmínky ani programové smyčky řešeny formou klíčových slov či speciálních syntaktických kategorií, ale „pouze“ posíláním zpráv s parametry vhodným objektům.

Obrázek 14: Zkoumání vlastností objektu.

Obrázek 15: Zkoumání vlastností objektu (zde jeho hodnoty).

Obrázek 16: System Browser.
8. Odkazy na Internetu
- Squeak home page
http://www.squeak.org/ - XO: The Children's Machine
http://wiki.laptop.org/go/The_Children's_Machine - Squeak na Wikipedii EN
http://en.wikipedia.org/wiki/Squeak - Squeak na Wikipedii CZ
http://cs.wikipedia.org/wiki/Squeak - Squeak by Example
http://squeakbyexample.org/ - Squeak Land
http://www.squeakland.org/ - SqueakNotes
http://squeak.zwiki.org/SqueakNotes - Squeak FAQ
http://wiki.squeak.org/squeak/471 - Learning Squeak
http://c2.com/cgi/wiki?LearningSqueak - Scratch home page
http://scratch.mit.edu/ - Scratch (programming language)
http://en.wikipedia.org/wiki/Scratch_(programming_language) - Lazarus (Software)
http://en.wikipedia.org/wiki/Lazarus_%28software%29 - FreePascal
http://www.freepascal.org/ - „Why I Love Python“ slides
http://www.mindviewinc.com/downloads/pub/eckel/LovePython.zip - „Why I love Python“ (presentation)
http://www.slideshare.net/didip/why-i-love-python - První jazyk: Python
http://macek.sandbox.cz/texty/prvni-jazyk-python/ - Programovací jazyk Python
http://www.py.cz/FrontPage - Python – Wikipedia CS
http://cs.wikipedia.org/wiki/Python - IPython
http://en.wikipedia.org/wiki/Ipython - IPython: an interactive computing environment
http://ipython.scipy.org/moin/ - Category:Python
http://rosettacode.org/wiki/Category:Python - Educational programming language
http://en.wikipedia.org/wiki/Educational_programming_language - Seriál Letní škola programovacího jazyka Logo
http://www.root.cz/serialy/letni-skola-programovaciho-jazyka-logo/ - Logo Tree Project:
http://www.elica.net/download/papers/LogoTreeProject.pdf - Language Poster (O'Reilly):
http://www.oreilly.com/news/graphics/prog_lang_poster.pdf - Informace o Comenius Logu:
http://www.comlogo.input.sk/index.html - Stránka nabízející stažení Comenius Loga:
http://www.comlogo.input.sk/nastiahnutie.html - Seminární práce o Comenius Logu:
http://nwit.pedf.cuni.cz/rotal9ap/logo/ - Informace o LEGO/Logu:
http://education.otago.ac.nz/nzlnet/Logo/legologo.html - Informace o systému Elica:
http://www.elica.net/site/index.html - Informace o systému NetLogo:
http://ccl.northwestern.edu/netlogo/ - Stažení NetLoga:
http://ccl.northwestern.edu/netlogo/download.shtml - Uživatelský manuál NetLoga ve formátu PDF:
http://ccl.northwestern.edu/netlogo/docs/NetLogo%20User%20Manual.pdf - NetLogo FAQ:
http://ccl.northwestern.edu/netlogo/docs/faq.html - Domácí stránka Daniela Azumy (autora implementace Turtle Tracks):
http://alumnus.caltech.edu/~dazuma/home/ - Informace o aUCBLogu:
http://www.physik.uni-augsburg.de/~micheler/ - Domácí stránka MSW Loga:
http://www.softronix.com/logo.html - Karel online
http://karel.oldium.net/ - EDU-SIG: Python in Education
http://www.python.org/community/sigs/current/edu-sig/ - Guido van Robot
http://en.wikipedia.org/wiki/Guido_van_Robot - The Guido van Robot Programming Language
http://gvr.sourceforge.net/ - An Introduction to Programming with Karel J. Robot
http://blog.thingoid.com/2003/10/karel-intro/ - Teaching a young robot new tricks
http://blog.thingoid.com/2003/11/karel-new-tricks/ - Karel and Company – More Robots
http://blog.thingoid.com/2003/12/karel-and-company/ - Karel heads for the stars
http://blog.thingoid.com/2004/03/karel-star/ - Karel programming language documentation
http://mormegil.wz.cz/prog/karel/prog_doc.htm - Karel J. Robot
http://www.mainlandregional.net/dklipp/Honors%20Computer%20Science%20Java.htm - Karel (programming language)
http://en.wikipedia.org/wiki/Karel_(programming_language) - Richard E. Pattis
http://en.wikipedia.org/wiki/Richard_E._Pattis - XKarel home page
http://xkarel.sourceforge.net/eng/ - KKarel – screenshoty oken
http://xkarel.sourceforge.net/eng/program.php#Okna - Greenfoot
http://www.greenfoot.org/about/whatis.html - Computer programming – Educational programming languages
http://www.kidslike.info/computer_programming_educational_programming_languages - Making Great Programmers: Why BASIC is Still Relevant
http://kidbasic.sourceforge.net/en/why.html - Gambas Wiki
http://en.wikibooks.org/wiki/Gambas - Free tool offers ‚easy‘ coding
http://news.bbc.co.uk/2/hi/technology/6647011.stm - Scratch Lowers Resistance to Programming
http://www.wired.com/gadgetlab/2009/03/scratch-lowers/ - Základy želví grafiky
http://www.root.cz/clanky/zaklady-zelvi-grafiky/ - Bill Kendrick's Web Turtle
http://www.sonic.net/~nbs/webturtle/