niedziela, listopada 23, 2014

Moto 360 i Lollipop na Nexusach

Po tych ponad 2 tygodniach posiadania Moto 360 (i takim samym czasie posiadania "odebranego" mieszkania ;-)) jestem nią z dnia na dzień coraz bardziej zachwycony.

Po strasznym 1 dniu, gdy w ogóle nie rozumiałem interfejsu przyszło zrozumienie i teraz wszystko jest już w miarę jasne i wygodne.
Nagle nie mam odruchu sięgania po telefon by sprawdzić co tam się dzieje.
Nie "gubię" też połączeń przychodzących.
Wcześniej mając telefon w kieszeni w pracy i słuchawki na uszach potrafiłem nie usłyszeć i nie poczuć telefonu gdy dzwonił, teraz Moto 360 próbuje mi urwać rękę i zawsze czuję, że ktoś do mnie dzwoni.

Do tego wszystkiego dochodzą zmiany w sofcie, które sprawiły, że z 12-16 godzin pracy bez ambient mode teraz zrobiło się około 30 godzin pracy bez ambient mode i z 16 godzin z ambient mode.
Sam ambient mode też fajnie działa pokazując ciągle czas przy bardzo ściemnionym ekranie, który próbuje udawać, że jest czarno-biały.

Nadal mi jednak brakuje dostępu do informacji o pulsie, który Moto 360 zczytuje co 5 albo co 15 minut. Chciałbym móc zobaczyć wykres dzienny.
Zaskakuje mnie też to, że Moto 360 nie jest widoczna w Google Fit, bo nie wiem czy ilość kroków jaką mam podawaną z Fit to liczba z telefonu, z Moto 360 czy z czegoś jeszcze ;-)

Co do Lillipop na Nexusach to mam lekko mieszane uczucia.

Odzyskałem z jednej strony Nexusa 10, bo od czasu gdy jest na nim Lollipop nie musiałem go restartować, a przy KitKat co czas jakiś (raz na 1-2 dni) trzeba go było zresetować bo się wieszał i zamarzał.
Chrome nadal nie jest demonem prędkości na N10, ale jest lepiej niż było.

W N7 nie czuję różnicy ;-)

W N5 zaś przez update do Lollipop Snapdragon Batteryguru stracił możliwość sterowania synchronizacją aplikacji od Google i bakteria jakby na mniej starcza :-(

To z tym Snapdragon Batteryguru to jest jedyny zgrzyt z Lollipop. Reszta się mi podoba ;-)


Podobne postybeta
Android 5.0 pierwsze wrażenia
Moto 360 i Android Wear po paru godzinach używania....
Moto 360 i Android Wear po 3 dniach - zaczynam dostrzegać zalety ;-)
Ktoś ma pomysły na użycie tagów NFC?
Słuchawki złe

Jak można przegrać wybory gdy się je wygrywa?

W obecnych wyborach do sejmików wojewódzkich patrząc na ilość oddanych głosów:
- PiS dostał ich 26.85%,
- PO 26.36%,
- PSL 23.68,
- SLD 8.78%.

Gdy popatrzymy na ilość mandatów, przedstawia się to tak:
- PO 179 (32.25%),
- PiS 171 (30.81%),
- PSL 157 (28.28%),
- SLD 28 (5.04%),
- inni 20 (3.6%)

Jak to możliwe?

PKW tłumaczy to sposobem obliczania liczby mandatów i w tym właśnie tkwi cała tajemnica ;-)

Działa to tak, że w całym kraju mamy 16 województw, w każdym z województw wybieramy pewną ilość radnych do sejmiku samorządowego danego województwa, głosy oddane w jednym województwie nie wpływają na wyniki w innym.
Do tego dochodzi frekwencja, która w tych wyborach była taka, że tam gdzie była wyższa wygrywał PiS, tam gdzie niższa PO.

A ilość mandatów w danym okręgu nie zależy od frekwencji, a od procentowego podziału głosów.
Jeśli przyjmiemy dla uproszczenia, że cały kraj składa się tylko z 2 województw i w jednym województwie przy 1 mln uprawnionych cały 1 mln zagłosuje na partię X, a w drugim województwie z 1 mln uprawnionych zagłosuje tylko 100 tysięcy i będą głosować tylko na partię Y to w pierwszym województwie partia X dostanie wszystkie mandaty, w drugim partia Y, mandatami będą mieć tyle samo*, za to w skali kraju partia X zdobędzie 1 mln głosów, a partia Y tylko 100 tysięcy.

Co zabawne w Sejmie, który byłby wybierany przy tej samej liczbie głosów i frekwencji obie partie też będą miały tyle samo mandatów**.

Jedynie w wyborach na Prezydenta, gdyby byli wspierani przez partie, kandydat partii X wygrałby blisko 91% głosów do 9% na kandydata Y.

Jak widać można wygrać wybory ilością głosów, ale przegrać ilością mandatów (przez to, że w USA Prezydenta wybiera się w wyborach "pośrednich" dochodziło tam do sytuacji gdy Prezydentem zostawał ktoś z mniejszą ilością głosów).

Czy to sprawiedliwe?

To zależy jak na to spojrzeć.
W przypadku sejmików wojewódzkich trudno zaproponować coś co pozwoliłoby tego uniknąć. W końcu wyborcy z województwa w którym jest większa frekwencja nie powinni mieć wpływu na wyniki w województwie z mniejszą frekwencją.
W wyborach do Sejmu też jest problem. Wyborcom gdzie jest wyższa frekwencja chciał się iść do wyborów i ich głos przez to jest mniej istotny niż tych, którzy poszli w okręgach gdzie była niższa frekwencja. Z drugiej zaś strony, wyborcy w okręgach z niższą frekwencją najpewniej głosowaliby podobnie do tych z ich okręgów, którzy poszli do wyborów i trudno by im było zaakceptować fakt, że "narzuca" im się zwycięzców.
Problemu nie byłoby tylko gdybyśmy głosowali na Listę Krajową, ale takie wybory miałyby jeszcze mniejszą frekwencję.


* - zakładając, że w każdym z Sejmików jest tyle samo mandatów
** - zakładając, że każde województwo wprowadzałoby taką samą ilość posłów, co ciekawe jeszcze kilka kadencji temu gdy istniała Lista Krajowa, partia X miałby więcej mandatów, bo tam część mandatów była przyznawana z wyborów bezpośrednich, a część (69 mandatów) była dzielona tak jakby wszystkie głosy w kraju (na partie, które przekroczyły 7% w skali kraju) były oddane w 1 okręgu.


Podobne postybeta
1 na 9 głosów
I po wyborach :-)
Złe wieści
Najbardziej bezsensowne wybory
Głosowanie przez Internet, chyba jednak jestem na "nie"

sobota, listopada 15, 2014

Android 5.0 pierwsze wrażenia

Jest nieźle.

Nexus 10 odzyskał wigor i znów wydaje się być bardzo szybkim tabletem.
W pewien sposób podważa sens kupowania Nexusa 9 ;-)

Smartlock działa bardzo fajnie.
Mój Nexus 5 ma go włączonego i gdy w pobliżu nie ma mojej moto 360 czy słuchawek Bluetooth to trzeba podać wzór do odblokowania, jak któreś z tych urządzeń jest w pobliżu to nie ma wzorku :-)

Najmniejsze wrażenie Lollipop robi na mnie na Nexus 7 2013.
Wlasciwie niewiele się zmieniło. Nadal jest to całkiem fajny tablet i tyle.

Największym zawodem jest to, że Google nie postanowiło pójść za ciosem z aparatem. Dodali co prawda HDR+, ale w obszarze wideo nic nie zmienili.
Po tym co pokazywali na Google I/O, czyli możliwość do przypuszczenia przez soft 60 fps w pełnej rozdzielczości liczyłem po cichu na 4K a jeszcze bardziej na slo-mo dla filmów. Teoretycznie zapas do tego jest...

Nie czakałem na OTA, posłużyłem się sideload'em i działa to na razie całkiem miło.

Teraz czekam na update dla zegarka do 5.0W ;-)

posted from Bloggeroid




Podobne postybeta
Sprzęt WiFi w procentach
Migracja do Androida 4.3 zakończona, 3 z 3 urządzeń zaktualizowane ;-)
Szaleństwo zakupów w Android Market ;-)
Moto 360 i Lollipop na Nexusach
Motorola Mileston 2 fajna jest ;-)

piątek, listopada 14, 2014

Topologiczne sortowanie kroków koniecznych do wprowadzenia się do nowego mieszkania ;-)

Na początku mamy coś takiego:


Na końcu ma być coś bardziej podobnego do tego:


Między tymi punktami jest masa rzeczy do zrobienia, które jak mi się wydaje na dzień dzisiejszy wyglądają tak:


Jestem między Start a Prąd ;-)

Jeszcze gdzieś w środku jest zakup pralki, ale nie jest niezbędny, a tylko by pasowało ;-)

Trochę mnie przeraża droga przez ten graf....
Kilka miesięcy temu był ciut inny, ale wtedy to wszystko jeszcze było daleko ode mnie....


Podobne postybeta
Sudoku - rozwiązanie doskonałe ;p
OOo2GD 2.1.0 - filtrowanie, sortowanie [dla niektórych ;-)] i bardziej *nixowe nazwy
Wiele desktopów i lupa - czemu Windows tego nie ma?
Maruda mode post ;-)
U mechanika... czyli nudne pisanie o niczym dla zabicia nudy

wtorek, listopada 11, 2014

The Giver - kolejny świat, który się nie domyka....

Czytam teraz 4 książkę ze świata Givera (OK, naprawdę to dziś przeczytałem, ale zacząłem ten post pisać z tydzień temu ;-))
Pierwsza to The Giver, druga Gathering Blue, trzecia Messanger i teraz czwarta Son.
The Giver to po naszemu Dawca Pamięci.

I to już kolejny świat dystopii, który się nie domyka, w sensie nie może się utrzymać jak się popatrzy na liczby ;-)

W community (używam nazw angielskich bo nie znam polskich tłumaczeń ;-)) co roku rodzi się ~50 dzieci, znaczy Produktów, i mniej więcej tyle wchodzi co roku "do użytku".

Żeby urodziło się 50 produktów w ciągu roku, potrzeba około 50 birthmothers.
Przydział do tej grupy może dostać tylko dziewczynka, przebywać w centrum będzie przez jakieś 2-3 lata przygotowań do "produkcji" i później przez 3 lata produkcji.
Wpaść tam może mając 12-13 lat.
Czyli, żeby utrzymać jako tako produkcję i by było 50 rodzących trzeba w każdym roczniku "pobrać" jakieś 16-17 kandydatek na birthmothers.
Znaczy to, że 64-68% wszystkich Dwunastek powinno dostać przydział birthmother.

Jednak z opisu w książce wynika, że przydział jako birthmother jest traktowany jako swego rodzaju degradacja i nie dzieje się szczególnie często. Świadczyć o tym może też to, że mało kto wie w ogóle o tym jak odbywa się produkcja.

Później, z Son dowiadujemy się, że żadna z birthmothers nie może nigdy złożyć podania o przydzielenie małżonka i dzieci do opieki. Znaczy to, że w każdym roczniku zostaje tylko 8-9 kobiet, które mogą złożyć wniosek o małżonka.
Dziećmi rodzice opiekują się na 100% od 1 do 12 roku życia, choć często dłużej. Ale niech to będzie tylko 11 lat. Znaczy, że mamy 550 dzieci, którymi się trzeba opiekować. Ponieważ na każdą parę małżonków przypada 2 dzieci to potrzebujemy 550 osób na rodziców.
W tym jest 225 kobiet, przy założeniu, że w każdym roczniku zostało tylko 9 kobiet, które nie zostały birthmothers to mamy 25 roczników.
Czyli tu by się to mogło dopiąć, chociaż tak jakoś nierówno, bo to by działało tylko gdyby każda z tych kobiet złożyła podanie o małżonka i zostałaby spasowana. Pewnie więc bardziej będzie to 35-40 roczników. Ale znów "małżonkowie" mogą prosić o dziecko jakoś najwcześniej 3 lata po zamieszkaniu wspólnym "miejscu spania" (dwelling) i biorą 2 dzieci, a w momencie gdy ostatnie z dzieci ich opuszczą to ich domostwo jest rozwiązywane. Na czuja mi się tu coś nie domyka ;-)

Takie Igrzyska Śmierci też się nie domykają. Albo czegoś nie wiemy.
Bo czemu ludzie z Panem po prostu nie uciekają? Dodatkowo w kolejnych książkach dowiadujemy się, że wojna między Kapitolem i 13 dystryktem może spowodować śmierć tak dużej liczby ludzi, że populacja się nie odbuduje... a przecież nie ma kontroli urodziny, a na dodatek w koło jest pełno jedzenia.

Stąd uważam, że w szkołach na lekcjach polskiego/literatury dzieci powinny też mieć jakieś podstawy ekologii i liczenia czy dana społeczność się może utrzymać ;-)

Świat byłby lepszy gdyby ludzie bardziej ufali równaniom różniczkowym niż ideologiom ;-)



Podobne postybeta
Poprawiamy JDK7 ;-)
Religia w szkole
Dobór naturalny, albo my
OpenOffice.org i inne produkty Open Source - ofiary kryzysu? ;-)
Terminatorowa refleksja ;-)

sobota, listopada 08, 2014

Moto 360 i Android Wear po 3 dniach - zaczynam dostrzegać zalety ;-)

Przed chwilą Inbox przypomniał mi o konieczności spłacenia karty kredytowej.
Normalnie musiałbym sięgnąć po telefon by dowiedzieć się o co chodzi, ale nie tym razem ;-)
Teraz zawibrowała moto 360 na moim nadgarstu, spojrzałem na nią i zobaczyłem "Spłacić kartę".

O wiele to prostsze.

Może co prawda doprowadzić do zbytniego ulegania powiadomieniom, ale na szczęście w Android Wear można zabronić dzielenie się notyfikacjami z niektórych aplikacji.

Także nawigacja nabiera nowej jakości.
Nie trzeba już trzymać ciągle w ręce telefonu, wystarczy spojrzeć na zegarek, który w momencie gdy ma coś ważnego do zakomunikowania wibruje.... w tym czasie zresztą telefon znajdujący się w kieszeni gada co robić ;-)

Także w sytuacji gdy nie ma się słuchawek bezprzewodowych albo takich z pilotem sterowanie muzyką graną z telefonu jest prostsze, choć trochę dziwne.

Jest lepiej, ale mogłoby być jeszcze lepiej ;-)

Przydałby się np. jakiś oficjalny launcher uruchamiany gestem, wrzuciłbym tam sobie np. monitor tętna :-)


Podobne postybeta
Moto 360 i Android Wear po paru godzinach używania....
W Androidzie przydałyby się nagrywalne intenty :-)
Android 5.0 pierwsze wrażenia
Moto 360 i Lollipop na Nexusach
Knigi dobre :-)

środa, listopada 05, 2014

Moto 360 i Android Wear po paru godzinach używania....

W skrócie i dosadnie - dupy nie urywa ;-)

Moto 360 prezentuje się całkiem sympatycznie:


Z użytecznością jest różnie.

Sam interfejs Android Wear jest taki sobie.
By np. włączyć stoper trzeba zrobić 2 tapnięcia na ekranie by zegarek zaczął słuchać (wystarczy też powiedzieć OK Google by zaczął słuchać) i później przesuwać ekrany od dołu do góry aż dotrzemy do Start stopwatch....
Fajnie, ale w moim starym Casio ProTrek (poniżej) wystarczy zrobić 1 naciśnięcie guzika ;-)
OK, teoretycznie wystarczy powiedzieć "OK Google, start stopwatch" i jest to samo, ale nie jest to the most user friendly solution ;-)

Z "odkrywalnością" interfejsu też nie jest najlepiej, dopiero teraz do mnie dotarło że by zamknąć dowolną apkę trzeba/wystarczy pociągnąć z bardzo lewej strony w prawo... wcześniej usypiałem zegarek przykryciem ekranu....

Nawigacji się też innej spodziewałem, bardziej na zegarku, mniej na telefonie ;-)

Na razie nie jestem jakoś szczególnie zachwycony.


Podobne postybeta
Moto 360 i Android Wear po 3 dniach - zaczynam dostrzegać zalety ;-)
Zegarek z instrukcją ;-)
Moto 360 i Lollipop na Nexusach
Knigi dobre :-)
Pebble to zapewne przyszłość... bo mi się nie podoba ;-)

sobota, października 11, 2014

Po roku...

Po roku życia bez Windowsa* stwierdzam, że się da i nie jest to wcale takie trudne.
Moim kolejnym systemem będzie zapewne OS X, ale jeszcze pewnie z rok pomieszkam na Linuksie.

Nexus 5 po roku jest nadal genialny.
Najlepszy telefon jaki miałem do tej pory.

Nowa praca nie spełniła moich wymagań, źle chyba do tego podszedłem. Inna sprawa, że mimo wszystkich minusów dobrze, że zmieniłem pracę bo wiele moich frustracji z nowej pracy wynika ze skostnienia w starej ;-)
Nadal kodowanie nie jest tak przyjemne jak było kiedyś...

Filmów dobrych mało.
Gra Endera straszna, zabić tak ciekawą fabułę takim gniotem?
Her słabe, więcej głębi w sprawie człowieczeństwa maszyn jest w Terminator: Kroniki Sary Connor... jeśli miał to być zaś film o samotności człowieka we współczesnym świecie to też nie wyszło.
Grawitacja - genialna, aż żałuję, że nie poszedłem na to do IMAXa.
Lucy - wtopa na całej linii. Luc Beson ze swoją historią z Piątym Elementem (ze słabą aktorką), Leonem Zawodowcem i paroma innymi filmami, plus ze Scarlett Johanson powinien stworzyć coś nieziemsko ciekawego.... a powstał nudny gniot z fabułą tak prostą jak program wyborczy PSL (Furmanka piniędzy dla każdego członka Naszej Partii!)
Igrzyska Śmierci 2 - całkiem niezłe mimo braku towarzystwa w trakcie oglądania, które to towarzystwo było przy oglądaniu Lucy, za co się towarzystwo będzie mścić (co mogę napisać bo i tak nie przeczyta, a jak przeczyta to się nie przyzna ;-)).

Z nowej muzyki, chyba tylko Ladytron, a i tak tylko kawałki. OK, nowa płyty Kate Perry czy Eminema całkiem fajne.

Nowe książki.... się zastanawiam i nic nowego mi nie utkwiło w pamięci, tylko nowy PTerry... OK, nowy cykl Orsona Scott Carda - The Gate Thief, aż się trzeciej części nie mogę doczekać.
Ale nic nowego w okolicach kalibru Paragrafu 22 (który to poznałem w Motoroli ;-)).

OK, mieszkanie kupiłem, to się zmieniło i to głęboko ;-)

A jeszcze Polymer. Technologia w której się zakochałem, acz jej używanie idzie mi opornie ;-)

* - de facto rok bez Windowsa w pracy, w domu to dopiero od lipca i mi brakuje Windowsa bo czasem chciałbym zagrać "w samoloty".


Podobne postybeta
Komputer dla mamy
Chromebook w praniu, czyli tam i z powrotem, Kraków - Londyn - Kraków w 30 godzin
Niechciejśpizm
Jak oni to dowiozą? ;-)
Filmy "komputerowe" ;-)

sobota, września 27, 2014

Najkrótsza droga do przyszłości - Polymer ;-)

Sieć Web urodziła się tak między 1989 a 1991 rokiem, kiedy to Tim Berners-Lee opublikował "HTML Tags".
Dwa lata później Internet Engineering Task Force opublikowało draft pierwszej wersji specyfikacji HTMLa, a NCSA zbudowało pierwszą popularną przeglądarkę internetową wspierającą HTMLa.

HTML był wielki.
Był prosty i elegancji. Świetnie nadawał się do tego do czego go zaprojektowano czyli do dzielenia się dokumentami i linkowania między nimi. To drugie znalazło nawet swoje miejsce w nazwie, bo HTML to nic innego jak HyperText Markup Language, czyli język znaczników do tworzenia hypertekstu. A ten hypertekst to właśnie możliwość wskazywania na inne dokumenty.

Mniej więcej w tym samym czasie czyli w 1993 roku pojawiły się pierwsze sytuacje gdzie dokumenty przestały wystarczać.
Pojawiła się specyfikacja CGI, która pozwalała na uczynienie stron "dynamicznymi", chociaż bardziej po prostu zmiennymi.
Chwilę później powstał PHP.

W 1995 do Netscape Navigatora dohackowano język skryptowy, podobno zajęło to tydzień czy dwa.
Język nazywał się przez chwilę Mocha, następnie LiveScript by w końcu zostać JavaScriptem.

Na początku służył do różnych mało istotnych rzeczy, pokazywania czasu od ostatniej zmiany strony, animowania elementów (wtedy gadał z pradziadem DOMa).

Ale w 1999 w Microsoftcie powstał XMLHttpRequest, wtedy się jeszcze inaczej nazywał, ale pojawił się pierwszy w miarę wygodny sposób "gadania" z JavaScriptu z serwerem.
Były też inne sposoby, ale XMLHttpRequest był najprostszy.

Zaczęły się czasy AJAXu... chociaż nikt tego nie zauważył do kwietnia 2004 roku gdy pojawił się GMAIL ;-)

W 2000 roku DOM na tyle dorósł, że pojawił się DOM Level 2.

No i od wtedy niewiele się zmieniło.

Pojawiały się nowe specyfikacje HTMLa, przez chwilę chciano go już nawet porzucić i zastąpić bardziej informatycznym XHTMLem (co się nie udało), wrócono znów do HTMLa w postaci HTML5.

Ale to były standardy, a rzeczywistość poszła przez dobudowywanie frameworków.
Ponieważ podstawowy framework jakim był DOM był implementowany różnie w różnych przeglądarkach zaczęły pojawiać się abstrakcje ukrywające DOM, pojawiło się jQuery, później AngularJS i inne.

W 2006 roku Google stworzyło GWT i miejmy nadzieję, że ktoś im to kiedyś wybaczy ;-)

Ale to wszystko było tylko próbami łatania tego co pojawiło się między 1991 a 2000 rokiem.

Przez to współczesne aplikacje wyglądają tak:


Są niczym innym jak zbiorowiskami DIVów (zwanymi ładnie po angielsku DIV Soup), w których istnieje jakaś hierarchia, ale nawet autorzy takich stron nie potrafią czytać kodu który interpretuje przeglądarka.

HTML/JavaScript stają się swoistym assemblerem, którego nikt zbyt dobrze nie rozumie i wszyscy dotykają się z nim przez różne fasady, które ukrywają pod sobą to co tam się dziej....

Nie jest to fajne.

Dlatego parę lat temu pojawiła się idea Web Componentów.

Web Components składają się z 4 oddzielnych specyfikacji.

Pierwszą są Custom Elements, które są niczym innym jak daniem programistom możliwości używania i tworzenia nowych elementów HTMLa.

Dzięki temu chcąc zobaczyć mapę Google w naszym kodzie możemy mając "gdzieś" zdefiniowany nowy tag użyć go:

To pozwala już zrobić zresztą wiele frameworków, które nie używają web componetów, np. AngularJS.

Drugą rzeczą, która składa się na Web Components są HTML Imports.

Od dawna tworząc stronę można było w niej wskazywać oddzielne pliki w których były skrypty JavaScript albo arkusze stylów CSS:


Jednak nie dawało się tego zrobić z HTMLem....

Do tego trzeba było używać rozwiązań server side takich jak np. JSP:


Ale dzięki HTML Imports teraz już nie trzeba tak kombinować, można użyć po prostu importu na HTMLu:

Trzecim filarem są szablony, czyli Templates.

Dzięki nim można dodawać do HTMLa fragmenty, które nie będą renderowane, ani nawet interpretowane.
Jeśli w dokumencie wstawimy kod:


<img src="http://example.com/image.jpg">

To przeglądarka nie wykona requestu pod wskazany adres! 

Dzięki temu nie trzeba już będzie robić takich rzeczy jak w AngularJS, czyli np. dodawania dodatkowych atrybutów:


<img ng-src="{{link}}">

Których AngularJS używa by "oszukać" przeglądarkę i by ta nie próbowała ładować obrazka {{link}}.

Ostatnim filarem jest Shadow DOM.

Z zewnątrz wygląda niepozornie:


Jak widzimy, w podglądzie elementów na stronie "nasz" tag, my-map jest widoczny tak jak w źródle jako <my-map>. 
Gdyby przejść przez drzewo DOM to gdy doń dotrzemy nie zobaczymy wśród jego dzieci tagu <style>, <geo-location> i im podobnych.
Dopiero gdy spojrzymy na #shadow-root to dostrzeżemy zawartość naszego taga.
To co jest w #shadow-root jest ukryte przed światem zewnętrznym, samo też nie widzi świata zewnętrznego.
Pozwala to na dobrą enkapsulację komponentów.
Style w całym dokumencie nie robią krzywdy komponentom.

Te cztery rzeczy pozwalają na tworzenie Web Componentów.

Ale używanie Web Components jest dość nieprzyjemne gdy robi się to bezpośrednio.

Dodatkowo wszystkie te 4 specyfikacje na dzień dzisiejszy implementuje tylko Chrome i Opera (przez to, że używa Chromium), Firefox wspiera natywnie tylko Custom Elements i jego zespół pracuje nad HTML Imports.

Wiemy więc, że przyszłość będzie słodka, ale jeszcze nam do niej daleko...

I tutaj pojawia się Polymer ;-)

Czyli biblioteka (bo jak podkreślają frameworkiem jest ciągle DOM), która pozwala na okiełznanie tych 4 specyfikacji w sposób prosty i przyjemny, do tego dodając jeszcze kilak miłych rzeczy takich jak data binidng, layouty, zbiór podstawowych elementów i od niedawna także Paper Elements, czyli elementy UI które pozwalają na tworzenie aplikacji zgodnych z Material Design.

Użycie tagów w Polymerze jest proste.

Wystarczy:
1) tag znaleźć (stworzyć albo znaleźć w tym katalogu tagów, lub w tym)
2) zaimportować
3) użyć

Tworzenie jest także proste.

Zaczynamy od zaimportowania Polymera i powiedzenia jak nazywa się nasz tag:


1
2
3
4
5
6
7
8
<link rel="import" href="bower_components/polymer/polymer.html">
<polymer-element name="new-tag">
<template>
</template>
<script>
Polymer('new-tag', { });
</script>
</polymer-element>

Jak widać zaczynamy w pierwszej linii od zaimportowania Polymera (który w tym przypadku jest w katalogu bower_componets/polymer.
W linii 2 mówimy Polymerowi, że mamy nowy tag o nazwie "new-tag".
W linii 3 zaczyna się szablon, który kończy się w linii 4.
W liniach 5-7 mamy kawałek JavaScriptu który rejestruje nasz tag.
W końcu w linii 8 kończymy definicję naszego tagu.

Teraz wypada dodać kod do naszego tagu :-)


 1
2
3
4
5
6
7
8
9
10
11
12
13
14

<link rel="import" href="bower_components/polymer/polymer.html">
<polymer-element name="new-tag">
<template>
<style>
h1 {
color: red;
}
</style>
<h1><content></content></h1>
</template>
<script>
Polymer('new-tag', { });
</script>
</polymer-element>
W liniach 4-8 dodaliśmy styl, a w linii 9 kod naszego tagu.

Jego użycie:
<new-tag>Toster</new-tag>
Spowoduje pojawienie się na stronie:

W drzewie DOM wygląda to tak:

Co się tu dzieje?

Przeglądarka renderując tag <new-tag> wstawiła tekst w <h1> na czerwono.
Za <h1> jest odpowiedzialna linia 9, która mówi tyle by content tagu, czyli Toster wstawić w to miejsce, style w liniach 4-8 mówią zaś, że wszystko co jest w <h1> było czerwone.

Nie jesteśmy oczywiście skazani na wstawianie naszego tekstu tylko w jedno miejsce, możemy użyć <content select="..."> by wybrać to co ma się pojawić.
Gdy użycie tagu będzie wyglądać tak:
<new-tag>
<span>Toster</span>
Urządzenie do tostowania
</new-tag>
A sam tag tak:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
<polymer-element name="new-tag">
<template>
<style>
h1 {
color: red;
}
</style>
<h1><content select="span"></content></h1>
<h3><content></content></h3>
</template>
<script>
Polymer('new-tag', { });
</script>
</polymer-element>
To efektem będzie:

Dzieje się tak ponieważ wszystko co było w <span> zostało złapane przez <content select="span">, reszta zaś trafiła do <content>.
Jeżeli jednak chcielibyśmy by nasz tag był w stanie przyjmować parametry nic nie stoi na przeszkodzie, niech nasz <new-tag> zacznie udawać okrągły obrazek:


Jego użycie wygląda tak:

 <new-tag src="tn_Buffy.jpg"></new-tag>
A sam tag tak:
<polymer-element name="new-tag" attributes="src">
<template>
<style>
img {
border-radius:50px;
}
</style>
<img src="{{src}}">
</template>
<script>
Polymer('new-tag', { });
</script>
</polymer-element>
Tutaj widzimy, że nasz <new-tag> ma atrybut src, który jest ustawiany i jego zawartość jest używana w {{src}}.
Te klamrowe nawiasy {{ }} wiążą się z kolejną  rzeczą, którą daje nam Polymer, czyli z data bindngime i event bindingiem.
Jeśli mowa o eventach to ich użycie jest bardzo proste.
Niech nasz tag teraz udaje licznik:



Co zapewni nam taki kod:


 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<polymer-element name="new-tag">
<template>
<style>
h1 { color: red; }
</style>
<h1>{{counter}}</h1>
<button on-click="{{increment}}">Increment</button>
</template>
<script>
Polymer('new-tag', {
created: function() {
this.counter = 0;
},
increment: function() {
this.counter++;
}
});
</script>
</polymer-element>
Jak widzimy do tagu <button> (w linii 7) przypięliśmy metodę increment, która dokonuje (w linii 15) inkrementacji zmiennej counter.
Data binding to coś co sprawia, że Polymer nabiera kolorów.
Wyobraźmy sobie taki oto kod:
<time-source time="{{time}}"></time-source>
<digital-clock time="{{time}}"></digital-clock>
Gdzie tag <time-source> "emituje" coś do {{time}}, a <digital-clock> to "konsumuje".
Oczywiście ta emisja i konsumpcja to coś umownego, oba tagi mogą robić obie te rzeczy.

Jeśli nasz tag chce reagować na zmianę atrybutu to musimy dodać doń metodę nazwaParametruChanged, czyli dla time to będzie timeChanged:

      timeChanged: function() { }

Tu zapraszam na mojego GitHuba by obejrzeć to dokładniej.
Kolejną rzeczą, którą dodaje Polymer są layouty....

To jest akurat rzecz, której nie do końca należy jeszcze używać bo się zmieniają.

Ale istota jest taka, że Polymer dodaje zbiór atrybutów które można stosować przy wszystkich wizualnych elementach tak, że są odpowiednio ustawiane na ekranie.
Tu odsyłam do strony Polymera, bo lepiej to tłumaczą.
Do tego wszystkiego Polymer dostarcza zbioru podstawowych elementów.
Są to tak elementy graficzne jak np. <core-icon>, który dostarcza ikonki (może to być nasz obrazek lub jedna z dostarczonych ikon), jak i elementy nie graficzne, takie jak np. <core-localstorage> czy <core-ajax>.

Przykładem takiego niewizualnego tagu jest tag, którym się tu już kiedyś dzieliłem czyli tag <geo-location>:
<polymer-element name="geo-location" attributes="lat lon auto">
<template>
<style>
:host {
display: none;
}
</style>
</template>
<script>
Polymer('geo-location', {
lat: 0.0,
lon: 0.0,
created: function() {
if (this.hasAttribute("auto")) {
this.getLocation();
}
},
getLocation: function() {
var t = this;
function updatePosition(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
t.lat = lat;
t.lon = lon;
}
navigator.geolocation.getCurrentPosition(updatePosition);
}

});
</script>
</polymer-element>
Tag ten ma trzy atrybuty, z czego w lat i lon znajduje się geolokalizacja komputera, a auto służy do włączenia taga. Dodatkowo tag ma metodę getLocation(), którą na nim można zawołać tak jak to się robi w JavaScript'cie.
Czyli najpierw mamy:

<geo-location auto id="loc" lat="{{lat}}" lon="{{lon}}"></geo-location>

A później w skrypcie:
this.$.loc.getLocation();
Jak widać używamy tutaj "czystego" JavaScript'u.

Do tego wszystkiego Polymer dostarcza teraz zestaw elementów UI zgodnych z Material Design.

Polymer dostarcza także warstwę pośrednią, która sprawia, że wszystkie te smakołyki działają na wszystkich wiodących przeglądarkach (zwykle 2 wersje w tył).
Na Chrome i Operze są wspierane natywnie, na innych dopóki nie będą wspierane natywnie są wspierane przez wypełniacze.

Było to dość długie, ale chyba warto ;-)

A ja sobie przygotowałem chociaż jakąś wizję mojej prezentacji (bo poprzednia wersja mi się nie podobała ;-)) o Polymerze.




Podobne postybeta
Data binding w Polymerze jest oszukany ;-)
Jak "okradłem" Google Readera ;-)
Robimy widget do Windows 7 :-)
Z NMEA do KML (chyba najbardziej kryptyczny tytuł postu jak stworzyłem ;-))
AppInventor - pierwsze wrażenia i pierwsze programy :-)

poniedziałek, września 22, 2014

Do czego służy software?

Gdyby tak popatrzeć z góry to są dwie kategorie oprogramowania.
Takie, które służy do odbierania ludziom pracy.
Takie, który służy do odbierania ludziom czasu/pieniędzy.

Ideałem jest więc stworzenie najpierw softu, który odbierze komuś prace, a później softu, który odbierze mu czas który zyskał ten ktoś dzięki temu odebraniu mu pracy.

Coś jakby pracownik Microsoftu po stworzeniu Excela przeszedł do Facebooka ;-)

Teoretycznie może jeszcze istnieć trzeci rodzaj oprogramowania, takie które pomaga i pozwala robić rzeczy potrzebne, a niemożliwe do zrobienia bez komputera.

Wróćmy jednak do realnego świata.

Pierwszy rodzaj softu służy do odbierania ludziom pracy.

To soft, który sprawia, że jedna osoba jest w stanie wykonać więcej pracy w tym samym czasie.
Arkusze kalkulacyjne, edytory tekstu, CRMy, programy do fakturowania, soft do content managementu.
Wszystko co sprawia, że dziś nawet leniwy pracownik wykonuje pracę równą pracy kilku osób sprzed powiedzmy 50-100 lat.

Ktoś widział np. ostatnio rachmistrza?

Sam w poprzedniej firmie słyszałem, że po 2008 roku i kryzysie skoczyła nam sprzedaż bo firmy wolały wydać po kilkaset USD rocznie na soft w ramach SaaS, niż kilkadziesiąt tysięcy USD na pracowników, stąd zwalniali ludzi i brali subskrypcje naszego softu by ci którzy zostali byli w stanie obsłużyć taką samą, albo i większą liczbę klientów.

Drugi rodzaj softu, służy do odbierania czasu/pieniędzy.

To soft, który sprawia, że zamiast zająć się czymkolwiek innym siedzimy przed komputerem i jedynym tego wynikiem jest to, że straciliśmy trochę czasu lub pieniędzy.
Gry, sieci społecznościowe, portale ze śmiesznymi obrazkami, YouTube, platformy blogowe i całe tałatajstwo gdzie ludzie klikają lub piszą w celach niezarobkowych.

Kto nie stracił paru godzin łażąc po sieci?

Trzeci rodzaj softu, czyli ten który wg. teorii powinien pomagać i pozwalać robić rzeczy potrzebne, a niemożliwe do zrobienia bez komputera....

Jakoś nie umiem znaleźć przykładów, acz wydaje się, że coś powinno do tej kategorii wpadać.
O! Może soft do MRI, albo tomografu komputerowego....

Jeśli jednak zaniedbamy tą trzecią, teoretycznie istniejącą grupę to widzimy, że soft podchodzi nas z obu stron.

Każdego w końcu z którejś dopadnie (a docelowo pewnie dopadnie z obu stron).
To tylko kwestia czasu....

Jak więc widać soft służy do tego by odebrać co się da ludziom....

Mimo tego lubię programować, co tylko dowodzi tego, że bycie programistą to bardzo trudny pod względem etycznym zawód ;-)


Podobne postybeta
Drony listonosze...
Ewolucja technologii i obyczajów w SF
Windows 8 po kilku dniach
Kryzys użyteczności
Rozluźniać, czy nie rozluźniać?