Python - dobré rady a praktiky

Re:Python - dobré rady a praktiky
« Odpověď #135 kdy: 28. 03. 2016, 19:12:56 »
Říkal mě rozmezí cca 40-80 v kanclu v Brně, je to cca půlrok tuším, proto sem se dál o to nezajímal. V cizině je to klidně za těch 6k jak píšeš, ale skypicker je Česká firmička, proto se i divím že psali v eurech, ale třeba šli do sebe...

Jo, tak jestli už tam pracuje, tak bych se moc nedivil. Ono obecně ve chvíli, kdy mají nedostatek, tak imho budou nabízet podstatně víc, než když nabírali lidi v dobách, kdy takový hlad neměli. Ale nechci to nějak idealizovat, nebo obhajovat, je to prostě jen informace, co se ke mě dostala jejich spamem.

Citace
Co je 300,- na hodinu čistého? To je 48 na ŽL? Za to se fakt moc neprogramuje. Nebo je to zase nějaký root přepočet? Čísla jako znám, jen to chce trochu hodit do kontextu.

Dohoda o provedení práce.

Nepsali oni, ale agentura. Skypicker dělají i české agentury a fakt nenabízejí ani sto tisíc :D

Tak u české agentury mě to fakt nepřekvapuje. Těžko ale budou lákat lidi ze zahraničí na tohle, což je asi předpokládám účel, když to posílají anglicky a v eurech.


javaman

Re:Python - dobré rady a praktiky
« Odpověď #136 kdy: 28. 03. 2016, 19:21:10 »
OMG, do naší firmy také hledají agentury a na stránkách mají nereálné mzdy. Je mi záhadou, jak to pak zakecají, ale tyhle peníze prostě u nás nedostanou :D Zahraniční agentury jsou obvykle daleko horší, protože když už píšou na východ, tak to berou jen jako blbce z východu a nic moc neřeší. Se mnou se jednou nějaký blbec z Londýna normálně hádal, což jsem ani u českých amatérů nikdy nezažil :D

Takže reálné argumenty jsou spíše nabídky před podpisem a nebo po podpisu. Vše ostatní jsou kecy kolem a plno lidí fakt jen kecá :(

Skypicker vypadá fajn a třeba těch 80 na HPP by tam neměl být problém. Což je na Python hodně slušné, ale neznám nikoho, kdo by tam dělal, tak nevím, jestli tam tolik berou :D

Radek Miček

Re:Python - dobré rady a praktiky
« Odpověď #137 kdy: 28. 03. 2016, 20:09:45 »
Kód: [Vybrat]
Oproti synchronnímu zápisu je výše uvedený zápis pomocí promisů delší a méně přehledný
Pokud se kód v článku dá zapsat i synchronně, pak na něm buď nic asynchronního není a nemá smysl ho zapisovat jako promise nebo asynchronní je a pak nemá význam psát ho synchronně.

Dělá se to proto, abyste neblokoval vlákno. IMO je to lepší než nechat celou aplikaci v JS zatuhnout, dokud se požadavek nedokončí. Na CLR a JVM jsou zase vlákna drahá.

Citace
explicitní označování asynchronních funkcí

Potíž je, že takto označené funkce nejdou dost dobře používat uvnitř synchronních funkcí. Uvažte například pole promisů přes nějž iterujete pomocí Array.forEach. Kdybyste chtěl jednotlivé promisy postupně asynchroně vykonat (tj. spustit první, počkat až doběhne, spustit druhý, počkat až doběhne, ...) uvnitř forEach, tak to nejde bez zablokování vlákna.

Obecně když byste uvnitř nějaké synchronní funkce chtěl zavolat nějakou asynchronní funkci a počkat na její výsledek, tak to nejde bez zablokování vlákna, což je špatné - lepší by bylo, kdyby se z té synchronní funkce automaticky stala asynchronní a dokázala se vzdát svého vlákna - což se ale nestane.

Zablokování vlákna by samo o sobě nevadilo, kdyby vláken bylo dostatek a byla levná, což na mnoha platformách není - kdyby to tak bylo, tak by se nemuselo zavádět async a await.

Re:Python - dobré rady a praktiky
« Odpověď #138 kdy: 28. 03. 2016, 20:10:04 »
Mohl bych poprosit o konkrétnější příklad? Takhle popsané mi to připadá právě jako věc řešitelná pomocí generátorů/promises/async+await.
Chci napsat funkci mySuperHttpFetcher(), která mi vrátí integer (!!!) zveřejněný na nějaké http adrese. Bez callbacků, bez promisů. Chci prostě
Kód: [Vybrat]

let superNumber = mySuperHttpFetcher()
// superNumber == 42

Radek Miček

Re:Python - dobré rady a praktiky
« Odpověď #139 kdy: 28. 03. 2016, 20:17:32 »
Citace
nemůžu napsat fci, která by vracela výsledek asynchronní operace

Mohl bych poprosit o konkrétnější příklad? Takhle popsané mi to připadá právě jako věc řešitelná pomocí generátorů/promises/async+await.

Nemůžete napsat synchronní funkci, která by vracela výsledek asynchronní operace bez zablokování vlákna.

Pokud to chcete bez zablokování vlákna, musíte synchronní funkci předělat na asynchronní nebo vedle synchronní udělat asynchronní. Podobná duplikace se například objevuje v Haskellu v modulu Control.Monad, kde je je řada funkcí z modulu List duplikována.


Re:Python - dobré rady a praktiky
« Odpověď #140 kdy: 28. 03. 2016, 20:34:08 »
nebo asynchronní je a pak nemá význam psát ho synchronně.
To je právě ten omyl pramenící (zřejmě) ze znalostí jazyků, kde asynchronní události synchronizovat nejdou. Proto v JS dochází k tomu peklu callbacků (a promisy to moc nezlepší, jenom mírně změní syntaxi) - věci nejdou synchronizovat a tímpádem jakmile se někde mihne asynchronní událost, probublají promisy nebo callbacky do všeho kódu, který tu fci používá.

V Erlangu se to dělá snadno - volající proces P1 zavolá fci, je pozastavený a čeká na událost. Mezi tím běží ten asynchronní kód v procesu P2 a jakmile je hotovo, pošle P2 zprávu P1, ten ji přijme (typicky zpráva obsahuje výsledek operace) a pokračuje dál.

V JS sice procesy nejsou, ale kdyby to jazyk umožňoval, dalo by se to dělat úplně stejně - první fce je pozastavena *uprostřed*, běží druhá. To ale JS neumožňuje - každá fce musí hned doběhnout. A z toho pramení ten callback hell. Což je přesně pointa toho, co jsem psal - JS je ve vleku toho, že nebyl navržen na to, na co se dneska používá. A promisy na tom vůbec nic nemění.

javaman

Re:Python - dobré rady a praktiky
« Odpověď #141 kdy: 28. 03. 2016, 20:44:05 »
To mě tak napadlo, když jsem se teď díval na nějaký Python příklad. Pokud je nějaké API, tak jak poznáte, co metodám posílat? Z názvu metody?

Ondrej

Re:Python - dobré rady a praktiky
« Odpověď #142 kdy: 28. 03. 2016, 20:51:59 »
To mě tak napadlo, když jsem se teď díval na nějaký Python příklad. Pokud je nějaké API, tak jak poznáte, co metodám posílat? Z názvu metody?
ehm z dokumentace?...

javaman

Re:Python - dobré rady a praktiky
« Odpověď #143 kdy: 28. 03. 2016, 20:53:37 »
A když není? Protože jinde to mám rovnou u té metody. Dokumentace často není, tak si říkám, jak to asi děláte.

Ondrej

Re:Python - dobré rady a praktiky
« Odpověď #144 kdy: 28. 03. 2016, 21:29:07 »
A když není? Protože jinde to mám rovnou u té metody. Dokumentace často není, tak si říkám, jak to asi děláte, vrací.
Dokumentace by měla bejt rovnou u konkrétní funkce, kterou si můžeš jednoduše vytisknout pomocí __doc__, tady by si měl mít uvedeno co funkce bere a co dělá, pokud to tam uvedeno není, je to chyba programátora, nikoliv jazyka.
např:
Citace
>>> random.randint.__doc__
'Return random integer in range [a, b], including both end points.\n        '
Nicméně v Pythonu 3.5 to může bejt řešeno (vynuceno) pomocí type hints
Kód: [Vybrat]
def greeting(name: str) -> str:
    return 'Hello ' + name
Z toho je asi hned patrné co do funkce máš rvát a ani tam nic jiného nenarveš.

Pokud dokumentace není, není type hints a není jinak patrné co máš posílat, tak ti nezbude nic jiného než funkci prozkoumat.

Re:Python - dobré rady a praktiky
« Odpověď #145 kdy: 28. 03. 2016, 22:15:22 »
A když není? Protože jinde to mám rovnou u té metody. Dokumentace často není, tak si říkám, jak to asi děláte, vrací.
Dokumentace by měla bejt rovnou u konkrétní funkce, kterou si můžeš jednoduše vytisknout pomocí __doc__, tady by si měl mít uvedeno co funkce bere a co dělá, pokud to tam uvedeno není, je to chyba programátora, nikoliv jazyka.
např:
Citace
>>> random.randint.__doc__
'Return random integer in range [a, b], including both end points.\n        '
Nicméně v Pythonu 3.5 to může bejt řešeno (vynuceno) pomocí type hints
Kód: [Vybrat]
def greeting(name: str) -> str:
    return 'Hello ' + name
Z toho je asi hned patrné co do funkce máš rvát a ani tam nic jiného nenarveš.

Pokud dokumentace není, není type hints a není jinak patrné co máš posílat, tak ti nezbude nic jiného než funkci prozkoumat.

Tohle je mimochodem situace stejná ve všech běžně používaných jazycích. Jak poznám, co mám strkat do metody v javě? String? No jo, ale co v něm má být? Int? A žere to i nuly? Objekt nějakého typu? A co v něm můžu / nesmím nastavit za properties? Prostě pokud není dokumentace, musí se zkoumat kód.

Re:Python - dobré rady a praktiky
« Odpověď #146 kdy: 28. 03. 2016, 22:20:20 »
Z toho je asi hned patrné co do funkce máš rvát a ani tam nic jiného nenarveš.

Pokud dokumentace není, není type hints a není jinak patrné co máš posílat, tak ti nezbude nic jiného než funkci prozkoumat.

Což je mimochodem stejné ve všech běžně používaných jazycích. Pokud to není v dokumentaci, tak můžu jen hádat, nebo zkoumat kód. Třeba v Javě, pokud vidím, že metoda bere parametr typu string, nic mi to pořád neříká o tom, jak bude reagovat na konkrétní string. Spadne, když jí dám nulový string? A co když dostane neplatné unicode? A u čísel, co když jí dám nulu? Co když nekonečno, nebo NaN? U objektů null? Pokud není dokumentace, tuhle informaci z typového systému nijak nezjistím a prostě se buď musím kouknout do kódu, nebo to zkusit.

Re:Python - dobré rady a praktiky
« Odpověď #147 kdy: 28. 03. 2016, 22:21:15 »
Wtf. Prvně to předstírá, že to komentář zahodilo a pak zjistím, že byl vložený. Nový redakční systém ftw.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Python - dobré rady a praktiky
« Odpověď #148 kdy: 28. 03. 2016, 22:48:19 »
Pokud není dokumentace, tuhle informaci z typového systému nijak nezjistím
To, že má Java hloupý typový systém neznamená, že tuhle informaci z chytrého typového systému nezjistím.

Overload

Re:Python - dobré rady a praktiky
« Odpověď #149 kdy: 29. 03. 2016, 07:27:18 »
Radek, Mirek: Díky za osvětlení. Erlang vypadá opravdu zajímavě. Sice mám rád věci s trochu živější komunitou, ale rozhodně se na něj podívám víc. Mám se ještě co učit.