Programistyczne WTF jakie Was spotkały

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

Rejestracja: 12 lat temu

Ostatnio: 8 lat temu

11

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

2019-08-06 14:45

Rejestracja: 2 lata temu

Ostatnio: 5 godzin temu

5

Jeśli już kiedyś tutaj było, to wybaczcie:


F... to miało iść do wątku z humorem. Chyba potrzebuję wakacji od forum ;) - Freja Draco 2019-08-06 16:28

Pozostało 580 znaków

2019-08-08 01:09

Rejestracja: 3 lata temu

Ostatnio: 10 godzin temu

8

javascript:
title

Pokaż pozostałe 19 komentarzy
@vpiotr nie chodzi o to, co można tylko pytanie tylko o koszt takich zabaw. Kiedyś patrzyłem, że np. interpreter Pythona zajmował z 3 megabajty w pliku *.js. A z tym Quake to też pytanie, jak to bd działać na słabszych urzadzeniach. - LukeJL 2019-08-09 15:09
@vpiotr fajnie z tym Quakem, aż sobie włączyłem. Tylko szkoda, że nikt nie chodzi do zabijania. Ale może zły tryb włączyłem. - LukeJL 2019-08-09 15:12
@LukeJL quakejs działa zacnie nawet na słabym notebookie . JS nie musi być powolny - trudno napisać wydajną VMkę, ale się da (V8 już jest niezła, a możliwości teoretycznych usprawnień nadal dużo (tak mi się zdaje)). - jarekr000000 2019-08-09 15:18
@jarekr000000: to nie tylko kwestia V8, tylko też sprawnego renderingu WebGL. - LukeJL 2019-08-09 15:21
Matko boska, ile można. Operatory które są odwrotne dla jednych typów danych, nie koniecznie są odwrotne dla innych typów. Ile to można wałkować... - TomRiddle 2019-10-20 16:45

Pozostało 580 znaków

2019-08-09 10:45
Administrator

Rejestracja: 18 lat temu

Ostatnio: 1 tydzień temu

Lokalizacja: Poznań

9

Nie do końca programistyczne.

2 tygodnie temu wróciłem z urlopu i VDI (zdalny Windows) zgłosił mi wygaśnięcie hasła. W wymogach wielkie/małe litery, cyfry i znaki specjalne. Wbiłem nowe hasło i kontynuowałem pracę. Niestety, mniej więcej raz w tygodniu leci wymuszony restart. Nowe hasło zostało przyjęte na stronie, z której odpalam VDI, ale już na ekranie logowania Windows wywalało błąd. Ani stare ani nowe nie przechodziło, zablokowałem konto, kontakt z ITS (mniej więcej jak na ostatnim filmiku HRejterzy), pan odblokował mi konto i strzelił reseta.. po resecie Windows czasem nie pyta o hasło, loguje się jakoś automatycznie.

Minęło dni kilka, znów reset, znów hasło nieprawidłowe.. Ustawiłem sobie nowe (przez stronę można), zalogował się automatycznie.. ale po paru dniach znów reset i znów "hasło nieprawidłowe" i ITS..
Sytuacja stawała się co raz bardziej absurdalna aż do dziś... ta sama historia, ale tym razem znajoma z biurka obok "a spróbuj wirtualną klawiaturą wpisać". Odpalam, a tam... układ brytyjski! WTF. Dlatego nic poza wykrzyknikiem nie przechodzi, jakieś funty i inne krzaki zamiast klasycznego układu amerykańskiego. Hash obok entera.. mogłem sobie wpisywać swoje hasło i 100 razy i bym nie trafił. Dopiero po zalogowaniu ładuje ustawienia mojej klawiatury.

Co więcej, kursor myszy znika jak najeżdżam na tę wirtualną klawiaturę, więc muszę na oko z wyczuciem niewidzialnym kursorem najechać, kliknąć i mieć nadzieję, że * w polu hasła to odpowiedni znak :D


Pokaż pozostałe 19 komentarzy
Lata praktyki dla klientów z UK. ;) - somekind 2019-08-09 15:39
Naklejki można dać na przednich ściankach klawiszy – jeśli mowa o normalnej klawiaturze PC :) Zauważyłem podobny problem z Windowsowym RDP – otóż na większości komputerów mam zainstalowany niestandardowy układ (w sensie że jest "3rd party", nie ma go na liście). Podczas zdalnego logowania Windows widząc coś niestandardowego na wszelki wypadek przestawia na defaultowy amerykański (nawet potrafi go sobie doinstalować w tym momencie jeśli wcześniej wywaliłem jako zupełnie nadmiarowy). Na szczęście znaczki są w tych samych miejscach, nie jak w brytyjskim. - Azarien 2019-08-21 19:48
@Azarien: czyli ten niestandardowy układ jest mniej lub bardziej wstecznie kompatybilny z amerykańskim? - Silv 2019-08-21 19:52
Jest (prawie) kompatybilny z polskim programisty który jest (prawie) kompatybilny z amerykańskim. Czyli nie ma problemu. Pewnie by był gdybym chciał mieć polskie litery w haśle… ale to zły pomysł właśnie ze względu na takie sytuacje. - Azarien 2019-08-21 19:53
Dlatego "ze względu na takie sytuacje" wymaganie znaków specjalnych w haśle nie ma sensu. Wydłużenie minimalnej długości hasła załatwiłoby ten problem w podobny sposób bez dodatkowych problemów. - Marooned 2019-08-22 12:44

Pozostało 580 znaków

2019-08-14 11:08
Moderator

Rejestracja: 16 lat temu

Ostatnio: 2 dni temu

5

screenshot-20190814110824.png

edytowany 1x, ostatnio: Krolik, 2019-08-14 11:08
Pokaż pozostałe 3 komentarze
@AreQrm: Więcej pakietów to nic. Różnica w danych ważniejsza ;) - PerlMonk 2019-08-14 12:53
@dzek69: widziałeś, ale czy wiesz może, jakie są możliwe powody? - Silv 2019-08-14 15:25
Coś było mocno nie tak z tym mirrorem dzisiaj - dane sączyły się jak krew z nosa, natomiast po zmianie mirrora cała aktualizacja poszła w kilka sekund. - Krolik 2019-08-14 15:28
@Krolik: Tak się mówi, ale właściwie nie rozumiem. Przecież jak krew z nosa leci, to raczej szybko... - Silv 2019-08-14 15:32
E tam, jest napisane, że "extra", to musi być więcej :D - yarel 2019-08-17 09:14

Pozostało 580 znaków

2019-08-14 22:29

Rejestracja: 2 lata temu

Ostatnio: 1 minuta temu

Lokalizacja: Kraków

1

WTF No. 1

Gdzieś w odmętach pull requesta drugiego juniora, javowca 2y:

@Test
void 'Foo should this and that blah blah blah unit test'() {
  def foo1 = new Foo(/* jakieś 80 znaków inicjalizacji */)
  assertFooThisAndThatInThose2LinesOfCodeOrSo(foo1, CONST_1)

  def foo2 = new Foo(/* jakieś 80 znaków inicjalizacji */)
  assertFooThisAndThatInThose2LinesOfCodeOrSo(foo2, CONST_2)

  def foo3 = new Foo(/* jakieś 80 znaków inicjalizacji */)
  assertFooThisAndThatInThose2LinesOfCodeOrSo(foo3, CONST_3)
}

No zdarza się. Sam ciągle popełniam takie wtopy i babole, że jak już mija zaćmienie umysłu to aż łapię się za głowę i rozważam pokutę w postaci 10 lat robót w kamieniołomie.

Ale...

Ten sam junior namawia mnie do parametryzowania wszystkiego co się da, również wtedy, gdy zwyczajnie żadnej korzyści to nie przyniesie. Ale widocznie tego nie szło ani sparametryzować, ani rozbić tych 3 przypadków na 3 osobne testy ¯\_(ツ)_/¯

WTF No. 2

Ten sam delikwent, ten sam pull request, też gdzieś w testach:

@Test
void 'this and that should blah blah blah'() {
  // coś tam coś tam
  assertThisAndThatBlahBlah(foo, bar)
}

private assertThisAndThatBlahBlah(Foo foo, Bar bar) {
  assertThisAndThatBlahBlah(foo, bar, SOME_DEFAULT_BAZ)
  assertThisAndThatBlahBlah(foo, bar, SOME_DEFAULT_BAZ)
  assertThisAndThatBlahBlah(foo, bar, SOME_DEFAULT_BAZ)
  assertThisAndThatBlahBlah(foo, bar, SOME_DEFAULT_BAZ)
  assertThisAndThatBlahBlah(foo, bar, SOME_DEFAULT_BAZ)
}

private assertThisAndThatBlahBlah(Foo foo, Bar bar, Baz baz) {
  // nic co mogłoby uzasadnić N wywołań pod rząd
}

A może to po prostu dobre praktyki testowania w JUnit, a ja jestem głupi i się nie znam? :/


Nie znam się, ale się wypowiem
Co poradzisz, testy męczą, sam dzisiaj migrowałem z JUnit 4 na 5 :P - Burdzi0 2019-08-14 22:31
testy męczą szczególnie jak jest w nich taka sieczka i kiedyś coś zacznie failować :] - superdurszlak 2019-08-14 22:35
@superdurszlak: przynajmniej są jakieś testy :) Ja jestem na projekcie gdzie wszystkie testy unitowe to tak na prawde integracyjne, choć czasem mockują 90% systemu bo oczywiście wszystko jest od wszystkiego zależne. W końcu zrozumiałem też czym jest testowanie mockito :) Myślałem że tak się tylko mówi, myliłem się. - orchowskia 2019-08-17 08:16
A kto przetestuje testy? - PerlMonk 2019-08-17 09:02

Pozostało 580 znaków

2019-08-20 23:20

Rejestracja: 3 lata temu

Ostatnio: 10 godzin temu

10

javascript:

('b' + 'a' + + 'a' + 'a').toLowerCase()

banana

Pokaż pozostałe 4 komentarze
a wiesz, ze jezeli zamiast + + zrobisz + - to bedzie to samo? castowanie na liczbe nie dziala bo jest literka A i stad nan - fasadin 2019-08-21 08:39
('czapka' + 'niewidka' - 'a' + 'a') ;-) - Marooned 2019-08-22 12:47
@Marooned: ten błąd ortograficzny to celowo? - Silv 2019-08-22 16:10
@Silv: buahaha, grubo pojechałem, dzięki - Marooned 2019-08-23 10:00

Pozostało 580 znaków

2019-08-21 08:07

Rejestracja: 9 lat temu

Ostatnio: 1 dzień temu

7

https://github.com/techtalk/SpecFlow/issues/1696

drugi komentarz :D (kliknijcie w duplikat)

edytowany 1x, ostatnio: fasadin, 2019-08-21 08:08
Pokaż pozostałe 2 komentarze
rekurencyjny duplikat, niezłe :-) - Aryman1983 2019-08-21 09:30
Poprawił się, ot złego linka wkleił :-) Ludzki błąd :) - AreQrm 2019-08-21 12:02
@superdurszlak: następuje elektrodyzacja internetu. - Koziołek 2019-08-21 17:35
Było, szukaj. - Marooned 2019-08-22 12:49
Już myślałem że to celowy troll, patrząc na ksywkę SabotageAndi :D - Azarien 2019-08-22 13:17

Pozostało 580 znaków

2019-08-21 15:38

Rejestracja: 6 lat temu

Ostatnio: 3 minuty temu

5

Sam się zaorałem.

Pisząc testy w Jest, utworzyłem sobie na potrzeby testów pewną strukturę danych (tablicę tablic), do której dodałem taką oto asercję:

    expect(whatHappened).toEqual([
       ['UPDATE', {a: 10}, {a: 10}],
       ['EFFECTS', {a: 10, b: 11}, {a: 10, b: 11}],
       ['UPDATE', {a: 10, b: 11}, {a: 10, b: 11}]
       ['EFFECTS', {a: 10, b: 11}, {a: 10, b: 11}],
    ]);

I testy nie przechodziły, pomimo, że powinny były przejść! Aż sprawdzałem JSON.stringify(whatHappened, 0, 2) i przyglądałem się po kilka razy, wszystko wydawało się w porządku. Nawet sprawdzałem kolejne elementy tablicy po kolei i wszystko przechodziło. Tylko jak się dało całą tablicę naraz, to nie przeszło. I dawało w diffie, że gdzieś jest undefined, mimo, że go przecież nie było!

Więc zmieniłem expect z Jest, na assert.deepStrictEqual, mając nadzieję, że to bug w Jest. Bo przecież jak to tak? Jednak assert.deepStrictEqual także wywalało mi błąd, jednak nieco czytelniej mi pokazywało diffa.

fragment tego diffa (wreszcie załapałem, gdzie się pojawia to undefined.

        Array [
          "EFFECTS",
          Object {
            "a": 10,
            "b": 11,
          },
          Object {
            "a": 10,
            "b": 11,
          },
        ],
    -   undefined,
    +   Array [
    +     "UPDATE",
    +     Object {
    +       "a": 10,
    +       "b": 11,
    +     },
    +     Object {
    +       "a": 10,
    +       "b": 11,
    +     },
    +   ],

Jak widzimy, między dwoma elementami tablicy nijak skądś wyskakuje undefined. Wiecie już?
.
.
.
.
.
.
.
.
.
Otóż, ku mojemu przerażeniu dokonałem straszliwego odkrycia. Zapomniałem przecinka

       ['UPDATE', {a: 10, b: 11}, {a: 10, b: 11}]
       ['EFFECTS', {a: 10, b: 11}, {a: 10, b: 11}],

i tutaj szybko wykoncypowałem, że JS [] wziął za indeks tablicy, a nie za kolejny element, więc dla JS te dwa elementy to było coś jak to:

jakasTablica =  ['UPDATE', {a: 10, b: 11}, {a: 10, b: 11}]; // pierwszy element
jakasTablica['EFFECTS', {a: 10, b: 11}, {a: 10, b: 11}], // drugi element

Jednak dalej coś się nie zgadza. Przecież w JS można dawać tylko jeden argument jako indeks []. no ale tutaj z górki. Po prostu w JS wyrażenie może zawierać przecinki, ale liczy się ostatnia wartość, czyli:

alert(('Hello', 'World')); // równoważne w tym wypadku alert('World');

wyświetli samo World (zwróćcie uwagę, że dałem tu dodatkowy nawias, bo bez tego potraktowałby wartość po przecinku jako separator między argumentami, więc wyświetliłby samo Hello.

Czyli JS potrafi być wredny. Nie poprzez brak typów, ale przez to, że wszystko może być wszystkim, a wiele znaków ma podwójne znaczenie (tutaj [], ale także {} rodzi tego typu problemy, podobnie jak () czy +...). Swoją drogą ciekawe, czy TypeScript i statyczne typowanie by mnie tutaj uratowało w tym momencie? Możliwe, mogłoby zaalarmować, że coś jest nie tak, ale czy dałoby mi na tyle czytelny komunikat, żebym zakumał od razu, co robię źle? Bo, że "coś nie działało", to mnie ostrzegł już Jest, ale to był komunikat, który wcale niewiele mi pomógł, poza tym, że wiedziałem, że coś nie działa, a powinno).


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
edytowany 4x, ostatnio: LukeJL, 2019-08-21 15:41
Pokaż pozostałe 47 komentarzy
Btw, ciekawostka - jak używasz Array.from to .map() nie jest potrzebne - funkcję mapującą można przekazać bezpośrednio i nie tworzy się wtedy pośrednia tablica, np: Array.from([1, 2, 3], x => x * 2) // -> [2, 4, 6] - Maciej Cąderek 2019-08-22 06:01
Array.from({length: k}) można też zapisać jako [...Array(k)] Jak chcieć jeszcze bardziej skrócić :) - Schadoow 2019-08-22 08:08
@Maciej Cąderek: bez map? Dziękuję, kod będzie lepiej wyglądać. :) - Silv 2019-08-22 16:03
ja już wstawiałem ten sposób bez map kilka komentarzy wcześniej ;) - LukeJL 2019-08-22 16:06
@LukeJL: przepraszam. Przeoczyłem. - Silv 2019-08-22 16:11

Pozostało 580 znaków

2019-08-22 14:20

Rejestracja: 8 lat temu

Ostatnio: 3 dni temu

2

Dostałem przed chwilą maila z mBanku i moją uwagę zwrócił jeden szczegół:
screenshot-20190822141929.png

W źródle wiadomości jest:
screenshot-20190822142030.png

Kim jest Michał Maciejewski w mBanku :P?

Ps. To naprawdę jest mail z mBanku.

edytowany 1x, ostatnio: hipekk, 2019-08-22 14:51
Pokaż pozostałe 2 komentarze
Stazysty to sie nie spodziewalem - stivens 2019-08-22 15:59
Miałem wrzucić na ich fan page, ale nie będę może koledze pod górkę robił od początku ;). - hipekk 2019-08-22 16:56
myślałem, że to Twój mail - po prostu się wstawił w nieodpowiednie miejsce - cerrato 2019-08-23 09:00
Też go mam, taki sam e-mail. Co ciekawe dot. rekompensaty za jakiś przeciek RODO, przy okazji robiąc kolejny, a może mieli wysłać ten email tylko do tego ziomka a wysłali do wszystkich - Markuz 2019-08-25 20:49

Pozostało 580 znaków

2019-08-22 19:17

Rejestracja: 1 rok temu

Ostatnio: 3 minuty temu

7

https://aur.archlinux.org/packages/mongodb#pinned-682388

MongoDB potrzebuje do zbudowania 260GB ponieważ testy znajdują się w paczce z pakietem.

Pozostało 580 znaków

Odpowiedz

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

Robot: Semrush