<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:media="https://search.yahoo.com/mrss/" version="2.0">
    <channel>
      <title>Tweede golf Blog Zola</title>
      <link>https://preview.tweede.golf</link>
      <description>Rust for systems, web, and embedded</description>
      <language>en</language>
      <atom:link href="https://preview.tweede.golf/feed.xml" rel="self" type="application/rss+xml"/>
      <image>
        <url>https://media.tweedegolf.nl/images/logo-512.png</url>
        <title>Tweede golf Blog Zola</title>
        <link>https://preview.tweede.golf</link>
      </image>
      <item>
          <title>PoC for universal hardware-in-the-loop HAL test suite</title>
          <link>https://preview.tweede.golf/en/blog/240/PoC-for-universal-hardware-in-the-loop-HAL-test-suite/</link>
          <description><![CDATA[ <p>At Tweede Golf we've helped multiple clients develop hardware abstraction layers (HALs) for the chips they're using. A big aspect of that is verifying that the code we wrote actually works. But this is tedious and hard to do right. So we've been working on making it easier.</p> ]]></description>
          <author>tamme@tweedegolf.com (Tamme)</author>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/testing/">testing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/embedded-shield.png"/>
          <guid>https://preview.tweede.golf/en/blog/240/PoC-for-universal-hardware-in-the-loop-HAL-test-suite/</guid>
          <pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Developing CRA-compliant products with us</title>
          <link>https://preview.tweede.golf/en/blog/239/developing-cra-compliant-products-with-us/</link>
          <description><![CDATA[ <p>It’s July 2026, and part of the Cyber Resilience Act (CRA) is now in effect; the remainder is imminent. The new EU regulations aim to significantly improve the cybersecurity of connected products placed on the European market. If your organization develops digital products such as IoT devices or EV chargers, you’re affected.</p> ]]></description>
          <author>hugo@tweedegolf.com (Hugo)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/239/developing-cra-compliant-products-with-us/</guid>
          <pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Are we mainstream yet? Takeaways from the RustWeek Industry Track</title>
          <link>https://preview.tweede.golf/en/blog/238/are-we-mainstream-yet/</link>
          <description><![CDATA[ <p>On 19 May 2026, we (as organizing partner of RustWeek) ran <a rel="external" href="https://2026.rustweek.org/industry/">the Industry Track</a> at RustWeek for the third year in a row. This track focuses on Rust adoption, interaction and exchanging ideas. This year’s edition marked a noticeable change.</p> ]]></description>
          <author>hugo@tweedegolf.com (Hugo)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <category domain="https://preview.tweede.golf/en/blog/automotive/">automotive</category>
          <category domain="https://preview.tweede.golf/en/blog/energy/">energy</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/238/are-we-mainstream-yet/</guid>
          <pubDate>Tue, 09 Jun 2026 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Contributing to Dutch election software at RustWeek 2026</title>
          <link>https://preview.tweede.golf/en/blog/236/contributing-to-dutch-election-software-at-rustweek-2026/</link>
          <description><![CDATA[ <p>The RustWeek Hackathon is being co-sponsored by our client, the Dutch Electoral Council. The Abacus team (myself included) will be on-site with several good first issues and challenges, and we would love your input and proof-of-concept ideas!</p> ]]></description>
          <author>ruben@tweedegolf.com (Ruben)</author>
          <category domain="https://preview.tweede.golf/en/blog/meet-the-team/">meet-the-team</category>
          <category domain="https://preview.tweede.golf/en/blog/meetup/">meetup</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/tg-at-rustweek-hackathon-2026.png"/>
          <guid>https://preview.tweede.golf/en/blog/236/contributing-to-dutch-election-software-at-rustweek-2026/</guid>
          <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Async Rust never left the MVP state</title>
          <link>https://preview.tweede.golf/en/blog/237/async-rust-never-left-the-mvp-state/</link>
          <description><![CDATA[ <p>I've previously explained async bloat and some work-arounds for it, but would much prefer to solve the issue at the root, in the compiler. I've submitted a Project Goal, and am looking for help to fund the effort.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/async/">async</category>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/237/async-rust-never-left-the-mvp-state/</guid>
          <pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Debloat your async Rust</title>
          <link>https://preview.tweede.golf/en/blog/235/debloat-your-async-rust/</link>
          <description><![CDATA[ <p>Async Rust is amazing, but far from flawless. In this blog, I'll walk you through the current struggles and possible solutions.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/async/">async</category>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/235/debloat-your-async-rust/</guid>
          <pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Fixing our own problems in the Rust compiler</title>
          <link>https://preview.tweede.golf/en/blog/234/fixing-our-own-problems-in-the-rust-compiler/</link>
          <description><![CDATA[ <p>In our data compression projects, we use Rust where C is traditionally used. During the work, we've hit limitations in Rust itself and in the surrounding tooling. Over the years, we've become increasingly comfortable with fixing these issues ourselves.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/data-compression/">data-compression</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/234/fixing-our-own-problems-in-the-rust-compiler/</guid>
          <pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Video: Building openleadr-rs for real-world demand response (FOSDEM 2026)</title>
          <link>https://preview.tweede.golf/en/blog/233/video-openleadr-rs-for-demand-response-fosdem2026/</link>
          <description><![CDATA[ <p>Maximilian Pohl (Tweede golf) and Stijn van Houwelingen (ElaadNL) presented openleadr-rs at FOSDEM 2026. You can now watch the recording of the talk.</p> ]]></description>
          <author>info@tweedegolf.com (Max)</author>
          <category domain="https://preview.tweede.golf/en/blog/energy/">energy</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/fosdem-26-max-talk-video.png"/>
          <guid>https://preview.tweede.golf/en/blog/233/video-openleadr-rs-for-demand-response-fosdem2026/</guid>
          <pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>How we built Remails: a European Mail Transfer Agent</title>
          <link>https://preview.tweede.golf/en/blog/197/remails/</link>
          <description><![CDATA[ <p>Increasingly more organizations are reviewing their dependencies on foreign software and IT services from countries like the US. One broad necessity for many organizations is sending automated emails, possibly with high volume, be it for password resets, order confirmations, or routine notifications. Remails, a new European Mail Transfer Agent, can help you send these emails reliably without the need to rely on big tech. In this blog post, we tell the story of how we built Remails from a single binary proof-of-concept to a highly available, scalable cloud application.</p> ]]></description>
          <author>marlon@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/microservices/">microservices</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/remails-cover.png"/>
          <guid>https://preview.tweede.golf/en/blog/197/remails/</guid>
          <pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Video: sudo-rs and beyond (Ubuntu Summit 25.10)</title>
          <link>https://preview.tweede.golf/en/blog/200/video-sudo-rs-and-beyond/</link>
          <description><![CDATA[ <p>After sudo-rs was included in the <a rel="external" href="https://canonical.com/blog/canonical-releases-ubuntu-25-10-questing-quokka">25.10 release of Ubuntu</a>, Marc was invited to the Ubuntu Summit to talk about the design choices that shaped sudo-rs. You can now watch the recording of the talk.</p> ]]></description>
          <author>marc@tweedegolf.com (Marc)</author>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/200/video-sudo-rs-and-beyond/</guid>
          <pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Emulating avx-512 intrinsics in Miri</title>
          <link>https://preview.tweede.golf/en/blog/199/emulating-avx-512-intrinsics-in-miri/</link>
          <description><![CDATA[ <p>Recently we've started work on using more <code>avx512</code> features in <a rel="external" href="https://github.com/trifectatechfoundation/zlib-rs">zlib-rs</a>. The <code>avx512</code> family of target features provides SIMD intrinsics that use 512-bit vectors (double the size of <code>avx2</code>, which uses 256-bit vectors). These wider intrinsics can speed up certain algorithms dramatically.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/data-compression/">data-compression</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/simd/">simd</category>
          <category domain="https://preview.tweede.golf/en/blog/testing/">testing</category>
          <category domain="https://preview.tweede.golf/en/blog/tools/">tools</category>
          <guid>https://preview.tweede.golf/en/blog/199/emulating-avx-512-intrinsics-in-miri/</guid>
          <pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>A quick intro to Merkle Tree Certificates</title>
          <link>https://preview.tweede.golf/en/blog/150/merkle-tree-certificates/</link>
          <description><![CDATA[ <p>Many of us have heard about quantum computers and that they are a threat to our internet security and privacy. Nobody can tell, though, how long it will still take until quantum computers are actually powerful enough to be a serious threat. Even though the internet is often associated with rapid change, the fundamentals often take decades to change. Therefore, we must act now before it’s too late.</p> ]]></description>
          <author>marlon@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/research/">research</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/merkletree-certificates-graphic.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/150/merkle-tree-certificates/</guid>
          <pubDate>Tue, 02 Dec 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Running real-time Rust</title>
          <link>https://preview.tweede.golf/en/blog/198/running-real-time-rust/</link>
          <description><![CDATA[ <p>By now, we all know Rust works pretty well on embedded. What's lesser known is how Rust handles real-time requirements. We occasionally get questions about this and so I took that as an opportunity to write about it!</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/IoT/">IoT</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/198/running-real-time-rust/</guid>
          <pubDate>Mon, 24 Nov 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Fixing rust-lang stdarch issues in LLVM</title>
          <link>https://preview.tweede.golf/en/blog/196/fixing-rust-lang-stdarch-issues-in-llvm/</link>
          <description><![CDATA[ <p>A couple of months ago I became a co-maintainer of <a rel="external" href="https://github.com/rust-lang/stdarch"><code>rust-lang/stdarch</code></a>, which defines vendor-specific APIs that are used by the Rust standard library and Rust users writing explicit SIMD code.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/c++/">c++</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/196/fixing-rust-lang-stdarch-issues-in-llvm/</guid>
          <pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Talk about memory safety at ONE Conference</title>
          <link>https://preview.tweede.golf/en/blog/195/talk-about-memory-safety-at-one-conference/</link>
          <description><![CDATA[ <p>Earlier this month <a href="https://preview.tweede.golf/en/about/29/marc">Marc</a> and I had the opportunity to deliver a talk at ONE Conference in The Hague, The Netherlands, on a topic that’s near to our hearts: memory safety. Below we share some context, as well as our slides.</p> ]]></description>
          <author>hugo@tweedegolf.com (Hugo)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/banner.png"/>
          <guid>https://preview.tweede.golf/en/blog/195/talk-about-memory-safety-at-one-conference/</guid>
          <pubDate>Tue, 14 Oct 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust Meets the Grid: Building openleadr-rs for Real-World Demand Response</title>
          <link>https://preview.tweede.golf/en/blog/162/rust-meets-the-grid-building-openleadr-rs-for-real-world-demand-response/</link>
          <description><![CDATA[ <p>On Thursday 11 September 2025, I attended the LF Energy Summit in Aachen, Germany, where I gave the talk ‘Rust Meets the Grid: Building openleadr-rs for Real-World Demand Response’, together with Ton Smets from ElaadNL.</p> ]]></description>
          <author>hugo@tweedegolf.com (Hugo)</author>
          <category domain="https://preview.tweede.golf/en/blog/energy/">energy</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/lf-energy-summit-2025-openleadr-rs-talk-w1200.png"/>
          <guid>https://preview.tweede.golf/en/blog/162/rust-meets-the-grid-building-openleadr-rs-for-real-world-demand-response/</guid>
          <pubDate>Tue, 16 Sep 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Embedded async debugging and inspect-embassy</title>
          <link>https://preview.tweede.golf/en/blog/161/embedded-async-debugging-and-inspect-embassy/</link>
          <description><![CDATA[ <p>As part of my internship at Tweede golf this summer I was tasked with improving the async debugging experience for embedded development. This work resulted in a prototype async debugger for embassy, a common async runtime for embedded systems.</p> ]]></description>
          <author>info@tweedegolf.com (Ebbe)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/161/embedded-async-debugging-and-inspect-embassy/</guid>
          <pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Update on our advocacy for memory safety</title>
          <link>https://preview.tweede.golf/en/blog/160/update-on-our-advocacy-for-memory-safety/</link>
          <description><![CDATA[ <p>We’ve been raising awareness of the importance of using memory-safe technology to build systems that are truly secure-by-design. We do this alongside our core business, which is to help companies to use Rust successfully. With the CRA standardization process well on its way, now is the perfect time to update you on what we’ve been doing and why.</p> ]]></description>
          <author>hugo@tweedegolf.com (Hugo)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <guid>https://preview.tweede.golf/en/blog/160/update-on-our-advocacy-for-memory-safety/</guid>
          <pubDate>Mon, 18 Aug 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Building a gamified learning tool for healthcare professionals</title>
          <link>https://preview.tweede.golf/en/blog/159/building-a-gamified-learning-tool-for-healthcare-professionals/</link>
          <description><![CDATA[ <p>Do general practitioners in the Netherlands know enough about diabetes to treat the growing number of patients? If you have read our blog before, that question might surprise you. But not all of our work is concerned with robust software for a healthy internet; we also value work that contributes to a healthy society. In this blog, we'll discuss the design process behind a gamified learning tool for healthcare professionals.</p> ]]></description>
          <author>bram@tweedegolf.com (Bram)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/education/">education</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/image1-design.png"/>
          <guid>https://preview.tweede.golf/en/blog/159/building-a-gamified-learning-tool-for-healthcare-professionals/</guid>
          <pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Reconstructing lost data from parity blocks</title>
          <link>https://preview.tweede.golf/en/blog/158/reconstructing-lost-data-from-parity-blocks/</link>
          <description><![CDATA[ <p>A few months ago, we were faced with the challenge of writing an over-the-air firmware update mechanism for the lossy LoRaWAN network; If a packet arrives, it is guaranteed to be correct, but not all packets will arrive. In this blog, we’ll walk you through the math behind our solution.</p> ]]></description>
          <author>david@tweedegolf.com (David)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/158/reconstructing-lost-data-from-parity-blocks/</guid>
          <pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Exception handling in rustc_codegen_cranelift</title>
          <link>https://preview.tweede.golf/en/blog/157/exception-handling-in-rustc-codegen-cranelift/</link>
          <description><![CDATA[ <p>Panics in Rust by default unwind to run <code>Drop</code> implementations for all values on the stack. Rust's stack unwinding is implemented using the same mechanism as C++ exceptions on most platforms. Recently the Cranelift code generator got support for "landingpad" style exceptions as detailed in the corresponding <a rel="external" href="https://github.com/bytecodealliance/rfcs/blob/main/accepted/exception.md">Cranelift RFC</a> allowing me to add support for unwinding on panics to rustc_codegen_cranelift (cg_clif) for Unix systems.</p>
<p>In this article, I'll show you how exception handling works in cg_clif by walking you through several layers of the compilation process all the way to the runtime behavior.</p> ]]></description>
          <author></author>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/tools/">tools</category>
          <guid>https://preview.tweede.golf/en/blog/157/exception-handling-in-rustc-codegen-cranelift/</guid>
          <pubDate>Mon, 30 Jun 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Putting seat calculations in Dutch election software to the (fuzz) test</title>
          <link>https://preview.tweede.golf/en/blog/156/putting-seat-calculations-in-dutch-election-software-to-the-test/</link>
          <description><![CDATA[ <p>The Dutch Electoral Council (known as the <em>Kiesraad</em> in Dutch) are developing Abacus: new open-source software for computing election results. We looked into how we can verify the correctness of the algorithm used for seat apportionment. In this blog post, we will discuss various ways of verifying software in Rust, from unit testing to model-based verification and fuzzing. In particular, property-based fuzzing turned out to be very useful for finding bugs in the seat apportionment algorithm.</p> ]]></description>
          <author>marc@tweedegolf.com (Marc)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/testing/">testing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/software-verification-in-rust-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/156/putting-seat-calculations-in-dutch-election-software-to-the-test/</guid>
          <pubDate>Tue, 10 Jun 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>SIMD in zlib-rs (part 2): compare256</title>
          <link>https://preview.tweede.golf/en/blog/155/simd-in-zlib-rs-part-2-compare256/</link>
          <description><![CDATA[ <p>In <a rel="external" href="https://tweedegolf.nl/en/blog/153/simd-in-zlib-rs-part-1-autovectorization-and-target-features">part 1</a> of the "SIMD in zlib-rs" series, we've seen that, with a bit of nudging, autovectorization can produce optimal code for some problems.</p>
<p>But that does not always work: with SIMD clever programmers can still beat the compiler. This time we'll look at a problem where the compiler is not currently capable of using the SIMD capabilities of modern CPUs effectively.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/data-compression/">data-compression</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/155/simd-in-zlib-rs-part-2-compare256/</guid>
          <pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>What is my fuzzer doing?</title>
          <link>https://preview.tweede.golf/en/blog/154/what-is-my-fuzzer-doing/</link>
          <description><![CDATA[ <p>Fuzz testing is incredibly useful: it has caught many a bug during the development of NTP packet parsing and gzip/bzip2 (de)compression.</p>
<p>But I've always been unsatisfied with the fuzzer being a black box. When it runs for hours and reports no issues, what do we actually learn from that? In <a rel="external" href="https://github.com/pendulum-project/ntpd-rs">ntpd-rs</a> we've previously had a bug fly under the radar because the fuzzer just did not reach a large chunk of code. So, does my fuzzer actually exercise the code paths that I think it should?</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/testing/">testing</category>
          <category domain="https://preview.tweede.golf/en/blog/tools/">tools</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/what-is-my-fuzzer-doing-main-v2.png"/>
          <guid>https://preview.tweede.golf/en/blog/154/what-is-my-fuzzer-doing/</guid>
          <pubDate>Tue, 06 May 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Does using Rust really make your software safer?</title>
          <link>https://preview.tweede.golf/en/blog/152/does-using-rust-really-make-your-software-safer/</link>
          <description><![CDATA[ <p>We keep saying that Rust is how we make software safer. In this blog, we'll tackle a real-world vulnerability, 'rewrite it in Rust', and show you the results of our empirical research, both as a high-level overview and a tech deep-dive.</p> ]]></description>
          <author>marc@tweedegolf.com (Marc)</author>
          <category domain="https://preview.tweede.golf/en/blog/c/">c</category>
          <category domain="https://preview.tweede.golf/en/blog/research/">research</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/dns-experiment-main-image-1200-v2.png"/>
          <guid>https://preview.tweede.golf/en/blog/152/does-using-rust-really-make-your-software-safer/</guid>
          <pubDate>Wed, 23 Apr 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>SIMD in zlib-rs (part 1): Autovectorization and target features</title>
          <link>https://preview.tweede.golf/en/blog/153/simd-in-zlib-rs-part-1-autovectorization-and-target-features/</link>
          <description><![CDATA[ <p>I'm fascinated by the creative use of SIMD instructions. When you first learn about SIMD, it is clear that doing more multiplications in a single instruction is useful for speeding up matrix multiplication. But how can all of these weird instructions be used to solve problems that aren't just arithmetic?</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/data-compression/">data-compression</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/153/simd-in-zlib-rs-part-1-autovectorization-and-target-features/</guid>
          <pubDate>Tue, 15 Apr 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Translating bzip2 with c2rust</title>
          <link>https://preview.tweede.golf/en/blog/151/translating-bzip2-with-c2rust/</link>
          <description><![CDATA[ <p>Over the past couple of months we've been hard at work on <a rel="external" href="https://github.com/trifectatechfoundation/libbzip2-rs">libbzip2-rs</a>, a 100% Rust drop-in compatible implementation the bzip2 compression and decompression functionality.</p>
<p>For this project, we used <code>c2rust</code> for the initial translation from the C code to a Rust implementation. The generated Rust code has now been cleaned up and made safe where possible. This post describes our experiences using c2rust for this project.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/c/">c</category>
          <category domain="https://preview.tweede.golf/en/blog/data-compression/">data-compression</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/151/translating-bzip2-with-c2rust/</guid>
          <pubDate>Tue, 11 Mar 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>zlib-rs is faster than C</title>
          <link>https://preview.tweede.golf/en/blog/149/zlib-rs-is-faster-than-c/</link>
          <description><![CDATA[ <p>We've released version <a rel="external" href="https://crates.io/crates/libz-rs-sys">0.4.2</a> of <a rel="external" href="https://github.com/trifectatechfoundation/zlib-rs">zlib-rs</a>, featuring a number of substantial performance improvements. We are now (to our knowledge) the fastest api-compatible zlib implementation for decompression, and beat the competition in the most important compression cases too.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/data-compression/">data-compression</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/zlib-rs-vs-zlib-ng.png"/>
          <guid>https://preview.tweede.golf/en/blog/149/zlib-rs-is-faster-than-c/</guid>
          <pubDate>Tue, 25 Feb 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Mix in Rust with Java (or Kotlin!)</title>
          <link>https://preview.tweede.golf/en/blog/147/mix-in-rust-with-java-or-kotlin/</link>
          <description><![CDATA[ <p>Java is one of the most commonly used programming languages that we have not yet discussed in our Rust Interop Guide. In this article, we will discuss three different methods to call Rust code from Java: JNI, JNR-FFI and Project Panama. We will show the differences between these methods and we will do some basic benchmarking to compare their performance. These methods not only work for Java but also for other JVM languages like Kotlin. Here we will mainly focus on Java, but Kotlin examples are available in the <a rel="external" href="https://github.com/tweedegolf/java-interop/tree/kotlin/src/main/java/golf/tweede">Kotlin branch</a> of our <a rel="external" href="https://github.com/tweedegolf/java-interop">GitHub repository</a>.</p> ]]></description>
          <author>michiel@tweedegolf.com (Michiel)</author>
          <category domain="https://preview.tweede.golf/en/blog/interop/">interop</category>
          <category domain="https://preview.tweede.golf/en/blog/java/">java</category>
          <category domain="https://preview.tweede.golf/en/blog/kotlin/">kotlin</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rust-with-java-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/147/mix-in-rust-with-java-or-kotlin/</guid>
          <pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>OpenLEADR 3.0: Initial Traction and Future Plans</title>
          <link>https://preview.tweede.golf/en/blog/146/openleadr-3-0-initial-traction-and-future-plans/</link>
          <description><![CDATA[ <p>Last November, we <a rel="external" href="https://lfenergy.org/rust-implementation-of-openadr-3-0-becomes-part-of-openleadr/">announced</a> that our open-source Rust implementation of the latest version of the Open Automated Demand Response (OpenADR) standard had officially joined the Linux Energy Foundation’s OpenLEADR project. Today, we’re excited to share some of the early traction we’re seeing, outline our future plans, and invite your support in shaping what’s next.</p> ]]></description>
          <author>hugo@tweedegolf.com (Hugo)</author>
          <category domain="https://preview.tweede.golf/en/blog/energy/">energy</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/146/openleadr-3-0-initial-traction-and-future-plans/</guid>
          <pubDate>Fri, 24 Jan 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>The hunt for error -22</title>
          <link>https://preview.tweede.golf/en/blog/145/the-hunt-for-error--22/</link>
          <description><![CDATA[ <p>This article is a linear retrospective of how we searched for and eventually fixed a hard-to-find bug in our embedded software. If you're only interested in the outcome, then make sure to read <a href="https://preview.tweede.golf/en/blog/145/the-hunt-for-error--22/#a-pointer-to-oblivion">the last three sections</a>.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/145/the-hunt-for-error--22/</guid>
          <pubDate>Tue, 21 Jan 2025 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Power consumption of an experimental webserver</title>
          <link>https://preview.tweede.golf/en/blog/144/power-consumption-of-an-experimental-webserver/</link>
          <description><![CDATA[ <p><em>This article was authored by Jordy Aaldering and Folkert de Vries</em></p>
<p>Over the past couple of months, we teamed up with <a rel="external" href="https://www.ru.nl/personen/gastel-b-van">Bernard van Gastel</a> and <a rel="external" href="https://www.cs.ru.nl/staff/Jordy.Aaldering/">Jordy Aaldering</a> at Radboud University's Software Energy Lab to measure <a rel="external" href="https://github.com/tweedegolf/nea">nea</a>'s energy efficiency.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/energy/">energy</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/screenshot-from-2024-12-18-10-21-52.png"/>
          <guid>https://preview.tweede.golf/en/blog/144/power-consumption-of-an-experimental-webserver/</guid>
          <pubDate>Wed, 18 Dec 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Travelling to the land of the rising sun with Statime</title>
          <link>https://preview.tweede.golf/en/blog/143/travelling-to-the-land-of-the-rising-sun-with-statime/</link>
          <description><![CDATA[ <p>At the beginning of October, <a rel="external" href="https://tweedegolf.nl/en/about/20/david">David</a> and I went to ISPCS in Tokyo. The ISPCS (IEEE Symposium on Precision Clock Synchronization) is all about the PTP protocol and related technologies, and we attended because of Statime, our Rust implementation of the Precision Time Protocol.</p> ]]></description>
          <author>ruben@tweedegolf.com (Ruben)</author>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/research/">research</category>
          <category domain="https://preview.tweede.golf/en/blog/statime/">statime</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/ispcs-david-ruben.png"/>
          <guid>https://preview.tweede.golf/en/blog/143/travelling-to-the-land-of-the-rising-sun-with-statime/</guid>
          <pubDate>Fri, 06 Dec 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Manipulating time through (S)NTP</title>
          <link>https://preview.tweede.golf/en/blog/142/manipulating-time-through-sntp/</link>
          <description><![CDATA[ <p>The NTP protocol is used by many devices to synchronize their system clocks. However, many devices use SNTP clients (<em>Simple</em> NTP) which are even more vulnerable to interference. As most (S)NTP packets are unauthenticated, they are vulnerable to spoofing, making it possible to change a device's time by manipulating (S)NTP packets.</p>
<p>In this blog, we discuss how (S)NTP packets can be forged to manipulate a device's system clock. Especially on the default SNTP client for many Linux systems, this turned out to be very easy. We will also discuss the consequences of such attacks, as well as how these attacks can be prevented.</p> ]]></description>
          <author>michiel@tweedegolf.com (Michiel)</author>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/manipulating-time-through-sntp-main-v4.png"/>
          <guid>https://preview.tweede.golf/en/blog/142/manipulating-time-through-sntp/</guid>
          <pubDate>Mon, 25 Nov 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust implementation of OpenADR 3.0 becomes part of OpenLEADR</title>
          <link>https://preview.tweede.golf/en/blog/141/rust-implementation-of-openadr-3-0-becomes-part-of-openleadr/</link>
          <description><![CDATA[ <p>OpenLEADR development is ramping up again with a new Rust implementation of OpenADR 3.0 becoming part of the OpenLEADR project.</p> ]]></description>
          <author>hugo@tweedegolf.com (Hugo)</author>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/announcement-header-img-large.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/141/rust-implementation-of-openadr-3-0-becomes-part-of-openleadr/</guid>
          <pubDate>Wed, 13 Nov 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust needs an official specification</title>
          <link>https://preview.tweede.golf/en/blog/140/rust-needs-an-official-specification/</link>
          <description><![CDATA[ <p>Can we currently reason about Rust code with absolute certainty? Not really, but we should be able to. In this article, we dive into the reasons why it may be time for a Rust specification.</p> ]]></description>
          <author>marc@tweedegolf.com (Marc)</author>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/140/rust-needs-an-official-specification/</guid>
          <pubDate>Tue, 12 Nov 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Enabling pools in NTS</title>
          <link>https://preview.tweede.golf/en/blog/139/enabling-pools-in-nts/</link>
          <description><![CDATA[ <p>We previously talked about how <a rel="external" href="https://tweedegolf.nl/en/blog/122/a-safe-internet-requires-secure-time">secure time is required for a safe internet</a>. We mentioned how we want to increase the adoption of NTS, the secure time synchronization standard built on top of NTP. For this, we proposed to develop a public NTS pool. In this article, we expand on what pooling is, and what is required to enable an NTS pool.</p> ]]></description>
          <author>ruben@tweedegolf.com (Ruben)</author>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <guid>https://preview.tweede.golf/en/blog/139/enabling-pools-in-nts/</guid>
          <pubDate>Wed, 30 Oct 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust is rolling off the Volvo assembly line</title>
          <link>https://preview.tweede.golf/en/blog/137/rust-is-rolling-off-the-volvo-assembly-line/</link>
          <description><![CDATA[ <p>In my job I get to speak to lots of people about Rust. Some are just starting out, some have barely ever heard of it, and then some people are running Rust silently in production at a very large company in a very serious product.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/automotive/">automotive</category>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/volvo-ex90-main-v2.jpeg"/>
          <guid>https://preview.tweede.golf/en/blog/137/rust-is-rolling-off-the-volvo-assembly-line/</guid>
          <pubDate>Mon, 07 Oct 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>ISPCS paper: Estimating noise for clock-synchronizing Kalman filters</title>
          <link>https://preview.tweede.golf/en/blog/138/ispcs-paper-estimating-noise-for-clock-synchronizing-kalman-filters/</link>
          <description><![CDATA[ <p>Our Statime project now provides strong synchronization performance and accurate synchronization error estimates without manual tuning for any specific hardware, because it automatically determines the main uncertainty parameters for a Kalman-based clock servo. This process is described in a scientific paper, soon to be published by the IEEE.</p> ]]></description>
          <author>david@tweedegolf.com (David)</author>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/statime/">statime</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <guid>https://preview.tweede.golf/en/blog/138/ispcs-paper-estimating-noise-for-clock-synchronizing-kalman-filters/</guid>
          <pubDate>Fri, 04 Oct 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust interop in practice: speaking Python and Javascript</title>
          <link>https://preview.tweede.golf/en/blog/136/rust-interop-in-practice-speaking-python-and-javascript/</link>
          <description><![CDATA[ <p>We've been writing <a rel="external" href="https://tweedegolf.nl/en/interop">how-tos</a> about using Rust in existing <a rel="external" href="https://tweedegolf.nl/en/blog/124/mix-in-rust-with-c">C</a>, <a rel="external" href="https://tweedegolf.nl/en/blog/133/mix-in-rust-with-python-pyo3">Python</a>, and <a rel="external" href="https://tweedegolf.nl/en/blog/135/rust-in-c++">C++</a> projects, but this article shows you an in-production example of Rust interoperability: Recently I worked on exposing the <a rel="external" href="https://github.com/openwallet-foundation-labs/tsp/tree/main">TSP</a> Rust API to Python and NodeJS users.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/interop/">interop</category>
          <category domain="https://preview.tweede.golf/en/blog/javascript/">javascript</category>
          <category domain="https://preview.tweede.golf/en/blog/python/">python</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rust-with-python-and-js-main-2.png"/>
          <guid>https://preview.tweede.golf/en/blog/136/rust-interop-in-practice-speaking-python-and-javascript/</guid>
          <pubDate>Mon, 30 Sep 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Mix in Rust with C++</title>
          <link>https://preview.tweede.golf/en/blog/135/mix-in-rust-with-c++/</link>
          <description><![CDATA[ <p>This article will help you to slowly introduce some Rust into your C++ project. We'll familiarize ourselves with the tooling and go through some examples.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/c++/">c++</category>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/interop/">interop</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rust-in-c-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/135/mix-in-rust-with-c++/</guid>
          <pubDate>Tue, 17 Sep 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Mix in Rust with Python: PyO3</title>
          <link>https://preview.tweede.golf/en/blog/133/mix-in-rust-with-python-pyo3/</link>
          <description><![CDATA[ <p>In this article, we'll dive into combining Rust with Python. Specifically, this post covers calling modules written in Rust from Python scripts.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/interop/">interop</category>
          <category domain="https://preview.tweede.golf/en/blog/python/">python</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/mix-in-rust-with-python-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/133/mix-in-rust-with-python-pyo3/</guid>
          <pubDate>Tue, 27 Aug 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Current zlib-rs performance</title>
          <link>https://preview.tweede.golf/en/blog/134/current-zlib-rs-performance/</link>
          <description><![CDATA[ <p>Our <a rel="external" href="https://github.com/memorysafety/zlib-rs"><code>zlib-rs</code></a> project implements a drop-in replacement for <code>libz.so</code>, a dynamic library that is widely used to perform gzip (de)compression.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/data-compression/">data-compression</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/134/current-zlib-rs-performance/</guid>
          <pubDate>Mon, 26 Aug 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Mix in C with Rust: A taste of C in your Rust</title>
          <link>https://preview.tweede.golf/en/blog/132/a-taste-of-c-in-your-rust/</link>
          <description><![CDATA[ <p>Can't wait to learn how to call C code from your Rust project after reading my previous posts about <a rel="external" href="https://tweedegolf.nl/en/blog/123/mix-in-rust">Rust interop in general</a> and <a rel="external" href="https://tweedegolf.nl/en/blog/124/mix-in-rust-with-c">calling Rust from C</a>? Good! If you haven't read those yet, please do, because I'm going to assume you have in this article. We've seen the basics of Rust's FFI, and have experimented with calling Rust from C. Going the other way around, you'll walk into much the same challenges.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/c/">c</category>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/interop/">interop</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/mix-in-rust-in-c-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/132/a-taste-of-c-in-your-rust/</guid>
          <pubDate>Mon, 15 Jul 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Mix in Rust with C: Delegating FFI definitions to Diplomat</title>
          <link>https://preview.tweede.golf/en/blog/131/mix-in-rust-delegating-ffi-definitions-to-diplomat/</link>
          <description><![CDATA[ <p>The other day I came across <a rel="external" href="https://github.com/rust-diplomat/diplomat">Diplomat</a>, an opinionated tool that makes a lot of choices for you. If you've read <a rel="external" href="https://tweedegolf.nl/en/blog/124/mix-in-rust-with-c">my previous post in this series</a>, you'll have seen that that can be quite valuable. If you haven't read the previous article yet, do so before continuing to read this one, as it'll help you appreciate the concepts in this post, and it introduces the example as well.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/c/">c</category>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/interop/">interop</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/mix-in-rust-in-c-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/131/mix-in-rust-delegating-ffi-definitions-to-diplomat/</guid>
          <pubDate>Tue, 09 Jul 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Statime vs Linux PTP: Comparison of precision</title>
          <link>https://preview.tweede.golf/en/blog/129/statime-vs-linux-ptp-comparison-of-precision/</link>
          <description><![CDATA[ <p>As part of the development of our Precision Time Protocol implementation, <a rel="external" href="https://github.com/pendulum-project/statime">Statime</a>, we want to know how it performs compared to other implementations of PTP.</p>
<p>To figure this out, last April we visited <a rel="external" href="https://www.vsl.nl/en/">VSL</a>, the Dutch National Metrology Institute. There, we performed comparitive precision tests between Statime and <a rel="external" href="https://linuxptp.sourceforge.net/">Linux PTP</a>.</p> ]]></description>
          <author>david@tweedegolf.com (David)</author>
          <category domain="https://preview.tweede.golf/en/blog/algorithms/">algorithms</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/statime-vs-linux-ptp-main-v5.png"/>
          <guid>https://preview.tweede.golf/en/blog/129/statime-vs-linux-ptp-comparison-of-precision/</guid>
          <pubDate>Mon, 08 Jul 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Will Rust be alive in 10 years?</title>
          <link>https://preview.tweede.golf/en/blog/128/rust-in-ten-years/</link>
          <description><![CDATA[ <p>Will Rust still exist, and have proper support, 10, 20 or even 30 years from now? We’ve been asked this question multiple times in the last year. It is a fair question, as adopting any new technology requires an investment and comes with uncertainties, one of them being the durability of the technology. This article explains why we expect Rust to stand the test of time.</p> ]]></description>
          <author>hugo@tweedegolf.com (Hugo)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rust-in-10-years-main-v2.png"/>
          <guid>https://preview.tweede.golf/en/blog/128/rust-in-ten-years/</guid>
          <pubDate>Mon, 24 Jun 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Want more Rust? Break the cycle!</title>
          <link>https://preview.tweede.golf/en/blog/127/want-more-rust-break-the-cycle/</link>
          <description><![CDATA[ <p>Let's be frank: Rust is a cool language, but there's not a chance I'm introducing it in my company if I can't get any engineers for it. We'll stick with technologies with a much healthier job market.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/education/">education</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/teachrs-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/127/want-more-rust-break-the-cycle/</guid>
          <pubDate>Tue, 18 Jun 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Tock binary size</title>
          <link>https://preview.tweede.golf/en/blog/126/tock-binary-size/</link>
          <description><![CDATA[ <p><a rel="external" href="https://tockos.org">Tock</a> is a powerful and secure embedded operating system. While Tock was designed with resource constraints in mind, years of additional features, generalizing to more platforms, and security improvements have brought resource, and in particular, code size bloat.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/tock-main-image.png"/>
          <guid>https://preview.tweede.golf/en/blog/126/tock-binary-size/</guid>
          <pubDate>Mon, 10 Jun 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Mix in Rust with C</title>
          <link>https://preview.tweede.golf/en/blog/124/mix-in-rust-with-c/</link>
          <description><![CDATA[ <p>So, you've just read my <a rel="external" href="https://tweedegolf.nl/en/blog/123/mix-in-rust">previous post</a> on Rust interoperability in general, and now you're curious about how to actually apply the concepts to your situation. You've come to the right place, because in this post and the two that follow, I'll demonstrate how to make Rust and C talk to each other.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/c/">c</category>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/interop/">interop</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/mix-in-rust-in-c-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/124/mix-in-rust-with-c/</guid>
          <pubDate>Fri, 07 Jun 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Authentication for PTP</title>
          <link>https://preview.tweede.golf/en/blog/125/authentication-for-ptp/</link>
          <description><![CDATA[ <p>PTP was originally designed for networks in which all devices were ultimately trusted. In version 1, no security mechanism was present, and version 2 only provided an experimental mechanism. However, with version 2.1 of the PTP standard (IEEE 1588-2019) there is now a normative security mechanism in section 16.14.</p> ]]></description>
          <author>david@tweedegolf.com (David)</author>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <guid>https://preview.tweede.golf/en/blog/125/authentication-for-ptp/</guid>
          <pubDate>Fri, 07 Jun 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Mix in Rust</title>
          <link>https://preview.tweede.golf/en/blog/123/mix-in-rust/</link>
          <description><![CDATA[ <p>What does it <em>actually</em> mean to introduce Rust in an existing project, and having it communicate with other languages in the code base? This article launches a series of blog posts that provide guidance for introducing Rust into your code base step by step.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/interop/">interop</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/mix-in-rust-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/123/mix-in-rust/</guid>
          <pubDate>Thu, 06 Jun 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>A safe Internet requires secure time</title>
          <link>https://preview.tweede.golf/en/blog/122/a-safe-internet-requires-secure-time/</link>
          <description><![CDATA[ <p>The internet has a hole at the bottom of its trust stack, and we need to do something about it. In particular, the internet needs secure time synchronization to fortify the security of our digital world. In this article, we present a path towards the adoption of securely synchronized time.</p> ]]></description>
          <author>erik@tweedegolf.com (Erik)</author>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/secure-time-to-fix-internet-main.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/122/a-safe-internet-requires-secure-time/</guid>
          <pubDate>Fri, 24 May 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Hacking time: how you can control anyone&#x27;s clock</title>
          <link>https://preview.tweede.golf/en/blog/121/hacking-time/</link>
          <description><![CDATA[ <p>Messing around with people's clocks can be a great source of practical jokes. Even nowadays, with many people getting their time digitally, this is not as impossible as you might think. (And the month of April, with the switch to summer time and April Fool's Day, provided the perfect timing for this experiment, of course...)</p> ]]></description>
          <author>david@tweedegolf.com (David)</author>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/hacking-time-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/121/hacking-time/</guid>
          <pubDate>Tue, 14 May 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Save the planet, code in Rust</title>
          <link>https://preview.tweede.golf/en/blog/120/green-rust/</link>
          <description><![CDATA[ <p>The number of data centers worldwide is constantly increasing, and so is their electricity consumption. One way to become more power-efficient is certainly the constant development of better hardware, but we as developers should do our share. This post shows how coding in Rust can help to use existing resources more efficiently, to help preserve our planet — at least a little bit.</p> ]]></description>
          <author>marlon@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rust-is-green-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/120/green-rust/</guid>
          <pubDate>Mon, 15 Apr 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Sudo-rs dependencies: when less is better</title>
          <link>https://preview.tweede.golf/en/blog/119/sudo-rs-depencencies-when-less-is-better/</link>
          <description><![CDATA[ <p>When <a rel="external" href="https://github.com/memorysafety/sudo-rs">sudo-rs</a> development started, we added several dependencies using Rust’s crates ecosystem to quickly ramp up development. During development we accrued approximately 135 transitive (direct and indirect) dependencies. Once this was identified, we managed to reduce our total dependencies down to three. In this blog, we explain why and how we did this.</p> ]]></description>
          <author>ruben@tweedegolf.com (Ruben)</author>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/main-image-graph-a-little.png"/>
          <guid>https://preview.tweede.golf/en/blog/119/sudo-rs-depencencies-when-less-is-better/</guid>
          <pubDate>Thu, 07 Mar 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>“Software must become safer”, but how?</title>
          <link>https://preview.tweede.golf/en/blog/118/software-must-become-safer-but-how/</link>
          <description><![CDATA[ <p>Our tagline reads “Software must become safer”, and for good reason; We feel very strongly about this. But it does lead to the obvious and fair question: “What exactly do you do to ensure that the software your teams produce is safe and secure?”</p> ]]></description>
          <author>hugo@tweedegolf.com (Hugo)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/main-softwaremustbecomesafer-v2.png"/>
          <guid>https://preview.tweede.golf/en/blog/118/software-must-become-safer-but-how/</guid>
          <pubDate>Fri, 01 Mar 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Teach-rs: Rust 101 evolved</title>
          <link>https://preview.tweede.golf/en/blog/117/teach-rs-rust-101-evolved/</link>
          <description><![CDATA[ <p>At the end of 2022, we <a rel="external" href="https://tweedegolf.nl/en/blog/80/rust-101-open-source-university-course">announced</a> the creation of Rust 101, a university course that introduces students of computer science to Rust. Initially, the course was created for <a rel="external" href="https://www.fiit.stuba.sk/">the Faculty of Informatics and Information Technologies at STU Bratislava</a> (FIIT), but from the start we've wanted to create an open-source, modular and reusable set of teaching resources. Having now achieved that milestone, it is time for a new announcement: Rust 101 has evolved to teach-rs.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/education/">education</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rust-101-becomes-teach-rs.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/117/teach-rs-rust-101-evolved/</guid>
          <pubDate>Wed, 28 Feb 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust in Production at Tweede golf (podcast)</title>
          <link>https://preview.tweede.golf/en/blog/116/rust-in-production-at-tweede-golf-podcast/</link>
          <description><![CDATA[ <p>In February of 2024, <a rel="external" href="https://tweedegolf.nl/en/about/21/folkert">I</a> was invited by <a rel="external" href="https://corrode.dev/about/">Matthias Endler</a> of <a rel="external" href="https://corrode.dev/">Corrode</a> to join him on his podcast <a rel="external" href="https://corrode.dev/podcast/s01e05-tweede-golf/">Rust in Production</a>. We discussed how Tweede golf uses Rust in production, to ensure the safety and security of critical infrastructure software.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rust-in-production-main-image-v2.png"/>
          <guid>https://preview.tweede.golf/en/blog/116/rust-in-production-at-tweede-golf-podcast/</guid>
          <pubDate>Mon, 26 Feb 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Sequential-storage: efficiently store data in flash</title>
          <link>https://preview.tweede.golf/en/blog/115/sequential-storage-efficiently-store-data-in-flash/</link>
          <description><![CDATA[ <p>While using a full-blown filesystem for storing your data in non-volatile memory is common practice, those filesystems are often too big, not to mention annoying to use, for the things I want to do. My solution?</p>
<p>I've been hard at work creating the <a rel="external" href="https://crates.io/crates/sequential-storage">sequential-storage</a> crate. In this blog post I'd like to go over what it is, why I created it and what it does.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/tools/">tools</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/sequential-storage-main-image.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/115/sequential-storage-efficiently-store-data-in-flash/</guid>
          <pubDate>Tue, 20 Feb 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Building an Async Runtime with mio</title>
          <link>https://preview.tweede.golf/en/blog/114/building-an-async-runtime-with-mio/</link>
          <description><![CDATA[ <p>Asynchronous programming is pretty weird. While it is straightforward enough to understand in principle (write code that looks synchronous, but may be run concurrently yada yada yada), it is not so obvious how and when async functions actually perform work. This blog aims to shed light on how that works in Rust.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/asynch-runtime-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/114/building-an-async-runtime-with-mio/</guid>
          <pubDate>Wed, 14 Feb 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust for hardware vendors</title>
          <link>https://preview.tweede.golf/en/blog/113/rust-for-hardware-vendors/</link>
          <description><![CDATA[ <p>At Tweede golf we're big fans of creating applications on embedded devices with Rust and we've written <a rel="external" href="https://tweedegolf.nl/en/blog/96/why-rust-is-a-great-fit-for-embedded-software-2023-update">a lot about it</a>.</p>
<p>But if you're a hardware vendor (be it chips or full devices/systems), should you give your users Rust support in addition to your C support?</p>
<p>In this blog I argue that the answer to the question is yes.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/depositphotos-circuitboard-rust.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/113/rust-for-hardware-vendors/</guid>
          <pubDate>Tue, 06 Feb 2024 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Introducing ntpd-rs metrics</title>
          <link>https://preview.tweede.golf/en/blog/111/introducing-ntpdrs-metrics/</link>
          <description><![CDATA[ <p>In Dutch we have a saying 'meten is weten', which translates to 'to measure is to know'. That sentiment is frequently overlooked in setting up computers and networks.</p> ]]></description>
          <author>ruben@tweedegolf.com (Ruben)</author>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <category domain="https://preview.tweede.golf/en/blog/tools/">tools</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/dashboard.png"/>
          <guid>https://preview.tweede.golf/en/blog/111/introducing-ntpdrs-metrics/</guid>
          <pubDate>Tue, 19 Dec 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>An unusual tool for unused code</title>
          <link>https://preview.tweede.golf/en/blog/110/an-unusual-tool-for-unused-code/</link>
          <description><![CDATA[ <p>Ever wanted to have a quickly put together command-line tool to delete large chunks of your project automatically? Me neither, but my colleague Marc made a pretty convincing argument as to why such a tool could be useful. So we went ahead and made it. Here are the results.</p> ]]></description>
          <author>info@tweedegolf.com (Rick)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/tools/">tools</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/mainimagecargominify.png"/>
          <guid>https://preview.tweede.golf/en/blog/110/an-unusual-tool-for-unused-code/</guid>
          <pubDate>Mon, 18 Dec 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Implementing NTPv5 in ntpd-rs</title>
          <link>https://preview.tweede.golf/en/blog/112/implementing-ntpv5-in-ntpdrs/</link>
          <description><![CDATA[ <p>At Tweede golf, we are working on modern implementations of time synchronization protocols in <a rel="external" href="https://tweedegolf.nl/en/pendulum">Project Pendulum</a>. The <a rel="external" href="https://github.com/pendulum-project/ntpd-rs">ntpd-rs</a> project is part of it, and we've recently implementend the draft specification of NTPv5, for which we built a test server at <a rel="external" href="https://www.ietf.org/">IETF</a> 118. This blogs covers the what, why and how (including a 'how to run').</p> ]]></description>
          <author>tamme@tweedegolf.com (Tamme)</author>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/ntpd-rs.png"/>
          <guid>https://preview.tweede.golf/en/blog/112/implementing-ntpv5-in-ntpdrs/</guid>
          <pubDate>Fri, 08 Dec 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Pendulum long-term goals: usability and security (video)</title>
          <link>https://preview.tweede.golf/en/blog/109/pendulum-long-term-goals-usability-and-security-video/</link>
          <description><![CDATA[ <p>I was invited by <a rel="external" href="https://www.opencompute.org/projects/time-appliances-project-tap">OCP-TAP</a> to join them in their 87th Project Call to talk about Pendulum, our Rust implementations of NTP and PTP. The recording of this call on 8 Nov 2023 is now available.</p> ]]></description>
          <author>david@tweedegolf.com (David)</author>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/statime/">statime</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/pendulum-illustration-v3-sized.png"/>
          <guid>https://preview.tweede.golf/en/blog/109/pendulum-long-term-goals-usability-and-security-video/</guid>
          <pubDate>Wed, 29 Nov 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>ntpd-rs: Folkert explains the project (video)</title>
          <link>https://preview.tweede.golf/en/blog/108/ntpd-rs-folkert-explains-the-project-video/</link>
          <description><![CDATA[ <p>At the <a rel="external" href="https://conference2023.gosim.org/">GOSIM Conference</a> in Shanghai, last September, I had the opportunity to talk about ntpd-rs, our project implementing the Network Time Protocol.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/ntpd-rs-1-1-91.png"/>
          <guid>https://preview.tweede.golf/en/blog/108/ntpd-rs-folkert-explains-the-project-video/</guid>
          <pubDate>Mon, 20 Nov 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Statime continues: Boundary Clocks and Master Ports</title>
          <link>https://preview.tweede.golf/en/blog/107/statime-continues-boundary-clocks-and-master-ports/</link>
          <description><![CDATA[ <p>About one year ago, Tweede Golf <a rel="external" href="https://tweedegolf.nl/en/blog/72/announcing-statime-a-rust-ptp-implementation">announced "Statime"</a>, a Rust implementation of the Precision Time Protocol (PTP). The result of that first phase was a working proof of concept. Quite a bit has changed since then.</p> ]]></description>
          <author>david@tweedegolf.com (David)</author>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/statime/">statime</category>
          <category domain="https://preview.tweede.golf/en/blog/stm32/">stm32</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/statime-alt-824.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/107/statime-continues-boundary-clocks-and-master-ports/</guid>
          <pubDate>Wed, 08 Nov 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>sudo-rs&#x27; first security audit</title>
          <link>https://preview.tweede.golf/en/blog/106/sudo-rs-first-security-audit/</link>
          <description><![CDATA[ <p>Thanks to funding from <a rel="external" href="https://nlnet.nl/">NLNet</a> and <a rel="external" href="https://www.abetterinternet.org/">ISRG</a>, the sudo-rs team was able to request an audit from <a rel="external" href="https://www.radicallyopensecurity.com/">Radically Open Security</a> (ROS). In this post, we'll share the findings of the audit and our response to those findings.</p> ]]></description>
          <author>marc@tweedegolf.com (Marc)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/sudosulogo1200x627.png"/>
          <guid>https://preview.tweede.golf/en/blog/106/sudo-rs-first-security-audit/</guid>
          <pubDate>Mon, 06 Nov 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Why we sponsor memory safety event Tectonics</title>
          <link>https://preview.tweede.golf/en/blog/105/why-we-sponsor-memory-safety-event-tectonics/</link>
          <description><![CDATA[ <p>One of the hot topics in software security is memory safety. This article covers two questions: What is it? And why do we think it is worth investing in?</p> ]]></description>
          <author>erik@tweedegolf.com (Erik)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/tectonicsmain2.png"/>
          <guid>https://preview.tweede.golf/en/blog/105/why-we-sponsor-memory-safety-event-tectonics/</guid>
          <pubDate>Wed, 01 Nov 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Dealing with Dependencies in Rust</title>
          <link>https://preview.tweede.golf/en/blog/104/dealing-with-dependencies-in-rust/</link>
          <description><![CDATA[ <p>At Tweede golf we are convinced that if software is written in Rust, it will be more robust (compared to legacy languages such as C, C++ or Java), and more efficient (compared to code written in PHP or Python and again, Java).</p>
<p>In order to get more robust software out there, we have to get Rust code running on computers of people who are not themselves Rust developers.</p> ]]></description>
          <author>marc@tweedegolf.com (Marc)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/cargo-debstatus-main.png"/>
          <guid>https://preview.tweede.golf/en/blog/104/dealing-with-dependencies-in-rust/</guid>
          <pubDate>Mon, 30 Oct 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>First stable release of ntpd-rs</title>
          <link>https://preview.tweede.golf/en/blog/102/first-stable-release-of-ntpdrs/</link>
          <description><![CDATA[ <p>We're proud to announce that 5 October 2023 marked the first stable release of ntpd-rs!</p> ]]></description>
          <author>erik@tweedegolf.com (Erik)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/ntpd-rs-1-1-91.png"/>
          <guid>https://preview.tweede.golf/en/blog/102/first-stable-release-of-ntpdrs/</guid>
          <pubDate>Tue, 17 Oct 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Our pixel-rendered planner with a Rust backend</title>
          <link>https://preview.tweede.golf/en/blog/100/pixel-rendered-planner/</link>
          <description><![CDATA[ <p>Just because we're engineers, doesn´t mean we build ALL our applications ourselves. But sometimes inspiration hits and good things happen. So our company planner is now canvas-rendered, has a Rust backend and works like a charm.</p> ]]></description>
          <author>marlon@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/advanced-UIs/">advanced-UIs</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/typescript/">typescript</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <guid>https://preview.tweede.golf/en/blog/100/pixel-rendered-planner/</guid>
          <pubDate>Tue, 12 Sep 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Are we embedded yet?</title>
          <link>https://preview.tweede.golf/en/blog/101/are-we-embedded-yet/</link>
          <description><![CDATA[ <p>Rust is maturing and every year more software is being made with it. In fact, Rust can be used as a competitor to C. In this article I will argue that this is now also the case for embedded Rust!</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/areweembeddedyetmainv3.png"/>
          <guid>https://preview.tweede.golf/en/blog/101/are-we-embedded-yet/</guid>
          <pubDate>Tue, 05 Sep 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust 101&#x27;s first run at STU Bratislava</title>
          <link>https://preview.tweede.golf/en/blog/99/rust-101-first-run-at-stu-bratislava/</link>
          <description><![CDATA[ <p>When we first <a rel="external" href="https://tweedegolf.nl/en/blog/80/rust-101-open-source-university-course">introduced Rust 101</a> to you on our website, preparations for its first run where in full swing. The action started in February 2023; 20 students of <a rel="external" href="https://www.fiit.stuba.sk/en">the Faculty of Informatics and Information Technologies</a> of the Slovak University of Technology in Bratislava followed 9 lectures and 9 tutorials, and worked on their own rust project to round off the course. The course was completed in May.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/education/">education</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/henkteachingremotely.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/99/rust-101-first-run-at-stu-bratislava/</guid>
          <pubDate>Mon, 21 Aug 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Sovereign Tech Fund invests in Pendulum</title>
          <link>https://preview.tweede.golf/en/blog/98/sovereign-tech-fund-invests-in-pendulum/</link>
          <description><![CDATA[ <p><a rel="external" href="https://sovereigntechfund.de/en/">Sovereign Tech Fund</a> will support our effort to build modern and memory-safe implementations of the Network Time Protocol (NTP) and the Precision Time Protocol (PTP).</p> ]]></description>
          <author>erik@tweedegolf.com (Erik)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/statime/">statime</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/pendulum-illustration-v3-sized.png"/>
          <guid>https://preview.tweede.golf/en/blog/98/sovereign-tech-fund-invests-in-pendulum/</guid>
          <pubDate>Thu, 10 Aug 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Target practice: ntpd-rs on FreeBSD and other platforms</title>
          <link>https://preview.tweede.golf/en/blog/97/target-practice-ntpdrs-on-freebsd-and-other-platforms/</link>
          <description><![CDATA[ <p>The latest release of ntpd-rs compiles on several new targets: the <a rel="external" href="https://github.com/pendulum-project/ntpd-rs/pull/724">FreeBSD</a> and <a rel="external" href="https://github.com/pendulum-project/ntpd-rs/pull/718">macOS</a> operating systems now work, and ntpd-rs now supports <a rel="external" href="https://github.com/pendulum-project/ntpd-rs/pull/696">musl libc</a> on Linux. The PRs adding support for these platforms are all community contributions, which is very exciting.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/pendulum-illustration-v3-sized.png"/>
          <guid>https://preview.tweede.golf/en/blog/97/target-practice-ntpdrs-on-freebsd-and-other-platforms/</guid>
          <pubDate>Wed, 19 Jul 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Why Rust is a great fit for embedded software - 2023 update</title>
          <link>https://preview.tweede.golf/en/blog/96/why-rust-is-a-great-fit-for-embedded-software-2023-update/</link>
          <description><![CDATA[ <p>A while ago, in 2020, I wrote <a rel="external" href="https://tweedegolf.nl/en/blog/39/why-rust-is-a-great-fit-for-embedded-software">a blog post similar to this one</a>. Sure, it has a bit of a clickbait-y title, but it couldn't be more accurate. At the time I was full of amazement about the way Rust tackles embedded software development. I forsaw great things for Rust's future, even though Rust and its ecosystem were yet not quite mature. We're 3 years further down the road right now, which is like 300 Rust years as Rust is progressing fast. About time for an update!</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/embeddedlovesrust.png"/>
          <guid>https://preview.tweede.golf/en/blog/96/why-rust-is-a-great-fit-for-embedded-software-2023-update/</guid>
          <pubDate>Wed, 12 Jul 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Our talk at CYSAT 2023</title>
          <link>https://preview.tweede.golf/en/blog/95/our-talk-at-cysat-2023/</link>
          <description><![CDATA[ <p>In April 2023 <a rel="external" href="https://tweedegolf.nl/en/about/8/wouter">Wouter</a> (left in picture) and <a rel="external" href="https://tweedegolf.nl/en/about/9/hugo">I</a> and went to Paris to attend CYSAT, a conference about cyber security for the space industry. We met up with our client GAMA's <a rel="external" href="https://declaverie.space/">Chris de Claverie</a> (right in picture). Wouter and Chris (and also <a rel="external" href="https://tweedegolf.nl/en/about/23/dion">Dion</a>) had been working together for months and teamed up to explain to the audience how and why they were putting Rust in space.</p> ]]></description>
          <author>hugo@tweedegolf.com (Hugo)</author>
          <category domain="https://preview.tweede.golf/en/blog/meetup/">meetup</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/wouterandchris.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/95/our-talk-at-cysat-2023/</guid>
          <pubDate>Fri, 30 Jun 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Report: NTP security audit</title>
          <link>https://preview.tweede.golf/en/blog/94/report-ntp-security-audit/</link>
          <description><![CDATA[ <p>In March/April 2023 ntpd-rs underwent a security audit. The audit was executed by <a rel="external" href="https://www.radicallyopensecurity.com/">Radically Open Security</a> and funded by <a rel="external" href="https://nlnet.nl/">NLnet Foundation</a>. The audit did not uncover any major issues, but did help us make ntpd-rs more robust. It has been extremely valuable to have someone from outside of the development team look at the code in detail.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/ntpauditmain.png"/>
          <guid>https://preview.tweede.golf/en/blog/94/report-ntp-security-audit/</guid>
          <pubDate>Wed, 21 Jun 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Threat Modelling</title>
          <link>https://preview.tweede.golf/en/blog/93/tg-security-sessions-2022-threat-modelling/</link>
          <description><![CDATA[ <p>Since I joined Tweede golf as the security lead, I’ve had the chance to work on improvements regarding security and privacy for all projects, as well as for the organisation in general.</p> ]]></description>
          <author>info@tweedegolf.com (Arjen)</author>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/threatmodelsized.png"/>
          <guid>https://preview.tweede.golf/en/blog/93/tg-security-sessions-2022-threat-modelling/</guid>
          <pubDate>Wed, 31 May 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>ntpd-rs: NTP for the modern era (video)</title>
          <link>https://preview.tweede.golf/en/blog/92/ntpd-rs-ntp-for-the-modern-era-video/</link>
          <description><![CDATA[ <p>At <a rel="external" href="https://2023.rustnl.org/">RustNL 2023</a>, a Rust conference held in Amsterdam recently, I had the opportunity to talk about ntpd-rs, our project implementing the Network Time Protocol.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <guid>https://preview.tweede.golf/en/blog/92/ntpd-rs-ntp-for-the-modern-era-video/</guid>
          <pubDate>Tue, 30 May 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Re-implementing Sudo in Rust (when you want more than just a sandwich)</title>
          <link>https://preview.tweede.golf/en/blog/91/reimplementing-sudo-in-rust/</link>
          <description><![CDATA[ <p>For some time, we have been quietly laying the groundwork for a new implementation of sudo in Rust. Now we are excited to talk about it!</p> ]]></description>
          <author>marc@tweedegolf.com (Marc)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/sudosologo1200x627.png"/>
          <guid>https://preview.tweede.golf/en/blog/91/reimplementing-sudo-in-rust/</guid>
          <pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Memory Safe Network Time (NTP) Has New Home, Seeks Early Adopters</title>
          <link>https://preview.tweede.golf/en/blog/90/memory-safe-network-time-ntp-has-new-home-seeks-early-adopters/</link>
          <description><![CDATA[ <p><em>This article is an adaptation of the <a rel="external" href="https://www.memorysafety.org/blog/ntp-and-nts-have-arrived/">original</a>, published by Prossimo.</em></p>
<p>We're happy to announce that the <a rel="external" href="https://www.abetterinternet.org/">Internet Security Research Group</a> has officially made us the maintainers of the open-source memory-safe implementation of NTP, <code>ntpd-rs</code>. As such, we are now also looking for early adopters.</p>
<p>The implementation includes a server and client, as well as full support for Network Time Security (NTS), which brings encryption and greater integrity to time synchronization. Timing is precise and stable, as reflected by excellent performance in the NTP pool.</p> ]]></description>
          <author>erik@tweedegolf.com (Erik)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/ntpd-rs/">ntpd-rs</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/ntpd-rs.png"/>
          <guid>https://preview.tweede.golf/en/blog/90/memory-safe-network-time-ntp-has-new-home-seeks-early-adopters/</guid>
          <pubDate>Tue, 25 Apr 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust at Royal Netherlands Aerospace Centre</title>
          <link>https://preview.tweede.golf/en/blog/89/rust-at-nlr/</link>
          <description><![CDATA[ <p><a rel="external" href="https://www.nlr.org/">NLR</a>, Royal Netherlands Aerospace Centre, invited embedded lead <a rel="external" href="https://tweedegolf.nl/en/about/23/dion">Dion</a> to explain the benefits of programming in Rust to the company.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/nlrlovesrustsmallconicheart.png"/>
          <guid>https://preview.tweede.golf/en/blog/89/rust-at-nlr/</guid>
          <pubDate>Fri, 31 Mar 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Optimizing a parser&#x2F;compiler with data-oriented design: a case study</title>
          <link>https://preview.tweede.golf/en/blog/88/data-oriented-design/</link>
          <description><![CDATA[ <p>While working on the <a rel="external" href="https://github.com/roc-lang/roc">Roc compiler</a>, we regularly dive deep on computer science topics. A recurring theme is speed, both the runtime performance of the code that we generate, as well as the performance of our compiler itself.</p>
<p>One extremely useful technique that we have been playing with is data-oriented design: the idea that the actual data you have should guide how code is structured.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/data-engineering/">data-engineering</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/tools/">tools</category>
          <guid>https://preview.tweede.golf/en/blog/88/data-oriented-design/</guid>
          <pubDate>Wed, 15 Mar 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Introducing MailCrab!</title>
          <link>https://preview.tweede.golf/en/blog/86/introducing-mailcrab/</link>
          <description><![CDATA[ <p>MailCrab is an email test server for development, written entirely in Rust.</p> ]]></description>
          <author>marlon@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/devops/">devops</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/mailcrabferris.png"/>
          <guid>https://preview.tweede.golf/en/blog/86/introducing-mailcrab/</guid>
          <pubDate>Fri, 24 Feb 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>TrustZone, trials and tribulations</title>
          <link>https://preview.tweede.golf/en/blog/85/trustzone-trials-tribulations/</link>
          <description><![CDATA[ <p><a rel="external" href="https://www.arm.com/technologies/trustzone-for-cortex-m">TrustZone-m</a> is a technology by ARM that allows you to create a Trusted Execution Environment (<a rel="external" href="https://en.wikipedia.org/wiki/Trusted_execution_environment">TEE</a>) in your software. You can use it for example to keep your encryption keys secret or to separate a big vulnerable networking stack from your own code.</p>
<p>Over the last three months I've been working on a set of crates (Rust libraries) with the aim of making the usage of TrustZone-m a lot easier.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/arm-trustzone-rust.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/85/trustzone-trials-tribulations/</guid>
          <pubDate>Fri, 10 Feb 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Mindsort: Building a research tool for the Donders Institute</title>
          <link>https://preview.tweede.golf/en/blog/84/mindsort/</link>
          <description><![CDATA[ <p>Not all Tweede golf projects are about deep technical challenges. Today, we’d like to talk about a project called <a rel="external" href="https://www.mindsort.nl/">Mindsort</a>, to show what this fun project is about and also to give some insight into how we collaborated closely with a university research institute.</p> ]]></description>
          <author>marlonp@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/research/">research</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/screenshot2.png"/>
          <guid>https://preview.tweede.golf/en/blog/84/mindsort/</guid>
          <pubDate>Wed, 08 Feb 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Crash! And now what?</title>
          <link>https://preview.tweede.golf/en/blog/82/crash-and-now-what/</link>
          <description><![CDATA[ <p>Imagine you've just deployed an embedded device in the world and of course, you have tested it thoroughly and it works. To monitor the device, you've set up some logging.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/82/crash-and-now-what/</guid>
          <pubDate>Thu, 12 Jan 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Low power &amp; low frustration (video)</title>
          <link>https://preview.tweede.golf/en/blog/83/low-power-low-frustration/</link>
          <description><![CDATA[ <p>During the Rust meetup titled "Run Rust Anywhere" in Utrecht, August 2022, <a rel="external" href="https://tweedegolf.nl/en/about/23/dion">Dion</a> talked about his Embedded Rust work.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/meetup/">meetup</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/83/low-power-low-frustration/</guid>
          <pubDate>Tue, 10 Jan 2023 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust 101: an open-source university course</title>
          <link>https://preview.tweede.golf/en/blog/80/rust-101-open-source-university-course/</link>
          <description><![CDATA[ <p>In 2009 Rust was a new language. In 2022 that isn't true anymore. Nor does Rust have anything to prove. It's made it to the Linux Kernel, and Microsoft have dubbed it "the Industry’s Best Chance at Safe Systems Programming".</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/education/">education</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rust-101-logo.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/80/rust-101-open-source-university-course/</guid>
          <pubDate>Thu, 22 Dec 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Our year in Rust </title>
          <link>https://preview.tweede.golf/en/blog/81/our-year-in-rust/</link>
          <description><![CDATA[ <p>Our year in Rust</p>
<p><em>A company-changing year in a short story,</em><br />
<em>begins with a thank you, for this new-found glory.</em></p>
<p><em>We want to be clear in this prelude,</em><br />
<em>It is to Rust we owe our gratitude.</em></p> ]]></description>
          <author>erik@tweedegolf.com (Erik)</author>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rust-2022-v2.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/81/our-year-in-rust/</guid>
          <pubDate>Wed, 21 Dec 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Meetup: Rust in open-source critical infrastructure</title>
          <link>https://preview.tweede.golf/en/blog/78/rust-in-open-source-critical-infrastructure/</link>
          <description><![CDATA[ <p>I’ve organized a couple of Rust meetups in The Netherlands this year, and last was not least. On Nov 30 we had four very interesting talks and a cool crowd at the <em>Rust in critical infrastructure</em> meetup in Amsterdam. A round-up.</p> ]]></description>
          <author>erik@tweedegolf.com (Erik)</author>
          <category domain="https://preview.tweede.golf/en/blog/meetup/">meetup</category>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/meetup-amsterdam-rust-in-critical-infrastructure.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/78/rust-in-open-source-critical-infrastructure/</guid>
          <pubDate>Fri, 16 Dec 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Sorting with SIMD</title>
          <link>https://preview.tweede.golf/en/blog/79/sorting-with-simd/</link>
          <description><![CDATA[ <p>Google recently published a <a rel="external" href="https://opensource.googleblog.com/2022/06/Vectorized%20and%20performance%20portable%20Quicksort.html">blog article</a> and paper introducing their SIMD-accelerated sorting algorithm.</p>
<p>SIMD stands for single instruction, multiple data. A single instruction is used to apply the same operation to multiple pieces of data. The prototypical example is addition, where one instruction can do e.g. 4 32-bit additions. A single SIMD addition should be roughly 4 times faster than performing 4 individual additions.</p>
<p>This kind of instruction-level parallelism has many applications in areas with a lot of number crunching, e.g. machine learning, physics simulations, and game engines. But how can this be used for sorting? Sorting does not involve arithmetic, and the whole idea of sorting is that each element moves to its unique correct place in the output. In other words, we don't want to perform the same work for each element, so at first sight it's hard to see where SIMD can help.</p>
<p>To understand the basic concepts, I played around with the ideas from the paper <a rel="external" href="https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.1009.7773&amp;rep=rep1&amp;type=pdf">Fast Quicksort Implementation Using AVX Instructions</a> by Shay Gueron and Vlad Krasnov. They provide an implementation in (surprisingly readable) assembly <a rel="external" href="https://github.com/vkrasnov/avx_qsort/blob/master/qsort_AVX2_HSW_256bit_int.s">on their github</a>. Let's see how we can make SIMD sort.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/algorithms/">algorithms</category>
          <category domain="https://preview.tweede.golf/en/blog/data-engineering/">data-engineering</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/sortingwithsimd3.png"/>
          <guid>https://preview.tweede.golf/en/blog/79/sorting-with-simd/</guid>
          <pubDate>Fri, 09 Dec 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Pioneering Rust in High Tech</title>
          <link>https://preview.tweede.golf/en/blog/76/pioneering-rust-high-tech/</link>
          <description><![CDATA[ <p>Pioneering Rust in the high-tech industry!</p>
<p>Together with High Tech Software Cluster, we organized an event to showcase Rust’s strengths and safety features to tech companies in the Brainport region in the Netherlands.</p> ]]></description>
          <author>hugo@tweedegolf.com (Hugo)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/meetup/">meetup</category>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rust-event-eindhoven-pioneering-rust.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/76/pioneering-rust-high-tech/</guid>
          <pubDate>Fri, 11 Nov 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Implementing the Network Time Protocol (NTP) in Rust</title>
          <link>https://preview.tweede.golf/en/blog/75/implementing-the-network-time-protocol-ntp-in-rust/</link>
          <description><![CDATA[ <p>For the last couple of months we at <a rel="external" href="https://tweedegolf.nl/en">Tweede golf</a> have been working on implementing a Network Time Protocol (NTP) client and server in Rust.</p>
<p>The project is a <a rel="external" href="https://www.memorysafety.org/">Prossimo</a> initiative and is supported by their sponsors, Cisco and AWS. Our first short-term goal is to deploy our implementation at <a rel="external" href="https://letsencrypt.org">Let's Encrypt</a>. The long-term goal is to develop an alternative fully-featured NTP implementation that can be widely used.</p> ]]></description>
          <author>erik@tweedegolf.com (Erik)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <guid>https://preview.tweede.golf/en/blog/75/implementing-the-network-time-protocol-ntp-in-rust/</guid>
          <pubDate>Tue, 11 Oct 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Using C libraries in your Rust project</title>
          <link>https://preview.tweede.golf/en/blog/74/using-c-libraries-in-your-rust-project/</link>
          <description><![CDATA[ <p>Recently, we gave <a rel="external" href="https://tweedegolf.nl/en/blog/71/introducing-rust-in-security-research">a workshop for the folks at iHub</a> about using Rust, specifically looking at integrating Rust with cryptography libraries written in C.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <guid>https://preview.tweede.golf/en/blog/74/using-c-libraries-in-your-rust-project/</guid>
          <pubDate>Wed, 14 Sep 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Security headers: How to go from F to A+</title>
          <link>https://preview.tweede.golf/en/blog/73/security-header-how-to-go-from-f-to-a/</link>
          <description><![CDATA[ <p>When conducting a penetration test (also known as a hack test) on a website, one of the first things that will catch my eye is the configured (or better, <em>not-configured</em>) security headers on the targeted website. Security headers are a <a rel="external" href="https://en.wikipedia.org/wiki/Defence_in_depth_(non-military)#Information_security">defense-in-depth</a> measure, in the form of response headers, that let the browser know what is allowed and what is not. Browsers will respect the rules defined by these headers and thereby protect visitors from client-side attacks and potentially leaking sensitive information.</p> ]]></description>
          <author>info@tweedegolf.com (Arjen)</author>
          <category domain="https://preview.tweede.golf/en/blog/privacy/">privacy</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/screenshot-from-2022-06-01-09-34-18.png"/>
          <guid>https://preview.tweede.golf/en/blog/73/security-header-how-to-go-from-f-to-a/</guid>
          <pubDate>Wed, 01 Jun 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Announcing: Statime, a Rust PTP implementation</title>
          <link>https://preview.tweede.golf/en/blog/72/announcing-statime-a-rust-ptp-implementation/</link>
          <description><![CDATA[ <p>For the last couple of months, we've been working on a Rust implementation of the Precision Time Protocol called <em>Statime</em> ("statim" is Latin for immediately), and we're proud to announce the completion of the first phase of the project.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/memory-safety/">memory-safety</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/pendulum/">pendulum</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/statime/">statime</category>
          <category domain="https://preview.tweede.golf/en/blog/timing/">timing</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/statime-alt-824.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/72/announcing-statime-a-rust-ptp-implementation/</guid>
          <pubDate>Tue, 24 May 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Introducing Rust in security research</title>
          <link>https://preview.tweede.golf/en/blog/71/introducing-rust-in-security-research/</link>
          <description><![CDATA[ <p>When iHub's Bernard van Gastel asked us to help them start with Rust, we were somewhat surprised by their bold step but absolutely happy to assist. In this article we'll describe how we went about designing a workshop for the iHub team.</p> ]]></description>
          <author>erik@tweedegolf.com (Erik)</author>
          <category domain="https://preview.tweede.golf/en/blog/research/">research</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rust-intro-wrokshop.png"/>
          <guid>https://preview.tweede.golf/en/blog/71/introducing-rust-in-security-research/</guid>
          <pubDate>Fri, 29 Apr 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>We asked 5 people why they like Embedded Rust</title>
          <link>https://preview.tweede.golf/en/blog/70/we-asked-5-people-why-they-like-embedded-rust/</link>
          <description><![CDATA[ <p>It is no secret that we at Tweede golf love Embedded Rust, you can read about it in our <a rel="external" href="https://tweedegolf.nl/en/blog/embedded">other blog posts</a>. But we thought it'd be fun to hear from the community too!</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/tools/">tools</category>
          <guid>https://preview.tweede.golf/en/blog/70/we-asked-5-people-why-they-like-embedded-rust/</guid>
          <pubDate>Thu, 14 Apr 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>LoRaWAN Applications in Rust</title>
          <link>https://preview.tweede.golf/en/blog/69/lorawan-applications-in-rust/</link>
          <description><![CDATA[ <p>Last September, at the start of my internship at Tweede Golf, my tutors gave me a LoRa-E5 Dev Board. My task was to do
<em>something</em> that would make it easier to write applications for this device in Rust. Here's what I did.</p> ]]></description>
          <author>info@tweedegolf.com (Rick)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/IoT/">IoT</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/lorawan-rust-crates.png"/>
          <guid>https://preview.tweede.golf/en/blog/69/lorawan-applications-in-rust/</guid>
          <pubDate>Mon, 14 Mar 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Why we replaced Google Analytics with Matomo, and why you should too</title>
          <link>https://preview.tweede.golf/en/blog/67/why-we-replaced-google-analytics-with-matomo/</link>
          <description><![CDATA[ <p>When you enabled Google Analytics (GA) on your website maybe you thought "I don't really have another viable option". Or maybe you thought "the negative effect on my visitors isn't that bad, is it?"
Both are relatable, but recently Data Protection Authorities have put GA under a microscope and concluded it actually is pretty bad. Some things in GA violate the GDPR. Apart from the question of whether it is legal or not, the fact that your visitors are tracked across the internet - we feel - is just awful. And, as it turns out, you do have options.</p> ]]></description>
          <author>info@tweedegolf.com (Arjen)</author>
          <category domain="https://preview.tweede.golf/en/blog/privacy/">privacy</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/ga.png"/>
          <guid>https://preview.tweede.golf/en/blog/67/why-we-replaced-google-analytics-with-matomo/</guid>
          <pubDate>Mon, 28 Feb 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Optimizing Image Processing on the Edge</title>
          <link>https://preview.tweede.golf/en/blog/66/optimizing-image-processing-on-the-edge/</link>
          <description><![CDATA[ <p>Over the past months, we have worked with <a rel="external" href="https://scailable.net/">Scailable</a> to optimize their neural network evaluation. Scailable runs neural networks on edge devices, taking a neural network specification and turning it into executable machine code.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/algorithms/">algorithms</category>
          <category domain="https://preview.tweede.golf/en/blog/data-engineering/">data-engineering</category>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/car-parkinglot-overlay.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/66/optimizing-image-processing-on-the-edge/</guid>
          <pubDate>Fri, 11 Feb 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Async Rust vs RTOS showdown!</title>
          <link>https://preview.tweede.golf/en/blog/65/async-rust-vs-rtos-showdown/</link>
          <description><![CDATA[ <p>It's time for another technical blog post about async Rust on embedded.
This time we're going to pitch Embassy/Rust against FreeRTOS/C on an STM32F446 microcontroller.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/IoT/">IoT</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rustvsc.png"/>
          <guid>https://preview.tweede.golf/en/blog/65/async-rust-vs-rtos-showdown/</guid>
          <pubDate>Mon, 31 Jan 2022 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>My first weeks at Tweede golf</title>
          <link>https://preview.tweede.golf/en/blog/64/the-first-weeks-at-tweede-golf/</link>
          <description><![CDATA[ <p>Let me introduce myself, I'm Dion Dokter, 24 years old (as of writing) and the newest member at Tweede golf (TG). I've always been into computers and started writing desktop software and games in 2013, embedded software in 2015, and started with Rust in 2019.</p> ]]></description>
          <author>dion@tweedegolf.com (Dion)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/meet-the-team/">meet-the-team</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/64/the-first-weeks-at-tweede-golf/</guid>
          <pubDate>Fri, 12 Nov 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Async on Embedded: Present &amp; Future</title>
          <link>https://preview.tweede.golf/en/blog/63/async-on-embedded-present-and-future/</link>
          <description><![CDATA[ <p>In our <a rel="external" href="https://tweedegolf.nl/blog/62/measuring-power-consumption-sync-vs-async">last post</a>, we've seen that <code>async</code> can help reduce power consumption in embedded programs. The async machinery is much more fine-grained at switching to a different task than we reasonably could be. Embassy schedules the work intelligently, which means the work is completed faster and we race to sleep. Our application actually gets more readable because we programmers mostly don't need to worry about breaking up our functions into tasks and switching between them. Any <code>await</code> is a possible switching point.</p>
<p>Now, we want to actually start using async in our programs. Sadly there are currently some limitations. In this post, we'll look at the current workarounds, the tradeoffs, and how the limitations might be partially resolved in the near future.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/IoT/">IoT</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/63/async-on-embedded-present-and-future/</guid>
          <pubDate>Fri, 22 Oct 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Measuring power consumption: sync vs. async</title>
          <link>https://preview.tweede.golf/en/blog/62/measuring-power-consumption-sync-vs-async/</link>
          <description><![CDATA[ <p>Previously we talked about <a rel="external" href="https://tweedegolf.nl/blog/58/async-and-asleep-designing-our-future-embedded-applications">conserving energy using async</a>. This time we'll take a look at performing power consumption measurements. Our goal is first to get a feel for how much power is consumed, and then to measure the difference between a standard synchronous and an async implementation of the same application.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/IoT/">IoT</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/power-measurement-wait-for-interrupt-busy-wait-system-off.png"/>
          <guid>https://preview.tweede.golf/en/blog/62/measuring-power-consumption-sync-vs-async/</guid>
          <pubDate>Tue, 05 Oct 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>RP1: an experimental Diesel-based CRUD for Rocket</title>
          <link>https://preview.tweede.golf/en/blog/61/an-experimental-diesel-based-crud-for-rocket/</link>
          <description><![CDATA[ <p>Most of our web applications use either Node.js or Symfony for their server-side part. Both offer a lot in terms of productivity. But every now and again, when you look at the computing power used or the amount of time a simple HTTP request takes, you can't help to think "what if..?".</p> ]]></description>
          <author>ruben@tweedegolf.com (Ruben)</author>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rp1-rocket-diesel.png"/>
          <guid>https://preview.tweede.golf/en/blog/61/an-experimental-diesel-based-crud-for-rocket/</guid>
          <pubDate>Thu, 09 Sep 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Cryptify: your identity ís the key</title>
          <link>https://preview.tweede.golf/en/blog/60/your-identity-is-the-key/</link>
          <description><![CDATA[ <p>Sending documents over the internet can be a pain. Email providers generally support attachments with a maximum size between 10 and 50 MB, for larger files one would need to find another way. Most people would probably use one of the many public cloud or file sender solutions. But what if the files to be sent contain personal information, medical information or are private family photos? And how do you know that only the recipient can access and download these files?</p> ]]></description>
          <author>info@tweedegolf.com (Arjen)</author>
          <category domain="https://preview.tweede.golf/en/blog/irma/">irma</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/privacy/">privacy</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <category domain="https://preview.tweede.golf/en/blog/typescript/">typescript</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/cryptify.jpeg"/>
          <guid>https://preview.tweede.golf/en/blog/60/your-identity-is-the-key/</guid>
          <pubDate>Fri, 03 Sep 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>How we sped up our GitLab pipelines</title>
          <link>https://preview.tweede.golf/en/blog/59/how-we-sped-up-our-gitlab-pipelines/</link>
          <description><![CDATA[ <p>CI/CD (continuous integration/continous deployment) is a proces where developers integrate new code into the main branch in regular intervals (preferably several times per day). Using CI/CD allows us to get up to a quick iteration pace and gives us a way to gather feedback quickly.</p> ]]></description>
          <author>ruben@tweedegolf.com (Ruben)</author>
          <category domain="https://preview.tweede.golf/en/blog/devops/">devops</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/pipelines.png"/>
          <guid>https://preview.tweede.golf/en/blog/59/how-we-sped-up-our-gitlab-pipelines/</guid>
          <pubDate>Mon, 30 Aug 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Async and asleep: designing our future embedded applications</title>
          <link>https://preview.tweede.golf/en/blog/58/async-and-asleep-designing-our-future-embedded-applications/</link>
          <description><![CDATA[ <p>To more effectively write Embedded Rust applications, we want a clearer picture of two aspects: how can we ergonomically perform multiple tasks concurrently, and how can we exploit low-power modes to save energy. In the coming weeks, we want to write a small but non-trivial application that communicates with 2 sensors, uses async, and uses the low-power modes to conserve energy.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/IoT/">IoT</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <guid>https://preview.tweede.golf/en/blog/58/async-and-asleep-designing-our-future-embedded-applications/</guid>
          <pubDate>Fri, 23 Jul 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rise and Shine: Putting the nRF52840 to sleep, and waking it back up</title>
          <link>https://preview.tweede.golf/en/blog/57/rise-and-shine-putting-the-nrf52840-to-sleep-and-waking-back-up/</link>
          <description><![CDATA[ <p>In embedded systems, energy efficiency is crucial for practical applications. Usually devices run on a battery, so the less energy you use, the longer the power supply will last. In this post we'll look at the basics of going to sleep and waking back up, and build a proof of concept using the nRF52840 development kit.</p> ]]></description>
          <author>folkert@tweedegolf.com (Folkert)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/IoT/">IoT</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/nrf52840blogheader.png"/>
          <guid>https://preview.tweede.golf/en/blog/57/rise-and-shine-putting-the-nrf52840-to-sleep-and-waking-back-up/</guid>
          <pubDate>Tue, 08 Jun 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Cryptographically proving timed validity without showing an expiry date</title>
          <link>https://preview.tweede.golf/en/blog/56/cryptographically-proving-timed-validity-without-showing-an-expiry-date/</link>
          <description><![CDATA[ <p>It is common wisdom that one should avoid implementing their own cryptography if at all possible. This is generally good wisdom as writing correct cryptography code can be very tricky and takes quite a bit of time to get done right.</p> ]]></description>
          <author>david@tweedegolf.com (David)</author>
          <category domain="https://preview.tweede.golf/en/blog/irma/">irma</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/privacy/">privacy</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/coronacheckapp.png"/>
          <guid>https://preview.tweede.golf/en/blog/56/cryptographically-proving-timed-validity-without-showing-an-expiry-date/</guid>
          <pubDate>Fri, 28 May 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Learning Rust, Svelte, and IRMA building a chat application with strong authentication</title>
          <link>https://preview.tweede.golf/en/blog/55/learning-rust-svelte-and-irma-building-a-chat-application-with-strong-authentication/</link>
          <description><![CDATA[ <p>As owner and technical lead of our company I'm very motivated to keep up to speed with all new developments and to continuously innovate our tech stack. Nevertheless, every once in a while I find myself lacking in in-depth, hands-on experience in languages and tools I really want to be on top of. At that moment, I know I need to hit pause and take the time for a deep dive, in the form of a personal learning project.</p> ]]></description>
          <author>marlon@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/irma/">irma</category>
          <category domain="https://preview.tweede.golf/en/blog/meet-the-team/">meet-the-team</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/privacy/">privacy</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/typescript/">typescript</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/irma-chat-diagram.png"/>
          <guid>https://preview.tweede.golf/en/blog/55/learning-rust-svelte-and-irma-building-a-chat-application-with-strong-authentication/</guid>
          <pubDate>Thu, 08 Apr 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>The future of the BSN and Dutch identification</title>
          <link>https://preview.tweede.golf/en/blog/54/the-future-of-the-bsn-and-dutch-identification/</link>
          <description><![CDATA[ <p>You might have seen the logo above on your identity card or passport. If you have it on there, then your card contains a NFC chip that allows it to be read by a computer. This way airport customs is supposed to more securely determine if your passport is really yours. But of course we could also try to read it ourselves with our own NFC reader.</p> ]]></description>
          <author>ruben@tweedegolf.com (Ruben)</author>
          <category domain="https://preview.tweede.golf/en/blog/irma/">irma</category>
          <category domain="https://preview.tweede.golf/en/blog/privacy/">privacy</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/logo-nfc.png"/>
          <guid>https://preview.tweede.golf/en/blog/54/the-future-of-the-bsn-and-dutch-identification/</guid>
          <pubDate>Fri, 26 Mar 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>David&#x27;s first weeks at Tweede golf</title>
          <link>https://preview.tweede.golf/en/blog/52/davids-first-weeks-at-tweede-golf/</link>
          <description><![CDATA[ <p>David is Tweede golf's newest addition, and not just any addition, he combines his work as a software engineer with a PhD in theoretical high energy physics. Specialized in the field of privacy and security, David brings a lot of knowledge to the team. For 2021 we were on the look-out to strengthen our expertise in this domain. David joining the team is just that!</p> ]]></description>
          <author>info@tweedegolf.com (Len)</author>
          <category domain="https://preview.tweede.golf/en/blog/meet-the-team/">meet-the-team</category>
          <category domain="https://preview.tweede.golf/en/blog/microservices/">microservices</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/newteammembertg.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/52/davids-first-weeks-at-tweede-golf/</guid>
          <pubDate>Mon, 15 Mar 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Kubernetes access with your yubikey</title>
          <link>https://preview.tweede.golf/en/blog/53/accessing-your-google-kubernetes-cluster-with-a-yubikey/</link>
          <description><![CDATA[ <p>KubiKey as a project started out with one main goal: streamline and make more secure the process of accessing the kubernetes cluster used by Tweede golf.</p> ]]></description>
          <author>david@tweedegolf.com (David)</author>
          <category domain="https://preview.tweede.golf/en/blog/microservices/">microservices</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/kubikey.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/53/accessing-your-google-kubernetes-cluster-with-a-yubikey/</guid>
          <pubDate>Mon, 15 Mar 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Long range networking with LoRa: an overview</title>
          <link>https://preview.tweede.golf/en/blog/51/long-range-networking-with-lora-an-overview/</link>
          <description><![CDATA[ <p>Welcome to the age of communication. It's 2021 and technology has come a long way. People, large machines and small devices communicate more intensively than ever before, and many technologies to enable them to do so have been developed. Some of those technologies use physical pathways like fibreglass to reach their receivers, others use radio signals to send messages. It's these wireless communication technologies that spark the imagination the most.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/IoT/">IoT</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/stm32/">stm32</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/lora_still.jpeg"/>
          <guid>https://preview.tweede.golf/en/blog/51/long-range-networking-with-lora-an-overview/</guid>
          <pubDate>Thu, 21 Jan 2021 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Build your own async primitive</title>
          <link>https://preview.tweede.golf/en/blog/50/build-your-own-async-primitive/</link>
          <description><![CDATA[ <p>Concurrency isn't easy and implementing its primitives is even harder. I found myself in need of
some no-std, no-alloc Rust async concurrency primitives and decided to write some. I kept the
scope small so even you and I can understand it. Even so, it still involved futures, wakers,
atomics, drop and unsafe. I'll introduce each of those to you while building a simple primitive.
At the end, you will be able to implement your own primitives!</p> ]]></description>
          <author>info@tweedegolf.com (Lars)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/gears730.png"/>
          <guid>https://preview.tweede.golf/en/blog/50/build-your-own-async-primitive/</guid>
          <pubDate>Mon, 14 Dec 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Safe video conferencing with Jitsi and IRMA</title>
          <link>https://preview.tweede.golf/en/blog/49/safe-video-conferencing-with-jitsi-and-irma/</link>
          <description><![CDATA[ <p>With the current pandemic situation, it is hard to hold meetings at an appropriate and safe distance. Looking for secure alternatives, our local city government approached Tweede golf with developing a novel authenticated variant of videoconferencing, with the intention of holding city council meetings using this solution.</p> ]]></description>
          <author>info@tweedegolf.com (Wouter)</author>
          <category domain="https://preview.tweede.golf/en/blog/go/">go</category>
          <category domain="https://preview.tweede.golf/en/blog/irma/">irma</category>
          <category domain="https://preview.tweede.golf/en/blog/lua/">lua</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/privacy/">privacy</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/video-conferencing-irma-jitsi.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/49/safe-video-conferencing-with-jitsi-and-irma/</guid>
          <pubDate>Fri, 11 Sep 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Potential improvements for Rust embedded abstractions</title>
          <link>https://preview.tweede.golf/en/blog/42/potential-improvements-for-rust-embedded-abstractions/</link>
          <description><![CDATA[ <p>Recently, we worked on an embedded (STM32) project in Rust and we got some hands-on experience with the abstractions commonly used for that. There's <code>embedded-hal</code>, which offers abstractions related to timing, GPIO pins and common communication peripherals like SPI and USART. There's also multiple <code>stm32xxx-hal</code> crates which offer abstractions over most of the peripherals of different STM32 CPU families. Although many of them were nice to use, we found some parts to be lacking and we'd like to propose some potential improvements to <code>embedded-hal</code> and its implementing crates.</p> ]]></description>
          <author>info@tweedegolf.com (Lars)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/stm32/">stm32</category>
          <guid>https://preview.tweede.golf/en/blog/42/potential-improvements-for-rust-embedded-abstractions/</guid>
          <pubDate>Mon, 07 Sep 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust will be the Constant in your Life (5&#x2F;5)</title>
          <link>https://preview.tweede.golf/en/blog/48/rusts-future/</link>
          <description><![CDATA[ <p>If one person at Tweede golf is a Rustacean, it’s definitely Wouter. Whether it’s about web, embedded, or even games: he tried it. And probably not just tried it, but prototyped, created, documented, presented, and nailed it. Just take a look at Wouter’s GitHub page[1].
He’s also engaged in the Rust community as an organizer of RustFest, member of the Dutch Rust foundation, and as maintainer of several open-source crates. He believes that Rust is well on its way to perfection.</p> ]]></description>
          <author>marlonp@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/technology/">technology</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/web-5.png"/>
          <guid>https://preview.tweede.golf/en/blog/48/rusts-future/</guid>
          <pubDate>Fri, 21 Aug 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Functional Rust? (4&#x2F;5)</title>
          <link>https://preview.tweede.golf/en/blog/47/functional-rust/</link>
          <description><![CDATA[ <p>Lars started at Tweede golf about a year ago. We lured him in with the prospect of working on a cool embedded project in Rust. Since then he clocked a lot of Rust hours on it and on a research project we are running. Still, he manages to astound us with critical notes on Rust. Rightly so? Let's just say interviewing a functional programming purist like Lars gives us a lot of new perspectives around Rust.</p> ]]></description>
          <author>marlonp@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/technology/">technology</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/web-4.png"/>
          <guid>https://preview.tweede.golf/en/blog/47/functional-rust/</guid>
          <pubDate>Fri, 14 Aug 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>A racing bike with training wheels (3&#x2F;5)</title>
          <link>https://preview.tweede.golf/en/blog/46/a-racing-bike-with-training-wheels-35/</link>
          <description><![CDATA[ <p>Marlon is the rookie at Tweede golf, joining us a few months back. He started out with Rust not too long ago and is therefore the guy to talk to about his learning experience with Rust.</p> ]]></description>
          <author>marlonp@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/meet-the-team/">meet-the-team</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/technology/">technology</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/web-3.png"/>
          <guid>https://preview.tweede.golf/en/blog/46/a-racing-bike-with-training-wheels-35/</guid>
          <pubDate>Fri, 07 Aug 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust wide web (2&#x2F;5)</title>
          <link>https://preview.tweede.golf/en/blog/45/rust-wide-web/</link>
          <description><![CDATA[ <p>Ruben has experience with a lot (and I mean a lot) of programming languages. When I asked which ones, he could name 21 off the top of his head. He loves experimenting with them, seeing what each can and can’t do. What makes a language unique? What can one language do better than the other? Why was Ruben the one to first evangelize Rust within Tweede golf? Let’s ask him!</p> ]]></description>
          <author>marlonp@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/web-2.png"/>
          <guid>https://preview.tweede.golf/en/blog/45/rust-wide-web/</guid>
          <pubDate>Fri, 31 Jul 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Instant data retrieval from large point clouds</title>
          <link>https://preview.tweede.golf/en/blog/44/instant-data-retrieval-from-large-point-clouds/</link>
          <description><![CDATA[ <p>The Dutch government offers the AHN <sup><a rel="external" href="https://www.ahn.nl/">[1]</a></sup> as a
way to get information about the height of any specific place in the country.
They offer this data by using a point cloud. That is, a large set of points
with some additional meta information. With the current version of the AHN the
resolution of the dataset is about eight points per square meter. This results
in about 2.5TB of compressed data for the relatively small area of the
Netherlands. While this is something that is not impossible to store locally,
it does offer some challenges.</p> ]]></description>
          <author>ruben@tweedegolf.com (Ruben)</author>
          <category domain="https://preview.tweede.golf/en/blog/data-engineering/">data-engineering</category>
          <category domain="https://preview.tweede.golf/en/blog/open-data/">open-data</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/potree.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/44/instant-data-retrieval-from-large-point-clouds/</guid>
          <pubDate>Wed, 29 Jul 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust, my first embedded language (1&#x2F;5)</title>
          <link>https://preview.tweede.golf/en/blog/40/rust-my-first-embedded-language/</link>
          <description><![CDATA[ <p>First-up is Henk Dieter, backend developer at Tweede golf. He has been interested in Rust for quite some time. Actually, it’s how Henk Dieter found out about Tweede golf, as it was one of the first companies in the Netherlands to adopt Rust as their weapon of choice.</p> ]]></description>
          <author>marlonp@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/web-1.png"/>
          <guid>https://preview.tweede.golf/en/blog/40/rust-my-first-embedded-language/</guid>
          <pubDate>Fri, 24 Jul 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Why is Rust loved? 5 developers, 5 stories</title>
          <link>https://preview.tweede.golf/en/blog/43/why-is-rust-loved-5-developers-5-stories/</link>
          <description><![CDATA[ <p>In June 2020 Rust was voted Stack Overflow's <strong>Most Loved language</strong> for the 5th (!!!) year running. Stack Overflow is a leading resource for developers and its yearly <a rel="external" href="https://insights.stackoverflow.com/survey/2020">developer survey</a> the primary source for developers' preferences.</p> ]]></description>
          <author>erik@tweedegolf.com (Erik)</author>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/why-rust/">why-rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/interview-header.png"/>
          <guid>https://preview.tweede.golf/en/blog/43/why-is-rust-loved-5-developers-5-stories/</guid>
          <pubDate>Thu, 23 Jul 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>The promise of Rust async-await for embedded</title>
          <link>https://preview.tweede.golf/en/blog/41/the-promise-of-rust-async-await-for-embedded/</link>
          <description><![CDATA[ <p>Typically embedded devices are developed using C++. At Tweede golf we have chosen to use Rust instead for implementing our embedded devices. This is controversial as the embedded hardware field is generally quite conservative. Convincing our clients to adopt Rust for their products can be a challenge.</p> ]]></description>
          <author>info@tweedegolf.com (Wouter)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/gears730.png"/>
          <guid>https://preview.tweede.golf/en/blog/41/the-promise-of-rust-async-await-for-embedded/</guid>
          <pubDate>Fri, 17 Jul 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Cloud storage simplification and abstraction for Node.js</title>
          <link>https://preview.tweede.golf/en/blog/38/clouds-without-shadows/</link>
          <description><![CDATA[ <p>The API documentation of cloud storage providers can be quite intimidating. If you are simply looking for a few straight forward storage actions these extensive APIs might seem a bit overkill. Another hurdle is that storage providers define their own distinctive APIs.</p> ]]></description>
          <author>daniel@tweedegolf.com (Daniel)</author>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/typescript/">typescript</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/storage-abstraction-package.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/38/clouds-without-shadows/</guid>
          <pubDate>Mon, 15 Jun 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Why Rust is a great fit for embedded software</title>
          <link>https://preview.tweede.golf/en/blog/39/why-rust-is-a-great-fit-for-embedded-software/</link>
          <description><![CDATA[ <p>Rust is nice for a lot of things. At Tweede golf we've been using the language primarily for high-performance web applications. But that's not all Rust can do. Rust can be used to write embedded applications as well.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/stm32/">stm32</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/embedded-rust-padded.png"/>
          <guid>https://preview.tweede.golf/en/blog/39/why-rust-is-a-great-fit-for-embedded-software/</guid>
          <pubDate>Fri, 12 Jun 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>The persistent microservice</title>
          <link>https://preview.tweede.golf/en/blog/34/miniservices-and-databases/</link>
          <description><![CDATA[ <p>The point of setting up a miniservice architecture is to enable horizontal scaling, improve reusability and to speed up development by separating each domain into an independent application. Miniservices depending on a database pose a number of challenges. We'll explore a couple of them.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/microservices/">microservices</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/eventstorep.png"/>
          <guid>https://preview.tweede.golf/en/blog/34/miniservices-and-databases/</guid>
          <pubDate>Mon, 13 Apr 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Making embedded robust with Rust</title>
          <link>https://preview.tweede.golf/en/blog/37/making-embedded-robust-with-rust/</link>
          <description><![CDATA[ <p>Embedded software has an issue that most software doesn't: It can be very hard
to get it patched. Sometimes a device hangs 5 meters high on a street light in
the middle of a highway in another country. Sometimes a device is attached to a
customer's heart. Sometimes strict validation requirements make changes to the
software very expensive. In each case it is important to build software that
doesn't fail, even in unpredictable conditions.</p> ]]></description>
          <author>info@tweedegolf.com (Lars)</author>
          <category domain="https://preview.tweede.golf/en/blog/embedded/">embedded</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/glanum-rust-inside.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/37/making-embedded-robust-with-rust/</guid>
          <pubDate>Wed, 12 Feb 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Transitioning to a miniservice architecture</title>
          <link>https://preview.tweede.golf/en/blog/36/transitioning-to-a-miniservice-architecture/</link>
          <description><![CDATA[ <p>Imagine this: you have made the wise choice of taking the <a rel="external" href="https://www.martinfowler.com/bliki/MonolithFirst.html">monolith-first</a> approach, setting up an application. You have read my <a rel="external" href="https://tweedegolf.nl/blog/32/from-monolith-to-miniservice">previous article</a> about the pros and cons of miniservices. And now, the time has come to start the transition to a miniservice architecture. How do you go about that?</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/microservices/">microservices</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/miniservice.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/36/transitioning-to-a-miniservice-architecture/</guid>
          <pubDate>Thu, 23 Jan 2020 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Open Data geeft het antwoord: hoe groen is mijn wijk?</title>
          <link>https://preview.tweede.golf/en/blog/35/open-data-geeft-het-antwoord-hoe-groen-is-mijn-wijk/</link>
          <description><![CDATA[ <p>De verhouding tussen groen (bomen, struiken, gras) en grijs (bebouwing, tegels, straat) is door de jaren heen verslechterd, met name in de steden. Weinig groen kan voor veel problemen zorgen, zoals slechte opname van regenwater en het lang vasthouden van hitte waardoor het in de stad een aantal graden warmer is dan daarbuiten.</p> ]]></description>
          <author>bram@tweedegolf.com (Bram)</author>
          <category domain="https://preview.tweede.golf/en/blog/data-engineering/">data-engineering</category>
          <category domain="https://preview.tweede.golf/en/blog/open-data/">open-data</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/groen-grijs-buurten-nijmegen.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/35/open-data-geeft-het-antwoord-hoe-groen-is-mijn-wijk/</guid>
          <pubDate>Mon, 11 Nov 2019 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>From monolith to miniservices (indeed, not microservices)</title>
          <link>https://preview.tweede.golf/en/blog/32/from-monolith-to-miniservice/</link>
          <description><![CDATA[ <p>Tweede golf has built quite a few big web applications over the last ten years. One of our specialties being the development of Symfony applications, some of these applications have become massive, with a lot of separate functionality baked into a single monolith. For now, this situation is being contained as we've been strict about minimizing technical debt. In practice, however, it's extremely hard to completely avoid accumulation of technical debt, which is one of the reasons we have started looking into introducing microservice architectures into our projects.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/microservices/">microservices</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/miniservice.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/32/from-monolith-to-miniservice/</guid>
          <pubDate>Tue, 03 Sep 2019 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Implementing Lempel-Ziv Jaccard Distance (LZJD) in Rust</title>
          <link>https://preview.tweede.golf/en/blog/33/implementing-lempel-ziv-jaccard-distance-lzjd-in-rust/</link>
          <description><![CDATA[ <p>One of our clients helps companies in becoming GDPR-compliant. A goal is to recognize sensitive pieces of user data in a big pile of registrations, receipts, emails, and transcripts, and mark them to be checked out later. As more and more data is collected by companies, finding and eliminating sensitive data becomes harder and harder, to the point where it is no longer possible for mere human employees to keep up without assistance.</p> ]]></description>
          <author>info@tweedegolf.com (Henk)</author>
          <category domain="https://preview.tweede.golf/en/blog/algorithms/">algorithms</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/ferris-lzjd.png"/>
          <guid>https://preview.tweede.golf/en/blog/33/implementing-lempel-ziv-jaccard-distance-lzjd-in-rust/</guid>
          <pubDate>Tue, 06 Aug 2019 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Meetup report: Rust for the (Inter)Net</title>
          <link>https://preview.tweede.golf/en/blog/28/meetup-report-rust-for-the-internet/</link>
          <description><![CDATA[ <p>At Tweede golf, we’ve been visiting meetups and conferences throughout the years. As we have high hopes for Rust, and a strong personal adoration for the language, we decided on hosting our own Rust meetup and starting a <a rel="external" href="https://www.meetup.com/Rust-Nijmegen/">Rust Nijmegen group</a>.</p> ]]></description>
          <author>info@tweedegolf.com (Wouter)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/spidercrab-730.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/28/meetup-report-rust-for-the-internet/</guid>
          <pubDate>Tue, 23 Apr 2019 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>How productive is Rust?</title>
          <link>https://preview.tweede.golf/en/blog/27/how-productive-is-rust/</link>
          <description><![CDATA[ <p>We often get the question how productive working with Rust is. "We know that it is awesome, but isn't it hard to learn? Don’t you struggle with the borrow checker?".
Well, we put it to the test in Google's <a rel="external" href="https://codingcompetitions.withgoogle.com/hashcode">Hash Code 2019</a> programming competition.</p> ]]></description>
          <author>info@tweedegolf.com (Wouter)</author>
          <category domain="https://preview.tweede.golf/en/blog/algorithms/">algorithms</category>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rust-hashcode.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/27/how-productive-is-rust/</guid>
          <pubDate>Fri, 08 Mar 2019 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Our first Rust crate: decrypting ansible vaults</title>
          <link>https://preview.tweede.golf/en/blog/26/our-first-rust-crate-decrypting-ansible-vaults/</link>
          <description><![CDATA[ <p>At Tweede golf I've been working with Rust a lot lately. My interest in Rust has been there for years, so I was very happy to start applying it in my working life, about a year ago. Since then I have worked with Rust both for our clients as well as employing it for our operations setup. I have also experimented with Rust for web [1]. Until now however we did not contribute to the Rust ecosystem. About time that we get our feet wet and publish our first crate!</p> ]]></description>
          <author>info@tweedegolf.com (Wouter)</author>
          <category domain="https://preview.tweede.golf/en/blog/algorithms/">algorithms</category>
          <category domain="https://preview.tweede.golf/en/blog/open-source/">open-source</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <category domain="https://preview.tweede.golf/en/blog/security/">security</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/crate.png"/>
          <guid>https://preview.tweede.golf/en/blog/26/our-first-rust-crate-decrypting-ansible-vaults/</guid>
          <pubDate>Wed, 20 Feb 2019 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Rust als webplatform?!</title>
          <link>https://preview.tweede.golf/en/blog/23/rust-als-webplatform/</link>
          <description><![CDATA[ <p>Wat is over 5 jaar het winnende open source webplatform? Inmiddels begint PHP - ondanks PHP7 - zijn ouderdom te tonen. Alternatieven als NodeJS zijn wel werkbaar, maar in lang niet alle scenario’s geschikt. We vertellen je graag waarom wij denken dat Rust de nieuwe speler kan worden voor high-performance applicaties op het web.</p> ]]></description>
          <author>info@tweedegolf.com (Wouter)</author>
          <category domain="https://preview.tweede.golf/en/blog/microservices/">microservices</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <category domain="https://preview.tweede.golf/en/blog/rust/">rust</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/rrrrrrust.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/23/rust-als-webplatform/</guid>
          <pubDate>Mon, 03 Sep 2018 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Server-side rendering voor React web apps</title>
          <link>https://preview.tweede.golf/en/blog/18/server-side-rendering-voor-react-web-apps/</link>
          <description><![CDATA[ <p>Client-side rendering versus server-side rendering. Wat zijn de voor- en nadelen van beide methodes en hoe kun je het beste uit beide combineren? En wat zijn hiervan de consequenties op verschillende niveaus?</p> ]]></description>
          <author>daniel@tweedegolf.com (Daniel)</author>
          <category domain="https://preview.tweede.golf/en/blog/advanced-UIs/">advanced-UIs</category>
          <category domain="https://preview.tweede.golf/en/blog/microservices/">microservices</category>
          <category domain="https://preview.tweede.golf/en/blog/react/">react</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/blog-react-server-side-rendering.png"/>
          <guid>https://preview.tweede.golf/en/blog/18/server-side-rendering-voor-react-web-apps/</guid>
          <pubDate>Tue, 06 Mar 2018 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>React and Three.js</title>
          <link>https://preview.tweede.golf/en/blog/14/react-and-threejs/</link>
          <description><![CDATA[ <p>In the autumn of 2015, we got to know the popular javascript library <a rel="external" href="https://facebook.github.io/react/">React</a> very well, when we used it to create a fun quiz app. Soon the idea arose to research the usage of React in combination with Three.js, the leading javascript library for 3D. We've been using Three.js for some years now in our projects and we expected that using React could improve code quality in 3D projects a lot.</p> ]]></description>
          <author>daniel@tweedegolf.com (Daniel)</author>
          <category domain="https://preview.tweede.golf/en/blog/advanced-UIs/">advanced-UIs</category>
          <category domain="https://preview.tweede.golf/en/blog/react/">react</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/minecraft.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/14/react-and-threejs/</guid>
          <pubDate>Tue, 16 Feb 2016 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Some fun with physics in Three.js</title>
          <link>https://preview.tweede.golf/en/blog/9/some-fun-with-physics-in-threejs/</link>
          <description><![CDATA[ <p>We all want our 3D visualisations to be as real as possible. A basic premise seems to be that they adhere to the laws of physics. No small feat! Or is it?</p>
<p>We decided to give it a go during a two-day programming contest. Our team's idea was to develop a web-based game where the user cycles around and has to avoid crashing into cars. To create the game, we needed a physics engine.</p> ]]></description>
          <author>ruben@tweedegolf.com (Ruben)</author>
          <category domain="https://preview.tweede.golf/en/blog/development/">development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/physics-engine.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/9/some-fun-with-physics-in-threejs/</guid>
          <pubDate>Fri, 04 Sep 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Adding artificial intelligence to 3D design</title>
          <link>https://preview.tweede.golf/en/blog/8/adding-artificial-intelligence-to-3d-design///</link>
          <description><![CDATA[ <p>In 2014 we won an innovation grant from the province of Gelderland based on our proposal to provide 'intelligent' gardening advice to users of <a rel="external" href="https://tekenjetuin.nl">Draw Your Garden</a> (Dutch: Teken Je Tuin). We created this web application for one of our clients and we have been gradually expanding it since its release. In the app users can both design their garden and view it in 3D as well as order products and contact gardeners, who in turn can submit proposals based on the users' design.</p> ]]></description>
          <author>bram@tweedegolf.com (Bram)</author>
          <category domain="https://preview.tweede.golf/en/blog/data-engineering/">data-engineering</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/yga-beregening2-5.png"/>
          <guid>https://preview.tweede.golf/en/blog/8/adding-artificial-intelligence-to-3d-design///</guid>
          <pubDate>Fri, 14 Aug 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Three.js Collada to JSON converter</title>
          <link>https://preview.tweede.golf/en/blog/10/threejs-collada-to-json-converter/</link>
          <description><![CDATA[ <p>The Collada format is the most commonly used format for 3D models in Three.js. However, the Collada format is an interchange format, not a delivery format.</p> ]]></description>
          <author>daniel@tweedegolf.com (Daniel)</author>
          <category domain="https://preview.tweede.golf/en/blog/tools/">tools</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/teapots-json-collada.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/10/threejs-collada-to-json-converter/</guid>
          <pubDate>Mon, 10 Aug 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Point Light Shadows In Three.js, part II</title>
          <link>https://preview.tweede.golf/en/blog/7/point-light-shadows-in-threejs-part-ii/</link>
          <description><![CDATA[ <p>Follow up post on point light shadows in Three.js.</p> ]]></description>
          <author>ruben@tweedegolf.com (Ruben)</author>
          <category domain="https://preview.tweede.golf/en/blog/advanced-UIs/">advanced-UIs</category>
          <category domain="https://preview.tweede.golf/en/blog/research/">research</category>
          <category domain="https://preview.tweede.golf/en/blog/web-development/">web-development</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/light-shader6.png"/>
          <guid>https://preview.tweede.golf/en/blog/7/point-light-shadows-in-threejs-part-ii/</guid>
          <pubDate>Sun, 02 Aug 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>3D data visualization for geospatial analysis using WebGL and Three.js</title>
          <link>https://preview.tweede.golf/en/blog/6/3d-data-visualization/</link>
          <description><![CDATA[ <p>At tweede golf, we value innovation: we take the time to research new technologies and subsequently challenge ourselves to try out these new techniques in order to discover new applications. We also like to learn by doing: build something first, ask questions later.</p> ]]></description>
          <author>ruben@tweedegolf.com (Ruben)</author>
          <category domain="https://preview.tweede.golf/en/blog/data-engineering/">data-engineering</category>
          <category domain="https://preview.tweede.golf/en/blog/open-data/">open-data</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/skauti.png"/>
          <guid>https://preview.tweede.golf/en/blog/6/3d-data-visualization/</guid>
          <pubDate>Wed, 15 Jul 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Point light shadows in Three.js</title>
          <link>https://preview.tweede.golf/en/blog/15/point-light-shadows-in-threejs/</link>
          <description><![CDATA[ <p>For a research and development project we created a small garden environment in which you can place lights. The objective was to visualise what your garden would look like during the night, beautifully lit according to your personal light design.</p> ]]></description>
          <author>marlon@tweedegolf.com (Marlon)</author>
          <category domain="https://preview.tweede.golf/en/blog/research/">research</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/pointlightshadowsinthreejsheader.png"/>
          <guid>https://preview.tweede.golf/en/blog/15/point-light-shadows-in-threejs/</guid>
          <pubDate>Thu, 21 May 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>Threejs rotations</title>
          <link>https://preview.tweede.golf/en/blog/5/threejs-rotations/</link>
          <description><![CDATA[ <p>In this post we create a first person 3D setting, and we use rotations to accomplish this.</p> ]]></description>
          <author>daniel@tweedegolf.com (Daniel)</author>
          <category domain="https://preview.tweede.golf/en/blog/advanced-UIs/">advanced-UIs</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/floor-and-arrow.png"/>
          <guid>https://preview.tweede.golf/en/blog/5/threejs-rotations/</guid>
          <pubDate>Fri, 17 Apr 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>WebVR and Three.js</title>
          <link>https://preview.tweede.golf/en/blog/4/react/</link>
          <description><![CDATA[ <p>Let's start simple. Our first WebVR application is a big cube in Threejs and a simple 3D scene floating inside that cube. The 3D scene consists of a transparent floor with a few simple rectangular shapes placed on it.</p> ]]></description>
          <author>daniel@tweedegolf.com (Daniel)</author>
          <category domain="https://preview.tweede.golf/en/blog/advanced-UIs/">advanced-UIs</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/threejs-barrel-distortion.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/4/react/</guid>
          <pubDate>Fri, 03 Apr 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
          <title>The history of virtual reality</title>
          <link>https://preview.tweede.golf/en/blog/1/the-history-of-virtual-reality/</link>
          <description><![CDATA[ <p>The history of virtual reality (VR) dates back to the 1950's. Since then, a lot of - sometimes quite exotic - devices have been developed.</p> ]]></description>
          <author>daniel@tweedegolf.com (Daniel)</author>
          <category domain="https://preview.tweede.golf/en/blog/technology/">technology</category>
          <media:thumbnail url="https://media.tweedegolf.nl/images/G91F075_038F.jpg"/>
          <guid>https://preview.tweede.golf/en/blog/1/the-history-of-virtual-reality/</guid>
          <pubDate>Mon, 19 Jan 2015 00:00:00 +0000</pubDate>
      </item>
    </channel>
</rss>