Software.Developers.Journal.2011.04.PL.pdf
(
12664 KB
)
Pobierz
451415575 UNPDF
4/2011 (196)
SPIS TREŚCI
ewolucyjnych, sieci neuronowych, sztucznego życia i ro-
botyki jest działem informatyki badającym reguły rządzą-
ce inteligentnymi zachowaniami człowieka, tworzącym
modele formalne tych zachowań i - w rezultacie – progra-
mów komputerowych symulujących te zachowania.
BIBLIOTEKA MIESIĄCA
4 Biblioteka boost::python. Łączenie C++
i Pythona.
Robert Nowak
Wykorzystywanie różnych języków programowania po-
zwala dobierać właściwe narzędzie do danego problemu.
W artykule omówiono potrzebę stosowania tego typu roz-
wiązań oraz pokazano przykłady łączenia C++ i Pythona
przy pomocy biblioteki boost::python.
28 Analiza możliwości wykorzystania
sztucznych sieci neuronowych w psychologii.
Wprowadzenie do sieci neuronowych,
rozpoznawanie płci w środowisku pakietu
sztucznej inteligencji Sphinx.
Dr Inż. Paweł Piotrowski
Sztuczne sieci neuronowe jako jedna z kilku technik za-
liczanych do kategorii „sztuczna inteligencja” mogą być
z dużym powodzeniem wykorzystywane również w takich
obszarach nauki jak psychologia. Sposób działania (ucze-
nie się) sztucznych sieci neuronowych naśladujący nieco
sposób uczenia się człowieka sprawia, że zadania z ga-
tunku podziału zbiorów na kategorie (klasy) nie stanowią
dla tego narzędzia żadnych problemów, a efekty nauki są
doskonałe.
PROGRAMOWANIE C++
8 Zastosowanie technik szablonowych
do budowania list typów. Operacje na
listach typów oraz wykorzystanie ich do
implementacji multimetod (multimethods lub
multiple dispatch).
Jarosław Bednarz
Język C++ nie posiada wsparcia dla wygodnego opero-
wania typami. Jedyny dostępny mechanizm to Run-Time
Type Information.
PROGRAMOWANIE GRAFIKI
36 OpenGL i komponenty Windows
Forms. Renderowanie sceny za pomocą
funkcji OpenGL w aplikacji korzystającej
z komponentów Windows Form.
Korneliusz Warszawski
Projektując aplikacje korzystające z biblioteki graficznej
OpenGL samodzielnie musimy zadbać o prawidłowe roz-
mieszczenie i oprogramowanie interfejsu użytkownika.
Przy jego projektowaniu idealnie wspomoże nas wyko-
rzystanie środowiska Microsoft Visual Studio, które odcią-
ży nas od czasochłonnego zajęcia. W artykule tym znaj-
dziesz podstawowe informację na temat tego, jak w pro-
sty sposób połączyć funkcję biblioteki OpenGL z aplikacją
korzystającą z komponentów Windows Forms.
SZTUCZNA INTELIGENCJA
12 W oczekiwaniu na sztuczną inteligencję.
Dr Adrian Horzyk
Inteligencja jest zjawiskiem powszechnym i mimo wielu
krążących na jej temat opinii i definicji, pewne jest, że po-
zwoliła i pozwala się naszej cywilizacji rozwijać. Bez wąt-
pienia poziom inteligentnych zachowań podwyższa się
z biegiem czasu, co można u ludzi obserwować w coraz
bardziej rozwiniętym i skomplikowanym sposobie zacho-
wania się, myślenia i kojarzenia.
18 Dlaczego maszyna potrafi zachować się
jak istota inteligentna? „Wirtualny doradca”
- krok po kroku.
Dr Agnieszka Nowak – Brzezińska
Zakładając, że odbiorcami niniejszego artykułu są fascy-
naci sztuczną inteligencją z pewnością nie trzeba długo
argumentować tytułu pracy. Sztuczna inteligencja jako
nauka obejmująca zagadnienie logiki rozmytej, obliczeń
50 Stereoskopia. Implementacja w XNA 4.0.
Jacek Matulewski, Wojciech Stańczyk
Stereoskopia na dobre zadomowiła się w kinach. Nie-
mal wszystkie przeboje, począwszy od „Avatara” po filmy
animowane dla dzieci są teraz wyświetlane w wersji 3D.
Także wśród urządzeń kina domowego pojawiają się już
urządzenia do prezentacji obrazu z wrażeniem głębi. Mo-
wa zarówno o telewizorach, jak i o akcesoriach kompute-
rowych.
Miesięcznik
Software Developer’s Journal
(12 numerów w roku)
jest wydawany przez
Software Press Sp. z o.o. SK
Skład i łamanie:
Tomasz Kostro
www.studiopoligraficzne.com
Kierownik produkcji:
Andrzej Kuca
andrzej.kuca@software.com.pl
www.sdjournal.org
cooperation@software.com.pl
poprawnego działania programów shareware,
freeware i public domain.
Wszystkie znaki firmowe zawarte w piśmie są
własności odpowiednich firm.
Zostały użyte wyłącznie w celach informacyjnych.
Dział reklamy:
adv@software.com.pl
Redakcja dokłada wszelkich starań, by
publikowane w piśmie i na towarzyszących mu
nośnikach informacje i programy były poprawne,
jednakże nie bierze odpowiedzialności za
efekty wykorzystania ich; nie gwarantuje także
Prezes:
Paweł Marciniak
Dyrektor wydawniczy:
Natalia Sieniutowicz
Redaktor naczelny:
Łukasz Łopuszański
lukasz.lopuszanski@software.com.pl
Adres korespondencyjny:
Software Press Sp. z o.o. SK,
ul. Bokserska 1, 02-682 Warszawa, Polska
tel. +48 22 427 36 91, fax +48 22 224 24 59
Osoby zainteresowane współpracą
prosimy o kontakt:
cooperation@software.com.pl
SPIS TREŚCI
SPIS TREŚCI
60 Kariera w testach oprogramowania.
Jacek Tomczak
Artykuł kierowany jest do osób, które są na etapie wyboru
odpowiedniej dla siebie ścieżki rozwoju w branży IT lub za-
stanawiają się nad zmianą dotychczasowej drogi zawodo-
wej. Chciałbym im przybliżyć obszar testów, główne zada-
nia testera, miejsce zespołu testów w organizacji. Pokażę,
co ciekawego w tym zespole można znaleźć dla siebie.
TESTOWANIE
OPROGRAMOWANIA
60 Czy zauważyłeś goryla? Praktyczne
umiejętności dostrzegania błędów aplikacji.
Bogdan Bereza - Jarociński
Jakość jest ważna, zgoda? Nie tylko jako dobro luksuso-
we, ale przede wszystkim jako sposób na podniesienie
wydajności i na to, aby budowanie aplikacji było łatwiej-
sze, skuteczniejsze i przyjemniejsze. Wiele jest sposobów
zapewnienia jakości, niektóre bardzo wyrafinowane, ale
nic nie zastąpi podstawowej umiejętności SPRAWDZA-
NIA, czy to, co zrobiono, zrobiono dobrze. Sprawdzać mu-
szą programiści, projektanci, analitycy i użytkownicy, no
i oczywiście zawodowi sprawdzacze - testerzy. Na każ-
dym poziomie, podczas każdego kroku wytwarzania.
WYWIADY
68 O automatyzacji usług IT i realiach cloud
computing.
Rozmowa z Gurem Steifem, gościem BMC Forum w War-
szawie
72 Oczekiwania zależą od projektu.
Wywiad z Dominiką Kotułą, menagerem personalnym
w firmie Blue Media S.A.
Reklama
BIBLIOTEKA MIESIĄCA
Łączenie C++ i Pythona
biblioteka boost::python
Wykorzystywanie różnych języków programowania
pozwala dobierać właściwe narzędzie do danego problemu.
W artykule omówiono potrzebę stosowania tego typu
rozwiązań oraz pokazano przykłady łączenia C++ i Pythona
przy pomocy biblioteki boost::python.
Dowiesz się:
• Dlaczego warto używać kilku języków programowania;
• Jak wołać kod C++ z Pythona;
• Jak wołać kod Pythona z C++.
Powinieneś wiedzieć:
• Jak pisać proste programy w C++;
• Jak pisać proste programy w Pythonie.
Wstęp
Nie istnieje jeden, najlepszy język programowania.
Przy projektowaniu języka dokonuje się pewnych wy-
borów, które zwiększają korzyści ze stosowania dane-
go języka w pewnych obszarach, ale sprawiają kłopo-
ty w innych - nietypowych dla danego języka zastoso-
waniach. Wśród tysiąca obecnie istniejących języków
programowania trudno wybrać jeden najlepszy, dlate-
go decyzja, którego języka użyć powinna być zależ-
na od wymagań stawianych przed tworzoną aplikacją
oraz indywidualnych preferencji programistów.
Stosowanie zawsze jednego języka prowadzi do
tworzenia niezbyt wyrafinowanych rozwiązań. War-
to zainwestować czas na poznanie przynajmniej kil-
ku różnych języków, oprócz korzyści ze stosowania
najbardziej odpowiedniego narzędzia do danego za-
stosowania, pozwala to także dostrzec pewne ogólne
techniki stosowane w programowaniu.
Jedną z cech specyficznych dla danego języka pro-
gramowania, jest metoda przekształcania kodu źró-
dłowego w działający program. Języki kompilowa-
ne translują kod źródłowy, tworzony przez programi-
stę, na kod wynikowy (binarny), następnie kod wyniko-
wy jest wykonywany przez komputer. Inaczej proces
ten rozwiązują języki interpretowane, czytają one frag-
ment kodu źródłowego i wykonują ten fragment. Tutaj
kod wynikowy (kod binarny) nigdy nie powstaje.
Języki kompilowane pozwalają nam tworzyć bardzo
wydajne fragmenty kodu - wykonuje się kod binarny,
ale proces implementacji jest trudniejszy, niż przy uży-
ciu języków interpretowanych. Kod jest ukryty przed
użytkownikiem, więc możemy chronić w ten sposób
nasze rozwiązania. Aplikacje nie są przenośne, kod
binarny jest zależny od platformy. Programy napisa-
ne w językach interpretowanych wykonują się wolniej,
ale proces implementacji jest łatwiejszy. Programy są
przenośne, zaś kod jest dostępny dla użytkownika. Ist-
nieją języki pośrednie, mające cechy obu wymienio-
nych klas, ale ich stosowanie sprawia, że godzimy się
na pewne koszty, na przykład wydajność takich aplika-
cji nigdy nie będzie taka, jak wydajność aplikacji stwo-
rzonych w językach kompilowanych.
Szybki start
Aby uruchomić przedstawione przykłady, należy mieć do-
stęp do kompilatora C++ oraz edytora tekstu. Przykłady wy-
korzystują biblioteki boost (
www.boost.org
). Aby poprawnie
je skompilować należy dodać odpowiednie zależności wy-
korzystywane podczas konsolidacji; dla konsolidatora g++
należy dodać opcje:
-lboost _ python
; dla konsolidato-
ra Visual Studio (program link) biblioteki boost są dodawa-
ne automatycznie. Przykłady wykorzystują także interpre-
ter języka Python, który także powinien być zainstalowa-
ny (patrz
www.python.org
). Na wydrukach pominięto dołą-
czanie odpowiednich nagłówków oraz udostępnianie prze-
strzeni nazw, pełne źródła umieszczono jako materiały po-
mocnicze. Materiały te wykorzystują narzędzie do budowa-
nia aplikacji Scons (
www.scons.org
).
4
4/2011
Łączenie C++ i Pythona
Biorąc pod uwagę tylko jedną cechę, czy język jest
kompilowany, czy interpretowany, można wskazać
fragmenty aplikacji, które wygodniej tworzyć za po-
mocą języków kompilowanych, oraz fragmenty, któ-
re wygodniej implementować przy pomocy języków
interpretowanych. Aplikacja posiada pewne fragmen-
ty, które powinny być wykonywane wydajnie. Są one
„wąskim gardłem” i aby osiągnąć maksymalną wydaj-
ność musimy je tworzyć w językach kompilowanych.
Pozostałe fragmenty powinny być utworzone możliwie
szybko, a szybkie tworzenie programów umożliwia-
ją języki interpretowane. Innym powodem stosowania
języków interpretowanych jest umożliwienie użytkow-
nikowi modyfikacji (czy dostosowywania) aplikacji do
własnych potrzeb; jeżeli pewne fragmenty (np. mapa
gry) są programem wykonywanym przez interpreter, to
użytkownik może je łatwo zmienić.
Tworzenie aplikacji wykorzystującej różne języ-
ki programowania wymaga, oprócz umiejętności pro-
gramowania w tych językach, zapewnienia komunika-
cji pomiędzy modułami. Wymusza to dokładne okre-
ślenie interfejsu odpowiednich modułów oraz utwo-
rzenie procedur konwertujących obiekty oraz sposo-
by wołania pomiędzy fragmentami napisanymi w róż-
nych językach.
Tematem tego artykułu jest biblioteka
boost::python
.
Biblioteka ta „obudowuje” interfejs do interpretera (Py-
thon C API) pozwalając na wygodne łączenie kodu
napisanego w C++ (C++ to język kompilowany) i kodu
napisanego w Pythonie (Python jest interpreterem).
za pomocą szablonu
def
, podając nazwę funkcji, któ-
ra będzie używana w Pythonie oraz wskaźnik na funk-
cję w C++. Klasę eksportujemy za pomocą szablonu
class_
. Parametrem tego szablonu jest typ w C++, na-
tomiast argumentami nazwa typu, która będzie używa-
na w Pythonie oraz argumenty konstruktora (w Pyto-
nie rolę konstruktora pełni metoda
__init__
). Dodatko-
wo podajemy nazwy metod używane w Pythonie wraz
ze wskaźnikiem na metodę w C++.
Po utworzeniu biblioteki dynamicznej (dla przykła-
du z Listingu 1 bibliotekaaa ta powinna mieć nazwę
cppmodule.so
dla Linuxa,
cppmodule.pyd
dla Windows)
i umieszczeniu jej w miejscu, które jest widoczne dla
interpretera Pythona (np. w katalogu z którego inter-
preter został uruchomiony) możemy wykonać nastę-
pujące instrukcje:
>>> import cppmodule
>>> cppmodule.f(3)
45
>>> foo = cppmodule.Foo(2)
>>> foo.get()
2
>>> foo.set(5)
>>> foo.get()
5
Pierwsza linia dołącza pakiet o danej nazwie (w tym
wypadku jest to moduł, który stworzyliśmy w C++),
kolejne wołają funkcję
f
, tworzą obiekt klasy
Foo
oraz
wołają dla niego metody.
Obecnie często korzysta się z dodatkowych na-
rzędzi, które generują kod eksportujący klasy i funk-
cje; autor wykorzystuje bibliotekę
pyplusplus
(
http://
sourceforge.net/projects/pygccxml/
). Biblioteka ta ge-
neruje kod w C++ na podstawie dostarczonych plików
zawierających definicje. Kod ten definiuje moduł (ma-
krodefinicja
BOOST_PYTHON_MODULE
, patrz Listing 1) oraz
zawiera odpowiednie wpisy dla funkcji i klas. Narzę-
dzia te zmniejszają nakład pracy potrzebny przy łącze-
niu modułów tworzonych w różnych językach.
Biblioteka boost::python
Wołanie funkcji i metod zaimplementowanych w C++
z języka Python, czyli rozszerzanie Pythona w C++,
pozwala na efektywną implementację tych fragmen-
tów, które powinny być wydajne. Innym powodem sto-
sowania ,,wstawek'' w C++ jest konieczność ukrycia
kodu przed użytkownikiem.
Biblioteka
boost::python
dostarcza zbioru sza-
blonów, które pozwalają utworzyć interfejs do funk-
cji i klas utworzonych w C++. Tak obudowane klasy
i funkcje będą dostępne dla programów tworzonych
w języku Python. Kod utworzony w C++ jest kompilo-
wany do biblioteki dzielonej, zawierającej odpowiedni
interfejs. Przykład pokazano na Listingu 1. Dostarcza-
my tam funkcję
f
oraz klasę
Foo
.
Definicję interfejsu rozpoczynamy podając nazwę pa-
kietu Pythona, jest to argument makrodefinicji
BOOST_
PYTHON_MODULE
. Nazwa ta powinna być taka sama, jak
nazwa biblioteki dzielonej, która zawiera udostępniane
byty. Makrodefinicja generuje m.in. funkcję wymaga-
ną przez Python przy ładowaniu pakietu (funkcja
void
initnazwa(void)
). Wewnątrz bloku, który jest umiesz-
czony za makrodefinicją
BOOST_PYTHON_MODULE
, umiesz-
czamy deklaracje funkcji i klas. Funkcję eksportujemy
Python
Python jest interpretowanym, interaktywnym językiem pro-
gramowania stworzonym przez Guino van Rossuma w 1990,
obecnie rozwijanym przez Python Software Fundation. Ję-
zyk ten wspiera programowanie obiektowe, strukturalne
i funkcyjne. Ze względu na bogatą bibliotekę standardową,
prostotę, przejrzystość kodu źródłowego (np. bloki są za-
znaczane przez wcięcia), przenośność, brak statycznej kon-
troli typów, możliwość umieszczania dokumentacji w ko-
dzie źródłowym staje się on coraz bardziej popularny – dzia-
łającą aplikację można utworzyć w bardzo krótkim czasie.
Język Python został ciekawie opisany w książce „Zanurkuj
w Pythonie” dostępnej na wikibooks (
www.wikibooks.org
)
www.sdjournal.org
5
Plik z chomika:
liop2003
Inne pliki z tego folderu:
Software.Developers.Journal.2011.11.PL.pdf
(5810 KB)
Software.Developers.Journal.2011.10.PL.pdf
(4627 KB)
Software.Developers.Journal.2011.09.PL.pdf
(10519 KB)
Software.Developers.Journal.2011.08.PL.pdf
(8647 KB)
Software.Developers.Journal.2011.07.PL.pdf
(8610 KB)
Inne foldery tego chomika:
AI, Systemy Eksperckie, Programowanie ewolucyjne
Asembler
C, C++, C#
Grafika komputerowa
Komunikacja
Zgłoś jeśli
naruszono regulamin