Po dvaceti letech skončil leader japonské SUMO (SUpport.MOzilla.org) komunity Marsf. Důvodem bylo nasazení sumobota, který nedodržuje nastavené postupy a hrubě zasahuje do překladů i archivů. Marsf zároveň zakázal použití svých příspěvků a dat k učení sumobota a AI a požádal o vyřazení svých dat ze všech učebních dat.
Úřad pro ochranu hospodářské soutěže zahajuje sektorové šetření v oblasti mobilních telekomunikačních služeb poskytovaných domácnostem v České republice. Z poznatků získaných na základě prvotní analýzy provedené ve spolupráci s Českým telekomunikačním úřadem (ČTÚ) ÚOHS zjistil, že vzájemné vztahy mezi operátory je zapotřebí detailněji prověřit kvůli možné nefunkčnosti některých aspektů konkurence na trzích, na nichž roste tržní podíl klíčových hráčů a naopak klesá význam nezávislých virtuálních operátorů.
Různé audity bezpečnostních systémů pařížského muzea Louvre odhalily závažné problémy v oblasti kybernetické bezpečnosti a tyto problémy přetrvávaly déle než deset let. Jeden z těchto auditů, který v roce 2014 provedla francouzská národní agentura pro kybernetickou bezpečnost, například ukázal, že heslo do kamerového systému muzea bylo „Louvre“. 😀
Z upstreamu GNOME Mutter byl zcela odstraněn backend X11. GNOME 50 tedy poběží už pouze nad Waylandem. Aplikace pro X11 budou využívat XWayland.
Byl publikován plán na odstranění XSLT z webových prohlížečů Chrome a Chromium. S odstraněním XSLT souhlasí také vývojáři Firefoxu a WebKit. Důvodem jsou bezpečnostní rizika a klesající využití v moderním webovém vývoji.
Desktopové prostředí LXQt (Lightweight Qt Desktop Environment, Wikipedie) vzniklé sloučením projektů Razor-qt a LXDE bylo vydáno ve verzi 2.3.0. Přehled novinek v poznámkách k vydání.
Organizace Open Container Initiative (OCI) (Wikipedie), projekt nadace Linux Foundation, vydala Runtime Specification 1.3 (pdf), tj. novou verzi specifikace kontejnerového běhového prostředí. Hlavní novinkou je podpora FreeBSD.
Nový open source router Turris Omnia NG je v prodeji. Aktuálně na Allegro, Alternetivo, Discomp, i4wifi a WiFiShop.
Na YouTube a nově také na VHSky byly zveřejněny sestříhané videozáznamy přednášek z letošního OpenAltu.
Jednou za rok otevírá společnost SUSE dveře svých kanceláří široké veřejnosti. Letos je pro vás otevře 26. listopadu v 16 hodin v pražském Karlíně. Vítáni jsou všichni, kdo se chtějí dozvědět více o práci vývojářů, prostředí ve kterém pracují a o místní firemní kultuře. Můžete se těšit na krátké prezentace, které vám přiblíží, na čem inženýři v Praze pracují, jak spolupracují se zákazníky, partnery i studenty, proč mají rádi open source a co
… více »
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?
Tiskni
Sdílej: