Programistyczne WTF jakie Was spotkały

Programistyczne WTF jakie Was spotkały
Demonical Monk
  • Rejestracja:około 17 lat
  • Ostatnio:10 miesięcy
0

Piszę sobie piszę, nic poważnego więc szablonów nie używałem jako tako.

Kopiuj
<p>Your premium points: <span class="grube"><?php echo(trim($ppoints)); ?></span> (<a href="donate">Buy more!</a>)</p>

Niepozorne, nie? Wrzuciłem kod na serwer, patrzę - mam 0 punktów na koncie, zero nie jest pogrubione. WTF? Patrzę w kod strony, a tu:

Kopiuj
<p>Your premium points: <span style="font-weight: bold;"></span>0 (<a href="donate">Buy more!</a>)</p>

Hmm... Przetarłem oczy kilka razy.

Kopiuj
<p>Your premium points: <b><?php echo(trim($ppoints)); ?></b> (<a href="donate">Buy more!</a>)</p>

Po takiej drobnej poprawce, oglądam kod ponownie.

Kopiuj
<p>Your premium points: <b></b>0 (<a href="donate">Buy more!</a>)</p>

"prostytutka!" - pomyślałem. Dobra, przeszedłem się po pokoju... Zasiadam ponownie do skryptu. Może to przez keszowanie? Podbiłem w bazie danych wartość do dziesięciu. Pogrubiło się. Czyli cache. Usunąłem wszystko z folderu /cache/ i przywróciłem wartość zero. I co? I znowu nie pogrubione. Walnąłem ręką w stół. Dnia dzisiejszego pracę blokowało mi wszystko, łącznie z ikonkami w firefoxie które nie zawsze się ładowały i tym, że w kodzie stron Google było:

Kopiuj
<html style="display: none;">

Co ciekawe znikało po 5 sekundach, trochę się naczekałem przy wyszukiwaniu...
Wracając do sprawy: Dobra, spokojnie. Gdzieś musi być przyczyna. Po kilku godzinach znalazłem w projekcie, że moduł z pliku w którym ja pisałem jest ładowany przez jakąś klasę, formatowany i dopiero wtedy wyświetlany. Poprzeglądałem pliki, a tu się okazało że wszystko co wyrzucałem w tym module jest łapane przez bufor (ob_start()), a potem klasa traktuje to jakąś funkcją która przestawia tagi jeśli napotka pojedyncze zero. Ktoś ją napisał żeby mieć mniej roboty w innych modułach (zapewne tam miało być pogrubiane wszystko oprócz zer). Zonk jak c***...


Women were the reason I became a monk - and, ah, the reason I switched back...
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:dzień
  • Lokalizacja:Rzeszów
0

Jak pracowałem w poprzedniej firmie to czasem dostawaliśmy projekty do zrobienia/poprawienia od takiej "niby-konkurencji" - nie wiem gdzie oni się tego uczyli, ale te stronki były pełne błędów i ledwo chodziły..

Raz z kolegą z pracy przeglądamy html wyjątkowo "skomplikowanej" jak na nich stronki, trochę pośmialiśmy się z tych cudów i tego, że to jakoś działa,
potem poszedł css - jeszcze większa zabawa, ale jak dotarliśmy do tego (element zmyślony, bo nie pamiętam) - to już podłoga i dobry humor do końca dnia :D

Kopiuj
element {
    right: left;
}

a co autor miał na myśli - tego się nigdy niestety nie dowiemy :)


somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:2 dni
  • Lokalizacja:Wrocław
0

Konwersja string -> float:

zmienna_float = atof((char*)(void*)Marshal::StringToHGlobalAnsi(f1->maskedTextBox2->Text))

Po prostu potwór.


Po dopracowaniu rozwiązania każdy będzie mógł założyć własny drzewiasty wątek.
rafal__
  • Rejestracja:ponad 18 lat
  • Ostatnio:11 miesięcy
0

program po zbuildowaniu "release" się zawieszał, "debug" nie.

okazało się, że flaga, na którą czekał jeden wątek powinna być volatile, nie była. niby taki banał, a 2 godziny zajęło dojście czemu to nie działa ;)

madmike
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 5 lat
2

Największe programistyczne WTF jakie spotykam, to wtedy, kiedy zaglądam do źródeł swoich programów sprzed dziesięciu lat. Wtedy co chwilę jest WTF...


0

program po zbuildowaniu "release" się zawieszał, "debug" nie.

okazało się, że flaga, na którą czekał jeden wątek powinna być volatile, nie była. niby taki banał, a 2 godziny zajęło dojście czemu to nie działa

W C++ to akurat nie jest żadne wielkie WTF. Powody dlaczego program działa w debug a w release nie są różne. Ja np ostatnio nie zainicjowałem zmiennej.

KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:2 miesiące
  • Postów:2964
0

okazało się, że flaga, na którą czekał jeden wątek powinna być volatile

IMHO poleganie na volatile do synchronizacji wątków w C++ to też jest WTF.
http://stackoverflow.com/questions/2484980/why-is-volatile-not-considered-useful-in-multithreaded-c-or-c-programming

edytowany 1x, ostatnio: Krolik
aurel
Moderator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
1

program po zbuildowaniu "release" się zawieszał, "debug" nie.

U mnie - zmienna nie była zadeklarowana jako unsigned. W trybie debug nie powodowało to problemów, w trybie release - część danych była traktowana jak liczby ujemne.

Azarien
  • Rejestracja:około 21 lat
  • Ostatnio:dzień
1

Narzędzie CASE dla ubogich, czyli rysowanie algorytmów bloczkowych (teraz to się nazywa „diagramów aktywności”) w OpenOffice Draw i na podstawie tego ręczne „generowanie” kodu. Za każdą, najmniejszą zmianą.

R9
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 10 lat
0
Kopiuj
      string wartosc_bez(string a)
      {
        int dl=a.length();    //zlicza dlugosc ciagu tekstu
        string tab[dl+1];  //jesli nie bedzie dzialac to tab[1000]   //tworzy tabele w której bede przetrzymywane wartosci ciagu
        string nowa="";       //nasza wartosc bezwzględna tz. bez -
        int i; //zmienna interakcyjna
        for(i=0;i<=a.length()-1;i++)  //od znaku 0 do znaku ostatniego -1
        {
        tab[i]=a[i];  //przypisuje do tablicy dany znak
        if(tab[i]=="-") //jesli znajdzie znak - to nic nie robi
        {}
        else //jesli tego znaku nie ma skleja cyfry
        {
            nowa=nowa+tab[i];
            }        
        }  
        cout<<"Wartosc bez z liczby: "<<a<<" jest: "<<nowa;
      }

kod od kumpla, komentarze zostawiłem takie jakie były
Miał zwracać wartość bezwzględną wpisanej liczby. Zrobił to za pomocą stringów...

Czy widzieliście kiedyś dłuższy kod do sprawdzenia i ucięcia pierwszego znaku w stringu? Użyliście kiedyś do czegoś takiego tablicy stringów?

@Azarien:
To już mój JavaBlock potrafi tworzyć kody JS z narysowanych w nim schematów blokowych :) tylko jeszcze muszę eksportera napisać żeby miał z czego pobierać dane i gdzie wypisywać. Fakt - kod nie ma nic wspólnego z optymalnością, bo każdy blok to osobna funkcja i wywołuje kolejne bloki-funkcje w wyniku czego powstaje ogromne drzewko, a właściwie tasiemiec wywołanych funkcji

Azarien
prawdziwy wtf polega na tym, że w pętli używane jest length() zamiast gotowej zmiennej dl.
LG
To komercyjny kod ?
R9
ta wartość bezwzględna? nie, to było zadanie domowe :)
LG
Szkoda ;p Myślałem, że jak takie coś jest komercyjnym kodem to nie martwił bym się o pracę, za którą się pomału rozglądam ;p
0

nauczyciel programowania, przykład programu obiektowego:

Kopiuj
 class Klasa
{
    public:
        Klasa() {}
        ~Klasa() {}
    ...
}

int main()
{
    Klasa *p = new Klasa();
    (...) //cos tam sie dzieje

// i teraz perełka
    p->~Klasa();
    return 0;
}

Jak zobaczy ten kod w sieci od razu sobie mnie przypomni oraz moją odpowiedź na ten kod:

Kopiuj
while(true)
{
    Klasa *p = new Klasa();
    p->~Klasa();
} 

Pokazałem mu ładnie menedżer zadań (bo inaczej by tego nie zrozumiał), zaznaczyłem mychą proces i przez 3 minuty kazałem się wgapiać w kolumnę zużycie pamięci, wszystko oczywiście opanowanie i kulturalnie jak to na ówczesnego ucznia technikum przystało.
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:dzień
  • Lokalizacja:Poznań
0

Google Docs (edytor tekstowy tylko) zamiast kursora używa DIVa (class="kix-cursor-caret"), który jest pokazywany i chowany przez JS - tylko po to, by dało się regulować jego grubość.. scary :O
Dla mnie to WTF dnia.


lukasz_kz
  • Rejestracja:około 16 lat
  • Ostatnio:około 10 lat
  • Postów:266
0

Pewne dedykowane oprogramowanie do zarządzania siecią wodociągową w pewnym mieście...

Kopiuj
if Licznik7=11 then
     begin
       Licznik7:=0;
       Zablokowane:=True;
     end;
      case licznik7 of
       1,2,3,4,5,6,7,8,9,10:begin
                               Form2.Zasterowal:=True;
                               Form2.Filter:=Licznik7;
                               Form2.Write_to_PLC:=True;
                               Form2.ActiveFilter[licznik7]:=1;
                            end;
     end

Ścieżki wyglądają tak... :

Kopiuj
Zdarzenia.nazwa_zdarz:='C:\XXX\ARCHIV\zdarz'+IntToStr(mies)+'.dat'; 
Kopiuj
Alarmy.nazwa_alarmy:='C:\XXX\ARCHIV\alarmy'+IntToStr(mies)+'.dat';

W miejscu XXX jest nazwa miasta....

Przyciski na panelach w klimacie lat 90...
Ogółem wygląda to tak jakby jakiś elektronik trzymał kurs Delphi na kolanach i tworzył to co przed chwilą przeczytał. [*]

edytowany 3x, ostatnio: lukasz_kz
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:dzień
  • Lokalizacja:Rzeszów
0

dziś znalazłem to we własnym kodzie, niby nic wielkiego, ale WTF jest:

Kopiuj
public function countAll() {
	return 10;
}

(ktoś tu ma w sygnie wybieranie losowego imienia, działający na podobnej zasadzie ;))


Wibowit
Wygląda jak mock. Może mieszasz kod testowy z produkcyjnym? ;]
somekind
Może to jest mock produkcyjny? Kiedyś będzie taka funkcjonalność, ale na razie zakładamy, że... ;)
dzek69
znalazłem, ja to skopiowałem jeszcze z innej klasy, którą kiedyś pisałem, a nie dokończyłem i tak zostało (a countAll i tak nigdzie nie było użyte)
RedbaK
  • Rejestracja:prawie 19 lat
  • Ostatnio:ponad 7 lat
  • Lokalizacja:Helsingør / FZ
  • Postów:1051
0

Hej!
Własnie dziś sobie przeglądałem of-topa i natknąłem się na ten temat:
Oto WTF nr 1:
http://4programmers.net/Forum/Off-Topic/174540-znalezienie_goscia_po_gg_i_mailu

A mój prywatny już to
Sytuacja na studiach. Kumpel z roku na jednej lekcji na Instalacjach Elektrycznych wkręcił naszą wspólną kumpelę z grupy, że kabelek w zielonej koszulce przewodzi szybciej prąd niż analogiczny w czerwonej!!! Zaś poleciała z euforią po ten kabelek do profesora. :) Profesor nie wiedział co robić, bo wpadł w paniczny śmiech zresztą jak reszta na lekcji. :) :) :) Lutowaliśmy jakiś układ wtedy. :) :) :) Chyba chciała, aby jej układ był najszybszy buahahaha. :) Nie piszę już jaki miała kolor włosów, ale potwierdziła fakt. :)

Dziewczyna, gdy zapisywała się na studia informatyczne (programowanie/sieci komputerowe), kilka dni wcześniej pierwszy raz w życiu kupiła komputer i wtedy miała też pierwszy raz styczność z nim. :)
Na pracę inżynierską wymyśliła sobie, że napisze soft, w którym oprogramuje port chyba RS232 i podłączy pod niego czytnik fingerprintów, gdzie wyświetli skan na kompie.

Najlepsze jest to, że się obroniła, ale pisząc jakąś stronkę w htmlu finalnie, a najlepsze jest to, że znalazła pracę na taśmie.
Ot taki mój OJP w czasie studiów moich. :)

somekind
Hardcorowa ta Twoja koleżanka. :D
RedbaK
Talentów było tam sporo takich, ale ona wywarła największe wrażenie na uczelni. :) ja już pomijam to, że uczyła się kodów na pamięć.
somekind
Yyyy... Szacun :D
Szuwar_Jr
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 9 lat
  • Postów:34
0

Świeżo po zdaniu C++ zabrałem się do pisania gry w statki dla treningu. Pisałem w MFC, każde pole reprezentuje oddzielny button. Program ukończyłem... xD
http://img26.imageshack.us/i/statkit.png/

Jak tak teraz myślę, to chyba warto wspomnieć o koledze, który napisał w gimnazjum szachy w assemblerze. Nie wiem jak wyglądała aplikacja, ale i tak robi wrażenie.


Przyjmuję zlecenia w C++
edytowany 4x, ostatnio: Szuwar_Jr
RedbaK
  • Rejestracja:prawie 19 lat
  • Ostatnio:ponad 7 lat
  • Lokalizacja:Helsingør / FZ
  • Postów:1051
0

Następne WTF?
14 lutego i walentynki.

Św. Walenty był tak naprawdę patronem umysłowo chorych, także się nie dziwię.. ;]

MA
Ale udzielał ślubów zakochanym, nawet bez zgody rodziców ;)
RedbaK
co nie zmienia faktu, że to zwykły komercyjny dzień dla psychopatów :)
aurel
bardzo programistyczne to wtf
RedbaK
Nieważne jakie. :>
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:dzień
  • Lokalizacja:Poznań
0

JavaScript - taka ciekawostka:

typeof [] => "object"
[].toString() => ""
toString.call([]) => "[object Array]"

typeof {} => "object"
{}.toString() => syntax error
toString.call({}) => "[object Object]"


hauleth
Zadziałało ({}).toString(); => "[object Object]"
unikalna_nazwa
dla ciekawych: żeby wywołać w ten sposób toString dla tablicy, trzeba użyć Array.prototype.toString.call(...)
BS
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 12 lat
0

@Marooned:
To nawet nie jest taka tylko ciekawostka. Owszem, ilustruje to błąd języka -- byłoby znacznie bardziej użyteczne, gdyby typeof zwracał dla tablic po prostu array zamiast object (drugi, ciut mniej dający się we znaki błąd jest taki, że dla null ten operator zwraca object, więc jeśli chcemy sprawdzić, czy coś jest prawidłowym obiektem, to musimy pisać warunek v && typeof v === 'object' ).

Tak się składa, że kod, który napisałeś, jest najlepszą metodą na sprawdzenie, czy obiekt jest tablicą. Dawniej używano innych sposobów, każdy miał własne problemy. Nawet Douglas Crockford w swojej (świetnej) książce radzi stosować coś takiego:

Kopiuj
function isArray(v) {
  return typeof v.length === 'number' &&
                    !(v.propertyIsEnumerable('length')) &&
                    typeof v.splice === 'function');
}

Pokraczne, niezbyt wydajne podejście, w dodatku wygląda na tak połatane (sprawdzamy obecność losowo wybranej funkcji splice), że w teorii nie musi zawsze działać.

I tu wkracza fragment tego kodu, z którego się (słuszne) tutaj naśmiewamy. Oto najlepsza, najbardziej uniwersalna wersja isArray, jaką widziałem -- używam jej w swoich projektach:

Kopiuj
function isArray(v) {
  return Object.prototype.toString.apply(v) === '[object Array]';
};

Szczerze mówiąc nie wiem, czy używanie samego toString, czyli window.toString jest w pełni przenośne i bezpieczne -- specyfikacja nie zabrania chyba obiektowi globalnemu nadpisywania metody toString. Gdyby metoda była nadpisana (nie przez użytkownika, tylko przez implementację), to użycie samego toString mogłoby już nie działać. W praktyce, z tego co widzę, nie jest to problemem, ale na wszelki wypadek ja używam Object.prototype.toString (może to zbyt defensywne z mojej strony).

W każdym razie, zachowanie operatora typeof jest WTF-em, ale to, że tablica.toString() działa inaczej niż obiekt.toString() nie jest WTF-em. To zwykłe nadpisywanie funkcji. Tyle że JavaScript jest na tyle potężny, że możemy wywołać metodę Object::toString() nawet na rzecz tablicy. Wyniki są wtedy inne niż wywołanie tablica.toString(), bo to po prostu różne metody. A że {}.toString() rzuca błędem składni, to już szczegół związany z parsowaniem. Podstaw {} do zmiennej i wywołaj toString() na rzecz zmiennej, to zadziała. Akurat wywoływanie metod klasy Object bezpośrednio na rzecz literału obiektowego to jedno z niewielu miejsc, gdzie składnia JS-u się wykłada. Prawdopodobnie ze względu na to, że klamry ograniczają też bloki (strzelam). Można wywoływać metody na rzecz literałów wyrażeń regularnych (/wzorzec/.exec()), łańcuchów znaków ('abc'.split('\n')), liczb (3.14.toFixed(1)) czy tablic ([1, 2, 3].join(' ')), więc ogólnie nie jest źle.

edytowany 1x, ostatnio: bswierczynski
Marooned
Przyznaję, że to Twój pierwszy (z długich) post, który przeczytałem w całości ;-)
unikalna_nazwa
bo Ci przysłodził na początku :D
Marooned
po prostu zazwyczaj jest tl;dr ;)
msm
Ja czytamwszystkie "długie" posty, ale rzadko mam okazję bo się w webmasteringu nie udzielam.
hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:3 dni
0

WTF od mojego nauczyciela. Sprawdzanie czy dany plik w folderze jest obrazem w celu wyświetlenia ich wszystkich w galerii...

Kopiuj
if($file != '.' and $file != '..' and (substr($file, -3) == 'jpg' or
substr($file, -3) == 'bmp' or
substr($file, -3) == 'png' or
substr($file, -3) == 'gif' or
substr($file, -3) == 'JPG' or
substr($file, -3) == 'BMP' or
substr($file, -3) == 'PNG' or
substr($file, -3) == 'GIF')
and substr($file, -6, 2) == '_s')

Azarien
a co w tym WTF? przyczepiłbym się tylko osobnego sprawdzania 'bmp' i 'BMP' ale to nie aż takie przewinienie.
KR
Można by jeszcze to substr wyrzucić do osobnej zmiennej i lepiej nie brać sztywno 3 znaków, a raczej sprawdzić, czy jest kropka i brać wszystko od ostatniej kropki, bo np. jpegi mogą mieć ".jpeg". Ot, nie najlepszy ten kod, ale też i raczej nie jakieś wielkie WTF.
hauleth
A ja bym sprawdził mime_type, pewniej :P
lolq
  • Rejestracja:około 15 lat
  • Ostatnio:około 4 lata
  • Postów:423
0

u mnie WTF było jak pisałem coś w C++ (nie pamiętam co, bo to dawno było) i po kompilacji kaspersky wykrył mi w kodzie wirusa xD
szkoda, że nie mam tego kodu bo bym wrzucił, ale poszukam jeszcze jak gdzieś na dysku znajdę to zapodam :)


...
madmike
nic niezwykłego... antywirusy plują się wykrywając operacje pewnego typu...
msm
potrafią być przewrażliwione.
deus
False-Positive to nic nowego, zapewne kiepska sygnatura.
lolq
mimo wszystko spotkałem się z tym pierwszy raz
deus
Gorzej mają klikacze Delphi bo trochę sygnatur niektórych AV zawiera m.in. fragmenty Indy, dopasowanie pozostałości to już ruletka.
MO
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 9 godzin
0

Ostatnio pracuję w projekcie w osobnym branchu w projekcie. Nadszedł czas "mergowania" z trunkiem.
svn merge --dry-run (plus reszta odpowiednich opcji).
W wyniku, ku mojej wielkiej radości otrzymuję:
Konflikty tekstowe: 109
Konflikty drzewne: 171
Pominięte ścieżki: 1

No i będzie wesołych kilka dni:)

RedbaK
  • Rejestracja:prawie 19 lat
  • Ostatnio:ponad 7 lat
  • Lokalizacja:Helsingør / FZ
  • Postów:1051
0
Zobacz pozostałe 4 komentarze
madmike
sam mam powyżej 17 milionów :) BTW: bez bajerów, z obsługą między innymi jabbera, pluginami - super
RedbaK
To zaraz zapuszczę go. :) Miranda to dobra w lecie na upały. :P
RedbaK
Dobrze, że jest po polsku, to będę gnębił moją lubę. ;]
Marooned
Od kilku lat używam Pidgina [GG, Jabber (Facebook, Gtalk, inne), kiedyś Facebook zanim był XMPP, fajna wtyczka]. Jedyna dziwna rzecz (na początku), to łączenie wszystkich kont w jedno. Można pojawić się np. tylko na GG, ale generalnie nastawienie jest na "wszystko w jednym" - po prostu włączasz IM nie przejmując się o protokoły.
somekind
Konnekt nie ma problemów z numerami GG, po prostu trzeba ściągnąć nowsza wersję wtyczki.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Ja osobiście używam WTW już długi czas i wydaje mi się całkiem fajny :)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Zobacz pozostałe 3 komentarze
RedbaK
Personalizacja mirandy jest naprawdę słitaśna. :) :D Jeśli chodzi o GG, to chyba jak z tymi Nokiami - popularne, lecz nienajlepsze. No jak protokół zablokują to przejdziemy na czat.4p.pl :D
RedbaK
OK madmike: dzięki za sugestie dotyczące mirandy. I'm gonna go to en Øl ;) Tak skal du have :)
RedbaK
Ide na piwo. :) Dziękuję jeszcze raz. :)
Shalom
Nie mam pojęcia o jakich reklamach mówicie, co to za "reklamowe kontakty"? o_O
Adam Boduch
Administrator
  • Rejestracja:około 23 lata
  • Ostatnio:4 dni
  • Postów:11948
0

Moze nie jest to najwieksze WTF, ale...

Kopiuj
<table>
<tr><td><table><tr><td><a href="#">Link</a></td></tr></table></td></tr>
<tr><td><table><tr><td><a href="#">Link</a></td></tr></table></td></tr>
</table>

Tak wyglada konstrukcja menu.

SI
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 11 lat
0

To menu wygląda jeszcze całkiem 'przyzwoicie'. Jakieś 4 miesiące temu wprowadzałem drobne modyfikacje na stronę pewnego urzędu. Tam menu też było zbudowane na tabelkach, tylko, że tam menu było... rozwijane. Poza tym strona była tak genialnie zbudowana, że rozwalała się na ie nowszym niż 7 (<![if IE 7]></tr><![endif]>).

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:2 dni
  • Lokalizacja:Wrocław
0

Mnie dziś rozwaliła (jeszcze nie zrealizowana) koncepcja liczenie MD5 lokalnych plików przy użyciu Azure, co ma być superwydajne, dzięki ogromnej mocy obliczeniowej tamtych serwerów...


Po dopracowaniu rozwiązania każdy będzie mógł założyć własny drzewiasty wątek.
deus
  • Rejestracja:prawie 21 lat
  • Ostatnio:około 12 lat
0

Przekopując się przez źródła libtorrent:

Kopiuj
		char buf[8 + 4 + 4 + 20 + 20 + 8 + 8 + 8 + 4 + 4 + 4 + 4 + 2 + 2];
		char* out = buf;

I nie udawaj, że rozumiesz.
0

W czym widzisz to WTF?
W tym

Kopiuj
char buf[8 + 4 + 4 + 20 + 20 + 8 + 8 + 8 + 4 + 4 + 4 + 4 + 2 + 2];

Ilość składników rzeczywiście duża. Ale ja też uważam powyższy zapis za lepszy od

Kopiuj
char buf[100];

i zastanawianie się dlaczego akurat 100.

deus
Jeszcze lepsza jest struktura (o którą tutaj się rozchodzi) albo chociaż jakiś ładnie nazwany const z rozmiarem.
somekind
Ja bym chyba napisał char buf[100], a skąd się wzięło 100 wyjaśnił w komentarzu.
aurel
Tymbardziej, że powyższy zapis wcale nie wyjaśnia dlaczego akurat 100 - wręcz przeciwnie, wprowadza dodatkowe zamieszanie, bo się zastanawiasz, dlaczego to jest tak zapisane... Co też autor miał na myśli? A jeśli ta wielkość faktycznie zależy od jakichś składowych... to też nie tak się to zapisuje, tylko uzależnia od tych składowych :/
Azarien
wcale nie musisz wiedzieć, że to jest 100. czasami ważniejsze jest właśnie 8+4+4+20+20+itd, jeśli każda z tych liczb coś oznacza. dalszym krokiem byłoby utworzenie osobnej stałej dla każdego składnika.
massther
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 9 lat
0

W c# ktoś bawił się w ręczne odejmowanie lat od daty i ponowne tworzenie obiektu daty, nie pamiętam dokładnie jak to wyglądało ale coś w stylu

Kopiuj
DateTime NowaData(DateTime d, int years)
{
  return new DateTime(d.Year-years, d.Month, d.Day);
}

Był akurat 29 lutego gdy w aplikacji produkcyjnej zaczęły sypać się błędy. Jako że było rano, chyba nawet przed pierwszą kawą, po analizie kodu ide do kierownika i mówię że jest taki mały bug, który może ujawnić się 29 lutego w szczególnej sytuacji. Na to kierownik: "O kur* przecież dziś jest 29 lutego..." :D Do tego momentu jakoś sobie tego nie uświadamiałem. W ciągu godziny poprawka trafiła na wszystkie serwery aplikacji, a kod trafił na naszą "ścianę płaczu" :D

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)