Programistyczne WTF jakie Was spotkały

0

Twórcy Kotlina chwalą się super-duper interoperability między Kotlinem a Javą, i jest to w zasadzie prawdą. Niech za przykład posłuży nam to, że choć w Javie klasy reprezentowane są przez obiekty typu

java.lang.Class<T>

a w Kotlinie przez

kotlin.reflect.KClass<T>

to jednak bardzo łatwo można wyłuskać jeden z drugiego:

val longTypeKotlin = Long::class
val longTypeJava = longTypeKotlin.java

val booleanTypeJava = Boolean::class.java
val booleanTypeKotlin = booleanTypeJava.kotlin

Nic nie stoi zatem na przeszkodzie, żeby wyłuskać KClass<T> z obiektu Class<T> wyłuskanego z KClass<T>. Widzicie, dokąd to zmierza?

Dokładnie, nie tylko poniższa funkcja skompiluje się bez zająknięcia:

fun fizz(): Boolean {
    val foo: KClass<Long> = Long::class
    val bar: KClass<Long> = Long::class.java.kotlin
    return foo.equals(bar)
}

ale ta również, w końcu tymi dwoma typami można sobie żonglować bez końca:

fun buzz(): Boolean {
    val foo: Class<Long> = Long::class.java
    val bar: Class<Long> = Long::class.java
    .kotlin.java.kotlin.java.kotlin.java.kotlin.java.kotlin.java
    .kotlin.java.kotlin.java.kotlin.java.kotlin.java.kotlin.java
    .kotlin.java.kotlin.java.kotlin.java.kotlin.java.kotlin.java
    .kotlin.java.kotlin.java.kotlin.java.kotlin.java.kotlin.java
    .kotlin.java.kotlin.java.kotlin.java.kotlin.java.kotlin.java
    .kotlin.java.kotlin.java.kotlin.java.kotlin.java.kotlin.java
    .kotlin.java.kotlin.java.kotlin.java.kotlin.java.kotlin.java
    return foo.equals(bar)
}

Co więcej, obie się wykonają i zwrócą nam wartości true:

fun main(args: Array<String>) {
    print("fizz() says '${fizz()}' while buzz() says '${buzz()}'")
}
fizz() says 'true' while buzz() says 'true'

Co samo w sobie jest właściwie nieszkodliwe, a komuś być może się nawet przydało, choć i tak wywołuje małe WTF.

Duże WTF wywołuje u mnie fakt, że dla IntelliJ - nomen omen IDE tworzonego przez twórców Kotlina - taka machinacja jak w fun buzz() jest jak najbardziej OK i nawet się nie zająknie, że ta operacja w tym miejscu jest pozbawiona sensu i można by ją uprościć :)

10

Klikałem sobie w CLionie i coś nagle machnąłem myszką.

screenshot-20180831125309.png

Cliona nie ma
Może się zamknął
Nie no na pasku jest, że otwarty
Quit
Otwieram ponownie
Taka sama sytuacja, nie ma okna
...
Po chwili siedzenia i gapienia się w monitor, myszka zaczęła wędrować w stronę przycisku reboot, może on pomoże
Nie pomógł, cliona dalej nie ma
...
Gapię się dalej
eee, co to?

screenshot-20180831125837.png

Okazało się, że zmniejszyłem okno do rozmiaru 1x29px, co przy odbijającym się, mimo matowej matrycy, słońcu robiło wrażenie braku okna :)
gg Jetbrains, ale dajcie jakiś minimalny rozmiar

Nie wiem czy to programistyczny WTF. Nie mam dużego pojęcia o projektowaniu interfejsów, ale ze strony użytkownika jest to jednak trochę WTF.

1

Java Date i zawsze znajdzie się jakiś ciekawy sposób użycia

Date date = new Date();
date.setTime(date.getTime() - 1000L * 60L * 60L * 24L * (long) (1 + rand.nextInt(365)));
1

Implementując dzisiaj gesture detector wszedłem na chwile ponownie do kodu androida. https://android.googlesource.com/platform/frameworks/base/+/56a2301/core/java/android/view/View.java#8284 Podziwiam wytrwałość programistów utrzymujących to.

3

@Afish:

unsafe // that's gonna be interesting for sure
{
	long* itemAddress = (long*) (*(long*) *(long*) &reference - 8); // oh fuck
	(...)
}
1
// object to Optional
if (!isCostam(object)) {
                result = object
                        .map(o1 -> foo())
                        .map(o2 -> bar())
                        .orElse(null);
                if (result == null) {
                    LOG.error(Było nullem);
                }
            }
4

Funkcja free w stylu C zawierająca popup GUI z pytaniem do usera czy nie chce zapisać pliku na dysk. Coś w stylu:

void layerFree(LAYER *aly)
{
   if(aly && aly->layerType == LAYER::SOME_TYPE)
   {
       if (getYesNo("Save?"))
          layerSaveSomeType(aly->data);
   }

   layerInternalFree(aly);
}

12

Może bardziej humor niż WTF, ale co tam.

Dziś dostałem zadanie, uczestniczyć w telekonferencji i przesłuchać kandydata na specjalistę do spraw wydajności baz danych. Dostałem CV ziomka, na szybko przygotowałem pytania.
Część dotycząca konceptów (spin locking, mutexy, latche, plany wykonania, statystyki, histogramy etc.), część otwarta ("jak zabrałbyś się za sprawdzenie wydajności macierzy?", "Jakie nazwiska bloggerów ze świata performance tuningu/troubleshootingu znasz?"), część dotycząca doświadczenia ("Klient narzeka, że coś nie działa/jest za wolno. Czy masz jakieś usystematyzowane podejście do rozwiązywania tego typu problemów?")

Dołączyłem do telekonferencji, przedstawiłem się i opowiedziałem w jakim celu, a ziomek: "nie znam się na performance"...

0

Według wujka Googla zarówno JSON jak i XML to języki programowania.
Zrzut ekranu (2).png
Zrzut ekranu (3).png

Zatem czekam na bootcampy "Zostań programistą JSONA w 2 tygodnie!"

2

screenshot-20180928154603.png

5

Eclipse jest to IDE, w którym bohatersko pokonuje się trudności, nieznane w żadnym innym IDE.
title

kliknąłem w podpowiedź "change return type of customerToCustomerDto to 'CustomerDto', Eclipse wtedy bohatersko rozwiązał problem zamienijąc typ metody z CustomerDto na CustomerDto .

4

Do dziś mam skrinszota z kodu "senior developerów" jednej z firm, gdzie pracowałem na wczesnym etapie kariery.

screenshot-20181004155048.png

Wyczernione fragmenty mogące zidentyfikować firmę.

3
public class UiCombinationTest {
    private UiCombination createTestSubject() {
        return new UiCombination();
    }

    @Test
    public void testCtor() throws Exception {
        String uniqueId = UniqueIdBuilder.generateUUID();
        new UiCombination(uniqueId, "testUiCombinationName", "testUiCombinationDescription");
    }

    @Test
    public void testGetName() throws Exception {
        UiCombination testSubject;
        String result;

        // default test
        testSubject = createTestSubject();
        result = testSubject.getName();
    }

    @Test
    public void testSetName() throws Exception {
        UiCombination testSubject;
        String result = "";

        // default test
        testSubject = createTestSubject();
        testSubject.setName(result);
    }

    @Test
    public void testGetDescription() throws Exception {
        UiCombination testSubject;
        String result;

        // default test
        testSubject = createTestSubject();
        result = testSubject.getDescription();
    }

    @Test
    public void testSetDescription() throws Exception {
        UiCombination testSubject;
        String result = "";

        // default test
        testSubject = createTestSubject();
        testSubject.setDescription(result);
    }

    @Test
    public void testGetUniqueId() throws Exception {
        UiCombination testSubject;
        String result;

        // default test
        testSubject = createTestSubject();
        result = testSubject.getUniqueId();
    }

    @Test
    public void testSetUniqueId() throws Exception {
        UiCombination testSubject;
        String result = "";

        // default test
        testSubject = createTestSubject();
        testSubject.setUniqueId(result);
    }
}

Chyba sie gdzies korpo dashboard swieci ze code coverage < 90%.
Sprzedalbym im to https://gist.github.com/jpitz/79ac7bfe7d5f6f064b38 albo jakas alternatywe, ale lepiej niech nie szkodza nikomu i pisza te testy :D

0

niekoniecznie WTF, ale mnie rozbawiło

// TODO - this test text did not come across from legacy properly.
string text = "????????????4??????????????????,?11????????????????????????????????????????????????,????????????,??????????";
2

Przepisywane z pamięci. EHHHH...

public class LoggerHelper {
  public static void logEvent(String consigneeId, String parcelId) {
    if (consigneeId == null) {
      throw new NullPointerException("No consignee ID");
    }
    if (parcelId == null) {
      throw new NullPointerException("No parcel ID");
    }
    log.info("Consignee {} received parcel {}", consigneeId, parcelId);
  }
}
5

Sonar krzyczy ze NullPointerException moze poleciec w tym kodzie (gdzies tam jest uzyte pozniej) (zminifikowalem nazwy metod i argumentow ale ich ilosc i typy zostawilem, bo to drugi wtf)

...
result = handle(x, y, z, a, null, b, c, d, null, null, null, null);
...

No, to trzeba naprawic. Wchodze do pull requesta a tu taka zmiana

Jeb:

...
Optional<Either<Either<X, Y>, Z>> resultOp = Optional.ofNullable(handle(x, y, z, a, null, b, c, d, null, null, null, null));
result = resultOp.get();
...

Kiedy java 8 wejdzie ze mocno. xD

2

Standard C o wartości zwracanej przez gmtime_s:

Return Value

.. ... ...
2) copy of the result pointer, or null pointer on error (which may be a runtime constraint violation or a failure to convert the specified time to UTC)

Jak wartość zwracaną gmtime_s widzi Microsoft:

Return Value

Zero if successful. The return value is an error code if there is a failure. Error codes are defined in Errno.h; for a listing of these errors, see errno.

No jak tu pisać wieloplatformowy kod.

8

Nie programistyczne, ale perełka.

Mamy w backlogu jakieś zadanie, w które jest wplątany dział bezpieczeństwa. Stronie biznesowej udało się przekonać ten dział, żeby dostać uchylenie od implementacji na rok (zadanie nie jest żadną luką, po prostu dotyczy możliwości zmiany hasła). Manager zmienił status taska na "rejected", więc ktoś zapytał czemu. Odpowiedź piękna - zostało odrzucone, bo teraz nie implementujemy i powinniśmy utworzyć nowego taska, żeby przpomnieć nam o ponowym otworzeniu poprzedniego za rok.

#germanskimanagement

2

Góglowskie Protocol Buffers wydawały się tak fajnym młotkiem do wszystkiego, aż do momentu

foo.proto:15:9: Key in map fields cannot be enum types.

Zaniemówiłem.
Czyli nie można mieć np. map<JakiśEnum, string> tylko musi być map<int32, string>.
Słabe to.

2

Ale ja nie lubie AWSa... Po pelnej kontroli jaka mialem przy uzywaniu Xena/VMware. Wywalilem niepotrzebna maszyne i chce ja usunac. I co? Nie da sie.

... i w dodatku pojawia mi sie w liscie maszyn nawet po zmianie nazwy by nie pasowala do filtra.

Czlowiek szuka w google i co znajduje?

https://forums.aws.amazon.com/thread.jspa?threadID=26111&start=0&tstart=0

  1. Terminate instance
  2. Search for delete button
  3. Continue to search for delete button
  4. Search google for how to delete
  5. Come across this article: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-delete.html
  6. Try to follow article but quickly realize that it's a different product
  7. Go back to article and see: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html
  8. Read that I have to wait for some time in the future for instance to delete
  9. Disbelief that I can't delete an instance
  10. Find this thread to confirm that I can't delete the instance
  11. Read to bottom in disbelief that even though the first request was in 2008, this still isn't an option
  12. Write this comment
12

Programista z zespołu robił deploy nowej wersji aplikacji. Niestety po zmianie typu jednej z kolumn wywalił pare lat historycznych danych.
Na szczęście nauczyłem go, żeby zawsze robił backup bazy! Nasz zuch dzielnie walczył całą noc by uratować dzień... i co zrobił? Zrestorował bazę sobie lokalnie. Odpalił selekta w sql management studio na utraconej kolumnie... ctrl + c na wyniku, ctrl + v do excela i... napisał skrypt, który mu dopisze update'a dla każdego wiersza.
W końcu odpalił to na bazie produkcyjnej... 357081 linii z update'ami. Po 50 minutach mielenia zawiesiło mu się to wszystko... więc podzielił to na 5 plików po 71tys lini. Tym razem odpalając je po kolei udało mu się przywrócić utracone dane! Sukces!

Jakież było moje zdziwienie, gdy rano patrzę na commity do projektu, a tam 5 plików - w sumie 33,9MB czystego sql'a z tymi 357081 update'ami. WTF!

P.S. To była akcja na mój ostatni dzień w pracy, a nasz zuch właśnie od niej rozpoczął bycie nowym Lead Developerem tego projektu (mi poskąpili kilku złotych podwyżki, to odszedłem).

1

Jmeter i plugin do monitorowania/rysowania wykresow z testow wydajnosciowych.

Jak w takim narzedziu mozna nie umiescic opcji do podpisywania osi ?

https://groups.google.com/forum/#!topic/jmeter-plugins/zjTwY38X_z8

... cale szczescie ze to Open Source wiec w mojej lokalnej wersji juz sie da.

19
john_klamka napisał(a):

Zmieniła się pewna procedura w firmie i trzeba było odzwierciedlić to w kodzie. Za taska zabrał się nie kto inny jak sam PRINCIPAL SENIOR TECH LEAD ARCHITECT. Zmiana nie była wymagająca, ale unit testy już go przerosły. Zamiast zmodyfikować 2 (dwa!) testy, odpowiedzialne za ten fragment kodu, zwyczajnie je usunął. Oczywiście nikt nie mógł zareagować, bo jego nie dotyczą code review.... FML.

Ciąg dalszy historii. Otóż po burzliwej dyskusji na temat testowania i zalet oraz wad TDD nasz kochany principal senior tech lead architekt oficjalnie zakazał stosowania TDD. Powód? "Za dużo kodu trzeba pisać i przez to wszystko długo trwa, a to podnosi koszty, jak chcecie TDD to wybierzcie kogo mamy zwolnić żeby te koszty wyrównać".

Zgłosiłem się na ochotnika i rzuciłem papierami.

6

Postanowilem zaktualizowac w koncu na laptopie Debiana do 9 i popracowac na laptopie podlaczonym do dwoch monitorow.

... Teraz juz wiem ze kdm wylecial
... Teraz juz wiem ze jest cos takiego jak Optimus, czyli konfiguracja z dwoma GPU w tym jedna zintegrowana.
... Teraz juz wiem ze ta konfiguracja nadal nie moze po prostu dzialac od razu po upgradzie/zainstalowaniu, a najlepsze ze nie wiem jak ale dzialalo przed updatem.

... po 2 godzinach zabawy dalej nie wiem co zrobic zeby to dzialalo.

7

Nadejszła wiekopomna chwila...
I mnie dopadł WTF godny uwiecznienia. Nie jest stricte związany z kodem ale z IT i informatyzacją urzędów, w szczególności ZUSu.
Niedawno zmieniałem pracę - rzecz normalna. Ostatnio byłem na L4. Jak przystało na XXI w. w gabinecie nie dostałem L4 do łapki tylko lotem błyskawicy, migając elektronami popędziło ono wprost na przepastne serwery ZUSu aby następnie trafić do mojego pracodawcy. Pani doktor, jak przystało na kobietkę w sile wieku poza wklepaniem NIPu mojego pracodawcy przepytała mnie jeszcze o nazwę firmy i adres aby na 101% wszystko było OK. Jakież było moje zdziwienie, kiedy kilka dni później zadzwonił do mnie znajomy, któremu czasem wykonuje zlecenia na UZ, że przyszło do nich moje L4. Do firmy, z którą aktualnie nie mam żadnej umowy, która ma NIP całkiem inny niż mój pracodawca, jest w innym mieście i na innej ulicy...
Jak tu nie kochać cyfrowej Polski...

3

Ciag dalszy walki o dzialanie Debiana 9 na trzech monitorach (Dell E6430 z Optimusem, ekran wbudowany w laptopa + 2 zewnetrzne podpiete do stacji dokujacej).

Stweirdzilem ze mam juz tak namieszane w systemie ze go przeinstaluje calkowicie:

  • wifi dalej nie moze "po prostu dzialac" out of the box. Wiem licencje itp. ale to po prostu jest upierdliwe
  • musialem kilka razy przeklikac sie przez screen partycjonowania powtarzajac te same czynnosci bo nie chcialo ruszyc z dalsza instalacja.
  • poelcial jakis dziwny blad instalatora przez co zaczalem instalacje od poczatku. Przeszla bez problemu ale search pokazal ze obraz netinst Debiana 9 Stable (Stretch) mial blad uniemozliwiajacy instalacje!
    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=866629 I to w dystrybucji ktora zawsze byla uznawana za stabilna. W dystrybucji na ktorej Steam stoi...
  • zeby zainstalowac wifi musialem podpiac laptopa kablem. Oczywiscie okazalo sie ze musze wpiac kabel bezposrednio do lapka bo przez stacje dokujaca nie dziala (o tym juz kiedys pisalem, to akurat sprawka Della).
  • po zainstalowaniu sterownikow wifi, interface od wifi nie chcial sie podniesc (ifconfig wylecial juz z dystrybucji, teraz uzywa sie ip) I znowu zonk. Teraz juz wiem ze istnieje cos takiego jak RF-kill. Co ciekawe jak jest kabel wpiedy rfkill blokuje hardwarowo wifi wiec nie da sie nawet sieci wyszukac. ALE wystarczy wylaczyc i wlaczyc wifi przyciskiem z boku laptopa i dziala.
  • teraz juz wiem ze rfkill jest tez ladowany domyslnie do kernela
  • Plasma dziala jak chce raz zapmietuje ustawienia raz nie. Komu przeszkadzalo stare KDE :(
  • monitory dalej nie dzialaja i nie sa wykrywane.
  • zainstalowalem sterowniki Nvidii -> zamiast ekranu logowania black screen.
  • wywalilem sterowniki Nvidii przelaczylem sie z powrotem na nouveau.
  • Okazuje sie ze po odpieciu kabla od monitora i podpieciu z powrotem monitory wprawdzie dlaej sa niewidoczne w systemie ale jakims cudem pokazala sie na nich konsola tekstowa z jakims errorem
  • oczywiscie xrandr nie widzi ani monitora podpietego przeDisplay Portu ani przez DVI...

W tym momencie poszedlem spac. Ze smutnymi przemysleniami ze jak tak dalej pojdzie to niedlugo trzeba bedzie o Macu pomyslec...

12

co jakis czas dostaje ciezkiej choroby gdy widze juz w kolejnym projekcie ludzi ktorym "dobre praktyki" weszly za mocno, objawia sie to:

/**
* Default constructor
*/

albo

/**
* 50% of volume
*/
public static final double FIFTY_PERCENT = 0.5;

Po przeanalizowaniu kilku plikow nie znalazlam ani jednego sensownego/potrzebnego komentarza albo sensownie nazwanej stalej, tak sie zastanawiam, po co ludzie to robia, to jakis rodzaj uposledzenia chyba.

8

Miałem taki kod kiedyś, funkcja przyjmowała boola w postaci stringa a do niej była funkcja która wyjmowała z tego stringa bool jako bool. W tej funkcji były takie akcje typu.

if ( var == "true" || "TRUE")
    return true;

Generalnie dramat. Cały ten konstrukt to absurd.

edit:
Jak widać w kodzie wyżej geniusze nawet nie wpadli na to żeby zmienić string z automatu na małe bądź duże litery przy porównywaniu tylko ||. Dobrze że na nastolatkę w kodzie nie trafili TrUe.

2

Całkowicie nie programistyczny WTF.
Po 2,5 roku od zamknięcia działalności gospodarczej dostałem pismo od ZUSu, że nie opłaciłem jednej składki i od razu naliczyli ~200zł odsetek. Jasne, moja wina, bo błędnie założyłem, że składka w danym miesiącu jest za dany miesiąc (a jest za poprzedni), ale dobrze, że nie czekali 4y11m (po 5 latach przedawnienie), by naliczyć jeszcze większe odsetki.. mają telefon, mail, adres.. ale nie, poczekamy, odsetki polecą na 500+

3

title

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