František Fuka: 95 procent všeho dělám v jazyce Lua

František Fuka

V čem dnes programuje František Fuka aka Fuxoft? Čím se zabývá? Kdy prvně přišel do styku s počítači? Proč a jak začal programovat? Jaké počítačové hry hraje? Co se mu líbí na Googlu? Na to vše najdete odpovědi v dnešním rozhovoru.

Zabýváte se řadou činností. Jste filmový recenzent, překladatel, publicista, skladatel (a určitě jsem něco vynechal). Jak moc se dnes zabýváte programováním? Je to jedna z vašich hlavních činností, nebo se jedná spíš o okrajovou záležitost?

Programováním se dnes zabývám jednak pro zábavu a pro své potřeby, a jednak v rámci své práce. Nepracuji ale jako programátor, nýbrž jako „návrhář interaktivních scénářů a herních algoritmů“, nebo něco takového, a je pro mě jednodušší vytvořit funkční program a okomentovat ho, než psát elaborát o tom, jak má který algoritmus nebo konverzace fungovat.

Můžete uvést příklady něčeho, co jste v nedávné době navrhoval? V jakých hrách se s vaší prací můžeme setkat?

Nemohu. Jednak to jsou webové a mobilní aplikace, zaměřené především na zahraniční uživatele, a kromě toho jsem vázán mlčenlivostí. Jenom napíšu, že naprostá většina vašich čtenářů nejenže je nikdy nehrála, ale pravděpodobně ani neví o jejich existenci.

Programoval jsem si utilitky pro vlastní potřebu (například program pro titulkování filmů pro kina) a webové drobnosti jako různé filmové stránky nebo automaticky updatovaný webkalendář filmových premiér, ale opravdu nic zásadního, co by bylo veřejné a o čem bych směl mluvit. Možná snad… Dělal jsem 3D znělku a hudbu pro filmovou společnost Bioscop. :)

František Fuka

František Fuka (1968)

  • Proslul jako programátor počítačových her pro ZX Spectrum (Tetris 2, Podraz 3, série textovek Indiana Jones a další).
  • Je autorem několika knih o počítačových hrách.
  • Vystupuje v pořadu Odvážné palce na Rádiu 1.
  • Překládá titulky k filmům (Hvězdné války, Indiana Jones, South Park aj.).
  • Píše filmové recenze na blogu FFFILM.

Kdy jste začal programovat? Čím vás programování a počítače obecně tenkrát zaujaly?

Myslím, že poprvé jsem přišel do styku s ruským počítačem někdy na počátku 80. let na nějaké výstavě. Nějací studenti na něm naprogramovali přistání na Měsíci (textové, bez grafiky) a mně to přišlo jako úplně úžasná věc. Pak jsem viděl první videohry (ty černobílé, ještě před Pacmanem) a přišlo mi to ještě úžasnější, takže jsem se začal strýčka (který studoval ČVUT) vyptávat, kde bych se tomuhle mohl věnovat. A strýček mi občas půjčil programovatelnou kalkulačku, zavedl mě do Městské stanice mladých techniků, a když emigroval do USA, poslal mi první počítač.

Vzpomenete si ještě, jaký byl váš první programovací jazyk?

Ten, ve kterém se programovala kalkulačka TI-58 (myslím, že se nijak nejmenoval).

A jaký programovací jazyk (jaké programovací jazyky) preferujete dnes?

95 procent všeho dělám v jazyce Lua (pro mě nejlepší pro rychlý prototyping, ale i pro složitější věci – je to de facto „metajazyk“) a chtěl bych se pořádně naučit Haskell, ale pravděpodobně mi z toho vybouchne hlava.

František Fuka

Mladý František Fuka popisuje svůj program (viz video z roku 1982)

Lua nepatří zrovna mezi příliš rozšířené jazyky, i když v herním světě tento jazyk poměrně zdomácněl. Ovšem pokud vím, vy jej používáte i jinde, např. k tvorbě webových aplikací. To mě dost překvapilo (jste pravděpodobně první vývojář webových aplikací v Lua, kterého znám). Proč zrovna Lua? A proč i na webové aplikace? Proč raději nezvolíte klasiku (PHP, Javu…)? Nebylo by to snazší?

To bude na delší odpověď. Především: Zkoušel jsem v životě opravdu desítky různých programovacích jazyků, včetně „bizarních“ věcí jako Forth, Prolog, Smalltalk, Erlang… Samozřejmě i Javu a C/C++. Bohužel, oba naposledy zmíněné jazyky (v reálném programátorském světě pravděpodobně nejpoužívanější) mi jsou extrémně nesympatické a je mi krajně nepříjemné v nich dělat. Programoval jsem v životě opravdu hodně a nesnáším, když musím při různých projektech psát znovu dokola stejné kusy kódu. Mé programy jsou velice kompaktní a většinu času při programování věnuji jejich refactoringu.

Naštěstí se nacházím v pozici, kdy si mohu sám zvolit, jak a v čem budu programovat a nejsem závislý na preferencích „zbytku týmu“ nebo na předinstalovaných serverech. Kromě toho raději programuji, než studuji dokumentaci. Znamená to, že je pro mě snazší a příjemnější napsat si pětikilovou vlastní knihovnu, než nainstalovat si cizí knihovnu a pak studovat její dokumentaci, abych zjistil, jak se používají ty tři funkce, které mě v ní zajímají. Kromě toho dělám na spoustě různých menších projektů, z nichž každý má jiné požadavky a teoreticky by se pro každý z nich hodil jiný jazyk.

František Fuka

Lua je pro mě zajímavá tím, že má jen velmi málo příkazů a všechno ostatní si v ní můžete naprogramovat sami. Kromě čísel, stringů atd. má pouze jednu velmi obecnou složitější strukturu „hash tabulka“ a jejím prostřednictvím je implementováno všechno. Respektive vy si to můžete implementovat tak, jak chcete. Tzn. při každém projektu si Luu upravím tak, abych z ní udělal ten jazyk, který pro daný projekt potřebuji. Nadefinuji si, jak v ní mají fungovat objekty a dědičnost, jak má fungovat systém modulů, jak má fungovat perzistence dat, jak se mají zpracovávat chyby, jak mají fungovat lokální a globální proměnné, udělám si nějakou jednoduchou vlastní databázi… To všechno v čisté Lue, která je mimochodem velice rychlá a paměťově úsporná.

Samozřejmě, že se při různých projektech různé věci opakují, a že mám nějaké své vlastní knihovny, které používám znovu a znovu. Ale je zajímavé, že téměř při každém projektu například používám trochu jiný systém serializace objektů na disk, protože pro každý projekt je ideální, aby to fungovalo trošičku jinak.

Lua je, řekl bych, něco mezi Smalltalkem a Pythonem, ale je navržena „znovu od nuly“, aby v ní bylo jen to, co je nejnutnější, a co vám umožní napsat si zbytek. Veškerá data i program samotný (program samotný jsou de facto jen tabulky obsahující funkce) jsou plně manipulovatelné za běhu programu, takže věci jako dynamická kompilace nebo program měnící sám sebe jsou v Lue naprosto triviální a zcela běžně používané (tzn. nejsou to nějaké šílené hacky). A při programování je velice vzácné, abych se díval do dokumentace Luy, protože je střídmá a mám ji téměř celou v hlavě.

ČTĚTE K TÉMATU: S jazykem Lua se můžete seznámit v právě probíhajícím seriálu Pavla Tišnovského.

V PHP jsem dělal samozřejmě dávno před Luou a templatovací systém, ve kterém jedou mé stránky fuxoft.cz, byl původně napsaný v PHP. Přepsal jsem ho do Luy jako své první cvičení, když jsem s ní začínal, takže v tomto případě ten kód nevypadá příliš hezky (viz fftempl.google­code.com). I po několikaleté práci v PHP jsem měl neustále problém s tím, že jsem si říkal „OK, teď potřebuju funkci, která umí toto. Je v PHP? Myslím, že jo. Ale jak se jmenovala? Jak se používá? Kuk do dokumentace a hledat… Aha, ona nedělá přesně to, co potřebuju. Tak to trošku ohackuju po svém…“ Kdežto v Lue si prostě tu funkci radši napíšu sám, poběží mi dostatečně rychle, a vím přesně, jak a proč funguje.

Samozřejmě, to všechno můžu dělat jen proto, že málokdy potřebuji opravdu složité funkce jako „vyrenderuj 3D obrázek“ nebo „dekomprimuj MP3 soubor“. V případě těchto složitějších funkcí si ale často vypomůžu prostou příkazovou řádkou. Takže například když potřebuji nějaký svůj unikátní webserver, napíšu jednořádkový skript „tcpsvd -vv -E -c 1 0 80 serve.lua“ a je vymalováno…

Jak řešíte hosting?

Co se týče hostingu, mám vlastní server (míněno „fyzický kus hardwaru“), na kterém si mohu instalovat, co chci. Považuji za bezpečnější a zábavnější nainstalovat si tam Luu a v ní si napsat desetikilový webserver, který dělá přesně to, co potřebuju, než si tam instalovat několikamegový PHP framework a zjišťovat, jak se konfiguruje.

Abych nebyl obviněn ze lži: Mám na serveru Apache, ale z něho volám cgi skript v Lue, který se stará o generování stránek z templatů. Webserver napsaný kompletně v Lue tam je taky, ale není přístupný veřejnosti (běží na něm nějaká pracovní dema).

Z vašeho povídání mám pocit, že se vám Lua líbí hlavně proto, že se nerad podřizujete nějakým pravidlům a raději si věci zařizujete podle sebe. Je to vaše vlastnost coby programátora, nebo bychom takto mohli charakterizovat celou osobnost Františka Fuky?

Ano, na tom něco bude. Jsem schopen pracovat, když se mi exaktně definují mantinely a pak se mi nechá volná ruka. Nejsem moc schopen prezentovat někomu své průběžné úvahy, a když na něčem dělám, nevím předem, jak to nakonec udělám. To souvisí s tím, že jsem v celém svém životě byl v trvalém pracovním poměru asi rok a bylo to pro mě nesnesitelné.

Máte nějaké oblíbené vývojové prostředí? Nebo používáte klasické editory (Vim, Emacs)?

Používám textový editor Scite a vývojové prostředí si napíšu pro konkrétní projekt podle potřeby. Vím, že Vim a Emacs by teoreticky pro mě měly být to pravé, ale přes opakované pokusy jsem nebyl schopen si na ně zvyknout…

František Fuka

František Fuka jako mladý programátor popisuje, k čemu lze použít počítač (viz video).

Pokud vím, nemáte žádné programátorské vzdělání, řadu věcí jste se naučil sám. Neměl jste někdy pocit, že vám to chybí? Neříkal jste si, že by vám pomohl semestr, dva nějakého předmětu?

Veškeré programování jsem se naučil buď z knížek a manuálů nebo od přátel (v době kdy ještě nebyl Internet). Vůbec si nedokážu představit, k čemu může být dobrá výuka programování ve škole někomu, kdo umí anglicky a má Internet…

Jste znám jako autor několika počítačových her. Můžu jmenovat Tetris 2, Podraz 3 nebo sadu textovek Indiana Jones. Proč jste začal tvořit právě hry a ne něco užitečného (účetnictví, textový procesor apod.)?

Za prvé: Začal jsem se věnovat programování právě kvůli hrám. Za druhé: Kalkulačka TI-58 měla myslím méně než 1 KB paměti a programy se nedaly ukládat, můj první počítač (VIC 20) měl 3,5 KB paměti a programy se ukládaly na magnetofon. Co „užitečného“ by se v tom asi dalo udělat? Nemluvě o tom, že na počátku 80. let jsem si vůbec nedokázal představit, co by to mohlo být „počítačové účetnictví“ nebo „textový procesor“. Chodil jsem na základní školu!

Hra Podraz 3

Načítací obrazovka hry Podraz 3 (viz video).

Krom toho, že jste hry programoval, jste o nich napsal i několik knih. Předpokládám, že jste byl jejich vášnivý hráč. Hrajete počítačové hry ještě dnes? A pokud ano, tak co právě „paří“ František Fuka?

Ano, mám všechna Nintenda (tedy skoro všechna) a všechny PlayStationy. Na PC si téměř nehraju (a nemám na žádném svém počítači Windows, všude Linux, takže mě aktuální PC hry zcela míjejí a jak se tak občas koukám na různá herní videa, moc toho nelituju). Teď právě nejvíc času marním při Dynasty Warriors 6 na PlayStationu 3 a Rittai Picross na Nintendu DS.

Spustíte si ještě čas od času z nostalgie ZX Spectrum? Máte ho ještě?

ZX Spectrum nemám. Prodal jsem ho už velmi dávno (snad před 20 lety) člověku, který mi za něj zaplatil na tehdejší dobu úžasné peníze s tím, že si ho vystaví někde ve vitríně. Jestli to opravdu udělal, to netuším. Nosím s sebou Nintendo DS, ve kterém mám ZX emulátor.

Pravidelně vás vídávám na akcích týkajících se Googlu. V čem je vám Google sympatický?

Tím, že dokáže vymýšlet revoluční věci v oblasti internetových služeb a že je dost bohatý na to, aby je protlačil do praxe. A ještě je tady jedna velice důležitá věc: Kdyby Google dnes oznámil, že za měsíc začnou být jeho služby placené, nebo kdyby udělal cokoliv jiného, co by se neslučovalo s tím, abych nadále jeho služeb používal, během pár hodin jsem schopen všechna svá data z Googlu vyimportovat / downloadovat na svůj disk a tudíž o ně nepřijít, když si všechno budu stěhovat na svůj vlastní server.

Tohle je pro mě velice důležité a stále si průběžně kontroluji, jestli to ještě pořád platí. Trochu smutný jsem jen z toho, že Google staví spoustu svých projektů na JavaScriptu, který je mi jen o málo sympatičtější než Java. :)

Jak moc jeho technologie využíváte?

Dalo by se říct, že využívám snad všechny služby, které Google nabízí. E-mail, Chat, Wiki (Google Sites), Docs, Maps, Blogger, mám Android telefon… Mám ke svým datům přístup odkudkoliv a měl bych k nim nadále přístup, i kdyby mi najednou shořel hlavní počítač. Nemluvě o tom, že kdyby mi někdo ukradl telefon, tak si koupím nový a nepřijdu o žádné kontakty, telefonní čísla, adresy… To mi přijde jako extrémně praktické. Nepoužívám pouze PicasaWeb, protože neumožňuje neomezený upload fotografií (ani za peníze). Takže fotky mám pořád ještě na Flickru.

Dáváte přednost Linuxu, i když váš přechod na Linux neprobíhal zrovna hladce. Proč zrovna Linux? Vypadá to na doživotní volbu, nebo míváte chuť na změnu?

Odjakživa mě zajímalo, co přesně se uvnitř počítače děje a chtěl jsem to mít plně pod kontrolou. V mládí jsem si četl výpisy ROM ZX Spectra a Amigy, a byl to blažený pocit. Něco podobného s Windows nepřipadá v úvahu. Linux pro mě je přinejmenším stejně použitelný jako Windows, a vzhledem k tomu, že je na rozdíl od Windows zadarmo a na rozdíl od Windows se v něm nestává, že někdo jiný rozhoduje o tom, jak můžu používat soubory na svém harddisku, tak není vůbec co řešit.

Jediná změna, která by připadala v úvahu, je přechod z „uživatelsky přátelského“ Ubuntu na něco víc hardcore, ale zatím nevidím důvod. Jediný důvod, proč mám na disku Windows XP (pod VMWare), je ten, že v Linuxu neexistuje tak dobrý hudební program jako FL Studio.

Máte podobnou potřebu ještě dnes? Myslím to s čtením výpisů ROM. Nahlížíte do zdrojáků linuxového jádra?

Nemám, protože linuxové jádro je psané převážně v C, a dle mého názoru v C nelze psát hezké / elegantní / zajímavé programy. To jde buď ve vyšších jazycích, nebo naopak v těch nižších (Forth, Assembler). Píšu ale vlastní operační systém pro speciální kus hardware, který se možná začne za pár měsíců vyrábět (až k tomu dojde, nebude to tajné a dozvíte se to, ale teď vám víc neřeknu). A píšu ho především v Lue. :)

Děkuji za rozhovor.

Otázky za Zdroják kladl Martin Hassman. Fotografie poskytl František Fuka.

Vystudoval jsem biochemii. Vymyslel jsem a založil Zdroják. Jsem vyhlášeným expertem na likvidaci komentářů.

Nejsem váš hodný tatínek, který vás bude brát za ručičku, já jsem zlý moderátor diskusí. Smiřte se s tím!

Komentáře: 64

Přehled komentářů

- Re: František Fuka: 95 procent všeho dělám v jazyce Lua
povinná Re: Re: František Fuka: 95 procent všeho dělám v jazyce Lua
suxi Re: Re: Re: František Fuka: 95 procent všeho dělám v jazyce Lua
Fuxoft Re: Re: František Fuka: 95 procent všeho dělám v jazyce Lua
nigol Re: Re: Re: František Fuka: 95 procent všeho dělám v jazyce Lua
SB Re: Re: Re: Re: František Fuka: 95 procent všeho dělám v jazyce Lua
PrymekM Re: Re: Re: František Fuka: 95 procent všeho dělám v jazyce Lua
Jura Fuka
gp dotaz java / C++
tlp Re: dotaz java / C++
Bubak udrzba
Petr Re: udrzba
povinná Re: Re: udrzba
arnolt "za čtyřicet let"?
povinná Re: "za čtyřicet let"?
povinná Re: udrzba
neregistrovatelný Re: Re: udrzba
povinná Re: Re: Re: udrzba
bubak Re: Re: udrzba
povinná Re: Re: Re: udrzba
bubak Re: Re: Re: Re: udrzba
- Re: Re: Re: Re: Re: udrzba
Fuxoft Re: Re: Re: udrzba
pas Re: Re: Re: Re: udrzba
povinná Re: Re: Re: Re: Re: udrzba
pas Re: Re: Re: Re: Re: Re: udrzba
Viky Re: Re: Re: Re: Re: Re: Re: udrzba
pas Re: Re: Re: Re: Re: Re: Re: Re: udrzba
Viky Re: Re: Re: Re: Re: Re: Re: Re: Re: udrzba
pas Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: udrzba
povinná Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: udrzba
pas Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: udrzba
Inkvizitor Re: Re: Re: Re: Re: Re: Re: Re: udrzba
povinná Re: Re: Re: Re: udrzba
pas Re: Re: udrzba
povinná Re: Re: Re: udrzba
Viky Re: Re: udrzba
povinná Re: Re: Re: udrzba
Viky Re: Re: Re: Re: udrzba
povinná Re: Re: Re: Re: Re: udrzba
JS Re: udrzba
povinná Re: Re: udrzba
povinná Re: Re: Re: udrzba
JS Re: Re: Re: udrzba
Petr Co to je?
povinná Re: Co to je?
gilhad Re: Co to je?
pasta Re: Co to je?
povinná Re: Co to je?
Inkvizitor Re: Co to je?
povinná Re: Co to je?
meriu@pobox.sk Re: Co to je?
Lamicz To je uplne jednoduchy...
marte Re: František Fuka: 95 procent všeho dělám v jazyce Lua
povinná Re: František Fuka: 95 procent všeho dělám v jazyce Lua
marte Re: František Fuka: 95 procent všeho dělám v jazyce Lua
I/O Re: František Fuka: 95 procent všeho dělám v jazyce Lua
fanoush samorost :-)
youngster programátoři
marte Re: programátoři
I/O Re: programátoři
povinná Re: programátoři
Jan Deak (Bytepack software) Najhoršie jazyky majú príkaz GOTO :-)
meriu@pobox.sk Re: Najhoršie jazyky majú príkaz GOTO :-)
Zdroj: http://www.zdrojak.cz/?p=3024