@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.
zawiera user. Wiec moze byc costamusercostam i nadal tak samo bedzie
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
Tu jest dobry WFT, gierka 100k lini:
•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.
$webcare->access->checkUserRole('anioł') && ! $webcare->access->checkUserRole('dres')
dres, a powinno być DRS, to dyrektor regionalny sprzedaży, ale co tu robi anioł?
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.
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;
...
}
kolega właśnie przesłał takie zdjęcie
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.
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");
}
}
}
}
}
}
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...
:-[
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);
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" ?
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ć.
Dziwne komunikaty po kliknieciu w przycisk zapisz wydarzenie :D
Aby dodać więcej niż jeden adres email, rozdziel je znakiem średnika (';')
Wartości w bazie:
[email protected](';')[email protected]
nie używaj mojej metody bo jak ją zmienię kiedyś to i Twoje się popsuje"
Nie wiem, czy się smiać, czy płakać.
Jak wpiszecie w konsoli chrome'a:
Number.parseInt(1/3650000);
otrzymacie dość zaskakujący wynik: 2
//
// 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
if($files_arr['plik_ext'] != 'cdr' && $files_arr['plik_ext'] != 'CDR' )
:(
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
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"
@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 ;)
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.
@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 ==
).
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
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')
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)