Programistyczne WTF jakie Was spotkały

Programistyczne WTF jakie Was spotkały
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 godziny
0

Pierwszy raz w życiu mi się Notatnik wywalił. Nie wiedziałem że potrafi ;-)

notepad.PNG

unikalna_nazwa
jak zabraknie ramu i pliku wymiany to się wywala. Nie tylko notatnik zresztą tylko wszystko po kolei :P
n0name_l
"Nie znacie dnia ani godziny", nawet w notepadzie ;D
unikalna_nazwa
btw - koleżance się spodobał na mojej klawiaturze klawisz "kalkulator" (który odpala kalkulator :P), żeby mnie wkurzyć naciskała go kilka razy na sekundę; po kilkudziesięciu sekundach Windows 8 mimo 8 GB RAMu kompletnie ześwirował, rozjechał się graficznie po czym ekran zrobił się czarny a system przestał reagować na cokolwiek :S
Azarien
@unikalna_nazwa: ale wywalił się tylko Notatnik, a system nadal działa, i wciąż bez resetu z niego piszę...
nvll
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 6 lat
  • Postów:5
0
edytowany 1x, ostatnio: nvll
Zobacz pozostałe 8 komentarzy
nvll
@Patryk27: W rubym nie jest podobnie. Przykładowo w delphi masz if a = 'b' then begin /instrukcje/ end, a w rubym tylko if a == 'b' # instrukcje end
Patryk27
@nvll: to już jest trochę podobnie, po prostu nie ma begin :P
nvll
@Patryk27: nie ma ani begin ani then, a to już jest duża różnica, zresztą w delphi nie ma wielu rzeczy ze składni ruby i nie można mówić, że są one choć trochę podobne
Patryk27
@nvll: dążę do tego, że w Ruby nie zrezygnowano z keywordów na rzecz samych klamerek ({, }). Nie do końca precyzyjnie się wyraziłem mówiąc, że są podobne.
madmike
Przenieście się z dyskusjami "delphi a fe" vs "delphi my love" do tego tematu: http://4programmers.net/Forum/Flame/146594-skladnia_delphi_kontra_reszta_swiata - w końcu po to tam jest :]
DS
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 11 lat
  • Postów:189
0

Pracuję z jakimś starym kodem, w którym wiele zapytań jest pisanych nie przy wykorzystaniu ORMa, a czystego SQLa. Miałem dodać do jednej kwerendy jakiś tam nowy parametr, nic trudnego, ale po mojej zmianie pojawił się problem z N+1 zapytań. No cóż, jako że mój poziom znajomości czystego SQLa jest niski, uznałem, że coś zepsułem.

Explain zapytania niee mieści się na ekranie fhd (tak, wiem, ciekawa miara), więc zacząłem usuwać zbędne elementy. Doszedłem w końcu do momentu, w którym nie zostało już właściwie nic budzącego moje wątpliwości, a mimo to problem występował nadal.

Zacząłem w końcu porównywać z ostatnią wersją z gita, bo zwyczajnie nie wiedziałem o co chodzi, niby powinno działać, a nie działa. Zapytanie w ORMie wygląda tak:

Model.includes(:certificates).where('jakiś sql').select('inny sql').(+kilka takich doklejek).map (i tu przebiegnięcie po wynikach)

Teoretycznie to includes powinno wywołać eager loading, jednak nie tym razem. Prawidłowa wersja natomiast wygląda tak:

Model.includes(:certificate).where('jakiś sql').select('inny sql').(+kilka takich doklejek).map (i tu przebiegnięcie po wynikach)

Prawda, że duża różnica? Gdzieś na samym początku modyfikacji spluralizowałem asocjowany model (prawdopodobnie dlatego, że pierwotnie była wersja, że Model będzie posiadał wiele certyfikatów), co nie powodowało żadnego jawnego faila, warninga, nic.

Straciłem na tym dwa dni, zacząłem już tworzyć jakieś powiązane modele trzymające część danych i różne inne cuda, nigdy jeszcze tak długo nie ścigałem jednej literki.

Edit: Ok, znalazłem przyczynę, bo normalnie powinno to wywalać błąd, jak @winerfresh napisał. W modelu poza miejscem, gdzie są zebrane wszystkie asocjacje było 'has_one'), natomiast kilkaset linijek dalej (model jest całkiem spory) jest kilka radośnie dopisanych kolejnych, między innymi 'has_many' do w/w modelu). Nigdy więcej pracy z czyimś kodem...

edytowany 1x, ostatnio: dsa
hauleth
Jaka wersja ActiveRecord?
hauleth
To dziwne, bo sam pracuję na 3.2.14 i wywala błędem, że nieznana relacja. Poza tym zainteresuj się Squeel i używaj scope i metod klas. Bo jeśli masz takie długie linijki, że ich tu nie wklejasz, to znaczy, że masz coś źle :)
DS
Kod nie jest mój, tam niemal całość jest źle, wprowadzenie jakichkolwiek zmian to walka z różnymi dziwnymi wynalazkami. W sumie praca z tym kodem mnie nieco blokuje przed zmianą pracy (bo to dodatek poza normalnym 'etatem'), bo w pracy mam ładny, w miarę czysty, nowy kod, a gdybym miał codziennie pracować z takim delikatnie mówiąc badziewiem, to by mnie coś chyba strzeliło. Squeel mam na liście 'todo', ale póki co chcę dobrze poznać podstawowy zestaw niezbędnych narzędzi, a potem dokładać resztę.
0

Ciekawy sposób na konkatenacje stringów:

Kopiuj
Log.Info(String.Join("", "xxx  ", id.ToString()));
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 11 godzin
  • Lokalizacja:Poznań
0

Programowanie w kurzu, gdy za ścianą rozwalają żelbet młotem pneumatycznym, a w powietrzu unosi się zapach farb nie sprzyja jasnemu myśleniu.
Zrobiłem bodaj najbardziej klasyczny błąd w dziejach programowania - na szczęście z jego powodu straciłem mniej czasu niż na napisanie tego posta ;)

Kopiuj
if ($fooCount = $maxFooCount) {
...
}

;-)


Zobacz pozostałe 3 komentarze
unikalna_nazwa
no w php raczej nie mogłoby "nie przejść" bo nie ma co; konstrukcja używana ale zazwyczaj jej intencjonalność oznacza się podwójnymi nawiasami
Marooned
w sumie to nie spotkałem się z podwójnymi nawiasami - preferowałbym komentarz dla jasności sytuacji
Azarien
Z konwencją się spotkałem: Clang (C/C++) daje warning gdy są pojedyncze nawiasy, podwójne wyciszają warninga. A co do pracy w takich warunkach, zdarzyło mi się pracować w odgłosach nieustannego wiercenia całymi dniami, po czym firma się przeniosła do nowowybudowanego budynku, nie całkiem wykończonego, w którym wiercenie kontynuowano. Męczarnie takie trwały z przerwami przez pół roku zanim na dobre ucichło.
unikalna_nazwa
a najbardziej klasyczny błąd to raczej for(...); ale tego też się już czepiają środowiska i każą zmieniać na { }
Marooned
Mój EditPlus niczego się nie czepia ;)
Gjorni
  • Rejestracja:około 12 lat
  • Ostatnio:około 3 lata
0

Wstaję dzisiaj rano z zamiarem dalszej pracy nad jednym z projektów, otwieram eclipse'a, rozwijam projekt i... folder 'src' jest pusty O.O zatkało mnie... jak to możliwe? Zapisywałem oczywiście systematycznie pracę, więc jakim cudem dwa pakiety mogły się pójść je#$@? O.O


The quieter you become, the more you are able to hear.
Zobacz pozostałe 2 komentarze
madmike
Eclipse ma czasem "odbicia", że potrafią w widoku projektu zniknąć "projekty" - co nie znaczy, że fizycznie z dysku znikają...
Gjorni
Niestety folder projektu istnieje, ale brak w nim jakiejkolwiek zawartości... O.O W ".metadata/.log" jest tylko jakaś wzmianka o "crashu" przy próbie zamknięcia Eclipse'a dnia wczorajszego. Ale tak, czy siak zawsze zapisuję przestrzeń roboczą przed zamknięciem (ręcznie). Pierwszy raz mi się taki "ładefak" zdarzył... O.O @Shalom, o so chosi z ver control? Btw miejsce na dysku mam :D
Shalom
http://en.wikipedia.org/wiki/Revision_control w skrócie: zainstaluj gita albo svna i naucz się z nich korzystać ;] Oba pozwalają na zrobienie lokalnego repozytorium na własnym dysku więc nawet jeśli nie chcesz korzystać z jakiegoś bitucketa albo githuba to nadal możesz spokojnie mieć jakiś system kontroli wersji.
Gjorni
Dziękuję bardzo! Biorę się za czytanie. Nigdy bym nie pomyślał, że coś takiego może się stać... O.O Czary dosłownie... :P
Gjorni
MAAAAAM!!!!! Znalazły się moje pakiety!!! :D:D:D Zapomniałem, że pracowałem na projekcie testowym i dlatego właściwy folder projektu był pusty xDDD
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:2 minuty
0

Od jakiegoś czasu grzebie się w iOS. Dziś zainstalowałem nowego XCode 5.0.
Zepsuli interpretera Interface Builder-a. Jeśli ktoś ma aplikację z navigation controller-em to główny widoki controller'ów zostały powiększone tak, że wchodzą pod navigation bar.
Efekt jest taki, że jeśli u góry widoku ma się ważne pole tekstowe (wprowadź adres url), to w momencie kiedy chce się go wypełnić to wjedzie ono pod navigation bar i nie widać co się tam pisze.
Próba przesunięcia ekranu palcem nic nie zmienia, bo widok natychmiast wraca do pozycji, w której pechowe pole tekstowe jest niewidoczne.

W iOS xml z opisem jak wygląda UI jest konwertowany do kodu, wiec kod skopiowany pod starszą wersją XCode na nowym iOS 7 działa perfekcyjnie. Nowy tool chain ma ten bug ze wszystkim wersjami iOS (próbowałem 5.0.1 i 7.0).

Wniosek, jeśli macie aplikację z rozbudowanym UI to na razie nie instalujcie nowego XCode lub przynajmniej zostawcie sobie gdzieś starą wersję by nie musieć poprawiać wszystkich widoków.

Edit: instalacja starszego SDK nie naprawia sytuacji, najwyraźniej interpreter xml-a IB jest zintegrowany z XCode nie z SDK.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
JA
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Białystok
  • Postów:258
0

http://stackoverflow.com/questions/3786358/get-rid-of-ugly-if-statements
Rozwiązanie czwarte, wielomianowe. Wesoły pomysł.

Koziołek
wbrew pozorom bardzo sensowne rozwiązanie, bo pozwala na uniknięcie skoków generowanych przez ify. Kilka prostych operacji arytmetycznych zawsze działa szybciej niż ifologia.
JA
@Koziołek, jasne, ale tutaj przypadek jest na tyle skrajny, że raczej nie znajdziesz architektury, która szybciej wypluje wynik obliczania wartości wielomianu czterdziestego któregoś stopnia, niż wykona skok ifem. Ale sam pomysł jest spoko, poszerza horyzonty.
Marooned
Za Jadeszkiem. Ale ciekawe podejście. Interesujące szczególnie, jeśli pisane pod systemy typu CUDA, gdzie każdy rdzeń może policzyć jedno mnożenie i potem całość zsumować. Przy wielu ifach może się okazać, że dzięki równoległości możemy mieć szybszy wynik.
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 16 godzin
0

Jeszcze raz SDL2 (SDL_image): skompilowałem źródła, próbuje skompilować przykładowy program.

Próba nr 0:

(Unable to load nananana.png! Unsupported image format)

**Nie działa**;

Próba nr 1:
Dodaje flagi do linkera, buduję projekt jeszcze raz...
Nie działa;
Próba nr2:
Zwyczajnie buduje, szukam rozwiązania problemu na internecie...
Nie działa;
Próba nr3:
Zły, rozmawiam ze znajomym (może pomoże?), chcąc pokazać mu komunikat, buduję jeszcze raz...
DZIAŁA;

Zobacz pozostały 1 komentarz
Azarien
to ja tak mam z kompem w ogólności: wielokrotnie ktoś prosił mnie o pomoc bo mu drukarka nie drukuje, płytki nie czyta, program nie odpala... jak chce mi pokazać to nagle wszystko działa ;-)
xorgx3
Hahah, dokładnie tak jak pisze @Azarien. Ileż to razy mnie to spotkało :D
unikalna_nazwa
ja się tak do tego przyzwyczaiłem że raz gdy mnie ktoś poprosił do zawieszonego komputera, podszedłem i jedyne co zrobiłem to wymachując ręką powiedziałem "czary mary" - w tym momencie komputer się odwiesił. Było dużo śmiechu więc warto było spróbować ;)
Marooned
Też tak miewam.. podchodzę: - "co nie działa?"; -"o tutaj... ooo.. działa" ;]
Sarrus
Ja też się spotkałem z takimi małymi cudami. Chyba każdy z nas :)
1

Kod (Objective-C) senior architecta:

Kopiuj
    if (currentPreset == 1) {
        self.preset1Button.highlighted = YES;
    } else {
        self.preset1Button.highlighted = NO;
    }

    if (currentPreset == 2) {
        self.preset2Button.highlighted = YES;
    } else {
        self.preset2Button.highlighted = NO;
    }

    if (currentPreset == 3) {
        self.preset3Button.highlighted = YES;
    } else {
        self.preset3Button.highlighted = NO;
    }

    if (currentPreset == 4) {
        self.preset4Button.highlighted = YES;
    } else {
        self.preset4Button.highlighted = NO;
    }

    if (currentPreset == 5) {
        self.preset5Button.highlighted = YES;
    } else {
        self.preset5Button.highlighted = NO;
    }

    if (currentPreset == 6) {
        self.preset6Button.highlighted = YES;
    } else {
        self.preset6Button.highlighted = NO;
    }
spartanPAGE
wow such experience wow proffesional and clear such expensive wow; Powala
Koziołek
bo senior to pensja, a nie skill.
MarekR22
biorąc pod uwagę jak działa freamwork iOS-a nie jest to aż tak wielki WTF. Zapewne każdy z tych presetXButton to jest IBOutlet odpowiednio podklikany, przez co nie da się z tego zrobić tablicy. Takie głupie if-y często widzę w wykonaniu poważnych developerów.
MarekR22
o fajne, faktycznie to powinno zostać użyte.
0

Kazdy z tych ifow da sie chociazby zastapic tym:

Kopiuj
 self.preset1Button.highlighted = currentPreset == 1;
 self.preset2Button.highlighted = currentPreset == 2;

Mozna tez tak (pisane bez IDE):

Kopiuj
NSArray *btns = @[self.preset1Button, preset2Button, ..., preset6Button];
for (int i = 0; i < [btns count]; ++i) {
    id btn = [btns objectAtIndex:i]; // nie chce mi sie rzutowac ale tez mozna
    [btn setHighlighted:i + 1 == currentPreset];
}

W tym kodzie jest duzo takich kwiatkow, gdzie dla kazdego buttona robi sie to samo, wiec mozna sie pokusic o metode allButtons ktora zwraca tablice taka jak powyzej. Dodanie kodu do nowego buttona wymaga tylko zmiany tej jednej metody.
Dodatkowo, tutaj nie pokazalem, ale jest tez 12 metod (2 grupy po 6 metod) ktore roznia sie tylko buttonem - wszystkie sa callbackami bioracymi jako argument sendera, i zapisuja cos / wysylaja przez socket wartosc int ktora jest, a jakze, wartoscia ktora reprezentuja (1 do 6). W iOS wszystkie UIView maja property 'tag', ktore moze przyjac wartosc int, za pomoca ktorej mozna w 1 metodzie rozpoznac ktory button zostal klikniety - mozna ja wykorzystac aby wyslac wartosc tag do socketa lub zapisac, prawda Itp. To sie da naprawde zrobic ladniej i zdecydowanie bardziej kompaktowo, i da sie lepiej czytac.

Gjorni
Senior Dev nie ma czasu myśleć o przyziemnych sprawach takich, jak np. kod nad którym pracuje :D
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:2 minuty
0

tak wiem, że tak można, pisałem jedynie, że nie jest to aż tak wielki niewybaczalny WTF. Sam pozbyłbym się tylko głupawych if-ów, ale nie dawałbym NSArray. Jeśli stan buttonów musiałby być aktualizowany w bardziej skomplikowany sposób to ostatecznie zastosowałbym zwykłą tablicę znaną z C.

Kopiuj
UIButton *buttons[] = {self.preset1Button, preset2Button, ..., preset6Button};
for (int i = 0; i < sizeof(buttons)/sizeof(buttons[0]); ++i) {
    buttons[i].highlighted = currentPreset == i;
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
0

Ha, taka tablica nie przeszlaby u mnie w zespole code review - takie zasady i juz, a jakies liczenia z pomoca sizeof to juz w ogole zonk...

n0name_l
Cos jest nie tak z sizeof()?
Olamagato
@mućka - Dlaczego? Przecież to standardowa konstrukcja C na ilość elementów w tablicy (liczona w czasie kompilacji). Chociaż dla uniezależnienia się od pustej tablicy należałoby może użyć sizeof(buttons)/sizeof(UIButton*) lub przypisać to przed pętlą zmiennej const.
Azarien
huh, przecież nawet Visual C++ ma makro ARRAY_SIZE, które się sprowadza do (mniej więcej) sizeof(tab)/sizeof(tab[0]). nie widzę sensu unikać czegoś co jest czytelne i działa poprawnie.
n0name_l
@Azarien mozna to nawet samemu w cos opakowac, zeby gole sizeofy nie lezaly, ale tutaj jest to zakaz dla zakazu :)
0

Ja wiem ze to jest normalny kod, ale w projekcie w ktorym jestem uzywa sie tylko wysokopoziomowych rozwiazan z Obj-C. Wszystko inne 'is frowned upon'. Nie wiem dlaczego, ja dopiero zaczynam w projekcie (2-gi miesiac) oraz nie mam wielkiego pojecia o programowaniu na iOS ;d

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

WTF z dzisiaj:
Za pomocą magicznej aplikacji napisanej w Excelu/VBA ludzie korzystają z bazy danych MS Access. Problem w tym że baza jest współdzielona przez ludzi z różnych krajów (ergo z różnymi ustawieniami "regional settings" w systemie). Efekt jest taki że w bazie połowa doubli ma przecinek a połowa kropkę jako separator dziesiętny. Ktoś sprytny już to zauważył i postanowił to w tym kodzie w VBA "naprawić" poprzez otoczenie wszystkich odczytów danych z bazy przez string replace które zamieniało kropkę na przecinek. Oczywiście rozwiązanie zupełnie z d**y bo dzięki niemu aplikacja działa tylko u ludzi u których to przecinek jest separatorem :D I niestety musiałem ręcznie podmieniać te wszystkie replace na wywołanie mojej trzylinijkowej funkcji która wykonuje normalną konwersję (tzn zamienia te kropki i przecinki na systemowy separator dziesiętny ;]). Gdyby kmiot który to "naprawiał" wcześniej zamiast gołego replace dał swoją funkcję, która woła replace, to fix zająłby mi minutę a nie godzinę ;]


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
MarekR22
ja bym powiedział, że to jest podwójny fail: pierwszy to fail Microsoftu, który od tylu lat nadal nie może sobie dobrze poradzić z zapisem liczb, gdy użytkownicy używają różnych ustawień lokalizacyjnych (OpenOffice też ma ten problem).
sprzedamsanki
Dokładnie. Regionalizacja powinna mieć wpływ na prezentację danych, nie na format ich przechowywania.
Marooned
Klasyczny przykład to tłumaczenie poleceń Excela typu JEŻELI ;]
wasiu
Dlatego nigdy nie zainstalowałem Polskiego office'a
unikalna_nazwa
dlatego żeby nie móc otwierać dokumentów stworzonych przez rodaków?
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12156
0

Sprawa może i błaha, ale nieźle mnie rozsierdziła...

Mniej więcej miesiąc temu podczas kończenia optymalizacji kilku tysięcy linii kodu (głównie zastąpienie debilnych wywołań funkcji RTLowskich własnymi bazującymi na wskaźnikach) przyszedł czas na przetestowanie wprowadzonych zmian; Tesuję różne wariacje danych wejściowych aby sprawdzić co zostanie wyłapane jako błąd; Idzie gładko - co jest zapisane poprawnie zostaje elegancko przetworzone, a kiedy podaje błędne dane odpowiednie mechanizmy wychwytują to; Aż tu nagle podaje poprane dane wejściowe, a na wyjściu dostaję dziwactwa...

Szperam w kodzie, analizuję co i jak jest po kolei wykonywane - błędu nie widać; Debuguję kod żeby się upewnić, że wszystko jest w porządku - błędu dalej nie widać; Godzinę grzebię i dalej wszystko wygląda jak należy, a działa inaczej;

W końcu dochodzę do wniosku, że TStringList nawala; Wrzucam odpowiednie wartości (oddzielone własnym separatorem) do tej listy, po czym na koniec ta właśnie lista ma mi zwrócić jeden łańcuch przez DelimitedText (StrictDelimiter ustawiony jest na True); Okazuje się, że klasa zachowuje się bardzo dziwnie - jeśli dodam do listy jedną pustą linię, właściwość DelimitedText zwraca mi łańcuch "", czyli dwa znaki cudzysłowu... Do tego separator (czyli właściwość Delimiter) ustawiona jest na #10, więc niejak to nie pasuje do rezultatu; Testuję na Delphi7 - to samo...

Patrzę więc w źródła klasy i widzę tam takie kwiatki:

Kopiuj
Function TStrings.GetDelimitedText: string;
var
  {...}
begin
  {...}

  If (Length(Result)=0) and (Count=1) then
    Result:=QuoteChar+QuoteChar;
end;

WTF? Kto to wymyślił? Po jaką cholerę jest to przypisywane? Najlepsze jest to, że nijak się tego pozbyć nie można, bo kompilując kod na innym komputerze klasa ta będzie wykonywać to dziwne przypisanie...

Zgłaszam tę sytuację na bug trackerze free pascala, czyli że właściwość DelimitedText daje dziwny rezultat, po czym dostaję informację, że:

Jonas Maebe (manager) napisał(a)

The output is the same in Kylix 3. Please ask questions on the mailing list instead.

Czyli mam zrozumieć, że jeden pieron czy działa dobrze/logicznie czy nie, najważniejsze że jest tak samo jak w Delphi...


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.
Zobacz pozostałe 3 komentarze
unikalna_nazwa
Z tego co widzę to ma zastosowanie żeby odróżnić pustą kolekcję od kolekcji z jednym pustym elementem tak żeby po podaniu SetDelimitedText tekstu który zwrócił GetDelimitedText powstała ta sama kolekcja - czyli żeby funkcje były odwracalne. Nie jest więc to żaden błąd tylko rozwiązanie problemu, a w dokumentacji masz jasno że GetDelimitedText bierze pod uwagę QuoteChar nawet przy StrictDelimiter=true. Nie możesz po prostu ustawić QuoteChar na #0?
flowCRANE
To jest "jakieś" wytłumaczenie, ale nie zmienia to faktu, że sprawia dużo problemów; Funkcja ta nie musi być odwracalna i w większości przypadków jest to zbędne; Poza tym output jest nielogiczny (bo jak można rodzielić jeden element?), a pozostawienie tego warunku tylko po to, by raz na 100 razy odwrócić proces jest bezsensowne; Trzeba więc kombinować;
unikalna_nazwa
A czemu chcesz "rodzielać" ten element? Nie rozumiem. Różnica między jednym pustym wierszem, a brakiem wierszy jest dość istotna i założenie jest takie że ta funkcja ma tworzyć tekst do odwrócenia przez tę samą klasę; na pewno z myślą o tworzeniu plików .csv. W większości przypadków o jakich mogę pomyśleć właśnie funkcje get i set będą używane tak samo często. Jeżeli używasz własnej, niekompatybilnej funkcji do przetwarzania wyjścia tej funkcji, to prawdopodobnie powinieneś też użyć własnej funkcji do tworzenia dla swojej funkcji wejścia.
unikalna_nazwa
I jak to odwracanie tej funkcji w większości przypadków jest zbędne? To zapisujesz dane ale ich nigdy nie odczytujesz? To nie lepiej je po prostu posłać w null?
flowCRANE
Pewnie masz rację, choć w moim przypadku głównie wykorzystuję Get, rzadko Set, więc odwracalność tego procesu nie jest niezbędna; Z tym raz na 100 razy przesadziłem;
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 godziny
0

c4100.PNG

Patrzę i patrzę i patrzę i nie kumam.

Gjorni
  • Rejestracja:około 12 lat
  • Ostatnio:około 3 lata
0

Skrobię sobie w eclipsie, otwieram jedną z klas z kilkoma metodami, a metod... nie ma O.O Zostały tylko komentarze dokumentujące... Myślę sobie "WTF, przecież poszedłem na moment do toalety...!" Zacząłem już podejrzewać lokatorów, że może chcieli zrobić psikusa i skasowali mi kod, ale po chwili doszedłem do wniosku, że jest to idiotyczna myśl z uwagi na fakt, że jest 2 w nocy... "Co jest grane?" - myślę. Pamiętam, że zwijałem metody i komentarze, żeby pisać następne rzeczy... "Może jakiś eclipsowy bug?" No nic. Postanowiłem zrestartować eclipse'a i voila! Metody wróciły na swoje miejsce :D


The quieter you become, the more you are able to hear.
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:2 minuty
0

mam plik z logami o takiej nazwie: "Logs-30 Sep 2013 13/20/45.zip". Chcę je wgrać do bug report. Co zrobiła mi JIRA? Zmieniła slashe na dwukropek: "Logs-30 Sep 2013 13:20:45.zip".
Jak dotąd spoko, ale klikam "add" i JIRA rzuca się o to, że nazwa pliku zawiera niedozwolony znak ":" i nie pozwala mi dodać tego pliku :).

Tak zgaduje, że z jakiegoś dziwnego powodu JIRA rozpoznała godzinę w nazwie, a następnie ją zlokalizowała i stąd pojawił się ten dwukropek, który jest niedozwolony.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Azarien
gdzie używają ukośników do pisania godziny?
MarekR22
kiedyś robiłem testy na lokalizację i chyba widziałem taki format godziny (testy leciały po wszystkich możliwych ustawieniach lokalizacyjnych). W każdym razie nie widzę innego wyjaśnienia, czemu zamieniło mi znaki akurat na niedozwolony znak.
Marooned
Od kiedy to slash jest dozwolonym znakiem w nazwie pliku? Będziesz chciał przerzucić plik na Windozę i będzie zonk.
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 11 godzin
  • Lokalizacja:Poznań
0

Check disk (chkdsk) pod Win7 sprawdzający kopnięty dysk:
http://i.imgur.com/ShklRaN.png
http://i.imgur.com/k96hkJ9.png

Srogo sobie poczyna...

A z innej beczki - gratulacje dla tłumacza, który "JavaScript" przetłumaczył jako "skrypty Java" ;-)
http://i.imgur.com/ik34qfF.png


Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 godziny
1

Nie wiem jeszcze, czy to programistyczne czy sprzętowe WTF, ale podejrzewam bardziej Intela, bo takie numery już im się zdarzały.

Są bowiem sobie dwa zupełnie nieadekwatne dziś do zadania komputery:

Kopiuj
1. Celeron 220	512k cache, 1.20 GHz, single core, produkcja 2007 r.
- 2 GB RAM, Windows XP x86
Kopiuj
2. Atom N570	1M cache, 1.66 GHz, dual core + hyper threading, produkcja 2011 r.
- 2 GB RAM, Windows 7 x86

A zadaniem jest przekodowanie filmu: zmiana kodeka audio i video, zmiana rozdzielczości, deinterlace'ing.

Soft jakiego zawsze używam to: Virtual Dub, Avisynth, kodeki Xvid i Lame MP3.

I na czym fakap polega? Spodziewałem się, że drugi komputer będzie co najmniej trzy razy szybszy. Tymczasem "Video rendering rate":

Kopiuj
1. 11 fps
2. 8 fps

Jak to jest, że procesor o 4 lata młodszy, o wyższych parametrach pod każdym względem, mimo zajętości procka 100% (więc działa multi-threading) jest mimo to wolniejszy?

edytowany 1x, ostatnio: Azarien
Zobacz pozostały 1 komentarz
Ola Nordmann
To raczej byłoby widoczne w parametrach. Celeron to z drugiej strony Pentium dla ubogich :>. Strzelam, że chodzi tutaj o pamięć RAM. Ilość jest ta sama, ale OS inny(bardziej wymagający). Może program mniejsze bufory sobie tworzy, albo Win 7 daje d**.
Koziołek
obstawiam system. Win7 jest znacznie bardziej zasobożerny niż winxp i zapewne przy takiej samej ilości ramu chodzi znacznie gorzej.
Wibowit
Celeron 220 jest bazowany na rdzeniu Conroe, takiego samego jak w prockach Core 2. Atom ma niższą wydajność na takt niż Pentium 4, a Pentium 4 ma znowu sporo niższą wydajność na takt niż Core 2, więc ta różnica jaka jest widoczna w wynikach Azariena jest jak najbardziej możliwa. Wątpię, by narzut systemu był istotny, no chyba, że jest dużo ekstra śmiecia nainstalowane i powłączane.
xxx_xx_x
1. http://bitsum.com/pl_when_hyperthreading_hurts.php 2. HT Potrafi jeszcze pogorszyć działanie app jednowątkowych ktore sa mocno optymalizowane (w szczególności pod względem cache)
Azarien
@Wibowit: nie spodziewałem się że Atom będzie wolniejszy, bo jak kupowałem tego Celerona, to go wybrałem bo płyta z Atomem była o 100 zł droższa ;-)
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 godziny
9

Serwery NTP (do synchronizacji czasu) które odrzucają połączenie, bo lokalna data się nie zgadza. Noż kurna, przecież po to korzystam z serwera, by dostać dobrą datę i czas, zaoszczędzając te 10 kliknięć na ręcznym ustawianiu.. :|

0

explorer.exe miał ciężkie chwile po których nie mógł dojść do siebie. Pomogło dopiero uśmiercenie go...

user image

Dodam, że zjadł taką ilość ramu na systemi 32-bitowym.

RE
Explorer ładuje ogromną ilość rozszerzeń, najprawdopodobniej zawiniło któreś z nich.
0

@Rev Przyczyną było zaznaczenie ~65k plików w folderze, kliknięcie PPM, a następnie 7-Zip -> Dodaj do archiwum. Zresztą po samym wejściu do folderu zużycie ramu wzrasta do ~260 mb :P

No i dla takich plików jakie tam są (b. dużo małych) wyrównanie danych jest dosyć widoczne (zajmują na dysku praktycznie 100x więcej niż w rzeczywistości).

Zobacz pozostałe 2 komentarze
dzek69
explorer od czasów visty to jest muląca porażka
Azarien
@dzek69: jeśli 7zip jest pluginem explorera (a w tym przypadku jest) to działa wewnątrz procesu explorera, więc zajęty RAM będzie pokazany dla explorer.exe
dzek69
a to nie jest tak, że 7zip tylko sobie dodaje menusy, które wywołują 7zipa z parametrami?
Azarien
nie zaglądałem im w źródła, ale taka zajętość RAM-u jest mocną przesłanką, że to 7-zip tyle zabiera, a nie że explorerowi zachciało się akurat „zamulić”. nie mam tego explorerowego 7zipa, ale właśnie zrobiłem test pod Total Commanderem, i podczas kompresji zajętość przez totalcmd.exe rośnie z 20 do 700 mega.
Azarien
żeby nie było, to 7zip jest moim ulubionym formatem kompresji, ale zdaję sobie sprawę że jest powolny i zabiera ogromne ilości pamięci – zwłaszcza na Ultra. ot, taki algorytm.
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 11 godzin
  • Lokalizacja:Poznań
0

Miałem wolnego 15,075GB - odinstalowałem z 8 komponentów Windows 7 w tym wszystkie wbudowane gry, narzędzia wyszukiwania, windows media player/dvd maker/ etc etc etc
Poprosił o reset, poleciały procenty kończenia konfiguracji..
Teraz mam wolnego 15,003GB :|

Co ciekawe, po odinstalowaniu Windows Search z Menu Start znika możliwość filtrowania programów :)


edytowany 2x, ostatnio: Marooned
Zobacz pozostałe 14 komentarzy
Marooned
Na mnie pobudzająco działa sam komp. Już od czasów średniej jak zasypiałem na stojąco, a miałem robotę, to siadałem przed kompem i sen magicznie znikał.
somekind
Może żywisz się światłem z ekranu? :P
Azarien
herbaty piję dziennie tyle, że już chyba nie ma na mnie żadnego wpływu ;-) colę też raczej piję tylko dla smaku.
Marooned
I tak oto instalator Windows sprowadził nas na rozmowę o herbacie :] To jest dopiero WTF ;-)
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Zawsze do benchmarków podchodziłem z rezerwą. Tym bardziej do takiego PyPy które szczyci się tym, że jest nawet 6 razy szybsze od CPythona. Ale potrzebowałem zoptymalizować pewien kod (górny limit na czas działania to było 300 sekund), który już był zoptymalizowany do granic możliwości więc postanowiłem sprawdzić ile można zyskać zmianą interpretera ;]
Czas działania - 1000 sekund
Czas działania po 4 godzinach rozkminiania nad optymalizacjami i profilowania kodu (przy założeniu żeby nie psuć czytelności kodu) - 700 sekund
Czas działania zoptymalizowanego kodu na PyPy - 130 sekund

Oczywiście wszystko ma swoje plusy i minusy ;] Nie ma na przykład sensownego wsparcia na numpy w PyPy i musiałem trochę rzeczy sobie własnoręcznie zaimplementować ale mimo wszystko, to jest ponad 5 razy szybciej! Ten JIT to jednak nie jest ściema :D


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Wibowit
w moich testach różnice były jeszcze większe: https://github.com/tarsa/TarsaLZP ale i tak PyPy jest bliżej końca stawki
Shalom
No tak, ale kod jest w pythonie ;) Ukodziłbym się na śmierć gdybym chciał to zaklepać w C :D Z tego shedskina może wypróbuje, ciekawe jak będzie sie to prezentowało :)
0

Dla mnie jednym wielkim WTF jest programowanie na Androida - kiepska dokumentacja, pelno bzdur, fragmentacja i tysiace urzadzen do testowania a i tak zawsze jakis piksel sie wyjebie (argh!), lipne API (jak np. podawanie kryteriow filtrowania w contentproviderach jako string z sql where), emulator (WTF?!), ant i eclipse (ale to sie zmienia, gott sei dank), mnostwo (naprawde mnostwo) bugow, gotchas i glupot takich jak ta (oficjalna dokumentacja):

Every Android-compatible device supports a shared "external storage" that you can use to save files. This can be a removable storage media (such as an SD card) or an internal (non-removable) storage.

Czyli external storage moze byc internal storage. WTF? Naprawde musieli przeciazac te 2 pojecia? To nie mogli tego nazwac private / shared?

Ogolnie wczesniej nie programowalem za wiele na Androida, ale ostatnio robie coraz wiecej i strasznie mnie jako platforma dle devow rozczarowuje.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@mućka nie spinaj, JetBrains pracują nad IntelliJ dla Androida (już ponoć w becie IntelliJ13 trochę tego wrzucili) ale póki co jest chyba wersja 0.2 dopiero. Myśle że jak skończą to będzie się klepało bardzo przyjemnie ;)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
0

Wiem, sam uzywam IDEA i mam wersje Enterprise czy jak ona sie nazywa, do tego ich plugin do Androida (a z tego co czytalem to ten plugin i android studio czy jak tam to ten sam kod?), ale w pracy uzywam Eclipse (wymog projektu, ale walcze coraz zacieklej), no i od poczatkow Androida zawsze byl uzywany Eclipse - ja sie pytam, kogo tak pojebalo?
Wybor anta zamiast mavena rozumiem, ale wiaze nadzieje z gradle (ale i ten ma duzo problemow, ktore jednak da sie obejsc za pomoca grooviego). Ale tak ogolnie, to programowanie na Andka ssie jaja.

Shalom
Tak, wydaje mi się że Android Studio to po prostu IntelliJ zintegrowany z tym co wydali jak plugin dla IntelliJ. Ewentualnie jest tam więcej "nowych" rzeczy. jeśli chodzi o Eclipse to weź pod uwagę ze do niedawna to było jedyne środowisko ze wsparciem dla Androida ;]
Marooned
I Eclipse jest "oficjalnie" wspierane, więc dużo prościej w tym pisać z powodu wsparcia, tutoriali i opisów.
RE
Wyrażaj się.
3

Ja wiem, że to nie dział flame, ale...

Ale tak ogolnie, to programowanie na Andka ssie jaja.

  • to nie android ssie jaja, a Twoja wiedza odnośnie tej platformy. Nie piszę tego złośliwie, bo jak zaczynałem to miałem bardzo podobne obiekcje. Teraz już nie mam bo na pytania zadane przez Ciebie jestem w stanie odpowiedzieć.
    1.Co do emulatora, to nie jest żaden WTF, zainstaluj Genymotion albo HAXM jak masz procesor intela. Emulator chodzi wtedy szybciej niż przeciętny smarfon/tablet.

Czyli external storage moze byc internal storage.

  • mylisz pojęcia pomiędzy internal storage, a pamięcią wbudowaną (to są dwie różne rzeczy!). Do tego dochodzi jeszcze karta sd, więc telefon może mieć 3 rodzaje pamięci. Wołasz getExternalStorageDirectory i jeżeli nie jest null to nie obchodzi Cię czy jest to karta sd, czy pamięć wewnętrzna (nie internal storage).

piksel sie wyjebie

  • tutaj kłania się nauka tworzenia layoutów (najtrudniejsza część nauki jeżeli chodzi o androida). Do tego tworzysz specjalne foldery np. layout-land-small, layout-sw600dp, values-portrait-xxlarge itp. itd. i wszystko wygląda jak trzeba.

jak np. podawanie kryteriow filtrowania w contentproviderach jako string z sql where

  • Naprawdę? To nie lepiej skorzystać z GreenDao i wszystko robić na obiektach np. tak : qb.where(PersonDao.Properies.Id.eq(10)).build().unique() ?

mnostwo (naprawde mnostwo) bugow, gotchas i glupot

  • bugów trochę jest, ale nie mnóstwo. Często spotykam się w tej platformie z zarzutami o bugi, a okazuje się, że programista stosuje złe rozwiązanie uparcie twierdząc, że to bug.
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)