Raspberry Pi Connect, tj. oficiální služba Raspberry Pi pro vzdálený přístup k jednodeskovým počítačům Raspberry Pi z webového prohlížeče, byla vydána v nové verzi 2.5. Nejedná se už o beta verzi.
Google zveřejnil seznam 1272 projektů (vývojářů) od 185 organizací přijatých do letošního, již jednadvacátého, Google Summer of Code. Plánovaným vylepšením v grafických a multimediálních aplikacích se věnuje článek na Libre Arts.
Byla vydána (𝕏) dubnová aktualizace aneb nová verze 1.100 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.100 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána v nové verzi 2025.5.
OpenSearch (Wikipedie) byl vydán ve verzi 3.0. Podrobnosti v poznámkách k vydání. Jedná se o fork projektů Elasticsearch a Kibana.
PyXL je koncept procesora, ktorý dokáže priamo spúštat Python kód bez nutnosti prekladu ci Micropythonu. Podľa testov autora je pri 100 MHz približne 30x rýchlejší pri riadeni GPIO nez Micropython na Pyboard taktovanej na 168 MHz.
Grafana (Wikipedie), tj. open source nástroj pro vizualizaci různých metrik a s ní související dotazování, upozorňování a lepší porozumění, byla vydána ve verzi 12.0. Přehled novinek v aktualizované dokumentaci.
Raspberry Pi OS, oficiální operační systém pro Raspberry Pi, byl vydán v nové verzi 2025-05-06. Přehled novinek v příspěvku na blogu Raspberry Pi a poznámkách k vydání. Pravděpodobně se jedná o poslední verzi postavenou na Debianu 12 Bookworm. Následující verze by již měla být postavena na Debianu 13 Trixie.
Richard Stallman dnes v Liberci přednáší o svobodném softwaru a svobodě v digitální společnosti. Od 16:30 v aule budovy G na Technické univerzitě v Liberci. V anglickém jazyce s automaticky generovanými českými titulky. Vstup je zdarma i pro širokou veřejnost.
sudo-rs, tj. sudo a su přepsáné do programovacího jazyka Rust, nahradí v Ubuntu 25.10 klasické sudo. V plánu je také přechod od klasických coreutils k uutils coreutils napsaných v Rustu.
for file in $(find -P ~/fotky -type f -exec md5sum '{}' \;|awk '{ sum[$1]++ ;path[$1]=$2 } END {for (meno in sum) if (sum[meno] == 2) print path[meno]}');
do rm -f $file && echo "Delete redundant file $file";done
#!/usr/bin/env python import os,md5 def CalcMD5(filename): buffersize = 1000000 sum = md5.new() f = open(filename) while True: data = f.read(buffersize) if not data: break sum.update(data) f.close() return sum.hexdigest() def removefile(name): print 'removing', name # os.remove(name) def removeduplicit(filelist): md5sums = {} for name in filelist: sum = CalcMD5(name) if not md5sums.has_key(sum): md5sums[sum] = name continue name1 = md5sums[sum] name2 = name print 'duplicit files: ', name1, name2 if os.path.getctime(name1) > os.path.getctime(name2): removefile(name1) md5sums[sum] = name2 else: removefile(name2) path = '.' sizes = {} for root, dirs, files in os.walk(path): for file in files: name = os.path.join(root, file) if not os.path.isfile(name): continue size = os.path.getsize(name) if sizes.has_key(size): sizes[size].append(name) else: sizes[size] = [name] for k in sizes.keys(): if len(sizes[k]) > 1: removeduplicit(sizes[k])Nejprve najde soubory, které mají stejnou velikost a teprve z nich počítá md5sum. Když najde duplicitu, smaže ten novější. Namátkou jsem to zkusil na jednom adresáři a vychází to asi desetkrát rychlejší než ten skript v BASHi.
rsync -avz /mnt/fotak/ /home/miso/fotky/
find -P ~/fotky/ -type f -exec md5sum '{}' \;|awk '{ sum[$1]++ } END {for (meno in sum) if (sum[meno] == 2) print meno}'
cmp -s file1 file2 && echo 'files are identical'
Porovnání md5sumy (32B) je daleko rychlejší, než porovnávat 2MB soubory.Jenže k vytvoření md5sum je potřeba oba soubory nejprve přečíst. A když už se čtou, tak je lepší je rovnou porovnávat. Jinou situací by bylo, kdyby se součty uchovávaly.
Nehledě na to, že vyhledání identických prvků v seznamu má kvadratickou složitost (pro 100 fotek bych skutečně nechtěl až 10000x porovnávat soubory).Jo, to mi došlo v okamžiku, kdy jsem odeslal svůj předchozí příspěvek. Samozřejmě, beru to zpět a jako bych nic neříkal
Ale ved to sa v tom skripte riesi.Kdepak. Skript po ukončení všechny md5 součty zapomene - nikam si je neukládá. Takže při každém spuštění musí každý soubor znovu přečíst. A já jsem tvrdil, že místo počítání md5 je rychlejší ty soubory přímo porovnávat. Ale můj argument platí pouze pro dva soubory, nikoli pro větší počet (viz Heronův komentář).
Hodnoty sa uchovavaju, pretoze sa hlada duplicita.
A já jsem tvrdil, že místo počítání md5 je rychlejší ty soubory přímo porovnávat.A důkaz máte ? Proč myslíte, že něco jako kontrolní součet existuje ? Právě proto, aby se nemusely porovnávat soubory celé. Je mnohem méně náročné udělat ze dvou souborů sumy a ty porovnat, než porovnávat dva soubory blok po bloku. Jestli chcete, ověřte si to experimentálně:
# nejdřív údajně "rychlejší" přímé srovnání $ time cmp 200M.file 500M.file real 0m36.040s user 0m3.212s sys 0m0.992s # a teď ta "pomalejší" metoda $ time md5sum 200M.file; time 500M.file xcom.isp 173d175343421da0336770946587dcb4 200M.file real 0m2.793s user 0m1.280s sys 0m0.380s 677b7d80c9d71ab984ce3cbdfa59cc84 500M.file real 0m5.435s user 0m1.332s sys 0m0.392sTakže ?
$ time md5sum 200M.file; time md5sum 500M.filenějak se mi do toho zamíchala práce vedle...
$ time cmp file1-20MB file2-20MB real 0m0.318s user 0m0.220s sys 0m0.068s $ time md5sum file1-20MB; time md5sum file2-20MB 13d9f78c4116943ac63cc6b0ed045f9a file1-20MB real 0m0.241s user 0m0.176s sys 0m0.052s 13d9f78c4116943ac63cc6b0ed045f9a file2-20MB real 0m0.258s user 0m0.180s sys 0m0.044sZkusím to nějak shrnout:
cmp -s
.
Právě proto, aby se nemusely porovnávat soubory celé. Je mnohem méně náročné udělat ze dvou souborů sumy a ty porovnat,Jak velká část souboru se asi načte při počítání md5? (hint: 100%)
Takže zopakuj test s cmp -s
Jak by podle tebe mohlo potlačení výstupu (-s, -q, --silent nebo --quiet) ovlivnit rychlost této operace (snad kromě několika mikrosekund, které jsou potřeba na vygenerování a vypsání výstupu) ??
Jak velká část souboru se asi načte při počítání md5? (hint: 100%)Porovnávání dvou (velkých ...) souborů znamená načíst kousek souboru 1, kousek souboru 2, porovnat, zahodit ... a tak pořád dokola; při tvorbě hashe se načítají jen n-té bajty ze souboru a z nich se počítají hashe, v paměti se nikdy nemanipuluje s takovými objemy dat. P.S.: Přesto jsem udělal test i s volbou -s, výsledek byl řádově stejný (cmp kolem 1 minuty, md5sum 5 sekund)
Jak by podle tebe mohlo potlačení výstupu (-s, -q, --silent nebo --quiet) ovlivnit rychlost této operace (snad kromě několika mikrosekund, které jsou potřeba na vygenerování a vypsání výstupu) ??Rychlost operace to ovlivní docela zásadně, protože nemusí zjišťovat kde se ty soubory liší. U různě velkých souborů tedy skončí hned jak zjistí jejich velikost.
při tvorbě hashe se načítají jen n-té bajty ze souboru a z nich se počítají hasheBavíme se o md5, takže tohle je nesmysl.
-s --quiet --silent Output nothing; yield exit status only.Mohl bys mi vysvětlit, jak to souvisí se samotným procesem porovnávání ? Tahle volba ovlivňuje jen standardní výstup, jestli to vypíše "Soubory jsou shodné" nebo jen vrátí nulu.
Better to keep your mouth shut and be thought a fool than to open it and remove all doubt.Aby vypsal, na kterém bajtu se soubory liší, musí je přečíst aspoň po ten bajt, i když jsou jinak velké a je od začátku jasné, že se budou lišit.
$ ls -1sh f1 f2 232M f1 314M f2 $ strace cmp -s f1 f2 ... open("f1", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=242081792, ...}) = 0 open("f2", O_RDONLY|O_LARGEFILE) = 4 fstat64(4, {st_mode=S_IFREG|0644, st_size=328479232, ...}) = 0 _llseek(3, 0, [0], SEEK_CUR) = 0 _llseek(4, 0, [0], SEEK_CUR) = 0 exit_group(1) = ?
$ time cmp -s file1-20MB file2-20MB real 0m0.155s user 0m0.008s sys 0m0.120s
$ time cmp file1-20MB file2-20MB real 0m0.369s user 0m0.208s sys 0m0.092s $ time cmp -s file1-20MB file2-20MB real 0m0.143s user 0m0.020s sys 0m0.104sAle tato debata už je celkem dost off-topic
Tiskni
Sdílej: