Programistyczne WTF jakie Was spotkały

Programistyczne WTF jakie Was spotkały
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10056
10
Kopiuj
public static function charAt(int $position): callable
{
    if (empty($string)) {
        throw new \AssertionError('Empty string');
    }
    return $string[$position];
}

Pomyślicie pewnie że sensowna funkcja nie? Też tak myślałem, ale nie działa dla stringa "0". Czemu?

Ano dlatego że PHPowi się umyślało że empty("0") === true, bo "0" jest false-y. Ehhhhhhhhhhhh.

katakrowa
Jednak użyłbym substr() bo... UTF.
Riddle
Lepiej === "".
KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:dzień
  • Postów:2964
7

Dzisiaj takie dwa mikro-WTFy.

WTF1: Jest sobie interfejs zdefiniowany w bibliotece third-party. Ma zdefiniowaną publiczną metodę clone. Implementacje owego interfejsu w tejże bibliotece klonują stan obiektu prawdidłowo, tzn obiekt po sklonowaniu jest niezależny od oryginału i można bezpiecznie zmieniać jego stan bez ryzyka zepsucia oryginału. No i właśnie to mi było potrzebne i takie clone sobie wywołałem w swoim kodzie. Na code review dostaje komentarz - "ej, ale clone w naszych klasach implementujących ten interfejs nie działa, musisz to zmienić" :D

WTF2: Robię kursor do przechodzenia po pewnej kolekcji danych. Dla oszczędności alokacji, kursor ma własny bufor na dane, który może udostępnić, jednak jest ważny tylko do wywołania metody zmieniającej pozycję kursora. Metodę przechodzącą do następnego elementu nazwałem advance, bo przechodzi do następnego elementu, ale go nie zwraca. Na CR dostaję komentarz: "zmień to na next(). Odpisałem, że to nie zwraca następnego elementu, to dlaczego ma się nazywać next? Komentarz z CR: "W opisie masz "advances the cursor to the next item", więc powinno się nazywać next.

edytowany 1x, ostatnio: Krolik
Zobacz pozostałe 51 komentarzy
Riddle
@WeiXiao: W mojej bibliotece, T-Regx, mam parser regexpów. Wydaje mi się że pasuje do Twoich kryteriów. Tu jest parser: https://github.com/T-Regx/T-Regx/blob/develop/src/CleanRegex/Internal/Prepared/Parser/PcreParser.php , cały namespace src/CleanRegex/Internal/Prepared/Parser możesz sobie obczaić. Tu jest commit w którym jest mały refaktor paru klas które nie spełniały CQS: https://github.com/T-Regx/T-Regx/commit/74c92c860469dd22958c821830c3a0ee1ef1218b
KR
Dobra ale trochę upraszczacie przypadek. To nie jest ten sam przypadek co iterator. Tutaj jest kwestia wczytywania potencjalnie dużych kawałków danych, których nie chcemy kopiować na zewnąrz. Więc moim zdaniem osobna metoda do ładowania tychże danych i udostępninia referencji do nich (bez kopiowania) i osobna do przestawiania kursora ułatwiają zarówno analizę poprawności kodu jak i analizę wydajności (możesz szybko stwierdzić, czy to czytanie / materializowanie danych zajmuje więcej czasu, czy może jednak wyszukiwanie).
KR
BTW: Przyszedł drugi recenzent i stwierdził, że advance jako nazwa jest spoko, ale on by zrobił przesuwania i zwracanie w jednej metodzie. Ech. :D Nota bene sprawdziłęm w kilku innych miejscach i w zasadzie w całym kodzie są wszysktie kombinacje, mamy advance(target) mamy advance() mamy seekToId, seekTo, next, seekToNext i cholera wie jeszcze co. :D
Riddle
@Krolik: No to powodzenia w utrzymaniu tego w ciągu następnych n lat ;)
Riddle
Jak nie umiesz dobrze refaktorować, zachowując funkcje, to nie jesteś dobrym programistą IMO.
chalwa
  • Rejestracja:około 7 lat
  • Ostatnio:około rok
  • Postów:109
13

Pierwsze spotkanie z oprogramowaniem typu Enterprise.
SomeDomainNameStatusMessageNotificationMapperFactory
SomeDomainNameStatusMessageNotificationBodyBuilder
I setki podobnych generycznych klas. Właśnie przestało mnie to śmieszyć.

PerlMonk
@p_agon pewnie ma to samo, ale po niemiecku.
p_agon
Nein! Nein! Nein! Nein! :D
chalwa
Niemcy nie muszą używać CamelCase bo to by było jedno słowo ;)
UR
Jeszcze singletone mappery 1:1 dto-encja w bazie i pomyślę że pracujesz u mnie!
WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 godziny
  • Postów:3169
2

Oficjalny bug ktory ktos zglosil do Cassandry: https://issues.apache.org/jira/browse/AAR-7603

Zobacz pozostałe 4 komentarze
B1
Czy takie pozycjonowanie linków ma jakiś sens? Algorytmy Google nie utnią zasięgów za spam?
Wibowit
gdyby gugiel karał za spamowe linki to można by wykończyć konkurencję wstawiając spamowe linki do nich gdzie popadnie
PI
O kurczę, ciekawe
obscurity
@benoni12: nie ma sensu, linki są z tagiem "rel=nofollow" więc nie mają żadnej wartości pod względem seo. google nie powinien ich w ogóle indeksować i kojarzyć z naszą stroną
TR
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 lata
  • Postów:731
3

niby proste, a jednak można to było skomplikować
wywołanie jakiejś metody

Kopiuj
jakasMetoda("jakiś string", "jakiś inny string", "jakiś itp string", "jakiś itd string", "jakiś string", "O", "whateva", "jakiś kolejny string");

paczę w źródełko i jest warunek

Kopiuj
void jakasMetoda(String cos1, String cos2, String cos3, String cos4, String cos5, String tuJestO, String cos7, String cos8) {
  ...
  if(chceZebyPykloDalej.equalsIgnoreCase(tuJestO)) {
    pyknij();
  } 
  ...
}

Tu można się nad tym pastwić, ale żeby zrozumieć o co chodzi... Otóż są dostępne 2 opcje Oui oraz Non. Czyli true/false we francuskim wykonaniu. Pan Francuz umie w programowanie.
Innym razem jak zakomitowałem Map<String, String> to mi powiedział, że zawyżam poziom :|

edit:
otwieram kod, patrzę sobie, a to prawdziwy skarb

Kopiuj
  if (!email.equalsIgnoreCase("")) {
    setEmail(email);
  }

już nawet nie jestem zły :D


musica curat corpus at animam
edytowany 2x, ostatnio: trojanus
vpiotr
Uciekaj. To jest januszowo januszewa. W porzadnym januszewie akceptuja Map<String, String> albo Map<String, Object> bo wiadomo ze to wszystko przyjmie.
.andy
O matko ile argumentów to przyjmuje 😁
vpiotr
8 argumentow to zawsze wiecej niz 5 (ImmutableMap.of). Nigdy nie wiadomo ile bedzie potrzebne 😁
several
@.andy: oj tam zaraz, że osiem argumentów, prawdziwe życie zaczyna się od dwudziestu jeden Oprócz szydery na VisualStud...
.andy
@several: o kur...
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 3 godziny
  • Postów:5108
8

screenshot-20211227224347.png

Zobacz pozostałe 8 komentarzy
KR
Co to za czcionka?
UR
Visual Studio 2022 mówi, że Cascadia Mono
Azarien
nowy font Microsoftu w VS2022
CZ
A mówią ze to c++ jest brzydki ¯_(ツ)_/¯
Azarien
@Czitels to powyżej trudno nawet rozpoznać jako C#. ten język tak normalnie nie wygląda :P
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 6 godzin
  • Postów:3460
5

Wchodzę dziś na portal zakupowy zwany potocznie alledrogo. Próbuje wyszukać sobie coś w konkretnej kategorii, ale wyszukiwarka zmienia sama wyszukiwaną frazę. Próbuje wpisać "Valeo" wyszukiwarka zmienia na "paleo". Wpisuje "Valeo lcd" dostaje "paleo LED". Co najfajniejsze to są aukcje z wyszukiwana przeze mnie frazą. Kurcze, czemu to coś chce być mądrzejsze od użytkownika? Nie prościej jest np. zrobić zapytanie typu "nie znaleziono wyników, chcesz wyszukać xyz"
Ech.

edytowany 1x, ostatnio: jurek1980
Zobacz pozostałe 15 komentarzy
jurek1980
@cerrato: parafrazując cytat z pewnego filmu "300 000, co Ty szczurku owujałeś. Co my se za to kupimy? Startup jakiś".
cerrato
Dlatego napisałem, że jeszcze zbieram. I nie trzysta tysięcy, ale po prostu - 300 PLN :D
Miang
@cerrato: lepiej w walucie zbieraj ;)
Wyjątek
Miałem ten problem, nie pamiętam z czym. OIDP można używać cudzysłowów by zafiksować tekst.
vpiotr
Podmianka hasel jest slaba i tyle. Moze cos sugerowac, ew. dzialac jak google (wyszukalem x bo nie bylo y, wymusic szukanie y?).
RomanianDoge
  • Rejestracja:około 4 lata
  • Ostatnio:około 16 godzin
  • Postów:20
14

screenshot-20220102160143.png

Przeczytane i zaakceptowane :)


"GO TO ROMANIA" - they said.
"IT'S SAFE" - they said.
CZ
Wow komunikat po angielsku
Azarien
ja bym dał "Add one of these files" i czytelną listę poniżej, a nie takie wymienianie.
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10056
5
Kopiuj
String REG_EXPRESSION_ONLY_INTEGERS = "[^0-9]";
Koziołek
hmmm… po prostu zastanawiam się, na którym etapie autor popełnił błąd. Czy na poziomie regexa, bo ich nie rozumie, czy na poziomie nazewnictwa, bo miało być coś innego.
vpiotr
Stawiam że w kodzie jest coś w rodzaju if (match(REG_EXPRESSION_ONLY_INTEGERS)) { show_error("Only integers are allowed!"); }
Riddle
@vpiotr: no też tak stawiałem i dokładnie tak jest
A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:2 dni
  • Postów:408
3

Rankomat mi się nagle popsuł. Ciekawe czy to przez Ublocka. Innych wtyczek nie mam.Przechwytywanie.PNG

A9
  • Rejestracja:ponad 8 lat
  • Ostatnio:2 dni
  • Postów:408
4

Teraz dla odmiany mubi. Bonus w wysokości całych 0 zł

.andy
A mogło być NaN :P ;) :D
Azarien
ale należy się czy się nie należy?
A9
Myślę, że nie odmówią takiego bonus :) Tak jak bonusu Nan :D
.andy
Mnie ciekawi, jak to możliwe że takie coś przeszło przez testy...
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:3 minuty
2

Wiadomo dostajemy paszporty szczepeiń przeciw COVID ale przydała by się jakaś oficjalna apka do weryfikacji Qr code.
No to googlanie i wyszło to:
https://www.gov.pl/web/certificate/download
screenshot-20220112202910.png

No dobra znalazłem instrukcję i link po angielsku. Do wersji polskiej jakoś się doklikałem, ale nie jest to oczywiste: https://www.gov.pl/web/certyfikat/pobierz

I teraz WTF, klika na link do Google Play a tam widzę to:
screenshot-20220112203808.png
Co mój telefon nie jest kompatybilny?
Mam Pixel 4a czyli coś co wyszło rok temu i jako telefon od Google jest wzorcowym Androidem, więc co jak co na moim telefonie powinno iść bez problemu.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Zobacz pozostałe 8 komentarzy
Marooned
Chyba jednak jest spójne. Mam Redmi Note 5 Pro i na stronie jest, że niekompatybilne, a w aplikacji nie znajduje mi tego programu. Ciekawe w sumie dlaczego.
Sarrus
Ale screen pochodzi ze sklepu na telefonie?
Marooned
Z taką rozdzielczością? Niekoniecznie
dzek69
bardziej layout wskazuje, że to web, rozdzielczość to mój telefon ma większą niż laptop :P
SM
Ja ci dam oficjalną apke za publiczny hajs pewnie, sam se zrób to będziesz miał po co ci skaner certyfikatów covidowych?
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 8 godzin
  • Lokalizacja:Poznań
  • Postów:8764
9

To są screeny z instalacji najnowszej wersji Delphi, jeden zaraz po drugim.
To się udało czy nie? :D

screenshot-20220119130328.png
screenshot-20220119130549.png


edytowany 1x, ostatnio: cerrato
Zobacz pozostałe 4 komentarze
WL
Przecież wszystko jest jasne jak dla mnie. Instalację WSDK udało się z sukcesem anulować, a RAD Studio z sukcesem zainstalować. W czym problem? A i to nie jest najnowsza wersja Delphi ;-)
cerrato
Co do "najnowszej wersji" - wszedłem na ich stronę i pobrałem 18 sekund przed odpaleniem instalacji, więc...
WL
A to nie moja wina, że pobierasz jak leci :D Wejdź na https://www.embarcadero.com/ i co widzisz na górze? No właśnie. Ale jakbyś napisał, że to wersja Community Edition (taka była?) to tak - nowszej na razie nie ma niż 10.4.2
cerrato
@wloochacz: wiesz - ja Delphi używam mega rzadko, pracuję jak już to na Lazarusie. Ale zawsze wydawało mi się, że CE i "główna" idą w parze i są jakoś zsynchronizowane. Zresztą - mniejsza z tym, to czy najnowsza czy numer do tyłu nie ma żadnego znaczenia.
Azarien
może miałeś już WinSDK w tej wersji zainstalowany? więc instalator zrobił “cancel” ale jednocześnie był to “success” żeby nie wywalać instalacji RAD..
teofrast
  • Rejestracja:ponad 3 lata
  • Ostatnio:prawie 3 lata
  • Postów:140
4

Kilka godzin zajelo mi zlokalizowanie buga (SIGSEGV na std::cerr i std::cout) i znalezienie rozwiazania, ktory wystepowal na clang++, ale nie wystepowal na g++.
Nie spodziewalem sie, ze standardowe strumienie wyjsciowe std::cerr i std::cout moga byc konstruowane po inicjalizacji statycznej zmiennej klasy szablonowej napisanej przeze mnie, ktora to zmienna statyczna miala miec wynik z nieklasowej funkcji z innego pliku.

Udalo sie dzieki https://stackify.dev/108709-c-initialize-standard-stream-objects

Przyklad nieklasowej funkcji z innego pliku:

Kopiuj
int value() {
#ifdef __clang__
     static std::ios_base::Init toEnsureInitialization;
#endif
    std::cerr << __func__ << '\n';
    return 1;
}

amateur programmer
level: beginner
edytowany 3x, ostatnio: cerrato
KamilAdam
Nie spodziewalem sie, ze standardowe strumienie wyjsciowe std::cerr i std::cout moga byc konstruowane po inicjalizacji statycznej zmiennej klasy szablonowej napisanej przeze mnie, ktora to zmienna statyczna miala miec wynik z nieklasowej funkcji z innego pliku genialne. Nic z tego nie rozumiem XD
teofrast
jak czytam czasem posty niektorych ludzi o Springu albo innej technologii, ktorej nie uzywam to niewiele albo tyle co nic rozumiem - dotyczy to nie tylko technologii ale i algorytmow, wzorcow projektowych, a takze komercyjnych zastosowan technologii, ktorych uzywam
Shalom
W każdej technologii mogą być kwiatki związane z kolejnością inicjalizacji. Analogia dla Springa to np. kolejność wstrzykiwania i wołania konstruktorów i jakieś postconstruct.
vpiotr
W Javie też masz takie cuda(#1, #2), statyczna logika może zawodzić, szczególnie w C++.
WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 godziny
  • Postów:3169
1

Kupilem PS3, z dolaczonym m.in Skyrimem. Przy instalacji gry okazalo sie ze jedyne jezyki jakie sa w niej dostepne to francuski i germanski. W dodatku przelacza sie toto automatycznie w zaleznosci od jezyka konsoli jaki mamy ustawiony, wiec dla polskiego domyslnie bez pytania zainstalowalo mi francuski. Nie ma angielskiego ! Googlowanie wykazalo, ze wersje na europe poza UK nie mialy angielskiego.

WhiteLightning
@axelbest: wlasnei na ten, jak mozna tak ***** lokalizacje (a to tez IMHO jest zwiazane z programowaniem) ?
axelbest
Wiem wiem :) pomyliło mi się, bo w innym temacie pisałeś o kupnie ps3 :D No ale niestety, tak to jest jak sie kupuję gry po taniości, albo za granicą :) Trzeba patrzeć na opisy, a w przypadku gier na playstation, można sprawdzać po numerze CUSA https://wholesgame.com/trade-info/bles-cusa/
WhiteLightning
@axelbest: gra akurat byla dolaczona do konsoli jako gratis (wiec nawet bez niej bym ja kupil)
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:3 minuty
0

Może nie programistyczne WTF, bardziej dziwne zachowanie wyszukiwania google.
Popatrzcie na te dwa wyszukiwania:
https://www.google.com/search?q=human+termina+skydiving+velocity
daje wynik
screenshot-20220215114406.png
vs
https://www.google.com/search?q=human+terminal+skydiving+velocity
daje wynik:
screenshot-20220215114511.png

Pierwsze ma literówkę (brakuje l), ale google daje szybką wytłuszczoną odpowiedź: about 120 mph, bez literówki jest tylko dłuższa odwiedź, nie mówi nic o różnych pozycjach.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Zobacz pozostałe 3 komentarze
axelbest
Ale czemu to Google decyduje czy chce widzieć mapę Paryża czy zdjęcia Paryża? Jak może być dostosowana do tego co szukam? Jeśli chcieliby dawać jakieś insynuację czego szukam, niech by dali podpowiadajke typu "czy miałeś na myśli mapy, zdjęcia czy filmy?" tak samo jak podpowiada jak się literówkę zrobi. Dynamiczne UI tzn takie gdzie opcje znikają i się pojawiają to z tego co wiem to zły pattern. Który poważny soft ma coś takiego? Nawet te wiecznie reorganizowane zakładki w Wordzie czy Excelu tego nie mają. Może idźmy dalej - prawie nigdy nie korzystam z kursywy...
axelbest
Więc dlaczego taki word nie mógłby sobie pomyśleć i usunąć mi ta opcje lub przesunąć w miejsce w które nie zaglądam? No głupota. No i dałbym plusika za bawełniany humor.
obscurity
@axelbest: to możesz potraktować to jako podpowiedzi a nie elementy UI. ale ogólnie jak się przyjrzysz produktom googla to się okaże że król jest nagi. jestem obecnie zdania że google produkuje najgorszy soft z wielkiej piątki
WeiXiao
@obscurity: mają najlepszy albo drugi najlepszy ekosystem - mail, drive, docs.
GS
Google w ogóle robi sobie czasem fuzję informacji z różnych źródeł i wychodzą z tego zwyczajne kłamstwa. Np. wpiszcie: https://www.google.com/search?q=ewa+wrzosek+wiek. Dostaniecie zdjecie prokurator Wrzosek, ale wiek lekkoatletki Wrzosek (67 lat). Podobnie jest gdy wpiszemy https://www.google.com/search?q=adam+pustelnik+wiek - Zdjęcie wiceprezydenta Łodzi, ale informacja o dacie urodzenia dotycząca innego Adama Pustelnika, wspinacza.
WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 godziny
  • Postów:3169
2

Nie oceniam zawartosci (na pierwszy rzut oka wyglada sensownie). Ale jak mozna na strone z tutorialem wrzucic jakies kulki goniace po calym ekranie i reagujace na kursor. To niesamowicie podoba sie skupic :P https://www.gamedevelopment.blog/full-libgdx-game-tutorial-entities-ashley/

Zobacz pozostały 1 komentarz
obscurity
@Marooned: lepiej zablokować pojedynczy skrypt jeśli przeszkadza. Po zablokowaniu JS nie mógłbym nawet skorzystać ze strony banku. Albo wtyczka do czytania. Edge ma fajny wbudowany tryb czytania, wystarczy dopisać read:// na początku read://https://www.gamedevelopment.blog/full-libgdx-game-tutorial-entities-ashley/
Marooned
W NoScript dajesz wyjątki. Wiadomo, że stronie banku zezwolisz na JS, no nie róbmy sobie jaj
obscurity
mówię że lista wyjątków by była dłuższa niż blacklista, lepiej blokować niż zezwalać. na większości stron js jest używany do podstawowej interakcji, mało już jest stron z obracającym się zegarkiem wokół kursora, nie ma to większego sensu
Marooned
Spoko, co kto lubi. U mnie od lat NoScript i jest git.
cerrato
Ale te kuleczki ryją banię :D zacząłem się nimi bawić i 5 minut stracone :D
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 minuty
  • Lokalizacja:Tuchów
  • Postów:12165
4

Allegro, strona oceny produktu:

screenshot-20220218201507.png

Co za geniusz wpadł na pomysł, aby wady i zalety oddzielać przecinkami, a nie np. średnikami czy innymi rzadko używanymi znakami? Chcę podać zalety w formie krótkich zdań, pisząc poprawnie po polsku i nie mogę, bo mi zdania podzieli na 3x więcej pozycji. Brawo, allegro, brawo! :D


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
Zobacz pozostałe 20 komentarzy
stivens
O, jednak stalking :p
flowCRANE
Co za ludzie… :D
S9
zaraz tam stalking xD
somekind
@Charles_Ray: pamiętaj kupić mleko, bo Ci się skończyło w lodówce.
axelbest
Ja się zastanawiam po co ludzie oceniają produkty. Kiedy ocena jest wiarygodna? 2 dni po zakupie? Czy może 1,5 roku po, gdy już danego produktu może nie być na rynku. Teraz wydaje się nowe modele, by nikt nie zdążył czegoś złego napisać. A nawet jeśli ktoś napisze że v2 jest źle, to producent już ma w zanadrzu wersję v3 która ten problem rozwiązuje.Polecam przypomnieć jak internet działał jeszcze z 10 lat temu. Wpisywalo się produkt i już na pierwszej stronie wyników mieliśmy recenzje. Obecnie mamy 10 sponsowanych reklam i 10 najlepiej zorganizowanych sklepów pod kątem seo
LU
  • Rejestracja:około 11 lat
  • Ostatnio:dzień
  • Lokalizacja:Gdańsk
1

Nie ma to jak napisać poprawny kod w domenie ładnie pokryty testami ale i tak nie zadziała na środowisku. Okazuje
się, że jakieś eventy, które są serializowane/deserializowane mają referencje do tej klasy domenowej w związku z tym
już do tej klasy nie dodasz metody w stylu isValid bo jackson się wywali i trzeba dać checkIfValid albo JsonIgnore...


Zobacz pozostałe 2 komentarze
vpiotr
A jest??
S9
To czemu nie macie DTO jak ludzie? Dla mnie brak DTO to wtf.
LU
Nie wiem projekt legacy, do którego dołączyłem niedawno dla mnie też wtf
vpiotr
@JsonIgnore, @Id, @Entity, @Document w domenie sugerują że to nie jest domena a jakiś nie-wiadomo-co.
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10056
0
lookacode1 napisał(a):

Nie ma to jak napisać poprawny kod w domenie ładnie pokryty testami ale i tak nie zadziała na środowisku. Okazuje
się, że jakieś eventy, które są serializowane/deserializowane mają referencje do tej klasy domenowej w związku z tym
już do tej klasy nie dodasz metody w stylu isValid bo jackson się wywali i trzeba dać checkIfValid albo JsonIgnore...

No czyli niepoprawnie odseparowałeś domenę biznesową od swojej boundry. Co to za serializer ktory przetrzymuje referencje albo się wywala przez konkretną nazwę metody ;|

Moim zdaniem nie powinieneś robić rename'a metody w domenie biznesowej, tylko poprawić serializer żeby działał.

Zobacz pozostałe 10 komentarzy
Shalom
Dopiero co byłes piewcą implementowania manipulacji DOM albo html sanityzera samemu. Teraz chcesz pisać własny serializer to JSONa. Strach myśleć co będzie dalej. To zjawisko ma nawet swoją nazwę: https://en.wikipedia.org/wiki/Not_invented_here
Riddle
@Shalom: aaa, o to cho. No tak. A jak się nazywa zjawisko mylenia "polemiki z argumentem za" z "argumentem przeciw"?
somekind
No cóż, problemu by nie było, gdyby język miał właściwości, a serializer używał tylko nich, a nie metod. :P
Grzyboo
Albo wystarczy ustawić jacksonowi, żeby nie serializował metod
somekind
No i w efekcie nie zserializuje niczego. :P
LU
  • Rejestracja:około 11 lat
  • Ostatnio:dzień
  • Lokalizacja:Gdańsk
0

No czyli niepoprawnie odseparowałeś domenę biznesową od swojej boundry.

To nie ja pisałem teraz to tylko utrzymuję i rozwijam ;]

Moim zdaniem nie powinieneś robić rename'a metody w domenie biznesowej, tylko poprawić serializer żeby działał.

To jest jackson. Lepiej imo wygląda inna nazwa metody niż jakiś JsonIgnore w domenie.


Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10056
0
lookacode1 napisał(a):

No czyli niepoprawnie odseparowałeś domenę biznesową od swojej boundry.

To nie ja pisałem teraz to tylko utrzymuję i rozwijam ;]

"No czyli jest niepoprawnie odseparowana domena biznesową od boundry." - lepiej?

Moim zdaniem nie powinieneś robić rename'a metody w domenie biznesowej, tylko poprawić serializer żeby działał.

To jest jackson. Lepiej imo wygląda inna nazwa metody niż jakiś JsonIgnore w domenie.

No oczywiście że nie możesz dodać @JsonIgnore do domeny; bo to jest szczegół implementacyjny Twojego serializera. Musisz ten problem załatwić całkowicie po stronie serializera, tak żeby się dało zserializować Twój obiekt normalnie.

edytowany 2x, ostatnio: Riddle
LU
  • Rejestracja:około 11 lat
  • Ostatnio:dzień
  • Lokalizacja:Gdańsk
0

@TomRiddle: Ja jak bym to pisał to bym zmapował to do jakiegoś prawilnego dto a nie serializował bezpośrednio domene.


Zobacz pozostałe 6 komentarzy
LU
Tak ale lepiej teraz zrobić poprawkę tak aby działało i spełniało potrzebę biznesową a resztę zaadresować jako dług do backlogu niż na yolo robić refactor na całym projekcie.
jarekr000000
Backlog na poprawki to po prostu czarna dziura - co wrzucisz to już stamtąd nie wyjdzie (aczkolwiek będzie wisieć nieskończenie długo na horyzoncie...). Refactoru na całym projekcie też lepiej nie robić. Za to zwykle da się zrobić mały kawałek refaktoringu związany z danym zadaniem.
AF
O wow, nie znacie ani projektu, ani kultury, ani sytuacji biznesowej, a naskoczyliście na gościa, jakby użył goto.
somekind
A jak zaadresujesz ten dług, to do kogo wyślesz? Bo ja bym tak chętnie swój kredyt hipoteczny zaadresował. ;]
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10056
0
lookacode1 napisał(a):

Tak ale lepiej teraz zrobić poprawkę tak aby działało i spełniało potrzebę biznesową a resztę zaadresować jako dług do backlogu niż na yolo robić refactor na całym projekcie

Amatorzy i juniorzy tak robią; a nie profesjonalni programiści. Pracujesz w firmie, która Cię wynajęła do wytwarzania dobrego oprogramowania, a nie powiększania długu technologicznego.

SA
  • Rejestracja:około 12 lat
  • Ostatnio:około 9 godzin
  • Postów:1430
4
TomRiddle napisał(a):

Amatorzy i juniorzy tak robią; a nie profesjonalni programiści. Pracujesz w firmie, która Cię wynajęła do wytwarzania dobrego oprogramowania, a nie powiększania długu technologicznego.

Nie, firma wynajęła go do wytwarzania oprogramowania spełniającego wymagania biznesowe. I on to realizuje. Ponadto sygnalizuje, że inaczej to powinno być zrobione, ale jeśli firma (manager) woli dług technologiczny to robienie z tego dramatu to jakaś paranoja. Tym bardziej, że to nie jest żadne klejenie na taśmę, bo produkt będzie działał zarówno zrobiony zgodnie z praktykami (podział domeny od DTO) jak i bez tego, a jedynie utrzymywalnosc rozwiązania spada. Takie rzeczy się dokumentuje w jakimś decision log, wpisuje się argumenty za i przeciw i podejmuje decyzje, ja miałbym sumienie czyste, najwyżej byłby to kolejny powód dla którego rozważałbym odejście do miejsc, gdzie jest czas pisać dobrze.

edytowany 2x, ostatnio: Saalin
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10056
1
Saalin napisał(a):
TomRiddle napisał(a):

Amatorzy i juniorzy tak robią; a nie profesjonalni programiści. Pracujesz w firmie, która Cię wynajęła do wytwarzania dobrego oprogramowania, a nie powiększania długu technologicznego.

Nie, firma wynajęła go do wytwarzania oprogramowania spełniającego wymagania biznesowe. I on to realizuje. Ponadto sygnalizuje, że inaczej to powinno być zrobione, ale jeśli firma (manager) woli dług technologiczny to stawianie robienie z tego dramatu to jakaś paranoja. Tym bardziej, że to nie jest żadne klejenie na taśmę, bo produkt będzie działał zarówno zrobiony zgodnie z praktykami (podział domeny od DTO) jak i bez tego, a jedynie utrzymywalnosc rozwiązania spada.

Oczywiście że każdy manager i PO woli dług technologiczny; bo dla nich techniczny improvement to jest niepotrzebny koszt. Dla programistów to jest inwestycja (zrobimy refactor dzisiaj, zoszczędzimy sobie tygodni debugowania za rok), dla businnes guys to jest koszt. Żeby zaczęli postrzegać to jako inwestycję tak jak my, musieliby się stać kompetentni w programowanie, co raczej się nie stanie.

Takie rzeczy się dokumentuje w jakimś decision log, wpisuje się argumenty za i przeciw i podejmuje decyzje, ja miałbym sumienie czyste, najwyżej byłby to kolejny powód dla którego rozważałbym odejście do miejsc, gdzie jest czas pisać dobrze.

Sure, tylko z kim chcesz podjąć taką decyzję? Mam nadzieję że tylko z kompetentnymi ludźmi; czyli takimi którzy rozumieją powody i wagę takiej decyzji, a 99.9% PO się do tej kategorii nie wlicza; więc ich zdanie nie powinno być wzięte pod uwagę.


Niekompetentna osoba taka jak PO albo inny scrum master nie jest w stanie podjąć informowanej decyzji nt rozowju oprogramowania, co tu jest do rozumienia. Mogą oczywiście decydować które feature'y są ważniejsze do wdrożenia (typu czy ważniejsze jest dodanie uploadu zdjęc czy obserwowania postów, np.). Ale decyzja czy ważniejszy jest feature czy technological improvement to jest decyzja programistów, jak mogłoby być inaczej.

Przygotowałem wysokiej jakości tabelkę

opinia programisów opinia PO co się powinno stać
we should fix we should fix we fix
we should fix we shouldn't fix we fix
we shouldn't fix we should fix we don't fix
we shouldn't fix we shouldn't fix we don't fix
edytowany 4x, ostatnio: Riddle
Zobacz pozostałe 4 komentarze
vpiotr
Aktualnie estymacje podaje sie w SP
Riddle
Estymacje effortu tak. Estymacje czasowe raczej trudno by było :D
vpiotr
Nie widze problemu. 1 SP = 1 MD
Riddle
Doesnt make sense
Riddle
Gdyby były odpowiadające to używano by po prostu Md.
SA
  • Rejestracja:około 12 lat
  • Ostatnio:około 9 godzin
  • Postów:1430
1
TomRiddle napisał(a):

Oczywiście że każdy manager i PO woli dług technologiczny; bo dla nich techniczny improvement to jest niepotrzebny koszt. Dla programistów to jest inwestycja (zrobimy refactor dzisiaj, zoszczędzimy sobie tygodni debugowania za rok), dla businnes guys to jest koszt. Żeby zaczęli postrzegać to jako inwestycję tak jak my, musieliby się stać kompetentni w programowanie, co raczej się nie stanie.

Traktujesz management jak niekompetentnych wrogów programistów, a dobry manager wie, że wprowadzanie długu ma wiele konsekwencji, od wolniejszego dostarczania feature'ów czy bugów do tego, że nie będzie miał kto przy sofcie pracować (bo zatrzymaliśmy się z technologiami na poziomie AngularJS i ludzie nie chcą przy tym robić). Już @areksum to napisał - jeśli management ufa programistom, którzy opisują konsekwencje długu to nie jest przeciwny refactorom i taskom technicznym.

edytowany 1x, ostatnio: Saalin
Riddle
Już @areksum to napisał - jeśli management ufa programistom, którzy opisują konsekwencje długu to nie jest przeciwny refactorom i taskom technicznym. czyli zgadza się z tabelką wyżej? ;)
SA
Tabelka się zgadza, chociaż nie jest tak, że słowo PO jest ostateczne pod warunkiem odpowiednich charakterów. Zdarzało mi się różne farmazony słyszeć i na niektóre veto było na tyle duże, że decyzja programistów była ostateczna. Nie jestem za tym, żeby zachowywać się biernie i jak PO mówi to tak ma być, ale że decyzje powinny być poprzedzone dyskusją, bo zrobienie czegoś na szybko, żeby działało + task na backlog to także jest rozwiązanie.
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10056
0
Saalin napisał(a):
TomRiddle napisał(a):

Oczywiście że każdy manager i PO woli dług technologiczny; bo dla nich techniczny improvement to jest niepotrzebny koszt. Dla programistów to jest inwestycja (zrobimy refactor dzisiaj, zoszczędzimy sobie tygodni debugowania za rok), dla businnes guys to jest koszt. Żeby zaczęli postrzegać to jako inwestycję tak jak my, musieliby się stać kompetentni w programowanie, co raczej się nie stanie.

Traktujesz management jak niekompetentnych wrogów programistów, a dobry manager wie, że wprowadzanie długu ma wiele konsekwencji, od wolniejszego dostarczania feature'ów czy bugów do tego, że nie będzie miał kto przy sofcie pracować (bo zatrzymaliśmy się z technologiami na poziomie AngularJS i ludzie nie chcą przy tym robić). Już @areksum to napisał - jeśli management ufa programistom, którzy opisują konsekwencje długu to nie jest przeciwny refactorom i taskom technicznym.

Jeśli faktycznie się oboje (programiści i managerowie) zagadzają to tak, można działać.

Ale jak jest tak jak w przypadku @lookacode1:

lookacode1 napisał(a):

Nie ma na to czasu to by była grubsza zmiana PO się boi takich zmian woli cofnąć zmiany w domenie

To nie mów mi że PO podejmują dobre decyzje, bo widać jakie podejmują (przynajmniej w przypadku @lookacode1), i wtedy nie ma wyboru tylko musisz zrobić dobrze zamiast słuchać managerów.

edytowany 4x, ostatnio: Riddle
AF
  • Rejestracja:prawie 18 lat
  • Ostatnio:14 dni
12

A może przenieście się do Nie ma nic gorszego niż pewny siebie Senior-Debil bo tam była podobna dyskusja, albo wydzielcie sobie inny temat?

Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:dzień
  • Lokalizacja:Poznań
9

Na pacjent.gov.pl nie mogą się zdecydować, czy część dziesiętną w Polsce oddziela się kropką czy przecinkiem.
screenshot-20220221161736.png


edytowany 1x, ostatnio: Marooned
bakunet
Gratuluję prawidłowej wagi :) Z drugiej strony to był najszerszy pasek, więc najłatwiej było się wstrzelić ;)
GS
masz 189 cm i ważysz 86 kg?
obscurity
@GutekSan: też mi tak wyszło :P
teofrast
moje BMI wynosi: 17.02 Niedowaga 183cm 57kg
obscurity
@teofrast: to podczas ostatnich wichur w polsce chyba mimowolnie migrowałeś
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)