Specialisté společnosti ESET zaznamenali útočnou kampaň, která cílí na uživatele a uživatelky v Česku a na Slovensku. Útočníci po telefonu zmanipulují oběť ke stažení falešné aplikace údajně od České národní banky (ČNB) nebo Národní banky Slovenska (NBS), přiložení platební karty k telefonu a zadání PINu. Malware poté v reálném čase přenese data z karty útočníkovi, který je bezkontaktně zneužije u bankomatu nebo na platebním terminálu.
V Ubuntu 25.10 byl balíček základních nástrojů gnu-coreutils nahrazen balíčkem rust-coreutils se základními nástroji přepsanými do Rustu. Ukázalo se, že nový "date" znefunkčnil automatickou aktualizaci. Pro obnovu je nutno balíček rust-coreutils manuálně aktualizovat.
VST 3 je nově pod licencí MIT. S verzí 3.8.0 proběhlo přelicencování zdrojových kódů z licencí "Proprietary Steinberg VST3 License" a "General Public License (GPL) Version 3". VST (Virtual Studio Technology, Wikipedie) je softwarové rozhraní pro komunikaci mezi hostitelským programem a zásuvnými moduly (pluginy), kde tyto moduly slouží ke generování a úpravě digitálního audio signálu.
Open source 3D herní a simulační engine Open 3D Engine (O3DE) byl vydán v nové verzi 25.10. Podrobný přehled novinek v poznámkách k vydání.
V Londýně probíhá dvoudenní Ubuntu Summit 25.10. Na programu je řada zajímavých přednášek. Zhlédnout je lze také na YouTube (23. 10. a 24. 10.).
Gemini CLI umožňuje používání AI Gemini přímo v terminálu. Vydána byla verze 0.10.0.
Konference OpenAlt 2025 proběhne již příští víkend 1. a 2. listopadu v Brně. Nabídne přibližně 80 přednášek a workshopů rozdělených do 7 tematických tracků. Program se může ještě mírně měnit až do samotné konference, a to s ohledem na opožděné úpravy abstraktů i případné podzimní virózy. Díky partnerům je vstup na konferenci zdarma. Registrace není nutná. Vyplnění formuláře však pomůže s lepším plánováním dalších ročníků konference.
Samsung představil headset Galaxy XR se 4K Micro-OLED displeji, procesorem Snapdragon XR2+ Gen 2, 16 GB RAM, 256 GB úložištěm, operačním systémem Android XR a Gemini AI.
Před konferencí Next.js Conf 2025 bylo oznámeno vydání nové verze 16 open source frameworku Next.js (Wikipedie) pro psaní webových aplikací v Reactu. Přehled novinek v příspěvku na blogu.
Sovereign Tech Fund oznámil finanční podporu následujících open source projektů: Scala, SDCC, Let's Encrypt, Servo, chatmail, Drupal, Fedify, openprinting, PHP, Apache Arrow, OpenSSL, R Project, Open Web Docs, conda, systemd a phpseclib.
Myslíte si, že umíte perl?
Tak schválně, jaký bude výstup následujícího kódu?
perl -mData::Dumper -e '
map keys %$_, @$a{qw(a b c)};
print Data::Dumper->Dump([$a],["a"])'Když se nad tím zamyslíte, tak to není až tak divné, ale i tak mě to zaskočilo.Updated: Pokus o co nejméně magický zápis téhož:
perl -mstrict -mwarnings -mData::Dumper -e '
my ($a, @res);
for my $entry ($a->{a}, $a->{b}, $a->{c}) {
push @res, keys %$entry;
}
print Data::Dumper->Dump([$a],["a"]);'
Tiskni
Sdílej:
víťaz? perl
Nepřestane mne fascinovat, jak lidi dokážou psát s odpuštěním prasácky nečitelné one-linery jenom proto, "že to jde".
PERL je fantasticky užitečný jazyk, který dokáže zásadním způsobem usnadnit práci s daty, to celé s nízkými náklady na "zaškolení", bez nutnosti chápat složitá paradigmata OOP či studovat tuny knihoven.
Z vlastní zkušenosti vím o lidech, kteří, ač vybaveni minimálními znalostmi o programování a UNIXu, zvládli PERL doslova během dní natolik, že jsou schopni psát komplikované filtry, programy, které vytváří programy a podobně.
A to celé tak, že ten kód je nejen srozumitelný a čitelný na první pohled, ale zároveň elegantní.
Ono stačí málo. use strict; use warnings;. Trocha štábní kultury při psaní komentářů. Dodržování nějakých coding standardů.
Jenomže ono je mnohem zábavnější napsat takovouhle nesmyslnou pakárnu a pak s tím machrovat, myslíte, že umíte PERL?
Mimo to bych si dovolil polemizovat s názorem, že míra "umění" nějakého jazyka se dá vyjádřit tím, že člověk rychle zanalyzuje cizí kód.
Dovolím si myšlenkový experiment. Vezměte si nějaký složitější vlastní program (delší než 1 000 řádek), na jehož zdrojáky jste už pár měsíců nesáhli, a nahraďte všechny jména souborů, proměnných, funkcí, konstant a textových výstupů náhodnými řetězci. Odstraňte veškeré debuggovací výstupy. Přeházejte pořadí, v jakém jsou funkce nadeklarovány. Pak si najděte jednu funkci někde uprostřed, a zkuste vymyslet, co se uvnitř děje a k čemu je to dobré. Velmi pravděpodobně si budete muset zahrát na kompiler či interpreter, abyste se dobrali alespoň k něčemu. A máte pocit, že to vypovídá o tom, jak dobře ten konkrétní jazyk umíte? Přesně o tom je totiž tenhle zápisek.
To, že se v PERLu dá psát write-only "o něco jednoduššeji" než v jiných jazycích, přece neznamená, že to programátoři musejí dělat.
S takovým přístupem se jenom stále více šíří FUD, že PERL je nečitelný, write-only jazyk, kterému se každý rozumný programátor/unix administrátor vyhne.
A vůbec, myslíte si, že umíte C ? Dejte si do google obfuscated c contest a koukejte
keys inicializuje hashref.Podobné príklady sú ako rébusy, ako krížovky, pre programátora tá istá kategória ako C programy vypisujúce samé seba.
Kdyby mi kdokoliv předhodil tenhle kus kódu na code review, nechal bych si velice podrobně vysvětlit, proč to potřebuje naprogramovat právě takhle, a nejspíš bych ho stejně poslal do háje.
Za těch X let, co programuju v PERLu, jsem se s podobně "chytrými" konstrukcemi setkal mnohokrát, a nepovažuju za náhodu, že v mnoha případech se v souvislosti s takovým "geniálním nápadem" o pár řádek výše nebo níže zjevila velice vážná logická chyba, kterou autor, omráčen a zaslepen svým "umem", v zápětí spáchal.
Aby nevznikla mýlka -- pěkný obfuscated kód si taky rád prohlídnu a příležitostně nosím klasické PERL triko s camel.pl skriptem na zádech a use strict na břiše
Ale v tomhle případě, stejně jako v desítkách dalších podobných, prostě nic zajímavého a elegantního nevidím. Yet another "obfuscated" one-liner.
map keys %$_
všetko ostatné je len prezentácia výsledkov. Viem si kľudne predstaviť situáciu, kde nechcená / neuvedomená si inicializácia $_ dokáže vynechať nasledujúce podmienky.Ja som to, priznávam, dohromady nedal, hoci potom, ako som videl výpis, mi došlo ktorá bije.
No, je to "hezký", ale k čemu je to dobrý?Jako varování a malé naťuknutí na co si dát pozor
Nepřestane mne fascinovat, jak lidi dokážou psát s odpuštěním prasácky nečitelné one-linery jenom proto, "že to jde".<rejp>Nepřestane mě fascinovat, kde ti lidi ty křišťálové koule pořád berou.</rejp> Jako oneliner je to proto, aby si to mohl každý vyzkoušet aniž by zakládal nějaké soubory a podobně. I kolegům po Jabberu radši pošlu oneliner na kterém problém demonstruji, než abych jim posílal kusy kódu, na který by si museli strkat do souboru a ten pak spouštět.
PERL je fantasticky užitečný jazyk, který dokáže zásadním způsobem usnadnit práci s daty, to celé s nízkými náklady na "zaškolení", bez nutnosti chápat složitá paradigmata OOP či studovat tuny knihoven.No to je fakt vtipné. Ten kód je součástí OOP kódu, tedy vnitřek jedné metody
#-------------------------------------------------------------------------------
# Method: involved
# Method returns ids of involved objects requested types. If none type
# used as parameter, returns all.
#
# Parameters:
# type - name of requested type
#
# Returns:
# array - list of ids
#-------------------------------------------------------------------------------
sub involved {
my $self = shift;
return () unless $self->{involved};
return map $_ ? keys %$_ : (),
@_ ? @{$self->{involved}}{@_} : values %{$self->{involved}};
}
Shodou okolností právě při testování kódu unit testy jsem to zjistil. Jasně, že by to šlo napsat víc objektově, ale já taky trošku myslím na rychlost. Celý ten kód by šel krásně rozbít do dalšího objektu, který by dělal kolektor těch involved objektů a kolektor typů a pak by jsme místo toho jednoho mapu měli O(n) volání jedné metody ve které by se volala další metoda, fakt efektivní.
Ono stačí málo. use strict; use warnings;. Trocha štábní kultury při psaní komentářů. Dodržování nějakých coding standardů.
perl -mstrict -mwarnings \
-mData::Dumper -e '
my $a; # declare variable
map keys %$_, @$a{qw(a b c)}; # try collect keys from hashes stored under some keys in other hash pointed by variable
print Data::Dumper->Dump([$a],["a"]) # dump original variable'Spokojený, řekl bych, že se to moc nezlepšilo 
Jenomže ono je mnohem zábavnější napsat takovouhle nesmyslnou pakárnu a pak s tím machrovat, myslíte, že umíte PERL?Jedinej kdo tu machruje jseš ty, já jsem si jen blognul upozornění na jednu zákeřnůstku.
Mimo to bych si dovolil polemizovat s názorem, že míra "umění" nějakého jazyka se dá vyjádřit tím, že člověk rychle zanalyzuje cizí kód. Dovolím si myšlenkový experiment. Vezměte si nějaký složitější vlastní program (delší než 1 000 řádek)Hmm, je to součástí SW, který má momentálně 47330 řádek. Tak 1 000 si snad představit dokážu.
, na jehož zdrojáky jste už pár měsíců nesáhli, a nahraďte všechny jména souborů, proměnných, funkcí, konstant a textových výstupů náhodnými řetězci. Odstraňte veškeré debuggovací výstupy. Přeházejte pořadí, v jakém jsou funkce nadeklarovány. Pak si najděte jednu funkci někde uprostřed, a zkuste vymyslet, co se uvnitř děje a k čemu je to dobré. Velmi pravděpodobně si budete muset zahrát na kompiler či interpreter, abyste se dobrali alespoň k něčemu. A máte pocit, že to vypovídá o tom, jak dobře ten konkrétní jazyk umíte? Přesně o tom je totiž tenhle zápisek.Hmm, a přesně proto z těch 47330 je víc než polovina komentářů a všechen novej kód má víc řádek testů než samotného kódu. He?
Myslím, že jsem nijak nezpochybňoval Vaše programátorské schopnosti, a pokud z mé reakce máte ten dojem, je mi to líto. Psal jsem to jako svůj názor obecně a nikoliv "Vám na tělo", viz ostatně množné číslo. ( ...na jehož zdrojáky jste už pár měsíců nesáhli... apod. )
Reakce na osobní invektivy si s Vaším svolením odpustím. Nicméně osobní názor o Vás jsem si pochopitelně udělal.
Srdečně zdravím a přeju, aby Vás svět tolik neštval.
Autor sa podelil o chybu, ktorej vznik si neuvedomil. To tu mal pastnuť všetkých 43k riadkov a ukázať na jeden "aha tu je všeobecná chyba" ?
map $_ ? keys %$_ : (), @pole;verzia 2:
map keys %$_, grep defined, @pole;verzia 3:
my @result;
for my $entry (@pole) {
push @result, keys %$entry
if defined $entry;
}
ktorá verzia je elegantná, a ktorá čitateľná ?
Verze 2: ne moc efektivní/rychlé, relativně čitelné
Verze 3: hrubě neefektivní, vzhledem k přehnané snaze o čitelnost je to nakonec nečitelné
if defined spôsobí tú istú chybu, na ktorú ste upozorňoval týmto blogom
Jeden příklad za všechny -- psal jsem, že v PERLu se dají psát programy bez nutnosti chápat paradigmata OOP. Tedy že v PERLu se dá psát "neobjektově". A Vy kontrujete tím, že Váš kód je objektový. Proč?Ano, omlouvám se, četl jsem nepozorně. Nicméně se jedná o jedno přehlédnutí. To se vám to hodilo do krámu, co?![]()
strict a ani negeneruje žádný warning. One-liner jsem použil, aby si každý danou konstrukci mohl sám vyzkoušet co nejjednodužším způsobem. Nechápu proč regujete na komentáře naprostých laiků pokoušejících se vyvolat flame, na které jsem ani já nereagoval, protože to nemá smysl, jako nový thread a nereagujete přímo na tyto komentáře. Jak je to s elegancí a čitelností je nicméně názorně ukázáno zde, přičemž zdánlivě pro začátečníka nejčitelnější verze 3 trpí stejným neočekávaným chováním na které jsem se snažil upozornit. Ad absurdum perl -mstrict -mwarnings -mData::Dumper -e '
my ($a, @res);
for my $entry (@$a{qw(a b c)}) {
push @res, keys %$entry;
}
print Data::Dumper->Dump([$a],["a"]);'Nebo jestli se vám to zdá stále příliš magicképerl -mstrict -mwarnings -mData::Dumper -e '
my ($a, @res);
for my $entry ($a->{a}, $a->{b}, $a->{c}) {
push @res, keys %$entry;
}
print Data::Dumper->Dump([$a],["a"]);'Omlovám se za one-linery.

return unless defined wantarray; die "wantarray" unless wantarray;
die "wantarray" unless wantarray;Mi přijde přílišné vodění za ručičku a co když to dotyčný chce? Třeba aby zjistil jestli to vrátí aspoň něco. Naproti tomu
return () unless cosise chová celkem předvídatelně. Ve skalárním kontextu je to
undef a v array to udělá prázdné pole. Je fak, že to () je tam zbytečně, ale čtenáře to trkne
#-------------------------------------------------------------------------------
# Method: forEachMetric
# Do something for each metric. The method automatically sets up <$Report>
# variable.
#
# Parameters:
# subref - pointer to procedure, current metric is in $_
#
# Returns:
# array - same as map aplied subref on metrics
#-------------------------------------------------------------------------------
sub forEachMetric #(subref)
{
(local $Report, my $subref) = @_;
DieLogFatal {__ "Parameter must be subref"} unless ref $subref eq 'CODE';
map &$subref, @{$Report->{metrics}};
}

sub involve {
return
unless defined wantarray;
return bless [ goto &involve ], __PACKAGE__ . '::Iterator'
unless wantarray;
return map ...
}
resp viac čitateľné, často efektívnejšie (v mojich problémoch):
sub involve {
return
unless defined wantarray;
return new __PACKAGE__ . '::Iterator' (@_)
unless wantarray;
return map ...
}
plus obvyklé metódy
map $iter->$_, qw( count next previous begin end finish );
hmm, ovládam perl zhruba na úrovni 6-ročného Larryho, vy ste za métou 7Myslím, že jste příliš skromný, na tohle totiž koukám jako puk a nebo nechápu kontext. Můžete uvést příklad použití? Nejvíc mě děsí konstrukce
[ goto &sub ] a ani z té čitelnější metody nejsem moc moudrý.
package __PACKAGE__ . '::Iterator'; musí být definovaný a musí mít ty potřebné metody a ty ještě ke všemu musím explicitně volat. Tedy žádná magie.
(__PACKAGE__ . '::Iterator')->newJe možné definovať jeden package Iterátor.
vcelku silná mágia je treba, aby fungovalo to goto
Ono si totiž ponecháva kontext. Čiastočne funkčné riešenie by bolo asi takéto niečo
return [ shift->xxx (@_) ] unless wantarray;
goto znám. Ale v uvedeném kódu by šlo použít isub involve {
return
unless defined wantarray;
return bless [ &involve ], __PACKAGE__ . '::Iterator'
unless wantarray;
return map ...
}
viz perlsub Subroutines may be called recursively. If a subroutine is called using
the "&" form, the argument list is optional, and if omitted, no @_
array is set up for the subroutine: the @_ array at the time of the
call is visible to subroutine instead. This is an efficiency mechanism
that new users may wish to avoid.
&foo(1,2,3); # pass three arguments
foo(1,2,3); # the same
foo(); # pass a null list
&foo(); # the same
&foo; # foo() get current args, like foo(@_) !!
foo; # like foo() IFF sub foo predeclared, else "foo"
a nebo jsem to vážně nepochopil.
(Tady mi zřejmě nepomůže ani Gardinerova Egyptská gramatika, přestože jsem do ní nakoukl, neb jsem tam viděl jistou podobnost.
)
perl -le 'sub {print reverse @_}->(split"", "?en ,edohop v ot eJ")'
perl -le 'print scalar reverse for "?en ,edohop v ot eJ"'
perl -le 'print scalar reverse for join " ", @ARGV' ?en ,edohop v ot eJ
(niektoré shell-y tomu otázniku nechcú porozumieť rovnako ako správne nastavený bash)
use Sub::Uplevel;
sub fun {
return [ uplevel (1, \&fun, @_) ] unless wantarray;
return @list;
}
Samozrejme je to výcuc. Sú tam ďaľšie bláznovstvá typu dynamické generovanie dedičnosti, zmena triedy, dekorátory ...
sub fun {
my @list;
... bla bla plníme @list ...
return wantarray ? @list : \@list;
}
Bez magie a co do rychlosti lepší a co do spotřeby paměti lautr to samé.