Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu dosáhl v březnu 5,33 % (Windows -4,28 %, OSX +1,19 %, Linux +3,10 %). Nejčastěji používané linuxové distribuce jsou Arch Linux, Linux Mint a Ubuntu. Při výběru jenom Linuxu vede SteamOS Holo s 24,48 %. Procesor AMD používá 67,48 % hráčů na Linuxu.
Společnost Apple slaví padesáté narozeniny. Založena byla 1. dubna 1976.
FreeTube, desktopový klient pro YouTube využívající lokální API, byl vydán ve verzi 0.24.0. Toto velké opravné vydání implementuje SABR (Server-Based Adaptive Bit Rate), což řeší část nedávných problémů s načítáním videí z YouTube, a aktualizuje základní komponenty jako Electron nebo přehrávač Shaka Player.
Je tu opět apríl. O víkendu zmizel kamion s 12 tunami tyčinek KitKat. Firmy to využívají k aprílovým žertům. Groupon má super akci. Koupíte 1 tyčinku a dostanete 100 zdarma. Ryanair si přelepil letadla. Šéf Outlooku se ptá, proč mají v baráku 14 beden tyčinek KitKat (𝕏). Prusa Research představuje Prusa Pro ACU a vysvětluje proč přílišné sušení škodí vaším filamentům. Telefon Sony Xperia má miliónnásobný zoom (𝕏). PC.net představil Super Ultrabox 2600 se zajímavými parametry. Další aprílové novinky například na April Fools' Day On The Web.
Společnost OpenAI, která stojí za chatovacím robotem s umělou inteligencí (AI) ChatGPT, získala od investorů 122 miliard USD (2,6 bilionu Kč). Hodnota společnosti tak dosáhla 852 miliard dolarů (více než 18 bilionů Kč). Nejnovější kolo investování se stalo největší, jaké zatím firma uskutečnila, a peníze mají posílit ambiciózní plány rozšíření výpočetní kapacity, datových center a nábor talentů.
Nástroj k identifikaci občanů v on-line komunikaci s úřady byl dnes dopoledne zhruba dvě hodiny částečně nedostupný. Problém se objevil kolem 09:00 a podařilo se ho vyřešit kolem 11:00. Částečně nedostupná byla služba Národní identitní autority (NIA), problémy podle DIA (Digitální a informační agentura) ovlivňovaly přihlašování například i přes bankovní identitu. „Dostupnost NIA byla plně obnovena, přihlášení k digitálním službám
… více »Eben Upton oznámil další zdražení počítačů Raspberry Pi kvůli růstu cen pamětí a představil Raspberry Pi 4 s 3 GB RAM za 83,75 dolarů.
Anthropic patrně omylem zveřejnil celý zdrojový kód svého CLI nástroje Claude Code prostřednictvím přiloženého sourcemap souboru v npm balíčku. Únik odhalil doposud nijak nezveřejněné funkce jako je například režim v utajení, autonomní agent 'KAIROS', orchestrace multi‑agentů, režim snění nebo dokonce virtuální mazlíček Buddy. Zajímavostí je detekce naštvání uživatele pomocí obyčejného regexpu. Anthropic rychle odstranil sourcemap a vydal opravu, nicméně kopie kódu se již stihly na GitHubu rozšířit mezi prostým lidem.
Copilot automaticky vkládal do pull requestů 'propagační tipy', reklamní text se na GitHubu objevil ve více než jedenácti tisících pull requestech. Po vlně kritiky byla tato funkce zablokována a produktový manažer Tim Rogers připustil, že umožnit Copilotovi upravovat cizí pull requesty bez vědomí autorů byla chyba.
Je 31. března a tedy Světový den zálohování (World Backup Day). Co by se stalo, kdyby Vám právě teď odešel počítač, tablet nebo telefon, který používáte?
my $radek = <>;
my %thinks;
@thinks{qw(jmeno prijmeni telefon)} = split ' ', $radek;
while (my ($name, $value) = each %thinks) {
print "$name = $value\n";
}Ale to jsem ti asi moc nepomohl, protože to není setřízené. A nebo takhle?my $radek = <>;
my @names = qw(jmeno prijmeni telefon);
my %thinks;
@thinks{@names} = split ' ', $radek;
foreach my $name (@names) {
print "$name = $thinks{$name}\n";
}Nebo takhle:
my $radek = <>;
my @names = qw(jmeno prijmeni telefon);
my $i = 0;
no strict 'refs';
${$names[$i++]} = $_ foreach (split ' ', $radek)[0..$#names];
foreach (@names) {
print "$_ = ${$_}\n";
}
To už bylo trochu silnější kafe, že
To už by bylo lepší
my $radek = <>;
my @names = qw(jmeno prijmeni telefon);
my @array = split ' ', $radek;
for(my $i=0; $i<@names; $i++){
print "$names[$i] = $array[$i]\n";
}Já osobně bych použil tohle nebo tu druhou možnost.
.
Diky moc
sub {
map { print shift, ': ', $_, "\n"; } split ':', scalar <> || exit
}->(qw(meno prijmeni telefon)) while 1;
sub {
map print(shift, ": $_\n"), (split / /, scalar <>)[0..$#_] or exit
}->(qw(meno prijmeni telefon)) while 1;nebo
sub {
map print(shift, ": $_\n"), split / /, scalar <>, @_ or exit
}->(qw(meno prijmeni telefon)) while 1;Podle toho jak se to má chovat.
Já jsem teda, (nejen) co se týče PERLu, lama
, ale můžu se zeptat jakou má výhodu použít místo hashe dvě pole? Berte to jako čistě technický dotaz bez jakýchkoliv narážek - jen mě zajímá, jestli je to paměťově méně náročné nebo výkonnější řešení než použít jeden hash... Děkuji.

my @names = qw(jmeno prijmeni telefon) my @arrays = ([qw(Franta Novák 564321564)]) x 1000000;versus
my @seznam = ({jmeno => 'Franta', prijmeni => 'Novák', telefon => 564321564}) x 1000000;To druhé zabere poněkud víc paměti a přístup k jednotlivým položkám je o chloupek pomalejší i když se s tím zase líp pracuje. Jedním ze spůsobů jak to udělat elegantně s polem je třeba
my $counter;
BEGIN {
my $index = $counter++;
sub jmeno() {$index}
}
BEGIN {
my $index = $counter++;
sub prijmeni() {$index}
}
BEGIN {
my $index = $counter++;
sub telefon() {$index}
}
my @seznam;
while (<>) {
chomp;
push @seznam, [(split ' ')[0 .. $counter-1]];
}
foreach (@seznam) {
my @record = @$_;
print <<EOF;
jmeno: $record[jmeno]
prijmeni: $record[prijmeni]
telefon: $record[telefon]
EOF
}
Jen podotýkám, že funkce s prototypem jmeno, prijmeni a telefon jsou de facto konstanty a vloží se inline. Dělám to samé co modul const.
dalsie elegantne riesenie (skoro zhodne s tymi konstantami):
package aaa;
use fields qw(jmeno prijmeni telefon)
package main;
my aaa $array = [ 0, split / /, $radek ];
print "jmeno: $array->{jmeno}\n";
pokial ma pamat neklame (moja, nie RAM), tak perl indexuje vsetky hodnotu raz pouzite ako kluc v hash-i, takze napr retazec "prijmeni" je pre vsetky hashe ulozeny iba raz a ako kluc sa pouziva jeho index.
$ perl -e '@seznam = ({jmeno => 'Franta', prijmeni => 'Novak', telefon => 564321564}) x 10000000; sleep 10'&
$ ps -o pid,rss,vsz,cmd -Cperl
PID RSS VSZ CMD
27137 236440 267004 perl -e @seznam = ({jmeno => Franta, prijmeni => Novak, telefon => 564321564}) x 10000000; sleep 10
$ perl -e 'my @names = qw(jmeno prijmeni telefon);my @arrays = ([qw(Franta Novák 564321564)]) x 10000000; sleep 10'&
$ ps -o pid,rss,vsz,cmd -Cperl
PID RSS VSZ CMD
27143 236456 267004 perl -e my @names = qw(jmeno prijmeni telefon);my @arrays = ([qw(Franta Novák 564321564)]) x 10000000; sleep 10
Zdá se, že máte pravdu, takže zůstavá už jen ten ždibíček rychlosti.
Vždyť jsem vytvářel milion odkazů na tentýž hash a totéž pole a to je samozřejmě stejné. Takže perl to vážně nedělá, ale pokaždé uloží nové klíče:$ perl -e '@names = qw(jmeno prijmeni telefon);for($i=0;$i<1000000;$i++){push @arrays, [qw(Franta Novák 564321564)]};print "done\n"; sleep 10'&
done
$ ps -o pid,rss,vsz,cmd -Cperl
PID RSS VSZ CMD
27376 209568 213616 perl -e @names = qw(jmeno prijmeni telefon);for($i=0;$i<1000000;$i++){push @arrays, [qw(Franta Novák 564321564)]};print
$ perl -e 'for($i=0;$i<1000000;$i++){push @arrays, {jmeno => Franta, prijmeni => Novak, telefon => 564321564}};print "done\n"; sleep 10'&
done
$ ps -o pid,rss,vsz,cmd -Cperl
PID RSS VSZ CMD
27512 248860 252932 perl -e for($i=0;$i<1000000;$i++){push @arrays, {jmeno => Franta, prijmeni => Novak, telefon => 564321564}};print "done
$ perl -e 'sleep 10'&
$ ps -o pid,rss,vsz,cmd -Cperl
PID RSS VSZ CMD
27554 1240 5320 perl -e sleep 10
Ten rozdíl je po odečtení režije perlu skoro celá pětina. A to jsou ty klíče relativně krátké.
PID RSS VSZ CMD
5873 315240 317176 perl -e '@list = map { {$_ => $_ } } 0 .. 1000000; print "done\n"; sleep 10'
5880 393688 395572 perl -e '@list = map { {$_ => $_, $_+1 => $_, $_+2 => $_} } 0 .. 1000000; print "done\n"
5888 268208 270132 perl -e '@list = map { {1 => $_, 2 => $_, 3 => $_} } 0 .. 1000000; print "done\n"; sleep 10'
5894 268208 270132 perl -e '@list = map { {10001 => $_, 10002 => $_, 10003 => $_} } 0 .. 1000000; print "done\n"; sleep 10'
5898 205440 207300 perl -e '@list = map { [$_, $_, $_] } 0 .. 1000000; print "done\n"; sleep 10;
PID RSS VSZ CMD
5921 439388 478164 perl -e '@list = map { {$_ => $_, $_+1000000 => $_, $_+2000000 => $_} } 0 .. 1000000; print "done\n"; sleep 10;'
PID RSS VSZ CMD
29161 260520 264708 perl -e @list = map +{1 => undef, 2 => undef, 3 => undef}, 0 .. 1000000; print "done\n"; sleep 10
29120 260532 264708 perl -e @list = map +{"a"x100 => undef, "b"x100 => undef, "c"x100 => undef}, 0 .. 1000000; print "done\n"; sleep 10Což značí, že máte patrně pravdu. Tím se to dost podobá implementaci dict v pythonu.
PID RSS VSZ CMD
29709 487364 491560 perl -e @keys = map chr(ord("a")+$_)x100, 0..25; @list = map +{map +($keys[$_], undef), 0..25}, 0 .. 100000; print "don
29742 254184 258316 perl -e @keys = 0..25; @list = map +{map +($keys[$_], undef), 0..25}, 0 .. 100000; print "done\n"; sleep 10Zdá se, že perl má svá tajemství. Uložení klíčů není tak neoptimální jak jsem si myslel, ale není to ani tak ideální jak jste tvrdil.
map, občas dělá něco jiného než by od něj člověk čekal
PID RSS VSZ CMD
30214 83904 87972 perl -e @keys = map chr(ord("a")+$_)x100, 0..25; for($i=0; $i<100000;$i++){push @list,{map +($keys[$_], undef), 0..25}};
30218 83884 87964 perl -e @keys = 0..25; for($i=0; $i<100000;$i++){push @list,{map +($keys[$_], undef), 0..25}}; print "done\n"; sleep 10
Pravdu asi máte vy.
PID RSS VSZ CMD
6271 109856 111536 perl -e @keys = 0..25; sub aaa { {map +($keys[$_], undef), 0..25}}; for($i=0; $i<100000;$i++){push @list,aaa }; print "done\n"; sleep 10
takze pravda bude niekde uprostred, asi zalezi na konexte, kde sa pole vytvori. No nic, idem hladat, kde som sa to vlastne docital.
Děkuji za vyčerpávající odpověď. Člověk se stále učí
Možná jsem to blbě pochopil, ale není to tím, že používáš @seznam (tedy pole) místo %seznam (tedy hash)?
$a = 1; $b = 2; @seznam = ($a, $b);a chcete aby vystup bol
a = 1 b = 2?
$hash{a} = 1;
$hash{b} = 2;
# nezalezi na poradi
while (my ($a, $b) = each %hash) {
print $a, $b, "\n";
}
# zalezi na poradi
for (sort keys %hash) {
print $_, $hash{$_}, "\n";
}
use Data::Dumper; my $radek = <>; my @array = my ($jmeno, $prijmeni, $telefon) = split ' ', $radek; print Data::Dumper->Dump(\@array, [qw(jmeno prijmeni telefon)])
Tiskni
Sdílej: