Programistyczne WTF jakie Was spotkały

Odpowiedz Nowy wątek
2009-04-03 11:31
rnd
11

Dziś w pracy moim oczom ukazała się klasa na 30k linijek. W jednym pliku.
Jeszcze jestem w szoku :-D
A jakie Wy mieliście WTF?


#define TRUE FALSE
//Happy debugging suckers :D
edytowany 2x, ostatnio: Demonical Monk, 2011-12-04 00:47

Pozostało 580 znaków

2018-03-30 13:08
4

Nie wiem czy było, mam nadzieję że nie:

if ($act_number)
{
    $act_number = $act_number;
}
else
{
    throw new Exception("Документ еще не подготовлен.");
}
for ($i=0 ; $i<3 ; $i++) {
  switch($i) {
    case 1:
      // do some stuff
      break;
    case 2:
      // do some stuff
      break;;
    case 3:
      // do some stuff
      break;
  }
}

Jest tego więcej na shitcode.

No przecież masz jak wół, że документ еще не подготовлен ;-) - Azarien 2018-04-01 17:20
Mialem przyjemnosc poprawiac lokalizacje po rosyjsku. Czulem sie jak malpka, wyszukiwalem nic nei znaczacy dla mnei ciag dziwnych znaczkow i zamienialem na inny. - WhiteLightning 2018-04-01 17:25
dzięki za ten link. Bardzo się przydał. - WeiXiao 2018-04-04 14:31
for/switch tego typu ma sens na uC jako pseudo wielozadaniowość - Marooned 2018-04-05 13:23

Pozostało 580 znaków

2018-04-04 09:34
4

Czysty kod ...


if (/* jakis warunek */)
{
   // ciach ...
   while ( /* ciach */)  
   {
       switch (/* costam */)
       {
           case jakis_case:
               // ciach...
               if (/* jaki warunek */)
               {
                   while (/* costam */)
                   {
                       if (/* costam */)
                       {
                           // i jeszcze pare ifow
edytowany 1x, ostatnio: nalik, 2018-04-04 09:35
oj tam, oj tam - clean code to tylko wskazówki :D - robertwadowski 2018-04-04 12:34
Pewnie chodziło o wydajność, przecież wiadomo że wywołanie funkcji wymaga dodatkowych operacji na stosie (co najmniej dwóch). :D :D :D - vpiotr 2018-04-04 12:53
No przecież są wcięcia! - somekind 2018-04-04 16:49

Pozostało 580 znaków

2018-04-05 12:34
0

Koledzy ucza sie pisac unit testy na produkcyjnym kodzie. :)

@Test
public void testNotNull() {
    boolean x = getSomething();
    Assert.notNull(x);
}
edytowany 1x, ostatnio: furious programming, 2018-04-05 15:59
Może być i w drugą stronę: if( !getSomethingBoolean()) - oczywiście funkcja zwraca null to jirze którą naprawiam. - vpiotr 2018-04-05 13:12
tak zwana logika trzy wartosciowa w Java'ie :) - Leroy 2018-04-05 14:46

Pozostało 580 znaków

2018-04-06 02:30
11

Dziś w pracy parsknąłem śmiechem, bo zobaczyłem to:

let isVisible = !isDriveWise ? true : false
someNotification(isVisible)

Tak isDriveWise to Bool. Przy czym wszyscy w zespole mają +3lata doświadczenia.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: furious programming, 2018-04-06 13:27
Chodzi Ci o sam smieszny ternary expression czy fakt zapisania tego do zmiennej? Bo fakt, można było zrobić let isVisible = !isDriveWise, ale już someNotification(!isDriveWise) byłoby mniej czytelne. - dzek69 2018-04-06 07:47
ternary operator oczywiście. A co do nadmiarowej zmiennej to swift ma fajny feature że argumenty magą być poprzedzone opisem, więc nadanie lepszej nazwy nostryfikacji jest bardziej eleganckie: carsListUpdated(allVisible: !isDriveWise). - MarekR22 2018-04-07 06:03
Ale za to mamy explicit podane jakiego typu jest isVisible :D (śmieszny fakt - na wcześniejszych wersjach sourcekita dynamiczna analiza gubiła się przy inferencji typów i dopiero odpalenie full kompilacji dawało ci feedback czy to co napisałeś rzeczywiście ma sens) - loza_szydercow 2018-04-18 20:53

Pozostało 580 znaków

2018-04-06 06:42
0
let array = [ 1 , 2 , 3 ] ;
array.pagination = 'dowolny string'

JS <3


Nie byłbym sobą gdybym był kimś innym
edytowany 1x, ostatnio: furious programming, 2018-04-06 13:26
Czekam na wtfa. PHP: $array = [1,2,3]; $array['pagination'] = 'dowolny string'; - dzek69 2018-04-06 07:49
A to jest stare, trochę gość kłamie, no i wykazuje mocny brak wiedzy o js - dzek69 2018-04-07 18:12
Ale gdzie tu wtf? - TomRiddle 2019-03-06 15:09

Pozostało 580 znaków

2018-04-17 15:07
5

JS. Ktoś piszący wcześniej przejmowany przez nas projekt wybitnie nie był w stanie pojąć, na czym polegają testy:

console.log("RUN WITH SUDO IF NOTHING HAPPENS, NEED PERMISSION TO FILE SYSTEM");
console.log("RUN WITH SUDO IF NOTHING HAPPENS, NEED PERMISSION TO FILE SYSTEM");
console.log("RUN WITH SUDO IF NOTHING HAPPENS, NEED PERMISSION TO FILE SYSTEM");
console.log("RUN WITH SUDO IF NOTHING HAPPENS, NEED PERMISSION TO FILE SYSTEM");
console.log("RUN WITH SUDO IF NOTHING HAPPENS, NEED PERMISSION TO FILE SYSTEM");
console.log("RUN WITH SUDO IF NOTHING HAPPENS, NEED PERMISSION TO FILE SYSTEM");

/* ... inicjalizacja oparta na wywołaniach setTimeout z czasami wyznaczonymi empirycznie ... */

var stepOne = false;
var stepTwo = false;
var stepThree = false;
var stepFour = false;
var stepFive = false;
var stepSix = false;
var stepSeven = false;
var stepEight = false;

I dalej, w każdym teście coś w rodzaju (dla każdego stepOne, stepTwo...):

describe('...', function() {
    this.slow(8000);
    this.timeout(5000);
    it("should get ...", function(done) {
        var check = function() {
            if (stepSix) {
                doIt();
            } else {
                setTimeout(function() {
                    check();
                }, 300);
            }
        };
        var doIt = function() {
            testedObj.someCallback = function(url) {
                stepSeven = true;
                done();
            };

            testedObj.doSomething();
        };
        check();
    });
});

I tak aż do ostatniego testu, w którym zamiast done() wywoływano w końcu jedyny w całym pliku z testami expect...

Powinien zostać artystą z takim zamysłem :D Tam przynajmniej nie trzeba manuala, bo jak widać manual tego gościa boli. - dzek69 2018-04-19 16:15

Pozostało 580 znaków

2018-04-19 15:51
Skromny Rycerz
2

Aha. FULL

java.png

  • java.png (0,02 MB) - ściągnięć: 35
Przecież masz u góry czytelny komentarz tłumaczący istotę istnienia tej klasy. - Patryk27 2018-04-19 15:54
Fajna ciekawostka, ode mnie plus, pośmiać też się można - dzek69 2018-04-19 16:15
Haki wydajnościowe to nie WTFy. - somekind 2018-04-19 22:03
Komentarz wszystko wyjaśnia :-) fajne - AreQrm 2018-04-20 15:44

Pozostało 580 znaków

2018-04-20 16:31
3

Zagwozdka javowa z dzisiaj. Mamy poglądowy kod (krótkie PoC, dużo łatwiejsze do analizy niż prawdziwy kod, wiec nie cieszcie się jak się domyślicie o co chodzi :P):

public class CatchTheBall {

    public void aintThrowingNothing() {
        try {
            function1();
            function2();
        } catch (Exception e) {
            throw e;
        }
    }

    private void function1() throws IllegalArgumentException {
        //whatever
    }

    private void function2() throws IllegalStateException {
        //whatever
    }
}

Nasza metoda aintThrowingNothing nie rzuca żadnego checked exception, mimo że mamy tam

        } catch (Exception e) {
            throw e;
        }

czyli ewidentnie rzucamy tam jakiegoś Exceptiona.

Co ciekawe jeśli zmienimy ten kod na:

        } catch (Exception e) {
            Exception ex = e;
            throw ex;
        }

czyli de facto tylko przypiszemy sobie e do nowej zmiennej (tego samego typu!) to nagle kompilator zaprotestuje i stwierdzi ze nie mozemy sobie rzucić checked exception bez deklarowania że go rzucamy albo bez try-catch.
@jarekr000000 @rubaszny_karp @Krolik @Koziołek

Nie będę spoilował o co chodzi ;)


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 2x, ostatnio: Shalom, 2018-04-20 17:14
Pokaż pozostałe 22 komentarze
@katelx: lubi C lang'a i nawet w javie jadą na kodach błędu. - rubaszny_karp 2018-04-21 13:35
Oj @rubaszny_karp... w czasach programowania łupanego faktycznie tylko te dwie opcje były. Czas wyjść chociaż na sawannę. - jarekr000000 2018-04-21 13:40
stare dobre -1 swietnie spelnia swoja role np jako nieprawidlowa/brak ceny a 0 jako dowolna cena. potem ktos stwierdza ze zamiast tworzyc nowe pole w buforze mozemy przeciez uzyc pola cena do przesylania spreada (t.j. roznicy w cenach) w niektorych wypadkach, bo tak bedzie szybciej :) - katelx 2018-04-22 14:36
@katelx: stare to tak, ale co w tym dobrego to nie wiem. Gorsze nawet of nulla, a od checked exception z pewnością. Takie magiczne wartości to błaganie o kłopoty. W krytycznym kawałku kodu, gdzie walczy się o cykle/gc, jak najbardziej dopuszczalne. Ale poza tym - dramat. - jarekr000000 2018-04-22 20:47
@jarekr000000: chyba sie nie zrozumielismy, wlasnie sie nabijam z takiego podejscia - ze ktos sobie uzywa wesolo magicznych wartosci a potem nagle sie okazuje ze w sumie to moga miec one biznesowy sens i tak powstaja dziury ;) - katelx 2018-04-23 15:26

Pozostało 580 znaków

2018-04-20 17:26
0

@Shalom Jak ogarniasz takie ciekawostki - tu jest podobna świnia, którą można było podłożyć od 1.5.
Tym razem numer wycina erasure w genericsach. Zresztą, częć gości uznaje to za błąd w języku - do dziś chyba nie ma koncepcji co z tym zrobić...

public class Swinia {

    public static void swinia(){
        Swinia.<RuntimeException>oops(new Exception("pieknie"));
    }

    public static <T extends Exception> void oops(Exception toThrow) throws T{
        throw (T) toThrow;
    }

    public static void main(String[] args) {
        try {
            swinia();
        } catch (Exception e) {
            System.out.println(e);
            System.out.println(e.getClass());
        }
    }
}

Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 3x, ostatnio: jarekr000000, 2018-04-20 17:28
Pokaż pozostałe 4 komentarze
@Krolik: porządnym statycznym systemem typów .Właśnie pisze kolejny projekcik w Scali... i o ile lubię ten język, to system typów, który jest przypadkowo zupełny w sensie Turinga to raczej nie jest efekt porządku. - jarekr000000 2018-04-21 08:07
Ale oryginalne generyki w Javie były bliższe temu co masz w Scali. Zresztą ten sam team to pisze. Zapamiętać - zapytać Wadlera lub Oderskyego dlaczego im nie wyszło. - Koziołek 2018-04-24 11:35
@Koziołek: jakie oryginalne generyki? Dziś może znowu zapytam Briana Goetza o java.util.Optional... mam już bandaż i waciki jakbym dostał za bardzo w nos. - jarekr000000 2018-04-24 12:09
@jarekr000000: https://homepages.inf.ed.ac.uk/wadler/gj/ te które były modułem do kompilatora w JDK 1.1 :D - Koziołek 2018-04-24 12:13

Pozostało 580 znaków

2018-04-24 12:08
4

To teraz klasycznie. Mamy sobie aplikację napisaną w SAG Web Methods CAF, czyli takiej nakładce SAG na stare portlety (JSR 168), zatem wiele rzeczy jest delikatnie mówiąc "trudnych w obyciu". Jednym z bardziej kłopotliwych elementów jest komunikacja z usługami zewnętrznymi, a tu wykorzystujemy starego dobrego SOAPa. I nie ma w tym nic złego, ponieważ chcemy m.in. mieć możliwość zarządzania użytkownikami i ich uprawnieniami za pomocą SAML. I tu na scenie pojawia się WTF.

Zadanie brzmi wywołaj usługę zewnętrzną (poza aktualną domeną biznesową). Normalnie robimy, to w dość prosty sposób. Przyciks-> wywołanie naszego proxy -> wywołanie usługi właściwej. TYm razem jednak chcemy by właściwa usługa była wywołana z użyciem SAMLa operatora. Zatem...

Uruchamiamy naszą aplikację webową w specjalnie zmodyfikowanym IE, które przy ładowaniu strony prześle nam SAML operatora. Następnie wywołamy usługę bezpośrednio z JS. Zatem mamy już dwa WTFki - IE i SOAP z JS. Jednak wszystko to na głowę bije WTF numer trzy. Jeżeli SAML wygaśnie, to mamy wyświetlić klientowi alert o konieczności przelogowania się w aplikacji, bo nie ma możliwości odnowienia SAMLa w inny sposób. SAML wygasa co 5 minut. Kurtyna.

#portlety = #SNAFU - vpiotr 2018-07-04 21:02

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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