#java

22
52
Mikroserwisy, wszędzie mikroserwisy. Tylko jak testować to w praktyce? Podejść jest wiele, jedno z nich to testy integracyjne. W ramach teorii tak zwanego "black box testing" nie powinniśmy ingerować w wewnętrzne komponenty systemu a jedynie weryfikować wejście i wyjście z systemu.
Oczywiście jest to łatwe w teorii, nieco trudniejsze w praktyce. Jak więc poradzić sobie z wyzwaniem pt. po wywołaniu HTTP powinien być komunikat w Kafce? Na przykład przy pomocy biblioteki testcontainers: https://www.testcontainers.org/, która pozwala uruchomić wasz serwis oraz jego zależności w postaci kontenerów. Naturalnie symulowanie całego klastra np. kubernetes mija się z celem, natomiast z powodzeniem można dorzucić przynajmniej tę część infrastruktury, która zapewnia komunikację.
Testcontainers poza podstawową funkcjonalnością pozwalającą na uruchomienie dowolnego kontenera z kodu Javy, dostarcza również moduły dla PostgreSQL, MySQL, Cassandra czy też ElasticSearch - lista kontenerów do przejrzenia: https://mvnrepository.com/artifact/org.testcontainers. Z ciekawszych rzeczy - można uruchomić z testem również selenium, które działa w kontenerze, bez konieczności aranżowania wszystkich zależności systemowych potrzebnych do uruchomienia przeglądarki. Brzmi świetnie, nieprawdaż?
#java #docker
6
splatch

@Kazix Chodzi głównie o przygotowanie testu w trakcie którego zamieniając komponent na potrzeby testu z docelowego (np. baza danych, kolejka JMS lub topic Kafki na implementację in-memory) pośrednio ingeruje się w zachowanie systemu. Twój test wciąż jest integracyjny, ponieważ wchodzić w interakcję na wyższych warstwach, ale do weryfikacji wyników wymaga wymiany warstw niższych.

damw

ale nie da rady ogarnąć kolejek


@splatch dlatego napisałem przy wiremocku rest call. Te 2 narzędzia się uzupełniają - testcontainers do stawiania faktycznej bazy/kolejki itd, wiremock do "mockowania" innych mikroserwisów z których korzysta testowany komponent.

DexterFromLab

@splatch testcontainers zjada hibernate na śniadanie i wyplówa pestki. Jest sztos.

Zaloguj się aby komentować

Golden_rule

@MokebeTesto Bo to ty masz im płacić za możliwość zdobycia stażu. Ale tylko przez dwa lata. Potem rok pracy za darmo, a potem już z górki. [̲̅$̲̅(̲̅ ͡° ͜ʖ ͡°̲̅)̲̅$̲̅]

BananowyKoko

@MokebeTesto bo gówno dziennikarze naprodukowali artykułów w stylu: „po 3 miesiącach zaczął zarabiać 15 tysięcy na rękę [zobacz sposoby na IP BOX]” i wszyscy stwierdzili, że IT to ich przeznaczenie. Dlatego po co firmy mają się starać i organizować pracę / staże dla młodych, jak kupa ludzi sama się pcha do pracy za darmo.

splatch

@MokebeTesto Tak jak pisał @xeerxees - problem z rynkiem jest taki, że w minionych latach przyszło dużo ludzi chętnych na siano a niekoniecznie miał ich kto przetransformować w midów, którzy mogliby szkolić nowy zaciąg. Dodam do tego to, że sporo firm za granicą redukuje zatrudnienie, włączając w to również IT, które było co by nie mówić, bardzo długo świętą krową. Będzie to miało, jeśli już nie ma, częściowe przełożenie na ilość nowych projektów w kraju i to ilu ludzi do nich trzeba zatrudnić.

Na przestrzeni minionych 4 lat miałem na praktykach po około ~1 msc. dwie juniorki, które przekwalifikowywały się z branży około-budowlanej (projektantki instalacji/bim itp.), obie sobie poradziły z praktykami. Znalezienie pracy po praktykach u mnie zajęło im co prawda 2 lata, co pokazuje tyko tyle że kluczem do sukcesu jest wytrwałość.

Nie poddawaj się, ucz się kolejnych rzeczy i próbuj dalej!

Zaloguj się aby komentować

Witam serdecznie towarzystwo
Kształcę się na Java backend developera, a jako że jest promocja na udemy, to pomyślałem, że dokupię parę kursów.
Z ogłoszeń o pracę wydedukowałem, że najbardziej pożądany stack technologiczny przy Javie to:
  • Spring
  • Hibernate
  • PostgreSQL
  • ew. Apache server
Czy ktoś mógłby polecić jakieś dobre materiały z ćwiczeniami, na które warto poświęcić czas i ew. pieniądze (np. na udemy)? Jestem nowicjuszem i nadal ciężko ocenić mi jakość materiałów.
Dotychczas miałem do czynienia z materiałami dr. Chucka (python 4 everybody), które uważam za świetne, jeżeli chodzi o formę, sposób tłumaczenia, quizy i zadania praktyczne dla takiego nowicjusza jak ja.
Aktualnie uczę się na udemy javy z kursu pana Buchalki, który zły nie jest, ale imo mocno rozwleczony (np. zamiast w połowie kursu pisać już snippetami "sout" albo "psvm" to nadal klepie cały kod z klawiatury, jakby chciał celowo zrobić czasowo dłuższy kurs) a dr. Chuck dużo lepiej i przystępniej tłumaczył sporo konceptów, ale niestety pominął trochę spraw, które później mogą się przydać (np. nie wiedziałem nawet, że integery mogą być również przedstawione jako hex)
Stąd też takie pytanie, czy jest tu ktoś kto już ma jakieś doświadczenie i obeznanie i jest w stanie podpowiedzieć, które materiały są ok, a które smrut, z wymienionego przeze mnie stacku?
8
Meverth

@kao a jak się najlepiej uczysz? Wybierz sobie jakiś cel: zrobić stronkę, zrobić aplikację, pomóc w aplikacji mobilnej hejto, czy cokolwiek. Byle należało wymyślić rozwiązanie jakiegoś problemu. Później realizując projekt, ucz się i googlaj.

Nie wiesz, jak uruchomić lokalnie projekt w spring-boot? google: "run spring-boot project" i wchodzisz na pierwszy wynik, np.: https://www.geeksforgeeks.org/how-to-run-spring-boot-application/

Jak nie to, to szukasz jak odpalić z konsoli. Albo jak odpalić za pomocą gradle. Jest mnóstwo poradników, artykułów itp. Możesz też podpytać AI i GTP3, ale może wprowadzać w błąd i często ma przestarzałe dane. Jednak na początek nauki powinien się nadać.

kao

@Meverth szczerze, to najlepiej uczy mi się zaczynając od kursów prowadzących za rączkę, później przechodząc do własnych projektów. Kiedy na studiach uczyłem się oprogramowania CAD, to najlepiej mi szło, zaczynając od tutoriali prowadzących za rączkę na YouTube, później przechodząc do zadanek z książek i inżynierii własnych pomysłów. Tutaj wydaje mi się, że podobnie będzie się to sprawdzać

Na pewno przechodząc z Pythona na Javę, dużo łatwiej mi po prostu wpisać "how to parse int to string in java" w Google zamiast przechodzić samouczki od zera. Z frameworkami i bazami danych trochę trudniej, bo nie miałem nigdy z nimi do czynienia, a zanim zacznę się czymś bawić sam, lubię dobrze zrozumieć od podstaw co i dlaczego jakoś działa.

Meverth

@kao zrozumienie każdego szczegółu bardzo mocno cię spowolni. Zagłębiać się można w nieskończoność. Pod językiem obiektowym mamy wszystko sprowadzone do komend ala assembler, pod tym de facto bity. Zaczniesz roztrząsać, jak interpretujemy ten sam bajt w różnych kodowaniach, to wejdziesz na algorytmy, od tego już prosta droga do algorytmów zapisu, kompresji, różnych sposobów przesyłu danych. Wejdziesz na działanie procesora, operacje bitowe, całki i zaawansowaną matematykę, przy okazji zahaczysz o AI, bo raz, że to teraz modne a dwa, że korzysta z tych wszystkich dobrodziejstw, a projekt w tym czasie leży odłogiem i kwiczy.


Nie mówię, że nie warto zrozumieć jak działa dany framework, język czy serwer aplikacyjny. Mówię, że nie ma się co za bardzo zagłębiać, jeśli nie jest to w tym momencie niezbędne. Warto zagłębić się bardziej, po godzinach, w ramach ciekawostki, po rozwiązaniu problemu biznesowego, ale niech to nie stoi na przeszkodzie w dowiezieniu funkcjonalności.


To, że (teraz/jeszcze) nie pracujesz w zawodzie, nie ma znaczenia: chodzi o nastawienie. Wpierw niech działa, a później zagłębiamy się w to czy to najlepsze rozwiązanie. Podejście w programowaniu: dostarczamy feature (wraz z testami), później refaktoring.

Zaloguj się aby komentować

Dziś premierę ma kurs Javy autorstwa Michała Gellerta (ja jestem wydawcą, a on autorem).
https://jdb.mikr.us/
To kolejny z serii kursów 'w godzinę', których celem jest dostarczenie wartościowej wiedzy w możliwie skondensowanej formie.
Do niedzieli (20.11) kurs można dostać w niższej, premierowej cenie.
4d1e23a8-6442-4fa0-a925-d0fddf9181b0
0

Zaloguj się aby komentować

Jedna z rzeczy, która mnie bardzo irytuje w Javie to toporność interakcji z systemem operacyjnym. Rozumiem, że JVM jest przenośne i tak dalej, ale ile trzeba się naszarpać, żeby wywołać coś z biblioteki SO/DLL przekracza ludzie pojęcie. Mam nadzieję, że zmiany z FFI (foreign function interface) do użycia i wywołanie funkcji z bibliotek systemowych przestanie być udręką.
Dla jasności programiści JVM mają do dyspozycji JNI, które wymaga kompilacji kodu natywnego, żeby ten można było wowłać z poziomu JVM. Z mniej topornych opcji mam JNA (oparte o libffi), które jest dość wolne, oraz nieoficjalne api jnr-ffi.
Dla zainteresowanych https://openjdk.org/jeps/424 i https://github.com/jnr
2
splatch

@DexterFromLab To prawda, z tym że jako język/platforma nadaje się do GUI i aplikacji wysokopoziomowych. Niekoniecznie jest w tym dobra, ale ma tę przewagę nad innymi platformami, że zmiana architektury procesora czy systemu operacyjnego nie ma dużych implikacji. Druga kwestia, że jest sporo aplikacji wysokopoziomowych typu klient/server, w których można z powodzeniem wykorzystać JVM.

Zaloguj się aby komentować

Programujesz? Nie wiesz o co chodzi z tym "Log4j"?
Próbuję to wyjaśnić w najnowszym filmie pokazując podatność CVE-2021-44228 na prostym kawałku kodu.
• Dowiesz się jak użyć Canary Tokens do wykrycia podatności w swoich aplikacjach.
• Zobaczysz, że można wykraść zmienne środowiskowe korzystając z interactsh
• Pokazuję, że podatne mogą być wszystkie wersję Javy - te nowsze i te starsze.
• Zmienna "LOG4JFORMATMSGNOLOOKUPS" nie zawsze rozwiązuje problem.
• Wersja 2.15.0 nie jest najlepszym rozwiązaniem
Masz znajomych programistów? Podeślij im ten film - może ich zainteresuje
https://www.youtube.com/watch?v=sPa83lM7YJs
1
Rododendron

@KacperSzurek bardzo ciekawie wytłumaczone + fajny lektorski głos

Zaloguj się aby komentować

Dlaczego samochody są złe, czyli po jakiego grzyba tutoriale robią nam wodę z mózgu?
W końcu się zmotywowałem, a poniżej efekt Zapraszam też do obserwowania tagu #luznegatkiprzyjavie <- tu będę wrzucał swoje wypociny.
Jeśli ktoś z Was uczył się jakiegoś obiektowego języka programowania to mógł się przed chwilą uśmiechnąć pod nosem. Samochody. Wszędzie te samochody. Oczywiście, samochody posiadają markę, kolor, silnik. To już musi brzmieć znajomo. Ale od początku.
Obiekt. Podstawowa jednostka czasu i przestrzeni w obiektowych językach programowania. A może to jednak klasa jest tą jednostką? Prawda jest taka że w przypadku obiektów i klas nie ma dylematu kury i jajka - tu wszystko jest jasne. Klasa jest "projektem" obiektu, a obiekt instancją klasy. I choć w Javie wszystko dziedziczy po klasie Object, to jednak nie ma obiektu bez klasy.
Część z Was już wie, a część z Was zaraz się dowie, że klasa będąc "projektem" obiektu, jego definicją, w swoim najprostszym ujęciu może posiadać pola oraz metody. Pola służą do przechowywania danych, z kolei metody, w dużym uproszczeniu, coś z tymi danymi przechowywanymi w polach robią.
No ale dziki! Co z tymi samochodami, bo się niecierpliwimy!
Już odpowiadam. Jeśli ktoś miał okazję robić jakiś tutorial z Javy albo uczestniczył w bootcampie to prawie na sto procent widział public class Samochod. Taki Samochod miał pola: private String kolor, private String marka i obowiązkowo private Silnik silnik. Posiada też metody. I tu się zaczyna cały problem jaki widzę. Bo czy logicznym z punktu widzenia początkującego programisty jest to że Samochod posiada metody uruchom() czy zahamuj()? Ano tak. A czy z perspektywy programowania obiektowego ma to sens? Ano nie. Paradoksalnie, często w tutorialu samochód jest jeszcze dalej eksploatowany, i w pewnym momencie służy do wytłumaczenia czym jest odwrócenie zależności, i wtedy (najczęściej) jest to zrobione poprawnie. Ale o tym kiedy indziej.
To co z tym samochodem jest nie tak że jest on złym przykładem? Bo samochód sam w sobie jest tworem zbyt skomplikowanym żeby móc go opisać za pomocą jednej klasy która będzie zawierała absolutnie wszystkie jego elementy składowe, metody, enumeracje, i co tylko sobie można jeszcze tam wyobrazić.
Dlaczego nikt nie używa jako przykładu czegoś prostszego? Weźmy takiego buta. But ma kolor, but ma markę, składa się z kilku różnych materiałów które zostały użyte do jego produkcji, ma sznurówki, rzepy czy zamek. No but. Chyba każdy z Was widział kiedyś buta.
Jedyne metody jakie może mieć nasz but to tak zwane gettery i settery - metody które służą do ustawiania wartości pól. Przykładowo - but ma kolor, więc setterem do ustawienia koloru będzie setColor() a getterem do pobrania wartości koloru będzie getColor(). Bez żadnych skomplikowanych powiązań między wewnętrznymi elementami buta. Jest on też doskonałym przykładem do tego by pokazać kilka rodzajów pól jakie może mieć klasa. Kolor - ciąg znaków, rozmiar - wartość liczbowa, sposób wiązania - enumeracja (sznurówki, rzepy, zamek), a rodzaj materiału może być osobnym obiektem o nazwie Material, który będzie miał w środku przykładowo rodzaj materiału i wartość prawda/fałsz odnosząca się do jego nieprzemakalności. Proste? Proste.
But nie będzie miał metod takich jak załóż() czy zawiąż() - bo każdy chyba się zgodzi że but się sam nie zakłada ani sam się nie zawiązuje (no dobra, wiem że istnieją Nike Adapt :P) - wiadomym jest że za zakładanie buta odpowiedzialny jest inny obiekt - Człowiek.
Odpowiedzialność to też ważne słowo w programowaniu obiektowym. Dziś rozpisywać się o tym nie będę, ale chciałem napomknąć jedynie że w programowaniu obiektowym mamy wprowadzony zestaw założeń opisywany skrótem SOLID - gdzie rozwinięciem pierwszej literki jest "Single responsibility principle" mówiąca o tym że klasa powinna mieć tylko jedną odpowiedzialność. W przypadku klas służących do przechowywania danych - tą odpowiedzialnością jest... przechowywanie danych. Ot, niespodzianka. Umieszczanie metody uruchom() w klasie Samochód łamie tę zasadę. "Czepiasz się, dziki" - ano czepiam się, bo osobiście uważam że złym pomysłem jest rozpoczynanie uczenia innych ludzi programowania od zrobienia tego na złym przykładzie.
Uff. Przebrnąłem. Jeśli doczytaliście aż do tego miejsca to dajcie znać jak bardzo powinienem przestać pisać o programowaniu
c09447c6-6417-4ac6-b82a-5fb03f40c1ba
dziki userbar
6
Admiral

@dziki kurde, wreszcie wpis o programowaniu który zrozumiałem w pełni, super! A co do samochodu to ja spotkałem się również często z psem, bądź innym zwierzęciem

dziki

@Admiral psy i inne zwierzęta to częsty przykład, tylko używany do wyjaśniania takich zagadnień jak dziedziczenie czy polimorfizm

JanBenisIII

@dziki to jest podstawowy błąd - "obiekt" tylko z getterami i setterami ma z OOP tyle wspólnego, co nieużywanie System.out.println z FP A uproszczony interfejs samochodu jest dokładnie tym, czego chcesz, bo a) abstrakcja, b) enkapsulacja, c) interfejsów segregacja, d) masturbacja i ejakulacja. W uproszczeniu konsumenta obchodzi tylko tyle, że samochód odpala i jedzie - a że bebechów nie widać, to nawet dobrze. I to jest też jedyna odpowiedzialność, jakiej zazwyczaj od samochodu oczekujemy, więc łamania pierwszej literki SOLIDa tu nie ma. Plus samochód nijak nie służy tylko do przechowywania danych (pomijając martwą prostytutkę w bagażniku). Jasne, dobrze byłoby to wyjaśnić, ale chyba wiemy, że bootcampy są ch⁎⁎⁎we?

Zaloguj się aby komentować

Chcecie jakieś w miarę quality wpisy o programowaniu w #java i #kotlin po stronie backendowej, trochę o szynach ESB, testach jednostkowych i takich tam? Próbuję się zabrać za pisanie od pewnego czasu i szukam motywacji
dziki userbar
12
Lebiediew

@dziki Nie upieram się oczywiście przy tej formule. Po prostu zwracam uwagę, że jeśli chcemy mieć tu oryginalny content, to musi zaistnieć jakaś mechanika go wspierająca, bo inaczej w większości przypadków przegra on konkurencję z krótszymi formami.

(O wilku mowa. Właśnie musiałem podzielić komentarz przez limit znaków xD).

dziki

@Lebiediew brzmi sensownie imo

Zaloguj się aby komentować

LewdAnimeHands

@dzik no jak dla mnie to bardziej kara niż nagroda, ale co kto lubi

lubieplackijohn

@dziki brzmisz jak materiał na super żołnierza hejto.pl ! Dołącz do nas, a razem podniesiemy ten portal do rangi światowego imperium i centrum Internetu! #radawojenna

dziki

@lubieplackijohn ja to chyba się nie przydam, u mnie stack to java/kotlin, do tego 100% backend

Zaloguj się aby komentować

Poprzednia