Jsongrep je open-source nástroj, který efektivně prohledává JSON dokumenty (editovat je neumí). Kompiluje regulérní jazyk dotazu do podoby deterministického konečného automatu (DFA), díky čemuž prochází strom JSON dokumentu pouze jednou a je v tom tedy rychlejší než jiné nástroje jako jsou například jq, JMESPath nebo jql. Jsongrep je napsaný v programovacím jazyce Rust, zdrojový kód je dostupný na GitHubu.
O víkendu probíhá v Praze na Karlově náměstí 13 konference Installfest 2026. Na programu je celá řada zajímavých přednášek a workshopů. Vstup na konferenci je zcela zdarma, bez nutnosti registrace. Přednášky lze sledovat i online na YouTube.
Mozilla a společnost Mila oznámily strategické partnerství za účelem rozvoje open source a suverénní AI. Cílem je ukázat, že open source AI může konkurovat uzavřeným systémům. Obě organizace chtějí posílit technologickou suverenitu a snížit závislost na hrstce velkých technologických firem.
Adam Rice předvedl, že pomocí DNS lze distribuovat a spustit kompletní hru DOOM. Rozdělil WAD soubory a binárky do téměř 2000 DNS záznamů v Cloudflare zóně (jeden TXT záznam v DNS může nést okolo 2000 znaků textu). Ty pak stáhl PowerShellem, dekomprimoval a spustil přímo v paměti počítače bez nutnosti zápisu na disk, což prakticky dokazuje, že DNS může sloužit jako distribuované úložiště dat a možný kanál pro načítání kódu. Repozitář projektu je na GitHubu.
Dnes a zítra probíhají Arduino Days 2026. Na programu je řada zajímavých přednášek. Sledovat je lze od 17:00 na YouTube. Zúčastnit se lze i lokálních akcí. Dnes v Poličce v městské knihovně a zítra v Praze na Matfyzu.
Byla vydána beta verze Ubuntu 26.04 LTS s kódovým názvem Resolute Raccoon. Přehled novinek v poznámkách k vydání. Dle plánu by Ubuntu 26.04 LTS mělo vyjít 23. dubna 2026.
Byla vydána aktualizována Příručka pro začínající wikipedisty a wikipedistky (pdf).
Ubuntu plánuje v budoucích verzích nahradit tradiční nástroje pro synchronizaci času (chrony, linuxptp a gpsd) novým, v Rustu napsaným ntpd-rs, který nabídne vyšší bezpečnost a stabilitu.
Byla vydána nová verze 7.6 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Správce hesel KeePassXC byl nahrazen správcem hesel GNOME Secrets. Bitcoinová peněženka Electrum byla povýšena na verzi 4.7.0. Tor Browser byl povýšen na verzi 15.0.8. Další novinky v příslušném seznamu.
Chris Down v obsáhlém článku „vyvrací mýty o zswap a zram“, vysvětluje, co vlastně dělají a jaké jsou mezi nimi rozdíly. Doporučuje vyhýbat se zram na serveru a bez OOM.
pack_start = time.time()
pack = Popen(['tar', '-cJf', account_archive,'-T'+account_filelist ])
pack.wait()
pack_end = time.time()
řešení to není špatné (rozumějte - funguje ) , ale tar asi používá maximální kompresi. Pokoušel jsem se do volání Popen propašovat XZ_OPT=3, ale tudy asi cesta nevede ( nebo nevím jak na to ).
je nějaká jiná možnost jak vyladit kompresi a mít možnost získat čas potřebný k zabalení ?
prý přes shell to není bezpečné, psali někde na SOwerflow, ale zas takový kabrňák nejsem, abych to posoudil.
Jinak komprese trvá skoro 19 hodin a když to stáhnu na 10 bude to stačit ( 140GB pošty )
Nevadilo by mi ani volání taru v nějaké funkci, která by ten čas komprese hlídala, ale zároveň umožnila skriptu pokračovat v přípravě dalšího seznamu, ( komprimuju poštu po účtech( 1 účet = 1 složka = 1 archiv + csv s obsahem ( kdy predmet, kdo ) ne vše najednou ) případně spuštění dalšího vlákna s tarem ( čtyřjádro - asi bych to hlídal na max 3 tar-vlákna ( jak ?? ) )
Mám nástín, ale zatím nevyzkoušeno - pakování do funkce a tu volat subprocess.popen, ve funkci zase subprocess.popen tar a čekat na něj. jak ohlídat jen 3 spuštěné tary zatím nevím. Snad nějaký counter (globální proměnná ), který by to hlídal ... funguje to ale ve vláknech ? aby se nepoprali o tu proměnnou ?
Předem děkuji i za částečné nakopnutí správným směrem.
1, vyladit kompresi taru / použít jiný postup pro kompresi
2. popsat nějaké schéma, jak komprimovat ve více vláknech ( jasně, čas komprese budou mít jednotlivá vlákna asi pěkně natažený, ale snad to celkový čas zmenší )
Milan
Řešení dotazu:
)
prý přes shell to není bezpečné, psali někde na SOwerflowPokud tam nebudeš předávat argumenty, které ti dal uživatel, tak je to v pohodě.
Nevadilo by mi ani volání taru v nějaké funkci, která by ten čas komprese hlídala, ale zároveň umožnila skriptu pokračovat v přípravě dalšího seznamuJá na tohle vždycky pouštěl thread… Řekne se prostě
threading.Thread(target=funkce, args=(a,b,c)); t.start()
je nějaká jiná možnost jak vyladit kompresi
tar c | xz -3 > foo ?
Pokud tam nebudeš předávat argumenty, které ti dal uživatel, tak je to v pohoděne, skript běží pod rootem
tar c | xz -3 > footak ono to jde i ( v shellu ) XZ_OPT=3 tar -cJf "$bkfile" -T$usersez čili podobně subprocess.popen( "cely prikaz" shell=true ) ... ale ten shell .. jak jsem psal - na SO jednomu tazateli rozmlouvali. každopádně díky za navedení. Dá se u threadu sledovat, zda ještě "žije" ?
ne, skript běží pod rootemA? Ten problém se shellem je prostě v tom, že když tam dáváš argumenty od uživatele, je složité to korektně escapovat tak, aby když ti uživatel zadá
";rm -rf /*;, tak to shell nevyhodnotil jako další příkaz. Ty tam ale argumenty od uživatele, jestli to chápu dobře, nemáš (předáváš tam jen jméno souboru, které si sám generuješ).
os.putenv("XZ_OPTS", "3")
Ak používaš Python3, môžeš pri tej funkcii wait použiť aj argument timeout a ak sa program v tom čase neskončí, vyhodí tá funkcia výnimku subprocess.TimeoutExpired. Takže nie je problém pospúšťať viac programov pomocou Popen a potom si na počkať volaním wait v nejakom cykle.
Prípadne môže byť vhodnejšie použiť funkciu poll (a sleep). Wait sa potom použije len ak poll nevráti None (a teda program sa ukončil).
souborů celkem lidsky čas komprese lidsky archív kompr. poměr 29676 20569932136 20.0GB 10,797.59 02:59:57.592 13261289712 0,64 17021 17133312262 17.0GB 4900,4 01:21:40.3 9398976354 0,55čili i na tomto vzorku je vidět, že 7z zabodoval.
from concurrent.futures import ThreadPoolExecutor as Executor
import subprocess
def run_command(cmd):
p = subprocess.Popen(cmd)
p.wait()
return p.pid
def execute(commands):
with Executor(max_workers=3) as executor:
for pid in executor.map(run_command, commands):
print(pid)
Jsou lepší vlákna nebo event loop?
Tiskni
Sdílej: