Friday 3rd May 2013: 5.05am. It's 1.02am and I just nailed a memory corruption bug in my async file i/o library which I've submitted to Google Summer of Code 2013 as a proposed new Boost library (turns out you must be careful of overriding Boost macro defaults). Was up till 1.24am last night getting a clean compile on GCC 4.6, 4.7, 4.8 and clang 3.2 on ARM. Student coding test example solution is finished and working. ...
Sunday 12th May 2013: 5.06pm. Link shared: https://maps.google.com/maps?q=Aspen+Meadows+Resort,+Meadows+Road,+Aspen,+CO&hl=en&sll=39.185034,-106.821957&sspn=0.062403,0.110378&oq=aspen+meadow&hq=Aspen+Meadows+Resort,+Meadows+Road,+Aspen,+CO&t=m&z=14&source=gplus-ogsb Currently in Aspen Meadows, Colorado for the C++ Now 2013 conference. Never been into the Rockie Mountains before, always was either on one side or the other looking up at them rather than being surrounded by them. Scenic place this, albeit highly manufactured. Pricey too - before joining BlackBerry I wouldn't have been able to justify the expense, but now after ten days of exhaustion with Boost GSoC, the UW research retreat on alternatives to growth, plus of course a full BlackBerry workload, well yeah I'm taking today off. ...
Sunday 12th May 2013: 5.06pm. Link shared: https://maps.google.com/maps?q=Aspen+Meadows+Resort,+Meadows+Road,+Aspen,+CO&hl=en&sll=39.185034,-106.821957&sspn=0.062403,0.110378&oq=aspen+meadow&hq=Aspen+Meadows+Resort,+Meadows+Road,+Aspen,+CO&t=m&z=14&source=gplus-ogsb Currently in Aspen Meadows, Colorado for the C++ Now 2013 conference. Never been into the Rockie Mountains before, always was either on one side or the other looking up at them rather than being surrounded by them. Scenic place this, albeit highly manufactured. Pricey too - before joining BlackBerry I wouldn't have been able to justify the expense, but now after ten days of exhaustion with Boost GSoC, the UW research retreat on alternatives to growth, plus of course a full BlackBerry workload, well yeah I'm taking today off. ...
Friday 17th May 2013: 5.50am. Location: Aspen Meadows Resort. For me C++ Now 2013 is over as I fly onto Megan's school reunion in Culver early tomorrow morning. What a conference! Am extremely drained though. Could have done with an extra day of doing nothing after really to recover.#c++now #c++ #boost #boostcon
...
Friday 17th May 2013: 5.50am. Location: Aspen Meadows Resort. For me C++ Now 2013 is over as I fly onto Megan's school reunion in Culver early tomorrow morning. What a conference! Am extremely drained though. Could have done with an extra day of doing nothing after really to recover.#c++now #c++ #boost #boostcon
...
Sunday 2nd June 2013: 12.02am. Link shared: https://developers.google.com/open-source/soc/ I guess it's now safe to announce that I have been appointed by Google as a Google Summer of Code 2013 mentor for two Boost C++ libraries, proposed Boost.AFIO (asynchronous file i/o support for C++) and proposed Boost.Trie (a prefix tree indexed STL C++ container). Both of these GSoC projects will be of immense benefit to the C++ ecosystem for all C++ users, and stand as strong candidates for future incorporation into a future ISO C++ language standard. ...
Sunday 2nd June 2013: 9.10pm. Link shared: https://travis-ci.org/ned14/TripleGit In preparation for Paul to start work next week on his GSoC project of porting my code to Boost, I've been fixing up my code with Continuous Integration (for every change you commit a bot runs a full set of unit tests to ensure everything works) using the free-for-open source Travis CI.I have to say, I have been impressed with Travis CI: despite its clunky UI and less than great reporting, it's far more powerful than the CI we use in BlackBerry. ...
Monday 3rd June 2013: 3.23pm. Link shared: http://isocpp.org/blog/2013/05/gcc-4.8.1-released-c11-feature-complete Big week for C++ heads this: no less than two C++11 language complete compiler implementations will be released in the form of GCC 4.8.1 and clang 3.3. Now all we need is for the standard libraries and Visual Studio to catch up ... Dinkumware's STL has every C++11 feature I've reached for so far, alas libstdc++ is missing many bits of extremely vital functionality. ...
Monday 3rd June 2013: 3.23pm. Link shared: http://isocpp.org/blog/2013/05/gcc-4.8.1-released-c11-feature-complete Big week for C++ heads this: no less than two C++11 language complete compiler implementations will be released in the form of GCC 4.8.1 and clang 3.3. Now all we need is for the standard libraries and Visual Studio to catch up ... Dinkumware's STL has every C++11 feature I've reached for so far, alas libstdc++ is missing many bits of extremely vital functionality. ...
Tuesday 11th June 2013: 3.02pm. It's very rare I can show and tell anything from my work at BlackBerry, but I think this will be safe enough: this is the 29,554 functions of code which make up the rendering of an email by the BB10 Cascades Email Card with arrowed lines drawn between them showing which calls which, arranged using a repulsing gravity equation such that most interconnected items cluster while less connected items push apart. ...
Thursday 13th June 2013: 4.05am. Link shared: https://github.com/BoostGSoC/boost.afio/tree/pre_boost_import My async file i/o library is done! Feature complete, valgrind clean, 90% unit test coverage. Paul now has a free run for GSoC Boost.AFIO!#boostcon #gsoc2013 #gsoc #boost #c++ ...
Friday 14th June 2013: 4.56am. Location: Waterloo, Ontario. It's a bit late for a Thursday, but we spent the evening celebrating the completion and hand off to GSoC of that software library I've been writing after work every day for the past four months. Going to take a week of evenings off before returning to the Google Summer of Code grindstone. Besides, it's all on the poor student now. It'll be real tough learning curve climb next two weeks especially, so I'll need to be quick on answering the email! ...
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 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. ...
Monday 21st July 2014: 10.54am. Link shared: https://careers.stackoverflow.com/jobs/62621/remote-c-plus-plus-11-14-open-source-software-engineer-maidsafe Job going with my current employer: https://careers.stackoverflow.com/jobs/62621/remote-c-plus-plus-11-14-open-source-software-engineer-maidsafe. There is an interesting story about that format of job advert actually (i.e. one where you are asked to send a list of URLs pointing to evidence to a series of questions about your history in open source, nothing else requested) - I originally pushed that idea whilst at BlackBerry as a way of fully automating via scripts the early stages of recruitment, and thus saving an enormous amount of otherwise wasted engineering time in filtering out the 80% of total time wasters and preventing HR from filtering out some of the really good candidates with unconventional backgrounds. ...
Wednesday 30th July 2014: 11.08pm. Link shared: http://boost.2283326.n4.nabble.com/Request-for-feedback-on-design-of-concurrent-unordered-map-plus-notes-on-use-of-memory-transactions-td4665594.html Realised earlier tonight that the design for a concurrent_unordered_map which I posted to http://boost.2283326.n4.nabble.com/Request-for-feedback-on-design-of-concurrent-unordered-map-plus-notes-on-use-of-memory-transactions-td4665594.html is flawed in two ways: (i) references could invalidate during inserts if the load factor was high, which makes concurrent use hard (ii) I couldn't make rehashing meet the Abrahams exception guarantees. Which is probably why unordered_map always uses malloc to store objects, and which drove a stake through my own attempt to avoid malloc :(So, restoring malloc in there has had obvious severe consequences to performance. ...
Sunday 3rd August 2014: 1.54am. It's taken four weekends of effort to get that (almost) sea of green for the newly rebuilt CI for the newly modularised proposed Boost.AFIO as the modularisation broke the old CI config so badly I decided I might as well begin afresh with a much more orchestrated and scripted automation. I've learned an enormous amount about modularised Boost, Jenkins and how clang 3.4 simply does not produce actually working C++ executables on ARMv7 - yes, 3. ...
Friday 12th December 2014: 3.15am. Location: Dromahane. Last day of work for me in 2014 is tomorrow, and this Monday we depart to the States for Christmas. Despite not getting many paid hours in these last few weeks (Megan is sick so I get extra Clara duty, and I'm not feeling particularly well myself either, I have a sore throat and I haven't been able to breath well through my nose for some weeks), I raised a comprehensive build test matrix for Boost Thread this week. ...
Tuesday 3rd March 2015: 1.30pm. Woke up after particularly little sleep last night to find a sea of green on the AFIO CI dashboard as you can see below (yes, the number of test targets is very considerably higher now, plus there is now official support for Apple OS X/iOS and Android). Which was a surprise actually. Megan returned to work four weeks ago now, and I was supposed to have shipped AFIO v1. ...
Monday 16th March 2015: 6.57am. Six weeks have now passed with me staying up till 5am each night on top of the day job working on proposed Boost AFIO to finish it to a release quality for the v1.3 release. Probably 200 extra hours invested or so now on what was supposed to be almost ready to go, absolutely crazy. I had originally thought maybe a week or two maximum so get it out the door, I was in fact very wrong. ...
Sunday 3rd May 2015: 3.35am. Just finished my C++ Now 2015 presentation with exactly one week to go! Currently 90 slides for a 90 minute long presentation, I had originally been worried I'd be boring but I think, even if I do say so myself, that this will be one of the more interesting talks at C++ Now this year. It reviews ten C++ 11/14 only libraries close to entering Boost, three of which in detail (Boost. ...
Sunday 3rd May 2015: 3.35am. Just finished my C++ Now 2015 presentation with exactly one week to go! Currently 90 slides for a 90 minute long presentation, I had originally been worried I'd be boring but I think, even if I do say so myself, that this will be one of the more interesting talks at C++ Now this year. It reviews ten C++ 11/14 only libraries close to entering Boost, three of which in detail (Boost. ...
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.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.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. ...
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. ...
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. ...
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. ...
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. ...
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. ...
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.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.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.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.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.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.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. ...
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. ...
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.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.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. ...
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. ...
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.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.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. ...
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. ...
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. ...
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. ...
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 " ...
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 " ...
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. ...
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. ...
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. ...
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. ...
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. ...
Friday 12th June 2015: 12.11pm. As some may know, I've been working on the world's simplest C++ runtime monad these past two weeks, where most of that effort is being spent on getting it to STL quality with a full conformance and validation unit test suite. The hope is that this will become the official Boost monad, and thereafter the monad proposed for standardisation. Unlike any other C++ monad that I am aware of, this design focuses on:(i) Absolute minimum possible impact on build times and especially runtime overhead. ...
Friday 12th June 2015: 12.11pm. As some may know, I've been working on the world's simplest C++ runtime monad these past two weeks, where most of that effort is being spent on getting it to STL quality with a full conformance and validation unit test suite. The hope is that this will become the official Boost monad, and thereafter the monad proposed for standardisation. Unlike any other C++ monad that I am aware of, this design focuses on:(i) Absolute minimum possible impact on build times and especially runtime overhead. ...
Friday 12th June 2015: 12.12pm. As some may know, I've been working on the world's simplest C++ runtime monad these past two weeks, where most of that effort is being spent on getting it to STL quality with a full conformance and validation unit test suite. The hope is that this will become the official Boost monad, and thereafter the monad proposed for standardisation. Unlike any other C++ monad that I am aware of, this design focuses on:(i) Absolute minimum possible impact on build times and especially runtime overhead. ...
Friday 12th June 2015: 12.12pm. As some may know, I've been working on the world's simplest C++ runtime monad these past two weeks, where most of that effort is being spent on getting it to STL quality with a full conformance and validation unit test suite. The hope is that this will become the official Boost monad, and thereafter the monad proposed for standardisation. Unlike any other C++ monad that I am aware of, this design focuses on:(i) Absolute minimum possible impact on build times and especially runtime overhead. ...
Saturday 13th June 2015: 4.02am. Link shared: http://melpon.org/wandbox/permlink/M6Cn87YHamdymHWE As much as I only just said earlier today that my world's simplest C++ monad was going to be obsessive about keeping build times low and therefore avoiding all metaprogramming, there is one niche area where heavy metaprogramming makes a lot of sense: the monadic bind and map operations. Under the "you only pay for what you use" principle, if you are using those monadic programming operations it means you accept substantial build time costs over doing the same operations manually by hand. ...
Saturday 13th June 2015: 4.02am. Link shared: http://melpon.org/wandbox/permlink/M6Cn87YHamdymHWE As much as I only just said earlier today that my world's simplest C++ monad was going to be obsessive about keeping build times low and therefore avoiding all metaprogramming, there is one niche area where heavy metaprogramming makes a lot of sense: the monadic bind and map operations. Under the "you only pay for what you use" principle, if you are using those monadic programming operations it means you accept substantial build time costs over doing the same operations manually by hand. ...
Saturday 13th June 2015: 4.02am. Link shared: http://melpon.org/wandbox/permlink/M6Cn87YHamdymHWE As much as I only just said earlier today that my world's simplest C++ monad was going to be obsessive about keeping build times low and therefore avoiding all metaprogramming, there is one niche area where heavy metaprogramming makes a lot of sense: the monadic bind and map operations. Under the "you only pay for what you use" principle, if you are using those monadic programming operations it means you accept substantial build time costs over doing the same operations manually by hand. ...
Saturday 13th June 2015: 4.02am. Link shared: http://melpon.org/wandbox/permlink/M6Cn87YHamdymHWE As much as I only just said earlier today that my world's simplest C++ monad was going to be obsessive about keeping build times low and therefore avoiding all metaprogramming, there is one niche area where heavy metaprogramming makes a lot of sense: the monadic bind and map operations. Under the "you only pay for what you use" principle, if you are using those monadic programming operations it means you accept substantial build time costs over doing the same operations manually by hand. ...
Friday 19th June 2015: 11.31pm. Link shared: http://boost.2283326.n4.nabble.com/next-gen-futures-Lightweight-monad-ready-for-inspection-td4677322.html My lightweight very simple single purpose monad has been sent to boost-dev for community feedback http://boost.2283326.n4.nabble.com/next-gen-futures-Lightweight-monad-ready-for-inspection-td4677322.html.This monad can hold a fixed variant list of empty, a type R, a lightweight error_type or a heavier exception_type at a space cost of max(20, sizeof(R)+4). Features: * Very lightweight on build times and run times up to the point of zero execution cost and just a four byte space overhead. ...
Friday 19th June 2015: 11.31pm. Link shared: http://boost.2283326.n4.nabble.com/next-gen-futures-Lightweight-monad-ready-for-inspection-td4677322.html My lightweight very simple single purpose monad has been sent to boost-dev for community feedback http://boost.2283326.n4.nabble.com/next-gen-futures-Lightweight-monad-ready-for-inspection-td4677322.html.This monad can hold a fixed variant list of empty, a type R, a lightweight error_type or a heavier exception_type at a space cost of max(20, sizeof(R)+4). Features: * Very lightweight on build times and run times up to the point of zero execution cost and just a four byte space overhead. ...
Friday 19th June 2015: 11.31pm. Link shared: http://boost.2283326.n4.nabble.com/next-gen-futures-Lightweight-monad-ready-for-inspection-td4677322.html My lightweight very simple single purpose monad has been sent to boost-dev for community feedback http://boost.2283326.n4.nabble.com/next-gen-futures-Lightweight-monad-ready-for-inspection-td4677322.html.This monad can hold a fixed variant list of empty, a type R, a lightweight error_type or a heavier exception_type at a space cost of max(20, sizeof(R)+4). Features: * Very lightweight on build times and run times up to the point of zero execution cost and just a four byte space overhead. ...
Friday 19th June 2015: 11.31pm. Link shared: http://boost.2283326.n4.nabble.com/next-gen-futures-Lightweight-monad-ready-for-inspection-td4677322.html My lightweight very simple single purpose monad has been sent to boost-dev for community feedback http://boost.2283326.n4.nabble.com/next-gen-futures-Lightweight-monad-ready-for-inspection-td4677322.html.This monad can hold a fixed variant list of empty, a type R, a lightweight error_type or a heavier exception_type at a space cost of max(20, sizeof(R)+4). Features: * Very lightweight on build times and run times up to the point of zero execution cost and just a four byte space overhead. ...
Sunday 28th June 2015: 3.10am. Link shared: https://ci.nedprod.com/view/Boost%20Thread-Expected-Permit/job/Boost.Spinlock%20Test%20Linux%20GCC%204.8/doxygen/classboost_1_1spinlock_1_1lightweight__futures_1_1basic__future.html Some preliminary results from my lightweight non-allocating promise-futures which are heading towards Boost later this month as compared to STL promise-futures:All values are CPU cycles on a i7-3770K @ 3.9Ghz.## clang 3.7:### libstdc++ 4.9 future promise:Simple loop: 761Producer Consumer: 838 Creation and setting: 674 Getting from future: 160 Destruction of future: 4### lightweight future promise:Simple loop: 260Producer Consumer: 378 (2.22x faster) Creation and setting: 281 Getting from future: 51 Destruction of future: 46## GCC 5. ...
Sunday 28th June 2015: 3.10am. Link shared: https://ci.nedprod.com/view/Boost%20Thread-Expected-Permit/job/Boost.Spinlock%20Test%20Linux%20GCC%204.8/doxygen/classboost_1_1spinlock_1_1lightweight__futures_1_1basic__future.html Some preliminary results from my lightweight non-allocating promise-futures which are heading towards Boost later this month as compared to STL promise-futures:All values are CPU cycles on a i7-3770K @ 3.9Ghz.## clang 3.7:### libstdc++ 4.9 future promise:Simple loop: 761Producer Consumer: 838 Creation and setting: 674 Getting from future: 160 Destruction of future: 4### lightweight future promise:Simple loop: 260Producer Consumer: 378 (2.22x faster) Creation and setting: 281 Getting from future: 51 Destruction of future: 46## GCC 5. ...
Tuesday 30th June 2015: 2.47pm. Link shared: https://github.com/ned14/boost.spinlock/blob/master/Readme.md I have the first set of benchmarks for lightweight non-allocating monadic futures ready which are 98% compliant with the forthcoming ISO Concurrency TS for C++1z (essentially they are missing std::allocator support for obvious reasons). They aren't final, but they are representative of what to expect as compared to the STL future-promise. Note these futures are configured with a superset of the facilities of STL future-promise, so you have all your monadic programming goodness in there as a lightweight future inherits from basic_monad plus you can transport error_code as well as exception_ptr:clang 3. ...
Tuesday 30th June 2015: 2.47pm. Link shared: https://github.com/ned14/boost.spinlock/blob/master/Readme.md I have the first set of benchmarks for lightweight non-allocating monadic futures ready which are 98% compliant with the forthcoming ISO Concurrency TS for C++1z (essentially they are missing std::allocator support for obvious reasons). They aren't final, but they are representative of what to expect as compared to the STL future-promise. Note these futures are configured with a superset of the facilities of STL future-promise, so you have all your monadic programming goodness in there as a lightweight future inherits from basic_monad plus you can transport error_code as well as exception_ptr:clang 3. ...
Wednesday 8th July 2015: 12.42pm. As lightweight C++ futures have matured it became painfully obvious that a ground up refactor of its design was required. The code base until very recently employed lots of "safe" undefined behaviour to save me writing code to deal with future to shared_future conversion etc, and of course making use of undefined behaviour always produces faster code, so specifically speaking what I was doing was to use reinterpret_cast to have the compiler not concern itself with whether the future the promise was talking to was really a future or a shared_future state. ...
Wednesday 14th October 2015: 10.52am. CppCon videos are up, and here is mine on Racing the File System which is a beginner's level workshop on race free filing system techniques leading up to proposed Boost.AFIO, an asynchronous file and race free filesystem library for C++. As much as it's "beginner's level", it's more really "from first principles", so it gets into more interesting stuff by the end including the transactional key-value store I'd like to be standardised into the C++ runtime based on AFIO. ...
Monday 8th February 2016: 12.30am. Link shared: https://github.com/BoostGSoC13/boost.afio/tree/master/fs_probe I reached a major milestone in the post peer review Boost.AFIO v2 rewrite today which has consumed most of my free time since November: it now has working Windows and POSIX AIO async file i/o backends with file open, close, clone, scatter-gather read/writes and truncate implemented, so a long, long way still from AFIO v1's comprehensive facilities but still an achievement. The POSIX AIO backend is 100% pure, and so therefore has awful performance because POSIX AIO has a terrible design, but it does work on FreeBSD and Linux without surprises and the storage profile probing yielded many interesting answers to long standing questions about concurrent file i/o atomicity which are now answering the many questions about this on Stackoverflow. ...
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. ...
Friday 15th April 2016: 10.47pm. Employment is on pause from now until I present proposed Boost.AFIO v2 for the first time at the ACCU conference next week. I'm up in Bristol 2 room, Thursday at 11am! The distributed mutual exclusion file system algorithm I'm presenting is completed, the slides have proved to be a bit of a bear though, can't get the structure to where I'm happy with it.#boostafio #boostcpp #c++ #accu ...
Thursday 26th May 2016: 8.20am. Link shared: http://melpon.org/wandbox/permlink/4rJCUypvBbGGFTqx I'm not a natural C++ metaprogrammer, so it took me two mornings before work to come up with this of which I am quite proud:```#include <stdio.h>#include <string>template <class... Args> struct Foo {};template <class T, class... Args> struct Foo<T, Args...> { T v; Foo<Args...> rest;};template <class T> struct Foo<T> { T v; };namespace detail {template <size_t N, class T, class... Args> struct getFoo { constexpr auto operator()(const Foo<T, Args. ...
Monday 13th March 2017: 6.11pm. Link shared: https://www.reddit.com/r/cpp/comments/5z5r5i/boostoutcome_is_finished_boost_review_manager/?ref=share&ref_source=link One of those big ol personally momentus days today. In the wee small hours last night shivering in Clara's bedroom as I'd stayed there working on the laptop after putting her to bed and it got cold, I finally delivered my Outcome library to Boost peer review. That library has taken me two years of my free time to write, and a never ending long tail of incredibly boring minute detail over the past four months or so to actually deliver the thing. ...
Saturday 3rd June 2017: 9.45pm. The peer review of my proposed Boost.Outcome library ended yesterday after being extended to two weeks to allow more discussion. Some 732 emails were sent on the topic, one of the most vigorous debates on boost-dev in many years, and a very highly productive one I think despite that we did not find consensus.#boostcpp #c++ #boost-outcome
...
Wednesday 7th June 2017: 8.24am. Link shared: http://boost.2283326.n4.nabble.com/review-Outcome-Review-Report-tt4695267.html My proposed Boost.Outcome library's review report: http://boost.2283326.n4.nabble.com/review-Outcome-Review-Report-tt4695267.html. It was rejected after one of the lengthiest reviews in many years. Lots of good feedback on how it ought to look. #boostcpp #c++ #boost-outcome
...
Thursday 13th September 2018: 6.17pm. Link shared: https://www.meetup.com/cppdug/events/254149655/ I'll be speaking at the C++ users group Dublin this coming Monday 17th September. Entire evening will be just me, 90 minutes, no other speakers. I just finished the slides for the talk just there, it shouldn't be too boring for folk hopefully. And it's the only talk I'll give in all of 2018, usually I speak twice a year at conferences, but this year has been unusually quiet for me. ...
Contact the webmaster: Niall Douglas @ webmaster2<at symbol>nedprod.com
(Last updated: 2018-09-13 18:17:34 +0000 UTC)