“Los programadores de C++ somos los peores en reutilización de código” (said by) Bjarne Stroustrup (in talk in) Carlos III 1 www.biicode.com Nov-13 OpenCV www.biicode.com Nov-13 The CImg Library www.biicode.com Nov-13 Box2D, Google GTest www.biicode.com Nov-13 Win, Linux, Mac… www.biicode.com Nov-13 using std::cpp Univ. Carlos III, 26-Nov-13 6 www.biicode.com Nov-13 Biicode setup • CMake: – Visual, Eclipse – VC, Mingw, gcc www.biicode.com Nov-13 Hello Bii! (jdaniel) $ bii new hello jdaniel/hello/main.cpp #include “hello.h” main(){ hello(); } jdaniel/hello/hello.h void hello(); jdaniel/hello/hello.cpp $ bii cpp:run HelloBii! #include “hello.h” void hello(){ cout<<“HelloBii!”<<endl; } www.biicode.com Nov-13 Dependencies Graph jdaniel/hello/hello.h void hello(); #include “hello.h” main(){ hello(); } #include “hello.h” void hello(){ cout<<“HelloBii!”<<endl; } jdaniel/hello/main.cpp jdaniel/hello/hello.cpp www.biicode.com Nov-13 Automate Build CMakeLists.txt jdaniel/hello/hello.h ADD_EXECUTABLE(jdaniel_hello main.cpp hello.cpp) void hello(); #include “hello.h” main(){ hello(); } #include “hello.h” void hello(){ cout<<“HelloBii!”<<endl; } jdaniel/hello/main.cpp jdaniel/hello/hello.cpp www.biicode.com Nov-13 Publish $ bii publish tag: STABLE msg: my hello No empaquetado No binarios No librerias No configuration www.biicode.com Nov-13 Reuse & Play lguerrero/chat/chat.h (lguerrero) $ bii new chat #include “jdaniel/hello/hello.h” void chat(){ hello(); hello(); } lguerrero/chat/main.cpp $ bii find $ bii cpp:run HelloBii! HelloBii! #include “chat.h” main(){ chat(); } www.biicode.com Nov-13 Find & Get DEP SRC #include “jdaniel/hello/hello.h” void chat(){ hello(); hello(); } lguerrero/chat/chat.h #include “chat.h” main(){ chat(); } jdaniel/hello/hello.h void hello(); #include “hello.h” void hello(){ cout<<“HelloBii!”<<endl; } jdaniel/hello/hello.cpp lguerrero/chat/main.cpp www.biicode.com Nov-13 CMakeLists.txt Build ADD_LIBRARY(jdaniel_hello hello.cpp) ADD_EXECUTABLE(lguerrero_chat main.cpp) TARGET_LINK_LIBRARIES(lguerrero_chat jdaniel_hello) DEP SRC #include “jdaniel/hello/hello.h” void chat(){ hello(); hello(); } lguerrero/chat/chat.h #include “chat.h” main(){ chat(); } jdaniel/hello/hello.h void hello(); #include “hello.h” void hello(){ cout<<“HelloBii!”<<endl; } jdaniel/hello/hello.cpp lguerrero/chat/main.cpp www.biicode.com Nov-13 Publish $ bii publish www.biicode.com Nov-13 Reuse & Play (mark) $ bii new faisbuk $ bii find $ bii cpp:run HelloBii! HelloBii! #include “lguerrero/chat/chat.h” main(){ chat(); } mark/faisbuk/main.cpp www.biicode.com Nov-13 More sleep #include <google/gtest/gtest.h> www.biicode.com Nov-13 DRY (but not CtrlC, CtrlV) www.biicode.com Nov-13 Dep Versions 0 1 $ bii publish tag: STABLE msg: wow! jdaniel/hello #include “hello.h” void hello(){ cout<<“Bii rocks!”<<endl; } jdaniel/hello/hello.cpp www.biicode.com Nov-13 Update (lguerrero) $ cd chat $ bii find --update $ bii cpp:run Bii rocks! Bii rocks! www.biicode.com Nov-13 Find (rules) default: - block: . - [branch.name == "master" and branch.user == block.user, tag==STABLE, 1] - tag>=ALPHA - v>3 and v<8 - block: “jdaniel/hello” www.biicode.com Nov-13 Compatibility (file level) jdaniel/hello 0 0 1 0 diego/bot lguerrero/chat www.biicode.com Nov-13 CSP (combinatory) M1 Mngr.h (0) M2 Mngr.h (1) #include “Mngr.h” M3 Mngr.h (2) B1 G Pang.h (0) Ball.h (0) B2 Ball.h (1) #include “Ball.h” www.biicode.com Nov-13 Data Files $ bii new hello (src/jdaniel/hello) jdaniel/hello/main.cpp #include “hello.h” main(){ hello(); } jdaniel/hello/hello.h void hello(); jdaniel/hello/hello.txt Hello Bii! jdaniel/hello/hello.cpp $ bii cpp:run > HelloBii! #include “hello.h” //bii://jdaniel/hello/hello.txt void hello(){ f(“jdaniel/hello/hello.txt”)>>msg; cout<<msg<<endl; } www.biicode.com Nov-13 Build Rules $ bii new hello (src/jdaniel/hello) jdaniel/hello/main.cpp #include “hello.h” main(){ hello(); } jdaniel/hello/hello.h void hello(); jdaniel/hello/cpp_rules.bii target.std=“c++11” jdaniel/hello/hello.cpp $ bii cpp:run > HelloBii! #include “hello.h” //bii://jdaniel/hello/cpp_rules.bii void hello(){ auto msg = “HelloBii!”; cout<<msg<<endl; } www.biicode.com Nov-13 Config Rules $ bii new hello (src/jdaniel/hello) jdaniel/hello/nix/hello.cpp #include “hello.h” void hello(){ cout<< “HelloBii *nix!”<<endl; } jdaniel/hello/bii/virtual.bii if os.family != “Windows”: return nix else: return win jdaniel/hello/win/hello.cpp $ bii cpp:run > HelloBii win! #include “hello.h” void hello(){ cout<< “HelloBii win!”<<endl; } www.biicode.com Nov-13 Collaborate (lguerrero) $ cd chat $ bii open jdaniel/hello jdaniel/hello/hello.cpp #include “hello.h” void hello(){ cout<<“Bii super rocks!”<<endl; } $ bii cpp:run Bii super rocks! Bii super rocks! $ bii publish hello branch: newMsg jdaniel/hello ( (jdaniel/master): /master): #1 jdaniel/hello (lguerrero/newmsg): #0 lguerrero/chat www.biicode.com Nov-13 The Web www.biicode.com Nov-13 Real Use Accounting www.biicode.com Nov-13 Current status www.biicode.com Nov-13 Beta 1 month www.biicode.com Nov-13 Roadmap • Private • Accounting • Other languages (Python, Node, Fortran) – “Its kind of loony tunes that PyPI, RubyGems, CPAN, NPM are all separate systems” A. Gaynor (yesterday) • RaspberryPI • Other languages integration(python + c) • Challenges: – Scalability, robustness, security www.biicode.com Nov-13 Community Beta • YES: – Zlib, box2d, little_cms, crypto, freeglut, eigen, csparse, gtest, gmock • NO: – Boost (binary ongoing, git?) – OpenCV (src ongoing) – WxWidgets (binary experimental, src ongoing) • FEW: – Docs, tutorials – Google help – Usability • EXPERIMENTAL: – Merge – Git www.biicode.com Nov-13 Why Biicode? • SOLVE PROBLEMS – 3 hours => 0s for the whole world – Every single file counts • Opportunity to lead the change www.biicode.com Nov-13 Biicode gives back! REVENUE SPLIT $ FREE USERS OPEN SOURCE $€ PREMIUM USERS PROPRIETARY CODE www.biicode.com Nov-13 THANK YOU! www.biicode.com 36 www.biicode.com Nov-13