poniedziałek, grudnia 30, 2013

Budzenie kaskadowe...

Mam urlop od tygodnia i nie muszę wstawać, co sprawia że w sposób naturalny moje godziny wstawania i kładzenie się spać przesunęły się o jakieś 5-6 godzin na zachód (tak Nowy Jork albo Chicago to są moje domyślne ustawienia ;-))

Ale jednak chciałbym za parę dni być w stanie bez płaczu i zgrzytania zębów wstawać te parę godzin wcześniej...
Trzeba jakoś wirtualnego jet laga pokonać...

Stąd wprowadziłem dziś budzenie kaskadowe ;-) przesunąłem budzenie o 3 godziny naprzód, po czym ustawiłem 4 alarmy w odstępach 5-15 minut.. I udało się ;-) wstałem po godzinie od pierwszego budzenia, a ta godzina upłynęła mi w miarę świadomym stanie ;-)

To też taki life hack, jakby kto pytał ;-)
posted from Bloggeroid



Podobne postybeta
Znów urlopowy jet lag ;-)
Fundacja, sezon 2
Wróciłem ;-)
Spanie na czas ;-)
Trochę dziś przesadziłem ;-)

niedziela, grudnia 29, 2013

clone() i Cloneable się mszczą ;-)

W miarę znam Java'ę. Nie twierdzę, że perfect, ale nieźle.

Rozumiem jak działają refleksje i serializacja, rozumiem wait() i notify(), ale wychodzi na to, że nigdy nie rozumiałem clone() i Clonable ;-)

Okazuje się, że taki kod:


public class MyClass implements Cloneable {
private int x;
private String str;

public MyClass(int x, String str) { this.x = x; this.str = str; }

public int getX() { return x; }
public String getStr() { return str; }

public MyClass clone() {
try {
return (MyClass)super.clone();
} catch (CloneNotSupportedException cnse) {
throw new AssertionError();
}
}

public static void main(String[] args) {
MyClass c = new MyClass(1, "aga");
MyClass c2 = c.clone();
System.out.println(c2.str);
}
}

Wypisze "aga", bo Java zrobi płytką kopię obiektu.
Ja głupi jak musiałem kilka razy w życiu popełnić clone() to kopiowałem tam pola.

Jakoś ten rozdział mi umknął w Effective Java ;-)

Jak nie dodamy implementacji Clonable to nam taki kod wywali AssertionError bo w miejscu super.clone() poleci CloneNotSupportedException.

Jak rozumiem JVM w natywnym kodzie po prostu tworzy płytką kopię obiektu i wszystko działa jak powinno....
Niesie za sobą wiele niebezpieczeństw, bo kopiowanie odbywa się przez "wartość", w przypadku prymitywu jest to wartość rzeczywista, a w przypadku referencji skopiowana jest referencja.
Tutaj tak się dzieje ze String, ale na szczęście String jest niemutowalne i nie ma problemu.
Gdyby jednak zamiast String było List<String> to nasz nowy obiekt dostałby tą samą listę, którą zawierał w sobie obiekt klonowany. Wtedy to trzeba naprawić przez ręczne stworzenie nowej lisy i jej skopiowanie obiekt po obiekcie.... ale jak te kopiowane obiekty są mutowalne to też jest problem i też trzeba go przeskoczyć.

Dla mnie jednak wiadomością dnia jest fakt stworzenia płytkiej kopi obiektu :-) Nie wiedziałem, że to tak działa.
Wstyd mi,  ale nigdy nawet gdy przeglądałem kod JDK nie wpadłem na to, że ten idiom z super.clone() robi coś użytecznego....

Czyli dobrze, że ponownie czytam Effective Java, tym razem od deski do deski ;-)


Podobne postybeta
Javozagadka ;-)
Go dla Java'owca ;-) odcinek 1 "klasy"
Potfór ;-) czyli generator z yield w Java'ie
My - Niedouczeni ;-)
Sztuczki tropiciela błędów, part 4

sobota, grudnia 28, 2013

[lifehack] Najprostszy sposób priorytetyzacji

Pomysł nie jest mój ;-) ukradłem go z książki "Mind Performance Hacks" napisanej przez Rona Hale-Evansa (ja akurat kupiłem ebooka u O'Reilly'ego).

O co chodzi?
Często i gęsto mamy listę rzeczy do zrobienia, pomysłów do realizacji, książek do przeczytania, dziewczyn do poderwania czy też prac do wyboru.

Zwykle nie istnieje prosty sposób ułożenia tych rzeczy od najlepszego/najważniejszego do najmniej istotnego. Często mamy kilka skal, które są nie do końca zgodne.

Np. gdy chodzi o pomysły do realizacji to mamy np. ich przydatność, ale i trudność,  gdy mowa o pracy do wyboru mamy to jak dana praca będzie interesująca i jak nam pomoże w całej karierze (tu akurat to jest zwykle bardzo połączone), gdy chodzi np. o rzeczy do zakupu to mamy jak coś chcemy i jak to będzie przydatne.

Co robimy?

1) Robimy listę w arkuszu kalkulacyjnym.
2) Gdy już mamy listę dodajemy 2 kolumny, np. przydatność i trudność.
3) Każdej z rzeczy przydzielamy ocenę od 1 do 7 w obu tych kategoriach. 1 to coś najmniej przydatne, albo najprostsze do zrobienia, 7 to coś najbardziej przydatne, albo najtrudniejsze do zrobienia.
4) Teraz w 3 kolumnie mnożymy 2 poprzednie (taki hint, tutaj z trudnością stosujemy trik z mnożeniem różnicy między 8 a naszą oceną,  bo chodzi o to by najwyższą ocenę miało coś najprostszego do zrobienia), mnożymy wynik x2.
5) Sortujemy po 3 kolumnie, od największego do najmniejszego.

I mamy listę w której na szczycie mamy rzeczy o najwyższym priorytecie, a na dole o najniższym.

Nie jest to wyrocznia, ale daje szanse by zapanować nad naszą listą i przejrzeć ją w nowym świetle.

Tutaj przykład z np. postanowieniami noworocznymi (użyjemy postanowień Bridget Jones).

1) rzucić palenie
2) rzucić drinkowanie
3) znaleźć bliskich znajomych
4) chodzić na siłownię 3 razy w tygodniu
5) nie flirtować z szefem

No to  teraz:

Co?TrudnośćPrzydatnośćzwrot z inwestycji
rzucić palenie5742
rzucić drinkowanie4648
znaleźć bliskich znajomych4648
chodzić na siłownię 3 razy w tygodniu6624
nie flirtować z szefem1798

Co będzie najłatwiej osiągnąć Bridget? 
Zaprzestanie flirtowania z szefem ;-)
Najtrudniej zaś będzie chodzić na siłownię ;-)

Oczywiście dopuszczalne jest dodawanie wag, czy mieszanie większej ilości współczynników. Ale zwykle 2 powinny wystarczyć, a jak by był problem to można każdy z nich zrobić przez wyliczenie każdego z nich wg. podobnego mechanizmu i przeskalować je na od 1 do 7 (z 1 do 98).




Podobne postybeta
Znowu dyskusja....
"Semisubiektywna" klasyfikacja dokumentów ;-)
Regresja liniowa w Google Docs
Kraków to jednak ładny jest ;-)
Blee... czyli ogólne zniechęcenie ;-)

poniedziałek, grudnia 09, 2013

Duży ekran - największy plus Nexus 5

Tak po chyba dwóch albo trzech tygodniach używania Nexus 5 stwierdzam, że jest świetny.
Straszliwie szybki, ma jak na moje potrzeby fajny aparat i co najważniejsze ma duży ekran.
Już ekran w Nexus S wydawał mi się dużym w porównaniu do G1, w końcu były to 4 całe.
Ekran w Nexus 4 ze swoimi 4.5 cala był jeszcze fajniejszy.
Ale te prawie 5 cali w Nexus 5 to wypas :-)
Gdy patrzę na ten same ekran w Nexus 5 i Nexus 4 to zastanawiam się jak mogłem cokolwiek czytać na takim malutkim ekraniku jak ten z Nexus 4 ;-)
Głowy nie dam, ale literki tak na oko są o jakieś 20% większe.
Ma to swoje wady, bo na stronach WWW które były przygotowywane dla mobile wygląda to czasem nie do końca tak jak zapragnął twórca ;-) (znam jedną taką stronę, problem że ja w niej swoje palce maczam ;-)), ale w większości przypadków wszytko jest po prostu bardziej czytelne.
Aż się zastanawiam czy za rok nie będę się czasem zachwycał 6 calami ;-)
Bo to będzie chyba granica.
Nexus 7 jest super, ale jak na telefon wydaje się być ciut zbyt duży ;-)

Jeszcze jedno dodane po pary chwilach.
Duży ekran w Nexus 5 ułatwia także pisanie na klawiaturze ekranowej. Ze SwiftKey Flow pisze się niemal tak samo szybko jak na zwykłej klawiaturze PC. Bo mechanizmy SwiftKey dobrze zgadują co chcieliśmy napisać waląc bez opamiętania w ekran ;-)
Szczerze to nawet Flow nie używam, a piszę po prostu przy użyciu dwóch kciuków. Daje się to o dziwo robić tak w landscape jak i portrait!
Jak widać duży telewizor w telefonie to plus :-)


posted from Bloggeroid




Podobne postybeta
Nexus 4 - pierwsze wrażenia
Zły OpenOffice.org Base...
Oswajanie tableta
3 pomysły
Nie rozumiem Microsoftu