Wybór języka

Wpisy

Niektórzy ludzie narzekają, że nie wykonują testów integracyjnych “ponieważ zajmują za dużo czasu”. Dobrze, interakcja z rzeczywistymi zależnościami czasami nie może być skrócona, ale z pewnością istnieją sposoby na szybsze uruchamianie baz danych, brokerów wiadomości i innych, jeśli używasz do tego Testcontainers.

W tym wpisie będę używał języka Java. Jednakże, ponieważ Testcontainers jest (z pewnego punktu widzenia) wygodnym sposobem na współpracę z kontenerami zgodnymi z Dockerem przy użyciu języka programowania, który znasz, to samo podejście można zastosować również do innych technologii. Jestem pewien, że po zrozumieniu idei można ją przetłumaczyć na Go lub C#.

Podczas moich szkoleń i wykładów padają pytania “ale jak ty tak szybko przełączasz Javę?” albo nawet “to da się mieć kilka wersji Javy równocześnie na komputerze?!” Jeszcze jak!

Sposób jest bardzo prosty: wykorzystać SDKMAN! Korzystam z niego niemal każdego dnia, przydaje się nie tylko w czasie prelekcji o najnowszych wersjach Javy, ale w zwykłej codziennej pracy, gdy trzeba sprawdzić “jak to działa na innej wersji”.

Poniższy minikurs powstał jakiś czas temu m.in. jako tzw. prework przed szkoleniem z najnowszej Javy.

Podczas moich szkoleń i wykładów padają pytania “ale jak ty tak szybko przełączasz Javę?” albo nawet “to da się mieć kilka wersji Javy równocześnie na komputerze?!” Jeszcze jak!

Sposób jest bardzo prosty: wykorzystać SDKMAN! Korzystam z niego niemal każdego dnia, przydaje się nie tylko w czasie prelekcji o najnowszych wersjach Javy, ale w zwykłej codziennej pracy, gdy trzeba sprawdzić “jak to działa na innej wersji”.

Poniższy minikurs powstał jakiś czas temu m.in. jako tzw. prework przed szkoleniem z najnowszej Javy.

W poprzednim wpisie testowaliśmy, czy Wątki Wirtualne Javy nie są używane w sposób, który powoduje ich przyszpilenie/przypięcie (ang. pinning). Chcemy bowiem (i aczkolwiek!), aby nasze Wątki Platformowe (szczególnie te w puli ForkJoin Sp. z o.o.) stale obsługiwały coraz więcej nowych Wątków Wirtualnych, zamiast “nie wyłączać silnika”, podczas gdy VTs są przyszpilone. (Przynajmniej tak długo, jak nie możemy dostarczyć własnych pul wątków do przenoszenia WW).
Spoiler alert: będziemy korzystać z Testcontainers oraz Toxiproxy!

Fun will now commence

Niestety, tłumacz aktualnie jest mocno zarobiony i na razie nie da rady przetłumaczyć tego wpisu. Całość dostępna po angielsku.

Jak włączyć Wątki Wirtualne?

W czasie moich wykładów, gdzie omawiana jest Java 19 (i gdzie obowiązkowo pojawia się sekcja dotycząca Wątków Wirtualnych), padało pytanie: jak włączyć wątki wirtualne na JVM przynajmniej kilka razy.

Niestety, tłumacz aktualnie jest mocno zarobiony i na razie nie da rady przetłumaczyć tego wpisu. Całość dostępna po angielsku.

You shall not pin Virtual Threads!

Bądźmy szczerzy: na Wątki Wirtualne (ang. Virtual Threads) czekaliśmy dość długo. Czekaliśmy z niecierpliwością, widzieliśmy zmieniające się nazwy (to nie są fibers ludziska), ale oto wreszcie są: Wątki Wirtualne.

Niektórzy twierdzą, że Project Loom jest największą zmianą w Javie od czasu wersji 8, lambd i strumieni. Inni uważają, że jest to jeszcze większa zmiana. Odkładając dyskusje na bok, zapowiada się na wielką zmianę.

Pamiętam, jak byliśmy podekscytowani (byłem wtedy jeszcze na studiach), że w końcu możemy używać prawdziwych wątków w Javie na Windowsie. Jednak czas leci, branża się zmieniła, sprzęt się zmienił, sposób, w jaki budujemy nasze systemy, również się zmienił. Choć znaleźliśmy sposoby na obejście ograniczeń “jeden wątek systemowy na jeden wątek Javy”, to jednak miało to swoją cenę: zagmatwane stosy wywołań i trudne debugowanie to pierwsze, co przychodzi na myśl. Wątki Wirtualne mają za zadanie utrzymać nas w nuuuuudnym, ale łatwym do zrozumienia modelu wątek-na-żądanie (ang. thread-per-request), jednocześnie odblokowując moc krzemu poniżej.

Co myślę o Lomboku?

Wydaje się, że to ciekawa wyspa, chętnie bym tam kiedyś się wybrał.

Co myślę o Projekcie Lombok?

Cóż, zadano mi to pytanie tak wiele razy, że postanowiłem popełnić ten wpis. Głównie po to, żebym mógł wkleić odnośnik i wycofać się na z góry upatrzone pozycje, gdyż intensywność kolejnej dyskusji może wzrosnąć do poziomu wygrażania pięściami i toczących się głów… Poczyniłem trzy założenia:

  • To są moje opinie. Mogą się komuś podobać lub nie. To zależy od Ciebie, czytelniku, i nic na to nie poradzę. Jeśli dla Ciebie zapoznawanie się z cudzymi opiniami przerasta możliwości samodystansu, to może pora przestać czytać właśnie teraz. Dotyczy to także (choć nie tylko) wszystkich wspaniałych dusz stojących za Projektem Lombok.
  • “Tylko krowa nie zmienia poglądów”, a jako że nie identyfikuję się jako krowa, moje opinie mogą się zmienić. Bo np. po przeczytaniu tego wpisu udało Ci się przekonać mnie, że nie mam racji. Wierz mi, lubię być wyprowadzany z błędu. Uważam to za absolutną podstawę podejścia naukowego. Z tego powodu ten wpis może być przedmiotem zmian wprowadzanych bez ostrzeżenia.
  • Zamiast pisać “Projekt Lombok”, będę pisać po prostu “Lombok”.

Niestety, tłumacz wziął wolne. Wpis dostępny po angielsku.

Wiele zmian, które obserwujemy w kolejnych wydaniach Javy (jeśli nie większość z nich), powstaje w ramach projektów grupujących / parasolowych. Często widzimy usprawnienia składni z projektu Amber, projekt Jigsaw przyniósł nam moduły, projekt Loom (uwaga, niespodzianka!) zajmuje się wątkami, projekt Panama, gerenalnie rzecz biorąc, jest o wydajnym i bezpiecznym wykorzystaniu metalu pod spodem. Spośród tych najbardziej znanych, projekt Valhalla też zaczyna do nas docierać, dzięki wydaniu JEPa-390 w ramach Javy 16.

W zeszłym roku poczyniłem dwa wpisy o torturowaniu rekordów w Javie Lombokiem. Na nasze (nie)szczęście (zależy, jak to widzisz), zespół Lomboka zdecydował się ukrócić nasze niecne zabawy. Jednakże nie składamy broni i tym razem idziemy po wzorzec budowniczego!