Díky za článek, dobré čtení.
Můžete ncurses porovnat s mladšími knihovnami ve stylu termui (go), tui (rust), blessed (js)? Z pohledu laika to dělá hodně podobné věci.
Děkuji za pochvalu :).
Ty knihovny, které zmiňujete jsou hodně (skoro úplně) jiné. Ty knihovny jsou objektové, a jsou jakoby o jednu úroveň abstrakce výše, některé jsou i přímo aplikační frameworky https://github.com/gyscos/cursive.
Jelikož 20 let dělám primárně s Cčkem - je to programovací jazyk Postgresu, tak jsem hledal něco Cčkového, a tam skončíte u ncurses - možná u Slangu (jak komu vyhovuje). pager je dost netypická aplikace - má krátký životní cyklus, chcete rychlý start, extrémně rychlou separaci znaků - a na to je Cčko s ncurses šikovné.
Kdybych psal klasickou aplikaci, kde je víc formulářů, kde už potřebujete zobrazit nápovědu, atd - např. textový editor (tak pokud bych tu aplikaci nechtěl udělat minimalisticky), tak bych šel do nějaké frameworku. Kód by byl bezpochyby čitelnější, na druhou stranu, jakýkoliv framework se musíte naučit, a pokud vám v něčem nevyhovuje a musíte ho ohýbat, tak je to co se týče pracnosti podobné, jako když framework nepoužijete.
Myslím, že u mc jde při překladu vybrat i slang. Alespoň v Gentoo to jde vybrat
$ equery u app-misc/mc [ Legend : U - final flag setting for installation] [ : I - package is installed with flag ] [ Colors : set, unset ] * Found these USE flags for app-misc/mc-4.8.26-r1: U I + + X : Add support for X11 + + edit : Compile and install the mcedit application - - gpm : Add support for sys-libs/gpm (Console-based mouse driver) - - nls : Add Native Language Support (using gettext - GNU locale utilities) - - samba : Add support for SAMBA (Windows File and Printer sharing) - - sftp : Add support for sftp (uses net-libs/libssh2 for it). - - slang : Use sys-libs/slang instead of sys-libs/ncurses. - - spell : Add dictionary support - - test : Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) + + unicode : Add support for Unicode + + xdg : Toggles mc's config dir location. Enable for $XDG_CONFIG_HOME/mc, disable for $HOME/.mc
Dobrá spomienka na rok 1997, keď sme na predmete operačné systémy robili prvé tri týždne GUI v curses na Solarise...
Dobrý den,
curses se ještě hojně využívají v bbs světě. Viz.:
https://bbst.neocities.org/
(multimail, qodem, duhdraw, duhview atp.)
Hezký článek, díky za něj
Možná nejméně problémové v rámci České pošty, ale jinak je to hrůza a děs. Moje jízlivá poznámka nemá nic do činění s terminálem, ale spíš s celkově nevhodně navrženými procesy, které jsou pomalé, ale ani tak nevedou ke zvýšení kvality.
Pokud bych měl nějakou výhradu k terminálu, tak je to bariéra zaškolení. Nezřídka se mi stává, že na sebe volají přes přepážku, jestli si kolegyně nepamatuje nějaký kód, a v polovině případů se kolegyně zvedne a jde pomoct přímo (zdržují se v tu chvíli dva pracovníci a dva zákazníci). Jakákoliv trochu složitější operace na Poště vyžaduje přeskok z terminálu do jiného prostředí a následně vystavení účtenky z terminálu. Jejich úžasný tisk šetří po halíři kousek papíru, ale po desetikorunách plýtvá časem pracovníka a zákazníka.
Jako celek je to odstrašující příklad, jak to fungovat nemá. Zajímavé je, že kdejaký notář má Czech Point operace mnohem racionálnější, kdejaká soukromá přeprava dokáže zásilku odbavit rychleji.
Na druhou stranu se obsluha systému s klávesovými zkratkami a kódy mnohem lépe instruuje na dálku. GUI se spoustou menu rozhodně neznamená vyšší produktivitu.
Pamatuji se na nářky účetních, když z "rychlého" klávesnicového systému pro zadávání dat (tabulátory, entery a F1-12) přešly na klikací prostředí jako Money S3..
Jde o to, kdo s tím pracuje. Zaškolený, trvalý personál se naučí zkratky a kódy, a je produktivní. Pošta má velkou fluktuaci a z velké části pracovníky, kteří neměli na to se uchytit na lepším místě.
Ty "klikací" systémy mají sice nižší produktivitu vstupu dat, ale profitují z možností získání dat a přehledu v nich. Neznám účetní, která by se dnes chtěla vrátit do těch dob. Rychlost vstupu jí nevynahradí zbylé možnosti, přehledy, sestavy, parametrizaci.
"Pošta má velkou fluktuaci " - to máte odkud? Ty 2 pošty co znám mají za přepážkami stále stejné lidi. O donašečích novin a balíků se tady asi nebavíme.
S GUI je někdy problém, že klávesové zkratky nejsou dostupné, nebo jsou schované v nápovědě. BFU pak ani neví, že by něco jako klávesová zkratka mohla vůbec existovat. Kdežto u terminálových systémů se práce s klávesnicí přímo vyžaduje, a tak tvůrce programu víc myslí na to aby uživatele ty zkratky 'naučil'.
O nářcích po přechodu z textového prostředí na (nový) např. účetní systém s GUI jsem slyšel mockrát, zejména co se týkalo efektivity a rychlosti práce.
A zkusil jste někdy nabídnout přechod zpět? Já párkrát zažil, kdy se měla účetní vrátit zpět - např. kvůli opravám v minulých letech. Obvykle byla nešťastná a překvapená, jak mohla v té době pracovat bez spousty sestav a filtrování, které dnes využívá.
Ony oba ty způsoby mají své klady i zápory, důležitý je ale výsledek.
sestavy a filtrování ale není problém GUI vs terminál. To je spíš postupný vývoj vlastností softwaru.
To vím taky. Spíš poukazuju na to, jak je kňourání uživatelů někdy odtržené od skutečnosti. GUI může být dobré i špatné jak v terminálu, tak i v grafickém režimu. Zvolené rozhraní to neimplikuje.
U účetních programů, protože se jim věnuji, tak vidím zejména posun v tom, že na vstup dat dnes není problém využívat jen málo proškolený personál. Místo školení opičích trojhmatů, věnujete se spíš pochopení činnosti samotné. V tom, podle mě, právě Česká pošta naráží: není s to si udržet kvalitní personál a zároveň mají zbytečně vysokou bariéru v použitelnosti.
U pošty je problém úplně jinde. A to špatné vedení.
Jo. Já tam vidím neslučitelnou snahu dělat "kvalifikované" služby společně s hromadnými. Ty hromadné služby (obyčejné doručení zásilky) si vysloveně říkají o hledání úspor z rozsahu. Podobně fungují soukromí přepravci.
K tomu ale ČPošta zajišťuje i jiné služby. Některé jsou potřebné (i když upadají) - převody složenkou, cenná psaní, doporučená psaní a balíky, doručení do vlastních rukou, ... - a ty naopak potřebují určitou míru znalostí, protože tam není velký prostor na chyby. Jiné služby jsou navíc - doplňkový prodej, poštovní banka
Oni se plácají na místě, protože se jim nedaří najít způsob, jak obojí zkombinovat, zároveň mít pobočku blízko (zákazníci vyžadují), nejlépe, aby se dalo maximum vyřešit i s doručovatelem...
Výsledek je tristní. Doručovatel mnohdy nedoručuje, a pokud ano, tak stejně jen obyčejná psaní. Z brašny neprodá ani známku, ani nepřijme pohlednici k doručení. Balíky rozváží často jiná pošta (parcelový systém), takže dohledat problémové doručení je pro zákazníka utrpením. Nejsou s to ani zvedat telefony - což je asi přirozená reakce zaměstnanců na situaci, kterou mají nastavenou.
Tolik vidím na obhajobu zaměstnanců pošty, i proč se jim vlastně nedivím.
Na druhou stranu, je zřejmé, že soukromé firmy si dovedou zjednat pořádek v doručování i v komunikaci se zákazníkem. Ano, mnohem dravěji přistupují k zaměstnancům, zdaleka každý není "ve stavu" kmenového zaměstnance. Doručovatelé soukromých firem dostanou podmínky pro práci, ale měří se výkonnost. Přiznejme si, že něco takového si zaměstnanci pošty neumějí ani představit a proto reluktují.
Pochopitelně, jediný, kdo to může změnit, je vedení. Souhlas.
Miroslav Šihlavý: Celkem se s tím dá souhlasit, ale podle mě to pořád je řešitelné - jen by někdo musel opravdu chtít a musel by se nad tím trochu zamyslet. Já třeba typicky při interakci se zaměstnanci ČP neměl problém, většinou jsou příjemní nebo aspoň neutrální a snaží se, na přepážkách jsem většinou neměl zásadní problémy.
Ovšem jakmile dojde třeba na doručování zásilek, tak to je často boj. Dřív to celkem šlo, ke konci minulého roku se to nějak zvrtlo a jeden čas kašlali na doručování balíků (prostě adresát nezastižen, hotovo). Pak to ještě vylepšili a pokud mi v poslední době přišly nějaké malé zásilky z Číny, pak v případě těch opravdu malých skončily ve schránce, jinak se tam opět objevila výzva k vyzvednutí. Přitom celou dobu jsem k zastižení, protože pracuju z domova, jen se doručovatelka neobtěžuje na mě zazvonit, takže pak musím jak trubka jít na poštu a vystát frontu a místo řádově dvou minut mě to stojí hodinu času.
Je možné, že jsou lidi přetížení a nestíhají a je na ně vyvíjený příliš velký tlak od vedení, to samozřejmě jako člověk chápu, ale jako zákazníka mě takové nesystémové "řešení" zvedá ze židle. Další věc jsou pak ty přidružené nesmysly jako prodej losů, plyšáků, pojištění a kdo ví čeho, co s poštou nijak nesouvisí. Pro mě za mě, ať to tam klidně nabízí, ale ať nenutí zaměstnance plnit nějakou pochybnou pětiletku v prodeji nesmyslného zboží a služeb.
Pokud bych byl škarohlíd, tak bych řekl, že ČP se stále zuby nehty drží, ačkoliv se ji někdo ze všech sil snaží přivést ke krachu. A kdybych byl konspirační teoretik, řekl bych, že se někdo snaží co nejvíc snížit její cenu, než někdo dostane spásný nápad prodat ji soukromému subjektu.
Vážně? Já si všimnul, že to běží v klasickém textovém EGA módu 80x25, podobně jako některé starší pokladní systémy (ještě nedávno třeba v Albertu), ale nevěděl jsem, na čem je to založené. Upřímně mi to moc jako Linuxová konzole nepřijde, myslel jsem, že je to třeba běží na nějaké odnoži OS/2. Linuxová konzole přeci jenom díky tomu, že je to emulátor VT má některá omezení, podle kterých se dá docela dobře rozpoznat (např. nemožnost vytisknout znak do pravého dolního rohu).
Zdravim.
Neni to ciste terminalovy pristup, ale klient/server Xwindow.
Kdysi jsem to nasazoval na CP (ale treba se to zmenilo za ta leta)
Tehdy slo o klasicky X11. Je totiz napsany jako klient/server, jen to lide tak nevnimaji, protoze server i klient bezi obvykle na tomtez zeleze.
Tady tomu tak neni. Je tam klasicky server v zazemi s X window serverem a pc na prepazce je jen klient. u jedno prepazek je jakysi hybrid, ale principielne je to vlastne totez. To co tedy vnimate jako terminal je pres jen full screen emulator terminalu a v nem vlastni postacka aplikace.
Je to celkem pozoruhodne nasazeni/vyuziti linuxu. Nicmene je fakt ze zbytek se proste stale stejna Ceska Posta :)
8. 4. 2021, 12:59 editováno autorem komentáře
Děkuji za článek a hlavně za aplikaci pspg. Netušil jsem, že něco takového existuje a je vůbec možné. Používám mysql a vždy jsem byl nucen dotaz napsat tak, aby se mi výsledek vešel na obrazovku hlavně co se šířky týče. Nyní tohle omezení padá. Stačí zadat.
page pspg
. Všechno potřebné nastavení si mohu uložit přímo v pspg, tedy nemusím si pamatovat žádné složité spouštěcí parametry. Tedy pak už stačí dělat jen obyčejné dotazy.
Jediné kde to moc dobře nefunguje je položka typu text, když obsahuje více nových řádků. Je možné tohle nějak obejít?
Nevím jestli je to ta chyba na kterou narážíte, ale jestli si to vybavuji správně, a teď jsem si to vyzkoušel, tak mysql špatně formátuje tabulky, pokud data obsahují přechod na nový řádek.
MariaDB [xx]> select 'ahoj\nsvete' as x; +------------+ | x | +------------+ | ahoj svete | +------------+ 1 row in set (0.000 sec) MariaDB [xx]> select * from foo; +------------+------+ | a | b | +------------+------+ | ahoj svete | ahoj | +------------+------+ 1 row in set (0.001 sec)
pspg je jen pager a očekává správně naformátovaný vstup. Pokud je vstup nakopnutý, tak to pspg ještě navíc dokope.
Možná můžete zkusit si nastavit v mysql výstupní formát CSV, a pspg nastavit na CSV režim. Ale netestoval jsem to, a ani nevím, jestli mysql vyexportuje CSV správně (mohlo by). pspg dokáže 100% CSV s multiline hodnotami načíst a korektně naformátovat.
Ncurses ne, je to hodně těžká závislost a je provázaná s libc. Existuje např. https://github.com/ChrisMicro/mcurses která ale vypadá velmi podobně :)
Moc hezký článek!
Před časem jsem zkoušel udělat Tetris pro terminál a to jak bez použití ncurses tak s ním. Pro zajímavost: https://github.com/berk76/tetris
Díky za přínosný článek a jsem zvědavý na další.
Máte někdo zkušenosti s multiplatformní knihovnou ala ncurses, která by šla použít z Pythonu tak, aby aspoň nějak rozumně běhala v Lin/Win/Mac ?
Namátkou se dá narazit na lecos, ale ušetřilo by pár bezesných nocí, kdyby to už měl někdo prošťouchlé.
Tady bych čekal, že něco najdu
https://python.libhunt.com/curses-alternatives
ale jsem z toho seznamu rozpačitý.
A různě jinde jsou roztroušeny další projekty:
https://pypi.org/project/blessings/
http://newcenturycomputers.net/projects/wconio.html
https://github.com/peterbrittain/asciimatics
(ten poslední vypadá zajímavě).
Díky :-)
Pokračování určitě plánuji - v hlavě si sumarizuji text tak na dva - na tři díly. Ale bude to dost nepravidelné - snažím se zapsat svoje zkušenosti, tak aby to mělo hlavu, a patu, a aby se to dalo číst. Ale chce to víc času než obvykle - na to jak je ta problematika komplexní, tak mi přijde, že literatura k ncurses (včetně dokumentace) je dost povrchní, a i docela zásadní věci (rozšířené protokoly pro práci s myší nebo pokročilejší práce s barvami) nejsou zdokumentované vůbec.
[...] Ani ve snu by mne nenapadlo, že okna se (v ncurses) nesmí překrývat (jinak dochází k vizuálním defektům). [...]
mohl byste to vysvetlit. Co to znamena 'prekryvat'. Pouzivam aplikaci, kde se pres zakladni obrazovku (to je take okno) nakresli mensi okno - to funguje uplne bezproblemove. Videl jsemv 90.letech i hardcopy obrazovek, kde se prekryvala i ta mensi okna. Myslite, ze to byly nejake jine ncurses verze?
Tool 'dialog' pouziva ncurses a na stackoverflow je obrazek s overlapping windows. (viz: 'Using ncurses in c language')
Pokud se okna překrývají, tak si musíte sám řídit v jakém pořadí je budete refreshovat - a musíte si dávat pozor, jestli použijete refresh nebo wrefresh. ncurses si pro strukturu WINDOW neudržují Z souřadnici. Pokud máte komplexní aplikaci řízenou událostmi tak volání wrefresh nemusí být úplně totožné s tím, v jakém pořadí by se měl obsah zobrazit. Pokud například udělám refresh dialogu a poté refresh pozadí, např. kvuli hodinám v rohu, tak i když jsem dialogové okno vytvořil později, a očekávám, že bude mít vyšší Z souřadnici, tak ho neuvidím, a pozadí mi úplně překryje dialogové okno.
Pokud chcete používat překrývající okna, tak musíte použít něco, co ncurses označuje jako PANEL, což je struktura, která wrapuje WINDOW, a udržuje si Z souřadnice. Je dobré číst pozorně dokumentaci, kde se píše, že byste neměli pak refreshovat skrz wrefresh - ale je nutné použít funkci update_panels a pak funkci doupdate. A pak to funguje. Já v pspg používám panely pro implementaci menu - a funguje to hezky.