piątek, 29 grudnia 2023

Server socket all over place

 Kilka godzin tutoriali YT później i różnych prób, w końcu udało się zachęcić Server do współpracy :) Nie mogę powiedzieć, że to przełom, bo jeszcze parę innych rzeczy do zrobienia, ale cieszę się, że udało się przełamać tę blokadę, która trzymała mnie przez ostatnie dwa tygodnie.

sobota, 2 grudnia 2023

RTFM

 Pisanie programu to ciągła karuzela pomiędzy odczuciami geniuszu (działa!) a beznadziei (znów nie działa, trzeba szukać co się wywaliło, niejednokrotnie cofać się o krok i spróbować innego podejścia).

Dzisiaj chyba po raz pierwszy w mojej karierze dokumentacja java doc była tak przydatna i szczegółowa - dotyczy to użycia Selectora i SelectionKeys.

czwartek, 30 listopada 2023

Nowy projekt

 Nie zwalniam na pozostałych tematach (klient-serwer już powoli rozmawiają, ale powiedzmy, że to nie jest takie proste), a już wyłonił się kolejny ekscytujący projekt.

Trochę przypadkiem się złożyło, ale zgłosiłem się do pomocy w postaci korepetycji z Javy. Powiedzmy że Tomaszew na PJATK zasługuje na swoją renomę.

To trochę zabawne wrócić znów do absolutnych podstaw, takich jak tworzenie zmiennych, przypisywanie wartości, konwersja typów, ale jest też wyzwanie związane z tym, aby mojej uczennicy nie przytłoczyły te wszystkie informacje. Aby odnaleźć w tym szaleństwie metodę.

Na jakimś poziomie jest to ironiczne, że ja jestem zblokowany przez Selektory i multipleksowanie, a ona przez operacje na tablicach – ale może i nauka właśnie na tym polega, aby się z tym zmierzyć?

środa, 29 listopada 2023

Klient-serwer czyli klasyka

 Na TPO mam do przygotowania czatową aplikację opartą o klient-serwer z nieblokującą się komunikacją poprzez Selektory i multipleksowanie.

Przyznaję, że piszę sporo kodu (obecnie pracuję nad dwunastą wersją zadania, zresztą zacząłem ten kod "nauki" commitować na repo), ale mimo wszystko borykam się ze sporą złożonością zadania. Na tym etapie mam już działający serwer, który przyjmuje wiele połączeń klientów (którzy także są nieblokujący), ale z jakiegoś powodu nie ma dalszej komunikacji pomiędzy nimi. Pracowałem nad tym wczoraj do 2 w nocy, ale przy posiadaniu biurowej pracy w tzw. standardowych godzinach to tempo jest nie do utrzymania.

Z pewnych zaskoczeń - zadziwiło mnie w jakim stopniu ChatGPT jest pomocny w tych wyzwaniach - nie tylko przygotowuje fragmenty gotowego kodu, ale także odpowiada na pytania: dlaczego to działa tak, a nie inaczej, czy tutaj nie trzeba czegoś domknąć itp. Wykorzystanie chata do napisania całego zadania byłoby nieetyczne i nieskuteczne (moim celem jest nauka, a nie zaliczanie punktów), ale mimo wszystko stanowi fajny odpowiednik starszego kolegi, którego zawsze mogę spytać o różne rzeczy, nawet głupie. I co ciekawe bardzo często ma rację, bo widzę, że kod działa.

niedziela, 26 listopada 2023

Wskrzeszamy projekt

 Tym razem wpisy będą krótsze, bo szkoda czasu, kiedy można kodzić.

W semestrze mam aż trzy przedmioty programistyczne związane z Javą: Uniwersalne Techniki Programowania, Techniki Programowania Rozproszonego oraz Modelowanie i Analiza Systemów Informacyjnych.

UTP - przerabianie "prostych" zadań na kolekcjach, wątkach, idzie ogarnąć dość łatwo.

TPO - właśnie walczę z aplikacją klient-serwer, piszę dziesiątą wersję.

MAS - tutaj chodzi o oddanie modelu biznesowego (stworzenie go) oraz implementację. Diagram klas, różne modele asocjacji itp.

czwartek, 11 listopada 2021

niedziela, 5 września 2021

Powrót do javy

 Wracam do zadań z codewars i przypominam sobie pisanie Javy. To zupełnie inne wrażenie niż kodowanie w JS, ale bardzo przyjemne i chciałem się tym podzielić.

niedziela, 15 sierpnia 2021

Wakacje

 Jak tam idzie pisanie? No, nie idzie, niestety. Wymówki, że ciężkie egzaminy, nauka, potem potrzeba odpoczęcia. Wystarczy, czas się jakoś organizować znów.

Mam wykupiony kurs javowy, w pracy (do której wracam jutro) zacząłem kodować w javascripcie (google apps script).

sobota, 5 czerwca 2021

Bash bash bash

 Przyznaję, że po całym programowaniu w Javie przestawienie się na skrypty shellowe jest dość zawiłe. Niby Java pokazała jak upierdliwy może być język ściśle typowany, ale bash posiada jakąś inną, wewnętrzną logikę, która jest często ciężka do wyczucia.

wtorek, 1 czerwca 2021

Dwa lata nauki

 Od czasu, gdy zająłem się nauką Javy minęło około 27 miesięcy. Zaczęło się od kursu na Coderslab, później sporo samodzielnej nauki, która wciąż trwa. Studia programistyczne to kolejny krok na tej drodze i jednocześnie realizacja mojego marzenia, związanego z uzyskaniem wyższego wykształcenia. Powoli kończę II semestr studiów, niewiele to jeszcze, ale zauważyłem, że ostatnio moje zacięcie do programowania spadło.
Projekty programistyczne, w których brałem udział lub prowadziłem - wygasły, a na nowe zabrakło energii. Życie, praca, skomplikowana historia.

Nie poddaję się. Wracam powoli - najpierw przez Codewarsy, a potem chciałbym zrobić jakiś większy projekt. W końcu mam wykupiony kurs Java Ready Bartka Kalki i chciałbym z niego skorzystać :)

czwartek, 13 maja 2021

Projekt na studia - manager mieszkań

 Rozpoczynam projekt TenantManager, to aplikacja konsolowa na zaliczenie z programowania obiektowego. Model jest dość rozbudowany i ma uwzględniać wiele funkcji, w tym m.in. wielowątkowość - dotychczas nie ruszałem tego tematu na kursach i jest to coś, co poznałem dopiero na studiach.

Projekt jest dość ambitny, a czasu wcale nie mam wiele, ciekawe ile uda się go stworzyć.

niedziela, 11 kwietnia 2021

Dłuższa przerwa

 Przerwa w pisaniu na blogu nie oznacza, że nic się nie dzieje. Projekt algorytmu genetycznego dostaje kolejne warstwy, chociaż trzeba przyznać, że tempo kodowania nam zwolniło.

Mam nowy przedmiot na studiach GUI (programowanie obiektowe i GUI na którym mam bardzo fajnego prowadzącego ćwiczenia, widać, że stara się wymyślić ciekawe projekty do napisania. Ostatnie ćwiczenie z interfejsów to pisanie klasy gracza w kamień-papier-nożyce, mamy zakodować jakiś algorytm i na zajęciach odbędzie się turniej na którym sprawdzimy kto napisał najlepszy.

Jak trafi mi się jakiś fajny snippet to wrzucę też tutaj :)

środa, 17 marca 2021

Buildery na ratunek

 Projekt algorytmu genetycznego powoli przybiera całkiem konkretnych kształtów - powoli tzn. pracujemy już w 14. sprincie, więc całkiem długo. Kodowanie zwolniło ostatnio i zauważyłem, że powodem, dla którego nie jestem w stanie myśleć swobodnie i tworzyć nowych testów jest złożoność strukturalna.
Nasz obiekt GenePool zawiera usługę GenePoolService, która z kolei obsługuje wiele kolejnych zależności, odpowiadających za różne akcje - mutowania, tasowania genów, sprawdzania warunku zakończenia, sortowania genów wg ich dopasowania, itp. Ustawienie testu integracyjnego z takiej mozaiki jest całkiem skomplikowanym zadaniem i odciąga moją uwagę od istoty rzeczy.
Dlatego też stwierdziliśmy, że napiszemy buildery, które będą nam zwracały domyślne wartości dla poszczególnych etapów - tak, aby testowanie sprowadzało się do prostego wywołania build z dodaniem ewentualnych parametrów za pomocą metod konfiguracji tam, gdzie chcemy coś zmodyfikować. Plan rozpisany na taski wydaje się całkiem wykonalny i przyjemny - jak będzie w praktyce, zobaczymy.

sobota, 13 marca 2021

GUI

 Jeden weekend ferii i wracamy do pisania. Kontynuacją podstaw programowania w Javie na studiach jest GUI, w ramach którego będziemy mieli programowanie obiektowe, Swinga i JavaFX. Tak więc zaprzyjaźnie się z javowym "frontem", praktycznie nieobecnym w ogłoszeniach o pracę dla Java developerów.

niedziela, 28 lutego 2021

Nowy rodział – semestr 2

 Wczoraj dostałem informację o tym, że z poprawki Javy mam czwórkę, także mogę się pochwalić zaliczeniem wszystkich przedmiotów i wejściem na czysto w nowy semestr. Gdzieś na grupie studenckiej pojawiła się informacja, że na 313 uczęszczających na wykłady z PPJ (podstaw programowania w Javie) aż 171 osób było z ITN-ami, czyli powtarzało ten przedmiot. Trochę szokująca ta liczba, ale w sumie wiarygodna, bo nasz wykładowca pokazał, że jak chce to potrafi uwalić niemal każdego.

Co u mnie – studia rozpoczynam za dwa tygodnie, także jest chwila oddechu. Powoli wracam do naszego projektu algorytmu genetycznego – jesteśmy już na jedenastym "sprincie" i jednocześnie bardzo blisko działającej aplikacji.

Zapisałem się na kurs https://javaready.pl/ od Bartka Kalki i powoli zapoznaję się z materiałem. W końcu mam chwilę czasu, aby się na tym skupić. Co prawda kurs przewidziany jest dla osób starających się znaleźć pierwszą pracę jako developer, co... na razie mi nie grozi, no ale liczę na to, że zapoznam się trochę z samą praktyką programowania, narzędziami no i że w końcu uda mi się wydevelopować pierwszy działający kod w Javie do netu.

Projekt javowo-warhammerowy chyba ucichł, przypomnę się im z ofertą pomocy (czy może współpracy/nauki, bo kod mają bardziej rozwinięty niż moje dotychczasowe skille).

Jak na złość pojawiła się także fajna oferta pracy w supporcie technicznym jednego z adserwerów, do czego miałbym spore predyspozycje a i wiedzę branżową (ze strony użytkownika). Żałuję, że nie było takich ogłoszeń jak szukałem.

wtorek, 16 lutego 2021

Zadanie z analizy kodu

 Na dzisiaj mam krótką zagadkę związaną z poniższym kodem. Co się wyświetli?

public class Exploit {
public static void main(String[] args) {
Elementary elementary = new Elementary(1);
}
}

class Elementary {
double value;

public Elementary(int seed) {
this(seed == 1 ? (float) seed : (double) seed);
}

public Elementary(float floatSeed) {
this.value = floatSeed;
System.out.println("You passed");
}

public Elementary(double doubleSeed) {
this.value = doubleSeed;
System.out.println("You failed");
}
}


No właśnie, w metodzie main wołamy nasz obiekt Elementary i jego konstruktor. W konstruktorze dokonuję banalnego testu, którego wynikiem będzie true, po to, aby castować wartość seed na float i wywołać floatowy konstruktor.
Niestety nic z tego. Zgodnie z bardzo rozbudowaną sekcją specyfikacji Javy (15.25) ternary operator zachowuje się tutaj dość niespodziewanie: jeżeli jedna z opcji jest typu double, to druga też będzie tak castowana. Działa to także dla innych typów, ale szczerze mówiąc na razie jest to dla mnie dość hermetyczne.
Kto zna speckę Javy na pamięć, ten zdał ;)

sobota, 13 lutego 2021

Po pierwszym egzaminie z Javy

 Pierwszy egzamin z podstaw programowania był naprawdę trudny, pełny zadań związanych z analizą kodu i rozwiązywania wyrażeń typu 'a' & 2 == 'c'. Ciekawe jak mi poszło. Zastanawiam się też jak sobie poradzą osoby, dla których to była pierwsza styczność z programowaniem. Wyniki za parę dni.

wtorek, 2 lutego 2021

Czasu brak

 Wchodzimy w okres egzaminacyjny, w którym bardzo dużo tematów jest na raz, aż nie wiem za co chwycić się na początku. W tygodniu praca i raczej urlopu nie wezmę, zresztą dopiero co zacząłem pracować. Po godzinach zaś trzeba się uczyć. Deadline projektu kontenerowego w Javie za 2 dni a ja mam wielkie nic - trzeba będzie zrobić coś prostego i ograniczyć się do minimum, aby złapać jakiekolwiek punkty za to. Projekt algorytmu genetycznego powoli się rozwija, ale... tempo iście żółwie. Do tego intensywna nauka matematyki i (nie wiem kiedy) architektury komputerów.
W pracy, gdzieś między zadaniami, pojawił się projekt w Pythonie, więc będę mógł poznać nowy język. Tylko jak to ogarnąć? :)

sobota, 30 stycznia 2021

Wprowadzenie do konteneryzacji

 Powtarzając żart jednego z kolegów studentów, zadziwiająco szybko na naszych Podstawach programowania w Javie wprowadzamy konteneryzację. Wszystko za sprawą projektu semetralnego, w którym będziemy zajmowali się transportem morskim towarów w kontenerach oraz modelowaniem wielkiego kontenerowca, który będzie te ładunki przewoził. Jak minie deadline to pochwalę się kodem (jeszcze nic nie napisałem), są pewne ograniczenia formalne, które utrudniają pisanie - np. cała aplikacja musi znajdować się w jednym pliku.

wtorek, 26 stycznia 2021

Timebomb - zaplanowana katastrofa

 Spodobał mi się pomysł opisany w artykule https://bulldogjob.pl/articles/1256-bomba-czasowa-przydatna-rzecz – od strony programistycznej jest to w zasadzie bardzo banalne: w krytycznym punkcie naszej aplikacji, który wymaga w przyszłości uzupełnienia zostawiamy Exception, który pozostaje uśpiony przez pewien czas.
Idea jest taka – nasza metoda jest krytyczna dla dalszych etapów i potrzebujemy uzupełnić informacje, ale proces uzyskiwania odpowiedzi jest bardzo długi (przez skomplikowanie projektu, procedury po stronie klienta itp). Robimy w kodzie prowizoryczne rozwiązanie i zgłaszamy klientowi pilną potrzebę uzyskania dodatkowych informacji. Exception, czyli nasza bomba, wybuchnie po ustalonym przez nas czasie, wywalając całą aplikację, o ile nie dostaniemy wcześniej potrzebnych informacji, aby załatać lukę.

Wybuch bomby niezawodnie zwraca uwagę klienta, a my przecież ostrzegaliśmy, że potrzebujemy pilnie uzupełnić dokumentację, bo może stać się coś złego. Po co ryzykować wkurzenie klienta? Bo jeżeli nasze monity będą ignorowane i wadliwy kod trafi na produkcję, to konsekwencje mogą być dla nas bardzo nieprzyjemne. A przecież ostrzegaliśmy klienta, że coś się może wywalić no i się wywaliło – nikt nie powinien być zdziwony.

Przy zastawianiu bomb trzeba mieć odpowiednie wyczucie, na pewno powinna być udokumentowana tak, aby dało się bardzo szybko ustalić dlaczego aplikacja kliencka nagle przestała działać.

Server socket all over place

 Kilka godzin tutoriali YT później i różnych prób, w końcu udało się zachęcić Server do współpracy :) Nie mogę powiedzieć, że to przełom, bo...