Bartosz Lenar Homepage/Blog


pLIFE engine v0.1 + demo

Opublikowane w kategorii pLIFE w dniu 2 marzec, 2008

Miło mi zaprezentować już drugi silnik arytmetyczny mojego autorstwa. Tym razem jest to popularna wśród matematyków Gra w życie.Ciekawą właściwością, z pewnością będącą jakąś podstawą nawet do bardziej profesjonalnych zastosowań silnika jest całkowite wyeliminowanie dwuwymiarowej tablicy jako reprezentacji mapy komórek. Obojętnie czy plansza będzie rozmiarów 10×10 czy 10mlnx10mln- na szybkość działania silnika wpływa tylko i wyłącznie liczba aktualnie żywych komórek.

Natomiast do przechowywania ich parametrów użyłem również napisanego przez siebie pojemnika, który przetrzymuje obiekty zawsze w porządku rosnącym. Dzięki temu wyszukanie jakiegokolwiek obiektu to czas lgn.

Co jest do poprawy i co z pewnością będę starał się zrealizować
- jakaś cywilizowana obsługa błędów
- wprowadzenie obliczania kolorów żywych komórek w systemach Immigration oraz Quadlife
- daleko idąca optymalizacja kodu pod kątem wykorzystania pLIFE w bardziej naukowych celach

Jednocześnie chciałbym ogłosić, iż jest to mój ostatni projekt przed maturą. Być może na przestrzeni tych dwóch miesięcy wykonam cokolwiek z listy życzeń przedstawionej poniżej, ale na pewno nie będę brał zleceń na przeróbki i dostosowanie silnika do specyficznych wymagań.

Dodam, iż silnik jest dostępny na licencji LGPLv3.

Źródło: pLIFEv01.tar.gz
Demo w wersji na Windows: pLIFEdemo.rar
Readme: README.txt

Problem z napisami w Kaffeine

Opublikowane w kategorii How-to w dniu 23 luty, 2008

Po aktualizacji bibliotek silnika xine pojawił się problem z odtworzeniem filmu wraz z napisami dołączonymi do pliku tekstowego. Przy próbie załadowania napisów pojawiał się błąd, iż plik .txt je zawierający nie istnieje.

Problem rozwiązuje użycie innego silnika, np. GStreamer. Instalujemy go poleceniem

sudo aptitude install kaffeine-gstreamer

, a następnie uaktywniamy go wybierając Settings->Player engine->Kaffeine-GStreamer.

Lepszym rozwiązaniem jest jednak aktualizacja Kaffeine do wersji 0.8.6, w której błąd ten nie występuje. W oficjalnych repozytoriach firmy Canonical jak na tę chwilę nowa wersja jeszcze nie jest dostępna, możemy zatem użyć innego repozytorium.

Do pliku /etc/apt/sources.list dopisujemy

deb http://kaffeine.homelinux.com gutsy-mtron extras backports
deb-src http://kaffeine.homelinux.com gutsy-mtron extras backports

Jeśli zamierzamy pozostawić ten wpis w swoim sources.list, warto ściągnąć klucz GPG:

wget http://kaffeine.homelinux.com/mtron.gpg -O - | sudo apt-key add -

Po wydaniu komendy sudo aptitude update, Adept Updater powinien pojawić sie w tray’u i zasygnalizować, iż poprawki są dostępne. Jeśli tego nie uczyni, wystarczy wpisać sudo aptitude upgrade.


Jak zainstalować bibliotekę QT4 w Linuksie

Opublikowane w kategorii How-to w dniu 17 luty, 2008

Aby móc na Linuksie programować w C++ przy użyciu biblioteki QT4, nie trzeba wiele kombinować. Jeśli mamy odpowiednie repozytoria w pliku sources.list, całość sprowadza się do wydania jednej komendy w konsoli:

sudo aptitude install qt4-designer qt4-dev-tools qt4-doc qt4-qtconfig libqt4-core libqt4-debug libqt4-designer libqt4-dev libqt4-gui libqt4-qt3support libqt4-sql

Po zakończeniu procederu pobierania i aplikowania paczek, powinniśmy mieć już program qmake-qt4, którego używamy do kompilacji kodu używającego QT4. Oprócz tego, w KMenu->Development pojawią się QT4 Assistant, QT4 Designer, oraz QT4 Linguist. Odpowiednio są to narzędzia służące do przeglądania dokumentacji technicznej QT4, przygotowywania graficznego interfejsu użytkownika, oraz wspomagacz tłumaczeń programu na różne języki.

Instalacja sterowników karty graficznej

Opublikowane w kategorii How-to w dniu 17 luty, 2008

Instalacja sterowników do kart graficznych jest tematem-rzeką. Istnieje wiele sposobów, ja preferuję instalację bezpośrednio ze źródeł dostępnych na stronie www.nvidia.com.
Jednak mogą wystąpić problemy, których rozwiązanie zależy od rodzaju karty graficznej, kernela, zainstalowanych paczek… Opisywanie tego wszystkiego mijałoby się z celem- w Internecie jest mnóstwo tego typu rad.

Zainteresujmy się więc skryptem envy.

Wchodzimy na http://albertomilone.com/nvidia_scripts1.html a następnie ściągamy najnowszą wersję (odnośnikiem jest przycisk Get Envy New). Po ściągnięciu otwieramy konsolę w miejscu, gdzie paczka DEB z envy się znajduje. Wydajemy polecenie

sudo dpkg -i envy_0.9.10-0ubuntu2_all.deb

Na świeżym systemie mogą wystąpić problemy z zależnościami (nie ma jakiejś paczki, wymaganej przez envy). Program dpkg wypisze wszystkie brakujące części, wystarczy je tylko zainstalować. W moim przypadku wystarczyła komenda

sudo aptitude install build-essential python-vte xserver-xorg-dev pkg-config module-assistant fakeroot dh-make debhelper libstdc++5 dpatch python-gtk python-glade gksu python-glade2 gawk dkms

Po wpisaniu tej komendy, apt zauważy, że teraz wszystkie zależności są już spełnione i samodzielnie zainstaluje paczkę envy.

Teraz envy dostępny jest już KMenu->System->Envy. UWAGA! Jeśli przy uruchamianiu wyskoczy błąd informujący, iż brakuje jakiś elementów, należy wejść do konsoli, a następnie wpisać

sudo envy -t

otworzy to tryb tekstowy envy, który- jeszcze przed uruchomieniem właściwej aplikacji- pobierze wszelkie brakujące części.

Interfejs envy jest bardzo przejrzysty, w moim przypadku wystarczyło kliknąć “Install the NVIDIA driver” i trochę poczekać. Na końcu otrzymamy zapytanie, czy pozwolić programowi na samodzielną konfigurację xorg.conf. Zgadzamy się. Następny monit dotyczy restartu komputera- nie jest to niezbędne, ale zalecane.

Po restarcie systemu (bądź też samych Xów), sterownik powinien być zainstalowany, oraz działać prawidłowo.

KROK 2: Repozytoria, czyli system zawsze aktualny

Opublikowane w kategorii How-to w dniu 29 styczeń, 2008

Repozytoria. Są to serwery, które przechowują paczki .deb. Paczki te można zaś porównać z plikami instalacyjnymi .exe w systemie Windows. Przechowują dane, które bez kompilacji z kodu źródłowego możemy używać pod Linuksem. Danymi tymi mogą być aplikacje, gry, ale również biblioteki programistyczne czy pomocne skrypty. Najczęśniej jednak instalować będziemy oprogramowanie.

Z kilku powodów ważne jest, aby posiadać listę dobrych serwerów z repozytoriami. Pierwszym z nich jest fakt, iż pomiędzy paczkami występują tzw. zależności. Jeśli chcemy zainstalować paczkę A, dowiadujemy się, iż wymaga ona paczki B. Natomiast paczka B, paczki C. Dużo dobrych serwerów to pewność, iż zależności zostaną spełnione, tj. wszystkie potrzebne rzeczy znajdują się na ich pokładzie. Drugi powód to aktualizacje; na dobrym serwerze zawsze znajdziemy najnowszą stabilną wersję posiadanego oprogramowania. System zajmujący się aktualizacją pobierze paczkę .deb z nowym wydaniem i bezboleśnie zaaplikuje update. Nie muszę dodawać, jak istotna jest to kwestia ze względów bezpieczeństwa, ale i również wygody użytkowania.

Listę repozytoriów system przechowuje w pliku /etc/apt/sources.list. Dlatego pierwsze co powinniśmy uczynić po uruchomieniu nowego systemu, to uruchomienie Konsoli ( KMenu -> System -> Konsole ) i wpisanie

kdesu kate /etc/apt/sources.list

Po chwili zostaniemy zapytani o hasło, a po po podaniu ujrzymy plik tekstowy. Poniżej zamieszczam zawartość mojego pliku sources.list. Całość określam jako bardzo stabilną, nigdy nie miałem najmniejszego problemu związanego z wadliwym repozytorium, bądź niespełnioną zależnością. Zaznaczamy wszystko (CTRL+A), a następnie usuwamy. Plik musi być pusty. Następnie wklejamy poniższą zawartość:


# OFFICIAL
deb http://pl.archive.ubuntu.com/ubuntu gutsy main restricted universe multiverse
deb-src http://pl.archive.ubuntu.com/ubuntu gutsy main restricted universe multiverse
deb http://pl.archive.ubuntu.com/ubuntu gutsy-updates main restricted universe multiverse
deb-src http://pl.archive.ubuntu.com/ubuntu gutsy-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu gutsy-security main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu gutsy-security main restricted universe multiverse

# USEFUL
deb http://archive.ubuntu.com/ubuntu gutsy-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu gutsy-backports main restricted universe multiverse
deb http://archive.canonical.com/ubuntu gutsy partner
deb http://wine.budgetdedicated.com/apt gutsy main
deb http://download.skype.com/linux/repos/debian/ stable non-free
deb http://packages.medibuntu.org/ gutsy free non-free

# ADDITIONAL
deb http://mirror3.ubuntulinux.nl/ gutsy-seveas all
deb http://morgoth.free.fr/ubuntu gutsy-backports main
deb-src http://morgoth.free.fr/ubuntu gutsy-backports main
deb http://archive.czessi.net/ubuntu gutsy restricted universe multiverse preview
deb http://repository.debuntu.org/ gutsy multiverse
deb http://ubuntu.cafuego.net/ gutsy-cafuego all

Zapisujemy plik sources.list.

Oczywiście możemy dodać też własne repozytoria, nic nie stoi na przeszkodzie. Powyższe zawierają oficjalne repozytoria firmy Canonical- wydawcy Ubuntu- a także serwery programów Wine (emulator Windows), Skype, oraz parę prywatnych, cieszących się renomą repozytoriów.

Nieoficjalne repozytoria są przez system klasyfikowane automatycznie jako niegodne zaufania. I tak na przykład przy próbie instalacji Wine- zostaniemy ostrzeżeni przed niebezpieczeństwami związanymi z pobieraniem paczek z niewiarygodnego źródła. Aby ustrzec się od takich monitów, wydajemy komendy (każda komenda zaczyna się od frazy “wget” i należy ją wpisywać osobno!).

wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -
wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add -
wget -q http://archive.czessi.net/ubuntu/kczessi.gpg -O- | sudo apt-key add -
wget -q http://repository.debuntu.org/GPG-Key-chantra.txt -O- | sudo apt-key add -
wget -q http://morgoth.free.fr/files/morgoth-signkey.gpg.asc -O - | sudo apt-key add -
wget -q http://mirror3.ubuntulinux.nl/seveas.gpg -O- | sudo apt-key add -
wget -q http://us.ubuntu.cafuego.net/AF425CB5.gpg -O- | sudo apt-key add -

Każde repozytorium posiada swój własny klucz GPG, który jest wykorzystywany do autoryzacji serwera przez nasz system. Po dostarczeniu tych kluczy, apt nie będzie ostrzegał nas przed pobraniem paczek z tych serwerów.

Aby zapoznać system z naszą nową listą repozytoriów, wydajemy komendę

sudo aptitude update

bądź, jeśli chcemy aktualizować system w graficznym trybie:

sudo adept_updater

pSHIPS engine v.0.1 + demo

Opublikowane w kategorii pSHIPS w dniu 31 grudzień, 2007

Po świątecznych dniach przerwy jest mi miło zaprezentować silnik arytmetyczny, którego zadaniem jest gra… w okręty. Takie papierowe, szkolne okręty.

pSHIPS engine- bo taka jego nazwa- wylicza w które pole strzelić, aby wyeliminować jak najwięcej możliwości ułożenia aktualnie największego niezatopionego statku. Dzięki takiemu podejściu mogę śmiało powiedzieć, że pod względem matematycznym bot posługujący się tą metodą jest najlepszym- z matematycznego punktu widzenia- graczem w okręty na świecie. Oczywiście matematyka bywa przewidywalna i kiedy umieścimy wszystkie statki na obrzeżach planszy; zanim zostaną zestrzelone padnie ładnych kilka “pudeł”… ale nazwijmy to skrajnym przypadkiem.

Sam silnik jest jak na wersję 0.1 dosyć elastyczny. Możemy sami zdefiniować rozmiar planszy (na razie niestety definicja ta będzie dotyczyć wszystkich obiektów silnika), rozmiary i ilość statków. Słowem- jeżeli nagle zechcemy zagrać na planszy 20×20 ze statkami rzędu 16 pól- pSHIPS zgrabnie sobie z tym poradzi.

Jednakże wersja 0.1 to również nieco błędów. Przede wszystkim wspomniany już brak możliwości edycji rozmiarów pojedynczych obiektów silnika. Poza tym brak jest jakiegokolwiek systemu błędów, oraz analizy poprawności. Oznacza to ni mniej ni więcej, aniżeli to, iż pSHIPS nie weryfikuje nadesłanych mu danych i w razie jakiejkolwiek sprzeczności może zachowywać się wysoce niestabilnie. Jednakże kiedy dane te są w porządku; silnik powinien zająć się liczeniem a nie “krzaczeniem”.

Całość zdecydowałem się opublikować na licencji LGPLv3, tak więc czujta się wolnym pod względem modyfikacji, nanoszenia poprawek, dalszej publikacji i dystrybucji. Nie ma też większego problemu z użyciem tego kodu w zamkniętych projektach. W razie jakiegokolwiek zainteresowanie proszę tylko o kontakt- po prostu chciałbym wiedzieć. :)

Jakie plany z tym związałem? Myślę nad dołączeniem pSHIPS do KBattleships. Oraz do paru innych gier podobnego typu. Ale to już w razie nadmiaru czasu… a więc może na ferie zimowe.

Tymczasem zapraszam do pobierania:

Aha- no i szczęśliwego 2008!

Jak korzystać z QT4 w środowisku DevC++

Opublikowane w kategorii How-to w dniu 29 grudzień, 2007

Tym razem trochę nietypowo, bo zajmę się środowiskiem Microsoft Windows. Nie mniej jednak nie ma tutaj całkowicie braku łączności z Linuksem. QT4 to multiplatformowa biblioteka i wielu programistów na co dzień pracujących pod Linuksem z pewnością chciałoby zobaczyć efekt swojej pracy również w bardziej popularnym systemie operacyjnym. A w razie gdyby zaszła konieczność modyfikacji pewnych elementów- również i w tym środowisku potrzebne jest jakieś dobre IDE.
Według mnie wszelke wymagania spełnia DevC++ 4.9.9.2, mimo iż jest to beta, to bardzo wygodnie mi się na niej pracuje. Miałem jednak problemy z linkowaniem bibliotek Qt4, z tego co wiem wielu programistów rozpoczynających dopiero swój kontakt z DevC++ również gubi się w tym temacie.

Oto więc jak poradziłem sobie ja (mini-howto od początku):

Ściągamy QT4 dla windows:
http://trolltech.com/developer/downloads/qt/windows

Ściągamy DevC++ 4.9.9.2 (beta 9 wersji 5.0)
http://www.bloodshed.net/dev/devcpp.html

( wersja polska, na której opieram poniższy opis; LINK  )

Obydwa programy instalujemy.

Aby móc korzystać z Qt4 w DevC++ postępujemy według kroków:

  1. Otwieramy DevC++, wchodzimy w Narzędzia -> Opcje kompilatora -> Katalogi
  2. W zakładce Binaria dodajemy ścieżkę do katalogu bin biblioteki QT4, dla domyślnej instalacji:
    c:\QT\4.3.3\bin
  3. W zakładce Biblioteki dodajemy scieżkę do katalogu lib, domyślnie
    c:\QT\4.3.3\lib
  4. W zakładce Pliki nagłówkowe C++ czeka nas najwięcej pracy. Otóż musi dodać katalog include
    ( domyślnie c:\QT\4.3.3\include ), oraz WSZYSTKIE jego podkatalogi. Zatem Qt, Qt3Support, Qt3Assistant, QtCore… aż do QtXml.
    Większość z nich ma jeszcze podkatalog o nazwie private. Jego również należy osobno dodać.
  5. Po utworzeniu nowego projektu wchodzimy w Projekt -> Opcje projektu -> Parametry. W polu Konsolidator klikamy przycisk Dodaj plik, a następnie zaznaczamy wszystkie pliki z rozszerzeniem .a, jakie znajdziemy w katalogu lib.
    Będą to pozycje takie jak libQtCore4.a, libQtDesigner4.a, libQtXml4.a, itd.

Teraz wszystko powinno już działać. Możemy sprawdzić to kompilując następujący 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();
 }

… bądź też dowolny inny ze strony http://doc.trolltech.com/4.3/tutorial.html


	

Linux w systemach wbudowanych

Opublikowane w kategorii Literatura w dniu 16 grudzień, 2007

Zapraszam do przeczytania bardzo ciekawego artykułu autorstwa Charlesa J. Murray’a traktujący o Linuksie jako systemie dla urządzeń wbudowanych. Tekst dostępny pod następującym adresem:  http://www.designnews.pl/linux1005.php4?num=253

Problem z MP3 w K3B

Opublikowane w kategorii How-to w dniu 15 grudzień, 2007

Podczas próby utworzenia płyty audio w programie do nagrywania płyt K3B możemy natknąć się na błąd spowodowany brakiem odpowiedniego kodeka. Zresztą- nie dotyczy to tylko tej czynności; wszelkie operacje związane z MP3 będą poprzedzane monitem o niemożliwości wykonania zadania. Problem rozwiązuje dociągnięcie dwóch paczek: libk3b2-mp3 oraz libmad0. Wydajemy komendy

sudo aptitude install libk3b2-mp3 libmad0

a następnie uruchamiamy ponownie K3B.

Środkowy przycisk myszy w Mozilla Firefox

Opublikowane w kategorii How-to w dniu 1 listopad, 2007

Standardowo w Kubuntu środkowy przycisk myszy odpowiada za operacje kopiuj-wklej. I bardzo dobrze, bo kiedy się do takiego stanu rzeczy człowiek przyzwyczai, okazuje się nagle iż jest to szalenie użyteczne i służące szybkości pracy.
Nie mniej jednak wcale nie mało osób chce pozostać przy modelu znanym z systemów Microsoft; środkowy przycisk = przewijanie strony. Jak to wykonać?

  1. Otwieramy nową zakładkę w Firefoksie (np. skrótem CTRL+T)
  2. W polu adresu wpisujemy about:config
  3. Szukamy pola middlemouse.contentLoadURL i zmieniamy jego wartość na false.
  4. Szukamy pola general.autoScroll i zmieniamy jego wartość na true.
  5. Szukamy pola general.smoothScroll i również zmieniamy jego wartość na true.

Po tej operacji po naciśnięciu środkowego klawisza myszy powinniśmy ujrzeć znajome z Windowsa kółeczko:

Następne »