Blog

Úvahy / 8. 12. 2016 / Arrival - komunikace

Včera jsme byli s kolegy na filmu Arrival a v paměti mi uvízla především skvělá hudba od Jóhanna Jóhannsona a prazvláštní způsob, jakým se hlavní protagonisté snažili s mimozemšťany domluvit. Osobně bych k tomu tyhle lidi už nepouštěl. No, posuďte sami.

První problém lidské řeči je v tom, že je založena na lidské zkušenosti a odráží se v ní všechna omezení, která existence v našich tělech přináší. Pokud by případní mimozemšťané byli fyzicky omezená individua, mohli by ve svém jazyce mít podobné koncepty jako my, ale pro navázání prvotní komunikace bych možná raději volil nějaký formální jazyk, založený na predikátové logice. Ve filmu uvidíte, proč by to mohl být dobrý nápad :).

Předpokladem úspěšné komunikace je, aby obě strany komunikovat chtěly a byly ochotné se komunikaci trpělivě "učit". Proto je na straně lidí i mimozemšťanů na místě obrovská opatrnost. Obě strany také musí počítat s případným nedorozuměním a nevyhlašovat válku kvůli každé kravině, ať už je míra domnělé urážky jakkoliv velká. Jedním ze způsobu, jak toto ověřit a zároveň komunikaci zahájit, je napodobování. Pokud něco náhodného uděláte a druhá strana to zkusí napodobit, je to velmi dobrá indikace toho, že má smysl pokračovat v dorozumívání dál.

Jazyk (podobně jako matematika) je o vztazích a vzorcích. Když se dítě učí jazyk, slýchá například věty pes má nohy a kočka má nohy. Z těchto konkrétních případů časem indukuje, že existuje vzorec X má nohy. Do tohoto vzorce pak samo zkouší dosazovat různé další subjekty a v závislosti na zpětné vazbě si dělá nějaký mentální obraz toho, co tento vzorec vyjadřuje a kdy jej lze použít. Pak může například indukovat dál a přejít k ještě obecnějšímu vzorci X má Z a X Y Z. Potom už jen rozšiřuje seznam vzorců, zvyšuje úroveň abstrakce a přidává další komunikační kanály, například kontext, gesta, fráze, kulturní stereotypy, atd.

Je to každopádně moc zajímavé téma. A tady je ještě jako třešnička na dortu zajímavý článek od scénáristy filmu.


Hudební tvorba / 27. 11. 2016 / Esusdulcisme


Cestování / 19. 11. 2016 / Hrad Bourscheid

Instagram Instagram Instagram Instagram


Cestování / 25. 10. 2016 / Medulin + Pula

Kolega se ženil!

InstagramInstagramInstagramInstagramInstagramInstagram


Programování / 19. 10. 2016 / Řezení hodnot "null" ve streamech (Java 8)

Se streamy přišla i možnost jejich řazení. Obtíže však mohou nastat v případě, že se v datech, podle kterých chceme řadit, vyskytují i hodnoty null. Mějme následující objekt:

  1. class Person {
  2.   String name; // může být NULL
  3.   Integer age; // může být NULL
  4.  
  5.   // gettery
  6.   // settery
  7. }

Dejme tomu, že osoby chceme seřadit podle věku a pak podle jména. Pokud bychom ignorovali hodnoty null, dostali bychom tento kód:

  1. List<Person> sort(Collection<Person> data) {
  2.   return data    
  3.     .stream()
  4.     .sorted(
  5.       Comparator
  6.         .comparing(Person::getAge)
  7.         .thenComparing(Person::getName)
  8.     )
  9.     .collect(Collectors.toList());
  10. }

Pokud by však některá z vlastností objektu Person byla null, došlo by k výjimce. Řešením je použít metody nullsFirst nebo nullsLast, které "obalí" komparátor tak, že nejprve vyhodnotí hodnoty null, a pouze v případě, že jsou obě porovnávané hodnoty ne-nullové, aplikují "obalený" komparátor.

  1. List<Person> sort(Collection<Person> data) {
  2.   return data    
  3.     .stream()
  4.     .sorted(
  5.       Comparator
  6.         .comparing(Person::getAge, Comparator.nullsFirst(Comparator.naturalOrder()))
  7.         .thenComparing(Person::getName, Comparator.nullsFirst(Comparator.naturalOrder()))
  8.     )
  9.     .collect(Collectors.toList());
  10. }