poniedziałek, kwietnia 01, 2013

Avast - a to był kiedyś taki fajny, cichy program...

Avast to był kiedyś taki fajny program antywirusowy.

Po pierwsze był "cichy" (tzn. domyślnie na początku nie, bo gadał, ale można go było zmusić do zamilknięcia) nie był nigdy zbyt nachalny.... nie to co teraz....

W przeciągu 3 minut mi wyskoczył z 2 dialogami ;-)


Ja rozumiem, że on to robi dla mojego dobra, ale pierwsza informacja jest w ogóle nie interesująca, bo co mnie obchodzi, że się zaktualizowała baza wirusów? 
Druga znów jest  idealna do ikonki, czyli zrobić brzydki krzyżyk koło ikonki Avasta w zasobniku...

Jeden plus, to się chyba da wyłączyć :-) co zresztą przed chwilą zrobiłem i zobaczymy czy podziała ;-)




Podobne postybeta
Nexus 5 po jednym dniu.
Chromebook jednak żyje :-)
"Pokochałem me Atari....", a właściwie G1 :-)
Kura immunologiczna ;-)
Strona z pomocą dla OOo2GD

Google Play Services dobre jest :-)

Niby autentykacja przy pomocy OAuth2 jest prosta, ale do niedawna robienie jej w Androidzie było straszne.
Do czasu ;-) do czasu gdy pojawiło się Google Play Services.
Właśnie się nimi bawię, docelowo chcę mieć w Bloggeroidzie autoryzację przy pomocy właśnie Google Play Services.

Oczywiście po drodze wychodzą pewne niedogodności, np. najłatwiej jest mi sterować przepływem używając wait i notifyAll ;-)
Jeśli GoogleAuthUtil (część Google Play Services) zwróci mi null jako tokena, albo poleci wyjątek to wtedy mam tak, że synchronizuję się na aktywności czy też Application i robię wait.... a GoogleAuthUtil albo wysyła intenta na którego zarejestrowany jest mój BroadcastReceiver, który po prostu robi notifyAll (uprzednio się synchronizując), w innym przypadku jest to notifyAll wołane z onActivityResult().
Wiem, że brzydko, świadczy o tym to, że same te metody nie mają wersji blokujących i sam sobie je muszę pisać ;-) ale takie podejście ma pewne zalety, mimo wszystko kod jest prostszy.

Oczywiście Bloggeroid jest używany też na urządzeniach, które nie mają Google Play (np. na emulatorze gdy testuję ;-)) a tam nie ma też Google Play Services dlatego pozostanie w kodzie nadal aktywność do wpisywania nazwy konta i hasła.

To zresztą generuje problemy... bo userów chciałbym przerzucić na nowy system a do tego będę musiał ich jakoś niezbyt natrętnie poprosić o zgodę...
posted from Bloggeroid



Podobne postybeta
Papa dla ClientLogin
Programowanie trudne ;-)
Czemu wait() i notify()/notifyAll() w ogóle działają?
Marudzenie nocne ;-)
I jak "po bożemu" zrobić updatowanie widoku na podstawie danych z sieci w Androidzie?

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?
Konsumpcjonizm - to co tworzy i toczy zachód

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