There is much more to C
Upcoming SlideShare
Loading in...5
×
 

There is much more to C

on

  • 1,327 views

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++

Statistics

Views

Total Views
1,327
Views on SlideShare
690
Embed Views
637

Actions

Likes
0
Downloads
1
Comments
0

4 Embeds 637

http://georgik.sinusgear.com 627
http://translate.googleusercontent.com 5
http://webcache.googleusercontent.com 3
http://feeds2.feedburner.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

There is much more to C There is much more to C Presentation Transcript

  • There is much more to C++ FI MUNI, Brno 2011 Mgr. Juraj Michálek blog: http://georgik.sinusgear.com twitter: http://twitter.com/sinusgear
  • Niečo o mne
  • 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
  • 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ý
  • 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.
  • 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ývoja http://www.sgi.com/tech/stl/
  • OtázkaVystačíme so štandardnými funkciami STL?
  • Odpoveď
  • Interaktívne aplikácie
  • 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
  • Knižnice Allegro Simple Direct Media LayerClanlib Simple Development Kit
  • AllegroAllegro Low Level Game Routines
  • Allegro - aplikáciaspracovanie klávesnice, myši, joystickuspracovanie obrazu, zvukujednoduché GUIovládanie časovačovpoužívanie dátových súborovuvedené príklady z Allegro
  • Allegro 5podpora pre bežné OSpodpora pre iPhoneudalostihttp://alleg.sourceforge.net/a5docs/5.0.5/
  • Programovanie I.inicializácia Allegra al_init();
  • Inicializácia grafikyinicializácia grafického prostredia al_create_display(int w, int h)
  • ALLEGRO_BITMAPštruktúra na uloženie obrazuvytvorenie obrazovej pamäte ALLEGRO_BITMAP *bmp = create_bitmap(x,y);
  • 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);
  • GrafikaUvoľnenie obrazovej pamäte al_destroy_bitmap(bmp);
  • 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
  • Myšinštalácia a odstránenie ovládača al_install_mouse() al_get_mouse_state(&msestate); al_uninstall_mouse()
  • Ďalšie vlastnostiprehrávanie samplov a MIDIukladanie súborov do datafilejednoduchá 3D grafika - polygonyjednoduché GUI
  • 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)
  • KompiláciaKonfiguračný skript allegro-configLinux, Unix, BeOS, QNX, MacOS, Windows: g++ foo.cc -o foo `allegro-config --libs`iPhone vyžaduje Xcode
  • CMake – Cross Platform Make generuje build súbory pre IDE http://www.cmake.org
  • Allegro – CMake – MSVC 2010
  • Allegro – CMake - KDevelop4
  • Zdrojevývoj knižnice http://alleg.sourceforge.netWiki http://wiki.allegro.cc/
  • Allegro.ccGame development community networkMattew J. Leverton http://www.allegro.cc
  • KnižnicaSimple Direct Media Layer
  • Programovanieinicializácia systému SDL_init(flags)ukončenie systému SDL_quit()
  • 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
  • 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);
  • 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);
  • Klávesnicastlačenie klávesy vyvolá udalosť SDL_PollEvent(SDL_Event *event)test na stlačenie konkrétne klávesy event.key.keysym.sym
  • Časovaččasovač implementovaný ako počítadlo static int counter;inštalácia funkcie volenej v pravidelnýchintervaloch SDL_SetTimer(interval, tick);
  • Myšzistenie stavu myši SDL_GetMouseState(*x, *y);
  • Textjednoduchý výpis textu nie je
  • Ď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
  • 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
  • Zdrojevývoj http://www.libsdl.orgportál s hrami http://www.lgames.org
  • Kompiláciakonfiguračný skript sdl-configLinux, Windows, BeOS, Mac OS g++ foo.cc -o foo `sdl-config --libs`
  • KnižnicaClanLib game Simple Development Kithttp://www.clanlib.org
  • LUAsilný skriptovací nástrojvolanie skriptov z programuvolanie programu zo skriptovjednoduchá syntax jazyka http://www.lua.org
  • KnižnicaMesa http://mesa3d.sourceforge.net
  • Dino
  • Games for Linuxpodpora hier pre Linuxport a code, save the gamearchív 208 hier, 35 knižníc http://games.linux.sk
  • GUIGraphic User Interface
  • Vhodné knižnice QT FLTK GTK
  • QT Nokia:http://qt.nokia.com
  • QTprodukt firmy Trolltech, neskôr Nokialicencie: open source aj komrčnéknižnica vznikla v roku 1996podporuje C++ a Javu
  • PlatformyMS/WindowsUnix/X11 - Linux, Sun Solaris, HP-UX,Compaq Tru64 UNIX, IBM AIX, IRIX, Mac OSXEmbedded - Linux platforms with framebuffersupport.
  • QT Creator IDEnástroj na tvorbu GUIrozvrhnutú plochu ukladá do XML súboruz XML definície sa generuje kód programu
  • Kompiláciauloženie projektuvytvorenie Makefile z projektu qmake -o Makefile test.prokompilácia make
  • Linguistnástroj na preklad aplikáciiumožňuje oddeliť kód od textovprekladateľ a programátor pracujúsamostatne
  • Amélia
  • KDE
  • Google Earth
  • FLTKhttp://www.fltk.org
  • 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
  • PlatformyUnix, LinuxMicrosoft WindowsMacOSs podporou OpenGL a GLUT
  • FLUIDFast Light User-Interface Designerjednoduchý designer na tvorbu GUI
  • Knižnicahttp://www.gtk.org
  • 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
  • Glade 3http://glade.gnome.org design GUI - www.srobick.com
  • Android – Native Development Kithttp://developer.android.com/sdk/ndk/Pozor! App nemusí byť optimálnejšia než napísaná v Jave
  • NDKstiahnuť SDK a NDKexport PATH=$PATH:/cesta/sdk/tools:/ceta/ndkcd /cesta/ndk/samples/hello-jniandroid update project -p . -sndk-buildant debug
  • Adobe Alchemyzaujímavý experimentC/C++ kód skompilovaný pre FlashPlayer AVM2prenositeľnosť príklad: Doom http://labs.adobe.com
  • Interactive C - RobotHandyboardMotorola 68AX11Odvodené od Chttp://www.kipr.orghttp://www.boatball.org
  • Arundinohttp://www.arduino.cc/playground/Interfacing/CPPWindows
  • ACEThe ADAPTIVE Communication Environment http://www.cs.wustl.edu/~schmidt/ACE.htmlOpen source C++ framework reactor, proactor acceptor, connector
  • Java Native Interface - JNIpublic class HelloWorld { private native void sayHello(); public static void main(String[] args) { System.loadLibrary("library"); new HelloWorld().sayHello(); }}
  • NodeJSV8 JavaScript engineasynchrónny prístupudalostihttp://www.nodejs.org
  • výkonné multiplatformové IDE http://www.eclipse.orgC/C++ - CDT plugin http://www.eclipse.org/cdt
  • Aplikácia to neprežila Post-mortem analýzaZostal 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.
  • Valgrinddebugging a profilingmemcheck memory leakyhelgrind race condition, thread profiling
  • 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)
  • 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
  • PortabilitaLinux – 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 LibraryTest everything that could possibly breakjednoduchá tvorba tescasovTestSuite – TestCasetest je spustiteľný programbjam integruje spúšťanie testov
  • 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" );}
  • Jamnáhrada Makefilerozšíriteľné fukncieautomatická detekcia header filesprenositeľné: Unix, Windows, VMS, Macmalý CPU overheadbuild obrovských projektovškálovateľné
  • jam + TestCaseJamfile (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.org mvn [parametre|ciele]súbor s definíciou projekt pom.xmlplugin pre C++ native-maven-plugin
  • Obsah pom.xmlArtifactsDependenciesPluginsRepositories
  • Kontinuálna integráciarýchla kontrola po commiteJenkins CI – príklad: http://ci.sinusgear.com
  • NástrojeProfesionál vie používať správne nástroje na správny účel.
  • Subversion - SVNverzovací nástrojjednoduchý na používanie http://subversion.tigris.orgrepository, check-out, commit, merge http://www.asinus.org/wiki/VideoTutorialSubversion
  • SVN klient pre Windows http://tortoisesvn.tigris.org
  • GIToproti SVN možnosť lokálných commitovSocial Coding http://www.github.com
  • Source Control & Project Management http://trac.edgewall.org http://trac-hacks.org/
  • GNU a WindowsMinimalist GNU For Windows http://www.mingw.orgCygwin http://www.cygwin.com http://cygwinports.dotsrc.org/
  • Doxygengenerovanie dokumentácie pre C, C++, Java, Python PHP, C#, Dpoužitie doxygen -g project.config doxygen project.config
  • C#, .NET a Monoopen source implementácia .NETRozhranie napr. GTK# http://www.mono-project.com Silverlight pre Linux - Moonlight
  • Pythonsilný objektovo orientovaný jazykplatformovo nezávislýintegrovateľný s C a C++ http://www.python.org http://www.py.cz
  • 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/
  • PyGamekombinácia sily Pythonua rýchlosti SDL (kód v C) http://www.pygame.org
  • ProjektGitHub http://www.github.comGoogle Code http://code.google.com/opensourceSourceForge http://sourceforge.netFreshMeat http://freshmeat.netCodePlex – MS Platforma http://codeplex.com
  • Ohlohporovnanie projektovrôzne metriky http://www.ohloh.net
  • Open Source projektotvoriť program svetu - Open Sourceniekto môže vo vašej práci pokračovať http://atanks.sf.net
  • se-radio.netSoftware engineering radiozaujímavý a kvalitný podcast http://www.se-radio.net
  • A je tu záverOtázky?
  • Ďakujem za pozornosť FI MUNI, Brno 2011 Juraj Michálekblog: http://georgik.sinusgear.comtwitter: http://twitter.com/sinusgear