Programistyczne WTF jakie Was spotkały

0

odpowiedź jest prosta i niektórym znana - to tylko dostaniesz co napiszesz sam'a.

5

Serwer nieco przymula. top pokazuje, że mysqld jedzie >100% CPU, hmm..

mysql> show full processlist;

executing | select count(*) as xxx from yyy where zzz UNION SELECT BENCHMARK( 10000000000000000000000000, MD5(0))

W końcu mam namacalny dowód na istnienie liczby gazylion ;]

4

Ostatnio było o Getinie, to teraz dla odmiany o mBanku.
W polu wpisywania kwoty nie można używać strzałek ani delete. Zajebiście ułatwia to edycję kwoty, dzisiaj prawie zapłaciłem 157 tys czynszu za mieszkanie. ;)

2
...
catch(...) {
    error = true;
} finally {
    if(error) {
        sysout(...);
    }
}

Autentyczny kod spotkany na projekcie :D Chyba VW ;p Hindusi sa the best :)

3

Moim zdaniem taka obsługa wyjątków jest ciekawsza:

public Exception LoadData(...)
{
    SqlException exception;
    try 
    {
        // cośtam z bazą i innymi pierdołami
    }
    catch (SqlException ex)
    {
        exception = ex;
    }
    return exception;
}

I nie, nie Hindusi, 100% Anglicy.

0

@Marooned
Ciekawe czy to był tylko DoS czy ktoś chciał po czasie wykonania wnioskować co się dzieje i jakieś blindSQLInjection.
Tak czy owak nice.

0

Potrzebuję wyciągnąć pewne dane z Bardzo Ważnej Rządowej Strony czy tam jakiejś agencji - nieważne, ważne, że w grę wchodzą publiczne pieniądze, więc portal kosztował zapewne chociaż te kilkaset tysięcy pln,a funkcjonalność... no cóż.

Można wyciągać rekordy pojedyńczo (zabezpieczone captcha), ale mi jest potrzebne kilka tysięcy, na szczęście jako że taki jest cel istnienia tej strony jest tam również opcja masowego eksportu (co ciekawe, tu captchy już nie ma), która jednak... nie działa. Napisałem maila w tej sprawie tydzień temu, do dzisiaj zero odzewu, jak nie działało, tak nie działa, a dane mi są potrzebne na ten tydzień.

Jako że szkoda mi trochę czasu na siedzenie i klikanie kilka godzin formularzy, postanowiłem sobie całość zautomatyzować, piszę właśnie scraper i doszedłem do tej ich captchy:

<td style="padding:0;">
			<input type="text" size="10" name="token">
			<input value="90246" type="hidden" name="rand">
		</td>

Jak to zobaczyłem to przestało mnie dziwić, że coś tak skomplikowanego jak eksport do xls nie działa.

4

Visual 2010, otwieranie Bardzo Dużej Solucji.

VS2010.png

0

Jakiś średni projekt klienta SIPowego, repo git-a 2 miesiące temu zajmowało 700MB.
Parę dni temu robię fetch (przez VPN-a) i czekam... czekam... i nic.
Po zakończeniu fetch-a repozytorium ma 5.76 GB :| (ściągo się przez noc).

4

Ciąg dalszy mojego posta w tym temacie z przed paru miechów. Kilka nowych wtf z roboty.

 
Foo* foo = new Foo;
if (foo == NULL) {
  // ...
}
while (m_isSthDone) {
  // ...
  if (!WriteReply(foo)) {
    break;
  }
  break;
}
 doSth();
 usleep(1000); // wait for a while
 usleep(500); //  to be sure wait just a little bit more

Sporo programistów jest zdania, że tak zaimplementowany singleton jest thread safe:

static T* Instance() 
{
  if (!m_pInstance) 
  {
    m_pInstance = new T;
  }   
  return m_pInstance;
}
void Foo::bar(A* ptr)
{
  if (m_isB)
  {
     ((B*)ptr)->sth();
     if (((B*)ptr)->sth2()) 
     {
        ((B*)ptr)->sth3();
     }
  }
}
bool Foo::bar()
{
  if (!m_sth->init())
  {
     goto error;
  }
  // ...
error:
  return false;
  return true;
}
for (std::vector<T>::iterator it = sth.begin(); it != sth.end(); it++)
{
   sth.erase(it);
}
bool Foo::bar()
{
#if 0
  // ...
#endif
  return true;
}
// ...
while (it != sth.end())
{
   if (it->bar())
   {
     // ...
   }
   it++;
}
1

Nie pytajcie gdzie to było.

void get_tomorrow_date( struct timeval *date )
{
sleep( 86400 ); // 60 * 60 * 24
gettimeofday( date, 0 );
}

8

(uwaga, dość długie wtf fabularne)

No więc grepuje sobie spokojnie access log na 4p (bo okazało się że link wyświetlany każdemu anonimowemu prowadzi do 404, zapewne od co najmniej kilku miesięcy...).
Niby wszystko fajnie, tylko kodowanie trochę dziwne, i nie mogę za bardzo jakiegoś znanego mi kodowania dopasować:

$ xxd -g 1 < fragment.txt
0000000: 2f 43 5f 69 5f 43 2b 2b 2f 31 36 35 34 39 34 2d  /C_i_C++/165494-
0000010: 57 65 6b 74 6f 72 5f 6f 62 69 65 6b 74 c3 83 c6  Wektor_obiekt...
0000020: 92 c3 82 c2 b3 77 5f 69 5f 73 70 72 79 74 6e 65  .....w_i_sprytne
0000030: 5f 77 73 6b 61 c3 83 e2 80 a6 c3 82 c2 ba 6e 69  _wska.........ni
0000040: 6b 69 20 22 2d 22 0a 20 20 20 31 20 2f 43 5f 69  ki "-".   1 /C_i
0000050: 5f 43 2b 2b 2f 31 36 35 34 39 34 2d 57 65 6b 74  _C++/165494-Wekt
0000060: 6f 72 5f 6f 62 69 65 6b 74 c3 83 c6 92 c3 86 e2  or_obiekt.......
0000070: 80 99 c3 83 e2 80 9a c3 82 c2 b3 77 5f 69 5f 73  ...........w_i_s
0000080: 70 72 79 74 6e 65 5f 77 73 6b 61 c3 83 c6 92 c3  prytne_wska.....
0000090: a2 e2 82 ac c2 a6 c3 83 e2 80 9a c3 82 c2 ba 6e  ...............n
00000a0: 69 6b 69 20 22 2d 22 0a 20 20 20 31 20 2f 43 5f  iki "-".   1 /C_
00000b0: 69 5f 43 2b 2b 2f 31 36 35 34 39 34 2d 57 65 6b  i_C++/165494-Wek
00000c0: 74 6f 72 5f 6f 62 69 65 6b 74 c3 83 c6 92 c3 86  tor_obiekt......
00000d0: e2 80 99 c3 83 e2 80 a0 c3 a2 e2 82 ac e2 84 a2  ................
00000e0: c3 83 c6 92 c3 a2 e2 82 ac c5 a1 c3 83 e2 80 9a  ................
00000f0: c3 82 c2 b3 77 5f 69 5f 73 70 72 79 74 6e 65 5f  ....w_i_sprytne_
0000100: 77 73 6b 61 c3 83 c6 92 c3 86 e2 80 99 c3 83 c2  wska............
0000110: a2 c3 a2 e2 80 9a c2 ac c3 82 c2 a6 c3 83 c6 92  ................
0000120: c3 a2 e2 82 ac c5 a1 c3 83 e2 80 9a c3 82 c2 ba  ................
0000130: 6e 69 6b 69 20 22 2d 22                          niki "-""

Co to za kodowanie w którym ó jest enkodowane jako C383C692C382C2B3 (pokazywane jako ó)?

Na pewno wygląda to na utf-8 i jest poprawną sekwencją utf8, więc logiczne byłoby dekodować jako utf-8, ale co dalej? Przeprowadziłem test:

>>> for codec in codecs:
...     try:
...         result = "C383C692C382C2B3".decode("hex").decode("utf-8").encode(codec)
...         print codec, result
...     except:
...         pass
...
cp850  ǟ▒▒
cp858  ǟ▒▒
cp1252  ó
cp1254  ó
gb18030  ▒0▒1▒0▒6▒0▒0▒0▒6
utf_32  ▒▒  ▒   ▒  ▒   ▒
utf_32_be     ▒  ▒   ▒   ▒
utf_32_le  ▒   ▒  ▒   ▒
utf_16  ▒▒▒ ▒▒ ▒
utf_16_be   ▒▒ ▒ ▒
utf_16_le  ▒ ▒▒ ▒
utf_7  +AMMBkgDCALM-
utf_8  ó
utf_8_sig  ó

Wszystko unicodowe można od razu odrzucić (skoro dekodujemy z unicode to po co do niego wracać), zostajemy z kilkoma opcjami z których prawidłowa okazuje się: cp1252 (o tym zaraz):

>>> print ("C383C692C382C2B3"
...         .decode('hex')
...         .decode('utf8')
...         .encode('cp1252')
...         .encode('hex'))
c383c2b3

To co otrzymamy w ten sposób okazuje się... Znowu poprawnym utf-8. Więc dlaczego by nie powtórzyć cyklu?:

>>> print ("C383C692C382C2B3"
...         .decode('hex')
...         .decode('utf8')
...         .encode('cp1252')
...         .decode('utf8')
...         .encode('cp1252'))
ó

Ok, czyli mamy nasze ó - zostało zapisane w utf-8, odczytane w cp1252 i znowu zapisane w utf-8...

Ale to jeszcze nic, bo kiedy spojrzeć dalej do pliku to drugie 'ó' zostało zakodowane jako C383C692C386E28099C383E2809AC382C2B3.
Jak mozna by się spodziewać, analogicznie do poprzedniego uzyskujemy

>>> print ("C383C692C386E28099C383E2809AC382C2B3"
...         .decode('hex')
...         .decode('utf8')
...         .encode('cp1252')
...         .decode('utf8')
...         .encode('cp1252')
...         .decode('utf8')
...         .encode('cp1252'))
ó

Niestety, to nie koniec. W pliku jest jeszcze trzecie 'ó', kodowane jako C383C692C386E28099C383E280A0C3A2E282ACE284A2C383C692C3A2E282ACC5A1C383E2809AC382C2B3:

>>> print ("C383C692C386E28099C383E280A0C3A2E282ACE284A2C383C692C3A2E282ACC5A1C383E2809AC382C2B3"
...         .decode('hex')
...         .decode('utf8')
...         .encode('cp1252')
...         .decode('utf8')
...         .encode('cp1252')
...         .decode('utf8')
...         .encode('cp1252')
...         .decode('utf8')
...         .encode('cp1252'))
ó

:|.

Obecny rekord wielkości (124 bajty) trzyma jedno z 'ę', kodowane 5 razy:

>>> print ("C383C692C386E28099C383E280A0C3A2E282ACE284A2C383C692C382C2A2C383C2A2C3A2E282ACC5A1C382C2ACC383E280A6C382C2BEC383C692C386E28099C383E2809 AC382C2A2C383C692C382C2A2C383C2A2C3A2E282ACC5A1C382C2ACC383E280A6C382C2BEC383C692C3A2E282ACC5A1C383E2809AC382C2A2"
...         .decode('hex')
...         .decode('utf8')
...         .encode('cp1252')
...         .decode('utf8')
...         .encode('cp1252')
...         .decode('utf8')
...         .encode('cp1252')
...         .decode('utf-8')
...         .encode('cp1252')
...         .decode('utf-8')
...         .encode('cp1252'))
ę

Ale jako że zobaczyłem jakieś 0.0001 logów to nie dam głowy że gdzieś w nie czai się kilobajtowe 'ń' czy coś podobnego.

Przeraża mnie trochę ten plik :(

PS. wpisy nie podane chronologicznie tylko po posortowaniu, pewnie pochodzą z bardzo różnych okresów w historii 4p ;)

0

Niby nic wielkiego, ale dziwnie to wygląda.

if (a == 0) {
 //kod
}
else {
 if (a == 1) {
  //kod
 }
 else {
  if (a == 2) {
   //kod
  }
  else {
   //itd.
  }
 }
}
2

Mozilla.....
właśnie dostałem maila

Marooned,
please post your results
thanks

to komentarz do buga https://bugzilla.mozilla.org/show_bug.cgi?id=491283
a bug w Firefox 11 z 2012

4

Myslalem, ze nigdy nie przyjdzie mi tu opublikowac postu, ale na nieszczescie sie mylilem:

Kiedys modne bylo robienie obrazkow w ASCII, to jest stopien wyzej, bo robi sie obrazki z wartosci w bazie danych :):)

906c1bf7f0.png

Wiecej nie zmiescilo sie na ekranie, z lewej idzie do jeden plus dane kazdego produktu.

Dzis zaczalem migarcje tego czegos z classic asp do c# .net i nawet jakos uzywanie emotek ( :) i :D ) w tym poscie mnie zlosci :(

DODANO NIEDLUGO POZNIEJ D:D

Ten sam projekt, ale inna tabela ;(

392381f506.png

0

porównania w stylu

String.Compare(x, y) == 0

zamiast zwykłego

x == y

w setkach miejsc w całej aplikacji :O

aha, aplikacja jednojęzyczna, a porównywane w ten sposób stringi to na przykład nazwy atrybutów w xmlu
ktoś był nadgorliwy?

7

Wiele lat temu zetknąłem się z programem magazynowym (Clipper, baza DBF), w którym nie było usuwania (anulowania) dokumentów, a dodatkowo był wymóg by data kolejnego wprowadzanego dokumentu była większa lub równa niż data poprzedniego dokumentu. Mój kontakt polegał na babraniu się w bebachach programu po tym jak magazynier (sprzedawca) podając datę dokumentu pomylił 3 lutego z 2 marca i zablokował możliwość wprowadzania dokumentów lutowych.

0

WTF z cyklu forumowego

W index.php pewnego darmowego skryptu for jest fragment:

 Dir.select<new.Selector>
// Tu 10cio linijkowy komentarz

class P();cfuck
{
..
}
1

Tym razem zasłyszane "mądrości" od programistów C++:
Mądrość I - Każdy obiekt unii trzymany jest w L1.
Mądrość II - Po co używać std::set, jeśli istnieje coś takiego jak std::vector.
Mądrość III - Pomiędzy semaforem, a mutexem nie ma żadnej różnicy.
Mądrość IV - Pisanie funkcji w taki sposób

template <typename T> 
bool foo(std::shared_ptr<T> ptr)
{
   if (!ptr)
     return false;
   
   //...
   return true;
}

zamiast w ten sposób

template <typename T> 
bool foo(std::shared_ptr<T> ptr)
{
   if (ptr)
   {
      //...
      return true;
   }
   return false;
}

powoduje dodanie kilku instrukcji procesora więcej, ergo binarka nam puchnie.
Mądrość V - Najlepszym sposobem na race condition jest sleep z parametrem sprawdzonym empirycznie.
Mądrość VI - Można (a czasami nawet trzeba) rzucać wyjątki z destruktora.

1

W ramach szukania klasycznego artykułu o programowaniu "How to shoot yourself in the foot" znalazłem dość ciekawą stronę podsumowującą cytat z Lema

Nie wiedziałem, że na świecie jest tylu idiotów, dopóki nie poznałem internetu.
-- Stanisław Lem

http://tinyurl.com/5838n3

0

Tak to jest, gdy się nie zna IDE... lub gdy autorzy IDE zamykają funkcje programu w "innych" nazwach.

Z wyjątkiem małych przerw w Eclipsie, większość kodu piszę w NetBeans. I do każdej zmiennej piszę settery/gettery. Ręcznie - bo przejrzałem pobieżnie menu refaktoryzacji i nie znalazłem niczego z "get" bądź "set" w nazwie. Przed chwilą odkryłem "Encapsulate Fields".

0

Tknęło mnie przerażenie.

Wystarczyło zastosować skrót myślowy - napisałem "do każdej zmiennej", bo było szybciej, ale mija się to z prawdą, chodziło bardziej o "do każdej zmiennej, jeśli jest to konieczne" - i już burza o tym, czy settery/gettery powinny być stosowane, czy nie. I był już taki temat, nie powtarzajcie się :)

2

Pewien płatny polski serwis nadaje hasła typu 123456 (ciekawe czy u wszystkich takie samo?) i nie widzę nigdzie opcji do zmiany.
Nazwy nie podam, bo jeszcze mi się ktoś włamie :D

1

Z cyklu najbardziej gówniany system kontroli wersji w akcji:
QPDyv7N.png

0

Pewien projekt OS, którego kod przyszło mi dzisiaj przeglądać... bo test się zepsuł i trzeba spradzićz czy to nie nich

try {
			Class<?> c = Class.forName("org.ujmp.core.io.ImportMatrix" + format.name());
			Method m = c.getMethod("fromFile", new Class<?>[] { File.class, Object[].class });
			Matrix matrix = (Matrix) m.invoke(null, file, parameters);
			return matrix;
		} catch (ClassNotFoundException e) {
			throw new MatrixException("format not supported: " + format, e);
		} catch (NoSuchMethodException e) {
			throw new MatrixException("format not supported: " + format, e);
		} catch (IllegalAccessException e) {
			throw new MatrixException("format not supported: " + format, e);
		} catch (InvocationTargetException e) {
			throw new MatrixException("could not import", e);
		}

a by nie było zmienna format to zwykły enum

1

http://pastebin.com/ZgR1JXCg

podobno kod gry terraria (czyli dość popularnej)

1
asdfvcxz napisał(a):

http://pastebin.com/ZgR1JXCg

podobno kod gry terraria (czyli dość popularnej)

kod pochodzi z dekompilatora - w rzeczywistości oczywiście nie ma tylu wcięć i kod jest pewnie trochę ładniejszy; pewnie coś w stylu:

if (this.buffType[k] == BUFF_LAVA_IMMUNITY)
{
        this.lavaImmune = true;
        this.fireWalk = true;
}
else if (this.buffType[k] == BUFF_LIFE_REGEN)
        this.lifeRegen += 2;
else if (this.buffType[k] == BUFF_SPEED)
        this.moveSpeed += 0.25f;
else if (this.buffType[k] == BUFF_GILLS)
        this.gills = true;
else if (this.buffType[k] == BUFF_DEFENSE)
        this.statDefense += 8;
...

autor sam przyznaje że nie umiał zbytnio programować gdy się za nią zabierał a gra powstała z pasji

2

Podczas próby kupienia biletu na pociąg pojawia się error: error.BNDS.D-BOOKING.TODO_ERROR

Nie to nie jest strona polskiego PKP.

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