Programistyczne WTF jakie Was spotkały

12

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?

3

Ciekawe definicje TRUE i FALSE dla C (szkoda że się sypią przez priorytet operatorów):

#define TRUE '/'/'/'
#define FALSE '-'-'-'

Kilka dni się zastanawiałem jak to działa.

0

ja tam <ort>zadko </ort>mam WTF bo jak siedze w robocie to ostatnia rzecza jaka mi sie wtedy chce jest patrzenie w kod :P

1

781 osobnych zapytan do bazy danych, by wyswietlic naglowek z informacjami klienta i 10 jego ostatnich zamowien... i sie zastanawiaja, czemu strona laduje sie pol minuty :|

Cos podobnego to pare milionow iteracji w petli w aplikacji na serwerze by przetworzyc dane z bazy danych (ktore wpierw pobierane byly prostym selectem) i wyswietlic... 10 wierszy (trwalo to do polgodziny). No ale coz zrobic, ze niektorzy tak programuja :|

2

Kod COBOL przeniesiony na Javę z zachowaniem sekcji, paragrafów i zdań. Oznaczało to m.n. operację otwórz-zapisz-zamknij na pliku dla każdego rekordu pobieranego z DB. Każdy rekord był pobierany w osobnym zapytaniu. Codziennie trzeba przetworzyć około 3 mln rekordów. W oryginalnym środowisku program działał około 20 minut. Po przeniesieniu na około stu krotnie mocniejszą maszynę program działał około 3 godzin.
Obecnie przepisuję go od nowa przy czym muszę zachować API. Zatem po przetworzeniu generuję grupy COBOLowo-LINCowe. hehehe

0

COBOL? Współczuję

0

manfredek:
ujmij to w nawiasy i bedzie dzialac.

0
donkey7 napisał(a)

manfredek:
ujmij to w nawiasy i bedzie dzialac.
Oj wiem, ale nie o to chodzi, tylko o to, że te definicje dziwnie wyglądają

0

Manfredek:
Tak z ciekawości, jak to działa, bo jakoś nie potrafię do tego dojść :O

0

Ciekawie wygladajacy define to np. taki ;)

#define class class __decl(dllexport)
0
sprzedamsanki napisał(a)

Manfredek:
Tak z ciekawości, jak to działa, bo jakoś nie potrafię do tego dojść :O
TRUE to dzielenie kodu ASCII / przez ten kod ASCII, FALSE to odejmowanie kodu ASCII znaku - od tego kodu. Czyli 1 i 0. Aha - pisz manfredek (lub, lepiej, manfred).

@up: Zdaje się że nie można zrobić makra o nazwie słowa kluczowego.

0

@up: mozna, mozna, choc moze nie wszystkie kompilatory puszczaja. Ale w visualu dziala.

0
manfredek napisał(a)

@up: Zdaje się że nie można zrobić makra o nazwie słowa kluczowego.

Ty chyba sobie jaja robisz - rozwijanie makr robi preprocesor, na tym etapie kompilacji słowa kluczowe języka nie istnieją.

0
manfredek napisał(a)

Ciekawe definicje TRUE i FALSE dla C (szkoda że się sypią przez priorytet operatorów):

#define TRUE '/'/'/'
#define FALSE '-'-'-'

Kilka dni się zastanawiałem jak to działa.

Ale Ty to niby w pracy widziałeś? :) To jest popularna sztuczka na zawodach typu 'napisz kod, który sprawi kompilatorowi (preprockowi i reszcie) najwięcej trudności' czytaj - parser będzie miał kłopoty z odszyfrowaniem intencji. Jeśli ktoś używa tego w kodzie produkcyjnym, to chyba musi znaleźć sobie inną formę pracy ;)

0
auto(ka)r napisał(a)

parser będzie miał kłopoty z odszyfrowaniem intencji.

a co w tym jest trudnego? zapis w kodach ascii:
#define TRUE 47 / 47
#define FALSE 45 - 45

1

Dzisiaj doznałem jeszcze większego WTF niż poprzednio. Kod który miał przetwarzać elementy z listy a następnie je usuwać:

int size = list.size();
for(int i = 0; i < size; i++) {
  Response r = null;
  try {
    r = list.get(i);
  } catch(OutOfBoundException e) {
     break;
  }
  doSth(r);
  list.remove(r);
}

Bug powodował losowe timeouty po stronie klienta. Ja w tym kodzie widze conajmnie 4 zjeby, może ktoś znajdzie więcej :D

0

@up: hehe niezłe. Najlepsza zjeba to dodanie "try..catch break" :D :D :D, przypomina wbijanie młotkiem przedmiotu do za małego pojemnika.
W ogóle genialne, mistrzostwo.

auto(ka)r napisał(a)

Ale Ty to niby w pracy widziałeś? :) To jest popularna sztuczka na zawodach typu 'napisz kod, który sprawi kompilatorowi (preprockowi i reszcie) najwięcej trudności' czytaj - parser będzie miał kłopoty z odszyfrowaniem intencji. Jeśli ktoś używa tego w kodzie produkcyjnym, to chyba musi znaleźć sobie inną formę pracy ;)
Nie. W tym konkursie chodzi o to aby człowiek miał trudności, a nie parser. Kod będzie poprawny składniowo - parser przeprasuje, nie będzie poprawny to nie przeprasuje. Parser nie bada intencji, czasy inteligentnych kompilatorów dopiero nadejdą.

1
public void dodajKlucze()
    {
        if (listaKluczy == null)
            listaKluczy = new Hashtable<String, String>();
        listaKluczy.put("main", "main");
        listaKluczy.put("integer", "integer");
        listaKluczy.put("float", "float");
        listaKluczy.put("boolean", "boolean");
        listaKluczy.put("string", "string");
        listaKluczy.put("if", "if");
        listaKluczy.put("do", "do");
        listaKluczy.put("block", "block");
        listaKluczy.put("print", "print");
        listaKluczy.put("read", "read");
        listaKluczy.put("var", "var");
        listaKluczy.put("true", "true");
        listaKluczy.put("false", "false");
    }
    public void dodajInneOp()
    {
        if (listaInneOp == null)
            listaInneOp = new Hashtable<String, String>();
        listaInneOp.put("(", "(");
        listaInneOp.put(")", ")");
        listaInneOp.put("{", "{");
        listaInneOp.put("}", "}");
        listaInneOp.put(";", ";");
        listaInneOp.put(":", ":");
        listaInneOp.put(",", ",");
        listaInneOp.put("=", "=");
    }
    public void dodajOperatory()
    {
        if (listaRELOP == null)
            listaRELOP = new Hashtable<String, String>();
        listaRELOP.put(">", ">");
        listaRELOP.put("<", "<");
        listaRELOP.put(">=", ">=");
        listaRELOP.put("<=", "<=");
        listaRELOP.put("==", "==");
        listaRELOP.put("!=", "!=");
        if (listaADDOP == null)
            listaADDOP = new Hashtable<String, String>();
        listaADDOP.put("+", "+");
        listaADDOP.put("-", "-");
        listaADDOP.put("or", "or");
        if (listaMULTOP == null)
            listaMULTOP = new Hashtable<String, String>();
        listaMULTOP.put("*", "*");
        listaMULTOP.put("/", "/");
        listaMULTOP.put("and", "and");
    }
0

Pewien nauczyciel programowania z "prof." przed nazwiskiem takie cuś w C naskrobał jako program wzorcowy do naśladowania.

char *dspIP( int ip1, int ip2, int ip3, int ip4 )  /* display IP addresss */
{
   static char i_IP[50];

	sprintf( i_IP, "%u.%u.%u.%u", 
		ip1 < 0 ? (unsigned) ip1 + 256 : ip1,
		ip2 < 0 ? (unsigned) ip2 + 256 : ip2,
		ip3 < 0 ? (unsigned) ip3 + 256 : ip3,
		ip4 < 0 ? (unsigned) ip4 + 256 : ip4 );

	return i_IP;
}

// jedyne użycie dspIP:

printf("[-] My host id: 0%X, as an IP address: %s\n", v_hid, 
       dspIP( v_ip1, v_ip2, v_ip3, v_ip4 ) );
//...
  printf("    - IP address:    %s\n", dspIP(sock->sa_data[2], sock->sa_data[3], 
                                            sock->sa_data[4], sock->sa_data[5] ) );

Ten fragment nie jest wielkim WTF, ale cały kod wyglądający w ten sposób już tak.
http://pastebin.4programmers.net/257 Gdzie jest main() ? :>

1

rozbił sobie na 3 linijki :P

main( argc,argv )
int argc;
char **argv;

:D

0

Ja osobiście doznałem szoku (szukałem wtedy tutoriala do directX - a) kiedy zobaczyłem spory kod (linijek nie podam bo...) napisany cały prawie że w JeDnEj LiniI 0.o. A właściwie to (kompilator przecież nie da rady ^^) z "enterami" wstawionymi w zupełnie losowych miejscach, bez żadnej konwencji, byle gdzie, no po prostu WTF. Uwierzcie, gdybyście mieli go poprawić, albo znaleźć brakujący nawias...

...Dlatego właśnie należy programy pisać czytelnie :)

1

@msm ale jaki w tym problem widzisz? Chocby Code::Blocks i magiczne "source code formatter" które przeformatuje ci cały kod tak jak ci się podoba + bracket matching i po problemie ;)

3
Shalom napisał(a)

rozbił sobie na 3 linijki :P

main( argc,argv )
int argc;
char **argv;

:D

Tu nie ma nic śmiesznego ani WTF. Normalny kod, prawidłowy zapis.
Ech, niektórzy młodzi programiści zapomnieli, że przed standaryzacją ANSI/ISO C miało inną składnię.
To jest po prostu bardzo stary kod i tyle.

0

gcc już tego nie przełknie :)

0

Jaki widzę problem? Mówiłem że szukałem tutoriala, a to coś było jako txt nas stronie internetowej. Ktoś kto to tam wrzucił powinien... <westchnięcie cierpiącego na brak weny autora> zresztą nieważne.
Edit: Po prostu zawsze miałem wrażenie że tutoriale powinny być czytelne :]
Edit 2: Tak w ogóle Shalom ciekawy obrazek, ciekawy jestem tylko czy wiesz skąd on pochodzi ^^

0

to jest Mangekyō Sharingan Kakashiego.

1

widze że więcej fanów Naruto! ;)

0

Dobra teraz dwa WTF z dzisiaj.

Słowo wstępu;
Generalnie to co pokażę to kod, który został przemigrowany automatycznie z COBOLa i LINCa na JEE. W tych językach taka konstrukcja ma sens, ale w Javie nie za koniecznie:

while (errcd.fetchFrom()) {
	if (true) {
		break;
	}
}
if (1 == 1) {
	return (0);
}
return 0;
0

Najpierw:

Map map = new HashMap();
// teraz inicjalizacja mapy, wywolania put(key, value), wlozone 10 elementow
// i na koniec kwiatek
map.put("size", new Integer(10));

I pozniej w jakiejs klasie utility:

public static int getSize(Map map) {
   return ((Integer) map.get("size")).intValue();
}

Kod pisany z pamieci, nie przeklejony, ale wygladalo to mniej wiecej wlasnie tak. :-O

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