Google Blog ČR informuje, že mobilní aplikaci Gemini a NotebookLM lze používat už také v Česku.
Byla vydána nová major verze 8 duálně licencovaného open source frameworku JUCE (Wikipedie, GitHub) pro vývoj multiplatformních audio aplikací.
Od 18. června bude možné předobjednat notebook DC-ROMA RISC-V LAPTOP II od společnosti DeepComputing s osmijádrovým 64-bit RISC-V AI CPU a s předinstalovaným Ubuntu.
Byla vydána verze 1.79.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání na GitHubu. Vyzkoušet Rust lze například na stránce Rust by Example.
Byly zveřejněny výsledky průzkumu (infografika) mezi uživateli FreeBSD.
Na konferenci DevConf.CZ 2024 je na stánku Furi Labs prezentován linuxový telefon FuriPhone FLX1. Jeho cena 499 dolarů.
Bylo vydáno Eclipse IDE 2024-06 aneb Eclipse 4.32. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
Proton, tj. fork Wine integrovaný v Steam Play a umožňující v Linuxu přímo ze Steamu hrát hry určené pouze pro Windows, byl vydán ve verzi 9.0-2 (𝕏). Přehled novinek se seznamem nově podporovaných her na GitHubu. Aktuální přehled her pro Windows běžících díky Protonu také na Linuxu na stránkách ProtonDB.
Po roce od vydání verze 15.5 bylo vydáno openSUSE Leap 15.6. Přehled novinek v nejnovější verzi této linuxové distribuce v oznámení o vydání a v poznámkách k vydání.
Byla vydána nová verze 256 správce systému a služeb systemd (GitHub). Nově mimo jiné s run0 jako alternativou k sudo.
sed, awk, grep,…
používat tzv. Perl one-liners. U mě to došlo tak daleko, že místo toho abych zjišťoval jak escapuje echo
, použiji raději něco jako perl6 -e 'say join "\n", "a\tb", "1\t2"'
. Ale samozřejmě nic vám nebrání, když uznáte za vhodné, tyto one-liners kombinovat s nástroji jako find, column,…
.
-e
, za kterým následuje kód Perlu 6, který se spustí.
perl6 -e 'say ((237/75+162/3)/(9+54)).nude.join: "/" ;' #1429/1575 perl6 -e 'say "larry wall".wordcase;' #Larry WallDalšími užitečné přepínače jsou
-n
a -p
, které automaticky přidají smyčku přes všechny řádky, -p
je na konci ještě vytiskne.
history|perl6 -ne '.say if m:r:s/^^perl6 "-"ne>>/ && /:r <<if>> /' #vytiskni řádky které začínají na perl6 -ne a obsahují slovo if perl6 -ne '.say if /"<"pre>>/ ff /"<""/"pre">"/' naucte_me_Perl_6_III.html #vytiskni řádky ohraničené značkou pre xsel|perl6 -pe '.=trim' #odstraní mezery před a za řádkem perl6 -pe 's:g/wamba/wambash/' /etc/passwd #nahradí wamba za wambashDalší one-liners v Perlu 6 najdete i na githubu Davida Farrella.
line, slurp,…
, implicitně čtou se standardního vstupu a pokud je zadán parametr, tak se souborů, které májí názvy jako parametry. Ale k parametrům na příkazové řádce můžeme přistupovat i pomocí @*ARGS
, nebo pomocí definice podprogramu MAIN
. Se standardním vstupem/výstupem můžeme manipulovat pomocí proměnných $*IN, $*OUT
.
cat soubor1|perl6 -e 'say lines.elems' #počet řádků v soubor1 perl6 -e 'say lines.elems' soubor1 #totéž cat soubor1|perl6 -e 'say lines.elems' soubor2 soubor3 #počet řádků v soubor2 + v soubor3 cat soubor1|perl6 -e 'say $*IN.lines.elems' soubor2 soubor3 #počet řádků v soubor1 cat soubor1|perl6 -e 'say @*ARGS[1].IO.lines.elems' soubor2 soubor3 #počet řádků v soubor3 cat soubor1|perl6 -e 'sub MAIN ($,$soubor) { say $soubor.IO.lines.elems }' soubor2 soubor3 #totéž
@a.join: "\n"
, tak další možností je užít tzv. feed operátor ==>
, popř. <==
, který se nejčastěji používá k práci s poli.
perl6 -e 'say() <== join "\n" <== ^10' perl6 -e '^10 ==> join "\n" ==> say()' perl6 -e '^10 ==> { @^a Z+ @^a[1.. *] }() ==> sum() ==> say()' #81Kromě ntic jsou v Perlu 6 i páry
a => 12, :a<12>, :12a
, které se skládají s klíče a hodnoty. Jedna věc, kterou jsem si hned oblíbil, je push
párů do asociativního pole.
perl6 -e 'say (%).push: (a => 3, b => 10, :a<12>, :21a);' #{a => [3 12 21], b => 10} perl6 -e 'say (%).push: <a b b c a c> Z=> 1 .. *' #{a => [1 5], b => [2 3], c => [4 6]}Povšimněte si jak jsme použili anonymní proměnnou asociativního pole
%
, kterou nemusíme definovat. Podobně by jsme mohli použít pro push
do pole @
, nebo pro práci s čísly, resp. řetězci $
.
perl6 -e 'say (@).push: "a", "b", "c"' #[a b c] xsel|perl6 -pe '$_ [R~]= $++ ~ ","' #očísluje jednotlivé řádky
one-linerů
, které budou sčítat čísla v pátém sloupci podle tabulátoru, před řádkem --
.
První si vygenerujeme testovací data:
perl6 -e 'use Inline::Perl5; use Data::Random:from<Perl5> <:all>; ( loop { join "\t", rand_words(:2min :3max)>>.tc.join(" "), rand_datetime(), (^100).roll(4), rand_words() } ).head(1000).rotor((^20+1).roll(10)).&cross("--")>>.say ' >>Plocha/DATA.txtV diskuzi pod prvním blogem o Perlu 6 jsem si stěžoval, že načítání
Inline::Perl5
je neúměrně dlouhé. Tady byla sjednána náprava a již to trvá méně než vteřinu. Nicméně vygenerovaní cca 1000 položek předešlým one-linerem
trvá více než 30 vteřin.
Testovací data vypadají přibližně takto:
Festive Journeyman 2016-11-05 22:04:01 34 68 17 84 piss Frightens Astray 2016-09-14 22:41:45 5 2 93 84 reprograms Cards Optima Fisher 2016-09-18 12:45:06 85 29 72 40 transitivity -- Presumably Gore 2016-05-30 09:29:56 7 49 68 69 archipelagoes Soccer Devotions 2016-10-03 22:13:15 64 79 23 88 delaying -- Footfall Bliss 2016-07-02 17:20:29 29 22 33 2 connect Merely Transcends Moline 2016-08-15 13:36:36 87 94 9 14 pounce Advocated Compliments Sputter 2016-05-11 00:04:53 15 38 22 69 inconsiderate -- Promotes Tread Complexes 2016-08-18 17:38:55 1 47 91 41 devised --První řešení napodobí to v Perlu 5 ze zmíněné diskuze. Použijeme přepínač
-n
, zapamatujeme si předešlý řádek, a pokud současný řádek je roven --
, tak přičteme jeho pátý sloupec do $sum
. Nakonec $sum
vypíšeme.
perl6 -ne 'state $pred; state $sum += $pred.split("\t").[4] if $_ eq "--"; $pred=$_; END {say $sum}' Plocha/DATA.txtV druhém řešení místo každého řádku budeme brát dvojici
řádek, následující_řádek
. Vyfiltrujeme ty dvojici které mají první prvek roven --
a následně s nultého prvku vybereme 5. sloupec, sečteme a vytiskneme.
perl6 -e 'lines().rotor( 2 => -1 ) ==> grep *.[1] eq "--" ==> map *.[0].split("\t").[4] ==> sum() ==> say() ' Plocha/DATA.txtDalší řešení pracuje s páry ve tvaru
následující_řádek => řádek
a použijeme push
do asociativního pole. Vybereme prvek (pole) odpovídající klíči --
, vybereme 5. sloupce, sečteme a vytiskneme.
perl6 -e '(%).push( lines().&{ @^a[1 .. *] Z=> @^a } ).<-->.map( *.split("\t").[4] ).sum.say' Plocha/DATA.txtTaké se můžeme najít regulární výraz, který přímo vybere pátý sloupec před řádkem
--
.
perl6 -e 'slurp.comb(/:r^^[\T+\t] ** 4 <( \d+ )> \N*\n "--" \n/).sum.say' Plocha/DATA.txtPoslední řešení rozdělí data pomocí
--\n
. Poté z jednotlivých částí vezme pátý sloupec posledního řádku, sečte, vytiskne.
perl6 -e 'slurp.split("--\n", :skip-empty).map( *.lines.[*-1].split("\t").[4] ).sum.say' Plocha/DATA.txt
perl6 -e 'unit sub MAIN; spurt $^file ~ ++$, .join: "\n" for $^file.IO.lines.permutations' pok.txtNalezení duplikátních řádků.
perl6 -e '(%).push( slurp.lines.pairs.invert ).grep( *.value.elems > 1).sort( *.value.elems )>>.say' soubor.txtNahrazení části textového souboru jiným.
perl6 -e 'unit sub MAIN; my @soubor1 = $^soubor1.IO.lines; say join "\n", @soubor1, $^soubor2.IO.lines.[@soubor1.elems .. *]' pok.txt soubor.txtBash - násobení po řádcích
perl6 -ne '$_ ==> split "x" ==> map (* * 1.328).round ==> join "x" ==> say()' soubor.txt perl6 -ne '.split("x").map( * * 1.328 )>>.round.join("x").say' soubor.txt
Tiskni Sdílej:
perl6 -e 'print "a"; sleep(5); say "b";'vytiskne
a
a za pět vteřin b
.
Oproti Perl 5 verzi
perl -E 'print "a"; sleep(5); say "b";'která vytiskne až po pěti vteřinách
ab
.
Nicméně v Sinopsis je napsáno, že by autoflush, měl fungovat, až po zapnutí $*OUT.autoflush
, popř. by měli jít všechny data najednou uvolnit pomocí flush
.
autoflush
je v odstraněných funkcích a je tam napsáno, že je to ponecháno na implementaci. Vypadá to, že Rakudo flushuje automaticky. Kdyby náhodou někde ne, tak ta metoda flush
by měla funguvat.