Monday 8th July 2013: 5.22am. Link shared: https://ci.nedprod.com/ Another long weekend. I got a Windows XP unit test slave mostly working on my new cloud node: I configured a copy of Jenkins CI inside an OpenVZ container with the reverse caching proxy varnish (https://www.varnish-cache.org/) fronted by the web server nginx which you can see at https://ci.nedprod.com/. As one of its backends, I have a snapshotted VM running Windows XP with Visual Studio 2010 Express which is rolled back to the snapshot after every test using some cunning AJAX I wrote which uses the Proxmox REST API. ...
Sunday 14th July 2013: 9.05pm. A long but productive week. The documentation for proposed Boost.AFIO is beginning to resemble something approaching final, despite having been a real pain to get working right. Paul continues to do great work in ripping bits out. As Google Summer of Code Milestone 1 is just three weeks away now, the race is on to deliver a peer review ready new Boost library by then. ...
Tuesday 22nd April 2014: 11.44pm. Location: Dromahane. Just finished with Megan the last of the most excellent Yellow Spot to celebrate finishing the first draft of my C++ Now conference paper, and all the coursework for my OU graph algorithms course. It's been a very long and hard month to get this far, but the end is finally coming into sight. Hoorah!#cppnow#boostcpp ...
Monday 28th April 2014: 5.16pm. Just paid $1,566 canadian dollars to the Canadian tax man for my 2013 tax return to pay for the pleasure of being laid off. It was a royal pain in the hole to get that tax return completed - I was missing important documents, which had to get rushed to Megan's parents so they could scan them to me; I was capped at how much moving expenses I could deduct to my Irish 2013 earnings, which were virtually nil, turning my expected refund into a large bill; online submission refused to work, so it was a rush job to the post office today with printed copies which weigh in a 36 pages each (one for me, another for Megan), coupled with a direct bank transfer all of which had to be set up because the Canadian revenue agency make it surprisingly hard to pay taxes - forget about using a credit or debit card, for example. ...
Saturday 3rd May 2014: 3.37pm. One week to go to the C++ Now conference in Aspen, Colorado where I'll be presenting. I have not, as yet:* Completed the academic paper for the proceedings. It has become like a hydra, ever-bloating with yet more information and supporting evidence, having been intended to be ten pages, and now up to nineteen with twenty pages expected. Bleh.* Submitted the new Boost permit object for review. ...
Thursday 8th May 2014: 10.23am. Looks like my talk at C++ Now is going to be even more controversial than originally planned. I've been scraping together my evidence that C++ and especially the Boost libraries are in a terminal decline as part of the rationale on why Boost and C++ needs an embedded graph database in its core runtime, and even I was surprised at how much worse things have become this past year (it's been about a year since I last looked at the empirical numbers). ...
Tuesday 13th May 2014: 4.16pm. Location: Aspen Institute. So the C++ Now conference has begun! My bag remains stuck in Denver which is annoying. Making do with my carry on okay so far. Everything here is covered with snow ... reminds me of Christmas!#cppnow #boostcpp
...
Tuesday 13th May 2014: 10.51pm. Some of the view from the Aspen Institute for Physics which is where the C++ Now conference is held. Quite literally everything was covered with snow only hours beforehand.#cppnow ...
Saturday 17th May 2014: 10.32pm. Location: Aspen Meadows Resort. Link shared: https://docs.google.com/presentation/d/1QgqNU7FMRaYpg6eHdRXU0LwFqMPP9iOkAJKTS1Q3zlg/edit?usp=docslist_api The slides for my presentation at C++ Now today.#cppnow
...
Sunday 20th July 2014: 1.20am. Shortly forthcoming Boost v1.56 is the first source code modularised Boost to be released, and the breakages it has imposed on proposed Boost.AFIO meant I had to throw out the old CI and start from scratch. Below is the new CI test matrix dashboard for AFIO, so far I only have build working, testing is still some way off. Even just to reach building everything including docs and PDFs correctly has taken several weeks of after work time, there was an enormous amount of breakage to work around - quite a lot of Boost is broken in subtle ways too. ...
Thursday 7th May 2015: 4.05pm. Link shared: http://cppnow2015.sched.org/event/37beb4ec955c082f70729e4f6d1a1a05#.VUuMqvkUUuU As part of publicising my C++ Now 2015 talk next week, here is part 1 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:1. CONVENIENCE: Strongly consider using git and GitHub to host a copy of your library and its documentationThere are many source code control systems, with subversion and CVS being the two most recently popular of yesteryear. ...
Thursday 7th May 2015: 4.11pm. Link shared: http://cppnow2015.sched.org/event/37beb4ec955c082f70729e4f6d1a1a05#.VUuMqvkUUuU As part of publicising my C++ Now 2015 talk next week, here is part 2 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:2. COUPLING: Strongly consider versioning your library's namespace using inline namespaces and requesting users to alias a versioned namespace instead of using it directlyC++ 11 adds a new feature called inline namespaces which are far more powerful than they first appear:namespace boost { namespace afio { inline namespace v1 { /* stuff */ } } }// Stuff is generated at the ABI link layer in boost::afio::v1// But to the compiler everything boost::afio::v1::* appears identically in boost::afio::*// INCLUDING for ADL and overload resolution// In other words you can declare your code in boost::afio::v1, and use it as if declared in boost::afio. ...
Friday 8th May 2015: 10.27am. Link shared: http://cppnow2015.sched.org/event/37beb4ec955c082f70729e4f6d1a1a05#.VUuMqvkUUuU As part of publicising my C++ Now 2015 talk next week, here is part 3 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:3. PORTABILITY: Strongly consider trying your library on Microsoft Visual Studio 2015More than half the libraries reviewed had no support for Microsoft Visual Studio, and only supported GCC and clang. When the authors were asked why, in many cases it was simply assumed that MSVC didn't implement much C++ 11/14 and the authors hadn't attempted MSVC support. ...
Saturday 9th May 2015: 12.28am. Link shared: http://cppnow2015.sched.org/event/37beb4ec955c082f70729e4f6d1a1a05#.VUuMqvkUUuU As part of publicising my C++ Now 2015 talk next week, here is part 4 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:4. QUALITY: Strongly consider using free CI per-commit testing, even if you have a private CIDespite that Travis provides free of cost per-commit continuous integration testing for Linux and OS X, and that Appveyor provides the same for Microsoft Windows, there were still libraries in those reviewed which made use of neither and furthermore had no per-commit CI testing whatsoever. ...
Monday 11th May 2015: 6.01pm. Link shared: http://clang-analyzer.llvm.org/scan-build.html As part of publicising my C++ Now 2015 talk next week, here is part 5 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:5. QUALITY: Strongly consider per-commit compiling your code with static analysis toolsIn Travis and Appveyor it is easy to configure a special build job which uses the clang static analyser on Linux/OS X and the MSVC static analyser on Windows. ...
Monday 11th May 2015: 6.05pm. Link shared: http://cppnow2015.sched.org/event/37beb4ec955c082f70729e4f6d1a1a05#.VUuMqvkUUuU As part of publicising my C++ Now 2015 talk next week, here is part 6 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:6. QUALITY/SAFETY: Strongly consider running a per-commit pass of your unit tests under both valgrind and the runtime sanitisersIn Travis it is highly worth adding a special build job which runs your unit tests under:valgrind memcheck (Linux only)This detects illegal reads and writes, use of uninit values, use of unaddressable memory, illegal/double frees, and memory leaks. ...
Monday 11th May 2015: 6.06pm. Link shared: http://llvm.org/docs/LibFuzzer.html As part of publicising my C++ Now 2015 talk next week, here is part 7 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:7. SAFETY: Strongly consider a nightly or weekly input fuzz automated test if your library is able to accept untrusted inputIf your library can consume any form of serialisation or parameters supplied from a network or file or query, including any regular expressions or any type of string even if you don't process it yourself and hand it off to another library, then you need to be doing input fuzz testing for a few hours weekly. ...
Monday 11th May 2015: 6.12pm. Link shared: http://cppnow2015.sched.org/event/37beb4ec955c082f70729e4f6d1a1a05#.VUuMqvkUUuU As part of publicising my C++ Now 2015 talk next week, here is part 8 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:8. DESIGN: (Strongly) consider using constexpr semantic wrapper transport types to return states from functionsThanks to constexpr and rvalue refs, C++ 11 codebases have much superior ways of returning states from functions. ...
Tuesday 12th May 2015: 5.46pm. Link shared: https://github.com/boostorg/test As part of publicising my C++ Now 2015 talk next week, here is part 9 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:9. MAINTENANCE: Consider making it possible to use an XML outputting unit testing framework, even if not enabled by defaultA very noticeable trend in the libraries reviewed above is that around half use good old C assert() and static_assert() instead of a unit testing framework. ...
Tuesday 12th May 2015: 5.49pm. Link shared: http://ispras.linuxbase.org/index.php/API_Sanity_Autotest As part of publicising my C++ Now 2015 talk next week, here is part 10 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:10. DESIGN/QUALITY: Consider breaking up your testing into per-commit CI testing, 24 hour soak testing, and parameter fuzz testingWhen a library is small, you can generally get away with running all tests per commit, and as that is easier that is usually what one does. ...
Wednesday 13th May 2015: 11.10pm. Link shared: https://github.com/ned14/Boost.APIBind/blob/master/include/cpp_feature.h As part of publicising my C++ Now 2015 talk this week, here is part 11 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:11. PORTABILITY: Consider not doing compiler feature detection yourselfSomething extremely noticeable about nearly all the reviewed C++ 11/14 libraries is that they manually do compiler feature detection in their config.hpp, usually via old fashioned compiler version checking. ...
Wednesday 13th May 2015: 11.12pm. Link shared: https://coveralls.io/r/krzysztof-jusiak/di?branch=cpp14 As part of publicising my C++ Now 2015 talk this week, here is part 12 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:12. CONVENIENCE: Consider having Travis send your unit test code coverage results to Coveralls.ioThere is quite a neat web service called coveralls.io free for open source projects which graphically displays unit test line coverage in a pretty colour coded source code browser UI. ...
Thursday 14th May 2015: 9.13pm. Link shared: https://boostgsoc13.github.io/boost.afio As part of publicising my C++ Now 2015 talk this week, here is part 13 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:13. CONVENIENCE: Consider creating a status dashboard for your library with everything you need to know shown in one placeI like all-in-one-place software status dashboards where with a quick glance one can tell if there is a problem or not. ...
Friday 15th May 2015: 4.23pm. Link shared: https://en.wikipedia.org/wiki/Policy-based_design As part of publicising my C++ Now 2015 talk this week, here is part 14 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:14. DESIGN: Consider making (more) use of ADL C++ namespace composure as a design patternMost C++ programmers are aware of C++ template policy based design. This example is taken from https://en.wikipedia.org/wiki/Policy-based_design:#include <iostream>#include <string> template <typename OutputPolicy, typename LanguagePolicy>class HelloWorld : private OutputPolicy, private LanguagePolicy{ using OutputPolicy::print; using LanguagePolicy::message; public: // Behaviour method void run() const { // Two policy methods print(message()); }}; class OutputPolicyWriteToCout{protected: template<typename MessageType> void print(MessageType const &message) const { std::cout << message << std::endl; }}; class LanguagePolicyEnglish{protected: std::string message() const { return " ...
Tuesday 19th May 2015: 5.00pm. Link shared: https://github.com/sakra/cotire As part of publicising my C++ Now 2015 talk last week, here is part 15 of 20 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:15. BUILD: Consider defaulting to header only, but actively manage facilities for reducing build timesMaking your library header only is incredibly convenient for your users - they simply drop in a copy of your project and get to work, no build system worries. ...
Thursday 28th May 2015: 6.22pm. Link shared: https://github.com/BoostGSoC13/boost.afio/blob/master/include/boost/afio/config.hpp As part of publicising my C++ Now 2015 talk two weeks ago, here is part 16 of 19 from its accompanying Handbook of Examples of Best Practice for C++ 11/14 (Boost) libraries:16. COUPLING: Consider allowing your library users to dependency inject your dependencies on other librariesAs mentioned earlier, the libraries reviewed overwhelmingly chose to use STL11 over any equivalent Boost libraries, so hardcoded std::thread instead of boost::thread, hardcoded std::shared_ptr over boost::shared_ptr and so on. ...
Saturday 9th April 2016: 7.33am. Link shared: http://accu.org/index.php/conferences/accu_conference_2016/accu2016_sessions#Distributed_Mutual_Exclusion_using_Proposed_Boost.AFIO_(asynchronous_filesystem_and_file_io) The ACCU conference is only ten days away! Proposed Boost.AFIO v2, which I'll be presenting for the first time at ACCU, has the functionality I'm presenting written as of yesterday but it most definitely is not working - as the final part I added all required itself to work, I spent two weeks writing code, only checking to see if it compiles, not if it works until now so I have a raft of debugging to do this weekend. ...
Contact the webmaster: Niall Douglas @ webmaster2<at symbol>nedprod.com
(Last updated: 2016-04-09 07:33:58 +0000 UTC)