Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Mirek Prýmek

Stran: 1 ... 184 185 [186] 187 188 ... 618
2776
Studium a uplatnění / Re:Jaký programovací jazyk zvolit?
« kdy: 31. 08. 2016, 00:35:36 »
tak je kompilátoru jasné, že voláte tu druhou metodu, neboť první seznam argumentů obsahuje jeden argument.
Aha, už je mi to jasné (snad ;) ). Tyhlety vícenásobné seznamy parametrů, to je taky lahůdka, se kterou jsem se ještě nestihl pořádně seznámit :) Děkuju za výsvětlení!

...no každopádně myslím, že sice silný offtopic, ale jako ilustrace, proč mi přijde Scala zbytečně překombinovaná oproti "normálním" funkcionálním jazykům, to posloužilo dobře :)

2777
Vývoj / Re:Postřehy ohledně architektury JavaScriptu
« kdy: 31. 08. 2016, 00:27:39 »
Hodně častý je prostě jednoduchý objekt Person {name: String, surname: String}. Na tom toho moc nevymyslíš.
To je náhodou velmi dobrý příklad! Předávat ven stav objektu by bylo zlo. Správně se objekt má umět sám prezentovat. Takže by měl mít třeba metodu asHtml, asCsv apod. No ale protože v OOP děláme vše univerzálně a znovupoužitelně, tyhle metody implementovat nebudeme a místo toho uděláme obecnou metodu formattedWith(formatter). Ovšem formater taky dovnitř objektu šahat nesmí. Proto je potřeba mu předat abstraktní reprezentaci objektu - strom, kde každý uzel implementuje rozhraní IFormattable. Zároveň ale tuto abstraktní reprezentaci použijeme pro serializaci! A nejenom pro serializaci, ale COKOLI! Takže abysme zajistili, že všechny uzly budou dědit z naší třídy, která vše potřebné obsahuje, použijeme pattern Factory. Čili máme singleton AbstractObjectFormattableRepresentationFactory pomocí kterého potom uzel reprezentace vytvoříme velice snadno:
Kód: [Vybrat]
AbstractObjectFormattableRepresentationFactory.makeAsbstractFormattableRepresenstationNode(string)
- pochopitelně metoda je přetížená pro všechny typy, které by mohly připadat v úvahu a volá se **uvnitř objektu**.

Ovšem nesmíme zapomenout na eventualitu, že daná část stavu objektu není v daném formátu reprezentovatelná. K tomu slouží validátor IAbstractObjectFormattableRepresentationValidator.isFormattableAs, kterému se formát předává jako objekt (nějaké stringové konstanty a podobné prasárny v OOP nevedeme!). Příslušný objekt je pochopitelně opět singleton, čili k němu máme factory, to snad není potřeba zdůrazňovat.

No nic, abych to neprotahoval - chceme-li správně objektově implementovat výpis jména do HTML, budeme potřebovat tak dvacet až stošedesáttři tříd. Shoda na tom ale nepanuje. Někteří programátoři např. tvrdí, že IAbstractObjectFormattableRepresentationValidator je nepřístojné jméno rozhraní, protože neobsahuje písmeno Z.

2778
Studium a uplatnění / Re:Jaký programovací jazyk zvolit?
« kdy: 30. 08. 2016, 17:57:22 »
Tady u Datasetu se obě metody liší počtem parametrů (první má 2, druhá má 1)
No ale ta s jednim ma zas druhy implicitni - takze kompilator musi taky resit, jestli jsem ho nepredal, ne?

(Anebo ten zapis zas nechapu, to je klidne mozny :) )

vy se koukáte na Flink v Javě):

Kód: [Vybrat]
def map[R](fun: (T) ⇒ R)(implicit arg0: TypeInformation[R], arg1: ClassTag[R]): DataSet[R] 
def map[R](mapper: MapFunction[T, R])(implicit arg0: TypeInformation[R], arg1: ClassTag[R]): DataSet[R]
Odkud je tohle? Ve scalovskem api DataStream vubec nevidim: https://ci.apache.org/projects/flink/flink-docs-release-1.1/api/scala/index.html

2779
Studium a uplatnění / Re:Jaký programovací jazyk zvolit?
« kdy: 30. 08. 2016, 16:20:46 »
Já myslím, že ano, protože ve Sparku to funguje dobře (v Javě 8 i Scale) - tam overloading nepoužili.
A k jakemu presne problemu tam dochazi? Snazim se to z API nejak vydedukovat, ale pusto, prazdno, temno... :)

Flinkovske API je
Kód: [Vybrat]
public <R> DataStream<R> map(scala.Function1<T,R> fun,
                             TypeInformation<R> evidence$6)
public <R> DataStream<R> map(MapFunction<T,R> mapper,
                             TypeInformation<R> evidence$7)
https://ci.apache.org/projects/flink/flink-docs-release-1.1/api/java/org/apache/flink/streaming/api/scala/DataStream.html#map-scala.Function1-org.apache.flink.api.common.typeinfo.TypeInformation-

...a to Sparkovske mi prijde uplne stejne:
Kód: [Vybrat]
def map[U](func: MapFunction[T, U], encoder: Encoder[U]): Dataset[U]
def map[U](func: (T) ⇒ U)(implicit arg0: Encoder[U]): Dataset[U]
http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.Dataset

2780
Vývoj / Re:Postřehy ohledně architektury JavaScriptu
« kdy: 30. 08. 2016, 16:15:41 »
Ale prosímtě? Herní enginy samozřejmě objektové jsou, jak navenek, tak uvnitř. Nicméně pokud chceš řešit definici toho "jediného správného (TM) objektového programování" podle balkiho, Kita, já nevím koho... tak z toho mě prosím vynech, na nesmysly nemám čas.
Mam cim dal vetsi pocit, ze OOP bylo vymysleno jenom proto, aby se lidi mohli hadat o to, co je spravny OOP navrh. Takovehle zabomysi valky jsem kolem zadneho jineho paradihmatu nezazil...

2781
Studium a uplatnění / Re:Jaký programovací jazyk zvolit?
« kdy: 30. 08. 2016, 14:59:28 »
Je to blbě navržené API.
Nemyslím, že blbě. Je to tak nejspíš proto, aby bylo API společné pro Javu i Scalu - a scalovské speciality byly jenom jako plus bokem.

Obecně jazyky s dobrou typovou inferencí mají dobrý důvod, proč nemít overloading (vede to na explozi možností, které kompilátor musí uvažovat - jeden z důvodů, proč Scala nemá dobrou typovou inferenci).
Jo. A je to další konkrétní příklad  komplikace, kterou má Scala  kvůli interoperabilitě s Javou.

2782
Studium a uplatnění / Re:Jaký programovací jazyk zvolit?
« kdy: 30. 08. 2016, 14:40:03 »
Chápu. Potíž je v tom, že obě konstrukce se trochu liší (jsou popsány i v různých částech specifikace - jedna v 6.23, druhá v 8.5).
No a jsme u toho... Vyjimky, speciality, vyjimky z vyjimek a specialni vyjimky ze specialit... :)

Ten import přidá novou funkci mapWith, která nemá různé overloady (původní map má minimálně 2), tj. kompilátor snáze uhodne typ.
Aha. Takze hnusny hack na neco, co bych ocekaval, ze bude fungovat samo od sebe...

2783
Studium a uplatnění / Re:Jaký programovací jazyk zvolit?
« kdy: 30. 08. 2016, 14:18:51 »
Flink neznám, ale nepomůže https://ci.apache.org/projects/flink/flink-docs-release-1.1/apis/scala_api_extensions.html#accept-partial-functions ?
To uz jsem taky zkousel a nefunguje mi to. Kdyz pridam
Kód: [Vybrat]
import org.apache.flink.streaming.api.scala.extensions._
tak ta chyba nezmizi a ten import radek se v Idea zobrazuje sede (nevyuzity import). Pritom mam Fink 1.1.1, u ktereho by to melo fungovat. Tak nevim.

Ale spis mi slo o princip: prekladac si stezuje na to, ze nezna typ. Kdyz pred ten vyraz dam nejakou obalku, ktera mu typ taky nesdeluje, tak je najednou v pohode. A spravit by se to melo nejakym importem nevim ceho. To se mi fakt nelibi, kdyz vubec netusim, co prekladac dela... A na tyhle veci proste narazim porad :(

2784
Studium a uplatnění / Re:Jaký programovací jazyk zvolit?
« kdy: 30. 08. 2016, 13:52:17 »
Nešlo by napsat následující?

Kód: [Vybrat]
  stream
    .map { case (t,v) => s"$t: $v" }
    .print
Neslo. To je prave ten pripad, co jsem psal, ze me ted nenapada priklad. Kompiler mi rekne:

Kód: [Vybrat]
Error:(150, 12) missing parameter type for expanded function
The argument types of an anonymous function must be fully known. (SLS 8.5)
Expected type was: ?
      .map { case (t,v) => s"$t: $v" }

...a pritom kdyz tam pridam to "(x) => x match", tak mu taky zadny typ nerikam a prelozi to. Je to pro me naprosto nepochopitelny chovani.

2785
Studium a uplatnění / Re:Jaký programovací jazyk zvolit?
« kdy: 30. 08. 2016, 13:30:18 »
Co konkrétně myslíte tím čistěji funkcionální? Narážíte na klasické stížnosti např. z We're Doing It All Wrong by Paul Phillips?
Tuhle prednasku jsem nevidel, snad najdu cas na ni v brzke dobe kouknout a dam vedet.

Ted momentalne jsem myslel to, ze se ve Scale (z meho pohledu) uplne zbytecne resi nejake tridy. A z toho plyne spousta vyjimek. Napr. mezi sebou nemuzou dedit case classes. Zadnou logiku to (z pohledu novacka) nedava, je potreba si to zapamatovat.

Myslím, že interoperabilita s Javou není ten hlavní důvod (řekl bych, že důvodem byla absence teoretických základů a fakt, že chování některých vlastností jazyka nebylo dostatečně prozkoumáno v době, kdy se do jazyka dostaly). Třeba Dotty (v podstatě nová verze Scaly) je v některých ohledech čistší než Scala.
To je mozne, fakt se s tim jazykem teprve seznamuju, takze pisu o prvnich dojmech, ne o nejakem hlubokem vhledu. Zatim se z meho pohledu jazyk zbytecne komplikuje tim, co jsem psal vys: ze vubec obsahuje tridy, ktere jsou z pohledu "klasickeho funkcionalniho programovani" dost zbytecne.

Jenže Elm je výrazně jednodušší jazyk, který má v mnoha ohledech o dost horší vyjadřovací schopnosti (např. nemá higher-kinded typy, nemá makra, nemá typové třídy, nemá podtypový polymorfismus).
Ano, to je urcite pravda. Elm je cisty a jednoduchy za cenu mensi sily. Scala je silna a interoperabilni za cenu komplikovanosti.

Napr. obcas mi prekladac pise neco v tom stylu, ze u nejake lambdy potrebuje plne otypovani (omlouvam se, priklad ted narychlo nevymyslim) - proc, to nedokazu odhalit. Nepochybne je to jenom moje neznalost, ale to je prave spatne, ze je jazyk tak komplikovany, ze nejsem schopny predvidat, co prelozi a co ne.

Dalsi vec, kterou vubec nechapu, je nemoznost destrukturovat slozene typy primo v hlavicce fce. Napr. tohle (kod pro http://flink.apache.org/) je proste zhovadilost:

Kód: [Vybrat]
  stream
    .map((x) => x match { case (t,v) =>
      s"${t}: ${v}"
    })
    .print

za naprostou samozrejmost bych povazoval zapis
Kód: [Vybrat]
  stream
    .map( (t,v) => s"${t}: ${v}" )
    .print

...to jenom tak pro priklad, je toho daleko vic... prakticky na kazdem kroku narazim na neco, u ceho vubec nechapu, proc je to tak, jak to je... A to proste neni dobre.

2786
Studium a uplatnění / Re:Jaký programovací jazyk zvolit?
« kdy: 30. 08. 2016, 12:07:35 »
Znova... obsah blesku JE kvalitní, protože jeho smyslem není vylepšovat lidi, jeho smyslem je vydělávat peníze a to se mu daří.
Vydelavat se muze darit i na uplnem nesmyslu. Kdyz budu prodavat krabicku s ledkou pripojenou na baterku, budu to vydavat za "energeticky zaric" a lidi to budou kupovat za pet tisic, cili na jednom kusu vydelam asi tak 4950Kc, tak z toho plyne, ze to je "kvalitni energeticky zaric"?!

Je to o základním nepochopení podstaty - Blesk nemá za cíl věnovat se seriózní žurnalistice, jak mnozí od novin očekávají, ale je to prostě bulvár, jeho kvalitu lze posoudit pouze v porovnání s jiným bulvárem a určitě u toho nebude prioritním kritériem etika. Párek taky není méně kvalitní než kladivo, protože s ním nejde zatlouct hřebík.
Parek je mene kvalitni jidlo nez steak. I kdyby ho pul planety jedlo obden a Kostelecke uzeniny na nem mely marzi 95%.

Zakladni nepochopeni je u tebe: vsichni chapame a uznavame, ze na (pod)prumerne kvalitnim produktu se daji vydelat nadprumerne penize. A uznavame, ze je to dobry (kvalitni) business model. Jenze kvalita business modelu a kvalita produktu jsou dve zcela odlisne veci.

A stejne tak dve zcela odlisne veci jsou kvalita produktu a "vhodnost produktu danemu ucelu". Blesk je jiste vhodny pro masy ctenaru, Java je jiste vhodna pro masy programatoru. To z nich ale NEDELA kvalitni denik a kvalitni programovaci jazyk.

2787
Sám moc kreativní troll nejsi, lopata je už ohraná ...
Navrhuji přejít na pojem rýč.

Obyčejný rýč za šedesát! - no není to krása?

Po opětovném omrzení přejděmež na rotavátor.

Jo, přesně takhle by to řešil hloupej rotavátor za osmdesát!

2788
Studium a uplatnění / Re:Jaký programovací jazyk zvolit?
« kdy: 29. 08. 2016, 23:52:30 »
Prostě každý má svoje zábavy, tak nevím, co chceš komu zakazovat.
Pointa byla velmi jednoduchá: popularita není dobrým měřítkem kvality. Jak si z toho vydedukoval zakazování, matkopřírodo suď.

Je to snad nějaký smysl života, abys byl vylepšený?
Pro mnoho lidí je rozvoj a vývoj skutečně jednou z hlavních priorit. Pro někoho osobní, pro někoho i společenský.

Někdo chce zůstat tam, kde je a nevadí mu to.
Však to je jeho věc, nikdo mu to nebere.

Prostě každý má rád něco jiného a pokud má nejvíc lidí rádo Blesk, tak to je fajn, ale to je tak všechno.
Pokud má X lidí rádo Blesk, tak to neznamená nic jiného než že X lidem se Blesk trefil do vkusu. Nic víc z toho neplyne.

...jo vlastně ještě jedna věc: pokud se redaktoři chtěli trefit právě do tohoto vkusu a podařilo se jim to, tak jsou profesionálové, kteří dobře umí svoji práci. Což si zasluhuje respekt, pokud to není za cenu nějakých morálních kompromisů.

O kvalitě obsahu to neříká vůbec nic.

2789
Studium a uplatnění / Re:Jaký programovací jazyk zvolit?
« kdy: 29. 08. 2016, 16:05:04 »
Ukaž mi nějaký používaný jazyk, který není multiparadigmatický.
Definuj oba pojmy.

2790
Studium a uplatnění / Re:Jaký programovací jazyk zvolit?
« kdy: 29. 08. 2016, 16:04:33 »
Mirek zřejmě naráží na skutečnost, že i ta nejoblíbenější věc může reálně stát za hovno.
Řekl bych to jinak: používanost jenom docela volně souvisí s kvalitou jazyka. Primárně rozhoduje to, jestli za jazykem stojí nějaká velká firma -> má peníze natlačit jazyk všude možně -> získá kritickou masu -> pak už se to jenom nabaluje a nabaluje -> pro mamutí devhousy je to výhodný jazyk, protože snadno najdou devs (čti: spotřební materiál) -> goto "pak už se to jenom nabaluje"

Teď třeba něco trochu dělám ve Scale a jsem tím jazykem dost zklamaný. Kdyby byl čistěji funkcionální, mohl být hezký, jednoduchý, příjemný. Ale tím, že chce dodržet interoperabilitu s Javou (viz předchozí odstavec), je to takový dost moloch se spoustou různých těžko pochopitelných pravidel, výjimek,... Třeba s čistotou Elixiru (o Elmu a Haskellu nemluvě) se to vůbec nedá srovnat. Po x letech strávených v Elixiru mě ze Scaly fakt bolí hlava...

...a to všechno kvůli "multiparadigmatičnosti".

Stran: 1 ... 184 185 [186] 187 188 ... 618