Programistyczne WTF jakie Was spotkały

0

@Zellus
Ciekawe czy to ma związek z tym, że jak masz usera o nazwie user to część natywnych programów windowsa widząc ścieżkę coś\user traktuje część '\u' jako unicode i sobie z tym nie radzi.

0

zawiera user. Wiec moze byc costamusercostam i nadal tak samo bedzie

17

Klient twierdzi, że ma BSODa przez nasz produkt i wysyła crash dumpa. Po analizie crash dumpa okazuje się, że produkt nie jest nawet zainstalowany na tym komputerze :D

6

Embedded Software Developers

•Able to understand and enrich existing, poorly documented, code

Przynajmniej nie kłamią :D A może na rozmowe dają kod w brainfucku - jak rozumiesz to się nadajesz.

8
$webcare->access->checkUserRole('anioł') && ! $webcare->access->checkUserRole('dres')

dres, a powinno być DRS, to dyrektor regionalny sprzedaży, ale co tu robi anioł?

6

Sprawdzanie Captchy w pewnym serwisie. Biorą tylko pierwsze wystąpienie ciągu przez co można wpisać ciąg captchy + dalej już dowolność. Jak dla mnie WTF. Własna aplikacja testująca właśnie to API serwisu, która pokazuje "OK" gdy wpisze się dobrze lub "Źle" gdy źle. Input: "aaaaa [i tak dalej]" Efekt:
asdasd.png

EDIT:
Captcha dla chętnych na środowisku produkcyjnym :D Ponadto mechanizm opisany wyżej działa tak samo, można wpisać cokolwiek po captchy i przyjmie jako prawidłowy.
asdasd.jpg

1

Refaktoruje właśnie kod napiany przez kolegów z pracy i widzę w klasie:

@Service
public class ClaimService {

    private static final Logger log = LoggerFactory.getLogger(ClaimService.class);

    @Autowired
    private ClaimRepository claimRepository;

    @Autowired
    private AccountRepository accountRepository;

    @Autowired
    private CompanyRepository companyRepository;

    @Autowired
    private PartyRepository partyRepository;

    @Autowired
    private AddressRepository addressRepository;

    @Autowired
    private TemplateRepository templateRepository;

    @Autowired
    private ClaimPartyRepository claimPartyRepository;

    @Autowired
    private MessageRepository messageRepository;

    @Autowired
    private CompanyTaskRepository companyTaskRepository;

    @Autowired
    private ClaimTaskRepository claimTaskRepository;

    @Autowired
    private DocumentRepository documentRepository;

    @Autowired
    private MessagesService messagesService;

    @Autowired
    private ClaimTypeRepository claimTypeRepository;

    ...

}
6

kolega właśnie przesłał takie zdjęcie
user image

4

Tylko dwa przykłady z wielu:

 
try
{
      //Robi coś
}
catch (Exception ex)
{
      throw ex;
}

Oraz:

 
private DataTable _someTable 

private void SomeMethod()
{
      CreateTable(_table);
}

private DataTable CreateTable(DataTable table)
{
      //Tworzy DataTable
      return table;
}

A to wszystko programista z co najmniej 10 latami doświadczenia.

0

Chłopaki dają czadu :D

if (claim.getDeviceToken().isPresent()) {
    List<Claim> claims = claimRepository.findAllByDeviceToken(claim.getDeviceToken().get());
    for (Claim c : claims) {
        if (!c.getId().equals(claimId)) {
            for (Assessment a : c.getAssessments()) {
                if (a.getStatus().equals(Assessment.Status.PLANNED)) {
                    if (a.getDate().compareTo(date) == 0) {
                        throw new BusinessException("assessment.already.planned");
                    }
                }
            }
        }
    }
}
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...
:-[

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); 
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" ?

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/javascript/comments/4oxtgk/javascript_developers_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ć.

0

Dziwne komunikaty po kliknieciu w przycisk zapisz wydarzenie :D

user image

14

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

1

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

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

2

Jak wpiszecie w konsoli chrome'a:

Number.parseInt(1/3650000);

otrzymacie dość zaskakujący wynik: 2

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

0
if($files_arr['plik_ext'] != 'cdr' && $files_arr['plik_ext'] != 'CDR' )

:(

1

Z ciekawości przeglądam sobie oferty pracy dla programistów C# (może za kilka tygodni kto wie ...) i znalazłem coś takiego:

http://medinet.biz.pl/gfx/simple/userfiles/files/rekrytacja/programista_.net.pdf

Więc chyba jednak bez studiów się nie obejdzie :P

4

Nic szokującego, ale kilka ciekawostek z js które przyswoiłem w ostatnim czasie:

X isinstance Y działa tak, że sprawdza czy X.__proto__ == Y.prototype. Samo z siebie to ma sens przy dziedziczeniu prototypowym, ale wynikiem tego są dziwne kwiatki jak np.

> Function instanceof Object
true
> Object instanceof Function
true

Z tego samego powodu, wbrew temu co uważa stackoverflow, X instanceof Array oraz Array.isArray(X) nie są równoważne (Array.prototype spełnia isArray(X) a nie spełnia X instanceof Array, da się też stworzyć obiekt Y który nie będzie tablicą ale będzie spełniał Y instanceof Array).

Wartości w javascript dzielą się na truthy i falsy (jak w bardzo wielu językach). Wartości truthy to wszystkie wartości które nie są falsy. A wartości falsy to:

  • false - oczywiście.
  • null - oczywiście
  • undefined - oczywiście
  • 0 - oczywiście
  • NaN - ok
  • '' - ok
  • "" - ok
  • document.all - ???

Document.all to zabytek z czasów przeszłości. Kiedyś było to customowe rozszerzenie microsoftu, przez to było wykorzystywane do detekcji przeglądarki (if (document.all) { /* ie specific code */ }.
Więc z jednej strony document.all == undefined zwróci true, a z drugiej strony document.all('container') zwróci ze strony div o id "container".

Jeśli domyślne zasady są dla kogoś zbyt nudne, można tworzyć nieintuicyjne obiekty na masę sposobów, np. za pomocą proxy (które może przechwycić i zmodyfikować prawie wszystkie możliwe operacje na obiekcie), ale powiedzmy że tego się można spodziewać. Natomiast urzekło mnie Symbol.toPrimitive i parametr hint:

var obj2 = {
  [Symbol.toPrimitive](hint) {
    if (hint == "number") {
      return 1337;
    }
    if (hint == "string") {
      return "4programmers";
    }
    return true;
  }
};

console.log(+obj2);     // konwersja z hintem number, wynik to 1337
console.log(`${obj2}`); // konwersja z hintem string, wynik to "4programmers.net"
console.log(obj2 + ""); // hint "default"
1

@msm, a co powiesz na to:

$string = 'zero'; $zero = 0; echo ($string == $zero) ? 'Why? Just why?!' : 'You know why...';

Dodam, że spróbujemy w ten sposób porównać jedynkę, czy dwójkę, to już otrzymujemy false ;)

0
Desu napisał(a):

@msm, a co powiesz na to:

$string = 'zero'; $zero = 0; echo ($string == $zero) ? 'Why? Just why?!' : 'You know why...';

Dodam, że spróbujemy w ten sposób porównać jedynkę, czy dwójkę, to już otrzymujemy false ;)

Śmieszna sprawa, ale po dłuższym zastanowieniu logiczne... według PHP.
Użycie === porówna typy, więc wynikiem zawsze będzie false, z kolei przy == próbuje castować string 'zero' do inta, a że nie wychodzi, to w miejsce tego zwraca false, czyli 0.

2

@Desu powiem że znam PHP i już mnie to nie szokuje. Tak jak @ShookTea pewną logikę to ma (podobnie działa koercja w js).

Ale ponieważ już nagi operator == działa wesoło, to polecam przeanalizować cuda jakie się dzieją w momencie kiedy jakaś zewnętrzna funkcja z niego skorzysta. Prezentuję funkcję in_array (standardowa biblioteka php), przykład z php.net:

Dla takiej tablicy:

$array = array(
    'egg' => true,
    'cheese' => false,
    'hair' => 765,
    'goblins' => null,
    'ogres' => 'no ogres allowed in this array'
);

Wyniki in_array - wszystko zwraca true:

in_array(null, $array); // true - logiczne
in_array(false, $array); // true - logiczne
in_array(765, $array); // true - logiczne
in_array(763, $array); // true - co?
in_array('egg', $array); // true - hmm?
in_array('hhh', $array); // true - ?
in_array(array(), $array); // true - ???

Chętni mogą spróbować uzasadnić dlaczego się tak dzieje (hint - bezpośrednia konsekwencja tego jak działa ==).

0

http://sandbox.onlinephpfunctions.com/code/acac39a42fa6d6592053c972995fbbbd9d8b9e18

$array = array(
    'foo' => true,
    'bar' => false,
);
echo in_array(null, $array);
echo in_array(false, $array);
echo in_array(765, $array);
echo in_array(763, $array);
echo in_array('egg', $array);
echo in_array('hhh', $array);
echo in_array(array(), $array);

Wynik:
1111111
Moja teoria się potwierdza :D

0

Przy czym Python ma to IMHO jeszcze mniej intuicyjne:

if 2:
    print('aye')
else:
    print('nay')

if 2 == True:
    print('aye')
else:
    print('nay')

if 1:
    print('aye')
else:
    print('nay')

if 1 == True:
    print('aye')
else:
    print('nay')
0

Przy czym Python ma to IMHO jeszcze mniej intuicyjne:

W sumie to się nie zgodzę.

W Pythonie przez długi czas nie istniało w ogóle coś takiego jak "True". Czyli np. porównanie "3 == 2" zwracało 1 (jak w C). Albo 100% poprawny był kod w rodzaju.

x = (2 == 3) * 5  # jeśli 2!=3, to x=0, inaczej x=5

Jeszcze raz zaznaczam - coś takiego jak True w ogóle nie istniało.

No i w Pythonie 2.3 wprowadzili True. Ale że wtedy jeszcze nie byli tacy chętni do łamania kompatybilności wstecznej... Kod taki jak wyżej musiał się kompilować. Czyli w pythonie 2.7 włącznie True to prawie że alias na 1 (a False to prawie że alias na 0) - róznica jest tylko w wyświetlaniu. czyli 1 == True zwraca True/1, dlatego że True to naprawdę jest 1.

Po pogodzeniu się z tym jednym nieoczywistym faktem, powyższy wynik jest 100% logiczny.

Ale skoro jesteśmy w wątku o WTFach, to z historii True wynika jeszcze jedne rzecz...

In [488]: True
Out[488]: True

In [489]: True = 2

In [490]: True == 2
Out[490]: True

In [491]: True == 1
Out[491]: False

In [492]: True
Out[492]: 2

;]

(tak, właśnie dlatego że kiedyś True nie było keywordem, więc ktoś mógł w swoim kodzie napisać True = 123 i musiało działać - i w sumie całkiem sporo osób, podobno, sobie definiowało False/True zanim weszły do standardu)

(w pythonie 3 tak się przypisać już nie da, btw)

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