Byla vydána (𝕏) nová major verze 17 softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech GitLab (Wikipedie). Představení nových vlastností i s náhledy a videi v oficiálním oznámení.
Sovereign Tech Fund, tj. program financování otevřeného softwaru německým ministerstvem hospodářství a ochrany klimatu, podpoří vývoj FFmpeg částkou 157 580 eur. V listopadu loňského roku podpořil GNOME částkou 1 milion eur.
24. září 2024 budou zveřejněny zdrojové kódy přehrávače Winamp.
Google Chrome 125 byl prohlášen za stabilní. Nejnovější stabilní verze 125.0.6422.60 přináší řadu oprav a vylepšení (YouTube). Podrobný přehled v poznámkách k vydání. Opraveno bylo 9 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Textový editor Neovim byl vydán ve verzi 0.10 (𝕏). Přehled novinek v příspěvku na blogu a v poznámkách k vydání.
Byla vydána nová verze 6.3 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.15.
Dnes ve 12:00 byla spuštěna první aukce domén .CZ. Zatím největší zájem je o dro.cz, kachnicka.cz, octavie.cz, uvycepu.cz a vnady.cz [𝕏].
JackTrip byl vydán ve verzi 2.3.0. Jedná se o multiplatformní open source software umožňující hudebníkům z různých částí světa společné hraní. JackTrip lze instalovat také z Flathubu.
Patnáctý ročník ne-konference jOpenSpace se koná 4. – 6. října 2024 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytváří všichni účastníci, se skládá z desetiminutových
… více »Program pro generování 3D lidských postav MakeHuman (Wikipedie, GitHub) byl vydán ve verzi 1.3.0. Hlavní novinkou je výběr tvaru těla (body shapes).
Octave podobně jako programovací jazyk Pascal, jehož syntaxe je velmi podobná, obsahuje příkazy break a continue na bezprostřední ukončení aktuálně běžící smyčky cyklu. Vždy se dá program napsat bez použití těchto příkazů, mohou ovšem nastat „zapeklité“ situace, kdy je potřeba upravit složitý algoritmus plný vnořených cyklů a použití těchto příkazů může být relativně elegantním řešením.
Mějme jednoduchý cyklus od jedné do tří, který dvakrát vypíše aktuální hodnotu čítače. Mezi tyto dva výpisy vsuňme test na rovnost čítače číslu 2 a v kladném případě zavolejme příkaz continue:
--[skript preruseni.m]-- for i=1:3 disp(i); if i==2 continue end disp(i); end --[konec skriptu]--
Příkaz continue předčasně ukončí aktuálně vykonávanou smyčku cyklu – řízení programu předá opět na začátek cyklu. V našem případě se proto nevykoná druhý příkaz disp pro vypsání čítače v případě, kdy nabude hodnoty 2:
>> preruseni 1 1 2 3 3
Nyní nahraďme příkaz continue příkazem break:
--[skript preruseni.m]-- for i=1:3 disp(i); if i==2 break end disp(i); end --[konec skriptu]--
Příkaz break zajistí okamžité ukončení celého cyklu – žádné další příkazy v těle cyklu se již nevykonají a běh programu se přesune na další příkazy uvedené za cyklem. V našem případě již však žádné nejsou, proto se skript ukončí:
>> preruseni 1 1 2
V souvislosti s příkazem break se někdy můžeme setkat s pojmem cyklus s podmínkou uprostřed. Nejedná se o nic jiného, než o neukončený cyklus, o jehož ukončení se postará break na základě splnění podmínky testované někde v těle cyklu:
while true <příkazy cyklu> if <podmínka> break end <příkazy cyklu> end
Dodejme ještě, že ve funkcích můžeme použít také příkaz return, který dělá to stejné, co break v cyklech – okamžitě ukončí běh právě vykonávané funkce a předá řízení objektu, který funkci zavolal, tedy jiné funkci či příkazovému řádku.
V Octave nechybí ani řídící konstrukce switch pro výběr z alternativ, i když její současná podoba je označovaná jako experimentální. Za klíčovým slovem switch následuje výraz, jehož výsledek je pak porovnáván se seznamem možných hodnot uvozovaných klíčovým slovem case. Pokud je nalezen odpovídající případ, provedou se příkazy uvedené v této sekci case. Neodpovídá-li žádný případ výsledku výrazu a je přítomna nepovinná sekce otherwise, provedou se příkazy uvedené v této sekci (analogie else u if). Celá konstrukce je ukončena klíčovým slovem end, respektive endswitch:
--[skript]-- switch nejaka_ciselna_promenna case 1 disp('jedna'); case 2 disp('dva'); case 3 disp('tři'); case 4 disp('čtyři'); case 5 disp('pět'); otherwise disp('neznám slovní vyjádření'); endswitch --[konec skriptu]--
Uvedený skript je přepisem příkladu využívajícím řídicí strukturu elseif v odstavci o větvení programu. Porovnáním těchto příkladů zjistíme, že konstrukcí switch si ušetříme zejména zápis relačního operátoru „==“ – od toho ji také programovací jazyky obsahují – a na druhou stranu je snad jasné, že se konstrukce switch nehodí na zkoumání jiných relačních vlastností než je rovnost dvou výrazů.
V Octave mohou být zkoumaný výraz i jednotlivé případy jakékoliv platné výrazy jazyka a navíc lze snadno sdružovat případy, pro které se má vykonat stejný blok příkazů. Nuže mírně složitější ukázka skriptu:
--[skript mutace.m]-- B=[0 1; 0 0]; switch A=fix(rand(2)*2) case B disp('A odpovídá matici B'); case B' disp('A odpovídá transponované matici B'); case {rot90(B,1), rot90(B,-1)} disp('A odpovídá otočené matici B'); case not(B) disp('A odpovídá negované matici B'); case [1 0; 1 0] disp('A odpovídá matici [1 0; 1 0]'); otherwise disp('matice A vyšla nějak úplně jinak'); end --[konec skriptu]--
Příklad zkoumá náhodně vygenerovanou matici nul a jedniček oproti nějaké mutaci matice B; všimněme si zejména složených závorek u třetího případu, s jejichž pomocí se dělá výše zmiňované sdružování případů. Pokud znáte konstrukci switch z jiných programovacích jazyků (zejména C, Java), uvědomte si, že v Octave jsou případy exkluzivní, tj. při vyhodnocování se nalezne první odpovídající hodnota, provedou se příkazy příslušné pouze tomuto případu a dále se pokračuje příkazy za koncem řídicí struktury. Případné využívání příkazů break by zde patrně vedlo k neočekávaným výsledkům.
Varování nakonec – obvyklými zkoumanými případy v konstrukci switch jsou konstanty respektive konstantní výrazy. Pokud chceme být varováni u nekonstantních případů, je třeba nastavit interní proměnnou warn_variable_switch_label na nějaké nenulové číslo.
>> warn_variable_switch_label=1 >> mutace warning: variable switch label A odpovídá matici [1 0; 1 0]
Octave také obsahuje dvě řídicí struktury pro ošetřování chybových situací – jedná se limitované formy převzaté z jazyka Lisp. Obě tyto struktury obsahují dva bloky příkazů oddělené klíčovými slovy, přičemž první z těchto bloků obsahuje v obou případech kritické místo, tj. příkazy, u kterých lze očekávat vyvolání chybové situace. Příkazy v druhém bloku u struktury try-catch se provedou v případě, že v prvním bloku nastala chyba, naopak struktura unwind_protect garantuje, že druhý blok příkazů se provede vždy, bez ohledu na to, zda v prvním bloku příkazů byla či nebyla chybová situace vyvolána. Ošetřit se tak dají dočasné změny globálních proměnných, otevírání souborů apod:
--[skript otevri.m]-- try load neexistujici_soubor; catch disp('Daný soubor neexistuje'); end_try_catch --[konec skriptu]-- >> otevri Daný soubor neexistuje
Porovnejme s:
unwind_protect load soubor unwind_protect_cleanup disp('Tento text se vypíše bez ohledu na existenci souboru'); end_unwind_protect
Namísto funkce disp lze pro vypsání chybových a varovných hlášení využít funkcí error a warning, které k textu přidají prefix „error:“ nebo „warning:“. Funkce error navíc ukončí běh programu, více viz Error Handling.
Nástroje: Tisk bez diskuse
Tiskni Sdílej: