středa 8. ledna 2020

Are React Hooks fundamentaly broken?

I am still not decided if React hooks are as broken as I think or I just don’t get the essence of them, but run into several troubles:


* they introduce completely new paradigm that no one is used to


* I understand why useEffect is using basic Object.is instead of some other more/less clever algorithm, but is it really good idea to put together Object.is (what is basically a reference comparison for non value types) and functional components where everything is fresh new on every render call? IMHO this two things just don’t fit well together


* reusability of hooks in case you want to apply them on multiple items instead of one eg. when you have hook for fetching data from server 
```
useFetch = (url:string) => {….}
```
If you want to download data from 3 endpoints
```
[url1, url2, url3].each(url => useFetch(url))
```
 React will say NO
but if you put it in three components that actually only wraps your useFetch
```
function UseFetchWrapperComponent({url}) => {useFetch(url)}
[url1, url2, url3].map(url => <UseFetchWrapperComponent url={url} />)
```
That is fine. WTF?

* Hooks composition is not easy as well. For examples if you want a hook that computes some derived value from result of other hook. How to do that?
```
const [state, setState] = useState();
const [derived, setDerived] = useState();

useEffect(() => {
  setDerived(computeSomthing(state))
}, [state]);
```
This is really awfull and definitely not scalable.
Compare it to other existing reactive library
```
fromEvent(document, 'click') .pipe( throttleTime(1000), map(event => event.clientX), scan((count, clientX) => count + clientX, 0) ) .subscribe(count => console.log(count));
```

Maybe I just got the whole idea of hooks wrong. I don't know.

sobota 13. dubna 2013

Recenze prvního FirefoxOS telefonu


Na webu ArsTechnica vyšel zajímavý článek o prvním telefonu s Firefox OS. Redaktoři tohoto serveru dostali možnost si historicky první telefon s FOS osahat a podali o tom podrobnou zprávu.

http://arstechnica.com/gadgets/2013/03/firefox-os-hands-on-mozillas-plan-to-build-on-top-of-the-web/


Google forkuje webkit a Samsung se spojuje s Mozillou 



Samsung přidává ruku k dílu a začíná spolupracovat s Mozillou na nové generaci renderovacího jádra s názvem Servo. Je to poměrně překvapivý krok, když uvážíme, že Tizen je již od začátku budován jen s jedním jádrem jeho vývoj je pevně spjat s prohlížečem Google Chromium (resp. jeho renderovacím jádrem Webkit).

Druhý den po ohlášení se objevila i informace o tom, že Google se rozhodl nepokračovat nadále ve společném vývoji jádra Webkit, ale raději vytvořit jeho fork s názvem Blink. Prý mu současný stav nedovoluje dostatečně rychle inovovat.

Těžko říct, co z toho je příčina a co následek. Je možné, že Samsung již nějakou dobu tušil, že dojde k odštěpení vývoje a pokud Google nebude propagovat změny zpět do mateřského projektu, tak by Samsung musel převzít vývoj sám. Partnerství s Mozilla je tedy logické. I vzhledem k tomu, že Samsung by chtěl svým novým operačním systémem Tizen - googlu překně přitopit a ukrojit z Androdího tržního koláče.

Pokud by Mozilla získala na svou stranu ještě další velké hráče, mohla by se rozhořet další bitva a to  na poli mobilních browserů. Inu nechme se překvapit...

středa 30. května 2012

Tizen vs HTML5

Cheng Luo provedl na svém developerském Tizen zařízení Ringmark test a o výsledky se podělil s ostatními vývojáři.



Ringmark je sada testů pro mobilní prohlížeče pocházející z vývojářského oddělení Facebooku. Má pomoci vývojářům otestovat jejich přístroj a ověřit to, jak se hodí pro účely jejich aplikace.
Facebook přislíbil, že celý nástroj bude uvolněn pod open source licencí a výsledky své práce věnuje konsorciu W3C.

Tento test de facto odhalí jaké HTML5 a CSS3 specifikace vaše zařízení zvládá.

V následující tabulce vidíte výsledky pro zařízení s OS Tizen, Android a iPhone

Test Tizen Android iPhone
Ring 0 0 Fail 97 Pass  0 Fail 97 Pass 0 Fail 97 Pass
Ring 1 18 Fail 141 Pass 31 Fail 106 Pass 33 Fail 106 Pass
Ring 2 N/A N/A N/A


čtvrtek 3. května 2012

Nový borec do mobilního ringu - Tizen OS


Dnes byla vydána verze 1.0 operačního systému pro mobilní telefony a tablety - Tizen

https://www.tizen.org/

Základní údaje o tomto systému:

Historie projektu: vyhází z projektu Meego, za kterým stála Nokia, po odkoupení Microsoftem se ovšem projektu zřekla a na jeho základech vznikl Tizen
Jádro systému: upravená verze OS Linux + X window manager Wayland
Vývojové prostředí: vlastní distribuce Eclipse IDE
Programovací jazyk: JavaScript + HTML5 + CSS3 + vlastní JavaScript API
Emulátor: ANO - dokonce dva druhy (OS bežící ve virtuálním stroji + webový emulátor)
Firmy stojící za tímto OS: Intel + Samsung + další
Počet zařízení s tímto systémem: 0 :-)
Podíl na trhu mobilních telefonů: 0% :-)

Když se podíváte na poslední dvě čísla, tak si asi řeknete, proč by mě (sakra) měl tenhle OS vůbec zajímat.

Pokusím se navrhnout několik důvodů:

  1. Android se v současné době nachází v nemalých nesnázích a není jisté, že se z nich dostane
  2. Již dříve někteří výrobci (hlavně Samsung) dávali najevo, že se jim nelíbí kontrola Google na Androidem a k tomu ještě spojení Google a Motorola, obávali se toho, že budou jako výrobci Android telefonů odsunuti na druhou kolej
  3. Samsung v současné chvíli drží značnou část mobilního trhu a pokud by se rozhodl preferovat vlastní systém, Android by rázem přišel o několik desítek procent tržního podílu a naopak Tizen by mohl získat několika procentní podíl takřka ze dne na den
  4. Intel se potřebuje zoufale prosadit na poli mobilních telefonů a vlastní OS by mohla být jedna z cest
  5. SDK pro Tizen je založeno na webových standardech a aplikace pro něj se píší velmi jednoduše, v podstatě každý kdo umí HTML a JavaScript může programovat pro tento OS a to mu dává neskutečně velkou základnu vývojářů

Je to jen můj soukromý pohled a zajímal by mne Váš názor na tento zajímavý OS. 

úterý 14. února 2012

Jaké IT dovednosti budou žádány v roce 2012?

Žebříček žádaných IT dovedností pro rok 2012, dle inzerátů IT firem:


Jak je vidět, největší poptávka je po lidech z oblasti vývoje pro mobilní platformy (zda jde pouze o nativní platformy nebo i mobilní web, nebylo specifikováno). Jako druhá se umístila Java, která je dlouhodobě velmi populární a vypadá to, že si svou pozici udrží ještě hodně dlouho. Třetí příčka patří JavaScriptu, což  může být velké překvapení pro spoustu programátorů. Na druhou stranu, alespoň základní znalost JS je dnes v podstatě nutnost pro každého webdevelopera a JS se objevuje jako vítaná dovednost téměř v každém inzerátu.

Další zajímavosti:
  • nejpoužívanějším JS frameworkem je stále jQuery
  • nejrozšířenější databází MySQL (i když NoSQL databáze zaznamenaly oproti minulému roku velmi výrazný nárůst ),
  • z NoSQL je nejčastěji poptávaná DB Hadoop, pak Cassandra, Redis a MongoDB
  • Android je zmiňován o něco častěji než  iPhone
  • požadavek znalosti Gitu se objevuje častěji než znalost SVN
  • nejpoužívanější testovací framework je Selenium
  • jenčastěji používaný CMS systém je Drupal [u nás je ale rozložení malinko jiné a myslím, že Drupal vs Wordpress by skončil remízou]

neděle 12. února 2012

Mozilla Servo + Rust == new Firefox?

Vypadá to, že Mozilla ve svých laboratořích kutí něco opravdu zajímavého.
Dle jejich slov se zdrojové kódy Firefoxu už opravdu rozrostly a vzhledem k tomu, že Firefox je psaný v C++, je velmi obtížné udržet vše pod kontrolou. Na druhou stranu jaký jiný jazyk by se dal pro takto velký projekt použít, přičemž bychom chtěli využívat moderních principů, výkonu všech jader moderních procesorů a zároveň udržet aplikaci bezpečnou?

Zřejmě žádný, a proto si inženýři v Mozille napsali jazyk vlastní.
Jmenuje se Rusthttp://www.rust-lang.org/  a je to takový všeuměl složený z těch nejlepších věcí z ostatních jazyků.
Rust vychází z Céčkové syntaxe (pro ty z vás, kteří jsou nerozhodní při psaní závorek u jednořádkových příkazů, máme dobrou zprávu, zde se píšou závorky vždy), obsahuje vlastnosti Common Lispu (polymorfismus pomocí generických funkcí), Erlangu (Actor-style concurrency) [pozn. autora - bohužel Erlang neznám, ale tuším že se jedná o jakousi izolaci paralelního kódu], ML (moduly, immutable data) a několik dalších včetně několika druhů uzávěrů známých z JavaScriptu. Spoluautorem jazyka není nikdo jiný než Brendan Eich - tvůrce JavaScriptu.



Rust je kompilovaný, ale při tom by měl být bezpečný, zvládat lehce paralelní algoritmy a řešit spoustu dalších věcí.

Už nějakou dobu je zřejmě ve vývoji experimentální verze prohlížeče založená na Rustu s názvem Servo. Jeden z cílů tohoto experimentu je dokonce implementace DOM v JavaScriptu, dle slov tvůrců už je na to JS dostatečně rychlý.