wtorek, października 26, 2021

var bywa niebezpieczne :-)

Robię sobie zadania na LeetCode i odkrywam, że choć var mi bardzo życie ułatwia to też i utrudnia ;-)

Głównie gdy operuję kolekcjami i trzymam w nich rzeczy ws tylu Integer'ów ;-)

Często i gęsto mam w kodzie coś takiego:

        void remove() {
var val = q.pollFirst();
if (maxes.peek()==val) maxes.pollFirst();
}
(co jest fragmentem impelmetnacji kolejki z max)

I niby wszystko jest fajnie... ale przez to var i == są problemy.
Gdyby kod był:
        void remove() {
int val = q.pollFirst();
if (maxes.peek()==val) maxes.pollFirst();
}
To w linii z q.pollFirst() doszłoby do autounboxing'u i w kolejnej linii porównywałbym int'y, a tak jak jest var to do val wędruje Integer i w kolejnej linii == porównuje instancje obiektów...

Co najgorsze, przez to, że to Integer to to będzie działać dla wielu przypadków ;-) (w większości JVMek dla -128 do 127 ;-)) 

Już się drugi raz tak zrobiłem w ciągu ostatnich 2 dni....



Podobne postybeta
Autoboxing/Unboxing nie lubi sie z var - nadal ;-)
Nieoczywiste oczywistości ;-) podstępny autoboxing ;-)
Potworność ;-) czyli mnożenie w 90 liniach ;-)
Człowiek się uczy całe życie - źle rozumiałem cache'owanie Integerów :-)
Programowanie trudne ;-)

sobota, października 23, 2021

On-call i sąsiedzi którzy robią remont się nie łączą zbyt dobrze :-)

Wczoraj poszedłem spać tak koło 4 w nocy uznając, że i tak mam on-calla to nie ma co iść wcześniej spać.
No i z drugiej strony trochę później wstanę i będzie Ok.
I do 8:15 było, ale wtedy jakiś szaleniec zaczął wiercić dziury...
Normalnie bym zaklął i założył AirPods Pro albo i Max... i pospał dzięki magii noise cancelling.... Ale jakbym to zrobił to w razie czego nie usłyszałbym wycia on-calla...

posted from Bloggeroid




Podobne postybeta
AirPods Pro rządzą
1 plus braku tramwaju ;-)
Jeden kawałek za mną ostatnio łazi ;-)
O szukaniu dziury w całym [układzie ;-)]
Skarpetki zamiast kapci ;-)

czwartek, października 14, 2021

A może by tak potrząsnąć drzewem zależności? ;-)

Jest tak, mam microservice który został zbudowany w oparciu o coś co trzeba by było updatować, ale to coś przepisuje masę kodu, który też jest ręcznie zmieniany więc z tym się nie da żyć, więc tego nie updatuję.

Poprawki bezpieczeństwa w postaci updatów bibliotek załatwiam "obok", co zabawne większość bibliotek które musiałem updatować (bo jeden albo drugi skaner stwierdziły, że dana wersja jest be) to rzeczy, których nie używam...

I mnie tak kusi by puścić analizę taką, popatrzeć na skompilowany kod i wszystkie klasy które woła, później przejść przez wszystkie JARy które mam na ClassPath (ClassPath długo nie umrze ;-)) i spróbować namierzyć te JARy, których kodu nie używam :-)

To może być ciut zbyt entuzjastyczne przez te głupie pomysły jak to co robi JDBC (akurat nie mam ;-)), czy implementacje SLF4J, bo tam jest ten brzydki sposób z rejestrowaniem się, które momentami odwraca to co kto woła (w SLF4J jest chyba tak, że skanuje w poszukiwaniu implementacji? Nie pomnę, ale problemy robiło)
Do tego jakieś straszne miejsca gdzie są używane refleksje... 

Ale mnie kusi, tylko jeszcze by się przydało mieć z 2-3 dni takiego luzu by się w to pobawić... a o to będzie trudniej ;-) 




Podobne postybeta
To Update or not to update? ;-)
Chciałbym Chromebooka
Mysaifu JVM - Java dla PocketPC
GCJ mnie przerosło ;-)
Gradle - narzędzie do artystycznego odstrzeliwania sobie stopy ;-)

poniedziałek, października 11, 2021

Komputer na korbę ;-)

Widziałem wideo o OLPC (One Laptop Per Child) które niby było wielką wtopą... ale tak naprawdę chyba trochę pokazało firmom, że jest nisza której nie dotykały i teraz tam są telefony, Chromebooki i podobne.

Ale nie o tym tutaj ;-)

OLPC miał korbkę :-) tzn było akcesorium, które pozwalało go "ładować" korbką i próbowałem tak oszacować ile by trzeba było kręcić by np mojego MBP15 z 2018 roku przez godzinę móc używać ;-)

Próbowałem szacować ile mocy jest w takiej korbie, ale jakoś mi nie wychodziło bo moje szacunki były między ~0.7 W, a 10 W. 

Internet mówi, że to jest między 5 a 15 W, czyli nie byłem aż tak daleko :-)

Godzina kręcenia taką korbą to między 5 a 15 Wh ;-) czyli między 0.005-0.015 kWh ;-)

Pojemność baterii w moim MBP15 z 2018 to na dziś 6710 mAh (co by znaczyło, że już nie ma pełnej pojemności ;-)), przeliczenie na Wh wymagałoby znajomości napięcia z baterii ;-)

Na szczęście Internet też zna odpowiedź na pojemność baterii w Wh.... ~84 Wh.

Co by znaczyło, że do "napompowania" baterii na full (załóżmy 100% skuteczność) trzeba by było kręcić korbką od 5:36 do 16:48 ;-) 
Powiedzmy, że laptop działa na baterii 5h (OK, podobno 11 czy jakoś tak, ale ja chyba inaczej używam ;-)).
Czyli by mieć mniej więcej 1h pracy trzeba by było kręcić korbą od ~1:08 do ~3:21 ;-)

Nie jest to jednak interes życia ;-)

A i tak istnieje szansa, że się gdzieś w obliczeniach walnąłem o jeden albo dwa rzędy ;-)



Podobne postybeta
2.6 drzewa na telefon komórkowy ;-)
ISS poraz kolejny :-) tym razem poprzedzona HTV :-)
Czyżbym miał już zbyt wolny komputer? ;-)
Pociąg pociągowi nierówny ;-)
Wszystko tkwi w głowie

piątek, października 08, 2021

Struktury danych vs algorytmy

Gdy te 12 lat temu uczyłem się po raz pierwszy algorytmów i struktur danych z Introduction to Algorithms zauważyłem, że jakoś lepiej mi idą struktury danych niż algorytmy.

I tak jest do teraz ;-)

Łatwiej mi jest zaprojektować strukturę danych niż algo.

Może chodzi o to, że często i gęsto to jest po prostu składanie z prostszych klocków? 

A może chodzi też o to, że ze strukturami danych mamy tak naprawdę tylko interfejs i łatwiej jest mapować ten interfejs do skończonej liczby struktur? ;-)

W sensie, że jak się myśli o strukturze danych to można ją wyspecyfikować od strony tego jak będzie zasilana danymi, jak będzie odpytywana i teraz to już tylko zwykle zastanawianie się jakie klocki do tego pasują? 

Z algo jest tak, że też jest zwykle skończona liczba podobnych przypadków do tego, który się robi, ale jakoś łatwiej głupieję, a i tak w końcu się okazuje, że Dynamic Programming było odpowiedzią, a ja i DP jakoś nie jesteśmy w pełni kompatybilni ;-) tzn umiem użyć w wielu momentach, w wielu widzę, że "O! przecież to liczę wiele razy to DP by było jak znalazł" ale często mi brakuje tego "klucza" po którym będę szukał.

No ciekawe. Widać po prostu struktury danych są prostsze :-)



Podobne postybeta
Studia - nie wiem czy użyłem w pracy kiedykolwiek czegoś ze studiów... poza angielskim ;-)
Proste, a potężne API to było coś...
Telewizyjne zastanawianie
Przeżycie artystyczne ;-)
Czy to jeszcze dynamic programming? ;-)

czwartek, października 07, 2021

Kod jako insight w umysł ;-)

Ponad rok temu zacząłem z kimś robić zadania z książek, głównie z Cracking the Coding Interview i Elements of Programming Interviews in Java.

Były momenty robienia po 3 zadania dziennie i miesiące bez robienia zadań.

I tak czasem sprawdzam po zrobieniu zadania poprzednie rozwiązania swoje i tej osoby i ciekawa sprawa.

Jak często mamy inne rozwiązania, to zwykle nasze rozwiązania z teraz i np. sprzed roku są bardzo podobno lub identyczne... czasem nawet co do nazw zmiennych :-)

I zastanawiam się czy to wynik tego, że przy pierwszym kontakcie z zadaniem się znalazło sposób na rozwiązanie i teraz mniej lub bardziej świadomie się "jedzie z pamięci", czy może za każdym razem to jest oryginalny twór umysły i wynika z okablowania mózgu?

Czy może chodzi o mieszankę?

Wiem, że sam od momentu gdy zacząłem uprawiać blindfold programming dzielę sobie kod w głowie na chunki i możliwe jest, że pamiętam "chunka". Co by pasowało bo ja jestem zwykle bardziej "wierny" w kodzie temu co napisałem rok czy dwa lata temu.

Czasem też pamiętam fizyczną analogię problemu, czy to sam ją wymyśliłem czy ktoś mi opisał.

Mam jednak wrażenie, że patrzenie na czyjś kod (w tym swój ;-)) to taka forma insightu w umysł ;-)




Podobne postybeta
Czas wrócić do blindfold programming
Jakie by tu zadanie zrobić? ;-)
Prefix vs suffix dla ++ i --
Znowu dyskusja....
Mózg jako komputer