Na blogu Raspberry Pi byla představena rozšiřující deska Raspberry Pi AI HAT+ 2 s akcelerátorem Hailo-10 a 8 GB RAM. Na rozdíl od předchozí Raspberry Pi AI HAT+ podporuje generativní AI. Cena desky je 130 dolarů.
Wikipedie slaví 25. výročí svého založení. Vznikla 15. ledna 2001 jako doplňkový projekt k dnes již neexistující encyklopedii Nupedia. Doména wikipedia.org byla zaregistrována 12. ledna 2001. Zítra proběhne v Praze Večer svobodné kultury, který pořádá spolek Wikimedia ČR.
Po více než dvou letech od vydání předchozí verze 2.12 byla vydána nová stabilní verze 2.14 systémového zavaděče GNU GRUB (GRand Unified Bootloader, Wikipedie). Přehled novinek v souboru NEWS a v aktualizované dokumentaci.
Google Chrome 144 byl prohlášen za stabilní. Nejnovější stabilní verze 144.0.7559.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 10 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře (YouTube).
Microsoft zveřejnil zdrojový kód XAML Studia a uvolnil ho pod MIT licencí. XAML Studio je nástroj ze světa Windows, určený pro tvorbu uživatelského rozhraní aplikací pomocí XAML (Extensible Application Markup Language). Stalo se tak zhruba po osmi letech od prvního prohlášení Microsoftu, že se tento kód chystá zveřejnit.
TimeCapsule, 'časová kapsle', je jazykový model trénovaný výhradně na datech z určitých míst a časových období, aby se tak napodobila autentická slovní zásoba, způsob vyjadřování a názory dané doby. Na Hugging face jsou k dispozici modely natrénované na historických textech dostupných v oblasti Londýna mezi lety 1800 až 1875.
Radicle byl vydán ve verzi 1.6.0 s kódovým jménem Amaryllis. Jedná se o distribuovanou alternativu k softwarům pro spolupráci jako např. GitLab.
Zemřel Scott Adams, tvůrce komiksových stripů Dilbert parodujících pracovní prostředí velké firmy.
Sdružení CZ.NIC vydalo novou verzi Knot Resolveru (6.1.0). Jedná se o první vydanou stabilní verzi 6, která je nyní oficiálně preferovanou a doporučovanou verzí, namísto předešlé verze 5. Více o Knot Resolveru 6 je možné se dočíst přímo v dokumentaci.
Byl vydán Linux Mint 22.3 s kódovým jménem Zena. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze, že nástroj Systémová hlášení (System Reports) získal mnoho nových funkcí a byl přejmenován na Informace o systému (System Information). Linux Mint 22.3 bude podporován do roku 2029.
Řešení dotazu:
java.lang.Comparable a java.util.Comparator. Pro programování v Javě je vůbec vhodné přečíst si JavaDoc k často používaným balíkům (java.lang, java.util, java.io, java.text) a alespoň anotaci všech tříd v těchto balíkách, abyste měl přehled aspoň o tom základním, co vám runtime knihovna Javy poskytuje.
a radim ho... vse je OK a funguje(pokud radim podle veku),
jen se mi nejak nedari to seradit podle jmena -
nevim, jak mam ziskat tu clenskou promenmou jmeno.....??
diky za rady
trida Clovek: http://pastebin.com/m317ab129
trida Test: http://pastebin.com/m6e4cc751
(a ani to neni nikde v osnovach)..... takze bych uprednostnil nejake(jednodussi) reseni (vrchol toho co jsme delali byl spojovy seznam, ArrayList,.......) takze by po me asi nemeli chtit nejake "komparatoty"
.....napada Vas nake jednodussi reseni??
ja kdyz sem delal neco podobneho(semestralni praci - jednoduchou databazi), tak sem si kazdy Objekt me tridy "prevedl" do Stringu (kde byli vsechny jeho clenske promenne) a ten jsem pak radil....jenze to bylo urcite dost hloupe resene....
diky za rady
java.lang.Comparable, najdete tam, že implementace této třídy je právě ono „přirozené řazení“ – a o tom se píše v zadání.
Jinak jak uz nekdo psal, jednodussi reseni nez komparator asi neni. Prevest objekt na string a ten pak tridit neni snad primo hloupe, ale dobre reseni to rozhodne neni.
......
to zda to uci dobre nebo spatne nemohu dost dobre posoudit, protoze programovani moc nerozumim.....muzu jen rict, ze cviceni me bavi: s ucitelem byla sranda, rad na cokoli odpovi,...a myslim, ze sem se toho za tech par tydnu celkem dost naucil.....
Jinak o vyuku techto predmetu(spojenych s programovanim) se stara katedra informatiky, ne?
a radim ho... vse je OK a funguje(pokud radim podle veku), jen se mi nejak nedari to seradit podle jmena - nevim, jak mam ziskat tu clenskou promenmou jmeno.....??
diky za rady
trida Clovek: http://pastebin.com/m317ab129 trida Test: http://pastebin.com/m6e4cc751
return jmeno.compareToIgnoreCase(jmeno2).
Propiska. Lepší je použít generika, pak to za vás pohlídá kompilátor, pak ale stejně potřebujete udělat test na null.
Za čtvrté, stav by měl být zřejmě výčtový typ (enum).
Za páté, soustava tolika do sebe vnořených ifů by ve vás vždy měla vyvolat podezření, že je na tom kód něco špatně. Zkusil bych třeba tohle:
if (other == null) {
return -1;
}
assert this.nazevFirmy != null;
int result = this.nazevFirmy.compareTo(other.nazevFirmy);
if (result != 0) {
return result;
}
assert this.barva != null;
result = this.barva.compareTo(other.barva);
if (result != 0) {
return result;
}
assert this.barvaPisma != null;
result = this.barvaPisma.compareTo(other.barvaPisma);
if (result != 0) {
return result;
}
assert this.stav != null;
result = this.stav.compareTo(other.stav);
return result;
int result = 0;
if (this.nazevFirmy != null) {
result = this.nazevFirmy.compareTo(other.nazevFirmy);
} else if (other.nazevFirmy != null) {
result = 1;
}
if (result != 0) {
return result;
}
...
nebo kompaktněji
int result = (this.nazevFirmy != null) ? this.nazevFirmy.compareTo(other.nazevFirmy)
: (other.nazevFirmy != null) ? 1
: 0;
asserty jsou přesně podle původního kódu (který nepředpokládal nullové hodnoty), jenom v tom původním kódu chyběly. Pokud tam prázdné hodnoty mohou být, pak je samozřejmě nutné s nimi počítat.
assertem (a příslušně zdokumentován v JavaDocu).
assertů je kontrakt metody takový, že nemá žádné požadavky na vstupní parametry, a v té metodě je chyba – neošetřený případ, kdy některá z hodnot bude prázdná. Pokud někdo tuto metodu zavolá na objekt s prázdnou hodnotou, dojde k výjimce, a je to chyba programátora této metody.
Pokud se použijí asserty (a zdokumentuje se to v JavaDocu, kompilátor zatím s asserty pracovat neumí), je součástí kontraktu metody to, že hodnoty nejsou prázdné. Pokud někdo zavolá metodu na objekt s prázdnými hodnotami, je to chyba volajícího. Některé budoucí verze kompilátorů snad budou umět na takové chyby upozornit už v době překladu.
@Null a @NotNull). Ale je potřeba si uvědomit, kdy se asserty do Javy přidaly.
assert jenom syntaktický cukr místo
if (Boolean.getBoolean("assertion.enabled") && !(expr)) {
throw new AssertionError(…);
}
? K čemu by bylo dobré něco takového do jazyka zavádět?
v té metodě je chyba – neošetřený případ, kdy některá z hodnot bude prázdnáJenže ve Vašem případě je ten případ stejně špatně/dobře ošetřen. Buď null je platná hodnota, a pak se to může řešit extra porovnáním tak, jak jsem navrhoval. A nebo null platná hodnota není. A v případě vstupu neplatné hodnoty se vyhazuje výjimka. A je už jen na úzusu jestli vyhodíte NPE nebo jinou, akorát že kvůli NPE nemusíte psát další řádky kódu, čímžto má marginální výhodu. Pokud chcete něco dokumentovat, můžete napsat do dokumentace jednu větu: žádné z polí nesmí být null. Slabé povahy takový guard ještě můžou chtít vynutit v konstruktoru/setteru jak jsem řekl.
int budete cpát String, taky dostanete za běhu výjimku – ale je snaha to odchytit dřív, konkrétně tohle už v době kompilace. assert má stejný význam, akorát současné kompilátory asserty nijak nekontrolují. Na produkčním prostředí můžete mít assert vypnutý a kód může normálně projít (ne tento konkrétně, ale jiný kód chráněný assertem).
A v případě vstupu neplatné hodnoty se vyhazuje výjimka.Jenže je podstatné, jestli programátor tu neplatnou hodnotu kontroluje, nebo jestli si dá jako podmínku, že na vstupu neplatná hodnota nesmí být, a pak už ji nekontroluje. Test s
ifem a vyhozením výjimky je první případ, assert nebo třeba deklarace typů parametrů metody je druhý případ – programátor hodnoty na vstupu nekontroluje a předpokládá že jsou správně. A deklarovaný typ nebo assert jsou jen nápověda pro nástroje, které tuhle kontrolu udělají za programátora, který danou metodu využívá – přičemž u deklarace typu parametru tu kontrolu umí udělat už kompilátor, u assertů to udělat (zatím) neumí a je to ponecháno až na JVM.
Potíž je ale v tom, co říkáte, totiž že toto vlastnost jazyka není.Není to vlastnost současných kompilátorů, vlastnost jazyka to je od verze 1.4. Problém assertů v Javě je ten, že jsou tak obecné, že kompilátor nemůže umět vyhodnotit všechny možné případy. Ale nenulovost by umět vyhodnocovat mohl. A možná to už i nějaké nástroje na statickou kontrolu kódu dělají. Ani kompilátor od Sunu ve všem neodpovídá plně specifikaci Javy (tj. že by využíval všechny možnosti dané jazykem) – třeba takovou anotaci
@SuppressWarnings jednapětkový kompilátor od Sunu ignoroval, přestože byla součástí runtime knihovny (a u Javy se rozdíl mezi jazykem a runtime knihovnou stírá).
Tudíž je momentálně uvedený assert ekvivalentem testu s NPE a je momentálně zbytečné ho používat.Funkčně ano, ale sémanticky to ekvivalentní není. Souhlasím s vámi, že dnes není prakticky rozdíl*) v chování aplikace když použiju
assert nebo klasický if a vyhození výjimky. Ale význam toho kódu je odlišný a je podle mne škoda se toho významového rozdílu zbavovat.
*) samozřejmě až na to, že s vypnutými assertions je instrukce assert ekvivalentní prázdné instrukci, takže se ušetří provedení pár instrukcí.
Čistě syntakticky by ale bylo lepší aby guardy parametrů byly u jejich deklarace a ne někde v těle funkce.Ano, to jsem psal a zmiňoval jsem anotace, které ovšem v Javě 1.4, kde byly zavedeny asserty, nebyly.
Problém assertů v Javě je ten, že jsou tak obecné, že kompilátor nemůže umět vyhodnotit všechny možné případy.No, ano. A tudíž je to z hlediska detekce při kompilaci k ničemu. Kdyby raději vzali ten jeden případ a dotáhli ho do dokonalosti. Java má vůbec zajímavou historii pokusů a omylů.
Ano, to jsem psal a zmiňoval jsem anotace, které ovšem v Javě 1.4, kde byly zavedeny asserty, nebyly.Anotace mi přijdou jako takový úlet kde se kompenzují všechny problémy, které by se měly řešit jinde. Druhý úlet podobného rázu je pak "programování v snippetech", jak to dovolují "moderní IDE".
Ne opravdu to neni vlastnost jazyka od verze 1.4. Je presne definovano, co aserce jsouDoporučuju přečíst si ten dokument, který jste odkazoval.
rozhodne nejsou urcene ke kontrole nejakych invariantu behem prekladu.To jsem taky nikde nepsal, já jsem psal o vývoji.
Sam asercim fandim, ale napriklad vyse uvadene umisteni aserce tesne pred radek, na kterem pri poruseni aserce ihned dojde k NPE, postrada smysl. … Aserce si precte pouze programator a ten by mel tak jako tak videt, ze na pristim radku dojde k NPEPředpoklady je nutné do kódu napsat hned, když se píše – až ten jednoduchý kód na dva řádky natáhnete na deset řádků, už nikoho nenapadne
assert tam doplňovat. Stejně tak to nikoho nenapadne v okamžiku, kdy přístup přes členskou proměnnou nahradí voláním metody a možnost vyhození NPE přestane být tak zjevná.
assert v kódu zároveň znamená něco jako komentář „vím o tom, že tahle podmínka musí být splněna“. Takže když budu číst výše uvedený kód bez assertů, budu muset začít hledat, jestli ty hodnoty opravdu nemohou být prázdné, nebo jestli je v tom příslušném kódu chyba, nebo jestli je záměr vyhazovat NPE (a chybí to třeba v dokumentaci). Když je tam assert napsaný, vím, že neřešení prázdných hodnot byl autorův záměr.
Takže když budu čísta
strojové zpracováníjsou dvě různé věci. A já pro lidi píšu lidsky a už jsme si ujasnili, že asserty jsou strojově momentálně na prd. A když už mluvíme o strojovém zpracování tak si dovolím ještě dvě poznámky. Za prvé proboha proč musím do JavaDocu opisovat jména parametrů (případně jejich typy), když to v zápětí píšu do deklarace. Vemte si příklad z perlovského Getopt::Euclid. Za druhé divil byste se co všechno lze relativně spolehlivě stojove zpracovat. Bylo by stokrát příjemnější kdybych mohl psát "jméno nesmí být null" do komentáře a dostal z toho varování překladače, pokud tam někde budu cpát null, než abych strkal na dvacet míst kódu nějaké kryptogramy a počítač mi je překládal do češtiny.
už jsme si ujasnili, že asserty jsou strojově momentálně na prdPokud váš kód nikdy nespouštíte. Pokud jej spouštíte například v testech, můžete spoustu porušení kontraktu odhalit už během testů. A i když se na chybu přijde až během normálního testování, pořád assert pomůže najít skutečné místo vzniku chyby (zatímco když necháte program běžet dál, může někdy spadnout až za dost dlouho, a původní příčinu pak budete dlouho hledat).
assert pre mna okrem ineho aj indikator kvality kodu. Zatial co uplnu nepritomnost assertov nehodnotim nijako -- niektori ho proste pausalne nepuzivaju -- zriedkave pouztie assertov v zriedkavych koplikovanych castiach kodu hodnotim ako pozitivnu snahu programatora zaviest prisnejsiu kontrolu seba sameho. Ak je vsak kod prepchaty assertami, vidim to ako varovny signal, ze autor nebol schopny urobit natolko robustny dizajn, aby mu vobec sam doveroval.
.....copak ste to nedelali na cvicenich(nebo prednaskach???)na jakem si programu??
na druhou stranu take nevim co od toho mam ocekavat
.....
ucil sem se z materialu co jsou na eduwebu(je to celkem pekne zpracovane), dale primo od zdroje napr: http://java.sun.com/docs/books/tutorial/ , pak ucebnice Pavla Herouta,.....
na netu je mraky informaci, zdrojaku,,.....
Tiskni
Sdílej: