Portál AbcLinuxu, 9. května 2025 20:36
Byla vydána nová vývojová verze datového formátu a souvisejících nástrojů Relational pipes. Novinkou verze v0.11 je podpora vstupu i výstupu ve formátu recfile používaném programem GNU Recutils a dále pak základní podpora výstupu ve formátu ASN.1 BER.
Tiskni
Sdílej:
Záměrně má každý nástroj vlastní mercurial, důvody jsou popsané tady: Small code footprint and modular design / Optional complexity.
V poznámkách k vydání je návod / skript, jak to všechno postahovat a zkompilovat. Distribuční balíčky zatím nejsou.
Protože jsem s Mercurialem začal před více než deseti lety (tehdy byl main-stream Subversion) a od té doby jsem s ním spokojený, nemám důvod od něj odcházet. Nicméně s Gitem taky dělám (záleží, co který projekt používá, někde mají dodnes SVN).
GNU RecutilsTo mě docela zaujalo. Takovej punkovej přístup. "Data si klidně editujte ručně, ale je lepší používat nástroje. Nejsou žádné povinné fieldy, pokud si je nenadefinujete. A to klidně až po insertu dat. Stejně jako zakázané fíeldy si přidejte kdykoliv." Takové schémové neschémové, oblečená neoblečená, přijela nepřijela. Je to použitelné na něco seriózního? Předpokládám, že výkon půjde hodně rychle dolů v případě častějších update, jsou to všechno textové soubory, neupdatuje se po blocích, takže při každém update nebo delete se ten soubor defacto musí zapsat znovu. Insert může psát jen na konec, ten rychlej asi bude.
Osobně to nepoužívám, ale jako textový formát pro serializaci těchto strukturovaných dat mi to přijde celkem dobré. Co jsem četl nějaké články, tak to lidi používají pro různé osobní organizační úkoly, agendy – často se tím asi dá nahradit tabulkový kalkulátor. U malých databází (na které se to používá) na problémy s výkonem nenarazíš.
Nemůžeš to srovnávat s PostgreSQL nebo jinými velkými databázemi. Spíš by se dalo uvažovat o srovnání se sqlite. A oproti ní je to přeci jen jednodušší:
$ cloc-relpipe.sh gnu.org/recutils/ počty_řádků_kódu: ╭────────────────┬───────────────────┬─────────────────────┬─────────────────────┬────────────────┬──────────────────╮ │ jazyk (string) │ souborů (integer) │ prázdných (integer) │ komentářů (integer) │ kódu (integer) │ celkem (integer) │ ├────────────────┼───────────────────┼─────────────────────┼─────────────────────┼────────────────┼──────────────────┤ │ C │ 139 │ 4501 │ 6468 │ 19376 │ 30345 │ │ Bourne Shell │ 16 │ 1568 │ 711 │ 5603 │ 7882 │ │ TeX │ 1 │ 719 │ 2878 │ 5556 │ 9153 │ │ Lisp │ 2 │ 243 │ 199 │ 1847 │ 2289 │ │ C/C++ Header │ 7 │ 833 │ 1326 │ 902 │ 3061 │ │ CSS │ 1 │ 77 │ 34 │ 357 │ 468 │ │ make │ 12 │ 113 │ 179 │ 322 │ 614 │ │ lex │ 1 │ 49 │ 43 │ 175 │ 267 │ │ m4 │ 1 │ 53 │ 36 │ 173 │ 262 │ │ yacc │ 1 │ 23 │ 26 │ 127 │ 176 │ │ Python │ 1 │ 5 │ 14 │ 25 │ 44 │ │ sed │ 2 │ 0 │ 0 │ 16 │ 16 │ │ celkem │ 184 │ 8184 │ 11914 │ 34479 │ 54577 │ ╰────────────────┴───────────────────┴─────────────────────┴─────────────────────┴────────────────┴──────────────────╯ Record count: 13
alespoň co do počtu řádků, cca 10×:
$ cloc-relpipe.sh sqlite/sqlite počty_řádků_kódu: ╭───────────────────────┬───────────────────┬─────────────────────┬─────────────────────┬────────────────┬──────────────────╮ │ jazyk (string) │ souborů (integer) │ prázdných (integer) │ komentářů (integer) │ kódu (integer) │ celkem (integer) │ ├───────────────────────┼───────────────────┼─────────────────────┼─────────────────────┼────────────────┼──────────────────┤ │ C │ 322 │ 26851 │ 89879 │ 229524 │ 346254 │ │ Bourne Shell │ 19 │ 3122 │ 3479 │ 20459 │ 27060 │ │ Tcl/Tk │ 77 │ 2185 │ 3558 │ 17140 │ 22883 │ │ m4 │ 6 │ 1266 │ 87 │ 11989 │ 13342 │ │ C/C++ Header │ 55 │ 1460 │ 8976 │ 8575 │ 19011 │ │ yacc │ 3 │ 199 │ 370 │ 1424 │ 1993 │ │ make │ 5 │ 186 │ 234 │ 920 │ 1340 │ │ HTML │ 1 │ 149 │ 0 │ 915 │ 1064 │ │ DOS Batch │ 2 │ 154 │ 406 │ 598 │ 1158 │ │ Markdown │ 8 │ 143 │ 0 │ 503 │ 646 │ │ C++ │ 4 │ 87 │ 52 │ 410 │ 549 │ │ C# │ 2 │ 88 │ 286 │ 299 │ 673 │ │ Windows Resource File │ 1 │ 10 │ 23 │ 50 │ 83 │ │ XAML │ 2 │ 3 │ 0 │ 18 │ 21 │ │ celkem │ 507 │ 35903 │ 107350 │ 292824 │ 436077 │ ╰───────────────────────┴───────────────────┴─────────────────────┴─────────────────────┴────────────────┴──────────────────╯ Record count: 15
Na druhou stranu i sqlite je oproti tomu vyspělá relační databáze se vším všudy, akorát je souborová (což je ale pro ty menší úkoly spíš výhoda).
ale jako textový formát pro serializaci těchto strukturovaných dat mi to přijde celkem dobréJo, proč ne.
Nemůžeš to srovnávat s PostgreSQL nebo jinými velkými databázemi.To jsem ani moc nechtěl, jen mi přišel zvláštní ten přístup "edituje si to klidně ručně". Jasně, má to nástroje na kontroly apod., ale většina podobných projektů důrazně nedoporučuje do datových adr. vůbec chodit a tady píšou, že to dokonce lze editovat. Ale dovedu si představit integraci do editoru (Emacs
BTW: tenhle formát používá i balíčkovací systém v Guix SD, takže jeho výstup jde pak strojově zpracovávat. To byl jeden z důvodů, proč jsem v těch Relačních rourách implementoval jeho parser. Data si pak můžeš hodit do tabulky nebo převést na jiný formát.
$ guix package -s malloc | recsel -p name,version,relevance | relpipe-in-recfile | relpipe-out-tabular recfile: ╭───────────────┬──────────────────┬────────────────────╮ │ name (string) │ version (string) │ relevance (string) │ ├───────────────┼──────────────────┼────────────────────┤ │ jemalloc │ 4.5.0 │ 6 │ │ glibc │ 2.25 │ 1 │ │ libgc │ 7.6.0 │ 1 │ ╰───────────────┴──────────────────┴────────────────────╯ Record count: 3
P.S. Totéž můžeš udělat v Ubuntu nebo Debianu:
$ apt show emacs* | sed 's/^ /+/g' | relpipe-in-recfile | relpipe-tr-cut '.*' 'Package|Version|Section|Installed-Size|Homepage|Supported' | relpipe-out-tabular WARNING: apt does not have a stable CLI interface. Use with caution in scripts. recfile: ╭─────────────────────────┬──────────────────────┬────────────────────┬─────────────────────────┬─────────────────────────────────────────────────┬────────────────────╮ │ Package (string) │ Version (string) │ Section (string) │ Installed-Size (string) │ Homepage (string) │ Supported (string) │ ├─────────────────────────┼──────────────────────┼────────────────────┼─────────────────────────┼─────────────────────────────────────────────────┼────────────────────┤ │ emacs25 │ 25.2+1-6 │ editors │ 19,7 MB │ http://www.gnu.org/software/emacs/ │ 5y │ │ emacsen-common │ 2.0.8 │ editors │ 139 kB │ │ 5y │ │ emacspeak │ 47.0+dfsg-1 │ universe/editors │ 21,8 MB │ http://emacspeak.sf.net │ │ │ emacs │ 47.0 │ editors │ 8 192 B │ │ 5y │ │ emacs25-lucid │ 25.2+1-6 │ universe/editors │ 19,7 MB │ http://www.gnu.org/software/emacs/ │ │ │ emacs25-nox │ 25.2+1-6 │ editors │ 17,9 MB │ http://www.gnu.org/software/emacs/ │ 5y │ │ emacs-goodies-el │ 36.3ubuntu1 │ editors │ 3 433 kB │ │ 5y │ │ emacs25-bin-common │ 25.2+1-6 │ editors │ 473 kB │ http://www.gnu.org/software/emacs/ │ 5y │ │ emacs25-common-non-dfsg │ 25.2+1-1 │ multiverse/editors │ 4 685 kB │ │ │ │ emacs25-common │ 25.2+1-6 │ editors │ 66,9 MB │ http://www.gnu.org/software/emacs/ │ 5y │ │ emacs25-el │ 25.2+1-6 │ editors │ 16,3 MB │ http://www.gnu.org/software/emacs/ │ 5y │ │ emacs25-dbg │ 25.2+1-6 │ debug │ 5 604 kB │ http://www.gnu.org/software/emacs/ │ 5y │ │ emacs25-lucid-dbg │ 25.2+1-6 │ debug │ 5 703 kB │ http://www.gnu.org/software/emacs/ │ 5y │ │ emacs25-nox-dbg │ 25.2+1-6 │ debug │ 3 996 kB │ http://www.gnu.org/software/emacs/ │ 5y │ │ emacs-nox │ 47.0 │ universe/editors │ 8 192 B │ │ │ │ emacs-window-layout │ 1.4-1 │ universe/lisp │ 65,5 kB │ https://github.com/kiwanami/emacs-window-layout │ │ │ emacs-calfw │ 1.6+git20170704-1 │ universe/lisp │ 193 kB │ https://github.com/kiwanami/emacs-calfw/ │ │ │ emacs-calfw-howm │ 1.6+git20170704-1 │ universe/lisp │ 37,9 kB │ https://github.com/kiwanami/emacs-calfw/ │ │ │ emacs-intl-fonts │ 1.2.1-10 │ universe/x11 │ 11,2 MB │ │ │ │ emacs-jabber │ 0.8.92+git98dc8e-2 │ universe/net │ 10,2 kB │ http://emacs-jabber.sourceforge.net/ │ │ │ emacs-mozc │ 2.20.2673.102+dfsg-2 │ universe/utils │ 125 kB │ https://github.com/google/mozc.git │ │ │ emacs-mozc-bin │ 2.20.2673.102+dfsg-2 │ universe/utils │ 837 kB │ https://github.com/google/mozc.git │ │ │ emacspeak-espeak-server │ 47.0+dfsg-1 │ universe/editors │ 58,4 kB │ http://emacspeak.sf.net │ │ │ emacspeak-ss │ 1.12.1-7 │ universe/editors │ 270 kB │ │ │ │ emacs24 │ │ │ │ │ │ ╰─────────────────────────┴──────────────────────┴────────────────────┴─────────────────────────┴─────────────────────────────────────────────────┴────────────────────╯ Record count: 25
Akorát apt
varuje, že to není stabilní API. A chtělo by to trochu poladit formátování, aby to byly víc strojově čitelné údaje (např. velikosti).
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.