Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
V Tiraně proběhl letošní Linux App Summit (LAS) (Mastodon). Zatím nesestříhané videozáznamy přednášek jsou k dispozici na YouTube.
Některé formáty chceme mít textové, protože obsahují převážně textová data, ale občas do nich potřebujeme vložit třeba obrázek nebo jinou binární přílohu, což se typicky řeší pomocí Base64 (případně hexadecimálního řetězce).1 Tento textový formát pak chceme někdy zase komprimovat… Textové části se komprimují obvykle dobře, ale na částech s Base64 daty si většina kompresních algoritmů si na nich vyláme zuby a uloží data velmi neefektivně (výrazně hůře, než by mohly při zachování bezztrátovosti).
Existuje nějaký algoritmus, který by v textu dokázal detekovat Base64 nebo hex části a u nich efektivně komprimovat původní binární data a jen si poznamenat, že se výsledek při dekompresi má převést zase zpět na Base64 či hex? Ano, můžou tam být nějaké mezery či zalomení řádků, což přináší nejednoznačnost, ale jinak je to bezztrátový převod, který lze provádět neomezeně sem a tam. Stačilo by podporovat jen jednu nebo několik málo variant (např. Base64 bez zalomení a mezer nebo Base64 se zalomením na x. sloupci) a ke komprimovaným datům si ji poznamenat.
Někdy by se taky hodila polo-ruční komprese pomocí předem definovaného slovníku – když se nám v textu často opakují určité řetězce, mohli bychom si je na začátku nebo v průběhu textu pomocí nějakých příkazů (uvozených např. zpětným lomítkem) přidat do slovníku a pak je opakovaně používat (zase nějakým příkazem se zpětným lomítkem). V podstatě by šlo o velmi jednoduchý jazyk, který umožňuje pouze definovat proměnné a pak na ně odkazovat. Vše, co není \příkazem, se bere jako doslovná hodnota a při dekompresi/dekódování se posílá rovnou na výstup. Při kompresi bychom museli algoritmu sami poskytnout slovník často používaných řetězců (případně by se je algoritmus mohl pokusit najít sám, ale to znamená více-průchodové zpracování). Výhoda by byla v tom, že by to byl pořád lidsky čitelný text a i tu dekompresi by mohl snadno provést ručně člověk v průběhu čtení. Taky by to mohlo sloužit jako předzpracování pro nějaký obecný kompresní algoritmus a ve výsledku by to přineslo lepší kompresní poměr.
Existuje něco takového? Moc se mi nechce věřit, že bych byl první, kdo na tuhle úlohu narazil. (vím, že např. zstd
umožňuje natrénovat si vlastní slovník a uložit si ho do souboru, ale to není úplně to, co hledám)
[1] ano, svým způsobem je to prasárna a binární formáty tímto problémem netrpí, do nich se prostě vloží atribut/uzel binárního typu a máme hotovo; nicméně realita je taková, že textové formáty s vloženým Base64 se používají a těžko s tím něco naděláme – je potřeba se s tím naučit žít a efektivně pracovat
Tiskni
Sdílej:
curl -sb -H https://investorplace.com/wp-content/uploads/2014/05/DuckDuckGo-Logo.jpg | wc -c
116027
curl -sb -H https://investorplace.com/wp-content/uploads/2014/05/DuckDuckGo-Logo.jpg | base64 | wc -c
156740
curl -sb -H https://investorplace.com/wp-content/uploads/2014/05/DuckDuckGo-Logo.jpg | base64 | gzip -f | wc -c
100488
curl -sb -H https://investorplace.com/wp-content/uploads/2014/05/DuckDuckGo-Logo.jpg | gzip -f | wc -c
97931
Ale možná nám Franta předvede nějaký případ kdy je to mnohem horší..?
Viz níže, může to být třetina, což už docela rozdíl je.
Co se týče těch opakujících řetězců, přemýšlím např. nad logy nebo nad nějakými výpisy, do kterých jsou vložená na každém řádku (nebo často) nějaká data, která mají svoji hlavičku nebo jinou opakující se část.
Já právě nevím, jestli se to vyplatí – proto tahle diskuse. Nejradši bych, kdyby se ukázalo, že tohle už někdo vyřešil a algoritmus a nástroj pro efektivní kompresi opakujících se textů a Base64 už existuje :-)
V případě dat, která už nejdou víc zkomprimovat (např. ten JPEG), je ten rozdíl minimální. Ale u dat, která by komprimovat šlo, se to zabalení do Base64 ukazuje jako dost velká překážka – algoritmus se přes něj nedostane k surovým datům a pracuje výrazně méně efektivně. Příklad:
╭──────────────────────────────┬─────────────────┬─────────────────────────────────────╮ │ soubor (string) │ bajtů (integer) │ % oproti nekomprimovanému (integer) │ ├──────────────────────────────┼─────────────────┼─────────────────────────────────────┤ │ ./DuckDuckGo-Logo.jpg │ 116027 │ 100 │ │ ./DuckDuckGo-Logo.jpg.b64 │ 156740 │ 135 │ │ ./DuckDuckGo-Logo.jpg.b64.gz │ 100488 │ 87 │ │ ./DuckDuckGo-Logo.jpg.gz │ 97931 │ 84 │ │ ./etc.xml │ 48425 │ 100 │ │ ./etc.xml.b64 │ 65418 │ 135 │ │ ./etc.xml.b64.gz │ 5735 │ 12 │ │ ./etc.xml.gz │ 1955 │ 4 │ ╰──────────────────────────────┴─────────────────┴─────────────────────────────────────╯
A rozdíl 5 735 vs. 1 955 mi přijde už docela výrazný – komprimovaná data by mohla zabírat třetinu místa.
nového komprimovacieho jazyka?
Ten „jazyk“ se týká té druhé části, kde by šlo ručně definovat slovník (opakující se řetězce). Ten problém Base64 (či hex) je na tom nezávislý.
I když to by vlastně taky šlo řešit nějakým preprocesorem a postprocesorem – před kompresí by se mohla rozpoznaná Base64 data dekódovat a vložit v surové podobě a jen nějak označit, kde mají začátek a konec – pak by se to prohnalo libovolným generickým kompresním algoritmem, který by mohl pracovat efektivněji, díky tomu, že by měl přístup k těm surovým datům. A při dekompresi by se to nejdřív dekomprimovalo třeba gzipem nebo xz a pak prohnalo postprocesorem, který by na základě těch značek (začátků a konců) zase vyrobil Base64 text.
preprocesorem a postprocesoremJasne treba to riešiť klasickou unixovou fylozofiou. Rovnako ako Tar nevie komprimovať, ale používa sa na komprimovanie, pritom dáta len pripraví na komprimovanie. Takéto riešenie mi príde až triviálne jednoduché. Identifikácia base64 nie je nijak zložitá. Samozrejme sa tam dajú riešiť aj nejaké iné botičky.
Jinak mě teda fascinuje, že jinde mluvíš o komplexitě jako o svatém grálu a tady navrhuješ extra speciální jazyk na řešení problému, který reálně asi nikoho netankuje.
Když se podíváš např. na HTML nebo e-mail (MIME), viz třeba komentář Dodatek III: Kódování, tak tam existuje řada různých kódování dat a několikanásobné obalování… historicky se na to nabalila spousta standardů – a to jde přitom jen o pouhé posílání e-mailů. Oproti tomu mi přijde jako dost malé zlo a naopak zjednodušení mít jeden univerzální standard třeba pro tu ruční slovníkovou kompresi textů. Implementace by byla celkem triviální a vzhledem k tomu, že by to bylo univerzální (šlo by to použít na logy, na XML, na e-maily atd.), tak by se ty náklady (komplexita) rozložily.
Jak jsem psal, nevím, jestli to za to stojí, ale přeci jen mít mít třeba dvě třetiny méně dat není úplně malý rozdíl.
Mimochodem, volbou kompresního alg lze získat mnohem víc. Když jsem teď zkusil ten zkušební soubor (487MB base64) v gzipu, tak to má 67MB. Jen změnou na xz(27MB) jsem získal bez práce zmenšení na 39% velikosti gzipu.
To je irelevantní – pokud by se nějaký ten preprocesor používal, tak po něm může následovat libovolný kompresní algoritmus – tzn. klidně ten xz nebo zstd. Např. ten soubor etc.xml.b64.xz
by stále měl 2,35× víc než etc.xml.xz
, takže i v případě lepšího algoritmu by ten preprocesor docela dost místa ušetřil.
Když se podíváš např. na HTML nebo e-mail (MIME)Nic z toho nepovažuji za hodné následování. To, že ani v roce 2020 nemáme jednoduchý standard na posílání krátkých a převážně textových zpráv s omezenou velikostí a možností k tomu snadno připojit binární data (opět do velikostí malých MB), nepovažuji za něco, čím bychom se měli chlubit. Email je jedna z nejhorších služeb, kterou může admin spravovat (a těch vzájemných rozporů a nekompatibilit) je tam víc.
Oproti tomu mi přijde jako dost malé zlo a naopak zjednodušení mít jeden univerzální standard třeba pro tu ruční slovníkovou kompresi textů. Implementace by byla celkem triviální a vzhledem k tomu, že by to bylo univerzální (šlo by to použít na logy, na XML, na e-maily atd.), tak by se ty náklady (komplexita) rozložily.Ale my máme alg., které skvěle komprimují text i binární data. Problém je právě v tom base64. Tady je to docela hezky vysvětleno. Base64 je obfuskace původních bitů, ztrácí se původní vzory. (Samotného mě překvapilo, že to fakt není výřez z ascii, ale kompletně jiná abeceda. Ale já s base64 nepracuju vlastně nikde, tak jsem nad tím nikdy nepřemýšlel.) Takže by se mohla použít compression friendly transformace, pokud by byla vůbec potřeba. Mimochodem, právě jsem to zkusil na hexdumpu. Původní binární soubor těch 361MB, hex 722MB, xz toho hexu má 18MB. Ten alg poznal, že má polovinu bitů nulovou a tu větší velikost proti původním 14MB přičítám tomu, že xz tam vkládá hlavičky a padding (někde tady byla zprávička o novém archívním formátu, kde to borec rozebíral). To mi nepřijde vůbec špatné. Takže výběrem vhodné transformace se dá získat mnohem víc.
Jak jsem psal, nevím, jestli to za to stojí, ale přeci jen mít mít třeba dvě třetiny méně dat není úplně malý rozdíl.Tak pokud to bude v řádu kB, tak to asi význam nemá. Nepředpokládám, že bys tím prohánět TB dat.
Nic z toho nepovažuji za hodné následování.
Však jsem to taky uváděl jako odstrašující příklad.
To, že ani v roce 2020 nemáme jednoduchý standard na posílání krátkých a převážně textových zpráv s omezenou velikostí a možností k tomu snadno připojit binární data (opět do velikostí malých MB), nepovažuji za něco, čím bychom se měli chlubit.
Souhlas.
Ale my máme alg., které skvěle komprimují text i binární data. Problém je právě v tom base64.
Jenže v reálném světě se Base64 vyskytuje bohužel dost často. Já z toho taky nejsem nadšený. A ano, asi by bylo lepší ta binární data zapisovat hexadeximálně, což je výrazně jednodušší na implementaci (čtení i zápis), dalo by se to líp komprimovat a ještě je to „lidsky čitelné“ (máš šanci z toho vykoukat určité známé sekvence, zatímco Base64 asi ručně nelouská nikdo)… i za cenu toho, že ta data budou v nekomprimované podobě delší. Nicméně dobrý kompresní algoritmus by si měl efektivně poradit s daty, která se běžně v realitě vyskytují, a ne jen s nějakými ideálními daty (hypotetický dokonalý formát ve vakuu).
To Base64 je dobré asi fakt jen v případě, kdy ta binární data chceš vytisknout na papír a chceš ho oproti hexadecimálnímu zápisu spotřebovat méně. I když k tomuto účelu se hodí spíš nějaký formát, který má zabudované kontrolní součty a samoopravné mechanismy.
Bohužel spousta lidí má panickou hrůzu z binárních formátů, až nábožensky uctívají formáty textové, a když do nich potřebují vložit binární data (jako že dříve či později potřebují), tak je tam narvou v Base64 a jakékoli úvahy nad efektivitou a úsporností odbudou tím, že data se dají dodatečně zkomprimovat obecným algoritmem a řešit nějak úspornost by byla předčasná optimalizace. (někdy ano, ale přijde mi chybné apriori tvrdit, že to můžu jakkoli zprasit a ono se to pak nějak samo zkomprimuje – nejlepší kompresní poměr mají podle mého data, která se vůbec nemusela zapsat)
Nicméně dobrý kompresní algoritmus by si měl efektivně poradit s daty, která se běžně v realitě vyskytují, a ne jen s nějakými ideálními datyA on si neporadí? Podle mě si poradí velmi dobře. Pořád to dokáže zmenšit na 5% původní velikosti. A jen změna z gzipu na xz je pořádné zlepšení. (Tato změna přinese víc, než změna z base64 na base16.) Já se ve své praxi mnohem častěji setkávám s tím, že komprimační alg si nelze vybrat buď vůbec, nebo jen z omezeného výběru. Konkrétně ten gzip se používá (asi z historických důvodů) velmi často a je to více méně default. Někde to změnit jde (napadá mě třeba pgBarman) někde ne (bacula - s velkou slávou tam přidali lzo, což je rychlejší, ale s horším poměrem). ZFS má "jen" gzip (gzip-9 používám pro jail s archivem emailů v mdboxu a je to skvělé), btrfs už má i zstd. Tj. by bylo velké zlepšení, kdyby se dalo na více místech nasadit stávající lepší komprimační alg, než se pokoušet cokoliv udělat s base64.
Bohužel spousta lidí má panickou hrůzu z binárních formátůAno, k jejich škodě.
nejlepší kompresní poměr mají podle mého data, která se vůbec nemusela zapsatTo každopádně
tak je tam narvou v Base64 a jakékoli úvahy nad efektivitou a úsporností odbudou tím, že data se dají dodatečně zkomprimovat obecným algoritmem a řešit nějak úspornost by byla předčasná optimalizaceOtázkou je, o jakou optimalizaci by se mělo jednat a proč ti jde zrovna o velikost. Proč zrovna tato metrika? Existují i jiná kritéria, než je velikost souboru. (Vzpomněl jsem si na přednášku od autora XFS z roku 2012, kde na každou druhou otázku reagoval stylem: storage is cheap.) V některých případech je přístup k datům mnohem podstatnější, než velikost souboru. Mimochodem, ten příklad, co zde uvádím je SQLite DB soubor s katalogem z LightRoomu. Ano, poprvé mě překvapilo, jak moc to jde zkomprimovat, ale vzhledem k tomu, že mám několik set GB rawů, tak mě ta velikost zase tak moc nezajímá. A nějak mě nenapadá příklad, kdy by i rozdíl 30% ve velikosti komprimovaného souboru, ovšem na malých datech (textový formát asi nebude mít desítky GB) byl nějak kritický.
V oblasti komunikácie sa používa base64 ako WEB SAFE, aby sa do komunikácie nedostali riadiace znaky a podnes keď niekde použiješ NEbase64 dáta, tak pindajú minimálne do konzoly. Vždy sa to obhajovalo tým, že aby to nejak nezhadzovalo staré softvéry.Bohužel spousta lidí má panickou hrůzu z binárních formátůAno, k jejich škodě.
Originál: 360MB, xz: 13.7MB (3.8%) Base64: 487MB, xz: 26.6MB (5.5%)Nemůže to být tím, že ty komprimátory vidí plain text a použijí na to algorimus, který se víc hodí pro text než pro obecná binární data?
čím degraduje bitovú hĺbu bajtuTo by snad neměl být problém a je to základ pro komprimaci - předpoklad, že se nevyužívá (rovnoměrně) celá bitová šířka. Když bych z každého byte udělal 2x4, tak alg by měl poznat, že horní 4b jsou nulové. Ostatně i toto je běžný text, většina znaků je z poměrně malé oblasti ascii.
Problém je v tom, že opakující se stejná data po zakódování do Base64 mohou vypadat různě:
$ echo xxxx ahoj xxxxxxxxxxxxxxxxxxxxxxxxx ahoj xxxx | base64 eHh4eCBhaG9qIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHggYWhvaiB4eHh4Cg==
Slovo ahoj
je tam dvakrát, ale to kompresní algoritmus nepozná, protože jednou se kóduje jako CBhaG9qI
a jednou jako ggYWhvaiB4
(zhruba tam někde).
Ale když budeme mít štěstí a zrovna to vyjde na správnou pozici, tak to bude v obou případech stejný řetězec a algoritmus to může zkomprimovat:
$ echo xxxx ahoj xxxxxxxxxxxxxxxxxxxxxxxxxxx ahoj xxxx | base64 eHh4eCBhaG9qIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCBhaG9qIHh4eHgK
Oproti tomu u hexadecimálního kódování se stejná vstupní data kódují vždy na stejné výstupní hodnoty bez ohledu na pozici a sousední bajty, takže se to dá komprimovat mnohem lépe.
Viz také:
$ echo x$(seq 10) | base64 eDEgMiAzIDQgNSA2IDcgOCA5IDEwCg== $ echo $(seq 10) | base64 MSAyIDMgNCA1IDYgNyA4IDkgMTAK
posunem vstupních dat o jediný bajt získáš v Base64 úplně jiný výstup – bez dekódování nelze poznat, že to jsou z 99 % shodná data. U hexadeximálního kódování by ti na začátek přibylo 78
a ten zbytek by zůstal stejný.
Originál: 360MB, xz: 13.7MB, base64: 19.5MBCož je pořád menší, než ten komprimovanej base64.
Jenže abys to mohl udělat, tak právě ten algoritmus/nástroj musí umět detekovat Base64 a vytáhnout z něj původní data, která pak zkomprimuje. Ručně to samozřejmě udělat můžeš, ale to znamená upravit každou aplikaci, která s těmi daty bude pracovat a změnit její logiku a práci s každým takovým polem obsahujícím binární data kódovaná v Base64.
Oproti tomu, kdyby existoval kompresní algoritmus s lepší podporou Base64 nebo opakujících se textů, tak by na jeho použití šlo upravit aplikace výrazně snadněji – už dneska to bývá modulární, lze přecházet např. z gzipu na xz nebo zstd, informace o použitém kompresním algoritmu bývá v nějaké hlavičce, v metadatech (formátu či protokolu) tzn. na přechod mezi kompresními algoritmy bývají aplikace celkem připravené a lze to provést relativně snadno (zatímco měnit logiku aplikace a přidávat do ní navíc krok typu: a po tom, co dekódujeme Base64 z tohoto pole, tak je ještě dekomprimujeme gzipem… a nebo taky ne, protože staré verze data nekomprimovaly… aha, takže tam vlastně musíme někam přidat další hlavičku, kterou řekneme, zda data uvnitř Base64 jsou komprimovaná nebo ne… je výrazně pracnější).
Jenže abys to mohl udělat, tak právě ten algoritmus/nástroj musí umět detekovat Base64Mě to připadá jak rovnák na ohejbák. Máme tady alg, které fungují docela dobře na obecná binární i textová data. Jedinej problém je base64, které to obfuskuje tak, že to ty alg zmate. Ale třeba base16 (hexdump) už takovej problém není. Takže pokud se bavíme v obecné rovině a měl bych navrhnout textový formát i pro vkládání binárních dat, aby se to dobře komprimovalo, tak base64 není vhodné řešení.
nebo opakujících se textůTo přece nikdy nebyl problém. Však na tomto principu jsou založené všechny slovníkové alg. Na hledání co nejdelších a nejčastěji se opakujících řetězců.
na přechod mezi kompresními algoritmy bývají aplikace celkem připravené a lze to provést relativně snadnoNo však. Proto jsem psal, že změnou alg lze dosáhnout mnohem lepších výsledků.
zatímco měnit logiku aplikaceNo to jsem ale nikde nenavrhoval. Můj postoj je, že to nestojí za to řešit (ačkoliv je to teda velmi zajímavý problém), protože změna komprimačního alg přinese mnohem víc (i když ne tolik, jako nějaká ideální varianta). To je ale zcela běžné.
Takže pokud se bavíme v obecné rovině a měl bych navrhnout textový formát i pro vkládání binárních dat, aby se to dobře komprimovalo, tak base64 není vhodné řešení.
Já jsem se zabýval spíš trochu jinou úvahou: Máme spoustu dat v textových formátech s vnořeným Base64 (to je předpoklad, který nemůžeme jen tak změnit). Lze nějakou drobnou změnou zlepšit situaci?
Pokud by nový1 kompresní algoritmus lépe pracoval s Base64, tak by to podle mého nějaký přínos mělo. Tím neříkám, že se chystám něco takového vytvářet, jen mi to přišlo jako zajímavá úvaha a chtěl jsem vědět, jestli to už neexistuje.
[1] resp. on nemusí být úplně nový, může právě vzniknout složením nějakého stávajícího + preprocesoru
Někdy by se taky hodila polo-ruční komprese pomocí předem definovaného slovníku – když se nám v textu často opakují určité řetězce, mohli bychom si je na začátku nebo v průběhu textu pomocí nějakých příkazů (uvozených např. zpětným lomítkem) přidat do slovníku a pak je opakovaně používat (zase nějakým příkazem se zpětným lomítkem).Takhle nějak fungovala komprese textu v dobách DOSu a netuším, k čemu by to dnes bylo. To je kompromis na úrovni „trošičku zkomprimovat, ale né moc, aby to zůstalo jako text“. HTML, které každý tag nahrazuje nějakou referencí (nejkratší tag má 3 bajty, referenci by asi bylo logické mít co nejkratší, tzn. pro tu použít to zpětné lomítko, např.
\a
, a definici např. \a:<a href="
), bys fakt číst nechtěl. To už můžeš rovnou textové HTML nahradit binárním formátem a ušetřit dalších pár bajtů.
Jako úloha na procvičení nějakého jazyka nebo jen tak pro zábavu je to zajímavá a možná to někdy použiju, tak dík za nápad :) Praktické uplatnění mi ale přijde nulové.
# xxd -p <text >text.hex # base64 <text >text.b64 # tr -d \\n <text.h >text.b64-nolf # gzip <text.b64 >text.b64.gz # xz <text.b64 >text.b64.xz # ... $ du -b text* | sort -n 12388 text.xz 12976 text.hex-nolf.xz 13089 text.gzip 15538 text.hex-nolf.gz 16088 text.hex.xz 17264 text.b64-nolf.xz 18383 text.hex.gz 19772 text.b64-nolf.gz 20084 text.b64.xz 21077 text.b64.gz 36502 text 48672 text.b64-nolf 49313 text.b64 73004 text.hex-nolf 74221 text.hexDebaty, ci najprv kompresia a potom enkodovanie alebo naopak su uplne o hovne, pretoze enkodovanie sa nerobi preto, aby sme si uzili, ale pretoze prenosovy kanal (alebo ulozne medium) neznesie divoke znaky (s cim enkodovanie a potom kompresia nijak nepomoze). Takze ak je to vedomy umysel, tak samorejme najskor komprimovat. Ak sa ale da cakat, ze nejaky matlak to bude chciet komprimovat po tom, co to bolo enkodovane, tak sa da uvazovat o vyhodnosti hexdumpu
+1 Ono jde totiž o to, že to typicky není nějaký jeden „matlák“, který by si řekl: „vymyslím si vlastní formát, kde budou data nejdřív zabalená v Base64 a pak zkomprimovaná“. Ale je to víc lidí, kteří se navzájem moc nekoordinují a jeden balí data do Base64 a moc neřeší, kudy ta data potečou a jak. A druhý, který provozuje nějaký obecný komunikační kanál, kde zavedl obecnou kompresi, zase moc neřeší, jaká data tečou uvnitř, protože tam může být cokoli. A pak se to sejde a výsledkem je to, že se data nejdřív balí do Base64 a pak komprimují obecným algoritmem, který s takto kódovanými daty neumí efektivně pracovat.
Debaty, ci najprv kompresia a potom enkodovanie alebo naopak su uplne o hovne,...
Takze ak je to vedomy umysel, tak samorejme najskor komprimovat.
na částech s Base64/hex daty si většina kompresních algoritmů si na nich vyláme zubyTo je tím, že ty data, co převedeš do Base64 už jsou komprimované (jpg, png ...) a mají vysokou entropii. Proto komprese už jednou komprimovaného zpravidla vede na výstup větší než vstup. Teda, pokud ten první kompresní algoritmus za něco stál.
data = dekomprese(komprese(data))
).
Soubor | Velikost [B] | Poměr | |
all.srt | all.srt.b64 | ||
all.srt | 19516522 | 100,00 % | 74,03 % |
all.srt.gz | 7893461 | 40,45 % | 29,94 % |
all.srt.xz | 5320716 | 27,26 % | 20,18 % |
all.srt.b64 | 26364428 | 135,09 % | 100,00 % |
all.srt.b64.gz | 10928386 | 56,00 % | 41,45 % |
all.srt.b64.xz | 7242868 | 37,11 % | 27,47 % |
-rw-rw-r-- 1 bystrousak bystrousak 482M úno 17 13:44 test_data.tar -rw-rw-r-- 1 bystrousak bystrousak 651M úno 17 13:45 test_data.tar.base64 -rw-rw-r-- 1 bystrousak bystrousak 462M úno 17 13:45 test_data.tar.base64.lrz -rw-rw-r-- 1 bystrousak bystrousak 445M úno 17 13:44 test_data.tar.lrz
UKaj9NTj+ccE+dAb1JoOOqHtv6uRZYGWL8cX+/ZprWQapegrjA5p2eXHuPuF4I6gvXuh4GLliplcVNtlrBm9sZOoY/PDYiX8SEyvAL3v9LLvI9wRv+DqFrCSyLFw4qsuJ47rYvIjaE20+c5Gzwi6gW5us6IkMHWUSn4qX+rddxg6HgsdyYqK3Nl4X1VWjKahGChhmH0V+NIMK5Cr6FYe+w==
$ base64 -d|xxd -c 1|cut -d' ' -f2|sort|uniq -c UKaj9NTj+ccE+dAb1JoOOqHtv6uRZYGWL8cX+/ZprWQapegrjA5p2eXHuPuF4I6gvXuh4GLliplcVNtlrBm9sZOoY/PDYiX8SEyvAL3v9LLvI9wRv+DqFrCSyLFw4qsuJ47rYvIjaE20+c5Gzwi6gW5us6IkMHWUSn4qX+rddxg6HgsdyYqK3Nl4X1VWjKahGChhmH0V+NIMK5Cr6FYe+w== 3 ab 1 ac 1 ad 1 af 1 a0 3 a1 1 a2 1 a3 1 a5 2 a6 1 a8 1 ba 3 bd 2 bf 1 b0 2 b1 1 b2 1 b3 1 b4 1 b8 1 ce 1 cf 1 c3 3 c7 1 c8 1 c9 1 db 2 dc 1 dd 1 d0 1 d2 2 d4 2 d9 2 ea 1 eb 1 ed 2 ef 3 e0 1 e2 1 e3 2 e5 2 e8 3 fb 1 fc 1 f2 1 f3 2 f4 1 f6 1 f8 3 f9 1 0b 1 0c 2 0e 1 00 1 04 1 08 1 1a 1 1b 1 1d 2 1e 1 11 1 15 1 16 1 17 2 18 1 19 1 2a 2 2b 1 2e 1 2f 2 23 1 24 1 25 1 27 1 28 2 3a 1 30 1 4a 1 4c 1 4d 1 46 1 48 1 5c 2 5f 1 50 1 54 1 55 2 56 2 6e 1 61 3 62 1 63 1 64 2 65 1 68 2 69 1 7b 1 7d 1 7e 1 70 1 75 1 77 1 78 3 8a 2 8c 2 8e 2 81 1 85 1 9a 1 90 1 91 1 92 1 93 1 94 1 96 1 98 1 99 $ base64 -d|xxd -c 1|cut -d' ' -f2|sed 's/^.//'|sort|uniq -c UKaj9NTj+ccE+dAb1JoOOqHtv6uRZYGWL8cX+/ZprWQapegrjA5p2eXHuPuF4I6gvXuh4GLliplcVNtlrBm9sZOoY/PDYiX8SEyvAL3v9LLvI9wRv+DqFrCSyLFw4qsuJ47rYvIjaE20+c5Gzwi6gW5us6IkMHWUSn4qX+rddxg6HgsdyYqK3Nl4X1VWjKahGChhmH0V+NIMK5Cr6FYe+w== 12 a 13 b 9 c 9 d 11 e 9 f 11 0 10 1 9 2 9 3 10 4 10 5 8 6 6 7 14 8 10 9