Programistyczne WTF jakie Was spotkały

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

2

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

d625278ce6.png

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

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

0

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

wtf.png

6

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

#clean_code

clean_code.jpg

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

0
var polishCultureExpression = Expression.Constant(new CultureInfo("en-US"));

Moje własne. :)

Dorabianie globalizacji do istniejącej aplikacji boli.

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

1

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

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:

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

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

0
    //<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

5

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

Captcha WTF.png

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)

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:

   for (i=0;i<32;i++);
      GetGf18(GET_IRQV);
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

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

jest robione:

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

Metoda oryginalnie wygląda tak:

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

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

I teraz do zapytania leci samo {}

1
<?php
 
$count = '9C6';
for ($i = 0; $i < 20; $i++) {
    echo $count++ . "\n";
} 
?>
3

Tak dla pewności :D

  echo json_encode($ret);
  die;
  exit();
  break;
default:
  break;
3

Co... Jak... Dlaczego?

Selection_001.png

<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>
onblur="phoneValidation('phone', this.value, tel1.value, tel2.value, tel3.value);"
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);
    }
    // .....
}
2
      
      Loader loader1 = new Loader();
      int num1 = 1;
      loader1.WithExtra = num1 != 0;
      int num2 = 1;
      loader1.WithUI = num2 != 0;
      Loader loader2 = loader1;
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... !@##$$%^

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

5

Prawdziwa perełka z PHP:

$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ń.

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

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

3

o.O

GC.GetTotalMemory(false);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.GetTotalMemory(true);
KillExcel();
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 :)

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ł

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