Programistyczne WTF jakie Was spotkały

4

Nie wiem, o co chodzi, ale jakoś mnie to nie dziwi, że utrzymywacz mega popularnego projektu open source rządzi twardą ręką.

W projektach open source zwykle się dzieje dzicz - ktoś tam zakłada wątki z dziwnymi ficzer requestami, ktoś chce coś zmieniać bez potrzeby, ktoś ma pretensję do autorów, tam są jakieś zgłoszone bugi, tam trwa dyskusja techniczna nad rzeczą, która będzie wymagać zaorania dużej części projektu (mówię ogólnie, a nie o Linuksie teraz), tutaj SJW trolluje, że słowo black mu nie pasuje itp.

Więc bardzo często utrzymywacze open source stają się gruboskórni. I to widać już w osobach, które mają kilka lat doświadczenia w open source, więc nie dziwię się Linusowi, że mając tyle lat doświadczenia w open source, nauczył się chamstwa. Widocznie tak jest efektywniej.

3

Dlaczego, żeby podać typ funkcji w TypeScript trzeba podawać nazwę argumentu? 🤨 Przecież to nie ma sensu:

function acceptCallabk(callback: (argument:string) => void): void {
}

// zamiast
function acceptCallabk(callback: (string) => void): void {
}
2

Chodzi o Krajowy System e-Faktur:

(...) w procesie wyboru Wykonawcy najwięcej punktów dostają firmy, które audytowały największe projekty, przykład: „20 punktów za wykazanie się doświadczeniem tego Audytora w wykonaniu audytu polegającego na przeprowadzeniu testów wydajnościowych systemu informatycznego, o wartości nie mniejszej niż 40 000 000,00 zł brutto”.

źródło: https://testerzy.pl/news/wydarzenia/przetarg-na-audyt-ksef

2

NaN:NaN… litości… 🤣

nan-nan.png

1
furious programming napisał(a):

NaN:NaN… litości… 🤣

nan-nan.png

U mnie YouTube pozwala zapisać coś na liście do obejrzenia coś co na niej jest:
screenshot-20240204002630.png
Pomyślałem, że zgłoszę to im bo jest taka opcja bezpośrednio na stronie gdzie można zrobić też zrzut ekranu (opcja prześlij opinię z menu po kliknięciu w swoje konto w prawym górnym rogu). Tylko że do tego zrobienia zrzutu ekranu muszę klikać a więc menu gdzie jest "Zapisz na liście Do obejrzenia" zamyka się, więc nie mam jak zescreenshotować problemu. A załączyć grafiki z dysku nie można.

3

C++
Kiedyś naskrobałem taką funkcję pomocniczą:

template<typename T, typename... Args>
[[nodiscard]] constexpr bool isAnyOf(T&& a, Args&&... args) noexcept
{
    return ((std::forward<T>(a) == std::forward<Args>(args)) || ...);
}

template<typename T, typename... Args>
[[nodiscard]] constexpr bool isNoneOf(T&& a, Args&&... args) noexcept
{
    return !isAnyOf(std::forward<T>(a), std::forward<Args>(args)...);
}

I teraz ktoś użył tego w taki sposób:

const bool isParentProcessKnown = utils::isNoneOf(nullptr, onProcess, onProcess->getParent());

Czyli miało być zabezpieczanie przed użyciem nullptr, a tak naprawdę zawsze używane było nulptr->getParent() :/.
Prościej było po prostu zrobić:

const bool isParentProcessKnown = onProcess && onProcess->getParent();
1

Nie wiem na ile to programistyczne a na ile sprzętowe ale muszę się wyżalić.
Flagowy samsung po podłączeniu do ładowarki na początku negocjuje z ładowarką prędkość ładowania, przy czym jest to jakoś zrąbane i czasem nie dogaduje się poprawnie.

Ostatnio miałem sytuację że miałem tylko jak się okazało pustego powerbanka z kablem i musiałem szybko naładować telefon a do dyspozycji znalazłem tylko port usb w komputerze, po straceniu połowy dostępnego czasu telefon zyskał tylko kilka % mocy, na szczęście mam kabel który pokazuje prędkość ładowania i okazało się że ładowanie telefonu bezpośrednio z portu jest mega wolne, za to powerbank ładuje się szybko i telefon z powerbanka też ładuje się z maksymalną prędkością.

Doszło do absurdu że wielokrotnie szybciej podładowałem powerbanka a potem telefon z powerbanka niż bym ładował telefon bezpośrednio - ten sam port usb, ten sam kabel. Jednak noszenie ze sobą pustego powerbanka ma sens...

7

Jakby ktoś potrzebował wizualizacji problemu z USB-C
standardy usb-c

A takim testerem można sobie jeszcze piny posprawdzać:
screenshot-20240228102602.png

3

Zapisuje sie na egzamin na prawo jazdy - trzeb uzyc takiego ekstra systemu infocar. Robie platnosc blikiem, ale cos mi przerwalo i nie kliknalem autoryzacji i transakcja nie przeszla po stronie banku (ok). ALE po stronie systemu nie ma opcji zeby przerwac/odwolac zaczac od nowa, tylko trzeba czekac pol godziny az system dojdzie do wniosku ze pieniazkow nie ma i nie bedzie i dopiero mozna zapisywac sie ponownie.

0

Miałem podobnie przy kupowaniu biletów MPK w Rzeszowie: po wybraniu szybkiej płatności w pekao i zalogowaniu się powinien się otworzyć wypełniony formularz przelewu, a był pusty. Po wycofaniu się płatność wisiała i musiałem pisać do supportu żeby zresetowali. To było dawno, chyba w 2016, ale od tego czasu kupowałem bilety tylko w automatach.

1

@snowflake2137 to samo jest w appce Millenium Bank przy zakupie biletów na autobus. Coś mi nie przeszło przez przypadek i cyk, wal się na ryj, ponowna próba za 5 minut, a autobus już jedzie i tylko czekać aż kanar wejdzie na następnym przystanku

0

Czemu jak ludzie nie korzystacie z "jakdojade" do kupowania biletów?

0

W skyCash przy kupnie biletu apkę wywaliło, a próba ponownego kupienia została okraszona informacja, że mam sobie czekać x minut. Byłem już w autobusie, który jechał. Bilety da się kupić dopiero po wejściu do autobusu i podaniu kodu z autobusu.

7

Dziś przy budowaniu poważnej wewnętrznej appki bankowej zaczęły wywalać się buildy. Okazało się, że jeden z testów backendowych miał mniej więcej taki kod:
obecnaData = Data();
rok = obecnaData.dodaj(1 rok);
i potem rok był porównywany ze stałą i zonk, bo nagle zamiast roku zmienna ma 11M30D :D

No nic, sprawdzimy jutro ]:->

4

Orange - taki malo znany lokalny dostawca internetu. Dzisiaj mieli jakas grubsza awarie. To ze awarie sie zdarzaja - normalne. Ale zeby firma tej wielkosci nie miala status page'a i health checka,gdzie mozna sprawdzic stan uslugi w inny sposob niz na Downdetectorze albo dzwoniac na Party Line i rozmawiajac z niedorozwinietym botem. To jakis niesmieszny zart.

orange.png

0
WhiteLightning napisał(a):

Orange - taki malo znany lokalny dostawca internetu. Dzisiaj mieli jakas grubsza awarie. To ze awarie sie zdarzaja - normalne. Ale zeby firma tej wielkosci nie miala status page'a i health checka,gdzie mozna sprawdzic stan uslugi w inny sposob niz na Downdetectorze albo dzwoniac na Party Line i rozmawiajac z niedorozwinietym botem. To jakis niesmieszny zart.

Mieszkam na peryferiach. Gmina światłowodu nie podciągnie no bo się to im nie spina. Samemu to koszt naście tysięcy. Ogólnie rzecz biorąc zostaje taka czy inna radiówka. Antena miktorika z nowymi wersjami lte plus wifi na 5ghz od jakiegoś lokalnego isp. Pan Gienek jest miszczem infosecu. W sieci ma pppoe na trywialne credentiale. Do tego ma pulę publicznych ip oraz prawie wszyskie sprzęty powystawiane na tych ip.

6

Cennik zooma https://zoom.us/pricing pokazuje mi tekst w 3 różnych językach na tej samej stronie - polski, angielski i najwyraźniej niderlandzki

screenshot-20240416194027.png

Nie umiem sobie wyobrazić jak to jest w ogóle możliwe od strony programistycznej

7

@obscurity zrobiłem w życiu coś podobnego i to nie raz. Klienci z Polski bardzo chcieli być światowi, i mieć w CMS możliwość tłumaczenia na 666 języków najlepiej. No i płacili za CMS, żeby sobie samemu zmieniać treści, czego nigdy nie robili... podobnie jak uzupełnienia tłumaczeń. Po polsku było wszystko, bo przeniesienie/uzupełnienie treści w tym języku było w cenie. Angielski uzupełniałem dla krótkich tekstów w ramach dobrej woli. Klient czasem uzupełniał trochę angielskiego/niemieckiego/rosyjskiego (zależało to pewnie od znajomości drugiego języka przez klienta lub ludzi z jego otoczenia). Ale dziury były wszędzie.

Więc logika była taka: wybrany język (np. francuski) -> fallback do angielskiego (bo najszerzej znany) -> fallback do polskiego, który będzie uzupełniony zawsze.

Więc dało się mieć na stronie 3 różne języki.

I nie uważam, że to głupie nawet. Lepiej mieć taki misz-masz niż jakieś {{offer.basic.meetings.description}} lub dziury.

1

@obscurity @dzek69 miałem podobny projekt w którym był multilang. Domyślnie polski, ale przetłumaczyło się trochę na ingrisz żeby zobaczyć czy działa poprawnie i jak wygląda (czy dobrze się formatuje). Dobrze że w umowie było że wszystko co dostarczamy jest w pl a resztę klient ma sobie sam uzupełnić, bo pod koniec chcieli żeby im to przetłumaczyć na kolejne 3 języki. Jak to się mówi daj palec a wezmą całą rękę.

4

Świeżo wydeployowana statyczna strona typu hello world przez interfejs Azure na domyślnej domenie wygenerowanej przez microsoft - przeglądarka i antywirus od tej samej firmy po otworzeniu wygenerowanego przed sekundą urla ostrzegają przed wejściem na nią bo jest niebezpieczna.
screenshot-20240418081143.png
Rozumiem że w chmurze zdarzają się scamerskie strony, ale chyba ich zgłaszanie nie powinno blokować całej domeny, zwłaszcza że należy do nich samych 😄

1

screenshot-20240419023109.png

1

Jest sobie klasa implementująca jakąś encję biznesową, niech będzie, że zamówienie, a więc Order.
Jest też klasa typu DTO reprezentująca tę encję w kontekście komunikacji z jakimś zewnętrznym API - OrderDTO.
Jak w skrócie wygląda OrderDTO:

class OrderDTO {

    private string $id;

    private int $total;

    // itd. jeszcze kilka innych własności - jak na razie spoko

    // ojojoj zaczyna się...
    private Order $order;

    // ale nic, lecimy dalej

    // bez getterów się nie obejdzie
    public function getId(): int
    {
        return $this->id;
    }

    // nie chciało się kopiować iluś tam własności z encji do DTO,
    // bo po co kopiować, skoro można trzymać encję w DTO!
    // [insert million dollar idea meme here]
    public function getPromoCode(): string|null
    {
        return $this->order->getPromoCode();
    }

    // settery? hmm... [sus]
    public function setId(int $id): void
    {
        $this->id = $id;
    }

    // oh nie...
    public function setPromoCode(string|null $code): void
    {
        $this->order->setPromoCode($code);
    }
}

Co się stanie, jeśli w kodzie obsługującym komunikację z zewnętrznym API na jakiejś ścieżce mamy $dto->setPromoCode(null), podczas gdy encja jest zarządzana przez ORM, ale akurat na tej ścieżce nie ma żadnego zapisu / flushowania encji do bazy?

Co się zmieni, jeśli z jakiegoś niepowiązanego powodu pojawi się tenże zapis?

Bonus round: dlaczego encję wpitolił do DTO senior z 10 letnim stażem w danej firmie, a CR przyklepał jego koleś z 15 letnim?

7

MS Teams na Androidzie.
Rozmawiałem z kimś audio przez MS Teams na telefonie, zakończyłem rozmowę i wyskoczył komunikat, że trzeba się zalogować.
No to próbuje się zalogować i wiskacza jakiś błąd, że moje konto nie jest aktywne w ty serwisie. Ok to ignoruje.
Jednak zauważam, że dostaje powiadomienia na telefon o nowych wiadomościach, więc zacząłem dłubać.
Wystarczy kliknąć "Wstecz" na ekranie logowania i pokazuje się ekran z ostatnimi konwersacjami i wyskakuje znowu ekran logowania.
Klikanie "Wstecz" więcej razy po każdym razie jak pokaże się ekran logowania, w pewnym momencie daje więcej czasu i można coś zrobić.
Bez udanego logowania udało mi się wszystko:

  • przeczytać wiadomości (widzę, że na PC zmienił się status nieprzeczytanej wiadomości)
  • wysłać wiadomość (do kogoś lub do siebie)
  • a nawet zadzwonić do kogoś.

Czyli nie jestem zalogowany, ale jednak mogę robić rzeczy, jak zalogowany :). Stara sesja działa, ale równocześnie wywołuje prośbę o ponowne zalogowie.

Dziś wróciło do normy i już nie pyta mnie o zalogowanie - jednak od tego momentu nie widziałem, nigdy udanego logowania, więc stara sesja przetrwała i przestała pokazywać ekran logowania.

4

Absurd Cinema City - nie można wybrać miejsca, z jednym wolnym obok, zatem nie da się wybrać żadnego miejsca z zaznaczonych poniżej
screenshot-20240508172421.png

2

Czy to jest żart? https://laravel.com/docs/11.x/upgrade#modifying-columns

Od dawna mówiłem że frameworki to straszna kappa, i dobrze jest budować abstrakcje na nie; ale teraz to chyba przegięli 😐

Dla niewtajemniczonych: weszła breaking change do migracji bazy danych w Laravel 11tce, że jeśli podczas edycji kolumny na nowo nie sprecyzuje się modyfikatorów, to zostaną usunięte. Kolumny która np. była dodana 100 migracji wcześniej...

Co znaczy, że jeśli chcę poprawnie zachować strukturę bazy, to muszę każdą jedną migrację która edytuje kolumnę... wejść do niej, i znaleźć jakie modyfikatory ma ta konkretna kolumna w tym commicie 😐 I to muszę zrobić dla każdej migracji, a w projekcie takich jest czasem z 500-1000. Oczywiście goście od Laravela nie dali żadnego toola żeby to zrobić, albo chociaż sprawdzić czy się zrobiło dobrze.

I jak to trzeba niby teraz zrobić? Znaleźć każdą stworzą kolumnę z modyfikatorami, i znaleźć miejsca gdzie jest edytowana? Czy może znaleźć wszystkie edycje kolumn, i zobaczyć gdzie jest tworzona? Tak czy tak - WTF. Łaskawie napisali: Likelihood Of Impact: High.

Co za żart. Pamiętam słowa klasyka (Robert Martin): "Framework's authors are out to screw you. Or maybe they aren't, but they will". Święte słowa.

1
Riddle napisał(a):

Co za żart. Pamiętam słowa klasyka (Robert Martin): "Framework's authors are out to screw you. Or maybe they aren't, but they will". Święte słowa.

Ja natomiast kiedy moje osobiste przekonanie znalazlo potwierdzenie w tym co na temat framework'ow w ogole ma do powiedzenia Rasmus Lerdorf (00'14"):

zaczalem omijac z daleka porjekty oparte o Symfony lub Laravel'a.

Jesli chodzi o php, nie ma to jak podstawowa rama na psr'ach i mozliwosc integracji dowolnych rozwiazan we framework agnostic kodzie.

Takie twierdzenia, ze microframweorki nie nadaja sie do rozwiazan enterprise, lub nadaja sie wylacznie do prototypowania lub draftow dla przyszlych bardziej zlozonych rozwiazan, nawet nie bede komentowal.

1

Java to jest jednak poj'bana. Dodali nowy interfejs czyli kolekcje sekwencyjne a tam metoda pobierz ostatni

    default E getLast() {
        if (this.isEmpty()) {
            throw new NoSuchElementException();
        } else {
            return this.get(this.size() - 1);
        }
    }

Naprawdę skoro Java ma już tego kompniętego Optionala to nie można było zrobić

    default Optional<E> getLastOpt() {
        if (this.isEmpty()) {
            return Optional()
        } else {
            return Optional(this.get(this.size() - 1));
        }
    }

Widać iż podniecanie się w Javie wyjątkami trwa w najlepsze i lepiej nie będzie :(

2

@KamilAdam trzeba jednak wziąć pod uwagę że to nie jest całkiem nowy interfejs z nowymi metodami tylko próba uporządkowania istniejącego bałaganu i zostały wykorzystane istniejące metody (ale tak, mogli dodać takie z Optionalami)

https://openjdk.org/jeps/431

Screenshot_20240509-192435.png

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