Pascal

W końcu na studiach zostałem zmuszony do nauczenia się Pascal’a. Nigdy wcześniej nie chciało mi się tego uczyć bo i po co? Na lekcjach informatyki w liceum pisałem wszystko w C i nauczyciel nic do tego nie miał.

Teraz jednak już trzeba się go nauczyć. Jako, że programuję już około 7 lat w C++, myślałem że nauka Pascala będzie mnie męczyć i denerwować. Myliłem się chociaż nie jest to język specjalnie ciekawy ani ładny.

Wg mnie Pascal to zabawka dla dzieci i naukowców, którym nie chce się ( albo nie potrzebują ) uczyć się prawdziwego języka programowania albo chociaż jakiegoś poważniejszego języka skryptowego. Jest to język zawierający masę niepotrzebnych udogodnień, że nie wspomnę już o tym że jest po prostu brzydki.

Chcąc rozwinąć nieco te zarzuty o niepotrzebnych udogodnieniach wymienię chociażby stwór o nazwie SET. Zupełnie nie wiem dlaczego jest to część języka. Równie dobrze można by było to jakoś “okodzić” na tablicach. Dodatkowo zupełnie nie widzę potrzeby stosowania typów okrojonych oraz indeksowania tablic zaczynając od dowolnej liczby.

Jeśli chodzi o estetykę języka - IMHO jest okropny. BEGIN oraz END są różnej długości co daje blokowi instrukcji nieprzyjemny wygląd:

BEGIN
i := 5;
END .

Instrukcja przypisania też mi się nie podoba bo jest niewygodna do pisania ale już tego czepiać się nie będę. Następna rzecz składniowa która mnie denerwuje to blok VAR:

VAR    i, j : integer;
r : real;

Jak by człowiek nie próbował tego zapisywać zawsze wygląda szpetnie. Druga sprawa, że zmienne muszą być zadeklarowane w tym bloku i nie można ich deklarować później w kodzie w żaden sposób. Powoduje to często (przynajmniej u mnie) odrywanie się od kodu tylko po to żeby dodać jedną zmienną i przy okazji się rozproszyć :|

Takie rozwiązanie z blokiem zmiennych jest dobre jeśli się pisze jakiś algorytm na podstawie schematu blokowego. Wskażcie mi programistę, który robi schematy blokowe do programów które pisze… Musi być masochistą albo człowiekiem cierpiącym na nadmiar czasu.

Ja często piszę kod  “na żywca” i nie potrzebuję się dodatkowo rozpraszać dodawaniem zmiennej tam gdzie trzeba bo w międzyczasie mogę stracić wątek i będzie klops.

Nie dziwię się, że `młodzi` programiści mają problem z przestawieniem się na Pascala skoro jest tam tyle udogodnień wbudowanych, że później ciężko się pogodzić z ich utratą. Może dlatego panuje przekonanie, że C++ jest taki strasznie trudny.  Jeśli tak to można pójść dalej w tych rozważaniach i stwierdzić, że nauczyciele robią krzywdę uczniom przekazując im wiedzę dotyczącą Pascala.

Dlatego cieszę się, że sam się pokarałem książką o C++ w młodości i teraz mogę się cieszyć tym, że mogę pobawić się w Pascalu, w którym zdecydowanie łatwiej tworzy się małe programiki.

Wniosek z tego jeden: z programowaniem jest jak z pływaniem w morzu, lepiej rzucić się na głęboką wodę i płynąć w stronę brzegu niż na odwrót ^^

Co się dzieje

Dlaczego nic nie piszę? Odpowiedź jest prosta. Ostatnio nie miałem zbyt wiele czasu ani chęci na to aby cokolwiek programować. Zdaje się, że jest to ten okres listopad-grudzień, w którym nic mi się nie chce. Zresztą mój znajomy dziś stwierdził dokładnie to samo więc nie czuję się z tym jakoś bardzo źle.

Na forum niedawno pojawił się temat: “Co na lepsze kodzenie :>?”, który zawiera “złote” sposoby na poprawienie jakości tworzonego kodu i szybkości jego tworzenia. Dość często pojawiają sie tam porady “nie chce Ci sie - to nie pisz!” i ja właśnie chyba z niej korzystam ^^

AGE: co dalej?

Ostatnio niewiele się zajmowałem AGE ze względu na lekki brak czasu, ale nie przestałem o nim myśleć ;)

W najbliższym czasie czeka na mnie do przemyślenia sposób używania GUI, które napisałem dla AGE. W aktualnym stanie używanie tego jest możliwe, ale stworzenie jakiegoś okienka z większą ilością kontrolek to lekki masochizm. Trzeba wymyślić coś żeby było to trochę łatwiejsze.

Jak na razie przychodzi mi do głowy tylko coś podobnego do mechanizmu eventów wykorzystywanego w Windowsie z procedurą okna. Jak wiadomo - dla dużej ilości kontrolek takie podejście też jest mało przejrzyste, ale zapewniam, że jest to zdecydowanie lepsze niż to co jest obecnie.

W tej chwili mam coś takiego jak to:

if( guiOkButton->clicked() ) { /* costam */ };

Ale tutaj będzie cała masa niepotrzebnych sprawdzeń czy przycisk nie został wciśnięty i tak dla każdego przycisku czy innej kontrolki ( np. guiTrackbar->changed() ), a taka metoda będzie tak samo czytelna jak wspomniane wyżej coś a’la windowsowa procedura okna.Jeszcze trzeba pomyśleć nad tym jak to zorganizować, żeby używanie tego nie było skrajnym masochizmem ^^

Wizualizacja wielu wymiarów

Zastanawiałem się kiedyś nad sposobem na wizualizację przestrzeni o ilości wymiarów większej niż 3. Doszedłem do wniosku, że warto jest na początek przeanalizować jak 2D powstaje z 1D i później jak z 2D powstaje 3D.

Jednak przed rozpoczęciem takich rozmyślań warto zwrócić uwagę na fakt że przestrzeń jednowymiarowa składa się z punktów. Jest to dość kluczowe spostrzeżenie w moim rozumowaniu ;)

No więc jak powstaje 2D z 1D?  Mamy sobie jedną oś i krzyżujemy ją z drugą osią pod kątem prostym. Czyli współrzędnej x, która w jednym wymiarze określała konkretnie punkt, teraz odpowiada nieskończenie wiele punktów. Z tego też powodu dodaje się drugą współrzędną określającą “głębokość”.

Teraz 2D -> 3D. Dodajemy Jeszcze jedną oś pod kątem prostym i otrzymujemy znów mamy problem ponieważ współrzędnym x, y znów odpowiada nieskończenie wiele punktów. Mamy więc już 3 współrzędne: x, y, z

Ok, i co teraz? Przestrzeń 3D to max jaki potrafimy sobie wyobrazić (tak samo jak punkt na prostej nie potrafi sobie wyobrazić 2D, a dla punktu na płaszczyźnie niepojęta jest przestrzeń 3D). Doszliśmy więc do punktu krytycznego ponieważ nie możemy już dołożyć sobie żadnej osi prostopadłej.

Ale mówiłem wcześniej coś o tym, że współrzędnym z przestrzeni o 1 wymiar mniejszej odpowiada nieskończona ilość punktów. Trzeba więc iść tym tropem. A gdyby tak przyjąć, że przestrzeń jest punktem?

Z punktów najłatwiej zbudować prostą, ale jeśli punktem jest przestrzeń to można powiedzieć, że mamy prostą przestrzeni ^^. Po dołożeniu jeszcze jednej zmiennej - określającej położenie danego punktu (przestrzeni) na tej prostej można sobie. Dodawanie jej na końcu byłoby dość nieintuicyjne. Nazwijmy ją w. Mamy więc już 4 współrzędne: w, x, y, z. Współrzędna w określa połozenie przestrzeni na prostej (wtf?! :P), a pozostałe współrzędne określają w znany już sposób położenie punktu w przestrzeni 3D.

Najtrudniejsze już właściwie za nami. Jest jakiś sposób. Jak dodamy jeszcze jeden wymiar to będziemy mieli do czynienia z płaszczyzną punktów, z których każdy jest jakąś przestrzenią. Po jeszcze jednym wymiarze mamy przestrzeń nieskończonej ilości przestrzeni.

Później można postąpić analogicznie jak poprzednio - przyjąć że przestrzeń 6 wymiarowa jest punktem i stworzyć z nich prostą i mamy już 7 wymiarów.

Czyli dla n wymiarów (przy założeniu że n>3) będziemy początkowo musieli pokazać

  • prostą przestrzeni, jeżeli n mod 3 = 1
  • płaszczyznę przestrzeni, jeżeli n mod 3 = 2
  • przestrzeń przestrzeni, jeżeli n mod 3 = 0

Oczywiście, nic nie stoi na przeszkodzie aby już płaszczyznę uznać za punkt i stworzyć prostą z punktów będących płaszczyznami, a później płaszczyznę z płaszczyzn.  Takie podejście jest bardziej “życiowe” dla użytkowników oprogramowania ponieważ dość łatwo jest wybrać myszką konkretny punkt na ekranie.

Czyli zakładając że użytkownik ma podać współrzędne punktu w 5 wymiarach, na początku wyświetlimy mu prostą. Po tym jak sobie kliknie współrzędną x1 należy mu wyświetlić płaszczyznę odpowiadającą współrzędnej x1 na prostej. Kiedy użytkownik znów wybierze sobie punkt (tym razem już na płaszczyźnie) mamy mamy współrzędne x1, x2, x3 tak więc znów trzeba wyświetlić jakąś płaszczyznę z której użytkownik wybiera sobie 2 współrzędne i tym oto sposobem mamy już 5 zmiennych oddających położenie w przestrzeni 5 wymiarowej.

Oczywiście zdaję sobie sprawę, że to i tak się nikomu do niczego nie przyda ( bo niby dlaczego ktoś miałby wybierać współrzędne punktu z 5 wymiarów!?! ) ale jest to jakiś sposób lepszy lub gorszy na przedstawienie wielu wymiarów w sposób dość przyjazny dla człowieka :)

Test AGE

Dla wytestowania AGE napisałem sobie prostego małego Ponga, którego można sobie ściągnąć:

Gra: http://www.mediafire.com/?dycdwwyidzt
Kod Źródłowy: http://www.mediafire.com/?ags92z65znz

Miałem pewne problemy z wyświetlaniem na innych komputerach więc trzeba liczyć się z tym, że może być coś nie tak ;)

Więcej o projekcie (choć niewiele więcej) napisałem na forum: http://forum.gamedev.pl/index.php/topic,4975.0.html

 

Napisane w Gry, Programowanie. Tagi: , , . Bez komentarzy

Forum

Dzisiaj na forum rozegrał się dramat w trzech aktach. Sarge84 postanowił zadać teoretycznie niewinne pytanko, na które przed nadejściem Złośliwca udało się odpowiedzieć tylko mnie ;) Pytanie dotyczyło… a zresztą co tam będę pisał. Dam linki do każdego z trzech aktów dramatu i potem skomentuję :P

  1. http://forum.gamedev.pl/index.php/topic,4958.0.html
  2. http://forum.gamedev.pl/index.php/topic,4959.0.html
  3. http://forum.gamedev.pl/index.php/topic,4960.0.html

W całej sztuce chodzi o to, że Sarge84 chce dostać odpowiedź na dręczące go pytanie, które wg. mnie było trochę dziwne co też wyraziłem odpowiadając na pytanie w temacie nr 1.

Drugą część dramatu można w pewnym sensie uznać za próbę wzniecenia buntu przez co Sarge84 naraził się trochę `lokalnej` społeczności.

Ostatnia część to - jak przystało na dobry dramat - rozwiązanie akcji. Sege84 stwierdza, że nie będzie już korzystał z forum, a wszyscy szczęśliwie przyklaskując jego decyzji przytupują w rytm muzyki.

Czytając to powstało we mnie tylko jedno pytanie: Czy to dobrze, że tak jest? Moderatorzy codziennie zmagają się z hordami troli, dla których jedynym egzorcyzmem jest legendarne “RTFM”. To oczywiste, że powinni mieć tabliczkę “Nie drażnij Mod-a!”. Mogą mieć trochę zszarpane nerwy po tych wszystkich bojach.

Z drugiej strony. Przychodzi sobie niczego nie świadomy User. User ma problem i chce skonsultować go z `profesjonalistami` czy raczej po prostu zapytać tam gdzie może uzyskać kompetentną odpowiedź. Problem leży w tym, że to co dla społeczności na forum może być oczywistością - dla Usera może być nie do końca zrozumiałe.

W przypadku opisywanym powyżej było troszkę podobnie. Sarge84 zdecydował się na korzystanie z Irrlicht’a oraz DirectX’. To trochę jak używanie zbioru liczb rzeczywistych i zbioru liczb naturalnych naraz. Nie lepiej używać po prostu rzeczywistych?

Na czym więc polegał problem Sarge84?

IMHO cała ta sytuacja została spowodowana nieumiejętnością przekazania swoich myśli za pomocą tekstu lub po prostu nie przemyśleniem treści przed napisaniem jej. Sarge84 nie przedstawił swojej sytuacji klarownie. Ciężko też wywnioskować, że Sarge84 wiedział o czym pisze ponieważ pewne rzeczy dawały do zrozumienia, że jednak niespecjalnie.

Na upartego przecież Irrlicht’a można zmusić do korzystania z DX’a bez dotykania kodu DX’a! To przecież nie jest problem. Dodatkowo - skoro są odpowiednie biblioteki do dźwięku to po co używać DX’a do dźwieku?!
Czytającemu nie trzyma się to, za przeproszeniem, kupy więc tym bardziej moderatorowi który - biedny - musi całe dnie siekać trole mieczem na prawo i lewo.

Małe nieporozumienie może doprowadzać do takich właśnie nieprzyjemnych sytuacji.

Wniosek: Przed napisaniem posta z pytaniem User musi się zastanowić nad jego treścią tak, aby czytający ( który nie ma przecież zielonego pojęcia o życiu i umiejętnościach Usera ) zrozumiał o co mu chodzi i był w stanie udzielić odpowiedzi takiej na jaką liczył zadający pytanie.

_______

PS: Spodobało mi się porównanie stworzone przez k_b:

“Skoro jesteś nowy to się nie wychylaj i tyle Wink. Gdy przechodzisz do nowej szkoły to też się obrażasz, gdy zachowujesz się niestosownie do zasad danej grupy? Tak jak w szkole - pokaż że coś umiesz to będziemy cię normalnie traktować. A nawet tutaj jest jeszcze łagodniej - tutaj raczej pokaż że nie lamisz to będziemy cię normalnie traktować Smiley.”

Jest to dość dobre porównanie, które streszczając i uogólniając brzmiałoby: “Szacunek buduje się od podstaw”.

COMPO

Tak się zastanawiam czy nie wziąć udziału w tygodniowym COMPO o wdzięcznym temacie Apokalipsa. Prawdę mówiąc to jeśli wziąłbym w nim udział to na pewno nie miałbym tygodnia. Zacząć mogę dopiero od czwartku, a konkurs trwa do niedzieli więc miałbym niecałe 4 dni na napisanie jakiejś prostej gierki.

Chciałbym wziąć udział w tym konkursie z 3 powodów:

  1. Jest wyznaczony termin więc można się sprawdzić ^^
  2. Jeśli skończę to będę miał ++skończonych gier na koncie :)
  3. Byłaby to szansa na przetestowanie AGE

Poza tym - byłby to pierwszy mój udział w tym konkursie, chociaż wiele było już przeze mnie zapowiadanych ;)

Pozostaje jeszcze kwestia pomysłu na grę. W tej chwili mam jeden, ale nie jest to nic szczególnie błyskotliwego więc pomyślę jeszcze trochę. W końcu do czwartku mam czas :P

Medieval 2: Total War

Ostatnio znów dobrałem się do tej gierki. Poprzednio dałem za wygraną ze względu na brak odpowiedniego komputera. Teraz wreszcie mogę sobie spokojnie pograć i pocieszyć się masami zabijających się mesh’y oteksturowanych na styl średniowiecznych żołnierzy.

Polecam wszystkim ludziom, którzy lubią grę w której trzeba nieco pomyśleć. Bardzo rozwinięto tutaj dyplomację i stosunki pomiędzy krajami co w efekcie sprawia często, że jestem ekskomunikowany i wszyscy mnie atakują - czy raczej ja wszystkich. Za największe osiągnięcie mogę uznać ogłoszenie przez papieża krucjaty na moje miasto :P

Dam jeszcze na końcu screenshoty z walk bo może ktoś jeszcze tego nie widział - ale w to wątpię ;)

http://i11.photobucket.com/albums/a192/doszes/medieval.png
http://i11.photobucket.com/albums/a192/doszes/medieval2.png

Solved!

Poradziłem sobie inaczej. Jako, że nie mogłem uruchomić na Cygwinie ładnych okienek postanowiłem w ogóle z tego zrezygnować i zainstalować XMing’a ( http://sourceforge.net/projects/xming/ ). W ten sposób pozbyłem się tego brzydkiego managera okien xdm’a albo twm’a. Wszystko przesyłane jest na okienka windowsowe:

Napisane w Bzdury. Tagi: . Komentarzy: 2 »

Virtual PC 2007

Postanowiłem porzucić kombinowanie i zrobić to prosto łatwo i przyjemnie. No może nie prosto i łatwo…przyjemnie w sumie też nie.  Właściwie to to będzie wręcz długie i nieprzyjemne, ale przynajmniej jest jakiś pomysł :)

Jako że jestem partycypantem programu MSDNAA mogłem sobie pograć MS VPC 2004 za darmo. Ucieszyłem się, ale po pobraniu tego przeczytałem w internecie żeVPC2k4 jest darmowe już od ponad roku a teraz już wyszedł VPC2k7 i również jest darmowy!

Też mi łacha że mogę to pobrać z MSDN AA ;)