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 ;-)
Polymeryzacja AngularJS ;-)
ToDo od Trello jako "oddzielna aplikacja"
Robimy widget do Windows 7 :-)
Jak "okradłem" Google Readera ;-)

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
Pensje programistów
Kryzys istotności ;-)

niedziela, września 21, 2014

Windows mnie jednak nie lubi ;-)

Zachciało mi się Windowsa.
Ale Windows od Asusa, który jest przypisany do mojego laptopa nie ma jakoś ochoty pójść na SSD, które dostał laptop.
Stąd na SSD jest Ubuntu, którego używam na co dzień, a na HDD leży Windows 7, którego nie używam.

Napisałem do Asusa z pytaniem jak mogę przenieść Windowsa z HDD na SSD, poradzili jakiś program Asus AI Recovery.

Dziś postanowiłem sprawdzić jak to działa.

System po bardzo długim uruchamianiu w końcu się uruchomił.
Spróbowałem poszukać Asus AI Recovery, bez sukcesu.

To zrobiłem to w Internecie i z jakiejś strony pobrałem EXE... co było błędem ;-)

Bo nie zauważyłem, że to jest downloader.

Oczywiście zaśmiecił Windowsa, podmienił stronę startową w przeglądarce, dograł Operę, dodał jakiś program do traya.
W Windowsie standard... jednak z powodu paru miesięcy poza światem Windowsa zapomniałem o tych urokach i przez przypadek pobrałem downloader.

W końcu okazało się, że program mam i tak, ale się nie uruchamia.
Postanowiłem zresetować Windowsa by dać programowi jeszcze jedną szansę.

Oczywiście restart zaczął się od "1 z 28 aktualizacji, nie wyłączaj komputera i nie odłączaj zasilania".
Po chwili zrobiłem 5 sekundowy Power Down, po czym odpaliłem komputer i wróciłem do Ubuntu....

Windows mnie jednak nie lubi ;-)

Następnym krokiem będzie próba napisania do Microsoftu z pytaniem jak mógłbym zainstalować Windowsa, gdy mam go na partycji recovery, ale wtedy instaluje się tylko na HDD, a ja chciałbym na SSD ;-)


OS X'ie chyba przybywam ;-)


Podobne postybeta
Chromebook jednak żyje :-)
Dyski vs ja - 1:0 ;-)
Dowcipny laptop ;-)
Wygląda na to, że Windows nie jest mi pisany ;-)
EEE PC 900 - warto rozszerzać czy nie? ;-)

Smile Challenge - zapraszam do testów ;-)

Od paru dni testuję Smile Challenge i chyba działa ;-)

Jakby ktoś chciał potestować to Smile Challenge można sobie pobrać z Chrome Web Store.

Nie wymaga żadnych pozwoleń, a działa tak, że kilka razy w ciągu dnia stawia wyzwanie by uśmiechać się przez pewną (losową) ilość sekund.

Kod dostępny jest na moim GitHub'ie, o tutaj.


Podobne postybeta
Smile Challenge ;-) - takie tam MVP
Irracjonalna malpa ;-)
Lekki przesadyzm ;-)
Test z Asus EEE Pad Transformer
Duże obrazki...

czwartek, września 18, 2014

Bloggeroid na Chrome OS - to działa... czasami ;-)

Dzięki narzędziu, które pozwala na wrzucanie na Chrome OS nie do końca oficjalnych wersji aplikacji Androidowych, udało mi się uruchomić na moim Chromebooku Bloggeroida (czyli moją aplikację dla Androida).


Jak widać działa, chociaż korzystanie z aplikacji jest mniej przyjemne niż na urządzeniach dotykowych czy nawet przy pomocy klawiatury na EEE Pad Transformerze.
Głównie chodzi o prawie widoczne opóźnienie między wciśnięciem klawisza, a pojawieniem się znaku na ekranie, słabym wsparciu dla operacji tekstowych w stylu wklej/wytnij i na tym, że jednak aplikacja nie otwiera się na cały ekran.

Nie wszystko działa też dobrze, albo w ogóle ;-)
Próba połączenia się z kontem zarejestrowanym na Chromebooku kończy się problemami ;-)


Ale i tak jest dobrze, skoro już teraz można uruchamiać inne aplikacje niż te wybrane i przygotowane przez Google, to pewnie zbliża się moment, gdy swobodnie będziemy mogli sami decydować której apki używać w wersji webowej, a której w Androidowej.
A w przyszłości może to wszystko zacznie działać też na innych systemach, gdzie jest Chrome? ;-)


Podobne postybeta
Android nie taki zły ;-)
Windows 8 - błeee, ciągle błeeee
Programowanie na Chromebooku :-)
Mój Chromebook marzeń
Nowy potworek na tapecie ;-)

wtorek, września 16, 2014

Smile Challenge ;-) - takie tam MVP

Uśmiechanie się, nawet jeśli nie jest nam wesoło poprawia humor i samopoczucie.

Ale człowiek zwykle jak mu źle zapomina o uśmiechu.

Wtedy w sukurs przychodzi technologia ;-)

W ciągu ostatniej godziny popełniłem rozszerzenie do Chrome o nazwie Smile Challenge :-)

Działa ono tak, że co jakiś czas (od 30 minut do półtorej godziny) stawia nam wyzwanie (zmienia się liczba przy uśmieszku), jeśli je zaakceptujemy to zaczyna nam rozszerzenie w dół odliczać sekundy.
Jeśli zaakceptujemy więcej wyzwań to czas uśmiechania rośnie ;-)

Jeśli ktoś chce obejrzeć jak to działa to na moim GitHubie są źródła, których można użyć do zabaw w Chrome.

Ktoś chętny do testowania? ;-)


Podobne postybeta
Smile Challenge - zapraszam do testów ;-)
Bad, bad server. No donut for you.
Marznąca mgła
Czy jest dziś sobota? ;-)
Klauzula samoluba?

piątek, września 12, 2014

Transhumanizm [długo i nudno ;-)]

Maszyny zaczną myśleć.
To pewnik. Pytaniem nie jest "czy?", a "kiedy?".

Powstrzymać je przed tym może tylko wcześniejsza zagłada ludzkości.

Jeśli zaczną myśleć to szybko nabiorą zdolności do samodoskonalenia.
Możliwe, że pierwsza maszyna zdolna do myślenia jak człowiek będzie wielkości stadionu piłkarskiego, ale jak się jej dobuduje drugi taki to będzie miała moc równą dwóm ludzkim mózgom, wtedy będzie w stanie zmniejszyć swoje rozmiary o trochę, np. o połowę, ale będzie mogła przy zachowaniu swojego rozmiaru zwiększyć swoją moc czterokrotnie w porównaniu do początku, takich iteracji będzie możliwe wiele.

W końcu maszyna czy też raczej maszyny będą od nas mądrzejsze.

Mogą dojść do wniosku, że trzeba dbać o ludzi, pomagać im, a samemu zajmować się rzeczami ważnymi.
Poznawać prawa natury, eksplorować kosmos, szukać innej inteligencji we wszechświecie.

Ludzkość zostanie zepchnięta do rezerwatu w którym będzie sobie mogła istnieć, ale każdy jej postęp i wynalazek będzie zacofany w stosunku do tego co wynajdą maszyny.

Stanie się kolonią mrówek stojącą na stole maszyn.

Tego się raczej nie da powstrzymać.
Natura potrzebowała na Ziemi co najwyżej 4.5 mld lat na to by zaistniała na drodze ewolucji inteligencja.

Tylko kwestią czasu jest to kiedy zbudujemy, albo zainicjujemy myślące maszyny. Skoro naturze się to udało w 4.5 mld lat, nam powinno zająć to mniej czasu, może milion razy mniej, może 100 milionów razy mniej.
Nie jesteśmy raczej w stanie powstrzymać prac prowadzących do celu, którym są myślące maszyny.

Mózgi biologiczne mają pewne ograniczenia wielkości wynikłe z ich budowy i są nawet naukowcy sugerujący, że nasze mózgi są bliskie tych ograniczeń.

Maszyny nie powinny mieć tego problemu, przynajmniej tak wcześnie.

Mamy przekichane.

Chyba, że się przyłączymy do maszyn, że będziemy starali się połączyć z nimi w celu zrobienia upgrade'u człowiekowi.

Już to zresztą robimy.

Naprawiamy ludzi, którzy doznali w wypadkach ran prowadzących do utraty kończyn, przywracamy słuch, naprawiamy wzrok.
Sterujemy sercem gdy szwankuje, usuwamy szum w mózgu blokując problemy z ruchem.

Od tego jest krok w kierunku rozszerzania naszych możliwości.

Protezy oczu, które przekazują obraz do mózgu są jeszcze niemożliwe, ale najprawdopodobniej są kiedyś możliwe.
Od nich już krok to oczu z zoomem, albo takich które pozwolą patrzeć w podczerwieni czy w po prostu szerszym spektrum (nawet jeśli dla potrzeb mózgu będzie musiała być ta skala "barw" rzutowana na barwy widzialne).

Już teraz próbuje się zwiększać możliwości mózgu (czasowo) przez traktowanie mózgu słabym prądem.
Krok stąd do implantów, które byłby w stanie zwiększać pewne możliwości mózgu "na żądanie".

Trzeba przyłączyć się do maszyn, użyć ich do zwiększenia naszych możliwości.
Sprawić by "nie opłacało" się budować maszyn, które zachowywałyby się irracjonalnie. Od tego powinniśmy być my.

Taki rozszerzony człowiek powinien być w stanie współpracować z maszynami i chociaż przez dłuższy czas być im równym.

Może wtedy taki rozszerzony człowiek zobaczy coś co dała nam ewolucja co będzie dawało mam nadrzędną rolę w takim węglowo-metalowym układzie?

P. S.
Btw uczuć, które moglibyśmy wnieść do układu... Raczej nie są trudne do powtórzenia, w końcu mają nawet bardziej znaczące uzasadnienie ewolucyjne niż np. zdolność do wymyślenie rachunku różniczkowego ;-) nie przeceniałbym ich wkładu.


Podobne postybeta
Język a postrzeganie rzeczywistości
Terminatorowa refleksja ;-)
Cyfrowa partenogeneza
Czemu filmowe AI jest prawie zawsze tak bardzo tępe?
Rankingi, to nie takie proste ;-)

środa, września 10, 2014

O wyższości aplikacji natywnych nad tymi w HTML5 - od strony developera

W ramach zabaw z Polymer'em napisałem sobie "aplikację".

"Aplikacja" służy do zapisywania ciekawych punktów na mapie :-)
Nieraz idąc gdzieś coś zauważałem i chciałem móc jakoś zapisać ten punkt by go później sprawdzić w sieci (np. w Wikimapii, albo po prostu obejrzeć jak to wygląda z góry).
Nie miałem jednak żadnego narzędzia do tego (możliwe, że w marketach są ich tysiące, ja nie lubię szukać w marketach bo to jest nudne).
Dlatego sobie napisałem takową "aplikację".

Nie jest to the most needed app w historii ;-)

Ale jest ciekawa na tyle by spróbować ją popełnić w jakiejś formie ucząc się nowej technologii.

Popełniłem ją więc w Polymer'ze.

Prezentuje się dość skromnie:



Działa też tak sobie, bo to taki prof of concept ;-)
Co można sprawdzić tutaj. (btw. here czy tutaj muszą być jednymi z najmniej istotnych słów w linkach ;-))

Ale szczegół jak wygląda i działa "aplikacja".

Ciekawsze jest to, że przez sam fakt bycia HTML5 jest strasznie nieprzyjemna od strony developera gdy chce się ją "wypuścić".

Trzeba mieć serwer web.

Gdyby to była aplikacja natywna zrobiłbym APK, wrzucił na jakiś serwer, albo do Google Play.
W przypadku HTML5 musiałem na serwer wrzucić kilkadziesiąt plików.

To co jest największą zaletą Internetu, czyli podzielenie na pliki co pozwala na pobieranie tylko tego co jest potrzebne i w razie potrzeby na zmianę tylko tego co jest potrzebne, jest też największą wadą bo wymaga posiadania infrastruktury.

Trudno używać ficzerów platformy.

Chciałbym móc jakoś przesłać lub podzielić się ciekawymi punktami.
W Androidzie zrobiłbym Share i by wszystko działało, w HTML5 to nie przejdzie ;-) [bo zabili web intents... do teraz nie wiem czemu].
Na razie dla HTML5 udało mi się wymyślić wrzucenie do schowka, albo użycie mailto (które jest deprecated), ale jeszcze ich nie zaimplementowałem.

Wszystko "pachnie" webem.

Co prawda użyłem tutaj Paper elementów, które wspierają Material Design to nadal cała aplikacja wygląda bardzo webowo.

Ale są i zalety :-)

Zaletą jest to, że taka "aplikacja" działa praktycznie wszędzie ;-)
Do tego takie coś jednak łatwiej napisać, szczególnie używając Polymera.

Jak dla mnie HTML5/JavaScript + Polymer to teraz genialne narzędzie do testowania pomysłów i robienia prototypów.

Stąd następny w kolejce jest Bloggeroid w takiej wersji ;-) acz wątpię w jego sukces bo API dla Bloggera nie dodaje specjalnych nagłówków, które pozwoliłyby realizować AJAXowe odwołania do serwerów z innej domeny.


Podobne postybeta
Data binding w Polymerze jest oszukany ;-)
Dajcie mi język marzeń ;-)
Najkrótsza droga do przyszłości - Polymer ;-)
Galileoskop
Raport z emigracji

sobota, września 06, 2014

Czy Macbook Pro jest wart swojej ceny?

Nie.

Nie jest wart. Gdy patrzymy na pieniądze to za mniejsze możemy mieć sprzęt o lepszych parametrach i podobnym designie.

Ale jeśli zadać pytanie ciut inaczej i spytać "Czy warto za Macbooka Pro zapłacić jego cenę?", to odpowiedzią jest "tak" :-)

Cały dowcip polega na tym, że powoli stajemy się na tyle bogaci, że zakup raz na 3 lata laptopa za ~10k PLN* nie jest tak straszny i "zysk" z bezproblemowości w porównaniu do laptopa za 5k staje się kuszący.

Idąc na spotkanie nie musisz brać ze sobą zasilacza.
W plecaku nie musisz obkładać laptopa ręcznikiem czy czymś podobnym.
Wyjmujesz i działa.

Inne też działają, ale cholerny Macbook Pro jest taki jakiś bardziej bezszwowy. Używanie go jest takie bardziej gładkie....

Jakby było fajnie gdyby taki Linux, albo chociaż Windows stały się takie jakieś mniej kanciaste...

Co nie zmienia faktu, że w domu pracuję na Ubuntu (bo Windows od Asusa nie daje prostego sposobu przeniesienia się na SSD) i jest całkiem fajnie.
Ale w pracy miałbym problemy z powrotem do Linuksa z OS X ;-)



* - od razu zaznaczam, że mówię z perspektywy kogoś kto potrzebuje z racji zawodu/hobby sprzętu który jest wydajny i którego można bez zbytniego trudu używać przez powiedzmy 10 godzin w ciągu dnia. Tzw. normalni ludzie nie potrzebują takiego sprzętu.


Podobne postybeta
Stare = do zniszczenia?
Konsumpcjonizm - to co tworzy i toczy zachód
Zimowy zastój?
No i nie kupię klawiatury do Transformera
Światełko w tunelu :-)

poniedziałek, września 01, 2014

Kilka myśli ;-)

Kilka myśli na dziś ;-)

Pierwsza, że wodoodporny Kindle byłby największym wynalazkiem w dziejach ludzkości ;-)
W końcu można by było bezpiecznie połączyć kąpiel z czytaniem ;-)
Choć może z drugiej strony, odebrałoby to czytaniu w wannie ten dreszczyk emocji? ;-)

Drugie, wyciek fotek gwiazd.
Od dawna wydaje mi się, że Google i Apple powinny dodać do swoich systemów kawałki, które wykrywałyby "nagie fotki" (a umieją to robić, oj umieją) i nie synchronizowałyby ich automatycznie, a pytły usera czy jest na 100% pewien.
Ba, nawet mogłoby to działać podobnie jak rozpoznawanie obiektów w Google Gogle, czyli w momencie zrobienia zdjęcia, które mogłoby podchodzić pod "nagą fotkę" powinno pokazywać notyfikację.
Tak, byłoby to trochę creepy, tak ludzie mogliby zacząć wyłączać synchronizację zdjęć, ale w dłuższej perspektywie panowałoby większe zaufanie.
Bo nagim fotkom mówię zdecydowane, stanowcze "być może" ;-) ale tylko wtedy jeśli ich bohaterki (albo bohaterowie, ale tym mówię "nie, dziękuję" ;-)) same chcą je komuś pokazać.

Trzecie, apartamenty.
Lekko mnie śmieszy, ale też powoli wkurza jak czytam, że miejsce gdzie będę mieszkał to "apartamenty".
Dla mnie to jest blok, nie apartamentowiec.
Chciałbym mieszkać w apartamentowcu, ale to "ciut" wyższa liga.
A tu jest film z moim blokiem ;-)




Podobne postybeta
O rośliny, zwierzęta, urządzenia i relacje z innymi ludźmi trzeba dbać ;-)
Do chudości przez szantaż
Selfhacking ;-)
Roboty i Android...
Mroczne Materie - polecam, gorąco polecam :-)