<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Klemens</title>
    <link>https://klemens.dev/</link>
    <description>Recent content on Klemens</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Fri, 15 Nov 2024 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://klemens.dev/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>About Me</title>
      <link>https://klemens.dev/about/</link>
      <pubDate>Fri, 15 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://klemens.dev/about/</guid>
      <description>I am a professional software engineer with twelve years of experience. My favorite language is C++, mostly used for systems and Embedded programming.&#xA;I am the author of boost.process &amp;amp; boost.cobalt and contributor to multiple other libraries, among them boost.asio.&#xA;I work as an independent software consultant and am generally available for remote contracting.</description>
    </item>
    <item>
      <title>Boost.cobalt</title>
      <link>https://klemens.dev/portfolio/cobalt/</link>
      <pubDate>Thu, 16 Nov 2023 00:00:00 +0000</pubDate>
      <guid>https://klemens.dev/portfolio/cobalt/</guid>
      <description>Boost.cobalt provides easy to use &amp;amp; high performances coroutines for single threaded applications.</description>
    </item>
    <item>
      <title>Coroutine 101 - A simple serializer</title>
      <link>https://klemens.dev/posts/03_coroutines/</link>
      <pubDate>Thu, 27 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://klemens.dev/posts/03_coroutines/</guid>
      <description>This is the first post in a series explaining C++20 coroutines by example.&#xA;Goal The goal for this article is to create a simple non-recursive stream serializer, that can be used like this:&#xA;stream::serializer serialize_ints(std::vector&amp;lt;int&amp;gt; data) { for (auto idx = 0u; idx &amp;lt; data.size(); idx++) { if (idx != 0) co_yield &amp;#39;,&amp;#39;; co_yield std::to_string(data[idx]); } } int main(int argc, char *argv[]) { auto s = serialize_ints({1,2,3,4,5,6,7,8,9,10}); std::string buffer; buffer.resize(10); using std::operator&amp;#34;&amp;#34;sv; assert(s.</description>
    </item>
    <item>
      <title>asio - timeouts, cancellation &amp; custom tokens</title>
      <link>https://klemens.dev/posts/02_asio_timeout/</link>
      <pubDate>Mon, 02 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://klemens.dev/posts/02_asio_timeout/</guid>
      <description>Since asio added and beast implemented per-operation cancellation, the way timeouts can be implemented in asio code has changed significantly.&#xA;In this article, we&amp;rsquo;ll go from simple timeouts to building our own timeout completion token helper.&#xA;Cancellation A timeout is a defined interval after which a cancellation will be triggered, if an action didn&amp;rsquo;t complete by then.&#xA;Timeouts can be a way of handling runtime errors, but one should generally be prudent about their usage.</description>
    </item>
    <item>
      <title>asio - deferred</title>
      <link>https://klemens.dev/posts/01_asio_deferred/</link>
      <pubDate>Sun, 11 Dec 2022 00:00:00 +0000</pubDate>
      <guid>https://klemens.dev/posts/01_asio_deferred/</guid>
      <description>Asio deferred Aysnc operations Asio introduced the concept of an async_operation, which describes a primary expression that can be invoked with a completion token. In C++20 this is also a language concept.&#xA;asio::io_context ctx; asio::async_operation auto post_op = [&amp;amp;](auto &amp;amp;&amp;amp; token){return asio::post(ctx, std::move(token));}; auto f = post_op(asio::use_future); ctx.run(); f.get(); // void Async operations can be used in parallel_group and directly co_awaited in C++20.&#xA;asio::deferred as a completion token Using asio::deferred as a completion token, will give you a lazy async_operation as the result value.</description>
    </item>
    <item>
      <title>metal.test</title>
      <link>https://klemens.dev/portfolio/metal-test/</link>
      <pubDate>Mon, 16 Nov 2020 00:00:00 +0000</pubDate>
      <guid>https://klemens.dev/portfolio/metal-test/</guid>
      <description>An open-source toolchain for testing on embedded devices using gdb &amp;amp; serial ports.</description>
    </item>
    <item>
      <title>Boost.process</title>
      <link>https://klemens.dev/portfolio/process/</link>
      <pubDate>Wed, 16 Nov 2016 00:00:00 +0000</pubDate>
      <guid>https://klemens.dev/portfolio/process/</guid>
      <description>Boost.process is a library for managing sub-processes on linux, windows, Osx and BSD.</description>
    </item>
  </channel>
</rss>
