Byla vydána nová verze 25.10.31 svobodného multiplatformního video editoru Shotcut (Wikipedie) postaveného nad multimediálním frameworkem MLT. Shotcut je vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.
O víkendu probíhá konference OpenAlt 2025 (Stream). Na programu je spousta zajímavých přednášek. Pokud jste v Brně, stavte se. Vstup zdarma.
Josef Průša představil novou velkoformátovou uzavřenou CoreXY 3D tiskárnu Prusa CORE One L a nový open source standard chytrých cívek OpenPrintTag i s novou přepracovanou špulkou.
Na GOG.com běží Autumn Sale. Při té příležitosti je zdarma hororová počítačová hra STASIS (ProtonDB: Platinum).
Ubuntu 25.10 má nově balíčky sestavené také pro úroveň mikroarchitektury x86-64-v3 (amd64v3).
Byla vydána verze 1.91.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Ministerstvo průmyslu a obchodu vyhlásilo druhou veřejnou soutěž v programu TWIST, který podporuje výzkum, vývoj a využití umělé inteligence v podnikání. Firmy mohou získat až 30 milionů korun na jeden projekt zaměřený na nové produkty či inovaci podnikových procesů. Návrhy projektů lze podávat od 31. října do 17. prosince 2025. Celková alokace výzvy činí 800 milionů korun.
Google v srpnu oznámil, že na „certifikovaných“ zařízeních s Androidem omezí instalaci aplikací (včetně „sideloadingu“) tak, že bude vyžadovat, aby aplikace byly podepsány centrálně registrovanými vývojáři s ověřenou identitou. Iniciativa Keep Android Open se to snaží zvrátit. Podepsat lze otevřený dopis adresovaný Googlu nebo petici na Change.org.
Byla vydána nová verze 18 integrovaného vývojového prostředí (IDE) Qt Creator. S podporou Development Containers. Podrobný přehled novinek v changelogu.
Cursor (Wikipedie) od společnosti Anysphere byl vydán ve verzi 2.0. Jedná se o multiplatformní proprietární editor kódů s podporou AI (vibe coding).
for N in {1..1000}; do
A=$(bc -l <<< "scale=9; s(3.14159/$N)")
B=$(bc -l <<< "scale=9; c(3.14159/$N)")
printf "$A;$B"
doneJe to teda dost zjednodušený, aby se v tom dalo vyznat.Řešení dotazu:
#!/bin/bash
# test1.sh
for N in {1..5000}; do
A=$(bc -l <<< "scale=9; s(3.14159/$N)" &)
B=$(bc -l <<< "scale=9; c(3.14159/$N)" &)
wait
printf "$A;$B\n"
done
Pokud máš více jak 2 jádra, je asi lepší paralelizovat iterace:
#!/bin/bash
# test2.sh
function wait_for_threads() {
while [ $(jobs -rp | wc -l) -ge $threads ];
do sleep $check_interval_secs;
done
}
threads=$(grep processor /proc/cpuinfo | wc -l)
check_interval_secs=0.01
for N in {1..5000}; do
wait_for_threads
(
A=$(bc -l <<< "scale=9; s(3.14159/$N)")
B=$(bc -l <<< "scale=9; c(3.14159/$N)")
printf "$N $A;$B\n"
) &
done | sort -n | cut -d' ' -f2-
Režie bude ale obrovská, vzhledem k rychlosti k výpočtu v bc. Takže by to chtělo rozdělit iterace do clusterů, které by byli prováděny paralelně:
#!/bin/bash
# test3.sh
iters=5000
threads=$(grep processor /proc/cpuinfo | wc -l)
cluster_size=$((iters/threads))
last_cluster_size=$((iters-cluster_size*(threads-1)))
temp=$(mktemp -d)
for C in $(seq $threads); do
first_iter=$(( (C-1) * cluster_size + 1 ))
if [ $C -lt $threads ]; then
last_iter=$(( first_iter + cluster_size -1 ))
else
last_iter=$(( first_iter + last_cluster_size -1 ))
fi
(
for N in $(seq $first_iter $last_iter); do
A=$(bc -l <<< "scale=9; s(3.14159/$N)")
B=$(bc -l <<< "scale=9; c(3.14159/$N)")
printf "$A;$B\n"
done
) > $temp/$C.list &
done
wait
for C in $(seq $threads); do
cat $temp/$C.list
rm $temp/$C.list
done
rmdir $temp
Benchmark na i5 (4 core):
$ time ./test0.sh > test0.output # original bez paralelizace real 0m15.776s user 0m0.928s sys 0m1.628s $ time ./test1.sh > test1.output real 0m12.012s user 0m0.608s sys 0m1.588s $ time ./test2.sh > test2.output real 0m11.803s user 0m1.300s sys 0m1.288s $ time ./test3.sh > test3.output real 0m3.278s user 0m0.388s sys 0m0.808s $ for i in 1 2 3; do cmp test0.output test$i.output; echo $?; done 0 0 0
CPU=$(grep processor /proc/cpuinfo | wc -l) for S in $(seq 1 $CPU); do sleep .00$((S-1)) for N in $(seq $S $CPU 1000); do A=$(bc -l <<< "scale=9; s(3.14159/$N)") B=$(bc -l <<< "scale=9; c(3.14159/$N)") printf "$A;$B" done & done wait
.
/bin/dash, který by měl být upraven pro dávkové zpracování.
/bin/dash hodně zjednodušený, aby běhal co nejrychleji a dělal jen to nezbytné, co shell musí umět. Pro daný případ se tedy nehodí.
bc, Pythonu, Perlu, AWK, Haskellu nebo čemkoli jiném, co je výkonnější než Bash? Přeskakovat při každém průchodu cyklem do bc a zpátky není vůbec efektivní. Navíc se Bash na zpracování čísel vůbec nehodí.
#!/bin/bash
bc -l <<EOT
scale = 9
for (n = 1; n <= 1000; n++) {
print s(3.14159/n), ";", c(3.14159/n), "\n";
}
quit
EOT

#!/bin/bash
bc_call() {
bc -l <<EOT
scale = 9
for (n = 1; n <= 1000; n++) {
print s(3.14159/n), " ", c(3.14159/n), "\n";
}
EOT
}
bc_call | while read A B; do
printf "\e[${B};${A}H\e[48;5;161m \e[0m"
done
Tiskni
Sdílej: