poniedziałek, 22 czerwca 2009

W kwestii formalnej: koreańska transkrypcja, "metoda x"

Co to za potwór



Transkrypcja pisma koreańskiego na znaki łacińskie. Jest ich aktualnie udokumentowanych bodajże 6. No to ja wymyśliłem siódmą.

Nie wiem, czy to się komu na co przyda, ale zamieszczam tak jako ciekawostkę.

Skąd to przyszło?



Transliteracja ta powstała w związku z ułatwianiem sobie nauki języka koreańskiego.

Uważałem bowiem, że uczenie się całkiem nowego pisma, a następnie na podstawie pisma, które się słabo zna, uczenie się języka, to trochę utrudnianie sobie życia na siłę. Nie wyobrażam sobie nauki języka, w którym nie potrafię niczego zapisać, ani zrobić tego wystarczająco szybko. Zapis wymowy z kolei mnie nie satysfakcjonuje, bo wyraz identyfikowany jest pismem, a nie wymową. Zresztą tylko mając ścisłe odwzorowanie jednego pisma na drugi można jakoś sensownie zapamiętać pisownię danego wyrazu również po koreańsku.

Wprowadzenie



Język koreański, podobnie zresztą jak większość języków z tego obszaru, jest językiem o ścisłym podziale na sylaby. Dlatego też i pismo, które opracowano, jest zorientowane na sylaby. Pojedynczy znak w piśmie koreańskim jest jedną sylabą, wedle schematu cv/cvc/cvcc (podobno jest też cvccc, ale te znaki jakoś nie znalazły się w unikodzie). W tym schemacie C=spółgłoska, V=samogłoska, a pierwsza spółgłoska może być również niewymawiana (konkretnie głoska "ng" jest wymawiana tylko w pozycji pobocznej i oczywiście jest wtedy jedyną poboczną).

W tej transkrypcji podział na sylaby jest mniej więcej oddany za pomocą litery x (której się nie wymawia). Głównie jednak litera x odwzorowuje niemą spółgłoskę początkową. Poza tym jest jeszcze używana do rozdzielenia ostatniej litery poprzedniej sylaby od pierwszej litery następnej sylaby, jeśli te dwie litery mogą również oznaczać jedną spółgłoskę (po ostatnich zmianach jednak praktycznie takie zjawisko już nie występuje, poza "ss"). Jeśli ktoś śledził również poprzednio ten artykuł, to ostatnie (i chyba ostateczne) zmiany utwierdzają literę x w jednej pozycji: rozpoczyna ona sylabę, która zaczyna się w wymowie samogłoską, niezależnie od tego, czy jest to pierwsza sylaba wyrazu, czy nie.

Poza tym najważniejsze różnice w stosunku do istniejących transkrypcji to są:

  • spójne przypisanie litery koreańskiej do litery (lub zespołu liter) alfabetu łacińskiego (jedynym wyjątkiem jest spółgłoska wymawiana jak 'ng', która jest zapisywana literą q w pozycji pobocznej - czyli dla niej akurat w pozycji wymawianej - oraz, w praktyce, literą x na początku wyrazu, czyli gdy jest niema)
  • jedna z ważniejszych, mocne 'o' zapisywane jest literą 'w' (a nie 'o', jak we wszystkich innych transkrypcjach), natomiast literą 'o' jest zapisywane słabe 'o'
  • dyftongi zaczynające się na 'u' zapisywane są również dokładnie tymi literami, których odpowiednikami koreańskimi są one zapisywane w oryginale


W ramach przykładów: stolica Korei Południowej to Soxul (Seoul), a siedziba firmy Samsoq (Samsung) mieści się w mieście Suxuon (Suweon, czasem Suwon). Aha, a najnowsza wersja przywódcy Korei Północnej nazywa się Zoqxil Gim (w polskiej transkrypcji Dzong-il Kim; piszę to w kolejności normalnej: imię, nazwisko - przypominam, bo większość niedouczonych dziennikarzy nie wie, że Kim/Gim to nazwisko). No i, dla ciekawostki, Hiondae to "Hyundai"...

Istniejący bałagan transkrypcji



Teoretycznie najsensowniej by było korzystać z oficjalnych transkrypcji (na Wikipedii jest opis wszystkich istniejących transkrypcji) tzn. transkrypcji poprawionej, obowiązującej od 2000 roku, którą zaakceptował rząd Korei (Południowej, oczywiście, czyli Hangug). Nie mogłem niestety z nich skorzystać z kilku powodów:

  1. Nawet tej pisowni nie stosuje się spójnie. Tak naprawdę w "potocznej świadomości" istnieją różne, niezgodne ze sobą, metody transliteracji pisma koreańskiego na łacińskie. W przypadku nazwisk, na przykład, stosuje się często mniej-więcej angielsko-fonetyczną transkrypcję, czasem z elementami ofjcjalnej (np. słabe "o" jest zapisywane czasem "u" - z angielska, jak w "up" - czasem oficjalnym "eo", "u" jest zapisane czasem przez "oo", czasem przez "u" - dojść z tym do ładu to nie lada wyzwanie)
  2. Za bardzo skupia się na wymowie, a za mało na oddawaniu istoty pisma (np. ta sama litera koreańska może być odtwarzana jako k lub g; od tego wolna jest metoda stosowana przez Ministerstwo Edukacji; ta z kolei używa jednak "gg", które nigdy nie jest wymawiane dźwięcznie). To nie ma znaczenia, że czasem te same litery wymawia się inaczej ze względu na ich pozycję; nie usprawiedliwia to innego zapisu łacińskiego tej samej litery koreańskiej.
  3. Jest podyktowana zwyczajami wymowy w języku angielskim, a język angielski akurat nie jest - wbrew pozorom - najlepszym przedstawicielem języków używających pisma łacińskiego, zwłaszcza jeśli się weźmie pod uwagę niejednoznaczność przekładania się w nim pisma na wymowę

I nie obchodzi mnie, co w tej sprawie mają do powiedzenia specjaliści od układania takiego pisma (np., że nie widać związku między b-p, d-t, g-k, który widać w piśmie koreańskim). Pismo łacińskie, które ma pomóc w nauce języka koreańskiego musi przede wszystkim odpowiadać w sposób spójny składni pisma koreańskiego. A to oznacza, że przypisanie litery koreańskiej do litery łacińskiej musi być spójne - np. 'b' zapisywane jest zawsze jak 'b', niezależnie od tego, czy ta spółgłoska jest pierwsza, czy ostatnia, podobnie 'l' jest zawsze 'l', nawet gdy wymawia się jak 'r'. W oficjalnych transkrypcjach możemy często spotkać zapis "셋" (x: "ses") jako "set", które jest, owszem, wymawiane "set", ale w tej sylabie jednak pierwszą i ostatnią literą jest "s".

Odtwarzanie podziału na sylaby



Przykładowe sylaby w języku koreańskim wyglądają mniej więcej tak:

  • ne (네)- jedna spółgłoska, jedna samogłoska, brak spółgłosek dodatkowych
  • bag (박)- spółgłoska, samogłoska, spółgłoska dodatkowa
  • xan (안)- spółgłoska niema, samogłoska, spółgłoska dodatkowa
  • dalg (닭) - spółgłoska, samogłoska, dwie spółgłoski (w takich wypadkach, gdy następna sylaba zaczyna się spółgłoską, wymawia się jedną z nich, ale nie ma reguły, którą)
  • xi (이) - spółgłoska niema, samogłoska


W powyższych sylabach nie użyłem głosek koreańskich zapisywanych dwiema literami łacińskimi (niestety muszą takie istnieć). Na szczęście są one łatwe do zapamiętania: są to pp, ph, tt, th, kk, kh, cc, ch, ss. Ponieważ p, t, k i c nigdy nie występują samodzielnie, a dodatkowo b, d, g i z nigdy nie występują w zespołach (np. w "haggiw" oba 'g' należą do różnych sylab), więc ewentualne wątpliwości mogą dotyczyć jedynie litery s; tutaj może wystąpić konieczność dla uniknięcia niejednoznaczności rozdzielenia liter, które należą do różnych sylab (konkretnie dotyczy to ss/sxs - np. issxsybnida).

W wielu wypadkach jawne rozdzielanie sylab nie jest potrzebne - wystarcza metoda znajdowania spółgłoski poprzedzającej samogłoskę. Np. w wyrazie "zamkkanman" podział na sylaby jest zam-kkan-man. Zawsze sylaba zaczyna się od dokładnie jednej spółgłoski, po której następuje samogłoska (jeśli spółgłoska jest niema, to w jej miejscu stoi x), więc jeśli mamy więcej spółgłosek przed samogłoską, to wszystkie wcześniejsze, niż ostatnia, należą do poprzedniej sylaby.

Jeśli mamy dwie samogłoski obok siebie, jest to zawsze dyftong lub pojedyncza samogłoska. Jeśli tak ma nie być, zawsze pomiędzy nimi jakoś stoi litera x. Przykładowo, w przypadku "ha-na-e" zapis będzie "hanaxe".

Tabela transkrypcji



No to może najpierw tabelka. Nie zapisuję tu samodzielnie samogłosek, żeby być w zgodzie z pismem koreańskim, lecz całe sylaby składające się tylko z samogłosek.
a ae e o i y w u
ia iae ie io iw iu
wa wae wi
ue uo ui yi


Teraz spółgłoski.

Jak już wspomniałem, mamy tutaj grupę: l, m/n/q, h oraz b/d/g.

Zacznijmy od pierwszych trzech:

l h m n q (tylko poboczna)


Serię b/d/g/z/s zapiszemy sobie tak:

b pp ph d tt th g kk kh z cc ch s ss


Wymowa



Przydałoby się też oczywiście jasno określić, w jaki sposób czytać tak zlatynizowane pismo koreańskie.

Najpierw mniej więcej do każdego, tak jak jest używane.

Samogłoski a, e, i, u, y czyta się tak samo jak po polsku, natomiast o i w to są odpowiednio słabe (lekko zbliżone do a) i mocne (wyraźne) o, a 'ae' to dźwięk - teoretycznie - podobny do angielskiego a (teoretycznie, bo wymowa w praktyce nie różni się specjalnie od 'e').

W spółgłoskach mamy m, n, h, s, które czyta się też normalnie jak po polsku, natomiast q to jest "n gardłowe", a 'l' wymawiamy l lub r (drgające) jeśli jest między samogłoskami. Z pozostałymi jest trochę bardziej skomplikowana sprawa.

Spółgłoski pojedyncze: b, d, g, z (z wymawia się jak c lub dz), wymawia się dźwięcznie jeśli są między samogłoskami; jeśli stykają się w jakikolwiek sposób ze spółgłoską, wymawiane są wtedy zawsze bezdźwięcznie (np. haggiw wymawia się "hak.io", a nie "hagio"). Wymawia się je również bezdźwięcznie w przypadku pierwszej litery wyrazu (np. "bioq" wymawiamy "piong"), oczywiście znów, jeśli poprzedni wyraz kończył się spółgłoską (lub poprzedniego nie było).

Spółgłoski podwójne: pp, tt, kk, cc, wymawia się zawsze bezdźwięcznie i z mocniejszym zaakcentowaniem. Właściwie do tego należy też zaliczyć ss.

Spółgłoski przydechowe: ph, th, kh, ch, wymawia się zawsze bezdźwięcznie, z lekkim przydechem. Przydech jest ledwie słyszalny; te głoski zresztą są najczęściej używane do zapisu obcych nazw, jeśli trafia nam się bezdźwięczna spółgłoska między samogłoskami.

(Tu uwaga: cc i ch wymawiamy mniej więcej jak c, w każdym razie nie mają nic wspólnego z 'k' i 'h').

Jedną dodatkową regułą jest to, że jeśli mamy samogłoskę 'i' po s, ss, z, cc, ch, to ta głoska jest zmiękczana (czyli np. 'si' czytamy tak, jak po polsku, "śi", podobnie "zi" wymawiamy "ći" lub "dźi"). Dotyczy to również "miękkich samogłosek", czyli ia, iae itd. (np. masioxiw wymawiamy jak po polsku, "masiojo:").

Oczywiście należy pamiętać o podziale na sylaby. Sylaba rozpoczyna się odpowiednim "wejściem" pojedynczej spółgłoski (albo i bez niej :), po czym następuje samogłoska. Spółgłoskę pierwszą czytamy normalnie (jak podano wyżej), natomiast spółgłoski po samogłosce (czyli poboczne) czytamy w odpowiednio zniekształcony sposób. Oczywiście jeśli pierwsza spółgłoska następnej sylaby jest niema, to wtedy ostatnia spółgłoska poprzedniej tak jakby wchodzi na jej miejsce. Jeśli jednak jest to normalnie wymawiana spółgłoska, to:


  • jeśli jest więcej, niż jedna, to czytamy tylko jedną z nich (ale nie ma reguły, czy pierwszą, czy drugą z nich)
  • poza q i l wszystkie dzielą się na trzy "grupy impulsowe": p (b, pp, ph), t (d, tt, th, s, ss, z, cc, ch, h) i k (g, kk, kh); w większości przypadków spółgłoski z tych grup, jeśli występują jako poboczne, są wymawiane tak jak przywódca grupy
  • jeśli poboczna spółgłoska poprzedniej sylaby i pierwsza spółgłoska następnej to jedno z s/ss/z/cc/ch, całość wymawia się jak ss (jeśli s/ss) lub cc (jeśli z/cc/ch) (górę bierze spółgłoska z następnej sylaby)
  • jeśli pierwsza spółgłoska następnej sylaby to m lub n, to grupy p i t upraszczają się do wymowy m i n
  • jeśli ostatnia spółgłoska sylaby to m lub n, wymowa może być zmieniona na m, n, lub q, jeśli pierwsza spółgłoska następnej sylaby to odpowiedino m/b, n/d lub g.
  • występują czasem i inne uproszczenia (np. "nalssi" wymawiamy 'najś.i")


Sposób wymowy pojedynczej sylaby również może się w wyrazach pochodnych w związku z tym zmieniać, np.: obsda [ot-ta], ale obsxoxiw [op-so-jo:], podobnie "zonthwqxwsxi" wymawiamy [tson-t'o:ng-o:-śi], ale "zonthwqxws" [tson-t'o:ng-o:t]

W tej pisowni dodatkowo - jeśli byłoby to jakiekolwiek ułatwienie - można stosować jeszcze następujące alternatywne zapisy głosek ae i e:


  • ae można też zapisywać jako ä, na wzór języka niemieckiego
  • w niektórych okolicznościach ae można zapisywać jako 'ai', a e jako 'oi'; jest to związane z transformacją głosek związaną ze sklejaniem i upraszczaniem wyrazów


Np. czas teraźniejszy od czasownika 'hada' - 'haexiw' można też zapisywać jako 'haixiw', co obrazuje pochodzenie tego wyrazu od pełnej (ale nieużywanej) formy 'haxioxiw' (oczywiście podobnie 'ixexiw' można by zapisywać jako 'ixoixiw', ale to akurat nie ułatwia :). Podobnie jak np. 'zoi' (ze), które pochodzi od 'zoxyi' (i podobnie 'nai' pochodzące od 'naxyi'). Można też na tej samej zasadzie odmieniać grzecznościową formę 'hasexiw' - 'hasoixiw'.

Motywacja



Spółgłoski w języku koreańskim można podzielić na następujące grupy (na razie będę pisał z wymową angielską, bo tak łatwiej zapisać):

  • nosowe: m, n, q (ng). Przy czym ostatnia jest wymawiana tylko jeśli jest poboczną; jeśli jest pierwsza to jest to spółgłoska niema
  • przydechowa (czasem niema, zwłaszcza w środku wyrazu): h
  • językowa: l (między samogłoskami wymawiana jak drgające r)
  • impulsowe: b, d, g, z, pp, tt, kk, cc, ph, th, kh, ch


Oczywiście użyłem tu zapisu, który stosuję, i zaraz objaśnię o o chodzi.

Spółgłoski impulsowe w języku koreańskim nie dzielą się tak, jak w większości języków europejskich, na dźwięczne (b, d, g) i bezdźwięczne (p, t, k). Właściwie to wszystkie one są wyłącznie bezdźwięczne, co najwyżej mogą być udźwięcznione (odwrotna tendencja, jak u nas). U nich podział jest na: pojedyncze, podwójne i przydechowe. Jeśli więc jakiekolwiek z nich wymawia się dźwięcznie, to tylko między samogłoskami i oczywiście dotyczy to tylko spółgłosek pojedynczych - podwójne i przydechowe są już zawsze wymawiane bezdźwięcznie. Dlatego właśnie, biorąc jako przykład pierwszą z nich, seria ta oznaczana jest odpowiednio jako b, pp, ph. Tu ciekawym przykładem może być "kkwchgage" (kwiaciarnia), które wymawia się, mniej więcej, "k.o:tkage".

No i na koniec, co do samogłosek. Występują normalnie samogłoski a, e, i, o, u, oraz y, które wymawiane jest raczej w zgodzie ze sposobem polskim lub starogreckim (stąd zresztą zapis, który w oficjalnym zapisie jest "ue"). Dodatkowo jest oczywiście "ae", które pewnie można by zapisywać takim ae na jednym znaku, oraz "w", które jest wymawiane jak mocne "o". Dyftongów istnieją dwie grupy: poprzedzone "i" oraz poprzedzone "u". Dla "i" są to więc ia, iae, ie, io, iw, iu, a dla tej drugiej (przy czym starałem się tu właśnie oddać największą zgodność z pismem koreańskim): wa, wae, wi, ue, uo, ui.

W zasadzie powinienem też zwrócić uwagę na elementy liter greckich, które częściowo posłużyły za inspirację - konkretnie wykorzystałem następujące:

  • y, czyli ypsilon - ale to można też uważać za inspirację polskim y
  • z, czyli zeta - w starogreckim wymawiało się jak "dz" (bezdźwięcznie wychodzi więc "c", zresztą taki zapis tego dźwięku występuje też w języku włoskim i niemieckim)
  • H, czyli eta. Mała wersja tej litery jest używana w IPA do zapisu dźwięku "ng". Niestety ponieważ w literach łacińskich nie ma jej sensownego odpowiednika, zastępczo używam tu litery "q". Jest ona w tym przypadku jakby miksem "litery IPA" oraz litery koreańskiej oznaczającej ten dźwięk.
  • w, czyli omega. Odmiennie, niż to wygląda na pierwszy rzut oka, jest to samogłoska i wymawia się ją jak mocne o.


Zanim zacznę teraz już pełny zestaw transliteracji, najpierw jeszcze dokończę wiadomości o samogłoskach i dyftongach. Samogłoski są zatem następujące:

a, ae, e, i, o, w, u, y

Przy czym, ae jest wymawiane bardzo podobnie jak "e" (niektóre źródła przeznaczone do czytania po angielsku przypisują "ae" do angielskiego krótkiego a), natomiast "o" jest "słabym o" (lekko zbliżone do a - po angielsku jest to krótkie "u", jak w "up"), a "w" jest "mocnym o" (jak w angielskim "all"). O "y" już pisałem, reszta jak normalnie.

W języku koreańskim, można powiedzieć, istnieją cztery grupy dyftongów, gdzie pierwszymi literami są kolejno: i, w, u, y.

Pierwsza, z i, to są ia, iae, ie, io, iw, iu

Druga, z w, to są wa, wae, wi (ostatnie wymawia się jak "łe")

Trzecia, z u: ue, uo, ui

No i ostatnia to jest dokładnie jeden dyftong, yi. Właściwie w wymowie jest zarówno bardzo podobny do zlepionych dźwięków "yi", jak i do australijskiego "ee".

Ok, teraz trzeba jeszcze zwrócić uwagę na składanie.

Nazwa państwa koreańskiego to 한국 (Hangug). Zwracam tu uwagę na "ng", które jest wymawiane oddzielnie jako n i g. W wyrazie 따뜻하다 (ttattyshada [t.at.yt-hada]) proszę zwrócić uwagę na podwójne t oraz "sh", w którym każda z liter należy do innej sylaby. Jawne rozdzielanie sylab jest konieczne z kolei w wyrazie 회사원 (hwisaxuon [wym. hłe-sa-łon]).

Parę słów jeszcze o tym, jak to się ma do oficjalnej transkrypcji.

Najbardziej istotna różnica jest w zapisie mocnego i słabego o. Wszystkie transkrypcje jak jeden mąż literą "o" zapisują mocne o, podczas gdy odpowiednio kombinują z zapisem słabego o - albo znaczkiem, "ŏ", albo za pomocą "eo". Nawiasem mówiąc, tak naprawdę tego "eo", mimo że wygląda na sensownie dobranego "pośrednika w wymowie" (choć nie wiem, czy "ao" nie byłoby lepszym), jest nie do "złapania" przez tych, którzy próbują to odczytać. Podobno zresztą jedną z inspiracji była francuska nazwa stolicy Korei, Séoul, którą według oficjalnej transkrypcji zapisuje się właśnie "Seoul". Oczywiście każdy odruchowo w tym wyrazie łączy ze sobą nie "eo", lecz "ou", dlatego wychodzi S-e-ou-l (zamiast zamierzonego S-eo-u-l) i stąd błędna powszechna wymowa [Seul], podczas gdy nazwa ta brzmi raczej jak "so-ul" (서울), no i w tej mojej transkrypcji, jak się można domyślić, zapisuje się "Soxul".

Najwięcej różnic istnieje w zapisie dyftongów zaczynających się na "u". Zresztą, tu kolejna ciekawostka: jest takie dość znane w Ameryce koreańskie nazwisko "Choi". Tzn. tak się to pisze. No i oczywiście wymawiają to "czoj". A tu zmyła - to się po koreańsku pisze 최 i wymawia się "cłe" (coś pomiędzy "cłe" i "człe"). W mojej transkrypcji jest to "Chwi". Ciekawostka ta jest właśnie przykładem stosowania dość popularnej, choć nieoficjalnej transkrypcji amerykańskiej (stąd dość powszechnie używana np. nazwa miasta "Suwon", które wedle oficjalnej transkrypcji powinno się pisać "Suweon", a w mojej transkrypcji jest to "Suxuon").

W mojej traskrypcji staram się spójnie stosować się do zapisu koreańskiego, a tu o tyle jest to ciekawe, że dyftongi zaczynające się na "u" istnieją nie wszystkie i nie we wszystkich kombinacjach (nie ma np. połączenia liter ㅜ oraz ㅏ; jest za to połączenie ㅗ i ㅏ, czyli 와). Tu nawet okazało się, że wybór "w" jako mocnego o było strzałem w dziesiątkę: dzięki temu można zapisać wa, wae i wi (와, 왜, 외) i w tym przypadku traktować "w" w sposób "angielski". W oficjalnej transkrypcji te litery zapisuje się jako wa, wae i oe (?). Tak samo, konsekwentnie stosuję "u" w tych dyftongach, gdzie występuje ono w zapisie: 워, 웨i 위 zapisywane są uo, ue i ui, podczas gdy w oficjalnej jest to weo, we i wi.

Konsekwencja w stosowaniu odpowiednich liter zgodnie z koreańskim pismem jest o tyle istotna, że bardzo łatwe jest przekładanie tego zapisu również w drugą stronę - na koreański (o tym zresztą twórcy różnych transkrypcji chyba zapomnieli).

Jak napisałem - zamieściłem to jedynie jako ciekawostkę. W nauce języka koreańskiego bardzo pomaga.

poniedziałek, 8 czerwca 2009

Polska demokracja = oksymoron

Wiem. Złośliwe. Ale to nie jest tania sensacja. To rzeczywistość.

W sumie, nie wiem, co to jest oksymoron. Z angielsko-łaciny to będzie gnijący debil. Coś w tym rodzaju. Nieważne.

Naszła mnie taka myśl, w związku z tym, że były ostatnio jakieś wybory. Do Parlamentu Europejskiego. Takie, czy inne, pamiętajmy że w naszym kraju obowiązuje ordynacja proporcjonalna, zatem kluczową rolę odgrywają tu nie kandydaci, ale zgłaszające ich komitety wyborcze. Oczywiście, jeśli zakładamy, że wyborcą jest każdy obywatel RP uprawniony do głosowania, to mamy następujący bardzo ciekawy kwiatek:

Art. 47.
Prawo zgłaszania kandydatów na posłów do Parlamentu Europejskiego mają partie polityczne oraz wyborcy.


Skoro wyborcy, to - poza pozbawionymi prawa do głosowania - właściwie wszyscy. Czyli na dobrą sprawę, każdy kandydat może sam się zgłosić, bez konieczności podcierania się jakąkolwiek partią polityczną, bo przecież sam jest również wyborcą (oczywiście nie do końca jest to takie proste, bo zgłosić nie można kandydata, a listę, a lista musi zawierać min. pięć nazwisk).

W każdym razie, wzór na przydział mandatów jest dość prosty (art. 127) :)


Państwowa Komisja Wyborcza dokonuje podziału wszystkich mandatów pomiędzy uprawnione komitety wyborcze w sposób następujący:

1. liczbę głosów ważnych oddanych łącznie na listy okręgowe każdego z komitetów wyborczych dzieli się kolejno przez: 1; 2; 3; 4 i dalsze kolejne liczby aż do chwili, gdy z otrzymanych w ten sposób ilorazów da się uszeregować tyle kolejno największych liczb, ilu posłów do Parlamentu Europejskiego jest wybieranych w Rzeczypospolitej Polskiej;

2. każdemu komitetowi wyborczemu przyznaje się tyle mandatów, ile spośród ustalonego w powyższy sposób szeregu ilorazów przypada mu liczb kolejno największych.

Jeżeli kilka komitetów wyborczych uzyskało ilorazy równe ostatniej liczbie z liczb uszeregowanych w podany sposób, a komitetów tych jest więcej niż mandatów do rozdzielenia, pierwszeństwo mają komitety wyborcze w kolejności ogólnej liczby oddanych głosów na listy okręgowe tych komitetów. Gdyby na listy okręgowe dwu lub więcej komitetów wyborczych oddano równą liczbę głosów, o pierwszeństwie rozstrzyga liczba okręgów wyborczych, w których na listy danego komitetu oddano większą liczbę głosów.


Dwa ciekawe wnioski można wyciągnąć z powyższego fragmentu. Po pierwsze, widać doskonale, że - mimo iż prawo jest definiowaniem reguł - prawnicy są na bakier z matematyką, i to nie tylko wyższą. Bo teoretycznie każdy, kto skończył 8 lat podstawówki (ci po reformie chyba jeszcze nie weszli), a w związku z tym już na pewno ten, kto skończył dowolne studia, powinien umieć zapisać ten punkt w następujący sposób:


Tworzymy ciąg wg wzoru a[i]=Z/i przy i = 1 do N, gdzie Z to liczba głosów oddanych na listy okręgowe kandydatów, a N - liczba wszystkich możliwych do uzyskania mandatów


Pewnie prawnicy by zaraz powiedzieli, że nie mogą prawa zapisać w ten sposób, bo muszą je umieć czytać również ci, którzy powyższego wzoru nie potrafią zinterpretować. Biorąc pod uwagę jednak to, jak zawiłym, a nawet nie zawiłym, tylko - powiedzmy wprost - nieprecyzyjnym i bałaganiarskim językiem jest pisane prawo, czego powyższa ustawa nie jest nawet najbardziej beznadziejnym przypadkiem, tego typu twierdzenia zakrawają na śmieszność nad śmiesznościami. Jeśli ten tekst ma być w efekcie dla kogokolwiek zrozumiały, to tylko dla debili, którzy nie są w stanie zinterpretować banalnego wzoru matematycznego, ani nie potrafią wypowiadać się tak, by być zrozumianym zgodnie z intencją (po prawdzie, ten tekst nie jest tak naprawdę całkowicie jasny dla nikogo, może poza tymi, którzy to pisali). Nie ma się zresztą czemu dziwić, skoro na studia prawnicze najczęściej przyjmuje się humanistów, którzy potrafią jedynie czytać literaturę i się nią zachwycać (na naukę porządnego wypowiadania się, składania zdań, wygłaszania wypowiedzi itd. oczywiście nie było czasu, bo trzeba było interpretować wiersze), oraz wkuwać na pamięć fakty historyczne wedle tego, co dana władza akurat postanowiła wtłoczyć ludziom do głów (nawiasem mówiąc dziwiło mnie kiedyś, po co komu egzamin z historii na prawo; odpowiedź jest prosta - ludzie z bardzo dobrą znajomością historii, przynajmniej w Polsce, to ludzie którzy są całkowicie niezdolni do rozwiązywania problemów, czy rozpracowywania reguł, natomiast są mistrzami we wkuwaniu na pamięć, a ta umiejętnośc jest w zawodzie prawnika najbardziej potrzebna). Gdyby na prawo przyjmowali ludzi po egzaminie z matematyki, a w szkole średniej dodatkowo uczono ich logicznego myślenia i precyzyjnego wypowiadania się, prawo byłoby zapisane w sposób jasny, czytelny i spójny, chociaż może współcześni prawnicy twierdziliby, że brzydki (nawiasem mówiąc, jest wiele zasad prawnych, które tworzyli inżynierowie siłą rzeczy, na przykład prawo drogowe - i te właśnie przepisy są, o dziwo, nawet jeśli głupie, to przynajmniej jasne, czytelne i spójne).

Dajmy zresztą spokój i wróćmy do wzoru, bo teraz właśnie zaczynają się schody. Wzór zapisałem, ale nie wiem, co dalej. Punktu 2, niestety, nie jestem w stanie zrozumieć. Jeśli w powyższym wzorze N jest liczbą wszystkich mandatów do zdobycia, to znaczy, że chcemy te N mandatów rozdysponować pomiędzy komitety wyborcze. Nie wiem jednak, co to znaczy "ile przypada mu liczb kolejno największych". Pomijając już fakt, że wyrazy ciągu (a nie szeregu, jak tu napisano, ale oczywiście nie wymagajmy zbyt wiele od prawników) i tak są posortowane malejąco, a więc są "kolejno największe" (oczywiście, żeby o tym wiedzieć, wystarczy po prostu mieć podstawową wiedzę o ułamkach, nie trzeba tego dodatkowo sankcjonować prawem), nadal nie rozumiem, co znaczy "przypada mu". Jak się domyślam, intencją tego zapisu było rozdysponowanie mandatów w ten sposób, żeby to oddawało proporcje głosów, jakie przypadają na kolejne komitety wyborcze. Jak się jednak mają wyrazy wspomnianego ciągu do procentu oddanych głosów w wyborach (tzn. - wiem, będzie to kolejno: 100%, 50%, 33%, 25% itd. zbliżając się asymptotycznie do zera), a konkretnie jak ma się to do reguły, że kto dostał więcej głosów, ma dostać więcej mandatów. Bo zaczynam mieć podejrzenia, że z tym rozdysponowaniem mandatów to coś jak z podatkiem progresywnym: im mniej komitet dostał głosów, tym bardziej rośnie szansa uzyskania mandatu. Co jeszcze ciekawsze, zaraz za punktem 2 mówi się o... zresztą zacytuję jeszcze raz, bo to bardzo ciekawe:


Jeżeli kilka komitetów wyborczych uzyskało ilorazy równe ostatniej liczbie z liczb uszeregowanych w podany sposób...


Nie jest ani napisane, co to znaczy, że komitety wyborcze "uzyskują ilorazy", ani nie jest całkiem jasne, o którą ostatnią liczbę chodzi. Oczywiście to drugie to najprawdopodobniej jest element a[N], czyli wartość Z/N (ilość głosów podzielona przez ilość możliwych mandatów). Tylko w tym wszystkim jest jeden problem. Zresztą, spróbujmy to sobie zobrazować: układamy listy wyborcze (wszystkich okręgów!) po kolei każdego komitetu wyborczego wedle ilości uzyskanych przez nich głosów. Mamy teraz drugą listę wartości, którą jest nasz ciąg a[i]=Z/i, który posiada dokładnie N wyrazów. Oczywiście jest to jedna z moich hipotez na temat tego, jak interpretować to prawo, która zakłada, że element ciągu jest równy mandatowi do zdobycia, więc raz przydzielony element ciągu jednemu komitetowi nie może być przydzielony innemu. I teraz bierzemy wyrazy ciągu, i przydzielamy odpowiednie wyrazy ciągu tym komitetom wyborczym, które się na nie kwalifikują. Nawet jeśli tak, nadal nie jest dla mnie jasne, np. dlaczego wyraz a[4] przydziela się komitetowi A, a nie komitetowi B. I co ma do tego liczba głosów uzyskanych przez te komitety.

Oczywiście możemy założyć inną hipotezę interpretacji tego prawa - wątpliwość oczywiście wynika z konkretnie tego sformułowania:


... liczbę głosów ważnych oddanych łącznie na listy okręgowe każdego z komitetów wyborczych ...


W poprzednim opisie założyłem, że użyte przeze mnie we wzorze Z to liczba wszystkich oddanych w ogóle ważnych głosów. Ale może "każdego z komitetów wyborczych" oznacza tutaj, że powyższą analizę należy wykonać po kolei dla każdego komitetu wyborczego oddzielnie, a nie na liczbę głosów w ogóle.

Ale wtedy sprawa jest jeszcze bardziej idiotyczna. Wychodzi nam coś takiego wtedy, że mając N mandatów do podziału każdy komitet wyborczy uzyskuje własny ciąg o wspomnianym już wzorze a[i]=Z/i, przy czym Z oznacza liczbę głosów uzyskanych przez ten właśnie komitet wyborczy. Ale nie wiem, co dalej, ani jak ma się ciąg utworzony dla tego komitetu do ciągów innych komitetów. Taka analiza zresztą wychodzi również dla komitetów, dla których mandatów w efekcie zabraknie.

Nie wiem, jakie jest rozstrzygnięcie. Nawet nie wiem, czy to już wszystkie przepisy określające sposób rozdzielania mandatów (podobno jest też jakiś "próg wyborczy", o którym wszystkie media paplały, ale w ustawie nie znalazłem o tym ani słowa - wiem, pewnie przeoczyłem).

Mam dla nauczycieli, a właściwie to nawet dla mediów, bardzo fajną akcję do zaproponowania. Mianowicie proszę utworzyć następujące zadanie:


W wyborach do parlamentu europejskiego wystartowało 5 komitetów wyborczych, każdy obecny w 20 okręgach i w każdym z nich wystawiający po 4 kandydatów. Po podliczeniu głosów komitety uzyskały następującą liczbę głosów: 1 - 1000000, 2 - 800000, 3 - 300000, 4 - 120000, 5 - 10000. Oblicz, ile mandatów zdobył każdy z komitetów wyborczych, kierując się wskazówkami z ustawy określającej sposób przeprowadzenia wyborów do parlamentu europejskiego.


Proponuję zresztą, żeby do tego zadania dzieci siadły razem z dorosłymi - może przekonamy się wtedy, czy idiotą jest ten, kto nie potrafi wykonać tego zadania, czy ten, kto podpisuje się pod powyższą ustawą.

Oczywiście, można zadać sobie pytanie, czy to nie prościej zrobić w ten sposób:

1. Kandydować może każdy, kto uzyska określoną ilość podpisów.

2. Na każdy okręg przypada N mandatów do zdobycia (w miarę możliwości należy tak zdefiniować okręgi, żeby każdy miał równą ilość mandatów, ewentualnie w kilku jedynie zrobić mniej o jeden, niż w pozostałych, jeśli jest nierówno).

3. Każdy kandydat kandyduje w dowolnym wybranym przez siebie okręgu. Kandydat pojawia się na liście okręgowej z imienia i nazwiska oraz niedokładnego miejsca zamieszkania (miejscowość, ulica).

4. Na każdy okręg robi się ranking kandydatów w kolejnoścli liczby oddanych głosów i pierwsze N (lub N-1, jeśli tyle przypada na okręg) z listy kandydatów otrzymuje mandaty.

Nie żeby to była moja propozycja ustawy, bo trzeba by to napisać bardziej oficjalnym językiem i uzupełnić o parę drobnostek. Chociaż uważam, że tekst ustawy powinien być co najwyżej trzykrotnie dłuższy, niż ten tekst powyżej - z ustawy, z której zacytowałem, jedna trzecia to pierdoły, a z pozostałej części 3/4 to standardowe sprawy, które powinny były być ujęte w jakichś bardziej ogólnych przepisach.

Nieważne zresztą. Ten powyżej sposób obliczania sposobu przydzielania mandatów jest systemem najbardziej sprawiedliwym - zebrałeś dużo głosów, dostaniesz mandat, zebrałeś za mało - nie dostaniesz. Nie ma żadnych progów wyborczych, partii politycznych (mogą sobie być, oczywiście, jeśli mają służyć promocji kandydatów i łączyć ludzi o wspólnych poglądach, ale względem prawa nie uzyskują one żadnych przywilejów). Taki system pozwala również kandydować każdemu i na dobrą sprawę jeśli umie skrzyknąć określonych ludzi, którzy pomogą mu prowadzić odpowiednią kampanię, może kandydować.

A co trzeba zrobić w Polsce, żeby móc kandydować? No cóż, w Polsce trzeba zapisać się do określonej partii politycznej. Niby można założyć swoją, oczywiście, są tacy szaleńcy, którzy to robią, na przykład ostatnio p. Declan Ganley. Oczywiście życzę mu sukcesów w jego szaleńczym pomyśle, choć uważam, że przyciągając największych wyrzutków politycznych, utworzył kolejnego "klona LPR", na którego pies z kulawą nogą nie zagłosuje. Dlatego trzeba zapisać się do jakiejś znanej partii politycznej, w chwili obecnej w zasadzie tylko PO, PiS i SLD, no dobrze, jeszcze PSL. Następnie trzeba się wkupywać w łaski prezesa, przeskakiwać kolejne szczeble, zwalczać konkurentów (oczywiście w wyścigu o łaski prezesa) i może kiedyś uda się dostać do ścisłego dworu, a zatem liczyć na jakieś ważne stanowisko.

Możesz być więc super menedżerem i specjalistą od zarządzania; możesz być wspaniałym, bezinteresownym społecznikiem, sumiennym pracownikiem i mistrzem w rozwiązywaniu trudnych problemów - i w dupe se możesz wsadzić te twoje wspaniałe cechy kandydata na burmistrza, na posła, na szefa komisji, bo zamiast ciebie to stanowisko obejmie karierowicz, za służbowe pieniądze kupujący skarpetki i krawaty, mający wszystkich swoich wyborców głęboko w dupie, a i wyborcy o niczym tak nie marzą, jak o wysłaniu go na zieloną trawkę, bo kiedy ty pracowałeś na swój wizerunek wśród ludzi, on łasił się do prezesa i jest nie do ruszenia. I to zresztą do kolejnego już, bo poprzedni zdążył już stracić poparcie wyborców.

W tej sytuacji pozostaje tylko zadać kluczowe pytanie: czy w takim razie wyborcy mają jakikolwiek wpływ na to, jacy ludzie będą rządzić Polską i ewentualnie jak to rządzenie będzie wyglądało? Odpowiedź jest aż nadto oczywista: nie mają żadnego wpływu na to, kto będzie faktycznie rządził, bo do sejmu pójdzie i tak tylko ten, kogo prezes puści, stanowisko w rządzie obejmie tylko ten, kogo zechce tam widzieć premier, a prezydent, który jest wybierany w powszechnych, bezpośrednich wyborach, tak naprawdę nie może nic. Prezydent w III RP może jedynie psuć, przeszkadzać władzy i robić zamieszanie - z którego to prawa, jak dotychczas, wszyscy prezydenci korzystali bez najmniejszych oporów. No, może pomijając Wałęsę, bo ten akurat prezydentował jeszcze za czasów "małej konstytucji"; Konstytucję III RP zatwierdził dopiero Kwaśniewski. Nawiasem mówiąc, to właśnie on skwapliwie podpisem pod tą konstytucją obciął sobie sam swoje prezydenckie jaja.

I tak właśnie wygląda ustrój polityczny w Polsce: oligarchia czterech największych partii politycznych plus prezydent z obciętymi jajami, a o tym kto naprawdę Polską rządzi można się po części domyślać obserwując sprawę zabójstwa Krzysztofa Olewnika.

Nawiasem mówiąc, wszyscy zwolennicy monarchii (tacy, jak np. p. Korwin-Mikke) powinni się przyjrzeć temu zjawisku trochę dokładniej, bo tak właśnie wygląda oligarchia, która jest tylko odrobinę inną formą monarchii. Jeśli ktoś nadal wierzy w to, że monarchia jest skuteczna, bo dobry monarcha potrafi doprowadzić kraj do dobrobytu, to niech przyjrzy się uważnie na to, jak wygląda dzisiaj rządzenie przez partie polityczne i prezesa partii, który trzyma tam faktyczną władzę.

Tak właśnie w Polsce wygląda ta cała "demokracja". Właściwie w cywilizowanych krajach nazywa się to "oligarchia".

niedziela, 7 czerwca 2009

Yellow pages: Czeski film o muzykowaniu

Właśnie natknąłem się na następującą ciekawostkę - nie podam szegółów, jak ktoś chce, niech sobie znajdzie na sieci. Nie są one istotne dla artykułu.

Sprawa wygląda tak: piątka nauczycieli muzyki (gry na różnych instrumentach) pracuje równocześnie na etacie w dwóch różnych szkołach muzycznych. Urzędnicy samorządowi stwierdzili, że jest to niezgodne z prawem. W związku z czym powiedzieli nauczycielom, że mają się zdecydować na to, w której ze szkół chcą pracować i mają dwa dni na zastanowienie.

Czy urzędnicy konsultowali się z ministerstwem? Nie no cóż, przecież urzędnicy nie będą się konsultowali z każdą pierdołą z ministerstwem - przepisy są jasne. Poza tym urzędnik nie wyobraża sobie, żeby nauczyciel mógł pracować łącznie 16 godzin dziennie i robić to wystarczająco efektywnie i bez straty jakości wykonywanej pracy. Poniekąd słusznie.

Od urzędnika padał również argument, że są młodzi ludzie, którzy chcieliby podjąć pracę w tym zawodzie i w związku z tym, że tamci trzymają miejsce, oni nie mają czego szukać.

A tu nauczyciel się wypowiada, że właściwie to wcale nie jest 40 godzin, bo tych godzin to w praktyce wychodzi ok. 18, więc dwa etaty można jednak pogodzić...

I ja tu czegoś w tej sprawie nie rozumiem.

Po pierwsze, nie słyszałem, aby istniały w Polsce jakiekolwiek przepisy, które zabraniałyby pracy na dwóch etatach równocześnie. Nie ma takich. Oczywiście podejmowanie pracy na dwóch etatach równocześnie jest dość trudne, choćby dlatego, że zwykle umowy o pracę są tak konstruowane, że jednoznacznie zakazuje się w nich pracy etatowej u jakiegokolwiek innego pracodawcy. Również, gdyby nie istniała taka klauzula w umowie, jest to wciąż dość trudne, bo zwykle godziny pracy są w większości zawodów dość sztywne i nie dałoby się po prostu być w dwóch miejscach równocześnie. Ale to wciąż nie zmienia faktu, że żadne przepisy tego nie ograniczają - jeśli istnieją jakieś ograniczenia, to mogą one wynikać tylko z charakteru wykonywanej pracy. Więc jeśli urzędnicy powołują się tu na jakieś przepisy, to przepraszam na jakie?

Po drugie, dlaczego urząd zwraca się w tej sprawie do nauczycieli, którzy w zasadzie w ogóle nie są stroną w sprawie? To nie ich problem, że ktoś chciał podpisać z nimi umowy o pracę - to problem pracodawcy, który na takie podpisanie umowy się zgodził.

Natomiast nikt jakoś, nie rozumiem dlaczego, nie zszedł na rzeczywiście niski poziom tej sprawy i nie zapytał, dlaczego w pracy, która teoretycznie jest na etat, nauczyciel przepracowuje 18 godzin??? Co więcej, przecież z ministerstwa nadeszła (do redaktorów, oczywiście, bo z urzędników nikt się tam przecież nie pofatygował!) odpowiedź, że jedyne, co tutaj nauczycieli ogranicza, to konieczność przepracowania 40 godzin. Jeśli oni przepracowują w obu szkołach po 18 godzin, to znaczy, że przepracowują łącznie 36 godzin, czyli nadal się "nie przepracowują" zbytnio... Co to w takim razie za umowa, co to za kontrola pracy, jeśli umowa jest podpisywana na etat (czyli 40 godzin tygodniowo!), a w praktyce tych godzin jest 18?

Mamy więc tutaj z jednej strony urzędników, którzy wydają decyzję wspartą jakimiś przepisami... chociaż tak naprawdę na żaden przepis się nie powołali. Kazali zdecydować się na coś nauczycielom, chociaż w rzeczywistości to mogą im skoczyć, bo nie zmuszą ich przecież do złożenia wypowiedzenia. Mogą najwyżej zmusić szkoły do wypowiedzenia im umów o pracę - te jednak będą się również przed tym opierały, tłumacząc nie bez racji, że jeśli oni odejdą, to trzeba będzie zamknąć szkołę, bo nie będzie miał w niej kto uczyć. A na przyjęcie "młodych, zdolnych, ale niedoświadczonych" się nie zgodzą.

I tu właśnie wszystko staje się jasne, jeśli się weźmie pod uwagę fakt, że właścicielem tych szkół jest gmina.

Po pierwsze, ultimatum postawili urzędnicy gminni, bo to gmina jest właścicielem szkoły, zatem w praktyce jej "sponsorem". Zresztą, sponsorem, czy nie, daje ona na nią pieniądze, a bezpośrednio żadnych zysków z tego nie ma. Bardzo chętnie więc obetnie budżety na obie szkoły poprzez nakazanie nauczycielom, żeby pracowali tylko w jednej szkole jednocześnie.

Po drugie, ponieważ będzie jednak trzeba zatrudnić jakichś nauczycieli, żeby szkoła miała rację bytu, więc pewnie trzeba będzie z braku laku zatrudnić tych młodych zdolnych (zapewnie znajomków urzędników gminnych - przecież chyba nikt się nie łudził, że chodziło o młodych zdolnych "z wolnego rynku").

Dla mnie najprostszym rozwiązaniem tego problemu oczywiście byłoby zatrudnienie wszystkich tych nauczycieli na pół etatu po 20 godzin tygodniowo w obu szkołach (tzn. przynajmniej zmiana ich umowy o pracę), oczywiście poza tą jedną zmianą na dokładnie tych samych warunkach. Mówię "rozwiązanie problemu", bo po czymś takim sprawy by nie było, bo urzędnicy gminni nie mieliby się już czego czepić. Nie wiem tylko, czy na pół etatu byliby oni w stanie dostawać takie same pieniądze, jakie dostają teraz na etat - i domniemam, że tu właśnie leży sedno problemu.

Czyli: jest sobie szkoła, w której kształcenie jest bezpłatne, szkołę sponsoruje gmina, gmina ma wytyczne z ministerstwa, gmina usiłuje ciąć budżet, szkoła nie ma dochodów ze swojej działalności, mimo międzynarodowych sukcesów jej uczniów, a na dodatek każdy oszukuje jak tylko się da: Dyrektor szkoły zatrudnia nauczycieli z dobrym wynagrodzeniem, żeby mieć u siebie dobrych fachowców i żeby szkoła w ogóle miała jakiś sens. Żeby móc im dobrze zapłacić, udaje, że zatrudnia ich na etat, a naprawdę zatrudnia ich na wielkość pół etatu, żeby można było sobie dorobić. Nauczyciel "dorabia" sobie więc w drugiej tej samej instytucji, która dokładnie tak samo oszukuje, że zatrudnia ich na etat.

Co by w każdym razie nie kombinować, jedno jest pewne: jeśli szkoła ma mieć sens i uczyć na sensownym poziomie, to musi móc dobrze zapłacić zatrudnianym fachowcom. Jeżeli gmina uważa, że jej taka szkoła do szczęścia nie jest potrzebna, to niech coś z tym zrobi (znajdzie sponsora lub kogoś, kto wie jak na tym zarobić, a może ewentualnie nawet sprzeda). Niestety nie w Polsce. Tutaj trzeba kombinować i wywracać do góry nogami, oszukiwać i kręcić. Tylko tak można tu do czegokolwiek dojść.

A potem dziwimy się, że z zapowiadanych "wielkich powrotów" z emigracji, i to w czasach, gdy w krajach europejskich jest recesja rzędu kilku procent, a Polska jest co prawda ledwo, ale jednak na plusie, zostało najwyżej 10% emigrantów, którzy zdecydowali się wrócić do kraju. A nawet i z nich większość myśli o ponownej emigracji. Większość po prostu twierdzi, że nawet w czasie kryzysu wciąż tam jest łatwiej znaleźć pracę, niż w Polsce. Gdyby zestawić to jeszcze z zapewnieniami pionierów wielkiej emigracji, że jadą tam tylko zarobić trochę kasy na mieszkanie w Polsce i wrócić...

Może więc dla tych nauczycieli muzyki jest jeszcze lepsze wyjście? Pewnie tak. Niedługo zresztą pewnie nie będzie się tu opłacało nikomu siedzieć niezależnie od zawodu, bo nawet zarobki rzędu kilkudziesięciu tysięcy złotych miesięcznie nie zrekompensują mi np. niemożności umówienia się na wizytę u lekarza w prywatnej przychodni w przeciągu dwóch tygodni, albo konieczności załatwienia tysięcy papierów w tysiącach urzędów w ciągu kilkunastu miesięcy, żeby sobie głupi dom postawić. Cóż, ja umiem pływać. Ale co z tego, skoro nikt mnie nie uczył pływania w kisielu.

środa, 1 kwietnia 2009

Yellow Pages: banda idiotów III RP

Tak. Najlepsza banda idiotów III RP: pp. Mazowiecki, Kwaśniewski, Niesiołowski, Napierniczak (Napieralski+Olejniczak - ostatnio rzadko występują oddzielnie, więc można ich traktować jak jedno). Że tak ich pieszczotliwie nazwę.

Pieszczotliwie, bo mógłbym ich nazwać inaczej - hipokrytami i łajdakami. To by było chyba gorzej, więc próbuję ich nazwać znacznie łagodniej, idiotami.

Innej możliwości nie ma. Jeśli ktoś zaprzecza faktom, na przekór faktom wypowiada całkowicie szurnięte tezy, to może albo mieć jakiś interes w tym, żeby komuś takie bzdury wmawiać (czyli jest łajdakiem), albo jest po prostu idiotą.

Jeśli by np. w telewizji ogłoszono, że ziemia jednak jest płaska, a ktoś nagle zaczął się wypowiadać, że przecież to oczywiste, że jest płaska, bo jak się patrzy, to żadnego zakrzywienia nie widać, to są dwie możliwości: albo ma interes w tym, żeby to ludziom wmawiać (może np. zamierza zedrzeć z ludzi kasę organizując wycieczki "na koniec świata"), albo po prostu jest idiotą.

Panowie idioci wspomnieni na początku właśnie skorzystali z okazji, że akurat się coś mówi o IPN, żeby natychmiast żądać likwidacji tej organizacji. To nie ma znaczenia, że akurat IPN niczego nie "przeskrobał". Ważne, że ktoś, kto napisał dość - podobno - głupią książkę o Wałęsie, pracował w IPN. Nieważne, że pracował w innym czasie, niż pisał, nieważne też, że nie pracował wcale jako historyk. Ważne, że pracował w IPN.

Celowo nie podaję ani nazwy książki, ani nazwiska jej autora, ani nazwiska promotora. Nie widzę powodów, by ich unieśmiertelniać, ani robić kryptopromocję wspomnianej książki.

Oczywiście swoją drogą dziwię się, że zarówno promotor, jak i ów student, nie dostali przykazania zamieszczenia "disclaimera", że - w związku z tym, że są pracownikami IPN - przedstawione przez nich materiały nie mają związku z pracą w IPN, ani żadna część pracy nad książką nie miała związku z IPN. IPN moim zdaniem powinien tego zastrzeżenia zażądać na zaś od wszystkich pracowników, których zatrudnia, nawet od sprzątaczki, i sumiennie podawać do sądu każdego, kto tego nie przestrzega (w szczególności, kto poprzez pominięcie tego zastrzeżenia narusza dobre imię instytucji).

Parę smaczniejszych kawałków oczywiście "przesiąkło" ostatnio na ten temat:


  • promotor pracował również w IPN (o czym już wspomniałem - można więc już snuć podejrzenia, dlaczego i student załapał się na fuchę)
  • student miał materiał napisany już wcześniej, ale dopiero teraz (tzn. w czerwcu 2008, bo wtedy się obronił) znalazł kogoś, kto by go wypromował
  • promotor jest właścicielem wydawnictwa, które wydało książkę (chyba jasne jest teraz, dlaczego zgodził się być promotorem)
  • promotor specjalizuje się w zupełnie innej dziedzinie, niż ta, z której promował studenta (zgoda na promocję, jak więc widać, coraz mniej wynika z jakichś merytorycznych przesłanek)


Ale to jest nieważne. W końcu słyszeliśmy zarówno p. Kurtykę, jak i p. Gontarczyka, którzy zastrzegają, że IPN z powstaniem tej książki nie ma nic wspólnego. To powinno wystarczyć każdemu myślącemu człowiekowi. IPN pojawia się w tej całej sprawie na gruncie zupełnie neutralnym. Czy ktoś potrafi sobie wyobrazić coś takiego, że pp. Mazowiecki, Kwaśniewski i Napierniczak (Niesiołowskiego staram się litościwie pomijać - powinien chyba przed wypowiadaniem się w kwestii likwidacji IPN sprawdzić, jaka jest "linia partii" w tej sprawie) nagle wypowiadają się, że należy Centertelowi (podaję tę nazwę jako abstrakcyjny przykład, a istniejącej nazwy używam tylko w celu lepszego unaocznienia sprawy) odebrać licencję na prowadzenie działalności, bo - powiedzmy - pracownik, który kradł użytkownikom hasła i sprzedawał oszustom, był pracownikiem Centertela. Nieważne, że firma Centertel nie tylko stanowczo się od tego pana odcina, ale nawet będzie chciała sądownie dochodzić odszkodowania. Nieważne by to było nawet gdyby ów pracownik nawet w swoich oszustwach nigdy nie wykorzystywał zasobów firmy. Był pracownikiem Centertela - to trzeba opierdolić Centertel. Na dokładnie takiej właśnie zasadzie opierdala się IPN.

Nie wspomniałem Wałęsy, chociaż, biorąc na logikę, powinien on się też znaleźć w tym towarzystwie. Nie do końca; jego akurat nie podejrzewam o łajdactwo, poza tym nie wypowiadał się wcale o IPN jednoznacznie negatywnie - mam wręcz wrażenie, że trochę się zreflektował. Wałęsa po prostu, jak to zwykle on, jest pyszałkiem, i zbytnio wierzy w swoje możliwości wypowiadania się na żywca bez przygotowania - gdyby miał trochę oleju w głowie, albo zatrudnił przynajmniej dobrego PR-owca, na pewno przyznałby się do tego, dlaczego kombinował z SB, dlaczego usiłował wydrzeć dowody na ową współpracę z archiwów SB, a już na pewno nie próbowałby akceptować jako swojego obrońcę kogoś takiego, jak Aleksander Kwaśniewski.

Przykład: ja nigdy w życiu nie spowodowałem wypadku samochodowego, w którym byłyby ofiary w ludziach. Co nie zmienia faktu, że spowodowałem jedną stłuczkę. To nic nie znaczy, to jest stłuczka, którą musi zaliczyć każdy kierowca, żeby się nauczyć, że oczy muszą być zawsze zwrócone w tym kierunku, w którym jedzie samochód. Ale co byście pomyśleli o mnie, gdyby ktoś doniósł publicznie (np. ten facet, któremu strzaskałem tylny zderzak - żeby było jasne, zapłaciłem mu ile sobie zażyczył i spisaliśmy umowę), że taka stłuczka miała miejsce, a ja szedłbym w zaparte i upierał się, że żadnej takiej stłuczki nie było? Gdyby facet pokazał wspomnianą umowę podpisaną przeze mnie, a ja rżnąłbym głupa, mówiąc że pierwszy raz ten papier widzę na oczy? Przecież powiedzielibyście - no daj spokój facet, głupiś czy co, przyznaj się, przecież nie jesteś rozbijaką, ani piratem drogowym przez jedną głupią stłuczkę, co ci zależy.

A Wałęsa właśnie w taki sposób cały czas szedł w zaparte. Przecież wystarczyłby jakiś średnio rozgarnięty PR-owiec, który by przeanalizował całą sprawę, sprawdziliby goście tylko co jest w aktach i jak najsensowniej się z tego wytłumaczyć, na pewno znaleźliby takie wytłumaczenie, że ludzie by to bez problemu kupili, a równocześnie wszystkim, którzy Wałęsę nazywają agentem, od razu wytrąciliby wszelką broń z ręki. No dobrze, byłem tym niby agentem, ale jak ja ich przecież wyruchałem!

Ale Wałęsa tak nie zrobił. To znaczy, w ostatnim czasie próbował mniej więcej to właśnie mówić, ale to już jest grubo za późno. I w ten właśnie sposób, aby tylko zaspokoić żądzę swojej pychy, zniszczył swój własny mit. A teraz niszczy go dalej, pozwalając by ktoś taki, jak Aleksander Kwaśniewski, który sprawował władzę w poprzednim systemie, o czym przecież wszyscy wiedzą i bez IPN, i który - cokolwiek by mówić o Wałęsie i Lechu Kaczyńskim - skompromitował Polskę na arenie międzynarodowej chyba najbardziej od czasu 89 roku, bronił go, żądając - swoim zwyczajem - likwidacji IPN.

Zwróbiłbym uwagę też w tej sprawie na inną istotną ciekawostkę. Mianowicie, cała sprawa, poza kuriozalną nagonką na IPN, wyłoniła taki, no, nie mowię czarno-biały, ale nazwijmy to czerwono-zielony podział sceny politycznej. Nie wiem, jak się sprawa dalej rozwinie i co będzie medialnie niedługo rozpowiadać PO, ale póki co wydaje się należeć do frakcji "przykrywaczy", co mnie nieco dziwi (przecież była takim zwolennikiem rozliczania się z przeszłością). Premier się zagalopował - dość dziwne, mając takich specjalistów pod ręką, albo to był wypadek przy pracy, albo... nie wiem. Niesiołowski mówił jednym głosem z Napierniczakiem. Na dodatek, ten przydupas Gosiewski zaczął mówić całkiem do sensu, co wprawiło mnie już w zdumienie (no, zajebiście, tylko dlaczego tak starannie ukrywał te talenty, kiedy był u władzy?). Jednym słowem: Jedynie PiS opowiedział się jednoznacznie za IPN-em, IPN jest posądzany o bycie wylęgarnią ludzi PiS-u, a Kwaśniewski, Mazowiecki, Napierniczak, Niesiołowski, Palikot i Tusk - opierdalają IPN. Nie ma żadnej merytorycznej dyskusji ani na temat IPN-u, ani na temat wspomnianej książki (o niej wypowiedział się tylko Gontarczyk i to bardzo oględnie - zbyt oględnie, żeby na podstawie jego wypowiedzi można było książkę rzeczywiście potępić). A ta banda idiotów nawet nie próbowała odnieść się do sedna sprawy, zresztą jakiego tam sedna, w ogóle do sprawy, która w jakikolwiek sposób jeszcze wynika z faktów, czyli do wspomnianej książki. Od razu podchwycili wątek IPN-u, tylko dlatego, że akurat pp. student i promotor mieli pecha być pracownikami, to znaczy, nie tyle oni, co IPN miał pecha ich zatrudniać.

Jedno w każdym razie rzuciło mi się w oczy: mamy po prostu ten czerwono-zielony podział, z którego nikt nie wynika, nikt niczego tu nie jest w stanie zmienić i tak, a równocześnie na sprawy istotne, od których zależą prawdziwe losy kraju, nikt z tych, o których wiadomo, że niby oficjalnie rządzą, nie ma żadnego wpływu. I w Polsce nawet nie wiadomo za bardzo, kto to jest.

Czasami cieszę się, że pracuję tam, gdzie pracuję. Praca i dom to w tej chwili jedyne dwa miejsca, gdzie można porozmawiać na takim poziomie, żeby nie dywagować o sprawach, które są oczywiste, tylko nazywać rzeczy po imieniu. Gdyby jeszcze nie to otoczenie między domem a pracą, które dusi mnie podatkami, gnębi zakazami, grozi samosądem i kpi w żywe oczy z prawa, byłoby już po prostu wyśmienicie.

piątek, 27 marca 2009

C++ i zasady: Potłuc o kant

Znalazłem takiego wpisa, którego autorem jest niejaki Łukasz Milewski. Znałem kogoś o tym nazwisku, pracował ze mną w poprzedniej firmie, choć mam wątpliwości, czy to ta sama osoba, bo tam się pisało wyłącznie w Javie. A ten widać jest specjalistą od C++. Trochę oczywiście nie do końca specjalistą.

Przeczytałem sobie te zasady i w najlepszym razie zaliczyłbym je do "intermediate C++", choć od pewnego czasu zacząłem snuć teorię "lewicowych poglądów w programowaniu". Wbrew pozorom bowiem, lewicowość nie jest rzeczą zarezerwowaną dla polityki, czy obyczajowości - w programowaniu istnieje również, a jakże.

Przykładowym "lewicowym" poglądem w programowaniu w C++ jest wymaganie, aby wszystkie metody klasy były wirtualne. Ale nie uprzedzajmy faktów... :)


Destruktory zawsze są wirtualne - niezależnie od przeznaczenia klasy. Co z tego, że po klasie nie będzie można dziedziczyć? Musisz się niepotrzebnie zastanawiać nad tym czy może kiedyś semantyka ulegnie zmianie i będzie trzeba dodać virtual. Dodanie virtual nic nie kosztuje i niczego nie psuje


Ależ oczywiście, że kosztuje, i to wbrew pozorom wcale nie mało.

Dodanie co najmniej jednej metody wirtualnej (również destruktora) powoduje konieczność utworzenia obiektu charakterystycznego klasy. Oczywiście jeśli destruktor jest trywialny, to obiekt charakterystyczny będzie wygenerowany raz na hierarchię (kompilatorowi wolno współdzielić większe części obiektów charakterystycznych spokrewnionych klas i dzieje się tak np. gdy klasa pochodna nie przesłoni żadnej metody wirtualnej z klasy bazowej) - ale to nie zmienia faktu. A jeśli robimy wirtualne destruktory do wszystkich klas, to zwykle też do małych struktur, nie przeznaczonych do dziedziczenia. Tu więc nie będzie możliwości współdzielenia obiektów charakterystycznych.

Prawda, oczywiście, że destruktor wirtualny ma znaczenie tylko wtedy, gdy używamy "delete". Wtedy bowiem istnieje kwestia tego, czy należy prowadzić wywołanie wirtualne, czy też nie. Obiekt bowiem można usunąć na dwa sposoby:


  1. zostaje usunięty jego obiekt nadrzędny
  2. na wskaźniku do niego zostanie wywołane delete


Nie ma innych sposobów. Inne sposoby są co najwyżej pochodną powyższych (np. dla zmiennej lokalnej obiektem nadrzędnym jest środowisko funkcji). Jeśli więc mówimy o klasie (strukturze), na której wskaźniku nigdy nie ma być wołane delete, to wirtualność destruktora nic nie znaczy.

Byłoby więc znacznie bardziej z sensem, gdyby zastrzeżenie było takie, że należy zrobić zawsze jedną z dwóch rzeczy:

  • destruktor musi być wirtualny oraz nierzucający (throw())
  • klasa ma sprywatyzowany operator delete


Przecież to takie proste. Deklaracja operatora delete podlega dziedziczeniu, więc nie będzie można usunąć delete'm także żadnej jego pochodnej. Po prostu kaplica. Jest to więc w praktyce, można powiedzieć, częściowy zakaz dziedziczenia: nie będzie można usunąć obiektu tego typu. Oczywiście to nie znaczy, że nie będzie go można utworzyć (choć oczywiście można również podobnie zablokować operator new).

W praktyce jednak w zupełności wystarczy jedna rzecz: wymóg, aby destruktor był wirtualny w każdej klasie, która posiada metody wirtualne. Większość kompilatorów oczywiście stosuje do tego odpowiednie ostrzeżenie. I jest to naprawdę w zupełności wystarczające rozwiązanie problemu: niewirtualny destruktor w klasie posiadającej metody wirtualne jest czymś mającym mało sensu (optymalizacja???), natomiast jeśli nie mamy metod wirtualnych - nie będzie to dziedziczenie w sensie obiektowym, a jedynie dziedziczenie w sensie C++ (tzn. przejęcie w klasie pochodnej definicji składowych z klasy bazowej).

Na szczęście faktycznie nic nie kosztuje wywołania destruktora w razie usunięcia jego obiektu nadrzędnego. Tam również w ogóle jakiekolwiek wywołanie zostanie pominięte, jeśli destruktor jest trywialny. Ale nie zmienia to faktu, że pozostaje koszt obiektu charakterystycznego, a także koszt obciążenia wprowadzanego do klas, które z tej klasy dziedziczą.

Przypominam, że C++ zawsze był tworzony zgodnie z zasadą "nie płać za to, czego nie używasz". Gdyby więc rzeczywiście jawne zadeklarowanie destruktora wirtualnego nic nie kosztowało, to w ogóle w języku nie istniałoby pojęcie wirtualnego destruktora - kompilator sam by pamiętał o ustawieniu destruktora na wirtualny w razie potrzeby (albo nawet w ogóle zawsze robił wszystkie destruktory wirtualne i tylko pomijałby wywołanie wirtualne, gdyby nie było takiej potrzeby). Na to się nie zdecydowano, prawdopodobnie dlatego, że kompilator mógłby nie umieć tego stwierdzić.

Niestety to założenie nie dotyczy wywoływania metod - w ogóle (tzn. nie ma takiej możliwości, żeby wywołanie metody wirtualnej uprościć do zwykłego wywołania lub inline). Przecież nigdy nie wiadomo, czy z danej klasy ktoś gdzieś nie odziedziczył. A tu proszę:


Wszystkie metody powinny być zawsze wirtualne. Jeżeli nie musisz pamiętać o virtual to bardzo dobrze... masz czas na inne rzeczy. (UPDATE: wszystkie w sensie, te od implementacji. Metody interfejsu raczej nie powinny być wirtualne).


Widzę, że facet czegoś tu nie rozumie.

Po pierwsze, jeśli jakakolwiek metoda jest wirtualna, to zostanie ona wywołana poprzez wywołanie wirtualne (czyli: z obiektu wyciągamy obiekt charakterystyczny, z niego z kolei wskaźnik na funkcję będącą implementacją metody i dopiero to jest wołane - oczywiście o jakimkolwiek inline zapomnij). To jest co najmniej dwukrotny koszt samego wywołania.

Po drugie, jeśli już chcemy tak dzielić na metody interfejsu i metody implementacji, to miejmy na uwadze, że w C++ istnieją następujące elementy w kwestii metod klasy:


  1. definicja implementacji. Jest to funkcja, która stanowi zestaw instrukcji, jaki zostanie wykonany w ramach wywołania funkcji
  2. definicja slotu. Jest to deklaracja, którą będzie można wypełnić swoją implementacją funkcji
  3. definicja interfejsu. Jest to deklaracja, która pozwala na wywołanie (w celu wykonania określonych czynności)


Możemy sobie te definicje odpowiednio upraszczać. Przykładowo, pojedyncza funkcja składa się wyłącznie z interfejsu i implementacji. Tak samo się dzieje w przypadku, gdy mamy zwykłą metodę klasy. W obu przypadkach zaś mamy do czynienia z podpięciem implementacji bezpośrednio pod interfejs. Fakt, że i w C++ i w innych językach obiektowych nie dostarczono oddzielnych definicji do implementacji i slotu, to oczywiście pewne ułatwienie dla użytkownika, ale zarazem powoduje, że wielu ludzi nie nie rozróżnia tych pojęć.

Metoda wirtualna składa się bowiem z trzech części: interfejsu, podpiętego do niego slotu, a dopiero do slotu podpiętej implementacji. To mniej więcej tak, jak byśmy w definicji metody zrobili tylko przekierowanie wywołania do slotu, oraz dostarczyli informację o tym, co jest wpięte do slotu w bieżącej klasie (chyba że to jest metoda abstrakcyjna, to wtedy do slotu nic nie jest wpięte).

Jeśli więc wprowadzamy sobie taki slot, to znaczy, że przewidujemy tutaj możliwość wpięcia sobie później przez kogoś innego w to miejsce własnej implementacji.

Więc nie ma czegoś takiego jak "metody interfejsu" i "metody implementacji". Interfejsem jest tutaj to, za pomocą czego można funkcję wołać, a implementacją jest to, co ma się dziać w przypadku wywołania. Tyle. Oczywiście, że istnienie publicznej metody wirtualnej powoduje równocześnie, że taka metoda staje się równocześnie trzema rzeczami (a przynajmniej dwoma, gdyby była abstrakcyjna): interfejsem wystawionym do wołania oraz slotem do podpięcia dowolnej implementacji.

Wiem, istnieje taka szkoła, żeby wszystkie metody wirtualne robić jako protected; jest to nawet niezła szkoła, aczkolwiek nie zawsze istnieje konieczność trzymania się tego wymagania. Oczywiście jest to o tyle dobra szkoła, że oddziela dwie rzeczy, które nie mają nic ze sobą wspólnego: interfejs do wywoływania oraz slot do podpinania. Różne elementy kodu mogą bowiem używać tego czegoś w różny sposób: jedni do podpinania, inni do wywoływania. Ustawienie metody wirtualnej jako protected i dorobienie do niej metody publicznej, która wywołuje ową metodę wirtualną, pozwala rozdzielić te dwa sposoby użycia tej metody, które tak naprawdę nie mają ze sobą nic wspólnego. W ten sposób twórca klasy bazowej ma możliwość wprowadzania np. dodatkowej kontroli do wywołania z poziomu interfejsu, nie ingerując w to, co ktoś (może w poprzedniej wersji) zrobił w klasie pochodnej.

Ale nie o tym była mowa. Ale w świetle tego wychodzi to coraz bardziej bez sensu. Jeśli bowiem stwierdzimy, że ok, dotyczy to tylko metod protected, to już z góry zakładamy, że będziemy robić metody protected z interfejsem zewnętrznym, który będzie tych metod używał. A przecież jeśli ktoś w ogóle nie robi metod klasy jako wirtualne, to tym bardziej nie będzie robił takiego sztucznego podziału!

Pamiętajmy też o dwóch szczegółach: po pierwsze, w C++ nie ma final, a po drugie, C++ zwykle nie jest kompilowany na maszynę wirtualną działającą jako JIT (jeśli już: rozwiązanie to ma sens tylko w aplikacjach uruchamianych na serwerze aplikacji, a do tego C++ jest rzadko stosowany). W pierwszym przypadku powoduje to, że każde wywołanie wirtualne będzie wywołaniem pośrednim (bo nigdy nie można założyć, czy ktoś czasem nie podał obiektu klasy pochodnej i nie przesłonił podanej metody), w drugim, że żadne wywołanie pośrednie nie będzie mogło być uproszczone.

To ostatnie zresztą ukazuje w pełni swoje wady, gdy dojdziemy do uruchamiania programu. Zbyt duża ilość metod wirtualnych w ogóle w aplikacji potwornie wydłuża czas uruchamiania programu (były w KDE prowadzone badania na ten temat). Spowodowane jest to koniecznością renumeracji adresów funkcji. Nie ma to żadnego związku z ilością funkcji, natomiast ma ścisły związek z ilością wskaźników do funkcji zapisanych na twardo w danych programu po kompilacji. Przykładowo, jeśli wyprowadzamy nową klasę B z klasy A, która ma 10 metod wirtualnych, przesłaniamy w klasie B tylko jedną metodę wirtualną. Ponieważ przesłaniamy co najmniej jedną metodę, to kompilator musi stworzyć dla klasy B oddzielny obiekt charakterystyczny, w którym 9 wskaźników do implementajci metod wirtualnych jest identyczne z tym z klasy A. To już powoduje powielenie istniejących 9 wskaźników dwukrotnie. Co się stanie, gdy takich klas, jak B, będzie więcej?

W Javie tego problemu nie ma dlatego, że zwykle kompilatory do tego języka wykonują kompilację JIT (oczywiście to powoduje równocześnie, że Java nie nadaje się do zastosowań innych, niż serwery aplikacji). To oznacza, że pewne części faktycznej kompilacji wykonują się po uruchomieniu, a to z kolei oznacza, że taka czynność może zostać wykonana przy znajomości całej hierarchii WSZYSTKICH klas, jakie wchodzą w skład uruchomionego procesu, a co za tym idzie, JIT wie na pewno, czy wywołanie danej metody na rzecz danej referencji jest wywołaniem efektywnie wirtualnym, czy nie. No i oczywiście istnieje też final, którego użycie wprost deklaruje, że nie może to wywołanie być wirtualne.

Pamiętajmy też, że C++ to jest język "wieloparadygmatowy", a nie "obiektowy". W C++ złożone struktury można programować na różne sposoby i przykładanie zbyt wielkiej wagi akurat do programowania obiektowego w C++ ma mało sensu.

Jeśli więc ktoś robi metodę wirtualną, to przewiduje podmianę implementacji - jeśli ktoś nie przewiduje podmiany implementacji w tym miejscu, to po co ma robić metodę wirtualną? Jest to kwestia designu - możesz chcieć, aby była, możesz nie chcieć. A że moja klasa będzie mniej użyteczna przez to, że dana metoda jest niewirtualna?

Momencik. Przecież jeśli ja piszę klasę i jej metody, to ja decyduję o tym, jak wygląda jej call flow. Dlaczego mam pozwalać każdemu kto popadnie na to, żeby się, za przeproszeniem, wpierdalał w mój kod? Jak mam zapewnić poprawność mojego kodu i zagwarantować właściwe zachowanie się programów używających mojej klasy, jeśli ktoś będzie się chciał wciąć w każde możliwe wywołanie w mojej klasie i zrobić mi burdel?

Przypominam również, że np. w Javie każda metoda jest wirtualna, ALE:

  • Istnieje final, które zabrania przesłaniania metody. Taka metoda zachowuje się jak zwykła metoda, jeśli jest wołana z klasy, w której jest dodane final (jeśli dodano to klasy, to wszystkie metody)
  • W Javie "private" implikuje "final".


Mówiąc bardziej ściśle: w C++ nie ma możliwości ani zakazania dziedziczenia, ani zakazania przesłonięcia metody. Java zatem pozwala, mając wszystkie metody wirtualne, na to, żeby wciąż przesłanianie metod było ograniczone tylko do wybranego zakresu (inna sprawa, czy w praktyce ktoś z tego w ogóle korzysta, ale pomińmy ten temat). Wymóg robienia wszystkich metod wirtualnymi w przypadku C++ odpowiada więc w Javie nieużywaniu final (a tym samym oczywiście private). Możemy to również porównać do polimorfizmu parametrycznego i wtedy dojdziemy do prawdziwego kuriozum: niech wszystkie argumenty funkcji i pola klas będą typami-parametrami wzorca...

Mnie, jako twórcy klasy, naprawdę szczerze wisi i powiewa, czy moja klasa będzie użyteczna. Ważne, żeby była używana w takim zakresie, w jakim ją przewidziałem do używania. Wymaganie, abym pisał klasę tak, żeby ktoś mógł sobie później kombinować, jak jej używać, jest po prostu nieprzydatne. O tym, że potem za to się płaci, już nie wspominam.


Nie używaj wyrażenia warunkowego (to jest to ? : ). Jeżeli będziesz musiał kiedyś dodać zagnieżdżony warunek, to gdy będziesz potem czytał takie zagnieżdżone instrukcje warunkowe prawdopodobnie stracisz dużo czasu.


Ależ oczywiście, że używaj. Nie mówiąc o tym, że jest to jedyna możliwość warunkowego zainicjalizowania zmiennej referencyjnej. Poza tym, nie zapominajmy w ogóle, że jest to wyrażenie - a jako takie potrafi sporo rzeczy, w odróżnieniu od instrukcji.

No, chyba że ktoś woli coś takiego:


template<class Value>
const Value& if_then_else( bool b, const Value& ifso, const Value& ifnot )
{ return b ? ifso : ifnot; }



Uważaj na niekompletne typu (tylko zapowiedziane). Niektórzy chcą być sprytni i zamiast include dają zapowiedź klasy. To może prowadzić do problemów, więc ja na to uważam. Typowym problemem jest zwolnienie pamięci po obiekcie wskazywanym przez wskaźnik niekompletnego typu. Jeżeli destruktor tego typu jest nietrywialny to nie zostaje wywołany. Tak na prawdę nie musisz nawet wiedzieć o tej sytuacji, jeżeli zawsze dostarczasz kompilatorowi wszystkich informacji jakich potrzebuje - w szczególności jeżeli nie oszukujesz go przez zapowiedź zamiast include.


I kolejna rzecz - gość w ogóle nie ma pojęcia, po co istnieją typy niekompletne. A właśnie dobra znajomość zagadnienia typów niekompletnych pozwala umiejętnie rozwikłać wzajemne zależności między dwoma modułami, jak również mocno oszczędzić sobie kompilacji. Co więcej, uważam że spartolili sprawę w bibliotece standardowej C++ poprzez niedodanie nagłówka <stringfwd>. Problem polega na tym, że "zapowiedzianej" wersji nie da się zrobić, bo string to jest typedef na basic_string<char>, więc trzeba zrobić zapowiedź basic_string i tylko tam można podać parametry domyślne. A przydałby się taki nagłówek choćby do tego, żeby fstream::open mogło przyjmować string. Przyjmowałoby się go przez const referencję, więc typ niekompletny by się nadawał.

Typy niekompletne jest to narzędzie do ucinania niepotrzebnych zależności między modułami, a tym samym oszczędzenie mnóstwa czasu kompilacji, pomijając już przypadki, gdy jest to konieczne. Fakt, że delete na tym działa i to działa źle uważam za defekt C++ i być może zostanie on usunięty - ale póki co ostrzeżenia kompilatora spełniają swoją rolę. Jedyne co poza tym robi to różnicę, to fakt, że nie da się użyć żadnego szczegółu typu, który jest niekompletny, ale przecież próba wykonania takiej operacji kończy się błędem kompilacji.

Nie jest wcale oczywiste, jak ten błąd kompilacji należy poprawić. Może należy zaciągnąć pełną definicję typu. A może raczej należy przenieść użycie tego typu do innego pliku, a w tym wstawić tylko typ niekompletny.

Jedno jest pewne - ci, którzy używają typów niekompletnych, to nie ci, którzy chcą być sprytni, tylko ci, którzy pewnie nieraz spędzili długie godziny na rozplątywaniu zależności.


Jedna klasa - dwa pliki. Zawsze rób dwa pliki - z interfejsem i z implementacją. Nawet jeżeli używasz szablonów. Wyjątkiem mogą być malutkie klasy, o których wiadomo, że nie urosną. Ludzie mają to do siebie, że łatwiej im analizować mniejsze kawałki (dlatego nie jest zalecane uczenie się poprzez wyłożenie mnóstwa książek na biurko - mózg boli na sam widok tej sterty).


Nie rozumiem tego zalecenia.

Ja nie tylko nie zawsze robię dwa pliki, ale nawet czasem na cztery klasy robię dwa pliki nagłówkowe i trzy pliki z implementacją, bądź trzy pliki nagłówkowe i jeden plik z implementacją. Niekiedy zdarza mi się pisać pełną definicję metody w klasie, najczęściej jednak nie widzę w tym sensu. Po prostu implementacje metod umieszczam w taki sposób, żeby łączyło je wspólne przeznaczenie. Jest rzeczą całkowicie normalną, że z dwóch różnych klas można wyróżnić trzy grupy metod i to całkowicie w poprzek klas.

A w przypadku szablonów to jest po prostu kuriozum. Przecież i tak wszystkie definicje w przypadku szablonów muszą być w pliku nagłówkowym. Ciekawe, że to tych "wspaniałych zaleceń" jakoś nie stosują się twórcy biblioteki standardowej C++.


Nie używaj delete. Dokładnie tak. Zamiast tego lepiej zastosować inteligentne wskaźniki (np. boost::shared_ptr). Po pierwsze nie trzeba pamiętać o zwolnieniu pamięci - ale trzeba określić kiedy powinna być zwolniona, dla własnej wiadomości. Po drugie delete ma w C++ dwie formy delete i delete [], o czym niestety wszyscy zapominają. Po trzecie delete nie sprawdza czy typ jest kompletnym. Po czwarte przy użyciu delete trzeba się niepotrzebnie zastanawiać czy ktoś nie potrzebuje jeszcze danego zasobu - kolejna możliwość pomyłki i okazja do zmarnowania odrobiny czasu.


No nie do końca. Pomijam już oczywiste pytanie "co w przypadku, gdy sam robię dla siebie jakiś specyficzny smart-pointer". Po drugie, nie wiem czy autor wie, że smart-pointery typu właśnie shared_ptr (dziś już std::tr1::shared_ptr) dają bardzo duży overhead na operacje zmiany zawartości wskaźnika. Pamiętajmy, że shared_ptr to jest wskaźnik "z przypinką" i jego implementacja jest dość złożona (znacznie prościej jest zrobić intruzyjny smart-pointer, ale intruzyjność oznacza, że trzeba odpowiednio zmodyfikować definicję klasy, która ma być trzymana przez taki smart-pointer, czyli inaczej, nie każdej klasy obiekt taki smart-pointer może trzymać). A ja, tak się składa, że robiłem pomiary czasowe programu z użyciem shared_ptr i obciążenie na jego przypisanie było o rząd wielkości większe, niż ta sama seria wykonana ręcznie z surowym wskaźnikiem. Pod względem wydajności bije go na głowę nawet odśmiecacz Boehma.

I znów ten typ niekompletny. Powtarzam: wystarczy sam fakt, że kompilator ostrzega.

I jasne, trzeba się zastanawiać, czy ktoś nie używa obiektu. Ciekawe. A w przypadku shared_ptr to już nie trzeba. Problem właśnie polega na tym, że jeśli wprowadzamy współdzielenie dostępu do obiektu, to jeszcze najczęściej dochodzą do tego kwestie związane z możliwością "podglądania" obiektu (czyli słabymi wskaźnikami). Bo sam fakt, że istnieje współdzielenie jeszcze nic nie znaczy; nadal istnieje odpowiedzialność za zniszczenie obiektu. Techniki reference-count są znane już od dawna przecież i w wielu miejscach stosowane - a i tak jakoś tak się dziwnie składa, że co rusz gdzieś trzeba sztucznie podkręcać licznik referencji, bo coś-tam się nie zgadza. Współdzielenie dostępu do obiektu nie jest niestety najczęstszym przypadkiem sposobu operowania obiektem; najczęściej tak naprawdę właściciel jest jeden, to właśnie współdzielenie dostępu do obiektu jest przypadkiem szczególnym.

Współdzielenie możliwości usunięcia obiektu to nie jest jedyny aspekt współdzielonego obiektu. Równie istotną sprawą jest możliwość modyfikacji obiektu i synchronizacja powodowanych tych zmian. Możliwość domyślnego współdzielenia właścicielstwa do obiektu (co oferują nam języki z gc) zwalnia nas zatem z konieczności ustalania nadzorcy obiektu, spychając jedynie jednak problem w inne miejsce.


Dokładnie poznaj wybrane inteligentne wskaźniki - często mają wady, które wynikają z samej konstrukcji. Typowym błędem są cykle utworzone przez takie wskaźniki. Wówczas jest wyciek pamięci. Dlatego ten element biblioteki zawsze trzeba dobrze poznać.


Ha! A więc: używaj zawsze shared_ptr... ale spodziewaj się problemów. :)

To ja mam lepszą radę: nie używaj shared_ptr :) A tak na poważnie: staraj się w miarę możliwości nigdy nie współdzielić obiektów. Jeśli już jednak istnieje taka potrzeba, nadal obowiązkowo utrzymuj hierarchię obiektów. Jeśli np. dwa obiekty muszą współdzielić inny, to niech to będą dwa obiekty, które nie wymieniają się żadnymi innymi danymi. Jeśli te dwa obiekty mają współdzielić więcej niż jeden obiekt, to niech zarządzaniem tymi obiektami zajmie się oddzielny obiekt. Również obiekty uczestniczące we współdzieleniu nie mogą same być współdzielone.


Nie używaj std::auto_ptr. Jeżeli poznałeś dobrze auto_ptr to wiesz dlaczego ;-P Ich polityka własności powoduje, że nietrudno o błąd. W szczególności można kopiować obiekty typu auto_ptr, ale wówczas oryginał traci ważność(!) - jest zerowany. Dodam tylko, że algorytmy STL-a używają kopiowania dość sporo...


LOL :)

Oczywiście, w C++0x należy już zrezygnować z auto_ptr na rzecz scoped_ptr, ale to nie znaczy, że auto_ptr jest bezużyteczny. Co więcej, na kompilatorze, który nie jest jeszcze zgodny (wystarczająco) z C++0x jedyny dostępny z takim fajnym ficzerem. Oczywiście, że posiada on wadę polegającą na niemożności współdzielenia, ale ta wada wychodzi już na etapie kompilacji, ponieważ obiekty auto_ptr nie spełniają koncepcji "kopiowalny" (wymaganej przez większość elementów STL). Wskaźnik auto_ptr jest za to wyśmienity do:

  • przytrzymania obiektów dynamicznych na czas, aż wszystkie operacje, które mogą potencjalnie rzucić wyjątkiem, zostaną zakończone
  • zwracania nowo uworzonych obiektów jako rezultat wywołania (zapobiegają niebezpieczeństwu wycieku pamięci w przypadku zignorowania wartości zwracanej)



Unikaj dziedziczenia wirtualnego. Gdy jest to możliwe, bo pominięcie virtual w tym przypadku może być czasami groźne w skutkach. Chodzi o to, że hierarchia dziedziczenia nie powinna być grafem (który nie jest jednocześnie drzewem). Jeżeli już jest to trzeba bardzo uważać na operator= definiowany automatycznie. Polecam spróbować jak to działa, to zobaczysz dlaczego lepiej tak nie robić.


Super :) Polecam do przeczytania następujący artykuł (mój oczywiście, obcych nigdy nie polecam :D): Multiple inheritance considered nice, w którym objaśniam dokładnie, kiedy dziedziczenie w C++ jest dziedziczeniem z punktu widzenia obiektowego. Jak się okazuje, dziedziczenie wirtualne ma tutaj spory udział, co więcej, właśnie dziedziczenie wielorakie, w którym jest ta sama klasa wprowadzona pośrednio przez dwie oddzielne klasy, podane równocześnie do dziedziczenia, to jest właśnie dziedziczenie niedozwolone z obiektowego punktu widzenia.

Mam więc znacznie prostszą poradę i to w sam raz w stylu Łukasza: unikaj dziedziczenia wielorakiego. Szczególnie, gdy nie rozumiesz, o co chodzi.

A tu trafia nam się ciekawostka dwóch kolejnych:


Asercje są dobre. Warto używać asercji. Pozwalają sprawdzić czy wywołanie metody faktycznie spełnia zadane warunki wstępne (ang. preconditions). Niejednokrotnie dzięki temu mechanizmowi wykrywałem błędy, które przeszłyby testy modułowe. Typową sztuczką jest assert(warunek && "Komunikat błędu") aby dostać trochę sensowniejszy komunikat niż tylko numer linii i nazwę pliku z błędem. Niestety nie można odpowiedniego tekstu tworzyć dynamicznie.


Słusznie.


Asercje są złe. Niestety asercje z C++ są złe. W przypadku błędnego warunku przerywają program. Wyobraź sobie, że grasz w grę komputerową i nagle aplikacja zostaje przerwana z komunikatem "assertion failed". Dlatego warto stworzyć własną funkcję asercji, która będzie rzucała wyjątek - przynajmniej można go potem złapać. Dodatkowo można dać dokładniejsze informacje o błędzie (np. że index = 5 a powinno być <4


No bo na tym właśnie polega rola asercji, żeby przerywać program i nie dopuścić do jego dalszego wykonywania się!

Asercje i wyjątki. Jasne. To chyba trzeba się w Javie wykąpać.

Asercja jest to sprawdzenie KRYTYCZNEGO warunku wstępnego funkcji. Krytycznego, to znaczy takiego, że jeśli taki warunek nie jest spełniony, to dalsze wykonywanie się programu nie powinno być możliwe. Dlatego asercjami nie można sobie szastać. Asercje służą właśnie do wysypania programu, bo mają oznaczać błąd, z którego nie można się już "odzyskać".

Jeśli ktoś mówi o tym, że miałbym grać w grę i nagle dostać komunikat "assertion failed", to chyba nie rozumie, że jeśli stosuje się asercje, to stosuje się również dwie oddzielne konfiguracje kodu, zwane "debug" i "release". I asercje tylko w trybie "debug" powodują wysyp programu, bo uważa się to wtedy za niegroźne, podczas gdy w trybie release sprawdzanie tego warunku jest ignorowane. Jeśli uważamy, że pozostawienie tego warunku jest zbyt ryzykowne również w trybie release, to w trybie release powinniśmy wykonać ODDZIELNE sprawdzenie i tym razem możemy się ewentualnie posłużyć wyjątkiem (oraz zaplanować na tę okoliczność sensowne recovery). W przypadku gry, dajmy na to, skoro już podano ten przykład, należy spróbować zebrać wzystkie możliwe informacje o bieżącym stanie, gdzieś go zrzucić, utworzyć środowisko od nowa, nałożyć zmiany i pozwolić kontynuować grę - użytkownik najwyżej zauważy spowolnienie, ale mimo wszystko przynajmniej może dalej grać.

A teraz czas na doświadczenia na żywo:


Innym razem nie było tak wesoło. Zostałem zapytany o slicing. Nie bezpośrednio lecz przez przykład w C++. W skrócie była klasa A i jej pochodna B. Była zdefiniowana funkcja foo z argumentem typu A. Ta funkcja w main była wywołana z argumentem typu B. Pytanie brzmiało co się stanie? Zastanów się...


Odpowiedź jest oczywiście banalnie prosta - przekazanie przez wartość obiektu klasy pochodnej B spowoduje utworzenie obiektu tymczasowego klasy A w celu przekazania go dalej przez wartość. Oczywiście, jeśli przekażemy tam obiekt klasy A, to do funkcji zostanie przekazany również obiekt tymczasowy. O ile ja sobie przypominam, jest to również konstrukcja, do której kompilator powinien rzucać ostrzeżenie. Zresztą nie jest to jedyny taki przypadek - dokładnie ta sama sytuacja istnieje w przypadku typów ze sobą nie powiązanych, mających jednak zdefiniowaną konwersję (albo domyślną, albo zdefiniowaną przez operator konwersji, albo przez jednoargumentowy konstruktor nie-explicit).

I do tego celu potrzeba było aż eksperymentów, żeby to stwierdzić? Ciekawe.

C++ nie jest pod tym względem wcale szczególny - tak jest w każdym języku, który posiada konwersje między typami wartości. Problem w tym szczególnym przypadku nie polegał na tym, że przekazano obiekt klasy pochodnej (bo skąd twórca klasy A mógł wiedzieć, że ktoś zrobi klasę B?). Problem polegał na przekazaniu klasy A przez wartość. A, jak to już gdzieś wspominałem, typy wartościowe nie mogą podlegać hierarchiom obiektowym. Oczywiście klasę, jeśli ma być typem wartościowym, najlepiej zabezpieczyć w podany sposób (czyli dając explicit do konstruktora kopiującego). Ważne jest jednak, żeby wiedzieć nie tylko to, że tak o po prostu przypadkiem nadzialiśmy się na "beznadziejne" mechanizmy w C++. Ważne jest, aby wiedzieć o podziale na typy wartościowe i obiektowe, że ten podział naprawdę istnieje, i że istnieją reguły używania jednych i drugich - opisałem to w innym artykule pt. Valuables and objectives.

I odpowiem od razu - oczywiście, operator = ma również tą samą wadę, a co gorsza, operatora= nie można zrobić explicit. Ale jest na to rada: należy zadeklarować alternatywny operator=, z typem template, który wywoła błąd. W C++0x jest nawet dodatkowe ułatwienie, przez co nie trzeba sztucznie wywoływać błędu:


A& operator=( const A& a ) = default;

template <class X>
A& operator=( const X& x ) = delete;



Ja, w odróżnieniu od Łukasza, z kolei, mogę dać gwarancję na poprawność mojego rozumowania. Zasada jest zresztą prosta: każdy konstruktor jednoargumentowy bez explicit jest równocześnie konstruktorem konwertującym, który sam z siebie ustanawia definicję konwersji z każdym, kto pasuje do typu argumentu (w przypadku konstruktora kopiującego - również domyślnego - oznacza to, że ustanawia ją z każdym obiektem pochodnym, ponieważ przyjmuje referencję do niego jako typ argumentu, a referencje i wskaźniki do klas pochodnych domyślnie konwertują się na te od klasy bazowej). Konstruktor konwertujący jest to jedna z możliwych zdefiniowanych konwersji; poza tym istnieją jeszcze konwersje "wbudowane" oraz konwersje definiowane operatorem konwersji (czyli operator X() zdefiniowany w klasie Y pozwala konwertować obiekt klasy Y na obiekt klasy X). Mógłbym nawet podać jakieś referencje w standardzie, ale nie chce mi się szukać :D.

Przestrzegam ogólnie przed takimi zasadami. To, co zacytowałem tu powyżej to trzymanie się sztywnego schematu podyktowanego faktem, że człowiek się na tym czy tamtym potknął. Tymczasem prawda może być zupełnie inna; potknięcie wynika niekoniecznie stąd, że zastosowane konstrukcję niezgodnie z przeznaczeniem. Wynika stąd, że nie do końca rozumie się określony mechanizm i nie wie się, że można go w określony sposób wykorzystać. Akurat C++ jest takim językiem, że bardzo wiele z jego właściwości można używać nie tylko niezgodnie z przeznaczeniem, ale nawet w sposób, o jakim się jego twórcom nie śniło. Jest to dla mnie zresztą dość ciekawa cecha wspólna z całkowicie odmiennym od niego językiem Tcl i chyba najważniejszy powód, dla którego lubię używać obu tych języków.

To nie znaczy, że C++ ma być językiem bez zasad. To znaczy, że aby używać określonych ficzerów z C++ należy mieć do tego zawsze jakąś konkretną logiczną "podkładkę". Taka podkładka wystarczy, aby zasady, podobne do powyższych, można było właśnie potłuc o kant.

wtorek, 24 marca 2009

Yellow Pages: Korea Północna a sprawa Amerykańska

Komentarz Wprost:


Zatrzymanie amerykańskich dziennikarek to manifestacja siły ze strony Korei Północnej. Ciężko bowiem inaczej interpretować sytuację, kiedy strażnicy graniczni z jednego państwa aresztują na terenie sąsiedniego państwa przedstawicieli mediów.


[UWAGA: W tekście stosuję "własną" translację koreańskiego pisma na litery łacińskie: hangug [han guk] (한국), zwson [dzooson] (조선); reguły niedługo gdzieś przedstawię :)]

Ha! Ale komentator nie zauważył jeszcze jednego szczegółu. W jaki sposób żołnierze z Zwsonu weszli sobie swobodnie na teren Chin i kogoś aresztowali? Przecież to oczywiste - ktoś im musiał na to, nawet po cichu, pozwolić.

Czy świat naprawdę nie widzi, że "Korea Północna" jest po cichu wspierana przez Chiny? Przecież gdyby nie wsparcie finansowe z Chin, ten śmieszno-straszny reżim już dawno rozleciałby się w kibinimatri (z dokładnie takich zresztą powodów rozleciał się komunizm w Polsce i ZSRR). Proszę sobie przejrzeć dostępne na sieci (choćby Wikipedii) materiały nt. Zwsonu i dojdziemy do wniosku, że taki reżim w normalnych warunkach powinien się rozlecieć sam z siebie.

Jeśli więc się nie rozleciał, to istnieją tylko dwie możliwości: albo musi mieć przeogromne ilości zasobów mineralnych, albo musi skądś mieć sporą kasę. KRLD niby zasoby mineralne ma, ale ma ich w porównaniu z resztą świata (choćby samymi Chinami) niewiele.

Przecież ten skansen jest z jakiegoś powodu utrzymywany. Z jakiegoś powodu jest to komuś na rękę. Przecież gdyby Chinom nie było to na rękę, to "jednym piernięciem" przywłaszczyliby sobie całość (mieliby za to zresztą dozgonną wdzięczność Amerykanów). Dlaczego Hangug (Korea Południowa) nie próbuje odzyskać terenu, do którego oficjalnie rości sobie prawa? I zaznaczam, że mówię o państwie, które utrzymuje jedną z największych armii świata (porównywalną z Izraelem i US). Wiemy chyba dobrze, że ze zniknięcia reżimu Zwsonu bardzo by się ucieszyły i Stany i Hangug. Mimo to, nie podejmą zbrojnej interwencji. Dlaczego?

Sporo ciekawych rzeczy w tym temacie można się dowiedzieć z Wikipedii. Na przykład:


In a 2003 event dubbed the "Pong Su incident", a North Korean cargo ship allegedly attempting to smuggle heroin into Australia was seized by Australian officials, strengthening Australian and United States' suspicions that Pyongyang engages in international drug smuggling. The North Korean government denied any involvement.


Może to i drobny incydent. A może jednak wierzchołek góry lodowej.

Strażnicy z Zwsonu, którzy aresztowali dziennikarki, nie dostali żadnego "pozwolenia" na tą operację. Oni dostali rozkaz, to chyba oczywiste. Ale moim zdaniem równie oczywista jest odpowiedź, na czyj rozkaz zrobił to Kim.

Za pomocą tej operacji Chinom udało się postawić Amerykanów w głupiej sytuacji. Po pierwsze, Amerykanie, i tak już uwikłani w dwie wojny, muszą zacząć trzecią - alternatywą jest być chłopcem do bicia. Po drugie, oficjalnie Chiny niby nie mają z tym nic wspólnego (terefere), więc interwencja w Chinach i tak by nic nie dała. Po trzecie, oficjalnie to w ogóle reżim z Pionianu jest ten "zły", a Chiny to "ten dobry", co robi ze Stanami interesy.

Cokolwiek Amerykanie by podjęli, trzeba pamiętać, że stoją za tym Chiny, i cała ta interwencja może skończyć się wojną Stanów z Chinami, w której może i Hangug wesprze Amerykanów, ale pewnie Rosja jeszcze wesprze Chiny. Byłoby trochę szkoda zaczynać to tak wcześnie - lepiej by było poczekać, aż Rosja się całkiem rozleci, a Chińczycy przeniosą się na "wymarłe" tereny z Rosji. Wszystko zależy od tego, czy Chinom będzie się opłacało uruchamiać całą machinę teraz, czy trzeba będzie trochę poczekać. Bo że uruchomią prędzej, czy później, to pewne.

sobota, 7 marca 2009

Yellow Pages III: Zamieszanie wokół eutanazji

Cytatów nie będzie. Może uzupełnię później.

W mediach znów rozpętała się burza w sprawie, którą określa się jako sprawę "eutanazji". Jest to oczywiście jeden z przekrętów medialnych i nie największy wcale z dowodów na to, jak bardzo prasa się wysługuje ideologom.

Póki co, zapamiętałem dwie sprawy: jedna we Włoszech, gdzie w końcu odłączono od aparatury osobę w stanie wegetacyjnym, a ostatnio i jedna w Polsce. W obu tych sprawach odbyło się starcie dwóch obozów: "Atanastów", którzy chcieliby każdemu człowiekowi przedłużać życie w nieskończoność, oraz "Eutanastów", którzy chcieliby jak najszybciej pozbyć się uciążliwych chorych i niedołężnych ludzi. Ludzie normalni, nie należący do żadnego z tych obozów, jak to zwykle, nie mają nic do powiedzenia. A przynajmniej nikt w prasie się za nimi nie opowiada.

Nie zamierzam polemizować z tymi idiotami, eutanastami. To są po prostu zakamuflowani mordercy (lub samobójcy).

Nie zamierzam również polemizować z tymi idiotami, atanastami. Przedłużanie każdemu człowiekowi życia w nieskończoność jest sprzeczna z prawem naturalnym. Jest to więc kolejna lewicowa ideologia.

Co ciekawe, dokładnie te argumenty wytaczają przeciwko sobie te dwa obozy. Jedyne co względem tego, co pokazuje prasa, jest nienormalne, to opowiadanie się za tymi dwoma poglądami jednocześnie. Jak to się im udało, żeby postawić jednoznaczną sprzeczność jednego z drugim? Bardzo prosto: należało tylko wyznaczyć obszar, który sam w sobie jest sprzecznością i nie mówić o jego istnieniu.

Normalnych ludzi bowiem eutanaści oskarżają o atanazję, a atanaści o eutanazję. Jeśli więc posługiwać się warunkami stworzonymi przez prasę, to możesz być albo eutanastą, albo atanastą - a twór będący jednym i drugim stoi sam ze sobą w logicznej sprzeczności, więc istnieć nie może. Sprytnie, nie?

A polega to na takim zdefiniowaniu eutanazji i atanazji (tak, przyznaję się, pojęcie wymyśliłem sam, bo nie znalazłem w otaczającej mowie niczego podobnego; słowo to powstało z greckich "a-" - zaprzeczenia i "thanatos" - śmierć), żeby oba te pojęcia przywłaszczały sobie część poglądów wyznawanych przez ludzi normalnych. Pozwala to przeciągać normalnych ludzi do obozu eutanastów lub atanastów.

I żeby było jasne - ideologii eutanastów nie definiują eutanaści. Ideologię eutanastów definiują atanaści, a ideologię atanastów - eutanaści. Nie jest to bowiem żadne uczciwe postawienie sprawy na zasadzie: "jestem kimś takim i wyznaję takie-a-takie poglądy", nawet żeby były one bardzo skrajne. Jest to działanie typu "przyprawiamy sobie nawzajem gęby". To właśnie normalni ludzie są przez eutanastów oskarżani o atanazję, a przez atanastów o eutanazję.

Więc jeśli już stawiać sprawę jasno, to należy raczej powiedzieć, jak atanazja jest definiowana (przez eutanastów), a jak eutanazja (przez atanastów).

Eutanazja zatem jest to wszystko to, co ma prowadzić do śmierci człowieka (nawet jeśli ta śmierć nastąpiła z przyczyn naturalnych). Eutanastą jest zatem każdy człowiek, który uważa, że jakiś człowiek powinien umrzeć. Do przejawów eutanazji zatem zalicza się zarówno zabijanie człowieka, którym trzeba się opiekować, zabijanie człowieka, który cierpi z powodu ciężkiej choroby (żeby się "nie męczył"), jak również odcięcie od aparatury człowieka, który jest już rośliną (umarł jego mózg).

Atanazja natomiast (czyli zestaw poglądów potępianych przez eutanastów) jest to obrona życia za wszelką cenę, również obrona życia zupełnie bez sensu, podtrzymywanie pewnych oznak życia (najczęściej bicia serca), które wcale nie oznaczają, że człowiek jest żywy i świadomy itd.

Oczywiście eutanaści myślą o sobie zupełnie co innego - oni uważają, że bronią prawa do śmierci, podobnie zresztą atanaści są święcie przekonani, że są obrońcami życia. Oba te obozy mają tylko jedną wspólną cechę - żadna z nich nie stawia na pierwszym miejscu człowieka. W obu człowiek jest rzeczą, na której się eksperymentuje, która nie ma nic do powiedzenia. Paradoskalnie, obie te ideologie są lewicowe i obie są antyliberalne - prawo do śmierci odbiera prawo do życia i odwrotnie. Normalni ludzie, dla których liczą się wartości liberalne, i dla których każdy człowiek powinien mieć prawo do życia i prawo do śmierci równocześnie, są sprzecznością samą w sobie (względem tego, co widzimy w prasie).

Winnymi całego wielkiego zamieszania są jednak atanaści. Eutanaści bowiem są, przynajmniej w Polsce, jedną ze skrajnie lewicowych ideologii, na które w Polsce jest, delikatnie mówiąc, umiarkowane zapotrzebowanie i które zyskują u ludzi niewielki posłuch. Trochę inaczej jest w tzw. "starej unii", ale prawdę mówiąc więcej się o tym mówi, niż jest w tym prawdy. Nawet zresztą w całej Europie nikt eutanastów nie traktuje wcale aż tak poważnie, jak by to wynikało z doniesień prasowych (zdominowanych zresztą przez środowiska lewicowe - i nie jestem pierwszym, który to stwierdził, co więcej, ja to tylko powtarzam po innych). Każdy Anglik lub Francuz, pełen górnolotnych frazesów o tolerancji, w przypływie szczerości (np. po dużej ilości napojów "wysokoskokowych") może wam powiedzieć, co się "naprawdę" myśli o tych ideologiach i ludziach. I tak samo nikt nie myśli poważnie, żeby eutanazja mogła stać się prawem. Przyczyna jest oczywista - zgódź się na eutanazję, to potem ciebie "coś" spotka.

Atanaści jednak rozpętali przeciwko tym nieszkodliwym idiotom taką nagonkę, że łatę eutanasty przykleili i prawdziwym eutanastom i normalnym ludziom. Okazuje się, że eutanastą jest każdy, kto ośmieli się w jakikolwiek sposób "przyczynić" do śmierci człowieka, choćby przez nic nie robienie. A jeśli już trafiło się, że ktoś jest podtrzymywany przez aparaturę - to już kaplica. Oczywiście aparatura może dzisiaj już podtrzymywać życie człowieka praktycznie w nieskończoność. Co prawda nie doszło jeszcze dzisiaj do czegoś takiego, że ktoś przeżył już 100 lat, od 30 lat jest podtrzymywany sztucznie przez aparaturę. Byłby to bardzo ciekawy przypadek, bo ktoś mógłby zadać pytanie: przepraszam bardzo, wszyscy jego kumple, których żadna aparatura nie podtrzymywała, już dawno wyciągnęli nogi - to ile jeszcze do jasnej cholery czasu mam go podtrzymywać???

Ja mam tylko nadzieję na jedno: że w którymś momencie duch tego sztucznie podtrzymywanego człowieka objawi się tym zażartym obrońcom życia i ich opierdoli. I każe natychmiast odłączyć jego sztucznie ożywiane zwłoki od aparatury. Przydałoby się to, zwłaszcza że atanaści zwykle są związani z "środowiskami chrześcijańskimi", więc to by był na nich dobry hak. Niestety na to akurat nie mamy wpływu.

Ale o - właśnie tutaj wyraziłem pogląd ludzi "normalnych", które mogą spowodować, że atanaści natychmiast przyczepią mi łatkę eutanasty. No bo jak to - odłączyć od aparatury? To jest zabójstwo, morderstwo, obrzydlistwo!

W ten właśnie sposób atanaści wpychają normalnych ludzi w objęcia eutanastów. Każdy normalny człowiek wie bowiem, że sztuczne podtrzymywanie życia człowieka, który jest już biologicznie martwy, to mniej więcej coś podobnego, jak hodowanie rybek w akwarium - tyle tylko, że znacznie bardziej kosztowne i zdecydowanie nieetyczne, skoro jest to zabawa ludzkimi zwłokami.

Dochodzi do tego również kwestia kosztów. Ja rozumiem, że być może kobiecie, która straciła męża, jest ciężko z tym, że nie miała środków na jego leczenie - ale nie rozumiem, dlaczego nie mógł jej ktoś po prostu pomóc. Najlepiej, żeby zresztą ci atanaści zajęli się właśnie taką działalnością. Jeśli chce się, żeby życie człowieka beznadziejnie chorego ktoś podtrzymywał, to niech dadzą na to środki.

Co ciekawe - i to właśnie pokazuje, że sprawa "eutanazji" z Włoch nie jest prostą sprawą - nie chodziło tutaj tylko o kwestię odłączenia od aparatury. Znalazła się bowiem fundacja, która chciała przejąć finansowanie przedłużania życia tej kobiety. W tej sytuacji ja bym nie protestował - jeśli ktoś chce sam finansować owe przedłużanie agonii, jego sprawa. Protestuję jedynie przeciwko żądaniu, aby ktoś finansował coś, czego finansować nie chce, tylko dlatego, że "tak jest etycznie". Natomiast w podanej sytuacji nastąpiło odłączenie od aparatury, mimo że znalazł się ktoś, kto chciał finansować przedłużanie życia. Świadczy to o tym, że odłączenie od aparatury nastąpiło z przyczyn czysto ideologicznych.

I tu właśnie wyjaśnię, dlaczego ten artykuł znalazł się pod "Yellow Pages".

Nikt, ale to absolutnie nikt z relacjonujących owo zdarzenie w prase nie przytoczył jednej, bardzo istotnej informacji: czy owa kobieta miała orzeczoną przez lekarza śmierć mózgu. Nikt właściwie nie powiedział, na ile ta kobieta miała badany mózg i na ile jest on uszkodzony i czy będzie mogła odzyskać pełną sprawność. Inaczej mówiąc, poza ogólnikowym stwierdzeniem, że ta kobieta jest już warzywem, nie dowiedzieliśmy się nic na temat przyczyn, dla których odłączono ją od aparatury.

Może w przyszłości będą jakieś metody pozwalające takie osoby wyleczyć, odgryzają się atanaści. Jasne. Moim zdaniem nastąpi to dopiero w czasach, gdy wyhoduje się sztuczny mózg (i wszystkie inne organy) i będzie można mu ten mózg przeszczepić. Póki co, na taki wynalazek się nie zanosi. Co więcej, nawet jeśli, załóżmy teoretycznie, znajdzie się w przyszłości sposób na wyleczenie tej osoby, to wciąż nie wiadomo, czy ktoś będzie mógł za to leczenie zapłacić!

To prawda, że dzisiaj kryteria określające możliwość przeżycia człowieka pozwalają przeżyć większej ilości osób - ale przecież dzieje się tak również dlatego, że dziś można wyleczyć choroby, na które dawniej ludzie umierali. To prawda, że prof. Stephen Hawking w XVI wieku dawno by wyciągnął nogi - ale nie mówimy o możliwościach przeżycia w jakiejś nieokreślonej przyszłości, gdy takie przeżycie będzie możliwe, tylko o możliwości przeżycia tu i teraz. Pan prof. Hawking mógł przeżyć nie tylko dlatego, że istniała aparatura, która mogła mu przedłużać życie. Również dlatego, że mimo paraliżu ciała ten człowiek mógł pracować i nadal mieć osiągnięcia naukowe, więc koszty utrzymania go przez aparaturę mógł pokryć sam bez niczyjej łaski.

Powiedzmy więc może sobie szczerze i jasno - zabójstwem jest odebranie życia człowiekowi zdrowemu, poruszającego się (nawet w ograniczonym zakresie) o własnych siłach, człowiekowi świadomemu. Natomiast jeśli ktoś z przyczyn naturalnych umiera - to trudno, widać przyszedł na niego czas. Jeśli się mu podtrzymuje życie, to fajnie, może pożyje potem jeszcze jakiś czas. Natomiast nikt nie może mieć pretensji, że ktoś komuś życia nie uratował lub nie przedłużył!

Ja rozumiem, że ktoś może potem mieć wyrzuty sumienia, że komuś nie pomógł, ale tak naprawdę to jest wynik szantażu ze strony atanastów. Odmawianie komuś prawa do życia dla nich to zabójstwo, a nieudzielenie pomocy w celu uratowania życia jest dla nich odmówieniem prawa do życia.

Problem w tym, że gdyby pójść jeszcze dalej, to okazałoby się, że skoro ja mam komuś ratować życie, a jeśli tego nie zrobię, to odmawiam mu prawa do życia - to znaczy, że owo prawo do życia nadaję mu w tym momencie właśnie ja! I w tym momencie jest drobny problem - na jakiej podstawie ktoś ma mi mówić, czy ja mam owo prawo do życia komuś dać, czy nie? Jeśli los zdarzył, że mam władzę nad życiem i śmiercią określonego człowieka, to dlaczego ktoś ma mi dyktować, co mam z tym prawem zrobić? Chcecie, to szukajcie - nie ma żadnego prawa naturalnego, ani boskiego, które nakazuje coś konkretnego robić w tej sytuacji.

Zwłaszcza właśnie atanaści mówią, że tylko Bóg jest panem życia i śmierci, więc tylko on ma prawo je odbierać lub dawać. Skoro tak, to znaczy, że jeśli ktoś umiera, to dlatego, że Bóg tak chciał, prawda? Czyli udzielenie mu w ogóle pomocy byłoby sprzeczne z wolą Boga!

(Dygresja, ale tylko dla chętnych: Oczywiście, że Bóg dopuściłby do śmierci tego człowieka i oczywiście, że człowiek mógłby uratować owo życie. Dopuszcza się obie możliwości. Jeśli by tak nie było, to w ogóle żaden człowiek nie mógłby uratować żadnemu człowiekowi życia, a tym samym nie miałby takiej zasługi. W historii chrześcijaństwa znane są przypadki, gdy człowiek postąpił niezgodnie z wolą Boga, choć oczywiście nie było to sprzeczne z jego postanowieniami i udało mu się postawić na swoim. Było to możliwe tylko dlatego, że Bóg pozwolił człowiekowi postawić na swoim. Nie zmienia to faktu, że jeśli człowiek tak zrobi, to co najwyżej będzie miał dodatkowa zasługę - natomiast nie otrzyma żadnej "kary", jeśli z tej okazji nie skorzysta!)

Czyli zbierając to wszystko do kupy: gdyby używać prostackich objaśnień owej ideologii, to wynika z tego, że ratując komuś życie postępuje się sprzecznie z wolą Boga, ale z kolei nie ratując komuś życia człowiek staje się mordercą. Inaczej mówiąc: jeśli znalazłeś się w sytuacji bycia czyimś panem życia i śmierci, to masz pecha. Chyba, że jesteś jakimś dyktatorem, ale akurat to pozycji wobec Boga wtedy w najmniejszym stopniu nie poprawia.

To jest szantaż, jeśli mamy nazywać rzeczy po imieniu. I nie wiem, czy ma to jakąś określoną nazwę w psychologii, ale na pewno zjawisko jest bardzo dobrze znane. To jest dokładnie taki sam szantaż, jak komentarze pod twoim adresem ze strony ludzi w tramwaju, bo nie chciałeś ustąpić miejsca siedzącego staruszce (a może właśnie ty jesteś skrajnie wyczerpany i słaniasz się ze zmęczenia - nie masz obowiązku nikomu ustępować miejsca!). Tak samo, jak nie wpuszczenie do kolejki matki z dzieckiem na ręku (oczywiście, że niemowlęta narzucają strasznie bezwzględny rygor czasowy rodzicom, ale zdarza się też, że to "dziecko na ręku" ma jakieś 5 lat i wcale jego harmonogram nie odbiega od harmonogramu dorosłego człowieka!). Tak samo, jak odmowa przeprowadzenia staruszki przez ulicę. Jeśli ja komuś w wyżej wymieniony sposób pomogę, jest to tylko moja dobra wola. Mogę chcieć pomóc i mogę nie chcieć. Jeśli odmówię, to jest to moje prawo. Pomoc w tych wypadkach nie jest w żadnym stopniu moim obowiązkiem. Z tego powodu domaganie się od jakiegokolwiek człowieka pomocy w tych przypadkach jest chamstwem. I nie ma żadnego usprawiedliwienia dla takiego postępowania.

I dokładnie tak samo jest w tym przypadku. Powinienem mieć prawo odmówić ratowania życia człowiekowi, jeśli tak zechcę. Powinienem nawet mieć prawo odmówić mu życia po jakimś czasie od jego uratowania, nawet kilku lat. Jeśli to rzeczywiście Bóg jest panem życia i śmierci, to znaczy, że gdyby jego wola była taka, że ten człowiek ma żyć, to sprawiłby cud, żeby ten człowiek żył. A jeśli żadnego takiego cudu nie sprawia, to znaczy, że jego wolą jest śmierć tego człowieka. Tyle.

Przy takim postawieniu sprawy chyba nikt nie powinien mieć wątpliwości, jak ma postąpić w podobnych przypadkach. Jeśli jesteś w sytuacji, że człowiek obok ciebie umiera, a tylko ty możesz uratować mu życie - nie słuchaj tych, którzy ci mówią "nie zastanawiaj się". Właśnie zastanów się. Bo w tym przypadku jesteś panem życia i śmierci. I to niekoniecznie absolutnym - czasem próba uratowania życia przy nieznajomości stopnia wewnętrznych obrażeń może nawet przyspieszyć śmierć.

Jeśli więc jest to, na przykład, wypadek samochodowy - zrób tylko tyle, ile wymaga prawo (tzn. zadzwoń na pogotowie) - a coś więcej to zrób tylko jeśli jesteś pewien, że uratuje mu to życie. Jeśli jesteś prawnym opiekunem kogoś, kto został ci przekazany w wegetującym stanie - to jest twoja sprawa, czy odłączysz go od aparatury, czy nie. Jesteś panem życia i śmierci i ze sposobu skorzystania z tego prawa nie musisz się przed nikim tłumaczyć. Oczywiście mówię tylko o sytuacji, gdy owo prawo zostało nadane przez niespodziewane okoliczności, w których się człowiek znalazł, a nie zostało one samodzielnie przezeń "wypracowane" (na przykład, postrzeliłeś człowieka, i masz szansę uratować go przed wykrwawieniem się). Jak by nie było, sprawa jest prosta: co by było, gdyby nie było ciebie na miejscu i w ogóle nie miałbyś wpływu na całą sytuację? Jeśli by ten człowiek umarł w tym przypadku, to jego śmierć w sytuacji, gdy mogłeś uratować mu życie, jest tylko naturalną koleją rzeczy, której ty nie zaburzyłeś. Tyle.

A eutanazję należy nazywać po imieniu. Eutanazja jest to zabicie człowieka, który żyje "ale co to za życie". Najczęściej jest to śmierć na życzenie człowieka, którego sytuacja życiowa jest beznadziejna. W tym jednym przypadku oczywiście również mam swoje zdanie, to znaczy - jeśli człowiek jest w stanie sam żyć, ale nie chce już dłużej żyć - to niech popełni samobójstwo. Jeśli tak koniecznie chce, to niech mu się nawet wykonanie tego ułatwi: jego wola, to niech ją spełni. To oznacza, że:


  1. jeśli ta beznadziejnie chora osoba chce umrzeć, to należy ewentualnie przygotować jej zestaw do śmierci. Ta osoba musi sama jednak wykonać kluczowy ruch niezbędny do uruchomienia mechanizmu pozbawiającego ją życia.
  2. jeśli śmierci tej osoby chce ktokolwiek inny - niech idzie się wypałować
  3. ludzie, którzy utrzymują życie tej chorej osoby mają prawo zaprzestania jego finansowania. Jeśli to oznacza, że w szpitalu mają tą osobę przedstać utrzymywać przy życiu, to tak mają zrobić.


Na pewno rozmijam się tutaj z poglądami tzw. "środowisk chrześcijańskich" (których bezmózgie ideologie są dokładnie tak samo lewicowe, jak ideologie gejów, lesbijek i eutanastów), natomiast trzymam się jednej zasady: w społeczeństwie uważa się, że człowiek jest właścicielem swojego życia, a w społeczeństwie szanującym zasady każdy człowiek ma prawo dysponować jak chce wszystkim, co do niego należy, a także nikomu nie wolno dysponować jego własnością bez jego zgody. Każdy, kto szanuje liberalne zasady wie, że człowiek ma prawo do życia i prawo do śmierci, w tym również prawo do przedłużania sobie życia w nieskończoność (na ile on lub ktoś inny jest w stanie to finansować) i prawo do odebrania sobie życia. I nikomu nie wolno człowiekowi ani tego prawa odbierać, ani mówić mu, z którego z tych praw ma skorzystać.

Tyle wystarczy, żeby utrzymać społeczeństwo w stanie nie pożerającym sie nawzajem. Do niczego ponad to człowiek nie może być zmuszany. Co ponad to powinien był dopełnić, a nie dopełnił, to będzie się już sam osobiście rozliczał przed Bogiem. Niezależnie od tego, czy w niego wierzy, czy nie.