There is much more to C++ · Simple Direct Media Layer Clanlib Simple Development Kit. Allegro...

Post on 24-Jul-2020

0 views 0 download

Transcript of There is much more to C++ · Simple Direct Media Layer Clanlib Simple Development Kit. Allegro...

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

CMake – Cross Platform Make

generuje build súbory pre IDEhttp://www.cmake.org

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`

Knižnica

ClanLib game Simple Development Kithttp://www.clanlib.org

LUA

silný skriptovací nástrojvolanie skriptov z programuvolanie programu zo skriptovjednoduchá syntax jazyka

http://www.lua.org

Knižnica

Mesa

http://mesa3d.sourceforge.net

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

Nokia:http://qt.nokia.com

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

FLTK

http://www.fltk.org

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

Knižnica

http://www.gtk.org

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(); }}

NodeJS

V8 JavaScript engineasynchrónny prístupudalostihttp://www.nodejs.org

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

GIT

oproti SVN možnosť lokálných commitovSocial Coding

http://www.github.com

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ť