Programistyczne WTF jakie Was spotkały

0

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

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

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

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)

RegisterClass.
CreateWindow.
GetDC.
ChoosePixelFormat.
SetPixelFormat.
wglCreateContext.
wglMakeCurrent.
wglGetProcAddress.
wglMakeCurrent.
wglDeleteContext.
DestroyWindow.
UnregisterClass.
RegisterClass.
CreateWindow.
GetDC.
wglChoosePixelFormatARB.
SetPixelFormat.
wglCreateContext.
wglMakeCurrent.
0
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.

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.

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.

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:

                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....

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

 
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)

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:

$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:

$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:

($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

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

0

Dzisiejszy WTF dnia...

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:

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:

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...

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 :)

8

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

:>

13
produkt Microsoftu napisał(a)
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.

5

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

for (;;)
{  foo();
   bar();
}
3

Fatality.

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);
	}
}
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ąć.

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
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:

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:

Vector delta = scrollStartPoint - point;
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!

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.

0

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

Jest sobie prosta konwersja pliku przychodzącego do obrazka:

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.

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ć...

1

Python 2.7

>> True = False
>> True
False
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.

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.

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ł.

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