• 2012 (3)
  • 2011 (51)
  • 2010 (38)
  • 2009 (36)
  • < września 2009 >
    Pn Wt Ś Cz Pt So N
      1 2 3 4 5 6
    7 8 9 10 11 12 13
    14 15 16 17 18 19 20
    21 22 23 24 25 26 27
    28 29 30        

    Weź udział!

    Logo konkursu Wolny Wybór

    wypróbuj

    Logo wielojęzycznego chatu

    : Home / blog / wpisy wg daty
    Września 2009

    Sobota 26 września 2009

    Mierzenie czasu wykonania skryptu PHP - własna klasa PDF Drukuj Napisz e-mail
    Wpisał %s Patryk yarpo Jar
    sobota, 26 września 2009 15:05
    PHP / Artykuły PHP

    Zawsze warto wiedzieć jakie rozwiązanie w danych okolicznościach jest szybsze. Można za każdym razem odczytywać czas z początku i z końca, potem odejmować... Ale czy to nie jest nudne i żmudne?

    A może by tak raz napisać porządnie klasę, a potem się już tylko lenić:

    {codecitation class='brush: php'}// autor Patryk yarpo Jar, klasa Profiler pozwala na mierzenie czasu wykonania skryptu

    class Profiler {

     

        private $start         = false;

        private $stop          = false;

        private $duration    = false;

     

        public function __construct() {

            $this->start = $this->getCurrentTime();

        }

     

        private function getCurrentTime() {

            list($usec, $sec) = explode(" ", microtime());

        return ((float)$usec + (float)$sec);

        }

     

        private function measureDuration() {

            if (false != $this->stop or false != $this->start) {

                $this->duration = $this->stop - $this->start;

                return $this->duration;

            }

        return false;

        }

     

        public function start() {

            $this->stop = false; // skoro zaczelismy, to popredni stop jest niewazny

            $this->duration = false; // nie wiemy kiedy konie, wiec skad mamy znac dlugosc?

            $this->start = $this->getCurrentTime(); // aktualny czas

        return $this->start;

        }

       

        public function stop() {

            $this->stop = $this->getCurrentTime();

        return $this->measureDuration();

        }

       

        public function getStartTime() {

            return $this->start;

        }

       

        public function getStopTime() {

            return $this->stop;

        }


        public function getTime() {

            // jeszcze nie obliczono trwania

            if (false === $this->duration) {

                return $this->stop();

            }

            return $this->duration;

        }

    }{/codecitation}

     

    Jak z tego korzystać? Bardzo prosto:

    {codecitation class='brush: php'}$time = new Profiler();

    for($i=0; $i<10000000; $i++) {

        $tmp = array();

    }

    echo 'taka pętla trwała: ' . $time->stop();{/codecitation}

     

    Oczywiście można potem ten sam obiekt wykorzystać jeszcze kilka razy. Do tego służą metody Profiler::start() oraz Profiler::stop(). Dodatkowo można odczytać czas początku, końca oraz trwania osobno. Wedle upoobania.

    Read more
    Zmieniony ( niedziela, 27 czerwca 2010 10:34 )

    Debugowanie kodu - wyświetlanie złożonych struktur PDF Drukuj Napisz e-mail
    Wpisał %s Patryk yarpo Jar
    sobota, 26 września 2009 14:40
    PHP / Artykuły PHP

    Programowaie bez debagowania jest jak ogród bez kwiatów. Nie, wcale nie łatwiejszy w utrzymaniu!

    Jeśli nie potrafisz dobrze wyszukiwać błędów w swoim kodzie, to na pewno nie jesteś dobrym programistą. Każdy programista zmaga się z problem debugu średnio całe życie. Nie ważne jak dobrym programistą nie jesteś i tak zawsze coś będzie działać źle.

    Co wtedy zrobić? na pewno nie należy załamywać rąk. Trzeba sprawdzić jakie dane trzymamy w zmiennych. Następnie porównać to z tym, czego oczekiwaliśmy.

    Read more
    Zmieniony ( poniedziałek, 26 kwietnia 2010 20:15 )

    Nagłówek XML w skryptach PHP PDF Drukuj Napisz e-mail
    Wpisał %s Patryk yarpo Jar
    sobota, 26 września 2009 12:44
    PHP / Artykuły PHP

    Niektórym webmasterom bardzo zależy na tym, aby ich strona była w możliwie najnowszej technologii. Dlatego też wstawiają przed DOCTYPE taką linię - nagłówek XML:

    {codecitation class='brush: xml'}<?xml version="1.0" encoding="utf-8"?>{/codecitation}

     

    Jeśli jednak serwer PHP ma w ustawieiach (plik php.ini) taką linię:

     

    {codecitation}short_open_tag = On{/codecitation}

     

    To nagłówek XML łapie się pod tę składnię. Parser PHP błędnie będzie próbował interpretować zawartość nagłówka jako skrypt PHP...

     

    Rozwiązanie I (jeśli masz dostęp do php.ini):

    Zmień wyżej cytowaną linię na:

    {codecitation}short_open_tag = Off{/codecitation}

    Pamiętaj jednak, że wtedy nie możesz załączać swoich skryptów w taki sposób:

    {codecitation class='brush: php'}<?

    // tu mój skrypt

    ?>{/codecitation}

     

    Rozwiązanie II:

    {codecitation class='brush: php'}<?PHP echo '<?xml version="1.0" encoding="iso-8859-2"?>'; ?>{/codecitation}

    I problemu nie ma.

     

    Rozwiązanie III:

    zainstaluj PHP 6 :P. Z tego co mi wiadomo, w tej wersji PHP krótkie tagi otwierające mają zostać wycofane. (Na dzień dzisiejszy PHP 6 jeszcze nie ma oficjalnej finalnej wersji - AFAIK).

    Read more
    Zmieniony ( poniedziałek, 26 kwietnia 2010 20:16 )

    Includowanie - baza danych PDF Drukuj Napisz e-mail
    Wpisał %s Patryk yarpo Jar
    sobota, 26 września 2009 12:39
    PHP / Artykuły PHP

    Porada ta jest rozwinięciem: Includowanie - pliki

    Przedstawię tu, w jaki sposób mając tylko 1 [słownie: jeden] plik – 'index.php' – można wczytywać nieskończenie wiele różnych stron. Wszystko dzięki odpowiednim wykorzystaniu bazy danych MySQL (równie dobrze może to być każda inna). Stwórzmy więc najpierw odpowiednią bazę danych:

    Przydatną może się okazać porada: MySQL z wiersza poleceń


    {codecitation}create database moja;    # utwórz bazę danych

    use moja;             # przejdź do tej bazy danych

    create table strony (

        id_strony int(5) primary key auto_increment,

        menu char(30) not null,    

        tresc text               

    );

    insert into strony values (null, 'home', 'to jest strona główna');

    insert into strony values (null, 'o mnie', 'to jestem ja');

    insert into strony values (null, 'kontakt', 'moje GG: 00000');{/codecitation}

     

    Jeśli udało cię się już stworzyć bazę danych i odpowiednią tabelę, zapraszam dalej. Teraz stworzymy stronę index.php:

     

    {codecitation class='brush: html'}<html>

    <head>

      <meta http-equiv="Content-type" content="application/xhtml+xml; charset=utf-8" />

      <title>Includowanie z bazy danych</title>

    </head>

    <body>

    <!-- Tu stały top, banner, logo itp. -->

     

     <?PHP /*Tu będzie kod php */ ?>

     

    <p>Tu stała stopka</p>

    </body>

    </html>{/codecitation}


    Menu będzie wyglądać tak:

    {codecitation class='brush: html'}<ul>

      <li><a href="index.php?id_strony=1">home</a></li>

      <li><a href="index.php?id_strony=2">o mnie</a></li>

      <li><a href="index.php?id_strony=3">konakt</a></li>

    </ul>{/codecitation}


    Gdzie id_strony jest numerem rekordu w bazie danych, który przechowuje treść dla tej podstrony. Oczywiście aby to miało sens, także menu powinno być generowane automatycznie:

    {codecitation class='brush: html'}<ul>

    <?PHP

    $conn = mysql_connect('localhost', 'root', 'krasnal');

    mysql_select_db('moja');

     

    $query = 'SELECT id_strony, menu FROM strony;';

    $wynik = mysql_query($query);

     

    while($rekord = mysql_fetch_assoc($wynik))

         echo '<li><a href="index.php?id_strony='.$rekord['id_strony'].'">'

            .$rekord['menu']."</a></li>\n";

    ?>

    </ul>{/codecitation}

    A tak będzie wyglądać kod PHP:

    {codecitation class='brush: php'}<?PHP

    if (isset($_GET['id_strony']))

    {

         @$id_strony = $_GET['id_strony'];

    }

    else

    {

        $id_strony = 1; // jeśli nie wysłano takiej zmiennej - wczytaj index

    }
     

    $query = 'SELECT tresc FROM strony where id_strony='.$id_strony.';';

    $wynik = mysql_query($query);

    $rekord = mysql_fetch_assoc($wynik);

    echo '<p>'.$rekord['tresc'].'</p>';

    mysql_close($conn);

    ?>{/codecitation}

    I to by było na tyle. Oczywiście jest to bardzo prymitywny kod. Jak może zauważyłeś brakuje też panelu administracyjnego, w którym można by dodawać nowe treści. Jednak pokazuje zasadę działania includowania treści z bazy danych. Na podstawie tego można juz całkiem sporo zbudować. Życzę miłego eksperymentowania :P.

    Uwaga: Nie przypadkiem użyłem 'id_strony' zamiast 'id'. Jest to zalecenie google [a każdy w google być chce, więc lepiej się stosować:P ]

    Uwaga2: Kod pisałem dawno temu. Jego styl pokazuje raczej zasadę działania includowania - nie zasady dobrego kodowania :)

    Read more
    Zmieniony ( poniedziałek, 26 kwietnia 2010 20:20 )

    Includowanie plików PDF Drukuj Napisz e-mail
    Wpisał %s Patryk yarpo Jar
    sobota, 26 września 2009 12:31
    PHP / Artykuły PHP

    Tworząc strony w statyczym HTMLu często ma się - słuszne - wrażenie déjà vu. Ciągle powtarza się ten sam kod. Góra i dół identyczne, zmienia się tylko zawartość jednego pojemnika... W razie zmiany owej "góry" lub "dołu" trzeba zmieniać n-plików, co jest nużące. Cnotą programisty jest lenistwo! Dlatego najpierw wymyślono ramki. Jednak ramki nie są dobrym rozwiązaniem [dlaczego nie, to jest temat na długi artykuł].

    Read more

    Zmieniony ( poniedziałek, 26 kwietnia 2010 20:30 )

    MySQL z wiersza poleceń PDF Drukuj Napisz e-mail
    Wpisał %s Patryk yarpo Jar
    sobota, 26 września 2009 11:51
    PHP / Artykuły PHP

    Jeśli jesteś już zmęczony tworzeniem skryptu za każdym razem jak chcesz dodać nowe dane do bd, może warto zapoznać się z innymi sposobami dostępu do bazy danych. Oto jeden z nich - wiersz poleceń. Spokojnie, to nie boli, a często jest dużo szybsze niż strona czy popularne panele takie jak phpMyAdmin czy SQLBuddy.

    Otwieranie wiersza poleceń:

    Sposób I: Start -> uruchom -> "cmd"

    Start -> uruchom -> "cmd"

     

    Sposób II - skrót klawiszowy "windows + R":

    Windows + r

    Następnie w okienku, które się pojawi wpisujemy "cmd" (od command line - wiersz poleceń).

    Po tym pojawi się nam czrne okienko, wyglądające mniej więcej tak:

     

    Zakładam, że już uruchomiłeś serwer MySQL. Potrzebujemy najpierw dojść do katalogu, w któym przechowujemy MySQL. U mnie to jest:

     

    {codecitation}C:\wamp\bin\mysql\mysql5.1.36\bin{/codecitation}

     

    Jak widać znajdujemy się w

     

    {codecitation}C:\Document and Settings\yarpo{/codecitation}

     

    Aby przejść do MySQl musimy wpisać:

     

    {codecitation}cd ..

    cd ..

    cd wamp\bin\mysql\mysql5.1.36\bin{/codecitation}

     

    Oczywiście jeśli masz zainstalowany serwer w innym miejscu to musisz podać inną scieżkę. cd ([ang.] change directory) pozwala przechodzić między katalogami. Dwie kropki oznacza - katalog nadrzędny, tak jak "w górę" w windowsie.

    Aby uruchomić serwer (będąc już w odpowiednim katalogu) wpisujemy:

     

    {codecitation}mysql -u root -p{/codecitation}

    Wtedy pokaże się nam komunikat o konieczności podania hasła. Wpisz tam swoje hasło do bazy danych.

     

    Korzystanie z bazy danych

    Jeśli wszystko poszło dobrze, to możesz już korzystać ze swojej bazy danych. Najpierw wybierzmy jakąś bazę danych;

    {codecitation}mysql> use {nazwa bazy danych};{/codecitation}

     

    A oto kilka przydatnych poleceń:

     

    {codecitation}mysql> create database {nazwa}; # tworzenie nowej bd

    mysql> use {nazwa bazy danych}; # wybór bazy danych

    mysql> show databases; # wyświetla wszystie bazy danych, do których masz dostęp

    mysql> grant {przywileje} on {baza}.{tabela} to {nazwa_uzytkownika} identified by &#8220;{haslo}&#8221; # tworzy nowego użytkownika

    mysql> revoke {przywileje} from {nazwa_użytkownika}; # odebranie przywilejów użytkownikowi &#8211; przeciwieństwo grant

    mysql> quit; # wyjście{/codecitation}

    Oczywiście, aby coś wyświetlić, dodać itp. używasz dobrze znanych SELECT, INSERT, DELETE itp. Z tym, że nie musisz tego umieszczać w kodzie PHP, a zwyczajnie "z palca" wpisujesz.

    Więcej o samym języku SQL znajdziesz na stronach:

     

    Read more
    Zmieniony ( poniedziałek, 26 kwietnia 2010 21:44 )

    co zrobić jak GMAIL ma awarię? PDF Drukuj Napisz e-mail
    Wpisał %s Jan Jackowicz-Korczyński
    sobota, 26 września 2009 07:22
    IT / Dev zone

    25 września znowu ZDARZYŁY się  przerwy w działaniu serwisu gmail.com.

    W przeciągu ostatnich 3 tygodni to już druga tego rodzaju ,,wpadka'' Google.

    Jak w takich sytuacjach dostać się  do swojej  poczty?

    Zbytnio przyzwycailiśmy sie do tego, że poczte na g-mail obsługujemy pztrez pzreglądarke internetową klientem WWW (usługa zwana popularnie WEBMAIL). Ale przecież serwer poczty GOGGLE działa jak każdy inny serwer pocztowy na bazie sieciowej usługi poczty elektronicznej. Interfejs WWW jest tylko jednym ze sposobów obsługi tej poczty.

    Awarie dotyczyły jedynie mechanizmów WEB 2.0 obsługwanych pzrez pzreglądarki. Nie dotyczyły samego programu pocztowego.

    Problem nie dotyczy serwerów pocztowych.

    Kto chce otrzymywać lub wysyłać wiadomości, może skorzystać z dowolnego klienta poczty elektronicznej przy użyciu serwera IMAP znajdującego się pod adresem imap.googlemail.com (SSL, port 993), a także serwera SMTP pod adresem smtp.googlemail.com (SSL, port 465 lub 587).  

     

    Read more
    Zmieniony ( niedziela, 27 września 2009 05:47 )

    Microsoft o CHROME FRAME PDF Drukuj Napisz e-mail
    Wpisał %s Jan Jackowicz-Korczyński
    sobota, 26 września 2009 06:41
    Blog / wpisy

    Rzecznik prasowy Microsoft szybko zareagował na pokazanie się PLUGINU CHROME FRAME dla IE, który   wymienia silnik oraz obsługę JS w przeglądarce IE. Dzięki zastosowaniu pluginu CHROME FRAME IE bez problemu obsługuje najnowsze technologie oparte na standardach 3WC.

    Microsoft ostrzeżenie przed użyciem pluginu argumentuje bezpieczeństwem. Użycie pluginu miałoby zmniejszyć bezpieczeństwo sieciowe użytkownika. Rzecznik prasowy Microsoft zwraca uwagę na to, jak wiele zrobiono w IE 8 dla bezpieczeństwa użytkownika. Powołuje się w tym na ostatnie, sponsorowane przez Microsoft (!!) badania bezpieczeństwa przeglądarek.

    W reakcji na te zarzuty oponenci IE zwracają uwagę na kilka istotnych kwestii:

    1. Sprawa bezpieczeństwa, o jakiej mówi rzecznik Microsoft, nie dotyczy IE6 i IE7, jakie również ,,obsługuje'' CHROME FRAME. Te pzreglądarki trudno nazwać bezpiecznymi. Windows Update w jakiś sposób je na bieżąco łata, ale nie jest to robione automatycznie jak w wypadku CHROME.
       
    2. Przeglądarka CHROME okazała się bezkonkurencyjna w zakresie bezpieczeństwa w ostatnim konkursie przeglądarek Pwn2Own w marcu 2009 r.
      Jest to otwarty konkurs dla hakerów (z wysokimi nagrodami), którego zadaniem jest jak najszybsze włamanie się za pomocą przegladarki internetowej. W Bbhieżącej edycji najgozrej wypadła SAFARI. Odnośnie wyników dla CHROME zobacz więcej: tutaj


    3. Na sprawy bezpieczeństwa można też patrzeć z innej strony - z punktu widzenia twórców złośliwych programó atakujących przeglądarki. W jego interesie będzie zarażenie jak największej liczby uzytkowników. Chrome ma obecnie najwyżej 20% rynku. Dla każdego hakera atrakcyjniej będzie atakować IE ze wzgledu na jego większą popularność. 

    Zobacz więcej na ten temat: Wypowiedź Emila Protalińskiego: TUTAJ

     


    P.S.

    Dla wyjaśnienia. Cytuję tu informacje wyczytane w sieci. Sam nie znam jeszcze CHROME. Używam Firefox'a. Dlaczego? Brakło mi czasu, aby posmakować nowej pzreglądarki GOOGLE. 

    Read more
    Zmieniony ( sobota, 26 września 2009 07:20 )


    Piątek 25 września 2009

    Psikusy returna, czyli czemu mam siwe włosy PDF Drukuj Napisz e-mail
    Wpisał %s Patryk yarpo Jar
    piątek, 25 września 2009 23:43
    Java Script / Artykuły JS

    JavaScript jako jeden z najbardziej niezrozumianych języków świata posiada parę właściwości, których ja zrozumieć nie umiem. Nie, abym nie chciał.

    Jedną z nich jest fakt, że nie nakazuje wstawiania średników po każdej instrukcji. Jeśli jednak nie wstawisz średnika, może cię srogo ukarać... (trochę mi to przypomina adminów sieci osiedlowej w moim akademiku :P). Read more

    Zmieniony ( poniedziałek, 26 kwietnia 2010 21:53 )

    Różne sposoby konkatenacji ciągów znaków PDF Drukuj Napisz e-mail
    Wpisał %s Patryk yarpo Jar
    piątek, 25 września 2009 23:16
    Java Script / Artykuły JS

    Jest kilka sposobów na łączenie cięgów znaków. W tym artykule opiszę 3.

     

    Sposób I - "optymistyczny"

    Optymistyczny dlatego, że używa się samych plusów.

    {codecitation class='brush: js'}var string_1 = 'Ala ma ';

    var string_2 = 'kota';

    alert(string_1 + string_2);{/codecitation}

    Korzystając z tej metody pamiętaj o różnych niespodziankach związanych z wykorzystywaniem operatora `+', który jest też wykorzystywany do dodawania liczb.

     

    Sposób II - obiektowy

    Wykorzystamy tu wbudowaną metodę obiektu String.

    {codecitation class='brush: js'}var string_1 = 'Ala ma ';

    string_1.concat('kota');

    alert(string_1);{/codecitation}

    Metoda ta, na pierwszy rzut oka wydaje się mniej intuicyjna. Z moich testów wynika, że także nie musi (a w przypadku IE zdecydowanie nie jest) być najbardziej wydajna. Choć to dziwne.

     

    Sposób III - własny

    Stwórzmy szybko prosty obiekt YString (wielka litera z przodu nie przez przypadek - konwencja. Obiekty wymagające operatora new staraj się nazywać wielką literą. Obiekty, które nie wymagają new, małą literą):

    {codecitation class='brush: js'}var YString = function (sep) {

        this.__strings__ = [];

        this.separator = sep || "" ;

    }

     

    YString.prototype.append = function(str) {

        this.__strings__.push(str);

        return this;

    };

     

    YString.prototype.toString = function() {

        return this.__strings__.join(this.separator);

    };{/codecitation}

     

    I przykład zastosowania takiego kodu:

     

    {codecitation class='brush: js'}var oString = new YString(" ");

    oString.append("Ala ma").append("kota");

    alert(oString.toString());{/codecitation}

     

    Dodatkową ciekawostką jest zastosowanie tu wzorca łańcuchowego (jak np. w jQuery). Po wywołaniu metody append(), możemy po kropce wywołać kolejną metodę tego obiektu, będzie ona działać a tej samej instancji obiektu, ponieważ w metodzie append() zawsze zwracamy referencję obiektu, na którym pracujemy.

    Read more
    Zmieniony ( poniedziałek, 26 kwietnia 2010 21:56 )

    Strona 2 z 13
    << Początek < Poprzednia 1 2 3 4 5 6 7 8 9 10 Następna > Ostatnie >>