... skleroza nie boli...

30 maja 2009, 23:39:15

Oglądam sobie Od zmierzchu do świtu i tak sobie zdaje sprawę z tego, że nie przypomniałem sobie odpowiednio wcześnie o tym, że w czerwcu można sobie w Krakowie, Warszawie i Wrocławiu posłuchać na żywo Tito & Tarantula

... no, a teraz brak czasu... ech

Swoją drogą, to czemu teraz tak rzadko powstają, tak dobre filmy? Przecież większość tekstów, scen i muzyki z tej produkcji podchodzi pod miano kultowych.

trzeba się uczyć...

29 maja 2009, 02:53:18

... więc teraz tylko zdecydować, czego lepiej się nauczyć. Czy bardziej podejdzie mi Stackless Python, czy też Erlang? Pythona używam od dawna, więc w wypadku Stackless'a dużo do nauki by nie było (tylko, to o mikrowątkach i całej otoczce z tym powiązanej). A coś to musi w sobie mieć, że od tylu lat twórcy "EVE Online" używają tego w swoim produkcie.

Coś mi jednak mówi, że chyba bardziej opłaca się naumieć Erlanga - ten funkcyjny język w dziedzinie zastosowań współbieżnych i rozproszonych ma ogromny potencjał... Tak właściwie, po co ja to piszę, jak samemu można przeczytać dlaczego to ustrojstwo jest takie interesujące.

Ogólnie to w obu wypadkach pisząc niewiele można zrobić dużo ciekawego... a trzeba się czymś zająć jak praca nie pozwala się spełniać programistycznie :P

Pingwiny

29 marca 2009, 14:53:42

Stało się to, co kiedyś stać się musiało - Pingwiny z Madagaskaru dorobiły się własnego serialu. Są to krótkie 20 minutowe odcinki... fakt, może trochę grzeczniejsze niż, to co można było oglądnąć w kinie, ale specyficzny humor pozostał - głównie na zetknięciu lemurów z pingwinami oraz podczas specjalnych misji.

... nie taki komputer szybszy, jak go malują...

23 maja 2008, 14:07:12

Wzmianka w ostatnim wpisie o serialu Numb3rs skłoniła mnie mimowolnie do przypomnienia sobie pewnego wzoru/prawa. Chodzi mi tu o Prawo Amdahla. Prawdopodobnie obiło się ono ludziom zajmującym się programowaniem równoległym (a szczególnie jego teoretycznej części).

Istnieje grupka ludzi, którzy bez opamiętania kupują najnowszy sprzęt komputerowy, by tylko przyspieszyć swój komputer. Wspomniane prawo pokazuje jak bardzo może być to nieprzemyślane, albo inaczej - jak szczegółowo trzeba sprawę rozważyć, by naprawdę przyspieszyć sobie komputer.

Sprawa jest bardzo fajnie pokazana na stronie Wikipedii (wcześniej rzuciłem linkiem do polskiego opisu). Brana jest hipotetyczna (acz możliwa sytuacja), gdy operacje arytmetyczne można podzielić na dostęp do pamięci (10% czasu) i obliczenia procesora (90% czasu). Teraz chcemy przyspieszyć procesor - przyspieszamy go więc 10-cio krotnie. W wyniku operacja zostanie wykonana 5,26 razy szybciej. No nie jest źle, ale trochę druzgocący jest wynik, jeśli przyspieszymy procesor 100-rotnie. Operacja wykona się tylko 9,17 razy szybciej. Polecam spoglądnąć też na angielski opis - jest trochę więcej opisu i ciekawe przykłady.

Oczywiście prawo te nie uwzględnia cache'u itp. ale pozwala oszacować przyspieszenie w niektórych momentach. Tak samo pozwoli ocenić, czy warto babrać się w przyspieszanie danego kawałka kodu - dzięki profilerom można się dowiedzieć ile (procentowo) dany kawałek kodu zajmuje czasu, a potem oszacować czy ma sens jakikolwiek jego modyfikowanie.

Numb3rs

18 maja 2008, 15:45:11

Niech mi ktoś powie, że jest jakiś temat, którego nie da się użyć do zrobienia dobrego serialu... no dobrze coś się znajdzie, ale do niedawna nie byłbym skłonny powiedzieć, że matematyka to coś, co wprowadzi powiew świeżości do serialu.

Głównymi bohaterami wspomnianego serialu są bracia Epps. Jeden z nich to agent FBI, a drugi jest genialnym matematykiem. Jak łatwo można się domyślić matematyka będzie pomagać tu w rozwiązywaniu spraw prowadzonych przez FBI.

To, co jest dobre w tym serialu, to nie tylko pomysł, ale też wykonanie... nic nie zostało tu potraktowane po macoszemu. O ile sam jestem w stanie coś ocenić (plus co nieco poczytałem o samym serialu), to wszystkie użyte teorie/wzory/metody są prawdziwe i przedstawione w bardzo przystępny sposób - tak by można względnie łatwo objąć ogólną idę. A jest tam dużo materiału, który raczej nie należy do najprostszych - w większości wypadków to wyższa matematyka z elementami fizyki i informatyki. Jeśli mowa o informatyce to w przeciwieństwie do większości znanych mi filmów, to tutaj wreszcie nie muszę się obawiać niedorzecznych sposobów użycia komputera. Przykładowe elementy ze wspomnianych dziedzin nauki to przykładowo (podam tylko kilka z wielu):

  • Użycie dużych liczb pierwszych w kodowaniu... ogólnie jest dużo wzmianek o kryptologii
  • Problemy klasy NP... plus problem P = NP
  • Przy napadach na bank wykorzystuje się Zasadę Nieoznaczoności Heisenberga
  • Kot Schrödingera
  • Ciąg Fibonacciego
  • Ekonometria... w sumie to oddzielna dziedzina nauki, ale co mi tam :P
  • Analiza harmoniczna
  • Od groma zastosowań prawdopodobieństwa i kombinatoryki
  • Proces i łańcuchy Markowa
  • Generatory pseudolosowe
  • Ciąg Fareya
  • Automaty komórkowe
  • Klasyfikator bayesowski - używany chyba przy filtrowaniu spamu

Powyżej nadmieniłem tylko kilka zagadnień, o których wspomina się w serialu podczas rozwiązywania kolejnych spraw... niesamowity ubaw sprawia oglądanie tego jak ciekawie można wykorzystać matematykę... szczególnie jeżeli lubi się matematykę lub jest się po prostu umysłem ścisłym.

Bardzo cieszy, gdy nie słyszysz dialogu, w którym mowa o tym, że nie złamiemy tego, "bo tak, oraz, że to mocno zakodowali", tylko, że w kontaktach ze sobą używali oprogramowanie używające Protokół Diffiego-Hellmana

Polecam

"Straż nocna"

08 maja 2008, 23:38:32

... przeczytana. Jak zawsze Pratchett pokazał wielką klasę. W tej części szczególnie widać ewolucję jego stylu - coraz mniej przypominają jego pierwsze książki, ale nadal jest klasą samą w sobie. Polecam.

Teraz mogę zabrać się za czytanie wiedźma.com.pl, a potem Gildia Magów, a potem Nowicjuszka, a potem Najlepsza Załoga Słonecznego, a potem Lód, a potem Ustrój Świata, a potem..., a potem...., a.......... kurde przecież ja nie mam czasu na czytanie... ech, przydałby się jakiś czasowstrzymywacz...

Wizja z Seksmisji

02 lutego 2008, 23:05:09

Źle się dzieje Panowie! Sami sobie zgotujemy ten los... Jednak Seksmisja była filmem proroczym. Przeczytałem i jestem przerażony :P - znaleziono sposób na przekształcenie kobiecego szpiku kostnego w spermę... jeśli tego by było mało, to wszystkie dzieci z tego eksperymentu będą dziewczynkami z racji braku chromosomu Y. I pomyśleć, że kiedyś śmieszył mnie słowa Maksa:

Wyginęli? Przecież to nie były mamuty!

... świat się kończy... Miejmy jednak wiarę w kobiety, być może nie pozwolą nam zniknąć. W przeciwnym wypadku dedykuję im inny tekst:

Sfiksowałyście boście chłopa dawno nie miały! Chłopa wam trzeba!

... amen

Uniksowy długopis

23 stycznia 2008, 22:48:09

Gdyby nie przypadkowe spojrzenie na długopis, którym robię sobie notatki w pracy, to wciąż żyłbym w niewiedzy. Okazuje się, że byłem nieświadomym posiadaczem uniksowego długopisu...

Chwilowo byłem onieśmielony ale będę musiał sprawdzić jaki tam jest kernel, a i może coś o powłoce się dowiem... :P

Uniksowy długopis

PS. Ciekawe czy producent wiedział, jaką nazwę temu nadaje?

Python językiem programowania roku 2007

20 stycznia 2008, 17:32:13

Wg TIOBE Programming Community Index Python został uznany językiem programowania roku 2007. Można to wyczytać z tabelki oraz zamieszczonego tam tekstu:

Python has been declared as programming language of 2007. It was a close finish, but in the end Python appeared to have the largest increase in ratings in one year time (2.04%). There is no clear reason why Python made this huge jump in 2007. Last month Python surpassed Perl for the first time in history, which is an indication that Python has become the "de facto" glue language at system level. It is especially beloved by system administrators and build managers. Chances are high that Python's star will rise further in 2008, thanks to the upcoming release of Python 3.

Podobnie jak autor powyższego tekstu sam się zastanawiam dlaczego zainteresowanie tym językiem tak bardzo wzrosło w ciągu ostatniego roku?

Hey MTV Unplugged

20 stycznia 2008, 12:09:55

Jak dla mnie bardzo ciekawe wydawnictwo. Nie nazwałbym siebie fanem zespołu, a płytkę (w komplecie CD + DVD z koncertem) kupiłem raczej z ciekawości (nie ma to jak wydać ponad 40 zł z ciekawości :P) po usłyszeniu 2 piosenek... zawsze mi się miło słuchało piosenek wspomnianego zespołu, ale i tak koncert ten był dla mnie miłym zaskoczeniem.

Zespół przygotował ciekawe aranżacje utworów dodając do nich "instrumenty bez prądu" (jakkolwiek dziwnie to brzmi :P), z czego najlepszym jest chyba lira korbowa.

... w każdym bądź razie polecam. Dobry rock w ciekawym wydaniu (przynajmniej jeśli mowa o moim tzw. guście :P).

IDA - niemal ideał... za darmo

17 stycznia 2008, 23:09:35

Jeśli ktoś tu zaglądnął to pewnie wie, co to za twór, o którym mowa w tytule. Jeśli jednak istnieją osoby, które zostały pokrzywdzone niewiedzą to spieszę z wyjaśnieniem - nie chce mi się :P... najlepiej spoglądnąć na stronę Wikipedii, ponieważ ja mógłbym pominąć jakiś istotny szczegół.

Chciałem jednak o czymś innym. Mianowicie jak wiadomo (lub nie) raz na jakiś czas wypuszczana jest darmowa wersja wspomnianego programu - oczywiście jest to jakaś niższa wersja z wyciętymi niektórymi ficzerami. Co z tego, jeśli nawet po tych zabawach program jest niesamowicie funkcjonalny (mówimy w końcu o programiku, który gdyby był filmem lub muzyką, to posiadałby status kultowego). Aktualna najnowsza darmowa wersja to 4.9 - szkoda, że nie 5.x, bo tam pojawia się genialny sposób prezentacji kodu po disassemblacji - no ale darowanemu... Strona z instalką jest np na Wikipedii.

Dodam jeszcze, że program bardzo dobrze działa pod kontrolą wine. Jest to o tyle istotne, że bezproblemowo radzi sobie z linuksowymi binarkami (swego czasu przyglądałem się przy jego użyciu, temu jak optymalizacje w gcc wpływają na generowany kod). Nie testowałem tego ale wygląda na to, że wersja ta zawiera także debugger.

GCC i automatyczna wektoryzacja pętli

20 października 2007, 23:14:15

Wypadałoby na wstępie nadmienić o ogromnych możliwościach tegoż kompilatora, ale mi się nie chce, skoro wszystko to można poznać na stronach Wikipedii. W każdym bądź razie nie można zaprzeczyć, że generuje niczego sobie kod, szczególnie jeśli mowa o optymalizacjach. No i wszystko to jest za darmo. Wspomniane optymalizacje zaczęły mnie interesować przy pisaniu kodu pod mikroprocek AVR. Kompilowałem sobie kod, z różnymi opcjami optymalizacyjnymi i sprawdzałem przy użyciu IDA'y (jeszcze będzie tu użyty ten disassembler) jakiż to kod asemblera został wygenerowany... Okazywało się, że często wyprawiał niesamowite rzeczy by przyspieszyć kod.

W ten oto sposób chcę przejść do tematu tego wpisu. Od jakiegoś czasu tworzony jest w gcc kod pozwalający w ramach optymalizacji dokonać autowektoryzacji pętli (jeśli są tam jakieś operacje na tablicach). Wersja gcc na moim kompie to 4.1.2 (mam też 4.2 ale z racji, że ta pierwsza wersja jest bardziej rozpowszechniona to na niej się skupie) i posiada on już możliwość użycia tego, dając zaskakujące rezultaty - dodać też trzeba, że optymalizacja ta jest wciąż rozwijana i pełne możliwości będzie można obserwować dopiero w przyszłości. Najlepiej zobrazować to jednak przy użyciu prostego przykładu.

Mam ci tu ja banalny kawałek kodu, który zostanie później skompilowany z i bez odpowiednich opcji optymalizacyjnych:

    1 #include <iostream>
    2 
    3 const int N = 65536;
    4 
    5 int main()
    6 {
    7 	float a[N], b[N], c[N];
    8 	float d[N], e[N];
    9 
   10 	for(int j=0; j < 1024; j++)
   11 	{
   12 		for(int i=0; i<N; i++)
   13 		{
   14 			a[i] = b[i] * c[i] + 3;
   15 			e[i] = (d[i] / 5.0f + a[i]) / 2.0f;
   16 		}
   17 	}
   18 
   19 	std::cout << a[17] * e[50] << std::endl;
   20 
   21 	return 0;
   22 }

Ten cout jest konieczny, ponieważ bez niego optymlizator stwierdza, że przetwarzane dane nie są nigdzie wykorzystane, więc po co się męczyć i pętla w kodzie nie istnieje. Standardowa kompilacja wykonywana jest z następującymi parametrami:

g++ test_vec.cpp -o test_vec -O2 -march=pentium-m -msse2

, a ta włączająca automatyczną wektoryzację to lekki rozszerzenie powyższego:

g++ test_vec.cpp -o test_vec -O2 -march=pentium-m -msse2 -ftree-vectorize -ftree-vectorizer-verbose=6

Parę słów na temat doboru powyższych parametrów. Oba wywołania różnią się tylko dwoma ostatnimi parametrami (patrząc na drugie wywołanie) - przedostatni włącza omawianą optymalizację (a właściwie jak dalej wyjdzie próbę jej zastosowania), a ostatni odpowiada za wyrzucanie informacji o tym, która pętla została (lub nie) zoptymalizowana i dlaczego (jeśli do optymalizacji nie doszło). 6 to ostania sensowna wartość (wg. mnie), ponieważ przy większej kompilator zesypie nas dziesiątkami linii tekstu na temat jego przemyśleń z serii "to optimize, or not to optimize". Konieczne jest też dodanie parametru włączającego optymalizację (-Ox), bo tak. Wektoryzacja wykorzystuje zestaw operacji sse/sse2 więc także o tym należy poinformować (-msse lub -msse2). Parametr odpowiadający za generację kodu pod mój procek to już tylko moja zachcianka.

Podczas kompilacji drugim "zestawem" gcc wypluje coś na kształt poniższego:

test_vec.cpp:10: note: not vectorized: nested loop.
test_vec.cpp:12: note: LOOP VECTORIZED.
test_vec.cpp:5: note: vectorized 1 loops in function.

To właśnie wspomniana informacja, o wewnętrznych rozterkach kompilatora na temat uszczęśliwienia nas szybciej działającym kodem.

Czymże by jednak było omawianie nowej optymalizacji (jeśli się mylę co, do słowa nowej to proszę o poprawę... i nie chodzi mi tu kompilator intela, który ma to podobno lepiej zrobione) bez informacji o możliwym zysku czasowym. Czas więc na mały benchmark. Wykonywany jest pod Linuksem najłatwiejszym z możliwych sposobów... czyli nieśmiertelnym:

time ./test_vec

wielokrotnie wykonywanym w celu wyciągnięcia jakiejś reprezentacyjnej średniej, tudzież innej dominanty :P. Oczywistym jest, że na innych prockach (mój laptop wyposażony jest w Celeron M) mogą się znacznie różnić. Najczęstszy wynik dla kodu bez autowektoryzacji to:

real    0m1.542s
user    0m1.428s
sys     0m0.008s

Włączając opisywaną optymalizację wyniki oscylują wokoło poniższego:

real    0m0.436s
user    0m0.420s
sys     0m0.000s

Nie ma nawet czego komentować. A dla gcc w wersji 4.2.1 jest jeszcze lepiej...

No ale, co wpłynęło na taki przyrost prędkości. Tu wkracza na nasz wesoły poligon disassember IDA. Jak dla mnie dzieło programistycznej sztuki. Wystarczy potraktować tym kod i już zaglądamy w jego ukryte sekrety (ech.. czuje się jak reporter Faktów)... czyli coś dla lubiących czytać kod maszynowy.

Na poniższych obrazkach widać kod przed

Free Image Hosting at www.ImageShack.us

i po

Free Image Hosting at www.ImageShack.us

optymalizacji. Pokazałem tam tylko interesujący nas kawałek, związany z wykonaniem pętli, plus mały komentarzyk dla czujących odrazę do kodu maszynowego. Na pewno widać, że użyłem w kodzie okrągłych wartości (znaczy potęg 2) ale nie jest to ważne, bo pętle te zostaną zoptymalizowane także dla nie tak ładnych liczb. Dla potęg 2 kod ten (w asemblerze) jest po prostu bardziej czytelny.

Nie ma jednak róży bez ognia... tfu kolców... Mianowicie żeby kompilator optymalizował tak ładnie nasze pętle, konieczne jest świadome ich konstruowanie. Ponieważ kod tego optymalizatora jest jeszcze ciągle rozwijany, to nie potrafi optymalizować niektórych konstrukcji. Przykłady rozpoznawanych peŧli podane są na tej stronie - polecam tam spojrzeć, by się dowiedzieć się gdzie można liczyć na przyspieszenie.

Byłbym zapomniał - za jakiś czas optymalizacja ta zostanie włączona pod -O3. Nic, tylko cierpliwie czekać.

SDL (i tak przy okazji pisanie gier)

07 października 2007, 16:00:03

Od zawsze interesowała mnie grafika komputerowa (od strony programistycznej), więc przyszła pora, by wrócić do tego tematu (w tzw. wolnym czasie...). Pierwszym krokiem było znalezienie jakiejś biblioteki, która mi na to pozwoli i jednocześnie będzie niezależna od platformy. Wybór od razu padł na SDL - prosto, łatwo i wygodnie. Najpierw potrzebowałem czegoś dla 2D, a że okazało się, iż można tego użyć do 3D (poprzez OpenGL, które planuje też poznać... no ale zaczyna się od podstaw), no to tylko się cieszyć.

Nie o tym jednak chciałem. Prawie każdy użytkownik Linuksa wie o tym, że bardzo dużo gier oraz ich portów z Windows (np. Neverwinter Nights) wykorzystuje właśnie tą bibliotekę. Przypadkiem trafiłem na świetny tutorial o pisaniu gier z użyciem SDL, no i chyba złapałem bakcyla. Dodatkową zaletą tego tutoriala jest też to, że nie jest pisany tylko pod jedną platformę - jest opis kompilacji pod Windows, Linuksem i Mac'iem (choć jak to ostanie się sprawia to nie sprawdzałem) i to z użyciem różnych narzędzi (np. KDevelop, Eclipse, vim, itp.).

Nie jest to opis bardzo skomplikowanych zagadnień. Są tam najistotniejsze podstawy (ale których znajomość jest konieczna, jeśli ktoś się chce bawić w pisanie nawet najprostszych gierek)... są to takie bardzo dobre podwaliny pod trudniejsze zagadnienia, o których można sobie poczytać np. na gamedev.net. Do tych podstawowych tematów zaliczają się:

  1. Programowanie sterowane zdarzeniami
  2. Obsługa klawiszy i myski
  3. Zabawy z czasem
  4. Sterowanie liczbą klatek na sekundę
  5. Animacje
  6. Przesuwane tła
  7. Dodawanie muzyki i dźwięków
  8. Detekcja kolizji (podstawowa)....... i wiele inych

Na stronce podana jest też informacja o tym, że na dniach pojawią się tutoriale pisane w podobny sposób, a traktujące o OpenGL'u.

Reaper

03 października 2007, 21:23:33

Kevin Smith kolejny raz pokazuje, że jak się czegoś chwyci, to tylko oglądać. Reaper to reżyserowany przez niego nowy serial (gdy to piszę jestem po obejrzeniu drugiego, najnowszego, odcinka). Jak zawsze w jego filmach ciekawe postaci (świetny Ray Wise w roli diabła), świetne dialogi (nawet jeżeli są o niczym) i wiele nawiązań do klasyki kina (choć nie są one zbyt oczywiste).

Weeds

16 sierpnia 2007, 22:46:19

Dziś obejrzałem pierwszy odcinek tej wyjątkowej produkcji. Weeds jest jednym z najbardziej popapranych (w dobrym słowa znaczeniu) seriali jaki ostatnio oglądałem. Już po obejrzeniu pierwszego odcinka mogę z czystym sumieniem go polecić. Jest śmiesznie i mądrze zrobiony - jak na razie szykuje się perełka.

Edit: No i ta piosenka z openingu..... cudo.