There is much more to C

  • 1,128 views
Uploaded on

Slovak version only. Prednáška o vývoji v C++, prenose aplikácií medzi rôznymi OS a postupmi pre C++

Slovak version only. Prednáška o vývoji v C++, prenose aplikácií medzi rôznymi OS a postupmi pre C++

More in: Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,128
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. There is much more to C++ FI MUNI, Brno 2011 Mgr. Juraj Michálek blog: http://georgik.sinusgear.com twitter: http://twitter.com/sinusgear
  • 2. Niečo o mne
  • 3. ObsahVyvíjame STL, Allegro, SDL, ClanLib, LUA, Mesa3D...C a jemu podobné robot kit, ArundinoLadíme Eclipse a debuggerKontinuálna integrácia Boost, Jenkins CI, MavenNástroje
  • 4. Program programátora1. programátor dostane skvelý nápad2. naprogramuje dokonalý program3. všetko si naprogramuje sám4. zistí, že program je nepoužiteľný
  • 5. Na vlastných nohách5. 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.
  • 6. Vývoj
  • 7. STL I.základ pre C++práca s reťazcami #include <string>operácie nad zoznamami #include <list> #include <deque>
  • 8. STL II.operácie s asociatívnymi poliami #include <map>špeciálne algoritmy (triedenie, výpis) #include <algorithm>zhrnutie: umožňujú urýchlenie vývoja http://www.sgi.com/tech/stl/
  • 9. OtázkaVystačíme so štandardnými funkciami STL?
  • 10. Odpoveď
  • 11. Interaktívne aplikácie
  • 12. Interaktívne aplikácierý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
  • 13. Knižnice Allegro Simple Direct Media LayerClanlib Simple Development Kit
  • 14. AllegroAllegro Low Level Game Routines
  • 15. Allegro - aplikáciaspracovanie klávesnice, myši, joystickuspracovanie obrazu, zvukujednoduché GUIovládanie časovačovpoužívanie dátových súborovuvedené príklady z Allegro
  • 16. Allegro 5podpora pre bežné OSpodpora pre iPhoneudalostihttp://alleg.sourceforge.net/a5docs/5.0.5/
  • 17. Programovanie I.inicializácia Allegra al_init();
  • 18. Inicializácia grafikyinicializácia grafického prostredia al_create_display(int w, int h)
  • 19. ALLEGRO_BITMAPštruktúra na uloženie obrazuvytvorenie obrazovej pamäte ALLEGRO_BITMAP *bmp = create_bitmap(x,y);
  • 20. Grafikavykreslenie bodu do pamäte al_putpixel(x, y, color)načítanie obrazu zo súboru al_load_bitmap(filename);kopírovanie medzi pamäťami al_draw_bitmap(bmp, 10, 10, 0);
  • 21. GrafikaUvoľnenie obrazovej pamäte al_destroy_bitmap(bmp);
  • 22. Klávesnicazavedenie ovládača klávesnice al_install_keyboard()odstránenie ovládača klávesnice al_uninstall_keyboard()načítanie klávesy event.keyboard.keycode
  • 23. Myšinštalácia a odstránenie ovládača al_install_mouse() al_get_mouse_state(&msestate); al_uninstall_mouse()
  • 24. Ďalšie vlastnostiprehrávanie samplov a MIDIukladanie súborov do datafilejednoduchá 3D grafika - polygonyjednoduché GUI
  • 25. Knižnice nad AllegromAllegro má pomerne veľa funkciiAllegttf - práca s True Type fontamiAllegGL - práca GL grafikouDUMB - práca sa audiom (Vorbis/Ogg)
  • 26. KompiláciaKonfiguračný skript allegro-configLinux, Unix, BeOS, QNX, MacOS, Windows: g++ foo.cc -o foo `allegro-config --libs`iPhone vyžaduje Xcode
  • 27. CMake – Cross Platform Make generuje build súbory pre IDE http://www.cmake.org
  • 28. Allegro – CMake – MSVC 2010
  • 29. Allegro – CMake - KDevelop4
  • 30. Zdrojevývoj knižnice http://alleg.sourceforge.netWiki http://wiki.allegro.cc/
  • 31. Allegro.ccGame development community networkMattew J. Leverton http://www.allegro.cc
  • 32. KnižnicaSimple Direct Media Layer
  • 33. Programovanieinicializácia systému SDL_init(flags)ukončenie systému SDL_quit()
  • 34. Grafika I.inicializácia grafického prostredia SDL_SetVideoMode(width, height, video_bpp, videoflags)obrazové dáta v pamäti SDL_SWSURFACEobrazové dáta vo video pamäti SDL_HWSURFACE
  • 35. Grafika II.štruktúra na uloženie obrazu SDL_Surfacevytvorenie obrazovej pamäte surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32, rmask, gmask, bmask, amask);
  • 36. Grafika III.načítanie obrazu zo súboru SDL_Surface *SDL_LoadBMP(const char *file)kopírovanie medzi pamäťami SDL_BlitSurface(src, srcrect, dst, dstrect);
  • 37. Klávesnicastlačenie klávesy vyvolá udalosť SDL_PollEvent(SDL_Event *event)test na stlačenie konkrétne klávesy event.key.keysym.sym
  • 38. Časovaččasovač implementovaný ako počítadlo static int counter;inštalácia funkcie volenej v pravidelnýchintervaloch SDL_SetTimer(interval, tick);
  • 39. Myšzistenie stavu myši SDL_GetMouseState(*x, *y);
  • 40. Textjednoduchý výpis textu nie je
  • 41. Ďalšie vlastnostipriama podpora GL knižníczabudovaný mechanizmus pre vláknaspolupráca s jazykmi Ada, Eiffel, Java, Lua, Perl, PHP, Pike, Python, Ruby176 rozširujúcich knižníc
  • 42. KnižniceSDL je samo o sebe pomerne ťažkopoužiteľnéSDL_mixer - multikanálový mixérSDL_image - spracovanie obrazovýchformátovSDL_net - práca so sieťou
  • 43. Zdrojevývoj http://www.libsdl.orgportál s hrami http://www.lgames.org
  • 44. Kompiláciakonfiguračný skript sdl-configLinux, Windows, BeOS, Mac OS g++ foo.cc -o foo `sdl-config --libs`
  • 45. KnižnicaClanLib game Simple Development Kithttp://www.clanlib.org
  • 46. LUAsilný skriptovací nástrojvolanie skriptov z programuvolanie programu zo skriptovjednoduchá syntax jazyka http://www.lua.org
  • 47. KnižnicaMesa http://mesa3d.sourceforge.net
  • 48. Dino
  • 49. Games for Linuxpodpora hier pre Linuxport a code, save the gamearchív 208 hier, 35 knižníc http://games.linux.sk
  • 50. GUIGraphic User Interface
  • 51. Vhodné knižnice QT FLTK GTK
  • 52. QT Nokia:http://qt.nokia.com
  • 53. QTprodukt firmy Trolltech, neskôr Nokialicencie: open source aj komrčnéknižnica vznikla v roku 1996podporuje C++ a Javu
  • 54. PlatformyMS/WindowsUnix/X11 - Linux, Sun Solaris, HP-UX,Compaq Tru64 UNIX, IBM AIX, IRIX, Mac OSXEmbedded - Linux platforms with framebuffersupport.
  • 55. QT Creator IDEnástroj na tvorbu GUIrozvrhnutú plochu ukladá do XML súboruz XML definície sa generuje kód programu
  • 56. Kompiláciauloženie projektuvytvorenie Makefile z projektu qmake -o Makefile test.prokompilácia make
  • 57. Linguistnástroj na preklad aplikáciiumožňuje oddeliť kód od textovprekladateľ a programátor pracujúsamostatne
  • 58. Amélia
  • 59. KDE
  • 60. Google Earth
  • 61. FLTKhttp://www.fltk.org
  • 62. Knižnica FLTKThe Fast Light Tool KitAutor: Bill Spitzakvenoval sa vývoju rozhraní pre SunMicrosystemsveľa myšlienok zjednodušil a vložil do kitunízko-úrovňová kompatibilita - 10% odlišnosti
  • 63. PlatformyUnix, LinuxMicrosoft WindowsMacOSs podporou OpenGL a GLUT
  • 64. FLUIDFast Light User-Interface Designerjednoduchý designer na tvorbu GUI
  • 65. Knižnicahttp://www.gtk.org
  • 66. GTKGIMP ToolKitPeter Mattis, Spencer Kimball, JoshMacDonaldGNU Network Object Model Environment(GNOME) C++, Guile, Perl, Python, TOM, Ada95, Objective C, Free Pascal, Eiffelkomplexne riešená knižnica
  • 67. Glade 3http://glade.gnome.org design GUI - www.srobick.com
  • 68. Android – Native Development Kithttp://developer.android.com/sdk/ndk/Pozor! App nemusí byť optimálnejšia než napísaná v Jave
  • 69. NDKstiahnuť SDK a NDKexport PATH=$PATH:/cesta/sdk/tools:/ceta/ndkcd /cesta/ndk/samples/hello-jniandroid update project -p . -sndk-buildant debug
  • 70. Adobe Alchemyzaujímavý experimentC/C++ kód skompilovaný pre FlashPlayer AVM2prenositeľnosť príklad: Doom http://labs.adobe.com
  • 71. Interactive C - RobotHandyboardMotorola 68AX11Odvodené od Chttp://www.kipr.orghttp://www.boatball.org
  • 72. Arundinohttp://www.arduino.cc/playground/Interfacing/CPPWindows
  • 73. ACEThe ADAPTIVE Communication Environment http://www.cs.wustl.edu/~schmidt/ACE.htmlOpen source C++ framework reactor, proactor acceptor, connector
  • 74. Java Native Interface - JNIpublic class HelloWorld { private native void sayHello(); public static void main(String[] args) { System.loadLibrary("library"); new HelloWorld().sayHello(); }}
  • 75. NodeJSV8 JavaScript engineasynchrónny prístupudalostihttp://www.nodejs.org
  • 76. výkonné multiplatformové IDE http://www.eclipse.orgC/C++ - CDT plugin http://www.eclipse.org/cdt
  • 77. Aplikácia to neprežila Post-mortem analýzaZostal len jej obraz: coredump
  • 78. Rýchla analýza coredumpu
  • 79. Módy debuggera Spustenie lokálnej aplikácie. Pripojenie k lokálnemu procesu.Pripojenie k vzdialenému procesu. Post-mortem.
  • 80. Valgrinddebugging a profilingmemcheck memory leakyhelgrind race condition, thread profiling
  • 81. Stracestrace ls -l execve("/bin/ls", ["ls"], [/* 29 vars */]) = 0 brk(0) = 0x95d0000 access("/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) = 0xb773c000 access("/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)
  • 82. Mutextracemutextrace ./mutex-tester-app param1 param2 lock #1, free -> thread 1 init #2 lock #2, free -> thread 1 unlock #1 lock #1, free -> thread 1 init #3 lock #3, free -> thread 1 unlock #1
  • 83. PortabilitaLinux – Windows – Mac – BSDprenos C/C++ nie je vždy jednoduchýUnix/Windows Porting Dictionary http://suacommunity.com/
  • 84. Kontinuálna integrácia Od chaosu k štruktúre
  • 85. http://www.boost.org “...one of the most highly regarded and expertly designed C++ library projects in the world.” Herb Sutter and Andrei Alexandrescu
  • 86. Boost
  • 87. Boost Test LibraryTest everything that could possibly breakjednoduchá tvorba tescasovTestSuite – TestCasetest je spustiteľný programbjam integruje spúšťanie testov
  • 88. TestCaseusing 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" );}
  • 89. Jamnáhrada Makefilerozšíriteľné fukncieautomatická detekcia header filesprenositeľné: Unix, Windows, VMS, Macmalý CPU overheadbuild obrovských projektovškálovateľné
  • 90. jam + TestCaseJamfile (Jamroot) import testing ; run tests/testServerQuery.cpp server ;Shell $ bjam ...patience... ...found 2 targets... ...updating 2 targets... *** test passed ***
  • 91. Maven pre C++web: http://maven.apache.org mvn [parametre|ciele]súbor s definíciou projekt pom.xmlplugin pre C++ native-maven-plugin
  • 92. Obsah pom.xmlArtifactsDependenciesPluginsRepositories
  • 93. Kontinuálna integráciarýchla kontrola po commiteJenkins CI – príklad: http://ci.sinusgear.com
  • 94. NástrojeProfesionál vie používať správne nástroje na správny účel.
  • 95. Subversion - SVNverzovací nástrojjednoduchý na používanie http://subversion.tigris.orgrepository, check-out, commit, merge http://www.asinus.org/wiki/VideoTutorialSubversion
  • 96. SVN klient pre Windows http://tortoisesvn.tigris.org
  • 97. GIToproti SVN možnosť lokálných commitovSocial Coding http://www.github.com
  • 98. Source Control & Project Management http://trac.edgewall.org http://trac-hacks.org/
  • 99. GNU a WindowsMinimalist GNU For Windows http://www.mingw.orgCygwin http://www.cygwin.com http://cygwinports.dotsrc.org/
  • 100. Doxygengenerovanie dokumentácie pre C, C++, Java, Python PHP, C#, Dpoužitie doxygen -g project.config doxygen project.config
  • 101. C#, .NET a Monoopen source implementácia .NETRozhranie napr. GTK# http://www.mono-project.com Silverlight pre Linux - Moonlight
  • 102. Pythonsilný objektovo orientovaný jazykplatformovo nezávislýintegrovateľný s C a C++ http://www.python.org http://www.py.cz
  • 103. Twistedudalosť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/
  • 104. PyGamekombinácia sily Pythonua rýchlosti SDL (kód v C) http://www.pygame.org
  • 105. ProjektGitHub http://www.github.comGoogle Code http://code.google.com/opensourceSourceForge http://sourceforge.netFreshMeat http://freshmeat.netCodePlex – MS Platforma http://codeplex.com
  • 106. Ohlohporovnanie projektovrôzne metriky http://www.ohloh.net
  • 107. Open Source projektotvoriť program svetu - Open Sourceniekto môže vo vašej práci pokračovať http://atanks.sf.net
  • 108. se-radio.netSoftware engineering radiozaujímavý a kvalitný podcast http://www.se-radio.net
  • 109. A je tu záverOtázky?
  • 110. Ďakujem za pozornosť FI MUNI, Brno 2011 Juraj Michálekblog: http://georgik.sinusgear.comtwitter: http://twitter.com/sinusgear