Zapraszam do ostatniego wydania w tym roku! Już jestem w świątecznym nastroju, więc nie będzie brakowało takich właśnie motywów.
1. Java Advent Calendar o Jupyter Notebookach
Jestem wielkim fanem Kalendarzy Adwentowych i stały się one jednym z moich najbardziej wyczekiwanych aspektów okresu przedświątecznego. O Advent of Code już kiedyś pisałem, ale tego typu inicjatyw jest więcej. W świecie Javy od lat istnieje choćby inicjatywa kalendarza adventowego Javy, gdzie codziennie publikowany jest nowy artykuł poświęcony jakiemuś ciekawego aspektowi ekosystemu. Stwierdziłem, że warto o inicjatywie napisać, a przy okazji podzielić się moim ulubioną tegoroczną publikacją (przynajmniej do tej pory) – świetnym opracowaniem tematu Jupyter Notebook i jego wsparcia dla języków JVM.
Dzień 10 tegorocznego kalendarza JUPYTER NOTEBOOKS AND JAVA? omawia integrację Javy (choć wspomniany jest też Kotlin) z Jupyter Notebookami, podkreślając korzyści i potencjał tej kombinacji. Jupyter Notebooki to interaktywne środowisko obliczeniowe, które umożliwia tworzenie i udostępnianie dokumentów zawierających żywy kod (którym można się bawić i go edytować), możliwość tworzenia równań, wizualizacji czy tekstu “narracyjnego” – wszystkiego co konieczne jest przy wszelkiej maści researchach (akademickich, ale nie tylko). Tradycyjnie Java nie była uważana za sprzyjającą “eksploracyjnemu” trybowi tworzenia kodu Notebooków z powodu procesu kompilacji. Jednakże, nowe narzędzia takie jak JBang czy ulepszenia w samym OpenJDK uprościły eksperymentowanie w Javie, co umożliwia jej efektywniejsze używania z Notebookach.
Artykuł przedstawia różne aspekty używania Javy w Notebookach Jupytera. Przedstawia zalety interaktywnego trybu pracy, pozwalającego na wykonanie kodu w czasie rzeczywistym i dostosowywanie go, co jest odmianą od typowego sposobu rozwoju aplikacji w Javie. Tekst porusza również potencjał Javy w wizualizacji danych w Notebookach Jupyter, a także wygodę interfejsów IDE opartych na lokalnie hostowanych aplikacji webowych. Co ważne, ogłoszono też powstanie organizacji githubowej jupyter-java. Ma ona na celu uproszczenie używania Javy w środowiskach Jupyter, i dbanie o dalsze perspektywy tej integracji. Pierwszą wydaną publikacją jest awesome-jupyter-java, która stanowi zbiór linków, które mogą przydać się każdemu, kto chciałby zainteresować się tematem.
Ogólnie to tylko jedna z perełek z tegorocznego kalendarza – polecam każdemu sprawdzić samodzielnie, bo wśród 21 artykułów (a można się spodziewać jeszcze kolejnych 3) powinno znaleźć się coś dla każdego.
Zainstaluj teraz i czytaj tylko dobre teksty!
2. Amazon Q AI wprowadza automatyczną migracja z JDK 1.8
Zanim wrócimy do świątecznych motywów, to po drodze jedna pozostałość po AWS Re:Invent. Doroczna konferencja Amazonu w zeszłym roku przyniosła AWS Lambda SnapStart, redukujący Cold Start funkcji Lambda pisanych w Javie. Przyznam, że oryginalnie wydawało mi się, że w tym roku nie było za wiele Java-related ogłoszeń poza wersji AWS SDK dla idiomatycznego Kotlina. Okazało się jednak, że jedna nowość prawie przeleciała pod moim radarem, a jest niezwykle interesująca. Dotyczy bowiem popularnych ostatnio LLM i opublikowanego na konferencji nowego asystenta od Amazonu – Amazon Q.
Amazon Q to AI asystent dostępne dla Visual Studio Code oraz IntelliJ dla użytkowników z licencją CodeWhisperer Professional. Jedną (i kluczową z perspektywy tego akapitu) funkcją Amazon Q jest Code Transformation, umożliwiająca inteligentny masowy refaktoring, automatyzując powtarzalne zadania. Na razie jego możliwości są relatywnie wąskie, ale z naszej strony naprawdę interesujące – narzędzie to wspiera modernizację aplikacji Javowych, przekształcając kod z wersji Java 8 lub Java 11 na wersję Java 17, czyli najnowszego LTS-a. Warto wspomnieć, że narzędzie jest na razie w wersji Preview, co wiąże się z pewnymi ograniczeniach – na ten moment wspierane są tylko projekty oparte o Mavena.
Działanie procesu opisuje tekst Upgrade your Java applications with Amazon Q Code Transformation (preview), w którym możemy zapoznać się ze sposobem działania całości. Widać, że Amazon dobrze przemyślał sobie działanie i zadbał o to, żeby w wygodny sposób (trochę podobny do standardowego Review kodu) dać możliwość zatwierdzenia zmian człowiekowi, co z pewnością uspokoi użytkowników bojących się nadmiarowej magii.
Aczkolwiek i tak pewnie odbędzie się to zgodnie z zasadą:
no, chyba że włączy się nasza ludzka natura i na siłę będziemy starali się znaleźć maszynie błąd.
To kto skacze na główkę i próbuje u siebie pierwszy 😃? U mnie “niestety” wszystko na JDK 17, ale bardzo chętnie zrealizuje z kimś jakieś POC.
Zainstaluj teraz i czytaj tylko dobre teksty!
3. Nowe życie klasycznej appletowej gry dzięki CheerpJ
To teraz zamknijmy nostalgicznie, świątecznym akcentem.
Chyba jestem już w wieku, że w okresie Bożego Narodzenia macie potrzebę wracania do emocji z dzieciństwa – a jestem w wieku, że moje mocne emocje z dzieciństwa bardzo wiążą się z grami komputerowymi. Przykładowo, w zeszłym roku grałem w mojego ukochanego Warcrafta 3, który na szczęście obecnie dostępny jest na wszystkie dostępne systemy i maszyny. Jednak nie o każdej grze można tak powiedzieć – przykładowo, okazuje się że wiele oryginalnych technologii webowych ze względu na wymagania bezpieczeństwo (początki sieci były dziurawe jak sito) czy po prostu porzucenie przez oryginalnych twórców jest trudne do replikacji na współczesnych systemach operacyjnych. Sam miałem niedawno problemy z odpaleniem aplikacji napisanych we Flashu, a jak się okazuje, pasjonaci staroci stworzonych jako Applety Javy też nie mają dzisiaj lekkiego życia.
Na szczęście Digital Preservation ma swoich czempionów i wiele pozytywnie zakręconych historii, jak ta dotycząca Dragon Court.
Dragon Court to gra, która wydana była około 1997 roku i bazowała na aplecie Java. Swego czasu zyskała olbrzymią popularność, głównie dzięki systemowi zachęcającemu do codziennego logowania, co mocno przywiązało do niej bazę użytkowników.
Jednak po usunięciu wsparcia dla apletów Java w przeglądarkach i zaniedbaniu przez oryginalnego twórcę, gra stała się niegrywalna i przeszła do kategorii „abandonware”. Próby ożywienia gry przez wieloletnich fanów napotykały na trudności związane z niekompletnymi materiałami źródłowymi i opierały się na wspomnieniach fanów, co uniemożliwiało wierną rekonstrukcję.
Historia ma jednak happy end. Odrodzenie Dragon Court możliwe stało się dzięki wykorzystaniu CheerpJ, maszyny wirtualnej Java dla przeglądarek, co umożliwiło uruchomienie gry w ich nowych wersjach. Projekt, nazwany Dragon Court: Revived, rozpoczął się od odzyskania ostatniego znanego binarnego pliku gry z Internet Archive. Istotną częścią projektu było dekompilacja oryginalnego pliku .jar, co pozwoliło na naprawę błędów i dodanie nowych funkcji. Użycie CheerpJ ułatwiło także tworzenie nowych poprawek i ulepszeń, takich jak wsparcie dla urządzeń dotykowych i zachowanie preferencji użytkowników w ciasteczkach. Jednak działanie fanów nie ogranicza się do technikaliów – obejmuje też tworzenie nowych treści, zmiany balansu i poprawki jakości życia, co czyni Dragon Court: Revived niezwykłym hołdem dla jego dziedzictwa, jednocześnie adaptując je dla współczesnych graczy.
CheerpJ to ogólnie ciekawy projekt i od dawna szukałem okazji aby o nim wspomnieć. Mamy do czynienia z implementacją JVM, która umożliwia uruchamianie aplikacji bezpośrednio w przeglądarce internetowej, bez potrzeby instalacji dodatkowych wtyczek czy oprogramowania. CheerpJ konwertuje kod bajtowy Java na JavaScript, umożliwiając działanie aplikacj w środowisku przeglądarki, co pozwala na ich dalsze użytkowanie i rozwój, nawet jeśli oryginalne środowisko, dla którego zostały zaprojektowane, już nie istnieje – jak to ma miejsce w przypadku appletów i związanych z nimi wtyczek. CheerpJ daje takim aplikacjom drugie życie i jest w tym coś pięknego.
No to co, widzimy się już w 2024! Mam nadzieje, że okres świąteczno-noworoczny spędzicie tak jak sobie to wymarzyliście 🎄🥂.
PS: Przyszły rok rozpoczniemy sobie od podsumowania 2023. Już zacząłem nad tym tekstem pracować i co Wam mogę powiedzieć – działo się!