Nějak se nám s Davem roztrhl pytel. Průvodce klonováním (kopie jsou k dispozici) u Arthura, Správný (narozeninový) mejdan podle plánu zase u mě. Má to zase na hřbetě Filip, řekl bych.
Dave Barry: Pravý muž si po obědě schrupne
A je to zase tady. Filip dal, Arthur dal, řada je tedy zase na mně. V rámci seriálu Přelož si svého Dava (protože nikdo jiný to za tebe neudělá) tu máme další archivní sloupek v češtině: Pravý muž si po obědě schrupne.
AZ kvíz-o-drama
Tak ti, milá Česká televize, tedy pěkně děkuju. AZ kvíz
bývala vždycky pohodová divácky nenáročná soutěž, kterou bylo
příjemné sledovat. Nemám v úmyslu rozpatlávat, jak jste tento týden
změnili grafiku a nasadili rotující 3D titulky vyšlé už nejméně deset
let z módy. Řekněme, že je to věc osobního vkusu a jste přesvědčeni,
že se ostatním divákům bude líbit. Ale opravdu bylo nezbytné tuhle
vždycky poklidnou a odpočinkovou vědomostní soutěž „ozvláštnit“
časovým limitem s běžícím odpočtem podkresleným tou nervydrásající
dramaticky mollovou hudbou? Vážně musí být všude ten adrenalin? Osobně
z toho mám nadobro zničený požitek, už se na to vůbec nedá dívat
v poklidu a relaxovat. To nebyl dobrý nápad. ![]()
Javascript: Reference na mateřský objekt v event handlerech
V Javascriptu se mi často stává, že mám vytvořenou nějakou objektovou
strukturu a nějakou metodu takového objektu chci použít jako ovladač
události (event handler). Ale zde nastává problém v tom, že
klíčové slovo this odpovídá při volání handleru ne
mateřskému objektu, kterému patří metoda, ale objektu, který vyvolal
událost. Příklad:
function myObject(data) {
this.Data = data;
this.clickHandler = function() {
alert(this);
}
// ...
}
var obj = new myObject(data);
someElement.onclick = obj.clickHandler;
Pokud nastane událost someElement.onclick, zavolá se sice
„metoda“ objektu obj.clickHandler, ale this bude
v tom okamžiku znamenat objekt someElement, na které událost
vznikla.
Často je v těchto handlerech potřeba pracovat s mateřským objektem – ostatně většinou takovéto konstrukce píšeme coby nějaké obecné knihovny či komplexní struktury a chceme využívat hlavní výhody objektového programování: tedy uzavřenost a kontext, kdy si každý podobjekt spravuje své věci, nemíchá se do jiných činností a nikdo se zase nemíchá do té jeho. Tento nedostatek a chybějící zpětná reference na mateřský objekt se dá různými způsoby obejít. Nejčastěji doplněním reference do potenciálních event triggerů – tedy objektů, které můžou vyvolat danou událost a přes které se pak lze na mateřský objekt dostat, např.:
// ...
this.clickHandler = function() {
alert(this.owner);
}
// ...
someElement.onclick = obj.clickHandler;
someElement.owner = obj;
V tomto případě bude při vyvolání události v handleru hodnotou
this.owner právě mateřský objekt obj. Jenomže ne
vždycky je možné takové přiřazení udělat – objektů je vytvořených
mnoho a v daném okamžiku nevíme, se kterým se právě pracuje, nebo
event trigger není dostupný, abychom do něj mohli něco doplnit atd.
Typicky se to stává při použití externích knihoven a frameworků. Vezměme
jako příklad třeba jQuery a načítání dat přes
ajax:
function myObject() {
this.load = function() {
$.get( this.URL, this.Params, this.onloadHandler );
}
this.onloadHandler = function(data) {
/* this.Data = data ??? */
}
// ...
}
var obj = [];
for (var i=0;i<objCnt;i++) obj[i] = new myObject(data);
// ...
obj[x].load();
Zde je po úspěšném načtení ajaxových dat opět coby handler
zavolána metoda obj.onloadHandler, ale tentokrát v ní
this odpovídá instanci interního objektu
jQuery.ajax, ke kterému se (slušně) nedostaneme a nedá se do
něj nic přidávat. Instancí MyObject je také mnoho a nemůžeme
zjistit, který to právě je. A konečně volání ajaxu je asynchronní a
může jich probíhat současně několik, takže nějaká globální proměnná
nás taky nezachrání.
Je zde ale jedna věc, která není na první pohled vůbec zřejmá: ačkoli je dotyčný handler volán cizím objektem zvnějšku a je jakoby „vytržen“ ze svého kontextu v mateřském objektu, pořád zůstává jeho „metodou“ a při volání má jeho kontext a jmenný prostor. Jsou zde tedy dostupné všechny proměnné definované lokálně v rámci mateřského objektu. A dá se toho využít:
function myObject() {
var thisObj = this;
this.load = function() {
$.get( this.URL, this.Params, this.onloadHandler );
}
this.onloadHandler = function(data) {
thisObj.Data = data;
thisObj.doAnythingElse();
}
// ...
}
V lokální proměnné thisObj má objekt uloženu referenci
sám na sebe, a tato reference bude dostupná i event handleru
zavolanému úplně jiným objektem. Bude zde platit, že this je
objekt, který vygeneroval událost (event trigger), a
thisObj je objekt sám.
Doplnění:
Díky Davidovi za skvělý nápad v komentářích! Ještě jsem ho trochu upravil a vzniklo tak zatím nejlepší a formálně asi nejčistší řešení:
function dynamicHandler(obj,method) {
return function(){ method.apply(obj,arguments) };
}
// ...
function myObject() {
// ...
this.load = function() {
$.ajax({
url: this.URL,
data: this.Params,
success: dynamicHandler(this,this.onloadHandler),
error: dynamicHandler(this,this.onerrorHandler)
});
}
this.onloadHandler = function(Data) {
// ...
}
this.onerrorHandler = function(XHR,ErrorString,Exception) {
// ...
}
}
Jak je asi vidět, takhle to řešení funguje i s libovolným počtem
parametrů, což je docela důležité. Standardní event handlery sice
předávají obvykle parametr jen jeden (event), ale např. jQuery už
vrací parametrů více (třeba callback $.ajax.error vrací
argumenty až tři).
Rýžoviště
Kdybych jen býval tušil, kolik lidí připravím o klidný spánek tím, že jsem jim nedovolil svěřit se mi se svým ověřeným receptem na přípravu rýže… To nemůžu nechat jen tak, takže prosím: vzhůru na to!
Jak připravujete rýži vy?
Máte nějaký osvědčený postup, na který nedáte dopustit? Nějaké zajímavé a neobvyklé recepty? Ochucené rýže? Míchané rýže? Co s divokou rýží? Jasmínová, nebo basmati? Rýže s červenou čočkou mě zajímá! A co rizoto? Ven s tím, svěřte se!
Mudrlanti
Je to takový blogerský evergreen. Založíte si svůj vlastní blog a pak si na něj píšete, co vás zrovna napadne. Ale protože vám na něm záleží, neplácáte pâté přes deváté, ale dobře si témata vybíráte. Ale ať napíšete cokoli jakkoli, dřív nebo později se objeví mudrlant, který ví daleko lépe než vy, co na svém blogu máte psát, jak to máte psát a kdy to máte psát. Nejčastěji je ten mudrlant anonymní a jeho mateřštinou je l33t. Osobně si jej představuju jako uhrovitého teenagera.
Řekněme třeba, že s několika známými už se nějaký ten pátek průběžně bavíte o Problematice Vaření Rýže. K tomu ještě jinde narazíte na intenzivní diskusi a zjistíte, že poměrně hodně lidí to zajímá. Napíšete tedy do své rubriky věnované výhradně vaření příspěvek o vaření rýže. Někoho to zajímá, někoho ne, tak to logicky nečte. Ostatně těm, co vaření psaní o něm vysloveně nesnášejí, jsem kdysi vyšel vstříc a na stránce mám k dispozici kategorie i RSS, kde jsou příspěvky o vaření vynechány. Nicméně to ničemu nebrání: logicky následuje příchod mudrlanta.
t0m4s3: Skoda takychto clankov (o vareni mozneho aj nemozneho), varenie moc nemusim a ryzu uz vobec nie.
Většinou to jen bez dalšího mažu – někdy je ale Den D, všechno se to sejde a další blbeček do sbírky člověka už jen dorazí. Takže se čas od času neudržíte a ještě dotyčnému odpovíte.
Vážený pane,
tak co na můj blog vůbec lezete, když se vám to nelíbí? Přijít, odplivnout si a odejít, to je normální křupanství, nic jiného. Když se mi něco nelíbí, tak si toho nevšímám a jdu jinam, ne?
Petr Staníček
Většinou to stačí, ale někdy mudrlant i reaguje.
t0m4s3: Myslel som to tak, ze je skoda, ze uz nevychadzaju clanky ako predtym. Je to same varenie… Dakujem ze ste si tiez ulavil
To pak většinou odpovím taky.
Kdybych speciálně kvůli takovým remcalům, co vědí lépe než já sám, o čem mám psát, nedělal ty extra odkazy a RSS na všechny články s vynechaným vařením… Hledejte v menu a v patičce. PetrS
No jo, já vůl. Proč v takové situaci vždycky tak snadno zapomenu, že nejednám s člověkem, ale s blbem?
t0m4s3: Ak neznesiete nazor ineho cloveka, nepiste. Nemoze sa kazdemu pacit vsetko, ale kazdy sa snad moze vyjadrit. Asi som vam slapol na ego alebo co…
Stále musíme mít na paměti, že svým čtenářům hodně dlužíme!
Čtyři z pěti zubařů…
Český šéfzubař Jiří Pekárek prohlásil, že ošetření zubního kazu by neměly platit zdravotní pojišťovny. Prý totiž „není správné, že ti, co se o svůj chrup dobře strarají, mají doplácet na léčbu těch nezodpovědných.“ Což o to, jistá logika v tom je a jako liberál tu ideu chápu – ale pan doktor se kardinálně plete v jednom podstatném faktu. Zdravotní péči už nehradí stát, léčba nejde z daní a platby zubařům nepocházejí ze společné kasy veřejného rozpočtu. Pocházejí ze zdravotního pojištění a pojišťovny je vyplácejí z individuálních účtů svých pojištěnců.
Pojišťovny fungují podobně jako sázkové kanceláře: odborník zhodnotí rizika a stanoví kurz odpovídající pravděpodobnosti, že se pojistná událost stane. Takto pojišťovny fungují odnepaměti na celém světě a je to základní princip jejich příjmu. Občan se jde pojistit a platí pravidelně menší částky jako pojistku proti tomu, aby nemusel jednorázově vydávat částky velké, když se stane něco nepříjemného. Jestliže si nečistím zuby a mám tím pádem větší sklon ke kažní zubů, je legitimním požadavkem pojišťovny stanovit vyšší kurz na položku „zubní kaz“ a chtít po mě víc peněz na pojistném, případně naopak poskytovat slevu při „bezeškodním průběhu“, tj. když se od zubaře dozví, že se o své zuby starám dobře. Ale tvrdit, že na mě „nespravedlivě“ doplácejí ti, co si zuby čistí dobře, je pouze zásadní nepochopení základní principu a bohužel věrný obraz našeho pokrouceného systému financování zdravotnictví.
Se stejnou logikou můžou začít chtít lékaři zrušení úhrad za léčení nachlazení, viróz a střevních chřipek u všech, co si špatně myjí ruce. A už by to jelo: nehradit léčbu plicních a nádorových onemocnění u kuřáků, zlomenin a výronů u sportovců, nemocí páteře u lidí se sedavým zaměstnáním, pohlavních chorob souložícím bez kondomu, ošetření zraku u všech, co se dívají na televizi… Takto by se postupně daly rozebrat všechny úrazy a nemoci a zdravotní pojišťovna by nakonec hradila už jen případy, kdy někoho zasáhne meteorit z čistého nebe. Vyšší riziko vždy znamená vyšší pravděpodobnost následků. Což je přesně to, co zohledňují pojišťovny ve svých výpočtech, a co je vlastně jejich hlavní odbornou činností.
Takže nechť vážený doktor Pekárek raději dál poctivě vrtá zuby a nekafrá svým pacientům do toho, u koho a za jakých podmínek se proti riziku nákladů za takový zákrok pojistili.
Rýže v mikrovlnce, jednoduchost sama
Až mě překvapuje, jak moc narážím na problémy s vařením rýže a kolik lidí jen proto, že jinak neumí, je ochotno konzumovat vyvařenou bezchutnou hrůzu zvanou „varný sáček“. My už léta neděláme rýži jinak než v mikrovlnce, a to k všeobecné spokojenosti. Klasickou přílohovou dlouhozrnnou, jasmínovou, basmati, kulatou lepivou na suši – vše snadno, rychle, bez práce, se skvělým výsledkem.
Na 1 dl rýže dáme 1,5 dl vody a špetku soli, vaří se zakryté ve varném skle 2 minuty na maximum a pak 12 minut na polovinu. To je celé. Úměrně množství rýže se násobí vše ostatní, a to i čas – jen ten druhý, dojížděcí, se nenásobí tolik (pro exaktnachtivé je to asi 10 minut plus 2 minuty na každý dl rýže). Příklad:
- 2 dl rýže, 3 dl vody, necelá lžička soli, 4 minuty naplno + 14 minut napůl
- 1 hrnek rýže (2,5 dl), 1,5 hrnku vody, lžička soli, 5 minut naplno + 15 minut napůl
- 4 dl rýže, 6 dl vody, 1,5 lžičky soli, 8 minut naplno + 18 minut napůl
- 2 hrnky rýže (0,5 l), 3 hrnky vody, 2 lžičky soli, 10 minut naplno + 20 minut napůl
Jasmínovou rýži k číně nesolím vůbec. Když chci rozvařenější/lepivou (kulatou) třeba na suši nebo jiné tvarování, nedám 1,5násobek, ale dvojnásobek vody. Časy jsou spíše orientační, každý rýži rád jinak měkkou, výkon mikrovlnek se taky liší. Stačí pár kalibračních pokusů a napříště už bude rýže vždy ideální a pokaždé stejně skvělá.
Pozn.: Prosím, nedávejte sem k dobrému, jak zrovna vy vaříte rýži v hrnci, páře, papiňáku, v troubě, remosce nebo třeba v popelu, a především si nechejte pro sebe své názory na to, který způsob přípravy je lepší. To si necháme na jindy, zde v komentářích nestojím o dohadování, kdo dělá rýži nejlépe. A důležité upozornění: každý komentář obsahující slovo „parboiled“ nemilosrdně zastřelím.
Chcete novější verzi programu od Microsoftu? A máte právnické vzdělání?
Společnost Microsoft vydá 12. února 2008 prostřednictvím služby WSUS (Windows Server Update Services) aktualizaci instalace a dostupnosti aplikace Windows Internet Explorer 7 klasifikovanou jako balíček kumulativní aktualizace. Aktualizace instalace a dostupnosti aplikace Windows Internet Explorer 7 je úplný instalační balíček, který upgraduje počítače s aplikací Internet Explorer 6 na aplikaci Windows Internet Explorer 7. Další informace o aktualizaci instalace a dostupnosti aplikace Windows Internet Explorer 7 naleznete v článku znalostní báze Microsoft Knowledge Base číslo 940767. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base.
Kontrolní test
Pro pochopení předchozího odstavce potřebujete:
- úplné vysokoškolské právní vzdělání
- desetiletou intenzivní praxi s produkty společnosti Microsoft
- papíry na hlavu
Ani po hodině marného snažení se mi upgradovat IE 6 na IE 7 prostě
nedaří. Co to je proboha Cryptographic service, kde to vezmu a proč
to potřebuju k instalaci webového prolížeče?
Lidi, jak vy to děláte, že jste u těch Windows
ještě nezešíleli…?
Gurmán vs gurmet – past na snoby
Je to v poslední době veliká móda. Gurmán to je jenom žrout, co se láduje k prasknutí horami jídla, zatímco pravý labužník je gurmet. Oblíbený argument v jistých kruzích: mám neodbytný pocit, že populární především mezi těmi, kteří se sami považují za výjimečné odborníky přes jídlo a scházejí se na různých veletrzích jídla, kde s plastovým táckem v ruce s nonšalatně vytrčeným malíčkem korzují od stánku ke stánku a sdělují si znalecky moudra jako tedy ta fojegráz byla malinko sušší, nicméně ten lehký podtón šoflé byl zajímavý, že jo Máňo? Je to zkrátka jen velká snobárna, uměle vytvořený nástroj pro potřebu sdělit: vy jste jen gurmán, ale já jsem gurmet, pch!
Přitom je to docela nesmysl. Ano, slovo gurmán (gourmand) má ve francouzštině i původní význam „jedlík“, případně „mlsný“. Ale ten se – hlavně během 20. století – posunul a nově získal i význam „labužník“, „znalec jídla“. Čeština je v tomto významu převzala a význam původní („jedlík“) s tímto slovem vůbec nemá spojený. V češtině je výhradně gurmán = labužník, znalec dobrého jídla. (Ostatně i český „labužník“ je původně z archaického „lábiti, labužiti“, tedy hltat, cpát se. Posun významu je zde hodně podobný jako v té francouzštině.)
Vedle toho slovo gourmet/gurmet v češtině vůbec zabydleno není. V originále ale znamená právě to, co české gurmán. Původně byl gourmet degustátor, ochutnávač vína; slovo vzniklo uměle v 19. století odvozením právě ze slova gourmand. Později se jeho význam z ochutnávání (vychutnávání) vína přesunul do širší oblasti celé gastronomie a obě slova se vpodstatě stala synonymy.
Některé staší zdroje v angličtině, ač rovněž považují gourmand a gourmet za téměř synonyma, přisuzují výrazu gourmand jistý posun směrem k anglickému významu glutton (žrout, jedlík). Nicméně ani v angličitně to není jednotné a tento význam se považuje spíše za archaismus (viz např. heslo gourmand na Wikipedii). Ale v češtině, kde ani glutton, ani gourmet neexistují, už tento problém neexistuje vůbec. V žádném českém slovníku tato slova nenajdete. V encyklopediích a slovnících cizích slov narazíte výhradně na „gurmán = labužník“; naopak ve slovnících francouzsko-českých najdete vždy „gourmet = gurmán, labužník“.
A mimochodem, kulinářský polobůh, Auguste Escoffier, by těžko založil klub Ligue des Gourmands s tím, že by to mělo mít nějaký pejorativní nádech a mělo by se tam žrát Dodine de Canard au Chambertin po kýblech.
Rozlišování gurmán/gurmet si vymyslelo pár snobů, aby si zvedli sebevědomí, že jsou něco víc, než ostatní. Skuteční labužníci a kulináři si s tím hlavu nelámou, s klidem si říkají gurmán, nebo jakkoli jinak, nebo vůbec nijak. Vždy, když narazím na někoho, kdo se v tomto směru ostře vymezuje a zásadně rozlišuje gurmány a gurmety, vím hned, kolik uhodilo a myslím si své.
