There is much more to C

1,497 views
1,408 views

Published on

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

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,497
On SlideShare
0
From Embeds
0
Number of Embeds
728
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

There is much more to C

  1. 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. 2. Niečo o mne
  3. 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. 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. 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. 6. Vývoj
  7. 7. STL I.základ pre C++práca s reťazcami #include <string>operácie nad zoznamami #include <list> #include <deque>
  8. 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. 9. OtázkaVystačíme so štandardnými funkciami STL?
  10. 10. Odpoveď
  11. 11. Interaktívne aplikácie
  12. 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. 13. Knižnice Allegro Simple Direct Media LayerClanlib Simple Development Kit
  14. 14. AllegroAllegro Low Level Game Routines
  15. 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. 16. Allegro 5podpora pre bežné OSpodpora pre iPhoneudalostihttp://alleg.sourceforge.net/a5docs/5.0.5/
  17. 17. Programovanie I.inicializácia Allegra al_init();
  18. 18. Inicializácia grafikyinicializácia grafického prostredia al_create_display(int w, int h)
  19. 19. ALLEGRO_BITMAPštruktúra na uloženie obrazuvytvorenie obrazovej pamäte ALLEGRO_BITMAP *bmp = create_bitmap(x,y);
  20. 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. 21. GrafikaUvoľnenie obrazovej pamäte al_destroy_bitmap(bmp);
  22. 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. 23. Myšinštalácia a odstránenie ovládača al_install_mouse() al_get_mouse_state(&msestate); al_uninstall_mouse()
  24. 24. Ďalšie vlastnostiprehrávanie samplov a MIDIukladanie súborov do datafilejednoduchá 3D grafika - polygonyjednoduché GUI
  25. 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. 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. 27. CMake – Cross Platform Make generuje build súbory pre IDE http://www.cmake.org
  28. 28. Allegro – CMake – MSVC 2010
  29. 29. Allegro – CMake - KDevelop4
  30. 30. Zdrojevývoj knižnice http://alleg.sourceforge.netWiki http://wiki.allegro.cc/
  31. 31. Allegro.ccGame development community networkMattew J. Leverton http://www.allegro.cc
  32. 32. KnižnicaSimple Direct Media Layer
  33. 33. Programovanieinicializácia systému SDL_init(flags)ukončenie systému SDL_quit()
  34. 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. 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. 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. 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. 38. Časovaččasovač implementovaný ako počítadlo static int counter;inštalácia funkcie volenej v pravidelnýchintervaloch SDL_SetTimer(interval, tick);
  39. 39. Myšzistenie stavu myši SDL_GetMouseState(*x, *y);
  40. 40. Textjednoduchý výpis textu nie je
  41. 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. 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. 43. Zdrojevývoj http://www.libsdl.orgportál s hrami http://www.lgames.org
  44. 44. Kompiláciakonfiguračný skript sdl-configLinux, Windows, BeOS, Mac OS g++ foo.cc -o foo `sdl-config --libs`
  45. 45. KnižnicaClanLib game Simple Development Kithttp://www.clanlib.org
  46. 46. LUAsilný skriptovací nástrojvolanie skriptov z programuvolanie programu zo skriptovjednoduchá syntax jazyka http://www.lua.org
  47. 47. KnižnicaMesa http://mesa3d.sourceforge.net
  48. 48. Dino
  49. 49. Games for Linuxpodpora hier pre Linuxport a code, save the gamearchív 208 hier, 35 knižníc http://games.linux.sk
  50. 50. GUIGraphic User Interface
  51. 51. Vhodné knižnice QT FLTK GTK
  52. 52. QT Nokia:http://qt.nokia.com
  53. 53. QTprodukt firmy Trolltech, neskôr Nokialicencie: open source aj komrčnéknižnica vznikla v roku 1996podporuje C++ a Javu
  54. 54. PlatformyMS/WindowsUnix/X11 - Linux, Sun Solaris, HP-UX,Compaq Tru64 UNIX, IBM AIX, IRIX, Mac OSXEmbedded - Linux platforms with framebuffersupport.
  55. 55. QT Creator IDEnástroj na tvorbu GUIrozvrhnutú plochu ukladá do XML súboruz XML definície sa generuje kód programu
  56. 56. Kompiláciauloženie projektuvytvorenie Makefile z projektu qmake -o Makefile test.prokompilácia make
  57. 57. Linguistnástroj na preklad aplikáciiumožňuje oddeliť kód od textovprekladateľ a programátor pracujúsamostatne
  58. 58. Amélia
  59. 59. KDE
  60. 60. Google Earth
  61. 61. FLTKhttp://www.fltk.org
  62. 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. 63. PlatformyUnix, LinuxMicrosoft WindowsMacOSs podporou OpenGL a GLUT
  64. 64. FLUIDFast Light User-Interface Designerjednoduchý designer na tvorbu GUI
  65. 65. Knižnicahttp://www.gtk.org
  66. 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. 67. Glade 3http://glade.gnome.org design GUI - www.srobick.com
  68. 68. Android – Native Development Kithttp://developer.android.com/sdk/ndk/Pozor! App nemusí byť optimálnejšia než napísaná v Jave
  69. 69. NDKstiahnuť SDK a NDKexport PATH=$PATH:/cesta/sdk/tools:/ceta/ndkcd /cesta/ndk/samples/hello-jniandroid update project -p . -sndk-buildant debug
  70. 70. Adobe Alchemyzaujímavý experimentC/C++ kód skompilovaný pre FlashPlayer AVM2prenositeľnosť príklad: Doom http://labs.adobe.com
  71. 71. Interactive C - RobotHandyboardMotorola 68AX11Odvodené od Chttp://www.kipr.orghttp://www.boatball.org
  72. 72. Arundinohttp://www.arduino.cc/playground/Interfacing/CPPWindows
  73. 73. ACEThe ADAPTIVE Communication Environment http://www.cs.wustl.edu/~schmidt/ACE.htmlOpen source C++ framework reactor, proactor acceptor, connector
  74. 74. Java Native Interface - JNIpublic class HelloWorld { private native void sayHello(); public static void main(String[] args) { System.loadLibrary("library"); new HelloWorld().sayHello(); }}
  75. 75. NodeJSV8 JavaScript engineasynchrónny prístupudalostihttp://www.nodejs.org
  76. 76. výkonné multiplatformové IDE http://www.eclipse.orgC/C++ - CDT plugin http://www.eclipse.org/cdt
  77. 77. Aplikácia to neprežila Post-mortem analýzaZostal len jej obraz: coredump
  78. 78. Rýchla analýza coredumpu
  79. 79. Módy debuggera Spustenie lokálnej aplikácie. Pripojenie k lokálnemu procesu.Pripojenie k vzdialenému procesu. Post-mortem.
  80. 80. Valgrinddebugging a profilingmemcheck memory leakyhelgrind race condition, thread profiling
  81. 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. 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. 83. PortabilitaLinux – Windows – Mac – BSDprenos C/C++ nie je vždy jednoduchýUnix/Windows Porting Dictionary http://suacommunity.com/
  84. 84. Kontinuálna integrácia Od chaosu k štruktúre
  85. 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. 86. Boost
  87. 87. Boost Test LibraryTest everything that could possibly breakjednoduchá tvorba tescasovTestSuite – TestCasetest je spustiteľný programbjam integruje spúšťanie testov
  88. 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. 89. Jamnáhrada Makefilerozšíriteľné fukncieautomatická detekcia header filesprenositeľné: Unix, Windows, VMS, Macmalý CPU overheadbuild obrovských projektovškálovateľné
  90. 90. jam + TestCaseJamfile (Jamroot) import testing ; run tests/testServerQuery.cpp server ;Shell $ bjam ...patience... ...found 2 targets... ...updating 2 targets... *** test passed ***
  91. 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. 92. Obsah pom.xmlArtifactsDependenciesPluginsRepositories
  93. 93. Kontinuálna integráciarýchla kontrola po commiteJenkins CI – príklad: http://ci.sinusgear.com
  94. 94. NástrojeProfesionál vie používať správne nástroje na správny účel.
  95. 95. Subversion - SVNverzovací nástrojjednoduchý na používanie http://subversion.tigris.orgrepository, check-out, commit, merge http://www.asinus.org/wiki/VideoTutorialSubversion
  96. 96. SVN klient pre Windows http://tortoisesvn.tigris.org
  97. 97. GIToproti SVN možnosť lokálných commitovSocial Coding http://www.github.com
  98. 98. Source Control & Project Management http://trac.edgewall.org http://trac-hacks.org/
  99. 99. GNU a WindowsMinimalist GNU For Windows http://www.mingw.orgCygwin http://www.cygwin.com http://cygwinports.dotsrc.org/
  100. 100. Doxygengenerovanie dokumentácie pre C, C++, Java, Python PHP, C#, Dpoužitie doxygen -g project.config doxygen project.config
  101. 101. C#, .NET a Monoopen source implementácia .NETRozhranie napr. GTK# http://www.mono-project.com Silverlight pre Linux - Moonlight
  102. 102. Pythonsilný objektovo orientovaný jazykplatformovo nezávislýintegrovateľný s C a C++ http://www.python.org http://www.py.cz
  103. 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. 104. PyGamekombinácia sily Pythonua rýchlosti SDL (kód v C) http://www.pygame.org
  105. 105. ProjektGitHub http://www.github.comGoogle Code http://code.google.com/opensourceSourceForge http://sourceforge.netFreshMeat http://freshmeat.netCodePlex – MS Platforma http://codeplex.com
  106. 106. Ohlohporovnanie projektovrôzne metriky http://www.ohloh.net
  107. 107. Open Source projektotvoriť program svetu - Open Sourceniekto môže vo vašej práci pokračovať http://atanks.sf.net
  108. 108. se-radio.netSoftware engineering radiozaujímavý a kvalitný podcast http://www.se-radio.net
  109. 109. A je tu záverOtázky?
  110. 110. Ďakujem za pozornosť FI MUNI, Brno 2011 Juraj Michálekblog: http://georgik.sinusgear.comtwitter: http://twitter.com/sinusgear

×