Byl vydán LineageOS 24 (Mastodon). LineageOS (Wikipedie) je svobodný operační systém pro chytré telefony, tablety a set-top boxy založený na Androidu. Jedná se o nástupce CyanogenModu. LineageOS 24 je založený na Androidu 17.
Společnost Valve publikovala na svém GitLabu nákresy a schémata zapojení headsetu Steam Frame. Pro nekomerční účely.
Soutěž Pwn2Own Ireland 2026 skončila 9. října. Bezpečnostní výzkumníci získali celkem 1 262 000 dolarů na odměnách. Během soutěže bylo předvedeno zneužití 98 zero-day zranitelností. Testování zahrnovalo různé kategorie zařízení a software. Výzkumníci předváděli prakticky fungující útoky podle pravidel soutěže. Výsledky následně slouží výrobcům při přípravě oprav. Mezi pokořenými jsou: Samsung Galaxy S26, OpenAI Codex, Oracle Autonomous AI Database, Google Pixel 10, u iPhone 17 neuspěli.
Programovací jazyk Python byl vydán v nové verzi 3.15.0. Podrobný přehled novinek v aktualizované dokumentaci.
BIGWORDS.PAGE je open-source webová aplikace, která po otevření odkazu v prohlížeči vykreslí přes celou obrazovku jednoduché informační sdělení. Zpráva i její nastavení jsou uložené v části URL za znakem #, například odkaz https://bigwords.page/#abclinuxu zobrazí jako velký bílý nápis 'abclinuxu' na černém pozadí. Obsah odkazu lze upravovat i vestavěným editorem, ten umožňuje nastavovat formátování a vizuální efekty textu, časovače, QR kódy a obrázky. Zdrojový kód je dostupný pod licencí MIT na GitHubu.
V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."
Vláda Spojených států se rozhodla vyřadit americkou softwarovou společnost Microsoft a několik dalších velkých technologických podniků z programu, který umožňuje kvalifikovaným zahraničním pracovníkům získat povolení k trvalému pobytu. Oznámila to včera administrativa amerického prezidenta Donalda Trumpa. Opatření zdůvodnila rozsáhlým zneužíváním programu, který je dlouhodobě terčem kritiky ze strany Trumpových příznivců, neboť prý znevýhodňuje americké pracovníky.
Datové centrum největší ruské technologické společnosti Jandex v Rjazaňské oblasti se stalo cílem dronového útoku a zastavilo provoz. Jandexu se někdy přezdívá „ruský Google“. Provozuje nejoblíbenější internetový vyhledávač v Rusku nebo aplikace pro objednávky jídla a taxi. Využívají jej desítky milionů lidí v rusky mluvících zemích.
Francouzská společnost Mistral AI představila Mistral Large 4 (interně přezdívaný 'le Chonk', volně přeloženo 'pořádný macek'), 'open-weight multimodální hybridní instruct-and-reasoning model s architekturou granulárního MoE, nativně podporující více jak 160 jazyků'. Model má přes jeden bilión parametrů, z nichž při práci využívá 49 miliard, kontextové okno o délce milion tokenů a obrazový enkodér o 1,6 miliardách parametrů.
… více »Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.20. Díky 227 přispěvatelům.
takle by jako moch bejt ten domácák?? :O :O :D ;D
#!/usr/bin/env bash
# víc líp si pomenujem první&druhej argument skriptu
soubor_s_cisli_radku=$1
soubor_s_radky=$2
# načtem si z toho tvýho souboru s řádkama seřazený hodnoty do pole
readarray -t cisla_radku < <(sort -h $soubor_s_cisli_radku)
# pomocná proměná co bude držet číslo řádku na kterým jakoby právě budem
i=0
# while loopem budem číst řádek za řádkem ze souboru $soubor_s_radky
while IFS= read -r radek; do
#zvednem pomocnou promenou o jedna vejš
((i++))
# jestli je pomocná proměná rovna prvnímu elementu pole $cisla_radku .....
if [[ $i == ${cisla_radku[0]} ]]; then
# ....tak ten řádek vypišem ven...........
echo $radek
# .....a zahodíme první prvek pole $cisla_radku
cisla_radku=("${cisla_radku[@]:1}")
fi
done < $soubor_s_radky
a použije se to jakoby takle třeba
./skript.sh soubor_s_cisli_radku.txt soubor_ktery_prohledavame.txt
ttttssss ňákej vybíravej :D :D co todleto řešení přez indexy :O :O
#!/usr/bin/env bash
soubor_s_cisli_radku=$1
soubor_s_radky=$2
readarray -t cisla_radku < <(sort -h $soubor_s_cisli_radku)
readarray -t radky < $soubor_s_radky
for i in "${cisla_radku[@]}"
do
echo ${radky[i-1]}
done
btw pokavaď jakoby potřebuješ vyzobávat jenom děsně malilinkatý množšství řádků tak by asi jako byl víc lepšejší třeba sed hele :O ;D
joa ten sort je tam teďko navíc zbytečně ten asi jako mužeš škrtnout :O :O
........ale jako naposled :D :D
#!/usr/bin/env bash
# první argument sou ty čísla řádků
# se předpokládá že ty čísla řádků máš jakoby už seřazený :O :O
soubor_s_cisli_radku=$1
# druhej argument je soubor ze kterýho se vyzobávaj ty řádky
exec 3<$2
# jeto čarování s file descriptorem by jsme mohli číst ze dvou souborů 'najednou'
# https://bash.cyberciti.biz/guide/Opening_the_file_descriptors_for_reading_and_writing
# budem si pamatovat minulý zpracovaný číslo řádku by jsme si mohli
# z rozdílu spočítat kolik řádku musíme přečíst by jsme dojeli tam co jakoby potřebujem
minuly_cislo_radku=0
while IFS= read -r cislo_radku; do
radek=""
for (( i = 0; i < $cislo_radku - $minuly_cislo_radku; i++ ))
do
read radek <&3
done
# jestli máme v proměný $radek něco tak to vypišem
# jinak vyskočíme z loopu
if [[ -n $radek ]]; then
echo $radek
else
break
fi
minuly_cislo_radku=$cislo_radku
done < $soubor_s_cisli_radku
Co když je v souboru prázdný řádek, který chceme vypsat a číst dál?
se to předčasně vypne :D
jestli si je op jakoby jistej že má správnej počet řádků a se jako určitě nebude ptát na nějakej řádek mimo rosah tak tu podmínku muže dát dopryč a dát tam misto ní vobyč echo jenom :D ;D
...............hlavně ale jako vubec nevim jak vodsebe v bashi v read rozlišit eof a prázdnej řádek :D kdyby to ňák šlo by to bylo možný eště víc vylepšit :O :O
napadlo mě todleto s návratovejma kódama ale to asi jakoby furt neni vono :O :O
#!/usr/bin/env bash
soubor_s_cisli_radku=$1
exec 3<$2
minuly_cislo_radku=0
while IFS= read -r cislo_radku; do
radek=""
status=""
for (( i = 0; i < $cislo_radku - $minuly_cislo_radku; i++ ))
do
read radek <&3
status=$?
done
if [[ $status -eq 0 ]]; then
echo $radek
else
break
fi
minuly_cislo_radku=$cislo_radku
done < $soubor_s_cisli_radku
Pokud budu potřebovat načíst 3 řádky ze souboru který bude mít stovky řádků, tak budu muset porovnávat zbytečně stovky podmínekAle to nejde udělat líp, protože neexistuje žádný způsob jak získat ze souboru 157855. řádek - musíš soubor číst od začátku, počítat, kolikrát je tam \n, a až narazíš na 157854., tak vypsat obsah až po další \n. Jediné co je na tom řešení z teoretického hlediska neoptimální je, že se čísla řádků zbytečně sortují (složitost NlogN), i když by stačilo je nasypat do nějaké struktury, která umí rychlý test na „množina obsahuje číslo“ (např. hashset). V praxi se ale nejspíš ukáže, že je stejně lepší to setřídit, protože hashset má sice test v O(1), ale vyžaduje kouknout na náhodné místo v paměti, zatímco ze setříděného seznamu to čteš hezky postupně. A pak už tu jsou implementační „detaily“ - na Bash bude tohle řešení překvapivě rychlé, protože hlavní smyčka nevolá externí programy, stejně si ale myslím, že by se tyhle věci měly psát v nějakém „opravdovém“ jazyku.
Pole (i obyčejná ne-asociativní) jsou v Bashi řídká (málem jako řídká stolice) a v podstatě tedy odpovídají tomu hashsetu. (Tedy, pokud implementace nepoužívá stromy, což jsem líný teď hned kontrolovat.) Tudíž bych mohl mít čísla řádků jako indexy v řídkém poli a při čtení souboru pak jenom u každého řádku zkoušet, jestli jeho číslo v řídkém poli je:
print_lines() {
local -; set -eu
local -r file="$1"
local -n lines="$2"
local -ai indexed=()
local -i n max=0
local line
for n in "${lines[@]}"; do
((++indexed[n]))
((max = max < n ? n : max))
done
n=0
while ((n <= max)) && IFS= read -r line; do
((++n))
for ((; indexed[n]; --indexed[n])); do printf '%d: %s\n' "$n" "$line"; done
done < "$file"
}
# Příklad:
some_lines=({99..1..-11} {99..1..-3})
print_lines /proc/cpuinfo some_lines
Třídění ovšem může přinést jistou výhodu (ne efektivní, ale svým způsobem hezkou): Řádky mezi dvěma požadovanými můžu přečíst bez koukání do hashsetu. Což vyžaduje mít čísla řádků setříděná, abych věděl, co znamená mezi dvěma. Následující příklad na první pohled explicitní třídění nemá, ale na druhý pohled už jo: Je schované ve výrazu "${!indexed[@]}". (Ve výrazu "${indexed[@]}" bez vykřičníku by bylo taky, kdyby tam byl.) Bash prochází pole (i řídká) v pořadí setříděném podle indexů.
print_lines_with_hidden_sort() {
local -; set -eu
local -r file="$1"
local -n lines="$2"
local -ai indexed=()
local -i n=0 m
local line
for m in "${lines[@]}"; do ((++indexed[m])); done
for m in "${!indexed[@]}"; do
until ((n == m)); do IFS= read -r line && ((++n)) || break 2; done
for ((; indexed[m]; --indexed[m])); do printf '%d: %s\n' "$n" "$line"; done
done < "$file"
}
# Příklad:
some_lines=({99..1..-11} {99..1..-3})
print_lines_with_hidden_sort /proc/cpuinfo some_lines
Závěrečná otázka potom je, jestli náhodou k tomu třídění někde v Bashi nedochází implicitně tak či tak, i bez použití "${!indexed[@]}". (Při reprezentaci řídkého pole vyváženými stromy jednoznačně ano — pokud by Bash něco takového používal.) V takovém případě by byl druhý příklad dokonce efektivnější (no, ehm, „krát konstanta“) než první.
Teď vidím, že uvedené příklady mají tu nevýhodu, že vypisují řádky setříděné podle pořadí v souboru a nikoliv v pořadí podle pole čísel řádků.
(Zadání ovšem příliš explicitně neříká, jak to má být.)
Pokud by se měly řádky vypisovat přesně v zadaném pořadí, nezbylo by než (místo přímého výpisu) ukládat vybrané řádky do dalšího pole, indexovaného hodnotami z lines, (tj. mít všechny zvolené řádky nakonec naráz v paměti) a pak to v závěru ještě jednou vzít přes lines a vypsat tak uložené řádky ve správném pořadí (plus ve správném počtu podle indexed).
s/plus ve správném počtu podle indexed/ale hovno/ (protože počet a pořadí je už jaksi automaticky v tom poli čísel řádků).
Takže konkrétně(ji) například:
print_lines_ordered() {
local -; set -eu
local -r file="$1"
local -n lines="$2"
local -ai indexed=()
local -a text
local -i n=0 m
local line
for m in "${lines[@]}"; do ((++indexed[m])); done
for m in "${!indexed[@]}"; do
until ((n == m)); do IFS= read -r line && ((++n)) || break 2; done
text[m]="$line"
done < "$file"
for m in "${lines[@]}"; do printf '%d: %s\n' "$m" "${text[m]}"; done
}
Tiskni
Sdílej: