libraries and tools for c++
DESCRIPTION
Slides from talk at FI MUNI 2012 - course C++ development. Libraries and continouous integration with JenkinsTRANSCRIPT
![Page 1: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/1.jpg)
FI MUNI 26.11. 2012
Juraj Michálekblog: http://georgik.sinusgear.comtwitter: http://twitter.com/sinusgear
Libraries and tools for C++
![Page 2: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/2.jpg)
Something about me ;-)
![Page 3: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/3.jpg)
Content
Node.js
V8, Node bindings
Gui
QT, FLTK, FLUID, wxWidgets
Special HW
Android NDK, Arduino
Patterns ACE
Tools
![Page 4: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/4.jpg)
Clone examples
Available at GitHub:https://github.com/georgik/fimuni-c-cpp-examples
git clone git://github.com/georgik/fimuni-c-cpp-examples.git
![Page 6: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/6.jpg)
Architecture of Node.js
![Page 7: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/7.jpg)
V8
4x4 Ford V8 engine
![Page 9: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/9.jpg)
V8 in context of Chrome
![Page 11: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/11.jpg)
GYP example
![Page 12: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/12.jpg)
libuv – event loop
Call callbacks Sleep
![Page 13: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/13.jpg)
Sample server in JS
![Page 14: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/14.jpg)
Node.js wraps
![Page 17: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/17.jpg)
Dino
![Page 18: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/18.jpg)
GUI
Graphic User Interface
![Page 19: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/19.jpg)
Vhodné knižnice
QT
FLTK
wxWidgets
![Page 21: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/21.jpg)
QT
produkt firmy Trolltech, neskôr Nokia
licencie: open source aj komrčné
knižnica vznikla v roku 1996
podporuje C++ a Javu
![Page 22: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/22.jpg)
Platformy
MS/Windows
Unix/X11 - Linux, Sun Solaris, HP-UX, Compaq Tru64 UNIX, IBM AIX, IRIX, Mac OS X
Embedded - Linux platforms with framebuffer support.
![Page 23: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/23.jpg)
QT Creator IDE
nástroj na tvorbu GUI
rozvrhnutú plochu ukladá do XML súboru
z XML definície sa generuje kód programu
![Page 24: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/24.jpg)
Kompilácia
uloženie projektu
vytvorenie Makefile z projektu
qmake -o Makefile test.pro
kompilácia
make
![Page 25: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/25.jpg)
Linguist
nástroj na preklad aplikácii
umožňuje oddeliť kód od textov
prekladateľ a programátor pracujú samostatne
![Page 26: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/26.jpg)
Amélia
![Page 27: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/27.jpg)
KDE
![Page 29: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/29.jpg)
Knižnica FLTK
The Fast Light Tool Kit
Autor: Bill Spitzak
venoval sa vývoju rozhraní pre Sun Microsystems
veľa myšlienok zjednodušil a vložil do kitu
nízko-úrovňová kompatibilita - 10% odlišnosti
![Page 30: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/30.jpg)
Platformy
Unix, Linux
Microsoft Windows
MacOS
s podporou OpenGL a GLUT
![Page 31: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/31.jpg)
FLUID
Fast Light User-Interface Designer
jednoduchý designer na tvorbu GUI
![Page 33: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/33.jpg)
wxGlade
![Page 34: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/34.jpg)
Android – Native Development Kit
http://developer.android.com/sdk/ndk/
Pozor!
App nemusí byť optimálnejšia než napísaná v Jave
![Page 35: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/35.jpg)
NDK
stiahnuť SDK a NDK
export PATH=$PATH:/cesta/sdk/tools:/ceta/ndk
cd /cesta/ndk/samples/hello-jni
android update project -p . -s
ndk-build
ant debug
![Page 36: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/36.jpg)
Adobe Alchemy
zaujímavý experiment
C/C++ kód skompilovaný pre FlashPlayer
AVM2
prenositeľnosť
príklad: Doom
http://labs.adobe.com
![Page 37: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/37.jpg)
Arduino
http://www.arduino.cc/playground/Interfacing/CPPWindows
![Page 38: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/38.jpg)
ACE
The ADAPTIVE Communication Environment
http://www.cs.wustl.edu/~schmidt/ACE.html
Open source C++ framework
reactor, proactor
acceptor, connector
![Page 39: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/39.jpg)
Java Native Interface - JNI
public class HelloWorld { private native void sayHello(); public static void main(String[] args) { System.loadLibrary("library"); new HelloWorld().sayHello(); }}
![Page 40: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/40.jpg)
http://www.boost.org
“...one of the most highly regarded and expertly designed C++ library projects in the world.”
Herb Sutter and Andrei Alexandrescu
![Page 41: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/41.jpg)
Boost
![Page 42: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/42.jpg)
Boost Test Library
Test everything that could possibly break
jednoduchá tvorba tescasov
TestSuite – TestCase
test je spustiteľný program
bjam integruje spúšťanie testov
![Page 43: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/43.jpg)
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" );}
![Page 44: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/44.jpg)
Jam
náhrada Makefile
rozšíriteľné fukncie
automatická detekcia header files
prenositeľné: Unix, Windows, VMS, Mac
malý CPU overhead
build obrovských projektov
škálovateľné
![Page 45: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/45.jpg)
jam + TestCase
Jamfile (Jamroot)
import testing ;
run tests/testServerQuery.cpp server ;
Shell
$ bjam
...patience...
...found 2 targets...
...updating 2 targets...
*** test passed ***
![Page 46: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/46.jpg)
Valgrind
debugging a profiling
memcheck
helgrind - race condition, thread profiling
![Page 47: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/47.jpg)
Modes debugger
Local application
Attach to local process
Attach to remote process
Post-mortem
![Page 48: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/48.jpg)
Application crashed
Post-mortem analysis
Image from memory: coredump
![Page 49: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/49.jpg)
Quick analysis of coredump
![Page 50: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/50.jpg)
Strace
![Page 51: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/51.jpg)
Mutextrace
mutextrace ./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
![Page 52: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/52.jpg)
Maven pre C++
web: http://maven.apache.org
mvn [parametre|ciele]
súbor s definíciou projekt
pom.xml
plugin pre C++
native-maven-plugin
![Page 53: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/53.jpg)
Kontinuálna integrácia
rýchla kontrola po commite
Jenkins CI – príklad:
http://ci.sinusgear.com
![Page 54: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/54.jpg)
GIT
oproti SVN možnosť lokálných commitov
Social Coding
http://www.github.com
![Page 55: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/55.jpg)
Source Control & Project Management
http://trac.edgewall.org
http://trac-hacks.org/
![Page 56: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/56.jpg)
GNU a Windows
Minimalist GNU For Windows
http://www.mingw.org
Cygwin
http://www.cygwin.com
http://cygwinports.dotsrc.org/
![Page 57: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/57.jpg)
Python
silný objektovo orientovaný jazyk
platformovo nezávislý
integrovateľný s C a C++
http://www.python.org
http://www.py.cz
![Page 58: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/58.jpg)
Twisted
udalosťami riadený sieťový framework
podpora TCP, UDP, SSL/TLS, multicast
Unix sockets
veľké množstvo protokolov
HTTP, NNTP, IMAP, SSH, IRC, FTP...
http://twistedmatrix.com/trac/
![Page 59: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/59.jpg)
Project
GitHub
http://www.github.com
Google Code
http://code.google.com/opensource
SourceForge
http://sourceforge.net
FreeCode
http://freecode.com
CodePlex – MS Platforma
http://codeplex.com
![Page 60: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/60.jpg)
Atomic Tanks as open source
Open source it.Somebody can continue in your work
http://atanks.sf.net
![Page 63: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/63.jpg)
A je tu záver
Otázky?
![Page 64: Libraries and tools for C++](https://reader034.vdocuments.net/reader034/viewer/2022050805/555a2722d8b42ab3088b4b00/html5/thumbnails/64.jpg)
FI MUNI, Brno 2012Juraj Michálek
blog: http://georgik.sinusgear.comtwitter: http://twitter.com/sinusgear
EOF