<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Marco Ieni</title>
    <link>https://www.marcoieni.com/posts/</link>
    <description>Recent content in Posts on Marco Ieni</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 11 Jul 2024 00:00:00 +0000</lastBuildDate>
    
        <atom:link href="https://www.marcoieni.com/posts/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>🎙️ Rust on AWS Lambda with Luciano Mammino - RustShip 8</title>
      <link>https://www.marcoieni.com/2024/07/%EF%B8%8F-rust-on-aws-lambda-with-luciano-mammino-rustship-8/</link>
      <pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2024/07/%EF%B8%8F-rust-on-aws-lambda-with-luciano-mammino-rustship-8/</guid>
      <description>&lt;p&gt;RustShip is a podcast where I interview other Rust developers to learn from their experiences.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;rustship8.png&#34; alt=&#34;RustShip episode image&#34;&gt;&lt;/p&gt;
&lt;p&gt;🦀 In RustShip #8, Luciano Mammino, co-author of &amp;ldquo;Crafting Lambda Functions in Rust&amp;rdquo;, dives into the intricacies of using Rust in AWS Lambda and Serverless environments. Discover the advantages and challenges compared to other programming languages and explore the tooling ecosystem.&lt;/p&gt;
&lt;p&gt;👉 How does the Rust developer experience compare to other programming languages? Are the available tools good enough?&lt;/p&gt;
&lt;p&gt;👉 What&amp;rsquo;s the best way to get started with Rust and AWS?&lt;/p&gt;
&lt;p&gt;You can find the full episode on &lt;a href=&#34;https://www.youtube.com/watch?v=Y0KZpoV5ebM&#34;&gt;YouTube&lt;/a&gt; or your favorite &lt;a href=&#34;https://ieni.dev/rustship&#34;&gt;podcast client&lt;/a&gt;.&lt;/p&gt;


&lt;iframe style=&#34;border-radius:12px&#34; src=&#34;https://open.spotify.com/embed/episode/5yTsgYt0cEVpuUBftIEIdU&#34;
    width=&#34;100%&#34;
    height=&#34;380&#34;
    frameBorder=&#34;0&#34; allowfullscreen=&#34;&#34;
    allow=&#34;clipboard-write; encrypted-media; fullscreen; picture-in-picture&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;

&lt;div style=&#34;display: flex; flex-wrap: nowrap;&#34;&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://music.amazon.com/podcasts/e0b4ca6a-e5e5-4f49-86db-2c21f10584f1&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/amazon_music@2x.png&#34; alt=&#34;Amazon Music Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.apple.com/us/podcast/rustship-a-rustlang-podcast/id1700278455&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/apple_podcasts@2x.png&#34; alt=&#34;Apple Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://castbox.fm/channel/id5535460&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/castbox@2x.png&#34; alt=&#34;Castbox Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.google.com/feed/aHR0cHM6Ly9hbmNob3IuZm0vcy9lNjI4ZGFhYy9wb2RjYXN0L3Jzcw&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/google_podcasts@2x.png&#34; alt=&#34;Google Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://overcast.fm/itunes1700278455/rustship-a-rustlang-podcast&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/overcast@2x.png&#34; alt=&#34;Overcast Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://pca.st/gbbifm17&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/pocket_casts@2x.png&#34; alt=&#34;Pocket Casts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://radiopublic.com/rustship-a-rustlang-podcast-G125vD&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/radiopublic@2x.png&#34; alt=&#34;RadioPublic Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://open.spotify.com/show/3tLnLLWcvJyYTwMSi67zEA&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/spotify@2x.png&#34; alt=&#34;Spotify Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://anchor.fm/s/e628daac/podcast/rss&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34; class=&#34;Link-sc-k8gsk-0 inGDgZ&#34;&gt;&lt;div class=&#34;sc-lkuliq Svszu&#34;&gt;&lt;svg width=&#34;28&#34; height=&#34;28&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 28 28&#34; class=&#34;&#34;&gt;&lt;g fill=&#34;none&#34; fill-rule=&#34;evenodd&#34;&gt;&lt;rect fill=&#34;#FE8A4C&#34; width=&#34;28&#34; height=&#34;28&#34; rx=&#34;6&#34;&gt;&lt;/rect&gt;&lt;path d=&#34;M6.822 18.5361504c.74088889 0 1.36666667.2645781 1.87755556.7932873.51866666.5139607.77777777 1.1398755.77777777 1.877074 0 .7371984-.25911111 1.3666886-.77777777 1.888247-.51088889.5139608-1.13666667.7707177-1.87755556.7707177-.73355556 0-1.35555556-.2567569-1.86666667-.7707177-.51088889-.5215584-.76644444-1.1508251-.76644444-1.888247 0-.737422.25555555-1.3633368.76644444-1.877074.51133334-.5289327 1.13311111-.7932873 1.86666667-.7932873zm-2.54422222-6.9831622c.17022222-.1937408.38488889-.3054714.644-.3351918v-.011173h1.08888889c2.97044444 0 5.51133333 1.0576418 7.62244443 3.1731489 2.1111111 2.1003117 3.1775556 4.6441939 3.2 7.6309762v1.0614406h-.0113333c-.0222222.2382097-.1184445.4431236-.2891111.6145183-.1702223.1713947-.3775556.2719523-.622.3018961v.011173h-1.8555556c-.2595555-.0073742-.4853333-.0969821-.678-.2681534-.1926667-.1861432-.3037778-.4058055-.3333333-.6592105h-.0113334v-1.0614407h.0113334c-.0222222-1.9291404-.7148889-3.5791778-2.0777778-4.9494419-1.38533333-1.3633367-3.03733333-2.0446699-4.95577778-2.0446699h-.04355555v.0111731H4.92177778v-.0111731c-.23688889-.0299438-.44444445-.126479-.622-.2904995-.17066667-.1713947-.26311111-.379884-.27777778-.6256913H4v-1.8661244c.01466667-.2607792.10711111-.4880393.27777778-.6815567zM4 6.89382242v-1.877074c.01466667-.26077921.10711111-.48803924.27777778-.68155663.17022222-.19374086.38488889-.30547145.644-.33519179h1.08888889C10.9515556 4 15.1813333 5.75774572 18.6995556 9.27368409 22.2182222 12.7967732 23.9848889 17.0425358 24 22.0109719v1.0614407h-.0113333c-.0295556.2382096-.1257778.4431235-.2891111.6145183-.1702223.1713947-.3775556.2719522-.622.301896V24h-1.8553334c-.2595555-.0073742-.4853333-.0969822-.678-.2681534-.1926666-.1861432-.3037778-.4058056-.3333333-.6592105h-.0113333v-1.0614407h.0113333c-.0146667-3.918392-1.4108889-7.2627121-4.1886667-10.0336309-2.7704444-2.78589066-6.10755553-4.17872426-10.01133331-4.17872426h-.04422222v.01117306H4.92177778v-.01117306c-.23688889-.02256958-.44444445-.11910482-.622-.29049955-.17066667-.1716182-.26311111-.37630865-.27777778-.61451827H4z&#34; fill=&#34;#FFF&#34; fill-rule=&#34;nonzero&#34;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;h2 id=&#34;dont-miss-the-next-episode&#34;&gt;Don&amp;rsquo;t miss the next episode&lt;/h2&gt;
&lt;p&gt;Follow me on &lt;a href=&#34;https://www.youtube.com/c/MarcoIeni&#34;&gt;YouTube&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/MarcoIeni&#34;&gt;Twitter&lt;/a&gt;, &lt;a href=&#34;https://www.linkedin.com/in/MarcoIeni/&#34;&gt;LinkedIn&lt;/a&gt; and &lt;a href=&#34;https://hachyderm.io/@MarcoIeni&#34;&gt;Mastodon&lt;/a&gt; to stay up to date with the latest news and join the next live episode: we are always happy to answer questions from the chat during the live stream.&lt;/p&gt;
&lt;p&gt;If you enjoy RustShip, and want to support my work, you can sponsor me on &lt;a href=&#34;https://github.com/sponsors/MarcoIeni&#34;&gt;GitHub&lt;/a&gt;. 🙏&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>🎙️ Rust Nation with Ernest Kissiedu - RustShip 7</title>
      <link>https://www.marcoieni.com/2024/04/%EF%B8%8F-rust-nation-with-ernest-kissiedu-rustship-7/</link>
      <pubDate>Sat, 06 Apr 2024 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2024/04/%EF%B8%8F-rust-nation-with-ernest-kissiedu-rustship-7/</guid>
      <description>&lt;p&gt;RustShip is a podcast where I interview other Rust developers to learn from their experiences.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;rustship7.png&#34; alt=&#34;RustShip episode image&#34;&gt;&lt;/p&gt;
&lt;p&gt;🦀 In RustShip #7, Ernest Kissiedu tells us everything about Rust Nation, one of the biggest Rust conferences, and the Rust London meetup.&lt;/p&gt;
&lt;p&gt;👉 What to expect from rust nation 24, and what are the biggest lessons learned from the previous edition?&lt;/p&gt;
&lt;p&gt;👉 How do you send a great conference talk proposal?&lt;/p&gt;
&lt;p&gt;You can find the full episode on your favorite &lt;a href=&#34;https://ieni.dev/rustship&#34;&gt;podcast client&lt;/a&gt;.&lt;/p&gt;


&lt;iframe style=&#34;border-radius:12px&#34; src=&#34;https://open.spotify.com/embed/episode/7kZAp4k2sVS9uQpwXavHMi&#34;
    width=&#34;100%&#34;
    height=&#34;380&#34;
    frameBorder=&#34;0&#34; allowfullscreen=&#34;&#34;
    allow=&#34;clipboard-write; encrypted-media; fullscreen; picture-in-picture&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;

&lt;div style=&#34;display: flex; flex-wrap: nowrap;&#34;&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://music.amazon.com/podcasts/e0b4ca6a-e5e5-4f49-86db-2c21f10584f1&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/amazon_music@2x.png&#34; alt=&#34;Amazon Music Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.apple.com/us/podcast/rustship-a-rustlang-podcast/id1700278455&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/apple_podcasts@2x.png&#34; alt=&#34;Apple Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://castbox.fm/channel/id5535460&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/castbox@2x.png&#34; alt=&#34;Castbox Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.google.com/feed/aHR0cHM6Ly9hbmNob3IuZm0vcy9lNjI4ZGFhYy9wb2RjYXN0L3Jzcw&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/google_podcasts@2x.png&#34; alt=&#34;Google Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://overcast.fm/itunes1700278455/rustship-a-rustlang-podcast&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/overcast@2x.png&#34; alt=&#34;Overcast Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://pca.st/gbbifm17&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/pocket_casts@2x.png&#34; alt=&#34;Pocket Casts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://radiopublic.com/rustship-a-rustlang-podcast-G125vD&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/radiopublic@2x.png&#34; alt=&#34;RadioPublic Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://open.spotify.com/show/3tLnLLWcvJyYTwMSi67zEA&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/spotify@2x.png&#34; alt=&#34;Spotify Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://anchor.fm/s/e628daac/podcast/rss&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34; class=&#34;Link-sc-k8gsk-0 inGDgZ&#34;&gt;&lt;div class=&#34;sc-lkuliq Svszu&#34;&gt;&lt;svg width=&#34;28&#34; height=&#34;28&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 28 28&#34; class=&#34;&#34;&gt;&lt;g fill=&#34;none&#34; fill-rule=&#34;evenodd&#34;&gt;&lt;rect fill=&#34;#FE8A4C&#34; width=&#34;28&#34; height=&#34;28&#34; rx=&#34;6&#34;&gt;&lt;/rect&gt;&lt;path d=&#34;M6.822 18.5361504c.74088889 0 1.36666667.2645781 1.87755556.7932873.51866666.5139607.77777777 1.1398755.77777777 1.877074 0 .7371984-.25911111 1.3666886-.77777777 1.888247-.51088889.5139608-1.13666667.7707177-1.87755556.7707177-.73355556 0-1.35555556-.2567569-1.86666667-.7707177-.51088889-.5215584-.76644444-1.1508251-.76644444-1.888247 0-.737422.25555555-1.3633368.76644444-1.877074.51133334-.5289327 1.13311111-.7932873 1.86666667-.7932873zm-2.54422222-6.9831622c.17022222-.1937408.38488889-.3054714.644-.3351918v-.011173h1.08888889c2.97044444 0 5.51133333 1.0576418 7.62244443 3.1731489 2.1111111 2.1003117 3.1775556 4.6441939 3.2 7.6309762v1.0614406h-.0113333c-.0222222.2382097-.1184445.4431236-.2891111.6145183-.1702223.1713947-.3775556.2719523-.622.3018961v.011173h-1.8555556c-.2595555-.0073742-.4853333-.0969821-.678-.2681534-.1926667-.1861432-.3037778-.4058055-.3333333-.6592105h-.0113334v-1.0614407h.0113334c-.0222222-1.9291404-.7148889-3.5791778-2.0777778-4.9494419-1.38533333-1.3633367-3.03733333-2.0446699-4.95577778-2.0446699h-.04355555v.0111731H4.92177778v-.0111731c-.23688889-.0299438-.44444445-.126479-.622-.2904995-.17066667-.1713947-.26311111-.379884-.27777778-.6256913H4v-1.8661244c.01466667-.2607792.10711111-.4880393.27777778-.6815567zM4 6.89382242v-1.877074c.01466667-.26077921.10711111-.48803924.27777778-.68155663.17022222-.19374086.38488889-.30547145.644-.33519179h1.08888889C10.9515556 4 15.1813333 5.75774572 18.6995556 9.27368409 22.2182222 12.7967732 23.9848889 17.0425358 24 22.0109719v1.0614407h-.0113333c-.0295556.2382096-.1257778.4431235-.2891111.6145183-.1702223.1713947-.3775556.2719522-.622.301896V24h-1.8553334c-.2595555-.0073742-.4853333-.0969822-.678-.2681534-.1926666-.1861432-.3037778-.4058056-.3333333-.6592105h-.0113333v-1.0614407h.0113333c-.0146667-3.918392-1.4108889-7.2627121-4.1886667-10.0336309-2.7704444-2.78589066-6.10755553-4.17872426-10.01133331-4.17872426h-.04422222v.01117306H4.92177778v-.01117306c-.23688889-.02256958-.44444445-.11910482-.622-.29049955-.17066667-.1716182-.26311111-.37630865-.27777778-.61451827H4z&#34; fill=&#34;#FFF&#34; fill-rule=&#34;nonzero&#34;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;If you don&amp;rsquo;t want to listen to the full episode, here are some clips:&lt;/p&gt;
&lt;h3 id=&#34;rust-nation&#34;&gt;Rust Nation&lt;/h3&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/fg-qL6XxcYo&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h3 id=&#34;rust-london-community&#34;&gt;Rust London community&lt;/h3&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/cY2ibrx2Vb4&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id=&#34;dont-miss-the-next-episode&#34;&gt;Don&amp;rsquo;t miss the next episode&lt;/h2&gt;
&lt;p&gt;Follow me on &lt;a href=&#34;https://www.youtube.com/c/MarcoIeni&#34;&gt;YouTube&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/MarcoIeni&#34;&gt;Twitter&lt;/a&gt;, &lt;a href=&#34;https://www.linkedin.com/in/MarcoIeni/&#34;&gt;LinkedIn&lt;/a&gt; and &lt;a href=&#34;https://hachyderm.io/@MarcoIeni&#34;&gt;Mastodon&lt;/a&gt; to stay up to date with the latest news and join the next live episode: we are always happy to answer questions from the chat during the live stream.&lt;/p&gt;
&lt;p&gt;If you enjoy RustShip, and want to support my work, you can sponsor me on &lt;a href=&#34;https://github.com/sponsors/MarcoIeni&#34;&gt;GitHub&lt;/a&gt;. 🙏&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>🎙️ Rust in Art with Lisa Passing - RustShip 6</title>
      <link>https://www.marcoieni.com/2024/03/%EF%B8%8F-rust-in-art-with-lisa-passing-rustship-6/</link>
      <pubDate>Wed, 06 Mar 2024 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2024/03/%EF%B8%8F-rust-in-art-with-lisa-passing-rustship-6/</guid>
      <description>&lt;p&gt;RustShip is a podcast where I interview other Rust developers to learn from their experiences.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;rustship6.png&#34; alt=&#34;RustShip episode image&#34;&gt;&lt;/p&gt;
&lt;p&gt;🦀 In RustShip #6, &lt;a href=&#34;https://toot.cat/@lislis&#34;&gt;Lisa Passing&lt;/a&gt; tells us what a creative technologist does, and how she uses Rust to create interactive artwork.&lt;/p&gt;
&lt;p&gt;👾 How to combine embedded devices and video games to create alt.ctrl games?&lt;/p&gt;
&lt;p&gt;📚 How to get started with embedded and game development in Rust?&lt;/p&gt;
&lt;p&gt;You can find the full episode on &lt;a href=&#34;https://www.youtube.com/watch?v=jAXAWr5WfZ4&#34;&gt;YouTube&lt;/a&gt; or your favorite &lt;a href=&#34;https://ieni.dev/rustship&#34;&gt;podcast client&lt;/a&gt;.&lt;/p&gt;


&lt;iframe style=&#34;border-radius:12px&#34; src=&#34;https://open.spotify.com/embed/episode/29YmXPDOhRmZBcJ1FbLjen&#34;
    width=&#34;100%&#34;
    height=&#34;380&#34;
    frameBorder=&#34;0&#34; allowfullscreen=&#34;&#34;
    allow=&#34;clipboard-write; encrypted-media; fullscreen; picture-in-picture&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;

&lt;div style=&#34;display: flex; flex-wrap: nowrap;&#34;&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://music.amazon.com/podcasts/e0b4ca6a-e5e5-4f49-86db-2c21f10584f1&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/amazon_music@2x.png&#34; alt=&#34;Amazon Music Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.apple.com/us/podcast/rustship-a-rustlang-podcast/id1700278455&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/apple_podcasts@2x.png&#34; alt=&#34;Apple Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://castbox.fm/channel/id5535460&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/castbox@2x.png&#34; alt=&#34;Castbox Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.google.com/feed/aHR0cHM6Ly9hbmNob3IuZm0vcy9lNjI4ZGFhYy9wb2RjYXN0L3Jzcw&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/google_podcasts@2x.png&#34; alt=&#34;Google Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://overcast.fm/itunes1700278455/rustship-a-rustlang-podcast&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/overcast@2x.png&#34; alt=&#34;Overcast Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://pca.st/gbbifm17&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/pocket_casts@2x.png&#34; alt=&#34;Pocket Casts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://radiopublic.com/rustship-a-rustlang-podcast-G125vD&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/radiopublic@2x.png&#34; alt=&#34;RadioPublic Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://open.spotify.com/show/3tLnLLWcvJyYTwMSi67zEA&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/spotify@2x.png&#34; alt=&#34;Spotify Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://anchor.fm/s/e628daac/podcast/rss&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34; class=&#34;Link-sc-k8gsk-0 inGDgZ&#34;&gt;&lt;div class=&#34;sc-lkuliq Svszu&#34;&gt;&lt;svg width=&#34;28&#34; height=&#34;28&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 28 28&#34; class=&#34;&#34;&gt;&lt;g fill=&#34;none&#34; fill-rule=&#34;evenodd&#34;&gt;&lt;rect fill=&#34;#FE8A4C&#34; width=&#34;28&#34; height=&#34;28&#34; rx=&#34;6&#34;&gt;&lt;/rect&gt;&lt;path d=&#34;M6.822 18.5361504c.74088889 0 1.36666667.2645781 1.87755556.7932873.51866666.5139607.77777777 1.1398755.77777777 1.877074 0 .7371984-.25911111 1.3666886-.77777777 1.888247-.51088889.5139608-1.13666667.7707177-1.87755556.7707177-.73355556 0-1.35555556-.2567569-1.86666667-.7707177-.51088889-.5215584-.76644444-1.1508251-.76644444-1.888247 0-.737422.25555555-1.3633368.76644444-1.877074.51133334-.5289327 1.13311111-.7932873 1.86666667-.7932873zm-2.54422222-6.9831622c.17022222-.1937408.38488889-.3054714.644-.3351918v-.011173h1.08888889c2.97044444 0 5.51133333 1.0576418 7.62244443 3.1731489 2.1111111 2.1003117 3.1775556 4.6441939 3.2 7.6309762v1.0614406h-.0113333c-.0222222.2382097-.1184445.4431236-.2891111.6145183-.1702223.1713947-.3775556.2719523-.622.3018961v.011173h-1.8555556c-.2595555-.0073742-.4853333-.0969821-.678-.2681534-.1926667-.1861432-.3037778-.4058055-.3333333-.6592105h-.0113334v-1.0614407h.0113334c-.0222222-1.9291404-.7148889-3.5791778-2.0777778-4.9494419-1.38533333-1.3633367-3.03733333-2.0446699-4.95577778-2.0446699h-.04355555v.0111731H4.92177778v-.0111731c-.23688889-.0299438-.44444445-.126479-.622-.2904995-.17066667-.1713947-.26311111-.379884-.27777778-.6256913H4v-1.8661244c.01466667-.2607792.10711111-.4880393.27777778-.6815567zM4 6.89382242v-1.877074c.01466667-.26077921.10711111-.48803924.27777778-.68155663.17022222-.19374086.38488889-.30547145.644-.33519179h1.08888889C10.9515556 4 15.1813333 5.75774572 18.6995556 9.27368409 22.2182222 12.7967732 23.9848889 17.0425358 24 22.0109719v1.0614407h-.0113333c-.0295556.2382096-.1257778.4431235-.2891111.6145183-.1702223.1713947-.3775556.2719522-.622.301896V24h-1.8553334c-.2595555-.0073742-.4853333-.0969822-.678-.2681534-.1926666-.1861432-.3037778-.4058056-.3333333-.6592105h-.0113333v-1.0614407h.0113333c-.0146667-3.918392-1.4108889-7.2627121-4.1886667-10.0336309-2.7704444-2.78589066-6.10755553-4.17872426-10.01133331-4.17872426h-.04422222v.01117306H4.92177778v-.01117306c-.23688889-.02256958-.44444445-.11910482-.622-.29049955-.17066667-.1716182-.26311111-.37630865-.27777778-.61451827H4z&#34; fill=&#34;#FFF&#34; fill-rule=&#34;nonzero&#34;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;h2 id=&#34;whats-next&#34;&gt;What&amp;rsquo;s next?&lt;/h2&gt;
&lt;p&gt;I will record the next episode live on YouTube on Match 8, 2023 at 20 UTC.
I will interview Ernest Kissiedu, organizer of the &lt;a href=&#34;https://www.rustnationuk.com/&#34;&gt;RustNation&lt;/a&gt; conference in London, asking him everything about RustNation, RustLondon and advice on how to organize conferences and meetups.&lt;/p&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/ESOg1yTYTC0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id=&#34;whats-up&#34;&gt;What&amp;rsquo;s up?&lt;/h2&gt;
&lt;p&gt;I recorded RustShip #6 a long time ago: November 2023. 🙈
I feel like I owe you an explanation. 😅&lt;/p&gt;
&lt;p&gt;I have a full-time job, and RustShip is not the only thing I do in my free time.
During these months, I decided to prioritize the maintenance of my open-source projects.
In particular, &lt;a href=&#34;https://release-plz.ieni.dev/&#34;&gt;release-plz&lt;/a&gt; is taking off. 🚀
It has almost 600 stars and 400 public GitHub projects using it. 🌟&lt;/p&gt;
&lt;p&gt;This also means more people asking for help and requesting new features.
As someone said: &amp;ldquo;The reward for good work is more work&amp;rdquo;. 😅&lt;/p&gt;
&lt;p&gt;That said, I miss recording RustShip episodes, and I have so many interesting conversations I want to share with you, so stay tuned for the next episodes. 🎙️&lt;/p&gt;
&lt;p&gt;If you enjoy RustShip, or you use release-plz and want to support my work, you can sponsor me on &lt;a href=&#34;https://github.com/sponsors/MarcoIeni&#34;&gt;GitHub&lt;/a&gt;. 🙏&lt;/p&gt;
&lt;p&gt;Also, follow me on &lt;a href=&#34;https://www.youtube.com/c/MarcoIeni&#34;&gt;YouTube&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/MarcoIeni&#34;&gt;Twitter&lt;/a&gt;, &lt;a href=&#34;https://www.linkedin.com/in/MarcoIeni/&#34;&gt;LinkedIn&lt;/a&gt; and &lt;a href=&#34;https://hachyderm.io/@MarcoIeni&#34;&gt;Mastodon&lt;/a&gt; to stay up to date with the latest news and join the next live episode: we are always happy to answer questions from the chat during the live stream.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>🎙️ Corrode.dev and lychee with Matthias Endler - RustShip 5</title>
      <link>https://www.marcoieni.com/2023/11/%EF%B8%8F-corrode.dev-and-lychee-with-matthias-endler-rustship-5/</link>
      <pubDate>Wed, 15 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2023/11/%EF%B8%8F-corrode.dev-and-lychee-with-matthias-endler-rustship-5/</guid>
      <description>&lt;p&gt;RustShip is a podcast where I interview other Rust developers to learn from their experience.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;rustship5.png&#34; alt=&#34;RustShip episode image&#34;&gt;&lt;/p&gt;
&lt;p&gt;✏️ In RustShip #5, &lt;a href=&#34;https://endler.dev/&#34;&gt;Matthias Endler&lt;/a&gt; walks us through corrode.dev, his Rust consultancy company, and lychee, a fast, async, stream-based link checker written in Rust.&lt;/p&gt;
&lt;p&gt;👉 Matthias shares what it&amp;rsquo;s like being a consultant and advice for developers who want to get into consultancy, especially for the Rust niche.&lt;/p&gt;
&lt;p&gt;👉 Lychee is a tool you can run in your CI to check the links of your repositories. We will discover how lychee works and what pitfalls hide behind this task.&lt;/p&gt;
&lt;p&gt;You can find the full episode on &lt;a href=&#34;https://www.youtube.com/watch?v=EjrSbTa6SiI&#34;&gt;YouTube&lt;/a&gt; or your favorite &lt;a href=&#34;https://ieni.dev/rustship&#34;&gt;podcast client&lt;/a&gt;.&lt;/p&gt;


&lt;iframe style=&#34;border-radius:12px&#34; src=&#34;https://open.spotify.com/embed/episode/7hfUJgfSSaNy6djY9qeTem&#34;
    width=&#34;100%&#34;
    height=&#34;380&#34;
    frameBorder=&#34;0&#34; allowfullscreen=&#34;&#34;
    allow=&#34;clipboard-write; encrypted-media; fullscreen; picture-in-picture&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;

&lt;div style=&#34;display: flex; flex-wrap: nowrap;&#34;&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://music.amazon.com/podcasts/e0b4ca6a-e5e5-4f49-86db-2c21f10584f1&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/amazon_music@2x.png&#34; alt=&#34;Amazon Music Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.apple.com/us/podcast/rustship-a-rustlang-podcast/id1700278455&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/apple_podcasts@2x.png&#34; alt=&#34;Apple Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://castbox.fm/channel/id5535460&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/castbox@2x.png&#34; alt=&#34;Castbox Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.google.com/feed/aHR0cHM6Ly9hbmNob3IuZm0vcy9lNjI4ZGFhYy9wb2RjYXN0L3Jzcw&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/google_podcasts@2x.png&#34; alt=&#34;Google Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://overcast.fm/itunes1700278455/rustship-a-rustlang-podcast&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/overcast@2x.png&#34; alt=&#34;Overcast Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://pca.st/gbbifm17&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/pocket_casts@2x.png&#34; alt=&#34;Pocket Casts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://radiopublic.com/rustship-a-rustlang-podcast-G125vD&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/radiopublic@2x.png&#34; alt=&#34;RadioPublic Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://open.spotify.com/show/3tLnLLWcvJyYTwMSi67zEA&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/spotify@2x.png&#34; alt=&#34;Spotify Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://anchor.fm/s/e628daac/podcast/rss&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34; class=&#34;Link-sc-k8gsk-0 inGDgZ&#34;&gt;&lt;div class=&#34;sc-lkuliq Svszu&#34;&gt;&lt;svg width=&#34;28&#34; height=&#34;28&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 28 28&#34; class=&#34;&#34;&gt;&lt;g fill=&#34;none&#34; fill-rule=&#34;evenodd&#34;&gt;&lt;rect fill=&#34;#FE8A4C&#34; width=&#34;28&#34; height=&#34;28&#34; rx=&#34;6&#34;&gt;&lt;/rect&gt;&lt;path d=&#34;M6.822 18.5361504c.74088889 0 1.36666667.2645781 1.87755556.7932873.51866666.5139607.77777777 1.1398755.77777777 1.877074 0 .7371984-.25911111 1.3666886-.77777777 1.888247-.51088889.5139608-1.13666667.7707177-1.87755556.7707177-.73355556 0-1.35555556-.2567569-1.86666667-.7707177-.51088889-.5215584-.76644444-1.1508251-.76644444-1.888247 0-.737422.25555555-1.3633368.76644444-1.877074.51133334-.5289327 1.13311111-.7932873 1.86666667-.7932873zm-2.54422222-6.9831622c.17022222-.1937408.38488889-.3054714.644-.3351918v-.011173h1.08888889c2.97044444 0 5.51133333 1.0576418 7.62244443 3.1731489 2.1111111 2.1003117 3.1775556 4.6441939 3.2 7.6309762v1.0614406h-.0113333c-.0222222.2382097-.1184445.4431236-.2891111.6145183-.1702223.1713947-.3775556.2719523-.622.3018961v.011173h-1.8555556c-.2595555-.0073742-.4853333-.0969821-.678-.2681534-.1926667-.1861432-.3037778-.4058055-.3333333-.6592105h-.0113334v-1.0614407h.0113334c-.0222222-1.9291404-.7148889-3.5791778-2.0777778-4.9494419-1.38533333-1.3633367-3.03733333-2.0446699-4.95577778-2.0446699h-.04355555v.0111731H4.92177778v-.0111731c-.23688889-.0299438-.44444445-.126479-.622-.2904995-.17066667-.1713947-.26311111-.379884-.27777778-.6256913H4v-1.8661244c.01466667-.2607792.10711111-.4880393.27777778-.6815567zM4 6.89382242v-1.877074c.01466667-.26077921.10711111-.48803924.27777778-.68155663.17022222-.19374086.38488889-.30547145.644-.33519179h1.08888889C10.9515556 4 15.1813333 5.75774572 18.6995556 9.27368409 22.2182222 12.7967732 23.9848889 17.0425358 24 22.0109719v1.0614407h-.0113333c-.0295556.2382096-.1257778.4431235-.2891111.6145183-.1702223.1713947-.3775556.2719522-.622.301896V24h-1.8553334c-.2595555-.0073742-.4853333-.0969822-.678-.2681534-.1926666-.1861432-.3037778-.4058056-.3333333-.6592105h-.0113333v-1.0614407h.0113333c-.0146667-3.918392-1.4108889-7.2627121-4.1886667-10.0336309-2.7704444-2.78589066-6.10755553-4.17872426-10.01133331-4.17872426h-.04422222v.01117306H4.92177778v-.01117306c-.23688889-.02256958-.44444445-.11910482-.622-.29049955-.17066667-.1716182-.26311111-.37630865-.27777778-.61451827H4z&#34; fill=&#34;#FFF&#34; fill-rule=&#34;nonzero&#34;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;If you don&amp;rsquo;t want to listen to the full episode, here are some clips:&lt;/p&gt;
&lt;h3 id=&#34;corrodedev-rust-consulting&#34;&gt;Corrode.dev Rust consulting&lt;/h3&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/U533f1AsZTQ&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h3 id=&#34;lychee-async-stream-based-link-checker&#34;&gt;lychee: async, stream-based link checker&lt;/h3&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/A9gKgJuYV8E&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id=&#34;whats-next&#34;&gt;What&amp;rsquo;s next?&lt;/h2&gt;
&lt;p&gt;I will record the next episode live on YouTube on November 15, 2023 at 19 UTC.
I will interview &lt;a href=&#34;https://github.com/lislis&#34;&gt;Lisa Passing&lt;/a&gt;, a self-employed creative technologist, to talk about how she uses Rust to create art and alt.ctrl games.
She will also give advice on how to get started with embedded systems and game development.&lt;/p&gt;
&lt;p&gt;Most people think about Rust as an intimidating language.
I&amp;rsquo;m sure hearing Lisa creating art and games with Rust will inspire more developers to learn it!&lt;/p&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/R9452H5DQ2s&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;I record at least one RustShip episode every month.
Follow me on &lt;a href=&#34;https://www.youtube.com/c/MarcoIeni&#34;&gt;YouTube&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/MarcoIeni&#34;&gt;Twitter&lt;/a&gt;, &lt;a href=&#34;https://www.linkedin.com/in/MarcoIeni/&#34;&gt;LinkedIn&lt;/a&gt; and &lt;a href=&#34;https://hachyderm.io/@MarcoIeni&#34;&gt;Mastodon&lt;/a&gt; to stay up to date with the latest news and join the next live episodes: we are always happy to answer questions from the chat during the live stream.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>🎙️ Graphite - Raster and Vector Graphics in Rust - RustShip 4</title>
      <link>https://www.marcoieni.com/2023/10/%EF%B8%8F-graphite-raster-and-vector-graphics-in-rust-rustship-4/</link>
      <pubDate>Tue, 17 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2023/10/%EF%B8%8F-graphite-raster-and-vector-graphics-in-rust-rustship-4/</guid>
      <description>&lt;p&gt;RustShip is a podcast where I interview other Rust developers to learn from their experience.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;rustship4.png&#34; alt=&#34;RustShip episode image&#34;&gt;&lt;/p&gt;
&lt;p&gt;✏️ In RustShip #4, &lt;a href=&#34;https://www.linkedin.com/in/keavon/&#34;&gt;Keavon Chambers&lt;/a&gt; and &lt;a href=&#34;https://x.com/DennisKobert&#34;&gt;Dennis Kobert&lt;/a&gt; walk us through Graphite, a free and open-source raster and vector graphics editor written in Rust.&lt;/p&gt;
&lt;p&gt;👉 How much is Rust suitable for this domain? How to make an open-source project approachable for new contributors? What are the challenges of running a 2D graphic editor in the browser?&lt;/p&gt;
&lt;p&gt;You can find the full episode on &lt;a href=&#34;https://www.youtube.com/live/21jMY1Dt4vE&#34;&gt;YouTube&lt;/a&gt; or your favorite &lt;a href=&#34;https://ieni.dev/rustship&#34;&gt;podcast client&lt;/a&gt;.&lt;/p&gt;


&lt;iframe style=&#34;border-radius:12px&#34; src=&#34;https://open.spotify.com/embed/episode/6xvf0C0XaokQPohvYEUldc&#34;
    width=&#34;100%&#34;
    height=&#34;380&#34;
    frameBorder=&#34;0&#34; allowfullscreen=&#34;&#34;
    allow=&#34;clipboard-write; encrypted-media; fullscreen; picture-in-picture&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;

&lt;div style=&#34;display: flex; flex-wrap: nowrap;&#34;&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://music.amazon.com/podcasts/e0b4ca6a-e5e5-4f49-86db-2c21f10584f1&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/amazon_music@2x.png&#34; alt=&#34;Amazon Music Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.apple.com/us/podcast/rustship-a-rustlang-podcast/id1700278455&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/apple_podcasts@2x.png&#34; alt=&#34;Apple Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://castbox.fm/channel/id5535460&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/castbox@2x.png&#34; alt=&#34;Castbox Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.google.com/feed/aHR0cHM6Ly9hbmNob3IuZm0vcy9lNjI4ZGFhYy9wb2RjYXN0L3Jzcw&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/google_podcasts@2x.png&#34; alt=&#34;Google Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://overcast.fm/itunes1700278455/rustship-a-rustlang-podcast&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/overcast@2x.png&#34; alt=&#34;Overcast Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://pca.st/gbbifm17&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/pocket_casts@2x.png&#34; alt=&#34;Pocket Casts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://radiopublic.com/rustship-a-rustlang-podcast-G125vD&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/radiopublic@2x.png&#34; alt=&#34;RadioPublic Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://open.spotify.com/show/3tLnLLWcvJyYTwMSi67zEA&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/spotify@2x.png&#34; alt=&#34;Spotify Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://anchor.fm/s/e628daac/podcast/rss&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34; class=&#34;Link-sc-k8gsk-0 inGDgZ&#34;&gt;&lt;div class=&#34;sc-lkuliq Svszu&#34;&gt;&lt;svg width=&#34;28&#34; height=&#34;28&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 28 28&#34; class=&#34;&#34;&gt;&lt;g fill=&#34;none&#34; fill-rule=&#34;evenodd&#34;&gt;&lt;rect fill=&#34;#FE8A4C&#34; width=&#34;28&#34; height=&#34;28&#34; rx=&#34;6&#34;&gt;&lt;/rect&gt;&lt;path d=&#34;M6.822 18.5361504c.74088889 0 1.36666667.2645781 1.87755556.7932873.51866666.5139607.77777777 1.1398755.77777777 1.877074 0 .7371984-.25911111 1.3666886-.77777777 1.888247-.51088889.5139608-1.13666667.7707177-1.87755556.7707177-.73355556 0-1.35555556-.2567569-1.86666667-.7707177-.51088889-.5215584-.76644444-1.1508251-.76644444-1.888247 0-.737422.25555555-1.3633368.76644444-1.877074.51133334-.5289327 1.13311111-.7932873 1.86666667-.7932873zm-2.54422222-6.9831622c.17022222-.1937408.38488889-.3054714.644-.3351918v-.011173h1.08888889c2.97044444 0 5.51133333 1.0576418 7.62244443 3.1731489 2.1111111 2.1003117 3.1775556 4.6441939 3.2 7.6309762v1.0614406h-.0113333c-.0222222.2382097-.1184445.4431236-.2891111.6145183-.1702223.1713947-.3775556.2719523-.622.3018961v.011173h-1.8555556c-.2595555-.0073742-.4853333-.0969821-.678-.2681534-.1926667-.1861432-.3037778-.4058055-.3333333-.6592105h-.0113334v-1.0614407h.0113334c-.0222222-1.9291404-.7148889-3.5791778-2.0777778-4.9494419-1.38533333-1.3633367-3.03733333-2.0446699-4.95577778-2.0446699h-.04355555v.0111731H4.92177778v-.0111731c-.23688889-.0299438-.44444445-.126479-.622-.2904995-.17066667-.1713947-.26311111-.379884-.27777778-.6256913H4v-1.8661244c.01466667-.2607792.10711111-.4880393.27777778-.6815567zM4 6.89382242v-1.877074c.01466667-.26077921.10711111-.48803924.27777778-.68155663.17022222-.19374086.38488889-.30547145.644-.33519179h1.08888889C10.9515556 4 15.1813333 5.75774572 18.6995556 9.27368409 22.2182222 12.7967732 23.9848889 17.0425358 24 22.0109719v1.0614407h-.0113333c-.0295556.2382096-.1257778.4431235-.2891111.6145183-.1702223.1713947-.3775556.2719522-.622.301896V24h-1.8553334c-.2595555-.0073742-.4853333-.0969822-.678-.2681534-.1926666-.1861432-.3037778-.4058056-.3333333-.6592105h-.0113333v-1.0614407h.0113333c-.0146667-3.918392-1.4108889-7.2627121-4.1886667-10.0336309-2.7704444-2.78589066-6.10755553-4.17872426-10.01133331-4.17872426h-.04422222v.01117306H4.92177778v-.01117306c-.23688889-.02256958-.44444445-.11910482-.622-.29049955-.17066667-.1716182-.26311111-.37630865-.27777778-.61451827H4z&#34; fill=&#34;#FFF&#34; fill-rule=&#34;nonzero&#34;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;If you don&amp;rsquo;t want to listen to the full episode, here are some clips:&lt;/p&gt;
&lt;h3 id=&#34;graphite-editor&#34;&gt;Graphite editor&lt;/h3&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/ZKCg7gSSrL8&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h3 id=&#34;how-graphite-welcomes-new-contributors&#34;&gt;How Graphite welcomes new contributors&lt;/h3&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/clq3Nbnxp4w&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id=&#34;whats-next&#34;&gt;What&amp;rsquo;s next?&lt;/h2&gt;
&lt;p&gt;I will record the next episode live on YouTube on October 26, 2023 at 19 UTC. I will interview &lt;a href=&#34;https://endler.dev/&#34;&gt;Matthias Endler&lt;/a&gt; to talk about &lt;a href=&#34;https://corrode.dev/&#34;&gt;corrode.dev&lt;/a&gt;, his Rust consulting company and &lt;a href=&#34;https://lychee.cli.rs/#/&#34;&gt;lychee&lt;/a&gt;, a fast, async, stream-based link checker written in Rust.&lt;/p&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/EjrSbTa6SiI&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;I record at least one RustShip episode every month.
Follow me on &lt;a href=&#34;https://www.youtube.com/c/MarcoIeni&#34;&gt;YouTube&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/MarcoIeni&#34;&gt;Twitter&lt;/a&gt;, &lt;a href=&#34;https://www.linkedin.com/in/MarcoIeni/&#34;&gt;LinkedIn&lt;/a&gt; and &lt;a href=&#34;https://hachyderm.io/@MarcoIeni&#34;&gt;Mastodon&lt;/a&gt; to stay up to date with the latest news and join the next live episodes: we are always happy to answer questions from the chat during the live stream.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>🎙️ Atuin - Shell history sync, search and backup - Ellie Huxtable - RustShip 3</title>
      <link>https://www.marcoieni.com/2023/09/%EF%B8%8F-atuin-shell-history-sync-search-and-backup-ellie-huxtable-rustship-3/</link>
      <pubDate>Wed, 27 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2023/09/%EF%B8%8F-atuin-shell-history-sync-search-and-backup-ellie-huxtable-rustship-3/</guid>
      <description>&lt;p&gt;RustShip is a podcast where I interview other Rust developers to learn from their experience.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;rustship3.png&#34; alt=&#34;RustShip episode image&#34;&gt;&lt;/p&gt;
&lt;p&gt;🏍️ In episode #3, &lt;a href=&#34;https://ellie.wtf/&#34;&gt;Ellie Huxtable&lt;/a&gt; walked us through &lt;a href=&#34;https://atuin.sh/&#34;&gt;Atuin&lt;/a&gt;, a Rust CLI tool she created to boost your CTRL+R shell history search..&lt;/p&gt;
&lt;p&gt;🐢 Atuin replaces your existing shell history with an SQLite database and records additional context for your commands to give you a faster and better search of your shell history! Additionally, Atuin (optionally) syncs your shell history between your machines! Learn more at &lt;a href=&#34;https://atuin.sh/&#34;&gt;https://atuin.sh/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can find the full episode on &lt;a href=&#34;https://youtube.com/live/nbZkjD64E5M&#34;&gt;YouTube&lt;/a&gt; or your favorite &lt;a href=&#34;https://ieni.dev/rustship&#34;&gt;podcast client&lt;/a&gt;.&lt;/p&gt;


&lt;iframe style=&#34;border-radius:12px&#34; src=&#34;https://open.spotify.com/embed/episode/2NDLnZHssebp9L7L8oUmKG&#34;
    width=&#34;100%&#34;
    height=&#34;380&#34;
    frameBorder=&#34;0&#34; allowfullscreen=&#34;&#34;
    allow=&#34;clipboard-write; encrypted-media; fullscreen; picture-in-picture&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;

&lt;div style=&#34;display: flex; flex-wrap: nowrap;&#34;&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://music.amazon.com/podcasts/e0b4ca6a-e5e5-4f49-86db-2c21f10584f1&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/amazon_music@2x.png&#34; alt=&#34;Amazon Music Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.apple.com/us/podcast/rustship-a-rustlang-podcast/id1700278455&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/apple_podcasts@2x.png&#34; alt=&#34;Apple Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://castbox.fm/channel/id5535460&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/castbox@2x.png&#34; alt=&#34;Castbox Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.google.com/feed/aHR0cHM6Ly9hbmNob3IuZm0vcy9lNjI4ZGFhYy9wb2RjYXN0L3Jzcw&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/google_podcasts@2x.png&#34; alt=&#34;Google Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://overcast.fm/itunes1700278455/rustship-a-rustlang-podcast&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/overcast@2x.png&#34; alt=&#34;Overcast Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://pca.st/gbbifm17&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/pocket_casts@2x.png&#34; alt=&#34;Pocket Casts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://radiopublic.com/rustship-a-rustlang-podcast-G125vD&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/radiopublic@2x.png&#34; alt=&#34;RadioPublic Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://open.spotify.com/show/3tLnLLWcvJyYTwMSi67zEA&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/spotify@2x.png&#34; alt=&#34;Spotify Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://anchor.fm/s/e628daac/podcast/rss&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34; class=&#34;Link-sc-k8gsk-0 inGDgZ&#34;&gt;&lt;div class=&#34;sc-lkuliq Svszu&#34;&gt;&lt;svg width=&#34;28&#34; height=&#34;28&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 28 28&#34; class=&#34;&#34;&gt;&lt;g fill=&#34;none&#34; fill-rule=&#34;evenodd&#34;&gt;&lt;rect fill=&#34;#FE8A4C&#34; width=&#34;28&#34; height=&#34;28&#34; rx=&#34;6&#34;&gt;&lt;/rect&gt;&lt;path d=&#34;M6.822 18.5361504c.74088889 0 1.36666667.2645781 1.87755556.7932873.51866666.5139607.77777777 1.1398755.77777777 1.877074 0 .7371984-.25911111 1.3666886-.77777777 1.888247-.51088889.5139608-1.13666667.7707177-1.87755556.7707177-.73355556 0-1.35555556-.2567569-1.86666667-.7707177-.51088889-.5215584-.76644444-1.1508251-.76644444-1.888247 0-.737422.25555555-1.3633368.76644444-1.877074.51133334-.5289327 1.13311111-.7932873 1.86666667-.7932873zm-2.54422222-6.9831622c.17022222-.1937408.38488889-.3054714.644-.3351918v-.011173h1.08888889c2.97044444 0 5.51133333 1.0576418 7.62244443 3.1731489 2.1111111 2.1003117 3.1775556 4.6441939 3.2 7.6309762v1.0614406h-.0113333c-.0222222.2382097-.1184445.4431236-.2891111.6145183-.1702223.1713947-.3775556.2719523-.622.3018961v.011173h-1.8555556c-.2595555-.0073742-.4853333-.0969821-.678-.2681534-.1926667-.1861432-.3037778-.4058055-.3333333-.6592105h-.0113334v-1.0614407h.0113334c-.0222222-1.9291404-.7148889-3.5791778-2.0777778-4.9494419-1.38533333-1.3633367-3.03733333-2.0446699-4.95577778-2.0446699h-.04355555v.0111731H4.92177778v-.0111731c-.23688889-.0299438-.44444445-.126479-.622-.2904995-.17066667-.1713947-.26311111-.379884-.27777778-.6256913H4v-1.8661244c.01466667-.2607792.10711111-.4880393.27777778-.6815567zM4 6.89382242v-1.877074c.01466667-.26077921.10711111-.48803924.27777778-.68155663.17022222-.19374086.38488889-.30547145.644-.33519179h1.08888889C10.9515556 4 15.1813333 5.75774572 18.6995556 9.27368409 22.2182222 12.7967732 23.9848889 17.0425358 24 22.0109719v1.0614407h-.0113333c-.0295556.2382096-.1257778.4431235-.2891111.6145183-.1702223.1713947-.3775556.2719522-.622.301896V24h-1.8553334c-.2595555-.0073742-.4853333-.0969822-.678-.2681534-.1926666-.1861432-.3037778-.4058056-.3333333-.6592105h-.0113333v-1.0614407h.0113333c-.0146667-3.918392-1.4108889-7.2627121-4.1886667-10.0336309-2.7704444-2.78589066-6.10755553-4.17872426-10.01133331-4.17872426h-.04422222v.01117306H4.92177778v-.01117306c-.23688889-.02256958-.44444445-.11910482-.622-.29049955-.17066667-.1716182-.26311111-.37630865-.27777778-.61451827H4z&#34; fill=&#34;#FFF&#34; fill-rule=&#34;nonzero&#34;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;If you don&amp;rsquo;t want to listen to the full episode, here are some clips:&lt;/p&gt;
&lt;h3 id=&#34;atuin&#34;&gt;Atuin&lt;/h3&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/-Vshi_wVlys&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h3 id=&#34;why-rust-for-clis&#34;&gt;Why Rust for CLIs?&lt;/h3&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/H3Qw_-eh1a0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id=&#34;whats-next&#34;&gt;What&amp;rsquo;s next?&lt;/h2&gt;
&lt;p&gt;I will record the next episode live on YouTube on October 2, 2023 at 19 UTC. I will interview Keavon Chambers and Dennis Kobert about &lt;a href=&#34;https://graphite.rs/&#34;&gt;Graphite&lt;/a&gt;, a free and open-source raster and vector graphics editor written in Rust.&lt;/p&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/21jMY1Dt4vE&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;I plan to do at least one episode every month.
Follow me on &lt;a href=&#34;https://www.youtube.com/c/MarcoIeni&#34;&gt;YouTube&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/MarcoIeni&#34;&gt;Twitter&lt;/a&gt;, &lt;a href=&#34;https://www.linkedin.com/in/MarcoIeni/&#34;&gt;LinkedIn&lt;/a&gt; and &lt;a href=&#34;https://hachyderm.io/@MarcoIeni&#34;&gt;Mastodon&lt;/a&gt; to stay up to date with the latest news and join the next live episodes: we are always happy to answer questions from the chat during the live stream.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>🎙️ Trustfall and cargo-semver-checks with Predrag Gruevski - RustShip</title>
      <link>https://www.marcoieni.com/2023/09/%EF%B8%8F-trustfall-and-cargo-semver-checks-with-predrag-gruevski-rustship/</link>
      <pubDate>Wed, 13 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2023/09/%EF%B8%8F-trustfall-and-cargo-semver-checks-with-predrag-gruevski-rustship/</guid>
      <description>&lt;p&gt;RustShip is a podcast where I interview other Rust developers to learn from their experiences.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;rustship2.png&#34; alt=&#34;RustShip episode image&#34;&gt;&lt;/p&gt;
&lt;p&gt;In the second episode, &lt;a href=&#34;https://predr.ag/&#34;&gt;Predrag Gruevski&lt;/a&gt; walked us through &lt;a href=&#34;https://github.com/obi1kenobi/trustfall&#34;&gt;Trustfall&lt;/a&gt; and &lt;a href=&#34;https://github.com/obi1kenobi/cargo-semver-checks&#34;&gt;Cargo-semver-checks&lt;/a&gt;, two Rust projects he created.&lt;/p&gt;
&lt;p&gt;🔍 Trustfall is a query engine for any combination of data sources, allowing to query files and APIs as if they were databases.&lt;/p&gt;
&lt;p&gt;🛡️ Cargo-semver-checks is a cargo plugin that scans Rust crates looking for semver violations. Under the hood it uses Trustfall and Rustdoc to do its job.&lt;/p&gt;
&lt;p&gt;Predrag also shared what it&amp;rsquo;s like maintaining an healthy open source project, and how to avoid burnout.&lt;/p&gt;
&lt;p&gt;You can find the full episode on &lt;a href=&#34;https://www.youtube.com/live/_xABF_H8b3g?feature=share&amp;amp;t=311&#34;&gt;YouTube&lt;/a&gt; or your favorite &lt;a href=&#34;https://ieni.dev/rustship&#34;&gt;podcast client&lt;/a&gt;.&lt;/p&gt;


&lt;iframe style=&#34;border-radius:12px&#34; src=&#34;https://open.spotify.com/embed/episode/0aw6o5qz7ULpIfZQHKwW0x&#34;
    width=&#34;100%&#34;
    height=&#34;380&#34;
    frameBorder=&#34;0&#34; allowfullscreen=&#34;&#34;
    allow=&#34;clipboard-write; encrypted-media; fullscreen; picture-in-picture&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;

&lt;div style=&#34;display: flex; flex-wrap: nowrap;&#34;&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://music.amazon.com/podcasts/e0b4ca6a-e5e5-4f49-86db-2c21f10584f1&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/amazon_music@2x.png&#34; alt=&#34;Amazon Music Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.apple.com/us/podcast/rustship-a-rustlang-podcast/id1700278455&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/apple_podcasts@2x.png&#34; alt=&#34;Apple Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://castbox.fm/channel/id5535460&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/castbox@2x.png&#34; alt=&#34;Castbox Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.google.com/feed/aHR0cHM6Ly9hbmNob3IuZm0vcy9lNjI4ZGFhYy9wb2RjYXN0L3Jzcw&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/google_podcasts@2x.png&#34; alt=&#34;Google Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://overcast.fm/itunes1700278455/rustship-a-rustlang-podcast&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/overcast@2x.png&#34; alt=&#34;Overcast Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://pca.st/gbbifm17&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/pocket_casts@2x.png&#34; alt=&#34;Pocket Casts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://radiopublic.com/rustship-a-rustlang-podcast-G125vD&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/radiopublic@2x.png&#34; alt=&#34;RadioPublic Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://open.spotify.com/show/3tLnLLWcvJyYTwMSi67zEA&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/spotify@2x.png&#34; alt=&#34;Spotify Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://anchor.fm/s/e628daac/podcast/rss&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34; class=&#34;Link-sc-k8gsk-0 inGDgZ&#34;&gt;&lt;div class=&#34;sc-lkuliq Svszu&#34;&gt;&lt;svg width=&#34;28&#34; height=&#34;28&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 28 28&#34; class=&#34;&#34;&gt;&lt;g fill=&#34;none&#34; fill-rule=&#34;evenodd&#34;&gt;&lt;rect fill=&#34;#FE8A4C&#34; width=&#34;28&#34; height=&#34;28&#34; rx=&#34;6&#34;&gt;&lt;/rect&gt;&lt;path d=&#34;M6.822 18.5361504c.74088889 0 1.36666667.2645781 1.87755556.7932873.51866666.5139607.77777777 1.1398755.77777777 1.877074 0 .7371984-.25911111 1.3666886-.77777777 1.888247-.51088889.5139608-1.13666667.7707177-1.87755556.7707177-.73355556 0-1.35555556-.2567569-1.86666667-.7707177-.51088889-.5215584-.76644444-1.1508251-.76644444-1.888247 0-.737422.25555555-1.3633368.76644444-1.877074.51133334-.5289327 1.13311111-.7932873 1.86666667-.7932873zm-2.54422222-6.9831622c.17022222-.1937408.38488889-.3054714.644-.3351918v-.011173h1.08888889c2.97044444 0 5.51133333 1.0576418 7.62244443 3.1731489 2.1111111 2.1003117 3.1775556 4.6441939 3.2 7.6309762v1.0614406h-.0113333c-.0222222.2382097-.1184445.4431236-.2891111.6145183-.1702223.1713947-.3775556.2719523-.622.3018961v.011173h-1.8555556c-.2595555-.0073742-.4853333-.0969821-.678-.2681534-.1926667-.1861432-.3037778-.4058055-.3333333-.6592105h-.0113334v-1.0614407h.0113334c-.0222222-1.9291404-.7148889-3.5791778-2.0777778-4.9494419-1.38533333-1.3633367-3.03733333-2.0446699-4.95577778-2.0446699h-.04355555v.0111731H4.92177778v-.0111731c-.23688889-.0299438-.44444445-.126479-.622-.2904995-.17066667-.1713947-.26311111-.379884-.27777778-.6256913H4v-1.8661244c.01466667-.2607792.10711111-.4880393.27777778-.6815567zM4 6.89382242v-1.877074c.01466667-.26077921.10711111-.48803924.27777778-.68155663.17022222-.19374086.38488889-.30547145.644-.33519179h1.08888889C10.9515556 4 15.1813333 5.75774572 18.6995556 9.27368409 22.2182222 12.7967732 23.9848889 17.0425358 24 22.0109719v1.0614407h-.0113333c-.0295556.2382096-.1257778.4431235-.2891111.6145183-.1702223.1713947-.3775556.2719522-.622.301896V24h-1.8553334c-.2595555-.0073742-.4853333-.0969822-.678-.2681534-.1926666-.1861432-.3037778-.4058056-.3333333-.6592105h-.0113333v-1.0614407h.0113333c-.0146667-3.918392-1.4108889-7.2627121-4.1886667-10.0336309-2.7704444-2.78589066-6.10755553-4.17872426-10.01133331-4.17872426h-.04422222v.01117306H4.92177778v-.01117306c-.23688889-.02256958-.44444445-.11910482-.622-.29049955-.17066667-.1716182-.26311111-.37630865-.27777778-.61451827H4z&#34; fill=&#34;#FFF&#34; fill-rule=&#34;nonzero&#34;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;If you don&amp;rsquo;t want to listen to the full episode, here are some clips:&lt;/p&gt;
&lt;h3 id=&#34;trustfall-query-engine&#34;&gt;Trustfall Query Engine&lt;/h3&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/dMIgeuQ9Yvk&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h3 id=&#34;cargo-semver-checks&#34;&gt;Cargo-semver-checks&lt;/h3&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/0EAdtxIzGQE&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h3 id=&#34;maintaining-an-healthy-open-source-project&#34;&gt;Maintaining an healthy open source Project&lt;/h3&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/VgotXUsVaUU&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id=&#34;whats-next&#34;&gt;What&amp;rsquo;s next?&lt;/h2&gt;
&lt;p&gt;I will record the next episode live on YouTube on September 18, 2023 at 19 UTC. I will interview &lt;a href=&#34;https://ellie.wtf/&#34;&gt;Ellie Huxtable&lt;/a&gt; about &lt;a href=&#34;https://atuin.sh/&#34;&gt;Atuin&lt;/a&gt;, a Rust CLI tool she created to boost your CTRL+R shell history search.&lt;/p&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/nbZkjD64E5M&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;I plan to do at least one episode every month.
Follow me on &lt;a href=&#34;https://www.youtube.com/c/MarcoIeni&#34;&gt;YouTube&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/MarcoIeni&#34;&gt;Twitter&lt;/a&gt;, &lt;a href=&#34;https://www.linkedin.com/in/MarcoIeni/&#34;&gt;LinkedIn&lt;/a&gt; and &lt;a href=&#34;https://hachyderm.io/@MarcoIeni&#34;&gt;Mastodon&lt;/a&gt; to stay up to date with the latest news and join the next live episodes: we are always happy to answer questions from the chat during the live stream.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>RustShip: a new Rust podcast</title>
      <link>https://www.marcoieni.com/2023/08/rustship-a-new-rust-podcast/</link>
      <pubDate>Fri, 18 Aug 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2023/08/rustship-a-new-rust-podcast/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m excited to announce that I started RustShip: a new podcast where I interview other Rust developers to learn from their experiences.&lt;/p&gt;
&lt;h2 id=&#34;rustship-1--creating-successful-open-source-projects&#34;&gt;RustShip #1 — Creating successful open-source projects&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;rustship1.jpg&#34; alt=&#34;RustShip episode image&#34;&gt;&lt;/p&gt;
&lt;p&gt;In the first episode, I interviewed &lt;a href=&#34;https://orhun.dev/&#34;&gt;Orhun&lt;/a&gt;, Arch Linux package maintainer and author of tens of open-source projects used and loved by thousands of people, including myself.&lt;/p&gt;
&lt;p&gt;Orhun shared what it&amp;rsquo;s like maintaining Rust code and his advice on increasing the adoption of our open-source projects.&lt;/p&gt;
&lt;p&gt;You can find the full episode on &lt;a href=&#34;https://www.youtube.com/live/_xABF_H8b3g?feature=share&amp;amp;t=311&#34;&gt;YouTube&lt;/a&gt; or your favorite &lt;a href=&#34;https://ieni.dev/rustship&#34;&gt;podcast client&lt;/a&gt;.&lt;/p&gt;


&lt;iframe style=&#34;border-radius:12px&#34; src=&#34;https://open.spotify.com/embed/episode/6vCL6aF2DMupE90AlitxUZ&#34;
    width=&#34;100%&#34;
    height=&#34;380&#34;
    frameBorder=&#34;0&#34; allowfullscreen=&#34;&#34;
    allow=&#34;clipboard-write; encrypted-media; fullscreen; picture-in-picture&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;

&lt;div style=&#34;display: flex; flex-wrap: nowrap;&#34;&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://music.amazon.com/podcasts/e0b4ca6a-e5e5-4f49-86db-2c21f10584f1&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/amazon_music@2x.png&#34; alt=&#34;Amazon Music Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.apple.com/us/podcast/rustship-a-rustlang-podcast/id1700278455&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/apple_podcasts@2x.png&#34; alt=&#34;Apple Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://castbox.fm/channel/id5535460&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/castbox@2x.png&#34; alt=&#34;Castbox Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://podcasts.google.com/feed/aHR0cHM6Ly9hbmNob3IuZm0vcy9lNjI4ZGFhYy9wb2RjYXN0L3Jzcw&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/google_podcasts@2x.png&#34; alt=&#34;Google Podcasts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://overcast.fm/itunes1700278455/rustship-a-rustlang-podcast&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/overcast@2x.png&#34; alt=&#34;Overcast Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://pca.st/gbbifm17&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/pocket_casts@2x.png&#34; alt=&#34;Pocket Casts Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://radiopublic.com/rustship-a-rustlang-podcast-G125vD&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/radiopublic@2x.png&#34; alt=&#34;RadioPublic Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://open.spotify.com/show/3tLnLLWcvJyYTwMSi67zEA&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34;&gt;&lt;div&gt;&lt;img src=&#34;https://www.marcoieni.com/img/spotify@2x.png&#34; alt=&#34;Spotify Logo&#34; height=&#34;28&#34; width=&#34;28&#34;&gt;&lt;/div&gt;&lt;/a&gt;
        &lt;a style=&#34;margin-right: 10px;&#34; href=&#34;https://anchor.fm/s/e628daac/podcast/rss&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; data-encore-id=&#34;textLink&#34; class=&#34;Link-sc-k8gsk-0 inGDgZ&#34;&gt;&lt;div class=&#34;sc-lkuliq Svszu&#34;&gt;&lt;svg width=&#34;28&#34; height=&#34;28&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 28 28&#34; class=&#34;&#34;&gt;&lt;g fill=&#34;none&#34; fill-rule=&#34;evenodd&#34;&gt;&lt;rect fill=&#34;#FE8A4C&#34; width=&#34;28&#34; height=&#34;28&#34; rx=&#34;6&#34;&gt;&lt;/rect&gt;&lt;path d=&#34;M6.822 18.5361504c.74088889 0 1.36666667.2645781 1.87755556.7932873.51866666.5139607.77777777 1.1398755.77777777 1.877074 0 .7371984-.25911111 1.3666886-.77777777 1.888247-.51088889.5139608-1.13666667.7707177-1.87755556.7707177-.73355556 0-1.35555556-.2567569-1.86666667-.7707177-.51088889-.5215584-.76644444-1.1508251-.76644444-1.888247 0-.737422.25555555-1.3633368.76644444-1.877074.51133334-.5289327 1.13311111-.7932873 1.86666667-.7932873zm-2.54422222-6.9831622c.17022222-.1937408.38488889-.3054714.644-.3351918v-.011173h1.08888889c2.97044444 0 5.51133333 1.0576418 7.62244443 3.1731489 2.1111111 2.1003117 3.1775556 4.6441939 3.2 7.6309762v1.0614406h-.0113333c-.0222222.2382097-.1184445.4431236-.2891111.6145183-.1702223.1713947-.3775556.2719523-.622.3018961v.011173h-1.8555556c-.2595555-.0073742-.4853333-.0969821-.678-.2681534-.1926667-.1861432-.3037778-.4058055-.3333333-.6592105h-.0113334v-1.0614407h.0113334c-.0222222-1.9291404-.7148889-3.5791778-2.0777778-4.9494419-1.38533333-1.3633367-3.03733333-2.0446699-4.95577778-2.0446699h-.04355555v.0111731H4.92177778v-.0111731c-.23688889-.0299438-.44444445-.126479-.622-.2904995-.17066667-.1713947-.26311111-.379884-.27777778-.6256913H4v-1.8661244c.01466667-.2607792.10711111-.4880393.27777778-.6815567zM4 6.89382242v-1.877074c.01466667-.26077921.10711111-.48803924.27777778-.68155663.17022222-.19374086.38488889-.30547145.644-.33519179h1.08888889C10.9515556 4 15.1813333 5.75774572 18.6995556 9.27368409 22.2182222 12.7967732 23.9848889 17.0425358 24 22.0109719v1.0614407h-.0113333c-.0295556.2382096-.1257778.4431235-.2891111.6145183-.1702223.1713947-.3775556.2719522-.622.301896V24h-1.8553334c-.2595555-.0073742-.4853333-.0969822-.678-.2681534-.1926666-.1861432-.3037778-.4058056-.3333333-.6592105h-.0113333v-1.0614407h.0113333c-.0146667-3.918392-1.4108889-7.2627121-4.1886667-10.0336309-2.7704444-2.78589066-6.10755553-4.17872426-10.01133331-4.17872426h-.04422222v.01117306H4.92177778v-.01117306c-.23688889-.02256958-.44444445-.11910482-.622-.29049955-.17066667-.1716182-.26311111-.37630865-.27777778-.61451827H4z&#34; fill=&#34;#FFF&#34; fill-rule=&#34;nonzero&#34;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;If you don&amp;rsquo;t have time to listen to the full episode, here are some clips:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=sTEMWoIMBMY&#34;&gt;Creativity and Open Source&lt;/a&gt; (25 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=2sHD3CCPt40&#34;&gt;Open Source sustainability and burnout&lt;/a&gt; (37 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=1j4zuPN_8kU&#34;&gt;Packaging Rust binaries for Linux distributions&lt;/a&gt; (4 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/shorts/EPlX1ITjGoE&#34;&gt;Dogfooding: use your own tools&lt;/a&gt; (1 minute)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;whats-next&#34;&gt;What&amp;rsquo;s next?&lt;/h2&gt;
&lt;p&gt;I will record the next episode live on &lt;a href=&#34;https://www.youtube.com/watch?v=bh6BaJhIrFM&#34;&gt;YouTube&lt;/a&gt; on August 23, 2023. I will interview &lt;a href=&#34;https://predr.ag/&#34;&gt;Predrag Gruevski&lt;/a&gt; about &lt;a href=&#34;https://github.com/obi1kenobi/trustfall&#34;&gt;Trustfall&lt;/a&gt; and &lt;a href=&#34;https://github.com/obi1kenobi/cargo-semver-checks&#34;&gt;Cargo-semver-checks&lt;/a&gt;, two Rust projects he created:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trustfall is a query engine for any combination of data sources, allowing to query files and APIs as if they were databases.&lt;/li&gt;
&lt;li&gt;Cargo-semver-checks is a cargo plugin that scans Rust crates looking for semver violations. It uses Trustfall and Rustdoc to do its job.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I plan to do at least one episode every month.
Follow me on &lt;a href=&#34;https://www.youtube.com/c/MarcoIeni&#34;&gt;YouTube&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/MarcoIeni&#34;&gt;Twitter&lt;/a&gt;, &lt;a href=&#34;https://www.linkedin.com/in/MarcoIeni/&#34;&gt;LinkedIn&lt;/a&gt; and &lt;a href=&#34;https://hachyderm.io/@MarcoIeni&#34;&gt;Mastodon&lt;/a&gt; to stay up to date with the latest news and join the next live episodes: I&amp;rsquo;m always happy to answer questions from the chat during the live stream.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>2022 recap, 2023 goals</title>
      <link>https://www.marcoieni.com/2023/01/2022-recap-2023-goals/</link>
      <pubDate>Tue, 03 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2023/01/2022-recap-2023-goals/</guid>
      <description>&lt;p&gt;Another year has gone by, and December is the perfect time to reflect on what we&amp;rsquo;ve done in the past 12 months.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wait, but why? 🤔&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Like everyone else, I don&amp;rsquo;t have enough time to do everything I want.
I need to make choices and prioritize.
Reviewing my past year&amp;rsquo;s accomplishments helps me decide what to focus on in 2023.&lt;/p&gt;
&lt;h2 id=&#34;open-source-contributions&#34;&gt;Open Source contributions&lt;/h2&gt;
&lt;p&gt;My GitHub profile counts 1044 contributions to &lt;em&gt;public&lt;/em&gt; open-source projects in 2022.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;gh.png&#34; alt=&#34;contributions&#34;&gt;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s almost double of 2021 (526 contributions) and nearly the same as 2020 (1141 contributions).
These numbers don&amp;rsquo;t mean much, because they don&amp;rsquo;t consider the quality of each contribution, but they give me an idea of how much I worked on open-source.&lt;/p&gt;
&lt;p&gt;Contributing to open-source has various benefits, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;making you a better programmer;&lt;/li&gt;
&lt;li&gt;boosting your career;&lt;/li&gt;
&lt;li&gt;connecting you with great people.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However, only some contributions I make improve my skills or connect me with interesting people.
For example, sometimes, I need to update a dependency with breaking changes or fix a broken CI script.&lt;/p&gt;
&lt;p&gt;The main reason why I contribute is to give back to the world and the community
a tiny bit of everything I received in my life.
Knowing I&amp;rsquo;m improving someone&amp;rsquo;s life by fixing a bug or adding a feature they desire is great.&lt;/p&gt;
&lt;p&gt;📝 In 2023, I want to make 1000+ contributions as well.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see the open-source projects I contributed the most.&lt;/p&gt;
&lt;h3 id=&#34;release-plzhttpsgithubcommarcoienirelease-plz&#34;&gt;&lt;a href=&#34;https://github.com/MarcoIeni/release-plz&#34;&gt;Release-plz&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Release-plz&lt;/code&gt; is the tool I wanted to have in the Rust ecosystem — so I wrote it.
It automates the release process of Rust packages, making releasing a new version as easy as pressing the &amp;ldquo;merge&amp;rdquo; PR button.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;pr.png&#34; alt=&#34;pr&#34;&gt;&lt;/p&gt;
&lt;p&gt;I started working on it exactly one year ago, and it&amp;rsquo;s now ready to be used in the wild. If you want to use &lt;code&gt;release-plz&lt;/code&gt; to release Rust crates from CI, check out &lt;a href=&#34;https://wwww.marcoieni.com/2022/06/release-plz-release-rust-packages-from-ci/&#34;&gt;this&lt;/a&gt; blog post!&lt;/p&gt;
&lt;p&gt;📝 I genuinely believe &lt;code&gt;release-plz&lt;/code&gt; makes maintaining Rust crates easier, so in 2023 I want to implement new features and add more integration tests.&lt;/p&gt;
&lt;h3 id=&#34;rust-design-patterns-bookhttpsgithubcomrust-unofficialpatterns&#34;&gt;&lt;a href=&#34;https://github.com/rust-unofficial/patterns&#34;&gt;Rust Design Patterns book&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The Rust Design Patterns book is a great learning resource, and the number of content grows every year.
In 2022, I helped maintain this book by reviewing PRs and making some chapters more fluent.&lt;/p&gt;
&lt;p&gt;I would love to polish and simplify more chapters of the book because I want to make learning Rust easier. Unfortunately, it takes too much time to review all of them. 😢&lt;/p&gt;
&lt;p&gt;📝 For this project, in 2023, I plan to continue staying mainly in &amp;ldquo;maintenance mode&amp;rdquo;, reviewing other developers&amp;rsquo; PRs. As a stretch goal, I want to improve two existing chapters.&lt;/p&gt;
&lt;h3 id=&#34;cargo-clonehttpsgithubcomjanlikarcargo-clone&#34;&gt;&lt;a href=&#34;https://github.com/JanLikar/cargo-clone&#34;&gt;Cargo clone&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Cargo-clone&lt;/code&gt; is a CLI tool that clones the source code of Rust crates.
It&amp;rsquo;s a great tool to have in your Rust developer toolbox, and it&amp;rsquo;s also a dependency of &lt;code&gt;release-plz&lt;/code&gt;.
I did 11 PRs where I updated its dependencies and extracted the &lt;a href=&#34;https://github.com/JanLikar/cargo-clone/tree/master/cargo-clone-core&#34;&gt;cargo-clone-core&lt;/a&gt; crate.
You can now use &lt;code&gt;cargo-clone-core&lt;/code&gt; as a library in your Rust projects when you need to download the source code of a crate!&lt;/p&gt;
&lt;h3 id=&#34;vspacecodehttpsvspacecodegithubio&#34;&gt;&lt;a href=&#34;https://vspacecode.github.io/&#34;&gt;VSpaceCode&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;VSpaceCode&lt;/code&gt; is a VSCode extension that emulates &lt;a href=&#34;https://www.spacemacs.org/&#34;&gt;spacemacs&lt;/a&gt; key bindings.
This extension improves my experience of using VSCode by 10x, and people like it too.
Here are the reviews we received in 2022:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;reviews.png&#34; alt=&#34;reviews&#34;&gt;&lt;/p&gt;
&lt;p&gt;In 2022, I reviewed all the PRs opened on the repository, ensuring people could add new features.
There are many improvements I would like to implement, but unfortunately
I don&amp;rsquo;t have enough time.&lt;/p&gt;
&lt;p&gt;📝 For this project, in 2023, I plan to continue staying mainly in &amp;ldquo;maintenance mode&amp;rdquo;, reviewing other developers&amp;rsquo; PRs.&lt;/p&gt;
&lt;h2 id=&#34;talks&#34;&gt;Talks&lt;/h2&gt;
&lt;p&gt;In 2022, I presented four talks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;24 March 2022 @ &lt;a href=&#34;https://www.codemotion.com/&#34;&gt;Codemotion&lt;/a&gt; — &lt;a href=&#34;https://talks.codemotion.com/client-grpc-load-balancing--a-more-relia&#34;&gt;Client gRPC load balancing – A more reliable infrastructure using Rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;26 May 2022 @ &lt;a href=&#34;https://www.cdkday.com/&#34;&gt;CDK Day&lt;/a&gt; — &lt;a href=&#34;https://www.youtube.com/watch?v=s8tO-ymVQPg&amp;amp;t=6504s&#34;&gt;Cdk8s vs Helm: a TrueLayer case study&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;23 September 2022 @ &lt;a href=&#34;https://www.socrates-conference.it/&#34;&gt;SoCraTes IT&lt;/a&gt; — Rust: why should I care?&lt;/li&gt;
&lt;li&gt;22 October 2022 @ &lt;a href=&#34;https://linuxdaymilano.org/&#34;&gt;Linux Day Milano&lt;/a&gt; — Introduction to Rust 🇮🇹&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In 2021, I only presented one talk, so I shared my knowledge more this year.&lt;/p&gt;
&lt;p&gt;📝 For 2023, I already have some talk ideas around Kubernetes and Rust. I want to send at least five talk proposals.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;talk.jpg&#34; alt=&#34;talk&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;rustlab-workshop&#34;&gt;RustLab workshop&lt;/h2&gt;
&lt;p&gt;On 2 October 2022, I conducted a workshop at &lt;a href=&#34;https://rustlab.it/&#34;&gt;RustLab&lt;/a&gt;: &amp;ldquo;Write a production-ready Rust HTTP API&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;The topic is something I care about. Too many people think that you should use Rust only for low-level systems programming,
and when you tell them you write backend code in Rust at your daily job, they roll their eyes.
With this workshop, my goal was to show that writing an HTTP server in Rust is fine.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m satisfied with the results. Most of the attendees were able to follow the workshop and left positive feedback.&lt;/p&gt;
&lt;p&gt;📝 I spent a lot of time creating this workshop, and in 2023, I want to keep working on it because I think it can help people to get started with Backend development in Rust.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;workshop.jpeg&#34; alt=&#34;workshop&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;pointer-podcast-interview&#34;&gt;Pointer Podcast interview&lt;/h2&gt;
&lt;p&gt;On 24 November 2022, the guys of &lt;a href=&#34;https://pointerpodcast.it/&#34;&gt;Pointer Podcast&lt;/a&gt; interviewed me about &lt;a href=&#34;https://www.youtube.com/watch?v=vZUfJFZb4Z8&#34;&gt;Prisma and Rust&lt;/a&gt; (Italian).&lt;/p&gt;
&lt;p&gt;I was already a listener of this Podcast, so when they contacted me to ask if I wanted to be interviewed, a giant smile appeared on my face.&lt;/p&gt;
&lt;p&gt;After listening to the interview, I realized that from the tone of my voice, you could tell I was a bit nervous.
I will try to be more relaxed and talk slower for my next interviews.&lt;/p&gt;
&lt;p&gt;Listening critically to yourself is the best way to improve your speaking skills!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;pointer.png&#34; alt=&#34;pointer&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;daily-job&#34;&gt;Daily job&lt;/h2&gt;
&lt;h3 id=&#34;truelayer&#34;&gt;TrueLayer&lt;/h3&gt;
&lt;p&gt;8 August 2022 was my last day at TrueLayer.
I have worked at TrueLayer for almost two years, and it has been a fantastic journey.&lt;/p&gt;
&lt;p&gt;In 2022 I worked at the Engineering Ops team with the mission of increasing the productivity of TrueLayer&amp;rsquo;s engineers.&lt;/p&gt;
&lt;p&gt;I learned a lot and had the privilege of working with many passionate and friendly people.
I&amp;rsquo;m happy about my time at TrueLayer and will never stop recommending this company. 🙌&lt;/p&gt;
&lt;h3 id=&#34;prisma&#34;&gt;Prisma&lt;/h3&gt;
&lt;p&gt;On 5 September 2022, I joined Prisma to work on the &lt;a href=&#34;https://www.prisma.io/data-platform&#34;&gt;Prisma Data Platform&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While the Prisma ORM simplifies working with databases, the Data platform helps you deploy your app to prod.
I care a lot about developers&amp;rsquo; productivity, and I think this project can greatly impact it. 🚀&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m happy to be part of the Prisma team, and it feels great to work for a company that contributes so much to open-source.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;prisma.png&#34; alt=&#34;prisma&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;mentoring&#34;&gt;Mentoring&lt;/h2&gt;
&lt;p&gt;Since September 2020, I joined the &lt;a href=&#34;https://rustbeginners.github.io/awesome-rust-mentors/&#34;&gt;awesome rust mentors&lt;/a&gt; army. 🤠&lt;/p&gt;
&lt;p&gt;Around five people contacted me this year, asking for advice regarding their careers or how to improve with Rust.
I helped two of them to make their first open-source contribution, and they chose &lt;code&gt;release-plz&lt;/code&gt; as the first project to contribute!&lt;/p&gt;
&lt;p&gt;📝 Helping other people gives me joy, and in 2023 I want to continue being available for mentoring.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;message.png&#34; alt=&#34;message&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;setting-goals&#34;&gt;Setting goals&lt;/h2&gt;
&lt;p&gt;From my &lt;a href=&#34;https://www.marcoieni.com/2021/01/my-2020-recap-open-source-talks-meetups-and-more/&#34;&gt;2020 recap&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I have long-term goals, [&amp;hellip;] but I feel like seriously writing them down and assigning a deadline will prevent me from doing random stuff that just came to my mind the day before while I was going to bed. 😅&lt;/p&gt;
&lt;p&gt;So actually not having proper new year&amp;rsquo;s resolutions is the way to go for me in 2021.
Let&amp;rsquo;s see if I will change my mind in 2022. 😁&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yes. I spent 28 years of my life without writing down any explicit goal.
I probably didn&amp;rsquo;t like the feeling of being &amp;ldquo;trapped&amp;rdquo; by my plans and wanted to leave more space for curiosity and exploration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wow, this new programming language seems cool, I want to play with it this weekend. 😱&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Honestly, it was great, this attitude allowed me to discover and learn tons of stuff, and I don&amp;rsquo;t regret it.
This year, I also read &amp;ldquo;It doesn&amp;rsquo;t have to be crazy at work&amp;rdquo; by Jason Fried and David Heinemeier Hansson,
which also confirms that setting goals might not be a great idea.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So why setting goals for 2023? 🤔&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have too many things on my plate right now.
So, instead of adding more stuff, I want to be more intentional and focus on the things I&amp;rsquo;m already working on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I don&amp;rsquo;t want to learn a new programming language – I want to get better at Rust.&lt;/li&gt;
&lt;li&gt;I don&amp;rsquo;t want to start a new open-source project – I want to make &lt;code&gt;release-plz&lt;/code&gt; great.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s see how it goes. 🤞&lt;/p&gt;
&lt;h2 id=&#34;2023-goals&#34;&gt;2023 goals&lt;/h2&gt;
&lt;p&gt;Here are my 2023 goals based on my 2022 recap:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;⭐ Contributing to open-source software:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Make 1000+ contributions in public repositories.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Add five new features to release-plz. (Help wanted!)&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Record a YouTube video with a release-plz demo.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; No unreviewed PRs in the Rust Design Patterns book. Stretch: improve two chapters.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; No unreviewed PRs in VSpaceCode.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;⭐️ Helping getting started with Backend development in Rust with the HTTP API workshop:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; The workshop contains detailed instructions on how to run it autonomously and asynchronously (i.e., without me).&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Record a YouTube video of me going through the workshop.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; A tech content creator streamed themselves going through the workshop.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Conduct the workshop at one conference.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;⭐ Sharing knowledge:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Send five talk proposals.&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Answer all mentoring-related messages.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;reminder-dont-burn-out&#34;&gt;Reminder: don&amp;rsquo;t burn-out&lt;/h2&gt;
&lt;p&gt;As a reminder for myself when I&amp;rsquo;m going to read this post in 2024: it&amp;rsquo;s okay to
miss most of these goals.
I&amp;rsquo;m setting these goals to set a direction and be more intentional.
Achieving them would be nice, but that&amp;rsquo;s not the point.
Remember that you should use most of your free time to relax and have fun.&lt;/p&gt;
&lt;p&gt;If you have made it this far, thank you for reading, and happy 2023! 🙏&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Release-plz: release Rust packages from CI</title>
      <link>https://www.marcoieni.com/2022/06/release-plz-release-rust-packages-from-ci/</link>
      <pubDate>Sun, 26 Jun 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2022/06/release-plz-release-rust-packages-from-ci/</guid>
      <description>&lt;p&gt;Releasing Rust packages is tedious and error-prone, just like most IT manual tasks.
For every package you want to release, you need to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Increase the version in &lt;code&gt;Cargo.toml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Update the changelog.&lt;/li&gt;
&lt;li&gt;Publish the package in the cargo registry (for example, &lt;a href=&#34;https://crates.io&#34;&gt;crates.io&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Create and push a git tag.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Meet &lt;a href=&#34;https://github.com/MarcoIeni/release-plz&#34;&gt;release-plz&lt;/a&gt;: a Rust open-source project that automates these tasks, allowing developers to release Rust packages without the command line.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;logo.png&#34; alt=&#34;logo&#34; title=&#34;logo&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Version update based on &lt;a href=&#34;https://www.conventionalcommits.org/en/v1.0.0/&#34;&gt;conventional commits&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Changelog update with &lt;a href=&#34;https://github.com/orhun/git-cliff&#34;&gt;git-cliff&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Cargo workspaces support.&lt;/li&gt;
&lt;li&gt;No configuration required.&lt;/li&gt;
&lt;li&gt;Optional &lt;code&gt;cargo update&lt;/code&gt; before releasing.&lt;/li&gt;
&lt;li&gt;Git tag created for every released package.&lt;/li&gt;
&lt;li&gt;Package published to any cargo registry.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-does-it-work&#34;&gt;How does it work&lt;/h2&gt;
&lt;p&gt;The recommended way to run release-plz is via the &lt;a href=&#34;https://github.com/MarcoIeni/release-plz-action&#34;&gt;GitHub action&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By default, every time you merge a commit to the main branch, the GitHub action runs two commands: &lt;code&gt;release-plz release-pr&lt;/code&gt; and &lt;code&gt;release-plz release&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;creating-a-release-pull-request&#34;&gt;Creating a release pull request&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;release-plz release-pr&lt;/code&gt; command opens a pull request that prepares the next release.
The command:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Downloads the packages of the project from the cargo registry.&lt;/li&gt;
&lt;li&gt;Compares the local packages with the downloaded ones to determine the new commits.&lt;/li&gt;
&lt;li&gt;Updates the packages versions based on the messages of the new commits (based on &lt;a href=&#34;https://www.conventionalcommits.org/en/v1.0.0/&#34;&gt;conventional commits&lt;/a&gt; and &lt;a href=&#34;https://semver.org/&#34;&gt;semantic versioning&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Updates the packages changelogs with the messages of the new commits.&lt;/li&gt;
&lt;li&gt;Updates all dependencies by running &lt;code&gt;cargo update&lt;/code&gt; (disabled by default).&lt;/li&gt;
&lt;li&gt;Raises a pull request with the above changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the project maintainer merges the release pull request, the packages are ready to be published.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example of a &lt;a href=&#34;https://github.com/MarcoIeni/release-plz/pull/189&#34;&gt;PR&lt;/a&gt; opened by release-plz in the release-plz GitHub project itself:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;pr.png&#34; alt=&#34;pr&#34; title=&#34;pr&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;releasing-all-updated-packages&#34;&gt;Releasing all updated packages&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;release-plz release&lt;/code&gt; command releases all the packages with a new version.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For example, let&amp;rsquo;s say you have a workspace with two packages: &lt;code&gt;pkg-a&lt;/code&gt; (version 0.3.1) and &lt;code&gt;pkg-b&lt;/code&gt; (version 0.2.2).
The crates.io registry contains &lt;code&gt;pkg-a&lt;/code&gt; version 0.3.1, but it doesn&amp;rsquo;t contain &lt;code&gt;pkg-b&lt;/code&gt; version 0.2.2 because you didn&amp;rsquo;t publish this version yet.
In this case, release-plz would release &lt;code&gt;pkg-b&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For every release, release-plz:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Creates a git tag named &lt;code&gt;&amp;lt;package_name&amp;gt;-v&amp;lt;version&amp;gt;&lt;/code&gt; (e.g. &lt;code&gt;tokio-v1.8.1&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Publishes the package to the cargo registry by running &lt;code&gt;cargo publish&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;releases-made-easy&#34;&gt;Releases made easy&lt;/h2&gt;
&lt;p&gt;In short, release-plz makes releasing Rust packages child&amp;rsquo;s play:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;For every change, release-plz creates a release pull request.&lt;/li&gt;
&lt;li&gt;The release pull request reminds the maintainer about the unpublished changes.&lt;/li&gt;
&lt;li&gt;When the maintainer reviews and merges the pull request, release-plz releases the updated packages.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Release-plz makes releasing Rust packages as easy as clicking the pull request &amp;ldquo;merge&amp;rdquo; button.&lt;/p&gt;
&lt;h2 id=&#34;why-yet-another-release-tool&#34;&gt;Why yet another release tool&lt;/h2&gt;
&lt;p&gt;New Rust apps and rewrites are mushrooming every day.
Choosing which tools to add to your developer toolbox is becoming harder and harder.&lt;/p&gt;
&lt;p&gt;I feel obliged to explain why I created this project and how it compares with similar tools.&lt;/p&gt;
&lt;h3 id=&#34;differences-with-release-please&#34;&gt;Differences with release-please&lt;/h3&gt;
&lt;p&gt;I learned about the &amp;ldquo;pull request driven release flow&amp;rdquo; from the article &lt;a href=&#34;https://fasterthanli.me/articles/my-ideal-rust-workflow&#34;&gt;My ideal Rust workflow&lt;/a&gt; by &lt;a href=&#34;https://twitter.com/fasterthanlime&#34;&gt;fasterthanlime&lt;/a&gt;, where he talks about &lt;a href=&#34;https://github.com/googleapis/release-please&#34;&gt;release-please&lt;/a&gt;.
I immediately felt like release-please could fit great with the way I work, so I decided to try it.
Like release-plz, release-please is an open-source project that manages releases via pull requests.
I tried release-please both with the GitHub action and the CLI, but it didn&amp;rsquo;t work for me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I got a &lt;a href=&#34;https://github.com/google-github-actions/release-please-action/issues/348&#34;&gt;&amp;ldquo;not found&amp;rdquo;&lt;/a&gt; error, which wasn&amp;rsquo;t very descriptive.&lt;/li&gt;
&lt;li&gt;Two configuration files were required: &lt;code&gt;.release-please-manifest.json&lt;/code&gt; and &lt;code&gt;release-please-config.json&lt;/code&gt;.
Most of the fields I had to write in these two files were already in the &lt;code&gt;Cargo.toml&lt;/code&gt; files. I thought it was a shame that Rust developers needed to duplicate these fields.&lt;/li&gt;
&lt;li&gt;Release-please considers a package &amp;ldquo;published&amp;rdquo; when the relative git tag exists.
Release-please doesn&amp;rsquo;t interact at all with cargo registries. However, some Rust projects don&amp;rsquo;t create git tags. Instead, they just publish the package to crates.io, which is the ultimate source of truth.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most of the problems listed above mainly exist because release-please aims to support different programming languages.
So I thought:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What if I write a tool specifically optimized for Rust that solves all the problems I have experienced?
A tool that works out-of-the-box with nearly every Rust project, without any extra configuration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It took six months of my spare time to write release-plz, but here we are!&lt;/p&gt;
&lt;h3 id=&#34;differences-with-other-rust-release-tools&#34;&gt;Differences with other Rust release tools&lt;/h3&gt;
&lt;p&gt;These are the release tools in the Rust ecosystem I am aware of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/crate-ci/cargo-release&#34;&gt;cargo-release&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Bumps the version and publishes Rust packages from the CLI.&lt;/li&gt;
&lt;li&gt;Doesn&amp;rsquo;t support automatic releases from CI yet. See this open &lt;a href=&#34;https://github.com/crate-ci/cargo-release/issues/117&#34;&gt;issue&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/pksunkara/cargo-workspaces&#34;&gt;cargo-workspaces&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s a set of commands to manage cargo workspaces and their crates.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;publish&lt;/code&gt; command releases the packages from the CLI similarly to &lt;code&gt;cargo-release&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Byron/gitoxide/tree/main/cargo-smart-release&#34;&gt;cargo-smart-release&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;Updates and publishes packages from the CLI.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s very similar to release-plz, but it is not meant to be run in CI (see &lt;a href=&#34;https://github.com/MarcoIeni/release-plz/issues/13#issuecomment-1065790846&#34;&gt;this&lt;/a&gt; comment from the author).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To respect the &amp;ldquo;Unix philosophy&amp;rdquo;, I tried to delegate the release flow to &lt;code&gt;cargo-release&lt;/code&gt; and &lt;code&gt;cargo-workspaces&lt;/code&gt;. However, after discussing with the maintainers &lt;a href=&#34;https://github.com/crate-ci/cargo-release/issues/298#issuecomment-1097442446&#34;&gt;here&lt;/a&gt; and &lt;a href=&#34;https://github.com/pksunkara/cargo-workspaces/issues/69&#34;&gt;here&lt;/a&gt;,
I decided to implement the &lt;code&gt;release-plz release&lt;/code&gt; command by myself.&lt;/p&gt;
&lt;p&gt;Overall, I wasn&amp;rsquo;t satisfied with the existing Rust release tools because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;They use git tags to determine if a package is already published — release-plz uses cargo registries instead.&lt;/li&gt;
&lt;li&gt;They primarily focus on the CLI use case — release-plz focuses mainly on CI.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Using release-plz increased my productivity.
Having an automated release pipeline helps you deliver at a faster pace, with a lower risk of manual mistakes.&lt;/p&gt;
&lt;p&gt;If you try release-plz, please let me know on &lt;a href=&#34;https://twitter.com/MarcoIeni&#34;&gt;Twitter&lt;/a&gt;. Also, make sure to open &lt;a href=&#34;https://github.com/MarcoIeni/release-plz/issues&#34;&gt;issues&lt;/a&gt; for feature requests or bug reports!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>CKAD: 2021 tips, vimrc, bashrc and cheatsheet</title>
      <link>https://www.marcoieni.com/2021/09/ckad-2021-tips-vimrc-bashrc-and-cheatsheet/</link>
      <pubDate>Mon, 06 Sep 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2021/09/ckad-2021-tips-vimrc-bashrc-and-cheatsheet/</guid>
      <description>&lt;p&gt;You are probably busy studying for you exam right now, so I will try to be brief.&lt;/p&gt;
&lt;p&gt;In the following I will share the things that helped me the most in becoming a CKAD, while trying to avoid all generic tips you can find in all the other blog posts like this.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;ckad.png&#34; alt=&#34;ckad&#34; title=&#34;ckad&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;tips&#34;&gt;Tips&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I only used &lt;code&gt;kubectl apply -f&lt;/code&gt; when interacting with yaml files:
ignore &lt;code&gt;kubectl create&lt;/code&gt; and &lt;code&gt;kubectl replace&lt;/code&gt; for simplicity.&lt;/li&gt;
&lt;li&gt;The exam consists in 2 hours to score 66% on 19 questions, so make sure to flag
the most difficult questions, so that you complete them at the end only if you
still have time.&lt;/li&gt;
&lt;li&gt;Make sure to use bookmarks during the exam to be quicker.
I used &lt;a href=&#34;https://github.com/reetasingh/CKAD-Bookmarks&#34;&gt;these&lt;/a&gt; ones.
You can use them in your additional browser tab.&lt;/li&gt;
&lt;li&gt;Edit the namespace when you copy paste a resource from the docs if it is hardcoded. See &lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/network-policies/#networkpolicy-resource&#34;&gt;network policy&lt;/a&gt; for example, which will be applied to the &lt;code&gt;default&lt;/code&gt; namespace if you don&amp;rsquo;t edit it.&lt;/li&gt;
&lt;li&gt;Learn how to use &lt;code&gt;less&lt;/code&gt;. I find very useful to pipe k8s resources into it.
For example:
&lt;ul&gt;
&lt;li&gt;You can search by typing &lt;code&gt;/&lt;/code&gt; (like vim).&lt;/li&gt;
&lt;li&gt;You can toggle case sensitive search by typing &lt;code&gt;-i&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;bashrc&#34;&gt;.bashrc&lt;/h2&gt;
&lt;p&gt;You can define aliases in your &lt;code&gt;.bashrc&lt;/code&gt;, so that you don&amp;rsquo;t have to type long commands during the exam.&lt;/p&gt;
&lt;p&gt;You can copy-paste the first lines from &lt;a href=&#34;https://kubernetes.io/docs/reference/kubectl/cheatsheet/&#34;&gt;here&lt;/a&gt; at the beginning of your exam.
You have to memorize the rest:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# enable autocompletion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;source &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;kubectl completion bash&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias k&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;kubectl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;complete -F __start_kubectl k &lt;span style=&#34;color:#75715e&#34;&gt;# autocomplete k&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# get yaml object instead of applying the changes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias kd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;kubectl --dry-run=client -o yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;complete -F __start_kubectl kd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias ka&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;kubectl apply -f&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# delete resources immediately&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias kD&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;kubectl delete --grace-period=0 --force&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;complete -F __start_kubectl kD
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# delete resources immediately from file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias kDf&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;kubectl delete --grace-period=0 --force -f&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# In the following, $1 is the filepath of a yaml k8s object.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# vim apply. edit a file and immediately apply it.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;va&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  vim $1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ka $1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# kubectl edit. Delete the resource of a file, edit and apply it.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ke&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  kDf $1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  va $1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# kubectl replace. Delete and recreate the same resource.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kr&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  kDf $1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ka $1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After you have edited your &lt;code&gt;.bashrc&lt;/code&gt; run the command &lt;code&gt;source ~/.bashrc&lt;/code&gt; to apply
the changes in your current shell.&lt;/p&gt;
&lt;h2 id=&#34;vimrc&#34;&gt;.vimrc&lt;/h2&gt;
&lt;p&gt;At the beginning of your exam, edit your &lt;code&gt;~/.vimrc&lt;/code&gt; file, in order to edit yaml
files efficiently:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-vimscript&#34; data-lang=&#34;vimscript&#34;&gt;set nu # set numbers
set tabstop=2 shiftwidth=2 expandtab # use 2 spaces instead of tab
set ai # autoindent: when go to new line keep same indentation
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cheatsheet&#34;&gt;Cheatsheet&lt;/h2&gt;
&lt;p&gt;Here is a very long list of imperative commands I found useful for the exam.&lt;/p&gt;
&lt;p&gt;create a deployment:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k create deploy nginx
  --image nginx:1.16
  --replicas 4
  --port 8080   # container port
  -- ls /home   # command
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;create a pod:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k run nginx
  --image=nginx
  --restart=Never
  -l=&amp;quot;key1=value1,key2=value2&amp;quot;  # multiple labels
  --env=&amp;quot;COLOR=blue&amp;quot; --env=&amp;quot;KEY3=val3&amp;quot;  # multiple environment variables
  --port=5701  # container port
  --expose  # create a ClusterIP service
  --rm -it  # delete the pod after completed and open a terminal
  -- /bin/sh -c &amp;quot;while true; do date; sleep 10; done&amp;quot;  # command
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;create a new Service to expose an existing Deployment:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k expose deploy test
  --port=80
  --target-port=8000
  --type NodePort  # optional
  --name my-service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;create a new service:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k create svc clusterip pod-name  # service with app=pod-name as label
  --tcp=6379:6379  # &amp;lt;port&amp;gt;:&amp;lt;targetPort&amp;gt;

k create svc nodeport pod-name
  --tcp=80:80  # &amp;lt;port&amp;gt;:&amp;lt;targetPort&amp;gt;
  --node-port=30080
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;create job:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k create job nginx
  --image=nginx
  -- /bin/sh -c &#39;counter=0; \
     while [ $counter -lt 3 ]; do counter=$((counter+1)); \
     sleep 3; done;&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;create cronjob:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k create cj nginx
  --image=nginx
  --schedule=&amp;quot;* * * * *&amp;quot;
  -- /bin/sh -c &#39;echo &amp;quot;current date: $(date)&amp;quot;&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;create configmap:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k create cm app-config
  --from-literal=key123=value123

k create cm app-config
  --from-env-file=config.env  # single file with environment variables

k create cm app-config
  --from-file=config.txt  # single file or directory
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;create secret:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k create secret generic my-secret
  --from-literal=foo=bar

# you also have the other options as above for the configmap
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;decode a secret:
&lt;code&gt;echo &amp;quot;YmFy&amp;quot; | base64 --decode&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;create service account:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k create sa my-sa
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;override the image of a deployment:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k set image deploy my-deployment my-container-name=nginx:1.9.1
  --record # save the &amp;quot;CHANGE-CAUSE&amp;quot; in the deployment history
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;get pods:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k get po
  -l color=green,app!=my-app     # label equality filter
  -l &#39;color in (green, red)&#39;     # label set filter
  -l &#39;color notin (green, red)&#39;  # notin filter
  -l &#39;color exists&#39;              # exists filter
  --show-labels                  # show all labels
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;rollouts:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k rollout status deploy nginx

k rollout history deploy nginx
  --revision=1    # specify revision (optional)

k rollout undo deploy nginx
  --to-revision=1  # optional
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;how to access a pod exposed by a ClusterIp with a timeout of 5 seconds:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k run busybox --image=busybox --restart=Never -it -- /bin/sh
# wget -O- 10.96.32.32:80 -T 5
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;open pod shell:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k exec -it my-pod -- /bin/sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;create resource quota:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl create quota myrq --hard=cpu=1,memory=1G,pods=2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;view docs:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k explain pods.spec
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;get all the events:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k get events --sort-by=.metadata.creationTimestamp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;modify objects label:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k label nodes my-node color=blue  # add a label to node
k label pod my-pod region=eu  # add a label to pod
k label pod my-pod region=us --overwrite  # edit a label
k label pod my-pod region-  # remove a label
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;modify objects annotations:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k annotate ... # (same usage as k label)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;edit namespace for all subsequent kubectl commands in the same context:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k config set-context --current --namespace=core-banking
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;horizontal pod autoscaler:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k autoscale deploy my-deploy
  --cpu-percent=70   # sum of the cpu percentages used by all the pods that needs to be reached for the hpa to start spinning other pods
  --min=2   # min number of pods
  --max=8   # max number of pods the HPA can scale

k get hpa
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;taints:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# apply taint
k taint nodes my-node my-key=my-value:NoSchedule

# remove taint
k taint nodes my-node my-key=my-value:NoSchedule-
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;theory&#34;&gt;Theory&lt;/h2&gt;
&lt;p&gt;I studied for the CKAD by watching the CKAD &lt;a href=&#34;https://kodekloud.com/courses/certified-kubernetes-application-developer-ckad/&#34;&gt;course&lt;/a&gt; by Mumshad Mannambeth, which is simply awesome and it contains very useful labs, too.
I also read the CKAD &lt;a href=&#34;https://www.amazon.com/Certified-Kubernetes-Application-Developer-Depth/dp/1492083739/&#34;&gt;book&lt;/a&gt; from O&amp;rsquo;Reilly, which I recommend if you want a written resource, too.&lt;/p&gt;
&lt;h2 id=&#34;practice&#34;&gt;Practice&lt;/h2&gt;
&lt;p&gt;This is an hands-on exam, so of course you need to practice a lot.
These are some useful resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/subodev/50-questions-for-ckad-and-cka-exam-3bjm&#34;&gt;https://dev.to/subodev/50-questions-for-ckad-and-cka-exam-3bjm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/bb-tutorials-and-thoughts/practice-enough-with-these-questions-for-the-ckad-exam-2f42d1228552&#34;&gt;https://medium.com/bb-tutorials-and-thoughts/practice-enough-with-these-questions-for-the-ckad-exam-2f42d1228552&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dgkanatsios/CKAD-exercises&#34;&gt;https://github.com/dgkanatsios/CKAD-exercises&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once you complete these and the labs of the CKAD course you will be probably ready for the exam.&lt;/p&gt;
&lt;h2 id=&#34;shortcuts&#34;&gt;Shortcuts&lt;/h2&gt;
&lt;p&gt;Time is precious! Use the corresponding shorcut of a k8s resource instead of its fullname.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fullname&lt;/th&gt;
&lt;th&gt;Shortcut&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;configmaps&lt;/td&gt;
&lt;td&gt;cm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;namespaces&lt;/td&gt;
&lt;td&gt;ns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;persistentvolumeclaims&lt;/td&gt;
&lt;td&gt;pvc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;persistentvolumes&lt;/td&gt;
&lt;td&gt;pv&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pods&lt;/td&gt;
&lt;td&gt;po&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;serviceaccounts&lt;/td&gt;
&lt;td&gt;sa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;services&lt;/td&gt;
&lt;td&gt;svc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;deployments&lt;/td&gt;
&lt;td&gt;deploy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;replicasets&lt;/td&gt;
&lt;td&gt;rs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;horizontalpodautoscalers&lt;/td&gt;
&lt;td&gt;hpa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cronjobs&lt;/td&gt;
&lt;td&gt;cj&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jobs&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;secrets&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;networkpolicies&lt;/td&gt;
&lt;td&gt;netpol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;resourcequotas&lt;/td&gt;
&lt;td&gt;quota&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;verify-your-work&#34;&gt;Verify your work&lt;/h2&gt;
&lt;p&gt;After you are done (or when you are short of time) you should verify what you have done.&lt;/p&gt;
&lt;p&gt;First of all run &lt;code&gt;k get po --all-namespaces&lt;/code&gt; in every context to check that
all pods are running.&lt;/p&gt;
&lt;p&gt;After that, you can check if every resource was applied successfully:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;configmaps and secret:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k exec my-pod -- env
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;volumes:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k exec my-pod -- ls /mount/volume/path
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;services:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k get ep   # endpoints
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Overall preparing for the certification was really helpful and the exam itself is really practical, so I highly recommend it! 🤓&lt;/p&gt;
&lt;p&gt;The most important tip I can give is the following:
I probably practiced too much for it, ending up scoring 99%.
If the score is not important for you (the score is not written anywhere in the certification) just try it when you feel a little bit confident!
Remember: you have two attempts!&lt;/p&gt;
&lt;p&gt;Good luck with your exam: keep calm and focus ✌&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>My 2020 Recap: Open Source, talks, meetups and more!</title>
      <link>https://www.marcoieni.com/2021/01/my-2020-recap-open-source-talks-meetups-and-more/</link>
      <pubDate>Sat, 02 Jan 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2021/01/my-2020-recap-open-source-talks-meetups-and-more/</guid>
      <description>&lt;p&gt;I am not a huge fan of year recaps or new year&amp;rsquo;s resolutions.
Mainly because I don&amp;rsquo;t like thinking about the past in general or setting goals for the future.
I like to focus on the present, following my curiosity day by day and if I realize I want to accomplish
something I don&amp;rsquo;t wait the new year to do it, but &lt;em&gt;I try&lt;/em&gt; to start as soon as possible.&lt;/p&gt;
&lt;p&gt;However, retrospectives are powerful, you can analyze what has gone wrong in order to try to improve it. Plus 2020 was..2020!
And together with all the tons of terrible stuff that happened to us, in the future I would like to
remember 2020 also for the nice things I accomplished this year. So let&amp;rsquo;s start!&lt;/p&gt;
&lt;h2 id=&#34;open-source-contributions&#34;&gt;Open Source contributions&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;gh.png&#34; alt=&#34;contributions&#34;&gt;&lt;/p&gt;
&lt;p&gt;This year we had a lot of free time. The problem was that we had to spend it at home.
I used a big part of that to contribute to open source software. Why? Glad you asked!
Writing open source software is a really good opportunity to learn and to improve the world a little bit at the same time.&lt;/p&gt;
&lt;p&gt;This was the year of Rust for me: most of the time at my laptop was spent on learning and working with programming language.
After reading &lt;a href=&#34;https://doc.rust-lang.org/book/&#34;&gt;the book&lt;/a&gt; and doing exercises and pet projects
you have to go in the wild and receive some code reviews, i.e. someone more experienced than you
has to tell you why your code sucks:
contributing to open source software is just the best way to achieve this goal!&lt;/p&gt;
&lt;h3 id=&#34;rust&#34;&gt;Rust&lt;/h3&gt;
&lt;p&gt;Personal projects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/stm32f407-rs&#34;&gt;stm32f407 experiments&lt;/a&gt;: A bunch of personal experiments with STM32f407G-DISC1 and rust.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rust-github.github.io/&#34;&gt;Rust GitHub Template&lt;/a&gt;: A template to create an amazing rust project hosted on GitHub in no time. (51 ⭐ on GitHub)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/MarcoIeni/poke-speare&#34;&gt;Poke Speare&lt;/a&gt;: Toy project to experiment with rust async, actix, reqwest and wiremock.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/poetry-book&#34;&gt;Poetry book builder&lt;/a&gt;: My first rust project, a pet project not worth checking out.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contributions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/rust-unofficial/patterns&#34;&gt;design patterns book&lt;/a&gt;: On december I started maintaining the design patterns repository. Me and &lt;a href=&#34;https://github.com/simonsan&#34;&gt;simonsan&lt;/a&gt; just converted it into a lovely &lt;a href=&#34;https://rust-unofficial.github.io/patterns/&#34;&gt;rust book&lt;/a&gt;. 📖&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dandavison/delta/commits?author=MarcoIeni&#34;&gt;delta&lt;/a&gt;: Solved almost 100 clippy warnings, implemented CI and CD with GitHub actions, helped solving a &lt;a href=&#34;https://github.com/dandavison/delta/issues/463&#34;&gt;really interesting bug&lt;/a&gt; which I plan to discuss in my YouTube channel. Plus there is this (thanks Dan 🙏):
&lt;img src=&#34;thanks.png&#34; alt=&#34;thanks&#34;&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/LukeMathWalker/wiremock-rs/commits?author=MarcoIeni&#34;&gt;wiremock-rs&lt;/a&gt;: improved error messages and documentation.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sharkdp/bat/commits?author=MarcoIeni&#34;&gt;bat&lt;/a&gt;: fixed clippy warnings.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/tiborschneider/rofi-rs/commits?author=MarcoIeni&#34;&gt;rofi-rs&lt;/a&gt;: fixed cippy warnings, added CI.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/rust-embedded/svd/commits?author=MarcoIeni&#34;&gt;svd&lt;/a&gt;: implemented GitHub actions mainly.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/stm32-rs/svdtools/issues/9&#34;&gt;svdtoold&lt;/a&gt;: worked too much on an issue which sadly was forgotten..This is part of open source, too. 😔 Silver lining: I learned a lot of rust by working on this! 🤓&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sharkdp/fd/pull/524&#34;&gt;fd&lt;/a&gt;: solved a very simple issue starting from a very complex solution that was over-engineered at best 😂&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/stm32-rs/stm32-rs/commits?author=MarcoIeni&#34;&gt;stm32-rs&lt;/a&gt;: Improved CI, documentation and fixed some devices. In this repo overall I added 95 lines and I removed 3451 lines..neat 😎
&lt;img src=&#34;addless.png&#34; alt=&#34;difference&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For obvious reasons I&amp;rsquo;ve excluded opened issues, support to users and little PRs like small documentation fixes (even if &lt;a href=&#34;https://github.com/rust-lang/rust/pull/80410&#34;&gt;this&lt;/a&gt; one is special because it belongs to the rust repo 🧡).&lt;/p&gt;
&lt;h3 id=&#34;vhdl&#34;&gt;VHDL&lt;/h3&gt;
&lt;p&gt;Learning a new language every year is really important.
If possible you should learn a language that belongs to a different programming paradigm
with respect to what you are used to.
Well, what&amp;rsquo;s better than a language used to describe hardware for that? 🤩&lt;/p&gt;
&lt;p&gt;If you want to experience the same feelings you had while learning your first programming language or
if you think you know everything about parallel programming you should really learn vhdl.
It&amp;rsquo;s totally different from what I was used to and learning it was really really funny.&lt;/p&gt;
&lt;p&gt;I published:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/VUnit/vunit_action&#34;&gt;VUnit action&lt;/a&gt;: a GitHub action for VUnit that was moved to the official VUnit organization (yay 😁).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/vhdl-examples&#34;&gt;Vhdl examples&lt;/a&gt;: A bunch of personal Vhdl experiments tested in a CI with VUnit.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;vspacecode&#34;&gt;VSpaceCode&lt;/h3&gt;
&lt;p&gt;I love spacemacs, and I bring its key bindings into every editor I use.
In 2019 I already created &lt;a href=&#34;https://github.com/MarcoIeni/spaceclipse&#34;&gt;spaceclipse&lt;/a&gt; and &lt;a href=&#34;https://github.com/MarcoIeni/intellimacs&#34;&gt;intellimacs&lt;/a&gt; (which counts 249 ⭐ on GitHub at the moment), but
what me, &lt;a href=&#34;https://github.com/stevenguh&#34;&gt;Steven&lt;/a&gt; and all the contributors are doing with &lt;a href=&#34;https://vspacecode.github.io/&#34;&gt;VSpaceCode&lt;/a&gt; is amazing!
We have 726 ⭐ and 3963 installs! It really feels like it&amp;rsquo;s the best of both worlds (full blown ready to use IDE vs spacemacs workflow).&lt;/p&gt;
&lt;h2 id=&#34;content&#34;&gt;Content&lt;/h2&gt;
&lt;p&gt;I posted 6 articles on my website and 5 videos in my YouTube channel. Oh, right, I opened a YouTube channel in September!
I have 40 subscribers right now so there is a lot of room for improvements there and next year I will upload other rust contents for sure!&lt;/p&gt;
&lt;h2 id=&#34;daily-job&#34;&gt;Daily job&lt;/h2&gt;
&lt;p&gt;Even if it is only a small entry in this post, my daily job is of course what occupies most of my time.&lt;/p&gt;
&lt;p&gt;This year I realized I want to work with rust full time, not only during weekends.
So, on November I joined &lt;a href=&#34;https://truelayer.com/&#34;&gt;True Layer&lt;/a&gt;, which is what I consider the best
decision I have ever made in my career (which honestly is not that long anyway 😂).&lt;/p&gt;
&lt;p&gt;True Layer is amazing, both from a human and a technical perspective.
I am learning a lot of stuff about rust and the cloud native world and even if we are remote I feel very well connected
with my team (which is amazing by the way 😁).&lt;/p&gt;
&lt;h2 id=&#34;open-source-saturday-italy&#34;&gt;Open Source Saturday Italy&lt;/h2&gt;
&lt;p&gt;Contributing to open source is funny, but doing it together it&amp;rsquo;s better. That&amp;rsquo;s why
starting from the idea of &lt;a href=&#34;https://www.meetup.com/Open-Source-Saturday-Milano/&#34;&gt;Open Source Saturday Milano&lt;/a&gt; I created
&lt;a href=&#34;https://oss-italy.github.io/&#34;&gt;Open Source Saturday Italy&lt;/a&gt;, the online version, useful for people who lives in small cities with no meetups and compatible with
our beloved covid restrictions!&lt;/p&gt;
&lt;p&gt;We meet on Saturday online on discord and we do some pair programming.
You cannot imagine how much I learned from these events and how many nice and talented people I&amp;rsquo;ve known.&lt;/p&gt;
&lt;p&gt;If you like the idea you can create an Open Source Saturday for your own area! 😁&lt;/p&gt;
&lt;h2 id=&#34;talks&#34;&gt;Talks&lt;/h2&gt;
&lt;p&gt;This year I gave two talks (remotely of course 🙃).
The first one was at the Italian Linux Day, where I talked about how to avoid using the mouse for the
sake of a better workflow.
The second one was at the Rust Milano Meetup and it was called &lt;a href=&#34;https://www.meetup.com/rust-language-milano/events/274315007/&#34;&gt;How to create an awesome Rust project on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you are interested I recorded two YouTube videos that have almost the same content, you can find them &lt;a href=&#34;https://www.youtube.com/watch?v=0aQGy0sQiUU&amp;amp;t=227s&#34;&gt;here&lt;/a&gt; and &lt;a href=&#34;https://www.youtube.com/watch?v=meAz2RQMHvM&amp;amp;t=1770s&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;mentorship&#34;&gt;Mentorship&lt;/h2&gt;
&lt;p&gt;In September I joined the &lt;a href=&#34;https://rustbeginners.github.io/awesome-rust-mentors/&#34;&gt;awesome rust mentors&lt;/a&gt; army. 🤠&lt;/p&gt;
&lt;p&gt;I was contacted by almost 10 people (I should check old messages on all socials for the exact number).
They were really nice overall and I think I was able to help all of them in a way or another. 😀&lt;/p&gt;
&lt;h2 id=&#34;certifications&#34;&gt;Certifications&lt;/h2&gt;
&lt;p&gt;In July I attended the Computer Engineer Professional examination, which is what in Italy
we call &amp;ldquo;Esame di stato&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;It was a good excuse to review old University notes and learn new concepts at the same time.
In particular, the ethical aspect of our profession is something it&amp;rsquo;s always underestimated and it
was really pleasant to go through our formal codes of ethics.&lt;/p&gt;
&lt;h2 id=&#34;personal-life&#34;&gt;Personal life&lt;/h2&gt;
&lt;p&gt;I like to keep most of my personal life offline.
Just wanted to say I&amp;rsquo;ve been really lucky, since all my family is doing well.&lt;/p&gt;
&lt;p&gt;Also, I started playing guitar again after 5 years or so and it&amp;rsquo;s a great way to switch context from programming and have some mental rest! 🎸&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I am very glad my profession allows me to do all this amazing stuff from a 600€ laptop.
Other people like musicians, actors, etc. aren&amp;rsquo;t so lucky, so we, as developers, should appreciate this possibility every day.&lt;/p&gt;
&lt;p&gt;My 2021 resolutions are the same of 2020:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Have fun&lt;/li&gt;
&lt;li&gt;Be curious&lt;/li&gt;
&lt;li&gt;Make the world a better place (even a little bit!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Maybe also &amp;ldquo;do better new year&amp;rsquo;s resolutions?&amp;rdquo;. The point is that 90% of what I have done this year
wasn&amp;rsquo;t predictable at all in December 2019. I mean..starting a meetup, switching my full time job from
embedded to rust backend development..really? 🙂&lt;/p&gt;
&lt;p&gt;Of course I have long term goals, like learning Haskell, improving my kubernetes skills, recording more YouTube videos or start watching Game of Thrones.
But I feel like seriously writing them down and assigning a deadline will prevent me from doing random stuff
that just came to my mind the day before while I was going to bed. 😅&lt;/p&gt;
&lt;p&gt;So actually not having proper new year&amp;rsquo;s resolutions is the way to go for me in 2021.
Let&amp;rsquo;s see if I will change my mind in 2022. 😁&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Rust makes cross compilation child&#39;s play</title>
      <link>https://www.marcoieni.com/2020/12/rust-makes-cross-compilation-childs-play/</link>
      <pubDate>Sat, 05 Dec 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2020/12/rust-makes-cross-compilation-childs-play/</guid>
      <description>&lt;h2 id=&#34;why-do-i-care-about-this&#34;&gt;Why do I care about this&lt;/h2&gt;
&lt;p&gt;Recently I solved &lt;a href=&#34;https://github.com/dandavison/delta/issues/396&#34;&gt;this&lt;/a&gt; delta issue,
where the maintainer asked to switch from Travis CI to GitHub actions.&lt;/p&gt;
&lt;p&gt;These are all the pull requests I&amp;rsquo;ve done if you want to have a look at this journey:
&lt;a href=&#34;https://github.com/dandavison/delta/pull/399&#34;&gt;#399&lt;/a&gt;, &lt;a href=&#34;https://github.com/dandavison/delta/pull/400&#34;&gt;#400&lt;/a&gt;,
&lt;a href=&#34;https://github.com/dandavison/delta/pull/409&#34;&gt;#409&lt;/a&gt;, &lt;a href=&#34;https://github.com/dandavison/delta/pull/411&#34;&gt;#411&lt;/a&gt;,
&lt;a href=&#34;https://github.com/dandavison/delta/pull/413&#34;&gt;#413&lt;/a&gt;, &lt;a href=&#34;https://github.com/dandavison/delta/pull/417&#34;&gt;#417&lt;/a&gt;
and finally &lt;a href=&#34;https://github.com/dandavison/delta/pull/418&#34;&gt;#418&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And yes..As you can see I like small incremental work and early feedback instead of giant pull requests. 😁&lt;/p&gt;
&lt;p&gt;Anyway, the delta project has a lot of compilation targets and the binaries are automatically released in the
GitHub releases &lt;a href=&#34;https://github.com/dandavison/delta/releases&#34;&gt;page&lt;/a&gt; every time the project is tagged. Sweet. 😌&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;delta.png&#34; alt=&#34;delta releases&#34; title=&#34;Releases&#34;&gt;&lt;/p&gt;
&lt;p&gt;From an x86_64 architecture (TLDR: common 64 bit Intel or AMD processors) it is really straightforward to
compile for a different operating system with &lt;code&gt;cargo&lt;/code&gt; if you are targeting the same architecture.
For example if you want to compile for macOS you just need to run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rustup target add x86_64-apple-darwin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cargo build --target x86_64-apple-darwin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The problems start to arise when you want to compile for a different architecture, such as i686 (32 bit) or ARM processors.
In this case, you have to install some dependencies and set some environment variables, which may be painful.
For example, in the old continuous integrations scripts of delta,
&lt;a href=&#34;https://github.com/dandavison/delta/blob/15d06cbf7584570ec3b5beaba99cb8898f9ec3dc/etc/ci/before_install.sh&#34;&gt;this&lt;/a&gt;
was the way dependencies were installed. Ugly, I know. As rust developers we are used to great tools,
so there must be a better way right?&lt;/p&gt;
&lt;h2 id=&#34;meet-cross&#34;&gt;Meet Cross&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;“Zero setup” cross compilation and “cross testing” of Rust crates.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is the description of the &lt;a href=&#34;https://github.com/rust-embedded/cross&#34;&gt;Cross&lt;/a&gt; tool.&lt;/p&gt;
&lt;p&gt;The TLDR is that it let you compile and test rust projects for architectures other than i686 and x86_64.&lt;/p&gt;
&lt;p&gt;Instead of doing &lt;code&gt;cargo build --target &amp;lt;YOUR_TARGET&amp;gt;&lt;/code&gt; you simply do &lt;code&gt;cross build --target &amp;lt;YOUR_TARGET&amp;gt;&lt;/code&gt;.
Based on the target, in fact, cross will run a docker image that has all the right dependencies already
installed and configured by the rust-embedded team itself. 😉
And that&amp;rsquo;s it..just run &lt;code&gt;cargo install cross&lt;/code&gt; and you are ready to cross-compile for all
&lt;a href=&#34;https://github.com/rust-embedded/cross#supported-targets&#34;&gt;these&lt;/a&gt; targets in rust, no other dependency
is required, except docker of course!&lt;/p&gt;
&lt;p&gt;Obviously this was not an exhaustive overview about cross and I encourage you to have a look at the GitHub page
if you are interested.&lt;/p&gt;
&lt;h2 id=&#34;cross-in-github-actions&#34;&gt;Cross in GitHub actions&lt;/h2&gt;
&lt;p&gt;Of course, after a whole morning getting mad trying to setup weird ubuntu dependencies for the delta issue,
when I found out about cross I felt very stupid for not knowing it in advance and I tried to integrate it in the
Continuous Deployment delta pipeline.&lt;/p&gt;
&lt;p&gt;It turns out that this is like the easiest thing in the world! The &lt;a href=&#34;https://github.com/actions-rs/cargo&#34;&gt;action-rs/cargo&lt;/a&gt; action
I was already using had built-in &lt;a href=&#34;https://github.com/actions-rs/cargo#cross-compilation&#34;&gt;support&lt;/a&gt; for cross.
Now I even felt more stupid, but anyway..you just need to set the &lt;code&gt;use-cross&lt;/code&gt; variable to &lt;code&gt;true&lt;/code&gt; and you are done!&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/dandavison/delta/blob/e198c0d841d9fb660e59e0329235a8601b407c69/.github/workflows/cd.yml#L32-L37&#34;&gt;This&lt;/a&gt;
is the step that builds the whole delta project for all its different targets..easy, right? 😀&lt;/p&gt;
&lt;h2 id=&#34;cross-in-rust-github-template&#34;&gt;Cross in Rust GitHub template&lt;/h2&gt;
&lt;p&gt;You may or (probably) may not be aware of &lt;a href=&#34;https://rust-github.github.io/&#34;&gt;Rust GitHub Template&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Rust GitHub Template is a template for cargo generate that aims to be a starting point suitable for the vast majority of rust projects that will be hosted on GitHub.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Beyond all its nice goodies, this template will setup Continuous Deployment for you, therefore whenever
you tag your project, it will be published on &lt;code&gt;crates.io&lt;/code&gt; and the binaries will be released in the GitHub Releases page,
just like in delta. 😁&lt;/p&gt;
&lt;p&gt;Until today, Rust GitHub template only supported x86_64 windows, linux and mac, but after I found out Cross I couldn&amp;rsquo;t resist
and I added support for i686 and aarch64 linux architectures, which are both two &lt;a href=&#34;https://doc.rust-lang.org/nightly/rustc/platform-support.html&#34;&gt;tier 1&lt;/a&gt; rust targets.
In practice, this means your &amp;ldquo;old thinkpad&amp;rdquo; and &amp;ldquo;raspberry pi&amp;rdquo; users will thank you a lot. 😛&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;rust-gh.png&#34; alt=&#34;gh template releases&#34; title=&#34;Releases&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/rust-github/rust-gh-example/blob/01e0aae91f83e1e932f4498a0eddb2905c8fffc3/.github/workflows/cd.yml#L57-L63&#34;&gt;This&lt;/a&gt;
is an example of the resulting Continuous Deployment step.&lt;/p&gt;
&lt;p&gt;And that was it, after I spent a lot of &lt;em&gt;very useful&lt;/em&gt; time trying to setup compilation dependencies basically I just wanted to share my love for the &lt;code&gt;cross&lt;/code&gt;
tool with the rest of the world in order to avoid this pain to as many people as possible. 😅&lt;/p&gt;
&lt;p&gt;Thanks for reading this far! You can find me on &lt;a href=&#34;https://twitter.com/MarcoIeni&#34;&gt;twitter&lt;/a&gt; or &lt;a href=&#34;https://www.youtube.com/MarcoIeni&#34;&gt;YouTube&lt;/a&gt;, bye! 👋&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>📽 2 videos about rust code coverage in VSCode</title>
      <link>https://www.marcoieni.com/2020/10/2-videos-about-rust-code-coverage-in-vscode/</link>
      <pubDate>Sun, 11 Oct 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2020/10/2-videos-about-rust-code-coverage-in-vscode/</guid>
      <description>
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-1&#34;&gt;
Useless personal stuff
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;It&amp;#39;s several years now that I feel the need to share what I learn with other people.
  I gained so much value from free online content that at this point I consider
  immoral for me to not give back something to the community.&lt;/p&gt;
&lt;p&gt;
  I started my sharing process one year ago with my &lt;a href=&#34;https://www.marcoieni.com/&#34;&gt;personal website&lt;/a&gt; and it has
  been great!
  However, in general I prefer videos to text, because I can watch them on the
  go, while I am eating something and so on.
  Making videos is something I wanted to do for a long time and now finally I
  declare procrastination over (at the moment, at least 😅).&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-2&#34;&gt;
Code coverage in VSCode
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;We will use the following three tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://crates.io/crates/cargo-tarpaulin&#34;&gt;cargo tarpaulin&lt;/a&gt;: analyzes your rust code and gives you code coverage data&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://crates.io/crates/cargo-watch&#34;&gt;cargo watch&lt;/a&gt;: run &lt;code class=&#34;verbatim&#34;&gt;cargo tarpaulin&lt;/code&gt; every time we save the file&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters&#34;&gt;coverage gutters&lt;/a&gt;: show covered lines on VSCode&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-3&#34;&gt;
First video: basics
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
   
   &lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
     &lt;iframe src=&#34;https://www.youtube.com/embed/6pDku63JNYQ&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
   &lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
   In the first video I explain the basics that will allow you to display which
   lines are covered by your tests in VSCode.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-4&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-4&#34;&gt;
Second video: let&amp;#39;s automatize the process
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-4&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;
   
   &lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
     &lt;iframe src=&#34;https://www.youtube.com/embed/JEgrkmEAHjA&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
   &lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
   I shot the second one after some really helpful feedback by some &lt;a href=&#34;https://www.reddit.com/r/rust/comments/j0ribi/rust_code_coverage_in_vscode/&#34;&gt;reddit&lt;/a&gt; users.
   I show how to automatize the process with cargo watch.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-5&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-5&#34;&gt;
Give me feedback!
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-5&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;
  These are one of my first videos and as you can hear my English is far from
  perfect, but I&amp;#39;m trying to improve.
  Please give me feedback regarding any aspect of these videos that you think I
  can improve.&lt;/p&gt;
&lt;p&gt;
  Anyway, I was very happy to receive users feedback after my first video:
  it looks like sharing what you know is a really good way to learn what you don&amp;#39;t. 😉&lt;/p&gt;
&lt;p&gt;
  I hope my two cents will be useful for someone, bye! 😀&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Create an amazing Rust GitHub project in no time</title>
      <link>https://www.marcoieni.com/2020/09/create-an-amazing-rust-github-project-in-no-time/</link>
      <pubDate>Sat, 05 Sep 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2020/09/create-an-amazing-rust-github-project-in-no-time/</guid>
      <description>
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-1&#34;&gt;
Boring introduction
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;Expectations on open source projects are becoming higher and higher everyday.
  If a project is not well documented or it doesn&amp;#39;t have a test suite and a continuous
  integration environment, it is very unlikely that it will be taken seriously by
  the community.&lt;/p&gt;
&lt;p&gt;
  Luckily for us, the tools to create high quality projects
  are becoming better and better at the same time, too.&lt;/p&gt;
&lt;p&gt;
  For example, &lt;a href=&#34;https://www.rust-lang.org/&#34;&gt;rust&lt;/a&gt; provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;a href=&#34;https://doc.rust-lang.org/cargo/&#34;&gt;cargo&lt;/a&gt; build system which includes built-in support for tests and documentation&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/rust-lang/rust-clippy&#34;&gt;clippy&lt;/a&gt; static code analyzer&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/rust-lang/rustfmt&#34;&gt;rustfmt&lt;/a&gt; auto formatting tool&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These tools are well established and they are used by all the relevant rust projects.
  The rust ecosystem, in fact, is really homogeneous, in the sense that the way you
  build, test, run and deploy a certain application/library is very standard.&lt;/p&gt;
&lt;p&gt;
  Therefore, when you are creating a new project, it&amp;#39;s really likely that you can
  recycle documentation and CI steps from your older projects or other bigger rust
  projects out there..which is great, but as my java professor taught me:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;if you are copying and pasting several times, you are almost surely doing it wrong!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
  And that&amp;#39;s exactly what I was doing. 😅&lt;/p&gt;
&lt;p&gt;
  In fact, every time I was creating a new GitHub project, I was using the good old
  copying and pasting technique on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the set of markdown
files that GitHub asks you to fill, such as &lt;code class=&#34;verbatim&#34;&gt;CONTRIBUTING.md&lt;/code&gt;, &lt;code class=&#34;verbatim&#34;&gt;CHANGELOG.md&lt;/code&gt;, &lt;code class=&#34;verbatim&#34;&gt;CODE_OF_CONDUCT.md&lt;/code&gt;, issue
and pull request templates, and most importantly the &lt;code class=&#34;verbatim&#34;&gt;README.md&lt;/code&gt; with all
the fancy badges.&lt;/li&gt;
&lt;li&gt;the files needed to setup the CI environment, most of the time GitHub actions, specifically.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We can do better than this. 😎&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-2&#34;&gt;
Cargo generate
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;In order to avoid copying and pasting, there is the &lt;a href=&#34;https://github.com/ashleygwilliams/cargo-generate&#34;&gt;cargo generate&lt;/a&gt; tool, which is
  described as:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A developer tool to help you get up and running quickly with a new Rust project by leveraging a pre-existing git repository as a template.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
  This means that you can setup a template repository, with all the files you
  need and you ask &lt;code class=&#34;verbatim&#34;&gt;cargo generate&lt;/code&gt; to create a project starting from this
  template, by replacing your project name and authors (and git username &lt;a href=&#34;https://github.com/ashleygwilliams/cargo-generate/pull/164&#34;&gt;soon&lt;/a&gt;?).&lt;/p&gt;
&lt;p&gt;
  After using this tool to create some rust embedded projects with really little
  effort, I immediately appreciated its power. Therefore, during these days I decided
  to use it to create a new template which makes me skip the copying and pasting phase when
  creating a new rust project hosted on GitHub.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-3&#34;&gt;
Rust GitHub Template
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;You can find more info about Rust GitHub Template on its own &lt;a href=&#34;https://rust-github.github.io/&#34;&gt;website&lt;/a&gt;, where I described
  its features and instructions on
  how to use it to create a new rust project.&lt;/p&gt;
&lt;p&gt;
  In short, it allows you to create a new rust project which already includes documentation and
  GitHub actions such as automatic security checks, Continuous Integration and Continuous Deployment already set up by
  only specifying project name and GitHub username.
  You can see an example project generated by this template &lt;a href=&#34;https://github.com/rust-github/rust-gh-example&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
  You can think of it as a bloated version of &lt;code class=&#34;verbatim&#34;&gt;cargo new&lt;/code&gt; 🤠&lt;/p&gt;
&lt;p&gt;
  As the Rust GitHub Template website states:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Stop copy pasting tons of markdown and yaml files each time you start a new rust project. Let’s write them only once, together!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
  Thanks, and I hope you enjoy using Rust GitHub Template! 😀&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Continuous integration with VHDL</title>
      <link>https://www.marcoieni.com/2020/04/continuous-integration-with-vhdl/</link>
      <pubDate>Sun, 19 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2020/04/continuous-integration-with-vhdl/</guid>
      <description>
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-1&#34;&gt;
Skippable introduction
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;During this lockdown (like almost everyone) I have a lot of free time, so I decided
to give a look at my to do list.
In the &lt;strong&gt;looong&lt;/strong&gt; term goals part where you can find impossible goals like &amp;#34;save
the world&amp;#34; or &amp;#34;learn haskell&amp;#34; there was &amp;#34;learn vhdl&amp;#34;, too.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Now or never&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
That&amp;#39;s what I thought. So here I am, reading the awesome &lt;a href=&#34;http://freerangefactory.org/&#34;&gt;free range vhdl&lt;/a&gt; book
and getting started with the first examples.
I am debugging my nonsense signals produced by my nonsense code with &lt;a href=&#34;https://www.xilinx.com/products/design-tools/vivado/vivado-webpack.html&#34;&gt;Vivado
WebPACK&lt;/a&gt;, which has some limitations, but it&amp;#39;s free and it&amp;#39;s a decent tool if you are learning.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-2&#34;&gt;
Why writing tests
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;Anyway, getting the output right and going to the next exercise reminded me of
old dark ages when I was hacking my &lt;code class=&#34;verbatim&#34;&gt;main&lt;/code&gt; and adding &lt;code class=&#34;verbatim&#34;&gt;print&lt;/code&gt; everywhere to know if
my code was working.
Yes, your code might work now, when the sun is high and you haven&amp;#39;t touched a
single comma of your codebase. But what if new requirements comes in or you have to
fix a bug? You will unavoidably have to change your code. At that point how will
you be sure that you didn&amp;#39;t break anything?&lt;/p&gt;
&lt;p&gt;
Yes, &lt;strong&gt;tests&lt;/strong&gt; is the right answer. 💯
And once you get used to them I can ensure you will never go back!
In particular, I get used to repeatable tests and big green check marks that
ensure you that your program does not work only on your computer and that you
haven&amp;#39;t forget to &lt;code class=&#34;verbatim&#34;&gt;git add&lt;/code&gt; some files.&lt;/p&gt;
&lt;p&gt;
So I thought: &amp;#34;why don&amp;#39;t I try to setup Continuous integration for a VHDL project?&amp;#34; 😀&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-3&#34;&gt;
CI for VHDL
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;&lt;em&gt;Disclaimer: I am not a VHDL expert, please double check everything you are going to read&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
Easy, right? Unfortunately there was no GitHub actions that matched the word
&amp;#34;vhdl&amp;#34; on the &lt;a href=&#34;https://github.com/marketplace?type=actions&#34;&gt;github actions marketplace&lt;/a&gt;. And there&amp;#39;s a very good reason for
that. Hardware description languages like VHDL or Verilog are not like common
programming languages where nowadays everything is open source.
Most of the people, uses whatever the FPGA maker
provides them, which includes proprietary libraries and so on and of course this
stuff is not intended to be used with docker and things like that.&lt;/p&gt;
&lt;p&gt;
Anyway, for my simple examples I didn&amp;#39;t need vendor proprietary libraries,
therefore I was free to explore open source solutions to run and tests my code 😀&lt;/p&gt;
&lt;p&gt;
I choose to use &lt;a href=&#34;http://ghdl.free.fr/&#34;&gt;ghdl&lt;/a&gt; (an open-source simulator for the VHDL language)
and &lt;a href=&#34;https://vunit.github.io/&#34;&gt;vunit&lt;/a&gt; (an open source unit testing framework for VHDL/SystemVerilog).&lt;/p&gt;
&lt;p&gt;
It turns out that there is a really handy docker &lt;a href=&#34;https://hub.docker.com/r/ghdl/vunit&#34;&gt;image&lt;/a&gt; hosted on the docker
hub, which provides both vunit and ghdl.&lt;/p&gt;
&lt;p&gt;
It was super easy to create a GitHub action based on this image, so meet &lt;a href=&#34;https://github.com/marketplace/actions/vunit-action&#34;&gt;Vunit
Action&lt;/a&gt;, a GitHub action that let you do CI with your VHDL projects!
You can find how I used this action in my &lt;a href=&#34;https://github.com/vhdl-examples&#34;&gt;vhdl examples&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
So yes, finally there is at least one match for the word &amp;#34;vhdl&amp;#34; in the Github
action Marketplace 😅&lt;/p&gt;
&lt;p&gt;
EDIT: Lars Asplund (VUnit maintainer) contacted me and &lt;strong&gt;we moved the github
action&lt;/strong&gt;
under the VUnit github organisation. You can find the action &lt;a href=&#34;https://github.com/VUnit/vunit_action&#34;&gt;here&lt;/a&gt; 🎉&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Doc-org: org-mode &#43; latex &#43; docker = pdf</title>
      <link>https://www.marcoieni.com/2020/02/doc-org-org-mode--latex--docker-pdf/</link>
      <pubDate>Wed, 26 Feb 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2020/02/doc-org-org-mode--latex--docker-pdf/</guid>
      <description>
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-1&#34;&gt;
Why plain text is better than word processors
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;I was so tired of working with word processors like Microsoft Word that I created &lt;del&gt;yet another&lt;/del&gt; a documentation system based on plain text.&lt;/p&gt;
&lt;p&gt;
With plain text you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;use git&lt;/li&gt;
&lt;li&gt;easily see differences between a version and another&lt;/li&gt;
&lt;li&gt;use grep and other basic utilities&lt;/li&gt;
&lt;li&gt;generate documents automatically with simple scripts&lt;/li&gt;
&lt;li&gt;use your favorite editor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short, with plain text I am free to do whatever I want.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-2&#34;&gt;
Alternatives to word processors
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;The first thing you need in order to create a documentation system based on plain text is to choose a markup language.
After many years of experiments with markdown, asciidoc and so on, I fell in love with org-mode.
You can search for online demos if you don&amp;#39;t believe me: if you are comfortable with emacs, there is nothing
better than writing documents using org-mode.&lt;/p&gt;
&lt;p&gt;
Anyway, emacs does not reinvent the wheel and so there isn&amp;#39;t a direct way to convert org-mode to pdf.
What it does instead, is to translate org-mode into latex, which is the best language to create pdf files in my opinion.&lt;/p&gt;
&lt;p&gt;
So, by using emacs, you can export org-mode to latex in order to avoid writing directly in latex, which is too much verbose
and it&amp;#39;s not very readable until you export it.&lt;/p&gt;
&lt;p&gt;
This is how I have done my MSc &lt;a href=&#34;https://github.com/MarcoIeni/msc-thesis&#34;&gt;thesis&lt;/a&gt; and overall I was happy of the final result.
Anyway, when you try to mix your own latex customizations with latex automatically exported by emacs, it becomes
a little bit difficult to achieve what you want.&lt;/p&gt;
&lt;p&gt;
That&amp;#39;s why emacs has a &lt;code class=&#34;verbatim&#34;&gt;body-only&lt;/code&gt; export option, which let you export only the body of your document.
In this way you can have full control of your latex customizations.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-3&#34;&gt;
Convincing your colleagues to migrate
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;So, given for granted that org-mode + latex is the best way to create pdf files you still need to convince your colleagues to
install emacs and latex on their machines and to learn how to use emacs.
Basically this is not possible. 😅&lt;/p&gt;
&lt;p&gt;
That&amp;#39;s why I have created &lt;a href=&#34;https://github.com/doc-org/doc-org&#34;&gt;doc-org&lt;/a&gt;, a command line utility based on docker that generates pdf files starting from org mode and latex.
The only installation requirement is docker, therefore you/your colleagues don&amp;#39;t need to install and learn how to use emacs and latex.
Of course you can edit org-mode documents with any editor, you are not forced to use emacs..it&amp;#39;s just plain text! 😎&lt;/p&gt;
&lt;p&gt;
The main goal of &lt;code class=&#34;verbatim&#34;&gt;doc-org&lt;/code&gt; is to bring the conciseness of org mode to latex users.
While latex is great at specifying how the document should be formatted, it is a little bit too verbose at describing the content of the document itself.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/doc-org/examples&#34;&gt;Here&lt;/a&gt; there are tons of example documents that are automatically generated by using github actions.
Yes, you can version your small plain text files with git and then automatically build the pdf after every &lt;code class=&#34;verbatim&#34;&gt;git push&lt;/code&gt;! 💪&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-4&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-4&#34;&gt;
Conclusion
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-4&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;I am very happy I have started this project providing lots of toy examples.
I hope that more companies leave behind the idea of word processors, because
the best way to write documents together is the same of writing code together: plain text + version control systems like git.&lt;/p&gt;
&lt;p&gt;
Check out doc-org on &lt;a href=&#34;https://github.com/doc-org/doc-org&#34;&gt;github&lt;/a&gt;. If you have problems/suggestions just open an issue. 🤓&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Linux on my 32GB windows tablet is surprisingly good</title>
      <link>https://www.marcoieni.com/2020/01/linux-on-my-32gb-windows-tablet-is-surprisingly-good/</link>
      <pubDate>Sat, 11 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.marcoieni.com/2020/01/linux-on-my-32gb-windows-tablet-is-surprisingly-good/</guid>
      <description>
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-1&#34;&gt;
Why I removed windows from my tablet
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;
I have a HP Pavilion X2 10-n105nl: an hybrid laptop/tablet with detachable keyboard and touch screen display.
I bought it in 2016 in order to take notes at university with its keyboard and a Dell active stylus.
It did its job pretty well, and for 210 euro I cannot complain.&lt;/p&gt;
&lt;p&gt;
&lt;img src=&#34;hp_laptop.png&#34; alt=&#34;hp_laptop.png&#34; title=&#34;hp_laptop.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;
However, time passes and windows gets bigger apparently.
Now when it tries to download windows updates it complains that I have not enough space on the hard drive.
So, I removed everything I installed on it, I created a new user and removed the old one. And the problem is still there.
Even if I follow windows instructions and I put an external storage (a 64GB usb stick), it still needs additional 8 GB of free internal storage,
which simply cannot be obtained, since almost all the available space of this tablet is occupied by windows itself.&lt;/p&gt;
&lt;p&gt;
Of course, using a laptop without security updates is not an option, but even if you consider it, windows
became really slow on this device, even if you just browse the web.&lt;/p&gt;
&lt;p&gt;
Basically this tablet became obsolete only after a couple of years.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-2&#34;&gt;
Let&amp;#39;s try linux on a tablet
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;
During these Christmas holidays I had a lot of free time, so I decided to try to bring back to life this &amp;#34;old&amp;#34; laptop by installing Linux on it.
I have to be honest, I didn&amp;#39;t have a lot of hopes because in my mind linux was not good on detachable tablets.&lt;/p&gt;
&lt;p&gt;
First I tried pop os 19.10 and ubuntu 19.10.
Since on my main laptop I run arch linux, I wanted to have a debian based machine.
Well, I tried Bluetooth, wifi, touch screen and.. They all worked great!
I was really surprised and happy to see this out of the box experience with linux on a tablet.
The only problem was the speakers: no sound at all 😞&lt;/p&gt;
&lt;p&gt;
I looked online in order to find a solution. I tried a couple of those on Pop os, but my laziness suddenly struck a critical hit,
so I thought:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;why don&amp;#39;t we try manjaro and see if sound works out of the box?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
So I downloaded Manjaro 18.1.5 KDE version, which is a DE I wanted to try.
And yes! Sound worked out of the box, together with all the other things I tested before.
If you are curious, I have 19,4GB of free storage even if manjaro KDE comes with &lt;del&gt;too much&lt;/del&gt; a lot of software preinstalled like libreoffice and thunderbird.&lt;/p&gt;
&lt;p&gt;
Now I am comfortably writing this article on a plane, thanks to my small 12&amp;#34; manjaro linux tablet 😃&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-3&#34;&gt;
Is it perfect?
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;Of course I bet that linux on this device doesn&amp;#39;t do everything right, expecially without further tweaks.
For example, one thing I noticed is that after that I close the lid, the device suspends correctly, but when I reopen it the touchpad
tap to click doesn&amp;#39;t work anymore.&lt;/p&gt;
&lt;p&gt;
I am sure that there are other little things like this that I haven&amp;#39;t encountered yet (this is not my main machine), but.. hey, at least it works!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-4&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-4&#34;&gt;
Installation instructions
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-4&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;In the following I put a short overview of what I did. If you have more specific question, please leave a comment down below.&lt;/p&gt;
&lt;p&gt;
If you do not own this device you may not be interested in this chapter. In this case move to the end of the article for the conclusions.&lt;/p&gt;
&lt;div id=&#34;outline-container-headline-5&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-5&#34;&gt;
Save your windows licence
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-5&#34; class=&#34;outline-text-3&#34;&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open windows prompt with admin priviledges and type&lt;/p&gt;
&lt;div class=&#34;src src-shell&#34;&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wmic path SoftwareLicensingService get OA3xOriginalProductKey&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Write down your windows license because you never know.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-6&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-6&#34;&gt;
Backup your data
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-6&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;They will be erased, together with your windows install.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-7&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-7&#34;&gt;
Update your bios
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-7&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;Go to the &lt;a href=&#34;https://support.hp.com/us-en/drivers/selfservice/HP-Pavillion-10-x2-PC/8499312/model/9788451&#34;&gt;hp support page&lt;/a&gt; of this tablet and download and install the latest bios version.
At the time of writing it&amp;#39;s the &lt;code class=&#34;verbatim&#34;&gt;F.18 Rev.A&lt;/code&gt; version.
I installed it through their windows program without problems.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-8&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-8&#34;&gt;
Flash manjaro ISO
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-8&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;Put manjaro image on a USB stick. I used etcher to flash it.
Plug the USB stick in.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-9&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-9&#34;&gt;
Disable secure boot
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-9&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;Reboot your laptop and press &lt;code class=&#34;verbatim&#34;&gt;Esc&lt;/code&gt; repeatedly before the HP logo appears.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Press &lt;code class=&#34;verbatim&#34;&gt;F10&lt;/code&gt; to go to &lt;code class=&#34;verbatim&#34;&gt;BIOS Setup&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Go to &lt;code class=&#34;verbatim&#34;&gt;System Configutation&lt;/code&gt; tab&lt;/li&gt;
&lt;li&gt;Select &lt;code class=&#34;verbatim&#34;&gt;Boot Options&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Select &lt;code class=&#34;verbatim&#34;&gt;Secure Boot&lt;/code&gt; and disable it&lt;/li&gt;
&lt;li&gt;Press &lt;code class=&#34;verbatim&#34;&gt;F10&lt;/code&gt; to save and exit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Congratulations, you are now free to install whatever operating system you like on your machine 😄&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-10&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-10&#34;&gt;
Change boot order
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-10&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;Reboot your laptop and press &lt;code class=&#34;verbatim&#34;&gt;Esc&lt;/code&gt; repeatedly before the HP logo appears.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Press F9 to go to &lt;code class=&#34;verbatim&#34;&gt;Boot Device Options&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Change boot order in order to place USB disk first.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Reboot the machine to boot into your USB stick, which contains the manjaro image.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-11&#34; class=&#34;outline-3&#34;&gt;
&lt;h3 id=&#34;headline-11&#34;&gt;
Install manjaro
&lt;/h3&gt;
&lt;div id=&#34;outline-text-headline-11&#34; class=&#34;outline-text-3&#34;&gt;
&lt;p&gt;Once you have booted into manjaro try if everything works and if you are happy install it!
I choose the option to completely remove all the data on the hard disk and install manjaro on it.
Furthermore, I didn&amp;#39;t created a swap partition in order to save space on the hard drive.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-12&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-12&#34;&gt;
Conclusion
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-12&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;If you like me tought that linux was not ready for hybrid tablet/laptop devices, I hope you changed your mind at this point.
If you have a device of this type that is not working as expected with windows, you can give linux a chance by trying it without installing it with a live distro on a USB stick.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Keep a changelog!</title>
      <link>https://www.marcoieni.com/2019/12/keep-a-changelog/</link>
      <pubDate>Sun, 29 Dec 2019 23:42:22 +0100</pubDate>
      
      <guid>https://www.marcoieni.com/2019/12/keep-a-changelog/</guid>
      <description>
&lt;p&gt;
In this article I will show you a changelog format and a convention for assigning numbers to your software versions.&lt;/p&gt;
&lt;p&gt;
&lt;img src=&#34;changelog.png&#34; alt=&#34;changelog.png&#34; title=&#34;changelog.png&#34; /&gt;&lt;/p&gt;
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-1&#34;&gt;
The boring introduction
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;During these holidays I renamed one of my side projects, because I was so smart to
name it like a registered trademark. 😓
I had to find a way to communicate this to the users, because manual intervention
was required in order to update.&lt;/p&gt;
&lt;p&gt;
The first thing that came to my mind was to place a big announcement at the beginning of the README
in which I say that the project was renamed and the instructions required to update it.
But then I thought: how much should I leave the message there?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For 1 month? Users could update also after this time.&lt;/li&gt;
&lt;li&gt;For 1 year? Too many new users will be really annoyed by this big section.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The project we are talking about is &lt;a href=&#34;https://github.com/MarcoIeni/intellimacs&#34;&gt;intellimacs&lt;/a&gt;. Tldr: it is just a bunch of vim configuration files.
Since the project is really simple, for a long time I thought that commit messages were enough to document
the changes to the project. Turns out it is not, because since commit messages has to be small, there are
too many commits with messages like &amp;#34;fixed typo&amp;#34; that create a lot of noise.&lt;/p&gt;
&lt;p&gt;
After this terrible idea I thought to build a full website with a blog were people can get updates
for the project. This would not be so bad, but it is something that requires time to be built and that I&amp;#39;ll have to maintain.
Furthermore, for the user would be a pain to first read all the github documentation and then go through the website
where there will be inevitably duplicated info.
For a project of this size, I think that keeping everything inside the github repository is enough for now.&lt;/p&gt;
&lt;p&gt;
Anyway, now the project counts 130 stars on GitHub, so all these people deserves to get comprehensive and coincise news about the project.&lt;/p&gt;
&lt;p&gt;
The best solution I have found for my problem is to keep a changelog.
The user, before updating, can see on which version they are by running &lt;code class=&#34;verbatim&#34;&gt;git tag&lt;/code&gt; and they can see what changed
by reading this nice plain text file, which contains all the notable changes of the project.&lt;/p&gt;
&lt;p&gt;
It&amp;#39;s something I always knew it was necessary, but that I continued to postpone with excuses like
&lt;em&gt;&amp;#34;my project is not too big yet&amp;#34;&lt;/em&gt;
or
&lt;em&gt;&amp;#34;the project is very simple, commit messages are enough&amp;#34;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
Well, turns out that now I added a changelog to my project and I found a really nice and efficient
way to do it! 💪&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-2&#34;&gt;
Keeping a changelog
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;After some online research I found this really nice website called, in fact, &lt;a href=&#34;https://keepachangelog.com/en/1.0.0/&#34;&gt;keep a changelog&lt;/a&gt;.
This website proposes a common format for changelogs which in my opinion is really nice.&lt;/p&gt;
&lt;p&gt;
This is an example of this changelog format:&lt;/p&gt;
&lt;div class=&#34;src src-markdown&#34;&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# Changelog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;All notable changes to this project will be documented in this file.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;The format is based on [&lt;span style=&#34;color:#f92672&#34;&gt;Keep a Changelog&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;https://keepachangelog.com/en/1.0.0/&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;and this project adheres to [&lt;span style=&#34;color:#f92672&#34;&gt;Semantic Versioning&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;https://semver.org/spec/v2.0.0.html&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## [Unreleased]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## [1.0.0] - 2017-06-20
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### Added
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; &amp;#34;Why keep a changelog?&amp;#34; section.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; &amp;#34;Who needs a changelog?&amp;#34; section.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; &amp;#34;How do I make a changelog?&amp;#34; section.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### Changed
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; Start using &amp;#34;changelog&amp;#34; over &amp;#34;change log&amp;#34; since it&amp;#39;s the common usage.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; Fix phrasing and spelling in German translation.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### Removed
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; Section about &amp;#34;changelog&amp;#34; vs &amp;#34;CHANGELOG&amp;#34;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## [0.1.0] - 2015-10-06
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### Added
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; Answer &amp;#34;Should you ever rewrite a change log?&amp;#34;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### Changed
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; Improve argument against commit logs.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; Start following [&lt;span style=&#34;color:#f92672&#34;&gt;SemVer&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;https://semver.org&lt;/span&gt;) properly.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## [0.0.3] - 2014-08-09
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### Added
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; &amp;#34;Why should I care?&amp;#34; section mentioning The Changelog podcast.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## [0.0.2] - 2014-07-10
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### Added
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; Explanation of the recommended reverse chronological release ordering.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## [0.0.1] - 2014-05-31
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### Added
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; This CHANGELOG file to hopefully serve as an evolving example of a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  standardized open source project CHANGELOG.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; CNAME file to enable GitHub Pages custom domain
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; README now contains answers to common questions about CHANGELOGs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; Good examples and basic guidelines, including proper date formatting.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;-&lt;/span&gt; Counter-examples: &amp;#34;What makes unicorns cry?&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[Unreleased]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.0.0...HEAD
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[1.0.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.3.0...v1.0.0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[0.1.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.8...v0.1.0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[0.0.3]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.2...v0.0.3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[0.0.2]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.1...v0.0.2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[0.0.1]: https://github.com/olivierlacan/keep-a-changelog/releases/tag/v0.0.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
The changelog starts with a brief introduction and then it lists all the versions of the software.&lt;/p&gt;
&lt;p&gt;
Basically, when you make a change to your software, you add this change to the &lt;code class=&#34;verbatim&#34;&gt;Unreleased&lt;/code&gt; section,
in one of the following subsections:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;
&lt;strong&gt;Added&lt;/strong&gt;
&lt;/dt&gt;
&lt;dd&gt;For new features.&lt;/dd&gt;
&lt;dt&gt;
&lt;strong&gt;Changed&lt;/strong&gt;
&lt;/dt&gt;
&lt;dd&gt;For changes in existing functionality.&lt;/dd&gt;
&lt;dt&gt;
&lt;strong&gt;Deprecated&lt;/strong&gt;
&lt;/dt&gt;
&lt;dd&gt;For soon-to-be removed features.&lt;/dd&gt;
&lt;dt&gt;
&lt;strong&gt;Removed&lt;/strong&gt;
&lt;/dt&gt;
&lt;dd&gt;For now removed features.&lt;/dd&gt;
&lt;dt&gt;
&lt;strong&gt;Fixed&lt;/strong&gt;
&lt;/dt&gt;
&lt;dd&gt;For any bug fixes.&lt;/dd&gt;
&lt;dt&gt;
&lt;strong&gt;Security&lt;/strong&gt;
&lt;/dt&gt;
&lt;dd&gt;In case of vulnerabilities.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;When a new release is ready, rename the &lt;code class=&#34;verbatim&#34;&gt;Unreleased&lt;/code&gt; section with the new version number and the current date.
And you are done! You have your changelog.
The &lt;code class=&#34;verbatim&#34;&gt;Unreleased&lt;/code&gt; section will be empty again, ready to be filled with your new awesome changes! 😃&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-3&#34;&gt;
Version numbers
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;Now..how to choose version numbers?&lt;/p&gt;
&lt;p&gt;
Well, for that the Keep a Changelog website indicates &lt;a href=&#34;https://semver.org/spec/v2.0.0.html&#34;&gt;Semantic Versioning&lt;/a&gt;.
This standard indicates that the software version should be in the format MAJOR.MINOR.PATCH.
The initial version is 0.0.1. When a new version is released increment the:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;
&lt;strong&gt;MAJOR version&lt;/strong&gt;
&lt;/dt&gt;
&lt;dd&gt;When you make incompatible API changes.&lt;/dd&gt;
&lt;dt&gt;
&lt;strong&gt;MINOR version&lt;/strong&gt;
&lt;/dt&gt;
&lt;dd&gt;When you add functionality in a backwards compatible manner.&lt;/dd&gt;
&lt;dt&gt;
&lt;strong&gt;PATCH version&lt;/strong&gt;
&lt;/dt&gt;
&lt;dd&gt;When you make backwards compatible bug fixes.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;When you increase the MAJOR version, MINOR and PATCH go to zero, while when you increase the MINOR version, PATCH goes to zero.&lt;/p&gt;
&lt;p&gt;
A pre-release version &lt;em&gt;may&lt;/em&gt; be denoted by appending a hyphen and a series of dot separated identifiers immediately following the patch version.
Examples: 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92.&lt;/p&gt;
&lt;p&gt;
Even if this method is mainly indicated for public APIs, I decided to apply it even if my project has not public APIs.
Of course, I started with version 0.0.1, but since my project is now stable and a manual intervention was required
for the update, I directly went to version &lt;a href=&#34;https://github.com/MarcoIeni/intellimacs/releases/tag/v1.0.0&#34;&gt;1.0.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
For my project, when a new version is released I tag the git repository, for example:&lt;/p&gt;
&lt;div class=&#34;src src-bash&#34;&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git tag -a v1.0.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Then I go to &lt;a href=&#34;https://github.com/MarcoIeni/intellimacs/releases&#34;&gt;releases&lt;/a&gt;, and I create a new release for the current tag, where I copy the content of the changelog.
I don&amp;#39;t know if this is a best practice, but keeping the changelog only on github releases for me it&amp;#39;s dangerous, since (as stated on keep a changelog website) it&amp;#39;s not portable and I like the concept of having a plain text file with all the changes versioned together with the software.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Coderetreat is the funniest coding event I&#39;ve ever attended</title>
      <link>https://www.marcoieni.com/2019/11/coderetreat-is-the-funniest-coding-event-ive-ever-attended/</link>
      <pubDate>Mon, 18 Nov 2019 19:46:23 +0200</pubDate>
      
      <guid>https://www.marcoieni.com/2019/11/coderetreat-is-the-funniest-coding-event-ive-ever-attended/</guid>
      <description>&lt;p&gt;
November 16th is the Global Day of Coderetreat and this was the first time I partecipated.&lt;/p&gt;
&lt;p&gt;
&lt;img src=&#34;https://www.coderetreat.org/images/facilitating/coderetreat.png&#34; alt=&#34;https://www.coderetreat.org/images/facilitating/coderetreat.png&#34; title=&#34;https://www.coderetreat.org/images/facilitating/coderetreat.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;
The subtitle of the &lt;a href=&#34;https://www.coderetreat.org/&#34;&gt;website&lt;/a&gt; describe it as&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a day-long, intensive practice event, focusing on the fundamentals of software development and design, away from the pressures of &amp;#39;getting things done&amp;#39;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Basically you pair program with strangers and instead of thinking about deadlines or legacy code that you have no time to refactor, you focus on best practices such as test driven development or some tricky challenges took from &lt;a href=&#34;https://www.cs.helsinki.fi/u/luontola/tdd-2009/ext/ObjectCalisthenics.pdf&#34;&gt;object calisthenics&lt;/a&gt;.
The proposed problem is always the same every year: &lt;a href=&#34;https://en.wikipedia.org/wiki/Conways_Game_of_Life&#34;&gt;Conway&amp;#39;s Game of Life&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
BUT! 😱 There is one rule: every 45 minutes you have to change buddy, delete all your code and start over!&lt;/p&gt;
&lt;p&gt;
At the beginning you feel a bit of frustration, because you know that by the end of the day you will never finish that damn game, but everytime you start again you notice that you master the problem a little bit more:
This means that iteration by iteration, you see your code getting simpler and cleaner!&lt;/p&gt;
&lt;p&gt;
In fact, one of my takeaways from this day is this one: if you have a portion of code that makes you struggle everytime the debugger goes into it, maybe instead of trying to refactor it you could try to rewrite it from scratch! I can ensure you that a lot of great ideas will pop into your mind if you have a blank editor buffer instead of old ugly code in front of you.&lt;/p&gt;
&lt;p&gt;
And what about 3 hours meetings just to decide if an option is better than the other? Maybe in less time you could have implemented small prototypes of both the solutions in order to see which one looks better and you can have something concrete to discuss on with your team. 😌&lt;/p&gt;
&lt;p&gt;
In conclusion, if you missed the coderetreat I strongly advise you to partecipate next year (you can check locations on the &lt;a href=&#34;https://www.coderetreat.org/&#34;&gt;website&lt;/a&gt;) or if you can, try this exercise with a friend, it&amp;#39;s really funny and you learn a lot.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>whoami</title>
      <link>https://www.marcoieni.com/2019/11/whoami/</link>
      <pubDate>Thu, 07 Nov 2019 22:46:23 +0200</pubDate>
      
      <guid>https://www.marcoieni.com/2019/11/whoami/</guid>
      <description>&lt;p&gt;
Hi everyone!&lt;/p&gt;
&lt;p&gt;
I&amp;#39;m Marco and I opened this website in order to share with the rest of the world my love for computer science, programming, linux, open source and other nice stuff like this.&lt;/p&gt;
&lt;p&gt;
Since I think that nowadays social media are not that good, I thought that it was really nice to have a place where I can have full control of my contents.&lt;/p&gt;
&lt;p&gt;
This website was created by the &lt;a href=&#34;https://gohugo.io/&#34;&gt;hugo&lt;/a&gt; framework and is hosted on &lt;a href=&#34;https://www.netlify.com/&#34;&gt;netlify&lt;/a&gt;. Yes, I didn&amp;#39;t invent anything new, this is what all cool kids already do. 🤓
Posts are written with &lt;a href=&#34;https://orgmode.org/&#34;&gt;org mode&lt;/a&gt; with the &lt;a href=&#34;http://spacemacs.org/&#34;&gt;spacemacs&lt;/a&gt; text editor.
The git repository is hosted on &lt;a href=&#34;https://about.gitlab.com/&#34;&gt;GitLab&lt;/a&gt;. It is a private repository because I don&amp;#39;t want that people searching for my content click on gitlab instead of my website. 😑&lt;/p&gt;
&lt;p&gt;
Minimum background about myself: I&amp;#39;m 25 years old, last year I obtained a degree in computer engineering and I work as an embedded developer in Milan (Italy).&lt;/p&gt;
&lt;p&gt;
I just hope you will learn something from me and that I will learn something from you (oh, right! Comments are managed by &lt;a href=&#34;https://utteranc.es/&#34;&gt;utterances&lt;/a&gt;).
Goodbye and make the world a better place! 😃&lt;/p&gt;
&lt;p&gt;
P.S. if you don&amp;#39;t know what &lt;code class=&#34;verbatim&#34;&gt;whoami&lt;/code&gt; refers to, then type it into your unix terminal!&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
