danek
wczoraj, 14:54

Wydawało mi się, że używanie wyjątków do sterowania flow programu jest dość powszechnie uznane za złe, jednak potem przeczytałem dość długą dyskusję o sensie używania Optionali (że nieczytelne itp). Sam jeszcze nawet juniorem nie jestem, więc do niedawna jeszcze w moim projekcie przy braku użytkownika leciał UserNotFoundException, no ale uznałem w końcu, że to strasznie głupie i tak stopniowo przebiegała przebudowa:
Pierwsze co przyszło mi do głowy to Optional (a konkretniej Option z vavr):

private Option<UserEntity> findUserById(long id) {  
    return Option.of(repository.findOne(id)); 
}

Oczywiste zalety to brak głupich wyjątków oraz nullchecków. Problem zaczyna się, kiedy jest jakiś dłuższy proces gdzie więcej niż jedna rzecz może pójść nie tak (powyżej jedyne co to użytkownika może nie być). Zostając w temacie niech będzie przykład logowania gdzie po podaniu nazwy i hasła ma zostać zwrócony token. Coś w stylu
String login(String username, String password)

Co może nie wyjść? np brak użytkownika, niepoprawne hasło. Samo Option tutaj nie pomoże bo skąd mamy potem wiedzieć co nie wyszło?
Tutaj z pomocą przychodzi Either, kolejna super rzecz z vavra oraz enum z możliwymi błędami:

enum UserError {  
  WRONG_PASSWORD,USERNAME_NOT_FOUND
}

Teraz starczy zmienić powyższą sygnaturę na
Either<UserError, UserToken> login(String username, String password)

Z biegiem czasu praktycznie wszystkie metody u mnie zwracają Either, albo tam gdzie starcza to Option. Dzięki temu część funkcji można fajnie skrótowo zapisać z pominięciem ifów (tak na prawdę te ify są tylko wewnątrz Either i Option). Dla przykładu to logowanie:

return findUserByUsername(username)  
        .flatMap(user -> checkPasswordFor(candidatePassword, user))
        .map(UserEntity::getUuid)  
        .map(tokenManager::generateTokenFor);

Z minusów, niestety trzeba nauczyć się nowego API i trochę innego sposobu myślenia. Dodatkowo dla niektórych pierwotnie to może się wydawać mniej czytelne.

Oczywiście nie neguje wyjątków całkowicie. Są miejsca gdzie powinny one zostać np łapie i odpowiednio rzucam dalej SQLException jakby coś złego było z bazą (bo to faktycznie jest sytuacja wyjątkowa)

Wpis powstał trochę na zasadzie dzielenia się moich przemyśleń przy tworzeniu swojego projektu, na jakie problemy trafiłem i jak je rozwiązuje. Sam za dużo doświadczenia jeszcze nie mam (niedługo ledwie stanę się juniorem(oby)) więc bardzo chętnie powymieniam się uwagami.

Jeśli komuś będzie chciało się to czytać to pewnie w przyszłości coś jeszcze napisze ;)

DisQ

Do walidacji warto spojrzeć na Validation. Troszkę inne działanie ponieważ nie jest monadą, ale warto poznać bo może znacznie ułatwić kod

danek

@DisQ: no wlasnie kiedyś już się przyglądałem temu, ale póki co średnio mi się podobało

TomaszSmykowski
wczoraj, 09:37

Ebookowy jarmark wielkanocny ruszył! Dobra wiadomość dla programistów.

W końcu doczekaliśmy się nowej promocji na ebooki programistyczne. W ofercie ceny są obniżone do 29,90, 19,90, 14,90, 9,90 i 6,90. Przyjrzyjmy się co można kupić w promocji.

Po pierwsze najczęściej kupowane ebooki:

  1. #Python. Zacznij Programować 29,90 (obniżka z 89,00) LINK DO ZAKUPU
  2. English 4 IT 14,90. Polecam szczególnie! LINK DO ZAKUPU #angielski #angielskizwykopem
  3. Java. Efektywne programowanie 29,90 LINK DO ZAKUPU #java
  4. React i Redux 29,90 LINK DO ZAKUPU #react #redux
  5. Angular w akcji 29,90 LINK DO ZAKUPU #angular
  6. Deep Learning z Python i Keras 29,90 LINK DO ZAKUPU #keras
  7. Legendarny Osobomiesiąc 29,90 LINK DO ZAKUPU
  8. Git 19,90 LINK DO ZAKUPU #git
  9. Docker 19,90. Polecam szczególnie! LINK DO ZAKUPU #docker
  10. Algorytmy i struktury danych 29,90 LINK DO ZAKUPU #algorytmy

A teraz te, które ja szczególnie uważam za warte kupienia:

  1. Algorytmy i struktury danych 29,90. To bardzo ważna pozycja dla każdego, kto chce lepiej rozumieć programowanie. Książka momentami może jest trudna, ale stopniowo wzrasta ten poziom trudności. Bardzo dobrze objaśnia algorytmy i pomaga zrozumieć jak podejść właściwie do złożonych problemów, które można rozwiązać doborem odpowiednich struktur i metod obliczeń. LINK DO ZAKUPU

  2. Czysty Kod 19,90 (sic!). Klasyczna książka, którą powinien przeczytać każdy programista. Opinie o następnych książkach autora są różne. Ja uważam je za równie dobre np. Czysta architektura. Niemniej Czysty Kod to kanon książek programistycznych. Każdy powinien mieć tego ebooka LINK DO ZAKUPU

  3. Getting Things Done 14,90. To dosyć słynna książka. Jest napisana przez Davida Allena, który zajmuje się zawodowo organizacją pracy, w tym osobistej. Dzięki tej książce moja produktywność wzrosła wielokrotnie. Mam codziennie pustą skrzynkę pocztową, dokumenty zorganizowane, nie tracę czasu na szukanie niczego. Oprócz praktycznych porad to też dobra pozycja by ogólnie zrozumieć jak organizować sobie lepiej pracę. To nie tylko ebook dla programistów, ale dla każdego właściwie człowieka. Mega polecenie ode mnie! LINK DO ZAKUPU

  4. Sztuka Podstępu 19,90. Kevin Mitnick, to już stara książka. Ale jeśli ktoś nie czytał to naprawdę bardzo polecam. To opowieść o tym jak Kevin łamał systemy właściwie oszukując ludzi. Nie jest to zbyt chwalebne, natomiast mnie zaciekawiło jak pomysłowo to robił, co kojarzy mi się z klasyką kryminału jak Holmes. A z drugiej strony bardzo duża dawka informacji, co możemy zrobić, żeby nie dać się oszukać, jak nie pozwolić takim hakerom na włamanie do naszych systemów. Książka nie tylko dla programistów, dla każdego. LINK DO ZAKUPU #hacker #hacking #hackingnews #bezpieczenstwo

  5. Scratch. 19,90. To książka dla ambitnych rodziców programistów, którzy chcą by ich dzieci też zostały programistami. LINK DO ZAKUPU #scratch

  6. 15 tajemnic zarządzania czasem. 14,90. Znowu efektywność efektywność, organizacja. Może nie tak dobre jak Getting Things Done, ale zawiera też dużo więcej porad jak lepiej zorganizować sobie pracę. LINK DO ZAKUPU

  7. Lifehacker 14,90. Ebook mówiący znowu o tym jak można różne rzeczy w życiu robić szybciej, sprawniej, lepiej. Konkretne praktyczne porady, które można od razu wdrożyć i testować :) LINK DO ZAKUPU

  8. Unix i Linux. Przewodnik administratora systemów. Wiem, że wiele osób czekało na rabat. Ta legandarna książka dla adminów, devopsów, systopsów jest za 179 zł normalnie. Teraz za 29,.90 zł i to najlepszy moment by ją kupić LINK DO ZAKUPU #unix #linux #administracja #devops #sysadmin #sysops

  9. Dla programistów C# polecam z kolei Visual Studio 2017. Zniżka z 89 na 29,90, więc znowu dobra okazja. LINK DO ZAKUPU

  10. Python. Wprowadzenie. Zniżka z 149 na 19,90 (sic!) Tę książkę szczerze polecam dla początkujących adeptów tego języka LINK DO ZAKUPU #csharp #visualstudio

Więcej ebooków w promocji znajdziecie tutaj: LINK

#programowanie #programista15k #programista #kodowanie #ebook #ebooki #książka #książki #czytajzwykopem #praca #pracait #pracazdalna #programistyczne

mar-ek1

Helion za kupienie przez linka :P
Sam mam na blogu tu i ówdzie ale nie spamuję poza swoim grajdołkiem.

TomaszSmykowski

@IceHeart: ksiazki i ebooki programistyczne recenzuje od 10 lat. Za sama recenzje nigdy nic nie dostawalem i nie dostaje. Jak ktos kupi przez link to faktycznie dostaje jakis tam procent. Ale jakbym mial policzyc ile poswiecam na to czasu i ile zarabiam z tego to jest raczej hobby. No ale zawsze cos, w sumie i tak robie to co robilem i co lubie. Pewnie nawet gdyby nie to, to dalej bym to robil. Zawsze uczestniczyłem w grupach nauki programistow na studiach,
Duzo tutaj czasu na 4programmers pomagajac innym, na StackOverflow, Quorze, roznych innych forach i grupach na FB. Teraz mam troche mniej czasu na to, ale moge chociaz polecic dobre materialy. Co tez jest wartosciowe jak ktos sie uczy. Poza tym mam taka swobode ze moge polecac sensowne ebooki czy ksiazki, nikt mi nie narzuca co rekomenduje. I to jest fajne, bo gniotow nie polecam. A czemu pytasz?

lion137
wczoraj, 09:09

Czyżby koniec dyskusji o algorytmie mnożenia? Jeszcze tylko jedna mała hipoteza do udowodnienia i będziemy mieć O(n log n):)
https://www.wired.com/story/m[...]-the-perfect-way-to-multiply/
#links #theory

vpiotr

Polecam sprawdzić ile stron odwiedza przeglądarka przy okazji otwarcia tej powyżej.

CppPolska
wczoraj, 07:44

Siema wszystkim! :) Właśnie wpadł nowy wpis tematyczny na naszym blogu! :)

Dzisiaj Dawid Pilarski kontynuuje swoją serię o kategoriach wartości w C++! :)

https://cpp-polska.pl/post/st[...]-dotyczace-kategorii-wartosci

W ostatnim artykule dotyczącym kategorii typów powiedzieliśmy sobie o podziale wyrażeń, oraz o tym, czym są kategorie wartości. Nie wspomnieliśmy jednak, co się dzieje, kiedy wyrażenie danej kategorii pojawi się w miejscu gdzie oczekiwane jest wyrażenie innej kategorii. Ten artykuł ma na celu wyjaśnienie właśnie zasad konwersji wyrażeń oraz tego, jakie operacje program musi przeprowadzić, aby te konwersje mogły się odbyć.

Trzeba przyznać, grube mięcho dziś nam się trafiło!

Miłego czytania wszystkim!

Grzegorz Kotfis
wczoraj, 07:44

Kto chętny dorzucić jakieś pytanie do zbliżającego się nagrania? Będę rozmawiać z Michałem Michalczuk o "Przyszłości Frontendu". Chciałbym się skupić na nadchodzących zmianach w Angularze, nowościach w postaci Blazora, może PWA, WebComponents. Zobaczymy ile da się wycisnąć :)
Pytania dorzucamy tutaj: https://github.com/GKotfis/Devsession-Podcast/issues/7 lub w komentarzu.

#podcast #frontend

WhiteLightning

Tak, zapytaj czy dzieje sie cos w strone zeby byle strona nie zajmowala wiecej niz klasyczny Doom.I czy istnieje jakikolwiek trend na froncie gdzie wydajnosc jest wazana i/badz mysli sie o userach ze slabszym sprzetem albo slabym laczem.