Personal details

Name: NUEL Guillaume
University: Cryptis ( France, Limoges city )
Course: Computer security
Degree Program: Master
Email: Show email
Homepage: http://immortal-pc.info/
Availability:
I'll work from 9h to 19:30h (maybe later...:p like 3am)
I have exams until May 23.
Since this date to 01 september I will work on GSOC
NOTE: I Have 2 weeks of holiday with my family at these dates:
-> 3 June to 9 June
-> 24 June to 30 June


Educational background

- Homeschooling until University. (I went in england twice for HESFES)
- 3 degree in computer science ( Mathematics and Computer science )
- Algorithms ( B-Tree, red black, ... )
- C, C++
- Maths: algebra, analysis
- Boolean algebra
- Scheme
- DataBase: MySQL, Oracle (PL/SQL)
- Web: PHP, HTML, CSS
- Hardware and Software Architecture
- Unix introduction
- OpenGL
- Design and development of applications. ( I have made a game in SDL/nCurse in 17000 lines (C++, template, socket, svn, doxygen) )
- Network (Cisco router)
- Socket
- Thread/Fork
- Theory of Formal Languages
- Java
- UML
- Optimization
- 1 Year in master in computer security (Cryptis)
- iptables
- Python (Scapy)
- OpenMP and Cuda
- JEE, Maven, jUnit
- Network
- IA
- Cryptology
- DataBase security
- Android
- Actualy: ending my master in computer security

Programming background

Work
01 Jan. 12 - 01 Sept. 12Placement in Yaeco (start-up). ( Lead Developer )
09 May 11 - 29 July 11Placement in INSA ( Lyon )

Achievements
Yaeco: HTML5, CSS3, javascript, jQuery, jQuery UI, Java Applet, C++, Qt
SMTP Class: PHP, OOP, SMTP
PHP Mailing List: PHP, MySQL, TinyMCE, SMTP
QConsole: Begin of terminal for Windows/UNIX - Qt, C++, OOP
Eguida: some PHP
Bomberman: Game, C++, SDL, SDL gfx, SDL ttf, template, network/socket (17 000 lines)
Rootkit: Rootkit.

More information at bitbucket.org/ImmortalPC and at bitbucket.org/DevsOfLegend
See my CV

Why contributing to the Boost C++ Libraries.

My programming style tries to be fast and clean. Boost is fast, clean, have good doc and is quite big !
I'm really interested in parallel programming, so it is natural to want to program a thread pool.
I use a lot the Python multiprocessing lib. And when I need to code in C + +, despite the undeniable power boost, there is no thread pool.

Have you done any previous work in this area before or on similar projects ?

Not. I only coded a basic thread pool.

Plans beyond this Summer.

Making Boost.Thread working faster :D
And I'd love to try to add an overlay with MPI. (Thread across the network.)

Please rate, from 0 to 5 (0 being no experience, 5 being expert), your knowledge of the following languages, technologies, or tools:

C++ -> 5/5
C++ Standard Library -> 4/5
Boost C++ Libraries -> 2.5/5
Subversion/GIT -> 5/5

What software development environments are you most familiar with (Visual Studio, Eclipse, KDevelop, etc.)?

QtCreator (for C, C++), Eclipse (for Java), NetBeans (for JEE), Geany (for all :D)

What software documentation tool are you most familiar with (Doxygen, DocBook, Quickbook, etc.)?

Doxygen

Proposal

Boost.Thread/ThreadPool
Provide a boost::ThreadPool class.

Class Summary:

Features:
- void map(Function fn, {data1,data2,...});
map is a blocking function which call fn(data1), fn(data2), ...
ONE CALL PER parameter
NO return
Ex:


- array<Boost::result_of<Func>>::type map_return( Func& fn, T initializer_list );
map is a blocking function which call fn(data1), fn(data2), ...
ONE CALL PER parameter
AND map return a list of data returned by fn(...);
Ex:


- apply_async:
void apply_async( Function fn );
void apply_async( Function fn, T data );
void apply_async( Function fn, {data1,data2,...});
Nonblocking function.
These functions (fn) will be executed just when when_all or when_any will be called
Ex:


- Priority Tasks:
void ThreadPool_Prioritized::apply_async( uint_16 order, Function fn );
void ThreadPool_Prioritized::apply_async( uint_16 order, Function fn, T data );
void ThreadPool_Prioritized::apply_async( uint_16 order, Function fn, {data1,data2,...});
Ex:


- Future / Schedule execution
Maybe provide a link to Boost.Future:
We consider an execution queue. Note:
add, then, wait_for are nonblocking functions.
when_all, when_any are blocking functions
Ex:
Add somme function like:


- Loop
Provide a loop system to make easier some calcul.
Ex:


- Resize:
Permit to add/remove thread


- Auto detect number of cpus/cores using boost::thread::hardware_concurrency


- Make some fun with Thread across the network.
If I have enough time I will be happy to provide a ThreadPool_Network class: Thread across the network.
If I havn't enough time I will do it after this summer.

Lib to use:
>> Boost.Thread, Mutex
>> Boost.Future [1]
>> Boost.Chrono
>> Boost.Queue
>> Boost.result_of (boost/utility/result_of)
>> std::initializer_list
>> std::array
>> Boost.MPI
Thread across the network.

Important paper:
[0] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3562.pdf
[1] http://www.boost.org/doc/libs/1_53_0/doc/html/thread/synchronization.html
[2] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3558.pdf

Note: I'm an expert in C++ template and have good skills in OpenMP, Cuda.


Millestones and schedule

Week 1:Develop ThreadPool
Week 2:Develop ThreadPool
Week 3:Add tests and optimize
Week 4:Develop ThreadPool
Week 5:Ending ThreadPool & Tests
Week 6:Provide ThreadPool_Prioritized and discuss/provide ThreadPool_Future
Week 7:Add Test for ThreadPool_Prioritized and develop ThreadPool_Future
Week 8:Develop ThreadPool_Futur
Week 9:Develop ThreadPool_Futur
Week 10:Add tests and optimize
Week 11:Provide ThreadPool_Advanced
Week 12:Discuss and provide ThreadPool_Network