HollowByte je zranitelnost typu Denial of Service (DoS) v kryptografické knihovně OpenSSL. Útočník může odesíláním škodlivého payloadu o velikosti pouhých 11 bajtů zaplnit paměť serveru. OpenSSL před ověřením dat vyhradí nepřiměřený blok paměti (až 131 KB). Server pak čeká na data, která nepřišla. Zranitelnost je opravena ve verzích OpenSSL 4.0.1, 3.6.3, 3.5.7, 3.4.6 a 3.0.21.
Ve španělské A Coruñě probíhá GUADEC 2026, tj. letošní konference vývojářů a uživatelů desktopového prostředí GNOME. Videozáznamy přednášek jsou k dispozici na YouTube.
Společnost Collabora ve spolupráci s Valve vyvíjí Holo Core, tj. port Arch Linuxu pro ARM64 procesory (AArch64), který bude pohánět VR headset Steam Frame. Pro testování Arch Linuxu pro AArch64 jsou k dispozici binární balíčky, zdrojové kódy i kontejner pro Docker nebo Podman.
Mikroprocesor Zilog Z80 byl oficiálně uveden na trh před 50 lety, tj. v červenci 1976. Výroba mikroprocesoru skončila v roce 2024.
Výzkumníci ze společnosti ESET objevili 11 zapomenutých UEFI shim zavaděčů, které byly podepsány společností Microsoft, a které umožňují útočníkům obejít ochranu UEFI Secure Boot na většině zařízení. Microsoft je zneplatnil (přidal jejich hash do databáze dbx) v rámci aktualizace Patch Tuesday dne 9. června 2026. Uživatelé Linuxu mohou databází aktualizovat pomocí LVFS. Ověřit zneplatnění zavaděčů lze pomocí skriptu uefi-dbx-audit. Jedná se o CVE-2026-8863 a CVE-2026-10797.
pico-usb-wifi je open source firmware pro Raspberry Pi Pico W, který jej promění v USB Wi-Fi adaptér. Po připojení k počítači se objeví jako zařízení USB CDC-NCM.
Americká společnost Google ze skupiny Alphabet bude muset podle nových požadavků Evropské unie umožnit společnosti OpenAI i dalším konkurentům v oblasti umělé inteligence (AI) a internetových vyhledávačů přístup ke svým službám. Ve svém rozhodnutí o tom včera informovala Evropská komise (EK). Opatření má zajistit dodržování pravidel, jejichž cílem je omezit v EU tržní sílu velkých technologických firem. Google s tím nesouhlasí.
… více »Nové verze webových prohlížečů Chrome a Firefox jsou vydávány každé 4 týdny. Aktuální verze Chrome je 150. Aktuální verze Firefoxu je 152. V březnu bylo oznámeno, že od září přejde Chrome na dvoutýdenní cyklus vydávání verzí. To by znamenalo, že Chrome v číslování verzí Firefox brzy přeskočí. Vývojáři Firefoxu proto také od září přecházejí na dvoutýdenní cyklus vydávání verzí. :-)
Microsoft Comic Chat (Wikipedie), tj. grafický IRC klient z devadesátek, který převáděl konverzace na IRC do podoby komiksových panelů, a který zpopularizoval font Comic Sans, je dnešním dnem open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
Byla vydána (𝕏) nová verze 26.7 open source firewallové a routovací platformy OPNsense (Wikipedie). Jedná se o fork pfSense postavený na FreeBSD. Kódový název OPNsense 26.7 je Xenial Xenops. Přehled novinek v příspěvku na fóru.
//toto ulozte do ahoj.scala
println("Ahoj svete")
Pak tento soubor lze spustit:
> scala ahoj.scala Ahoj sveteParametry programu (command line arguments) jsou ve Scala skriptu uložené v array(pole) args. Ve Scale jsou arraye číslované od nuly, stejně jako v Javě, ale položky jsou přistupovány přes kulaté závorky(hranaté v Javě). První parametr programu je tedy arg(0). Příklad:
//pozdrav podle prvniho parametru, opet ulozte do ahoj.scala
println("Nazdar "+args(0)+"!")
a spusťte:
>scala ahoj.scala Pepo Ahoj Pepo!V tomto případě 'Pepo' je parametr, který je předán skriptu a vytištěn na obrazovku.
Tento skript také obsahuje komentář, Scala stejně jako Java ignoruje vše za //. Toto lze použít na krátké poznámky vysvětlující chod programu. Mimochodem, pokud pracujete na Unixu, Linuxu nebo MacOS můžete spouštět *.scala soubory jako shell skriptu. Toho lze dosáhnout jednoduchým trikem se shellem:
#!/bin/sh
exec scala $0 $@
!#
// nazdar
println("Nazdar " + args(0) + "!")
První dva řádky spouštějí vlastní skript a musí být na začátku souboru. Soubor také musí mít nastavený executable bit aby byl spustitelný:
>chmod +x ahoj.scala >./ahoj.scala Pepo Nazdar Pepo!
var i = 0
while (i < args.length) {
println(args(i))
i += 1
}
Tento skript začíná definicí promněné: var i = 0. Typová inference (odvozování) proměnné automaticky přiřadí typ scala.Int. While konstrukce na další řádce opakuje cyklus dokud platí podmínka, v tomto případě zda je promněnná i menší než počet programových parametrů (i < args.length). V cyklu je blok (část kódu mezi {} závorkami) opakovan dokud platí podmínka. První část bloku vypíše aktuální programový parametr, druhá část bloku inkrementuje proměnou i.
A po spuštění tohoto skriptu:
>scala test.scala Ahoj, tady Pepa z Depa Ahoj, tady Pepa z DepaPokud nemáte rádi Pepu, je možné ho nahradit za někoho upřímnějšího
var i = 0
while (i < args.length) {
if(args(i)=="Pepa") println("Standa")
else println(args(i))
i += 1
}
A výsledek:
>scala test.scala Ahoj, tady Pepa z Depa Ahoj, tady Standa z DepaVe Scale stejně jako v Javě musí být podmínky v kulatých závorkách. Dále pokud blok v if nebo while má více než jeden výraz, musí být uzavřen v kudrnatých závorkách. Drobný rozdíl je že if se doporučuje psát na jedné řádce.
Další rozdíl je že ve Scale je možné metody, které nemají parametry, volat bez závorek. println() je stejné jako println. Obecné doporučení je psát u všech metod závorky, pouze gettery psát bez závorek.
Jedním z přínosů Scaly je že má stručnost skriptovacích jazyků(Ruby nebo Pythom), ale zároveň má statické typování ukecanějších jazyků jako Java nebo C++. Stručnost Scaly pochází z typového odvozování, ale také z funkcionálního stylu.
Jednou z charakteristik funkcionálního programování je že funkce lze přiřadit jako proměnné a toto je 100% pravda ve Scale. Například trochu lepší cesta jak vypsat programové parametry je tato:
args.foreach(arg => println(arg))V tomto případě voláme foreach metodu na proměnné args. Foreach metodě je předána annonymní funkce (nemá vlastní jméno, stejné jako anonymní třída v Javě), která bere jeden parametr s názvem arg. Kód uvnitř anonymní funkce pak vytiskne proměnnou arg.
Předchozí kód může vypadat jako closures z dynamických jazyků. Ve skutečnosti je ale plně strongly typed a odpovídá spíše anonymní třídě v Javě (na úrovni bytecode je to anonymní třída). Typové odvozování zde funguje skvěle, takže dost ušetří psaní. Bez něj by bylo nutné definovat typ proměnné arg:
args.foreach((arg: String) => println(arg))Je ještě třetí možnost jak tento kód zapsat. Ve Scale funguje něco jako odvozování argumentů. Pokud anonymní funkce volá pouze metodu s jedním argumentem, jsou argumenty funkce doplněny aby odpovídaly argumentům metody. Je možné tedy tedy napsat:
args.foreach(println)Pro shrnutí: syntaxe anonymní metody je seznam parametrů v závorkách, následovaný šipkou (rovnítko a větší) a tělem funkce. Viz graf:
Možná se ptáte jestli Scala má for cyklus stejně jako Java a ostatní imperativní jazyky. Krátká odpověď je že ne, dlouhá je že má funkcionální for, bez break continue apod. Plně to bude vysvětleno v dalších kapitolách. For cyklus v různých jazycích:
//Scala
for (arg <- args)
println(arg)
//Java
for (String arg : args) { // Remember, this is Java, not Scala
System.out.println(arg);
}
//ruby
for arg in ARGV # Remember, this is Ruby, not Scala
puts arg
end
val s = new String("Nazdar Pepo!")
println(s)
V tomto případě je nový String vytvořen s parametrem "Nazdar Pepo!", který určuje jeho hodnotu. Při parametrizaci lze ale zajít ještě dál, například při vytváření arraye lze kromě počátečních hodnot definovat co array bude obsahovat. Tedy parametrizovat typ arraye.
val nazdar = new Array[String](3)
nazdar(0) = "Nazdar"
nazdar(1) = ", "
nazdar(2) = "Pepo!"
for (i <- 0 to 2)
print(nazdar(i))
V tomto případě vytváříme array, který bere dva parametry. První je typový a určuje co Array bude obsahovat [String], druhý pak určuje počáteční délku. Ve Scale je všechno co se týče typů ve hranatých závorkách [].
Konstrukce nazdar(0) = "Nazdar" může vypadat trochu divně. Jedná se o speciální případ, ne ve třídě Array, ale mnohem obecnější. Pokud je instance proměnné volána bez funkce, pouze se závorkami a argumenty, Scala to přetransformuje na volání metody apply. Pokud je navíc této funkci přiřazená hodnota, je volána metoda update.
Další speciální případ je for (i <- 0 to 2). V tomto případě je definován cyklus s iterací od 0 do 2. Scala má třídu pro intervaly, ale nemá operátor 'to' pro jejich definici. Scala vlastně nemá operátory vůbec. 'to' je metoda na třídě int, která bere druhé číslo a vrací interval mezi těmito čísly. for (i <- 0 to 2) je pak přeložen jako for (i <- 0.to(2)).
Scala nemá ani klasické aritmetické operátory jako +, -, *, nebo /. Vše je založeno na volání příslušných metod (s optimalizacemi překladače, na úrovni bytecode jsou čísla počítány stejně). Scala je velmi liberální v názvu metod, takže + je ve skutečnosti metoda ve třídě int. 1.+(2) je legální kód.
Předchozí kód je pak ve skutečnosti přeložen jako:
val nazdar = new Array[String](3)
nazdar.update(0, "Nazdar")
nazdar.update(1, ", ")
nazdar.update(2, "Pepo!")
for (i <- 0.to(2))
print(nazdar.apply(i))
Tiskni
Sdílej:
Možná o tom nevíte, ale předchozí příklady imperativní styl programování.
Já nevědět, co to znamenat mít.
Díky, ale stále mi chyběl příklad, jak použít scalu jako script a jak se vlastně předávají parametry. Takže například takto:
#!/bin/sh
exec scala -savecompiled "$0" "$@"
!#
object Parser {
def main(args: Array[String]) {
for (s <- args) {
println("> " + s);
}
}
}
Parser.main(args.toArray)
... při prvním spuštění to není nic moc, ale díky přepínači -savecompiled se někde vytvoří soubor .class a příští spuštění je již "rychlé". Samozřejmě, že na jednoduché scripty bude možná rychlejší scriptování třeba i bashi, ale pokud script dělá složité operace, tak už překlad do bytecode bude znát. Subjektivně: mě to přijde dostatečně rychlé.
Na tomto způsobu je hlavně fajn, že je vše v jednom spustitelném souboru, a uživatel třeba ani neví, že se uvnitř spouští scala/java.
ps: porovnání rychlosti java/scala/groovy v jednom umělém příkladu (zde se porovnává běh nikoliv pouze start)
příklad prvního a druhého (dalšího) spuštění scriptu
$ time ./4.scala
real 0m1.766suser 0m0.252ssys 0m0.040s$ time ./4.scala
real 0m0.271suser 0m0.196ssys 0m0.036s
.