Programistyczne WTF jakie Was spotkały

1

Wtf z dzisiaj:

W aplikacji jest struktura mniej więcej taka:

class Path {
     val versions : Map<String, String>
     val legacy : String
}

zadanie, wziać path w konkretnej wersji (decyduje klucz) a jak nie ma to legacy. Coś takiego spotkalem w kodzie:

var url : String = ""
path.versions.forEach {
    if (SZUKANY_KLUCZ.equals(it.key)) {
        url = it.value
        return@forEach
    }
}
if (url.isEmpty()) {
    url = path.legacy
}

Zamiast tego mozna bylo :

 var url = path.versions[SZUKANY_KLUCZ] ?: path.legacy
0

scala:

val consume = response => new Consumer().consumeToFile(response)

more scala:

val consume = new Consumer().consumeToFile(_)

the most scala:

val consume = new Consumer().consumeToFile _
6

Rządowy formularz o dofinansowanie w związku z covid19...

link do forumularza: https://psz.praca.gov.pl/documents/10240/2af46dcd-f239-45c4-924d-a0c0a0bffb9d
Wypełniam ten formularz u matuli na kompie. LibraOffice, jakiś nienajnowszy

Pierwszy WTF:
Trzeba tam wypełnić Obowiązująca pracodawcę stawka ubezpieczenia wypadkowego (w procentach)
No to pisze: 1,67 , dostaje: screenshot-20200509145013.png
Próbuję z kropką, to samo. WTF?

Ok, może ten LibraOffice jakis trefny. Otwieram przez Arkusze Google. Tu da rade wpisać ten procent. Wypełniam dalej. Trzeba wpisać pesel pracownika. Wpisuje. Dostaje:
screenshot-20200509144608.png
WTF ???
Sprawdzam w LibraOffice z powrotem. Tu da rade wpisać pesel, ale ciągle oczywiście nie mogę wpisać tego procenta.
Co więcej. Po pewnym czasie pojawia się takie coś:
screenshot-20200509145636.png

Tu już poległem....

Sprawdzam teraz u siebie na kompie na najnowszym LibraOffice. Niby wszystko działa... I już nawet reguły w messageBoxie informującym o złym peselu są przez u otwarte. Magic?

3

A to WTF który opisała Anna Streżyńska:
*
Propozycja nie do odrzucenia od ZUS: proszę złożyć wniosek ponownie, bo gdy Pani składała pierwszy raz, wniosek nie był zintegrowany z formularzem pomocy publicznej, a teraz jest zintegrowany i trzeba złożyć taki, jaki obowiązuje teraz.
*

https://www.linkedin.com/posts/annastrezynska_tarcze-dla-przedsi%C4%99biorc%C3%B3w-nigdy-nie-zadzia%C5%82aj%C4%85-activity-6664114732317978626-qEuN

4

Próba oceny rozszerzenia do Chrome (muszę w pracy używać, więc trzeba zagryźć zęby i korzystać)

Oceń to rozszerzenie
Ze względu na aktualną zmianę godzin pracy wstrzymujemy możliwość publikowania opinii w Chrome Web Store. Pracujemy przede wszystkim nad tym, by sklep Chrome Web Store był nadal stabilny i niezawodny, tak by mogli z niego bezpiecznie korzystać wszyscy użytkownicy, dla których jest on niezbędny.

Wygląda na to, że Google rzeczywiście ma rząd małp, które przepisują to, co użytkownicy im wyślą.

3

W mojej pierwszej pracy jako programista, zacząłem pracę nad pierwszym projektem w XQuery, który ma iść na produkcję. Przepisywaniem testów z przestarzałego frameworka na nowy. To jest dość "małpia" robota, bo trzeba po prostu kod z każdej funkcji wydzielić do jednego pliku, pozmieniać nazwy funkcji, itp. Oprócz tego trzeba było powydzielać zmienne z zapisanymi XMLami do osobnego pliku wraz z usunięciem duplikatów. Ten kod to był niezły śmietnik. W jednym module było od kilku do kilkunastu funkcji i bywało, że w kilku funkcjach zmienne lokalne potrafiły mieć dokładnie tą samą zawartość i niestety tą zawartością były XMLele, które potrafiły mieć po kilkadziesiąt linii kodu. Musiałem sobie w notatniku zapisywać nazwy starych zmiennych wraz z nazwami nowych zmiennych, które mają je zastąpić, aby to ogarnąć. Bywało, że zmienna z taką samą zawartością potrafiła mieć różne nazwy w poszczególnych funkcjach. W skrajnych przypadkach z 20 lokalnych zmiennych robiłem 3 zmienne po uwzględnieniu duplikatów.

15

Moje przygody z GTA skończyły się na części 2, kolejne 3D jakoś mnie nie ciągnęły, ale z racji, że jest teraz promka za free, znajomy rzucił hasło, to pomyślałem, że spróbować nie zaszkodzi.
Wbiłem na Epicgames i zostałem zmuszony do założenia konta. Standardowy formularz, a po nim... CAPTCHA, jakiej świat nie widział.
screenshot-20200519093859.png
Trzeba nacisnąć boczne ikonki by obrócić rysunek zwierzęcia (zakładam, że ma "stać na nogach", bo tego nie napisali). Pierwsze 5 są oznaczane checkboxem, więc wygląda, jakby trzeba było rozwiązać 5 kroków. Wystarczy zrobić ~3 sekundy przerwy i zonk:
screenshot-20200519095111.png
od nowa... lepiej! Raz zacząłem obracać w drugą stronę (już miałem kursor nad daną ikoną) i prawie cały obrót musiałem zrobić.. zonk! za wolno! od nowa!

Jak już miniemy 5 kroków, to okazuje się, że kroków jest 20! Każdy zajmuje od 1 do 5 sekund, w zależności jak daleko od pozycji docelowej jest obrazek, więc weźmy średnio 3s * 20 to daje minutę... Gdyby to była jedna minuta, to jeszcze można machnąć ręką, ale podchodziłem 3x i za każdym razem zonk!
screenshot-20200519092815.png
Niektóre zwierzęta moim zdaniem mają kilka sąsiednich pozycji, które można uznać za prawidłowe, więc to istne losowanie.

Zaczynam podejrzewać, że zaskoczył ich tłum Januszy i nie chcąc wycofywać się z oferty zrobili captchę, której nie da się przejść i mają spokój. Nie widzę innej opcji.

[edit]
Yup, potwierdzam swoją hipotezę, że captcha jest blockerem. Przełączyłem na audio, spróbowałem 3 razy, za każdym razem:
screenshot-20200519095646.png
zonk! A oceniam, że umiem usłyszeć 5 cyfr po angielsku...

12

W firmie przerzucili mnie ostatnio do projektu, który został przejęty od pewnej dużej-i-znanej-firmy, i był robiony przez indyjski oddział tejże firmy.
Dosłownie każda metoda wygląda tak:

<public/private> <zwracany typ> <nazwa metody> (argumenty) {
 try {
    <cała logika metody>
  } catch(Exception e) {
    return null;
  }
}

Brawo. Obsługa wyjątków na 5+.

16

Poprawiam dzisiaj cały dzień unit testy napisane przez dwóch arcytektów.
To, że testują kod, który zepsułem wczoraj, a mimo to wszystko było zielone to nic niezwykłego.
To, że właściwie każdy jest utworzony metodą kopiuj wklej też mnie nie dziwi.
To, że każdy jest parametryzowany, ale wywoływany wyłącznie z jednym zestawem parametrów, to zakrawa na lekki fetysz, ale się zdarza.
Bezsensowne nazwy metod testujących to też norma.
Ale tego, żeby metody testujące miały dokumentację XML to jeszcze nie widziałem. Ciekawe kto ją czyta? Test runner? :D

Przykład:

 /// <summary>
 /// Tests the whole flow for a handler with a service, with failure and message "not working" and result not returned
 /// </summary>
 /// <returns></returns>

Właśnie się zorientowałem, że to najtrudniejszy przypadek, pozostałe zawierają tylko tekst do przecinka. :D

8

W poprzedniej firmie senior uber developer wystawił api dla klienta, które powodowało, że każdy request w którym brakowało wymaganego pola rzucał wyjątek, bo próbował mapować nulle....
No i piękny response ze status code 200 :D wyglądał w stylu:

{
  "response": "error",
  "responseDetail": "if errors keeps occurring please contact admin"
}

Błąd oczywiście nigdzie nie zalogowany, bo po co. A jak klient zgłaszał błędy, to senior z wielkimi nerwami reagował, że to wina klienta, bo źle używa api.
Ale to już za mną.

1

title

4

taki mały WTF, wczoraj coś pisałem w jednym ze swoich projektów, a dzisiaj chcę posprzątać i zacommitować, a tam takie coś:

// throw new Error('kurwa')

:D
a nie pamiętam, żebym to pisał. Widocznie samo się napisało. Polska podświadomość.

2

Właśnie mam niezłe wtf. Właściwie pierwszy raz w życiu. Miewałem takie w których pomagał restart IDE/edytora. Miałem takie w których pomagało wylogowanie z systemu i takie w których pomagał restart. Jeden taki w którym kod dnia następnego działał, a poprzedniego nie. Teraz przyszłą kolej na nowe doznanie.

Mały jeszcze projekt API. Podzielony na 5 plików. Dla uproszczenia poruszam się w jednym pakiecie (Go). Taka oto struktura:

├── handlers.go
├── logger.go
├── main.go
├── routes.go
└── todo.go

Zero błędów w VSCode. Uruchamiam i dostaję:

# command-line-arguments
./main.go:9:7: undefined NewRouter

Myślę sobie - WTF. Przecież NewRouter() siedzi w środku:

func main() {
	r := NewRouter()
	log.Fatal(http.ListenAndServe(":3000", r))
}

func NewRouter() *mux.Router {
	router := mux.NewRouter().StrictSlash(true)
    // kod
	return router
}

Z racji tego iż mamy wieczór (wczoraj) zostawiam projekt. Dzisiaj jednak to samo. Zaprzęgam Goland, bo może tam coś więcej się człowiek dowie. Dowiaduję się wiele innych dziwactw, które spowodowane są brakiem konfiguracji IDE. Po trzech godzinach babrania się i szukania problemu w słynnym internecie postanawiam utworzyć nowy katalog, przenieść wszystko do jednego pliki main. Uruchamiam -> działa. Trafiłem na czarną dziurę czy o co tutaj chodzi?

5

Utwórz sobie najprostszy plik CSV, np:

a,b
c,d

Dodaj do niego dowolny nagłówek zaczynający się od "ID", np:

IDEA,POGRZANA
a,b
c,d

Spróbuj otworzyć go w Excellu.
Poświęć kilka minut na przeklinanie i dociekanie, na czym polega błąd.
Poszukaj w necie informacji, o co chodzi z tymi błędnymi plikami SYLK, o których Excell gada.
Zadumaj się nad meandrami ludzkiego myślenia.

9

Krótki dialog na 4 kopyta

On: - ...and lejto...
Ja: - łot?
On: - gugl font lejto... el ej ti oł
Ja: - dżast a sek... Oł aj si, samer font
On: - łot?!
Ja: [grin from ear to ear]

Komuś hen daleko spodobał się font
https://fonts.google.com/specimen/Lato
Lato
Designed by** Łukasz Dziedzic**

Lato is a sans serif typeface family started in the summer of 2010 by Warsaw-based designer Łukasz Dziedzic (“Lato” means “Summer” in Polish). In December 2010 the Lato family was published under the Open Font License by his foundry tyPoland, with support from Google.

Brawo dla Łukasza za więcej Polski na świecie

*Może front-endowiec załapałby w lot ale ja pierwszy raz usłyszałem o foncie Lato. No dobra, Times, Helvetica, Courier, Arial i może parę innych bym sobie przypomniał...
*

6

U mnie w projekcie:
a) nie ma testerów w całej firmie
b) do początku marca kod był wrzucany prosto na produkcję - teraz mamy wersję beta
c) szok i niedowierzanie że były błędy oraz hotfixy
d) brak automatyzacji - programiści ręcznie sprawdzają flow przed releasem
e) brak przypadków testowych - dopiero ostatnio zostały połączone trzy dokumenty w jeden żeby jakoś smoke tests zrobić. Jest tyle pożarów że nie ma czasu na zrobienie smoke a jest tyle pożarów z powodu że nie ma czasu.
f) 20+ programistów androida którzy depczą sobie po palcach - zadania podzielone prawie co do zmiany znaków w xmlu. Każdy chce robić funkcjonalności (ja nie, w punkcie i jest napisane co robiłem) a nie zajmować się legacy code / refactorem
g) brak stagingu / preproda - jak miałem pierwszy raz zmienić stringi w localize i zapytałem się menago: "hej podaj link do stagingu dla loco chcę wrzucić zmiany do stringów i je przetestować" dostałem odpowiedź: Jesteś pierwszym programistą który się o to zapytał. Reszta waliła zmiany bezpośrednio do loko bez walidacji na proda
h) pixele w widokach
i) wywaliłem w projekcie 6k linii w tym 600+ linii styli które były zakomentowane - to jeszcze nie jest koniec...
j) wersja beta o której mówiłem w punkcie b tydzień temu 10 razy miała faila podczas budowania
k) dodane zostały testy ui - są zielone tak w 40% - reszta to false negative i czerwienią się przez np timeouty
l) mamy pokrycie testami 50+ ale jest tak zespolone z kodem że prawie nie do ruszenia
m) nie mamy flow to ekstrakcji logiki biznesowej - każdy klepie jak mu się podoba
n) jeden programista (który notabene jest bardzo dobry) napisał plugin do android studio żeby generować stuby kodu dla naszej wspaniałem architekury

Uff trochę mi lepiej

7

No chyba żartujecie..

a.png

1
Mac MarekR22$ pwd
/Users/MarekR22/Src/Baddll
Mac MarekR22$ ls
CMakeLists.txt		baddll.cpp		dllmain.cpp		dllmainMacOS.cpp	stdafx.cpp		stdafx.h		targetver.h
Mac MarekR22$ git mv dllmain.cpp dllmainWin.cpp
fatal: not under version control, source=Baddll/dllmain.cpp, destination=Baddll/dllmainWin.cpp
Mac MarekR22$ echo "// what is going on?" >>dllmain.cpp
Mac MarekR22$ git status
On branch improvement/newFeature
Your branch is ahead of 'origin/improvement/newFeature' by 1 commit.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   CMakeLists.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   ../baddll/dllmain.cpp

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	dllmainMacOS.cpp

Kod napisany był pod Windows. Klon na MacOS, robię modyfikację (nie tworzyłem żadnych katalogów).
dllmain.cpp przyszło z rego, ale nie moglę zmienić mu nazwy.
git status wyjaśnia sprawę, git widzi i rozróżnia dwa katalogi baddll i Baddll (wielkość pierszej literki) file system tylko jeden z nich.
Pewnie ktoś poprawił nazwę katalogu (na Capital) i równocześnie ktoś inny dodał plik w tym katalogu i po merge zrobił się taki kwiatek.

3

Mniej programistyczne ale jednak.

ageupbhkrq651.png

4

Notacja węgierska czasem bywa zabawna:

sra.png

Gdyby ktoś się zastanawiał skąd się bierze prefiks sra, to z typu TStringReplaceAlgorithm:

type
  TStringReplaceAlgorithm = (
    sraDefault,    // Default algoritm as used in StringUtils.
    sraManySmall,  // Algorithm optimized for many small replacements.
    sraBoyerMoore  // Algorithm optimized for long replacements.
  );

Szczególnie zabawnie wygląda ostatni enum. :]

5

Kotlin pozazdrościł JS logiki. Dzisiaj natknąłem sie na błąd w buildzie release, szukam i nie moge znaleźć, unit testy na zielono, przeglądam logi, analizuje kod biorąc pod uwagę to co w logach, no powinno być ok. Wtedy mnie natchnęło i zrobiłem mały kod testowy..

fun main(args: Array<String>) {
    val var1 = (false == true and (true != true))
    val var2 = (false == true && (true != true))
    
    println("$var1 $var2")
}

Wynik? "true false"

5

Z cyklu nowoczesne layouty stron, chyba ktos chcial zrobic dobry uczynek i sprawic by ludzie majacy pivot w monitorze uzyli go drugi raz :)

https://qntm.org/clean

Edit: ale pomijajac formatowanie, calkiem ciekawy artykul. Podoba mi sie.

11

OLX zmienił font. To jest Ili (tak, na końcu jest małe i - nie widać? :D )
screenshot-20200707133725.png

I teraz patrząc na logo nie wiem, czy to nadal OLX czy może OIX a może OiX? Ewentualnie O|X, czyli takie trochę kółko i krzyżyk (nikt nie wygrywa).

1

Ustawienia konta Google
https://myaccount.google.com/privacycheckup

[tu mój prywatny numer kom.]
Help people identify you via this number
People who have this number will be able to see your name & photo, and identify things you’ve posted on Google services like reviews on Maps & comments on YouTube.

3

Hobbystycznie bawię się elektroniką i ostatnio grzebię sobie w AVR za pomocą c++ w AtmelStudio.
Cały program sterownika napisałem w 4 godziny ale poległem na czymś czego bym się nie spodziewał, mianowicie na konwersji typu uint8_t na int8_t

Może przykład:

  uint8_t bezZnaku = 0xFF ; // powinno dać -1 jako int.
  int8_t zaZnakiem = 0 ;  

Wydawało by się, że sprawę załatwi :

zaZnakiem = (uint8_t)bezZnaku ;
lub 
zaZnakiem = uint8_t(bezZnaku) ;

Dodam, że w C++ jestem "noga" podobnie jak z samym AVR jednak ogólne pojęcie o rzutowaniu typów, konwersjach, formatach zapisów liczb ujemnych itp ... mam.
Po 2 godzinach zmagania się z żywiołem zacząłem szukać pomocy w sieci znalazłem https://stackoverflow.com/questions/3892924/conversion-of-uint8-t-to-sint8-t/3893697
Przetestowałem prawie wszystkie pomysły, które tam zapodali i ciągle nic ...

Niestety ciągle walczę bo są jeszcze optymalizacje kompilatora ...

Godzina 2:16 udało się choć wątpliwości pozostają.

    int8_t uintToInt ( uint8_t x ){
      volatile int8_t newX = ( (union { uint8_t u; int8_t s; }){ x }).s;
      return newX ;
    }

... kur... nie życzę nawet wrogowi :-)

13

Miałem taki shower-thought, czy pierwiastek z liczby urojonej (i) jest rzeczywista. Spytałem google'a:

screenshot-20200715201640.png

Wtf? Skąd 0.13? Skąd brasil? Skąd USD? :D :D

Wyjaśnienie: Google rozczytał to jako "what is the square root of (i of real's)" - "jaki jest pierwiastek z i reali" (real to waluta).

3

Kilkuletni developer mokujący już nie tylko zależności, ale już same klasy które testuje sprawdzając tylko czy wywołując metodę nie rzuci wyjątkiem

6

Wywód PMa: programista nie moze byc zbyt inteligentny, ani miec za duzo wiedzy, bo robi rzeczy, ktorych nikt nie rozumie.

7

Patrzę sobie dziś po południu na pulpit, a tam siedzi jakiś plik test.exe nie wiadomo skąd. Że głupia nie jestem, to go nie odpaliłam, tylko wrzuciłam w VirusTotal. Kilka mniej znanych silników antywirusowych zaśpiewało, że są tam jakieś trojany. Tego typu mniejszościowym raportom niekoniecznie trzeba wierzyć, ale w sytuacji, gdy na naszym pulpicie pojawia się nagle plik z nieba, sprawa wymaga rozważenia. Szybkie teorie nr: 1-3:

  • pobrałam to niechcący z netu,
  • zapisałam z załącznika poczty,
  • rozpakowałam z archiwum,
    nie znalazły potwierdzenia.

Szybkie teorie nr 4-5:

  • zrobił mi to któryś z zainstalowanych wczoraj programów,
  • admini 4p dokonali przyjacielskiej rewizyty na moim pulpicie w rewanżu za wczorajsze XSS,
    okazała się cokolwiek trudna do weryfikacji.

W ruch poszedł ESSET (który niczego prawie nie znalazł, a rzeczony plik w ogóle olał), a ja poszłam z kotami na spacer.

Po powrocie kontynuowałam dociekania i w końcu oświeciło mnie:
Eksperymentując wczoraj z BAT-em uruchamiającym sekwencje plików w zadanej kolejności i odstępach czasowych, niechcący wybrałam z menu kontekstowego: "Compile with Advanced BAT to EXE" i sama sobie ten magiczny plik zrobiłam.

Czyli admini 4p jednak nie są znowu tak mściwe bestie :p Ale ten spacer z kotami to jednak przechodziłam na niezłej schizie :pp

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