Sunday, 18 May 2014

Contributions and personal projects

Hello folks,

In order to provide wider problem solving approaches, new ways for working, professional evolvement ... I think it can be good to do some personal projects and to try to contribute to some open source ones.

In my side, I contribute quite modestly, time in time to Bind 10 Projects (recently renamed to Bundy
due to Kea/Bind10 splitting)

It is a much more modular than Bind 9, and uses C++ instead of C and several third party dependencies like the famous Boost components, Log4cpp, Botan (as encryption provider). It gives me the opportunity to work with very skilled developers. I contribute mostly to Kea, the DHCP4/6 Server. The most significant idea I provided is the PostgreSQL support.

Otherwise, as I m a Robot's hobbyist too, I made a very small project to communicate with RoboBuilder Series via Boost::Asio. Did not update since a certain time by lack of time but can already make the robot moving via serial port... But once again it is just a hobby I m far to be a specialist on robotic :-)

View David Carlier's profile on LinkedIn

Who I am ...

Hello folks,

My name is David Carlier, french citizen. I am a Software developer, since 2001, with quite wide experience in different businesses, topics more or less related to Web development. I actually work for dotMobi in Ireland to various DeviceAtlas products which can be found here :

Mainly, I work on Enterprise APIS for mobile devices detection, the C++ one (and its related web server modules) then some few other versions too. I am not the original creator of the C++ API but mainly I update this one, bring new small features then test it in different environments, different operating systems as well. It is pretty challenging but very interesting.
It is a pretty exciting position as I learn daily new interesting topics, technologies, new approaches to solve engineering problems, new exciting projects to work on ... And so on ...

These are some examples of my past experiences :

- Wrote a C++ application which use Xapian (Search Engine library, like Lucene). As this library is perfectly thread safe (and its methods are reentrant), I could easily and without fear making several Xapian's indexes in parallel from a PostgreSQL database. Making Full text search in the database can be very slow and not enough flexible. Let's say we want to allow the requester to do some typo mistakes or even requests by synonyms ... And to return somehow relevant results. Then a search engine is a better choice. So in the document, alongside with its own Document ID, the database primary key ID one can be stored, then we can easily query the SQL database with it ... The CLucene library (at this time) was not chosen because lack of thread safety,  althought, in general, Lucene is more handy. I did this one for Free SAS.

- Wrote some native PHP modules, the first one was a XMLRPC handling. The famous PHP library was chosen for first. It is a good and workable one, no argument about it. But it is written in pure PHP so the performance was not high when the time to deal with million of requests came. Not to mention the memory allowed which needed to be increased alongside with the requests ... The main goal was to overcome those two issues. So writing a native module crossed my mind ... It was pretty exciting experience, PHP source code is well written and understandable, shipped with many handy functions to deal with internal data types. The only thing I dislike really is the fact that PHP does not distinguish HashTable and Array types (but XMLRPC deals with two different types for it, Struct and Array as mentioned here). It is the same for both and anyway can have both integer and string indexes in same time, while other close programming languages like Python, Ruby and even Perl do not do this mistake. I did it for Free SAS too.
The second is a small sub project made in my actual company which uses smartly the C++ Enterprise API, as the JSON data file is loaded in memory once the PHP module itself is loaded dynamically. An option exists to force the reloading of the JSON file in case it is replaced in the filesystem, otherwise the PHP module itself needs to be reloaded to take this change in count.

- Wrote a Linux/Netfilter/Iptables modules to provide an alternative logic for making new kind of Iptables rules based on it. So far the best programming experience ever until now, dealing with the internal of the kernel, using Netlink to provide communication between the userland iptables application and the kernel ... was very good. The fact it is possible to make a module (instead of updating the code of Netfilter itself) is a very good architecture choice, flexible enough to avoid annoying patches making dependant to any particular kernel version and so on ... If you tend to respect the interface, it works right away. Related to that I provided a similar logic in DNS level with Bind 9. It is not possible to make a module but updating the relevant c files, so no choice, a proper diff file had to be done to a particular Bind 9 version.

- Brought DTrace's support (Solaris/FreeBSD tracing framework, the SystemTap/Linux is compatible too) in the C++ Enterprise API. It is a very good way to monitor some particular points in the application/library lifecycle.
For example PHP supports it,
MySQL too

In the case of the Enterprise API, the user agent used, the cookie content, for example, can be checked independantly easily.
It is a very good and solid tracing component (which can be used to monitor the kernel itself, the system calls and so on...)

- Recently, went deep on Win32 API and its C/C++ functions/methods (with all its specific "oddities")  which I did not know anything about before. With Visual Studio. I am mostly an Unix developer and did not have high opinion about Windows programming but I must admit I have changed a bit my mind about it with the concrete experience. Visual Studio is a huge software to make that possible and easily. MSDN pages are, mostly, well written. But still ... Unix way is my prefered.

I still have some projects/ideas in my mind, one related to FreeBSD, I hope to make some of them concrete. :-)

Just before I forget ;-)

Labels: , , ,

View David Carlier's profile on LinkedIn