Idź na całość – paradoks Monty’ego Halla

zonkPod koniec lat dziewięćdziesiątych TV Polsat emitował popularny teleturniej Idź na całość. Główna zasada gry była oparta na paradoksie Monty Halla, a polegała na podjęciu decyzji czy pozostać przy swoim pierwotnym wyborze, czy niewiadomą wymienić na inną.

 

Zagraj ze mną

Poniżej masz do wyboru trzy bramki. Możesz wybrać jedną z nich. Gdy już to zrobisz, ja wskażę w której z nich znajdował się jeden z Zonków. Teraz decyzja należy do Ciebie: zostajesz przy swoim wyborze, czy zmieniasz bramkę. Z pozoru podjęta decyzja wydaje się być bez znaczenia – w końcu zostają dwie bramki więc prawdopodobieństwo wygranej powinno być takie samo. Tak jednak nie jest. Mało tego, jedna z tych dwóch strategi daje dwukrotnie większe prawdopodobieństwo wygrania w stosunku do drugiej.

Spróbuj zagrać kilka razy stosując dwie strategie: pozostając przy swoim pierwszym wyborze oraz zmieniając decyzję po wskazaniu Zonka. Zwróć uwagę jak wygląda prawdopodobieństwo wygrania w zależności od strategii.
Symulację napisałem w Javascript, dlatego ktoś bardziej dociekliwy może wygrać w 100% przypadków. Ale nie o to tu chodzi. Dzięki temu każdy ma możliwość zweryfikowania tego czy program przypadkiem nie oszukuje.

Czytaj dalej

Mapowanie XML obiektów Java – JAXB

http://www.iconarchive.com/show/senary-icons-by-arrioch/Internet-xml-icon.html

Podczas tworzenia oprogramowania na każdym kroku mamy kontakt z danymi w formacie XML. Opiszę tutaj jeden ze sposobów konwersji danych w obie strony Java <-> XML.

Ale na początek przyjrzyjmy się źródłom słynnego już kalkulatora wyborczego. Twórcy oprogramowania wykazali się dość ciekawym podejściem w generowaniu dokumentów XML, a dokładnie wykorzystali zwykłą konkatenację „stringów”:

Nietrudno można sobie wyobrazić co byłoby w przypadku bardziej skomplikowanej struktury zawierającej wiele węzłów podrzędnych i atrybutów. Programista prawdopodobnie niejednokrotnie pomylił się podczas zamykania znaczników (choćby przez „literówki”). Taki kod jest bardzo ciężki w utrzymaniu. Poza tym dokument będzie niemożliwy do odczytu, jeśli np. zmienna this.currentLwyb.Text zawierałaby jeden ze znaków predefiniowanych w XML encji: &, <, >, „, ‚.

Jest to przykład nierzadko spotykanych złych praktyk, a poniżej przestawię bardziej eleganckie rozwiązanie w Javie.

Czytaj dalej

Wybory samorządowe 2014 – dane osób z komisji wyborczych

Pod tym adresem umieszczone  były dane pochodzące ze wszystkich obwodów wyborczych.

Wykonałem w Javie program, który pobrał informacje na temat wszystkich osób pracujących w komisjach wyborczych. Pobieranie wykonałem przeznaczając jeden wątek dla każdego województwa z krótkimi opóźnieniami dla każdego żądania http. Pobrało się ok. 30MB danych (tylko pliki xml z danymi członków komisji).

Czytaj dalej

PostgreSQL i funkcje okienkowe – pozycja w rankingu

PostgreSQLFunkcja okienkowa wykonuje obliczenia w całym zbiorze wierszy tabeli, które są w jakiś sposób związane z bieżącym wierszem. Jest to porównywalne do rodzaju obliczenia, które mogą być wykonane z funkcją agregującą. Ale w przeciwieństwie do zwykłych funkcji agregujących, korzystanie z funkcji okienkowych nie powoduje, że wiersze zostaną zgrupowane w jednym rzędzie wyjściowym, lecz zachowają swoje odrębne tożsamości.

Krótko podsumowując:

Funkcja okienkowa jest w stanie uzyskać dostęp do więcej niż tylko bieżącego wiersza wyniku zapytania.

Czytaj dalej

Node.js, Express i Jade, czyli kompletny web czat

Node.js

W poprzednim wpisie został wykonany serwer chatu, jednak klientem była zwykła strona html zapisana na dysku lokalnym. W tym miejscu rozszerzę chat o udostępnienie serwisu http dla klienta.

Biblioteki:

Czytaj dalej