Programistyczne WTF jakie Was spotkały

10
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.

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.

13

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

2

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

3

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

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

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

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

już nawet nie jestem zły :D

8

screenshot-20211227224347.png

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.

14

screenshot-20220102160143.png

Przeczytane i zaakceptowane :)

5
String REG_EXPRESSION_ONLY_INTEGERS = "[^0-9]";
3

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

4

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

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.

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

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:

int value() {
#ifdef __clang__
     static std::ios_base::Init toEnsureInitialization;
#endif
    std::cerr << __func__ << '\n';
    return 1;
}
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.

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.

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/

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

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...

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ł.

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.

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.

0

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

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.

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.

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
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.

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.

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?

9

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1