30 Days Of Federated Learning Code

A challenge organized by OpenMined Community.

Timeline Log

Day 0

The project is being developed as part of the #30DaysOfFLCode challenge. Each checkpoint represents a milestone, with the first goal being to complete at least Checkpoint 1 during the challenge.

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 1

Inspired by Ionesio's tutorial, the initial coding task was to create a repository for the voting API for SyftBox. In its first version, the API simply sums the values stored in public/value.txt across all Datasites.

Installation Instructions:

  1. Ensure you have the SyftBox client installed.
  2. Clone the repository and place it in the apis folder in SyftBox.
  3. Create a public/value.txt file with a number inside it.

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 2

I enhanced the aggregation logic to specifically address the binary voting requirements of Checkpoint 1. Here’s what’s new:

Outcome:
These enhancements improve the accuracy of vote aggregation and ensure that only valid votes contribute to the election result. Participants with invalid or missing votes are now clearly identified, enhancing transparency and reliability.

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 3

To enhance privacy in our voting system, I’ve delved into (MPC). Here’s a simple analogy to illustrate its concept:

Imagine a group of employees wants to calculate the average salary without disclosing individual salaries. Each employee generates random numbers that sum to their salary and shares one number with each colleague. By summing the received numbers, each person gets a partial total. Summing all partial totals gives the overall sum, which, when divided by the number of employees, reveals the average salary—achieved without exposing individual salaries.

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 4

I focused on designing the flow of information to ensure privacy during the vote. While the implementation is still a work in progress, I’m getting closer to a robust privacy-preserving mechanism.

The repository’s README now includes instructions on:

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 5

Today, I want to take a moment to express my gratitude for the amazing OpenMined community, specially:

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 6

🚀 Day 6 of #30DaysOfFLCode!

Back-end is live! 🛠️ 🔒 Powered by Paillier encryption for vote privacy. 🔄 Supports creating elections, submitting votes, & secure aggregation.

🔗 Check now: https://lucaslopes.me/voting

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 7

🎉 Day 7 of #30DaysOfFLCode! 🎉

Today's update is a major milestone because the e-voting web app is live! 🌐

💡 Create polls, cast encrypted votes, & view results

🔗 Try now: https://lucaslopes.me/voting.

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 8

🔒 Day 8 of #30DaysOfFLCode! 🔒

SyftBox ensures privacy with _.syftperm—a configurable file managing read/write permissions for directories. APIs like my #eVoting API use this to secure data flows automatically.

Privacy made easy! 💪

🔗 Try the web app: https://lucaslopes.me/voting

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 9

Day 9 of #30DaysOfFLCode!

💡 SyftBox isn’t just privacy-preserving cloud storage—it runs computations! 🖥️ ⚡ APIs auto-update with a simple git pull, making deployments seamless.

Cloud computing reimagined. 🌐

🔗 Try the web app: https://lucaslopes.me/voting

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 10

Day 10 of #30DaysOfFLCode!

🚀 Updated the #VotingAPI README with its synchronous model:

No central servers, full privacy!

🔗 github.com/lucaslopes/voting

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 11

Built a Participatory Budgeting Web App:

🔗 Try the app: https://syftbox.openmined.org/datasites/lucaslopesf2@gmail.com/budgeting.html

Next? Integrating with Voting API on SyftBox for participatory decision-making! 🗳️

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 12

💡 Participatory budgeting transforms resource allocation into a collective process. With #SyftBox’s privacy-preserving, decentralized platform, it’s the perfect tool for empowering communities to align priorities. Tech for a fairer society. 🌍

🔗 Try the app: https://lucaslopes.me/voting

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 13

Unified Rated E-Voting & Participatory Budgeting into a Vue.js SPA!

🔧 Fixed:

🔗 Try the app: https://lucaslopes.me/voting

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 14

Built a multi-app SPA for preference aggregation using Vue.js!

Key features:

🔗 Try the app: https://lucaslopes.me/voting

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 15

Enhanced UI/UX + ready-to-use subapps!

🔗 Try the app: https://lucaslopes.me/voting

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 16

I presented my Voting App at the first OpenMined Show & Tell session!

Grateful to the OpenMined team and community for this opportunity. 🙌

🌟 Highlights:

🔗 Try the app: https://lucaslopes.me/voting

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 17

Solved a tricky Vue.js reactivity issue to show live election & vote counts in the app! 💡 Results So Far:

Grateful to the OpenMined Show & Tell for the traction! This is just the start—more votes, more improvements ahead. 🗳️

🔗 Try the app: https://lucaslopes.me/voting

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Day 18

Deleting an election in the Voting App is now easier than ever!

✨ How? Just delete the election’s JSON file from the elections folder, and the app automatically removes it from everywhere.

Simple, intuitive, and privacy-focused. Let’s keep building! 🚀

🔗 Try the app: https://lucaslopes.me/voting

Social Media Posts: LinkedIn | Twitter/X | BlueSky


Call to Action

Join me in exploring the intersection of Federated Learning, privacy-preserving computation, and decentralized decision-making. Follow my progress using the #30DaysOfFLCode hashtag. Your thoughts and contributions are welcome!

How to Contribute

  1. Check for open issues in the repository or create a new one.
  2. Reach out on OpenMined Slack (username: @lucas) to discuss ideas or ask questions.