środa, lutego 25, 2015

Jak zajrzeć w przeszłość? ;-)

Jest sposób, każdy ma w domu urządzenie, które może do tego posłużyć.
W mojej konfiguracji mogę nawet dość wygodnie sterować zaglądaniem w przeszłość, bo mogę zajrzeć w przypadku sięgania głębiej w przeszłość prawie 7 razy dalej niż w normalnej konfiguracji.
Jeśli chodzi o konkrety to mogę zajrzeć przy pomocy mojego urządzenia od 2 do 13 ns w przeszłość ;-)
A jak?
Wystarczy, że pójdę do łazienki i otworzę drzwi, wtedy widzę świat sprzed 13.37 ns, gdy podejdę bliżej do mojego urządzenia to widzę świat nawet sprzed 2 ns.
To urządzenie nazywa się lustro, a wzór opisujący "cofnięcie w czasie" to:
czas=odległość od lustra * 2/ prędkość światła
Ba, gdy wyjdę na balkon to widzę nie do końca dokładny, ale jednak obraz pokazujący jak wyglądały moje okna 130 ns temu ;-)

#toBlogger  

[Go to original post on Google+]




Podobne postybeta
Mini bug w Google Analytics?
Chyba w końcu przejdę na ciemną stronę - otworzę sobie linię kredytową ;-)
Nieznane skarby JDK - JConsole :-)
1 plus braku tramwaju ;-)
N niefartów ;-)

poniedziałek, lutego 16, 2015

Wolność

Kiedy człowiek jest wolny?
Np. wtedy gdy ma jeszcze do przejechania najmniej 130 km, a widzi, że mu szyba w samochodzie pękła.
Nie wiadomo ile wytrzyma, czy zaraz poleci na Ciebie strumień szkła, czy wszystko się będzie trzymało.
Nie masz żadnego wpływu na to co się stanie. Możesz tylko się zatrzymać, albo jechać dalej.

Najpierw się denerwujesz, ale później puls spada Ci do tych 60-70 uderzeń na minutę (co można tłumaczyć jazdą powyżej 120 km/h), bo przecież nic od Ciebie nie zależy.
Dojedziesz, albo nie dojedziesz.
Tylko tyle. Bez żadnego wpływu na to co się stanie jesteś wolny w tym aspekcie swojego życia.
Żadne Twoje działanie nie ma wpływu na to co się wydarzy.
Tylko jedziesz, kilometry uciekają, rysa błyska (i nie wiesz nawet czy rośnie, czy nie), co jakiś czas przejeżdżasz palcem po rysie, ale jej nie czujesz, bo pęknięcie jest w środku szyby.

Na początku jeszcze różne podskoki samochodu Cię denerwują, ale po chwili dociera do Ciebie, że nie masz wpływu na to czy kolejny podskok rozwali szybę dokumentnie, czy nie.

Po głowie chodzą Ci różne scenariusze i kołacze się pocieszająca myśl, że przednia szyba jest lepiona, nawet jak coś pójdzie nie tak to rozleci się w drobny mak i nic Ci nie zrobi.

I jedziesz dalej i jesteś wolny...

Do czasu, aż dojedziesz.
Bo wtedy wiesz, że Twoja wolność się skończyła mi trzeba załatwić wymianę przedniej szyby.

Nie wiem jak Wy, ale ja muszę wymienić przednią szybę ;-)


Podobne postybeta
Odsłaniać okna na noc w gorące noce, czy nie odsłaniać? Oto jest pytanie....
Lubię tramwaje :-)
Post pierwszy - czy wiesz o czym wie, lub może wiedzieć Twój telefon? ;-)
Przemyślenia autostradowe
Nexus 4 - pierwsze wrażenia

wtorek, lutego 03, 2015

Praca na stojąco - wersja pro ;-)

Kiedyś już próbowałem pracować w domu na stojąco, ale nie do końca mi to wychodziło, głównie z powodów technicznych.

Od jakiegoś czasu mam jednak biurko, które potrafi zmieniać wysokość.


Prezentuje się tak jak to widać na zdjęciu powyżej.

Nie do końca wiem czy to jest spowodowane tym, że na razie mam takie sobie krzesło do pracy z komputerem ;-), czy tym że zdecydowanie preferuję pracę na stojąco, ale jakoś chętniej pracuję na stojąco niż na siedząco ;-)
W założeniu miałem codziennie tak po 22 z godzinę postać, ale zdarza się często, że o wiele wcześniej przełączam biurko w tryb stojący i koduję.
Siedzę głównie oglądając coś na YouTube (np. ten kurs Design Patternów, który jest pierwszym przy którym nie zasypiam.... taki hint tajemnica tkwi w oglądaniu go z 1.5x prędkości ;-)), albo czytając.
Programowanie mi na razie naturalniej przychodzi na stojąco.

Największą wadą biurka w trybie pracy na stojąco jest to, że kable wyglądają o wiele ohydniej niż normalnie ;-)


Podobne postybeta
"Praca" na stojąco i Chromebook - to działa :-)
Praca z komputerem na stojąco...
Nie rozumiem, czyli czemu niektórzy ludzie pytają jak przejść z Windows 7 na XP?
Zła TV ;-)
Imperialna Ziemia - dobra książka

Ciągle piszemy....

Moje dzisiejsze "dzieło" wygląda tak:


Pomysł jest kolegi, chodzi o aplikację na Android Wear, która pokazuje aktualny adres (ile ja musiałem się nastać na balkonie by złapać fixa do GPSa, który wskazał jakiś bliski adres to moje ;-)).

Pierwsze podejście było naiwne, cała aplikacja znajdowała się na zegarku....
Pobieranie lokalizacji działało, ale niestety Geocoder nie jest obecny w Android Wear i wyniki wyglądały tak:


Mało informacyjnie ;-)

Teraz więc jest tak, że w momencie uruchomienia aplikacji na zegarku (dokładniej gdy aktywność ma onResume) zegarek wysyła komunikat do podpiętych node'ów (czyli do telefonu) z prośbą o /address przy pomocy Wearable.MessageApi.sendMessage, telefon na taką wiadomość, którą odbiera dzięki serwisowi rozszerzającemu WearableListenerService pobiera lokalizację, gdy ta się pojawi to przesyła ją do Geocodera, a zwrócony adres wysyła znów przy pomocy sendMessage do zegarka, który słucha dzięki zarejestrowaniu listenera....
Trochę to pomotane, ale okazuje się, że można dość fajnie się komunikować między werablem a urządzeniem mobilnym.


Podobne postybeta
Moto 360 i Android Wear po paru godzinach używania....
Piszę sobie...
Moto 360 i Android Wear po 3 dniach - zaczynam dostrzegać zalety ;-)
Dalsze walki Androidowe
Post pierwszy - czy wiesz o czym wie, lub może wiedzieć Twój telefon? ;-)

niedziela, lutego 01, 2015

Piszę sobie...

Piszę sobie swoją pierwszą aplikację na Android Wear.

Na razie tyle widać na ekranie ;-)


[Tak, to jest ręka, moja ręka, braki w owłosieniu na głowie kompensują się na rękach ;-)]

Na emulatorze wygląda inaczej... czyli tak:


Chociaż ta aktywność jest tylko po to by sprawdzić czy aplikacja działa ;-)
Bo jej samo działanie to wyświetlanie co jakiś czas czegoś takiego:




Na razie wszystko trzymam na zegarku i działa to w miarę znośnie, chociaż pewnie dużo baterii zjada.
Inna sprawa, że w tandemie Nexus 5 i Moto 360, to Moto 360 dłużej jest w stanie pracować na baterii ;-)


Podobne postybeta
Moto 360 i Android Wear po paru godzinach używania....
Moto 360 i Lollipop na Nexusach
Moto 360 i Android Wear po 3 dniach - zaczynam dostrzegać zalety ;-)
Ciągle piszemy....
I znów widziałem The Internship :-)

[Wikipedia fun facts] Coraz więcej stacji kosmicznych

Przynajmniej w filmach ;-)

Okazuje się, że w Wikipedii znajduje się lista filmów w których "występują" stacje kosmiczne.

Zaczęło się od lat 50 i Project Moonbase.
Łącznie w latach 50 były trzy filmy ze stacjami kosmicznymi...
W następnych było więcej:

Lata (dekada od)Liczba filmów
503
606
705
809
9010
200011
20109

Jeśli wszystko pójdzie w latach od 2010 do 2019 tak jak by do tej pory to pod koniec 2019 roku powinniśmy mieć 22, a może i 23 filmy ze stacjami kosmicznymi ;-)
Chociaż fakt powinniśmy odjąć punkty za Grę Endera.... bo to była abominacja, nie film ;-)



Podobne postybeta
Ukradli nam przyszłość....
Nowa pozycja na liście "chcem!" ;-)
"W przededniu" pierwsza książka Orsona Scott Carda, która jest SF ;-)
Jak się profesjonalnie kłamie
Autocenzura

niedziela, stycznia 25, 2015

niedziela, stycznia 18, 2015

Monitorujemy cenę IntelliJ'a ;-)

Używam w pracy IntelliJ, którego darzę silnym uczuciem.
Tak silnym, że w domu też używam IntelliJ'a, ale w wersji Community, która nie jest aż tak fajna jak wersja pełna.

Chciałbym kupić licencję IntelliJ'a, ale z racji wydatków mieszkaniowych obecne 207 euro wydaje się być chwilowo trochę zbyt duże...

Dlatego poluję na promocję, a do polowania na promocję (jeśli się zdarzy) dobrze użyć automatu ;-)

Tutaj takowy w node.js:

var http = require("https");
var nodemailer = require("nodemailer");
var fs = require("fs");

var TO_EMAIL = <your recipent address>;
var FROM_EMAIL = <your sender address>;
var PASS = <your server password>;

var url = "https://www.jetbrains.com/idea/buy/";

function sendEmailWithPrice(newPrice, oldPrice) {
console.log("Sending e-mail about new price "+newPrice);
if (oldPrice) console.log(oldPrice);
var transport = nodemailer.createTransport({
service : "Gmail",
auth : {
user : FROM_EMAIL,
pass : PASS
}
});
var mailOptions = {
from : FROM_EMAIL,
to : TO_EMAIL,
subject : "New price for IntelliJ "+newPrice,
text : "New price for IntelliJ is "+newPrice+(oldPrice?"\nOld price was "+oldPrice:"")
}
console.log(mailOptions);
transport.sendMail(mailOptions);
}

function gotPrice(price) {
var lastPrice;
try {
lastPrice = fs.readFileSync("price.dat");
} catch (e) {
console.log(e);
}
if (price!=lastPrice) {
console.log("Will send e-mail");
sendEmailWithPrice(price, lastPrice);
fs.writeFileSync("price.dat", ""+price);
}
}

http.get(url, function(response) {
var body = "";
response.on("data", function(chunk) {
body+=chunk;
});
response.on("end", function() {
var re = /\<script type=\"text\/javascript\"\>([^<]*)\<\/script\>/g; var tramsStops = [];
while ( res=re.exec(body) ) {
var str = res[1].trim();
if (str.indexOf("var links_json")!=-1) {
str = str.substring(str.indexOf("{"))
str = str.substring(0, str.indexOf("};")+1);
var obj = JSON.parse(str);
var personal = obj.PERSONAL.purchase;
for (var p in personal) {
var price = personal[p].new.regular.price;
console.log(price);
gotPrice(price);
break;
}
break;
}
}
});
}).on('error', function(e) {
console.log("Got error: " + e.message);
});

Biega sobie teraz na moim Raspberry Pi i obserwuje serwer... pewnie szybciej w nim jakiś błąd poleci (bo ich w ogóle nie obsługuję ;-)) niż cena spadnie, ale zawsze można mieć nadzieję ;-)



Podobne postybeta
"Kodowanie" na Chrome OS ;-)
Umiejętność programowania pomaga :-)
Pomnóżmy sobie duże liczby ;-)
Robimy krzywdę GWT ;-) czyli przekazujemy wartość z serwera do klienta, bez RPC ;-)
Kilka rzeczy, które chciałbym zobaczyć w produktach Google...

poniedziałek, stycznia 12, 2015

Polymeryzacja AngularJS ;-)

Polymer mi się bardziej podoba od AngularJS, ale w ramach zabawy spróbowałem dziś w jakiś sposób zasymulować data-binding Polymerowy między custom-elementami w AngularJS.

Ten z AngularJS jest niezły, ale nie działa do końca tak jak bym chciał.
Tzn. sam data-binding działa tak jak bym chciał, ale już w samych dyrektywach AngularJS informacje o zmianie wartości atrybutów nie są propagowane same z siebie, trzeba się na nie zarejestrować.

A chciałbym mieć w kodzie strony:

<geo-emiter lat="lat" lon="lon"></geo-emiter>
<today-temperature lat="lat" lon="lon"></today-temperature>


gdzie geo-emiter powinno wyemitować geolokalizację, a today-temperature powinno na tej podstawie wyświetlić temperaturę.

W Polymerze to by było proste, w AngularJS na razie udało mi się doprowadzić do czegoś takiego:

app.directive("geoEmiter",["geolocation", "$log", function(geolocation, $log) {
return {
scope: {
lat: "=",
lon: "="
},
controller: function($scope) {
geolocation.getLocation().then(function(data) {
var coords = {lat:data.coords.latitude, lon:data.coords.longitude};
$scope.lat = coords.lat;
$scope.lon = coords.lon;
});
}
}
}]);

app.directive("todayTemperature", ["geolocation", "$http", "$log", "$interval", function(geolocation, $http, $log, $interval) {
return {
restrict: "E",
template: "<h1>{{temperature}}</h1><h4>{{minTemp}}/{{maxTemp}}</h4>",
scope: {
lat: "=",
lon: "="
},
controller: function($scope) {
$scope.$watch(function() { return $scope.lat}, function(val) {
if (!val) return;
$scope.temperature = "";
var url = "http://api.openweathermap.org/data/2.5/weather?lat="+$scope.lat+"&lon="+$scope.lon;
$log.log(url);
var convert = function(x) {
return Math.round((x-273.15)*10)/10.0;
}
$http.get(url).success(function(data) {
$log.log(data);
$scope.temperature = convert(data.main.temp);
$scope.minTemp = convert(data.main.temp_min);
$scope.maxTemp = convert(data.main.temp_max);
});
});
}
}
}]);


Ten $watch jest trochę ohydny, bo tutaj to co dostajemy w Polymerze od strzału, tutaj trzeba udawać.

Pierwsza dyrektywa geo-emiter po prostu w momencie gdy otrzyma od geolocation lokalizację to emituje ją na zewnątrz, w today-temperature musi być $watch, który "słucha" czy aby wartość w lat się nie zmieniła, jeśli się zmieniła to odpala cały kod do pobrania pogody z OpenWeatherMap :-) [dzięki wspaniałemu nagłówkowi Access-Control-Allow-Origin:* można sobie pogadać z tymi serwerami z dowolnej strony z AJAXem :-)].


Podobne postybeta
Data binding w Polymerze jest oszukany ;-)
Najkrótsza droga do przyszłości - Polymer ;-)
Bayesian Inference Tool jako Chrome App ;-)
Magia CallBacka w JavaScript :-) - czyli jak przekazać dodatkowy parametr
Jak "okradłem" Google Readera ;-)

sobota, stycznia 10, 2015

Czy jest dziś sobota? ;-)

Sobie narzędzie napisałem do wnioskowania Bayesowskiego ;-) [mam hobby ostatnio jak widać ;-)]

Przetestujmy więc nim hipotezę, że dziś jest sobota ;-)

Na początku podajemy ile hipotez będziemy rozważać:

Później podajemy te hipotezy:

Następnie zaczynamy podawać dowody i ich prawdopodobieństwo w razie prawdziwości hipotezy:


Rezultaty odczytujemy u dołu ekranu ;-)

Jak ktoś się chce pobawić moim genialnym narzędziem to znajdzie je tutaj, a jego źródła można sobie obejrzeć na moim GitHubie.

Jak widać na podstawie tych dwóch dowodów, czyli tego, że nie byłem dziś w pracy i że długo spałem można wnosić, że na ~82% jest dziś sobota ;-)


Podobne postybeta
Bayesian Inference Tool jako Chrome App ;-)
Teoria ewolucji vs hipoteza kosmicznych siewców życia vs hipoteza kreatora vs hipoteza kreatora na młodej Ziemi - mecz przy pomocy Bayesa :-)
Smile Challenge ;-) - takie tam MVP
Sobota
Pogoń za sensacją to jednak przeginka....