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 ... 238 239 [240] 241 242 ... 618
3586
Studium a uplatnění / Re:Z VUT FAST do IT
« kdy: 09. 01. 2016, 08:40:01 »
Teda, vy mate ale stesti - jeste par dni a pozvanka bude smazana z historie. Udelal jsem screenshot a davam ho sem (potencialne neverejne informace jsem rozmazal), protoze to nepovazuji za neeticke, nybz za nezbytne. Je to napsane velice opatrne, ale vzhledem k rozmerum tohohle mega problemu se tomu vubec nedivim (napsal bych to stejne).
No, to je hezký. Díky! Tak aspoň můžeme ocenit, že to škola vnímá a reflektuje... Škoda, že jsem o tom nevěděl dřív, určitě bych se tam šel podívat. A pečlivě bych čekal, jestli zazní argument, že stačí učit teoretické základy a konkrétní programovací jazyk se už může doučit každej sám :)

3587
Odkladiště / Re:mysleni pana Programatora
« kdy: 09. 01. 2016, 08:32:47 »
Spíše měl asi na mysly dlouhé výrazy. Zalomení dlouhého výrazu na 2-3 řádky se, alespoň u mě, čitelnosti moc nepomůže, možná spíš naopak. Pro někoho (včetně mě) je lepší, když se to rozloží na více menších kroků.
To je čistě věc vkusu/názoru a zkušenosti s tím daným jazykem. Ve FP neexistuje rozlišení výraz/příkaz, takže "jeden výraz" je všechno, i celý program je "jeden výraz". Pojmenovávat mezivýsledky je možný, ale mně to přijde většinou zbytečný:

Kód: [Vybrat]
red_cars = cars |> Enum.filter(&(&1[:id]==XXXX)) |> Enum.map(&(Map.put(&1,:color,:red)))

red_cars = cars
                 |> Enum.filter(&(&1[:id]==XXXX))
                 |> Enum.map(&(Map.put(&1,:color,:red)))

cars_with_id = cars |> Enum.filter(&(&1[:id]==XXXX))
red_cars = cars_with_id |> Enum.map(&(Map.put(&1,:color,:red)))

3588
Odkladiště / Re:mysleni pana Programatora
« kdy: 08. 01. 2016, 21:16:07 »
Nikdy jsem to nepouzil, ale web workers vypadaji, ze bezi v jinem vlaknu.
To je taky známá berlička - mám jednovláknový jazyk, tak pustím paralelně druhý interpret. Používá se to v Pythonu i v Rku. Na některé věci to stačí (parmap), ale v principu je to zoufalost.

Nevim, jestli to uplne souvisi, ale treba LiveScript ma zajimavou feature - backcally, ktere umoznuji nezanorovani callbacku.
Ne, to s tím, co jsem psal, nesouvisí, tohle je (pokud to správně chápu) opět jenom syntaktický cukr. Hodnotu z callbacku do původní fce pořád nedostaneš. Pokud to cílový jazyk neumí, tak s tím transpiler nic neudělá...

3589
Odkladiště / Re:mysleni pana Programatora
« kdy: 08. 01. 2016, 20:08:38 »
Promises detailně neznám, ale pokud se nepletu, nijak neřeší to, co jsem říkal. Návratovou hodnotu asynchronního volání nejde v JS z funkce vrátit.
Jo, tak jsem si to pamatoval dobře. Promises nejsou nic víc než řetězení funkcí/callbacků, viditelně inspirované monádami. Čili je to pořád jenom takový cukr, na podstatě to nic nemění - JS je jednovláknová záležitost, kde blokování fce (tak jako právě v Erlangu/Elixiru) nepřipadá v úvahu. Čili se pořád musí udělat stejný špinavý trik - vlákno de facto opouští jazyk jako takový, aby mohlo udělat async akci, a vrací se zpátky do callbacku. A z callbacku jaksi návratovou hodnotu z původní fce vrátit nejde :)

Pokud to pořád není jasné, upovídanější popis: http://joearms.github.io/2013/04/02/Red-and-Green-Callbacks.html (píše se tady o starém způsobu s callbacky, ale promises na tom nic nemění)

3590
Odkladiště / Re:mysleni pana Programatora
« kdy: 08. 01. 2016, 19:24:16 »
Nějak jsem nepochopil ten tvůj JS kód, zvláště pak proč předávat parametry data a callback do funkce some_other_async, když jsou pro ni dostupné přes závoru.
"Závora" je překlep a mělo být "uzávěr" (closure)? Pokud ano, tak parametry jsou tam explicitně proto, že fci some_other_async chci třeba používat i někde jinde, ne? Nicméně pro obsah sdělení je to úplně irelevantní, klidně tam ty parametry být nemusí, pointa se tím nijak nemění.

Pro podporu svých argumentů není potřeba protivníka záměrně potápět...  ;)
Nejsem si vědom potápění. Prostě říkám, že někteří lidé znají některé věci z jazyků, kde jsou otřesně implementované a pak si myslí, že je ta věc otřesná an sich. V jiných jazycích ale může být implementovaná líp.

Taky nesouhlasím s tvým vyjádřením ohledně ES6 (navíc hodně toho jde i v ES5), kromě callbacků můžu použít promises, generátory a async/await (ES7, ale s babelem je to jedno).
Promises detailně neznám, ale pokud se nepletu, nijak neřeší to, co jsem říkal. Návratovou hodnotu asynchronního volání nejde v JS z funkce vrátit. Jestliže to obejdu tím, že vrátím nějaký objekt, který zapouzdřuje nějaký callback, který se spustí až někdy jindy, tak to není vrácení návratové hodnoty asynchronního volání, i když ta syntaxe to nakrásně může připomínat.

Pokud se pletu a už to v JS nějak jde, budu vděčný za poučení, protože mě to neskutečně rozčiluje a milerád bych se tomu vyhnul.

A celý humbuk okolo microservices z velké čísti pochází z node.js.
To je úplně absurdní tvrzení. Asi tak stejný jako že Docker vymyslel kontejneriazci, která se používala patnáct let před ním. "Microservices" není nic jinýho než buzzword - nové pojmenování pro koncept, který má Erlang třicet let.

3591
Odkladiště / Re:mysleni pana Programatora
« kdy: 08. 01. 2016, 19:12:58 »
Dlouhé řádky nejsou čitelné.
Pointa přece není v dlouhém řádnku, dá se to klidně zalomit (a já to vždycky dělám) ale v tom, že se čte zleva doprava. Což, uznávám, může Arabům z Židům přijít nepřirozené.

navíc oproti mému řešení v Pythonu je ve vašem zápisu mnohem více redundandních znaků, například |>, &,
Nevím, co to je "redundantní znak". "Reduntantní" znamená "nadbyčný". V tom příkladu ale mají všechny znaky význam, není tam žádný znak, který by bylo možné bez ztráty významu vypustit. Nevím teda, proč by některé měly být redundantní.

u lambda výrazů musíte v hlavě postupně simulovat co dělají, nemůžete s nimi pracovat jako se symbolem, tudíž ztrácíte nadhled nad kontextem.
Samozřejmě pokud někdo v rámci jednoho řádku ztrácí schopnost vnímat význam, je lepší, když si všechno pojmenuje. S tím naprosto souhlasím. Škoda, že přirozený jazyk tu možnost nemá a člověk musí analyzovat celou větu i když je třeba přes několik řádků :)

Je ale možné, že někdo je čte jako slova, naskočí mu simulace sama, jako když si přečte slovo jablko, tak uvidí vnitřním zrakem jablko, to ale můj případ není. Zajímalo by mě, zda to někdo takto umí. Je to váš případ?
Nevím, o jaké "simulaci" je řeč. Když vidím v kódu "|> Enum.map(fn x -> x +1 end)", tak vím, že tahle pasáž kódu postupně k prvkům Enumerable přičítá jedničku. Stejně tak když někde v textu vidím větu "Miloš Zeman dostal včera hustou virózu", tak chápu, že Miloš Zeman dostal hustou virózu, protože rozumím sémantice a zvládnu si tu větu celou zapamatovat, abych mohl pochopit význam jejího sdělení. Jestli je to "jablko", to netuším, té analogii nerozumím.

No a pak přijde zákazník s tím, že potřebuje vyhledávat ne podle id, ale podle regulárního výrazu nad id, u mě to znamená, že upravím jednu funkci, a u vás to znamená, že musíte procházet všechny lambdy v aplikaci, protože někde jste použil jako proměnnou x, jinde třeba id atp., na významově totéž.
Ne. Pokud se jedna věc dělá na více místech, tak se samozřejmě má použít pojmenovaná funkce, protože je znovupoužitelná. Pokud se ten kód používá jenom na jednom místě, použije se funkce nepojmenovaná, protože není důvod ji pojmenovávat. Jasný jak facka, co je na tom k dumání?!

3592
Vývoj / Re:Jak vykreslit winapi Arc pomocí javascriptu do SVG?
« kdy: 08. 01. 2016, 18:55:04 »
prostě nevím jak to přepočíst aby to sedělo do toho bounding rectu...
Jakože neumíš spočítat souřadnice těžiště obdélníka? Nebo?

3593
Studium a uplatnění / Re:Jsem jen lepič kódu?
« kdy: 06. 01. 2016, 14:52:52 »
ak sa pozriem na prac. ponuky na Slovensku, tak vsetko sa toci okolo webu. [...] Mozno preto niektori oznacuju programatorov za "lopaty", ked robia "webovky", ale neviem ci odpostatnene, lebo moc moznosti ani ti ludia nemaju, zit treba z niecoho.
1. Lidi na specializovanější pozice se nehledají přes personální agentury.

2. Čímdál víc věcí se dneska řeší "lepením" existujících knihoven, na tom není samo o sobě nic špatného, je to efektivní a je to naplnění někdejší mantry "znovupoužitelnost kódu". Není potřeba vymýšlet kolo. To už zdaleka neplatí jenom pro web.

3. Ani web dneska není úplně stupidní věc, jako bývala kdysi. Websockety, živé updaty, frontend, backend, UX... je toho hodně, co by musel webař uměl, aby postavil kompletně celý dobrý web. Takže to není o tom, jestli děláš web nebo něco jiného, ale o tom, jakou máš pozici v týmu - pokud jenom mechanicky realizuješ návrh někoho jiného, tak to logicky je a vždycky bude jenom lepení. Pokud jsi architekt, tak je jedno, jestli děláš web nebo ovládání raketoplánu. Je to odborná a náročná práce, kterou jenom tak někdo nezvládne.

3594
Server / Re:Vzdálený přístup do sítě s omezením
« kdy: 06. 01. 2016, 14:44:31 »
Správně proroutovat a nastavit firewall. Jak říká kolega: pokud vůbec netušíte, nemá smysl se to učit, zaplaťte si konzultaci.

3595
Odkladiště / Re:mysleni pana Programatora
« kdy: 06. 01. 2016, 10:57:53 »
Errata:
Kód: [Vybrat]
x[:color]=:red
Má být samozřejmě Map.put(x,:color,:red).

P.S. A jestli tě trápí lambdy v Pythonu, tak tam je to podobně - synchronizace tam sice udělat jde ale taky krkolomně, a knihovny typu asyncio se násilně snaží do jazyka dostat něco, na co nebyl navržený. Jsou to prostě sprosté zamykací jednovláknové jazyky a ohýbat je na něco jinýho vždycky bolí...

3596
Odkladiště / Re:mysleni pana Programatora
« kdy: 06. 01. 2016, 10:51:08 »
určitě je lepší než napsat:

red_cars = map(lambda x: x.color = 'red', filter(lambda x: x.id == 'ID2376', cars))

je lepší napsat

def set_color(color):
    return lambda x: x.color = color

def where_id(id):
   return lambda x: x.id == id

car.id = 'ID2376'

red_cars = map(set_color('red'), filter(where_id(car), cars)

protože pak můžete v budoucnosti vylepšit vyhledávání pomocí regulárního výrazu, nebo strukturovat data různých entit a typů podle jednotné šablony, obsahující id, barvu a podobně.
Ufff... Já se jenom zeptám: jaké funkcionální jazyky umíš a kolik jsi toho v nich naprogramoval? Nemůžu se totiž ubránit dojmu, že si myslíš, že JS je funkcionální jazyk a je hnusný, protože se v něm používají funkcionální patterny.  Jediný, co z toho je pravda, je, že JS je hnusný jazyk. A shodnou se na tom úplně všichni.

Myslím si to, protože 1. mluvíš o objektech, které se ve FP nepoužívají, 2. v JS jsou samozřejmě lambdy nadužívané, ale má to jiný důvod než snahu o FP

Ten hlavní důvod, proč se v JS lambdy nadužívají, je, že neumí synchronizovat asynchronní události. Takže v JS musím napsat:
Kód: [Vybrat]
function set_user_val(callback) {
  async_get_data(function(data){
    some_other_async(data,callback)
  })
}

set_user_val(function(data){
  $('#user-val').value(data['user_val'])
})
...a ES6 to vylepší jenom tím, že nemusím psát "function", ale jinak ten kód zůstane stejně pitomě vnořený a plný lambd. V pořádném funkcionálním jazyce, který umí synchronizovat asynchronní události by to mohlo vypadat třeba takhle (Elixir):
Kód: [Vybrat]
def get_data do
  send(Agent1, :get_data)
  data = receive do
    {:get_data_response,data} -> data   #### TADY
    after 5000 -> raise "Timeout"
  end
end

data = get_data |> some_other_async
set_value('#user-val',data)
end
...a nepotřeboval jsem jedinou lambdu. Na řádku "TADY" dochází k tomu, že funkce normálně synchronně vrací hodnotu, kterou získala asynchronně. To v JS nejde a proto je potřeba donekonečna vnořovat callbacky nebo aspoň řetězit berličky typu
Kód: [Vybrat]
 .done(()=>{...}).fail(()=>{...})

Jinak, i ten filtr je v Elixiru daleko čitelnější:
Kód: [Vybrat]
red_cars = cars |> Enum.filter(fn x -> x[:id]==XXXX end) |> Enum.map(fn x -> x[:color]=:red end)
nebo ještě zhuštěněji:
Kód: [Vybrat]
red_cars = cars |> Enum.filter(&(&1[:id]==XXXX)) |> Enum.map(&(&1[:color]=:red))

3597
Odkladiště / Re:mysleni pana Programatora
« kdy: 06. 01. 2016, 00:48:35 »
Podívejte se jen, co se dělalo a dělá v javascriptu, aby se potlačila jeho funkcionální povaha, jaké ohavné konstrukce a ornamenty.
Ajo, ty seš tendle typ :) Tak jo, tak já už tenhle OT asi rozvíjet nebudu, vidím, že to je past na medvědy :))

3598
Odkladiště / Re:mysleni pana Programatora
« kdy: 06. 01. 2016, 00:01:12 »
Z hlediska možných výrazových prostředků k zachycení algoritmu je XSLT téměř ekvivalentní s  FP
To je klidně možný, ale to už jsme se dost posunuli od tvrzení "XSLT neuspělo a může za to jeho FP povaha", žejo :) Já mám za to, že XSLT neuspělo, protože prostě prase aby se v něm vyznalo.

Nejde o mentální cvičení na téma (ne)ekvivalentnosti jazyků*, ale o to, že když si napíšu výpočet faktoriálu v Haskellu nebo Elixiru, je to  krásný, čistý, čitelný a srozumitelný kus kódu, zatímco kdybych si to nedejmatkopřírodo napsal v XSLT, bude to vypadat jako kočičí blití po hodně špatných granulích.

* jak ji definovat, když všechny v úvahu připadající jsou turing complete? V XSLT si zjevně můžu klidně napsat překladač Haskellu, čili ano, "je to ekvivalentní", ale kdo by to propánajána dělal?!

3599
Odkladiště / Re:mysleni pana Programatora
« kdy: 05. 01. 2016, 23:22:37 »
Funkce v XSLT je tag xsl:template.
Což není 1st class citizen.

3600
Odkladiště / Re:mysleni pana Programatora
« kdy: 05. 01. 2016, 22:49:18 »
Ale třeba za neúspěchem dříve slibné technologie XSLT je jednoznačně funkcionální paradigma.
Funkcionální paradigma bez funkcí, to je majstrštyk! ;)

Ve skutečnosti to, co dělá XSLT obtížně použitelným pro "normální" lidi, je to, že to vlastně není nic jiného než jeden gigantický pattern matching - celou vstupní datovou strukturu se snažím namatchovat na jinou strukturu, která definuje výstup. A to není způsob, jakým by se v normálním FP programovalo. Proto taky FP jako takové nemůže být tou příčinou neoblíbenosti (pokud tam teda o nějakém FP vůbec má smysl mluvit).

Stran: 1 ... 238 239 [240] 241 242 ... 618