Programistyczne WTF jakie Was spotkały

Programistyczne WTF jakie Was spotkały
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 4 godziny
  • Postów:5109
0
edytowany 1x, ostatnio: WeiXiao
Sensacyjny Sebastian
Jak na Linusa, to całkiem spokojna wypowiedź.
obscurity
nie wiedziałem że Linus to taki frustrat z elektrody
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:2 minuty
  • Postów:8410
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.


obscurity
nie no jednak "twarda ręka" to jedno a chamstwo i prostactwo to drugie, moim zdaniem takie rzeczy to kwestia wychowania i raczej się tego nie nauczył podczas utrzymywania projektu
Sensacyjny Sebastian
Nadal nie widzę, gdzie w tej wypowiedzi chamstwo. Gość próbuje wepchnąć do projektu szajsowy kod - zostało mu wytłumaczone, dlaczego kod jest kiepski i czego ma nie robić. Jakiś czas później, przysyła kolejny kawałek kodu - zawierający dokładnie te same błędy. I nie jest to jakiś random z internetu klepiący patche po godzinach, tylko ktoś pracujący w Googlu, kto ma płacony za to gruby hajs i od kogo - wydawałoby się - można oczekiwać profesjonalizmu.
KR
Gdzie można więcej poczytać o tym że ten kawałek kodu jest szajsowy, ale bez BS Linusa? Bo z krótkiej lektury listy dyskusyjnej wynika, że to obecny kod jest szajsowy bo inode’y nie są unikatowe i rozwala to niektóre narzędzia, a gostek z Google chciał to naprawić. Argumentacja Linusa jest dość dziecinna, na zasadzie “nikt nie potrzebuje robić tar na procfs więc po co to poprawiać”.
KR
Dla mnie zachowanie Linusa w tej dyskusji to jest akurat typowe zachowanie nerda z autyzmem - dla Linusa liczy się bardziej kod źródłowy i jakaś tam wizja Linusa niż użytkownik tego kodu. Nie naprawimy buga, bo komplikuje kod i psuje wizję.
obscurity
@Krolik: +1 dla mnie to się spotkały dwie osoby w spektrum, jedna robi poprawki na mega edge case'y gdyby ktoś chciał zamontować dysk ponad 4 miliardy razy, druga "nie jesteś wyjątkowy", "twój kod to g**no", "kopiujesz kod bez wiedzy co do ch*** robi", "marnujesz mój cenny czas", **autistic screeching**. W zasadzie trochę mi przypomina jednego usera tego forum
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10056
3

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

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

// zamiast
function acceptCallabk(callback: (string) => void): void {
}
Zobacz pozostałe 10 komentarzy
obscurity
można na tej samej zasadzie na jakiej można używać "goto". To że coś nie jest dobrą praktyką nie znaczy że musi od razu wylecieć z jędyka. Jest taka możliwość dla początkujących żeby nie podawać, można używać ts jak js jeśli kogoś podawanie typów przerasta.
Riddle
@obscurity: Rozumiem, gdyby ktoś nie chciał typów w ogóle, np accept(callaback){}, to spoko. Ale ja mówię o deklaracji typu funkcji, czyli ktoś dodaje coś TSowego - accept(callback: () => void){}, i w ramach tej deklaracji typu TS'owego, mówisz że ktoś chciałby pisać coś JS'sowego, czyli accept(callback: (arg) => void){}, zamiast TSowego accept(callback: (arg:string)=>void){}? No to faktycznie, brawo.
obscurity
odchodząc od tego czy częściowe podawanie typów ma sens (może mieć) to co miałby ci podpowiedzieć IDE gdy wywołujesz accept? string, string, string, number, string? I skąd masz wiedzieć bez nazywania który string co oznacza lub skąd masz wiedzieć jak ma wyglądać przekazywany callback. Czytać implementację za każdym razem? Czy Ty masz wątpliwości że nazywanie parametrów funkcji ma sens? Jak chcesz możesz zrobić function f(...pars) i potem odwoływać się pars[0], pars[1] jeśli się w tym połapiesz to brawo
Riddle
Twoja postawa wygląda jak bronienie TS'owego rozwiązania za wszelką cenę. Ja szukałem jakichś racjonalnych powodów czemu mieliby wybrać takie rozwiązanie, i go nie znajduję. Jedyny powód czemu ktoś zaprojektowałby coś takiego to zaszłość historyczna. Gdyby ktoś tworzył ten język od nowa, to nie miałby żadnego powodu żeby to stosować.
obscurity
twoja propozycja jest po prostu niespójna z resztą języka i nielogiczna. Spowodowałaby zamieszanie bo a w a => b raz oznaczało by typ a a raz nazwę zmiennej w zależności od kontekstu i byłoby to niewygodne bo nie można by było przekleić definicji funkcji do typu argumentu tylko trzeba by było ją przerabiać. To nie żadna zaszłość tylko udogodnienie, tak samo możesz nazywać składowe tupla (tablicy) i IDE później je podpowiada https://4programmers.net/uploads/98598/nLxU5TZkVwvGbf1QuKnfFfpVLFVPbjZMkxLiGXlJ.png
TO
  • Rejestracja:około 7 lat
  • Ostatnio:około 2 miesiące
  • Postów:33
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

Koziołek
No i? To nie jest nic niezwykłego. Z drugiej strony takie systemy powinny być w miarę możliwości OSS, żeby każdy był w stanie sprawdzić co tam się dzieje.
cerrato
Bardziej to wygląda jak przetarg ustawiony konkretnie pod kogoś. Bo nie sądzę, żeby było wiele firmy w kraju, ktore mają w swoim CV audyt systemu za 40 baniek. Plus jeszcze pytanie, jaka będzie (na potrzeby tego postępowania) definicja audytu i zakresu prac do wykonania w ramach tego audytu.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12167
2

NaN:NaN… litości… 🤣

nan-nan.png


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.
AU
Mi się często pojawia taki bug na youtube, że klikam jakiś film, a włącza się zupełnie coś innego.
obscurity
no mi też się zdarzyło, czasem tytuł i komenatarze są z innego filmu zwłaszcza jak kliknę inny film podczas ładowania poprzedniego. Teraz mi się to nawet udało odtworzyć za pierwszym razem
LukeJL
Tak się kończy masowe zwalnianie ludzi. Teraz nie ma kto naprawiać bugów.
TO
  • Rejestracja:około 7 lat
  • Ostatnio:około 2 miesiące
  • Postów:33
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.

edytowany 1x, ostatnio: Tonyu
Zobacz pozostały 1 komentarz
axelbest
Do zrzutu na Windowsie naciśnij win+shift+s. Na maku cmd+shift +4 (akurat z głowy oba skróty podaje ale jak nie zadziałają to wiesz w jakim kierunku szukać)
axelbest
Pewnie masz nowa klawiaturę, więc takiego klawisza jak prnt/scr zakładam że nie ma, a też do tego służy :) a jak masz ten klawisz to win+prnt/scr i powinien się z automatu zapisać w dokumentach albo na pulpicie.
TO
Działa to w taki sposób: wybieram opcję prześlij opinię z menu na YouTube, otwiera się z prawej strony wysuwany formularz i mam opcję na tym formularzu żeby zrobić zrzut ekranu, wybieram tę opcję zrzutu ekranu i jest robiony automatycznie zrzut ekranu widocznej strony w oknie czyli YouTube. Nie mogę w tym czasie nic kliknąć aby np. otworzyć menu klikając na trzy pionowe kropki przy filmie.
obscurity
Możesz osadzić zdjęcie z dysku na stronie a potem to uwzględnić na screenshocie. Będą mieli zagwozdke jak to zrobiłeś
TO
@obscurity: +1, dobry pomysł :)
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:2 minuty
3

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

Kopiuj
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:

Kopiuj
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ć:

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

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Zobacz pozostały 1 komentarz
snowflake2137
@KamilAdam: to ironia czy faktycznie jest jakiś narzut przez to?
KamilAdam
Rzadna ironia. Jak chcesz wywołać funkcję i masz zachłanną ewaluacje (np Call by value) to wyliczasz wartość (np 2+1) i odkładasz na stos. Jak masz leniwą ewanuację (np. Call by need) to pod spodem sprowadza się to w zasadzie do tego iż kod (np 2+1) opakowany w lambdę i dopiero ta bezparametrowa lambda jest odkładana na stos, a że lambda to dodatkowy obiekt to będzie to jakaś dodatkowa alokacja itd itd. Oczywiście jest szansa ż kompilator coś tam poprawi, ale ogólnie myślę iż spadek wydajności będzie. A jak wiadomo C++/Rust to nie Java/Scal i tu chce się mieć szybko kod
WeiXiao
Zawsze jak widzę jakiś "współczesny" kod cepepe i sprawdzam sobie co robią tego typu rzeczy std::forward to zastanawiam się z czego wynikają potrzeby na takie dzikie koncepty When t is a forwarding reference (a function argument that is declared as an rvalue reference to a cv-unqualified function template parameter), this overload forwards the argument to another function with the value category it had when passed to the calling function.
snowflake2137
@KamilAdam: thx już czaję. Całe życie w językach call by value i nie pomyślałem jak by to miało działać inaczej.
CZ
@WeiXiao: c++ to język, który bohatersko rozwiązuje problemy nieznane w każdym innym języku.
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:4 minuty
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...


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
dzek69
A USB-C ma teraz masę standardów, gdzie obie strony muszą się dogadać na jakiś i zdaje się, że kabel też się w to wlicza. Zazwyczaj wszystko po prostu działa, ale opisana przez Ciebie sytuacja jest możliwa i to obstawiam, że da się tak dobrać sprzęt, żeby to nie było "czasem", tylko "zawsze".
FA
Zróbmy wszystkie kable tak zeby zawsze pasowały do siebie! Tak, wszystko na USB, i nie bedzie problemów! Meanwhile...
AU
Może po prostu masz usb c z fast charging, ale do transferu kabel obsługuje tylko usb 2 i przy negocjacji przez podłączenie telefonu do wymiany danych to wybiera inny tryb lub też sam telefon obsługuje tylko usb 2 do transmisji. Możesz spróbować z kablem, który nie umożliwia transmisji danych tylko ładowanie samo, to byś wtedy potwierdził/zaprzeczył takiej możliwości.
obscurity
sprawdzałem i był podłączony w trybie ładowania, chyba że to ustawienie nic nie zmienia
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:7 dni
  • Lokalizacja:Rzeszów
7

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

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


edytowany 1x, ostatnio: dzek69
Zobacz pozostałe 3 komentarze
AU
@userek_jakis: od strony PC używałem wysokopoziomowej komunikacji bulk, control itp. A od mikrokontrolera bezpośrednio pinami interrupt do usb kabla -data i +data, i softwareowo obsługiwane, a -data podciągnięte pull upem przez 1k rezystor do 3,3V przez to komputer wykrywał urządzenie jako low speed.
UJ
@Autysta: No ladnie - dawno temu widzialem kiedys implementacje USB przy pomocy recznego machania nogami GPIO :) Ale nie sadzilem, ze ktos tego na powaznie uzywa.Tylko nie pamietam jak tam bylo to rozwiazane z poziomami napiec bo USB roznicowe jest. Chyba znalazlem: https://www.obdev.at/products/vusb/index.html
AU
@userek_jakis: no lepiej kupić jakiś moduł usb-uart i się po uarcie np. do niego komunikować, ale właśnie budowałem usb-uart więc nie chciałem kupować gotowego bo bez sensu i coś co kosztuje 10zł zbudowałem w cenie kilkukrotnie większej. Do tego ręcznie lutowana płytka pięknie się prezentuje na uniwersalnej płytce :>
UJ
@Autysta: a dekodowanie stanow J i K tez pisales samodzielnie czy miales gotowca?
AU
@userek_jakis: bibliotekę użyłem do obsługi protokołu, niżej nie schodziłem, nie wiem czy warto bo ilość pracy rośnie wykładniczo.
WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 5 godzin
  • Postów:3169
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.

KE
Stronka do doładowań orange ma też zwaloną implementację blika - nie ma typowego blokującego czekania, aż potwierdzisz, tylko od razu po wpisaniu kodu jest redirect na stronę z podsumowaniem, i jeśli coś nie przejdzie to trzeba w sumie zrobić wszystko od początku.
WhiteLightning
@kelog: ale na infocarze musisz w dodatku czekac pol godziny na timeout :P
snowflake2137
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 4 godziny
  • Postów:92
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.

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:7 dni
  • Lokalizacja:Rzeszów
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


CZ
  • Rejestracja:ponad 8 lat
  • Ostatnio:3 dni
  • Postów:2287
0

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

Zobacz pozostałe 5 komentarzy
FA
czasami nie działa ;)
snowflake2137
bo mam kartę miejską
Marooned
moBilet lepszy, bo bez reklam i ogarnia parkingi. JakDojade jest spoko w obcym mieście do komunikacji, ale to appka reklamowa z dodatkowym ficzerem szukania trasy.
somekind
Bo płacę zegarkiem jak biały człowiek.
CZ
Słabo, w Chinach płacą chipem w dłoni :P
M0
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 6 godzin
  • Postów:363
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.

Koziołek
Warszawa? Bo tak samo działa kupowanie za pomocą kodu QR
M0
@Koziołek: Aglomeracja Śląska, QR można zeskanować ale jest to mega niewygodne.
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 5 godzin
  • Lokalizacja:Poznań
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 ]:->


Zobacz pozostałe 7 komentarzy
Koziołek
@opiszon: teraz masz java.time i nadal jak ktoś pisze test w stylu: weź dzisiejszą datę; wrzuć do kalkulatora; powinno wypluć "D"+dziś.dzień+"R"+(dziś.rok+1), to 29 lutego będą się takie cuda działy i żadna biblioteka nie pomoże.
Azarien
Biorąc pod uwagę że miesiąc ma zmienną długość, a średnio ma 30,436875 doby, WTF polega na tym że ktokolwiek liczy czas w formacie xM yD.
Koziołek
@Azarien: ale dodajesz rok, miesiące mają stałą długość, poza lutym :D
Azarien
@Koziołek: rok też nie ma stałej długości. można dodawać rok liczbowo zostawiając miesiąc i dzień, ale i tak trzeba wziąć pod uwagę szczególny przypadek daty dzisiejszej (zwiększenie roku o 1 nie da prawidłowej daty)
Koziołek
@Azarien: i dlatego testowanie tam, gdzie masz zależność od czasu jest trudne. Podobnie jak w przypadku zależności od wartości losowych.
WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 5 godzin
  • Postów:3169
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

mrxormul
  • Rejestracja:około rok
  • Ostatnio:11 miesięcy
  • Postów:248
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.

WhiteLightning
Ja kilka lat przez podobna sytuacje mialem LTE. Szalu nie bylo, ale za to jak mnie denerwowal;y limity transferu. Troche czlowiek YT posluchal przy pracy i juz trzeba bylo kupowac nowe GB.
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:4 minuty
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


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
axelbest
Od każdego boxa czy tam sekcji (jak zwał tak zwał) jest oddzielny zespół. Jedni uderzają do API postawionego w Javie, inni uderzają do legacy IIS'a :D
Marooned
Everything in Dla firm <3
Riddle
Nie wiem czy to programistyczny wtf. Bug zwykły.
loza_prowizoryczna
Wreszcie wspólny obszar europejski zaczyna być traktowany jednolicie przez firmy z USA.
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:7 dni
  • Lokalizacja:Rzeszów
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.


edytowany 1x, ostatnio: dzek69
obscurity
Tylko jak tam trafił niderlandzki. Moim zdaniem lepiej jest mieć jeden fallback do języka który zawsze ma tłumaczenie niż dwa bo to już śmiesznie wygląda
dzek69
Może mają programistów mówiących głównie w tym języku i to jest ich domyślny? I mówisz, że wolałbyś miks polskiego i niderlandzkiego w takim wypadku? Co prawda mniej z tego zrozumiesz, ale nie będzie śmiesznie.
hzmzp
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 7 godzin
  • Postów:620
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ę.

obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:4 minuty
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 😄


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
FA
Ale zrobili właściwą rzecz co nie?
obscurity
co masz na myśli? Jako właściciele mogli zablokować zgłoszoną stronę na serwerze zamiast w przeglądarce
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12167
1

screenshot-20240419023109.png


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.
PA
  • Rejestracja:ponad rok
  • Ostatnio:4 dni
  • Postów:32
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:

Kopiuj
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?

Zobacz pozostałe 7 komentarzy
AS
@.GodOfCode.: nie wiem czy to ironia czy brak doświadczenia. Od ORMów gorsze są tylko autorskie ORMy.
GO
Dzięki, ja tworzyłem ORM i lubię je, dodajesz jedną adnotacje nad klasą i refleksja typy i nazwy zmiennych pobiera, funkcje dodaje do operacji, za jednym razem robisz metaprogramowanie, a skillowo jestem pro ile to będzie z 17 lat programowania.
PA
@KamilAdam: język to PHP @obscurity: "Coś tam podpatrzyli z innych języków i postanowili wziąć po pół składni z każdego" LOL dokładnie tak
KamilAdam
teraz wszystkie języki wyglądają podobnie Niby tak, ale dalej niewiele ma TypeClassy (w tym monady) :(
loza_prowizoryczna
Cały WTF, monady, DTOsy, ORMy a wszystko rozbija się o zwykłą mutowalność? I że mutowalność bywa niebezpieczna przy zastosowaniu takiego prostackiego wzorca proxy? Używajcie normalnych języków ;)
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:2 minuty
8

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.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
obscurity
wygląda że jedyny bug to że cię przekierowało na ekran logowania
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 5 godzin
  • Lokalizacja:Poznań
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


Zobacz pozostałe 9 komentarzy
Marooned
@abrakadaber: no jak się nie ma karty unlimited, to fakt, trzeba płacić za niestanie w kolejkach do baru (kasy zamknęli, bo może ktoś przy okazji kupi popcorn) - gdybym nie miał karty, to bym siwiał za każdym pójściem do kina
Marooned
A co do kina (CC konkretnie), to przez kartę jestem od 1 do 5 razy w miesiącu, zależy co grają. Karta kosztuje tyle, co średnio 2 bilety, a jest wygodniej. A że mam 2 przystanki tramwajem albo 3km autem, a do tego jest IMAX, to nie narzekam. Jeszcze gdyby zakazali popcornu/nachosów.. no ale to ich główny zarobek, więc nie ma co liczyć - ale zazwyczaj nie jest z tym źle. Ci, co przychodzą się nażreć często zjedzą wszystko w pierwszym kwadransie.
abrakadaber
abrakadaber
wiem, przez jakiś czas miałem roczny karnet ale że aktualnie dobrych filmów jak na lekarstwo to stwierdziłem, że i tak nie ma sensu.
dalbajob
bo do kina się chodzi w 2 osoby a nie w pojedynkę, piwniczaku /s
GO
@dalbajob: musisz być kiepski skoro dogadujesz się z ludźmi, czyli przeciętniakiem jak cię wszyscy rozumieją.
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10056
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.

edytowany 3x, ostatnio: Riddle
Miang
bo sam migracje to patola, database first to właściwe podejście
axelbest
"Nie no ziomuś, Laravel jest spoko... tylko pewnie lipna wersja Ci się trafiła, mówię Ci musisz coś lepszego dorwać"
KamilAdam
Czyli programiści PHP są skrajnie nieodpowiedzialni :P Dobrze wiedzieć :D
Riddle
@KamilAdam: Tak, bo w innych językach są sami odpowiedzialni :D
PP
  • Rejestracja:ponad 2 lata
  • Ostatnio:11 miesięcy
  • Postów:146
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.

KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:5 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
3

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

Kopiuj
    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ć

Kopiuj
    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 :(


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
Zobacz pozostałe 4 komentarze
KamilAdam
Nie potrafię sobie wyobrazić kiedy w normalnym kodzie Get last który zwraca optional byłby użyty z czymkolwiek innym niż orElseThrow O wy programiści sąbej wyobrażni, Są tu jeszcze jacyś miłośnicy checked exceptions? Używacie? Akurat miałem w pracy
KamilAdam
A w sumie nie pamiętam, jest getFirst() ? Jest, to nowa rzecz, świeżo dodana
Riddle
@KamilAdam: a nie lepiej if empty, return ""; return last.toString?
KamilAdam
@Riddle: w sensie mam tworzyć nową metodę? Nawet mi się nie chce myśleć jak miałbym nazwać tą metodę? lastElementAsStringWithDefaultEmptyString?
Riddle
@KamilAdam: Nie wiem czy nową metodę (musiałbym kod zobaczyć), i zależy co ta funkcja ma robić. Pokaż jej szerszy kontekst, to coś podpowiem.
opiszon
  • Rejestracja:prawie 3 lata
  • Ostatnio:40 minut
  • Postów:779
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

edytowany 1x, ostatnio: opiszon
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12167
3

Responsywne UI jest tak responsywne, że aż skisłem z zachwytu. 🤣

screenshot-20240522030331.png


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.
Zobacz pozostały 1 komentarz
Marooned
nie masz jakiś skryptów zmieniających yt? u mnie jest ok
flowCRANE
Skalowanie w przeglądarce zawsze mam na 100%, skryptów żadnych nie używam — ot standardowy, aktualny Edge.
Marooned
Spróbuj jakąś dobrą przeglądarkę, może się poprawi. Na Firefoksie jest git.
somekind
Firefox nie pomoże jeśli nazwa kanału jest długa. Po prostu w Google nie bardzo potrafią robić GUI.
Marooned
Ok, sprawdzałem na losowym filmie. Nie wpadłem, że to konkretny przypadek jest skopany.
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)