Knihovna FFmpeg byla vydána ve verzi 8.0 „Huffman“. Přibyla mj. podpora hardwarově akcelerovaného kódování s využitím API Vulcan, viz seznam změn.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal Zprávu o stavu kybernetické bezpečnosti ČR za rok 2024 (pdf). V loňském roce NÚKIB evidoval dosud nejvíce kybernetických bezpečnostních incidentů s celkovým počtem 268. Oproti roku 2023 se však jedná pouze o drobný nárůst a závažnost dopadů evidovaných incidentů klesá již třetím rokem v řadě. V minulém roce NÚKIB evidoval pouze jeden velmi významný incident a významných incidentů bylo zaznamenáno 18, což oproti roku 2023 představuje pokles o více než polovinu.
Byl publikován aktuální přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie). Servo mimo jiné nově zvládne animované obrázky APNG a WebP.
Na chytré telefony a počítačové tablety v Rusku bude od začátku příštího měsíce povinné předinstalovávat státem podporovanou komunikační aplikaci MAX, která konkuruje aplikaci WhatsApp americké společnosti Meta Platforms. Oznámila to dnes ruská vláda. Ta by podle kritiků mohla aplikaci MAX používat ke sledování uživatelů. Ruská státní média obvinění ze špehování pomocí aplikace MAX popírají. Tvrdí, že MAX má méně oprávnění k přístupu k údajům o uživatelích než konkurenční aplikace WhatsApp a Telegram.
Společnost PINE64 stojící za telefony PinePhone nebo notebooky Pinebook publikovala na svém blogu srpnový souhrn novinek. Kvůli nedostatečnému zájmu byla ukončena výroba telefonů PinePhone Pro.
Po pěti měsících vývoje byla vydána nová verze 0.15.1 programovacího jazyka Zig (GitHub, Wikipedie). Verze 0.15.0 byla přeskočena. Přispělo 162 vývojářů. Přehled novinek v poznámkách k vydání.
Před sedmi lety společnost Valve představila fork projektu Wine s názvem Proton umožňující v Linuxu přímo ze Steamu hrát počítačové hry do té doby běžící pouze ve Windows. Aktuální přehled podporovaných her na stránkách ProtonDB
Společnost DuckDuckGo rozšířila svůj AI chat Duck.ai o GPT-5 mini (𝕏). Duck.ai umožňuje anonymní přístup bez vytváření účtů k několika modelům umělé inteligence. Aktuálně k GPT-4o mini, GPT-5 mini, Llama 4 Scout, Claude Haiku 3.5 a Mistral Small 3.
Marek Tóth v příspěvku DOM-based Extension Clickjacking: Data ve správcích hesel v ohrožení na svém blogu popsal novou clickjacking techniku s několika variantami útoků a otestoval ji proti 11 správcům hesel. Výsledkem bylo nalezení několika 0-day zranitelností, které mohly ovlivnit uložená data desítek milionů uživatelů. Jedno kliknutí kdekoliv na webové stránce kontrolované útočníkem umožňovalo ukrást uživatelská data ze
… více »Na dnešní akci Made by Google 2025 (YouTube) byly představeny telefony Pixel 10 s novým čipem Google Tensor G5 a novými AI funkcemi, hodinky Pixel Watch 4 a sluchátka Pixel Buds 2a.
Tiskni
Sdílej:
Object.hashCode()
vrací v Javě int
.
hashCode()
to, že v rámci běhu jedné aplikace vrací pro stejné objekty stejný hash kód. Ale při znovuspuštění aplikace už ten hash kód může být pro stejný řetězec úplně jiný. Pro String je sice metoda výpočtu hash kódu popsaná v JavaDoc, ale nejsem si jist, jak moc je závazná, a zda se třeba s novou verzí JRE nemůže změnit.
intern()
. Což se bude zajišťovat dost těžko (jinak než na úrovni kompilátoru a předefinováním významu některých operací – např. konstrukce objektu – speciálně pro String). Takže obecně řetězce porovnávat přes ==
v Javě nelze. Třeba následující kód vám vždy vypíše false
:
String text = "text"; System.out.println(new String(text) == new String(text));
nejakyVstup.intern() == "quit"
, což je případ tohohle blogu.
Pojídači koláčků a piči Javy útočí! S OOP na věčné časy a nikdy jinak!...
Já bych spíš doporučoval nastudovat něco o lexikální/syntaktické analýze, ale chápu, nezní to tak cool jako "Design patterns" a OOP...
Já bych spíš doporučoval nastudovat něco o lexikální/syntaktické analýze, ale chápu, nezní to tak cool jako "Design patterns" a OOP...To je těžké, když oni se s těmi patterny nacpou skutečně všude
switch
na String je pěkný nesmysl, proto to taky Java neumí (a doufám, že umět nebude). switch
je totiž výběr z několika málo možností. String
ů přitom může být nekonečně mnoho různých. switch
pro int
je taková berlička, protože když neexistovaly enum
y, používaly se místo nich konstanty typu int
. To už teď není potřeba, takže jestli máte někde switch
nad něčím jiným, než enum
, je docela dobré se nad tím pořádně zamyslet, zda tam náhodou není něco špatně.
Záleží na tom, co vše si od toho promptu slibujete. Pokud má být relativně složitý, asi by se dalo uvažovat o nějakém parseru. A pokud to má být jenom pár příkazů, řešil bych to přes enum
, třeba takhle:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; public class Test2 { private static enum Prikazy { PRIKAZ1("prikaz1") { @Override public void akce() { // TODO System.out.println("prikaz1"); } }, PRIKAZ2("prikaz2") { @Override public void akce() { // TODO System.out.println("prikaz2"); } }, QUIT("quit") { @Override public void akce() { System.out.println("Bye."); System.exit(0); } }, ; private final String prikaz; private static Map<String, Prikazy> mapa; private Prikazy(String prikaz) { Prikazy.init(); this.prikaz = prikaz; Prikazy.mapa.put(prikaz, this); } private static void init() { if (Prikazy.mapa == null) { Prikazy.mapa = new HashMap<String, Prikazy>(); } } public static Prikazy getPrikazByName(String prikaz) { return Prikazy.mapa.get(prikaz); } public abstract void akce(); } public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); do { System.out.print(">> "); String answer = reader.readLine(); Prikazy prikaz = Prikazy.getPrikazByName(answer); if (prikaz == null) { System.out.println("Tenhle příkaz neznám…"); } else { prikaz.akce(); } } while (true); } }
Je to prece jen syntakticky "sugar" pro hodne if-else if...A to máte odkud? V Javě to tak není, v C/C++ pokud vím také ne…
if
zjišťuje, zda je hodnota nějakého výrazu true
– pokud ano, vykoná příslušný kód. switch
porovná hodnotu výrazu s předem určeným seznamem konstant a skočí na příslušnou část kódu. Ony leccos napovídají už anglické názvy těch příkazů if
i switch
– switch stále porovnává hodnotu s konstantami, vícenásobný if
je zkratka pro if … else if
. Výrazy u ifů se pak samozřejmě vyhodnocují pokaždé znova.
a
volání getA()
, a hned máte buď jedno volání metody, nebo 3. break
taky není povinnou součástí switche if
použiju, potřebuji-li rozhodnout o nějaké podmínce, switch
použiju, pokud potřebuju vybrat jednu z více možností. Myslím, že je účelnější (alespoň v Javě) takhle k těm dvěma příkazů přistupovat a takhle je rozlišovat – vede to pak ke srozumitelnějšímu kódu.
"Můžete to tak brát, že všechny vyšší programovací jazyky jsou vpodstatě syntaktický cukr přidaný k assembleru. "Nesouhlasím. Nižší programovací jazyky jsou syntaktický cukr přidaný k assembleru. Vyšší programovací jazyky jsou syntaktický cukr přidaný k lambda kalkulu.
Ekvivalentní to není, dosaďte si místo a volání getA(), a hned máte buď jedno volání metody, nebo 3.Ale no tak, zachovat sémantiku při syntaktické transformaci snad není problém. Kdyby byl, neexistovaly by kompilátory, že?
jen si se switchem usetrim opruz s opakovanim "a". Je to podle mne stejne jak funkcne tak dokonce i implementacne (trikrat se udela porovnani v nejhorsim pripade). Nedokazu si predstavit kompilator, ktery by delal "saskarny" se scitanim apod. (mozna by se usetrila komparace, ale pokud by konstanta byla 1000, nacpalo by se tam kilo nopu?)Jo jo. Není důležité něco vědět, důležité je mít názor. To platí i pro experty na lambda kalkul, kteří ovládají lexikální analýzu, syntaktickou analýzu a mnoho dalších latinských slov.
switch
byl v Javě 15 let prakticky k ničemu, než přišla verze 5?
else if
), vidím jako rozumnější používat switch tam, kde vybírám z omezeného počtu možností (a tedy budu mít ve zdrojáku pro každou myslitelnou možnost odpovídající sekci case
). Jedině takové použití má (v Javě) smysl.
cat $( head -1 ./abc )tak to samozřejmě pustíš jednou na celek a rekurzivně zpracuješ $(). Myslel jsem to, že je zbytečné rekurzivně procházet stromem při dekódování jednotlivých tokenů. K tomu totiž nepotřebuješ znát cestu, ale jen konec, případně si cestu uložíš do řetězce (názvy proměnných, konstanty).
Command cmd = commands.get(answer); if (cmd==null) { System.out.println("unknown command: "+answer); } else { cmd.run(); }Toto řešení se dá navíc do budoucna rozšiřovat: například přidat metodu
getDescription()
a pak automaticky generovat help, přidat metodu checkValidNow()
která otestuje zda je příkaz použitelný v aktuálním stavu aplikace, atd.
Samozřejmě je ještě nutné mapu příkazů naplnit, to lze také dělat pěkně či ošklivě, ale nebudu se zde rozepisovat...