Byla vydána (𝕏) srpnová aktualizace aneb nová verze 1.104 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.104 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Spotify spustilo přehrávání v bezztrátové kvalitě. V předplatném Spotify Premium.
Spoluzakladatel a předseda správní rady americké softwarové společnosti Oracle Larry Ellison vystřídal spoluzakladatele automobilky Tesla a dalších firem Elona Muska na postu nejbohatšího člověka světa. Hodnota Ellisonova majetku díky dnešnímu prudkému posílení ceny akcií Oraclu odpoledne vykazovala nárůst o více než 100 miliard dolarů a dosáhla 393 miliard USD (zhruba 8,2 bilionu Kč). Hodnota Muskova majetku činila zhruba 385 miliard dolarů.
Bylo vydáno Eclipse IDE 2025-09 aneb Eclipse 4.37. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
T-Mobile od 15. září zpřístupňuje RCS (Rich Communication Services) zprávy i pro iPhone.
Společnost ARM představila platformu Arm Lumex s Arm C1 CPU Cluster a Arm Mali G1-Ultra GPU pro vlajkové chytré telefony a počítače nové generace.
Unicode Consortium, nezisková organizace koordinující rozvoj standardu Unicode, oznámila vydání Unicode 17.0. Přidáno bylo 4 803 nových znaků. Celkově jich je 159 801. Přibylo 7 nových Emoji.
Apple představil (YouTube) telefony iPhone 17 Pro a iPhone 17 Pro Max, iPhone 17 a iPhone Air, sluchátka AirPods Pro 3 a hodinky Watch Series 11, Watch SE 3 a Watch Ultra 3.
Realtimová strategie Warzone 2100 (Wikipedie) byla vydána ve verzi 4.6.0. Podrobný přehled novinek, změn a oprav v ChangeLogu na GitHubu. Nejnovější verzi Warzone 2100 lze již instalovat také ze Snapcraftu a Flathubu.
Polské vývojářské studio CD Projekt Red publikovalo na Printables.com 3D modely z počítačové hry Cyberpunk 2077.
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: