Seznam dělá každé úterý odstávku svého datacentra a simuluje tak správnost jejich HA řešení. Dnes se ovšem něco pokazilo a má kompletní výpadek. Nejdou webové služby, mapy apod. Kdo by rád věděl něco více o tom, na čem Seznam běží, tak nelze nepřipomenout LinuxDays 2023: Podvozek Seznamu - od cloudu až po Datacentrum (Michal Toužín, Miroslav Bezdička).
Na stránkách konference Den IPv6 2024, jež proběhla 6. června v Praze, byly zveřejněny prezentace a videozáznamy.
Kyberkriminální skupina LockBit se prý nabourala do Federálního rezervního systému (FED) [Security Affairs].
Zakladatel WikiLeaks Julian Assange je na svobodě (𝕏, 𝕏).
V neděli 30. června skončí (EOL) podpora CentOS Linux 7.
David Tschumperlé a Garry Osgood v obšírném článku se spoustou náhledů shrnují vývoj multiplatformního svobodného frameworku pro zpracování obrazu G'MIC (GREYC's Magic for Image Computing, Wikipedie) za poslední rok.
Andrew S. Tanenbaum byl oceněn 2023 ACM Software System Award (Wikipedie) za operační systém MINIX.
Celkový počet stažení aplikací z Flathubu překročil 2 miliardy. Aktuální Statistiky Flathubu: Celkový počet stažení 2 002 793 783. Celkem desktopových aplikací 2 636.
Byla vydána nová verze 4.8.0 programu na úpravu digitálních fotografií darktable (Wikipedie).
Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 142 (pdf) a HackSpace 79 (pdf).
Vyhodnocením nějakého výrazu v Octave může být také odpověď ano/ne, pravda či nepravda. Typicky lze tohoto dosáhnout srovnáním dvou čísel pomocí relačních operátorů:
>> 4 > 2 ans = 1 >> 10 <= 1 ans = 0
Kladnou odpověď, tedy hodnotu pravda, Octave reprezentuje jako číslo 1, zápornou odpověď neboli nepravdu, pak jako číslo 0. Uveďme si přehled dostupným relačních operátorů v Octave:
a == b | a je rovno b |
a ~= b
| a je různé od b |
a < b | a je menší jak b |
a > b | a je větší jak b |
a <= b | a je menší rovno b |
a >=b | a je větší rovno b |
Jak vidno, pro zapsání nerovnosti máme k dispozici hned tři různé možnosti. Na rozdíl od Matlabu nejsou v Octave k dispozici ekvivalentní srovnávací funkce jako eq, lt, ge apod. (tyto funkce nicméně mohou být v Octave dostupné po instalaci rozšíření, které se snaží o větší kompatibilitu mezi těmito systémy).
Srovnávat lze také celé matice, pokud jsou rozměrově stejné. Výsledkem je stejně velká matice odpovědí - srovnání probíhá prvek po prvku:
>> A=[1 2; 3 4]; B=[1 1; 4 4]; A<B ans = 0 0 1 0
Výsledek lze číst tak, že pouze ve druhém řádku a prvním sloupci je hodnota v matici A ostře menší než v matici B.
S hodnotami pravda a nepravda lze také pracovat při logických operacích. V těchto případech je číslo nula vždy chápáno jako nepravda a jakékoliv jiné, tj. nenulové číslo jako pravda. K dispozici pak máme logický součin, logický součet a negaci:
>> 0 & 1 ans = 0 >> 0 | 1 ans = 1 >> ~6,!(!6) ans = 0 ans = 1
Pro negaci lze použít symbol vlnovka (tilda) nebo vykřičník. Souhrnně tedy:
x & y | x a zároveň y |
x | y | x nebo y |
~x | negace x |
Ani tentokrát nejsou v Octave po vzoru Matlabu ekvivalentní funkce and, or a not. Existuje však funkce xor pro exkluzivní nebo:
>> xor(1,1) ans = 0
K dispozici jsou též operátory pro neúplné vyhodnocování logického součinu a součtu, kdy vyhodnocování skončí v okamžiku, kdy je již znám výsledek na základě části výrazu. Jedná se vlastně o zdvojené symboly pro tyto operace:
>> 0 && (4 < 5) ans = 0 >> 1 || (4 < 5) ans = 1
Ani v jednom z těchto příkladů se nevyhodnocoval výraz 4 < 5, neboť výsledek celého výrazu je jasný již z první části.
Konečně stejně jako u relačních operátorů lze logickými operátory spojovat celé matice, pokud mají stejné rozměry:
>> A=[1;1;0;0]; B=[1;0;1;0]; C=[A, B, A&B, A|B, xor(A,B)] C = 1 1 1 1 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 0
Dodejme ještě, že v Octave existují dvě konstanty true a false (s hodnotami 1 a 0), s kterými lze v logických výrazech pracovat.
Octave obsahuje celou řadu funkcí (s jménem obvykle začínajícím na is), které testují, zda objekt vyhovuje nějakým podmínkám. V prvé řadě sem patří testy na datový typ - isnan, isinf, isstr, finite - dotazy, zda daný objekt je NaN, nekonečno, řetězec či konečné číslo. Je-li testovacím objektem matice, vrací se stejněrozměrná matice výsledků - odpovědí pravd a nepravd v podobě jedniček a nul:
>> M=[27, NaN, -Inf]; >> isnan(M) ans = 0 1 0 >> isinf(M) ans = 0 0 1 >> finite(M) ans = 1 0 0 >> isstr("Ahoj") ans = 1
Funkce isstr testuje, zda daný objekt je řetězcem - o řetězcích bude podrobné pojednání někdy příště.
Další řada funkcí testuje numerické objekty - isnumeric, isreal, iscomplex, ismatrix, isvector, isscalar - ptáme se, je-li objekt číslo, reálné číslo, komplexní číslo, matice, vektor, skalár:
>> isnumeric(Inf) ans = 1 >> isreal(2.5+6i) ans = 0 >> iscomplex(2.5+6i) ans = 1 >> iscomplex(2.5) ans = 0 >> ismatrix([]) ans = 0 >> isvector([1 2; 3 4]) ans = 0 >> isscalar([1 1]) ans = 0
Mezi dalšími testovacími funkcemi je vhodné zmínit se zejména o:
Příklady:
>> issquare(ones(5)) ans = 5 >> isbool(5 >= 0 & xor(1,0)) ans = 1 >> isbool(1) ans = 0 >> isempty([]) ans = 1 >> is_duplicate_entry([1 2 3 1 1 3 3 1]) ans = 5
Poslední příklad vyšel roven pěti, protože kromě jedničky na prvním místě vstupního vektoru zde jsou ještě 3 další duplicity jedniček a k trojce uvedené na třetím místě dále figurují další 2 duplicity: 3 + 2 = 5. Výše uvedený výčet jednoduchých testovacích funkcí není zdaleka úplný, o některých ještě bude řeč dále, ostatní lze nalézt v nápovědě.
Hodnoty pravda a nepravda také vrací funkce any a all. První jmenovaná se ptá, zda-li je ve zkoumaném vektoru alespoň jeden prvek nenulový, druhá pak, zda-li jsou všechny prvku ve vektoru nenulové:
>> V=[0 1 2 3]; W=[1 2 3 4]; X=[0 0 0 0]; >> any(V), any(W), any(X) ans = 1 ans = 1 ans = 0 >> all(V), all(W), all(X) ans = 0 ans = 1 ans = 0
Pokud tyto funkce aplikujeme na matici, jako výsledek získáme vektor odpovědí - ke každému sloupci matice jednu:
>> A=[0 1 0; 1 2 0] A = 0 1 0 1 2 0 >> any(A),all(A) ans = 1 1 0 ans = 0 1 0
Kde je v odpovědi jednička, tak v takovém sloupci v pořadí daná podmínka platí. Chceme-li získat jedinou odpověď pro celou matici, můžeme funkce aplikovat vícekrát. Dotaz
>> any(any(A)) ans = 1
zjistí, zda v celé matici je alespoň jedno číslo nenulové; kombinací funkcí
>> all(any(A)) ans = 0
zase zjistíme, zda všechny sloupce matice obsahují alespoň jedno nenulové číslo apod.
Zatímco funkce any a all dávaly odpovědi ano a ne, s pomocí funkce find lze najít pozice prvků, které nějakou podmínku splňují. Přesně definováno funkce find vrací sloupcový vektor pozic nenulových prvků v matici:
>> find(A) ans = 2 3 4
V takovémto jednoduchém případě se pozice počítají od jedničky po sloupcích směrem od shora dolů, aktuální pozice tedy odpovídá přepočtu řádek + počet řádků × (sloupec -1):
A = % Pozice v A = 0 1 0 % 1 3 5 1 2 0 % 2 4 6
Funkci find lze „donutit“, aby pozice prvků vracela jako dva vektory, kdy v jednom budou indexy řádků a ve druhém indexy sloupců; správné souřadnice pak získáme, vezmeme-li dvojice čísel ze stejných pozic v těchto vektorech:
>> [radky, sloupce]=find(A) radky = 2 1 2 sloupce = 1 2 2
Pro lepší přehlednost pak můžeme tyto sloupcové vektory vypsat vedle sebe v jedné matici:
>> [radky, sloupce] ans = 2 1 % čteno po řádcích vidíme souřadnice 1 2 2 2
Výsledek nyní čteme tak, že nenulové prvky jsou v matici A ve druhém řádku a prvním sloupci, v prvním řádku a druhém sloupci a také v druhém řádku a druhém sloupci.
Nakonec si ukažme, jak se se funkce find obvykle používá - pro výpis pozic prvků, které splňují nějakou podmínku:
>> find(A==0) ans = 1 5 6
Na vypsaných pozicích je v matici A číslo nula.
Nástroje: Tisk bez diskuse
Tiskni Sdílej: