Posts

Showing posts from 2017

Angular 5 with Spring Boot

Image
Hi everyone. Today I write a post using the English Language. This is about integration angular 5 with Spring Boot for deployment only one sever. We do it using maven and npm, so let's start. Maven projects We will start with creating a parent module which organize and build our modules. <? xml version = " 1.0 " encoding = " UTF-8 " ?> < project xmlns = " http : // maven.apache.org /POM/4.0.0 " xmlns : xsi = " http : // www.w3.org /2001/XMLSchema-instance " xsi : schemaLocation = " http : // maven.apache.org /POM/4.0.0 http : // maven.apache.org /xsd/maven-4.0.0.xsd " > < modelVersion > 4.0.0 </ modelVersion > < groupId > pl.devpragmatic </ groupId > < artifactId > devpragmatic </ artifactId > < version > 0.0.1-SNAPSHOT </ version > < packaging > pom </ packaging > < name > devpragmatic </ name > < description > Pare

Jakie projekty w ramach rozwoju?

Image
Wszyscy, który chcą coś więcej osiągnąć w programowaniu, natrafiają na problem dobrania sobie problemu do technologii, którą chcą się nauczyć. No bo ile to można tworzyć tą samą aplikację pod inne technologię? A no sam się spotykam z tym problemem, ale ostatnio troszkę sobie ułatwiam tą sprawe. Najbliższe otoczenie Na początek pytam najbliższego otoczenia, czy czasem nie potrzebowali by jakiegoś programu. Wyłapałem dzięki temu już kilka tematów. ProgressBar do donejtów dla mojej dziewczyny (streamerki) jest jednym z nich. Sam nigdy bym nie wpadł na pomysł, aby to zrobić. A akurat wpasował się idealnie pod to co chciałem zrobić (prosta apka w Spring Boocie). Zrekrutowałem do tego kolegę Postanowiłem takżę stworzyć dwu osobowy zespół do tworzenia prostych (lub później już mniej) aplikacji. Jak to mówią co dwie głowy to nie jedna, a na dodatek we dwóch idzie się więcej nauczyć. Będziemy pracować w ramach całego flow zespołu programistów włącznie z QA i CR. Dzięki temu, będziemy dzieli

Wzorzec projektowy Proxy

Image
Zastanawialiście się czasami z ilu wzorców projektowych korzystacie używając jakiegokolwiek frameworka? Ostatnio spotkałem się z kolejnym, gdzie nawet nie zastanawiałem się jak to działa. Po prostu to używałem. @Transational Miałem kiedyś problem z tranzakcjami w springu. Nawet napisałem o tym wpis . Nie zastanawiałem się jednak dlaczego musiałem tak rozwiązać ten problem. Dowiedziałem się o tym dzięki dwum wydarzeniom. Po pierwsze na rozmowie rekrutacyjnej odpowiedziałem, że problem z tranzakcjami załatwiłbym poprzez wzorzec proxy. A po drugie działam na kodzie, który korzysta z aspektów używając adnotacji i wyglądało to podobnie. Po tym natchneło mnie, aby się dowiedzieć jak to działa i okazuje się, że ciągle używam tytułowego wzorca. Na czym to polega? Wzorzec proxy jest bardzo prosty. Tworzony jest obiekt pośredniczący zastępujący docelowy i obudowujący go. Wykonywane są operacje wokół operacji docelowej. Przykładem może być tranzakcja, otwieranie i zamykanie połączeń, obsługa

Czy warto się udzielać w projekcie?

Image
Czy czujecie czasami, że coś mogłoby być lepiej? Boicie się jednak udzielić, ponieważ są ludzie, którzy decydują? Są dłużej w projekcie i wiedzą co robią. Tak samo miałem ja. Jako początkujący programista wolałem się nie wtrącać. Często próbowałem, czasami nawet przez to obrywałem. To mnie zniechęciło. A tak nie może być! Skąd to się wzieło? Zaczeło się pewnie od strachu i braku umiejętności. Wątpliwość czy na pewno moja wiedza jest wystarczająca, aby oskarżać ludzi o złą pracę. Szacunek do ludzie z większym doświadczeniem nie pomagał z walką z tym uczuciem. Powiekszało się to i zmuszało mnie do milczenia w sprawach ważnych. To tylko i wyłączenie moja wina! Szczerze mam milion argumentów tłumaczących moje zachowanie, ale tak na prawdę to ja jestem winny takiego myślenia. Napisałem jakiś czas temu wpis o tym, co najgorszego może się stać? I tutaj właśnie jest dobra odpowiedź. NIC! Dlatego nie powinienem milczeć, a sugerować zmiany. Próbować zmienić projekt na lepsze. Zawsze bardzo

Gdy czujesz się najgorszy...

Image
Czułeś się kiedyś najgorszy w swoim gronie? W firmie? Zespole? Powiedzieć, można, że ja często się tak czuje. Chce jednak Wam przedstawić dlaczego się tak czuje i czy uważam to za złe. Być najgorszym To wcale nie jest złe. Pokazuje to, że idziesz w dobrym kierunku. A wiesz dlaczego? Ponieważ możesz się dużo nauczyć od otoczenia. Będziesz się ciągle rozwijać nawet poprzez kontakt z takim gronem ludzi. O tym właśnie trzeba pamiętać, że bycie najgorszym oznacza, że możesz jeszcze dużo się nauczyć. To jest coś najlepszego co może Cię spotkać i nie ma co się tym przejmować. Trzeba wręcz się cieszyć. Ja ciągle jestem najgorszy To zawsze jest moja wina/zasługa. Ciągle podnoszę sobie poprzeczkę, wychodzę ze swojej strefy komfortu. Dzięki temu mogę osiągnąć dużo więcej, niż gdybym otaczał się ludźmi tylko gorszymi. Bycie najlepszym jest fajne, ale pod względem szpanu oraz szacunku. Jednakże, nie jest to dobre dla naszego rozwoju. Jednak to nie wszystko Nie można jednak zawsze być najgors

Przydatne narzędzie - vt-password

Image
Spotkaliście się kiedyś z polityką haseł? Na pewno jeżeli próbowaliście pobawić się autoryzacją w Waszych projektach. Często robi się to samemu lub ściąga gotowca. Najlepszym jednak sposobem jest wykorzystanie framework'a do tego stworzonego. Dzisiaj przedstawię mam vt-password. Do czego to służy? Jest to pomocna biblioteczka do walidacji polityki haseł. Posiada ona już wbudowane swoje polityki, ale można tworzyć własne po rozszerzeniu odpowiedniej klasy lub implementacji odpowiedniego interfejsu. Prosta w użyciu? Jest ona bardzo prosta w obsłudze, polega na tworzeniu listy ról do spełnienia oraz zaznaczeniu ile z nich powinno zostać co najmniej poprawnych. Przykładowy kod poniżej: public static boolean validatePassword(String pass) { List < Rule > ruleList = new ArrayList < Rule > ( ) ; ruleList . add ( new LengthRule ( 8 , 16 ) ) ; ruleList . add ( new WhitespaceRule ( ) ) ; CharacterCharacteristicsRule charRule = new CharacterCharacteristicsRu

Na czym spędzamy najwięcej czasu pisząc kod?

Image
Zastanawialiście się kiedyś na czym spędzamy najwięcej czasu w czasie pisania kodu? Czy to na na samym pisaniu? Na testowaniu? A może na zrozumieniu dokumentacji oraz specyfiki zadania? Ja długo się zastanawiałem nad tym i postanowiłem to sprawdzić. O wynikach właśnie chcę napisać w tym wpisie. Zrozumienie specyfiki zadania, dokumentacji To zajmuje bardzo dużo czasu, ale nie najwięcej. Owszem projektowanie może zająć bardzo dużo czasu, ale w wpisie ten temat pomijam. Zajmujemy się etapem już po zaprojektowaniu. Najczęściej zaczynamy implementować bardzo szybko zaraz po przeczytaniu dokumentacji i ewentualnie po jakimś czasie idziemy dopytać o szczegóły. Tutaj nie marnujemy zbyt dużo czasu, chociaż pewnie zależy to od projektanta ;). Pisanie testów lub testowanie kodu Zauważyłem, że nie stosując TDD sama implementacja testów zajmuje, więcej czasu niż implementacja samego kodu. Musisz wymyślić przypadki użycia, aby sprawdzić każdą ścieżkę funkcji. Im gorzej napisana metoda tym gorzej

Kryptowaluty - sieć i zabezpieczenia

Image
Jak wspomniałem w poprzednim poście , pomimo dobrego zabezpieczenia łańcucha przed zmianą danych centralizowanie takiego mechanizmu nadal jest niezaufane. Spowodować to może zmianę struktury całego łańcucha przez tą jednostkę. Brakuje walidatora tej jednostki. Problem polega jedynie na tym, że chcielibyśmy mechanizm, który nie jest sterowany przez osoby trzecie oraz pozwala na zautomatyzowanie takiego mechanizmu. Kryptowaluty zabezpieczyły się przed tym i stworzyły sieć oraz zasady w nim obowiązujące. Jak pracuje sieć? Do utworzenia sieci potrzeba co najmniej 3 jednostek. Dla dwóch jednostek mogłyby powstać konflikty pomiędzy nimi i brakowałoby weryfikatora. Wszyscy w sieci posiadają swój łańcuch oraz aktualny blok. W ramach bloku mieści się określona ilość transakcji. O każdej zostaje poinformowana cała sieć i każdy zapisuje ją w ramach swojego aktualnego bloku. Wraz z zapełnieniem bloku danymi, zostaje obliczony kod bloku o którym wspominałem w poprzednim wpisie . Pierwszy węzeł, k

Kryptowaluty - blockchain w praktyce

Image
Na swoim blogu wspominałem już o rosnącej popularności tytułowego bohatera. W tym poście zagłębimy się w tą tematykę bardziej. Przedstawię Wam działanie tej technologii w praktyce w bardzo prostej postaci. Dowiecie się dlaczego metodę tą uważa się za bezpieczną oraz prostotę mechanizmu. Co to jest blockchain? Jak sama nazwa wskazuje są to bloki połączone ze sobą tworzące łańcuch. Łączeniem bloków jest kod wygenerowany na podstawie danych poprzedniego bloku. Celem tego zabiegu jest zabezpieczenie przed zmianą danych poprzednich bloków. Czym jest wygenerowany kod bloku? Jest to utworzony kod na podstawie danych bloku. Algorytmy wygenerowania takiego kodu mogą być bardzo różne. Im trudniejszy algorytm do odwrócenia tym łańcuch jest bezpieczniejszy. Jednocześnie kod powinien się generować w miarę szybko, aby nie zajmować zbyt dużo zasobów. W Bitcoin'ie jest zastosowany podwójny SHA256, czyli SHA256(SHA256(Block_Header)). Znalezienie danych dla bloku, który będzie tworzył identyczny

Konwencja nazewnicza getterów i setterów w JavaBean - ciekawostka

Image
Spotkała mnie ostatnio taka ciekawostka ze strony Javy. Zastanawiałem się dlaczego tworząc zmienne dla wartości tj. uId, dId, pAd gettery i settery wyglądają getuId itd. a nie getUId. Dużo framework'ów radzi sobie z obydwoma stylami, ale niektóre przyjmują wersję tylko pierwszą. Poszukałem troszkę w internecie i dopadłem się do dokumentacji JavaBean. Okazuje się, że jest stworzona konwencja nazewnicza tych funkcji. Zasada jest taka, że zamieniamy pierwszą literę na dużą jeżeli, dwie pierwsze są małe. W innych przypadkach zostawiamy nazwę taką jaka jest. Myślę, że taka ciekawostka może przydać się każdemu.

HashCode, equals i kolekcje

Image
Nie wiem jak Wy, ale ja nigdy nie zagłębiałem się w kwestię hashCode i equals. Zawsze generowałem obydwa elementy używając IDE z uwzględniając identyczne parametry. Pozwalało mi to zachować myśl, że gdy equals obiektu zwróci wartość 'true' to hash będzie zawsze identyczny. Wiedziałem, że tak powinno być, ale nigdy nie myślałem dlaczego. Gdy zostałem ostatnio zapytany o to, okazało się, że nie mam pojęcia dlaczego i po co się tak robi. Zagłębiając się w literaturę o tym poświęconą postanowiłem przedstawić Wam wiedzę, którą powinna posiadać każda osoba korzystająca z kolekcji. Wychodzi więc, że każdy. Szkoda, że wcześniej nikt nie wyjaśnił mi, że wiedza o tym jest niezbędna. Kontrakt Tak jak wspomniałem we wstępie, gdy equals zwróci wartość 'true', możemy spodziewać się, że hash będzie identyczny. Nigdy jednak nie zastanawiałem się jak wygląda sytuacja odwrócona. Czy gdy hash jest identyczny to zawsze equals zwraca 'true'? I tutaj wyszło na to, że nie. W Javie w

Co złego w uproszczeniach języków?

Image
Zastanawialiście się czasami w jakim kierunku idą kolejne rozwiązania języków? Czy to w ogóle idzie w dobrą stronę? Ja czasami myślę i o takich rzeczach. Nie do końca zgadzam się z takimi rozwiązaniami, ale całkowicie je rozumie. Wszystkie chcą mieć wszystko Firmy zajmujące się utrzymaniem danego języka chcą przyciągnąć do siebie jak największą liczbę programistów. Spowodowane jest to oczywiści możliwością rozwoju. W tym kierunku języki starają się zaspokoić potrzeby wszystkich programistów. To dlatego Java wprowadziła programowanie funkcyjne. C# wprowadził w ramach rozwoju parametry opcjonalne i nazwane. To miało przyciągnąć grono fanów innych języków tj. Scala, JS itp.. Co zyskujemy? Bardziej funkcjonalne języki. Robimy dużo więcej rzeczy w jednej linijce. Kod tworzy się w tle. Gettery i settery automatyczne w C# to tylko zaleta. Jednocześnie wraz z usprawnieniami możemy osiągnąć łatwiej swoje cele. Pozwala to na szybkie pisanie logiki oraz rozwiązywanie problemów. Skusiłbym się