<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Federico Ponzi</title>
    <description>The latest articles on DEV Community by Federico Ponzi (@federico_ponzi).</description>
    <link>https://dev.to/federico_ponzi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F436938%2F63c55f6e-2841-47a1-a264-908f5bcb5677.jpg</url>
      <title>DEV Community: Federico Ponzi</title>
      <link>https://dev.to/federico_ponzi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/federico_ponzi"/>
    <language>en</language>
    <item>
      <title>GenAI-accelerated TLA+ challenge</title>
      <dc:creator>Federico Ponzi</dc:creator>
      <pubDate>Tue, 06 May 2025 17:26:41 +0000</pubDate>
      <link>https://dev.to/federico_ponzi/genai-accelerated-tla-challenge-45ln</link>
      <guid>https://dev.to/federico_ponzi/genai-accelerated-tla-challenge-45ln</guid>
      <description>&lt;p&gt;Sharing this news here hoping you might find it interesting!&lt;/p&gt;

&lt;p&gt;TLDR; if you have some experience with LLMs and TLA+, there is a chance to win some prizes. If you have experience with LLMs but not with TLA+ yet, but you are interested in developing TLA+ tools, apply to the &lt;a href="https://foundation.tlapl.us/grants/2024-grant-program/index.html" rel="noopener noreferrer"&gt;TLA+ grant program&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The original announcement can be found on the TLA+ foundation website: &lt;a href="https://foundation.tlapl.us/challenge/index.html" rel="noopener noreferrer"&gt;https://foundation.tlapl.us/challenge/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TLA+ is a formal specification language designed for modeling and verifying concurrent and distributed systems.&lt;/p&gt;




&lt;p&gt;This initiative aims to foster practical and innovative tooling, workflows, and approaches that bring the capabilities of generative AI and LLMs to TLA+. Participants are invited to develop engineering-oriented solutions that advance the usability, accessibility, and automation of formal specification through the integration of GenAI.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Awards&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;1st Place&lt;/strong&gt;: &lt;a href="https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5090/" rel="noopener noreferrer"&gt;Nvidia GeForce RTX 5090&lt;/a&gt; (sponsored by NVIDIA)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;2nd Place&lt;/strong&gt;: One-year single seat, individual subscription to &lt;a href="https://github.com/github-copilot/pro-plus" rel="noopener noreferrer"&gt;Github Copilot Pro+&lt;/a&gt; (sponsored by the TLA+ Foundation)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;3rd Place&lt;/strong&gt;: One-year single seat, individual subscription to &lt;a href="https://github.com/github-copilot/pro" rel="noopener noreferrer"&gt;Github Copilot Pro&lt;/a&gt; (sponsored by the TLA+ Foundation)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Example Project Areas&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Participants may submit work including, but not limited to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Intelligent refactoring of TLA+ specifications (e.g., managing &lt;code&gt;UNCHANGED&lt;/code&gt; correctly when adding variables)&lt;/li&gt;
&lt;li&gt;  LLM-enhanced linters, formatters, or other development tools&lt;/li&gt;
&lt;li&gt;  LLM-driven tools for automated grading in education&lt;/li&gt;
&lt;li&gt;  Visualizations of specifications or execution traces&lt;/li&gt;
&lt;li&gt;  Generation of type annotations for tools like Apalache&lt;/li&gt;
&lt;li&gt;  Synthesis of inductive invariant candidates, validated via &lt;a href="https://github.com/tlaplus/tlaplus" rel="noopener noreferrer"&gt;TLC&lt;/a&gt; or &lt;a href="https://github.com/apalache-mc/apalache/" rel="noopener noreferrer"&gt;Apalache&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Synthesis of &lt;a href="https://github.com/tlaplus/tlapm" rel="noopener noreferrer"&gt;TLAPS&lt;/a&gt; proofs&lt;/li&gt;
&lt;li&gt;  Synthesis of entire specifications from source code and design documents&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Evaluation&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Submissions will be judged by the &lt;strong&gt;TLA+ Specification Language Committee (SLC)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Jury will evaluate submissions based on their functionality, relevance to the TLA+ ecosystem, and the thoughtful use of AI. Submissions must be reproducible by the Jury. Passive formats, such as videos alone, are not sufficient. However, the Jury does not require a fully polished product—a prototype is sufficient. All submissions must be released under the &lt;a href="https://opensource.org/license/mit" rel="noopener noreferrer"&gt;MIT license&lt;/a&gt;, and any underlying AI models must be publicly available.&lt;/p&gt;

&lt;p&gt;The use of GenAI/LLMs is explicitly encouraged, provided that any AI-generated content—such as specs, invariants, visualizations, … —is checked using some form of verification such as the TLA+ tools.&lt;/p&gt;

&lt;p&gt;Catch the &lt;a href="https://youtu.be/oFfTuHuTnVw" rel="noopener noreferrer"&gt;live announcement&lt;/a&gt; at the &lt;a href="https://conf.tlapl.us/2025-etaps" rel="noopener noreferrer"&gt;TLA+ Community Event 2025&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Participation Criteria&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Eligible participants must meet the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Prior engagement with the TLA+ community (e.g., contribution to &lt;a href="https://groups.google.com/g/tlaplus" rel="noopener noreferrer"&gt;mailing lists&lt;/a&gt;, &lt;a href="https://www.reddit.com/r/tlaplus/" rel="noopener noreferrer"&gt;forums&lt;/a&gt;, &lt;a href="https://github.com/tlaplus/" rel="noopener noreferrer"&gt;open-source repositories&lt;/a&gt;, &lt;a href="https://conf.tlapl.us/" rel="noopener noreferrer"&gt;conference presentations&lt;/a&gt;, or &lt;a href="https://scholar.google.com/scholar?q=TLA%2B" rel="noopener noreferrer"&gt;academic publications&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;  Must not be a member of the TLA+ Foundation Board or Specification Language Committee&lt;/li&gt;
&lt;li&gt;  Must not be subject to any legal, contractual, export control, or jurisdictional restrictions that would preclude participation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Submission Timeline &amp;amp; Announcement&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Submissions will open alongside this announcement. The deadline to submit entries for the challenge is two months from the announcement date on 07/03/2025. Submissions must be sent to &lt;a href="//mailto:genai@tlapl.us"&gt;genai@tlapl.us&lt;/a&gt;. The jury will select the winner one month after the submission period closes. We welcome innovative, technically robust, and practically valuable contributions that explore and expand the potential of GenAI within the context of TLA+.&lt;/p&gt;

&lt;p&gt;For longer-term or foundational engineering and research efforts related to TLA+, we encourage you to explore the &lt;a href="https://foundation.tlapl.us/grants/2024-grant-program/index.html" rel="noopener noreferrer"&gt;TLA+ grant program&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tlaplus</category>
      <category>hackathon</category>
      <category>llm</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Distributed Snapshots: Chandy-Lamport protocol</title>
      <dc:creator>Federico Ponzi</dc:creator>
      <pubDate>Fri, 31 May 2024 17:54:49 +0000</pubDate>
      <link>https://dev.to/federico_ponzi/distributed-snapshots-chandy-lamport-protocol-32o7</link>
      <guid>https://dev.to/federico_ponzi/distributed-snapshots-chandy-lamport-protocol-32o7</guid>
      <description>&lt;p&gt;Some forms of distributed snapshots were around for a while already when Chandy-Lamport's distributed snapshots paper was first published in 1985. Lamport considers this protocol a straightforward application of the basic ideas from Lamport clocks. Other than reviewing the paper, in this post I'll also present some examples of real world implementations and a TLA+ specification of the protocol.&lt;br&gt;
What problem is it trying to solve?&lt;/p&gt;

&lt;p&gt;You need to record the global state of a program. Why? Because, for example, you have some complex computation ongoing, and you want to know which step has reached. Or you have a long-running computation, and you want to take a snapshot as a backup to allow restarting the computation again from the checkpoint rather than from the beginning in case any machine fails.&lt;/p&gt;

&lt;p&gt;For the state of the program, we refer to the local variables and in general to the history of states that the program went through.&lt;/p&gt;

&lt;p&gt;Why is taking snapshots hard? Well, first of all, the snapshotting algorithm should not interfere with the running computation.&lt;/p&gt;

&lt;p&gt;Secondly, if your program is a single process on a single machine, this is straightforward! You could create an api to say "record the snapshot in 5 seconds" or "every 2 hours". For a multi-thread/multiprocess program running on a single machine, you can create a similar api.&lt;/p&gt;

&lt;p&gt;In a distributed system, this api won't work because there is no global shared clock. You could end up with out-of-sync snapshots providing an inconsistent view of the system. Other than the state of the process itself, we could also have inflight messages that should be included in the snapshot. As an example of inconsistent snapshot, a process B could record that it received a message from A and A's snapshot does not include that the message was sent over to B.&lt;/p&gt;

&lt;p&gt;The paper has a good visual representation: imagining you wanted to take a picture of a sky filled with migrating birds. One photo is not enough, you will need to take multiple pictures and stitch them together in a way that provides a consistent view of the landscape. This is the challenge that this paper is trying to solve.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.fponzi.me/2024-05-30-distributed-snapshots.html"&gt;Continue reading...&lt;/a&gt;&lt;/p&gt;

</description>
      <category>distributedsystems</category>
      <category>formalmethods</category>
      <category>tla</category>
    </item>
    <item>
      <title>TLA+ is easy if you know how to abstract</title>
      <dc:creator>Federico Ponzi</dc:creator>
      <pubDate>Sun, 29 Oct 2023 11:19:21 +0000</pubDate>
      <link>https://dev.to/federico_ponzi/tla-is-easy-if-you-know-how-to-abstract-1hda</link>
      <guid>https://dev.to/federico_ponzi/tla-is-easy-if-you-know-how-to-abstract-1hda</guid>
      <description>&lt;p&gt;I've been wanting to learn TLA+ for a while now, and I finally had a chance to do it thanks to a seminar series held by Professor Murat Demirbas. In this article, I will talk about my experience with formal methods and TLA+, and I will also share some of the things I've learnt that I think will be very useful when writing your specifications.&lt;/p&gt;

&lt;p&gt;By the end of this article, I hope that you will:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Have a basic understanding of formal methods and model checking
Understand how TLA+ can improve algorithm and system design
Have some intuition on what it takes to write a spec in TLA+
Want to learn some TLA+.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;As always, let's start with the problem we're trying to solve.&lt;br&gt;
What problem do formal methods help solve?&lt;/p&gt;

&lt;p&gt;English is considered a very ambiguous language. When we build a complex system, we need an unambiguous specification (also known as "spec"). Formal methods use math to define a rigorous system model. After we have written the code for the model, we can then also use it to verify some properties. &lt;/p&gt;

&lt;p&gt;The benefits of formal methods are twofold:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Unambiguous specification of our systems and algorithms
Verification of properties for these models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;An example of a property that can be verified is that no execution can result in a deadlock. This would be very difficult to prove in a test, especially if it spans multiple systems.&lt;/p&gt;

&lt;p&gt;We can also verify that an algorithm is correct by writing some properties as invariants. An invariant is simply a predicate that should always hold true. Invariants are sometimes used in asserts.&lt;/p&gt;

&lt;p&gt;We can define correctness and liveness properties. For example, we could verify that eventually some property will hold, such as that our new sorting algorithm eventually sorts its input.&lt;/p&gt;

&lt;p&gt;Formal methods allow you to explore different designs and optimize performance while maintaining confidence that the system is doing the right thing. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.fponzi.me/2023-10-26-tla-plus-is-easy-if-you-know-how-to-abstract.html"&gt;Continue reading...&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tlaplus</category>
      <category>formalmethods</category>
      <category>abstraction</category>
    </item>
    <item>
      <title>Experiments with eBPF: Snitchrs</title>
      <dc:creator>Federico Ponzi</dc:creator>
      <pubDate>Sun, 16 Jul 2023 20:23:20 +0000</pubDate>
      <link>https://dev.to/federico_ponzi/experiments-with-ebpf-snitchrs-49gg</link>
      <guid>https://dev.to/federico_ponzi/experiments-with-ebpf-snitchrs-49gg</guid>
      <description>&lt;p&gt;In this post, I will share my experience on learning and playing with Extended Berkeley Packet Filter (eBPF). It's a very cool technology that not anyone might be aware of. It's been a while since I planned to learn some eBPF and this post has some good information for anyone who wants to get started. eBPF is a Linux kernel feature that allows to easily and safely interact with the kernel.&lt;/p&gt;

&lt;p&gt;In order to learn how to use eBPF, I decided to implement Snitchrs a simple program that shows on a map to which IPs your computer is connecting to. &lt;/p&gt;

&lt;p&gt;I will go through interesting snippets of code I had to write in order to implement this program. This article is not meant to be a tutorial but rather an explanation that will hopefully help you better understand useful things to know in order to write your own eBPF programs. I'll assume some basic knowledge of the TCP/IP stack and how the Linux kernel works. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.fponzi.me/2023-06-22-experiments-with-ebpf-snitchrs.html"&gt;Continue reading... &lt;/a&gt; but feel free to leave comments here! &lt;/p&gt;

</description>
      <category>ebpf</category>
      <category>linux</category>
      <category>rust</category>
      <category>kubernetes</category>
    </item>
  </channel>
</rss>
