strona główna

Archive for August, 2005

DWL-900AP+

Monday, August 29th, 2005

Kolejna zabawka.

Do nabytego niedawno DSL-504T dokupiłem punkt dostępu sieci bezprzewodowej [DWL-900AP+][url_dwl900ap]. Tej samej firmy i z niezłymi opiniami w sieci, więc mam nadzieję że będzie działać sensownie. Zadaniem głównym było podłączenie do internetu komputera stojącego w odległości kilkunastu metrów i paru niekorzystnie ustawionych ścian, a dodatkowym – objęcie WiFi całego dwupiętrowego domu, najlepiej razem z przyległościami. Komputer miał już kartę DWL-510 (802.11b). Na wszelki wypadek wymieniłem od razu anteny w obu urządzeniach na DWL-50AT; efekt – moc i jakość sygnału na poziomie 90-95%.

Pierwsze wrażenia nie było złe, chociaż zawiedziony byłem zachowaniem karty sieciowej. Po włączeniu system (Windows 2000) potrzebuje jakichś 2 minut na połączenie się z punktem dostępu, chociaż stojący tuż obok laptop z Centrino dostawał się do sieci w ciągu sekund.

Raz też zdarzyło się tak, że przez dłuższy czas wspomniany komputer nie miał dostępu do sieci. To może być z kolei wina punktu dostępu, niestety nie byłem już w stanie tego sprawdzić. Z tego co słyszałem może się po prostu okazać, że trafiłem na egzemplarz który trzeba odłączyć od prądu raz na dobę. Zobaczymy.

A co do DSL-504T: od czasu zainstalowania po prostu działa, bez przerw i problemów. Oby tak dalej.

[url_dwl900ap]: http://support.dlink.com/products/view.asp?productid=DWL-900AP%2B

Nie ma to jak mieć wybór

Wednesday, August 24th, 2005

Kurcze.

Mój nauczyciel informatyki w liceum opowiadał czasem taką anegdotkę:

"Kiedyś, jak wchodziłem do sklepu kupić dyskietki, to sprawa była
prosta. Mówiłem 'Poproszę o 10 dyskietek' i dostawałem paczkę. Teraz
wchodzę do sklepu, proszę o 10 dyskietek i słyszę 'Których?'."

Jasne, anegdotka ma ponad 10 lat, trochę się od tego czasu zmieniło, a
dyskietkę ostatni raz widziałem podczas porządków w szufladzie. Była
zakurzona, wylądowała w koszu. Ale nie o tym chciałem.

Jeszcze kilka lat temu, jak człowiek chciał stworzyć serwis www, to
sprawa była prosta – perl, CGI.pm i template toolkit. Z braku
lepszych możliwości nie miał się nad czym zastanawiać, siadał i
zabierał się do pracy. A teraz? Bibliotek napisanych specjalnie na
potrzeby www są tysiące, kombinacji "język, system szablonujący,
warstwa dostępu do bazy danych, kontroler" jeszcze więcej, a na
dodatek ciągle pojawiają się nowe. I właśnie ostatnio dość dobitnie
się o tym przekonuję.

A wszystko przez to, że od prawie pół roku (sprawdziłem – trac mówi
mi, że pierwszy plik w repozytorium pojawił się 2 marca 2005) powoli i
z przerwami tworzę serwis
[http://rekomendacje.pl/](http://rekomendacje.pl/). Kiedy zaczynałem
podjałem szereg decyzji technicznych, przede wszystkim:

* chciałem język skryptowy – na co dzień mam więcej niż dosyć
czekania na kompilację. Padło na [Pythona][url_python], głównie
dlatego że dobrze i szybko mi się w nim pisze. Ma swoje wady, ale
ma też dużą grupę ludzi wykorzystujących właśnie go do tworzenia
serwisów www, więc jest duża szansa że każdy poważniejszy problem,
jaki mogę napotkać, trafił już do google.
* chciałem system szablonujący podobny do [Template
Toolkit][url_tt] – nigdy nie przepadałem za szablonami
starającymi się upodabniać do HTML czy XML – ASP, JSP, PHP,
HTML::Mason i cała reszta wydawała mi się zawsze mało czytelna.
Wybrałem [Cheetah][url_cheetah].
* _nie_ chciałem pisać samemu kodu przepisującego zawartość bazy na
obiekty i z powrotem. Przejrzałem kilka takich bibliotek i żadna
nie spodobała mi się specjalnie, skończyło się na tym że wybrałem
najprostszą – db_row.

I tyle. Nie twierdzę, że wybrałem najlepiej jak mogłem – z powodu
olbrzymiej ilości bibliotek wybrałem najlepiej, jak byłem w stanie po
wyczerpaniu czasu, jaki chciałem poświęcić na poznawanie kolejnych
możliwości.

Do teraz zaimplementowałem jakieś 3/4 funkcjonalności niezbędnej do
pierwszej wersji publicznej. Nie licząc szablonów www i plików
pomocniczych dało to 2933 linie kodu, z czego 1333 to sama obsługa
bazy danych. Podczas ich pisania dowiedziałem się paru interesujących
rzeczy, między innymi tego że użycie sensowniejszej biblioteki do
obsługi bazy danych oszczędziłoby mi przynajmniej 900 linii, a
sensownego kontrolera aplikacji – kolejne 500 (tyle poszło na dość
ogólne rzeczy typu obsługa sesji i autoryzacja). Razem to prawie
połowa kodu. _Połowa_. Kurcze.

A powodem, dla którego nad tym teraz się zastanawiam, jest to że
niedawno przyjrzałem się [Ruby on Rails][url_ror] (RoR). Obejrzałem
[krótki filmik][url_ror_15min] (50MB), przejrzałem tutoriale, po czym
poświęciłem cztery wieczory na próbne przepisanie części rekomendacji.

Wniosek pierwszy: w tym można pisać naprawdę szybko. Bardzo duża
część pracy, między innymi wspomniane wyżej mapowanie danych i
kontrola zachowania aplikacji są za darmo. W większości przypadków do
napisania pozostaje tylko szablony stron i logika aplikacji, plus
drobna pomoc po stronie modelu danych – większość informacji RoR
wyciąga sobie z bazy, ale zależności między tabelami trzeba podawać
ręcznie. Jest niezła dokumentacja, z paroma błędami (np. zamiast
find(:all) trzeba używać find\_all) ale opisuje co trzeba w bardzo
zrozumiały sposób. [Istnieją][url_ror_generators]
[gotowe][url_ror_libs] [moduły][url_ror_helpers], które można łatwo
dołączyć do aplikacji – na przykład [system autoryzacji
użytkowników][url_ror_login], z zakładaniem nowych kont i przesyłaniem
potwierdzeń pocztą.

Najpdawdopodobniej byłbym w stanie przepisać mój kod na Rails i
dopisać brakujące 25% w czasie porównywalnym z tym, jaki zajmie mi
samo dopisanie brakującego kawałka przy pomocy tego, co mam teraz.
Tak, takiego kopa daje RoR.

Problemem jest jednak Ruby – język porównywalny z Pythonem, ale
znacznie mniej popularny, co oznacza mniej bibliotek i mniej serwerów,
na których można z niego skorzystać. Składnia różni się od Pythona
dokładnie na tyle, ile trzeba, żeby była irytująca i wymuszała nieco
inny sposób myślenia. Nie jestem przekonany, że chcę się uczyć i
systematycznie używać kolejnego języka różniącego się od już znanego
prawie wyłącznie wyglądem. Bo tego, że Pythona będę nadal używał (nie
tylko do www) jestem pewien.

A dzisiaj dowiedziałem się o kolejnej możliwości. Za pośrednictwem
[lesscode.org](http://lesscode.org) trafiłem na porównanie RoR z
[Django](http://www.djangoproject.com/), będące z grubsza jego
pythonowym odpowiednikiem. Trzeba będzie się przyjrzeć w tym
tygodniu, może zaoszczędzić dużo czasu później. Kilka spostrzeżeń już
mam, ale to temat na kolejny wpis za kilka dni.

[url_ror_login]: http://wiki.rubyonrails.com/rails/show/SaltedHashLoginGenerator
[url_ror_generators]: http://wiki.rubyonrails.com/rails/show/AvailableGenerators
[url_ror_libs]: http://wiki.rubyonrails.com/rails/show/3rd+Party+Libs
[url_ror_helpers]: http://wiki.rubyonrails.com/rails/show/3rd+Party+Helpers
[url_ror_15min]: http://www.rubyonrails.com/media/video/rails_take2_with_sound.mov
[url_python]: http://www.python.org/
[url_tt]: http://www.template-toolkit.org/
[url_cheetah]: http://www.cheetahtemplate.org/
[url_ror]: http://www.rubyonrails.com/

DSL-504T

Friday, August 19th, 2005

Nowa zabawka.

Potrzebny mi jest kolejny modem ADSL z firewallem, NATem, DHCP i całą
resztą pozwalającą na bezpieczne podłączenie kilku komputerów w domu
do Neostrady. Po [złych doświadczeniach][wag54g] z takim urządzeniem
Linksysa i pośpiesznej zbiórce opinii na temat innych producentów
kupiłem [D-Linka DSL-504T][dsl504T] (tym razem bez sieci
bezprzewodowej). Podsumowanie krótkich testów, w porównaniu z WAG54G
(od razu dodam – wersją pierwszą, drugiej nie miałem niestety okazji
sprawdzić):

1. DSL504T jest już urządzeniem zbudowanym w oparciu o Linuksa
("Linux version 2.4.17_mvl21-malta-mips_fp_le
(Jenny@fd7.alphanetworks.com) (gcc version 2.95.3 20010315
(release/MontaVista)) #61 Thu Jun 10 11:43:47 CST 2004"), podczas
gdy WAG54Gv1 pracuje na jakimś zamkniętym, specjalizowanym
oprogramowaniu. Rezultat jest taki, że to drugie działa znacznie
gorzej i ma mniejsze możliwości, a większość różnic w tym
zestawieniu wynika właśnie z tego.

2. Na DSL504T można się zatelnetować :) Jest Busybox i trochę
podstawowych narzędzi (między innymi iptables).

3. zmiana konfiguracji DSL504T nie odłącza od sieci. WAG54g
restartuje się przy byle okazji, co jest szczególnie uciążliwe
dlatego, że...

4. WAG54g uruchamia się znacznie dłużej od DEL504T,

5. podobnie jak "duże" rutery i bardziej skomplikowany sprzęt
sieciowy DSL504T odróżnia konfigurację aktywną od zapisanej. Co
oznacza, że można dowolnie eksperymentować z ustawieniami
(działanie urządzenia zmienia się na bieżąco), a w razie pomyłki
wystarczy jedno kliknięcie (albo chwilowe odłączenie rutera od
prądu), żeby wrócił do konfiguracji zapisanej.

6. jedyna wada znaleziona do tej pory: piszczy, dość nieprzyjemnie,
na tyle głośno że ustawiony na biurku lub szafce obok przeszkadza.
Pozostaje wpakować go za hałasujący komputer lub, w razie
możliwości, do innego pomieszczenia.

Pierwsze wrażenie jest bardzo dobre, mam nadzieję że nie będzie
sprawiał większych problemów podczas używania.

[wag54g]: http://blog.elksoft.pl/index.php/2005/07/08/komary-ssn
[dsl504T]: http://www.arest.pl/index.php?inc=produkt&ID=2988&katid=49&grupa=359

Malcolm Gladwell

Saturday, August 6th, 2005

"Wyobraźcie sobie prostą grę. Na stole leżą cztery stosy kart – dwa
niebieskie i dwa czerwone. Każda karta oznacza wygraną lub stratę
pewnej sumy pieniędzy, a gra polega na braniu kolejno kart z dowolnego
stosu tak, żeby zyskać jak najwięcej. Osoba zasiadająca do gry nie
wie jednak, że czerwone karty są polem minowym – wygrane są wysokie,
ale jeśli trafi się na kartę przegrywającą traci się bardzo dużo.
Wygrać można wybierając stale karty niebieskie, dobrane tak, żeby
zapewniały mniejsze, ale bezpieczne wygrane. Pytanie: po jakim czasie
gracz zorientuje się w sytuacji?

Grupa naukowców z Uniwersytetu Iowa przeprowadziła taki eksperyment
kilka lat temu. Okazało się, że po mniej więcej pięćdziesięciu
kartach zaczynamy wyrabiać sobie pojęcie na temat tego, co się dzieje.
Nie wiemy jeszcze czemu wybieramy niebieskie karty, ale jesteśmy już
przekonani że są lepsze. Po kolejnych trzydziestu większość graczy
wie już o co chodzi i potrafi dokładnie wyjaśnić, dlaczego czerwone
karty są złym pomysłem. I to jest oczywiste: mamy pewne
doświadczenia, zastanawiamy się nad nimi, dorabiamy do nich teorię, aż
w pewnym momencie łączymy wszystko razem. Tak właśnie się uczymy.
Naukowcy z Iowa poszli jednak dalej, i tu zaczyna się dziwna część
eksperymentu. Podłączyli każdego gracza do poligrafu
– wykrywacza kłamstw [...] Gracze zaczynali denerwować się podczas
wybierania czerwonych stosów już po dziesięciu kartach. [...] Innymi
słowy, zorientowali się w zasadach na długo przed tym jak zorientowali
się w zasadach: zaczęli podejmować trafniejsze decyzje znacznie
wcześniej niż uświadomili sobie, co które decyzje są trafne.

Oczywiście, to tylko prosty eksperyment z grupą uczestników i
poligrafem. Stanowi on jednak bardzo wyraźną ilustrację sposobu
działania naszych umysłów. Mamy sytuację stresową, spore ryzyko,
uczestnicy musieli szybko podejmować decyzje na podstawie nowych i
mylących informacji – i co nam mówi eksperyment z Iowa? To, że w
takich momentach nasz umysł używa do opanowania sytuacji dwóch bardzo
różnych strategii. Pierwszą znamy, to strategia świadoma.
Zastanawiamy się nad danymi które mamy i w końcu dochodzimy do
wniosków. Ta strategia jest logiczna i skuteczna, ale powolna –
wymaga wyciągnięcia osiemdziesięciu kart. Jest też druga strategia,
znacznie szybsza. Włącza się już po dziesięciu kartach i naprawdę
działa, bo wykrywa problem z czerwonymi stosami prawie natychmiast.
Ma jednak tę wadę, że działa – przynajmniej początkowo – całkowicie
poniżej poziomu świadomości. Wysyła sygnały dziwnymi kanałami, na
przykład poprzez spocone dłonie. To jest system w którym nasz mózg
dochodzi do wniosków bez powiadamiania nas, że doszedł do jakichś
wniosków."

W ramach nadrabiania zaległości z itconversations.com
przesłuchałem prezentacje [Malcolma Gladwella](http://gladwell.com) o
dwóch jego książkach:

1. ["The Tipping Point: How Little Things Can Make a Big
Difference" z Pop!Tech 2004][hn] (["Punkt przełomowy", wydany w
Polsce przez "Świat książki"][hn_pl]). W dużym, prawie wcale
(choć nie do końca) nie oddającym wydźwięku oryginału skrócie:
* ostrożnie z pytaniem ludzi, co im się podoba, bo mogą nie
wiedzieć. Nie należy mieć zaufania do pierwszych reakcji.
Przykład: większość osób spytanych o opinię na temat
[Aerona][aeron] przed wprowadzeniem go na rynek stwierdziła że
jest, owszem, wygodny, ale wygląda beznadziejnie i nie nadaje
się do wstawienia do biura. Wbrew temu Aeron jest obecnie
znany jako wielokrotnie nagradzany, najlepiej sprzedający się
fotel w historii foteli, pomimo kosmicznej ceny ($599-$869 nie
licząc przesyłki z USA).
* ostrożnie z pytaniem ludzi, dlaczego coś im się podoba, bo mogą
nie być w stanie odpowiedzieć i podświadomie zmienić wybór na
taki, który są w stanie wytłumaczyć.
2. ["Blink: The Power of Thinking Without Thinking" na konferencji
South by Southwest Interactive 2005][sxsw] ("Mgnienie: potęga
myślenia bez myślenia") – z niej właśnie pochodzi przetłumaczony
przeze mnie na szybko cytat na początku tego wpisu. Znowu
skrótem:
* w bardzo wielu sytuacjach, w których wydaje nam się, że
dokonujemy wyboru na podstawie dużej ilości dokładnie
przemyślanych informacji, tak naprawdę decyzje nieświadomie
podejmujemy w ciągu pierwszych kilku sekund, często na
podstawie danych które nie powinny mieć znaczenia (na przykład
wyglądu rozmówcy),
* więcej informacji wcale nie musi oznaczać trafniejszych
decyzji, bywa wręcz przewicnie – dodatkowe dane powodują błędy
w ocenie. Przykład: lekarze są znacznie skuteczniejsi w
rozpoznawaniu ataku serca jeśli zignorują informacje o sposobie
życia pacjenta, historii chorób w jego rodzinie, a ograniczą
się do kilku mierzalnych wskaźników na temat jego obecnego
stanu.

[sxsw]: http://www.itconversations.com/shows/detail478.html
[hn]: http://www.itconversations.com/shows/detail230.html
[hn_pl]: http://www.merlin.com.pl/frontend/towar/399460
[aeron]: http://hermanmiller.com/CDA/SSA/Product/0,1592,a10-c440-p8,00.html

Krótko mówiąc, kolejne dwie książki do kupienia niedługo. Co niestety
oznacza wybór: kupić "Blink" w wersji polskiej, żeby móc pożyczać
większej grupie znajomych, czy w angielskiej żeby podczas czytania nie
irytować się na tłumacza. Eh, dylematy...