Programistyczne WTF jakie Was spotkały

Programistyczne WTF jakie Was spotkały
rnd
  • Rejestracja:prawie 17 lat
  • Ostatnio:ponad 13 lat
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?


#define TRUE FALSE
//Happy debugging suckers :D
edytowany 2x, ostatnio: Demonical Monk
MA
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 16 lat
  • Postów:501
3

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

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

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

vpiotr
Wytwór tzw. sprytnego programisty?
Azarien
wystarczy sobie dodać spacje wokół operatorów '/' / '/' '-' - '-' i działanie przestaje być tajemnicą.
cepa
  • Rejestracja:ponad 22 lata
  • Ostatnio:6 dni
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

wasiu
  • Rejestracja:prawie 21 lat
  • Ostatnio:7 miesięcy
  • Lokalizacja:Poznań
  • Postów:1552
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 :|


Full Stack Developer .NET & Angular, Blazor
KR
krystiano_ronaldo
ktoś nie umie w hajbernety czy inne oeremy, klasyk
KE
cały cel zajęć został tutaj niewłaściwie wykorzystany
Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:19 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
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


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
vpiotr
W COBOLu (iSeries) jest coś takiego jak "szybkie re-otwarcie" (nie pamiętam dokładnej nazwy). W COBOLu masz też np. bindowanie na twardo z SQL-em (np. z/OS). W Javie trzeba się trochę wysilić żeby nie mając tego móc równie szybko przetworzyć rekordy.
Koziołek
@vpiotr: OPEN "extended" chyba. Rzecz w tym, że JVM w swojej HotSpotowej implementacji nie używa bardziej zaawansowanych mechanizmów odczytu, by zachować kompatybilność zachowania pomiędzy różnymi systemami. Dlatego też trzeba się napocić, by otrzymać dobre wyniki. Po 8 latach od napisania tego postu już to wiem i bym pewno to jeszcze inaczej zaimplementował.
OT
  • Rejestracja:ponad 20 lat
  • Ostatnio:ponad 11 lat
0

COBOL? Współczuję

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 11 godzin
0

manfredek:
ujmij to w nawiasy i bedzie dzialac.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
KamilAdam
Groovy: ujmij to w wąsate nawiasy i będzie działać
MA
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 16 lat
  • Postów:501
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ą

sprzedamsanki
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 8 lat
  • Postów:278
0

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


The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' (I found it!) but 'That's funny'
johny_bravo
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 13 lat
0

Ciekawie wygladajacy define to np. taki ;)

Kopiuj
#define class class __decl(dllexport)

You need to learn how to walk
before you can run
KR
krystiano_ronaldo
klasa sama w sobie, co tu tumaczyć
MA
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 16 lat
  • Postów:501
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.

johny_bravo
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 13 lat
0

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


You need to learn how to walk
before you can run
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ą.

quetzalcoatl
  • Rejestracja:około 18 lat
  • Ostatnio:ponad 6 lat
0

no to pojechałem z nieobecnością.. chwila przerwy i prawie rok przeleciał
0
manfredek napisał(a)

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

Kopiuj
#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 ;)

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 11 godzin
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


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
rnd
  • Rejestracja:prawie 17 lat
  • Ostatnio:ponad 13 lat
1

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

Kopiuj
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


#define TRUE FALSE
//Happy debugging suckers :D
adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
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
Kopiuj
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");
    }
Manna5
Nazwy po polsku!?
adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0

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

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

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

rozbił sobie na 3 linijki :P

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

:D


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
msm
Administrator
  • Rejestracja:około 16 lat
  • Ostatnio:5 miesięcy
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 :)

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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 ;)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:2 dni
  • Postów:2964
3
Shalom napisał(a)

rozbił sobie na 3 linijki :P

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

hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:14 dni
0

gcc już tego nie przełknie :)


msm
Administrator
  • Rejestracja:około 16 lat
  • Ostatnio:5 miesięcy
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 ^^

hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:14 dni
0

to jest Mangekyō Sharingan Kakashiego.


Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:19 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
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:

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

Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
edytowany 1x, ostatnio: Koziołek
0

Najpierw:

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

Kopiuj
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.