Programistyczne WTF jakie Was spotkały

Programistyczne WTF jakie Was spotkały
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
4

Lecimy dalej, bo w ramach wdrażania się w projekt robię za "Dezynsekcja, dezynfekcja, deratyzacja", czyli doprowadzam kod do stanu akceptowalnego przez Sonara.

Dziś dwa słowa o "magii" widoczności w javie.

Kopiuj
package a.b.c

public class SuperClass{

   protected Cośtam metoda(){
      return cośtam;
   }
}

Mamy sobie superklasę z metodą protected, która to metoda jest widoczna w dziedziczących i w pakiecie a.b.c. Wszystko ok? Zatem tworzymy podklasę

Kopiuj
package a.b.d

public class PodClass extends SuperClass{

   @Override
   protected Cośtam metoda(){
      return super.metoda();
   }
}

Która jest w pakiecie a.b.d i która nadpisuje metodę z superklasy tak jak na listingu. Pytanie po co to robi?

Odpowiedź jest sobie inna klasa w pakiecie a.b.d, która koniecznie musi korzystać z metody, a jako, ze ta jest protected w superklasie zatem jest nieosiągalna dla klas z pakietu a.b.d. Tworzy się zatem sztuczną klasę, której zadaniem jest.... tunelowanie widoczności metody.

Tak też nazywam ten magiczny wzorzec wprost z Czelabińskich klimatów.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
Wibowit
ja tu bardziej widzę 'magię' architektury projektu. ktoś coś skopał.
Koziołek
Magia na poziomie architektury wynika z możliwości odprawienia rytuału na poziomie klas. Silnie powiązana z językiem.
KR
Java jest czasem wnerwiająca z tą swoją widocznością pakietową. Nie da się zrobić metody widocznej w całym pakiecie wyższego poziomu, można tylko publiczną bądź ograniczoną do najbardziej zagłębionego pakietu. Opcja pośrednia jest akurat często potrzebna.
Koziołek
I po to masz public, albo przenosisz do pakietu wyżej. Po to by położenie metody miało sens na poziomie organizacji kodu.
KR
O położeniu metody decydują inne czynniki niż jej widoczność (choćby dane na których operuje, albo po prostu metoda jest naturalna dla danego typu obiektu). Efektem braku hierarchicznego package private jest to, że w Javie większość metod ma tendencję do stawania się public. W Scali jest to zrobione lepiej. Bardzo często chcemy, aby kod użytkownika nie grzebał nam po bebechach biblioteki. Wtedy private[pakiet] robi dokładnie to, co trzeba.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 5 godzin
16

Kiedyś "obowiązywało" Login i Register. I wszystko jasne.

Nastała moda na Sign up i Sign in i za cholerę nigdy nie pamiętam które jest które.

wth.jpg

  • wth.jpg (6 KB) - ściągnięć: 108
Zobacz pozostały 1 komentarz
msm
@Azarien - http://ux.stackexchange.com/questions/11936/when-to-use-join-register-or-sign-up - Log in / out is more technical sounding than sign in / out, I would opt for sign in / out simply because it is more human speak.. Że niby sign up/in jest bardziej "human"? Dziwne, mam dokładnie takie same odczucia jak Ty. Cóż, może jestem słaby z mówienia po ludzku.
Azarien
Różnica między “sign up” a “sign in” jest taka sama jak między „zapisać się” a „wpisać się” – np. „zapisz się do nas” a „wpisz się na listę obecności”. Problem tylko w tym, że nigdy nie wiem które jest które ;-)
AL
@Azarien to wbrew pozorom spory temat, nie wiem czy czytujesz Coding Horror Jeffa Atwooda: http://blog.codinghorror.com/the-god-login/
vpiotr
@Azarien: To jest true WTF dla UX. Nawet jak napisałeś to po polsku to miałbym trudność z decyzją...
Marooned
true story, bro! Po prostu dla nativów to jest lepsze, dla reszty świata już niekoniecznie.
ShookTea
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 6 lat
  • Lokalizacja:Wrocław
  • Postów:629
1

@Azarien
GitHub:

  1. Sign in/up/out
  2. Na stronie głównej zamiast formularza logowania mamy formularz rejestracji, który od poprawnego logowania (ukrytego pod przyciskiem) różni się w praktyce tylko tym, że ma jedno pole więcej: rejestracja ma oddzielnie login i e-mail, a przy logowaniu można podać to lub to.

vpiotr
Na GitHub ktoś pomyślał, bo te dwie funkcje na głównej stronie różnią się wyglądem, przez co można wywnioskować co do czego. "Sign in" - przycisk dla stałych klientów u góry (czyli pewnie tych co mają konto). "Sign Up" to od razu cały formularz - przez co można wnioskować że do rejestracji. Inna wskazówka: "Pick a username" - raczej tego się nie robi dla konta które już masz.
ShookTea
Chodziło raczej o to, by można było się domyślić, co do czego służy, na pierwszy rzut oka, a raczej ten "rzut" nie skupia się na bladych napisach w tle :P
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
9

Z serii dżender jest wszędzie.

Implementacja w klasie o nazwe AbstractPersistentEntity, która to klasa nie jest klasą abstrakcyjną...

Kopiuj
public boolean equals (Object o) { 
   return true; 
} 

Wszyscy równi...


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
JA
Tak jakoś mi się z wierszem Herberta skojarzyło takie równanie wszystkich- https://www.youtube.com/watch?v=8Y44dfd5Jn4 :)
Riddle
a jaki hashCode?
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
2

Germański programista II...

Jest sobie coś co się nazywa InitServlet, w którym startuje sobie aplikacja. Serwlet robi dużo dziwnych rzeczy m.in. udaje, że nie ma JMXa na maszynie i wypisuje wszystkie zainstalowane biblioteki, robi jakieś magie konfiguracyjne i kontrolne środowiska itp. metoda init ma jedynie 500 linii, a na samym początku mamy:

Kopiuj
if (debug)
   (new Throwable()).printStackTrace();

by nie było, że sobie jaja robię z jakiegoś n00ba. Mówimy o kodzie faceta, który programował jak ja jeszcze u ojca z jaja na jajo radośnie skakałem, a w samej Javie gość robi od początku czyli już 20 lat.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
AL
dupa-debug ftw? ;)
Koziołek
@alagner coś wyższego rzędu, bo wypisuje cały stack więc można, teoretycznie, sprawdzić kilka informacji o środowisku.
11

wypłata Western Union na konto w bankomacie BZ WBK

user image

teraz mi będzie brakowało 0,0000000000001 zł :/

Koziołek
Piękne w dodatku orżnęli cię na 1 grosz.
Sarrus
Teraz "mogę być winna 1 grosik" również w bankach :P
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
2

Germański programista III

Nadal sprzątam kod po naszym szwabiszku...

Kopiuj
if (true) { // Always add the report parameters, as they identify this report

Czy ktoś może mi powiedzieć o co temu panu chodzi?


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
Zobacz pozostałe 11 komentarzy
wasiu
Na stawki nie ma co patrzeć, bo 100-125€/h to standard. Tylko z tego trzeba utrzymać biuro, sprzęt, wyjazdy firmowe, project managerów, sekretarki, hr'y no i kierownika. Klient z reguły kasowany jest tylko za dzień pracy programisty pomijając całą resztę jaka wydawana jest na prowadzenie firmy :)
krzysiek050
Ja obstawiam że kiedyś tam było po prostu if(false) do tymczasowego wyłączenia funkcjonalności. Później chwilowo zmienione na true, a jeszcze później zapomniane bo tak działało dobrze.
Koziołek
@wasiu to jest stawka pojedynczego kontraktora. @krzysiek050 continuous delivery dla featurów, które klient może sobie włączyć.
wasiu
Nie, no nie chce mi się wierzyć. Toć górne widełki dla kontaktorów to 500-600€ dzień i to też tylko przy dużych projektach. Z kolei stawka jaką firmy kasują klienta za dzień pracy deva waha się w okolicach 1000€/dzień tylko ona musi uwzględnić wszystko o czym pisałem wyżej.
Koziołek
Podpowiem jeden z największych banków na świecie. Projekt z okazji regulacji na Risk Market.
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
9

Germański programista IV

Łapanie wyjątków powinno być łatwe proste i przyjemne...

Kopiuj
 catch (Exception e) {
            String name = e.getClass().getName();
            if ("org.apache.catalina.connector.ClientAbortException".equals(name)
                    || "java.net.SocketException".equals(name)) {
                // These simply indicate that the client has closed the connection prematurely
                logger.info(e.toString());
            } else {
                throw new IOException(e);
            }
        }

Obie klasy są w classpathie.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:minuta
2

Mam projekt który używa poco.
Gdzieś w swojej klasie mam metodę GetUserName w innym miejscu używam tej metody, ale nie działa.
Najpierw zaskoczenie, że auto-uzupełnianie chce mi wstawić GetUserNameW i wtedy się buduje.
Po długiej i bolesnej analizie znalazł się winny plik nagłówkowy: "c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\WinBase.h"
Ma coś takiego:

Kopiuj
#ifdef UNICODE
#define GetUserName  GetUserNameW
#else
#define GetUserName  GetUserNameA
#endif // !UNICODE

WTF, kto pisze takie makra i to w czymś co jest powszechnie używaną biblioteką? Jakim cudem przeszło to review?
Czy nie mogli po prostu zrobić funkcji inline w rożnych wersjach dla UNICODE?


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
msm
Nie chcę Cię martwić, ale takich funkcji są setki w WinAPI :P. Niektóre nowsze wspierają tylko unicode, ale swego czasu (od Windowsa NT Windows jest natywnie unikodowy, a część wcześneij) praktycznie wszystkie funkcje dostały swoje makro i brata bliźniaka. Ad. Jakim cudem przeszło to review? - tego raczej nie wymyślił junior, tylko to jedna z ważniejszych definicji projektowych. A o powody to już ich musisz pytać :P.
Azarien
staaaare :-) a wymyślali to w czasach, kiedy takie rzeczy review przechodziły (okolice 1993).
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 5 godzin
3

Grzebię w źródłach Quake'a (jedynki). Zamysłem było zaimplementowanie soundtracka z mp3/ogg zamiast cd-audio i pozbycie się DirectDraw (interesuje mnie oryginalny software'owy renderer, wszystkie istniejące sourceporty zajmują się tylko OpenGL).

Ale ten kod jest straszny. Kod specyficzny dla systemu (DOS/Win/Linux/Mac) wymieszany z kodem wspólnym, częściowo pod ifdefami, częściowo pod zwykłymi ifami, a częściowo na zasadzie „jeden plik .h i kilka specyficznych dla systemu plików .c do wyboru”; funkcje na kilkaset linii (robiące zdecydowanie więcej niż „jedną rzecz”).

Całość oczywiście nieobiektowa, w C.

Wniosek: można mieć burdel w kodzie a i tak osiągnąć sukces :D

/Aż dziw że ludziom się chce, jak patrzeć na to co potrafią różne sourceporty/

edytowany 2x, ostatnio: Azarien
satirev
Nie wiem co w tym dziwnego. Wystarczy spojrzeć na np. CryEngine, Steam, czy RakNeta, tam także kod jest wtf-owy ale koniec końców działa i to zaskakująco dobrze.
Azarien
działać działa, ale że ludzie chcą w tym grzebać gdy nikt im za to nie zapłaci.. ;-)
satirev
Tutaj zgoda ; )
xxx_xx_x
"funkcje na kilkaset linii (robiące zdecydowanie więcej niż „jedną rzecz”)" - kazde wywołanie funkcji to był spory narzut w tamtych czasach, "Całość oczywiście nieobiektowa, w C." - tutaj to samo, obiektowość miała znaczący wpływ na prędkość aplikacji. W programowaniu gier rezygnuje się z czytelności kodu na rzecz prędkości. Teraz już jest z tym nieco lepiej bo mamy mocne komputery i większość operacji można przenieść na kartę graficzną.
Azarien
inicjalizacja trybu graficznego to nie jest miejsce gdzie trzeba tak strasznie oszczędzać, zwłaszcza że gra testuje kilka trybów przed wybraniem jednego, co trwa. a co do czytelności - pod DOS-em gra obsługuje dźwięk przez kartę GUS (snd_gus.c) albo SoundBlaster (snd_dos.c). I jest ładnie. Pod Windows już gorzej - DirectSound i WaveOut, oba w jednym pliku snd_win.c, na zasadzie if (directsound) { ... dużo kodu ... } else { ... jeszcze więcej kodu ... }. No nic, kod jest jaki jest i trzeba będzie go ogarnąć.
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:minuta
0

Zmień apple id lub hasło i przejdź "prostą" procedurę:
https://support.apple.com/en-us/HT204071
Najzabawniejsze jest to, że na OS X chce usunąć wszystkie kontakty wpisy do kalendarza itd, mimo, że nie robił backupu do iClouda od pół roku i nie da się tego obejść.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
LA
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 9 lat
  • Lokalizacja:Biłgoraj
  • Postów:54
0

Właśnie stawiam serwer na tablecie. O dziwo działa.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Pozdro, Lauro.
Zobacz pozostały 1 komentarz
LA
Miałem jeszcze do wyboru laptop sprzed 2000, z Win8, na którym nie mam uprawnień administracyjnych. I tablet jest zdecysowanie lepszym rozwiązaniem, ale i tak jak to brzmi: "serwer WWW na tablecie" ;p
ShookTea
Nie mówi się o dziwo, tylko o panienko ~~ ksiądz sucharotwórca
Azarien
"laptop sprzed 2000, z Win8" O_o masz UB bo Win8 oficjalnie wymaga procesora z SSE2, a pierwszy procesor z tymi instrukcjami wyszedł w roku 2000.
ShookTea
@Azarien mam wrażenie, że chodziło mu o Win98, tylko mu się jedna cyferka zgubiła.
LA
Sory, pomyliło mi się - miało być 2001, albo wcześniej.
7

Dokumentacja tabel Comarch ERP XL

Tabela: CDN.Rezerwacje
Kolumna: Rez_Typ
Opis: Typ rezerwacji: 1 - rezerwacja 0 - nierezerwacja

no_solution_found
haha, pamiętam jak ja grzebałem jakiś czas przy integracji z Comarch :) nie było lekko :)
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Wrocław
0

Statyczna akcja kontrolera. static musiałem dodać sam, inaczej kod się nie kompiluje, bo: https://msdn.microsoft.com/en-us/library/ms245046.aspx

Jak można używać narzędzi "zwiększających jakość" kodu, które prowadzą do powstawania takich patologii?


Po dopracowaniu rozwiązania każdy będzie mógł założyć własny drzewiasty wątek.
Azarien
ale to jest tylko warning, w dodatku nie ma obowiązku Code Analysis, no chyba że ci narzucają i w dodatku koniecznie że musi być na czysto..
somekind
W projekcie jest obowiązek, i tak to wszystko jest skonfigurowane, że ostrzeżenia StyleCopa to błędy kompilacji. Uroki korporacji.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 5 godzin
6

st.JPG

  • st.JPG (50 KB) - ściągnięć: 128
Zobacz pozostałe 6 komentarzy
EroSanin
@ShookTea mi z kolei odejście od turowego bitewniaka RPG nie przypadło do gustu :(
satirev
à propos Steam to może kiedyś skrobnę w tym temacie dłuższego posta nt ich kodu ; >
spartanPAGE
@Satriev będę czekać, wiem czego się spodziewać >;}
EroSanin
@Satirev a ja nie wiem :( Pisz jak najszybciej ! :D
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
1

Przeglądając sobie kody około .NETowe...

59619864ca.png

Jestem ciekawy jak ktoś zarządza danymi w tej tablicy. :P

msm
>lex.fs. To prawdopodobnie wygenerowane przez narzędzie jest po prostu.
n0name_l
Tak, WTFem imo jest to, że w XXI wieku w kodzie źródłowym trzymane są ogromne ilości danych, dziwnych danych, których ludzkim okiem (no może poza okiem @deus) nie idzie przeczytać.
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 18 godzin
3

Panie, przysiadłem na pół godziny, działa to zostawiłem
?
oh

Kopiuj
//init
$("#intro").show()
$("#blog").hide()
$("#about").hide()
$("#team").hide()
$("#projects").hide()
$("#forum").hide()
$("#contact").hide()
$("#intro-btn").click(function(){
$("#intro").show()
$("#intro-btn").removeClass('active')
$("#blog").hide()
$("#blog-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#about").hide()
$("#about-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#team").hide()
$("#team-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#projects").hide()
$("#projects-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#forum").hide()
$("#forum-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#contact").hide()
$("#contact-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#footer").show()
})
$("#blog-btn").click(function(){
$("#blog").show()
$("#blog-btn").removeClass('navbar-element').removeClass('active').addClass('navbar-element-active')
$("#intro").hide()
$("#about").hide()
$("#about-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#team").hide()
$("#team-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#projects").hide()
$("#projects-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#forum").hide()
$("#forum-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#contact").hide()
$("#contact-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#footer").hide()
})
$("#about-btn").click(function(){
$("#about").show()
$("#about-btn").removeClass('navbar-element').removeClass('active').addClass('navbar-element-active')
$("#intro").hide()
$("#blog").hide()
$("#blog-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#team").hide()
$("#team-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#projects").hide()
$("#projects-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#forum").hide()
$("#forum-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#contact").hide()
$("#contact-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#footer").hide()
})
$("#team-btn").click(function(){
$("#team").show()
$("#team-btn").removeClass('navbar-element').removeClass('active').addClass('navbar-element-active')
$("#intro").hide()
$("#blog").hide()
$("#blog-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#about").hide()
$("#about-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#projects").hide()
$("#projects-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#forum").hide()
$("#forum-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#contact").hide()
$("#contact-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#footer").hide()
})
$("#projects-btn").click(function(){
$("#projects").show()
$("#projects-btn").removeClass('navbar-element').removeClass('active').addClass('navbar-element-active')
$("#intro").hide()
$("#blog").hide()
$("#blog-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#team").hide()
$("#team-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#about").hide()
$("#about-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#forum").hide()
$("#forum-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#contact").hide()
$("#contact-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#footer").hide()
})
$("#forum-btn").click(function(){
$("#forum").show()
$("#forum-btn").removeClass('navbar-element').removeClass('active').addClass('navbar-element-active')
$("#intro").hide()
$("#blog").hide()
$("#blog-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#team").hide()
$("#team-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#about").hide()
$("#about-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#projects").hide()
$("#projects-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#contact").hide()
$("#contact-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#footer").hide()
})
$("#contact-btn").click(function(){
$("#contact").show()
$("#contact-btn").removeClass('navbar-element').removeClass('active').addClass('navbar-element-active')
$("#intro").hide()
$("#blog").hide()
$("#blog-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#team").hide()
$("#team-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#about").hide()
$("#about-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#projects").hide()
$("#projects-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#forum").hide()
$("#forum-btn").removeClass('navbar-element-active').removeClass('active').addClass('navbar-element')
$("#footer").hide()
})
Sarrus
Na żarty był dzień wczorajszy :P
spartanPAGE
@Sarrus ktoś się spóźnił z psikusem, bo to ja to teraz musiałem poprawiać :P
Riddle
ten kod to jakieś g**no :/
spartanPAGE
@TomRiddle no co ty :D Jest powód, dla którego tutaj się znalazł
3

Aplikacja internetowa:
1.Napisana metodą Copy'ego Paste'a w php.
2.Zamiast metod do wyciągania zapytań kod zapytanie + pentelka wyciągająca dane.
3.Kod html przemieszany z php.
4.Ostatni WTF - system posiada feature mailingu. Obsługuje wiele domen. do każdego maila są templatki. Jeślli istnieje templatka pod daną stronę jest używana customowa. Jeśli nie istnieje defaultowa (na razie ok) ale.. Jeśli templatka customowa = templatce customowej to templatka customowa jest usuwana z bazy.
Jakie było moje zdziwienie gdy klient zgłosił mi że maile nie dochodzą - ponieważ dorabiałem coś stwierdziłem że oprę się na customowych templatkach (potworzyłem i działało, zrobiłem defaultowe templatki takie same jak customowe (nie wiedząc o wspomnanej wyżęj zależności) . W efekcie jak klient nic nie zmienił i kliknął save .. metoda save usuwała templatkę customową i zwracała komunikat - zapisano pomyślnie - tyle że kod przestawał działać bo defaultowa temnplatka była usuwana. Rozumiem że to taka pułapka na wypadek gdyby nie twórca systemu chciał coś sobie dopisać...

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 7 godzin
31

"Finish" ma jedyne słuszne tłumaczenie:
finish.png


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
Azarien
ale... fiński to Finnish a nie finish.
Wibowit
kto by się tym przejmował :P
bogdans
Moderator
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 5 lat
0

Obrabiałem film programem ffmpeg. Program ten wyświetla na konsoli sprawozdanie z przebiegu, sprawozdanie ujawniło, że dodanie ramek skróciło film

Kopiuj
frame=10220 fps= 16 q=28.0 size=   35383kB time=00:06:49.20 bitrate= 708.4kbits/
frame=10231 fps= 16 q=28.0 size=   35421kB time=00:06:49.68 bitrate= 708.3kbits/
frame=10243 fps= 16 q=28.0 size=   35455kB time=00:06:47.76 bitrate= 712.3kbits/

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
Zobacz pozostałe 3 komentarze
Azarien
bo po polsku w kontekście filmu zawsze była mowa o KLATKACH. dopiero w ostatnich latach panoszy się "ramka" jako tłumaczenie angielskiego "frame".
RE
szczerze powiem, że nie mam absolutnie żadnego problemu z takim tłumaczeniem czy używaniem tych dwóch wyrazów jako synonimów w tym kontekście. nawet ramki mi bardziej pasują (w kontekście IT i ramek w transmisji danych niż klatek jako kadrów filmowych).
Azarien
w kontekście pakietów danych ok
Marooned
To coś jak tłumaczenie font jako czcionka ;-) Są puryści, których to razi (dzień dobry) i tacy, co to ich nawet poszłem nie razi. Ale tu rzeczywiście klatka filmu nie musi być równoznaczna z ramką pakietu danych opisujących fragment filmu. Ale aż tak się nie znam na kodekach.
Azarien
@Marooned: ostatnio skanowałem stare slajdy. tam są rzeczywiście ramki :D
fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
3

W firme korzystamy w sumie z 4 jezykow programowania

  • C++ Builder 6
  • C++11
  • Python
  • C#

Poki co pracowalem z C++11. Stworzylem swoj wlasny projekt i oprocz jednego malutkiego wtf bylo wporzadku.

Ale projekt zostal odlozony... na jakis tam czas...

dostalem zadanie z pythonem (mam poprawic pare rzeczy w "Dashboard")

Gdy czekam na srodowisko (dostalem wytyczne ze mam pracowac z visual studio 2010...) popatrzylem sobie w kod. Z tego co zrozumialem pracuje nad nim jedna osoba...

Kopiuj
    def missing_files(self, press):
        count = 0;
        index = 3;
        if press[index + 0] == False:
            count = count + 1;
        if press[index + 1] == False:
            count = count + 1;
        if press[index + 2] == False:
            count = count + 1;
        if press[index + 3] == False:
            count = count + 1;
        if press[index + 4] == False:
            count = count + 1;
        if press[index + 5] == False:
            count = count + 1;
        if press[index + 6] == False:
            count = count + 1;
        if press[index + 7] == False:
            count = count + 1;

        if press[index + 8] == False:
            count = count + 1;
        if press[index + 9] == False:
            count = count + 1;
        if press[index + 10] == False:
            count = count + 1;
        if press[index + 11] == False:
            count = count + 1;

        return (count / 12.0);

oj bede mial co gadac za mniej wiecej tydzien na rozmowie ewaluacyjnej :) (w pierwszym miesiacu firma jak i ja mozemy po prostu zerwac umowe)
Nawet nie wiem czy zostane... Ale zapewne tak.

edytowany 1x, ostatnio: fasadin
Riddle
Nie wiedziałem że "C++ Builder 6" to język programowania :D (czepiam się hihi).
fasadin
to jest zupelnie cos innego niz czysty c++. Tak to framework, ale traktuje to jako osobny jezyk (mozesz uzywac delphi tam... musisz znac vlc etc)
MA
  • Rejestracja:prawie 17 lat
  • Ostatnio:2 miesiące
  • Lokalizacja:Poznań
3

Może nie taki WTF, ale analizując kod wyszukiwarki KRS...

captcha.png

Zobacz pozostałe 5 komentarzy
Koziołek
To jest ten rodzaj błędu co bezboleśnie przechodzi przez mój parser.
spartanPAGE
Ale to nie jest captcha tylko kaptcha :P
Marooned
refreschCaptcha
ShookTea
refresch niemieckie :D
fourfour
No co, nie powinno używać się polskich znaków w kodzie, więc sobie ktoś poradził tak, by sens utrzymać, a "ż" nie wstawiać :)
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 12 godzin
  • Lokalizacja:Poznań
14

miejsce instalacji.png


5

z serii "Złote myśli Microsoftu":

Udzielając dostępu innym osobom, wybierasz...

tworzenie serwera VPN PPTP w windows 8.1 napisał(a)

user image

flowCRANE
Może trzeba kliknąć w kolorową lyb szarą część progress-bara?
Sarrus
Jedyna opcja do kliknięcia tutaj jaką widzę to anuluj ;)
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:minuta
1

Komercyjny kod. Ktoś próbuje zrobić property elementu UI (CAEAGLLayer) by był thread safe, więc zmodyfikował setter w taki sposób:

Kopiuj
- (void) setBounds:(CGRect)bounds
{
	if ([m_boundsLock tryLock])
	{
		[super setBounds:bounds];
		
		[m_boundsLock unlock];
	}
}

Czyli ignoruj wartość jeśli nie udało ci się założyć locka :|.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:dzień
  • Postów:1855
5

Dziś sam zrobiłem sobie niespodziankę...
Piszę programik który ma być zabezpieczony przed przeniesieniem na inny komputer (zabezpieczenie trochę "na sztukę", bo raczej nikt nie będzie próbował z nim walczyć).
Podczas instalacji generuje się "klucz" przypisany do komputera zawierający jakieś tam dane o komputerze/systemie i "bardzo mądrze" zawarłem w tym kluczu ilość dysków w systemie (myśląc "przecież raczej nie często ktoś zmienia ilość dysków/partycji").
Przy testach w pewnej chwili dostałem błąd informujący o nieprawidłowej instalacji, pierwsza myśl: zabezpieczenie zadziałało, druga: dlaczego ?
Odpowiedź bardzo prosta: podłączony pendrive :D

Sarrus
Pierwsze co pomyślałem jak przeczytałem "ilość dysków" zanim doczytałem do końca ;)
merlinnot
Hah, ja tak samo :)
MarekR22
Nie ma chyba większego programistycznego WTF, niż kiedy piracka wersja działa lepiej niż oryginalna.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12156
0

@hipekk - zabezpieczenie może i miałoby jakiś sens, gdybyś pobierał listę partycji na dysku twardym (typu DRIVE_FIXED, zamontowanym na pokładzie komputera; Jednak to i tak można zepsuć (wystarczy podłączyć dysk przenośny), więc musisz to jeszcze przemyśleć.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE
HI
Zostało parę "nie zmiennych" informacji (tzn których się raczej nie zmienia w ciągu życia systemu) i myślę że wystarczy (tak jak pisałem nie jest to jakaś krytyczna funkcjonalność :) )
Olamagato
Użyj LBA sektora jakiegoś potrzebnego krótkiego pliku z danymi lub kodem programu z atrybutem system. Szansa, żeby na kopii plik znalazł się w tym samym miejscu jest niezwykle mała. Nawet nie trzeba pamiętać jaki to dysk lub partycja i może to być dysk przenośny. Nie ruszy tego defragmentator. Można połączyć z numerem seryjnym dysku. Soft może być typu portable.
Patryk27
@Olamagato: niektóre defragmentatory ruszają pliki systemowe, chociażby UltraDefrag, wtedy będzie wtopa :P
Olamagato
@Patryk27 - Ruszanie przez defragmentator pliku systemowego, to ewidentny błąd programu, albo wadliwy projekt. Pliki systemowe mają (przynajmniej w Windows) gwarancję nienaruszalności miejsca przechowywania i jest to jedyna cecha odróżniająca je realnie od plików ukrytych i pozostałych. Tak więc przejmowanie się jakimś programem, który nie ma certyfikacji zgodności z systemem nie jest chyba ok. Być może gwarancja nienaruszalności została w najnowszych wersjach systemu zdjęta, ale biorąc pod uwagę parcie na technologię SSD, to byłoby to bez sensu.
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
1

Myślałem, że cykl o germańskim programiście już się zakończył wraz z migracją kodu do springa i jego masowym poprawieniem... nope...

Kopiuj
if(failureMessage !=null){
//... blebleble
log(failureMessage.replaceAll("%s" , valueOf(userId)));
}else{
//... blebleble
log(failureMessage.replaceAll("%s" , valueOf(userId)));
}

No cóż...


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
Zobacz pozostałe 6 komentarzy
Sarrus
@niezdecydowany a jak inaczej się zabezpieczyć przed nullami?
Koziołek
@Sarrus chociażby NullObject, jak masz Scalę to masz Optional. W przypadku kolekcji wszelakich nie zwracać null, a pustą kolekcję.
n0name_l
[Drobny OT]: Jak masz scalę (lub inny sensowny język, a właściwie sensownego liba), to masz również \/ lub Validation, które pozwalają na dodatkowe informacje (często samo to czy wartość jest czy jej nie ma nie jest wystarczające).
hauleth
@Sarrus masz np. takiego Rusta, który w ogóle nie ma null i masz tylko Optional jako null object, a wszystko działa.
vpiotr
@all_above: jak masz Java 8 to masz... Optional: http://blog.jhades.org/java-8-how-to-use-optional/ , @Sarrus: jak masz Boost to masz Boost.Optional. Przydatne do sygnalizacji że wynik niekoniecznie się pojawi. Eksperymentalnie jest jeszcze w C++: http://en.cppreference.com/w/cpp/experimental/optional
CI
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 6 lat
  • Postów:5
0

Delphi, biblioteka przetwarzająca dane w XMLu do PostScripta:

Kopiuj
hl.Text := hl.Text;

Do tego procedura, w której zakomentowano całe ciało oprócz wywołania innej procedury.

edytowany 1x, ostatnio: flowCRANE
flowCRANE
Wygląda jak proteza odświeżenia komponentu, bo żadnego innego sensu nie mogę się dopatrzyć; To i tak nie zmienia faktu, że do odświeżania służą dedykowane metody;
abrakadaber
abrakadaber
jak się dupiatych bibliotek używa to tak to wygląda
doktorko
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Gallifrey
  • Postów:44
1

Chciałem tylko się dowiedzieć na kogo mam zagłosować...

blad-latarnika.png


Clara: How can you and the Doctor be friends?
Missy: Why shouldn't we be?
Clara: You spend all of your time fighting.
Missy: Exactly.
edytowany 1x, ostatnio: doktorko
niezdecydowany
niezdecydowany
nie umiesz interpretować wyników, masz błąd w php, tak więc musisz głosować na kogoś kto wcześniej programował, robił to Korwin, także już wiesz :D
spartanPAGE
I Obama. Mamy gdzieś na liście Obamę? :PP
doktorko
lubię Korwina :)
dzek69
kto to pisał.. błędy na produkcji wywalać? WRAZ Z ZAPYTANIEM? może jeszcze na dole gdzieś hasło do bazy podają? :D
Marooned
http://i.imgur.com/m2z2H6u.png -> po angielsku JKM jak się patrzy! Przypadek? Nie sądzę...
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)