Programistyczne WTF jakie Was spotkały

Programistyczne WTF jakie Was spotkały
MO
  • Rejestracja:ponad 18 lat
  • Ostatnio:28 minut
0

próbuje zoptymalizować zapytanie w mysql (dodanie indexów na odpowiednie kolumny).
Po dodaniu indexów wynik jest zwracany inny niż powienien - tzn jest odwrotne sortowanie. "Order by" zabija zapytanie więc staram się bazować na sortowaniu przez index.
Po w sumie paru godzinach ślęczenia nad tym dlaczego mam odwrotne sortowanie w wyniku (dokum mysql):

"
An index_col_name specification can end with ASC or DESC. These keywords are permitted for future extensions for specifying ascending or descending index value storage. Currently, they are parsed but ignored; index values are always stored in ascending order.
"

abrakadaber
abrakadaber
żebyś się nie zdziwił - tak samo jest z klauzulą check dla kolumny tabeli
KR
baza danych ma prawo zwrócić wyniki w dowolnej kolejności, jeśli nie ma klauzuli order by; prawdziwe wtf polega na tym, że mysql nie potrafi zrobić order by z użyciem indeksu (zarówno skan wprzód jak i wstecz), tylko zawsze sortuje
KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:około 7 godzin
  • Postów:2964
0

W Linuksie i różnych Uniksach jest funkcja posix_spawnp służąca do efektywnego uruchomienia procesu potomnego. Na systemach, na których działa vfork, funkcja ta używa zwykle vfork + execve zamiast klasycznego fork + evecve. vfork zwykle nie kopiuje całej pamięci procesu rodzica tak jak to robi fork, dlatego działa znacznie szybciej, zwłaszcza jeśli proces rodzic jest duży, a proces potomny jest mały.

Niestety projektanci API posix_spawnp nie pomyśleli o dwóch ważnych sprawach:

  1. wszystkie deskryptory plików są domyślnie dziedziczone i nie istnieje sposób na wyłączenie tego lub zamknięcie wszystkich odziedziczonych deskryptorów w kontekście procesu potomnego pomiędzy wywołaniem vfork a execve. Konsekwencje tego bywają tragiczne - długo żyjący proces potomny może np. zablokować zamknięcie plików / socketów / potoków swojego rodzica, które przypadkiem były otwarte w chwili wywołania posix_spawnp. Oczywiście zdali sobie z tego problemu sprawę chyba po fakcie, więc dorobili flagę FD_CLOEXEC, którą można dodać do deskryptora pliku. Powoduje ona automatyczne zamknięcie deskryptora w procesie potomnym. Niby ma sens, tylko że... większość funkcji, którymi można otwierać deskryptory np. pipe nie obsługuje tej flagi. Trzeba zrobić to osobnym wywołaniem wprowadzając race-condition.

  2. dziedziczony jest katalog roboczy i nie istnieje żaden sposób aby go zmienić dla procesu potomnego; po prostu nie ma takiej opcji ani takiego argumentu dla posix_spawp. Jedyne co można zrobić, to tymczasowo zmienić katalog roboczy przez chdir, przed forkowaniem, później przywrócić oryginał i modlić się, żeby w trakcie jakiś inny wątek nie potrzebował odczytać katalogu roboczego.

Czyli mimo że posix_spawnp ponoć jest thread-safe, to nie ma to żadnej wartości, bo i tak w wielowątkowej aplikacji jest praktycznie bezużyteczny.
Teraz kombinuję jak tu ręcznie użyć vfork + execve żeby obejść te ograniczenia, ale vfork to jest niestety kolejna puszka pandory i już w kilku miejscach wyczytałem "nie używaj tej funkcji, bo nie da się jej użyć bezpiecznie".

Podsumowując: odpalanie procesów potomnych w aplikacjach wielowątkowych na Uniksach to jest jeden wielki WTF i najlepiej trzymać się od tego z daleka. Ale jak ktoś musi? Jak żyć? :D

edytowany 6x, ostatnio: Krolik
Zobacz pozostałe 3 komentarze
Wibowit
@Johnny_Bit: przecież wątki to nie procesy @Krolik: z tego co czytałem kiedyś tam gdzieś tam, to fork kopiuje pamięć na zasadzie copy-on-write, tzn nie ma fizycznego kopiowania pamięci dopóki nie jest ona modyfikowana
KR
@Wibowit owszem, owszem, ale po pierwsze: nie na każdym Uniksie, po drugie to działa dobrze tylko o ile masz włączony overcommit (jeśli nie masz, to fork dużego procesu ma duże szanse się nie udać), po trzecie, nawet na Linuksie tablice mapowania stron muszą zostać w pełni skopiowane, co przy procesie posiadającym np. 16 GB też może troszkę zająć (kilkaset tysięcy wpisów).
KR
@Johny_Bit procesy mają tę przewagę nad wątkami, że są znacznie lepiej izolowane. Jeden proces się wyrypie to nie pociąga za sobą innych.
Johnny_Bit
@Krolik - I know. serio. ale proces jest znacznie bardziej przejechany do kontroli. W moich dotychczasowych przypadkach w 88/100 wątki były przydatniejsze. Pozostałe 12 wygrywały procesy właśnie poprzez izolacje, jednak odpalenie tego tak jak chciałem to katorga za każdym razem. W idealnym świecie byłby cross między wątkami i procesami który by miał full izolacje a jednocześnie był łatwy jak wątki..
Wibowit
O ile się dobrze orientuję to http://akka.io/ jest takim "crossem". Ale to tylko dla JVMa.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:3 minuty
0

memleak w chkdsk-u? ;-)

user image

edytowany 1x, ostatnio: Azarien
Patryk27
Tak z ciekawości, co oznacza to "*32"?
Azarien
że jest to 32-bitowy proces na 64-bitowym systemie. brak *32 oznacza 64-bitowy proces.
0

Captcha z pewnego forum.

unikalna_nazwa
pewnie z jakiegoś typu hyperreal - trzeba mieć tripa żeby to przeczytać
Patryk27
BTD1M; proste :D
0
DużaTajemnicaWiedzy napisał(a):

Captcha z pewnego forum.

Jest też opcja, że tym razem to tylko komputer może to odczytać :)
Swoją drogą ciekawe, że komuś się chciało robić taką captchę zamiast zwyczajnie zablokować forum.

OT
  • Rejestracja:około 20 lat
  • Ostatnio:ponad 11 lat
0

Z tego forum:

Kopiuj
bool SprawdzCzyJestZmiennaSrodowiskowa(LPCTSTR lpNazwaZmiennej)
{
        DWORD dwRet, dwErr;
        dwRet = GetEnvironmentVariable(lpNazwaZmiennej, NULL, 0);
 
    if(dwRet==0)
    {
                dwErr = GetLastError();
        if( ERROR_ENVVAR_NOT_FOUND == dwErr )
        {
           return false;
        }
                else
                {
                        return false;
                }
        }
 
        return true;
 
 
}
Wibowit
może to kod eksperymentalny?
EE
adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 12 lat
0

Hak w Thunderbird?
thunderbird_hack.png

edytowany 2x, ostatnio: adf88
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 2 godziny
  • Lokalizacja:Poznań
0

Czasem nachodzi człowieka chęć porzucenia na chwilę języków skryptowych i powrót do takich z kompilatorem. Wtedy na człowieka spada znak, który mówi: "zwariowałeś?!".
Znak na dziś w C# blokujący kompilację:
Error: Ambiguity between 'ArdupilotMega.GCSViews.ConfigurationView.ConfigFlightModes.components' and 'ArdupilotMega.GCSViews.ConfigurationView.ConfigFlightModes.components'
Pomógł restart Visuala...


Patryk27
Dlatego prawdziwi programiści piszą bezpośrednio w hexedytorze ;P
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Uruchomienie programu edit z konsoli powoduje, że zmienia się znak zachęty - wyświetlane są krótkie nazwy katalogów. Zmiana dotyczy tylko dysku bieżącego, zmienna środowiskowa PROMPT nie ulega zmianie.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
Azarien
pewnie dlatego, że Edit jako program prawdziwie DOS-owy powoduje przełączenie wiersza poleceń z cmd.exe na command.com. BTW, u mnie na Win7 nic takiego się nie dzieje. EDIT: wróć: jednak dzieje :-)
bogdans
Hipoteza z zamianą cmd.exe na command.com jest chyba fałszywa. Na innych dyskach, w tym samym oknie konsoli, są długie nazwy katalogów.
RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
0

Pomagałem znajomemu.

Kod jednego z wykładowców na publicznej uczelni:

user image

Tak, korzysta z frameworka testującego Visual Studio, ale dołączył także NUnit, żeby skorzystać z jego Asserta.

somekind
Bo Assert z NUnit jest po prostu lepszy. :)
several
Jakiego template'a używasz do edytora?
0
Rev napisał(a):

Pomagałem znajomemu.

Kod jednego z wykładowców na publicznej uczelni:

user image

Tak, korzysta z frameworka testującego Visual Studio, ale dołączył także NUnit, żeby skorzystać z jego Asserta.

No cóż, Mikuś potrafi :D

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:3 minuty
1

Piszę program na SPOJ-a. Program się wywalał. Okej, nic nadzwyczajnego — ale po jakimś czasie zminimalizowałem przypadek do dosłownie czegoś takiego:

Kopiuj
#include <iostream> 
using namespace std; 

int main() 
{
    int i;
    cin >> i;  // CRASH
}

WTF :-|

Przez moment zwątpiłem, że to może moje kung-fu w C++ nie jest takie dobre. Ale przykłady z Internetu również się wywalały.
To musi oznaczać, że coś bardzo nie tak z kompilatorem, albo z instalacją.

Po jakimś czasie odkryłem że program skompilowany z parametrem -static-libstdc++ działa prawidłowo.
Haaa....
Okazuje się, że exek linkowany dynamicznie znalazł sobie w %PATH% swoją bibliotekę libstdc++-6.dll. Biblioteka była najwyraźniej w innej wersji, co powodowało crash.
Pytanie tylko, po co ta cyferka „6” na końcu, skoro i tak istnieją różne wersje, niezgodne ze sobą?

Johnny_Bit
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Kielce
0

Właśnie miałem opisać w detalu kolejny WTF z systemu klasy enterprajs, ale się okazało że jest to objęte NDA. To w skrócie w 2 punktach z kompletną anonimizacją:

  1. rozwiązanie filtracji znaków wg programistów klasy enterprise: wykasować znaczki nie będące w 7-bit ASCII, czyli "Józef"="Jozef", "Юлия"="".
  2. rozwiązanie zauważonego problemu znikania znaków: mail do szefa działu technicznego od vice chief developera z działu odpowiedzialnego za powyższy genialny pomysł o treści zbliżonej do "Rok temu wspominaliście że macie tabelę translacji znaków z UTF na ASCII. Dajcie ją nam a my wam damy 10% zniżki na najbliższą aktualizacje systemu"

A mówilismy - sami możemy zaimplementować poprwną filtrację ale nieeeeee bo dostawca systemu stwierdził "Nasi programiści są klasy enterprise".


HAKGER - 50% Complete
no_solution_found
żeby tylko zarobić an nich kasę, pewnie byłby gotów powiedzieć "Nasi programiści są kosmitami"
Azarien
prawdziwy WTF polega na tym, że znaki są w ogóle filtrowane.
Johnny_Bit
A to w poprzednim którymś WTF mówiłem - usługa z którą moduł współpracuje obsługuje pełen UTF-8 pod warunkiem że znaki te są w 7-bitowym ascii (znaczy się twierdzili że subset latin1 jak przyciśnięci do muru byli, ale w końcu się okazało że nawet to nie i tylko 7-bit ASCII)
Marooned
Pełen UTF-8 w 7 bitach. Niezłego ZIPa ktoś tam ma. Poproszę. Spakuję sobie Internet na dyskietkę.
Azarien
Na upartego, istnieje coś takiego jak UTF-7.
adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 12 lat
0

Czytając ostatni post @Johnny_Bit przypomniał mi się jeden WTF'ik.

Znajoma dostała w pracy ekstra zadanie (na co dzień zajmuje czymś innym) polegające na dodaniu polskiego tłumaczenia do pewnych tekstów. Jacyś Niemcy (zapewne zleceniodawcy) przysłali jej pliki do przetłumaczenia oraz link do strony internetowej programu którym ma dokonać edycji. Zgodnie z instrukcją próbuje wprowadzać zmiany do tekstu, a tu ZONK!. Nie może wpisywać polskich liter. Przysłała mi wszystko żebym coś poradził. No to do dzieła.

Były to pliki z kodami źródłowymi C. Wskazany przez Niemców program był to typowy edytor kodu źródłowego. No i tu od razu pojawiała się myśl - zapewne wskazali ten edytor by nie namieszać z kodowaniem znaków. Otwieram pliki, zawierają menu kontekstowe jakiegoś urządzenia (jak aparat fotograficzny czy coś podobnego) w kilku tłumaczeniach - Angielski, Niemiecki, Hiszpański i inne. Struktura pliku bardzo prosta, to może jest zrozumiałe, ale też kijowo dobrana i nieudokumentowana. Były tam nieokomentowane tablice dwuwymiarowe, gdzie głównym wymiarem był indeks danego łańcucha, a podrzędnym wymiarem indeks języka, wyglądały mniej więcej tak:

Kopiuj
char * jakies_tam_menu[] = {
    { "(zdanie w języku angielskim)", "(zdanie w języku niemieckim)", "(zdanie w języku hiszpańskim)", ... },
    { "(zdanie w języku angielskim)", "(zdanie w języku niemieckim)", "(zdanie w języku hiszpańskim)", ... },
    ...
};

:) Czyli nie wiadomo jakie tłumaczenie jest od czego. Brak otagowania sprawia, że kontekst danego wyrazu czy zdania musimy wywnioskować wyłącznie na podstawie obecnych tłumaczeń (które to zapewne powstały w podobny sposób, a tylko jeden język pierwotnie był bazą). Co gorsze, kompletny brak podziału ze względu na język:
*nie ma podziału plików, w jednym pliku znajdują się tłumaczenia wszystkich języków
*nie ma podziału danego pliku, w jednym pliku mamy raz jedne tłumaczenia, raz inne
*nie ma nawet podziału fragmentu pliku, tłumaczenia są kompletnie wymieszane, w zasadzie podział na język następuje na najniższym poziomie hierarchii i dosłownie jedna linia kodu zawiera różne tłumaczenia.
Na początku każdego z plików widnieje notka deweloperska (w skrócie):

*"Ten plik jest zapisany w ASCII Latin-1 i nie spieprzyć tego"*

Zerkam na tabelę znaków Latin-1, no i faktycznie, zawiera niezbędne znaki dotychczasowych tłumaczeń. Ale polskich znaków niestety nie uświadczysz.

Mail do Niemców, po dłuższym czasie odpowiedź. Rezygnują ze zlecenia :D

edytowany 4x, ostatnio: adf88
Johnny_Bit
Tak btw w moich WTF powodem bólu głowy i przyczyną filtracji są właśnie usługi niemieckie... a do tej pory najwyższy standard prezentują usługi rosyjskie.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:3 minuty
0

1234.png

Zobacz pozostałe 3 komentarze
RE
ale o co chodzi? to teraz mamy wklejać wszystkie aplikacje www, które się wywalają? to 4p będzie tutaj miało screena codziennie ;P
hauleth
Porównaj logo na ekranie z adresem. Nic Cię nie dziwi?
RE
Ah, jakimś cudem mój mały móżdżek skojarzył, że musi to być Google Chrome i tak wygląda standardowy ekran błędu tej przeglądarki :(. Dunnoh.
Marooned
Przydałoby się jeszcze rozwiązanie zagadki ;-)
Azarien
@Marooned: DNS zwariował. pomógł reset routera.
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Kto zgadnie, jaki będzie wynik tego kodu w PHP:

Kopiuj
$array=array('a','b','c','d','e','f','g');

foreach($array as &$a)
{
}

foreach($array as $a)
{
}

print_r($array);

Poprawna odpowiedź:

Kopiuj
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
    [5] => f
    [6] => f
)

(patrz ostatni wyświetlony element, a ostatni element w tablicy w kodzie)
http://dev.eek.be/2010/10/php-quirks-passing-an-array-by-reference/


Dodatkowo: http://blog.gabrielsaldana.org/php-5-oop-implementation-quirks/

Demonical Monk
  • Rejestracja:ponad 17 lat
  • Ostatnio:11 miesięcy
0
Patryk27 napisał(a):

...

Bo 80% programistów PHP nie ogarnia podstawowych zasad działania tej VMki i dziwi ich nawet to:

Kopiuj
<?php
var_dump(in_array('3LubieCiastka', array(1, 2, 3))); // bool(true)

Na każdej stronie z rzekomymi "PHPowymi WTFami" przypieprzają się do losowych przykładów pokazujących type juggling zamiast przeczytać o podstawach...


Women were the reason I became a monk - and, ah, the reason I switched back...
edytowany 1x, ostatnio: Demonical Monk
Endrju
To wyżej to raczej kwestia tego, że PHP ma tylko 3 zakresy zmiennych. Dla programistów języków, w których zakresy są rozumiane jak w C może to być dziwaczne.
Demonical Monk
Jakby ktoś jeszcze jeden WTF chciał, implementacja hashmapy w PHPie: http://monk.4programmers.net/pub/research/hashmap_source.php . Wykorzystuje ficzery VMki PHPowej by działać wydajnie.
adf88
up: "HASZmap" - głodnemu chleb na myśli ;)
Marooned
'3 ciastka lubię' dla większego zmylenia przeciwnika
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 2 godziny
  • Lokalizacja:Poznań
0

Error handler w PHP łapie błędy i wyświetla ładną stronę z błędem i stacktrace.
Coś tam źle wpisałem, dostałem error 500. Poprawiłem, F5 i... znów strona z błędem i taki oto jego opis:

Kopiuj
If you are interested, you are here because of 200 error.
OK

Uhm.


wasiu
  • Rejestracja:prawie 21 lat
  • Ostatnio:7 miesięcy
  • Lokalizacja:Poznań
  • Postów:1552
0

C#, niby jedna linia kodu:
autObj.State = ObjectState.Updated;
która po wykonaniu miała zawsze wartość Inserted... WTF pomyślałem?

Okazało się, w propertisie na set'cie był ustawiony breakpoint z warunkiem value = ObjectState.Inserted

Pierwszy raz spotkałem się z bug'iem w breakpointcie ;D


Full Stack Developer .NET & Angular, Blazor
Sarrus
hje hje hje ;)
MO
  • Rejestracja:ponad 18 lat
  • Ostatnio:28 minut
0

admini zgłosili problem z jednym z zapytań :
taki pseudo sql: insert from tab1 into tab2 (where rows_from_tab2 not in (select from tab1))
tab1: 10 mln wierszy
tab2: 5mln wierszy

query time: 2939754 (w sekundach :D), ponad miesiąc

KR
prawdziwy WTF polega na używaniu systemu baz danych, który nie umie robić porządnie złączeń :P przecież takie coś nie powinno zająć więcej jak kilka sekund
RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
0

http://itvpdownloader.mmx3.pl/

Typ stworzył stronę internetową, której funkcjonalność to pełne trzy, cztery linie kodu (odkrywanie bezpośredniego linku do materiału wideo ze stron TVP). Ma nawet stronę na facebooku. Chwali się, że aplikacja chodzi w chmurze. Do jej stworzenia zaprzęgł framework, composer, który skompresowany zajmuje ponad 600kb.

Całą funkcjonalność można zawrzeć w jednej linii bookmarkletu: javascript:(function(){if(typeof(playVideo)===%22undefined%22)return;dojo.xhrGet({url:'/pub/stat/videofileinfo%3Fvideo_id='+playVideo.object_id,handleAs:'json',load:function(data){dojo.place('%3Cp%3EAdres%20pliku%20z%20filmem:%20%3Ca%20href=%22'%20+%20data.video_url%20+%20'%22%3E'+data.video_url+'%3C/a%3E%3C/p%3E','videoDebug','first');}});})();
Niecałe 350 znaków.
Ale nie mam fanpejdża i repo na githubie.

edytowany 2x, ostatnio: Rev
Marooned
@kulmegil: włącze tylko wirtualkę z w7 i będę badać :) - co za showman...
mmx3
  • Rejestracja:około 18 lat
  • Ostatnio:ponad 12 lat
0

Typ widzi. Zobacz komcia na wykopie :*


--
#motherforker
RE
niestrudzony poszukiwacz swoich krytyków, widzę, że od razu mój nick w google poszedł :D.
mmx3
nie twój nick :) patrzyłem na live wyniki z google analek i widziałem wizyty 4programers. Poszukałem site:4programmers.net itvpdownloader i dostałem Twojego posta :). Byłem Ciekawy skąd idzie traffic co obala twoją RevoCentryczną teorie internetu :)
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:3 minuty
0

Pół dnia zmarnowane nad Visual Studio 2012, dlaczego w jednym projekcie kod winapi działa, a w drugim nie, mimo dosłownie przekopiowania tych samych źródeł.
Przyczyna: VS2012 domyślnie kompiluje exeki dla Windows 8. Nawet jeśli nie używa się żadnych nowych funkcji, różne #define mogą wciągać zależności wymagające Windows 8.
Rozwiązanie:

Kopiuj
#define _WIN32_WINNT 0x601

żeby ograniczyć SDK do poziomu Windows 7.

Olamagato
Dzięki. Przyda się. Twoje 12 godzin nie będzie zmarnowane. :)
xxx_xx_x
zamiast tego lepiej dodaj sobie do parametrów kompilatora _WIN32_WINNT=0x601
Azarien
Przynajmniej zdobyłem trochę wiedzy o wnętrzu Windowsa, bo zdesperowany wdebugowałem się głęboko. Microsoft używa .cxx jako rozszerzenia plików C++, a źródła Windowsa trzymali w katalogu "d:\w7rtm" :-)
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:3 minuty
0

Oto przykład jak nie powinno się robić aplikacji na telefon
Już zwykły notes jest bardziej użyteczny niż ta aplikacja.

Update:
@several: to porównaj sobie z "Jak dojadę" jak taka aplikacja powinna wyglądać.
Ta aplikacja pokazuje wyłącznie tabelki takie jak na przystankach to totalna żenada.
Sposób wyboru linii i przystanków to funkcjonalna klęska, a cza pokazywania tabelki z godzinami jest nie do przyjęcia.
Z telefonu, przecież można pobrać: godzinę, pozycję i na tej podstawie odszukać przystanek i listę autobusów w najbliższym czasie, zaplanować automatycznie trasę.
Na dodatek w tej aplikacji są błędy w lokalizacji, w wersji polskiej pokazują się niemieckie i angielskie wyrazy, a przecież wykonanie lokalizacji w Androidzie jest banalnie proste, a polski już błędów nie powinien zawierać.
A to jak synchronizuje się dane (założę się, że nie jest to baza danych), to też jest żałosne.
IMO przeciętny student informatyki napisałby lepszą aplikację.
Zresztą po ocenach widać jaka to klapa oficjalnej aplikacji MPK.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 4x, ostatnio: MarekR22
several
Obejrzałem filmik i nie widzę co jest z nią nie tak...
xxx_xx_x
bardzo wolno reaguje, cały czas widzisz pasek "prosze czekać". Przy każdym włączeniu ściąga masę aktualizacji(?). Nie offlinuje rozkładów i przez to nie da się z niej korzystać bez dostępu do neta... do tego często sie wywala, zacina i czasami nawet nie da się jej zamknąć (proces cały czas działa)
Marooned
Jak nie potrzeba szukać połączeń tylko sprawdzić najbliższą "piętnastkę" to zdecydowanie szybszy jest Transportoid.
W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:3 minuty
  • Postów:3581
0

Duży projekt w Javie, ja jako kontraktor w uznanej firmie, siedzę sobie grzecznie przy biurku i coś tam piszę...

W końcu sąsiad wyskakuje z pytaniem: "[imię]... A czy do Sety mogą trzymać nasze obiekty?"

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 12 lat
0
Sarrus
Brakuje jeszcze hasła do bazy danych ;]
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:3 minuty
0

Zabrakło miejsca na C:.
Podczas szukania co by tu wywalić (tak na szybko zwolniłem 3 gigabajty) zauważyłem że plik wymiany pagefile.sys ma rozmiar 128 GB. Dokładnie, co do bajta – prawdopodobnie górny limit.

somekind
Jak to zrobiłeś?
Olamagato
Wystarczy jakaś własna aplikacja z bugiem ciągnącym malloca...
Azarien
Ja? nie wiem, dlatego WTF. I to jest 32-bitowy system, żeby było śmieszniej.
Olamagato
@Azarien - kiedyś wyciągnąłem ponad 20 GB zanim się zorientowałem, że robiłem sobie gigantycznego memleaka na procesach potomnych (limit jest 2-4 GB/proces). Innym razem aplikacja mi się nie zamykała i szukając błędu z każdym debugiem otwierałem kolejne instancje i żarłem RAM. :) Ale fakt, że przyczyn może być kilka - choć te są najprostsze (z brzytwy Okhama).
unikalna_nazwa
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 10 lat
0

Na windows 8 po wyczyszczeniu "listy niedawno używanych elementów" na pulpicie pojawiła się bez pytania ikonka "Ostatnie miejsca" której nijak się nie da usunąć
Po sekundzie w googlach okazało się że to bardzo popularne zachowanie windowsa znane jeszcze z wersji siódmej i żeby się tej ikonki pozbyć trzeba utworzyć skrót do "Ostatnich miejsc" na pulpicie dzięki czemu zastępuje on tę ikonkę i skrót ten można następnie już normalnie usunąć...
Dla mnie mocny WTF, tak samo jak to że ten bug nie tylko nie został poprawiony ale przetrwał do kolejnej wersji windowsa :|


Pół giga extra na dropboxie? Pół giga extra na dropboxie! Tyle wygrać! >>Klik here<<
edytowany 2x, ostatnio: unikalna_nazwa
Azarien
Używam funkcji „autoukrywanie” paska zadań. Rzadko, w niejasnych okolicznościach, pasek przestaje się automatycznie chować, i pomaga tylko reset. Ten błąd się ciągnie od Windowsa 95, czyli kiedy powstał pasek zadań.
LN
@Azarien: też to mam :/ Wkurza, jak diabli :/
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:8 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

Rzecz dzieje się w kodzie aplikacji "da' b'g corpo". Język java...

Kopiuj
CorporationFormDelegate cf = corporationFormDelegateResolver.findDelegate(corporationData, variant);

        cf.handleSubmitForm(corporationData);

        if (cf == null || invalidCaptcha(response, request)) {
//...
            return;
        }

I tak w czterech czy pięciu miejscach...


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
Wibowit
IntelliJ takie kwiatki wykrywa z automatu.
Koziołek
no właśnie dziś przysiadłem do tego kodu i pewno jeszcze nie jeden tego typu kwiatek wykryję... Cholera... pół roku nie programowałem i się odzwyczaiłem od pewnych rzeczy...
0
Kopiuj
bWait.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent zdarzenia)
            {
                tInfo.append("Oczekiwanie na połączenie...\n");
                   new Thread(
                           new Runnable()
                   {
                       public void run(){
                        try {            konnect = 1;
 
                                         socket = server.accept();
                                          if(socket.isConnected()){
                                         tInfo.append("Nawiązano połączenie\n");
                                         ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                try {
                    message = (String) ois.readObject();
                } catch (ClassNotFoundException ex) {
                     tInfo.append("Błąd odczytu wiadomości\n");
                }
 
            tMessage.append("Kient: "+message+"\n");}
                        } catch (IOException e) {
                                          e.printStackTrace();
                                                         }}
                   }).start();
 
            }
        });
 // wysylanie wiadomosci
        bSend.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent zdarzenia)
            {
                 if(socket.isBound()){
                try{
                        tMessage.append("Serwer: "+tSend.getText()+"\n");
                        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
                        oos.writeObject(tSend.getText());
 
                   }catch (IOException e){ tInfo.append("Wiadomość nie została wysłana\n");}
            } else tInfo.append("Brak połączenia\n");
            }
        });

Ktoś usilnie próbował nazywać zmienne po angielsku. String message, Socket socket... int konnect xD

edytowany 1x, ostatnio: Marooned
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)