Internetový prohlížeč Firefox bude mít nové ovládací prvky pro umělou inteligenci, které umožní uživatelům vypnout vestavěné AI funkce přímo v nastavení prohlížeče. Jednotlivě půjde vypnout nebo zapnout automatické překlady stránek, generovaní popisného textu k obrázkům v otevřených PDF dokumentech, samoorganizaci tabů do skupin, náhledy odkazů s krátkým shrnutím a boční panel s chatbotem. Tyto možnosti v nastavení prohlížeče
… více »Desktopové prostředí KDE Plasma 6.6, která je právě ve fázi beta, nahrazuje stávající SDDM novým Plasma Login Managerem, který je ale pevně navázán na systemd. Plasma Login Manager využívá systemd-logind a další součásti systemd, které nejsou dostupné v operačních systémech bez systemd, jako je například FreeBSD, případně jsou linuxové distribuce Gentoo, Void Linux anebo Alpine Linux. Pro uživatele zatím stále ještě existuje možnost používat SDDM.
Na webu komunitního setkání CSNOG 2026 jsou dostupné prezentace v PDF, jejich videozáznamy a fotografie z lednové akce ve Zlíně. CSNOG 2026 se zúčastnilo téměř 300 zájemců o vystoupení věnovaných správě sítí, legislativním a regulačním tématům nebo projektům z akademické sféry. Letos byly prezentace rozdělené do dvou treků, ve kterých se představilo 35 přednášejících. Setkání komunity CSNOG organizují společně sdružení CESNET, CZ.NIC a NIX.CZ.
Americká vesmírná společnost SpaceX miliardáře Elona Muska koupila další Muskovu firmu xAI, která se zabývá vývojem umělé inteligence (AI). Informovala o tom na svém účtu na síti 𝕏. Musk tímto krokem propojí několik ze svých služeb, včetně chatbota s prvky umělé inteligence Grok, sociální sítě 𝕏 či satelitního internetového systému Starlink. Tržní hodnota společnosti SpaceX dosahuje jednoho bilionu dolarů (20,6 bilionu Kč), hodnota xAI pak činí 250 miliard dolarů.
Byl odhalen supply chain attack na Notepad++: útočníci kompromitovali hosting Notepad++ a vybrané dotazy na aktualizace přesměrovávali na servery pod jejich kontrolou. Doporučuje se stáhnout instalátor a přeinstalovat.
Francouzská veřejná správa má v rámci vládní iniciativy LaSuite Numérique ('Digitální sada') v plánu od roku 2027 přestat používat Microsoft Teams a Zoom a přejít na videokonferenční platformu Visio, hostovanou na vlastním hardwaru. Konkrétně se jedná o instance iniciativou vyvíjeného open-source nástroje LaSuite Meet, jehož centrální komponentou je LiveKit. Visio nebude dostupné pro veřejnost, nicméně LaSuite Meet je k dispozici pod licencí MIT.
Eben Upton oznámil další zdražení počítačů Raspberry Pi: 2GB verze o 10 dolarů, 4GB verze o 15 dolarů, 8GB verze o 30 dolarů a 16GB verze o 60 dolarů. Kvůli růstu cen pamětí. Po dvou měsících od předchozího zdražení.
Shellbeats je terminálový hudební přehrávač pro Linux a macOS, který umožňuje vyhledávat a streamovat hudbu z YouTube, stahovat odtud skladby a spravovat lokální playlisty. Pro stahování dat z YouTube využívá yt-dlp, pro práci s audiostreamy mpv. Je napsán v jazyce C a distribuován pod licencí GPL-3.0, rezpozitář projektu je na GitHubu.
Byla vydána nová verze 26.1.30 svobodného multiplatformního video editoru Shotcut (Wikipedie) postaveného nad multimediálním frameworkem MLT. S podporou hardwarového dekódování videa. Shotcut je vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.
LibrePCB, tj. svobodný multiplatformní softwarový nástroj pro návrh desek plošných spojů (PCB), byl po deseti měsících od vydání verze 1.3 vydán ve verzi 2.0.0. Přehled novinek v příspěvku na blogu a v aktualizované dokumentaci. Zdrojové kódy LibrePCB jsou k dispozici na GitHubu pod licencí GPLv3.
awk -F . '{ $ NUM = $1 }' Input
pro test existence pouzivam:
if [ ! -e *.o$NUM ]
then
echo ".o$NUM does not exist.";
fi
Prikazy samy o sobe funguji, ale nedari se mi predavat to cislo NUM. Asi to bude jen malickost, ale fakt na ni nemuzu prijit.
for num in $(cat file | sed -e 's/\..*//g')
do
if [ ! -e \*.o$num ]
then
echo "o$num does not exist"
fi
done
while read line
do
num="${line%%.*}"
if [ ! -e \*.o$num ]
then
echo "o$num does not exist"
fi
done < file
while read line
do
num="${line%%.*}"
files=*.o"$num"
if [ "$files" == "*.o$num" ]
then
echo "*.o$num does not exist"
fi
done < file
jinak
cat /usr/share/man/man1/test.1.gz | gunzip | grep "==" | wc
0 0 0
for num in $(cosik z nějakého souboru) Je blbě ať už to budete okecávat třeba týden.
cat file | sed nebudu plýtvat silami
zo sirsieho pohladu je pouzivanie cat snad aj vyhodnejsie
cat file | sed' není absolutně nic špatného, to jen pár exhibicionistů má vždycky druhé vánoce, když mají příležitost na někoho dělat ramena, že je úplný blbec, pokud něco takového napíše. Osobně to používám celkem běžně, protože když před ten sed pak chci předřadit další filtr, je to podstatně jednodušší a to je pro mne při interaktivní práci podstatnější než mít orgasmus z jednoho ušetřeného catu…
<file sed méně čitelný, tak by jste si měl něco udělat s očima. Já do toho dokážu vložit filtr <file filter | sed úplně stejně snadno jako cat file | filter | sed do cat file | sed. Dokonce je to naprosto stejný počet znaků a do prakticky stejného místa.
in_filter="cat" in_filter="gunzip" in_filter="bunzip" < $in_file $in_filter | sed ...
<file sed' za krásně přehledný, nemusí ho proto za krásně přehledný považovat i zbytek světa. A že tedy není pravdou jeho fixní idea, že každý, kdo se na milimetr odchýlí od jeho Jedině Správného Řešení, je automaticky blbec, který tomu vůbec nerozumí.
Věřte nebo ne, při interaktivní práci je mi těch pár mikrosekund (i kdyby to byly milisekundy) navíc na "zbytečný" cat, který vám tak strašně leží v žaludku, naprosto ukradených. O několik řádů delší dobu bych totiž strávil tím, že bych upravoval verzi, kterou vy považujete za jedině správnou. Konstrukce '<file sed' pro mne přehledná není; pokud pro vás ano, klidně si ji používejte, nikdo vám v tom nebrání; vy nám ji, prosím, na oplátku nevnucujte jako jedině správný způsob. Až to budu potřebovat provést milionkrát ve smyčce, budu mít samozřejmě jiné priority - ale pak na to téměř jistě nepoužiju shellový skript.
"Cteni po radcich" ma nevyhodu, ze se precte blok dat, zjisti se konec radku, zavola se lseek() na konec radku a znova se precte blok dat (dalsi radek), pokud radky jsou male, zavola se read() daleko vicekrat nez v predchozim pripade.
rozdil je veliky pokud pouzivas systemove sluzby. Ovsem v nasem pripade i kdyz vypada, ze se nacte celej soubor do pameti, tak to neni. Vytvori se pipe, z jedne strany do ni cat cpe data v urcitych blocich (max jedna stranka) a sed si z pipy vycita taky v urcitych blocich.No a do tohodle místa je to stejné a pak se s tím děje co? Shell se to pokusí rozpársovat do příkazového řádku. Takže se mu to tam vůbec nemusí vejít a to je hned. No a pak tam máme to pársování. V tomhle případě to nevadí, protože v těch číslech mezera není, ale radši se tomu vyhnu, když můžu. Je fakt, že trojková verze bashe už má příkazovou řádku asi neomezenou (teda aspoň v konstrukci
for in se to tak jeví a do zdrojáku se mi koukat nechce). Nicméně se to do paměti natáhne celé a bash to zpracovává dost blbě.
"Cteni po radcich" ma nevyhodu, ze se precte blok dat, zjisti se konec radku, zavola se lseek() na konec radku a znova se precte blok dat (dalsi radek), pokud radky jsou male, zavola se read() daleko vicekrat nez v predchozim pripade.A sed čte taky po řádcích, ne? Takže v čem je rozdíl? Víc procesů, čekání navzájem na sebe ... O čem se tady vlastně bavím, když ten váš script prostě narozdíl od mého nefunguje
"Cteni po radcich" ma nevyhodu, ze se precte blok dat, zjisti se konec radku, zavola se lseek() na konec radku a znova se precte blok dat (dalsi radek), pokud radky jsou male, zavola se read() daleko vicekrat nez v predchozim pripade.Mohu vědět, kde se používá tahle implementace? Schválně jsem to zkusil v Pythonu:
for line in file('soubor'):
pass
Přičemž načítaný soubor má 500 řadků. A dle výpisu strace se řádky čtou takto:
open("soubor", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=1000, ...}) = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=1000, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7c82000
read(3, "a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\n"..., 8192) = 1000
read(3, "", 4096) = 0
read(3, "", 8192) = 0
close(3) = 0
munmap(0xb7c82000, 4096) = 0
Soubor se čte po velkých blocích a nikde není žádný lseek(). Volání read() se vyskytuje pouze třikrát. Soubor se vejde do jednoho bufferu, takže by to asi stačilo jen jednou, ale rozhodně to není pětsetkrát.
read() volat na rozumně velké bloky.
$ echo -e 'uwehfuh\nihiuh\nhiuh' | while read i; do cat; done
ihiuh
hiuh
$ echo -e 'uwehfuh\nihiuh\nhiuh' | perl -ne 'system("cat")'
$
testu? ja bych ji nechal normalne expandovat na jmena souboru. Ale treba se mylim. A cutovat sedem mi prijde take trochu neobratne.
sed pouzivam proto, ze je univerzalnejsi nez cut a jsem zvykly ho pouzivat :)
NUM=`awk -F . '{ $NUM = $1; print $NUM; }' Input`
potom uz ten test bude znat promennou $NUM jako promennou shellu.
Ale asi bych se na ten awk vyprdnul a napsal to cele v shellu.
NUM=`cut -d. -f1 Input` if [ ! -e *.o$NUM ] then echo ".o$NUM does not exist." fi
#!/usr/bin/env python
import os, re
regexp = re.compile(r'(\d+)$')
files = {}
for f in os.listdir('.'):
try:
num = regexp.search(f).groups()[0]
try:
files[num].append(f)
except KeyError:
files[num] = [f]
except AttributeError:
pass
fr = open('Input')
for line in fr:
num, ext = os.path.splitext(line)
try:
print 'Soubory koncici na %s:' %num
for f in files[num]:
print " ", f
except KeyError:
print 'Zadne nebyly nalezeny'
Udělal jsem to trochu složitěji, jelikož jsem se chtěl vyhnout tomu, aby se obsah adresáře pokaždé znovu načítal. A taky když už to najde nějaké soubory končící na dané číslo, tak to vypíše jejich seznam.

perl -ne '/^(\d+)\./&&@{[<*.o$1>]}&&print"*.o$1 found\n"' InputA když si budu hrát na ukecance:perl -e '/\.o(\d+)$/&&push@{$h{$1}},$_ foreach<*>;$"=", ";/^(\d+)\./and$h{$1}&&print("$1: @{$h{$1}}\n")||print"$1: *.o$1 nenealezeny\n"while<>' InputP.S.: Ale jistě, jde to napsat i čitelně, ale to není taková sranda
Zatnul jsem zuby a spustil to. Doufám, že jsi mezi znaky nenaprogramoval backdoor.
perl -ne '/^(\d+)\./&&@{[<*.o$1>]}&&print"*.o$1 found\n"' Input
while (<>) {
/^(\d+)\./
&& @{ [<*.o$1>] }
&& print "*.o$1 found\n";
}
jedina menej bezna finta je pouzitie vlastnosti <>
foreach a while a pak taky lazy evaluation logické podmínky. V tom druhém případě jsem si ještě navíc pohrál s rozdílem priorit mezi and/or a &&/|| abych si ušetřil závorky a bylo to trochu víc nečitelné a pak je tam ještě takový trik s $" abych nemusel dělaj join. V tom prvním případě jsem musel ještě trošku znásilnit glob, abych ho měl v array contextu a pak ho hned zase dostal do scalar - počet výskytů. V čitelné podobě:
while (my $line = <>) {
my ($num) = ($line =~ m/^(\d+)\./);
if (defined $num) {
my @files = glob("*.o$num");
if (@files) {
print "*.o$num found\n";
}
}
}A to druhé
my %files;
foreach my $file (glob("*")) {
my ($num) = ($file =~ m/\.o(\d+)$/);
if (defined $num) {
if (not exists $files{$num}) {
$files{$num} = [];
}
my $filesArrayRef = $files{$num};
push @$filesArrayRef, $file;
}
}
while (my $line = <>) {
my ($num) = ($line =~ m/^(\d+)\./);
if (defined $num) {
if (ref $files{$num} eq 'ARRAY') {
print "$num: ", join(', ', @{$files{$num}}), "\n";
} else {
print "$num: *.o$num nenealezeny\n";
}
}
}No a pak stačí vědět, že je nějaké defaul proměnná, glob jde zapsat pomocí < a >, použít lazy evaluation, foreach a while jako postfix a v neposlední řadě, že použití neexistujícího klíče jako reference na pole nebo hash to pole nebo hash založí a celé se to krásně zjednoduší.
cat Input \ | sed -e 's/\([0-9]*\).*/ls *.o\1 >\/dev\/null 2>&1 || echo ".o\1 does not exists."/' \ | sh
cat Input \ | sed -e 's/\([0-9]*\).*/ls -d *.o\1 2>\/dev\/null | fgrep \1 || echo ".o\1 does not exists."/' \ | sh
export NUM. No a v prebehu zpracovani tim awk se k te promenne pristupuje takto environ["NUM"]
Tiskni
Sdílej: