poniedziałek, 27 września 2010

Pawn co to i po co to?

Ostatnio zostałem zapytany co to pawn i do czego się to to coś wykorzystuje.  Więc już biegnę z wyjaśnieniami pawn to język skryptowy napisany w całości w C. Ja go głównie używam do pisania skryptów do znanej wszystkim gry GTA SA, a raczej do pisania skryptów do modyfikacji tej gry jaką jest tzw. SAMP, czyli San Andreas Multiplayer. Jest to modyfikacja pozwalająca grać w GTA w sieci po prostu. Strona główna gdzie można pobrać modyfikacje znajduje się pod tym adresem: <a href="http://sa-mp.com/">http://sa-mp.com/</a> Właśnie w tej modyfikacji wykorzystuje się tytułowy język pawn. Jest to dość prosty język bardzo podobny do C/C++ można powiedzieć, że kilka elementów jest prawie identycznych jak sam język C np. instrukcje warunkowe i pętle, nie ma za to typów zmiennych jako takich. Polska scena jest dość spora jeśli chodzi o pawn i całego SAMPa. Istnieją co najmniej 2 duże fora poświęcone tematyce pawn i SAMP. Jednym z nich jest: http://pawno.pl/, a drugim http://gtaonline.pl/index.php?redir=1 Pierwsze forum charakteryzuje dość wysoki poziom ogólnej wiedzy nt. pawn, a drugie no cóż tutaj dużo mówić to zbiorowisko dzieciaków, które myśli, że jest fajne, lecz wiadomo są też wyjątki ;) I tutaj i tutaj znajdą się czarne owieczki ;) Poniżej przedstawiam fragment kodu, aby móc zobaczyć jak to wygląda i czy na prawdę jest podobne do C :)
public OnPlayerRequestClass(playerid, classid)
{
 if(IsPlayerNPC(playerid)) return 1;

 if(gPlayerHasCitySelected[playerid]) {
  ClassSel_SetupCharSelection(playerid);
  return 1;
 } else {
  if(GetPlayerState(playerid) != PLAYER_STATE_SPECTATING) {
   TogglePlayerSpectating(playerid,1);
      TextDrawShowForPlayer(playerid, txtClassSelHelper);
      gPlayerCitySelection[playerid] = -1;
  }
   }

 return 0;
}

sobota, 25 września 2010

Qt zabawę czas zacząć!

No tak teraz to dopiero była długa przerwa, aż się źle z tym czuję. Racja nie miałem weny totalnie nie wiedziałem o czym pisać, teraz na szczęście nazbierało się parę tematów, o których chciałbym coś napisać.

Zauważyłem, że coraz więcej osób chciało by się zająć programowaniem okienek wszelkiej maści, ale jako, że mają doczynienia ze mną to wszystko co jest proste i jest do tego całkiem sporo poradników w rodzimym języku, to jest to po prostu dissowane przeze mnie to postanowiłem napisać cosik o Qt. Tak na początek zajmiemy się prosta aplikacją. Nie będzie to nic przełomowego ani w jakiś sposób trudnego do wykonania. Będzie to po prostu okienko z przyciskiem, gdzie po kliknięciu w niego program nam się zamknie. Proste prawda? Okej to czas zająć się za programowanie. Jako, że jestem zwolennikiem nauki programowania prosto z kodu, to też będę starał się podobnie przekazywać wiedzę, czyli najpierw podam cały kod aplikacji, a później go omówię dokładnie. Jeszcze w tym miejscu chciałbym nadmienić, że nie będę się zajmować zagadnieniami czysto z C++, uznaje, że osoby zainteresowane Qt wiedzą co to C++ oraz wiedzą co to klasy, wskaźniki itd. Okej teraz cześć właściwa, czyli kod:

#include <QApplication>
#include <QTextCodec>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    QPushButton *button = new QPushButton("Witaj ?wiecie!");
    QObject::connect(button, SIGNAL(clicked()), qApp, SLOT(quit()));
    button->resize(300, 100);
    button->show();
    return app.exec();
}

Teraz zajmijmy się wyjaśnianiem co znaczą poszczególne linie kodu. Tak, więc 3 pierwsze linie to nic innego jak dodanie odpowiednich objektów i ich metod do programu. Pierwsza QApplication dodaje klasę główną okna, która zajmuje się zarządzaniem całą aplikacją. Nastepna, czyli QPushButton dodaje objekt przycisku do programu, a ostatnia trzecia dodaje po prostu odpowiednie kodowanie. Następna część programu to nic specjalnego to tylko zwykła funkcja main ;) Następna linia kodu dodaje główny obiekt aplikacji, czyli po prostu tworzy wątek odpowiedzialny za działanie aplikacji. Następna część odpowiada za kodowanie znaków w aplikacji. Qt domyślnie nie obsługuje polskich znaków i innych specyficznych znaków dla każdego kraju. U nas nie ma ogonków przy znakach, a u Niemców np. nie ma kropek ;) Kolejna część tworzy objekt typu QPushButton z napisem "Witaj Świecie!". Kolejna linijka jest linijką ciekawą, ponieważ odpowiada ona, można powiedzieć za obsługę zdarzeń w programach Qt. Objekt QObject jest obiektem głównym można powiedzieć, że każdy inny objekt w Qt dziedziczy właśnie po nim, więc jest on objektem nadrzędnym. Metoda connect() przyjmuje 4 argumenty pierwszym z nich jest objekt, który wysyła sygnał, czyli w tym przypadku QPushButton, ściślej mówiąc w naszym przypadku button. Następnie wybieramy jaki sygnał emituje button w naszym przypadku jest to clicked(), czyli po prostu kliknięcie. Trzecim argumentem jest odbiorca sygnału w naszym przypadku qApp, jest to po prostu alias do głównej części porgramu. ostatni argument to slot, czyli funkcję, która ma się uruchomić po kliknięciu w naszym przypadku ma się po prostu zamknąć program. następna linia po prostu ustala wielkość przycisku i zarazem okna w naszym przypadku ;) Później nastepuje wyświetlenie. No i zwrócenie wartości. W C++ wystepuje tutaj przeważnie 0, czyli poprawne wykonanie aplikacji. w Qt zwraca exec(), czyli po prostu uruchamia aplikację ;) Tą linię można zapisać też tak:
app.exec();
return 0;

Działanie tego będzie takie samo jak zapisanie w jednej lini tak jak w kodzie, który podałem na początku ;)

Okej to tyle na tą chwilę na temat Qt, przepraszam za moją niezbyt polską polszczyznę, która władam, ale mam nadzieję, że wszystko jest w miarę jasno opisane.

sobota, 18 września 2010

Brak weny

Witam ponownie po dość długiej przerwie od ostatniego wpisu. No cóż tu dużo powiedzieć niestety coś ostatnimi czasy brakuje mi dość weny, aby coś sensownego na jakiś temat napisać. Także naszła mnie pewna refleksja nt. tego co by osoby czytające od czasu do czasu chciały tutaj zobaczyć. Za bardzo sam nie wiem co teraz ugryźć, czy np. Qt pod linuchem, czy może coś napisać o językach skryptowych, może też czas na zajęcie się assemblerem? Sam nie wiem powiem szczerze mam dość dużo pomysłów ale nie wiem za co się teraz zabrać. Jako, że jestem członkiem społeczności powiedzmy, że SAMPa może osoby z tych stron, by podsunęły jakiś ciekawy pomysł dot. tej modyfikacji. Może coś nt. pluginów w SAMPie? Może coś dot. pawn? Szczerze sam nie wiem. No i jeszcze jedna sprawa. Fajnie by było gdyby się więcej komentarzy pojawiało, więc w tym momencie chciałbym zaprosić do pisania komentarzy w tym wpisie z odpowiedziami na zadawane tutaj pytania i wątpliwości, może jest osoba, która by chciała się czegoś dowiedzieć na jakiś konkretny temat. Jeśli będę mógł i będzie to dla mnie osiągalne to opiszę tą sprawę, aby rozwiać wątpliwości związane z tym konkretnym zagadnieniem. Więc zapraszam do odpowiedzi, czas znaleźć jakąś wenę :)

wtorek, 14 września 2010

Dzień programisty

Dzisiaj z okazji tego, że mamy 256 dzień roku, czyli Dzień Programisty ;) Więc z tej okazji chciałbym życzyć wszystkim programistą tym doświadczonym i tym początkującym, jak również tym którzy dopiero mają zamiar zacząć zabawę z programowanie, wszystkiego najlepszego, mnóstwa aplikacji, które staną się powszechnie znane i używane i przede wszystkim wielu mile spędzonych chwil podczas swoich zabaw z kompilatorami i dziwnościami bibliotek wykorzystywanych przez siebie. Powodzenia wszystkim koderom w poznawaniu nowych języków i bibliotek ;)

sobota, 11 września 2010

Instalacja Qt - Ubuntu

Wcześniej sobie troszkę pomarudziłem na C# i na to, że jest beee... według mnie i wspomniałem tam o bibliotece Qt. Qt to cross platformowa biblioteka służąca do szybkiego pisania oraz projektowania programów okienkowych na 3 najpoularniejsze obecnie systemy operacyjne. Mac, Linux i Windows. Jako, że na Windowsie instalacja SDK jest dziecinnie prosta, to o tyle na Linuxie już prosto nie jest, choć też nie ma jakoś zadziwiająco trudno.

Po pierwsze należy pobrać całą paczkę SDK ze strony producenta. W tym celu udajemy się pod adres: http://qt.nokia.com/downloads gdzie wybieramy wersje LGPL, no chyba, że ktoś woli wersje komercyjną. I następnie wybieramy tam wersję SDK pod swój system, ja akurat wybrałem wersję Liux 32 bit, ponieważ mam właśnie o takiej architekturze system jak można się łatwo domyślić. Po pobraniu należy tak jak podają twórcy nadać odpowiednie prawa dostępu do pliku, czyli:

chmod u+x qt-sdk-linux-x86-opensource-2010.04.bin

Następnie wywołać instalację:

./qt-sdk-linux-x86-opensource-2010.04.bin

Po dokonaniu się instalacji należy jeszcze zainstalować na swoim systemie niezbędne biblioteki. W tym celu instalujemy pakiety:

sudo apt-get install libglib2.0-dev libSM-dev libxrender-dev libfontconfig1-dev libxext-dev

Teraz jeszcze tylko należy zainstalować biblioteki OpenGL na swoim systemie w tym celu instalujemy kolejno:

sudo apt-get install libgl-dev

Jeśli przy instalacji tego pakietu pojawi się coś w rodzaju:
Odczyt informacji o stanie... Gotowe
Pakiet libgl-dev jest pakietem wirtualnym zapewnianym przez:
nvidia-glx-96-dev 96.43.13-0ubuntu6
nvidia-glx-185-dev 185.18.36-0ubuntu9
nvidia-glx-173-dev 173.14.20-0ubuntu5
libgl1-mesa-dev 7.6.0-1ubuntu4
E: Pakiet libgl-dev nie ma kandydata do instalacji

Wybieramy po prostu jeden z wyżej podanych pakietów w moim przypadku jest to:

sudo apt-get install nvidia-glx-96-dev

Numer przy pakiecie odpowiada wersji sterownika, aby uniknąć wszelkich komplikacji z działaniem grafiki w systemie należy wybrać ten sam pakiet co sterownik, aby sprawdzić wersję sterownika udajemy się do System -> Administracja -> Sterowniki, tam powinno być podane z jakiego aktualnie sterownika korzystamy. W tym momencie został nam do zainstalowania jeszcze jeden pakiet czyli:

sudo apt-get install libglu-dev

Po wykonaniu wszystkich powyższych czynności Qt powinno być w pełni gotowe do pracy. Czyli odpalamy nasz edytor i w celach sprawdzenia czy wszystko jest okej kompilujemy poniższy kod:
#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QPushButton hello("Hello world!");
hello.resize(100, 30);

hello.show();
return app.exec();
}

Jeśli w momencie kompilacji pojawił się Error 127, najprawdopodobniej prakuje jeszcze pakietu g++, niezbędnego do programowania w tym celu instalujemy go poleceniem:

sudo apt-get install g++

W tym momencie już nie powinno być żadnych problemów z działaniem Qt i kompilacją wcześniej podanego kodu ;)

Grand Prix - Włoch, Monza (kwalifikacje)

Dawno nic nie pisałem, więc pora coś ciekawego znów napisać po dłuższej przerwie. Jak wiadomo ruszył kolejny weekend z Formułą 1, więc jest świetna okazja, żeby coś popisać. Jednak muszę wszystkich zmartwić, bo tym razem kwalifikacje do jutrzejszego wyścigu nie były tak emocjonujące jak podczas ostatniego Grand Prix. Tym razem można powiedzieć, że na najszybszym torze w całym kalendarzu F1, większych niespodzianek nie było jak się okazuje. Co prawda nie spodziewałem się, że to akurat Ferrari będzie najszybsze na kwalifikacjach, ale można było się tego domyślić, że będzie próbować powalczyć o swoje. No i tak też się stało 1 miejsce w kwalifikacjach należy do Fernando Alonso, a drugie zaś do Buttona. Spodziewałem się po dzisiejszych treningach, że to Hamilton będzie pierwszy, a Button drugi, lecz się troszku pomyliłem, ku mojej radości. Jak widać szykuje się jutro na prawdę szybki wyścig, ponieważ wszyscy są szybcy, co tu dużo mówić cała pierwsza dziesiątka mieściła się praktycznie w 1 sekundzie. Co prawda nasz rodak jakoś nie zabłysnął, bo jest to dopiero 9 czas na kwalifikacjach, ale można się było tego spodziewać, ponieważ na dzisiejszym treningu było podobnie. Jednak zastanawia mnie to czy Kubica jednak nie radzi sobie lepiej na twardej mieszance, bo teoretycznie u wszystkich miękka jest tą szybszą. Ale u Roberta zastanawiam się czy nie jest odwrotnie. No cóż tutaj dużo powiedzieć czekam na jutrzejszy wyścig, pewnie tam Robert się jak zwykle wykaże. Zobaczymy też jak czerwone strzały wystartują, bo startują z samej czołówki jak wyżej wspomniałem. Alonso z pierwszego pola, a Massa z trzeciego. Zobaczymy też jak sobie poradzi zespół Red Bulla, który coś sobie nie radzi we Włoszech. Pożyjemy zobaczymy. Zapraszam na jutrzejszy wyścig o godzinie 14.00 ;)

poniedziałek, 6 września 2010

Brak kluczy publicznych...

Brak kluczy publicznych jest to dość często spotykany błąd występujący przeważnie po aktualizacji systemu lub po dodaniu nowego rezpozytorium w Linuchach. Z tego co udało mi się wyszukać to można ten problem zażegnać na kilka sposobów. Najpopularniejszym z nich jest po prostu ręczna aktualizacja kluczy poprzez wydanie odpowiedniego polecenie w konsolii np.:

gpg --keyserver subkeys.pgp.net --recv-keys ID_KLUCZA

To polecenie po prostu pobiera odpowiedni klucz lub klucze z serwera, a następnie polecenie:

gpg --armor --export ID_KLUCZA | apt-key add -

Aktualizuje listę kluczy w systemie.

Można bardzo łatwo się domyślić, że jak zwykle w moim przypadku najprostrze rozwiązania wcale nie chcą działać i jak zwykle też tym razem tak było ;) Powyższe rozwiązanie działało u mnie na Debianie, ale na Ubuntu już grymasiło cały czas wywalając mi dziwne błędy a to coś tam, a to tamto, no trudno się mówi przywykłem, znalazłem inne rozwiązanie na szczeście moim zdaniem lepsze, ponieważ dodaje klucze nawet z tych repozytoriów, których na razie się nie posiada, ale pewnie się posiądzie co zaoszczedzi kolejnych męk z aktualizacja kluczy. Moje rozwiązanie jest takie, wchodzimy do swojego katalogu usera i usuwamy katalog .gnupg, katalog usera znajduje się w lokalizacji /home. Teraz kolejno wykonujemy następujące polecenie:

  1. wget http://sycu.ovh.org/files/apt-pubkey.sh

  2. chmod +x apt-pubkey.sh

  3. logowanie na roota komenda su

  4. ./apt-pubkey.sh

Teraz powinno już wszystko ładnie działać, a przynajmniej w moim przypadku działa :P

C# nie jest zabawny

Ludzie, którzy mnie choć troszku znają wiedzą, że jest ze mnie dość maruda, szukająca do istniejących rozwiązań alternatyw, które będą lepsze. No i tak też jest w moim przypadku z językiem C# (ten dziwny znaczek powinno się czytać jako "szarp" ;) ). Osoby, które są choć troszku obeznane w tym co to za język i czym się charakteryzuje, wiedzą, że jest on całkiem wygodny. No tak jest on wygodny, ponieważ jeśli weźmie się pod uwagę takie WinAPI, gdzie podobne efekty osiągniemy duża liczbą czasu i kodu, a w C# jest to tak na prawdę parę kliknięć myszką, bez jakiegokolwiek kodzenia. Fajnie prawda? W WinAPI, żeby utworzyć proste okno potrzeba ok. 100 linii kodu, czyli dość dużo pisania, co prawda można się wycfanić i zrobić sobie szablon, ale pomijam tą opcję tutaj :P Powiedzmy, że korzystając z C# zaoszczędzamy dość dużo czasu. No ale okej to jest nowy język tak na prawdę i nie każdemu jest w smak uczyć się czegoś nowego wiedząc, że można zakodzić to samo w C++, a ten język zna się już dość dobrze. W moim przypadku tak właśnie jest nie chce się uczuć C# skoro wiem, że pozwoli mi tylko tak na prawdę zaoszczędzić czas i przy tym jest problem z tym językiem na systemach innych niż Windows, chociaż teraz już istnieje Mono pod Linucha i Maca, więc ten problem został w pewnym stopniu zażegnany, lecz nie zmienia to faktu, że na tych systemach nie ma jako takiego .Net Frameworka potrzebnego do pracy z C#, czyli nie jest on w pełni obsługiwany przez inne systemy niż te z rodziny Windows. Mając na uwadze te czynniki, że C# to inny język, którego mi się nie chce uczyć oraz to, że nie jest on zbyt dobry na systemach innych niż Windows, więc postanowiłem szukać alternatywy, wiedząc także, iż C# jakby nie było ma pewne zalety. Szukając i szukając natrafiłem pewnego dnia na wzmiankę o Qt. Jest to tak naprawdę SDK pod C++. Oferuje ono tyle co ten cały C#, czyli można sobie wyklikać szablon programu, tak jak w C#, a biblioteka za nas wygeneruje kod. Czyli oszczędzamy czas tak jakbyśmy programowali w C#. Drugą zaletą jest bardzo dobra dokumentacja do biblioteki, wiadomo co i jak i z czym się to je.  Czyli mamy tak na prawdę największą zaletę C# w C++, ale najbardziej w tym wszystkim, według mnie, fajne jest to, że ta biblioteka jest w pełni kompatybilna z systemami z rodziny Linux oraz Mac, czyli tak na prawdę mamy C# w C++, a w dodatku działający wszędzie bez problemu. Do tego twórcy ciągle rozwijają swoje SDK udostępniając w nim swoje IDE, dzięki czemu mamy także do dyspozycji IDE do samego C++. Co prawda całe SDK po wypakowaniu i zainstalowaniu waży z 1.5 GB, ale nie uważam to w naszych czasach za zbyt wielką wadę ;) Reasumując to dlaczego nie lubię C#. Nie lubię go za to, że jest nowym językiem, którego nie chce się uczuć, a szkoła tego ode mnie wymaga, znaczy nauczyciel :P. Nie lubię go za to, że nie jest w pełni kompatybilny z Linuchami itd. Oraz nie lubię go za to, że wymaga .Net Frameworka. Trzy razy nie ;) A teraz powiedzcie mi sami po co paprać się w nowy język znając już C++ i mogąc w nim zrobić tyle co w C# i troszku więcej oraz wiedząc to, że zalety C# są także dostępne w C++. No powiedzcie po co mam się w tym całym C# bawić? :P C# nie jest zabawny...

sobota, 4 września 2010

Przeprowadzka

No tak jak można było zauważyć dawno nic nie pojawiło się ciekawego na blogu. Było to związane z przeprowadzką na nowy hosting i na nową domenę jak widać. Podczas przenosin wystąpiły małe problemy z wgraniem WordPressa, ale w końcu się udało. Tak na prawdę nie wiem co było przyczyną tych trudności. Może mój nowy usługodawca wymaga do działania podania opisu bazy danych. Tak na prawdę nie wiem co się działo, że nie można było odpalić strony, ale po dodaniu opisu jest już git ;) Przez najbliższe 2 lata nie będzie już więcej przeprowadzek, bo na taki okres posiadam hosting, a potem się zobaczy :P Hmm.... w tej chwili wszystko chyba działa okej, lecz nie jestem tego do końca pewien w razie jakichkolwiek błędów w działaniu strony proszę o kontakt. Nowy hosting to 1and1.pl jeśli ktoś jest zainteresowanych ich nową bardzo atrakcyjną ofertą to zapraszam do odwiedzania ich strony :P