Conversation
Edited 15 days ago

RE: https://mastodon.uno/@salvatorelasorella/116667647775511168

BASIC byl pekelný vynález, který zabránil tomu, aby se celá generace uživatelů prvních domácích počítačů naučila pořádně programovat.

S odstupem času mi nepřijde nejhorší tendence psát "spaghetti kód" na bázi GOTO. Na tohle ve skutečnosti navazují všechny konstrukce pro odchytávání chyb ve většině moderních vyšších jazyků - typu "try { } catch". Přísné strukturování kódu se přeceňuje a slušnou míru špagetovitosti lze dosáhnout i dnes, kreativním používáním "else if" vs. "else { if" nebo break a continue v cyklech.

Nejhorším omezením BASICu byla podle mě absence lokálních proměnných ve funkcích, protože "funkcí" se rozumněly jen jednořádkové aritmetické výrazy a tomu, co jste volali pomocí GOSUB, se říkalo "podprogram". Podprogram ovšem pracoval se stejnou sadou globálních proměnných a ne s nově inicializovanými, přidanými na stack. Tento problém vyřešily až pozdější dialekty, které se objevily až v éře, kdy to už nebylo relevantní.

Absence lokálních proměnných funkcí v raném BASICu měla za následek, že patřím ke generaci programátorů, kteří se nikdy doopravdy nenaučili intuitivně používat rekurzi.

O maďarských kořenech BASICu jsem ale netušil. Takový předchůdce Rubikovy kostky, zdá se...

1
0
0

@xChaos Ona ta omezení vycházela hlavně z toho, že paměti nebylo dostatek.

1
0
0

@mkyral to je bohužel pravda a spousta triků, např. absence fullscreen editorů a číslování řádek, s tím přímo souvisela...

Ale zase rekurze je dost základní programátorská praktika, a s 64 KB RAM už nějaký smysl mít mohla. Pravda, BASIC byl vymyšlený spíš pro počítače, které té RAM měly výrazně míň a už samotné pojmenovávání proměnných tam zřejmě byl poloviční zázrak...

Já nikoho nesoudím, ale spíš přemýšlím, proč jsem se vlastně v tom programování v některých směrech zasekl a dál nerozvíjel...

3
0
0

@xChaos @mkyral

Výmluvy. 😜

Goto je jenom nativní implementace jump.

Hledal bych příčinu jinde než v něčem, co už Dijkstra označil za zbytečné a škodlivé. 😆

1
0
0

@lepapierblanc @xChaos @mkyral skodlivy a zbytecny bol dijkstra

1
0
0

@lkundrak @xChaos @mkyral

A máš i tomu něco serióznějšího nebo jsi jenom neudělal zkoušku? 😱

1
0
0

@lepapierblanc @xChaos @mkyral serioznych veci mam celkovo tak pomenej

0
0
0

@xChaos Tak když ti Basic nestačil, byl dalším krokem assembler. A tam to udělat šlo 😉

Na Didaktiku jsem měl i kompilátor C, ale nebylo to ono. Možná kdybych měl disketovku, tak by to bylo něco jiného, ale s kazetami to bylo o ničem.

2
0
0

NEPŘÁTELSKÉ EMOCE 🇺🇦🇨🇿

Edited 15 days ago

@mkyral @xChaos v alternativnom vesmire by billov basicovy startup skrachoval, na pocitacoch by sme mali forth, vsetci by sme sa lubili, a prebytocne mozgove bunky venovali drogam namiesto kompilerov

1
1
0

@lkundrak @xChaos Kdyby byly v řiti ryby, nepotřebovali bychom rybníky 🤷‍♂️

1
0
0

@mkyral @xChaos podivajte sa, je to jednoduche:

my -- ziaden basic
melinda -- ziadne chlamydie

win - win!

1
1
0

@mkyral @xChaos historia sa proste stocila blbym smerom, kvoli premotivovanemu psychopatovi prespavajucemu v office

a kompilerom

1
0
0

@mkyral ano, assembler byl pro velký kluky, ale já do něj nikdy pořádně nepronikl :-) Akademická sféra ale tehdy razila spíš Pascal.. a ne, nebylo to ono.

Kompilátor C pro ZX Spectrum (Didaktik měl ale něco jako 80 KB RAM, nebo si to pletu?) by mi fakt zajímal. Na Sharp MZ-800 bylo díky zpětné kompatibilitě s MZ-700 dostupné kdeco, třeba i Pascal nebo Fortran, ale Céčko fakt ne. Možná bylo nějaké pro CP/M, ale tím jsem se zabýval minimálně, protože trendem tehdy už bylo být PC kompatibilní....

Ono jak s takovým nedostatkem paměti hospodařit, to asi byla velká výzva. BASIC interpretery nemohly být úplně hloupé, musely asi zvládat základní garbage collection a tak. Oproti assembleru to přeci jen byl vyšší jazyk... a to zdaleka ne jen díky matematickým funkcím...

1
0
0

@lkundrak těžko říct, já nedávno teprve pochopil, jak zásadní krok dopředu byl Apple I, jak dobrý počítač byl Apple II, a jak moc vlastně Bill Gates, který pro Apple II napsal Basic, zradil scénu domácích počítačů, když ukradl 16bitové CP/M a udělal z něj MS-DOS...

Myslím, že kdybych navrhoval BASIC dnes, tak bych se pokusil o koexistenci více programů najednou, o možnost "rozšiřovat BASIC v BASICu", něco jako to definování "slov" ve Forthu. Forth byl asi úspornější na paměť, ale bylo to pro běžné uživatele už moc.

BASIC v podobě jakéhosi RAM-os, kdy by více pojmenovaných programů/slov mohlo koexistovat v paměti a být i současně nahráváno, by byl zajímavý.

Ale hlavním omezením bylo, že ty hry pro domácí 8bity se ve skutečnosti vyvíjely na jakémkoliv výkonnějším hardwaru, a na těch 8bitech pak jenom běžely. Ten vývoj her pro 8bity musela být strašně zajímavá éra, já sám to zkusil, ale samozřejmě jsem uměl příliš málo a bylo to příliš pozdě.

64 KB bylo fakt málo, otázka je, kolik paměti by bývalo bylo "tak akorát", ale pozdější relativně levné PC kompatibilní klony dovážené z Asie navazovaly spíš na počítače Tandy, než na cokoliv, s čím IBM přišlo po prvním PC. V podstatě já za zásadní nedostatek pokládám, že v 90tkách se dostatečně rychle neobjevilo žádné user-friendly grafické prostředí pro tehdejší Linux, strašně dlouho převládaly portace tehdy v podstatě už zaostalých X11 aplikací s kořeny v 80tých letech a Netscape s raným Internetem nemohly trend dominance Windows zvrátit.

Otázka, jaké "cosi" mohlo být to správné, je neřešitelná. Třeba kdyby se objevila technologie flash-ROM dříve, tak jsme nemuseli dělat odchylku k pochybným médiím typu diskety a CD-ROM, a prostě propojovat (už tehdy přenosné) počítače null-modem kabely mezi sebou... taky stačilo málo a mohla se rozšířit technologie scanování programů, vytištěných v časopise jako čárkové kódy (existovalo to, ale potřebný speciální scanner se nerozšířil).

@mkyral

1
0
0

@xChaos 80 kB měl jen Didaktik Gama. Já měl M a tam bylo jen 64 kB - 16 kB ROM, 8 kB videoRAM a zbytek normální RAM.

S Didaktikem jsem prošel celou střední, dokonce jsem na něm dělal i nějaké protokoly.

Co za C kompilátor to byl už nevím, našel jsem HiSoft C, ale podle mně jsem měl něco jiného. Možná něco od Proximy.

https://spectrumcomputing.co.uk/index.php?cat=96&id=8252

1
0
0

@mkyral tak 48 KB RAM a 16 KB ROM mělo i původní ZX Spectrum, ne?

Tiny C má asi 4 KB, takže narvat do toho C asi nějak šlo, ale stejně by mi to zajímalo. ZX Spectrum snad ani nemělo na klávesnici všechny ASCII znaky potřebné v jazyce C :-)

1
0
0

@xChaos @mkyral ja si myslim, ze keby ste navrhovali basic dnes, museli by ste byt absolutny blazon

napriklad ako jeden psychopat ceo, ktory jakmile bol vo vate, tak toho zneuzil, aby tlacil dalej svoju nemocnu posadlost basicom

kazdy, komu visual basic nepride ako vrchol absurdity by sa mal nad sebout hlboko zamysliet. ale absurdne to bolo uz na zaciatku

mimochodom dneska mame source microsoft basicu na 6502, takze sa kazdy moze presvedcit na vlastne oci, o ake hovna ide a vzdy slo

2
0
0

@xChaos Ano. Didaktik M byl více kompatibilní se Spectrem než Gama, kde to přepínání paměťových bank vedlo k určitým problémům s kompatibilitou.

1
0
0

@lkundrak @xChaos Tak dneska máme zdrojáky kdečeho, třeba i AI 😎

A nepřekvapivě to jsou často úplné sračky.

A pak jsou zdrojáky, obsahující mnoho šikovných vychytávek a chytrých implementacích s důrazem na výkon či paměťovou efektivitu.

1
0
0

@mkyral @xChaos > mnoho šikovných vychytávek
> chytrých implementacích

zahodit

> důrazem na výkon
> paměťovou efektivitu.

pride samo

zbyle mozgove bunky prefetovat

1
0
0

@mkyral 80 KB měl i Sharp MZ-800 s přídavnými 16 KB video RAM. A taky ji uměl používat jako RAM disk...

To přepínání paměťových bank se dělalo pomocí I/O operací a připomínalo to způsob, jakým 16bitový MS-DOS později přistupoval např. do přídavné paměti XMS nad 1 MB....

Pokud se bavíme o raném BASICu, tam ale ty první 8bity mohly být většinou rády i za těch celých adresovatelných 64 KB RAM... většinou se ještě část oho rezervovala na ROM nebo video RAM, jen málo těch strojů tohle mělo vyřešených jinak a mohlo skutečně pro kód a data využít celých 64 KB. První BASICy běžely i nad 1, 2 nebo 4 KB RAM, což byl fakt úlet (samotný BASIC teda pak implementovaný v ROM...)

0
0
0

@lkundrak ano, to je takový 80tkový přístup... veksláci profetovat, androši prochlastat a vyhulit.

Nedá se říct, že my, co jsme to přežili, bychom s těmi mozkovými buňkami naložili nějak výrazně lépe...

@mkyral

1
0
0

@lkundrak tak mě Visual Basic nepřijde tak odlišný třeba od JavaScriptu.. ten přináší navíc leda středníky a složené závorky 🙂

Pozdější dialekty Basicu dorovnaly to, co nabízel Pascal nebo C, byly strukturované, ale nikdy se nerozšířil (navzdory snahám Microsoftu) žádný unifikovaný standard (protože Microsoft nemá rád standardy, která nemá pod plnou komerční kontrolou a nemůže kompatibilitu kdykoliv odvolat, že... dá se říct, že Microsoft BASIC totálně zabil).

Některé další pozdější dialekty BASICu, např. na Amize, byly velmi mocné. Ovšem to čistě komerční prostředí dané éry, které snahám o kompatibilitu spíše aktivně bránilo, se ukázalo jako zcela neschopné prosadit standard, který by snesl srovnání s tím, kam směřoval třeba Unix nebo akademická sféra.

Obecně, ono do 8-bitových počítačů toho fakt nešlo moc nacpat. Vyšší jazyk šlo navrhnout možná nepatrně lépe, ale ne o moc lépe. Python by se tam fakt nevešel...

C mělo problém s naprosto šílenou správou paměti, kdy různé dostupné přístupy vedly k jiným druhům chyb, které na CPU bez možnosti ochrany paměti navíc nebylo možné jakkoliv rozumně ošetřit a skončily vždy jen "vytuhnutím" a ztrátou dat. Takže nadávat na BASIC je jednoduché, ale ve své době to byl způsob, jak umožnit neprofesionálním uživatelům psát "nevytuhnutelný" kód, který napíše spořádanou chybovou hlášku, místo zamrznutí systému.

@mkyral

1
0
0
@xChaos @lkundrak @mkyral Souhlasim ze BASIC je silenost. Jasne, kdyz ho rozsirim k nepoznani, je mozny z nej udelat... jen neco hodne spatneho.

MicroPython bezi na nejakych 200KB RAM, JavaScript bezi na 16KB RAM (ale ... neni to pekny jazyk), kdyby nekdo chtel neco pekneho na 8-bit, podival bych se na Lua.

C-cko je proste jednoduchy, high-performance jazyk. Rust k tomu pridava bezpecnost. Cross-kompilace Rustu pro 8-bit by mohla byt legrace, ale na druhou stranu... mozna ze rozumny maly pocitac dneska vypada neco jako Bangle.js2: 32-bit ARM, par set KB RAM, par MB flash.
3
0
2

@pavel @xChaos @mkyral > MicroPython bezi na nejakych 200KB RAM,
> JavaScript bezi na 16KB RAM

ja si perspektivu kalibrujem na tom, ze 7th ed. UNIX bezal na PDP-11/40 s 256K pamati, pricemz jadro zabralo zhruba 32K .data+.bss a 32K .text. Procesy, planovac, mountable filesystemy, ipc, riadenie terminalu, i/o buffer cache, drivery, permission system, swapovanie. Zhruba 10K riadkov C.

Programy obmedzene ma 64K+64K. V zasade nikde, okrem C compilera, ktory bol kvoli tomuto rozsekly na dve fazy (+ optional optimizer). 7th ed preto, lebo je to prva verzia kde skoro v vsetko v C, dostatocne moderna na to, aby ju sucasny linuxak vedel pouzivat.

2
0
0

NEPŘÁTELSKÉ EMOCE 🇺🇦🇨🇿

Edited 15 days ago

@pavel @xChaos @mkyral druha perspektiva je, ze s forthom sa s 2K pohodlne dostanem k systemu, kde mam interaktivy shell, procedury, podmienky, premenne, cykly a snad aj assembler

takze 6K sedej kory mozgovej ostava na prudku nenavist k basicu

0
0
0
@lkundrak @xChaos @mkyral Aha, no ale dnes je situace _fakt o hodne_ jina nez v dobe BSD2.11.

Hodinky porad maji srovnatelne mnozstvi RAM, ale radove rychlejsi procesor. A multiuser uz nedelame ani na vetsich systemech.
1
0
1

@pavel @xChaos @mkyral to ale neznamena, ze si nad tym nemozeme poplakat

2
0
1

@pavel to s tím MicroPythonem je zajmavé. Já zamýšlím transpiler z Pythonu do C, binárky by pak byly o hodně menší, než 200 KB (ale závisely by na libc, samozřejmě). Uvidím. Jestli má MicroPython 200 KB, je docela výzva zkusit, jak velké budou moje transpilované binárky... ten objektový model co chci použít není nic moc paměťově efektivní, ale pokud se bude kompilovat pro 32bitovou platformu, tak hrozné to nebude...

BASIC je složité téma, pro spoustu lidí je to nostalgie z mládí, a ono stěží šlo pro 8bity vymyslet něco všeobecně srozumitelného a současně lepšího. Já jako hlavní problém vypíchl to, že úplně odváděl pozornost od úloh, které vedou k rekurzi - díky tomu, že jí nepodporoval. To hodně zužovalo programátorské uvažování.

Rust pro 8bity si popravdě představit neumím :-) Já zásadní nárůst komplexity vidím u dynamických datových struktur... NULL terminated stringy nad 256 znaků (na 8bitech by strlen() běžel hrozně dlouho...), pole proměnné délky. To vše zásadně zvyšuje náročnost, na 8bitech nebylo stránkování paměti, jakékoliv resizování by nejspíš zahrnoval relokaci v paměti, bylo by to šíleně pomalé, proto ty rané programy cílily na fixní maximální velikost všeho.

Proto jsem se zaměřil na rekurzi s malým množstvím lokálních proměnných na stacku jako na jednu možnost, kterou 8bity přeci jen v omezené míře nabídnout mohly a je to přesně disciplína, kterou moderní kurzy programování (narazil jsem poslední rok na 2 různé) hodně zdůrazňují, ale moje generace si to prostě z dob úplných začátků nepamatuje, protože to nebylo k dispozici.

@mkyral @lkundrak

1
0
0

@lkundrak mě asi na začátku vlákna zaujalo, že za tím stojí nějaký Maďar. Rubik, Erdés, raní jaderní fyzici.. za vším hledej Maďara...i za BASICem.

@pavel @mkyral

0
0
0

@pavel ad ta Lua: směřuje mi na ni víc lidí, ale přijde mi, že spojuje nevýhody úplně všeho :-) Takový Pascal, kde se píše End, ale ne Begin (aspoň že tak :-). JavaScript je šílenej, ale aspoň běží v browseru, kde s ním každý může začít, jako dřív s 8bitama (takový dnešní BASIC, no).

Obecně, pro začátečníky je potřeba komplexitu snížit, ne zvýšit. Základní abstrakce (kromě poměrně samozřejmé "proveď další krok") jsou v zásadě 3: podmínka, iterace, rekurze. Z toho se dá poskládat prakticky vše (kdyby C mělo kromě ternárního operátoru ?: i hypotetický rekurzivní operátor, tak půjde napsat vše jako výraz a vůbec nepotřebujeme statementy :-)

@mkyral @lkundrak

1
0
0
@lkundrak @xChaos @mkyral Ale ja nechci plakat. Ja chci rozumny system pro hodinky a telefony :-). Tahle verse je na Pythonu...

Muj aktualni pokus je tady:

https://gitlab.com/tui/pyeye

a profesionalnejsi verse je tady:

https://github.com/MicroPythonOS
1
0
1
@xChaos @mkyral @lkundrak Ten MicroPython... 200KB RAM, ale nejsem si jisty kolik ROM.
0
0
0

@pavel @xChaos @mkyral @lkundrak
Jediný rozumný systém pro hodinky je hardware v CASIO F-91W.

1
0
0
@ptesarik @xChaos @mkyral @lkundrak No, trochu me zajimalo jaky hardware to vlastne je, ale nasel jsem akorat jak ho vymenit za arm32.

https://interactionmagic.com/Hacking-terrorist-timepiece

Hadam ze na telefon by se ten hw moc nehodil.
1
0
0

@pavel @xChaos @mkyral @lkundrak
Telefon preferuji TESLA TA 32. Jeho největší výhodou je, že nevyžaduje žádné aktualizace.

1
0
0
@ptesarik @xChaos @mkyral @lkundrak Jeho nejvetsi nevyhodou je, ze mu nelze udelat zadne aktualizace :-).
1
0
1

@pavel no, mě se líbí, že nezavrhujete alternativní timeline, kde by počítače nebyly výkonnější, ale menší a měly menší spotřebu :-)

Mě přijde, že limitujícím faktorem je dnes velikost implementace SSL...

@ptesarik @mkyral @lkundrak

1
0
1
@xChaos @ptesarik @mkyral @lkundrak Ta timeline existuje, jmenuje se esp32, napr. Jde k tomu pripojit i ps/2 klavesnice a VGA out...
1
0
3

@pavel @xChaos @ptesarik @mkyral a disketovka prosim?

1
0
0
@xChaos @mkyral @lkundrak Pred dalsim postem se podivat na Lua. Jako fakt. Jestli ma Lua nevyhody vseho, bude potreba nejaky lepsi argument nez "je to Pascal" (ani nahodou neni!) a "ma to end" (a ma byt?).

Jako vazne. JavaScript je zlocin proti lidskosti. BASIC mozna byl ospravedlnitelny napad v roce 85 diky cenam ROM/RAM. Lua je relativne rozumny jazyk.
2
0
2

@pavel @xChaos @lkundrak Asi proto je Lua docela rozšířená jako interní skriptovací jazyk v programech a hrách.

0
0
1

@mkyral
Čtečku děrných štítků, nebo to není skutečný počítač.
@lkundrak @pavel @xChaos

1
0
0

@ptesarik mě přijde, že média, co se vždycky přestanou vyrábět, jsou slepá ulička. Vestavěný SSD a nějaký null modem na přenos souborů mezi počítači... ;-) @mkyral @lkundrak @pavel

2
0
0

@xChaos
Děrný štítek si každý může vyrobit doma ručně. I vyděrovat.
@mkyral @lkundrak @pavel

2
0
0
@xChaos @ptesarik @mkyral @lkundrak SD kartu je mozne docela dobre vestavet.
0
0
1

@ptesarik to bych víc věřil na QR kódy, dneska. I když k tomu je zase potřeba tiskárna, ok :-)

Záleží asi na tom, co pokládáme za úplně základní technologii. Bez čipů to asi nepůjde.... víceméně, ta komplexita celého ekosystému je taková, že vlastně žádný "bootstrap" odjinud už víceméně není možný...

@mkyral @lkundrak @pavel

1
0
0

@xChaos
QR kódy jsou cajk. Tiskárna netřeba, umím je kreslit obyčejnou tužkou.
@mkyral @lkundrak @pavel

1
0
0

@ptesarik @xChaos @lkundrak @pavel To jde ale proti původní premise „Výkonnější a menší“.

Mini děrovačku na malé štítky si doma na koleně fakt nevyrobíš.

0
0
0

@ptesarik @xChaos @lkundrak @pavel Kolik archů čtverečkovaného papíru je potřeba?

1
0
0

@mkyral
Na co? Na bootstrap cca 16 KiB? Málo…
BTW preferuji milimetrový papír, má vyšší hustotu informace.
@xChaos @lkundrak @pavel

1
0
0

@ptesarik @xChaos @lkundrak @pavel Jó, milimetrový papír 🤦‍♂️ Jsem úplně zapomněl, že vůbec existuje.

0
0
0

@pavel

A Lua taky existuje v několika odlišných variantách. Tak jako BASIC blahé paměti.

@xChaos @mkyral @lkundrak

1
0
1

@vyskocilm BASIC byl ospravedlnutelný v roce 1975, v roce 1985 už měla scéna mikropočítačů přijít s něčím lepším, akorát existovalo 100 konkurujících si ne-standardů. Řekl bych, že v reakci na to pak vzniklo open source hnutí - aby už neexistoval problém nekompatibility platforem...

Na Lua jsem koukal jen letmo, ono to jde prý snadno přilinkovat k programům v C. Každopádně nechápu výhodu oproti tomu, kdyby to pojali jako podmnožinu Pythonu... akorát potřebovali vymyslet další kočkopsí syntax, která má od každého něco.

@pavel @mkyral @lkundrak

1
0
0

@xChaos @vyskocilm @pavel @lkundrak

Dle wiki byla Lua od začátku (1993) navržena jako úsporný jazyk. Kdežto srovnatelný micropython vznikl až o 10 let později.

Samotný Python vznikl v roce 1991 a v roce 1993 rozhodně nebyl tak rozšířený jako teď. Nemluvě o rozdílu Python vs aktuální Python 3.

2
0
1

@mkyral to jsem fakt nevěděl, že Lua existovala v roce 1993 ;-) já o tom slyšel až v posledních letech. Mě to připomíná takové ty metajazyky pro zápis algoritmů: od všeho něco.

Python dlouho nijak zvlášť populární nebyl, to je pravda...

@vyskocilm @pavel @lkundrak

1
0
1

@xChaos @mkyral @vyskocilm @pavel to bola doba, nefunkcny stat, ilegalne zury, norton commander

nejaka lua nikoho nezaujimala

ale ticha voda brehy mele!!

0
0
0

@xChaos @mkyral Jdu do debaty pozdě, neb tyhle špagetové diskuse s příspěvky o délce článku na idnesu se snažím ignorovat na každé sociální síti, ale BASIC jako takový lokální proměnné i úplně normální funkce (a nikoliv jen GOSUB/RETURN) podporoval. Například jen na platformách, které mě zajímají a znám je, měly funkce už některé BASICy na ZX Spectru, lokální proměnné a skutečné funkce/procedury Sinclair QL rovnou v ROM (1984). Jejich absence je problém implementace BASICu na konkrétním stroji.

1
0
0

@logout tak ale to jsem psal, že pozdější dialekty už se ta omezení snažily omezit. Klíčová slova jako LOCAL, GLOBAL, nebo různé způsoby zápisu procedur a skutečných funkcí... ty byly vesměs obšlehnuté z Pascalu.

Ale ten styl programování poloviny 80tých let, to byly ty původní, vestavěné dialekty BASICu, které měly filosofii poloviny 70tých let, a v těch si prostě s rekurzí hrát nešlo. A i když jsem se od té doby naučil X nových jazyků, tak vnitřně pořád na všechny problémy k řešení nahlížím strašně imperativně... a jakmile nějaké zadání vede k rekurzi, což je první náznak trochu jiného přístupu, tak mi ta intuice prostě dodnes chybí. To je celé.

@mkyral

0
0
0

@mkyral

Hlavně Lua byla od počátků jako embedded language. Teď někdy nedávno vyšel standalone runtime pro Luau (což je další z verzí Lua).

@xChaos @pavel @lkundrak

0
0
1