wtorek, marca 26, 2013

GitHub - pierwsza próba :-)

Tak wszyscy teraz korzystają z GitHuba bo taki podobno fajny, to i ja postanowiłem spróbować ;-)
Wrzuciłem źródła mojej wtyczki do Chrome, która pozwala na przerzucanie kart między komputerami, czyli Chrome2Chrome.

Kod można znaleźć w repozytorium Chrome2Chrome można go sobie forkować, po czym zmieniać i tak dalej.
Nie do końca wiem czy mi się to wszystko podoba, ale sprawdzić trzeba ;-)

Wnoszą z liczby użytkowników wtyczki nie przypuszczam by było jakoś szczególnie dużo osób zainteresowanych kodem źródłowym ;-) ale któż to wie.
Jeśli ktoś będzie zainteresowany to wrzucę jeszcze drugą wersję, dla Firefoksa ;-) [której Mozilla mi nie przyjęła do swojego "sklepu" bo przechowywała dane usera lokalnie w localStorage ;-)]


Podobne postybeta
Chrome2ChromeV2 na GitHub :-)
TimeToRead 0.0.2 - nowy tag i poprawki ;-)
TimeToRead w działaniu
Głupi JetPack...
Chrome2Chrome w Chrome Web Store

niedziela, marca 24, 2013

Spalmy wszystkie książki!

Ale tak na poważnie.

Przecież i tak ich nikt[1] nie czyta.

A jak już ktoś czyta to mu głupie pomysły do łba przychodzą. Chciałby np. działać niesztampowo, albo robić coś więcej niż tylko to co konieczne. A tego się od nikogo nie wymaga.

Ale tak na poważnie, tym razem już na prawdę.
Ludzie nie czytają książek, ale myślę, że nie dlatego, że są leniwi czy głupi, ale raczej dlatego, że nie muszą. Nawet nie nie potrafią, ale po prostu nie muszą.

W sieci jest masa kursów, wykładów na YouTube, masa opracowań i ludzie z tego korzystają. Tak jest szybciej i bardziej ekonomicznie.

Zostaje jeszcze beletrystyka, ale z drugiej strony by przeczytać Harry'ego Pottera trzeba z 1-2 dni, na film wystarczą 2-3 godziny. Główny wątek tu i tu będzie, najważniejsze przesłania też. Po co więc ludzie mają marnować czas?

No bo cóż tym czytającym dają książki? Czy to, że czytam książki daje mi jakąkolwiek przewagę nad tymi, którzy nie czytają?
Szczerze wątpię.

Lubię wierzyć, że dzięki czytaniu mam szersze horyzonty, ale czy przekłada się to na mój sukces?
Raczej nie, ten jeśli go osiągnąłem (a to zależy od tego jak ktoś definiuje sukces) wynika z tego, że akurat jest zapotrzebowanie na programistów.

Dlatego spalmy książki!

Chociaż świat byłby jakiś taki smutniejszy.



[1] - gdzie nikogo definiujemy jako tych, którzy zostaną po odjęciu przytłaczającej większości ;-)


Podobne postybeta
Strach ma wielkie Google
Takie tam dywagacje
Książki mi jakoś nie wchodziły w czasach COVIDa...
Out of książka ;-)
VRML

środa, marca 20, 2013

Chromebooka chcę....

Chcę Chromebooka, ale go nie potrzebuję...
Straszne uczucie ;-)

Chciałbym zabaweczkę, ale mam już netbooka [z Windows fuj 8 :-(] i to niemal identycznego do tego Chromebooka o którym śnię ;-)

To jest straszne jak jest coś co by się chciało mieć dla samego faktu mienia i człowiek nie może sobie wymyślić żadnego powodu dla którego ta rzecz by mu była potrzebna.

Głupi rozsądek na drodze konsumpcjonizmu ;-)

Jak tak na to wszystko patrzę to głównym powodem chęci posiadania Chromebooka jest chęć posiadania Chromebooka, a to chyba ciut za mało...

Chociaż nie twierdzę, że się wkrótce nie złamię ;-)


Podobne postybeta
Embargo
Odliczanie ;-)
Chromebook - filmy już działają :-)
Olśnienie... chyba wiem jak zrobić R-Drive [czyli dysk R:\ będący "obrazem" Google Docs ;-)]
Chromebook jednak żyje :-)

niedziela, marca 10, 2013

SleepAdvisor - komórka pomaga w wyspaniu się ;-)

Chcę popełnić prosty programik, który sobie weźmie od Androida czas następnego alarmu i policzy mi o której powinienem pójść spać chcąc przespać odpowiedni czas.

Ten odpowiedni czas to wielokrotność 1.5 godziny + 30 minut +/- 15 minut.
Początkowo niech to będzie 4.5, 6, 7.5 i 9 godzin.

Banalne zadanie, ale takie nie do końca oczywiste ;-)

Następny alarm można dostać pytając o to system w taki sposób:
String nextAlarm = Settings.System.getString(getContentResolver(),Settings.System.NEXT_ALARM_FORMATTED);

Który to kawałek może zwrócić nam:
Mon 7:00 am
pon. 7:00
Mon 7:00

czyli skrócona nazwa dnia, wg. aktualnych ustawień systemu, godzina wg. aktualnych ustawień systemu...

Teraz drania trzeba przeliczyć na czas....
Na razie mam coś takiego:
private Date getNextAlarm() {
// let's collect short names of days :-)
DateFormatSymbols symbols = new DateFormatSymbols();
// and fill with those names map...
Map map = new HashMap();
String[] dayNames = symbols.getShortWeekdays();
// filing :-)
for (int i=1; i<dayNames.length; i++) {
int nextDay = (i+1)%7;
if (nextDay==0) nextDay=1;
map.put(dayNames[nextDay], i);
}
// Yeah, knowing next alarm will help.....
String nextAlarm = Settings.System.getString(getContentResolver(),Settings.System.NEXT_ALARM_FORMATTED);
// In case if it isn't set.....
if (nextAlarm==null) return null;
// let's see a day....
String nextAlarmDay = nextAlarm.split(" ")[0];
// and its number....
int alarmDay = map.get(nextAlarmDay);

// the same for day of week (I'm not sure why I didn't use Calendar.get(Calendar.DAY_OF_WEEK) here...
Date now = new Date();
String dayOfWeek = new SimpleDateFormat("EE", Locale.getDefault()).format(now);
int today = map.get(dayOfWeek);

// OK, so let's calculate how many days we have to next alarm :-)
int daysToAlarm = alarmDay-today;
// yep, sometimes it will be negtive number so add 7.
if (daysToAlarm<0) daysToAlarm+=7;
// Now we will build date, and parse it.....
try {
Calendar cal2 = Calendar.getInstance();
String str = cal2.get(Calendar.YEAR)+"-"+(cal2.get(Calendar.MONTH)+1)+"-"+(cal2.get(Calendar.DAY_OF_MONTH)+daysToAlarm);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-d hh:mm");
// and return it
return df.parse(str+nextAlarm.substring(nextAlarm.indexOf(" ")));
} catch (Exception e) {

}
// in case if we cannot calculate...
return null;
}

Wygląda  strasznie,  ale chociaż wydaje się zwracać to co powinno ;-) [komentarze dodałem coby się łatwiej czytało i by można było dostrzec "geniusz" rozwiązania ;-)]

Mając już odpowiedni czas łatwo policzyć czas kiedy trzeba by pójść spać:

Calendar cal = Calendar.getInstance();

for (int i=3; i<=6; i++) {
int minutes = i*90+30;
cal.setTime(nextAlarm);
cal.add(Calendar.MINUTE, -minutes);
System.out.println(i*90.0/60.0+" "+cal.getTime());
}

A oto wynik działania programu ;-)



Czyli w moim przypadku, jeśli chciałbym jutro wstać o 8:50 i spać 7.5 godziny powinienem pójść spać o 0:50 jutro.... co jest  mało prawdopodobne i zapewne pójdę spać bliżej 2:20 i prześpię 6 godzin (30 minut jest na zasypianie).... chociaż istnieje dość duże ryzyko, że pójdę spać o 3:50 i prześpię 4.5 godziny ;-)
Przez co jutro będę strasznie, ale to strasznie zły ;-)

Teraz trzeba tylko mój potworny programik uładnić i będę miał narzędzie na które od lat czekałem ;-)

[gdy zaczynałem pisać ten post jakieś 1.5 godziny temu to nic nie miałem,  teraz  mam programik :-)]



Podobne postybeta
Kiedy skończyć pracę...
ETA - liczymy szacowany czas zakończenia [przybycia ;-)]
Seks w ujęciu informatycznym ;-) - rozmnażanie ;-)
Ile w tym i przyszłym miesiącu z odsetek za obligacje?
Zinwigiluj się sam ;-)

GCJ mnie przerosło ;-)

Trzeba przyznać, opanowanie GCJ mnie przerosło.

Mam na RPi dwa programy w Java'ie które robią dziwne rzeczy.
Jeden co 10 minut zagląda na Google+ w poszukiwaniu postów z tagiem #toBlogger (coraz rzadziej go używam, ale jakbym chciał użyć to mam narzędzie ;-)) i w razie jakieś znajdzie w moim strumieniu to je repostuje tutaj na bloga.
Drugi liczy podobne posty.

Ten do podobnych postów potrzebuje 2-3 godzin na wykonanie... już go próbowałem przyspieszyć przy pomocy zamiany całej arytmetyki ze zmiennoprzecinkowej na stałoprzecinkową... pomogło ale nie aż tak.
No to teraz chciałbym spróbować z przekompilowaniem tego na GCJ, testy wykazały że arytmetyka stałoprzecinkowa jest o wiele szybsza w programach skompilowanych do kodu natywnego przy pomocy GCJ niż wykonywanych przez OpenJDK na RPi (na x86 z maszyną od Sun/Oracle to prawda nie będzie).

Dla porównania program liczący numerycznie całkę z e-x2 od -10 do 10 w 10000 kroków potrzebuje na wykonanie około 40 ms gdy używa się OpenJDK i tylko 9 gdy jest skompilowany przy pomocy GCJ. To są akurat wyniki dla liczb zmiennoprzecinkowych, ale  dla stałoprzecinkowych jest podobnie.

I jest tylko 1 problem ;-)
Nie umiem zmusić GCJ do skompilowania programu złożonego z więcej niż 1 klasy :-)

Niby proste:
gcj --main=Speed -O2 -o speed Speed.java

działa, ale kompiluje pojedynczą klasę.

Próbowałem różnych ataków, zastępując nawet sourcepath z javaca przy pomocy classpath i nic...

Potrafię skompilować pojedynczą klasę,  więcej nie umiem :-) szukałem po sieci, ale jak na razie chyba źle pytałem bo nie znalazłem niczego pomocnego....

I tak GCJ mnie przerosło ;-)


Podobne postybeta
Java i Chrome OS część 2 :-)
C# i Java okazały się szybsza od Pythona :-) [było Java okazała się szybsza od C# i Pythona]
strictfp sierota po x87 ;-)
Język Go dla Windows :-)
32 bity vs. 64 bity, tym razem C++ ;-)

Stare = do zniszczenia?

Przed chwilą widziałem taki obrazek, 3 chłopców w wieku 12-13 lat zaczęło łamać jakieś stare meble obok śmietnika, po chwili dołączyły do nich 3 dziewczynki w podobnym wieku, chociaż one raczej bardziej przyglądały się dziełu zniszczenia.

To dziwne jest.

Jak pamiętam jak miałem  12-13 lat to gdyby ktoś znalazł mebel to od razu byłyby pomysły by go wykorzystać, zabrać do "Klubu" (wtedy była moda na to, że jakąś piwnicę się przerabiało na "Klub") albo wykorzystać w jakiś inny sposób.  W ostateczności ktoś by sobie zabrał zamki czy coś podobnego.

A teraz zniszczyć chcą.

Za bogaci jesteśmy?
Taki dzieciak ma dysonans poznawczy gdy widzi coś co jest stare, ale jeszcze używalne?
I żeby go rozwiązać niszczy taką rzecz by była nieużywalna?

Głowy nie dam, ale chyba im bogatsi się stajemy tym bardziej podobają się nam akcje niszczenia starych rzeczy.
"Na zachodzie" są całe akcje w których stare hotele są wydawane na pastwę ludzi z młotami by sobie coś mogli zniszczyć.
U nas na poniektórych juwenaliach (aka igrach) jest punkt obowiązkowy - niszczenie starego samochodu.

Jak to tłumaczyć? Czy właśnie chodzi o ten dysonans poznawczy? Że coś jeszcze zwykle działa, jest użyteczne, ale nie jest już modne/potrzebne więc powoduje, że czujemy się źle w okolicy tego czegoś i stąd ta chęć zniszczenia?


Podobne postybeta
Czytanie w śnie - to nie działa ;-)
Dysonans poznawczy roku 2017 ;-)
Praca z komputerem na stojąco...
Czy Macbook Pro jest wart swojej ceny?
Knowledgeware

Glass, nie Glasses ;-)

Wiele ostatnio dyskusji o Google Glass, sam się nieraz kłóciłem broniąc idei ;-) i sam nieraz robiłem błąd.
Bo to są Google Glass, nie Google Glasses ;-)

A co do zarzutów to są i słuszne i niesłuszne.

Słusznym jest obawa o to, że niedobry user takich okularów może nagrywać sobie ludzi. A ogólnie przyjmujemy, że nie wolno ludzi nagrywać z ukrycia/w tajemnicy.
Rozwiązanie jest tu dość proste, wystarczy, że na Google Glass pojawi się dioda, która będzie lampić w momencie gdy nagrywanie dźwięku lub obrazu będzie włączone.
To powinno rozwiązać większość problemów.

Inną, i tu akurat niesłuszną obawą jest to, że Google czy ktoś inny będzie widział to co my. Nie, nie będzie widział.
Może kiedyś to będzie technicznie możliwe, ale na dzień dzisiejszy nie da się zrobić by takie okulary on-line czy nawet z bufora filmowały wszystko co widzą i przesyłały do jakiegoś serwera. Sieci są ciągle za wolne, do tego później by to trzeba było przeanalizować...
Okulary musiałyby mieć do tego gigantyczną baterię by móc nagrywać obraz non-stop.
No i najważniejsza sprawa, prawo  na to nie pozwala :-)

Ale obawy są i Google czeka teraz masa problemów do obejścia tych problemów.
Dioda to jedno z rozwiązań, drugie to wypuszczenie wersji bez kamery :-)

Ciekawe jak to rozwiążą.


Podobne postybeta
Okrutniki ;-)
OOo2GD 1.4.2
Giganci produktywności w IT ;-)
Gdybym miał okulary Google.... (znaczy, kiedyś będę miał ;-))
Postęp

wtorek, marca 05, 2013

Brudny sekret ;-) czyli jak podnieść oceny aplikacji w Google Play ;-)

Czasem nic nie działa lepiej niż mała manipulacja ;-)

Idea jest taka.
Chcemy dostawać dobre oceny od userów, nie chcemy dostawać złych.

By nie dostawać złych ocen trzeba starać się by aplikacja usera nie wkurzała. Nie powinna wywalać dziwnych błędów, nie powinna usera też straszyć.

Wkurzony user jest zły i chce się mścić, a danie 1 gwiazdki z ostrym komentarzem to coś czym może przywalić....

To OK, mamy już aplikację na którą ludzie nie narzekają bo działa w miarę znośnie, to jak ich przekonać by dali nam dobre oceny?

Proste ;-) umieścić nieprzeszkadzającą prośbę o ocenę na końcu całego procesu :-)

W przypadku Bloggeroida, proszę o ocenę po tym gdy aplikacja z sukcesem wrzuci post na bloga.

User jest wtedy zwykle szczęśliwy, bo właśnie wrzucił post na bloga.

Ma też chwile na wytchnienie bo już coś zrobił, stąd chwila rozrywki z daniem oceny mu nie przeszkadza.




A, że prosimy delikatnie, bez naciskania to sama prośba nie irytuje usera.


Podobne postybeta
POpulizm
Chorować to trzeba umieć ;-)
Strzeż się złych komentarzy łużytkowniku ;-)
I tak żle i tak niedobrze
Oceny w Uberze

sobota, marca 02, 2013

Co? Czyli o tym jak człowiekowi chce się coś zrobić... ale nie ma pomysłu "Co?" ;-)

Mam taki sobie humor, coś bym sobie zakodował, czy czegoś się nauczył, ale "mi się nie chce".

Gdy tak siedzę i mam uczucie, że coś bym chętnie zrobił, ale nie robię to marnuję ten czas.... wszyscy marnujemy ;-)
Popatrzcie na to tak, gdyby każdy z nas w czasie gdy nic nie robi, choć chce robić, ale nie ma pomysłu co, albo ma wrażenie, że nie warto, robił coś to już dawno byśmy na tym cholernym Marsie mieli nie tylko sondę ze strzelonym komputerem, ale miasta!

Tysiące, miliony godzin pracy, które mogłyby służyć nam wszystkim się marnują bo nie mamy motywacji, nie widzimy celu.

Gdyby tak tą energię, która się rozłazi zebrać to byłby potężny kop dla ludzkości.

I teraz jest pytanie czy my tak marnujemy ten czas bo tak mamy wbudowane, czy może to wynik dobrobytu, czy może jeszcze czegoś?
Czy to jest immanentna cecha człowieka, czy nawet całej ludzkości, że chce coś robić, a nie robi?

Lenistwo można zrozumieć i wytłumaczyć, w świecie z ograniczonymi zasobami działanie nie mające jasnego i pewnego celu jest działaniem, które zmniejsza szanse przetrwania.
Mówiąc inaczej, lenistwo wynika z ewolucji, ci z naszych przodków którzy mieli złe podejście do lenistwa i zamiast, gdy to było możliwe spokojnie leżeć i zawiązywać sadełko, działali i marnowali energię zwykle źle kończyli, głównie jako czyjś obiad.

Ale takie coś, że coś chcemy zrobić, a nie robimy bo jakoś trudno się zmotywować? Czy to ma uzasadnienie ewolucyjne? Czy wynika raczej z nadmiaru dobrobytu, który nas spotyka?

Czy może to inny rodzaj lenistwa? Rozsadza nas energia do działania, ale nie widząc celu odgrywamy stary program, który napisała dla nas ewolucja, który mówi "nie marnuj energii"?
Ewolucja jest głupia, ten program jest świetny przy ograniczonych zasobach, ale teraz przy paliwach kopalnych i nadmiarze żywności to problemem nie są ograniczone zasoby, a ograniczony czas na ich zużywanie....

Może trzeba by było zbudować bank problemów do rozwiązania?
Może genialne algorytmy Google powinny łączyć problemy z ludźmi, którzy mogliby je rozwiązywać?

Ale jak ich do tego zmotywować?
Bo na pewno ktoś chętnie skorzystałby z moich możliwości w kodowaniu wtedy gdy mam wolny czas, ale czy ja bym chciał mu ten czas zaoferować?

Bycie człowiekiem jest zdecydowanie skomplikowane ;-) w człowieku się cały człowiek nie mieści, chce wyleźć, zostawić gdzieś ślady, coś zbudować... i tylko problemem jest "Co?" ;-)


Podobne postybeta
Bycie człowiekiem jest dziwne.
Transhumanizm [długo i nudno ;-)]
Iluminacja... czyli "Oświeciło mnie"...
A mnie tam jednak prosty model klimatyczny przekonuje do twierdzenia, że mamy wpływ na zmiany klimatyczne i że globalne ocieplenie może być faktem
Jak socjaliści stworzyli globalne ocieplenie by uderzyć po kieszeni islamistów i Rosję ;-)