Programistyczne WTF jakie Was spotkały

Odpowiedz Nowy wątek
2009-04-03 11:31
rnd
11

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, 2011-12-04 00:47

Pozostało 580 znaków

2016-06-17 00:31
3

Windows 10.
Proces RuntimeBroker.exe notorycznie zjadał 4 giga RAM, 30% CPU i 100% HDD.
W necie jest tyle rozwiązań co pytań, bo różnym różne rozwiązania działają.
Mnie pomogło... w aplikacji „Zdjęcia” (której nigdy nie używam) przestawienie Kafelek: Najnowsze zdjęcia na Kafelek: Pojedyncze zdjęcie.

Ach, no przecież, to takie oczywiste...
:-[

Pokaż pozostałe 2 komentarze
@Desu Windows 10? A wyłączyłeś “Tablet mode” w ustawieniach? Kliknij na centrum powiadomień koło zegarka i tam jest przycisk od tego. - Afish 2016-06-17 08:27
Moja znajoma miała podobny problem, jebłem formata i wgrałem 7 :D - hzmzp 2016-06-17 08:33
Tak, windows 10. Nie wiem, celowo nic nie włączałem. Dzięki sprawdzę. - Desu 2016-06-17 08:36
@Azarien Pytanie jak doszedłeś do tego? :D Czy w necie coś takiego było już u kogoś? - xeo545x39 2016-06-17 14:11
@xeo545x39: jedno z wielu znalezionych „rozwiązań” w necie. wygląda na to, że “runtime broker” ma wyciek który się objawia w różnych okolicznościach, stąd na jednym kompie pomaga wyłączenie aktualizacji javy, na drugim odpięcie dysków sieciowych, inni narzekają na apkę od pogody, a jeszcze na innych -jak u mnie - ta konkretna opcja w galerii zdjęć. - Azarien 2016-06-17 23:31

Pozostało 580 znaków

2016-06-21 10:38
0

Responsywne menu na stronie (funkcjonalność menu Bootstrapa)... wklejam całość, bo już sama ilość kodu jest powalająca :P

(function($) {

  $.fn.menumaker = function(options) {

      var cssmenu = $(this), settings = $.extend({
        title: "Menu",
        format: "dropdown",
        breakpoint: 737,
        sticky: false
      }, options);

      return this.each(function() {
        cssmenu.find('li ul').parent().addClass('has-sub');
        if (settings.format != 'select') {
          cssmenu.prepend('<div id="menu-button">' + settings.title + '</div>');
          $(this).find("#menu-button").on('click', function(){
            $(this).toggleClass('menu-opened');
            var mainmenu = $(this).next('ul');
            if (mainmenu.hasClass('open')) { 
              mainmenu.hide().removeClass('open');
            }
            else {
              mainmenu.show().addClass('open');
              if (settings.format === "dropdown") {
                mainmenu.find('ul').show();
              }
            }
          });

          multiTg = function() {
            cssmenu.find(".has-sub").prepend('<span class="submenu-button"></span>');
            cssmenu.find('.submenu-button').on('click', function() {
              $(this).toggleClass('submenu-opened');
              if ($(this).siblings('ul').hasClass('open')) {
                $(this).siblings('ul').removeClass('open').hide();
              }
              else {
                $(this).siblings('ul').addClass('open').show();
              }
            });
          };

          if (settings.format === 'multitoggle') multiTg();
          else cssmenu.addClass('dropdown');
        }

        else if (settings.format === 'select')
        {
          cssmenu.append('<select style="width: 100%"/>').addClass('select-list');
          var selectList = cssmenu.find('select');
          selectList.append('<option>' + settings.title + '</option>', {
                                                         "selected": "selected",
                                                         "value": ""});
          cssmenu.find('a').each(function() {
            var element = $(this), indentation = "";
            for (i = 1; i < element.parents('ul').length; i++)
            {
              indentation += '-';
            }
            selectList.append('<option value="' + $(this).attr('href') + '">' + indentation + element.text() + '</option');
          });
          selectList.on('change', function() {
            window.location = $(this).find("option:selected").val();
          });
        }

        if (settings.sticky === true) cssmenu.css('position', 'fixed');

        resizeFix = function() {
          if ($(window).width() > settings.breakpoint) {
            cssmenu.find('ul').show();
            cssmenu.removeClass('small-screen');
            if (settings.format === 'select') {
              cssmenu.find('select').hide();
            }
            else {
              cssmenu.find("#menu-button").removeClass("menu-opened");
            }
          }

          if ($(window).width() <= settings.breakpoint && !cssmenu.hasClass("small-screen")) {
            cssmenu.find('ul').hide().removeClass('open');
            cssmenu.addClass('small-screen');
            if (settings.format === 'select') {
              cssmenu.find('select').show();
            }
          }
        };
        resizeFix();
        return $(window).on('resize', resizeFix);

      });
  };
})(jQuery);

(function($){
$(document).ready(function(){

$(document).ready(function() {
  $("#cssmenu").menumaker({
    title: "Menu",
    format: "dropdown"
  });

  $("#cssmenu a").each(function() {
        var linkTitle = $(this).text();
        $(this).attr('data-title', linkTitle);
  });
});

});
})(jQuery); 
edytowany 1x, ostatnio: Pietruch, 2016-06-21 10:43
no i co? - hzmzp 2016-06-21 10:46
Ilość kodu potrzeba do otwierania i zamykania menu, oznaczania elementu jako aktywny, dodawanie elementów przy użyciu JS, responsywność obsługiwana przez JS. Większość tego można wygodniej zrobić w CSS. - Pietruch 2016-06-21 10:50
Yhy wiesz ja w ogóle unikam JS i tych popieprzonych skaczących mrygających cudów na www bo to mnie denerwuje :D - hzmzp 2016-06-21 11:05
Pomijając że lepiej byłoby to zrobić w jQuery.ui, to taki kod nie jest wcale rzadkością a nawet nie jest taki długi. Gdybym dostał taki do robienia to bym się cieszył. - TomRiddle 2016-06-21 14:39
Ja też. Ostatnio dostałem do poprawienia juz trzecie z rzędu zadanie po kimś. Rozwiązaniem okazało się ctrl + A + del. - Desu 2016-06-21 14:50
Jakbym dostał taki do robienia to bym się ucieszył. - TomRiddle 2016-07-18 15:01

Pozostało 580 znaków

2016-06-21 13:55
2

Tworzę sobie prostą metodkę operującą bezpośrednio na PDO. Metoda buduje zapytanie i przyjmuje jako argument tablicę parametrów where. Co może pójść nie tak?

Ku mojemu zaskoczeniu banalnie prosta metoda nie działa, a execute zwraca false. Myślę sobie WTF. Do metody przekazywałem parametry true/false. Debuguje.. debuguje.. Czytam logi postgresa, a tam na zmiane:

DETAIL:  parameters: $1 = 't'
ERROR:  invalid input syntax for type boolean: ""

Okazuje się, że php castuje według swojej własnej logiki. Przecież to oczywiste, że z jakiegoś powodu jedna wartość boolowska po scastowaniu na string daje liczbę, a druga pusty string.

php > (string) true;
"1"
php > (string) false;
""

WTF? Dodatkowo skoro z jakiegoś powodu pdo z "1" robi "t", to dlaczego z "" nie robi "f" ?

edytowany 4x, ostatnio: Desu, 2016-06-21 14:01
Próżno szukać logiki w php - Sarrus 2016-06-21 14:06
jak zrobisz z tego chara to z jakiejkolwiek wartości masz true bo > 0 jak nie masz nic to masz 0 = false :D - hzmzp 2016-06-21 14:55
Biorąc pod uwagę ilość syfu w PHP, to gdybym nie wiedział czym jest naprawdę, to pomyślałbym że to jakiś modny framework JS. - somekind 2016-06-22 02:25
https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/ - właśnie udało mi się znaleźć. Nic dodać, nic ująć.. - Desu 2016-07-19 13:03

Pozostało 580 znaków

2016-06-22 11:11
14

Jeśli kogoś szokowało, że typeof null === 'object' w JavaScript to tu macie większego WTFa.
Bug w Chromie, który powoduje, że jak się to uruchomi w pętli to od którejś iteracji typ wartości null przestaje być równe 'object' a zaczyna być równe 'undefined'
https://www.reddit.com/r/java[...]s_be_warned_about_this_crazy/
To się nazywa programowanie chaosu :)

Chociaż jakby nie patrzeć ten bug naprawia JavaScript (w końcu to bardziej logiczne, żeby typ nulla był 'undefined' XD). Szkoda tylko, że trzeba ileś iteracji w pętli wykonać, żeby się JavaScript zaczął sam naprawiać.


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
edytowany 3x, ostatnio: LukeJL, 2016-06-22 11:13
Pokaż pozostałe 4 komentarze
@hzmzp Oczywiście, że jest. Co do sprawdzania typów w js - niezawodny sposób: function getType(x) { return Object.prototype.toString.call(x).slice(8, -1); } - Maciej Cąderek 2016-06-22 20:16
@TomRiddle: Jakie to ma znaczenie dla tego przykładu ma fakt, że "pehap był do stron najpierw" (to nie są dwa osobne pytania tylko jedno łączone)? - dzek69 2016-06-22 21:31
O auto-castowaniu w PHP to szkoda gadać (patrz bug-ficzer z hashcodem MD5), ale to pierwsze nie może szokować, bo jest opisane w standardzie języka: http://www.ecma-international.org/ecma-262/5.1/#sec-11.4.3 a ta pętla to pewnie normalny bug w V8. - vpiotr 2016-06-22 21:52
@vpiotr jest opisane w standardzie, ale pierwotnie był to bug. Niestety - odrzucono opcję jego poprawienia, bo jakiś kod mógł polegać na tym błędzie :/ Mogli chociaż w strict mode wrzucić, no ale cóż. - dzek69 2016-06-22 22:12
kłamstwo powtarzane tysiąc razy staje się prawdą - no_solution_found 2016-06-23 13:43

Pozostało 580 znaków

2016-07-14 15:58
0

Dziwne komunikaty po kliknieciu w przycisk zapisz wydarzenie :D

user image

Pozostało 580 znaków

2016-07-18 09:42
14

Aby dodać więcej niż jeden adres email, rozdziel je znakiem średnika (';')
Wartości w bazie:
[email protected](';')[email protected]
user image

Kto to zrobił? :D - somekind 2016-07-18 13:52
Jakaś kobita w CRM klienta :P - Desu 2016-07-18 14:02
dobree... :D - Schakal 2016-07-21 13:05

Pozostało 580 znaków

2016-07-19 10:48
1

nie używaj mojej metody bo jak ją zmienię kiedyś to i Twoje się popsuje"

Nie wiem, czy się smiać, czy płakać.

Z tego założenia wychodzą twórcy Javy i nigdy niczego nie zmieniają. - somekind 2016-07-19 11:52
I co w tym złego? - tdudzik 2016-07-19 14:00
Mam rozumieć, że prawidłowe podejście, to każdy ma swoje kolcki i nie używamy nieswoich metod? - Desu 2016-07-19 14:06
Pytam co w tym złego, że Java nie zmienia metod które już istnieją. Dzięki temu kod po 10 latach nadal będzie (albo przynajmniej powinien) działać.. - tdudzik 2016-07-19 14:14
@somekind, czym innym jest zachowanie kompatybilności wstecznej (co robi java), a czym innym niechęć co zachowania kontraktu jak w przykładzie @Desu. - Koziołek 2016-07-19 14:35
@Desu: to taka barokowa forma "private"? - vpiotr 2016-08-22 17:24

Pozostało 580 znaków

2016-07-19 14:24
2

Jak wpiszecie w konsoli chrome'a:

Number.parseInt(1/3650000);

otrzymacie dość zaskakujący wynik: 2

edytowany 1x, ostatnio: Sarrus, 2016-07-19 14:26
Pokaż pozostałe 23 komentarze
to co ważne jednak, żeby pamiętać, że poszczególne sposoby nie działają tak samo (np. Math.floor zwraca zawsze mniejszą liczbę (czyli przy liczbach ujemnych dla -2.5 zwróci -3, a ~~ z kolei pozwala na odrzucenie liczby ułamkowej czyli zwróci -2 dla -2.5. Plus inne zachowanie przy liczbach, które liczbami nie są. Np. Math.floor czy parseInt zwrócą NaN jeśli nie będzie się dało przekonwertować stringa na liczbę (np. Math.floor('gówno') to NaN). ~~ z kolei zwróci zero (co może być pewną zaletą w pewnych przypadkach). - LukeJL 2016-07-22 01:51
Tak, to też przykład zaciemniania kodu, proteza, z tą różnicą, że się powszechnie przyjął, więc jest małe ryzyko, że komuś to utrudni czytanie kodu (operator trójargumentowy wymusza powtarzanie nazwy zmiennej, więc eliminuje jeden problem kosztem drugiego - DRY). Na szczęście w ES6 są już domyślne wartości argumentów. Raczej mnie nie przekonasz w tej kwestii. - Maciej Cąderek 2016-07-22 01:51
Akurat domyślne wartości argumentów nie eliminują wcale potrzeby przypisania do czego domyślnej wartości. - LukeJL 2016-07-22 02:02
Zresztą, żeby WTFom stało się za dość to zarówno a || 42 jak a? a : 42 czy if (!a) a = 42 generują tego samego dokładnie WTFa, tzn. a może być fałszywe także w przypadku, gdy jest równe zero, a nie tylko jeśli nie zostało ustawione, więc sprawdzanie falsy value często nie wystarczy. - LukeJL 2016-07-22 02:04
JavaScript od backendowców? Chyba tylko od tych od Node.js, ale oni są jak jednorożce. - somekind 2016-08-22 18:03

Pozostało 580 znaków

2016-08-03 15:19
13

http://thedailywtf.com/articles/the-inner-json-effect

Pokaż pozostałe 4 komentarze
Jakby się zastanowić, to najbardziej podejrzane są te zapytania w komentarzach. Nie widzę jakby te zapytania miały być interpretowane i przekazywane do SZBD tak przez przypadek. - Sarrus 2016-08-03 20:13
A ja jestem spokojnie w stanie uwierzyć w taki design. Bo mimo wszystko w tym szaleństwie jest jakaś metoda :P - Shalom 2016-08-03 21:12
Że niby komentarz typu "goły sql" mógłby być od tak po prostu zinterpretowany i wywołany, na kij wie gdzie jakiej bazie (chyba że też jakoś magicznie podpięta)? - TomRiddle 2016-08-04 10:12
Domyślam się ze on taki komentarz postawił sobie właśnie obok jakiegoś wywołania operacji na bazie danych żeby wiedzieć co się tam dzieje ;) Np. w kodzie było excecuteSQL(someString) a on sobie w komentarzu dał executeSQL(&quot;update... bla bla&quot;) - Shalom 2016-08-04 10:23
Faktem jest ze istnieja luki typu SQL Injection. Wiec jesli w systemach gdzie to nie bylo planowane da sie tak zrobic, to dlaczego mialoby sie nie dac w miejscu gdzie ktos wymyslil pokretna logike. - WhiteLightning 2016-08-04 10:38

Pozostało 580 znaków

2016-08-06 22:42
5
 // 
// Dear maintainer:
// 
// Once you are done trying to 'optimize' this routine, 
// and have realized what a terrible mistake that was,
// please increment the following counter as a warning 
// to the next guy: 
// 
// total_hours_wasted_here = 42 
//

/** * For the brave souls who get this far: You are the chosen ones, * the valiant knights of programming who toil away, without rest, * fixing our most awful code. To you, true saviors, kings of men, * I say this: never gonna give you up, never gonna let you down, * never gonna run around and desert you. Never gonna make you cry, * never gonna say goodbye. Never gonna tell a lie and hurt you. */
... xD

edytowany 1x, ostatnio: Fantazjatyk, 2016-08-06 22:49
was spotkały, a nie suchary... - Koziołek 2016-08-06 23:03
przyganiał kocioł garnkowi, a sam ciska na lewo i prawo sucharami. - Fantazjatyk 2016-08-06 23:29
Ale nie tutaj :) - Koziołek 2016-08-07 09:51

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Użytkownik: W2K