Jakub Vrána vydal Adminer ve verzi 6.0.0 s více než 130 změnami: "Většina změn vznikla s asistencí Claude Opus 5. Někteří lidi se bojí, že AI asistence může kód zamořit technickým dluhem. To je jistě pravda, pokud vývojář všechny změny bezduše odbouchne Enterem. Ale pokud si pořádně projde plán, vyjedná v něm změny a pak totéž udělá i s vygenerovaným kódem, kvalita kódu stoupne a technický dluh naopak klesne. Je to jako párové programování s
… více »Sam Aaron vydal novou major verzi 5.0.0 aplikace Sonic Pi (Wikipedie) určené také pro výuku programování pomocí skládání hudby. Přehled novinek na GitHubu. Instalovat lze také z Flathubu.
U příležitosti 30. výročí vydání počítačové hry Quake byla vydána nová epizoda s názvem Dawn of the Machine (Steam).
Vládní CERT upozorňuje (𝕏) na sérii bezpečnostních záplat (CVSS 9.9) v produktech Cisco řešících kritické zranitelnosti umožňující obejití autentizace, eskalaci oprávnění, vzdálené spuštění kódu a odepření služby. Úspěšné zneužití může útočníkům umožnit získat neoprávněný přístup k dotčeným systémům, kompromitovat zařízení Cisco Catalyst SD-WAN a Cisco IOS XE, spustit libovolný kód, zpřístupnit citlivé informace nebo narušit dostupnost postižených systémů.
Soud v americkém státě Nové Mexiko ve čtvrtek nařídil internetové společnosti Meta Platforms zaplatit 567 milionů dolarů (téměř 12 miliard Kč) za újmy, které její platformy působí mladým lidem. S přihlédnutím k dřívějšímu verdiktu tak má společnost celkem zaplatit 942 milionů dolarů, což je malý zlomek jejího ročního výnosu, který loni činil 60 miliard dolarů. Čtvrteční verdikt firmě také nařizuje, aby změnila způsob, jakým její
… více »Mark Russinovich (CTO v Microsoft Azure) se na LinkedIn pochlubil svým projektem MS Paint Doom napsaným pomocí Claude. Hru Doom umožňuje hrát v programu Malování (Microsoft Paint). Malování funguje jako monitor. Herní engine (ViZDoom) běží na pozadí a každý vykreslený snímek hry vkládá automaticky přes schránku (clipboard) do Malování.
Platformy ChatGPT i Roblox by mohly být zařazeny na seznam mimořádně velkých on-line platforem nebo internetových vyhledávačů, na něž se vztahují zvláštní podmínky podle nařízení o digitálních službách (DSA). Vzhledem k tomu, že ChatGPT i Roblox oznámily počet uživatelů nad prahovou hodnotou DSA, je toto označení „rozhodně možné“ a mohlo by „přijít dříve či později“. On-line platformy a vyhledávače zařazené na seznamy DSA musejí
… více »Společnost Cloudflare představila Cloudflare OS (GitHub), tj. open source platformu navrženou pro integraci umělé inteligence (agentů) přímo do pracovních procesů organizací.
Byla vydána nová verze 5.13 svobodného multiplatformního softwaru pro konverzi a zpracování digitálních fotografií primárně ve formátů RAW RawTherapee (Wikipedie). Vedle zdrojových kódů je k dispozici také balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.
Jean-Baptiste Kempf na svém blogu představil novou verzi 9.0 "Lei" kolekce svobodného softwaru umožňujícího nahrávání, konverzi a streamovaní digitálního zvuku a obrazu FFmpeg (Wikipedie).
Při rozsáhlejších výpočtech v Octave přestane příkazová řádka svým komfortem dostačovat. V tu chvíli přichází ke slovu soubory, které Octave může využívat dvěma způsoby - jednak pro ukládání dat, tj. obsahu proměnných (o tom byla řeč v minulém díle), a jednak pro zápis více příkazů, které se mají provést najednou (o tom bude řeč nyní). Ve druhém případě následně rozlišujeme mezi skripty - což není nic jiného než sada příkazů, která po vyhodnocení vykáže naprosto tytéž výsledky, jako kdybychom je zapisovali na příkazový řádek - a funkcemi - těm navíc můžeme předávat vstupní parametry a naopak výsledky výpočtu zase předávat jako parametry dalším funkcím - co to přesně znamená, je vysvětleno dále.
Vždy, když žádáme Octave o vyhodnocení nějakého příkazu - jako například funkce sinus - hledá se tento příkaz v prvé řadě mezi vestavěnými funkcemi - sem patří právě základní matematické funkce, včetně zmíněného sinu; příkaz pro změnu adresáře; výpis nápovědy nebo aktuálně zavedených proměnných apod. Pokud se zadaný příkaz nenajde mezi vestavěnými funkcemi, zkouší Octave štěstí v určitých adresářích (viz obsah proměnné DEFAULT_LOADPATH), zda se zde nenachází stejně pojmenovaný soubor s příponou „.m“. Pakliže ano, pokusí se jeho obsah interpretovat - očekává se, že zde bude skript nebo funkce. Tento princip je převzatý z Matlabu včetně oné charakterizující přípony .m, díky které se tyto soubory občas nazývají M-soubory, v angličtině M-files. Z již zmíněných funkcí Octave se v podobě M-souborů distribuují například funkce gcd, lcm, mod, tril, triu či funkce pro práci s řetězci z pátého dílu.
Ve výchozím nastavení Octave figuruje v seznamu prohledávaných adresářů také aktuální adresář, čehož se využívá pro uživatelské skripty a funkce, kterým kromě označení M-soubory můžeme říkat také programy. Zkusme nyní v libovolném prázdném adresáři následující příkazy:
>> ls >> mujskript error: `mujskript' undefined near line 3 column 1
V aktuálním adresáři zatím není žádný soubor, jak ukazuje prázdný výpis po příkazu ls - volání zatím neexistující funkce mujskript tedy zákonitě skončí chybou. Vytvořme nyní v tomto adresáři soubor mujskript.m s následujícím obsahem:
--[mujskript.m]--
disp('Ahoj!');
--[konec souboru]--
Nyní můžeme sekvenci příkazů zopakovat s tímto výsledkem:
>> ls mujskript.m >> mujskript Ahoj!
Zároveň jsme si ukázali velmi jednoduchý skript, o kterých pojednává následující odstavec.
Skripty skutečně nejsou ničím jiným než prostým přenesením příkazů z příkazové řádky do souboru. Význam této skutečnosti se promítá zejména do způsobu zacházení s proměnnými:
Mějme následující „hloupý“ skript na výpočet kořenů kvadratické rovnice:
--[koreny.m]-- D=4*a*c-b^2; x1=-b-sqrt(D); x2=-b+sqrt(D); b=x1/(2*a) c=x2/(2*a) --[konec skriptu]--
Nyní můžeme na příkazovém řádku psát:
>> a=1;b=4;c=-12; >> who *** local user variables: a b c >> koreny b = -6 c = 2 >> who *** local user variables: D a b c x1 x2
Z příkladu vidíme, že před spuštěním skriptu existovaly pouze proměnné a, b, c - po skončení skriptu přibyly navíc D, x1 a x2, přičemž hodnoty původních proměnných b a c byly pozměněny. Za povšimnutí stojí také fakt, že po spuštění skriptu se jako výsledek vypsaly výsledky příkazů skriptu, které nebyly ukončeny středníkem.
Skript se může hodit v případě, kdy uživatel potřebuje jednorázově sestavit a odladit blok příkazů pro řešení svého problému, kdy má plně pod kontrolou používání proměnných. Užitečné jsou také startovací skripty, pomocí kterých si uživatel může spustit sekvenci příkazů, které opakovaně potřebuje vykonat po spuštění Octave, jako například nastavit vlastní prompt příkazového řádku, přepnout do určitého adresáře apod.
Skripty se však již nehodí pro předkládání programů jiným uživatelům k využívání - v našem příkladě skriptu pro výpočet kořenů musí uživatel vědět, že koeficienty má uložit právě do proměnných pojmenovaných a, b, c, že výsledky se nacházejí v proměnných b a c a že se při výpočtu paměťový prostor „zamoří“ nově vytvořenými proměnnými, které uživatel v lepším případě na nic nepotřebuje, v horším mohou svým jménem kolidovat s jinými proměnnými, které si uživatel zavedl za jiným účelem. Tyto nepříjemnosti řeší právě funkce - striktním oddělením lokálních proměnných funkce od globálních proměnných zaváděných na příkazovém řádku.
Pro proměnné ve funkci platí následující pravidla:
Funkci od skriptu odlišíme tím, že na začátku souboru uvedeme klíčové
slovo function, za kterým musí následovat název
funkce - ten by se měl shodovat s názvem souboru. Jednoduchá funkce
tak může vypadat například takto:
--[mojefunkce.m]-- function mojefunkce a=4; disp(a); disp(b); --[konec funkce]--
Proměnná a v této funkci figuruje jako lokální proměnná. Podívejme se nyní, jak bude koexistovat s globálními proměnnými a a b:
>> a=1; b=7; >> mojefunkce 4 error: `b' undefined near line 4 column 6 >> a,b a = 1 b = 7
Funkce vypsala hodnotu lokální proměnné a chybové hlášení o chybějící lokální proměnné b. Globální proměnné a a b zůstaly nedotčeny. „Komunikovat s vnějším prostředím“ může funkce pouze skrze vstupní a výstupní proměnné. Práci s nimi si ukažme na upraveném výpočtu kořenů kvadratické rovnice:
--[koreny.m]-- function x=koreny(a,b,c) D=b^2-4*a*c; x(1)=(-b-sqrt(D))/(2*a); x(2)=(-b+sqrt(D))/(2*a); --[konec funkce]--
Za názvem proměnné je v kulatých závorkách uveden seznam vstupních proměnných, od kterých očekáváme, že jejich hodnoty budou zadány jako parametry při volání této funkce na příkazovém řádku - v těle funkce tedy s těmito proměnnými můžeme počítat (a na základě jejích různých hodnot nám bude funkce vracet různé výsledky).
Proměnná x uvedená před názvem funkce a oddělená rovnítkem, je výstupní proměnná - jejím prostřednictvím vracíme výsledek funkce. Znamená to, že ta hodnota, která na konci výpočtu naší funkce bude uložena v proměnné x, se vypíše po skončení funkce:
>> koreny(1,4,-12)
ans =
-6 2
Díky tomu, že Octave každou proměnnou interně chápe jako matici, lze snadno jako výsledek funkce vrátit více čísel - v našem příkladě jsme proměnnou x pojali jako dvouprvkový vektor.
Jak ukázal první příklad funkce, vstupní ani výstupní proměnné nejsou nutné, jejich užitná hodnota však tak silně klesá. Výsledek funkce může být také například vypsán pomocí příkazu disp, v takovém případě však již není možné výsledek uložit do nějaké proměnné a dále s ním pracovat:
>> vysl=koreny(1,4,-12); >> sum(vysl) ans = -4
Funkce budou v dalších dílech hojně využívány a dále vysvětlovány v příkladech na řídicí struktury programů v Octave.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej: