Programistyczne WTF jakie Was spotkały

Programistyczne WTF jakie Was spotkały
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 11 godzin
  • Lokalizacja:Poznań
0

Może nie WTF, bo to zapewne wynik minimalizera/minimalizatora/jak-zwał-tak-zwał, ale wygląda zabawnie:

Kopiuj
this.directLink = a.directLink ? !0 : !1;

AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:1493
4

700 linii kodu C++ w procedurze obsługi przerwania. Na ośmiobitowcu pędzonym clockiem 1MHz.

Wibowit
może w środku jest polecenie tymczasowego wyłączenia przerwań? :]
AL
przy tej architekturze raczej innej opcji nie ma, można przerwania co najwyżej włączyć w IRQ, wyłączają się defaultowo Co do clocka to z kodu i obliczeń jednak 8MHz ale same komentarze jaki ma być są sprzeczne. [; Przeglądnąłem nawet listing asemblerowy... szacunkowo to wszystko się zmieści w czasie o ile program poleci z góry na dół ciągiem, ale jest jeden problem: blokujące delay'e typu while(x--) nawet do kilkudziesięciu us. A co lepsze, to podobno bardzo dobrze działa :D
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 godziny
6

Kolejne funkcje które trzeba wywołać, w kolejności, żeby prawidłowo zainicjować OpenGL pod Windows z pełną obsługą wszystkich ficzerów. Podaję tylko nazwy funkcji żeby przedstawić ideę:
(drobne wariacje są możliwe)

Kopiuj
RegisterClass.
CreateWindow.
GetDC.
ChoosePixelFormat.
SetPixelFormat.
wglCreateContext.
wglMakeCurrent.
wglGetProcAddress.
wglMakeCurrent.
wglDeleteContext.
DestroyWindow.
UnregisterClass.
RegisterClass.
CreateWindow.
GetDC.
wglChoosePixelFormatARB.
SetPixelFormat.
wglCreateContext.
wglMakeCurrent.
edytowany 2x, ostatnio: Azarien
Patryk27
wglKtoToZaprojektował ;p
Azarien
problem jest typu jajo czy kura. potrzebna jest funkcja wglChoosePixelFormatARB do włączenia przeróżnej funkcjonalności. ale ma to sens tylko przed SetPixelFormat. ale wglChoosePixelFormatARB można załadować tylko dynamicznie za pomocą wglGetProcAddress. ale wglGetProcAddress wymaga istniejącego już kontekstu OpenGL, czyli m.in. wywołania SetPixelFormat. ale SetPixelFormat można wywołać dla danego okna tylko raz, więc w momencie gdy mamy wskaźnik do wglChoosePixelFormatARB to jest już po ptokach. jedyny sposób to zamknąć w tym momencie okno i zacząć od nowa.
several
Wywal to na mikroblog, żebym mógł łatwo znaleźć w razie potrzeby :)
0
Kopiuj
std::uint16_t type = ...;
if (type == jakas_klasa::id)
{
//...
}
else
{
// ...
}

'jakas_klasa::id' jest równe 100. 'type' też jest równe 100. W debuggerze Visual Studio kod ląduje w bloku else... Gdy wpisałem warunek z if-a do Immediate Window to wyświetlił 'true'. Wtf... Zostawiam to na jutro.

Shalom
Jesteś pewien że źródła przekompilowane? Jesteś pewien że obie zmienne to uint a nie jedna singned druga unsigned?
Azarien
raz nieopacznie przejrzałem listę bugów właśnie naprawionych w Visualu. włos mi się zjeżył jakie błędy związane z generatorem kodu poznajdywano: generowanie ewidentnie źle działającego kodu wykonywalnego, generowanie kodu kraszującego, wypluwanie instrukcji SSE4 gdy parametry kompilacji pozwalają na SSE2 (potem program wygląda prawidłowo tylko że u jednego działa a u drugiego nie). aż dziw że cokolwiek skompilowanego visualem działa prawidłowo ;-)
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Wrocław
3

Zmienna typu decimal ma wartość 12.123571234123412341234, w bazie kolumna jest typu money (limitowana do 4 miejsc po przecinku).
Jaką wartość wstawi Entity Framework? Oczywiście 12.1235.
Gdy później odkryto ten błąd (http://entityframework.codeplex.com/workitem/735), to dodano globalną zmienną konfiguracyjną o nazwie TruncateDecimalsToScale. Domyślnie true, żeby nie zmienić zachowania aplikacji, które BŁĘDNIE wstawiają dane do tej pory.

Mam nadzieję, że banki nie używają EF. Jeśli chodzi o produkty M$, to jest to g**no większe 10 razy niż IE.


Po dopracowaniu rozwiązania każdy będzie mógł założyć własny drzewiasty wątek.
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
3

Model branchowania/zasady wersjonowania kodu. W sumie temat rzeka, a szczególnie jak głównym repo jest SVN. Nasz genialny architekt postanowił wynaleźć koło na nowo i wymyślił taką oto rzecz.

Założenie jest takie by mieć "referral branch", czyli po ludzku mówiąc by jeden z branchy był zawsze działający i zgodny ze stanem faktycznym produkcji. Zazwyczaj jest to ostatni tag. Rzadziej stosuje się model gdzie RB jest trunk.
Gdy używasz do tego trunka to wszelka developerka jest robiona tak, że kolejna wersja jest odbijana z trunka i jej pod wersje są odbijane z niej, chyba, że zakończył sie development i wersja została zmergowana do trunka.

Kopiuj
trunk(1.0)-----------------------M------M-------
              \                 /      /      \
          1.1  +-------------- +      /  1.1.2 +------
                    \           \    /
               1.1.1 +-----------M--+

Jest to o tyle fajny model, że można prowadzić kilka równoleglych developmentów. Co jest kluczowe gdy mamy z góry narzucony sposób realisowania kolejnych wersji wraz z terminami ("duża" wersja co roku, "średnia" co kwartał i "mała" w razie potrzeby np. 14.4.1 - pierwszy bugfix w czasie czwartego kwartału 2014).

Nasz geniusz poszedl krok dalej - każda wersja MUSI być odbita z trunka. Co zamienia nam powyższy wykres na coś takiego:

Kopiuj
                1.1.1 +--------------+
                     /                \
trunk(1.0)-----------------------M------M-------
              \                 /             \
          1.1  +-------------- +         1.1.2 +------

Pytanie do was - czego tu brakuje?

Chwila zastanowienia.....

.....

Odpowiedź - w wersji 1.1.1 nie ma żadnych zmian z 1.1. Zatem jeżeli w 1.1.1 chcemy rozwijać coś co zostalo wprowadzone w 1.1 to nie można tego robić do momentu, ąż 1.1 nie trafi do trunka, a dodatkowo nie można sobie zmergować zmian z 1.1 do 1.1.1, bo merge jest oczywiście możliwy tylko z trunka. Zatem mam wolne....


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
Zobacz pozostałe 5 komentarzy
Koziołek
http://greybrow.iq.pl/POPR/ :) tyle tylko, że oni są z Bangalore czy innego Pune
somekind
To co jakaś obsługa techniczna ma do merdży?
Koziołek
Tak.... corpo style... ja mam tu nawet człowieka od konfigurowania corpo-IDE :)
fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0

wlasnie mnie spotkal najwiekszy WTF mojego zycia....

Debuguje kod (Unity, c#, Visual studio). Z "watkami" (unity nie ma watkow ale ma takie cos jak http://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html

no ale mniejsza z tym. Debuguje, debuguje. kod mniej wiecej taki

Kopiuj
 
rezultat = jakas instrukcja
if(rezultat == oczekiwanyWynik)
{ 
  zrob cos (wylacz jeden panel wlacz drugi)
}
else if(rezultat == innyOczekiwanyWynik)
{
  zrob cos innego
}
else
{
  zrob printfa ze cos strasznego sie stalo
}

po czym przy debugowaniu wchodzi do
zrob cos
a nastepnie wchodzi do
zrob printfa
...
...
...
Unity tak samo sie zachowalo, zmienilo panele i zrobilo printfa... dobrze ze jest piatek. Na dzis mi starczy
przypuszczam ze unity jest kobieta, bo to co sie stalo NIE JEST LOGICZNE
Debugowalem za pomoca step-by-step, zeby nie bylo ze ta funkcja zostala wywolana dwukrotnie (jedynie raz zostala)

edytowany 1x, ostatnio: fasadin
Zobacz pozostałe 4 komentarze
AF
W C++ takie akcje nie są niespotykane, wskazują na problemy z pamięcią. Ale skoro to C#, to pewnie wątki coś mieszają.
several
W C++ niespotykane? Ja bym raczej napisał że w C++ nie takie cuda się widziało. Apropos tych "nie wątków" w unity to w nodejs podobno też zrównolegla się kod nie wątkami a mechanizmami asynchronicznymi powiązanymi ze wzorcem reaktor. Ale taki serwer restowy z wykorzystaniem popularnych modułów to jak się okazało nadal "oldschoolowy" serwer z pulą wątków.
AF
@several "W C++ takie akcje --->nie<--- są niespotykane"
several
Ok, dokładnie takich opisanych w tym poscie nie widziałem.
Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:3 dni
  • Postów:2512
9

To, że PHP jest WTFem samym w sobie, nie muszę przekonywać tych co w nim pisali. To o czym napiszę pewnie też bardziej doświadczeni przez ten język znają. Ja też o tym kiedyś czytałem, ale jakoś nie zapisałem w pamięci trwałej. Otóż mam taki oto kawałek kodu:

Kopiuj
$result = $sum1 > $sum2 ? 1 : $sum1 == $sum2 ? 0 : -1;

Jest to fragment funkcji używanej do porównania w sortowaniu. Coś to sortowanie nie szło więc zacząłem drążyć. Dla przykładowych wartości $sum1 = 20, $sum2=0 spodziewałem się otrzymać wartość 1. No właśnie nie, dostałem 0. "HuueeeeeEEEĘ??????!!!!!" Może popełniłem błąd? Sprawdzam, sprawdzam, sprawdzam. Nie no dobrze jest. I wtedy taka żaróweczka się zapaliła (nie, nikt nie wszedł do pokoju). Coś kiedyś czytałem... o tu:

Unlike (literally!) every other language with a similar operator, ?: is left associative. So this:

Kopiuj
$arg = 'T';
$vehicle = ( ( $arg == 'B' ) ? 'bus' :
             ( $arg == 'A' ) ? 'airplane' :
             ( $arg == 'T' ) ? 'train' :
             ( $arg == 'C' ) ? 'car' :
             ( $arg == 'H' ) ? 'horse' :
             'feet' );
echo $vehicle;

prints horse

No tak...... nadal tego nie rozumiem..... Co ciekawe na wikipedii napisali:

Due to an unfortunate error in the language grammar, the implementation of ?: in PHP uses the incorrect associativity when compared to other languages

Z powodu nieszczęśliwego błędu..... Super. Właśnie dlatego nie lubię PHP.

EDIT: Słowo wyjaśnienia dla tych co jeszcze nie skumali. Wynik taki bo mój "ulubiony" język potraktował to jako:

Kopiuj
($sum1 > $sum2 ? 1 : $sum1 == $sum2) ? 0 : -1;

Więc sum1 > sum2 daje 1, czyli to daje nam TRUE ? 0 : -1 i w rezultacie 0. No przecież to takie oczywiste jest.... ehhh

edytowany 11x, ostatnio: Sarrus
Zobacz pozostałe 8 komentarzy
Sarrus
Owszem overflow musi być terminem znanym każdemu programiście. Nie będę się jednak przejmować jeżeli maksymalna suma to n + (n-1) + (n-2) ... (n-n) gdzie n jest jak na razie 4 i mooooże za rok się podwoi :P
KR
Bardziej chodzi mi o nawyki. Jeżeli można coś zrobić lepiej a nic to nie kosztuje, to lepiej to zrobić lepiej, nawet jeśli akurat teraz tu nie ma to znaczenia. Ktoś to kiedyś skopiuje w miejsce gdzie n będzie większe i się wyspie. Kod, który działa poprawnie tylko jak jest spełnione ileś tam specjalnych warunków niewidocznych łatwo w kodzie, to zły kod. Takie rzeczy się mszczą w dużych projektach bo liczba tych specjalnych okoliczności ma tendencję do przyrastania. Jeśli już się upierasz przy tym, to przynajmniej daj asercję.
Sarrus
Ja zwykle działam wg. praw Murphy'ego w postaci "Jeśli coś może się zdarzyć, pewnego dnia się zdarzy" i nie liczę prawdopodobieństw wystąpienia danego przypadku. Jednakże nie trzeba zawsze wszystko wszędzie uwzględniać, jeżeli szansa jest bliska zeru tak jak w tym przypadku. Te zmienne w moim kodzie, to są ponumerowane role użytkowników w systemie. Ról mam jak na razie 4, a wkrótce będzie 5. Żeby wystąpiło tutaj przepełnienie, tych ról musiałoby być grubo ponad miliard. Zaryzykuję stwierdzenie, że nawet tylu użytkowników tej aplikacji nigdy nie będzie.
Sarrus
A co do kopiowania. Nigdy tego nie biorę pod uwagę. Jedynie wielokrotne wykorzystaniu kodu, wtedy tak. A jeżeli ktoś pracuje metodą kopiego-pejsta bez myślenia - to jego problem. Będzie miał łapy obite przez recenzenta.
KR
Słusznie. Chodziło mi o powtórne wykorzystanie kodu w innym kontekście.
1
Shalom
Dla mnie większy wtf to to że ta klasa ma 2700 linii ;)
niezdecydowany
niezdecydowany
2041 - oooo... k123. takich switchy jest pierdyliard, dżizas kto to pisał ?
SW
jak to kto, thomas wert ;)))
somekind
I ta notacja węgierska i nic nie wnoszące komentarze zajmujące 1/4 kodu.
spartanPAGE
/* [...] Getter [...] missing method documentation [...] */
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10051
4

nie do końca wtf, ale u mnie

  • folder z vs nazywa się "Microsoft Visual Studio 11.0"
  • na belce programu widnieje "Visual Studio 12"
  • w menu start mam skrot o nazwie "Visual Studio 13"

wszystkie odnoszą się do tego samego o.O

Azarien
12 czy 2012? bo 2012 to 11.0. a 2013 to 12.0. jeśli u ciebie skrót się nazywa “Visual Studio 13” a nie 2013 to znaczy że instalowałeś jakieś bety...
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
0

Dzisiejszy WTF dnia...

Kopiuj
for (FileRecord fileRecord : records) {
    fileRecordService.save(fileRecord);      
    if (++recordCount % BATCH_SIZE == 0) {                 
        entityManager.flush();                             
    }
}

recordsto FluentIterable z Guavy. Tu go wyniosłem do zmiennej, ale oryginalnie mamy tam operację filter i transform. Teraz najlepsze. Oryginalny kod był oparty o idiomy funkcyjne. Inaczej mówiąc proces zapisu wyglądał mniej więcej tak:

Kopiuj
records.transform(saveFunction).allMatch(isTruePredicate);

saveFunction zapisuje i jak się uda zwraca true. Naszła nas potrzeba zrobić to za pomocą batcha (czyli zbieramy n rekordów i dopiero zapisujemy). Trafilo na koleżankę o wybitnie angielskim imieniu Aruna (tak hinduska). Więc wyprodukowała to co widzicie na pierwszym listingu.

By nie było, że się mundrze. Moje rozwiązanie (poza użyciem przetwarzania wsadowego ze springa) to:

Kopiuj
records.transform(SaveFunction.withBatchSize(n)).allMatch(isTruePredicate);

SaveFunction.withBatchSize(n) zwróci funkcję, która będzie pod spodem trzymała licznik i robiła odpowiednią "magię". Nie jest to czyste rozwiązanie, ale skoro i tak musimy mieć efekt uboczny, to who cares?

Najsmutniejsze jest to, że ten kod przeszedł review ekipy z Londynu...


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
edytowany 1x, ostatnio: Koziołek
Wibowit
Jeśli allMatch robi short-circuit to kody nie robią tego samego. Zakładając, że isTruePredicate jest identycznością.
Koziołek
chodzi tylko o to by sprawdzić czy po drodze nie wyskoczył jakiś błąd. Nie jest istotne czy to będzie na poziomie rekordu czy batcha
Wibowit
Jeśli allMatch robi short-circuit to zapis zostanie przerwany przy pierwszym niepowodzeniu. Pętla zawsze przejdzie po wszystkim.
Koziołek
to racja. Tym samym ten pierwszy kod jest jeszcze bardziej kijowy, bo zapycha nam bazę syfem :D
Azarien
przecież ten kod (niby taki zły) robi to co widać na pierwszy rzut oka: na każdym elemencie kolekcji robi save a co BATCH_SIZE iteracji robi flush. twoje withBatchSize robi... nie wiadomo co, i trzeba się przekopywać przez kod.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
3

@Koziołek chyba przesadzasz. Moim zdaniem kod wcale nie jest WTFem. Jest czytelny i oczywisty. Twój zapis wręcz przeciwnie, a przecież zwykle o to chodzi żeby wiedzieć od razu co się w kodzie dzieje.
Gdybym miał zaproponować poprawne rozwiązanie funkcyjne to już prędzej napisałbym funkcje dzielającą ten wejściowy strumień na kawałki o rozmiarze batcha i redukowałbym każdy batch do booleana który określa czy się powiodło czy nie. Byłoby to znacznie czytelniejsze niż to co tutaj proponujesz. Niemniej jednak nie uważam ze dobrze jest popadac w skrajności. Pętla zapisana explicite wcale nie musi być zła :)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Koziołek
mogę na priv podeslać oryginalny kawałek :)
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 11 godzin
  • Lokalizacja:Poznań
8

http://radxa.com/Rock2
CPU - Quad core ARM Cortex-A17 processor@1.8Ghz
strona bez JS:
CPU - Quad core ARM Cortex-A17 [email protected]

:>


Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 godziny
13
produkt Microsoftu napisał(a)
Kopiuj
System.Runtime.InteropServices.COMException
Nie można uruchomić tej aplikacji, ponieważ rozdzielczość ekranu jest niższa niż 1024 x 768. Wybierz wyższą rozdzielczość ekranu, a następnie spróbuj ponownie. (Exception from HRESULT: 0x80270250)

No sory, ja jestem świadom, że jak mam niską rozdzielczość to coś mi się nie zmieści na ekranie, albo będę miał paski przewijania z każdej strony i to nie będzie wygodne - ale żeby wywalać z tego powodu wyjątek na starcie?

EDIT: problem dotyczy nowego Visual Studio 2013 Community. Błąd wyskakuje w momencie otworzenia solucji dla Windows Phone.
Oczywiście tak jak się spodziewałem, wyjątek jest zupełnie sztucznym ograniczeniem, bo po zalogowaniu się przez RDP z dużego ekranu, otwarciu designera (tym razem bez błędu) a następnie po powrocie na mały ekran designer o dziwo działa i się nie wywala..

Nie jestem zadowolony. W wersji 2012 nie było tego problemu.

edytowany 2x, ostatnio: Azarien
flowCRANE
@Azarien - jakiś szczególnie bym się nie zdziwił, gdybym otrzymał komunikat, że rozdzielczość jest zbyt niska, ale wyjątek..? o.O
Azarien
@furious programming: rzecz dzieje się na netbooku z 1024x600. I to Microsoftu jest wina że ma tylko tyle, bo tak licencjonował Windowsa swego czasu, że cena OEM windy była znacznie niższa przy takiej maksymalnej rozdzielczości (i innych ograniczeniach, jak max 2 giga RAM-u). I nie jest to specjalnie stary lapek. A co do komunikatu, to starsze wersje Angry Birds co chwilę pokazywały ostrzeżenie o rozdziałce. Najnowsza o dziwo już nie pokazuje tego komunikatu wcale.
flowCRANE
Rozumiem, choć nie wiem dlaczego ograniczyli aplikację akurat do rozdzielczości 1024x768, skoro sporo netbooków ma mniejszą rozdzielczość w pionie; Mój poprzedni komentarz dotyczy zastosowania wyjątku zamiast zwykłego komunikatu, a nie ograniczeń co do rozdziałki;
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 godziny
5

Różne sposoby klamerkowania widziałem, ale takie coś po raz pierwszy:

Kopiuj
for (;;)
{  foo();
   bar();
}
Sarrus
Ktoś utknął między C# i Javą :D
DibbyDum
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Polska, Kraków
3

Fatality.

Kopiuj
static void Main(string[] args)
{
	try
	{
		// Jakieś cudawianki i kolejne wywołania czegoś tam...                
	}
	catch (Exception e)
	{
		 // logowanie...
	}
	finally
	{
		 Process.GetCurrentProcess().Kill();
		 Process.GetCurrentProcess().Close();
		 System.Environment.Exit(-1);
		 // Process.GetCurrentProcess().Kill();
		 // Environment.Exit(0);
	}
}

Yubby dibby dibby dibby dibby dibby dibby dum..
Zobacz pozostałe 5 komentarzy
somekind
A już myślałem, że jesteś dobrym programistą.
fasadin
zgadzam sie z @Shalom w javie np wymusilbym restart komputera zeby miec pewnosc ze aplikacja jest ubita
Sebastiano
Każde logowanie będzie failem:)
Marooned
Może to programista Androida omijający debilizm systemu ;-)
MarekR22
może ktoś tak kombinował bo nie wiedział, co to jest proces zombie.
datdata
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 7 lat
  • Postów:957
2

http://antyweb.pl/nie-dziwie-sie-ze-system-pkw-nie-dziala-skoro-powstal-w-3-miesiace-a-do-przetargu-zglosila-sie-jedna-firma/

Projekt systemu informatycznego do obsługi niedzielnych wyborów powstał w 3 miesiące. Łącznie z planowaniem, wdrożeniem i szkoleniem end-userów. To musiało się sypnąć.


"A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects." Robert Heinlein.
Zobacz pozostałe 6 komentarzy
Azarien
1. a co z systemem z poprzednich wyborów (był przecież jakiś...) wyrzucono do śmietnika? 2. byłem w komisji wyborczej dwa razy, w tym raz jako zastępca przewodniczącego. nie było żadnego "systemu" to i nie miało się co sypnąć. może lepiej nie pchać informatyzacji tam gdzie bez niej można się obejść?
Patryk27
1.Na Niebezpieczniku było info, że poprzedni system był po prostu nieopłacalny w użytku czy coś w tym guście.
R3
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:320
0
edytowany 1x, ostatnio: rav3n
Shalom
Spóźniłeś sie coś :P
Sarrus
Masz refleks jak indeksowanie ravena :P
R3
aww. bo tak naprawde to rzadko tu siedze a ostatnio mam ograniczony net ;p
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

Grupa specjalistów jest w lesie i szuka buga:
A gdy go znajdzie:

Wersja dla ludzi którzy programują "od dziecka" - z duuuużą wyobraźnią:

(wiem że trochę OT, ale widziałem ostatnio wywiad z filmem nr 2 i aż się prosił żeby tu dodać :D)

1
Kopiuj
Point delta = new Point(
              (point.X > this.scrollStartPoint.X) ?
                  -(point.X - this.scrollStartPoint.X) :
                  (this.scrollStartPoint.X - point.X),
   
              (point.Y > this.scrollStartPoint.Y) ?
                  -(point.Y - this.scrollStartPoint.Y) :
                  (this.scrollStartPoint.Y - point.Y));

w skrócie:

Kopiuj
if (a > b)
  return -(a - b);
else
  return (b - a);

Źródło: http://www.codeproject.com/Articles/37349/Creating-A-Scrollable-Control-Surface-In-WPF.aspx

Już nie mówię że można to zapisać jako:

Kopiuj
Vector delta = scrollStartPoint - point;
fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0

komunikaty bledu od Apple...

kompiluje i uruchamiam aplikacje na ipad'a i dostaje taki piekny error w stylu

Process launch failed: Failed to get the task for process 7124

no ok... duzo mi to nie mowi, ale co mi tam po googluje. Znalazlem ze warto sprobowac zmienic podpis kodu (Code Signing). Zmienilem na moj (byl iOS Developer).

Dziala, nawet nie musialem rekompilowac zrodel (tylko podpis)

super komunikat bledu!

Koziołek
Kwestia filozofii Apple w zakresie reakcji na błędy - jak się popsuje to user nie powinien wiedzieć co dokładnie, a zapłacić za support.
fasadin
development takze? no bez przesady
Koziołek
programista też klient. Niestety Apple pod tym względem jest mało przyjazne.
1

@fasadin
Może się uczyli od Oracle z ich:

ORA-24344: Success with Compilation Error

lub

ORA-00600: internal error code, arguments string tips
(...)
An ORA-00600 is an internal error, and only Oracle Corporation knows the agruments.

ALWAYS open a TAR when you get a ora-600.

I check MOSC, and you can see many of the "common" codes there.

ShookTea
Sukces z błędem kompilacji? WTF?
Koziołek
Success - udało się zapisać procedurę PL/SQL, ale Compilation Error, bo nie udało się jej skompilować. Ma sens, ale trzeba wiedzieć, że Oracle wdraża procedurę w dwóch krokach.
siararadek
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 9 lat
0

WTF Microsoftu, w skali bycia MS daję mocne 9/10:

Jest sobie prosta konwersja pliku przychodzącego do obrazka:

Kopiuj
using (var image = new Bitmap(file.InputStream))

Ten kawałek działał normalnie w naszej aplikacji w Azure Website i aplikacji w Azure Cloud Service. Dostałem zadanie zaimplementować dodawanie pliku favicon.ico, zarówno tu i tu.

Dzisiaj tester pisze, że nie działa dodawanie favicona na Azure Website. Wchodzę, rzeczywiście nie działa. Wchodzę na Azure Cloud Service - o dziwo ta sama funkcjonalność przechodzi bez problemu.

I okazało się, że ten kawałek kodu powyżej, dla plików .ico i Azure Website wywala błąd System.ArgumentException:

Syed Irfan HussainMicrosoft contingent staff, Moderator napisał(a)

I find that the API that you are using to call the ico files from the blobs is sandboxed, which means that the API 'System.Drawing APIs ' is blocked on Azure websites.

You will not be able to use this to call the ico files, this is by design.

You might want to consider using web roles instead to acheive this. You can refer to this link for more information on Webroles
https://social.msdn.microsoft.com/Forums/azure/en-US/c23080b0-585a-4a9d-af1e-5f7ce0a188c7/parameter-is-not-valid-exception-for-ico-files-on-azure-websites?forum=windowsazurewebsitespreview&prof=required

Ja nie wiem, czy tam debile pracują czy co - to jest tak dziwny case, że albo przydałoby się go gdzieś opisać, albo przynajmniej jakiś sensowny komunikat dać. Ja się tutaj męczę, kombinując czy może coś nie tak zrobiłem, a oni API blokują po całości.

Azarien
pewnie .NET nie ma własnego parsera plików .ico i korzysta z systemowego (WinAPI) co może być zablokowane na „dziwnych” platformach jak Azure.
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
4

Dostaliśmy do zespołu w Londynie nową programistkę. Hinduska czy jakas inna pakistana, ale na Señor(ita) Java Deva i to podpate odpowiednim doświadczeniem, certami itp... Robimy projekt w którym czytamy sobie pliki i pakujemy je do bazy (rozszyfruj, rozzipuj, sparsuj, zapisz). Pliki reprezentują różne operacje na instrumentach finansowych, ale na poziomie modelu można to bardzo ładnie zaprojektować z dziedziczeniem i tego typu duperelami...

Nasza señorita dostała takie zadanie i...

  • model dziedziczenia jednotabelowy co oznacza, że za pół roku będziemy mieli w tabeli ze 100 kolumn.
  • w podklasach adnotacje @NotNull, które Hibernate interpretuje jako "wygeneruj ograniczenia na kolumnie" co w połączeniu z punktem powyzej daje naruszenia ograniczeń
  • w klasach wszelkiej maści konstruktory poza domyślnym
  • testów brak
  • pomylone typy danych - ze względu na różne zaszłości zawsze wszystko najpierw robimy jako String i później w razie czego zmieniamy typy, bo dokumentacja od dostawców danych jest różnej jakości i nie do końca można jej wierzyć.
  • wywalajace się ITesty i UTesty... w zupełnie innej części systemu, o powstały jakieś dziwne zależności...

bierze się teraz z routing z apache camel... zaczynam się bać...


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
Zobacz pozostałe 12 komentarzy
KR
Spójrz na to inaczej: 1. 100 kolumn, a to jakiś problem jest? Wydajnościowo jedna tabela jest najlepsza. Przynajmniej nikt Wam joinami bazy nie zabije :P 2. A to jej wina, że Hibernate jest głupi? 3. Feature'y języka są po to, aby ich używać. Pisalibyście w Scali, to by się nie dało mieszać z konstruktorami. 4. Od testowania jest QA. 5. To kara za używanie Stringów. 6. Nie robicie code-review?
Wibowit
Tabelę można joinować samą ze sobą wielokrotnie :]
vpiotr
@Wibowit: tylko jaka będzie tego wydajność...
Wibowit
zależy od szczegółów implementacyjnych. joinowanie tabeli samej ze sobą robi się chociażby na ćwiczeniach z SQLa, by np wyszukać wszystkich przodków, podwładnych, etc, czyli zasymulować strukturę drzewiastą na jednej tabeli.
somekind
A z praktycznych przykładów to chociażby podział administracyjny.
1

Python 2.7

Kopiuj
>> True = False
>> True
False
edytowany 1x, ostatnio: flowCRANE
bogdans
Dlaczego to jest Wtf? Przecież, to jest logiczne.
MarekR22
True jest "stałą" w python (a nie słowem kluczowym), którą jak widać można zmienić.
bogdans
True jest stałą w Pythonie >=2.3 https://docs.python.org/2/library/constants.html W Pythonie 3 stało się słowem kluczowym.
Wizzie
true, w Pythonie 3: Syntax Error: can't assign to keyword
bolson
  • Rejestracja:około 15 lat
  • Ostatnio:3 dni
  • Lokalizacja:Zielona Góra/Poznań
5
AL
pierdyknijOkienkoCookies :D
Marooned
dzieciol rządzi
vpiotr
Nie wiem co w tym kodzie jest dziwnego. Kod prosty i przejrzysty, a że ktoś pomylił środowisko produkcyjne z edukacyjnym? co w tym złego ;-)
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 11 godzin
  • Lokalizacja:Poznań
9

Windows 7, funkcję "kosza" mam wyłączoną (pliki od razu się usuwają). Będąc na pulpicie potrzebowałem okienka explorera, więc sobie dwuklik na koszu zrobiłem.. nic się nie wydarzyło, zająłem się innymi sprawami. Mija jakieś pół godziny, czytam sobie www.. WTEM, otwiera się kosz. Niezły lag.


Zobacz pozostały 1 komentarz
Marooned
To może być to!
Wibowit
może to nie twój kosz?
Marooned
Frapująca teza.
somekind
WTF to ikona niepotrzebnego kosza na pulpicie i protezowanie nią tego, do czego służy Win + E.
Marooned
Przydaje się jak robię porządki - poza tym.. jest, nie przeszkadza. Win+E nie znałem.
hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:8 dni
6

vpiotr
No i nawet taki idiotyzm ma swoje CI :)
Laflx
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 6 lat
  • Postów:76
0

WTF - to R jest aż tak opłacalny?!!!
kupiłem sobie książkę do nauki R za 60 zł, uczę się R od miesiąca i właśnie zarobiłem na tym pierwsze pieniądze. 150zł za 60 linijek kodu w R.

edytowany 5x, ostatnio: Laflx
Zobacz pozostałe 33 komentarze
Shalom
Ja poważnie nie rozumiem po co karmicie trolla. Z idiotami tak juz jest że nie da się z nimi wygrać, bo najpierw sprawadzą was do swojego poziomu a potem pokonają doświadczeniem. Po prostu olejcie go i tyle. Jak będzie spamował swoimi idiotycznymi postami to dostanie bana i pójdzie krzewić swoją nową religie gdzieś indziej i tyle.
EroSanin
"R is like my magic, simple but powerful" David Blaine
Endrju
Ja się pytam gdzie jest permban? Czy to forum ma w ogóle moderatorów?!
Laflx
uspokój się Endrju - nie chcesz nie czytaj.
niezdecydowany
niezdecydowany
"R jest jak magia, ktoś tam wierzy, ktoś próbuje ale ludzie i tak wolą jave" Ja.
9

WTF-em w tym przypadku jest liczenie kasy za ilość linijek.
Koncepcja rodem z lat 80-90. Waćpan o zasadach czystego kodu i pisania jak najmniejszej ilości kodu to zapewne nie słyszał.

Zobacz pozostałe 28 komentarzy
Azarien
@ShookTea: nie wiem czy kłamcą, ale tutaj ludzie mają najwyraźniej inne od niego zdanie: http://stackoverflow.com/questions/3558119/are-self-closing-tags-valid-in-html5
Koziołek
@ShookTea oczywiście. Co do HTML5 to niezgodny z XML, bo mikroformaty :) w XML gołe atrybuty bez wartości też nie przechodzą.
ShookTea
@Azarien @Koziołek właśnie zniszczyliście moje życie.
Koziołek
Spoko... podrośniesz odbijesz sobie na jakieś innej niewinnej duszyczce.
ShookTea
Tak. Będę w sobie gromadził gniew, by wtedy wybuchnąć.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)