@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.
Programistyczne WTF jakie Was spotkały
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
- Postów: 4883
zawiera user. Wiec moze byc costamusercostam i nadal tak samo bedzie
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1176
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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 400
Tu jest dobry WFT, gierka 100k lini:
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1176
http://4programmers.net/Praca/12060-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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1788
$webcare->access->checkUserRole('anioł') && ! $webcare->access->checkUserRole('dres')
dres, a powinno być DRS, to dyrektor regionalny sprzedaży, ale co tu robi anioł?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Kosmos
- Postów: 1571
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:

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.

- Rejestracja: dni
- Ostatnio: dni
- Postów: 400
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;
...
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Kraków
- Postów: 467
kolega właśnie przesłał takie zdjęcie

- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: UK
- Postów: 2235
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 400
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");
}
}
}
}
}
}
- Rejestracja: dni
- Ostatnio: dni
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...
:-[
- Rejestracja: dni
- Ostatnio: dni
- Postów: 172
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);
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1788
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" ?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 8487
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ć.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 400
Dziwne komunikaty po kliknieciu w przycisk zapisz wydarzenie :D

- Rejestracja: dni
- Ostatnio: dni
- Postów: 1788
Aby dodać więcej niż jeden adres email, rozdziel je znakiem średnika (';')
Wartości w bazie:
example@gmail.com(';')example2@gmail.com

- Rejestracja: dni
- Ostatnio: dni
- Postów: 1788
nie używaj mojej metody bo jak ją zmienię kiedyś to i Twoje się popsuje"
Nie wiem, czy się smiać, czy płakać.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2512
Jak wpiszecie w konsoli chrome'a:
Number.parseInt(1/3650000);
otrzymacie dość zaskakujący wynik: 2
- Rejestracja: dni
- Ostatnio: dni
- Postów: 184
- Rejestracja: dni
- Ostatnio: dni
- Postów: 133
//
// 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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 216
if($files_arr['plik_ext'] != 'cdr' && $files_arr['plik_ext'] != 'CDR' )
:(
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Racibórz
- Postów: 101
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
- Rejestracja: dni
- Ostatnio: dni
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ścieundefined- oczywiście0- oczywiścieNaN- ok''- ok""- okdocument.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"
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
- Postów: 629
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.
- Rejestracja: dni
- Ostatnio: dni
@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 ==).
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
- Postów: 629
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
- Rejestracja: dni
- Ostatnio: dni
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')
- Rejestracja: dni
- Ostatnio: dni
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)