michu

Reputacja

3,526

Głosów ogółem

użytkownik głosował za tyle razy
297
Użytkownik głosował przeciw tyle razy
33
  • Popularne pytanie
  • Taksonom
  • Samouk
  • Nauczyciel
  • Organizator
  • Zdyscyplinowany
  • Niezła odpowiedź
  • Komentator
  • Student
  • Autobiograf
  • Patrol obywatelski
  • Cofnął głos
  • Krytyk
  • Wsparcie
  • Redaktor
Prawdziwe imię
Michał Chaniewski
Członek od
7 miesięcy, 4 tygodnie
Ostatnio widziany
1 miesiąc, 1 tydzień temu
Witryna
http://michu3ci...
Miejscowość
Gdynia
Wiek
33

O mnie

Programista od 8 roku życia. Przez pierwsze dwa lata pisałem programy w BASICU na platformie "brulion A4". Przez następny rok rozgryzałem, dlaczego moje programy nie działają po wklepaniu w Atari 65XE. Potem już jakoś poszło...

Motto: "Walking on water and developing software from a specification are easy if both are frozen."

Pytania: 1

Odpowiedzi: 172

  • 2010-01-29 08:40:03 Jaka jest nazwa operatora "-->" ?

    To był żart.

    • -- to operator odejmowania,
    • > to operator "większy od".

    Przestaw spacje i już wszystko jasne.

    A teraz pytanie dnia - co ja ci takiego zrobiłem, że mi pojechałeś po odpowiedziach z góry na dół, co? Ja w życiu nie zrozumiem jak można poświęcać swój czas i energię na taką bezinteresowną złośliwość...

    Aaa, już kumam. Mój błąd był w użyciu słowa "bezinteresowność".

  • 2010-01-19 17:14:58 Blokowanie widoku źródła strony lub ograniczenie dostępu

    Ale nie ma takiej fizycznej możliwości. Jak chwilę pomyślisz nad tym, jak działa przeglądarka internetowa i protokół HTTP, to raz-dwa sobie to uświadomisz.

  • 2010-01-20 14:15:33 Co lepsze - IF-RETURN czy IF obejmujący kod całej funkcji?

    @pawelkor - w komentarzu do wypowiedzi jest za mało miejsca, stąd oddzielna odpowiedź.

    Nie mogę się zgodzić co do tezy, że nie należy wyskakiwać z funkcji w jej środku. Wprost przeciwnie, przynajmniej w nowoczesnych językach programowania. To jest doskonały przykład sytuacji, w której powtarzamy i kultywujemy pewne zasady mimo że już dawno zapomnieliśmy, dlaczego były one istotne. Zanim więc podam powody, dla których return można wsadzać gdzie się chce, napiszę skąd wzięło się przykazanie, że funkcja powinna mieć jeden punkt wyjścia i dlaczego w nowoczesnych językach jest ono już nieaktualne.

    Głównym powodem, dla którego taka reguła się pojawiła, było zarządzanie pamięcią, uchwytami plików, ogólnie - cennymi zasobami, które trzeba zwalniać gdy się przestaje z nich korzystać. Mając kilka punktów wyjścia z funkcji bardzo łatwo było zrobić błąd i czegoś nie zwolnić. Mając jeden punkt wyjścia, gdy taki błąd wystąpił, wystarczyło sprawdzić w tym jednym miejscu - bez analizowania całej logiki powyżej. Nawet w tym przypadku jednak debugowanie tego typu problemów było bardzo trudne, stąd się pojawiło przykazanie - nie będziesz miał punktów wyjścia, poza jednym.

    Dzisiaj, gdy dysponujemy językami automatycznie zarządzającymi pamięcią, wycieku pamięci tak nie uzyskamy (choć są inne na to metody, hehe) - po prostu gdy lokalna referencja wewnątrz funkcji przestanie być aktualna, garbage collector zwolni alokowaną pamięć. Zatem jeden argument automatycznie spada z listy.

    Poza tym mamy dwie fajne konstrukcje - w C# to jest try...finally oraz using które pozwalają na zarządzanie kosztownymi zasobami w postaci zgrabnych bloków. Zwolnienie takiego zasobu - uchwytu do pliku, połączenia z bazą danych, itd. - następuje automatycznie po wystąpieniu wyjątku (finally) lub przy wyjściu z bloku (using) - nawet w jego środku. Zatem o to też już nie musimy się martwić!

    To wszystko pozwala spłaszczać funkcje. Jeżeli musimy zrobić rzecz A lub B w zależności od jakiegoś warunku - sprawdźmy warunek, jeśli jest spełniony zróbmy rzecz A i zwróćmy wynik. Koniec. Upraszczamy logikę. Jeżeli jakieś miejsce w kodzie jest finalne dla pewnej ścieżki przetwarzania, to niech będzie kategorycznie finalnym, przy użyciu return. W ten sposób dbamy o to, że nigdzie dalej nie wykona się żaden kod który nie powinien, tylko dlatego że przegapiliśmy jakiś warunek, źle zagnieździliśmy bloki itd. Bez mnożenia if-ów, elsów, wyciągania zmiennych poza blok w którym obowiązują tylko po to, by dotrwały do końcowego return... Jeżeli to nie jest czytelniejsze, to nie wiem co jest.

    Tak samo - wyjątki. Każde miejsce gdzie rzucamy wyjątkiem jest punktem wyjścia z funkcji, mimo że nie zwracamy tu żadnego wyniku. Ktoś przeciwko temu protestuje? Chyba nie, wyjątki zadomowiły się w naszych językach już dawno. Zatem czemu nie pójść krok dalej i nie porzucić całkiem tej całej farsy z jednym punktem wyjścia na końcu?

  • 2010-01-20 20:16:44 preg_replace w JavaScript? [zamknięte]

    tekstWejsciowy.replace(/wyrazenie_regularne/g, "tekst zastępujący")
    

    Jeżeli używasz nawiasów ( ) to wychwycone referencje możesz umieścić w tekście zastępującym jako $1 .. $9.

  • 2010-01-21 13:53:08 Zadanie na długie zimowe popołudnie

    ha, przestrzeń rozwiązań to 4^8 = 65536 (liczba wariacji z powtórzeniami 4 znaków działań na 8 pozycjach) razy liczba Catalana C(8) = 1430 (liczba rozmieszczeń par nawiasów na 9 elementach) - co daje 93.716.480. W sumie pikuś - można przeszukać algorytmem bruteforce wszystkie możliwe ustawienia działań i nawiasów, i wybrać rozwiązania mieszczące się w założonym przedziale :-)

    Ktoś ma czas się pobawić? Ja chyba nie bardzo...

  • 2010-01-21 15:32:38 Kontrola wersji dla bazy danych

    Krótka odpowiedź: Wersjonujesz schemat bazy danych w postaci skryptów, nie samą bazę danych. Zmiany na bazie odzwierciedlasz w postaci kolejnych skryptów przyrostowych - które nie tylko modyfikują strukturę, ale też zawierają niezbędne transformacje / migracje danych, jeżeli są one potrzebne.

    Długa odpowiedź: Poczytaj rewelacyjną serię artykułów K. Scotta Allena na ten temat:

  • 2010-01-22 11:07:11 Świetne ikony.

    Fajne, dzięki. Tylko że to nie do końca pytanie, a to nie jest forum tylko serwis Q&A. Tzn. nie krytykuję, bo informacja cenna i przydatna - jedynie zgłaszam problem. FAQ 9fingers.pl wspomina o czymś takim jak pytania "community wiki" - kiedy to ruszy, bo chyba ta funkcja nie jest jeszcze dostępna? Niniejsze "pytanie" jak ulał by tam pasowało...

    EDIT: No i mamy pierwszego oszusta w serwisie. Polecam zajrzeć w historię reputacji autora wątku. Ja pytam - po co? "Reputacja" to nie ilość punktów, to ilość dobrej karmy którą przekażemy innym i która wraca do nas kiedy tego potrzebujemy. Reputacja wynika z życzliwego i bezinteresownego dzielenia się rzetelną wiedzą i jest czymś nieuchwytnym, czego się nie da zmierzyć, zważyć. Jest czymś, co po prostu się czuje - a nie czymś, co da się zdobyć wypisując niewiele warte, powtarzające to co już zostało powiedziane odpowiedzi, na wątki wyłapane z góry na dół "jak popadnie" - i przez głosowanie na nie z innego konta. Są na tym portalu osoby, które mają niedużo punktów, ale już mają reputację i mój szacunek i respekt za to, co sobą reprezentują - za konkretną wiedzę albo przemyślane, wyważone opinie.

    Kolego czesuaf - polecam przemyśleć. Jesteś młody, masz prawo popełniać błędy. Niech to będzie ostatni z tego gatunku. Gdzieniegdzie widać, że znasz się na pewnych rzeczach. Rozwijaj to a możesz zajść daleko. Ściemą - nigdzie. Powodzenia.

  • 2010-01-31 19:28:42 PHP stronicowanie treście

    No to wszystko jasne (w kontekście tej wypowiedzi). Składni PHP nie chcę kaleczyć, bo nie programowałem w tym wynalazku od lat, więc zapiszę Ci w pseudokodzie. Mogą być jakieś drobne błędy logiczne bo nigdzie tego nie sprawdzałem, ale to sobie raz-dwa poprawisz.

    const MAX_VISIBLE = 9; // liczba max. widocznych linków do stron 
    total_pages = 15;  // wiadomo, to będziesz miała z bazy
    current_page = 5; // a to z URL-a
    showStartDots = true;
    showEndDots = true;
    
    start = current_page - (MAX_VISIBLE \ 2); // dzielenie całkowite
    end = current_page + (MAX_VISIBLE \ 2);
    if(start <= 1) {
      start = 1;
      showStartDots = false;
    }
    else {
      start += 1;
    }
    
    if(end >= total_pages) {
      end = total_pages;
      showEndDots = false;
    }
    else {
      end -= 1;
    }
    
    for(i = start; i <= end; i++){
      if (i == start && showStartDots) {
        // wyswietl link do strony 1 a potem trzy kropki
      }
    
      // wyswietl link do strony i
    
      if(i == end && showEndDots) {
        // wyswietl trzy kropki a potem link do strony total_pages
      }
    }
    

  • 2010-02-02 11:37:41 Znajdowanie zależności w tablicy

    Jeżeli chodzi jedynie o wyszukanie indeksów, to nie potrzebujesz do tego algorytmu, tylko liniowo przejrzeć tablicę i wybrać indeksy dla których wartość się zgadza. 100.000 to jest żadna ilość, nie problem z przeszukaniem. Ale podejrzewam, że nie o to chodzi bo byłoby za prosto...

    Jeżeli rzeczywiście chodzi o reverse engineering algorytmu, to jest to bardziej zadanie na inteligencję i umiejętności detektywistyczne... Spróbuj sobie to najpierw wyrysować i zobaczyć czy wykres przypomina jakąś typową funkcję - np. wielomian czy coś takiego. Dopiero mając jakieś charakterystyki tego zbioru danych można myśleć co dalej...

  • 2010-02-03 18:37:03 Narzędzie do zarządzania projektem informatycznym

    Hmm, a samodzielne wdrożenie kombinacji Trac + SVN nie wchodzi w grę?

    Jak nie to może Beanstalk albo ProjectLocker?