Programistyczne WTF jakie Was spotkały

Odpowiedz Nowy wątek
2009-04-03 11:31
rnd
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

2018-11-30 17:24
2

Z dzisiaj, takie perełki na PR wrzuca brazylijski senior iOS'a który ma mnie wdrożyć w świat swifta / iOSa:

struct Sort {
    let key: SortKey
    let direction: SortDirection

    var isAscending: Bool {
        return direction == SortDirection.descending ? false : true
    }
}

Im dalej w las tym więcej drzew:

enum SortDirection: String, StringEnum {
    case descending
}

Kolejna perełka, komentarz który dodał:
//NAO COMPLETA AINDA

Hola kolego miałem się uczyć od Ciebie swifta a nie portugalskiego.

Na drugi dzień:
// TODO: transferir logica para HomeInteractor pois agora nao interessa mais se esta offline ou nao para exibir os cards

Inne wtf projektowe:

Dzisiaj mam spotkanie z osobą z USA, nie ogarniają jednej biblioteki i jest blocker jak cholera 
Dwa miesiące temu mówiłem że to nie działa / nie jest przetestowane i trzeba zapytać klienta czy jest ok
Jasne
Poszło na produkcje, szef jeszcze zamknął taska jako Fixed

oraz:

Wczoraj Testerki zrobily request zeby nadpisac cale srodowisko gdzie sa deeplinki
I poszlo xD zaden link do nie dziala a bez deeplinkow nie rozwiaze tematu z USA
Automatu na tworzenie deeplinkow na to nie ma, dziewczyny siedza i tworza nowe recznie, kazdy zajmuje kolo 3 minut a trzeba ich zrobic kilkaset...
edytowany 1x, ostatnio: lubie_programowac, 2018-11-30 17:40
kilkaset deeplinków to już WTF. A na WTF typu if (x()) return true; else return false; to przygotuj się psychicznie, bo będziesz ich widział dużo. - MarekR22 2018-12-01 11:59
chyba pracujemy przy tym samym projekcie - Narror 2018-12-01 22:49
@MarekR22: :) tylko że w moim przykładzie a raczej przykładzie kolegi jest: if(x()) return false; else return true; więc if true then false ;) - lubie_programowac 2018-12-01 22:54

Pozostało 580 znaków

2018-12-02 21:52
2

Nie wiem czy to programistyczny WTF czy bardziej sknerowatość sprzedawcy:
koszyk.png


Szacuje się, że w Polsce brakuje 50 tys. programistów
Pokaż pozostałe 3 komentarze
Wlasnie cos te klocki jakos drogie mi sie wydawaly. - vpiotr 2018-12-03 08:37
tak a propos, ostatnio zamawiałem duże lego z włoskiego amazona. wychodzi taniej. - Azarien 2018-12-03 13:41
@Azarien: to polecam jeszcze bricklink - axelbest 2018-12-03 18:52
Może to jakiś gotowy skrypt, gdzie trzeba było podać jakąś wartość? Na Allegro czasem są towary za kosmiczną kasę, bo wolą tak zrobić na czas braku towaru niż zdejmować ogłoszenie, bo wtedy nie tracą miejsca w rankingu, a Allegro jeszcze tego nie ścignęło. - Marooned 2018-12-15 19:44

Pozostało 580 znaków

2018-12-03 11:03
0

Tak z ciekawości spojrzałem na CI z JavaScript (nie moja bajka), a tu takie zagnieżdżone WTF:

getSomeObjects(stateParams) {
     // w starej wersji było tak: return (null != stateParams.filters) ? JSON.parse(decodeURIComponent(stateParams.filters)) : null;
     return (null != stateParams.filters) ? JSON.parse(decodeURIComponent(decodeURIComponent(stateParams.filters))) : null;
}

WTF 1: podwójne decodeURIComponent
WTF 2: połączenie JSon i decodeURIComponent


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2018-12-06 12:24
5

Czas na WTFka z C:

static void freeState(deviceState_t *state)
{
    freeDevicesTags(state->tagsList[0]);
    free(state);
    state->tagsANum = 0;
    state->tagsRNum = 0;
}

"Chodzenie po wodzie i tworzenie oprogramowania wg specyfikacji są łatwe, o ile woda i specyfikacja są zamrożone" - Edward V. Berard
Pokaż pozostałe 3 komentarze
@Patryk27: ale to dość logiczne skoro usuwa się zmienną z pamięci. Nowoczesne kompilatory powinny sypnąć pięknym błędem. Gdzie tu WTF? - siloam 2018-12-06 13:03
@siloam: jakoś gcc nie sypał przy tym błędem, tylko cppcheck to wykrył ;) - Madaoo 2018-12-06 13:46
@siloam: kompilator ma za zadanie sprawdzać poprawność składni, a nie sensowność kodu jako całości. a składnia jest tu w porządku. free() to po prostu funkcja, a nie jakiś magiczny keyword. w dodatku później na etapie linkowania może się okazać że to wcale nie jest TEN standardowy free, tylko funkcja użytkownika która się tylko tak głupio nazywa… ale fakt, mógłby być tu chociaż warning. - Azarien 2018-12-07 21:21
Najgorsze że to nie zawsze sypnie błędem. Czasami, np. raz w miesiącu wyzeruje losowe bajty innego obiektu/struktury w pamięci. - vpiotr 2018-12-10 17:00
Jest spora szansa że nigdy nie sypnie błędem, udając że jest dobrze, aż kod zostanie przerobiony na wielowątkowy, albo gdy gdzieś będzie dodany odczyt tych pól po destrukcji obiektu, a nie tylko ten zapis. - Azarien 2018-12-10 19:46

Pozostało 580 znaków

2018-12-06 13:06
0

CORS w Ajax to jedna z największych pomyłek w informatyce zaraz po billion-dollar mistake by O'Hoare'.


Czemu? A jak inaczej byś chciał to rozwiązać? Nie jest to rozwiązanie idealne, ale niespecjalnie widzę lepsze. - hauleth 2018-12-07 16:28

Pozostało 580 znaków

2018-12-07 16:10
2

Dziś dostałem ekstrakt/eksport danych z "flagowego produktu", zestaw plików CSV, w których separatorem jest , a wartości owinięte są ".

"val1","","val3","JSON...","valN" 

JSON ma:

{attr1:"val1",attr2:"val2",attr3:"",...}

Ktoś chyba nie przemyślał funkcjonalności importu takich danych :-)

Pokaż pozostałe 2 komentarze
Nie upieram się co do klasyfikacji, może być i bug, chyba, że go nie poprawią ;-) - yarel 2018-12-07 16:49
Jak JSON moze byc jsowy? Maslo maslane - stivens 2018-12-07 18:15
JSON wbrew nazwie nie jest do końca kompatybilny z JS. - LukeJL 2018-12-07 18:40
to powinno się nazywać np. JSION (JavaScript Inspired Object Notation) a nie JavaScript Object Notation - LukeJL 2018-12-07 18:41

Pozostało 580 znaków

2018-12-07 16:53
8

Okazało się w pewnej aplikacji do robienia joinów w bazach danych został wykorzystany algorytm ....Dijkstry

Edit:
To była aplikacje webowa gdzie szuka się czegoś na podsawie jakiś danych wejściowych i robi się raport. Założmy że mamy start od tabelki A i chcemy wyciągnąć coś z tabeli F tez. Mamy po drodze albo tabele B i C lub D i E. Celem jest znalezienie lepszej drogi do tabeli F. Jest cały graf tabel. Kreatywnośc studentów jest wielka :D


Nie pomagam przez PM. Pytania zadaje się na forum.
edytowany 1x, ostatnio: scibi92, 2018-12-07 17:47
Pokaż pozostałe 2 komentarze
Bo zakładam, że mimo nietypowego rozwiązania to jednak całość działała i dawała spodziewane rezultaty? - cerrato 2018-12-07 17:52
Z tego co wiem tak :P - scibi92 2018-12-07 17:57
Jak działa to nie ruszać ;) - cerrato 2018-12-07 18:15
Dobrze, że Hindusi nie wiedzą, co to algorytmy, bo też bym takie cuda spotykał. - somekind 2018-12-08 02:19
Jak nie zarżnie bazy to działa...;-) - kate87 2019-03-10 16:55

Pozostało 580 znaków

2018-12-10 14:48
6

Tym razem o obsłudze typów logicznych. I tak w każdej funkcji w tym module.

Boolean jakasFunkcja(Object obj) {
  // Jakiś kod

  if (obj instanceof Long) {
    Long lg = (Long) obj;
    if (lg < 1) {
      return new Boolean(true);
    } else {
      return null;
    }
  }

  // Jakiś kod
}

void jakasFunkcja2(Boolean bool) {
  if (bool == null) {
    // coś tam
  } else {
    // coś tam 2
  }
}
Pokaż pozostałe 6 komentarzy
object oriented programming :D!!! w .nut nazwaliby to dynamic oriented programming i nawet brzmiałoby lekko poważnie :D - WeiXiao 2018-12-10 19:54
@WeiXiao: bardziej Common Headache Routine albo Workaround Driven Development ;) @LukeJL: noo dobra, tu mnie masz. - superdurszlak 2018-12-10 20:29
@superdurszlak: ahh Workaround / Hack Driven Development <3 Mój ulubiony - WeiXiao 2018-12-10 20:30
Oooo to to to, piękne po prostu. Widziałem ostatnio konstrukt w stylu val ref = when(cośtam) { dupa -> Dupa::class; cycki -> Cycki::class; else -> throw TrelemoreleException("coś do logów") }; return ref.primaryConstructor?.newInstance(arg1, arg2, ..., argN) . Wspaniałe :D - superdurszlak 2018-12-10 20:58
TrelemoreleException :D - Desu 2018-12-10 21:06

Pozostało 580 znaków

2018-12-11 09:07
22

Opowiem o ciekawym WTF, ale nie pod kątem złego kodu, a buga jaki mi się kiedyś przytrafił. Z produkcji spłynął opis, że podczas skanowania jakiegoś tam vouchera płatniczego, maszyna im pika - i to jest ok, bo tak ma być, ale czasami pika im kilka razy w losowych odstępach czasu i ilością piknięć. Nie wierzyłem, więc mi testerzy nagrali nawet filmik.

Oczywiście u mnie nie do zrepdoukowania. Przekopałem cały kod związany z pikaniem, aż do samego spodu i nic nie było. W logach pusto więc nasrałem loggerów po całym kodzie gdzie tylko miałem przypuszczenie, że może mieć to coś wspólnego. Wysłałem im snapshota żeby sprawdzili jeszcze raz i wysłali logi. Oczywiście pusto! nic się nie zalogowało z moich linijek (poza jedną testową, którą umieściłem, dla pewności czy dobrze podmienili wersje).

Wiece co się okazało? Do płatności tymi voucherami potrzebny był certyfikat, który zahashowany czy tam encodowany wypisywał się w logach. Zdarzało się, że algorytm kodujący umieszczał tam znak 0x007, który odpowiedzialny jest za system beep! Nie mogłem tego zreprodukować bo odpalałem aplikacje z poziomu IDEE, a oni z jakiś launcherów w cmd. Wystarczyło zmienić poziom logowania i po sprawie. Spędziłem nad tym parę dni.

edytowany 1x, ostatnio: Berylo, 2018-12-11 09:08
SQL beep injection! - lubie_programowac 2018-12-11 09:31
Rozbawiła mnie Twoja historia. Na prima aprilis weź daj im wersję "do testów", która będzie w losowych momentach wypisywać znak 07 na konsolę niezależnie od skanowania :D. - Sarrus 2018-12-11 10:42
haha dobry pomysł - Berylo 2018-12-11 10:44
wystarczyło cat logi.txt i byś zreprodukował błąd :). - MarekR22 2018-12-12 00:51
@MarekR22: zakladajac ze ma sie dostep do systemu, a nie pracujesz przez goscia od klienta majacego role, zdalne, powolne i niepewne proxy :) - WhiteLightning 2018-12-12 00:58
@WhiteLightning: nie załapałeś. To był dowcip: jakby logi wypisał w terminalu to by mu beepneło bez uruchamiania czegokolwiek. Tymczasem np Notepad++ nie beepa. - MarekR22 2018-12-12 01:00

Pozostało 580 znaków

2018-12-13 12:12
6

Niestety nie mogę pokazać kodu, ale…

Mamy kod w Pythonie, w którym jest setter. Jeszcze spoko, chociaż w Pythonie settery są zazwyczaj potrzebne jak krowie hulajnoga. Nazwa i zastosowanie klasy wskazuje na to, że to będzie prosty setter, w stylu def setAlthorion’sSanity(self, sanity): self._sanity = sanity. Ale nie… Ten przyjemniaczek to:

def setAlthorion’sSanity(self, sanity):
    self._sanity = self.getSomethingElse(sanity, 42)

Czyli tak — mamy settera, który przyjmuje jeden parametr, który się nazywa tak samo jak parametr wewnątrz klasy, ale nie ustawia go bezpośrednio, tylko woła gettera, który przyjmuje dwa parametry, Z CZEGO JEDEN KOMPLETNIE Z KOSMOSU…

A tenże getter, to też niezła sztuka — wywołany bez parametrów, normalnie gettuje co powinien. Ale jak nie, to… jeszcze w sumie nie wiem, co robi. W każdym razie, woła inne funkcje, zależy od stanu rozsianego po całym programie… W każdym razie jeszcze gagatka nie rozgryzłem, a i tak czuję, że coś mi to sanity na False próbuje ustawić…

Pokaż pozostałe 7 komentarzy
Główny łotafakiem tutaj jest, w mojej opinii, ten getter. Który robi dwie zupełnie różne rzeczy. A nawet jakby nie robił, to idea gettera z parametrami jest czymś, co mnie przerasta. No, przynajmniej wtedy, gdy nazwa tego nie sugeruje. Bo np. getStateByDate(date) już ma sens. - Althorion 2018-12-13 13:58
No tak, zdecydowanie składnia propertisów jest czytelniejsza. Tylko jak dla mnie, to self.getSomethingElse(sanity, 42) to jest zawołanie metody, która ma prefiks get, a nie gettera, więc chyba czegoś tu nie rozumiem. - somekind 2018-12-13 14:00
Obiekt ma też i propery o nazwie SomethingElse. Czyli, powiedzmy, mamy kod def setWidth(self, width): self._width = self.getHeight(width, 42), gdzie klasa ma i self._width, i self._height, a ponadto getHeight() wywołane bez argumentów zwróci właśnie tego self._height. Co w sumie jest nawet dobrą anonimizacją kodu — bo tamte propertiesy są podobne w naturze, ale nie zależą bezpośrednio jedne od drugiego (na podobnej zasadzie, jak szerokość i wysokość to podobne w swej naturze rzeczy, ale jedna nie zależy od drugiej). - Althorion 2018-12-13 14:04
To wygląda tak, jakby ktoś dopadł pierwszą funkcję, jaką znalazł (getSomethingElse jest na samej górze klasy…) i w niej zawarł logikę, która mu była potrzebna. A jest to logika zaiste niezwykła, w każdym razie ten magic number, który jest przekazywany (u mnie wyżej 42, w oryginalnym kodzie mało charakterystyczny int), ma tylko takie znaczenie, że ma być dodatni/równy zero/ujemny, za to wszystko jedno jaki. - Althorion 2018-12-13 14:06
Brzmi jak pisane przez Hindusów. - somekind 2018-12-13 14:13

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Użytkownik: Kamil Żabiński