środa, listopada 25, 2009

Settlers - niespodzianka :)


Niedawno (no kilka tygodni temu) pojawiła się zapowiedź i trailer siódmej części gry a tu dziś wchodzę do Empiku i co widzę - Settlers - Narodziny kultur. Teraz korzystając z chwili przed snem postanowiłem dowiedzieć się o co chodzi? No i proszę - wszystko się wyjaśniło :). Więcej tutaj. Teraz nie pozostaje nic innego jak kupić i pograć :) no i szybko, bo wiosną nadejdzie część siódma :)

sobota, listopada 14, 2009

Erlang, Clojure, Scheme i inne...

Od kilku miesięcy przyzwyczajam głowę (a właściwie jej najbardziej odporną na zmiany część, czyli było nie było - mózg) do nowego spojrzenia na programowanie, myślę oczywiście o deklaratywnym modelu programowania w językach funkcyjnych. Zacząłem od Erlanga, książka była pod ręką więc było mi najprościej (sic!), szybko jednak dostrzegłem braki i sięgnąłem po dwa świetne podręczniki (jeden opisuje w jakiejś części język Scheme - "How to Design Programs", w polskiej wersji tutaj, drugi to znacznie bardziej teoretyczna praca, w której autorzy przedstawiają modele programistyczne na podstawie języka MozartOz - "Concepts, Techniques, and Models of Computer Programming" także dostępna w polskiej wersji tutaj.
Przyznam szczerze, że o ile How to Design Programs czyta się dość dobrze i wprowadzenie do programowania funkcyjnego jest w niej dość praktycznie zrealizowane o tyle druga z książek jest większym wyzwaniem.
W każdym razie uzbrojony w wiedzę z pierwszej i pobieżnie (mój błąd) zaczerpniętą z drugiej sięgnąłem po Erlang. Tutaj jest nieco inaczej niż w Scheme czy Mozarcie ale wciąż deklaratywnie i funkcyjnie :). Program powolnie powstaje i mam nadzieję, że okaże się niezawodny i odporny na błędy (choć wiem, że obie właściwości są raczej średnią włożonej w projekt i implementację oraz doświadczenia zespołu [[także z samym językiem, w którym program jest implementowany]]). Tymczasem w ręce wpadła mi kolejna książka o kolejnym funkcyjnym języku - Clojure a że autor języka Rich Hickey twierdzi, że to tak naprawdę tylko nowy Lisp a Paul Graham, że Lisp jest najpotężniejszym językiem nie pozostało nic innego jak przystąpić do pracy :)
Pierwsze wrażenia są raczej pozytywne choć nie jest łatwo. Słaba (tak mi się przynajmniej wydaje - jestem przyzwyczajony do dokumentacji Javy), mimo niewątpliwego wysiłku twórcy/twórców, dokumentacja nieco utrudnia początki. Jednak cel jest więc popracuję. Na początek moje Clojurowe tłumaczenie jednego z przykładów z książki Programming Erlang:

* Erlang (str 45 w książce)

Fruit = [apple, pear,orange]
MakeTest = fun(L) -> (fun(X) -> lists:member(X,L) end) end
IsFruit= MakeTest(Fruit)

IsFruit(pear) %% true
IsFruit(apple) %% true
IsFuite(dog) %% false

* Clojure

(def Fruits #{"Apple", "Pear", "Orange"})
(defn MakeTest [L] (fn [X] (contains? L X)))
(def IsFruit (MakeTest Fruits))

(IsFruit "Pear") ; true
(IsFruit "Apple") ; true
(IsFruit "Dog") ; false

* Scheme

(define Fruits (list "Apple" "Pear" "Orange"))
(define make-test
(lambda(L)
(lambda(X)
(member X L))))

(define is-fruit (make-test Fruits))
(is-fruit "Apple") ; true
(is-fruit "Pear") ; true
(is-fruit "Dog") ; false


Będę dalej wrzucał moje clojurowe wersje (czasami także scheme'owe jak w tym wypadku). W razie potrzeby mogę - w miarę moich skromnych możliwości - pomóc uruchomić te przykłady.

piątek, listopada 13, 2009

Historia o podatkach

Gdzieś na dysku znalazłem... świetne więc wrzucam, autora niestety nie znam.

Historia o podatkach..

Załóżmy, że każdego popołudnia 10 znajomych wybiera się wspólnie na obiad do restauracji. Rachunek za cały obiad wynosi 100 zł. Ponieważ cała dziesiątka nie zarabia po równo, a wręcz przeciwnie -- mają bardzo zróżnicowane zarobki, postanowili, że rachunek będą płacić w następujący sposób:
* Czterech najbiedniejszych nie zapłaci nic.
* Piąty od końca pod względem dochodów zapłaci 1 zł.
* Szósty -- 3 zł.
* Siódmy -- 7 zł.
* Ósmy -- 12 zł.
* Dziewiąty -- 18 zł.
* Dziesiąty, najbogatszy z nich wszystkich -- 59 zł.
* Tak sobie postanowili.
Ale pewnego dnia właściciel restauracji oznajmił im:
-- Jesteście takimi dobrymi klientami, że obniżę wam cenę za 10 obiadów o 20 zł.
Więc posiłek kosztował ich 80 zł. Ale ciągle chcieli płacić rachunek w ten sam sposób. Więc 4 najbiedniejszych ciągle jadłoby za darmo. Pozostałych 6 policzyło, że obniżka, 20 zł, podzielona na 6 daje 3,33 zł, jeśli więc każdemu płacącemu oddać te pieniądze, to właściwie piąty i szósty dostaliby pieniądze za zjedzenie posiłku. Właściciel restauracji, widząc, że panowie mają problem z podzieleniem kwoty obniżki, zaproponował im, żeby każdy z płacących dostał zwrot
proporcjonalny do tego, ile wcześniej płacił. I tak:
* Czterech najbiedniejszych ciągle jadło za darmo.
* Piąty, teraz nie płaci nic, tak jak poprzednich czterech.
* Szósty teraz płaci 2 zł, zamiast 3 zł (obniżka o 33%).
* Siódmy -- 5 zł, zamiast 7 zł (obniżka o 28%).
* Ósmy -- 9 zł, zamiast 12 zł (obniżka o 25%).
* Dziewiąty -- 14 zł, zamiast 18 zł (obniżka o 22%)
* Dziesiąty -- 49 zł, zamiast 59 zł (obniżka o 16% ).
Pierwszych czterech ciągle je za darmo, a z pozostałej szóstki każdy skorzystał i je taniej niż poprzednio. Jednak kiedy wyszli z restauracji zaczęli porównywać, ile każdy zyskał:
- Dostałem tylko złotówkę z 20 zł -- powiedział Szósty -- ale Dziesiąty dostał połowę, 10 zł!
- Właśnie! Ja też dostałem tylko złotówkę -- przytaknął mu Piąty -- To niesprawiedliwe, że on dostał 10 razy więcej niż ja!
- To prawda! -- dodał Siódmy -- Czemu on dostał 10 zł, a ja tylko 2zł?
Bogaci dostają najwięcej!
- A my nic nie dostaliśmy -- zaczęła krzyczeć pierwsza czwórka -- Ten system wykorzystuje najbiedniejszych!
Cała dziewiątka otoczyła Dziesiątego i dotkliwie go pobiła. Następnego dnia znów przyszli na obiad. Ale Dziesiąty się nie pojawił.
Kiedy przyszło do płacenia rachunku, zorientowali się, że pomimo obniżki ceny, nie są w stanie zapłacić nawet połowy rachunku!
I tak to już jest z podatkami, drodzy lewicowcy, zwolennicy państwa socjalnego i głosiciele "sprawiedliwości społecznej". Bogaci najbardziej zyskują na obniżce podatków, ale spróbujcie ich opodatkować za bardzo, atakujcie za bycie bogatymi, a następnym razem mogą nie pokazać się przy stoliku. Jest wiele świetnych restauracji w innych krajach.