Pokazywanie postów oznaczonych etykietą Teorie. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Teorie. Pokaż wszystkie posty

22.07.2009

Ocena znajomości C++

Mały cytacik z comp.lang.c++.moderated:
On a scale of 1 to 10, how would you rate your C++ skill level?
  • 10 - wrote a C++ compiler fully supporting C++0x last night after dinner (on my iPhone)
  • 9 - wrote a book with leading-edge techniques in it
  • 8 - published a used library with leading-edge techniques (or wrote a generic tutorial with standard techniques in it)
  • 7 - have invented leading-edge techniques & blogged about them
  • 6 - have architected entire successful C++ applications
  • 5 - have unit-tested, maintained, and debugged C++ apps
  • 4 - know how to factually avoid undefined behavior
  • 3 - obey a sane subset so narrow most of my behavior is defined!
  • 2 - know how to debug C++ until it works
  • 1 - am allowed to look at C++ written by other teammates
  • 0 - I post "delete NULL" questions to the newsgroups!
I jedna z odpowiedzi (umieszczona tuż po opisie do punktu 10):
Damn it! "Dinner..." I knew I forgot something...
Anyway, ja się dzielnie wspinam z 5 na 6 jak na razie ;-)

7.05.2008

Specyfikacje throw(...) i bezpieczeństwo wyjątków

Czy pisać specyfikacje throw()? To pytanie zadawało sobie wielu ekspertów. Oprę się na wnioskach Herba Suttera (stąd):
  • Moral #1: Never write an exception specification.
  • Moral #2: Except possibly an empty one, but if I were you I’d avoid even that.
Czyli nie piszemy specyfikacji throw()... No to w takim razie olewać co funkcje rzucają? Lepiej nie. Sensowne wydaje się pisanie tego w komentarzu.
Warto zawrzeć informacje:
  • jeśli to funkcja wirtualna, to warto napisać, jakiej klasy funkcję zastępuje /** @note @e overrides Klasa */
  • jeśli funkcja nie jest wirtualna i przesłania inną, również warto to napisać /** @note @e hide Klasa */
  • co funkcja może rzucać /** @throws co kiedy */
  • jak się zachowa w razie wyjątku, czyli bezpieczeństwo wyjątków /** @note @e safety --- */ (o tych --- za chwilę)
Ponownie powołam się na Herba Suttera, który fajnie opisał tę sprawę.
Opis bezpieczeństwa w razie wyjątku składa się z 3 części:
  • Atomicity - niepodzielność. 3 możliwości: 1) [-] brak, 2) [a] niepodzielność - czyli całość albo wcale, 3) [A] na pewno całość - czyli gwarancja powodzenia operacji.
  • Consistency - spójność. 3 możliwości: 1) [-] brak, 2) [c] w razie niepowodzenia system pozostaje spójny, 3) [C] niezależnie od powodzenia lub nie, system pozostaje spójny. W kontekście programowania, ma sens rozpatrywanie tylko możliwości 3) [C] - każda funkcja musi po sobie pozostawiać program w stanie spójnym, niezależnie od tego czy wystąpił błąd, czy nie.
  • Isolation - brak skutków ubocznych. 3 możliwości: 1) [-] skutki uboczne występują niezależnie od powodzenia operacji, 2) [i] skutki uboczne występują tylko w przypadku powodzenia operacji, 3) [I] całkowity brak skutków ubocznych
Sutter pisze jeszcze o Durability - jak to z modelu baz danych - ale my się tym nie będziemy zajmować. Rzadko w programowaniu będziemy pilnować, czy wynik działania operacji przetrwa w razie jakichś kataklizmów typu upadek systemu...
Oznaczenia: Każdą z wymienionych powyżej 3 części opisu bezpieczeństwa będziemy oznaczać zależnie od poziomu bezpieczeństwa przy pomocy 3 znaków, z których każdy będzie odpowiadał jednej z części.
Przykłady:
  • /** @note @e safety AC- */ oznacza, że operacja zawsze się powiedzie (ekwiwalent throw()); może emitować skutki uboczne.
  • /** @note @e safety -CI */ oznacza, że w razie niepowodzenia, obiekty pozostaną w stanie spójnym[C], ale nie wiadomo jakim; niezależnie od powodzenia, nie wystąpią żadne skutki uboczne.
  • /** @note @e safety aCi */ oznacza silną gwarancję Abrahama, czyli w razie niepowodzenia system będzie w takim stanie, jakby wywołanie funkcji nie nastąpiło; dotyczy to także skutków ubocznych.

6.01.2008

wystawa płaska okiem wystawiającego

Pomijając Winiego, mało kto wystawia Ci piłkę znad siatki. To bardziej powinno wyglądać tak:
Jeśli niebieska płaska linia to zasięg na którym chcesz uderzyć, to chciałbyś dostać zieloną piłkę.
Dostajesz czerwoną jak ktoś puści ją za mocno (jak mi powiesz, że mam ją wyżej i szerzej puścić, to taką pewnie dostaniesz), pomarańczową jak za lekko (taką dostaniesz jak mi powiesz że ma być płaska) a śliwkową jeśli za nisko - taką dostaje Szyba jak chce szybką. Szyba ma wprawdzie niższy zasięg od Czajnika ale nie o tyle...
i tu nie mówimy nic o odległości od siatki
miłej zabawy dla rozgrywających.
[Od redakcji ;-P:Widziałeś kiedyś tak płaską wystawę ściętą przez zawodnika Eteru? Myślę, że mój szkic jest bliżej, przy czym zgadzam się, że źródło wystawy jest zdecydowanie niżej. Cieszy mnie, że pobudziłem wyobraźnię rozgrywającego. ]

Tak płaską to znaczy jak płaską? Jak ta śliwkowa? Cóż Szyba uderza takie i często nawet kończy, po czym zawsze marudzi że za nisko.
nie chodzi mi o to jakie piłki dostajesz zazwyczaj, tylko co nam grozi jak spróbujemy szybkiej. Po prostu jeśli chce się grać szybką to istnieje ryzyko, że dostaniesz wszystkie narysowane piłki oprócz zielonej. I tu jest problem, ze zepsuta normalna wystawa jest trudna, zepsuta szybka wystawa jest beznadziejna. No i szybka łatwiej popsuć.

27.12.2007

Wystawa płaska

  • na czarno: wystawy, które zwykle dostaję: wysoka dobra i płaska do du..
  • na czerwono: zasięg (trochę zaniżony), z którego ścinam
  • na zielono: wymarzona wystawa płaska

30.09.2007

Blef Pro

Blef - zasady gry w jedynej sensownej wersji.

  1. Gramy od 9-tek, czyli 24 kartami.

  2. Rozdaje osoba, która właśnie przegrała rozdanie.

  3. W grze może uczestniczyć od 2 do 4 osób:
    1. 2 graczy: po 5 kart.
    2. 3 graczy: po 4 karty.
    3. 4 graczy: po 3 karty.

  4. Punktacja
    1. Gracz wygrywający (czyli sprawdzający lub sprawdzany) otrzymuje 1 punkt, przegrywający otrzymuje 0 punktów, pozostali po 0,5 punktu.
    2. 1 set grany jesd do czasu aż 1 z graczy uzyska 6 lub więcej punktów. O zwycięstwie w secie decydują kolejno:
      1. Kto ma więcej punktów.
      2. Kto ostatnio był wygrywającym (zdobył cały 1 punkt).
    3. Po każdym secie następuje zmiana miejsc, tak aby w miarę możliwości gracze siedzieli we wszystkich możliwych kombinacjach.

  5. Porządek układów jest pokerowy z rozszerzeniem (relacja < jest przechodnia; układ mniejszy można zawsze zastąpić układem większym o dowolnych - również niższych - wartościach):
    1. para (2) < strit (5 kart) < dwie pary (2,2) < trójka (3) < full (3,2) < dwie trójki (3,3) < kolor (5 kart) < kareta (4) < kareta z trójką (4,3) < poker < dwie karety (4,4)
    2. Porządek układów tego samego typu: jak w pokerze, np. układ 2 K i 2 D można przewyższyć układem 2 A i 2 9, gdyż ważniejsza para (2 K) sostaje przewyższona, więc mniej ważna może zostać obniżona.

26.06.2007

Teorie Pitera o życiu

Żeby nie było, że jedynym posiadającym swoje teorie jest Krzysiek, postanowiłem opublikować tu kilka swoich najciekawszych przemyśleń w podkategoriach:

1. General Purpose
  • Należy być dobrym człowiekiem bo jest to optymalne w sensie Pareto
  • Dobrze mieć kilku dobrych kumpli żeby mieć z kim wyjść na browarek
  • Mów mniej niż chcesz powiedzieć - unikniesz powiedzenia tego czego powiedzieć nie chcesz a jeszcze o tym nie wiesz
  • Uśmiechaj się częściej niż chcesz - może uśmiechniesz się do osoby do której chcesz się uśmiechnąć a jeszcze o tym nie wiesz
2. O siatkówce
  • Siatkówka to fajny sport
  • Zwycięska drużyna wychodzi na boisko zwycięska, pokonana wchodzi na boisko i zastanawia się jak wygrać
  • Nie można wygrać, kiedy ma się dziewczynę w drużynie, ostatecznie jest to bardzo utrudnione (def. dziewczyny patrz "Teorie Czai")
  • Wygrywanie jest przyjemne i nie szkodzi nikomu zatem należy wygrywać
3. O chłopakach
  • Chłopaki dzielą się na 3 kategorie:
    a) chłopaków chłopaków b) chłopako-dziewczyny c) dziewczyno-chłopaków
  • Kolejność jest taka: a>=b>c
  • Chłopak chłopak myśli nad tym co usłyszy zanim się z tym zgodzi, używa głowy częściej niż innych części ciała, robi to co głowa mówi, nie wymięka
  • Chłopako-dziewczyna myśli, w konfrontacji z problemem nie jest pewien czy sobie z nim poradzi
  • Dziewczyno chłopak mówi za dużo, jest twardzielem na pokaz, przedkłada słowa kobiety nad słowa faceta
4. O dziewczynach
  • Bycie dziewczyną nie przeszkadza w byciu facetem
  • Dziewczyny mają przewagę nad facetami z punktu c) i istnieje niezerowe prawdopodobieństwo, że są bardziej do rzeczy niż faceci z punktu b)
  • W większości nie nadają się do grania w siatkę :P (wyjątki są wszystkim czytelnikom znane)
5. O sobie
  • przyporządkowałem się do kategorii b...
to be continued...

24.04.2007

Jakie narty wybrać?

Na początek są 2 możliwości:
  1. Nie znasz mnie
  2. Znasz mnie
W pierwszym przypadku nie masz żadnego stosunku do moich teorii, natomiast w drugim przypadku znów są 2 możliwości:
  1. Podchodzisz z dystansem do moich teorii
  2. Wierzysz w moje teorie
W pierwszym przypadku czytasz to z ciekawości i byle jak. Natomiast prawdopodobnie tylko w drugim (jedynym sensownym i jedynym słusznym) przypadku zdajesz sobie sprawę ile warte jest to co tu poniżej napisałem.
Piszę jakie narty wg mnie być powinny.
zastosowanie / cecha Slalom Slalom Karwingowy Slalom Gigant "akademicki" Slalom Gigant
promień (+- 4%): 12,5 m 15 m 18 m 21 m
szerokość w środku (+-1mm): 70 mm 72 mm 72 mm 72 mm
długość (+- 3%): 160 cm 170 cm 180 cm 185 cm
Powyższe parametry są niezależne od wagi, a mało zależne od wzrostu i umiejętności. I tu kilka opcji:
  • Jesteś nietypowo niska/niski - odejmij od długości nart 5-10 cm
  • Jeśli nie jeździsz dobrze (a ci co mnie znają wiedzą, że jestem wymagający: dobrze znaczy, że czasowo nie gorzej, niż 7% ode mnie), to odejmij sobie ok 7% od promienia. Poza tym szerokość w środku dla ciebie nie będzie tak istotna, może równie dobrze wynosić 68 mm.
  • Do wagi i tylko do wagi należy dobrać sztywność narty.
Trochę o sztywności: tu z miejsca dementuję teorię, że "twarde narty na twarde warunki, miękkie na miękkie..." -- bzdura! Na miękkich warunkach sztywność narty mało się odczuwa, a na twardych warunkach za sztywne narty po prostu nie trzymają. Znacznie lepiej wybrać narty za miękkie niż za sztywne. "Za miękkość" nart objawia się nieznacznym poczuciem niestabilności na większych prędkościach w skręcie.
Tzw. promień skrętu - tak naprawdę promień krzywizny wcięcia narty - dziś firmy podają zazwyczaj poprawnym, ale 2 lata temu jeszcze bywało różnie (wiem, bo sam obliczam ;-). Zbyt mały powoduje niestabilność i "oscylacje" na większych prędkościach w skręcie. (W skrajności nie wiem czy widzieliście w telewizji, jak nieraz zawodnika śmiesznie rzuca i "łapie" raz wewnętrzna, raz zewnętrzna krawędź.) Zbyt duży promień skutkuje tym, że nie jesteśmy w stanie wykonać wystarczająco ciasnego skrętu bez ześlizgu i musimy w związku z tym wprowadzić nieznaczny ześlizg, wytracając prędkość.
Szerokość w środku: jest bardzo istotne, żeby było szeroko (tzn. minimum 71 mm). Powody są dwa. 1) Zapobiega to "odbutowaniu" (podobnie jak wysoka płyta). 2) Powoduje większy moment prostujący, co powoduje, że pochylamy się bardziej, dzięki czemu kąt skrawania krawędziami jest korzystniejszy. Po polsku: narty lepiej trzymają.
Długość: mało rzutuje na cokolwiek. Jedyne, na co zaobserwowałem, to w warunkach kiepskiej widoczności na dłuższych nartach odczuwamy nadchodzące nierówności wcześniej i jesteśmy w stanie zareagować, ale to jest trudno zauważalne.
Pozostałe 2 parametry, tj. szerokość z przodu i z tyłu narty wynikają z szerokości w środku, długości i promienia, a ich stosunek do siebie nie rzutuje na nic. Podobnie na nic nie rzutuje np. kształt piętki narty, a na ten temat też słyszałem teorie ;-)