Programistyczne WTF jakie Was spotkały

Programistyczne WTF jakie Was spotkały
ŁF
Moderator
  • Rejestracja:ponad 22 lata
  • Ostatnio:dzień
0

trochę z innej strony.
była sobie pewna strona, robiona przez pewną firmę z naszej pewnej grupy. z bliżej mi nieznanych powodów powodów strona ta trafiła do mojej firmy. tu się zaczyna. z racji tego, że używamy c#/asp, w firmie nie było programistów php (a w tymże języku napisana została strona). było dwóch jako-tako znających ten język, projekt trafił do znającego go słabiej i w dodatku odchodzącego za miesiąc z firmy pana W.
W. przez miesiąc nie zrobił prawie nic, a miał do zrobienia dość dużo - miał podzielić serwis tak, aby mógł działać w kilku "instancjach" jednocześnie, coś w rodzaju osobnych wersji dla różnych krajów. po miesiącu nadszedł termin oddania projektu i pewnego poniedziałku mieli zjechać do Warszawy dyrektorzy regionalni ze świtami z całej Polski. kilka dni wcześniej, w okolicach wtorku, okazało się, że pan W. faktycznie prawie nic nie zrobił i że mamy nielichy problem. przez miesiąc project manager nie zauważył, że postępów w projekcie praktycznie nie ma, a było to do przewidzenia, skoro projekt dostał człowiek odchodzący z firmy, któremu nie zależało na zrobieniu go. zostało kilka dni na wdrożenie w projekt drugiego programisty (Z.) oraz na wykonanie i przetestowanie zmian. fizycznie niemal niemożliwe. ale to nic. pan Z. dowiedział się w środę, że jest taki projekt, w czwartek, że jest dość ważny, w piątek trzeba było wykonać krytyczne poprawki w innym systemie i tak oto zostały dwie i pół doby do godziny "0". dopiero w piątek wieczorem kierownictwo oświadczyło Z., że projekt jest krytycznie ważny, a poniedziałkowej prezentacji nie da się odwołać (wykupione miejsca w hotelach, bilety itp). i co? ano, udało się, programista zasuwał ponoć 40h pracy bez przerwy + dwa genialne pomysły account managera (nie potrafiącego programować) + pobłażliwość (wynikła ze zdziwienia) ze strony przybyłych na prezentację, którzy byli święcie przekonani, że nie zdążymy.
to odnośnie "warstwy biznesowej" projektu. ale to nie koniec.
strona działała kosmicznie wolno. kilka-kilkanaście sekund na wygenerowanie strony. po krótkiej analizie okazało się, że z każdej strony do bazy danych leci około 200 zapytań. bardziej wnikliwa analiza wykopała takie kwiatki:

  • chcesz wyświetlić konkurs o danym id? pobierz wszystkie konkursy i w pętli wyświetl ten właściwy (oczywiście bez break - a nuż autoincrement na id konkursu nie zadziała).
  • pobieranie danych do wszystkich możliwych elementów stron, tak jest przecież fajniej, bo można jeden moduł ładujący dane podpiąć pod każdą stronę - a że 3/4 z tych danych jest niepotrzebne to nieważne;
  • załączniki dla newsów? koniecznie dla każdego newsa wyciągane w osobnych zapytaniach, jesli na stronie 10 newsów, to 10 dodatkowych zapytań.
    po odchudzeniu/wyrzuceniu/przepisaniu zapytań udało się zejść do ~25 zapytań per request przy wyłączonym cache'u. ale i tak coś długo się wykonywały, ponad 80% czasu generacji strony. rzut oka na indeksy w bazie danych (może coś się uda podkręcić?) i jedno z większych wtf mojego programistycznego życia: ani jednego indeksu. powinienem to sprawdzić na początku, ale w życiu mi do głowy nie przyszło, że w profesjonalnej skąd-inąd firmie, która wcześniej zajmowała się tworzeniem tego serwisu, mogli tego nie zrobić. godzina pracy i baza danych przyspieszyła 4-krotnie.
    to nie koniec.
    rozbudowana strona, odwiedzana przez kilkanaście osób na sekundę, działająca na jednym serwerze http (w dodatku iis) i napisana w php wymaga jakiegoś systemu buforowania. poprzedni programiści nie wpadli na to, buforowali jedynie niektóre zapytania (z czego część nieprawidłowo - dane w niektórych miejscach odświeżały się dopiero po restarcie serwera). buforowanie na poziomie całej strony (nie dało się zrobić na poziomie pojedyńczych elementów, bo serwis nie jest oparty o żaden framework - doh!) zmniejszyło obciążenie serwera na tyle, że z wyjątkiem sporadycznych peaków strona generowała się w akceptowalnym czasie > 1s.
    warstwa "logiki" biznesowej... żal. jeden plik o rozmiarze 300kB, nawet nie klasy. podział na poszczególne kraje? kopie tego pliku ze zmienioną nazwą, zmienionymi nazwami funkcji (!) i innymi wartościami niektórych zmiennych/stałych.
    została warstwa prezentacji. tabele. w nich tabele, a w nich kolejne, rekordowo chyba siódmy poziom zagnieżdżenia, już nie wiadomo czy wszystkie tabele są pozamkane i która gdzie się kończy, zwłaszcza, jeśli tabelę otwiera się w jednym pliku, a zamyka w drugim. css? no, jest, ale inline jest dużo fajniej przecież, więc i dużo częściej. do tego nazwy klas typu gren_span czy yeloow_header.
    projekt spieprzony jeśli chodzi o bazę danych, warstwę biznesową i prezentacji oraz zarządzanie nim.
    ale nie zapominajmy o przedstawicielu firmy, dla której powstawała ta strona. gościu z innej bajki, niemający pojęcia o tym, co to bugzilla, trac czy mantis, niepotrafiący nie tylko programować, ale nieznający nawet podstaw html (dopiero ostatnio się podszkolił), a zatem nie mający bladego pojęcia, jak to wszystko działa, do tego bardzo chaotyczny i niekonsekwentny. w efekcie kilka razy było tak, że trzeba było kilkadziesiąt minut pracy poświęcić na cofnięcie zmian robionych pół dnia.
    i teraz moim zdaniem najśmieszniejsze: po miesiącu zorientował się, że nie działa system rejestracji nowych użytkowników, po sześciu tygodniach, że nie działa system dodawania komentarzy, i dopiero po półtora roku, że nie działa wysyłanie propozycji piosenek.

wstydzę się tego systemu. programistyczna prostytutka.

cdn.

ps. serwis nie ma serwera deweloperskiego ani acceptance...

// o kurczę, ale cegła wyszła...


0
Koziołek napisał(a)
Kopiuj
while (errcd.fetchFrom()) {
	if (true) {
		break;
	}
}
Kopiuj
if (1 == 1) {
	return (0);
}
return 0;

parę moich "poprawek" tak wyglądało jak się nie chciało usuwać wcięć i klamerek
dość wygodne, zwłaszcza że obok w komentarzu można sobie dać stary warunek i w razie czego szybko przywrócić
zadziwiająco często dostaję request że jakiś warunek nagle ma być "zawsze prawdziwy" :o

msm
Administrator
  • Rejestracja:prawie 16 lat
  • Ostatnio:4 miesiące
0

wstydzę się tego systemu.

Czego się spodziewać po systemie stworzonym w 60 godzin? ;)

z każdej strony do bazy danych leci około 200 zapytań.
siódmy poziom zagnieżdżenia

To akurat naprawdę niezłe wyniki, powinieneś zgłosić je na jakiś konkurs ;)

// system nie został stworzony w 60 godzin, raczej przez kilka miesięcy. w kilkadziesiąt godzin został głęboko przebudowany - Ł

SZ
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 15 lat
  • Postów:3356
0

Dzis w pracy: baza otrzymana jako zrzut z systemu produkcyjnego kilenta, by stworzyc nasze oprogramowanie z niej pobierajace czesc danych do swoich obliczen.

Oracle, baza z setkami tysiecy rekordow w kazdej tabeli (czyli srednio), kazdy uzytkownik (nawet nie posiadajacy obiektow) z osobna przestrzenia tabel i schematem. Brak indeksow, kluczy obcych, sekwencji (w zamian max(id) + 1). Brak mozliwosci ingerencji w baze danych (tworzony przez nas system bedzie mial prawo wylacznie do odczytu), a tu zamiast podzapytan czy zlaczen: procedury wbudowane i pakiety.

Wyzwanie: 10 select'ow zlaczonych po kilkunastu tabelach, sredni czas wykonania najszybszego 2,5h na szybkim serwerze produkcyjnym (zaznacze, ze zadanie wsadowe z harmonogramem raz na dwa dni, takze nikt nie czekal specjalnie na wyniki; po prostu po zakonczeniu miesiaca musialy byc dostepne za kazdy dzien). Rozmiar wynikow: 35000 wierszy, 30 kolumn.

Osiagniety cel: 5 select'ow parametryzowanych, czas wykonania najwolniejszego okolo 10 sekund na lokalnej maszynie wirtualnej, wynikow z grubsza 30000 (okazalo sie, ze czesc z zapytan oryginalnie zwracala wiersze, ktorych nie powinna i po stronie klienta byly przed prezentowaniem odfiltrowywane (gdy w jednej z kolumn byl null). Brak wykorzystania jakichkolwiek dodatkowych funkcji z pakietow - wszystko w ladnych (choc bardzo dlugich) zapytaniach.

To jednak nie koniec. Naszym faworytem byl komentarz z skrypcie aktualizacyjnym, dostarczonym przez producenta istniejacego systemu (nie podam z nazwy, ale duza, znana korporacja):

Kopiuj
-- This is to ensure the seed data are appended faultlessly / Please do not remove WHERE condition
SELECT [...] WHERE (1 = 2) OR (2 = 3) OR (3 = 4) {i tak wyliczone do 100}

Dzięki wszystkim forumowiczom za lata wspólnych dyskusji; miłej zabawy w programowanie!
Sławomir "Szczawik" Włodkowski
Freakman
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 7 lat
0

Szczawik: pierwszy raz czytajac ten topic zrobilem naprawde 'oczy kobry' o0


play hard..go pro.
SZ
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 15 lat
  • Postów:3356
0

To dzis ciag dalszy, bo spedzilem kolejne 8 godzin nad ta koszmarna baza danych - istnieje w owej bazie seria widokow, ktorych jedna z kolumn (czasem wiecej), jest wyliczana funkcjami wbudowanymi (ktore jak okazalo sie dzis opieraja sie na duzych zapytania samych w sobie; wyliczanych dla kazdego z wierszy "superzapytania" osobno). Plan wykonania stworzony przez Oracle wykazal TABLE ACCESS(FULL) dla kilkunastu tabel i byl dluzszy od wysokosci mojego monitora (ostatecznie zawiesil SqlDevelopera jeszcze nim wykonalem samo zapytanie). Rezultat optmalizacji: select po trzech tabelach (join) plus podzapytanie, czyli okolo czterech linii SQL. O wydajnosci pisal nie bede... Jak pomysle, ze tworca systemu wzial za niego kwote o jakies zero wieksza niz my zgarniemy za nasz, to az mnie bierze :/

Perelka dnia dzisiejszego: funkcja wbudowana, robiaca dokladnie to samo, co funkcja DECODE (zastanawiam sie, jak ktos potrafil stworzyc paczke funkcji, nie slyszac o podstawowym DECODE czy NVL?!).


Dzięki wszystkim forumowiczom za lata wspólnych dyskusji; miłej zabawy w programowanie!
Sławomir "Szczawik" Włodkowski
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

Szczawik napisz co to za firma albo chociaż co ten program robi :)


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
SZ
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 15 lat
  • Postów:3356
0

Napisze co robi (poniewaz z tego co wiem rywalizujemy z nimi obecnie o jakis przetarg, nazwy wymieniac nie chce); a sam program jest na tyle nietypowy jak na ta firme, ze z jego opisu zgadnac nikt nie ma szans raczej.

Program to duza krowa (ok, kod paskudny, UI przeraza, ale program swoje zadanie wykonuje [o zgrozo] prawidlowo). Oferuje funkcje od podstawowych jak inwentaryzacja stanu pol naftowych, ich testow i przegladow technicznych, notowanie ich wskaznikow i przewidywan produkcji na bazie stanu technicznego, po sugerowanie wspolczynnikow produkcyjnych w oparciu o dzialania handlowe. Jak pisalem, na ta firme bardzo nietypowy produkt.


Dzięki wszystkim forumowiczom za lata wspólnych dyskusji; miłej zabawy w programowanie!
Sławomir "Szczawik" Włodkowski
ŁF
Moderator
  • Rejestracja:ponad 22 lata
  • Ostatnio:dzień
0

znalezione przed minutą (odtwarzacz z portalu zetki):

Kopiuj
		private var _auroRweind:Boolean=true; //always true at the moment

uśmiech od ucha do ucha gości na mojej twarzy


johny_bravo
  • Rejestracja:około 19 lat
  • Ostatnio:około 13 lat
2

Pamietam kiedys taki kod w jakims sklepie internetowym:

Kopiuj
public function GetDeliveryCost()
{
  return 20; //mialo byc pobierane i konfigurowane w bazie, ale nie bedzie, bo sie klient rozmyslil
}

:D


You need to learn how to walk
before you can run
0

duża firma szczecińska, marketing i reklama ;P

baza danych przeszło 1gb, miło się zawsze od razu robi jak klient zleca optymalizację

kasa, 11k zł
czas 3miesiące
zadanie: zoptymalizowanie, przebudowanie bazy danych i wszystko co z tym związane dalej
użytkownik bazy pobierał dane (dowolny select po tabeli która miała przeszło 700MB) w 7min 15sek

rozwiązanie:
primary key....
czas pracy 5min (??)
czas wykonania zapytania <3 sek

Adam Boduch
Administrator
  • Rejestracja:około 23 lata
  • Ostatnio:8 dni
  • Postów:11948
0

@DaVinci: :D pozazdroscic :D

Robie strone dla pewnej firmy. Dostalem kod XHTML i CSS. A tam takie kwiatki typu:

Kopiuj
<div style="margin-top: 30px;">
<div style="margin-top: 10px;">

</div>
</div>

Masa bledow walidatora. Niby strona w XHTML, a zamiast CSS uzywane znaczniki . Niektore wartosci atrybutow wziete w cudzyslowia, niektore nie. Itp. itd.

Zaproponowalem przepisanie kodu od poczatku, ale powiedzieli ze jezeli sie wyswietla to jest ok. ;)

0

co jest złego w zagniezdzaniu divów ?? Programuje od niedawna więc po prostu nie wiem :) Chyba ,ze chodzi po prostu o to ,że divy nie są w żadnych klasach ,albo ,że nic w nich nie ma :)

hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:14 dni
0

że tak nie za bardzo jest sens robić 2 divy z TYLKO margin-top. nie lepiej jest zrobić po prostu 1 ale z większym.


0

niby tak ,ale możliwe ,że autor miał w zamiar w przyszłości zmienic tło dodac border czy co ,a wtedy juz miałoby to sens chyba :)

hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:14 dni
0

to tak nie patrząc chyba lepiej jak by dał atrybut class co nie?? wygodniej by mu było


Adam Boduch
Administrator
  • Rejestracja:około 23 lata
  • Ostatnio:8 dni
  • Postów:11948
0

No dokladnie. Byly dwa divy identyczne z tym co opublikowalem pare postow wyzej. Zadnych atrybutow class, po prostu zamiast dodac wartosci marginesow ktos utworzyl dwa divy ;)

W ogole ktos kto pisal ten kodw wszystko prawie pisal na divach :] Jakby nie bylo innych znacznikow w xHTML...

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

Wlasnie zaliczylem najwieksze WTF z cyklu bledy zglaszane przez klienta. Od miesiaca dostaje wiadomosci, ze czasami po wpisaniu numeru zamowienia wyskakuje blad iz zamowienie nie zostalo znalezione. Od miesiaca odpisuje, iz nie potrafie tego odtworzyc. Dzis <ort>wkoncu </ort>podostawalem screenshoty z danymi jakie trzeba bylo wpisac i sledze nieco skomplikowany proces walidacji przez pol dnia, gdyz oczywiscie dalej nie moge tego odtworzyc.

Sedno sprawy: w query string jest numer firmy z ktora uzytkownik akurat pracuje (tak se <ort>zarzyczyli</ort>). Wpisalem tam inna wartosc i ten jeden raz nie nacisnalem automatycznie entera by odswiezyc strone, tylko wypelnilem reszte pol... i tak! Znalazlem swoj blad ze screenshota! Gdzie query string jest poprawnie wypelniony a zamowienia istniejacego do niego nieznajduje.... no doslownie argh!

A najlepsze w tym jest to, iz za napisanie iz rozwiazaniem jest wcisniecie entera, klient zostanie skasowany z 500 euro.


Full Stack Developer .NET & Angular, Blazor
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:3 minuty
0

najwyraźniej strona nie jest dostatecznie idioto-odporna. Jednak jak to się mówi, programista próbuje stworzyć coś bardziej doskonałego idioto-odpornego, a bóg tworzy doskonalszych idiotów.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Johnny_Bit
  • Rejestracja:około 22 lata
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Kielce
0

Ja miałem wczoraj wft przy kontroli wersji... Napisałem od cholery kodu, puściłem na svn, a jakiś geniusz(któremu się dostanie opieprz w poniedziałek), jakimś cudem walnął w następnej rewizji stary plik i poszło się jechać tak 3/4 funkcjonalności... Chyba ktoś mnie nie słuchał jak mówiłem żeby robić update przed commitem żeby wiedzieć co się dzieje i nie robić syfu na plikach robionych przez innych...


HAKGER - 50% Complete
KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:2 dni
  • Postów:2964
0

To svn w ogóle pozwolił wrzucić coś co nie zostało wcześniej uaktualnione w kopii lokalnej?
Zresztą nawet jeśli, to nic straconego - zawsze można wyciągnąć poprzednią wersję i zrobić undo.

SVN fajnie się zachowuje jak dane w kopii lokalnej rozjadą się z tym co myśli wtyczka SVN do eclipse'a i z tym co jest na serwerze. Np. wtyczka usilnie próbuje wtedy dodawać jakieś pliki, które już są w repozytorium, albo odwrotnie commitować pliki do katalogów, których w repozytorium nie ma. Wygrzebanie się z tego czasem jest bardzo trudne i bolesne (i raz skończyło się świeżym checkoutem całego drzewa).

// SVN wywala wtedy okienko "out of date".. ale 'niektórzy' klikają "Yes, commit" i idzie stara wersja do repo - Deti
wasiu
  • Rejestracja:prawie 21 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Poznań
  • Postów:1552
0
MarekR22 napisał(a)

najwyraźniej strona nie jest dostatecznie idioto-odporna. Jednak jak to się mówi, programista próbuje stworzyć coś bardziej doskonałego idioto-odpornego, a bóg tworzy doskonalszych idiotów.

Oj akurat tutaj kod strony nie ma nic do rzeczy. Z poziomu strony nie masz dostepu do address bara i uzytkownik moze tam wpisac cokolwiek chce i dopoki nie nacisnie entera to po prostu ten adres nie zostanie odswiezony. Nawet jak odswiezysz strone przez F5 to mozesz miec inny adres a byc na starej stronie. Ale to chyba normalne dla kazdego nas, ze jak chcemy przejsc do innej strony to naciskamy enter po wpisaniu jej adresu?


Full Stack Developer .NET & Angular, Blazor
Johnny_Bit
  • Rejestracja:około 22 lata
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Kielce
0
Krolik napisał(a)

To svn w ogóle pozwolił wrzucić coś co nie zostało wcześniej uaktualnione w kopii lokalnej?
Zresztą nawet jeśli, to nic straconego - zawsze można wyciągnąć poprzednią wersję i zrobić undo.

True, ale jak słowo daję, wtf? Teraz jak się spojrzałem jak to głupie robi... ściąga na dysk caaaaałe drzewo do którego ma dostep, kopije pliki, na nich robi, kopiuje z powrotem, commituje a potem robi update caaaałego drzewa... ja pierd... tożto dopiero wtf... chyba parę osób przetrącę w poniedziałek z zasad pracy... poza tym jak ludzie robią w domu to zamiast jak normalni używać normalnego systemu, to oni robią na windowsie i commitują nawet zmiany plików które wyraźnie mówiłem że są dowiązaniami symbolicznymi i będzie ok na każdym systemie, ale nie na windowsie.

Krolik napisał(a)

SVN fajnie się zachowuje jak dane w kopii lokalnej rozjadą się z tym co myśli wtyczka SVN do eclipse'a i z tym co jest na serwerze. Np. wtyczka usilnie próbuje wtedy dodawać jakieś pliki, które już są w repozytorium, albo odwrotnie commitować pliki do katalogów, których w repozytorium nie ma. Wygrzebanie się z tego czasem jest bardzo trudne i bolesne (i raz skończyło się świeżym checkoutem całego drzewa).

Oj true jak nic... na szczęście nie mamy eclipse do bawienia się, ale też się zdarzają jazdy...

Taka ciekawostka, którą odkryłem dziś po południu: im ktoś ma mniejsze praw dostępu do svn tym więcej potrafi spier***ić, 3 pliki na krzyż, a konflikty i tak lecą...


HAKGER - 50% Complete
wasiu
  • Rejestracja:prawie 21 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Poznań
  • Postów:1552
0

Wlasnie mam ciekawe WTF

Pisze do klienta, ze nie moge aplikacji testowac bo VPN wolno dziala... oczywiscie zlew na to i odpowiedz:

That the VPN is slow that's possible, a whole lot of people are watching the tour de france on internet!!

Czyli jak wyglada praca w Holandii ;)


Full Stack Developer .NET & Angular, Blazor
EgonOlsen
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 12 lat
0
Kopiuj
this->~NazwaKlasy();

To wczoraj napisal doktor informatyki, zabije go!!!... [diabel]


<img src="http://www.siglaunch.com/sigs/wow/6/2/7/2/5/1762725HEdyN.png" alt="user image" />
I am he who watches they. I am the fist of retribution. That which does quell the recalcitrant. Dare you defy the Warchief? Dare you face my merciless judgement?
FA
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 11 lat
0

No i? Jakaś metoda, która usuwa obiekt z pamięci (jak został zaalokowany przez malloc czy coś podobnego + placement new) i wtedy ma to prawo bytu.

KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:2 dni
  • Postów:2964
0

Albo fragment przeciążonego delete. Jak pisałem GC dla C++ to takich bajerów było tam mnóstwo (łącznie z malloc + placement new). Ważne żeby wiedzieć co się robi.

rnd
  • Rejestracja:prawie 17 lat
  • Ostatnio:ponad 13 lat
0

Ja widziałem odpowiednik tego w kodzie Javowym - jawnie była wywołana metoda finalize(). Ciekawe czy w przypadku Javy to da się jakoś wytłumaczyć ;)


#define TRUE FALSE
//Happy debugging suckers :D
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
1

@rnd, da się. Głupotą. Generalnie Metody finalize nie należy implementować, chyba że tworzymy coś w rodzaju siatki bezpieczeństwa mającen na celu zamykanie i zwalnianie zasobów systemowych takich jak porty czy pliki.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
EgonOlsen
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 12 lat
0
Fanael napisał(a)

No i? Jakaś metoda, która usuwa obiekt z pamięci (jak został zaalokowany przez malloc czy coś podobnego + placement new) i wtedy ma to prawo bytu.

Krolik napisał(a)

Albo fragment przeciążonego delete. Jak pisałem GC dla C++ to takich bajerów było tam mnóstwo (łącznie z malloc + placement new). Ważne żeby wiedzieć co się robi.

Nie wiem gdzie wy pracujecie albo co robicie ale u nas to maksymalnie moglibyscie sobie poogladac jak wyglada biurowiec z zewnatrz. [rotfl]


<img src="http://www.siglaunch.com/sigs/wow/6/2/7/2/5/1762725HEdyN.png" alt="user image" />
I am he who watches they. I am the fist of retribution. That which does quell the recalcitrant. Dare you defy the Warchief? Dare you face my merciless judgement?
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)