poniedziałek, października 19, 2020

Nieoczywiste oczywistości ;-) podstępny autoboxing ;-)

Java jest prostym językiem, ale dodawanie kolejnych ficzerów powoduje, że staje się coraz bardziej skomplikowana.

Jakoś tak milion lat temu w Java 5 dodano autoboxing i auto unboxing. I to bardzo ułatwia życie, tak naprawdę mało kto teraz pamięta w trakcie kodowanie, że int i Integer to dwie różne rzeczy i zwykle po prostu ludzie pamiętają, że Integer to taki "specjalny" int który można trzymać w kolekcjach.

I stąd są problemy....

Bo co się stanie w sytuacji gdy z mapy albo listy pobieramy Integer'y i porównujemy je z czymś przy pomocy ==?

To zależy czy to z czym porównujemy to int czy Integer ;-)
Jeśli int to kompilator w trakcie kompilacji zrobi nam auto unboxing naszego pobranego Integer'a.
Jeśli Integer to zależy.... gdy to jest Integer w zakresie -128..127 to zwykle powinno działać == tak jakby zadziałało equals.... przy założeniu, że oba te Integer'y zostały poprawnie "stworzone", czyli nie przez new Integer(int).
Jeśli coś wyższego niż 127, albo niższego niż -128 to raczej nie zadziała == jak equals.

Niby to wszystko to żaden problem, ale.....

Idźmy dalej, a co jak mamy takie 2 z overloadowane metody:

boolean test() {
return isEven(10);
}

boolean isEven(int x) {
return x%2==0;
}

boolean isEven(Integer x) {
return x%2==0;
}

To która zostanie zawołana gdy wykona się metoda test? ;-)

Wiadomo, że isEven(int), ale jeśli usuniemy metodę isEven(int) to kod nadal się będzie kompilował i nadal będzie działał ;-)

Tu niby problem nie jest z autoboxingiem i unboxingime chociaż trochę jest ;-) bo jak kompilator decyduje którą metodę zawołać? No szuka metody najbardziej "szczegółowej". 

Czyli tutaj w metodzie test ma 10, a 10 to int, więc wie, że ma zawołać isEven(int), ale jeśli nie będzie metody isEven(int) to popatrzy i znajdzie metodę isEven(Integer) więc dokona auto boxingu tego 10 do Integer.valueOf(10) i wrzuci je do tej metody...
Jakby nie było tej metody, ale byłaby metoda isEven(Object) to ona by została zawołana....

To niby są wszystko oczywistości, ale takie nie do końca oczywiste ;-)

A patrząc jak ludzie chętnie dodają do API nowe metody to takie problemy się po prostu muszą zdarzać ;-)






Podobne postybeta
Człowiek się uczy całe życie - źle rozumiałem cache'owanie Integerów :-)
Ile to jest 1+1 w Java'ie?
Magia w Java'ie ;-)
finalize() - do czego służy, a do czego nie i z czym to się je.
Sztuczki tropiciela błędów - breakpoint na sterydach ;-)

sobota, października 17, 2020

Kiedy następny on-call?

 OK, już się skarżyłem, że mam znów on-call'a ;-)

To napisałem sobie dziś narzędzie, które pokazuje mi ile mi jeszcze zostało czasu do końca on-call'a:


A jak nie mam on-call'a to ile mam do kolejnego:


To sobie siedzi w zasobniku macOS'a i pokazuje ile jeszcze czasu ;-)

Jak kropka jest czerwona, znaczy że jesteśmy w trakcie, jak zielona to czekamy ;-)


Skąd programik wie kiedy mam on-call'a?

A bo możemy go skonfigurować wybierając Configure:


Które otworzy "przepiękne" okienko gdzie można wkleić link do kalendarza z on-call'em.

PagerDuty coś takiego ma.

Teoretycznie może to być dowolny kalendarz, ale lepiej żeby miał tylko proste event'y ;-) bo z innymi sobie mój kod nie radzi ;-)

Jak ktoś zainteresowany do zapraszam do repo ;-) [jest tam też DMG]

https://github.com/przemelek/next-on-call



Podobne postybeta
Electron + Airly = wskaźnik jakości powietrza w pasku ;-) - part 2, źródła ;-)
On-call....
A może by tak nosić drugi telefon specjalnie do on-call'a?
9 miesięcy bez on-call'a - to jest super :-)
Alfred + Todoist i wysyłanie tasków do projektu, a nie tylko do Inbox'a ;-)

Feature Request do OSów ;-)

 Mój główny komputer, czyli mój Macbook Pro z 2018 roku nabawił się spuchniętej baterii...

Wygląda to nie najlepiej:


Tak, to na dole/z tyłu to tył Macbooka który się wziął i wygiął, a laptop się nie da zamknąć ;p

Stąd od razu jak to zauważyłem (drań stoi sobie zawsze podpięty do monitora więc go nie oglądam za często, tym razem po prostu przestała działać mysza i klawiatura i trzeba było odłączyć hub od MBP i wtedy to zauważyłem) został zgłoszony do Apple, które wskazało mi serwis, który jest w odległości 200 metrów od mojego mieszkania ;-)

Więc teraz używam mojego Macbooka Air jako komputera, który jest podpięty do monitora.

Jest to więc też moja maszyna do kodowania ;-)

No i są problemy, bo co chwile się okazuje, że nie mam a to wget'a, a to Midnight Commandera, a to ForkLift jest inaczej skonfigurowany.

A co gorsza okazuje się, że nie wszystkie moje źródła mam na repach ;p więc teraz jak piszę sobie narzędzie do pokazywania mi kiedy mam następnego on-call'a (albo kiedy mi się skończy ;-)) nie mam skąd kopiować kodu ;p

Przydałoby się mieć coś w stylu "shared profile" które można by było dzielić między komputerami, idealnie by dało się to podzielić na installed apps, files stored on drive i profiles in apps ;-)
A i by można było mieć też na 1 komputerze kilka profili.




Podobne postybeta
Mój pomysł na sprzedaż tabletów ;-)
Zły provider, albo głupi ja ;-)
Macbook PRO Retina i OS X po 2* tygodniach
Google+
A może by tak Macbooka Air?

On-call....

Od 1:00 do 13:00 mam on-call'a, nic się niby nie powinno zdarzyć, ale już mi odbija. 

Mam słuchawki na uszach to przyniosłem sobie telefon z PagerDuty na biurko, żeby w razie czego zobaczyć jak będzie wyło i błyskało....

Coś czuję, że jak będę szedł pod prysznic to też będę brał.

Fuck..... chciałbym umieć ciut bardziej olewać.




Podobne postybeta
Chyba zabiłem mojego Pocket PC....
Kiedy następny on-call?
A może by tak nosić drugi telefon specjalnie do on-call'a?
Miejsca gdzie nie używałeś jeszcze komputera [ewentualnie miejsca, gdzie nie dopadły nas jeszcze komputery ;-)]
Żyje :-)