<?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 Arc &amp; Digital</title><link>https://www.eifel42.dev/post/</link><description>Recent content in Posts on Arc &amp; Digital</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Thu, 28 May 2026 08:00:00 +0200</lastBuildDate><atom:link href="https://www.eifel42.dev/post/index.xml" rel="self" type="application/rss+xml"/><item><title>Development Risk</title><link>https://www.eifel42.dev/post/development-risk/</link><pubDate>Thu, 28 May 2026 08:00:00 +0200</pubDate><guid>https://www.eifel42.dev/post/development-risk/</guid><description>How simulated Sprint overruns, cancellation gates, and budget pressure expose hidden development cost — and why the cheapest feature can carry the steepest relative risk.</description></item><item><title>Risk Resilience</title><link>https://www.eifel42.dev/post/risk-resilience/</link><pubDate>Wed, 27 May 2026 08:00:00 +0200</pubDate><guid>https://www.eifel42.dev/post/risk-resilience/</guid><description>A practical look at portfolio risk for software backlogs: the four risk layers — development, market, component, global — and what happens to business value when each one fires.</description></item><item><title>Business Value</title><link>https://www.eifel42.dev/post/business-value/</link><pubDate>Thu, 21 May 2026 08:00:00 +0200</pubDate><guid>https://www.eifel42.dev/post/business-value/</guid><description>Business Value Floor 95 for software projects: the 5th percentile of simulated outcomes. Value at Risk reframed as reliably achievable value.</description></item><item><title>Feature Hypotheses Simulation</title><link>https://www.eifel42.dev/post/feature-hypotheses-simulation/</link><pubDate>Tue, 19 May 2026 08:00:00 +0200</pubDate><guid>https://www.eifel42.dev/post/feature-hypotheses-simulation/</guid><description>FHS is a small Python library that simulates 10,000 futures per feature hypothesis so Product Owners can prioritise on a numerical decision basis — expected value, Business Value Floor 95, worst case, VaR, CVaR and portfolio balance — built end-to-end as a vibe-coded financial test project.</description></item><item><title>Wilde Endert</title><link>https://www.eifel42.dev/post/wilde-endert/</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><guid>https://www.eifel42.dev/post/wilde-endert/</guid><description>Wilde Endert — narrow trails through the lower valley, with gorges, the Rausch waterfall and slate hills.</description></item><item><title>Dreimühlen Waterfall</title><link>https://www.eifel42.dev/post/dreimuehlen-wasserfall/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://www.eifel42.dev/post/dreimuehlen-wasserfall/</guid><description>Dreimühlen Waterfall — short walks for families, longer hikes and bike touring on the Kalkeifel-Radweg in the Eifel.</description></item><item><title>Ulmener Maar</title><link>https://www.eifel42.dev/post/ulmener-maar/</link><pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate><guid>https://www.eifel42.dev/post/ulmener-maar/</guid><description>Ulmener Maar — short hikes, a connecting tunnel to Jungfernweiher and birdwatching opportunities.</description></item><item><title>Learning Organizations</title><link>https://www.eifel42.dev/post/learning-organizations/</link><pubDate>Sun, 07 Dec 2025 00:00:00 +0000</pubDate><guid>https://www.eifel42.dev/post/learning-organizations/</guid><description>Book recommendation: a concise review of Uwe Vigenschow&amp;rsquo;s &amp;lsquo;Lernende Organisationen&amp;rsquo; highlighting practical takeaways for organisational learning.</description></item><item><title>Eltz Valley</title><link>https://www.eifel42.dev/post/eltz-valley-medieval-castles-hiking/</link><pubDate>Wed, 03 Dec 2025 00:00:00 +0000</pubDate><guid>https://www.eifel42.dev/post/eltz-valley-medieval-castles-hiking/</guid><description>Discover the medieval castles of Eltz Valley on award-winning Traumpfade hiking trails. Start at Pyrmont Waterfall and explore Burg Eltz and Burg Pyrmont.</description></item><item><title>Key Insights from the Microsoft AI Tour 2025</title><link>https://www.eifel42.dev/post/2025-11-10-microsoft-ai-tour/</link><pubDate>Mon, 10 Nov 2025 00:00:00 +0000</pubDate><guid>https://www.eifel42.dev/post/2025-11-10-microsoft-ai-tour/</guid><description>&lt;p&gt;I had the opportunity to participate in the Microsoft AI Tour, and it was exciting to see firsthand the experiences shared from real-life projects, particularly the Zava demo project.&lt;/p&gt;
&lt;figure class="center-image"&gt;
 &lt;a href="https://www.eifel42.dev/images/2025-11-10-microsoft-ai-tour.webp" data-size="803x1072"&gt;
 &lt;picture&gt;
 &lt;source srcset="https://www.eifel42.dev/images/2025-11-10-microsoft-ai-tour-400w.avif 400w,
 https://www.eifel42.dev/images/2025-11-10-microsoft-ai-tour-600w.avif 600w,
 https://www.eifel42.dev/images/2025-11-10-microsoft-ai-tour.avif 803w,
 https://www.eifel42.dev/images/2025-11-10-microsoft-ai-tour@2x.avif 1606w"
 type="image/avif"
 sizes="(max-width: 480px) 400px, (max-width: 768px) 600px, 803px"&gt;
 &lt;source srcset="https://www.eifel42.dev/images/2025-11-10-microsoft-ai-tour-400w.webp 400w,
 https://www.eifel42.dev/images/2025-11-10-microsoft-ai-tour-600w.webp 600w,
 https://www.eifel42.dev/images/2025-11-10-microsoft-ai-tour.webp 803w,
 https://www.eifel42.dev/images/2025-11-10-microsoft-ai-tour@2x.webp 1606w"
 type="image/webp"
 sizes="(max-width: 480px) 400px, (max-width: 768px) 600px, 803px"&gt;
 &lt;img src="https://www.eifel42.dev/images/2025-11-10-microsoft-ai-tour.webp"
 alt="Microsoft AI Tour, Frankfurt"
 width="803"
 height="1072"
 loading="eager"
 fetchpriority="high"
 decoding="async"
 sizes="(max-width: 480px) 400px, (max-width: 768px) 600px, 803px"&gt;
 &lt;/picture&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;Microsoft AI Tour, Frankfurt&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Here are my key &lt;strong&gt;takeaways&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;AI will accelerate development and streamline business workflows. It can enhance software quality and security, but it&amp;rsquo;s crucial to remember that a human must always be involved in the process and make the final quality checks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Topics such as &lt;em&gt;AI governance&lt;/em&gt;, &lt;em&gt;AI security&lt;/em&gt;, and &lt;em&gt;data loss prevention (DLP)&lt;/em&gt; will be critical in creating productive environments for all organizations, including small and mid-sized companies.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Maintaining high data quality is essential for effective data processing. Data lakes comprise multiple data sources. To transform each data source into &lt;em&gt;data meshes&lt;/em&gt; or &lt;em&gt;data products&lt;/em&gt; is increasingly important. This encompasses areas such as &lt;em&gt;event streaming&lt;/em&gt; and &lt;em&gt;data engineering&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In my experience, every organization or team navigates a learning curve when they begin to adopt new approaches and tools in software development. I&amp;rsquo;ve noticed that while low-code solutions can lead to impressive early progress, it&amp;rsquo;s crucial to be aware that a prototype or proof of concept does not meet the criteria for a functional system according to European and German regulations. &lt;strong&gt;T-shaped&lt;/strong&gt; experts will be essential in navigating this AI landscape effectively.&lt;/p&gt;</description></item><item><title>Lighthouse Score 100</title><link>https://www.eifel42.dev/post/2025-10-09-performance-optimization/</link><pubDate>Thu, 09 Oct 2025 00:00:00 +0200</pubDate><guid>https://www.eifel42.dev/post/2025-10-09-performance-optimization/</guid><description>&lt;p&gt;This summer, I embarked on a journey to revise the layout of my blog. An update to my Hugo theme customization led to a significant increase in the complexity of the CSS structure. As a result, I faced layout breaks and received disappointing scores on Google&amp;rsquo;s PageSpeed Insights. Today, I proudly celebrate my achievement: my personal blog now boasts a perfect score of 100 points in both mobile and desktop categories. Determined to make a change, I gradually refactored my site to improve its &lt;a href="https://developer.chrome.com/docs/lighthouse"&gt;Lighthouse score&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One of the most valuable lessons I learned is that optimizing website performance strengthens both security and architecture &lt;a href="https://developer.chrome.com/docs/lighthouse/best-practices/doctype"&gt;Lighthouse - Best Pratices&lt;/a&gt;. Throughout the optimization process, Software Architecture in Stream shared a truly inspiring &lt;a href="https://www.youtube.com/watch?v=ObT05w23oB8"&gt;Web Performance&lt;/a&gt; session.&lt;/p&gt;
&lt;div class="performance-gallery"&gt;
 &lt;div class="performance-gallery__grid"&gt;
 &lt;figure class="performance-gallery__item"&gt;
 &lt;div class="no-photoswipe performance-gallery__media"&gt;
 &lt;img class="performance-gallery__img" src="https://www.eifel42.dev/images/2025-10-09-performance-mobile.webp" alt="Lighthouse Performance Score 100 for Mobile" loading="lazy" decoding="async" width="400" height="300" /&gt;
 &lt;/div&gt;
 &lt;figcaption class="performance-gallery__caption"&gt;Performance (Mobile)&lt;/figcaption&gt;
 &lt;/figure&gt;

 &lt;figure class="performance-gallery__item"&gt;
 &lt;div class="no-photoswipe performance-gallery__media"&gt;
 &lt;img class="performance-gallery__img" src="https://www.eifel42.dev/images/2025-10-09-performance-desktop.webp" alt="Lighthouse Performance Score 100 for Desktop" loading="lazy" decoding="async" width="600" height="400" /&gt;
 &lt;/div&gt;
 &lt;figcaption class="performance-gallery__caption"&gt;Performance (Desktop)&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Developer Summit 2025: Insights from Berlin</title><link>https://www.eifel42.dev/post/entwickler-summit/</link><pubDate>Sat, 20 Sep 2025 00:00:00 +0200</pubDate><guid>https://www.eifel42.dev/post/entwickler-summit/</guid><description>Insights from Developer Summit 2025 in Berlin: DDD, legacy modernization, responsible architecture and AI.</description></item><item><title>Karabiner Elements</title><link>https://www.eifel42.dev/post/2025-09-08-pc-keyboard-on-mac/</link><pubDate>Mon, 08 Sep 2025 00:00:00 +0200</pubDate><guid>https://www.eifel42.dev/post/2025-09-08-pc-keyboard-on-mac/</guid><description>Karabiner Elements makes switching between Mac and Windows environments incredibly easy and is a preferred tool for long coding sessions.</description></item><item><title>EU Website Evidence Collector moves to code.europa.eu</title><link>https://www.eifel42.dev/post/2025-08-31-eu-gpr-tool/</link><pubDate>Sun, 31 Aug 2025 13:00:00 +0200</pubDate><guid>https://www.eifel42.dev/post/2025-08-31-eu-gpr-tool/</guid><description>&lt;p&gt;&lt;strong&gt;Introducing the Free GDPR Compliance Helper&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The European Union has introduced an excellent resource: a free GDPR compliance tool. → &lt;a href="https://www.eifel42.dev/post/2024-01-13-eu-gdpr-tool/"&gt;Discover the tool&lt;/a&gt;. To use it in a DevOps pipeline is mentioned here: → &lt;a href="https://www.eifel42.dev/post/2024-05-25-gdpr-pipeline/"&gt;Explore Automating GDPR Checks&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="hosting-update"&gt;Hosting Update&lt;/h2&gt;
&lt;p&gt;The &lt;em&gt;Website Evidence Collector&lt;/em&gt; has transitioned from GitHub to the EU’s GitLab-based platform at &lt;a href="https://code.europa.eu"&gt;&lt;strong&gt;code.europa.eu&lt;/strong&gt;&lt;/a&gt;. This move not only enhances long-term accessibility but also aligns with the European Commission’s commitment to open-source initiatives.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New Download (v3.7.0)&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://code.europa.eu/EDPS/website-evidence-collector/-/releases/v3.7.0/downloads/website-evidence-collector.tgz"&gt;EDPS - website-evidence-collector v3.7.0 - downloads&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Wishing you a successful and (cookie-free) deployment experience!&lt;/p&gt;</description></item><item><title>Data in Motion Day 2024</title><link>https://www.eifel42.dev/post/2024-11-06-data-in-motion-tour-2024/</link><pubDate>Wed, 06 Nov 2024 22:50:55 +0200</pubDate><guid>https://www.eifel42.dev/post/2024-11-06-data-in-motion-tour-2024/</guid><description>&lt;p&gt;I had the opportunity to participate in &lt;strong&gt;Data in Motion Day 2024&lt;/strong&gt; in Frankfurt, analyzing stream processing from a &lt;strong&gt;business analysis&lt;/strong&gt; and &lt;strong&gt;enterprise architecture&lt;/strong&gt; perspective.&lt;/p&gt;
&lt;p&gt;One of my primary takeaways is that &lt;strong&gt;stream processing&lt;/strong&gt; extends beyond mere software frameworks and data management. It encourages a more profound comprehension of &lt;strong&gt;business operations&lt;/strong&gt; and their specific domains. This understanding is essential for &lt;strong&gt;requirements analysis&lt;/strong&gt; and leveraging data in real-time to drive strategic decision-making.&lt;/p&gt;
&lt;figure class="center-image"&gt;
 &lt;a href="https://www.eifel42.dev/images/2024-11-06-data-in-motion.webp" data-size="600x680"&gt;
 &lt;picture&gt;
 &lt;source srcset="https://www.eifel42.dev/images/2024-11-06-data-in-motion-400w.avif 400w,
 https://www.eifel42.dev/images/2024-11-06-data-in-motion-600w.avif 600w,
 https://www.eifel42.dev/images/2024-11-06-data-in-motion.avif 600w,
 https://www.eifel42.dev/images/2024-11-06-data-in-motion@2x.avif 1200w"
 type="image/avif"
 sizes="(max-width: 480px) 400px, 600px"&gt;
 &lt;source srcset="https://www.eifel42.dev/images/2024-11-06-data-in-motion-400w.webp 400w,
 https://www.eifel42.dev/images/2024-11-06-data-in-motion-600w.webp 600w,
 https://www.eifel42.dev/images/2024-11-06-data-in-motion.webp 600w,
 https://www.eifel42.dev/images/2024-11-06-data-in-motion@2x.webp 1200w"
 type="image/webp"
 sizes="(max-width: 480px) 400px, 600px"&gt;
 &lt;img src="https://www.eifel42.dev/images/2024-11-06-data-in-motion.webp"
 alt="Data in Motion 2024, Ticket"
 width="600"
 height="680"
 loading="eager"
 fetchpriority="high"
 decoding="async"
 sizes="(max-width: 480px) 400px, 600px"&gt;
 &lt;/picture&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;Data in Motion 2024, Ticket&lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Agile Increment</title><link>https://www.eifel42.dev/post/2024-10-20-agile-increment/</link><pubDate>Sun, 20 Oct 2024 11:50:55 +0200</pubDate><guid>https://www.eifel42.dev/post/2024-10-20-agile-increment/</guid><description>&lt;h2 id="what-is-an-increment---a-business-analysis-perspective"&gt;What is an increment? - A Business Analysis Perspective&lt;/h2&gt;
&lt;p&gt;Agile methods are standard in software development and are expected to produce results. The &lt;strong&gt;Scrum guide&lt;/strong&gt; defines these results as increments.&lt;/p&gt;
&lt;p&gt;A manager in the software industry highlighted that her organization utilizes agile methods. However, she is interested in documenting the workshop outcomes rather than just engaging in agile discussions. This reflects a common &lt;strong&gt;requirements analysis&lt;/strong&gt; challenge in &lt;strong&gt;agile transformation&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="what-is-an-increment"&gt;What is an increment?&lt;/h2&gt;
&lt;p&gt;Agile methods are standard in software development and are expected to produce results. The Scrum guide defines these results as increments. Scrum is an agile and lightweight framework. A manager in the software industry highlighted that her organization utilizes agile methods. However, she is interested in documenting the workshop outcomes rather than just engaging in agile discussions.&lt;/p&gt;
&lt;p&gt;I believe that embracing agile methods is about generating business value across all aspects of the business.&lt;/p&gt;
&lt;h2 id="scrum-guide"&gt;Scrum Guide&lt;/h2&gt;
&lt;p&gt;The Scrum Guide 2020 describes the term of the Increment:&lt;/p&gt;
&lt;h3 id="increment"&gt;Increment&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;An Increment is a concrete stepping stone toward the Product Goal. Each Increment is additive to all prior Increments and thoroughly verified, ensuring that all Increments work together. To provide value, the Increment must be usable.
Multiple Increments may be created within a Sprint. The sum of the Increments is presented at the Sprint Review thus supporting empiricism. However, an Increment may be delivered to stakeholders prior to the end of the Sprint. The Sprint Review should never be considered a gate to releasing value.
Work cannot be considered part of an Increment unless it meets the Definition of Done (&lt;a href="https://scrumguides.org/scrum-guide.html#increment"&gt;Scrum Guide#increment&lt;/a&gt;).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Sprint strives to create something of value that aligns with the organization&amp;rsquo;s or product&amp;rsquo;s mission.&lt;/p&gt;
&lt;p&gt;Incorporating agile methods into other areas of knowledge work is an idea worth considering. When using agile methods, it&amp;rsquo;s important to note that they do not prohibit the creation of diagrams. The primary focus is on ensuring that the outcome is valuable and aligns with the overall mission. In traditional finance, business value is often measured in terms of profits and cost contribution. However, German drugstore DM has introduced a concept called &amp;ldquo;valuation accounting or value-development accounting (Wertbildungsrechnung)&amp;rdquo;, which takes into account a broader range of factors than just profit maximization. This approach has the potential to lead to more sustainable and resilient business models in the medium and long term (&lt;a href="https://next-u.de/2018/10/31/nutzen-statt-gewinnmaximierung-mit-der-wertbildungsrechnung/"&gt;Next-U Werbildungsrechnung&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>Forgotten Knowledge</title><link>https://www.eifel42.dev/post/2024-08-01-documentation-cathedral/</link><pubDate>Thu, 01 Aug 2024 20:21:43 +0100</pubDate><guid>https://www.eifel42.dev/post/2024-08-01-documentation-cathedral/</guid><description>Software architecture documentation importance analyzed through historical perspective. Business analysis of knowledge preservation by Stefan Zils.</description></item><item><title>Javaland 2024, Nürburgring</title><link>https://www.eifel42.dev/post/2024-05-25-javaland-eifel/</link><pubDate>Sat, 25 May 2024 21:21:42 +0100</pubDate><guid>https://www.eifel42.dev/post/2024-05-25-javaland-eifel/</guid><description>&lt;h2 id="a-java-software-development-conference"&gt;A Java Software Development Conference&lt;/h2&gt;
&lt;figure class="center-image"&gt;
 &lt;a href="https://www.eifel42.dev/images/2024-05-25-javaland.webp" data-size="764x389"&gt;
 &lt;picture&gt;
 &lt;source srcset="https://www.eifel42.dev/images/2024-05-25-javaland-400w.avif 400w,
 https://www.eifel42.dev/images/2024-05-25-javaland-600w.avif 600w,
 https://www.eifel42.dev/images/2024-05-25-javaland.avif 764w,
 https://www.eifel42.dev/images/2024-05-25-javaland@2x.avif 1528w"
 type="image/avif"
 sizes="(max-width: 480px) 400px, (max-width: 768px) 600px, 764px"&gt;
 &lt;source srcset="https://www.eifel42.dev/images/2024-05-25-javaland-400w.webp 400w,
 https://www.eifel42.dev/images/2024-05-25-javaland-600w.webp 600w,
 https://www.eifel42.dev/images/2024-05-25-javaland.webp 764w,
 https://www.eifel42.dev/images/2024-05-25-javaland@2x.webp 1528w"
 type="image/webp"
 sizes="(max-width: 480px) 400px, (max-width: 768px) 600px, 764px"&gt;
 &lt;img src="https://www.eifel42.dev/images/2024-05-25-javaland.webp"
 alt="Javaland 2024 conference at Nürburgring, Eifel"
 width="764"
 height="389"
 loading="eager"
 fetchpriority="high"
 decoding="async"
 sizes="(max-width: 480px) 400px, (max-width: 768px) 600px, 764px"&gt;
 &lt;/picture&gt;
 &lt;/a&gt;
 &lt;figcaption&gt;Javaland Nürburgring (Eifel), 2024&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In April, the German Java conference took place at the Nürburgring. It was a new and great experience. It was the first time that I did not have to plan a trip to learn about on-site software development.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s amazing how life can come full circle. When I was a student, I used to listen to rock music at the Rock am Ring festival. Now, I find myself in the audience at the top of the software development scene.&lt;/p&gt;
&lt;p&gt;After a month of deep reflection and revisiting the recorded sessions, a significant trend in enterprise software development emerged:&lt;/p&gt;
&lt;h3 id="domain-driven-design"&gt;Domain Driven Design&lt;/h3&gt;
&lt;p&gt;I enjoyed the talks about Domain-Driven Design (DDD) architecture and business views, the discussions about exemplary architecture, and the thinking in the modules. Since I read Eric Evans&amp;rsquo;s Blue Book for the first time, Domain-Driven-Design has become the de facto standard for mapping business needs into modern architectures.&lt;/p&gt;
&lt;p&gt;Behavior-Driven-Design (BDD) is a theoretical concept for me and a practical tool I regularly incorporate into my work.&lt;/p&gt;
&lt;p&gt;Like every methodology, both approaches have a tradeoff between technology, business needs and values, and costs.&lt;/p&gt;
&lt;h3 id="event-sourcing"&gt;Event Sourcing&lt;/h3&gt;
&lt;p&gt;The talks about event sourcing, particularly Kafka, were overcrowded. I like the ideas for event sourcing and stream processing considerably (Apache Kafka, Apache ksqlDB, Apache Flink, etc.). However, using it in a productive environment still has a high learning curve and significantly influences the software architecture.&lt;/p&gt;
&lt;h3 id="green-software-development"&gt;Green Software Development&lt;/h3&gt;
&lt;p&gt;Green software development is not just a trend, but a necessity in the face of increasing energy consumption from technologies like cloud computing and AI systems. By prioritizing energy efficiency, we can ensure that energy savings become a cornerstone in developing software systems, such as microservices running in the cloud, thereby contributing to a more sustainable and cost-effective future.&lt;/p&gt;</description></item><item><title>GDPR Compliance Pipeline</title><link>https://www.eifel42.dev/post/2024-05-25-gdpr-pipeline/</link><pubDate>Sat, 25 May 2024 20:16:42 +0100</pubDate><guid>https://www.eifel42.dev/post/2024-05-25-gdpr-pipeline/</guid><description>&lt;p&gt;In January, I mentioned that the European Union offers a &lt;a href="https://www.eifel42.dev/post/2024-01-13-eu-gdpr-tool/" title="free compliance checker"&gt;free GDPR compliance checker&lt;/a&gt;. As an &lt;strong&gt;business analyst&lt;/strong&gt; , I analyze how &lt;strong&gt;business process automation&lt;/strong&gt; can streamline &lt;strong&gt;compliance requirements analysis&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Small and medium-sized businesses can benefit greatly from using their websites as digital business cards. For example, I enjoy receiving feedback and knowing that people appreciate my posts. Actively tracking website visitors is too time-consuming for me. There are other marketing activities that are more target-oriented.&lt;/p&gt;
&lt;p&gt;When the EU introduced laws about cookie banners, I found it daunting to comply. However, I realized it was a chance to rethink my marketing strategies and ensure user privacy. This shift empowered me to understand that I do not have to track every visitor to be successful.&lt;/p&gt;
&lt;p&gt;Hugo does not create cookies by default. I will ensure that future updates only create cookies with my permission. Web design is not my main focus. As a hands-on architect, I need to stay updated on the latest techniques. Even open-source software can change key quality features over time, so I will verify cookie compliance after each deployment.&lt;/p&gt;
&lt;h3 id="github-actions-job"&gt;GitHub Actions Job&lt;/h3&gt;
&lt;p&gt;Since I only write a limited number of posts or articles per quarter, I do not have to consider the execution times.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The GitHub action includes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installing the latest version of the Website Evidence Collector.&lt;/li&gt;
&lt;li&gt;Running the tool.&lt;/li&gt;
&lt;li&gt;Storing the result on GitHub for ten days.&lt;/li&gt;
&lt;li&gt;Terminate the job if one or more cookies are discovered. The GitHub platform automatically triggers error notifications.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="github-job-collect-evidence"&gt;GitHub Job collect-evidence&lt;/h4&gt;
&lt;div class="gh-codeblock"&gt;
 &lt;div class="gh-codeblock-header"&gt;
 &lt;span class="gh-codeblock-lang"&gt;YAML&lt;/span&gt;
 &lt;button class="gh-copy-btn"&gt;
 &lt;svg class="gh-icon gh-icon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor"&gt;
 &lt;path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"&gt;&lt;/path&gt;
 &lt;path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;svg class="gh-icon gh-icon-check" viewBox="0 0 16 16" width="16" height="16" fill="currentColor"&gt;
 &lt;path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.75.75 0 0 1 1.06-1.06L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="gh-codeblock-body"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;collect-evidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;needs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;deploy.....&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Install jq&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; sudo apt-get install jq
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; sudo wget https://github.com/mikefarah/yq/releases/download/v4.6.1/yq_linux_amd64 -O /usr/bin/yq &amp;amp;&amp;amp; sudo chmod +x /usr/bin/yq&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Setup Node.js&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;actions/setup-node@v4&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;node-version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;18&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Install Cypress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;npm install cypress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Install Website Evidence Collector&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;npm install --global https://github.com/EU-EDPS/website-evidence-collector/tarball/latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Collect evidence from websites&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;collect-eifel42&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; website-evidence-collector -y -q --no-output https://www.eifel42.dev/ &amp;gt; eifel42.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; yq e -j eifel42.yaml &amp;gt; eifel42.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Upload evidence&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;actions/upload-artifact@v4.3.3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;evidence&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; eifel42.yaml &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Check cookies eifel42&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; isEmpty=$(jq &amp;#39;.cookies | length == 0&amp;#39; eifel42.json)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; if [ &amp;#34;$isEmpty&amp;#34; = &amp;#34;true&amp;#34; ]; then
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; echo &amp;#34;Cookies array is empty&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; echo &amp;#34;Cookies array is not empty&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; exit -1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="links"&gt;Links&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.eifel42.dev/docs/2024-05-25-eifel42.yaml"&gt;Example of website-evidence-collector output&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>European Union provides a GDPR compliance tool Website</title><link>https://www.eifel42.dev/post/2024-01-13-eu-gdpr-tool/</link><pubDate>Sat, 13 Jan 2024 20:14:39 +0100</pubDate><guid>https://www.eifel42.dev/post/2024-01-13-eu-gdpr-tool/</guid><description>&lt;h2 id="website-evidence-collector"&gt;Website Evidence Collector&lt;/h2&gt;
&lt;p&gt;The European Union announced a tool for GDPR compliance checks for websites. This tool can be used manually, in an automated deployment process, and security vulnerability checks.
It can be an easy and cost-efficient approach for small and medium companies (Mittelstand).&lt;/p&gt;
&lt;h3 id="links"&gt;Links&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://edps.europa.eu/edps-inspection-software_en"&gt;EDPS Inspection Software&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/EU-EDPS/website-evidence-collector"&gt;GitHub Website-evidence-collector&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>