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 :
https://www.deviceatlas.com
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 ...
https://deviceatlas.com/resources/enterprise-apis
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 XMLRPC.inc 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
http://www.php.net/manual/en/features.dtrace.dtrace.php,
MySQL too
https://dev.mysql.com/doc/refman/5.5/en/dba-dtrace-mysqld-ref.html
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 ;-)
http://ie.linkedin.com/pub/david-carlier/45/345/434/ Labels: c++ api, david carlier, deviceatlas c++ api, dotmobi