piątek, marca 31, 2023

Otagowane v0.0.1 ;-)

W końcu udało mi się zmusić mój kod do dodawania podobnych postów do tagowania tych postów przy użyciu modeli, które wytrenowałem :-)

Zmiany są takie:

Tagbyłojestróżnica%
Android1361673118,56
dziwne myśli2933869324,09
dziwne narzędzia217236198,05
Google Docs777811,28
Java186203178,37
JavaScript686911,45
książki576369,52
marudzenie101119,09
polityka971111412,61
prawie jak nauka13613821,45
programowanie4094877816,02

Najwięcej postów zostało dotagowanych dziwnymi myślami, co nie jest aż takie dziwne, bo to są zwykle dłuższe posty, albo mi się wydaje ;-)

Jeszcze jest przede mną kilka wyzwań, np. to by ten sam model nie był używany do mojego angielskiego bloga ;-) (na którym nie pisałem od lat ;-)), oraz by modele były tworzone też dla nowych tagów, by wszystkie tagi były obsługiwane (teraz tagi .net i openofficer.org odpadły z powodu kropki w nazwie ;-)).
Do tego trzeba dodać fragment który będzie obserwował, że np. zabrałem postowi tag, więc będzie się starać go nie tagować (co teoretycznie uczenie modeli powinno zagwarantować).

To całe tagowanie zacząłem bo chciałem sprawdzić czy się da, a to było związane z tym, że bloga używam, czy bardziej używałem jako notatnika i chciałem użyć tagów do wyciągnięcia postów np. o programowaniu jako zaczątków notatek... do tego jeszcze też nie doszedłem ;-)

Ale mam już dotagowane posty automagicznie :-) (później spróbuję czy i ten post da się dotagować ;-))



Podobne postybeta
Tagowanie MLem... ciąg dalszy ;-) nadal brak sukcesów ;p
Pomysł na projekt MLowy ;-)
Tagowanie postów MLem - trzeba to przepisać ;p
Potok świadomości - Machine Learning może tagować posty ;-), iPhone ssie, fajne książki, spać.....
Dyski vs ja - 1:0 ;-)

Copilot chyba pomaga ;-)

Tak w ramach eksperymentów zacząłem się bawić Copilotem od GitHuba i niby nic, a jednak raz na jakiś czas zadziwia.

Dziś np. chciałem sobie dodać do skryptu kawałek kodu, który weźmie zapisze mapę "znormalizowany tag" do taga, czyli dziwne_mysli do dziwne myśli.

I dodałem kod wrzucający to do mapy tag2simpleTag i już sam próbował zrobić zapis tego do zapiklowanego pliku (to Python), ale chciałem inaczej więc zacząłem z white open("... i tu już sam zaczął proponować i zaproponował zapis w postaci znormalizowany_tag,tag czyli tej na jakiej mi zależało ;-) 

Dopiero później się okazało, że nie dodał znaku nowej linii ;-)

Będę musiał licencję tego przeczytać, ale dopuszczam możliwość kupienia subskrypcji ;-)




Podobne postybeta
Kupię sobie jednak Copilota
Piszemy dzienniczek z Copilotem ;-)
Blog to jednak nie jest dobre źródło notatek ;-)
Copilot za bardzo pomaga i czasem trzeba go wyłączyć ;-)
Potok świadomości - Machine Learning może tagować posty ;-), iPhone ssie, fajne książki, spać.....

czwartek, marca 30, 2023

Dopisywanie czegoś do własnego kodu, który ma wiele lat jest trudne ;-)

Próbuję dodać do mojego kodu, który liczy podobne posty zdolność do dodawania tagów liczonych wg modeli, które stworzyłem w ramach moich zabaw z ML.
Jest problem ;-)
Parę lat temu gdy postanowiłem uruchamiać to narzędzie do dodawania podobnych postów na Raspberry Pi mocno je przepisałem.
Miałem wtedy RPi z całymi chyba 512 MB RAM (albo nawet 256 MB..) i niestety Java spędzała tam większość czasu na GC, stąd pozmieniałem apkę tak by jak najwięcej rzeczy trzymała na dysku.
Co jest fajnym pomysłem, ale oznacza, że teraz muszę kombinować ;-)
Już mam kawałek, który liczy nowe tagi... ale nie wrzuca ich do pliku pośredniego, więc nie ma ich jeszcze w miejscu które robi update'y postów.

Mam wrażenie, że kod się powinno optymalizować jakoś inaczej ;-) idealnie tak by same optymalizacje były gdzieś z boku, tak by nie brudziły oryginalnego kodu... chociaż nie wiem czy tak się da.
W przypadku takich gdzie coś trzeba wykonać szybko powinno się dać, bo to jest po prostu kod, ale ja mam jeszcze to, że oszczędzam RAM i przez to trzymam obiekty w plikach, i nie mam nigdy wszystkiego w pamięci więc nawet serializacja do końca by nie pomogła.

Ale tak patrzę na ten kod i teraz bym tego tak nie napisał ;-) ale fakt, że większość elementów które wzbudzają moją niechęć czy niepokój ;-) wynika wprost z tego, że między kawałkami jak pobranie postów, liczenie i publikacja wszystko po drodze trzymam w plikach...

Jak jest to podobno chińskie przysłowie czy przekleństwo (chociaż podobno wcale nie chińskie :-)) "obyś żył w ciekawych czasach", to ja powiem "obyś przerabiał swój własny kod" ;-)
Btw. z tego też powodu mam poważne problemy z kontraktorami pracującymi z kodem, to są zwykle świetni spece, ale jednak nie ma w nich tego przekonania, że jest duża szansa, że za 5 lat wrócą do tego samego kodu i będą musieli go zmieniać. 



Podobne postybeta
Tnę i przerabiam na mniejsze, czyli nieprzewidziane skutki refactoringu
GPT + Python = sprawdzanie czy 5 książka z Bobiverse już jest dostępna ;-)
Przekleństwo podwójności ;-)
Jestem anonimowym programistą....
JNI i łańcuchy ;-)

środa, marca 29, 2023

Hexenkochbuch dla kleistów ;-)

Kiedyś widziałem w Enterze albo Bajtku info o Shareware z Książką Kucharską Czarownicy (chyba Hexenkochbuch).
Było tam wszystko w stylu jak zrobić płyn do mycia i podobne.

W Project Hail Mary główny bohater ma pakiet wszystkiego softu który został napisany + wszystkich książek na świecie.
Idea jest taka, że nikt nie wie co będzie musiał zrobić więc łatwiej dać mu cały soft i niech w razie czego sam decyduje.

Oczywiście używa go do np. zbudowania systemu do wymiana informacji z kimś i tak dalej ;-)

I przyznam, że podobałoby mi się ta idea :-)
Coś co miałoby tak może nie wszystkich software na świecie, ale wybrany przez jakichś ludzi najważniejszy software na świecie, z instrukcjami w postaci książki kucharskiej ;-)

Do tego instrukcje jak tego używać... i jeszcze możliwość połączenia tego :-)

Takie coś od zawsze za mną chodzi, tylko w postaci czegoś co pozwoliłoby pisać "programiki" na telefonie, które by umiały rozwiązywać różne problemy, od liczenia czasu wschodu i zachodu słońca, przez robienie arkusza ze stanami konta, po coś co np. ogląda wszystkie zdjęcia które mam otwarte na stronie i znajduje te z zadaną twarzą i wszystko to niby zostało już napisane, ale nie jest takie proste do połączenia ;-)
Zawsze jak o tym myślę jak zasypiam to mam wizję jakie to by było proste do zrobienia i genialne... 
Później rano o tym myśle i są problemy ;-) bo imho żeby się za to zabrać trzeba by było najpierw mieć listę takich przydatnych cosiów które by się chciało zbudować i na ich podstawie próbować coś uogólniać... ale nigdy nie miałem pełnej listy takich cosiów ;-)

Najdalej z tym doszedłem z Alfredem i Worflowami do niego z moim zestawem "text operations" ;-)
Podejrzanie większość z tych rzeczy to rzeczy, które mi były potrzebne w poprzedniej firmie i przydają się w obecnej ;-)

Tak ogólnie z tego potoku świadomości widać, że chciałbym czegoś co pozwoliłoby na prostsze tworzenie rozwiązań ;-)
(np. teraz jest tak, że mam przy sobie w Juracie na moim laptopiku kod źródłowy programu do dodawania podobnych postów i chciałem go zacząć przerabiać na coś co doda tagi automagicznie... ale oczywiście nie mam wszystkich bibliotek, mam za to kod Bloggeroida w którym mam wszystko co robią te biblioteki, ale to sklejenie tego wszystkiego wymaga przepisywania kodu i "mi się nie chce"... a przecież to powinno być takie łatwe....)


Podobne postybeta
4 rzeczy ;-)
Rube Goldberg machine do panowania nad spotkaniami... częściowego chociaż ;-)
A takie tam słowo na niedzielę ;-)
Książkowy marzec :-)
Zapominalstwo ;-)

wtorek, marca 28, 2023

Chyba najtrudniejszy komponent UI - pasek postępu ;-)

Wpadlibyście na to, że Progress Bar to jeden z trudniejszych elementów UI? ;-)
Jeśli nie najtrudniejszy.

Niby prosty, wystarczy powiedzieć jak daleko jesteśmy w procesie... I to nie jest trudne jak przerabiamy coś, idziemy przez powiedzmy 10000 cosiów i updatujemy Progress Bar za każdym krokiem, albo w jakichś batchach.
W tym przypadku można się nawet posłużyć ETA i podać czas do zakończenia... i jak długo tak przeciętnie rozmiar problemów jest stały to wszystko będzie ładnie działać.

Przykładem tutaj może być np. pobieranie pliku z sieci gdy znamy jego rozmiar.
Wiemy ile już pobraliśmy, możemy wiedzieć ile to już zajęło i nawet możemy wyliczyć ile czasu zostało i podać czas zakończenia ;-)

Używamy wzoru:

ETA = time_from_start/downloaded_bytes*total_bytes+start_time

Jak chcemy tylko ile czasu zostało to nie dodajemy start_time.

Pasek postępu jest prosty gdy mamy znaną liczbę problemów i problemy są tej samej wielkości (tak mniej więcej) 

Problem w tym, że to są nudne przypadki ;-)

Ciekawiej jest jak nie znamy rozmiaru/liczby problemów, albo nie są one tej samej wielkości.

Pierwsze to np. gdy pobieramy plik z sieci, a serwer nie podał nam Content-Length i każe używać Chunked. Pobieramy i nic nie wiemy, czy te 100 MB to już prawie cały plik czy dopiero zaczęliśmy?

Drugi to użycie paska postępu do schowania różnych rzeczy pod jednym paskiem. Mamy np. 10 kroków i każdy trwa inaczej, a do tego są zależne od jakichś rzeczy, które są poza naszą kontrolą.

Jeśli np. widzimy pasek postępu dla aktualizacji OSa, bo pod jenym paskiem jest pobieranie danych z sieci (zależne od prędkości Twojego internetu), walidacja pliku (prędkość Twojego CPU i dysku), instalacja (CPU i dysk) i ewentualna walidacja apek (w Androidzie coś takiego jest i zależy od CPU, prędkości storage'u i ilości apek). 
Tutaj dobrze działający pasek postępu to super wyczyn, który się nie zdarza ;-)

A niby takie to proste i ktoś Ci zgłosi błąd "make progress bar more reliable" ;-)




Podobne postybeta
ETA - liczymy szacowany czas zakończenia [przybycia ;-)]
OOo2GD (OpenOffice.org2GoogleDocs) 1.2.2
Idioci
"Zapomniałem napisać, że w piątek (albo sobote, choć chyba był to czwartek)"
Język a postrzeganie rzeczywistości

poniedziałek, marca 27, 2023

W drodze...

Uznałem, że pójdę na spacer... I idę na Hel.
Trasa z Juraty na Hel po plaży jest ciekawa i w niektórych miejscach plaża ma całe 3 metry szerokości, a w innych (takich jak to gdzie jestem z 50 albo i 100.
Tu plaża mająca około 100 km ;-) szerokości ;-)


Tutaj taka gdzie musiałem przejść po drzewie ;-) [już jestem za]




Wycieczka jest ciekawa, ale trochę straszna bo trudno zawrócić.
Idę więc dalej....

posted from Bloggeroid



Podobne postybeta
Morze i plaża mnie dziś zmoczyły i chciały pochłonąć ;-)
Jurata i gwiazdy :-)
Wycieczka po LA ;-)
Eksperyment ;-)
Zaskoczenie

niedziela, marca 26, 2023

Morze i plaża mnie dziś zmoczyły i chciały pochłonąć ;-)

Morze mnie dziś zmoczyło i prawie pochłonęło ;-)

W ramach akcji "przejdźmy jak najwięcej po półwyspie" przeszedłem dziś 28 km, czyli prawie 40k kroków ;-)
Z czego dużą część po plaży i idąc po plaży gdzie są o takie cosie (z wczoraj zdjęcie:


No i idąc do Jastarni z Juraty szedłem po takich i było OK, jak wracałem fala mi buta najpierw zalała ;-) a że jej było dużo to piasek się zrobił miękki i mnie chciał pochłonąć, więc musiałem zabawnie wyglądać jak nagle przyspieszyłem i zacząłem bardzo wysoko nogi podnosić i rozglądać się gdzie mogę szybko przeskoczyć na plaże ;-)
Powiem tyle, chodzenie przy 6 stopniach C po plaży z mokrym butem, albo i dwoma nie jest najprzyjemniejsze ;-) ale jeden plus, stopy przestają boleć ;p



Podobne postybeta
W drodze...
Bliskie spotkanie jeleniego stopnia ;-)
Prakacje ;-)
Nie podobają mi się wyniki wyborów
Nie każde miejsce jest idealne na prakacje (aka workation ;-))

sobota, marca 25, 2023

15 minutowe miasto - wygląda, że w nim mieszkam ;-)

Jest nowy wróg różnych zwolenników teorii spiskowych, miasto 15 minutowe. 
Opowiadają niestworzone rzeczy o gettach, o zakazie podroży i podobne.
Z tego co mówili na Architecture is a good idea wszystko zaczęło się od jakiegoś projektu w Oksfordzie zmierzającego do ograniczenia korków (przez pewną wersję idei ukochanej przez wielu w Krakowie by ludzie spoza miasta nie mogli wjeżdżać ;-)) z tym, że Oksford też chce być miastem 15 minutowym.

Ja nie o tym jednak jak powstała ta teoria spiskowa, a o tym, że jestem prawie pewien, że większość jej wyznawców bardzo chętnie zamieszkałoby w 15 minutowym mieście ;-)

Ja mieszkam w Krakowie, blisko Centrum, przy Wiśle na Nadwiślańskiej i de facto mieszkam w mieście 15 minutowym.
Sklepy, lekarzy, kino, teraz nawet pracę ;-) mam w odległości 15 minut spacerem, tak prawie Wawel mam w odległości ciut większej niż 15 minut ;-). Jeśli doliczę transport publiczny to Rynek i większość centrum Krakowa mam w odległości 15 minut od domu ;-)
Patrząc na ceny za m2 w mojej okolicy zgaduję, że ludziom się podoba idea mieszkania w takiej okolicy, czyli ludzie chcą mieszkać w 15 minutowym mięście ;-)
Dziwnie w dużych miastach blisko metra czy tramwajów ceny mieszkań od razu zaczynają rosnąć, bo ludzie lubią mieć wszędzie blisko.
A to jest właśnie ta idea tego strasznego 15 minutowego miasta, by wszędzie było blisko :-)



Podobne postybeta
No i jest problem natury logistyczno-temporalnej....
Różne rodzaje turystyki
Bilety w górę, koszty w dół?
Czasoprzesunięcie
Czemu mniej miejsc parkingowych to mniejsze korki w mieści?

piątek, marca 24, 2023

Java 8 to taki wodospad ;-)

Była sobie rzeka Java'y, płynęła, meandrowała i czasem był jakiś szybszy spadek (np. w Java 1.5 gdy wprowadzono enumy), ale jakoś sobie płynęła ta rzeczka.
Co prawda wielu zostawało w pewnych kawałkach rzeczki bo "nie certyfikowali" nowszych wersji Java'y (pamiętam w jednej firmie te 19 lat temu, że system wymagał tej samej Java'y do 3 kawałka numeru wersji ;-)), ale wszystko zwykle powinno działać na nowszych.

No i przyszła Java 8 i przejście na Java 9 stało się problemem ;-) Nagle pojawił się wodospad, który odciął tych u góry rzeki, na dole pojawiły się nowe fajne rzeczy, ale jest ten wielki wodospad ;-)

Zniknęły pewne JARy i np. okazało się, że pewne języki które kompilowały się do bytecode'u nie mogły działać ;-) (a jak już działają to z hackorami, które operują na metodach prywatnych i zmieniają scope'y zmiennych ;-))
Scala chociaż niby działają jej nowsze wersje na czymś powyżej JVM 8 też głównie została na Java 8.
Android też tu ma problemy, nawet większe bo tak naprawdę to nie wspiera w pełni wszystkiego co jest w Java 8.

Mnie też czeka teraz pisanie jakichś komponentów na Java 8, bo ktoś kiedyś uznał, że Scala to język z przyszłością ;-) i wsparcie dla wyższych wersji Java nie miało takiego parcia bo "przecież Scala", a teraz jak Scala wzięła i de facto umarła to jest "piszcie w Java 8, a kiedyś zrobi się update" ;-)

Ale ten wodospad też oczyścił rzeczkę ;-)
Przed Java'ą 8 na wszystkich konferencjach było pytanie "Co po Java'ie?", były pomysły, że Scala, że może Groovy... przyszła Java 8 i w kolejnym roku odpowiedź na pytanie "Co po Java'ie?" było "Java" ;-)

Kotlin niby ma swoją moc, ale czasem mam wrażenie, że się tak staje teraz językiem dla Androida.



Podobne postybeta
Plus dla Scala, minus dla Groovy ;-)
Java wygrała ;-)
Wegetarianizm kaizen - czyli ja bywać wegetarianinem bez zbytniego wysiłku ;-)
Java, .NET czy może ktoś jeszcze? ;-)
Lubię enumy

czwartek, marca 23, 2023

Czy to już pracoholizm? ;-)

Pracuję nad rozwiązaniem związanym z lokalizacją ładowarek do EV, mam dostęp np. do lokalizacji większości ładowarek na świecie.
No i wczoraj w Juracie znalazłem nową ładowarkę przy Bryzie i widzę, że jej nie ma w bazie i się zastanawiam czy ją dodawać i czy to już jest pracoholizm? ;-)

Pomyślałem, popytałem i dodałem ;-) zobaczymy kiedy się pojawi ;-)

Ale jest szansa, że komuś to pomoże bo jednak trochę strach wjechać na Półwysep Helski samochodem elektrycznym bo na razie ładowarki są widoczne tylko w Jastarni i w Helu ;-)
A tak może będzie też dodana taka w Juracie :-)


Podobne postybeta
Prakacje ;-)
Spokój=Nuda
Czy kosmita zobaczy rusztowania?
Nowy coś do pisania - constants list/reference/cokolwiek ;-) albo spis stałych
Morze i plaża mnie dziś zmoczyły i chciały pochłonąć ;-)

środa, marca 22, 2023

Bard vs ChatGPT ;-)

Na razie ChatGPT prowadzi ;-)

Spytałem Barda i ChatGPT (w wersji 3.5 i 4) o to co robi kawałek kodu:


while
pgrep -x "octave-gui" >/dev/null; do
sleep 1
done

w Bardzie odpowiedź była, że jest text-based AI i to jest poza jego kompetencjami:


ChatGPT 3.5 próbował odpowiedzieć, pisząc, że będzie to czekało aż będzie działał proces o danej nazwie, później że pgrep pokazuje PIDy wszystkich procesów z tą nazwą, a flaga -x ogranicza do mapowania po nazwie i z tego powodu nie złapie np. procesu o nazwie octave-gui2, dalej opisuje jak kod będzie działał:


ChatGPT-4 ma podobną odpowiedź jak 3.5, ale taką bardziej ustrukturyzowaną:


Strzelam, że te różnice są z tego, że Bard ma bardziej przykręconą śrubę i pewnie mniej fantazjuje, ale też mniej wychodzi z takimi informacjami.

Wczoraj robiłem też testy z kodem i ChatGPT opowiadało mi jak to dany kawałek kodu robi dodawanie na bitach, a inny mnożenie, a Bard ograniczał się do opisania jak działa XOR.

Stąd na razie ChatGPT prowadzi ;-) ale za Bardem stoi Google więc podejrzewam, że to się szybko zmieni ;-)





Podobne postybeta
Dalsze testowanie tagowania MLem ;-)
Promptem w ToDo ;-)
Szybszy = lepszy?
Język ma znaczenie w kontaktach z ChatGPT
Taki tam rant po Gradle i Dockerze ;-)

Dalsze testowanie tagowania MLem ;-)

Trochę się kręcę teraz w miejscu z moim tagowaniem postów MLem, bo nie mam zbyt wiele czasu by napisać już samo tagowanie... więc spędzam czas na zmianach ;-)

Wczoraj dodałem próbę wykorzystania wielu rdzeni i dzięki temu na moim Macbook Air z Intelem teraz nauka zajmuje około 45 minut na 4 rdzeniach ;-)

Przy okazji poznałem ciekawy trick sprawiający, że bash script będzie czekał do momentu gdy umrą wszystkie procesy o danej nazwie:

while pgrep -x "octave-gui" >/dev/null; do
sleep 1
done

Gdzie octave-gui to w moim przypadku program, którego instancje nie powinny istnieć by skrypt mógł pójść dalej ;-)
Można też to zredirectować do wc -l albo podobnego i nawet może reagować na liczbę procesów ;-)

Zrobiłem też w końcu test tego jak klasyfikator dał by sobie radę w zakwalifikowaniu postu, który sam kiedyś wrzuciłem do danej kategorii... nie ma się co dziwić, ale skuteczność dla istniejących wpisów to 100% ;-) 

OK, jest dziwnie bo jestem tak śpiący, że aż mi się śni co piszę na blogu ;-)




Podobne postybeta
Bard vs ChatGPT ;-)
Blog to jednak nie jest dobre źródło notatek ;-)
Tagowanie MLem... ciąg dalszy ;-) nadal brak sukcesów ;p
Równoległe liczenie modeli przy pomocy Octave
Otagowane v0.0.1 ;-)

wtorek, marca 21, 2023

Równoległe liczenie modeli przy pomocy Octave

Mój projekt MLowy do tagowania postów z racji prakacji ;-) (aka workation ;-)) jest tak jakby w zawieszeniu, tzn coś tam wieczoram próbuję robić, ale bądźmy szczerze nie mam zbytnio siły ;-)

Jednym z ważniejszych problemów jest to, że trenowanie modeli zabiera dużo czasu. Używam na razie Octave i nie czuję bym w ciągu następnych 2-3 tygodni miał wiele czasu i możliwości by przepisać samo liczenie modeli na coś lepszego, a Octave złośliwie wszystko liczy na jednym CPU, przynajmniej tak to wygląda.
Stąd zrobiłem eksperyment i podzieliłem mój plik w którym wołałem naukę każdego z modeli z osobna na 8 mniejszych ;-) uruchomiłem wszystkie jednocześnie... i wydaje się, że to działa :-) nawet mój Macbook Air wydaje się wszystko liczyć na swoich 4 rdzeniach (a 8 z HT) szybciej niż by to robił na jednym.
Nadal nie jest to rozwiązanie idealne, ale nie powinno mnie tak hamować przy eksperymentach ;-)



Podobne postybeta
Tagowanie postów MLem - trzeba to przepisać ;p
Pomysł na projekt MLowy ;-)
Dalsze testowanie tagowania MLem ;-)
Logistic Regression wykrywa clickbaity lepiej od Bayesa ;-)
Nie każde miejsce jest idealne na prakacje (aka workation ;-))

poniedziałek, marca 20, 2023

Workation ;-)

Nie wiem co to jest, ale już drugi rok z brzegu mam sytuację, że zaraz po jednej podróży będę miał kolejną ;-) i obie rzeczy w marcu...
W tamtym roku przyleciałem z USA w piątek i w sobotę jechałem do Juraty, teraz będę miał tak, że przyjadę z Juraty w niedzielę, a w poniedziałek do Tampere w Finlandii. 
Tak potrafię wiele miesięcy się z domu nie ruszać i przebywam zwykle, albo zawsze w promieniu może 1-2 km od domu, a później w ciągu paru dni kilka podróży ;-)

Jurata się w obu przebija ;-) bo na razie wydaje się, że jest to moje place to go dla workation aka prakacji(?) ;-) 

Pierwszy raz trafiłem tutaj w 2021 roku we wrześniu gdy skakałem z samolotu przypięty do pana, który miał spadochron ;-)
Mieliśmy skakać w środę, ale nie mogli więc przenieśli na piątek, ale i tak już miałem urlop na środę więc była wyprawa rowerowa na Hel.
Później byłem w marcu 2022, ale nie wziąłem urlopu... za to złożyłem stąd wypowiedzenie ;-) (iPad z piórkiem pomagają ;-) bo to była jedyna forma jak byłem w stanie podpisać wypowiedzenie ;-)).
Później w czerwcu (w czerwcu nad morzem gwiazd nie widać... nad polskim morzem), we wrześniu... ale też bez urlopów.
Teraz mamy marzec 2023 i są urlopy i praca.

Co zabawne wyjazd do Finlandii się w to też wpisuję bo z racji braku sensownych połączeń i naszego kalendarza tam poniedziałek spędzę podróżując tam, a czwartek wracając ;-) 2 dni wizyty imho nie liczą się do końca jako praca... więc w ciągu 3 tygodni wychodzi mi całe 6 dni pracy :-)

Wcześniej trochę skłamałem, że trafiłem tutaj w 2021 roku.... pierwszy raz to tu byłem chyba 1984 roku ;-) a ostatni w XX wieku w 1990, co ciekawe tym razem przypadł mi pokój (a tak naprawdę poprosiłem o ten pokój ;-)), który miałem te 33 lata temu ;-) 
Fakt, że to co w OSW Kaper było wtedy szczytem luksusu, teraz po tych 33 latach już nie jest ;-) może jestem zepsuty przez różne hotele, ale widać, że ośrodkowi przydałby się remont. Z drugiej strony jakby był wyremontowany to ceny by skończyły x3 najmniej ;-)

Wracając zaś do tytułu postu - workation. IMHO to jedyna, albo i główna zaleta możliwości pracy z domu.



Podobne postybeta
Moc promptów
Nie każde miejsce jest idealne na prakacje (aka workation ;-))
Prakacje ;-)
Mały pomocny coś macOS'a
Update na statusie ;-)

niedziela, marca 19, 2023

Dziś gdy jechałem w pociągu chyba znów do mnie dotarło, że pisanie na blogu sprawia trudność nie tylko dlatego, że trzeba wymyślić co napisać i to coś napisać, ale trzeba mieć jeszcze jak napisać ;-)
Stąd stwierdzam, że mi brakuje Bloggeroida czy jego odpowiednika dla iOS i/lub iPadOS.
Problem w tym, że jakbym chciał takowego mieć to sobie muszę napisać ;-) albo użyć cudzego.
A jak i używanie programów to jest trudna sprawa ;p bo w przypadku większości programów mam bardzo duże problemy w akceptacji programu, zwykle są one nie takie jakbym chciał.

Na macOS np. najczęściej coś piszę w Atomie i dopiero próbuję przejść na Visual Studio Code, na iOS pisanie na klawiaturze ekranowej to mordęga więc wcale nie piszę ;p, na Androidzie mam Bloggeroida... i klawiatura ekranowa też nie jest czymś fajnym, ale nadal jest bardziej użyteczna niż ta z iOS.

Jednak moje proby z programowaniem dla iOS spełzły na niczym, XCode mnie na razie na tyle odstrasza, że to nigdy nie wyszło poza sferę - zacznijmy... ;-)



Podobne postybeta
Apple i Updaty....
Impreza ;-)
Instalowanie SkyShowtime na Androidzie i Chromecast with Google TV to mordęga
Kryzys użyteczności part II - tablet
Oszukałem się ;-)

sobota, marca 18, 2023

Czemu deploymenty są takie trudne?

Taka obserwacja z software developmentu.
Kawałek z "i zrób by aplikacja mogła wejść na PROD" albo "i zrób by ją można było releasowac" jest najtrudniejsze.
Trudno to ubrać w historyjki.
Bo niby można napisać ToDo, albo User Story, albo nawet Acceptance Criteria, ale zrobienie tego nie jest takie proste ;-)
Po drodze okazuje się, że brakuje roli albo ról, że trzeba mieć jakieś certyfikaty, albo że trzeba ogarnąć whitelistowanie.

Zawsze trzeba założyć, że 1 albo i 2 sprinty zostaną zużyte tylko na przejście przez problemy z wrzuceniem pierwszy raz aplikacji do chmury na DEV, a później to samo jest dla stagingu (czy co tam ma się jako to pośrednie środowisko) i PRODa.

Mało też developerów lubi te zadania. Często chcąc nie chcąc osoba, która jest najlepsza w kodowanie się tym zajmuje bo już kiedyś przez to ćwiczenie przechodziła ;-)

Trzeba najpierw zrobić Dockera odpowiedniego, później przekonać Kubernetesa by go polubił, po drodze trzeba skonfigurować CI/CD, które oczywiście zawsze się różnią i wiedza z jednego jest praktycznie nieprzenaszalna na drugie, a często nawet jest tak, że jakieś magiczne wartości są zaszyte gdzieś w wyższym projekcie i przeniesienie do innego wszystko psuje ;-), są jeszcze jakieś role i dostępy...
Oczywiście wtedy pojawiają się akcje w stylu "zróbmy jedno narzędzie" i tak ono częściowo problem rozwiązuje, rodząc nowe i będąc też totalnie niperzenaszalnym ;-)

W tym miejscu deploymenty on-prem z wrzucaniem WARa do Tomcata ;-) albo nawet Elastic Beanstalk wyglądają jak marzenie ;-)



Podobne postybeta
Docker image to taka kanapka ;-)
Tagowanie MLem... ciąg dalszy ;-) nadal brak sukcesów ;p
Branche i Scrum to taki security blanket dla programistów
LinkedList w Java'ie to taki miś koala...
Bullshit Jobs jest słabe

piątek, marca 17, 2023

Czyżbym miał już zbyt wolny komputer? ;-)

Przyznam, że jak teraz w tym samym czasie próbuję korzystać z komputera i jednocześnie trenują się modele do tagowania postów to zaczynam zauważać, że mój MBP15 z 2018 roku z 32 GB RAM i i9 jakiś taki wolny jest ;-) i mnie zaczyna kusić coś z M2 Max i 96 GB RAM ;-)
Chociaż fakt te prawie 26k PLN mnie lekko hamują ;-) 

Patrząc na prawo Moora, jeśli mój obecny laptop to wrzesień 2018 roku, a te nowe M2 Max to chyba styczeń czy luty 2023 to mamy 4.5 roku, czyli powinien być szybszy o jakieś 4-5 razy ;-) (dokładniej 4.75682846 ;-)) jeśli przyjmiemy, że komputery zwiększają swoją szybkość 2x na każde 24 miesiące, na 18 miesięcy to by było 8 razy ;-)

OK, ziarno zostało zasiane ;-)



Podobne postybeta
Mój Macbook ma 4 lata
Czyżby nowy Macbook się zbliżał? ;-)
Telewizja nie dla idiotów...
Przydatne i nieoczywiste "narzędzia" czy rzeczy, które pomagają w podróżach
Dla Java'y Apple Silicon M1 to jednak nadal x86 ;-)

Tagowanie postów MLem - trzeba to przepisać ;p

No to mój sposób na przyznawanie postom tagów przy pomocy Machine Learningu wydaje się działać...
Teraz kolejnym krokiem powinno być:
  • dodanie tagów do istniejących postów, które nie mają taga,
  • "automatyzacja" całego procesu, czyli budowania modeli tak by budowały się po każdej zmianie na blogu (a jeszcze lepiej wtedy gdy powinny ;-)),
  • dodanie sprzężenia zwrotnego, jeśli algo doda tag do posta to jeśli go usunę to powinien to uszanować, ale powinien tego też użyć jako sygnału w kolejnym treningu
Oczywiście są przeszkody ;-)
Pierwsza jest taka, że wszystko na razie zhacowałem w Pythonie z Octave i niestety wszystko na razie działa jako taki pipeline:
  • pobierz posty z tagami i zapisz do pliku,
  • podziel posty na słowa i zbuduj dla każdego posta wektor słów,
  • zbuduj macierze z danymi,
  • uruchom Octave dla każdego z taga i zachowaj współczynniki dla każdego z modeli,
  • użyj modeli do policzenia tagów
Problem z tym pipelinem jest, że łączy 2 błędy które zawsze robię w takich zadaniach ;p
Po pierwsze coś co wychodzi na wyjściu z kroku 2 wpływa na to co jest w ostatnim kroku, bądźmy szczerzy najbardziej czasochłonne jest trenowanie modeli dla każdego z klasyfikatorów i niestety jeśli wykonam 2 krok to wszystkie moje modele się unieważniają ;p
Po drugie często wszystko się dzieje w jednym kroku, tak naprawdę 2 i 3 są w jednym kroku.

Czyli 2 błędy które ZAWSZE popełniam w trakcie takiego hackowania to to, że robię dany kawałek do momentu jak spełnia swoje zadanie i go porzucam idąc do następnego ;-)
To jest świetne do hackowania, bo szybsze w pisaniu, ale jak jest moment by wyjść z hacka to trzeba dużo rzeczy pisać ;-) 

(W pracy mam tego przykład, napisałem coś co mapuje różne rzeczy na mapie (ma 2 źródła danych z współrzędnymi i to wszystko podzielone jest na kafelki i dla każdego z elementów z 1 źródła w drugim szuka najbliższego... robi to ciut bardziej skomplikowanie) ale teraz ten skrypt mi przetwarza te ~10 GB danych w 11 minut i tak do końca by to usprawnić musiałbym nad tym przysiąść i spędzić z 2h żeby to przyspieszyć, a nigdy nie mam 2h ;-))

Do tego dochodzi to, że ponieważ te kroki są zależne od siebie to jeśli coś zmienię w pierwszym to muszę często uruchomić pozostałe ;-) i teraz chciałem sprawdzić jak wyglądają tagi przyznane z 0.9 wagą, bo jak chcę automatyzować ich dodawanie to dobrze to sprawdzić... ale muszę znów trenować klasyfikatory bo coś innego popsułem ;-) [listę słów]

Drugą przeszkodą jest to, że OK takie trenowanie z Octave to fajne jest do przetestowania czy to się w ogóle da zrobić, ale przecież prawdziwe trenowanie chcę zrobić w czymś w stylu Java'y czy Pythona (nie marzę o niczym w stylu CUDA, bo po pierwsze moje modele są malutkie ;-) po drugie ja chcę by to działało na Zima Board, a tam akceleratora graficznego nie ma ;-))... więc muszę poszukać/poczytać jak to tam zrobić.

Ale ogólnie jestem pozytywnie zaskoczony. 
Chcę spróbować jeszcze parę innych rzeczy, zmniejszyć słownik, może spróbować z parami słów? ;-) (tak, model rośnie kwadratowo, więc najpierw bym musiał te pary słów wyrzucić ;p)
Sprawdzić jakie słowa są najbardziej znaczące dla którego taga.

Cieszy mnie to, że mam coś do kodowania ;-)



Podobne postybeta
Równoległe liczenie modeli przy pomocy Octave
Pomysł na projekt MLowy ;-)
Tagowanie MLem... ciąg dalszy ;-) nadal brak sukcesów ;p
"Ochidna" Echidna ;-) czyli jak się mają prace nad RDrive.
+2 czy +6?

czwartek, marca 16, 2023

4 dniowy tydzień pracy - idea piękna... ale obawiam się, że tylko zwiększy rozwarstwienie

Dla odmiany dziś o czymś innym ;-)
4 dniowy tydzień pracy.

Brzmi fajnie, ale wydaje mi się, że to będzie kolejna po pracy z domu rzecz, która będzie odróżniać ludzi z wyższymi zarobkami od tych z niższymi zarobkami.

Czy w ciągu 5 lat będziemy mieli programistów pracujących na pełen etat 4 dni w tygodniu? Duża szansa.
Czy za 20 lat będziemy mieli sprzedawczynię tak pracujące? Wątpię.

Ja wiem, że jeśli nie będę miał spotkań i będę mogł kodować czy pisać dokumentację to większość swoich "robót" mogę zrobić w połowę czasu. 
Ba, w poprzedniej firmie często przez 9 z 10 dni miałem spotkania i w jeden dzień miałem pół dnia bez spotkań i pisałem coś co teoretycznie powinno mi zająć ~2 tygodnie. 
Nie że jestem taki genialny ;-) po prostu programista nie przynosi swojej wartości siedząc i pisząc ciągle kod, a głównie myśląc jak napisać, a jeszcze lepiej jak nie napisać kodu.

Sprzedawca, budowlaniec czy górnik przynoszą więcej wartości wraz z czasem wykonywania pracy, zależność jest niemal liniowa, pracują 30% więcej, przynoszą 30% więcej wartości.
U specjalistów to jest bardziej zamotane, nie do końca liniowe i tak jak u sprzedawcy nadmierne wydłużenie czasu pracy obniży jakość to u specjalistów ta jakość może spaść po pewnym czasie do poziomu nieakceptowalnego.... (czemu ja teraz piszę o 4 dniowym tygodniu pracy, a nie o kodowaniu? Bo za głupi jestem na kodowanie teraz, bo za bardzo zmęczony przełączaniem kontekstu w ciągu dnia) 

No i specjalista zwykle przynosi dużo więcej pieniędzy niż sam/sama konsumuje jako pensję.

Pamiętam, że zaraz po studiach jako programista gdy mieliśmy jechać do klienta i coś robić po 16, czyli po godzinach pracy to ja i drugi kolega przyszliśmy do pracy na 7:45 (to była tak straszna firma ;-)) i pracowaliśmy, a później mieliśmy nadgodziny, koledzy z "kuźni" którzy robili taką prawdziwą pracę i coś instalowali fizycznie w samochodach klienta dostali dzień wcześniej info, że mają się pojawić dopiero o 16 i oni nie mieli nadgodzin. 
Wiem, że mi się to nie podobało, nadal nie podoba, ale rozumiem to.

Żeby sprzedawca mógł pracować za te same pieniądze przez 4 dni w tygodniu trzeba będzie najmniej o 20% zwiększyć marżę, czyli klienci będą musieli zapłacić, sklepy tego zbytnio nie chcą robić bo klient może pójść obok... więc zaczną instalować jeszcze więcej kas automatycznych.

I tak piękna idea 4 dniowego tygodnia pracy przyczyni się do dalszego wzrostu rozwarstwienia...

Chociaż tak naprawdę mam nadzieję, że głupoty wyżej napisałem i że to się uda i wszyscy będą szczęśliwi :-)



Podobne postybeta
Chillout na 80%
Weekendy robią znów za krótkie.....
Dobrze być programistą w Polsce ;-)
Projekty Informatyczne - Mity ;-)
Części samochodowe

środa, marca 15, 2023

Potok świadomości - Machine Learning może tagować posty ;-), iPhone ssie, fajne książki, spać.....

Taki strasznie zamotany się dziś czuję ;-) stąd i post będzie zamotany ;-)

To tyle ;-)



Podobne postybeta
Copilot chyba pomaga ;-)
Rube Goldberg machine do panowania nad spotkaniami... częściowego chociaż ;-)
Jak ogarnąć ładowanie kilku iPadów i Macbooków, tak by nie były non-stop na ładowarce, ale by zawsze w nich było na tyle prądu by się ich choć trochę dało poużywać? ;-)
Pomysł na projekt MLowy ;-)
Bookmarklet do robienia CSV z obligacjami i ich oprocentowaniem ;-)

wtorek, marca 14, 2023

Seriale na podstawie gier... na razie 2 się udały ;-)

Z innej beczki, wczoraj był ostatni epizod Last Of Us, na SkyShowtime oglądam Halo....

Jak na seriale na podstawie gier są całkiem niezłe, ba jak na seriale są całkiem niezłe :-)

W Last Of Us nigdy nie grałem, w końcu to PlayStation, a ja jednak mam XBOXy ;-) [i Switcha].
Ale serial wciąga, stosunkowo mało grzybowych zombiaków pokazali, ale fabuła bardzo wciąga i człowieka ciekawi co będzie dalej. Można polubić też bohaterów, a głos Mandaloriana ;p też pomaga ;-)

Halo gry nie lubię, mam 5 części i żadna mi nie przypadła do gusty, Doom lepszy ;-) chociaż Cortana jest fajna. W grze jeszcze theme jest niezły :-)
Serial też wciąga, samego strzelania było dużo mniej niż fabuły, tak de facto nie było żadnego ;-) bo fabuły jest dużo.

Jak w Last Of Us postawili na retrospekcje i ogólnie się bawią formą (czego przykładem jest 2 czy 3 ep gdzie główni bohaterowie pokazują się w pierwszych scenach i w finale odcinka), to w Halo mają kilka wątków, tak powiedzmy 3 które się przecinają i łączą, trochę retrospektyw jest ale są w innej formie, z takim wprowadzeniem, że wiemy że to jest retrospektywa ;-)
Halo może mieć nawet bardziej zamotaną fabułę.

Teraz czekam na Fallout i trochę się boję, bo Last Of Us wyszło, Halo wyszło, no i nie wiem czy się uda zrobić 3 sukcesy.... A w Fallout akurat grałem ;-)

Ale taka growo-serialowa trifecta by zrobiła wrażenie ;-) i wiadomo, że oznaczałoby to kolejne seriale na podstawie gier ;-)




Podobne postybeta
Terminator Genisys
A ja wybrałem Xbox One ;-)
Imagine
Czemu oglądam filmy i seriale po angielsku z napisami po angielsku
Szybkoholizm ;-)

Tagowanie MLem... ciąg dalszy ;-) nadal brak sukcesów ;p

[Update :-) - znalazłem błąd, zamiana postów do testów w wektor szwankowała ;-), teraz już każdy post ma inną klasyfikację. Nadal nie wiem czy dobrą, ale jest postęp ;-)]
No i brnę w moją zabawę z machine learningiem ;-)
Jako, że nie mam za wiele czasu to brnę tak w kawałkach ;-)

Dziś trenowałem modele, zajęło to trochę czasu, tak pewnie więcej niż 10 minut, mniej niż godzinę.

Python się tu przydaje, bo generuje nie tylko pliki z danymi dla Octave, ale też same "programy"...
Kiedyś próbowałem zbudować detektor clickbaitów i teraz idąc po linii najmniejszego oporu w moim pierwszym podejściu próbuję reużyć tak wiele z tego co kiedyś napisałem jak się da ;-)

Teraz próbuję tego używać, z tym że wtedy miałem 1 model do detekcji clickbaitów, a teraz mam 61 modele, każdy dla innego tagu.

Wyniki jednak jak na razie nie są zbyt zadawalające ;-)
Demon prędkości to to nie jest, i na razie wszystkie posty, które sprawdził mają takie same wyniki... co pewnie znaczy, że albo mam gdzieś głupi błąd w kodzie, albo na razie żaden z postów nie miał jakichś fajnych słów które polubił któryś z modeli ;-)

Wiem jednak na 100%, że mam nie do końca dobry kod do tokenizacji moich postów ;-), bo za dużo w nich HTMLa i innych dziwnych cosiów.

Ale się posuwam do przodu, choć czasem bokami ;-)





Podobne postybeta
Brnę w Apple ;-)
Tagowanie postów MLem - trzeba to przepisać ;p
Postęp... powolny postęp
Czemu deploymenty są takie trudne?
Clickbait detector ;-) - czyli próbujemy użyć naiwnego klasyfikatora Bayesowskiego do rozpoznawania clickbaitów ;-)

poniedziałek, marca 13, 2023

Pomysł na projekt MLowy ;-)

Od dłuższego czasu zamierzam się znów zabrać za Machine Learning, ale brakowało mi jakoś zacięcia.

Wczorajszy post mnie jednak natchnął ;-) i dziś zrobiłem pierwsze kroki.

Po pierwsze zidentyfikowałem coś co będzie celem mojego projektu ;-) zaczęło się od tego, że oglądałem chyba Halo i była mowa o ochronie swoich notatek i znów mnie dopadło, że nie mam swoich notatek i tak de facto najbliższym czymś podobnym do moich notatek jest ten blog ;p
Mam co prawda Notion, Evernote i Obsidiana ale jakoś nigdy mi nie wychodzi notowanie.
Stąd uznałem, że np. post sprzed 2 dni o GC i wcześniejsze o GC i Java'ie mogłyby być fajnym zaczątkiem części notatek, to samo z innymi wpsiami.

Tu padło pytanie (w głowie) "OK, fajnie, ale jak znajdę te odpowiednie notki, sam ich będę szukał?".

Pomyślałem o tagach i o tym, że jednak ostatnie posty (w sensie z ostatnich lat) ich zbytnio nie mają....

I tak narodził się pomysł by sprawdzić czy da się zbudować model do tagowania postów ;-)

Plan jest taki by mieć tak naprawdę 61 modeli ;-) (bo tyle mam tagów na blogu), i by użyć Linear Regression i może Bayesa.

Dziś (czy bardziej wczoraj ;-)) poszła część prostsza, zebranie danych.

Mam więc 2841 postów, z 85147 słowami różnymi, z czego 1176 postów ma tagi, tagów jest 61, a unikalnych słów w tych postach jest 52383 sztuk.

Trochę mnie te liczby przerażają ;-) bo każdy model będzie miał 52384 parametry... może warto będzie odjąć jeszcze popularne słowa?
Boję się tego, że Octave może spędzić parę dni na trenowaniu takiego modelu ;-)
A ja pewnie spędzę parę dni próbując napisać kod do tego, bo szczerze nie mam jeszcze pomysłu czy mogę wszystkie model szkolić od razu, czy będę musiał każdy z 61 oddzielnie... co by było prostsze bo kod już mam i mógłbym go użyć. 

Mam już:

  • pomysł,
  • dane:
    • wszystkie posty wraz z tagami
Teraz brakuje:
  • wektorów dla poszczególnych postów (ale to jest pikuś)
  • skryptów do trenowania 61 modeli
  • test
Tak do mnie jeszcze dotarło, że nie wystarczy mieć przykładów postów z tagiem, trzeba by było jeszcze mieć przykłady postów bez taga...




Podobne postybeta
Potok świadomości - Machine Learning może tagować posty ;-), iPhone ssie, fajne książki, spać.....
Tagowanie postów MLem - trzeba to przepisać ;p
Otagowane v0.0.1 ;-)
Blog to jednak nie jest dobre źródło notatek ;-)
Tagowanie MLem... ciąg dalszy ;-) nadal brak sukcesów ;p

niedziela, marca 12, 2023

Mam milion rzeczy na głowie... co robić?

Zacząć od pierwszej ;-)

Mam ostatnio dużo na głowie, głównie w pracy, ale później dochodzą maile z ofertami pracy, albo konieczne zakupy, albo formalności i jest tego "za dużo", a wtedy jak się ma takie przejmujące wrażenie przytłoczenia sprawami i nie wiadomo gdzie ręce włożyć.

Są ludzie którzy taki stan mają dopiero jak się na nich zwali tona rzeczy, są tacy którzy przy 3 się gubią.

Ja znam kilka sposób na to, chociaż fakt trzeba dojść do stanu w którym człowiek o nich pamięta i próbuje ich używać.

Kroki do zapanowania są proste i cała sztuka polega na ich prostocie.

Krok pierwszy to sobie to co mamy na głowie zapisać. Tworzymy tak sobie backlog rzeczy do zrobienia.
To pomaga bo podobno sam akt zapisania daje mózgowi sygnał "to nie zostanie zapomniane" i mózg dzięki temu przestaje ciążyć nad człowiekiem to przekonanie o milionie rzeczy na głowie.
Dodatkowo czasem dociera do nas, że wcale tego tyle nie ma, to nie jest milion spraw, ale np. 6.
Czyli to już nie jest taka bezkształtna chmura z milionem rzeczy, a konkretna lista z konkretną liczbą spraw.
Łatwiej zapanować nad czymś nazwanym, czy zidentyfikowanym.
Tu taka rada, że dobrze pisać na początku sprawami, nie zawsze da się zrobić konkretne ToDo, ale zwykle da się hasłami. Może po prostu w kroku 3 pierwszym zadaniem będzie próba przekucia tego zapisanego hasła na jakieś ToDo.

Krok drugi to jakaś forma traige'u. Zwykle widzimy co jest ważniejsze. 
W razie czego można użyć hacka, który polega na nadaniu rzeczom ocen wg ważności i prostoty (od 1 do 7) i można je pomnożyć i użyć tego jako sposobu na prioryteryzację, najprostsze i najważniejsze na początku...
Ten drugi krok bywa zbędny i nie zawsze człowiek ma nań siłę.

Krok trzeci jest najważniejszy ;-)
Trzeba wziąć pierwszą rzeczy (czy to wg priorytetu, wg kolejności zapisania czy nawet losowo) i trzeba jej poświęcić jakiś czas. Najpierw można sobie powiedzieć "OK, 15 minut", a nawet "OK, 5 minut".
Te ramy czasowe powodują, że się nie przestraszymy. Nie będzie tego czegoś co nas stopuje, tego przekonania "rany boskie mam tyle do zrobienia", bo w danym momencie mamy dokładnie 1 rzecz do robienia i to jeszcze w ramach czasowych.
Jeśli po tych 5 czy 15 minutach mamy ochotę dalej coś robić, ale akurat w tej sprawie nic się nie udało, to trzeba to zwrócić na listę i wziąć następne. 
Kluczem jest by w końcu mieć coś co da się zrobić ;-)

No i jak zrobimy 1 rzecz, to z listy tam znika jedna rzecz :-)

To oczywiście brzmi prosto, a człowiek zwykle jest w takim stanie gdy "ma taki zapieprz, że nawet czasu nie ma by taczkę załadować" ;-)

Jest jeszcze jedna opcja, zamiast zrobić to co powyżej, można o tym napisać mając nadzieję, że jakoś magicznie to się zacznie samo robić ;-)




Podobne postybeta
Cybernetyka w działaniu ;-)
Hackowanie teorii umysłu ;-)
Projekty Informatyczne - Mity ;-)
Zaszumienie....
Lubię mieć wybór, ale nie lubię wybierać ;-)

sobota, marca 11, 2023

Chciałem popsuć G1 i mi się na razie nie udało ;-)

GC w Java'ie w większości przypadków opiera się na hipotezie, która najlepiej wyraża się słowami: obiekty umierają młodo.

Niby to nie jest ważne, ale jak się dowiadujemy o GC to jest mowa o tym, że obiekty żyją sobie tam gdzieś na pastwisku sterty i wiodą sobie swój żywot tak długo jak nie przyjdzie GC i po stwierdzeniu, że obiekt nie jest już nikomu potrzebny to go morduje i zwalnia pamięć.
To ma oczywiście konsekwencje w tym, że jak już zamorduje to mamy trochę wolnej pamięci, ale przed i za może być obiekt który nadal żyje... co prowadzi do fragmentacji sterty i trzeba tu sprzątać, bo może się okazać, że mamy wystarczająco wolnego miejsca, ale w kawałkach i nie da się nigdzie wcisnąć naszego obiektu... Czyli trzeba jakoś zdefragmentować stertę, ale to jest trudne bo to taki puzzel.

Stąd używając tej hipotezy, że przytłaczająca większość obiektów umiera młodo można podzielić pamięć tak by mieć miejsce gdzie obiekty będą szybko tworzone i szybko będą mogły umierać, a ich zwłoki nie będą nikomu przeszkadzać i ich usunięcie nie będzie zbytnio zużywało CPU, te które przeżyją można już wypuścić na pastwisko i niech się tam pasą i w razie umrą to będzie to na tyle rzadkie, że ich ewakuacja nie będzie taka straszna i będzie rzadka.

Stąd większość kolektorów w Java'ie to Generational Garbage Collectors (chyba najlepszym polskim tłumaczeniem by było pokoleniowe GC ;-)).
I pamięć dzielą mniej więcej tak:
  • eden - obiekty są tu tworzone (prawie wszystkie, poza tymi które wydają się być za dużo, co znaczy chyba 1/4 rozmiaru edenu
  • survivor 1 i survivor 2
  • old gen
Oczywiście przyszedł G1 dawno temu i trochę sprawę popsuł. Np. złośliwa bestia nie dziedziczy po GenCollectedHeap ;-) a wprost po CollectedHeap co by mogło sugerować, że nie jest generacyjny (pokoleniowy), a jest, najwyraźniej po prostu metody z GenCollectedHeap nie pasowały bo w G1 nie ma ciągłych obszarów pamięci dla każdej z generacji...

Ale nadal wszystko opiera się o generacje, tylko, że w G1 są one takie jakby poszarpane... 

Ale nadal jest tak, że obiekt (jeśli jest mały) tworzony jest w edenie, tworzony jest zaraz po poprzednim (OK, może być z wyrównaniem bo CPU mają taki zwyczaj, że zwykle szybciej się potrafią dostać do pamięci która jest pod adresem będącym wielokrotnością jakiejś tam liczby będącej potęgą 2) i przez to jak w edenie się kończy miejsce to można zrobić bardzo prostą i tanią operację i przejść przez wszystkie obiekty, sprawdzić które są jeszcze używane i które już nie i coś z nimi zrobić.
To coś to skopiowanie tych, które nadal żyją do aktualnego survivor (są 2) i nie kopiowanie tych, których już nikt nie używa. Po czym możemy znów zacząć wrzucać do edenu nowe obiekty. Tak obiekty w Edenie chodzą i leżą na zwłokach swoich poprzedników ;-)
Z survivor jest tak, że jak się kończy w nim miejsce to robimy ten sam numer co z edenem tylko przepisujemy te nadal żywe obiekty do drugiego surviovora i je zamieniamy (czyli jak byliśmy w 1, skończył się to przepisujemy do 2, i piszemy nowe do 2, jak się skończy to kopiujemy to 1...).
Oczywiście jest problem bo nagle będzie za dużo rzeczy w survivor... więc stąd też odbywa się promocja do old ;-)
Ona się odbywa głównie "za zasługi", czyli obiekt przeżył ileś tam przepisań z s1 do s2 i z powrotem i wszystko wskazuje, że to jeden z obiektów matuzalemów więc trzeba go wysłać do old.
Jest jeszcze taki deal, że jak survivor jest przepisywany to najpierw sprawdzane jest czy w old jest jeszcze miejsce i jeśli nie to odbywa się ta paskudna operacja defragmentacji sterty i jakby się nie udało odzyskać pamięci tyle by skopiować całego survivor to poleci OutOufMemoryError (to jest Error, nie Exception).
To w końcu prowadzi do najbardziej pożądanego kształtu wykresu pokazującego zużycie pamięci czyli do piły... jak jest trend wzrostowy to jest sugestia wycieku pamięci (na razie tylko sugestia).

W G1 jest to bardziej powariowane, ale z grubsza to tak działa...

Więc ja dziś, czy bardziej wczoraj chciałem pobawić się w G1 wielkością tych obszarów bo zazdroszczę moim developerem którzy pracują nad naszym softem, że właśnie się bawią GC (OK, oni tak na to nie patrzą, tu chyba trzeba wysublimowanego smaku, który potrafi docenić smak GC (podejrzewam, że to podobne jest do takiego kiszonego śledzia czy czegoś podobnego)) i z opisów moja hipoteza jest, że ponieważ do pamięci trafia multum rzeczy, która jest w protobuf to po sparsowaniu tablice char[] które tam są się pałętają po pamięci i przez to GC ma czasem problemy.
Próbowałem zasymulować coś takiego.. nawet by CPU bardziej użyć dodałem sortowanie bąbelkowe (czyli żeby CPU więcej był obciążony) i chciałem drania (G1) popsuć, ale na razie bez sukcesów ;-)
Robiłem to w Java 8 (bo Scala...) i pierwsza lekcja z dziś, Java 8 nadal używała -server żeby odpalić serwerową Java'ę ;-)

W ogóle dziś mi coś dziwnie szło, np. apka obserwowana z JVisualVM nie używała więcej niż 30% CPU.... co przekładało się na jakieś 300% w ActivityMonitor co by znaczyło jakieś 3 rdzenie z 12 (OK, tak naprawdę jest 6 rdzeni, ale jest HyperThread)... a jak odpaliłem z -server to leciało na 12 rdzeniach... ale później zacząłem sprawdzać i jednak jest tak, że -server jest mniej nice niż było -client i od razu próbuje zagarnąć całe CPU, a client tak bardziej subtelnie to robi ;-) [nice jest w *nix i im aplikacja bardziej nice to tym chętniej oddaje CPU, im mniej nice tym mniej chętnie to robi ;-)]
Ustawiałem też np. -Xmx czyli max sterty i mi to ignorował jak przekazywałem do java'y w cmd line, ale jak wrzuciłem do _JAVA_OPTIONS to działało...

Wnioski na dziś takie:
  • zrobienie syntetycznego psuja do GC jest trudne,
  • wiedza nie używana wyparowuje... 8 miesięcy pisania głównie w Pythonie i robienia za Engineering Managera (przy okazji Product Ownera i coś pokroju Data Analyst) i robienie jakichś zadanek na LeetCode prowadzi do atrofii Java'y ;-) stąd trzeba zacząć sobie pisać jakiś projekt, w którym będę mógł trenować (btw. nawet teraz nie pamiętam jak zrobić by testy z lokalnym DynamoDb działały na każdym OSie... a kiedyś to zrobiłem w parę godzin ;-))
  • trzeba znów zacząć czytać kod JVM
  • _JAVA_OPTIONS zawsze działa ;-)



Podobne postybeta
Samochód jako zmniejszacz temperatury.... GC i jak to możliwe, że Young Generation może być zbyt duże, strzeż się finalize() i muzyczka :-) Czyli potok świadomości....
Nieznane skarby JDK - JConsole :-)
finalize() - do czego służy, a do czego nie i z czym to się je.
Referencje w Java'ie
Odrobina miłości i serwery działają ;-)