Jekyll2022-12-22T17:08:08+00:00https://claremacrae.co.uk//feed.xmlClare MacraeClare Macraeclare@claremacrae.co.ukApproval Tests Training Course (1st July 2021)2021-06-22T00:00:00+00:002021-06-22T00:00:00+00:00https://claremacrae.co.uk//blog/2021/06/approvaltests-training-course<h2 id="details">Details</h2>
<p>I’m excited to be offering this practical one-day hands-on workshop as part of C++ on Sea 2021.</p>
<table>
<thead>
<tr>
<th>Course:</th>
<th>Testing Legacy C++ Code effectively with Approval Tests</th>
</tr>
</thead>
<tbody>
<tr>
<td>Date:</td>
<td>Thursday, 1st July 2021: 10:30-19:15 BST</td>
</tr>
<tr>
<td>Venue:</td>
<td>Online, at C++ on Sea</td>
</tr>
<tr>
<td>Booking:</td>
<td><a href="https://cpponsea.uk/tickets/">Register here</a> - and use the discount code <strong>SPEAKER21_10</strong> for <strong>10% off</strong></td>
</tr>
<tr>
<td>Further Info:</td>
<td>See the <a href="https://cpponsea.uk/2021/sessions/workshop_testing-legacy-cpp-code-effectively-with-approval-tests.html">conference website</a>.</td>
</tr>
</tbody>
</table>
<p>Read on for details, and what you’ll learn fom the course.</p>
<h2 id="a-different-type-of-course">A different type of course</h2>
<p><img src="/images/approval_tests_course_2020_09/course.quote.png" alt="Quote" /></p>
<p><img src="/images/approval_tests_course_2020_09/course.structure.png" alt="Course Structure" /></p>
<h2 id="what-the-course-offers">What the course offers</h2>
<p><img src="/images/approval_tests_course_2020_09/course.intent.png" alt="Intent" /></p>
<p>You’ve inherited some legacy code: it’s valuable, but it doesn’t have tests, and it wasn’t designed to be testable, so you need to start refactoring. But you can’t refactor safely until the code has tests, and you can’t add tests without refactoring! How can you ever break out of this loop?</p>
<p>Whether Legacy code for you means “old code”, “code without tests”, or “code you wish to redesign for new features or unit-tests”, this workshop will enable you to become productive and work safely, quickly.</p>
<p>In this hands-on workshop, you will learn not just how to use Approval Tests to start testing legacy code, but how to create effective, maintainable, expressive tests, even on large systems.</p>
<p><img src="/images/approval_tests_course_2020_09/course.skills.png" alt="Skills" /></p>
<h2 id="instructor-clare-macrae">Instructor: Clare Macrae</h2>
<p>Clare is the co-author of Approval Tests for C++, and an experienced speaker and trainer on working effectively with legacy code.</p>
<ul>
<li>Twitter: <a href="https://twitter.com/ClareMacraeUK">@ClareMacraeUK</a></li>
<li><a href="https://claremacrae.co.uk/blog/">Blog</a></li>
<li><a href="https://www.youtube.com/playlist?list=PLoe3M-5Wdtgzzw7J-owNzk2vFOwTO8VtF">YouTube</a></li>
</ul>
<h3 id="course-co-creator-llewellyn-falco">Course co-creator: Llewellyn Falco</h3>
<p>Course material produced in collaboration with Llewellyn Falco:</p>
<ul>
<li>Twitter: <a href="https://twitter.com/LlewellynFalco">@LlewellynFalco</a></li>
<li><a href="http://llewellynfalco.blogspot.com/p/infographics.html">Blog</a></li>
<li><a href="https://www.youtube.com/user/isidoreus/videos">YouTube</a></li>
</ul>Clare Macraeclare@claremacrae.co.ukHands-on workshop, learning to use Approval Tests on legacy code for effective, maintainable, expressive tests even on large systems - with discount code for 10% off registrationJetBrains CLion Webinar: Video, Code and Slides2021-02-16T00:00:00+00:002021-02-16T00:00:00+00:00https://claremacrae.co.uk//blog/2021/02/clion-webinar-code-and-slides<h2 id="testing-code-in-clion">Testing code in CLion</h2>
<p>Today I gave my webinar demo of adding tests un-tested code in CLion, with Catch2 and Approval Tests.</p>
<p>As ever, although I find that writing talks and demos takes me longer than I expect, I learn plenty doing the preparation, so the time pays off.</p>
<p>I had a mix of demo and slides: there’s always so much that I want to say in talks, and never enough time, but I really enjoyed the experience, and am grateful for the invitation.</p>
<h2 id="video-and-slides">Video and Slides</h2>
<p><img src="/images/JetBrainsCLionWebinarSlides.png" alt="Image of first slide" /></p>
<ul>
<li><a href="https://www.youtube.com/watch?v=w2CzYK5ZJys">Recording on YouTube</a></li>
<li><a href="https://blog.jetbrains.com/clion/2021/02/testing-superpowers-webinar-recording/">JetBrains Blog Post</a>, with timings, and links to other useful resources</li>
<li><a href="https://www.slideshare.net/ClareMacrae/testing-superpowers-using-clion-to-add-tests-easily">Slides on SlideShare</a></li>
</ul>
<h2 id="overview">Overview</h2>
<p>I covered these broad topics:</p>
<ul>
<li>Testing with Catch2</li>
<li>Testing with Approval Tests</li>
<li>Using Code Coverage tools to improve the tests</li>
<li>Improving the tests, with Combination Approvals</li>
<li>CLion testing tips</li>
</ul>
<h2 id="the-code">The Code</h2>
<p>The code is in <a href="https://github.com/claremacrae/commandline-videostore-cpp">my fork</a> of Arne Mertz’s <a href="https://github.com/arnemertz/commandline-videostore-cpp">commandline-videostore-cpp</a>.</p>
<p>I’ve added a bunch of useful links and credits to its <a href="https://github.com/claremacrae/commandline-videostore-cpp/blob/starting-point/README.md">README</a>.</p>
<p>The <strong>branches</strong> for today’s talk are:</p>
<ul>
<li><strong><a href="https://github.com/claremacrae/commandline-videostore-cpp/tree/starting-point">starting-point</a></strong>
<ul>
<li>with the original code, and checklist which can be used to try it out at home</li>
</ul>
</li>
<li><strong><a href="https://github.com/claremacrae/commandline-videostore-cpp/tree/webinar">webinar</a></strong>
<ul>
<li>with the <a href="https://github.com/claremacrae/commandline-videostore-cpp/compare/starting-point...claremacrae:webinar?expand=1">changes made during the webinar</a>. Scroll down to see the files add, and changes made</li>
</ul>
</li>
<li><strong><a href="https://github.com/claremacrae/commandline-videostore-cpp/tree/complete-run">complete-run</a></strong>
<ul>
<li>with the <a href="https://github.com/claremacrae/commandline-videostore-cpp/compare/starting-point...claremacrae:complete-run?expand=1">completed changes</a>, demoed at the end of the webinar. Scroll down to see the files add, and changes made</li>
</ul>
</li>
</ul>Clare Macraeclare@claremacrae.co.ukNotes from today's CLion webinar for JetBrainsJetBrains Webinar: Testing Superpowers: Using CLion to add tests easily2021-01-29T00:00:00+00:002021-01-29T00:00:00+00:00https://claremacrae.co.uk//blog/2021/01/clion-webinar<h2 id="testing-code-in-clion">Testing code in CLion</h2>
<p>I’ve been invited by JetBrains to give a webinar on CLion, and this is all set for Tuesday, February 16 2021, and the title is “<strong>Testing Superpowers: Using CLion to add tests easily”</strong>.</p>
<p>CLion is great for refactoring C++ code to make it more maintainable - but it’s well-known that you need tests to be able to refactor safely.</p>
<p>In this webinar, I’ll show you how <strong>quickly get started adding tests to untested code</strong>.</p>
<p>Find out more, and <strong>book your place</strong> <a href="https://info.jetbrains.com/clion-webinar-february-2021.html">on the JetBrains website</a>.</p>
<p><a href="https://info.jetbrains.com/clion-webinar-february-2021.html"><img src="/images/JetBrainsCLionWebinar.png" alt="Image of webinar booking form" /></a></p>Clare Macraeclare@claremacrae.co.ukFind out how to quickly get started testing C++ code, using powerful tools in CLionVirtual Machines for Online Mobbing and Training2020-12-01T00:00:00+00:002020-12-01T00:00:00+00:00https://claremacrae.co.uk//blog/2020/12/virtual-machines-for-online-mobbing-and-training<h2 id="setup-and-configuration">Setup and configuration</h2>
<p>Some links to share how Llewellyn Falco and I have been setting up VMs for online mobbing and training.</p>
<ul>
<li>How to <a href="https://docs.google.com/document/d/1DyTemsYBu2LUhrwwCdNuPQDWj3f_yfMj3otaoEZZRC4/edit#heading=h.7wk38tnuscf4">setup a Windows AWS EC2 instance for remote mobbing and pairing</a> - By Clare Macrae, Jay Bazuzi, & Llewellyn Falco</li>
<li><a href="https://github.com/JayBazuzi/machine-setup">Jay Bazuzi’s ‘machine-setup’ repo</a>, with PowerShell scripts to set up Windows environments for many languages</li>
<li><a href="https://exercism.io/">Exercism</a> is really useful. It’s a free, open-source, <strong>platform for learning more than 50 different programming languages</strong>. If you join the track for a particular language, you will find <strong>valuable links to get you started in that language</strong>:
<ul>
<li>installation instructions</li>
<li>how to run tests</li>
<li>learning the language</li>
<li>useful resources</li>
</ul>
</li>
</ul>
<h2 id="future-steps">Future steps</h2>
<ul>
<li>Investigate creating EC2 instances via <a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-services-ec2-instances.html">command-line</a>, rather than manual steps</li>
<li>Investigate connecting via <a href="using Session Manager">Session Manager</a>. This is the default connection, and may be better than Remote Desktop.</li>
<li>Investigate <a href="https://aws.amazon.com/ec2/instance-types/mac/">Amazon EC2 Mac Instances</a></li>
</ul>Clare Macraeclare@claremacrae.co.ukNotes and links for quick setup of cloud VMsEmily Bache’s Approval Tests Training Course2020-08-28T00:00:00+00:002020-08-28T00:00:00+00:00https://claremacrae.co.uk//blog/2020/08/emily-bache-approvaltests-training<h2 id="emily-baches-course-approval-testing-with-proagile">Emily Bache’s Course: Approval Testing with ProAgile</h2>
<p>I was recently fortunate to attend <strong>Emily Bache’s course on Approval Tests</strong>.</p>
<p>I’m already very familiar with <a href="/blog/tags.html#approval-tests">Approval Tests</a>, but I know that Emily has been using them for much longer than me, so I was looking forward to learning a lot, and I was not disappointed! <strong>It was excellent.</strong></p>
<p>And Llewellyn Falco, who is the creator of Approval Tests, said:</p>
<blockquote>
<p>“I went on a course about a thing that I wrote, and I learned a ton!”</p>
<p><em>Llewellyn Falco</em></p>
</blockquote>
<h2 id="about-emily">About Emily</h2>
<p>Many people will know of Emily through her wide range of <a href="https://github.com/emilybache">coding Katas</a> - small practice exercises to learn programming techniques, which are often ported to many different languages. <a href="https://github.com/emilybache/GildedRose-Refactoring-Kata">GildedRose-Refactoring-Kata</a> may be the best know example.</p>
<p>But she’s also a very experienced Technical Agile Coach, with lots of teaching and coaching experience.</p>
<p>So I had high expectations!</p>
<h2 id="the-course">The Course</h2>
<p>It was run online, in 4-hour sessions, on 4 successive days, via Zoom, and was a good mixture of demos, presentation, hands-on exercises and reviews.</p>
<p>There were 4 of us attending the course, which worked well.</p>
<p>The <a href="https://miro.com/">Miro</a> “visual collaboration platform” was very impressive, and Emily had put a lot of care in to creating effective boards in advance.</p>
<p>For example, this was a great way to gather feedback and see what each of us had taken from each section - with an added bonus that the mind-maps on retrospectives provided a useful summary of things we learned.</p>
<h3 id="exercises">Exercises</h3>
<p>Most of the exercises were in Java, with some on Python - and Emily’s slides gave example code in both C# and Java, and I’m most experienced in C++.</p>
<p>We were all logged on to a shared virtual machine that Emily had set up for the course, and we did the exercises collaboratively, taking turns with one person typing, and others instructing. (Think “Mob” or “Ensemble” programming.)</p>
<p>This turned out to be a good way to get familiar with another language: watch others coding for short periods, and then take a turn at typing, safe in the knowledge that if you’re stuck, you have plenty of people to ask for help.</p>
<h3 id="topics-covered">Topics covered</h3>
<p>Broadly speaking, the topics were:</p>
<ul>
<li>Introduction to testing, and to Approval Tests</li>
<li>Code Coverage and using Combinations to improve coverage</li>
<li>Testing and Behaviour Driven Development</li>
<li>Testing Microservices</li>
</ul>
<p>Emily shared her experience very well, with really clear explanations, backed up by brilliant slides with fantastic diagrams of fundamental concepts, like code coverage and branch coverage.</p>
<p>In every session, I had pages of notes of things that I learned about practical applications of Approval Tests that I had never even thought of - and some helpful ways of explaining techniques and ideas.</p>
<h2 id="takeaways">Takeaways</h2>
<p>I learned way, way too much to share in a blog… But here are a few examples.</p>
<h3 id="little-things">Little Things</h3>
<ul>
<li>“Printer” is a nicer analogy than “<a href="https://github.com/approvals/ApprovalTests.cpp/blob/master/doc/ToString.md">To String</a>” for explaining how to covert any object to text for use in Approval Tests.</li>
<li><a href="https://en.wikipedia.org/wiki/All-pairs_testing">All-Pairs or Pairwise Testing</a> is a powerful alternative to <a href="https://github.com/approvals/ApprovalTests.cpp/blob/master/doc/TestingCombinations.md#top">Combination</a> testing, as it greatly reduces the number of combinations of values required - speeding up the tests.</li>
<li>We saw a nice technique in the <a href="https://github.com/emilybache/Lift-Kata">Lift Kata</a> of approving a sequence of steps in a single file - perhaps like a story-board or a time-sequence. This could be implemented with <a href="https://github.com/approvals/ApprovalTests.cpp/blob/master/doc/how_tos/TestContainerContents.md#top">verifyAll()</a> - but Llewellyn pointed out that it might be useful to add this as a first-class concept in the Approval Tests libraries, for more easy-to-interpret output.</li>
</ul>
<h3 id="texttest">TextTest</h3>
<p>Of course we used the libraries from <a href="https://github.com/approvals">Approval Tests</a>, but we also used another Approval Testing tool that was new to me, called <a href="https://github.com/texttest/texttest">TextTest</a>.</p>
<p>From its documentation:</p>
<blockquote>
<p>TextTest is an application-independent tool for text-based functional testing. In other words, it provides support for regression testing by means of comparing program output files against a specified “gold standard” of what they should look like.</p>
</blockquote>
<blockquote>
<p>It is both a standalone tool for this sort of testing, and a Python framework that users plug their own tools, custom comparators, reports etc. into.</p>
</blockquote>
<p>It’s especially powerful when multiple output files need to be tested. It’s language-independent. And it takes care of mechanics like how to supply stdin, and how to capture stdout, stderr and a process’s exit code.</p>
<p>As a very powerful tool, it obviously takes some effort to set up and learn to use, but if testing a complex application that is not amenable to conventional code-based Approval Tests, I would definitely look at TextTest instead.</p>
<h2 id="conclusion-highly-recommended">Conclusion: Highly Recommended!</h2>
<p>It’s great to see Approval Testing growing in use, and more training courses being run.</p>
<p><strong>I strongly recommend this course.</strong></p>
<p>Emily has said she’ll be running it again, so look out for it at <a href="https://proagile.se/our-courses">ProAgile</a>.</p>Clare Macraeclare@claremacrae.co.ukNotes from Emily Bache's hands-on workshop, applying Approval Tests in Java and C# on wide range of scenariosNew YouTube playlist of talks, interviews, podcasts, streams2020-08-03T00:00:00+00:002020-08-03T00:00:00+00:00https://claremacrae.co.uk//blog/2020/08/youtube-playlist<h2 id="new">New!</h2>
<p>I’ve created a YouTube playlist to gather together all the <a href="https://www.youtube.com/playlist?list=PLoe3M-5Wdtgzzw7J-owNzk2vFOwTO8VtF">Presentations, podcasts, streams, interviews</a> I’ve done in recent years.</p>
<p><a href="https://www.youtube.com/playlist?list=PLoe3M-5Wdtgzzw7J-owNzk2vFOwTO8VtF"><img src="/images/YouTube Playlist.png" alt="Image of YouTube playlist" /></a></p>Clare Macraeclare@claremacrae.co.ukDiscover video content on C++ testing and refactoring, with Approval TestsApproval Tests Training Course (Sept 2020)2020-07-30T00:00:00+00:002020-07-30T00:00:00+00:00https://claremacrae.co.uk//blog/2020/07/approvaltests-training-course<h2 id="details">Details</h2>
<p>Title: <strong>Testing Legacy Code effectively with Approval Tests</strong></p>
<p><a href="https://bit.ly/LegacyCppSept2020">Register here</a> £350 / $450</p>
<p>This online workshop is 2 hours a week for 4 weeks</p>
<p>Tuesdays: 4pm to 6pm BST (8am to 10am PST)</p>
<ul>
<li>Sept 08 - Testing existing code</li>
<li>Sept 15 - Testing with ApprovalTests</li>
<li>Sept 22 - Testing Globals & Services</li>
<li>Sept 29 - Testing inconsistent dates and hard-to-invoke code</li>
</ul>
<p> + (optional) <strong>1</strong>-on-<strong>1</strong> consults with the instructors on <strong>your code</strong></p>
<h2 id="a-different-type-of-course">A different type of course</h2>
<p><img src="/images/approval_tests_course_2020_09/course.quote.png" alt="Quote" /></p>
<p><img src="/images/approval_tests_course_2020_09/course.structure.png" alt="Course Structure" /></p>
<h2 id="what-the-course-offers">What the course offers</h2>
<p><img src="/images/approval_tests_course_2020_09/course.intent.png" alt="Intent" /></p>
<p>You’ve inherited some legacy code: it’s valuable, but it doesn’t have tests, and it wasn’t designed to be testable, so you need to start refactoring. But you can’t refactor safely until the code has tests, and you can’t add tests without refactoring! How can you ever break out of this loop?</p>
<p>Whether Legacy code for you means “old code”, “code without tests”, or “code you wish to redesign for new features or unit-tests”, this workshop will enable you to become productive and work safely, quickly.</p>
<p>In this hands-on workshop, you will learn not just how to use Approval Tests to start testing legacy code, but how to create effective, maintainable, expressive tests, even on large systems.</p>
<p><img src="/images/approval_tests_course_2020_09/course.skills.png" alt="Skills" /></p>
<h2 id="instructors">Instructors</h2>
<p><img src="/images/approval_tests_course_2020_09/course.instructors.png" alt="Instructors" /></p>
<p>You can <a href="https://bit.ly/LegacyCppSept2020">register here</a>.</p>
<h3 id="clare-macrae">Clare Macrae</h3>
<ul>
<li>Twitter: <a href="https://twitter.com/ClareMacraeUK">@ClareMacraeUK</a></li>
<li><a href="https://claremacrae.co.uk/blog/">Blog</a></li>
</ul>
<h3 id="llewellyn-falco">Llewellyn Falco</h3>
<ul>
<li>Twitter: <a href="https://twitter.com/LlewellynFalco">@LlewellynFalco</a></li>
<li><a href="http://llewellynfalco.blogspot.com/p/infographics.html">Blog</a></li>
<li><a href="https://www.youtube.com/user/isidoreus/videos">YouTube</a></li>
</ul>Clare Macraeclare@claremacrae.co.ukHands-on workshop, learning to use Approval Tests on legacy code for effective, maintainable, expressive tests even on large systemsCppEurope 2020 Trip Report2020-03-01T00:00:00+00:002020-03-01T00:00:00+00:00https://claremacrae.co.uk//blog/2020/03/cppeurope-2020<h2 id="the-conference">The Conference</h2>
<p>On Tuesday 25th February, I had the honour of speaking about <strong>“C++ Testing Techniques, Tips and Tricks”</strong> at the 3rd edition of <a href="https://cppeurope.com/">CppEurope</a> in Bucharest, Romania.</p>
<p>This one-day conference was sold out, with more than 200 people attending. It is hosted by <a href="https://mozaicworks.com/">Mosaic Works</a>, whose <a href="https://mozaicworks.com/blog/think-design-work-smart-youtube-channel/">YouTube Channel</a> I’ve been following with interest, lately.</p>
<p>Things I particularly liked about this conference:</p>
<ul>
<li>Lovely variety of strong talks.</li>
<li>Great food.</li>
<li>“Ask the speaker” session: all the speakers were available for 45 minutes, for questions and discussions.</li>
<li>Retrospective at the end of the day.</li>
<li>Speakers were very well looked after.</li>
<li>Everyone in the audience sat at a table, so it was easy to take notes.</li>
<li>Less waste: instead of give-away bags, freebies were left on the tables, one per seat… If you didn’t want one of the gifts, and left it behind, it was presumably re-used, instead of being thrown away.</li>
</ul>
<p><a href="https://twitter.com/mariusbancila/status/1232208245919539200"><img src="/images/cppeurope_2020/MariusBancilaTweetTables.png" alt="Round tables and full house for #CppEurope #cpp" /></a></p>
<h2 id="my-talk">My Talk</h2>
<p>My talk <strong>“C++ Testing Techniques, Tips and Tricks”</strong> was a significant update on the talk of the same name that I gave at C++ London in November 2019.</p>
<p>With a 45 minute slot, I focused on giving general pointers to practices that I have found helpful when writing automated tests of C++ code.</p>
<ul>
<li><a href="https://www.slideshare.net/ClareMacrae/cpp-testing-techniques-tips-and-tricks-cpp-europe">Slides on SlideShare</a></li>
<li><a href="https://github.com/claremacrae/talks/blob/master/Cpp_Testing_Techniques_Tips_and_Tricks.md#top">Notes and links</a></li>
<li><a href="https://www.youtube.com/watch?v=-5N-u34L7wo&list=PLKkbEnCSP7sek-bn-Ae-b16aa7y_mc2EH&index=10&t=0s">Video</a></li>
</ul>
<h2 id="other-talks">Other Talks</h2>
<h3 id="j-daniel-garcìa-c-programming-in-a-parallel-world">J. Daniel Garcìa: C++ programming in a parallel world</h3>
<p>I hadn’t yet had much time to explore C++ 11’s concurrency facilities, so this was a welcome and nice, clear introduction to both concurrency and C++ 17’s parallelism features.</p>
<p>It was a helpful reminder that using <code class="language-plaintext highlighter-rouge">std::for_each</code> is a bit of a smell, as there is usually a better (more specific) algorithm available.</p>
<p>Daniel closed with an overview of the <a href="https://github.com/arcosuc3m/grppi">Generic Reusable Parallel Pattern Interface library - GrPPI</a>.</p>
<h3 id="alexandru-bolboaca-refactoring-c-legacy-code-through-pure-functions">Alexandru Bolboaca: Refactoring C++ legacy code through pure functions</h3>
<p>I’m particularly interested in efficient, reliable techniques for improving legacy code, so this talk was right up my street, and the one that was most immediately of use to me.</p>
<p>Alex talked through the current, standard methods for dealing with legacy code, which were all either unreliable or slow and requiring great skill and practice.</p>
<p>He went on to describe a technique he has been developing, that involves:</p>
<ol>
<li>Refactoring the code to pure functions (where inputs are never modified, and the outputs are repeatably consistent, for a given set of input values, and there is no saved state and no side-effects)</li>
<li>Writing data-driven or property based tests (or Approval Tests!)</li>
<li>Refactoring the pure functions to a cohesive set of classes (or whatever suits your taste)</li>
</ol>
<p>A big selling point is that because it only requires common refactorings that are typically supported by modern IDEs, it’s possible to keep working at it for hours in a day, without getting too tired and making mistakes.</p>
<p>Alex is still experimenting with this technique, but I think it’s very exciting.</p>
<p>Videos with more information:</p>
<ul>
<li><a href="https://www.youtube.com/watch?v=l9GOtbhYaJ8">Pure Functions as Nominal Format for Design with Legacy Code with Alex Bolboaca and Adrian Bolboaca</a> - Alex Bolboaca and Adrian Bolboaca explain the idea.</li>
<li><a href="https://www.youtube.com/watch?v=FyZ_Tcuujx8">CodeCast: Refactor C++ legacy code through pure functions</a> - Demo Part 1</li>
</ul>
<h3 id="peter-hilton-technical-documentation-is-a-backup-so-make-sure-it-works">Peter Hilton: Technical documentation is a backup so make sure it works</h3>
<p><a href="https://hilton.org.uk/presentations/technical-documentation">Slides</a></p>
<p>Peter told some very interesting stories about working in different environments, with different levels of documentation - from “many feet of shelf space”, to “absolutely none”.</p>
<p><a href="https://twitter.com/mariusbancila/status/1232273231735857152"><img src="/images/cppeurope_2020/MariusBancilaTweetPeterHiltonTalk.png" alt="@PeterHilton on the three kinds of legacy code and technical documentation #CppEurope" /></a></p>
<p>The talk made clear recommendations for how to do all these, effectively:</p>
<ul>
<li>Write good code comments (including focusing on writing good code that needs minimal explanatory comments)</li>
<li>Provide a clear README, to get people started with the project</li>
<li>Provide special-purpose documentation for specific needs</li>
</ul>
<p>There was a plug for <a href="https://www.writethedocs.org/guide/docs-as-code/">Docs as Code</a> from the excellent <a href="https://www.writethedocs.org/">Write the Docs Community</a>.</p>
<p>I think that this talk, in conjunction with <a href="https://www.divio.com/blog/documentation/">Daniele Procida’s excellent talk ‘What nobody tells you about documentation’</a>, gives very good advice on writing clear, effective, usable documentation.</p>
<h3 id="arno-schödl-the-c-rvalue-lifetime-disaster">Arno Schödl: The C++ rvalue lifetime disaster</h3>
<p>This was an in-depth treatment of problems with rvalues that developers need to be aware of, to avoid memory-corruption in code. A <a href="https://www.youtube.com/watch?v=zzkpTbJiFPM">video of an earlier presentation, at C++ Russia</a> is available.</p>
<h3 id="klaus-iglberger-embrace-no-paradigm-programming">Klaus Iglberger: Embrace No-Paradigm Programming!</h3>
<p>The last talk of the day was a great comparison of different approaches to representation shapes in C++. About 8 different approaches were compared and rated on various attributes, like performance and readability.</p>
<p>The conclusions were:</p>
<ul>
<li>Understand the virtues of “Modern C++”
<ul>
<li>Reduce the use of pointers and inheritance hierarchies</li>
<li>Prefer value semantics</li>
<li>Keep your code simple</li>
</ul>
</li>
<li>Learn about the different programming paradigms
<ul>
<li>Learn about their advantages and weaknesses</li>
<li>Pick the good ideas</li>
</ul>
</li>
<li>There is no “one-size-fits-all” solution</li>
</ul>
<h2 id="links-and-future-dates">Links and Future Dates</h2>
<ul>
<li>The talks:
<ul>
<li><a href="https://www.youtube.com/playlist?list=PLKkbEnCSP7sek-bn-Ae-b16aa7y_mc2EH">Videos of all the talks and speaker interviews</a></li>
<li><a href="https://cppeurope.com/cppeurope-2020-bucharest-edition-slides/">Slides from all the talks</a></li>
</ul>
</li>
<li>The conference:
<ul>
<li><a href="https://cppeurope.com">CppEurope</a></li>
<li><a href="https://twitter.com/hashtag/cppeurope?src=hash">Twitter #cppeurope</a></li>
</ul>
</li>
<li>Conference organisers:
<ul>
<li><a href="https://mozaicworks.com/">Mosaic Works</a></li>
<li><a href="https://mozaicworks.com/blog/think-design-work-smart-youtube-channel/">Mosaic Works YouTube Channel</a></li>
</ul>
</li>
<li>Next editions of the conference:
<ul>
<li>Konstanz, Germany: 6 October 2020</li>
<li>Bucharest, Romania: 23 February, 2021</li>
</ul>
</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<p>Overall, this was an excellent conference - enjoyable, interesting, and very well run - <strong>Highly Recommended!</strong></p>Clare Macraeclare@claremacrae.co.ukNotes from CppEurope 2020, in Bucharest, RomaniaCppChat Interview: If You Change It and You Break It, You’ll Know2019-11-22T00:00:00+00:002019-11-22T00:00:00+00:00https://claremacrae.co.uk//blog/2019/11/cppchat-interview<p>On the 8th October, just after I got back from post-CppCon travels around Colorado, I had the huge pleasure of being interviewed by Jon Kalb and Phil Nash for the cpp.chat podcast. I really enjoyed the conversation.</p>
<p>For more info and to listen to the recording, see <a href="https://cpp.chat/64/">the episode and shownotes</a>.</p>Clare Macraeclare@claremacrae.co.ukMy interview on the CppChat Podcast - talking about quickly testing legacy C++ codeCppCast Interview: Approval Tests2019-08-22T00:00:00+00:002019-08-22T00:00:00+00:00https://claremacrae.co.uk//blog/2019/08/cppcast-interview-approval-tests<p>On 2019-07-24 I was interviewed by Rob and Jason for the CppCast Podcast. I really enjoyed the whole process.</p>
<p>For more info and to listen to the recording, see <a href="https://cppcast.com/clare-macrae/">the episode and shownotes</a>.</p>
<p>Or see the <a href="https://old.reddit.com/r/cpp/comments/ckzc11/cppcast_approval_tests_with_clare_macrae/">nice comments on Reddit r/cpp</a>.</p>
<p><a href="https://cppcast.com/clare-macrae/"><img src="/images/ClareMacraeCppCastApprovalTests.png" alt="Rob and Jason are joined by Clare Macrae to discuss Approval Tests and how they can be used to quickly test legacy C++ code." /></a></p>Clare Macraeclare@claremacrae.co.ukMy interview on the CppCast Podcast - talking about quickly testing legacy code