Programistyczne WTF jakie Was spotkały

Odpowiedz Nowy wątek
2009-04-03 11:31
rnd
9

Dziś w pracy moim oczom ukazała się klasa na 30k linijek. W jednym pliku.
Jeszcze jestem w szoku :-D
A jakie Wy mieliście WTF?


#define TRUE FALSE
//Happy debugging suckers :D
edytowany 2x, ostatnio: Demonical Monk, 2011-12-04 00:47

Pozostało 580 znaków

2018-07-29 19:59
13

robię sobie kalendarz w JavaScript więc rozgryzam / przypominam sobie szczegóły dotyczące dat. Obiekt Date w JS jest przesiąknięty złą sławą, bo jest on inspirowany obiektem Date z Javy (w końcu skądś JavaScript ma swoją nazwę, nie jest nazywany JavaScript bez powodu), więc są WTFy.

I tak wg JavaScript mamy 118 rok:

var date = new Date();
console.log(date); // 2018-07-29T17:20:44.724Z> 
console.log(date.getYear()); // 118 (WTF)

(dobra, już znalazłem na MDN, że getYear jest przestarzałe i żeby używać getFullYear ale i tak WTF. https://developer.mozilla.org[...]obal_Objects/Date/getFullYear

Nie mówiąc już o sztuczkach tego typu, że żeby się dowiedzieć, ile dany miesiąc ma dni, trzeba utworzyć datę, która będzie reprezentowała zerowy dzień kolejnego miesiąca (czyli jeśli chcesz wiedzieć, ile dni ma marzec, to tworzysz datę "zerowego kwietnia" https://stackoverflow.com/a/1184359
Trochę jak na tym memie z Parks & Rec: https://imgur.com/gallery/nfbpv )

Co to do tworzenia dat, też trzeba pamiętać, że miesiące są numerowane od zera i można stosować sztuczki, np. MDN nas uczy, że:
, if values are greater than their logical range (e.g. 13 is provided as the month value or 70 for the minute value), the adjacent value will be adjusted. E.g. new Date(2013, 13, 1) is equivalent to new Date(2014, 1, 1), both create a date for 2014-02-01 (note that the month is 0-based
https://developer.mozilla.org[...]Reference/Global_Objects/Date

No ale rezultat jest taki, że ciężko tym operować. Nie jestem w stanie utworzyć obiektu daty dla danego dnia :/ Chcę utworzyć datę pierwszego kwietnia, to wrzucam 2018, wrzucam 3 (0 - styczeń, 1 - luty, 2 - marzec, 3 - kwiecień) i wrzucam i 1 (pierwszy), a się wcale nie robi i wyskakuje mi 31 marca. Ale to już kwestia chyba strefy czasowej.

new Date(2018, 3 /* numeracja od zera */, 1);
2018-03-31T22:00:00.000Z
 

Więc jak skonwertować to do UTC? Hmm, jest coś takiego jak metoda getUTCDate! Czy to to? Hmmm, zobaczmy:

new Date(2018, 3 /* numeracja od zera */, 1).getUTCDate(); 
31 // WTF!!!?

Co pisze MDN?
https://developer.mozilla.org[...]lobal_Objects/Date/getUTCDate

The getUTCDate() method returns the day (date) of the month in the specified date according to universal time.

WTF. Przecież date to date a day to powinien być day. Co ciekawe funkcja getUTCDay (której i tak nie potrzebuję, bo chciałem całą datę) też istnieje, ale nie zwraca dnia miesiąca, tylko dzień tygodnia: https://developer.mozilla.org[...]Global_Objects/Date/getUTCDay

WTF WTFem pogania. Ciekawe czy w Javie też tak jest.


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
Pokaż pozostałe 21 komentarzy
A co oznacza ten 118 rok? Ile minęło od 1900 czy jak? - Marooned 2018-08-22 15:17
tak, bo w XX wieku ludzie mówili i pisali potocznie tylko 2 ostatnie liczby. Np. rok '95 zamiast 1995. Tylko komuś wyobraźni zabrakło do tego, że kiedyś XX wiek się skończy i ktoś pisząc język w 1995 dalej przyjął takie nazewnictwo. - LukeJL 2018-08-22 15:36
@LukeJL: no nie do końca. To jest trochę pozostałość po pierwszych komputerach, które miały bardzo mało pamięci. Przyjęto więc konwencję, że daty 50-99 oznaczają wiek XX, a 00-49 wiek XXI. Następnie w pierwszych implementacjach COBOLa zmieniono sposób zapisu czasu na ilość X od 1 stycznia 1900 0:0:0.000 i odpowiednio przycinano. W efekcie powstał potworek :( - Koziołek 2018-08-22 15:47
a potem był problem, bo w 2000 roku komputery miały przestać działać (Y2K problem) i wszyscy dygali przed tym, jak teraz dygali przed RODO. Każda firma chciała się przygotować na rok 2000. - LukeJL 2018-08-22 16:48
A ja do dziś żałuję, że za młody byłem, bo Y2K był bardziej dochodowy niż RODO. - Koziołek 2018-08-23 09:01

Pozostało 580 znaków

2018-07-29 20:43
4

Nie wiem czy to dobry temat, ale klikajac w odnosniki jednego z tematow na 4p trafilem na to:

screenshot-20180729204338.png

Pokaż pozostałe 10 komentarzy
nie ale w portfolio jest np to http://belgijski-antykwariat.pl - stivens 2018-07-29 22:38
jestem w stanie uwierzyć, że ten antykwariat powstał w jeden dzień ;) - cerrato 2018-07-29 22:39
ta strona wygląda jakby była robione maks w 1,5 godziny XD - LukeJL 2018-07-30 13:08
szczególnie, że to wszystko gotowce - Wordpress, slider, wtyczka do mętów ciała szklistego... - LukeJL 2018-07-30 13:09
Mnie zadziwia kolorystka belgijskiego antykwariatu i animacja tych kropek i kresek, WTF? Co to ma wspólnego z antykwariatem? Ach, wrażenie robi też wysoka pozycja strony po wpisaniu w googlach "belgijski antykwariat". - yarel 2018-07-30 13:48

Pozostało 580 znaków

2018-07-30 21:16
0

Docker... a raczej Docker CLI na windowsa

1) uzyj do logowania swojego maila
2) odpal komende ktora dzialala Ci wczesniej na linuxie
3) dostajesz Unable to find image 'postgres:latest' locally, zaraz po tym dostajesz unauthorized: incorrect username or password
4) https://github.com/docker/hub[...]es/935#issuecomment-300361781
5) robisz reloga na ID
6) Dziala
7) ???????

Pozostało 580 znaków

2018-07-31 14:41
4

W nawiązaniu do postu @LukeJL. Mamy sobie taki oto test:

@Test
public void floodGenerator() {
    Date db = new Date(1984, 0, 21);
    Set<String> generated = new HashSet<String>();
    for (int i = 0; i < 1000; i++) {
        generated.add(
                sut.generate(db, "M")
        );
    }
    System.out.println(generated);
    Assert.assertEquals(1000, generated.size());
}

Ma on za zadanie sprawdzić ile czasu zajmie wygenerowanie wszystkich numerów PESEL dla danej płci i daty urodzenia. Ma to nam podpowiedzieć jak dużo kolizji będziemy mieć w testach wydajnościowych. Trochę dupa-debug, ale nieważne.

Sam generator PESEL ma taki oto fragment:

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(birthDt.getTime());
int yyyy = cal.get(Calendar.YEAR);
int MM = cal.get(Calendar.MONTH) + 1;
int dd = cal.get(Calendar.DAY_OF_MONTH);
 
if (yyyy < 1800 || yyyy >= 2400) {
    return "";
}

Pytanie ile numerów PESEL zostanie wygenerowanych?


Oczywiście 0. Bo Date w konstruktorze dodaje sobie 1900 do daty.

Ciekawe jest to, że w JavaDoc'u jest napisane "@param year the year minus 1900." - DisQ 2018-07-31 14:54
Jest też dopisek w dokumentacji run with param -Dmaven.test.skip=true, ale to u nas :D - Koziołek 2018-07-31 14:55
to +1900 do roku to jest spadek po API C, więc problem powinien być znany. - MarekR22 2018-08-01 13:53

Pozostało 580 znaków

2018-08-03 15:43
2

BYŁO W INNYM WĄTKU, ALE TO BYŁ ZŁY WĄTEK

Z serii spłodziłem potwora.

Importy statyczne w Javie są jakie są. Niektórzy lubią inni nienawidzą. W połączeniu z klasami wewnętrznymi można sobie za ich pomocą spaść z rowerka albo bardzo ułatwić pisanie czytelnego kodu. czy to opcja pierwsza czy druga sami oceńcie:

import static pl.firma.produkt.generator.loadui.configuration.ComposedRunConfigurationProvider.MergedRunConfiguration.MergedRunConfigurationBuilder.aMergedRunConfiguration;

Co ciekawe w samym docelowym kodzie:

static RunConfiguration merge(RunConfiguration left, RunConfiguration right) {
    int order = left.compareTo(right);
    return aMergedRunConfiguration()
            .withActive(pickOne(order, left.isActive(), right.isActive(), def.isActive()))
            // .... 
            .build();
}

Nazewnictwo jest jeszcze do poprawy, ale to pikuś.

#spłodziłempotwora

Pozostało 580 znaków

2018-08-07 16:33
2

Raben - wielka, poważna, bogata, międzynarodowa firma spedycyjna.
Ale przycisków na stronie jakoś ogarnąć nie umieją ;)

screenshot-20180807163243.png


That game of life is hard to play, I'm gonna lose it anyway, The losing card I'll someday lay, So this is all I have to say
Pokaż pozostałe 3 komentarze
Powiem tak - znajdź mi dowolną wielką firmę, a znajdę Ci gdzie mają skopany css na stronie ;) - dzek69 2018-08-07 18:26
Wyzwanie przyjęte. Jak nie zapomnę to coś ci dam do analizy :D - cerrato 2018-08-07 19:00
Jeden raben powie tak, a inny powie nie - axelbest 2018-08-07 19:43
Google llc - stivens 2018-08-07 20:24
CSS wymyślili jacyś prawie programiści co nie umieją programować w XMLu... - vpiotr 2018-08-09 10:58

Pozostało 580 znaków

2018-08-09 10:51
3

Zmieniłem pracę.
jenkins master
WTF1: ostatni zielony build 2017-09-01 22:00
WTF2: ostatni zielony ma numer #51 a najświeższy #117
liczba buildów na develop 511 (bardzo mało)

I tak sobie myślę albo zostanę tutaj zbawcą, albo zmienię pracę po okresie próbnym.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Zapytaj się czy można wyłączyć jenkinsa skoro się nie sprawdza. Jeśli powiedzą że tak, to odejdź :) - vpiotr 2018-08-09 10:59
właśnie jest po to okres próbny, a miało być tak pięknie ... :D - robertwadowski 2018-08-09 11:33
Miałem to. W stylu: 5 miesięcy temu był ostatni zielony build i był to jeden jedyny zielony build w ciągu roku. Zrobiłem różne rzeczy, ale najważniejsze to : a) wizualizację buildów w postaci ekranu z lampkami widocznego w pokoju - po zepsuciu od razu było widać, ze zdjęciem bohatera (maile itp. często nie działają) b) wywaliłem testy, które się ciągle psuły (głównie selenium), był płacz ale pomogło - jarekr000000 2018-08-10 22:03
@jarekr000000: In time, you will help them accomplish wonders - vpiotr 2018-08-11 08:29

Pozostało 580 znaków

2018-08-10 16:38
3

Bardzo pracowitych ludzi mam w dziale:

IF {ID} = 1 THEN "ZC"
ELSE IF {ID} = 2 THEN "ZK"
ELSE IF {ID} = 3 THEN "SC"
ELSE IF {ID} = 4 THEN "SCF"
ELSE IF {ID} = 5 THEN "SCL"
ELSE IF {ID} = 6 THEN "R-m P"
ELSE IF {ID} = 7 THEN "TN"
ELSE IF {ID} = 8 THEN "UM"
ELSE IF {ID} = 9 THEN "JC"
ELSE IF {ID} = 10 THEN "TP"
ELSE IF {ID} = 11 THEN "ZLM"
ELSE IF {ID} = 12 THEN "LA"
ELSE IF {ID} = 13 THEN "PT"
ELSE IF {ID} = 14 THEN "PZ"
ELSE IF {ID} = 15 THEN "ZB"
ELSE IF {ID} = 16 THEN "R-M PF"
ELSE IF {ID} = 17 THEN "UM"
ELSE IF {ID} = 18 THEN "F+U"
ELSE IF {ID} = 19 THEN "ZC"
ELSE IF {ID} = 20 THEN "ZK"
ELSE IF {ID} = 21 THEN "SC
ELSE IF {ID} = 22 THEN "SCF"
ELSE IF {ID} = 23 THEN "SCL"
ELSE IF {ID} = 24 THEN "R-m P"
ELSE IF {ID} = 25 THEN "TN"
ELSE IF {ID} = 26 THEN "UM"
ELSE IF {ID} = 27 THEN "JC"
ELSE IF {ID} = 28 THEN "TP"
ELSE IF {ID} = 29 THEN "ZLM"
ELSE IF {ID} = 30 THEN "LA"
ELSE IF {ID} = 31 THEN "PT"
ELSE IF {ID} = 32 THEN "PZ"
ELSE IF {ID} = 33 THEN "ZB"
ELSE IF {ID} = 34 THEN "R-M F"
ELSE IF {ID} = 35 THEN "UM"
ELSE IF {ID} = 36 THEN "F+U"
ELSE IF {ID} = 37 THEN "Europe"
ELSE IF {ID} = 38 THEN "BU"
ELSE IF {ID} = 39 THEN "FI"

Wiedza to potęga
Pokaż pozostałe 4 komentarze
ale w sumie to switch dużo się od tych if'ów nie różni :P - cerrato 2018-08-10 22:53
Zdecydowanie się różni, ponieważ mamy krótszy kod i od razu widzimy, że wszystkie wyniki zależą od jednej zmiennej. Jest czystsze schludniejsze, łatwiej się czyta. Poza tym doczytaj mój komentarz do końca, bo podałem kolejne rozwiązania, które diametralnie zmieniają postać rzeczy, o ile można/warto je zastosować. - Haskell 2018-08-10 23:45
Jest dodatkowy smaczek w tym kodzie: wartości wyjściowe nie są unikalne - dwa różne ID mapują się na ten sam output. Bez szerszego spojrzenia na kod optymalizacja tego fragmentu mija się z celem. Najprawdopodniej wymagana jest tutaj ortogonalna optymalizacja - gruntowna zmiana architektury. Wnioskuję że w tym projekcie jest wiele takich miejsc, warto byłoby te wszystkie problemy rozwiązać za pomocą rozwiązania systemowego a nie łatania małych części kodu w kilku miejscach. - lubie_programowac 2018-08-11 09:21
@lubie_programowac: dobrze, że napisałeś "smaczek" a nie "błąd" ;) - cerrato 2018-08-11 10:19
@lubie_programowac: masz rację, ten kod to wynik złego rozwiązania w innym miejscu. Jak oglądałem to wczoraj to po godzinie słania WTF zdecydowałem o zaoraniu całości, bo poprawianie tego to byłaby rzeźba w brązie. Niestety niektórzy programiści są nieuleczalnie pracowici i co najgorsze później tłumaczą się pośpiechem... - Haskell 2018-08-11 11:05

Pozostało 580 znaków

2018-08-10 16:45
17

screenshot-20180810164500.png

Pozostało 580 znaków

2018-08-11 21:48
2

GOG -> nieopatrznie na wakacjach zalogowalem sie na swoje konto z innego kraju. Teraz nie jestem w stanie wybrac PLN jako waluty bo mam do wyboru tylko EUR i USD bo strona "mysli" ze jestem za granica chociaz wrocilem...

moze inkantacja Globalnego Otwarcia Gotfryda pomoze :D - stivens 2018-08-11 21:57

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: Semrush