-ENOTTY

Część grafik może być niedostępna w przeglądarkach bez obsługi IDN.
Szef kuchni poleca: Beefy Miracle t-shirts O mnie Planeta !apcoh Social

Personal note (05 maja 2004, 10:33:55)

Krem do golenia rozprowadzany po twarzy bez pędzla, najlepiej pieni się w miejscach, w których nie ma zarostu.

Dodaj komentarz | Trackback

Wysiedlić zdzisia (20 kwietnia 2004, 23:37:16)

osoby otrzymujące stypendium socjalne powyżej 400 złotych będą skierowane w przyszłym roku do ds 5Ł i ds3.
Fajnie, tylko że jak lawina takich ruszy do DS3, to już pewnie nie starczy miejsca dla mnie. A mi się tu bardzo dobrze mieszka. Fuck.
Artykuł na szPieGu.

2 komentarze | Trackback

Extreme Programming w praktyce. (19 kwietnia 2004, 15:30:56)

Laborka z Javy zaczęła się nietypowo. ,,Dzisiaj nie robicie trzeciego ćwiczenia -- powiedział prowadzący -- tylko kończycie drugie. Robicie taką aplikację, z takimi przyciskami, z tym i z tym i z tym i z tamtym. A, i macie tylko godzinę, bo muszę wcześniej wyjść.''
Tak więc w tempie ekspresowym zaczęliśmy pisac. Tzn. ja szybko stukałem w klawisze, a obok mnie Kuba z powodzeniem udawał Google, wertując książkę na wszystkie strony, podając mi parametry funkcji, nazwy klas i inne potrzebne rzeczy. Od czasu do czasu rzucał też pomysłami i podpowiadał fragmenty kodu. Dzięki niemu zdążyliśmy zaimplementować jedną funkcję z całej aplikacji - ,,Exit'' mianowicie ;-). Chyba byliśmy jedynymi, którym cokolwiek działało po zakończeniu zajęć.
Oczywiście JCreator nie działał, więc kompilować musieliśmy ręcznie (ach te tworzone w naprędce pliki .bat). Serwer po Sambie również nie chciał się zgłosić, więc musieliśmy użyć dyskietki. Windows 98 zawiesił się w momencie włożenia dyskietki do stacji. Same miłe rzeczy ;)
Ale abstrahując od tego wszystkiego - Extreme Programing daje efekty. I naprawdę fajnie się pisało. Brakowało jedynie jakieś szybkiej muzyki w tle.

3 komentarze | Trackback

[003643] <@oftokpik> zdzichuBG: cvs ssie (12 kwietnia 2004, 00:40:18)

CVS ssie jak ch*j. Osiem godzin temu zrobilem fajnego commita, 144 KiB mial. Tylko ni ch*ja nie widze go w CVSie ani w changelogu. Kur*a jego mac.

3 komentarze | Trackback

Znajdowanie blogów kumpli jest ciekawe (06 kwietnia 2004, 00:25:22)

Zwłaszcza jak przeczyta się niemal rok z czyjegoś życia w trochę ponad godzinę. I przypomni niektóre wydarzenia. Tylko czasami nastraja to tak pesymistycznie trochę... Cóż, jedni są bardziej imprezowi, inni się w takim klimacie nijak odnaleźć nie mogą. Tylko czy swoje życie nie wydaje się czasami płaskie w porównaniu z przestrzennością żywota innych?
Pozdrowienia dla LCFa ;-)

2 komentarze | Trackback

Wszystko jest danymi - trzeba je gromadzić i przetwarzać (05 kwietnia 2004, 23:17:46)

Parę lat temu -- w 2000 roku o ile dobrze pamiętam -- jadąc samochodem z Torunia do Bydgoszczy ze znajomym informatykiem z firmy, w której w wakacje pracowałem, usłyszałem proste zdanie, które wbiło mi się w pamięć. ,,Wszystko w informatyce sprowadza się do baz danych.'' Zapamiętałem to zdanie, chociaż wtedy uważałem je za przejaw sympatii owego informatyka. Sam byłem zainteresowany wyłącznie sieciami (i do dzisiaj w dużej mierze jestem) -- przesyłanie danych na różne sposoby, przez różne tunele, IPSeci, filtry, dynamiczne routingi, enkapsulacje i inne dziwne wytwory przez wiele lat pobudzało moją wyobraźnię i zajmowało długie wieczory oraz noce.
Ostatnio jednak zacząłem coraz bardziej skłaniać się ku właśnie bazom danych. W PostgreSQLu na mojej workstacji trzymam coraz więcej rzeczy -- książkę adresową, przypisanie adresów IP do numerów pokojów w akademiku, stan mojej gotówki - ile w portfelu, ile ,,w ludziach'', ile na koncie, wszystkie transakcje których dokonuje, spis numerów indeksów wraz z nazwiskami posiadaczy, niedługo chyba będę indeksował pliki z mojego dysku.
Do wszystkiego mam wygodny dostęp poprzez odpowiednie SELECT i JOIN. I czuję, coraz mocniej z każdą chwilą, że przetwarzanie danych kręci mnie coraz bardziej. Niedługo IPSeci będę zestawiał tylko w celu zabezpieczenia połączenia z odległym silnikiem SQL.
Czemu o tym piszę? Otóż jedna z gazet, wykorzystując bazę danych swoich prenumeratorów, zrobiła całkiem miły trik. Każdy z nich otrzyma egzemplarz gazety z satelitarnym zdjęciem okolicy w której mieszka i swoim nazwiskiem wydrukowanym na okładce. I napisem ,,They Know Where You Are''. Ciężkie.

Dodaj komentarz | Trackback

A jednak speed x 5 (03 kwietnia 2004, 16:47:58)

Dało się przyspieszyć bez uciekania się do mod_perla. Zamiast odpytywać bazę o każdą komórkę, zrobiłem jedno zapytanie wyciągające dane na cały tydzień do hasha, w pętli operując już tylko na hashu. Całość dostała kopa niesamowitego.
Cały czas mowa o tym Systemie Rezerwacji. Beware: ten link prowadzi nie bezpośrednio do systemu, ale do jego uproszczonej wersji. Wersja właściwa znajduje się na vhoście niedostępnym spoza naszej sieci akademickiej. Dlatego to, co można obejrzeć z internetu, pozbawione jest kilku arkuszy styli i możliwości wejścia głębiej - można zobaczyć tylko spis. Wystarcza to jednak do ocenienia liczbie zapytań do bazy, które teraz zastąpione są jednym.

Przykład optymalizacji zapytań SQL:

Problem jest taki: mamy w bazie kolejne pola. Problemem jest to, ze numeracja mimo, że sekwencyjna, jest nieciagla. Za zadanie mamy odnalezienie poprzedniego pola w stosunku do $DANE, przy czym nie ma byc on bardziej odległe niż 168 numerków do danego.

  • Pierwsze podejście
  • $akt_nr = $DANE-1;
    do {
                    $query = "SELECT pole FROM tabelka WHERE numer='$akt_nr'";
                    $result = $dbh->prepare($query);
                    $result->execute;
                    $akt_gnr--;
    } while (!(@row = $result->fetchrow) && $akt_nr > $DANE-168);
    
    Zostanie wykonane maksymalnie 168 zapytań do bazy. Jest duża szansa, że przepytywanie skończy się szybciej, zawsze jednak będzie to conajmniej jedno zapytanie.
  • Drugie podejście - niech to zrobi za nas baza
  • Zamiast samemu przetwarzać otrzymane dane, właściwym podejściem jest zrzucenie jak największej ilości pracy na bazę danych. Musimy skonkretyzować nasze żądania:
    $query = "SELECT pole FROM tabelka WHERE numer<$DANE AND numer>$DANE-168 ORDER BY numer DESC LIMIT 1;";
    $result = $dbh->prepare($query);
    $result->execute;
    @row = $result->fetchrow;
    
    I już! Czym różni się to zapytanie od poprzedniego? Po pierwsze, sprawdzanie warunku $akt_nr > $DANE-168 zastąpione zastało zawężeniem zakresu, z którego spodziewamy się wyników od bazy. Po drugie, życzymy sobie posortowania wyników wg. numeru, w kolejności malejącej (DESC). Dlaczego? Ponieważ wtedy pierwszym zwróconym wynikiem będzie ten o najwyższym numerze, za nim będzie o numerze mniejszym, potem jeszcze mniejszym itd. Ponieważ interesuje nas najpóźniejszy wpis -- który zostanie zwrócony jako pierwszy -- ograniczmy się tylko do pierwszego wyniku poprzez LIMIT 1. Pozostałe nie będą przepychane przez kanał komunikacyjny program<->baza. Po co nam one, skoro i tak mają iść od razu do śmieci?
  • Problem trzeci - ciąg danych
  • Tutaj zadanie jest takie: mamy do dyspozycji pewien zakres (od $BEG do $END) numerów, na których będziemy operować. Numery, choć dyskretne, są nieciągłe -- niektórych brakuje. Do przeprowadzenia mamy parę operacji na poszczególnych numerkach. Co robimy?
    O każdy numer można pytać się w momencie, kiedy jest potrzebny:
    pętla {
           [...]
           $query = "SELECT pole FROM tabelka WHERE numer=$potrzebny;";
           $result = $dbh->prepare($query);
           $result->execute;
           @row = $result->fetchrow;
           if (defined($row[0])) { zrob_cos_z($row[0])};
    }
    
    Takich zapytań będzie $END - $BEG, co czasem daje sporo odwołań do bazy. Kosztownych czasowo, zwłaszcza, gdy pobierane pole sklada się np. z numerka i jakieś małej literki.
    Rozwiązaniem jest operowanie na większych porcjach danych pobieranych z bazy:
    $query = "SELECT pole FROM tabelka WHERE numer>$BEG-1 AND numer<$END+1;
    $result = $dbh->prepare($query);
    $result->execute;
    $hashref = $result->fetchall_hashref("numer");
    
    pętla {
          [...]
          $nr = %$hashref->{$potrzebny}->{"costam"};
          if (defined($nr)) { zrob_cos_z($nr); };
    };
    
    W ten sposób do bazy odwołujemy się raz, a nie za każdym przebiegiem pętli. Wyniki otrzymujemy w hashu, można się do nich łatwo odwoływać przez poszukiwany numer. Minusem jest zwiększone wykorzystanie pamięci przez naszą aplikację, jednak przyrost szybkości prawie zawsze rekompensuje tą niedogodność.

    Mając do wykonania większość ilość iteracji podobnych do tych w Przykładzie pierwszym powyżej, należy się zastanowić -- czy dla każdego wyszukiwania generować SELECT z odpowiednio zawężonym zakresem i LIMIT 1? A może lepiej pobrać cały interesujący nas przedział za jednym zapytaniem i używać pętli takiej jak w pierwszym kawałku kodu, zastępując jednak odpytywanie bazy -- odwołaniami do poszczególnych pozycji hasha.

    1 komentarz | Trackback

    mod_perl 2 (02 kwietnia 2004, 17:57:58)

    Po parunastu dniach użerania się z mod_perl 1.99 i Apache2 stwierdzam:
    • prostego skryptu nie da się uruchomić przez ModPerl::Registry - pliki nie dają się otworzyć w takiej konfiguracji. Pozostaje ModPerl::PerlRun, który wg. tego co piszą, jest o połowę wolniejszy.
    • Persistent Connections z użyciem Apache::DBI to jakaś ściema - strona nadal generuje się minimum 1,5s.
    • Zamiana ->prepare($SQL); na ->prepare_cached($SQL); nie daje mierzalnej poprawy wydajności.
    • Eksperymenty z jednokrotnym ->prepare() i użyciem ->bind_param() dały przyspieszenie - ponieważ zapytania do bazy przestały cokolwiek zwracać, obróbka tychże danych była zdecydowanie szybsza.
    Czuję się zawiedziony.

    2 komentarze | Trackback

    Czy ty do mnie piszesz, czy sobie poszedłeś? (21 marca 2004, 12:10:33)

    Dzisiaj powstała obsługa jabber:x:event w EKG2. Duży buziak za nią dla Moniki, którą denerwowały komunikaty wpkontaktu, że wiadomości do mnie nie dochodzą, bo potwierdzeń nie ma. Jedyny problem to leżący CVS, więc nie mogę tego commitnąć. grrrr. Złośliwość rzeczy martwych.
    A, obsługa powyższego dała nam w bonusie komunikaty w stylu ,,::: Wiadomość do Zenka została dostarczona''.

    Dodaj komentarz | Trackback

    Infojama: łapki mi znowu opadły (19 marca 2004, 00:22:53)

    Tym razem: DoS na openssl. Giskard pisząc o BSDowej bibliotece nie wiadomo skąd wziął Linuksa (który ma z OpenSSL tyle wspólnego, co MS Windows 2003). To raz. Dwa, zakończył w pięknym, giskardowym stylu, stwierdzeniem: Na koniec warto zauważyć, że gdyby wytwory Open Sourcy było tak popularne jak produkty Microsoftu, z dużym prawdopodobieństwem już dzisiaj nastąpiłyby poważne problemy w funkcjonowaniu całego Internetu.
    To ja mam pytanie: jaki jest procentowo udział Open Sourcowych implementacji SSL'a w stosunku do Microsoftowych?
    I drugie: czy fakt, że jakieś pół roku po wykryciu błędu z ASN.1 w openssl Microsoft załatał dokładnie taki sam błąd u siebie, nie świadczy o tym, że ichnia implementacja jest oparta w dużej mierze na OpenSSL (albo nawet w całości - w końcu licencja BSD pozwala po prostu wziąść sobie całość)?
    Pytanie trzecie: co za zioło pali Giskard? I gdzie takie mocne hodują?

    2 komentarze | Trackback

    Archiwum :: 26.06.03-26.06.03 | 28.06.03-20.07.03 | 20.07.03-11.08.03 | 23.08.03-10.09.03 | 16.09.03-05.12.03 | 08.12.03-07.01.04 | 08.01.04-21.02.04 | 22.02.04-21.03.04 | 02.04.04-11.05.04 | 14.05.04-04.06.04 | 10.06.04-04.07.04 | 07.07.04-03.08.04 | 04.08.04-28.08.04 | 29.08.04-20.09.04 | 24.09.04-17.11.04 | 29.11.04-18.01.05 | 22.01.05-21.02.05 | 22.02.05-03.04.05 | 03.04.05-18.05.05 | 03.06.05-06.07.05 | 13.07.05-22.08.05 | 23.08.05-21.10.05 | 31.10.05-28.12.05 | 04.01.06-22.02.06 | 13.03.06-12.04.06 | 19.04.06-22.05.06 | 25.05.06-25.06.06 | 25.06.06-05.08.06 | 13.08.06-14.10.06 | 15.10.06-14.11.06 | 19.11.06-14.12.06 | 20.12.06-19.01.07 | 20.01.07-22.02.07 | 28.02.07-20.04.07 | 24.04.07-05.06.07 | 08.06.07-03.09.07 | 07.09.07-19.10.07 | 22.10.07-01.02.08 | 06.02.08-28.05.08 | 02.06.08-07.10.08 | 09.10.08-26.01.09 | 26.01.09-09.05.09 | 10.05.09-02.09.09 | 06.09.09-08.12.09 | 06.01.10-03.08.10 | 04.08.10-13.08.10 | 22.08.10-31.12.10 | 03.01.11-04.08.11 | 29.09.11-22.02.12 |
    Dodatki :: Nagłówki RSS ATOM
    Powered by Jogger. © 2002-2003 Justin Mecham oraz JabberPL Group.
    Wszystkie prawa zastrzeżone. Legalność; Informacje
    Technorati Profile; ikonki z Tango. Z wyłączeniem komentarzy i zaznaczonych inaczej, autorem tekstów jest zdzichu.