Upload
juraj-michalek
View
1.181
Download
3
Tags:
Embed Size (px)
DESCRIPTION
Slovak version only. Prednáška o vývoji v C++, prenose aplikácií medzi rôznymi OS a postupmi pre C++
Citation preview
FI MUNI, Brno 2011Mgr. Juraj Michálek
blog: http://georgik.sinusgear.comtwitter: http://twitter.com/sinusgear
There is much more to C++
Niečo o mne
VyvíjameSTL, Allegro, SDL, ClanLib, LUA, Mesa3D...
C a jemu podobnérobot kit, Arundino
LadímeEclipse a debugger
Kontinuálna integráciaBoost, Jenkins CI, Maven
Nástroje
Obsah
Program programátora
1. programátor dostane skvelý nápad2. naprogramuje dokonalý program3. všetko si naprogramuje sám4. zistí, že program je nepoužiteľný
Na vlastných nohách
5. pokúsi sa program opraviť6. zistí, že polovicu funkcií naprogramoval zle7. preprogramuje zlé funkcie8. zistí, že program je opäť nepoužiteľnýgoto 5.
Vývoj
STL I.
základ pre C++práca s reťazcami
#include <string>operácie nad zoznamami
#include <list> #include <deque>
STL II.
operácie s asociatívnymi poliami#include <map>
špeciálne algoritmy (triedenie, výpis)#include <algorithm>
zhrnutie: umožňujú urýchlenie vývojahttp://www.sgi.com/tech/stl/
Otázka
Vystačíme so štandardnými funkciami STL?
Odpoveď
Interaktívne aplikácie
Interaktívne aplikácie
rýchla reagovať na užívateľamusia sa prispôsobovať jeho potrebámdobrým príkladom je počítačová hraukážeme si konkrétnu implementáciu
Knižnice
Allegro
Simple Direct Media Layer
Clanlib Simple Development Kit
Allegro
Allegro Low Level Game Routines
Allegro - aplikácia
spracovanie klávesnice, myši, joystickuspracovanie obrazu, zvukujednoduché GUIovládanie časovačovpoužívanie dátových súborovuvedené príklady z Allegro
Allegro 5
podpora pre bežné OSpodpora pre iPhoneudalostihttp://alleg.sourceforge.net/a5docs/5.0.5/
Programovanie I.
inicializácia Allegraal_init();
Inicializácia grafiky
inicializácia grafického prostrediaal_create_display(int w, int h)
ALLEGRO_BITMAP
štruktúra na uloženie obrazu
vytvorenie obrazovej pamäteALLEGRO_BITMAP *bmp = create_bitmap(x,y);
Grafika
vykreslenie bodu do pamäteal_putpixel(x, y, color)
načítanie obrazu zo súborual_load_bitmap(filename);
kopírovanie medzi pamäťamial_draw_bitmap(bmp, 10, 10, 0);
Grafika
Uvoľnenie obrazovej pamäteal_destroy_bitmap(bmp);
Klávesnica
zavedenie ovládača klávesniceal_install_keyboard()
odstránenie ovládača klávesniceal_uninstall_keyboard()
načítanie klávesyevent.keyboard.keycode
Myš
inštalácia a odstránenie ovládačaal_install_mouse()al_get_mouse_state(&msestate);al_uninstall_mouse()
Ďalšie vlastnosti
prehrávanie samplov a MIDIukladanie súborov do datafilejednoduchá 3D grafika - polygonyjednoduché GUI
Knižnice nad Allegrom
Allegro má pomerne veľa funkciiAllegttf - práca s True Type fontamiAllegGL - práca GL grafikouDUMB - práca sa audiom (Vorbis/Ogg)
Kompilácia
Konfiguračný skriptallegro-config
Linux, Unix, BeOS, QNX, MacOS, Windows:g++ foo.cc -o foo `allegro-config --libs`
iPhonevyžaduje Xcode
Allegro – CMake – MSVC 2010
Allegro – CMake - KDevelop4
Zdroje
vývoj knižnicehttp://alleg.sourceforge.net
Wikihttp://wiki.allegro.cc/
Allegro.cc
Game development community networkMattew J. Leverton
http://www.allegro.cc
Knižnica
Simple Direct Media Layer
Programovanie
inicializácia systémuSDL_init(flags)
ukončenie systémuSDL_quit()
Grafika I.
inicializácia grafického prostrediaSDL_SetVideoMode(width, height, video_bpp, videoflags)
obrazové dáta v pamätiSDL_SWSURFACE
obrazové dáta vo video pamätiSDL_HWSURFACE
Grafika II.
štruktúra na uloženie obrazuSDL_Surface
vytvorenie obrazovej pamätesurface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32, rmask, gmask, bmask, amask);
Grafika III.
načítanie obrazu zo súboruSDL_Surface *SDL_LoadBMP(const char *file)
kopírovanie medzi pamäťamiSDL_BlitSurface(src, srcrect, dst, dstrect);
Klávesnica
stlačenie klávesy vyvolá udalosťSDL_PollEvent(SDL_Event *event)
test na stlačenie konkrétne klávesyevent.key.keysym.sym
Časovač
časovač implementovaný ako počítadlostatic int counter;
inštalácia funkcie volenej v pravidelných intervaloch
SDL_SetTimer(interval, tick);
Myš
zistenie stavu myšiSDL_GetMouseState(*x, *y);
Text
jednoduchý výpis textu nie je
Ďalšie vlastnosti
priama podpora GL knižníczabudovaný mechanizmus pre vláknaspolupráca s jazykmi
Ada, Eiffel, Java, Lua, Perl, PHP, Pike, Python, Ruby
176 rozširujúcich knižníc
Knižnice
SDL je samo o sebe pomerne ťažko použiteľnéSDL_mixer - multikanálový mixérSDL_image - spracovanie obrazových formátovSDL_net - práca so sieťou
Zdroje
vývojhttp://www.libsdl.org
portál s hramihttp://www.lgames.org
Kompilácia
konfiguračný skriptsdl-config
Linux, Windows, BeOS, Mac OSg++ foo.cc -o foo `sdl-config --libs`
LUA
silný skriptovací nástrojvolanie skriptov z programuvolanie programu zo skriptovjednoduchá syntax jazyka
http://www.lua.org
Dino
Games for Linux
podpora hier pre Linuxport a code, save the gamearchív 208 hier, 35 knižníc
http://games.linux.sk
GUI
Graphic User Interface
Vhodné knižnice
QT
FLTK
GTK
QT
produkt firmy Trolltech, neskôr Nokialicencie: open source aj komrčnéknižnica vznikla v roku 1996podporuje C++ a Javu
Platformy
MS/WindowsUnix/X11 - Linux, Sun Solaris, HP-UX, Compaq Tru64 UNIX, IBM AIX, IRIX, Mac OS XEmbedded - Linux platforms with framebuffer support.
QT Creator IDE
nástroj na tvorbu GUIrozvrhnutú plochu ukladá do XML súboruz XML definície sa generuje kód programu
Kompilácia
uloženie projektuvytvorenie Makefile z projektu
qmake -o Makefile test.prokompilácia
make
Linguist
nástroj na preklad aplikáciiumožňuje oddeliť kód od textovprekladateľ a programátor pracujú samostatne
Amélia
KDE
Google Earth
Knižnica FLTK
The Fast Light Tool KitAutor: Bill Spitzakvenoval sa vývoju rozhraní pre Sun Microsystemsveľa myšlienok zjednodušil a vložil do kitunízko-úrovňová kompatibilita - 10% odlišnosti
Platformy
Unix, LinuxMicrosoft WindowsMacOSs podporou OpenGL a GLUT
FLUID
Fast Light User-Interface Designerjednoduchý designer na tvorbu GUI
GTK
GIMP ToolKitPeter Mattis, Spencer Kimball, Josh MacDonaldGNU Network Object Model Environment (GNOME)
C++, Guile, Perl, Python, TOM, Ada95, Objective C, Free Pascal, Eiffel
komplexne riešená knižnica
Glade 3
http://glade.gnome.orgdesign GUI - www.srobick.com
Android – Native Development Kit
http://developer.android.com/sdk/ndk/Pozor!
App nemusí byť optimálnejšia než napísaná v Jave
NDK
stiahnuť SDK a NDKexport PATH=$PATH:/cesta/sdk/tools:/ceta/ndkcd /cesta/ndk/samples/hello-jniandroid update project -p . -sndk-buildant debug
Adobe Alchemy
zaujímavý experimentC/C++ kód skompilovaný pre FlashPlayer
AVM2prenositeľnosť
príklad: Doomhttp://labs.adobe.com
Interactive C - Robot
HandyboardMotorola 68AX11Odvodené od Chttp://www.kipr.orghttp://www.boatball.org
Arundino
http://www.arduino.cc/playground/Interfacing/CPPWindows
ACE
The ADAPTIVE Communication Environmenthttp://www.cs.wustl.edu/~schmidt/ACE.html
Open source C++ framework
reactor, proactoracceptor, connector
Java Native Interface - JNI
public class HelloWorld { private native void sayHello(); public static void main(String[] args) { System.loadLibrary("library"); new HelloWorld().sayHello(); }}
výkonné multiplatformové IDEhttp://www.eclipse.org
C/C++ - CDT pluginhttp://www.eclipse.org/cdt
Aplikácia to neprežila
Post-mortem analýza
Zostal len jej obraz: coredump
Rýchla analýza coredumpu
Módy debuggera
Spustenie lokálnej aplikácie.
Pripojenie k lokálnemu procesu.
Pripojenie k vzdialenému procesu.
Post-mortem.
Valgrind
debugging a profilingmemcheck
memory leakyhelgrind
race condition, thread profiling
Strace
strace ls -lexecve("/bin/ls", ["ls"], [/* 29 vars */]) = 0brk(0) = 0x95d0000access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb773c000access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)open("tls/i686/sse2/cmov/libselinux.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
Mutextrace
mutextrace ./mutex-tester-app param1 param2lock #1, free -> thread 1init #2lock #2, free -> thread 1unlock #1lock #1, free -> thread 1init #3lock #3, free -> thread 1unlock #1
Portabilita
Linux – Windows – Mac – BSDprenos C/C++ nie je vždy jednoduchýUnix/Windows Porting Dictionary
http://suacommunity.com/
Kontinuálna integrácia
Od chaosu k štruktúre
http://www.boost.org“...one of the most highly regarded and expertly designed C++ library projects in the world.”
Herb Sutter and Andrei Alexandrescu
Boost
Boost Test Library
Test everything that could possibly breakjednoduchá tvorba tescasovTestSuite – TestCasetest je spustiteľný programbjam integruje spúšťanie testov
TestCase
using namespace boost::unit_test_framework;
/** * Test basic marshaller functionality */void testServerQuery(){ ServerQuery query = ServerQuery();
query.session = "112"; query.userId = "janko";
BOOST_CHECK_EQUAL( query.sessionAsChar(), "112" ); BOOST_CHECK_EQUAL( query.userIdAsChar(), "janko" );}
Jam
náhrada Makefilerozšíriteľné fukncieautomatická detekcia header filesprenositeľné: Unix, Windows, VMS, Macmalý CPU overheadbuild obrovských projektovškálovateľné
jam + TestCase
Jamfile (Jamroot)import testing ;run tests/testServerQuery.cpp server ;
Shell$ bjam...patience......found 2 targets......updating 2 targets...*** test passed ***
Maven pre C++
web: http://maven.apache.orgmvn [parametre|ciele]
súbor s definíciou projektpom.xml
plugin pre C++native-maven-plugin
Obsah pom.xml
ArtifactsDependenciesPluginsRepositories
Kontinuálna integrácia
rýchla kontrola po commiteJenkins CI – príklad:
http://ci.sinusgear.com
Nástroje
Profesionál vie používať správne nástrojena správny účel.
Subversion - SVN
verzovací nástrojjednoduchý na používanie
http://subversion.tigris.orgrepository, check-out, commit, merge
http://www.asinus.org/wiki/VideoTutorialSubversion
SVN klient pre Windowshttp://tortoisesvn.tigris.org
Source Control & Project Managementhttp://trac.edgewall.orghttp://trac-hacks.org/
GNU a Windows
Minimalist GNU For Windowshttp://www.mingw.org
Cygwin http://www.cygwin.comhttp://cygwinports.dotsrc.org/
Doxygen
generovanie dokumentácie preC, C++, Java, PythonPHP, C#, D
použitiedoxygen -g project.configdoxygen project.config
C#, .NET a Mono
open source implementácia .NETRozhranie napr. GTK#
http://www.mono-project.comSilverlight pre Linux - Moonlight
Python
silný objektovo orientovaný jazykplatformovo nezávislýintegrovateľný s C a C++
http://www.python.orghttp://www.py.cz
Twisted
udalosťami riadený sieťový frameworkpodpora TCP, UDP, SSL/TLS, multicastUnix socketsveľké množstvo protokolov
HTTP, NNTP, IMAP, SSH, IRC, FTP...http://twistedmatrix.com/trac/
PyGame
kombinácia sily Pythonua rýchlosti SDL (kód v C)
http://www.pygame.org
Projekt
GitHubhttp://www.github.com
Google Codehttp://code.google.com/opensource
SourceForgehttp://sourceforge.net
FreshMeathttp://freshmeat.net
CodePlex – MS Platformahttp://codeplex.com
Ohloh
porovnanie projektovrôzne metriky
http://www.ohloh.net
Open Source projekt
otvoriť program svetu - Open Sourceniekto môže vo vašej práci pokračovať
http://atanks.sf.net
se-radio.net
Software engineering radiozaujímavý a kvalitný podcast
http://www.se-radio.net
A je tu záver
Otázky?
FI MUNI, Brno 2011Juraj Michálek
blog: http://georgik.sinusgear.comtwitter: http://twitter.com/sinusgear
Ďakujem za pozornosť