Programovací jazyk Python byl vydán v nové major verzi 3.15.0. Podrobný přehled novinek v aktualizované dokumentaci.
BIGWORDS.PAGE je open-source webová aplikace, která po otevření odkazu v prohlížeči vykreslí přes celou obrazovku jednoduché informační sdělení. Zpráva i její nastavení jsou uložené v části URL za znakem #, například odkaz https://bigwords.page/#abclinuxu zobrazí jako velký bílý nápis 'abclinuxu' na černém pozadí. Obsah odkazu lze upravovat i vestavěným editorem, ten umožňuje nastavovat formátování a vizuální efekty textu, časovače, QR kódy a obrázky. Zdrojový kód je dostupný pod licencí MIT na GitHubu.
V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."
Vláda Spojených států se rozhodla vyřadit americkou softwarovou společnost Microsoft a několik dalších velkých technologických podniků z programu, který umožňuje kvalifikovaným zahraničním pracovníkům získat povolení k trvalému pobytu. Oznámila to včera administrativa amerického prezidenta Donalda Trumpa. Opatření zdůvodnila rozsáhlým zneužíváním programu, který je dlouhodobě terčem kritiky ze strany Trumpových příznivců, neboť prý znevýhodňuje americké pracovníky.
Datové centrum největší ruské technologické společnosti Jandex v Rjazaňské oblasti se stalo cílem dronového útoku a zastavilo provoz. Jandexu se někdy přezdívá „ruský Google“. Provozuje nejoblíbenější internetový vyhledávač v Rusku nebo aplikace pro objednávky jídla a taxi. Využívají jej desítky milionů lidí v rusky mluvících zemích.
Francouzská společnost Mistral AI představila Mistral Large 4 (interně přezdívaný 'le Chonk', volně přeloženo 'pořádný macek'), 'open-weight multimodální hybridní instruct-and-reasoning model s architekturou granulárního MoE, nativně podporující více jak 160 jazyků'. Model má přes jeden bilión parametrů, z nichž při práci využívá 49 miliard, kontextové okno o délce milion tokenů a obrazový enkodér o 1,6 miliardách parametrů.
… více »Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.20. Díky 227 přispěvatelům.
Simon Long oznámil Raspberry Pi Desktop pro PC a Mac s Intelem postavený na aktualizovaném Debianu 13 Trixie. S klientem Raspberry Pi Connect pro vzdálenou správu. Ke stažení je vedle Raspberry Pi OS pro Raspberry Pi.
ESP32-C3 adblock přemění lacinou vývojovou desku ESP32‑C3 na samostatný DNS blokovač nejenom reklamních domén, minimalistickou alternativu k populárnímu Pi-hole. ESP32-C3 adblock místo objemných názvů domén ukládá jejich 40-bitové FNV-1a hashe do flash paměti, které pak binárně prohledává, kontrola jedné domény trvá přibližně 10 milisekund. Blocklist pojme až 537 tisíc domén a lze jej spravovat přes webové rozhraní. Projekt zatím
… více »ArtCraft je sada open source aplikací pro práci s obrázky a videi "inspirovaných" aplikacemi od Adobe. Napsaných v Rustu. Pro MacOS, Windows i Linux. Běží také ve webovém prohlížeči. Aktuálně se jedná o 7 aplikací: PhotoCraft (Photoshop), VectorCraft (Illustrator), FilmCraft (Premiere Pro), LightCraft (Lightroom), PdfCraft (Acrobat), EffectCraft (After Effects) a DesignCraft (InDesign). Zdrojové kódy jsou k dispozici na GitHubu.
Pavel Tišnovský pokračuje na Fedora.cz v seriálu o vývojovém prostředí Eclipse a programování v jazyce Java. Čtvrtý díl se zabývá tématem automatické tvorby zdrojových kódů.
Tiskni
Sdílej:
Není tedy problém na začátku udělat datovou třídu, kde jsou datové proměnné veřejné a pak později v případě potřeby udělat pro některou proměnnou explicitně getter/setter aniž by se nějak změnilo API.Na úrovni zdrojáku ano, na úrovni IL kódu ne. C# má automaticky implementované vlastnosti, takže stačí napsat
public Typ Vlastnost { get; set; }
a kompilátor automaticky vytvoří privátní proměnnou a implementuje getter i setter.
Není tedy problémJe to problém z hlediska binární kompatibility.
Dúfam, že dobu primitívnych Java fazuliek, kde trieda bola len množina premenných pristupovaných triviálnymi gettermi a settermi je už za nami.Obávám se, že doufáte marně. Vždyť JPA, různé JAX-* a různé další moderní technologie jsou postavené právě na těch strukturách nazývaných JavaBeany. A vůbec celá tří- a vícevrstvá architektura nebo SOA vedou v nejjednodušším případě právě k takovýmto řešením.
Ale jsem opravdu jediný, kdo Javu ze srdce nesnáší? Je to obrovský moloch, kód v ní napsaný je nevzhledný, nepřehledný a zbytečně obsáhlý. Počítač je dokonalý nástroj, má obrovský výpočetní výkon. A Java a software v ní napsaný využívá jeho prostředky s takovou účinností, jaké dosahoval snad jen parní stroj. Kód je možná rychleji napsaný (což jistě občas potřeba je), ale v dlouhodobém hledisku se vyplatí udělat to "pořádně". A ta její blbuvzdornost je taky k vzteku. Abych použil další nevhodné přirovnání: sekera se taky neprodává tupá, aby si její uživatel neusekl prsty...
... využívá jeho prostředky s takovou účinností, jaké dosahoval snad jen parní stroj.Vážně? Tak to je java mnohem lepší, než jsem si o ní myslel...
Je to obrovský moloch, kód v ní napsaný je nevzhledný, nepřehledný a zbytečně obsáhlý. Počítač je dokonalý nástroj, má obrovský výpočetní výkon. A Java a software v ní napsaný využívá jeho prostředky s takovou účinností, jaké dosahoval snad jen parní stroj.BS.
Tak abych byl přesnější - interpretovaný jazyk už z principu bude vždycky pomalejší než strojový kód. Jde jen o to, o kolik bude pomalejší. Možná nebudete souhlasit s tím, že Java je interpretovaná. V jejím případě to asi není úplně přesný termín, ale v podstatě to tak je. Možná se nejdřív překládá do bytecode, ale nakonec to dopadne stejně.
Tady nejde o to, jestli jsou vyšší jazyky pomalejší nebo ne, jasné že když napíšu něco v assembleru (a dám si s tím dost práce), bude to rychlejší než co vyplodí gcc ze zdrojáku v C. Tady jde o to, že stejný program v C a Jave bude vždycky o něco pomalejší právě díky tomuto rysu Javy (té interpretaci, co vlastně není interpretace. Nenašel jsem žádný vhodnější výraz)
lepsi nez GCC nebo LLVM, protoze ma k dispozici runtime informace.
kontrola toho bajtkodu, coz neni moc jednoduche (treba konstrukce grafu dostupnosti ma blbou slozitost)Od toho přece překladače (od verze 6) generují StackMapy. A budoucí JVMka (snad od verze 8?) budou kód bez nich už odmítat, mám pocit.
I presto je to stale hodne dobra ficura JVM.
Problem je, co delat se starsimi bajtkody treba generovanymi z 1.4.2 nebo 1.5, proste se ten checker neustale musi vylepsovat, coz je jen dobre.
Jak jsem říkal, mám pocit, že se o tom mluvilo. Nejsem si jistý do které verze, pokud vůbec, ale mluvilo se o tom.
...interpretovaný jazyk už z principu bude vždycky pomalejší než strojový kód.Staticky kompilovaný jazyk nikdy neurobí escape analysis, on stack replacement ani runtime dead code elimination, na rozdiel od virtuálneho stroja.
Netušil jsem, že dělá i do Javy.Ano, dělá. Je totiž jeho hlavní pracovní náplní.
V Red Hatu dělá na OpenJDK.
Pavel Tišnovský má skvělé články a opravdu velký rozhled v počítačových technologiích (viz jeho profil na rootu). Netušil jsem, že dělá i do Javy.http://cz.linkedin.com/in/paveltisnovsky
Quality Assurance Engineer, OpenJDK team.
Java jako jazyk zadny moloch imho neni, i kdyz samozrejme zalezi na tom, s cim se porovnava ze
(C++ - tam je to jasny, Python - ten zase par veci neumi a jako dynamicky jazyk ma o dost jinou oblast pouziti ...)
Python - ten zase par veci neumi a jako dynamicky jazyk ma o dost jinou oblast pouziti ...)A já myslel, že jsou programovací jazyky ekvivalentní.
Ale kdyz uz jsme v tehle diskusi zacali tak napriklad se tezko tvori _spravne_ singleton, privatni metody jsou AFAIK (mozna se to zmenilo?) reseny pres "magicke prejmenovani". Jiste, jde to naprogramovat, Python je v tomto ohledu hodne dynamicky jazyk, ale neni zase tak odlisne od tvorby getteru a setteru, ktere nekdo nazval boilerplate code.
Kolikrát může singleton docela pomoci, zvlášť pokud se jedná o objekt starající se o něco, co je mimo samotnou aplikaci a existuje to jen v jednom exempláři.Takový kód pak člověk nemůže normálně otestovat.
Takový kód pak člověk nemůže normálně otestovat.Okolnosti bývají různé.
Napadají mě jen dva případy, kdy použití singletonu může být užitečné – správce paměti a logování.Napadají tě z fleku dva, to znamená, že je velká šance, že se v praxi najde takových případů docela dost.
Spousta lidí si to neuvědomuje, ale jsou to jen zakuklené globální proměnné.V podstatě. Až na to, že je jejich použití kousek hladčí v tom, že inicializaci lze provést kdykoli a odpadne testování, jestli je globální proměnná inicializována nebo ne.
Už jsem se setkal s takovými jedinci, kteří brojili proti globálním proměnným a vyzdvihovali singleton do nebes.Tak ono je docela dobré si na řešení okrajových případů vybrat pokud možno jeden z těch způsobů.
Tak se teda - kdyz je ten svatek - omlouvam, ze jsem ti sahl na oblibeny jazykNeomlouvej se, to je plytké a nezajímavé. Mně právě zajímají ty faktické rozdíly :).
Ale kdyz uz jsme v tehle diskusi zacali tak napriklad se tezko tvori _spravne_ singleton,Nepřijde mi, že by se tvořil těžko, stačí vcelku triviální funkce new. Navíc jde vyřešit v nadřazené třídě, takže všechny odvozené od singletonu jsou singletony. Dělal jsem to. Tedy ne, že neumí :).
privatni metody jsou AFAIK (mozna se to zmenilo?) reseny pres "magicke prejmenovani".Žádné magické přesměrování, prostě jmenná konvence se dvěma podtržítkama. Co je schováno za tím, nemusí programátora až tolik zajímat. Někomu může použití dvojtého podtržítka připadat zvláštní, ale není pravda, že se to neumí.
Python je v tomto ohledu hodne dynamicky jazyk, ale neni zase tak odlisne od tvorby getteru a setteru, ktere nekdo nazval boilerplate code.Já nemám nic proti tomu, když se člověku některé vlastnosti Pythonu nelíbí. Taky bych nějaké své neoblíbené našel. Ale pokud někdo tvrdí, že Python něco neumí, stálo by za to říci co. To platí o každém nástroji, bez ohledu na to, jestli je můj oblíbený nebo neoblíbený.
a uvadel jsem to schvalne prave pod diskusi o boilerplate code (coz predeklarovani __new__ taky je). Btw bych chtel tu vasi implementaci skutecne videt, jestli tam nenastanou problemy s vicenasobnym volanim init napriklad (dost casty problem, kdyz se to z netu "opise" bez premysleni
Ad privatni metody: zaprve nepsal jsem "presmerovani" ale "prejmenovani" a uz vubec jsem nemyslel ona dve podtrzitka, s temi se da samozrejme bez problemu vyzit - kazdy jazyk ma sve postupy a ja je samozrejme respektuju. Mel jsem na mysli to, ze se privatni metoda interne prejmenuje, da se pred ni jmeno tridy, takze puvodni jmeno jakoby neni viditelne. Nicmene vygenerovane jmeno lze snadno zjistit (dir apod.) a pouzit.
Ano singleton lze vytvorit tak, ze se predeklaruje funkce __new__ ale to vubec neni jednoducha zalezitostMně osobně to připadá naprosto triviální.
Btw bych chtel tu vasi implementaci skutecne videt, jestli tam nenastanou problemy s vicenasobnym volanim init napriklad (dost casty problem, kdyz se to z netu "opise" bez premysleniNo, zaprvé v Pythonu k vytvoření singletonu vůbec není nutné předefinovávat __new__, viz například zde. A i kdybys to chtěl řešit předefinováním __new__, tak je v dokumentaci přesně napsáno, jak __new__ funguje. Ten popis má pár řádků a je velice srozumitelný. Opakování __new__ se dá rovněž triviálně zabránit. Pokud ti řešení __new__ a __init__ přijde složité, doporučuju první postup. Pokud ti i ten přijde složitý, nemůžeš se považovat za zkušeného Pythoního programátora, a budeš mít mnohem větší problémy s jinými věcmi.
Ten je taky Turingovsky kompletni...
Je to obrovský moloch, kód v ní napsaný je nevzhledný, nepřehledný a zbytečně obsáhlý.Kód je přesně takový, jaký napíšeš.
A ta její blbuvzdornost je taky k vzteku.Já třeba taky Javu nerad, můj oblíbený jazyk je Common Lisp, ale pro psaní jistého typu aplikací asi zatím lepší jazyk neexistuje. Ano, není nic, co by skupina lisperů-superhrdinů nezvládla (přece jenom, debugovali kód a opravili kód - za běhu - běžící 160 miliónů kilometrů od Země na hardwaru za 100 miliónů dolarů
), ale to není to, co chceš v korporátním prostředí. A i kdybys to chtěl, tak toho nedosáhneš, protože je to utopie.
V takovém prostředí potřebuješ blbuvzdorný, staticky typovaný a neohebný jazyk (i za cenu toho, že bude efektivní jako parní stroj - mimochodem, děsná blbost), protože přesně takové jsou požadavky na korporátní software. 90% programátorů nejsou žádní géniové, 90% programovací práce je naprostá repetitivní nuda, která se ale prostě musí udělat, a musí za každou cenu běžet, protože je v ní investován obrovský kapitál.
Ano, Lisp je cool, Haskell je cool, spousta dalších jazyků je cool, ale
průměrný programátor na ně nemáIMO je to jen o zvyku.
Pozor: mluvím o zvládnutí jazyka na profesionální úrovni, se všemi jeho vychytávkami, jež jsou pro psaní efektivních a robustních velkých aplikací naprosto nezbytné.Co konkrétně máte na mysli? Co konkrétně by mělo být težké? Pokud se bavíme o praktickém používání, tak si člověk vystačí se standardním Haskellem a pár jednoduchými rozšířeními, co má Hugs i GHC. Stejně tak člověk nemusí používat monad transformers (v GHC je nepoužívají) nebo arrows nebo skládání funkcí nebo doplňte si sám, když si myslí, že je to nepřehledné.
IMHO zvládnutí Haskellu na profesionální úrovni vyžaduje na programátorovi daleko vyšší schopnosti abstrakce než je běžné u mainstreamových imperativních jazyků vč. Javy. Není to jen o schopnosti plynně rozumět a efektivně kombinovat standardní typové třídy, ale už samotná implementace výpočtu definičním popisem výsledku místo mechanického zápisu kroků algoritmu vyžaduje hodně nadprůměrné IQ.
Bez kompozice funkcí, která je základním stavebním kamenem funkcionálních jazyků Haskell nevyjímaje, byste nic kromě trivialit nenapsal.Mám na mysli operátor skládání funkcí, a ten v řadě funkcionálních jazyků není – například v OCamlu a F# není, neboť value restriction značně snižuje jeho užitečnost.
Stavovým monádám se v praktických aplikacích také málo kdy vyhnete a I/O už vůbec ne.Standardní monády jsou jednoduché a užitečné. Nestandardní monády typu obrácená stavová nebo líná stavová už jsou IMO těžké, protože je nepoužívám.
Analogicky ke kompozicím se dostanete do situace, kdy budete potřebovat složit monády z rozdílných tříd a ty transformery byste si stejně musel napsat.Ty monády si mohu napsat přímo a nemusím je skládat – jak už jsem psal výše v GHC to takto dělají nebo alespoň dělali. V F# je prakticky nutnost udělat si nové workflow, protože transformery tam jsou kvůli slabému typovému systému dost těžkopádné (a F# 3.0 to nezlepší).
samotná implementace výpočtu definičním popisem výsledku místo mechanického zápisu kroků algoritmu vyžaduje hodně nadprůměrné IQProč? Naopak si myslím, že použít nějaký EDSL a popisovat problém jazykem, který mu je bližší, je jednodušší.
IMHO zvládnutí Haskellu na profesionální úrovni vyžaduje na programátorovi daleko vyšší schopnosti abstrakce než je běžnéNení hlavní překážkou jen nezvyk?