Programistyczne WTF jakie Was spotkały

Programistyczne WTF jakie Was spotkały
KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2964
10

MongoDB jednak mnie zadziwia.
Za dużo błędów w logach leci? To odfiltrujmy je losowo:

https://github.com/mongodb/mongo-java-driver/blob/1d2e6faa80aeb5287a26d0348f18f4b51d566759/src/main/com/mongodb/ConnectionStatus.java#L213

Muszę to dopisać do mojej listy innowacyjnego użycia random().
Na liście mam już Thread.sleep(random) do leczenia problemów z wielowątkowością.

MO
  • Rejestracja: dni
  • Ostatnio: dni
2

ej Eclipse a mój KOD to gdzie, PIS pogonił?

d625278ce6.png

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
20
Kopiuj
moment("1.1.2001", "YYYY-MM-DD").isValid()
true
moment("1.13.2001", "YYYY-MM-DD").isValid()
false
moment("13.1.2001", "YYYY-MM-DD").isValid()
true
moment("1.13.2001", "YYYY-MM-DD").isValid()
false
moment("1.13.2001", "YYYY-DD-DD").isValid()
true
moment("1.13.2001", "YYYY-DD-MM").isValid()
false

I to jest niby najlepsza biblioteka do obsługi dat w JanuszSkrypcie.

DE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1788
7
Kopiuj
// Jeżeli pole lastname jest puste wróć ze statusem -10
		if (!trim($inp['lastname'])) return -10;
//		if (empty($inp['tel'][0])) return -7;
		// if (!empty($inp['nip']) && !eregi("^[0-9]{10}$", $inp['nip'])) return -11;
        if (!empty($inp['pesel']) && !eregi("^[0-9]{11}$", $inp['pesel'])) return -12;

// (...)
if (empty($crm_user_id)) {
				return -666;
			}
if($stmt->execute()) {
				$customerId = $this->system->pdo->lastInsertID('customers_id_seq');
			} else {
				return -665;
			}

Dobry patent :D metoda zwraca - 11 i od razu wiem, że brakuje nipu, a jak brakuje user'a to zwraca samego szatana.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

Dlaczego position: fixed to zuo i nie zmienię zdania?

wtf.png

DE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1788
6

Tak wielkiego kloca to jeszcze w swojej rocznej karierze nie widziałem.

#clean_code

clean_code.jpg

dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
0

617ba64c70.png
b55264636b.png
Na wyszukiwarce cena 5000zł, wchodzę na ofertę a tam cena już 10000zł
W pierwszej chwili wtf, co się dzieje? Po zastanowieniu zrozumiałem że prawdopodobnie cena w otomoto się zmieniła a do allegro nie poszedł jeszcze update, nic szczególnego. Z tym że to było tydzień temu, dziś natknąłem się jeszcze raz na tą samą ofertę, tym razem postanowiłem to uwiecznić :D
http://allegro.pl/passat-b5-1996-2000-12763?order=p&a_enum%5B16%5D%5B4%5D=4&price_to=5500&price_from=4000&state=7

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0
Kopiuj
var polishCultureExpression = Expression.Constant(new CultureInfo("en-US"));

Moje własne. :)

Dorabianie globalizacji do istniejącej aplikacji boli.

DE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1788
6

Wklejałem już kilka postów z obecnego systemu z którym mam wątpliwą przyjemność pracować, ale teraz już przeszli samych siebie.

Mam za zadanie zrobić import inwestycji. Ogólnie cały proces składa się z 8 kroków. Wszystko już jest zakodowane wystarczy do odpowiednich metod przekazać odpowiednią częśc json'a którego będę dostawał z zewnątrz. Myślę sobie nic trudnego. Gów.. prawda.

Całość owinąłem transakcją z wiadomych przyczyn, Jaja się zaczęły, gdy w pewnym momencie każde zapytanie do samego końca zwracało mi false. WTF myślę sobie, przecież jest try catch, nie wali exception... Co się dzieje? Okazało się, że ktoś sobie ustawił w PDO, że w momencie, w którym będzie "syntax error", czyli jakiś dziwny update na kolumnie która nie istnieje, to po prostu zostanie zwrócony false, transakcja rollbackowana, a do konca każde zapytanie zwraca false. Tyle, że nie rzuca exception i udajemy, że nic się nie stało.

Kolejny WTF nastąpił w momencie, w którym w pewnym momencie po prostu zawieszał mi się skrypt. Po przeczytaniu logów okazało się, że inne połączenie z bazą próbuje wykonać update na tej samej tabeli. Ponieważ jak już mówiłem owinięte to było transakcją i tabela była lockowana, to zapytanie się nie mogło wykonać i wszystko się wieszało. Pozmieniałem część zapytan, tak żęby używały jednego połączenia i myślę sobie, że już działa.

Jednak to nie koniec. Okazało się, że jak zrobie transaction rollback to część zapisanych informacji pozostaje. WTF. W tym momencie zdałem sobie sprawę, że po całym systemie rozsiane jest kolejne połączenie z baza danych tzw. $this->pdo2 (pierwsze połączenie $this->pdo, stąd ta 2 :D), które niezależnie od transakcji dodanie sobie dane do innych tabelek (których dziwnym zbiegiem okoliczności nie rusza połączenie z transakcja, więc jest ok). Oczywiście metody wyglądają jak te kilka postów wyżej i mają setki linii. W każdej metodzie czasami używanę są 3 połączenia do bazy równolegle. Dodatkowo używane są globale $_SESSION, $_REQUEST itd, więc to kolejna mina gdy chcę to wykonać za pomocą crona.

user image

Zellus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 474
1

Wyobraźmy sobie że mamy wielokrotnie zagnieżdzonego jsona. Teraz chcemy się dostać w JavaScript do jakiegoś szczegółowego parametru np.

Kopiuj
obj.sth.sub[1].sthElse.anything[1].property.value

Ponieważ występuje ryzyko rzucenia wyjątkiem("Cannot read property X of undefined") właśnie widzę kod:

Kopiuj
return obj
&& obj.sth
&& obj.sth[1]
&& obj.sth[1].sthElse
&& obj.sth[1].sthElse.anything
&& obj.sth[1].sthElse.anything[1]
&& obj.sth[1].sthElse.anything[1].property
&& obj.sth[1].sthElse.anything[1].property.value === valueToCompare;

Przynajmniej wyjątkiem nie rzuci...
Btw. I niech mi ktoś wytłumaczy, jak osoba która od blisko roku pracuje w projekcie, gdzie takie struktury wykorzystywane są na każdym kroku, nie wie, że mamy do obsługi takich przypadków wydzieloną bibliotekę...

DE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1788
4

Rozwiązuje sobie zadanka na uczelnie, aż tu nagle taki babol. Seriously PJWSTK?

Implementacja klasy Hailstone

może zawierać statyczną klasę wewnętrzną, jeśli będzie potrzebna;
nie może tworzyć żadnych tablic, ani używać żadnych kolekcji z bibliotek Jawy.

user image

Dawid90dd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 196
0
Kopiuj
    //<editor-fold defaultstate="collapsed" desc="TESTS">
    BOOST_AUTO_TEST_SUITE(XormagState)
         BOOST_AUTO_TEST_CASE(fn_test_a_function) {
            //Here you go now you can test!
        } 
    BOOST_AUTO_TEST_SUITE_END()
    //</editor-fold> 

Aż zrobiłem sobie makra w netbeansie, dodające odpowiednie zdania

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
5

Ostatnio mnie taka kapcza przywitała i powiem szczerze, że nie wiedziałem co wpisać...

Captcha WTF.png

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
8

Parę dni temu wyszło GCC 6.1.0 pod DOS-a.
Jednym z nowych ficzerów są ostrzeżenia o niewłaściwym formatowaniu kodu.

Skompilowałem grę Quake (oryginalna gra była wydana w 1996 pod DOS-a)

Kopiuj
snd_gus.c: In function 'ClearGf1Ints':
snd_gus.c:652:4: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
    for (i=0;i<32;i++);
    ^~~
snd_gus.c:653:7: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'for'
       GetGf18(GET_IRQV);
       ^~~~~~~

Inkryminowany kod wygląda tak:

Kopiuj
   for (i=0;i<32;i++);
      GetGf18(GET_IRQV);
no_solution_found
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie wiem czy to wina JS, embera czy mojej niewiedzy, ale we własnym RESTSerializer nadpisuję metodę serializeIntoHash, gdyż do zapytań RESTowych jest dodawana przestrzeń, a jej nie chcę czyli zamiast

Kopiuj
 
{
  attr: "value",
  attr2: "value"
}

jest robione:

Kopiuj
{
  nazwaModelu: {
    attr: "value",
    attr2: "value"
  }
}

Metoda oryginalnie wygląda tak:

Kopiuj
serializeIntoHash(hash, typeClass, snapshot, options) {
    var normalizedRootKey = this.payloadKeyFromModelName(typeClass.modelName);
    hash[normalizedRootKey] = this.serialize(snapshot, options);
  },

gdzie w normalizedRootKey znajduje się ta nazwaModelu. No to zmodyfikowałem funkcję tak

Kopiuj
  serializeIntoHash(hash, typeClass, snapshot, options) {
    var normalizedRootKey = this.payloadKeyFromModelName(typeClass.modelName);
    hash = this.serialize(snapshot, options);
  },

I teraz do zapytania leci samo {}

  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
<?php
 
$count = '9C6';
for ($i = 0; $i < 20; $i++) {
    echo $count++ . "\n";
} 
?>
DE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1788
3

Tak dla pewności :D

Kopiuj
  echo json_encode($ret);
  die;
  exit();
  break;
default:
  break;
  • Rejestracja: dni
  • Ostatnio: dni
DE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1788
3

Co... Jak... Dlaczego?

Selection_001.png

Kopiuj
<td width="70%">
   <input id="tel" onkeyup="return autoTab(this, 2, event);" onblur="phoneValidation('phone', this.value, tel1.value, tel2.value, tel3.value);" size="2" maxlength="2" name="tel[0]" value="" style="width:20px; float:left;" type="text" disabled="disabled">
   <input id="tel1" onkeyup="return autoTab(this, 3, event);" onblur="phoneValidation('phone', tel.value, this.value, tel2.value, tel3.value);" size="3" maxlength="3" name="tel[1]" value="" style="width:30px; float:left; margin-left:3px" type="text" disabled="disabled">
   <input id="tel2" onkeyup="return autoTab(this, 2, event);" onblur="phoneValidation('phone', tel.value, tel1.value, this.value, tel3.value);" size="2" maxlength="2" name="tel[2]" value="" style="width:20px; float:left; margin-left:3px" type="text" disabled="disabled">
   <input id="tel3" onkeyup="return autoTab(this, 2, event);" onblur="phoneValidation('phone', tel.value, tel1.value, tel2.value, this.value);" size="2" maxlength="2" name="tel[3]" value="" style="width:20px; float:left; margin-left:3px" type="text" disabled="disabled">
   <span style="margin-left: 10px;">hhhhhhhhh</span>
</td>
Kopiuj
onblur="phoneValidation('phone', this.value, tel1.value, tel2.value, tel3.value);"
Kopiuj
function phoneValidation(kind, part1, part2, part3, part4) {
    {/literal}
    {if !$phoneValid} 
        {* nie sprawdzamy nr telefonu dla tego użytkownika *}
        return true; 
    {/if}
    {literal}
    var number = null;
    if (kind == 'phone' && part1.length == 2 && part2.length == 3 && part3.length == 2 && part4.length == 2) {
        number = new Array(part1 , part2, part3, part4);
    }
    else if (kind == 'cellphone' && part1.length == 3 && part2.length == 3 && part3.length == 3) {
        number = new Array(part1 , part2, part3);
    }
    // .....
}
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
      
      Loader loader1 = new Loader();
      int num1 = 1;
      loader1.WithExtra = num1 != 0;
      int num2 = 1;
      loader1.WithUI = num2 != 0;
      Loader loader2 = loader1;
Olamagato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polska, Warszawa
  • Postów: 1066
0

Samsung S4 Mini. 7 godzin drobiazgowej migracji ze starego telefonu pod androidem przez wifi, wyłączanie śmieci samsunga i google, kopiowanie danych...
Wszystko po to, żeby po włożeniu właściwej karty sim oraz sd z poprzedniego ekrany zostały zresetowane i pokazały się jakieś trzyekranowe ustawienia dla debili, a cały pusty syf nadgrał się na konto google... !@##$$%^

NE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 187
no_solution_found
  • Rejestracja: dni
  • Ostatnio: dni
1

Znalezione w źródłach Symfony

// HHVM does not trigger any warnings and let exceptions
// thrown from a JsonSerializable object pass through.
// If only PHP did the same...

dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
5

Prawdziwa perełka z PHP:

Kopiuj
$t1 = (float) ($aResult['total_odsetki'] + $aResult['total_kapital']);
$t2 = (float) $aResult['wartosc'];

// $t1 i $t2 zostały castowane na floaty

var_dump($t1); // float 320000
var_dump($t2); // float 320000

// UWAGA, to jest LUŹNE porównanie, poprzez `==`, a nie `===`
var_dump($t1==$t2); // boolean false [!]

/* -------------------------------- */

$t1 = (string) ($aResult['total_odsetki'] + $aResult['total_kapital']);
$t2 = (string) $aResult['wartosc'];

var_dump($t1); // string '320000' (length=6)
var_dump($t2); // string '320000.00' (length=9)

// LUŹNE porównanie
var_dump($t1==$t2); // boolean true [!]

WHAT
THE
ACTUAL
FUCK,
PHP?

Dodam, że nie posiadam już tego kodu, a nie pamiętam jakich typów były dane w $aResult, niemniej - jakieby one nie były, to jednak scastowanie zmiennych na float, które w var_dumpie wyrzuciły to samo powinno dać się porównać, PRZYNAJMNIEJ luźno, w dodatku cast na stringa, który spowodował dopisanie dwóch miejsc po przecinku też jest rozczulający. Zapewne jest to jakiś błąd zaokrągleń.

  • Rejestracja: dni
  • Ostatnio: dni
1

"dziwne, u mnie działa"
zresztą bez przykładowych danych wejściowych i jakiegoś zaokrąglenia na floatach to możemy tak sobie porównywać cokolwiek

Kopiuj
float(320000)
float(320000)
bool(true) // loose comparison
bool(true)  // strict comparison
string(6) "320000"
string(9) "320000.00"
bool(true) // loose comparison
bool(false) // strict comparison
dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
0

Jak ja sobie na sztywno wpisałem 320000 pod $t1 i $t2 to oczywiście działa(ło) :) Niestety nie miałem wtedy czasu na szczegółową analizę - w którym momencie się to rozpieprza, ale na pewno PHP w tych zmiennych trzymał sobie coś magicznego, wynik sumowania konkretnych danych, a nie "zwykłe" 320000, stąd też wynik, który nie ma sensu.

Zresztą nawet gdyby ten błąd był jawny, i 320000 nie byłoby równe 320000 ZAWSZE, nawet przy prostym przypisaniu - to przecież do dziś z pewnością byłoby to poprawione :) Ja wtedy na 5.2.X, albo 5.3.X siedziałem, tyle jestem pewien.

Wiem, że już nigdy tego nie powtórzę, nawet nie zamierzam próbować (kod niestety nie należy do mnie, więc go po prostu nie zdobędę), wkleiłem jako ciekawostkę. **Najważniejsze w tym poście nie jest to przy jakich danych to występuje, tylko, że to nigdy nie powinno mieć miejsca. Cast był, var_dump jasno pokazywał, co w zmiennych siedzi, a PHP pomimo swojego porównywania "z d**y" nie potrafił tego poprawnie porównać nawet luźno".

A gdybyś się zastanawiał skąd to nagle wziąłem - w notatkach miałem logi z kanału IRC na który lata temu wkleiłem ten przypadek.

DibbyDum
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polska, Kraków
3

o.O

Kopiuj
GC.GetTotalMemory(false);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.GetTotalMemory(true);
KillExcel();
no_solution_found
  • Rejestracja: dni
  • Ostatnio: dni
0

Kiedyś pracowałem przy projekcie CRM. Przejąłem go od innych programistów. Po pewnym czasie jedna z zakładek zaczęła przymulać. Zbadałem sprawę. Okazało się, że na tej podstronie, gdzie była tabelka były wyświetlane tylko 30 rekordów, ale pobierane były wszystkie 300 i dla każdego z tych rekordów było wykonywane dodatkowe 3-4 zapytania do bazy (z JOINami i GROUP BY) co łącznie dawało około 1 tyś zapytań na wyświetlenie! Jak rekordów było mało, to problemu jeszcze nie było, ale jak ich przybywało, to zaczynały się jazdy. Parę godzin pracy i doszedłem do kilkudziesięciu zapytań, co w porównaniu do całego systemu nie było wiele :)

Zellus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 474
5

https://support.microsoft.com/en-us/kb/3053711

In Windows 8.1, when the user account name contains the word "user", intermittently you will find the process taskhost.exe keeps consuming high CPU percentage.

Przydałaby się jeszcze informacja, czemu tak się dzieje :) chętnie bym poczytał

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.