# Sergio Giménez — full content > Passionate about networks :satellite:, music :guitar:, coding :desktop_computer:, travelling :airplane: and hiking :mountain: Plaintext dump of all pages and posts, generated for LLM/agent consumption. Canonical site: http://sergiogimenez.com/ ================================================================================ ## Uploading Maps to My Garmin Forerunner 965 on Linux URL: http://sergiogimenez.com/posts/2026/upload-maps-to-garmin-linux/ Date: 2026-02-14 Tags: garmin, linux, debian I recently got a Forerunner 965 and wanted to load some custom maps for an upcoming trip. Turns out, Garmin devices use MTP instead of standard USB mass storage, so the filesystem doesn't just show up in your file manager. Here's how I got it working on Debian 13. ## The Setup First, make sure you have the MTP tools installed: ```bash apt list --installed | grep -i mtp ``` You should see `mtp-tools`, `jmtpfs`, and `libmtp9`. If not, install them. ## Mounting the Device ```bash mkdir -p ~/garmin-mount jmtpfs ~/garmin-mount ``` If you get a "device is busy" error, it's probably already auto-mounted by GVFS. Check with `mount | grep mtp`. ## Copying the Map Navigate to the mount point and you'll see: ``` ~/garmin-mount/ └── Internal Storage/ ├── GARMIN/ ← Maps go here ├── Music/ └── ... ``` Copy your `.img` map file to the `GARMIN` folder: ```bash cp Spain_East_OFM.img ~/garmin-mount/Internal\ Storage/GARMIN/ ``` That's it. Unmount with: ```bash fusermount -u ~/garmin-mount ``` ## Quick Commands ```bash # Check if device is detected lsusb | grep -i Garmin # Mount jmtpfs ~/garmin-mount # Copy map cp your-map.img ~/garmin-mount/Internal\ Storage/GARMIN/ # Unmount fusermount -u ~/garmin-mount ``` The map should now show up in your watch under **Settings → Map → Map Manager**. ================================================================================ ## How to Install OpenWrt on the Cudy WR3000 (v1 Retail) URL: http://sergiogimenez.com/posts/2026/openwrt-cudy-w3000-v1/ Date: 2026-02-12 Tags: openwrt, cudy, wr3000, router # How to Install OpenWrt on the Cudy WR3000 (v1 Retail) The Cudy WR3000 is a fantastic budget router for OpenWrt (MediaTek Filogic 820 chipset). In fact I'm surprised how the people from Cudy makes so easy to install OpenWrt. They even provide the openwrt firmware from it website. Honestly, this is how hardware should be. So installing OpenWrt is pretty straightforward, but we need some considerations. --- ## ⚠️ Important Prerequisites ### 1. Check Your Hardware Version Flip your router over and check the **Serial Number (S/N)** on the sticker. * **Safe Zone:** If your S/N is **lower than** `2543...` (e.g., `2536...`), you have the standard v1 hardware. **This guide is for you.** * **Danger Zone:** If your S/N starts with `2543` or higher (manufactured Nov 2025+), you have the "New Flash" revision. *Do not use this guide; you need specific updated firmware to avoid bricking.* ### 2. Use Ethernet Do not attempt this over Wi-Fi. Connect your PC to a **LAN** port on the router. --- ## Phase 1: Preparation & Downloads You need two specific files. Do not mix them up. ### File A: The "Unlocker" (Intermediate Firmware) This is a Cudy-signed OpenWrt image that bridges the gap between stock software and official OpenWrt. 1. Go to the [Cudy OpenWrt Download Page](https://www.cudy.com/blogs/faq/openwrt-software-download) and open their **Google Drive link**. 2. Navigate to the folder: `OpenWrt Firmware` -> `WR3000+v1 without recovery TFTP`. * *Note: Ignore folders labeled WR3000E, WR3000P, WR3000S. These are for ISP/Enterprise models.* 3. Download the **Zip file** inside this folder. 4. **Extract the zip.** You will see a `.bin` file approximately **9.5MB** in size. * *Confusing Name Warning:* Cudy often names this file `...sysupgrade.bin` even though it is used as the factory installation image. If it came from the Cudy Drive folder mentioned above, **this is the correct file for Step 1.** ### File B: The "Real" OpenWrt (Official Stable) This is the clean, official release that you actually want to run. 1. Go to the [OpenWrt Firmware Selector](https://firmware-selector.openwrt.org/). 2. Search for **Cudy WR3000 v1**. 3. Select **Version 23.05.5** (or the latest **Stable** release). 4. Download the **Sysupgrade Image** (filename ends in `...sysupgrade.bin`). --- ## Phase 2: The Installation ### Step 1: Flash the "Unlocker" 1. Log into the default Cudy Web UI (usually `http://192.168.10.1`). 2. Go to **Advanced Settings** > **System** > **Firmware Upgrade**. 3. Upload **File A** (The 9.5MB extracted file from Cudy's Drive). 4. Wait for the install. The router will reboot. ### Step 2: Access the Temporary OpenWrt Once the router reboots, your PC IP address will change (likely to the `192.168.1.x` range). 1. Open your browser to `http://192.168.1.1`. 2. Login: * **User:** `root` * **Password:** (none/empty) 3. You are now in the "Intermediate" snapshot. **Do not stop here.** This version is often outdated, incomplete, or unstable. ### Step 3: Flash the Official Stable Version 1. In the OpenWrt interface (LuCI), go to **System** > **Backup / Flash Firmware**. 2. Scroll down to the section **"Flash new firmware image"**. 3. Click **"Flash image..."** and select **File B** (The official Sysupgrade file you downloaded from OpenWrt.org). 4. **CRITICAL:** Uncheck the box **"Keep settings and retain the current configuration"**. 5. Click **Flash**. The router will reboot again (approx 2-3 minutes). You now have a clean, official OpenWrt install! ================================================================================ ## OpenWrt on Xiaomi Mi Router 4C (Model R4CM) - 2024 Production Batch URL: http://sergiogimenez.com/posts/2025/openwrt-mi4c-2024-batch/ Date: 2025-12-18 Tags: openwrt, networking, xiaomi, router, mi4c, guide, homelab Recently we bought a few units for the 2025 project in AUCOOP. We did a short workshop for the new students and documented the entire process here for future reference. This is a summary of the workshop btw :)
View this post on Instagram

A post shared by AUCOOP 🌎 (@aucoop)

--- **Device:** Xiaomi Mi Router 4C (Model: R4CM) **Production Date:** 03/2024 **CPU:** MediaTek MT7628DA **RAM:** 64MB ## Get Root Access We first need to gain root access in the router with the xiaomi firmware. We use the [OpenWRTInvasion](https://github.com/acecilia/OpenWRTInvasion) tool. We used the Docker method to avoid Python dependency issues on the host machine. 1. Clone & Build: ```bash docker build -t openwrtinvasion https://github.com/acecilia/OpenWRTInvasion.git docker run --network host -it openwrtinvasion ``` 2. **Run Exploit:** ```bash docker run --network host -it openwrtinvasion ``` * **IP:** `192.168.31.1` (default Xiaomi router IP) * **Stok:** Log in to the router web interface, look at the URL `http://192.168.31.1/cgi-bin/luci/;stok=/...` (note that this might be detected automatically by the tool, so this step might not be necessary to be done manually) * **Password:** `root`. ## Make Backups! **Do not skip this.** 2024 units have unique calibration data. If you lose `mtd3`, your WiFi signal will be weak/dead. 1. **SSH into Router:** * *Note:* We must use legacy encryption flags because the stock SSH server is old. ```bash ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-rsa root@192.168.31.1 ``` 2. **Create Dumps (Run inside Router):** ```bash dd if=/dev/mtd0 of=/tmp/ALL_backup.bin dd if=/dev/mtd1 of=/tmp/Bootloader_backup.bin dd if=/dev/mtd3 of=/tmp/Factory_eeprom.bin ``` 3. **Download to PC (Run on PC):** ```bash # Run from your local terminal scp -O -o KexAlgorithms=+diffie-hellman-group1-sha1 -o HostKeyAlgorithms=+ssh-rsa root@192.168.31.1:/tmp/*_backup.bin . scp -O -o KexAlgorithms=+diffie-hellman-group1-sha1 -o HostKeyAlgorithms=+ssh-rsa root@192.168.31.1:/tmp/Factory_eeprom.bin . ``` ## Install OpenWrt We decided to use version 23.05.5 because the 4C has only 64MB RAM. Newer versions (24.x) are heavier. So just in case, we are using OpenWrt 23.05.5. This might be unnecessary, but I don't know, better safe than sorry. 1. **Download Firmware:** * Target: `ramips/mt76x8` * File: `openwrt-23.05.5-ramips-mt76x8-xiaomi_mi-router-4c-squashfs-sysupgrade.bin` Search for tt 2. **Upload to Router (Run on PC):** ```bash scp -O -o KexAlgorithms=+diffie-hellman-group1-sha1 -o HostKeyAlgorithms=+ssh-rsa openwrt-23.05.5-ramips-mt76x8-xiaomi_mi-router-4c-squashfs-sysupgrade.bin root@192.168.31.1:/tmp/firmware.bin ``` 3. **Flash (Run inside Router):** ```bash # Verify partition name is OS1 (usually mtd7) cat /proc/mtd # Write firmware mtd -r write /tmp/firmware.bin OS1 ``` ## Post-Install The router will reboot. The LED will start in orange color. If eventually changes to blue, that means OpenWrt is running. If after a few minutes it is still orange, that means the firmware flash failed. You have a bricked router now... Now you can access with your PC to OpenWrt at `http://192.168.1.1`. ## Next Step Since you have successfully flashed the device, you should now **store those backup files (`ALL_backup.bin`, `Factory_eeprom.bin`). If you ever mistakenly erase the router's calibration data in the future, those files are the *only* way to restore your WiFi signal strength. ================================================================================ ## Accessing Your Homelab: VPN vs Service Exposure Strategies URL: http://sergiogimenez.com/posts/2025/vpn-homelab/ Date: 2025-11-04 Tags: homelab, networking, vpn ## Introduction {{< lead >}} This guide explores two fundamental strategies for accessing your homelab services from outside your local network. Whether you're setting up a new homelab or optimizing an existing one, understanding when to use each approach is crucial for both security and functionality. {{< /lead >}} {{< alert "circle-info" >}} This is likely the first in a series of articles covering homelab remote access. Some friends have been asking questions about this setup, which is a great excuse to document everything properly. {{< /alert >}} ## Two Strategies for Remote Access It's important to differentiate between two distinct strategies for accessing your homelab services from the internet: ### 1. Service Exposure (Cloudflare Tunnels) Exposing a single service or application to the public internet. For example, I serve [https://hahatay.network](https://hahatay.network) directly from my homelab. **Use Case:** Public-facing services that need to be accessible to anyone on the internet. ### 2. VPN Access (Netmaker/WireGuard) More sensitive services like my Proxmox web interface are kept behind a VPN. This is much more secure and versatile. **Use Case:** Private services that only specific people or devices should access. ## When to Use Each Strategy ### Use Cloudflare Tunnels When - You want to expose a **single service** for multiple people or machines to access from the public internet. For example, making a website like [https://hahatay.network](https://hahatay.network) accessible to everyone, regardless of their location. - The service is designed for public consumption. - You need simple, managed SSL/TLS certificates. ### Use a VPN When - You want to access **multiple services** in your network from outside. - You need **secure, controlled access** limited to specific users. - You're accessing sensitive infrastructure (Proxmox, routers, management interfaces). - You want access to your whole network (access to VMs, LXC containers, devices, etc.). ## Requirements and Considerations ### For VPN Setup A VPN server requires a **publicly accessible IP address**. There are several options to achieve this: #### Deploy your own VPS I use a VPS with a public IP address. Affordable options include **Racknerd**, which offers very competitive pricing (no servers in Spain, but I have used them for years at an unbeatable price), and **IONOS**, another budget-friendly option with servers in Spain. {{< button href="https://my.racknerd.com/aff.php?aff=15175" target="_blank" >}} Use Affiliate Link to Create a VPS on Racknerd {{< /button >}} #### Request a public IP from your ISP Some internet service providers can assign you a static public IP, but this may involve additional monthly costs. #### VPN Provider Solutions Services like ProtonVPN might be an option (requires further investigation). I went for the VPS approach because I assume the "worst case" where my ISP uses CGNAT (Carrier-Grade NAT) and there is no way that I can access my home network directly. In fact, this is what we have in Senegal in [https://hahatay.network](https://hahatay.network). It's even impossible to talk with a technical person in the ISP. ### For Cloudflare Tunnels - You need a **domain managed by Cloudflare** - The easiest approach is to purchase directly from Cloudflare's domain registrar - Cloudflare Zero Trust account (free tier available) {{< button href="https://www.cloudflare.com/products/registrar/" target="_blank" >}} Get a Cloudflare Domain {{< /button >}} ## Exposing Services via Cloudflare Tunnels Cloudflare Tunnels are ideal for exposing a single service, such as: - Personal website or blog - Web application **Requirements:** - Domain registered with Cloudflare - Cloudflare Tunnel configured **Benefits:** - No need to open ports on your firewall - Free SSL/TLS certificates - DDoS protection - AI Crawler Protection - Simple setup and management ## Exposing Services via VPN A VPN solution allows you to expose multiple network elements securely: - Virtual Machines or LXC containers running on Proxmox - Network infrastructure (routers, access points) - IoT devices (smart plugs, sensors) - Any element within your network ### Setting Up the VPN Server For those with ISPs using CGNAT, you'll need a VPS: 1. **Choose a VPS Provider** - Racknerd and IONOS are economical options - Look for VPS with at least 1GB RAM and 1 CPU core - Ensure it has a public IPv4 address 2. **Deploy WireGuard VPN** - I recommend using Netmaker for easy WireGuard deployment - See guide: **Deploy a WireGuard VPN easily using Netmaker** ### Integration Options You have two main approaches for integrating VPN with your homelab: #### Option 1: Router-Level Integration - **Physical Router**: Install OpenWrt on a physical router - **Virtualized Router**: Run OpenWrt as a VM - See guide: **Integrating OpenWrt with Netmaker** #### Option 2: Expose Entire Proxmox - Direct integration with Proxmox hypervisor - See guide: **Exposing your entire Proxmox using a VPN** ## Architecture Overview ![VPN and Cloudflare Tunnel Architecture](./schema.png) ## Next Steps This article provides a high-level overview of the two strategies. In upcoming articles, I'll dive deeper into: 1. **Setting up Cloudflare Tunnels** - Step-by-step guide for exposing public services 2. **Deploying a WireGuard VPN with Netmaker** - Complete VPN server setup 3. **Integrating OpenWrt with Netmaker** - Router-level VPN integration 4. **Exposing Proxmox via VPN** - Secure access to your entire virtualization environment 5. **Security Best Practices** - Hardening your remote access setup ## Conclusion Choosing between Cloudflare Tunnels and VPN access depends on your specific use case: - **Cloudflare Tunnels** - Quick, easy, perfect for single public services, forget about managing security and certificates. - **VPN** - Comprehensive, secure, ideal for private infrastructure access, but you need to deal with DNS and certificates yourself. ================================================================================ ## Research Stay at Boston University Fall Semester 2025 URL: http://sergiogimenez.com/posts/2025/research-stay-at-bu/ Date: 2025-09-11 Tags: BU, Boston, 6G-RUPA My first week at Boston University is already complete, and I'm so happy to be here in Boston! Everyone has been incredibly kind, and the faculty and staff are all super approachable and welcoming. For the Fall 2025 semester, I'll be spending the next three months on a research stay at BU's MET College. I'm excited to be working with an amazing group: Professor John Day, Dean Lou Chitkushev, and Dr. Maryan Rizinski. Our project is focused on the future of mobile networks. We'll be working to show that today's network architecture might not be the right fit for the demands of 6G, especially in terms of scalability and mobility. Our goal is to prove that a new, more efficient protocol architecture that we're calling **6G-RUPA** can help future 6G networks scale effectively. What makes this experience so special is that 6G-RUPA is based on the **Recursive InterNetwork Architecture (RINA)**, which was developed by Professor John Day. It feels like a gift to be able to share and develop ideas with him and the rest of the team on a daily basis. This work will be a major part of my PhD thesis, and I already know it's going to be an incredible experience, both for my career and for me personally. I'm looking forward to everything that's ahead! ================================================================================ ## You Don't Need an Instagram Van to Enjoy the Freedom of Van Life URL: http://sergiogimenez.com/posts/2025/camper-history/ Date: 2025-08-27 Tags: camper We've all been there. You open Instagram or YouTube and get bombarded with those perfect camper vans: wooden finishes, warm lighting, designer kitchens, and views of Norwegian fjords. And you think: "I wish I could, but that's not for me." Well, no, you don't need an Instagram van to enjoy the freedom of van life. My camper story didn't start with a big budget or carpentry skills, but with an ordinary van (we call it "la furgo de los melones" which literally translates to "the melon van" because that's typically what gipsy uses to sell fruit in the rural Spain), which I luckily inherited from a family business, an air mattress, and lots of appetite for adventure. And over the years, it has become our perfect accomplice for getaways. ## 2021: The Chaos of the Beginning My first solo trip was, honestly, a complete logistical disaster. The "camperization" consisted of an air mattress thrown in the back. There were no furniture, no organization, and to top it off, I forgot to remove the rear seats! The space was minimal and the chaos, maximum. ![Air mattress in the back of the van with the original seats still in place](img/un_colchon_furgo.png) *That's how it all started: a mattress, the stock seats, and a lot of mess.* It was Easter week in the Pyrenees and it was too cold to be outside. I decided to cook inside, on an improvised little table, without even having a proper stove. The menu: pasta that, spoiler alert, was a nightmare to clean up afterwards. {{< two-figures-single-caption "img/desorden_y_cena_dentro.png" "img/cocinando_en_campinggas.png" >}} The culinary chaos of the early days. At least the dish was good... {{< /two-figures-single-caption >}} But the next morning, all that chaos was forgotten. You wake up, open the door and find yourself with this... and then, all troubles fade away. ![Breakfast with views of the Pyrenees mountains](img/desayuno_pirineo.png) *The reward: wake-ups that are priceless.* ## 2022: Learning Together on the Road ### Our First Getaway In 2022, I encouraged Julia to take a van trip together. Our first experience together was a getaway to Pitarque, Teruel. For her, who had never imagined enjoying the *hippie* van life, it was quite a trial by fire. We slept on an air mattress with sleeping bags. Thank goodness I brought my 0-degree sleeping bag, because Julia gets very cold and, although it was summer, the nights in Teruel get quite cool. We cooked with the basics we brought from home. ![Julia getting up in the morning in Pitarque](img/julia_pitarque_levantada.png "Julia's first night in the van") {{< two-figures-single-caption "img/julia_cocinando_gulas_pitarque.png" "img/julia_feliz_desayunando.png" >}} Julia happy having breakfast, and cooking some gulas for dinner {{< /two-figures-single-caption >}} ### Our First Long Trip Together That summer we embarked on our first big trip together: a route through Navarra, Euskadi, Cantabria and Asturias. We still didn't have a bed frame, so we improvised a base with some Decathlon hammocks. {{< two-figures-single-caption "img/julia_dormida_baztan_i.png" "img/julia_dormida_baztan_ii.png" >}} Julia sleeping in the van on the first night of the trip, in the Baztán valley. {{< /two-figures-single-caption >}} Without electricity and with very little organization, we needed to plan a bit more, so we alternated van nights with some reserved hotel stays. And that's how we learned, seeing what works and what doesn't, what we were missing. But here we realized that even though we were quite rough around the edges, we could travel wherever we wanted. ![Cooking dinner](img/julia_cocinando_en_los_picos_de_europa.png "Julia cooking in the Picos de Europa") Despite not being a 100% camper trip, it was the turning point. Julia discovered that going *hippie* was something she loved, and since then, every summer we look for time to escape with our melon van. ## 2023: Trip to Almería For the trip to Almería in 2023, we decided no more hotels, that alternating with camping to charge batteries and take a shower would be enough. So it was time to improve the equipment: * **A proper bed frame:** Goodbye to sleeping on hammocks * **A battery and a fridge:** Being able to have cold drinks and proper food without always having to resort to ice and everything being soaked is a good upgrade. ![Bed with new bed frame mounted in the van](img/nuevo_colchon_furgo.png "A real bed!") Of course, not everything is perfect on the first try. At home you do your calculations, but reality always teaches you something new. Traveling in summer means the fridge has to work harder, and I soon realized that the battery I had chosen wasn't enough to give us two days of autonomy without going through a campsite. But that's what it's all about, learning on the go. But as always, in the end you can always manage. Here's a photo of a good meal: ![Good meal in the van](img/comida_albacete.png "Pasta at a picnic area by a river somewhere in Albacete") That year we also inaugurated the "beach vermouth kit", an essential that has accompanied us ever since. {{< two-figures-single-caption "img/moncofar_kit_vermutero.png" "img/moncofar_kit_vermutero_ii.png" >}} The vermouth kit is quite simple but we use it a lot. The photo is in Moncófar, but the essence is the same. {{< /two-figures-single-caption >}} ## 2024 - 2025: This is Comfort Although we haven't taken a long trip in 2024, the getaways have been much more comfortable. The van has reached its best version to date. Now we have: * A comfortable bed frame and mattress. * Two batteries that give us autonomy for a couple of days. * A fan to combat the heat. * Good interior lighting. * More or less good organization... ![Van ready for Pobo](img/furgo_pobo_2025.png "Van ready to go to Poborina") And yet, it's far from what you see in YouTube videos and Instagram photos... But for us it's a total luxury and we're super comfortable in our melon van :D. ## The Conclusion is Simple We've gone from an air mattress to having a mini house with just enough to live comfortably. Without homologations, without any construction work, and learning with each trip. So if you're dreaming of van life but are held back by not having the perfect van, forget about that. Start with what you have. A mattress, a couple of boxes, and try to see if you like it. What matters is not how your van looks, but the places it takes you and the experiences you live in it. ================================================================================ ## The CCD 2024 project officially closes URL: http://sergiogimenez.com/posts/2025/ccd-project-officialy-closes/ Date: 2025-07-06 Tags: senegal, ccd, aucoop, hahatay ## The collaboration project with UPC's CCD comes to an end After months of work, the **2024-A027** project from the Centre de Cooperació per al Desenvolupament (CCD) of the Universitat Politècnica de Catalunya has officially concluded. This project, titled "Deployment of infrastructure for a radio and community network in Gandiol, Senegal", has represented a significant advancement in the technological infrastructure for the Hahatay network. The project's main objective has been to improve Hahatay's IT and network infrastructure, building upon the work carried out over the previous three years. During this latest iteration of the project, several important milestones have been achieved: **Network infrastructure strengthening:** - Implementation of a monitoring, automation and remote management system using **OpenWisp** and **Zabbix** - Establishment of a new, more robust and stable VPN system for remote access - Simplification of network maintenance without requiring high technical knowledge **Coverage expansion:** - Improvement of WiFi coverage in key points of the association (Aminata, Nité, Radio) - Extension of intranet and VPN services to Hahatay spaces in Saint Louis (Ndar Weesul and Jang Kom) - Adaptation to new constructions and spaces that have emerged in the association **Equipment and resources:** - Supply of equipment such as computers, screens and keyboards through **Labdoo** and other private entities - Provision of material for volunteers and association workers **Construction of an antenna for the Gem Sunu Bopp community radio:** - With part of the CCD budget, an 11-meter antenna is being built for the Gem Sunu Bopp community radio, which is expected to be operational in the coming months. ### The participating team The project has involved the participation of five UPC students: - **Joan Torres** - **Aitor Da Rocha** - **Sergio Giménez** - **Jaume Motje** - **Roger González** All participants' evaluations agree in highlighting the experience as tremendously enriching both academically and personally and culturally, emphasizing Hahatay's hospitality and the transformative impact of cultural exchange. ### Continuity perspectives Although no new project has been submitted for the current call, the team maintains daily contact with Hahatay, monitoring the network and solving problems remotely from Barcelona thanks to the deployed tools. The main idea is to continue with this telematic support until the next call, evaluating the network's behavior and new technologies that can substantially improve the quality of service. ### Acknowledgments We want to express our deepest gratitude to the **Centre de Cooperació per al Desenvolupament de la UPC** for making this project possible with a grant of **€3,337.50**, and of course to the entire team of students who have dedicated their time and knowledge to this noble cause. This project represents a perfect example of how technological cooperation can generate real impact in communities, while greatly enriching those who participate in it. ### More information To learn more details about the project, including complete participant evaluations and additional technical information, you can consult the official project page at the CCD: [2024-A027 - Deployment of infrastructure for a radio and community network in Gandiol, Senegal](https://ccd.upc.edu/ca/projectes/projectes-llistat/2024-a027-1) --- *The project was developed between September 1, 2024 and February 14, 2025 in Gandiol, Saint-Louis, Senegal.* ================================================================================ ## Deploying a KinD Cluster with External Access URL: http://sergiogimenez.com/posts/2025/deploy-kind-cluster-with-external-access/ Date: 2025-07-03 Tags: kind, kubernetes Recently, I needed to deploy a KinD (Kubernetes in Docker) cluster that would be accessible remotely. I had done this before, but never documented the process—so here’s a simple, step-by-step guide for future reference. {{< alert "circle-info" >}} I’m running [clabernetes](https://containerlab.dev/manual/clabernetes/quickstart/), but that’s completely irrelevant for this guide. {{< /alert >}} ## 1. Create a KinD Cluster Config First install docker, follow the [official docs](https://docs.docker.com/engine/install/ubuntu/) Next, install kind following the [official docs](https://kind.sigs.k8s.io/docs/user/quick-start/) For linux, it's just ```bash [ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.29.0/kind-linux-amd64 chmod +x ./kind sudo mv ./kind /usr/local/bin/kind ``` Then, create a configuration file for your KinD cluster. This file will define the cluster's networking settings and node roles. Save the following content as `kind-config.yaml`: ```yaml kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 networking: apiServerAddress: "0.0.0.0" nodes: - role: control-plane kubeadmConfigPatches: - | kind: ClusterConfiguration apiServer: certSANs: - "172.27.13.254" # <-- REPLACE with your host IP - "localhost" - "127.0.0.1" extraPortMappings: - containerPort: 6443 hostPort: 6443 listenAddress: "0.0.0.0" protocol: TCP - role: worker - role: worker containerdConfigPatches: - |- [plugins."io.containerd.grpc.v1.cri".containerd] discard_unpacked_layers = false ``` ## 2. Create the Cluster Run: ```bash kind create cluster --name c9s --config kind-config.yaml ``` Once the cluster is up, run `docker ps` on your host. You should see the `c9s-control-plane` container, and its `PORTS` section should include `0.0.0.0:6443->6443/tcp`. You might also see a `127.0.0.1:RANDOM_PORT->6443/tcp`—this is KinD’s default internal mapping, which you can ignore. ## 3. Export the Kubeconfig ```bash kind get kubeconfig --name c9s > c9s-external-kubeconfig.yaml ``` Now, **edit `c9s-external-kubeconfig.yaml`**. Find the `server:` line (it will likely point to `https://0.0.0.0:6443`). Change it to use **your host IP** and port **6443**. ## 4. Test Your Setup To quickly test: ```bash cp c9s-external-kubeconfig.yaml ~/.kube/config kubectl get nodes ``` You should see output similar to: ``` NAME STATUS ROLES AGE VERSION c9s-control-plane Ready control-plane 6m3s v1.33.1 c9s-worker Ready 5m48s v1.33.1 c9s-worker2 Ready 5m48s v1.33.1 ``` That’s it! You now have a KinD cluster accessible from outside your host. ================================================================================ ## Hahatay Network Showcased at Giga Barcelona's GTEP Science Fair URL: http://sergiogimenez.com/posts/2025/giga-barcelona/ Date: 2025-06-11 Tags: GIGA, GTEP, AUCOOP, Community Network {{< alert "link" >}} This article is based on and translated from content originally published by the Internet Society Catalan Chapter at [isoc.cat/accions/2025/06/11/giga2025/](https://www.isoc.cat/accions/2025/06/11/giga2025/) {{< /alert >}} The Hahatay Community Network project was highlighted at the "Science Fair | Government Tech Exchange Program (GTEP)" held on June 11, 2025, at the [Giga Barcelona Technology Center](https://giga.global/) (Ca l'Alier). This international event provided an excellent platform to share our experience connecting underserved communities in Senegal through sustainable, community-driven networking solutions. ![aucoop.jpeg](images/aucoop.jpeg "AUCOOP team before the presentation starts") The Government Technology Exchange Program (GTEP), a joint initiative between UNICEF and the International Telecommunication Union (ITU), invited our team to share insights from projects like the Hahatay Network, which has been instrumental in providing internet access to the rural region of Gandiol, Senegal. The June 2025 GTEP cohort included approximately 30 participants from **Mozambique, Namibia, South Africa, and Tanzania**, representing Ministries of Education, Ministries of ICT/Digitalization, and national ICT regulatory bodies. ### Sharing Knowledge and Experiences At the Science Fair, our presentation showcased how community networks can be effectively implemented in rural contexts through: - Collaborative approaches involving local communities - Implementation of network monitoring tools like Zabbix - Centralized network management with OpenWISP - Integration of educational resources through partnerships with initiatives like Labdoo - Volunteers who participated in our Beyond-the-Net funded projects shared firsthand experiences from deployment trips to Senegal, highlighting both technical solutions and community engagement strategies that have made the Hahatay Network successful. {{< two-figures-single-caption "images/speakin_i.jpeg" "images/speaking_ii.jpeg" >}} Presenting the Community Network model to Tanzanian officials {{< /two-figures-single-caption >}} ### Impact Beyond Technology The presentation emphasized that the Hahatay Network is more than just technical infrastructure—it's a catalyst for social development, enabling: - Educational opportunities through connected classrooms - Digital skills development for local youth - Enhanced communication capabilities for the Hahatay association - Support for local entrepreneurship initiatives Support for local entrepreneurship initiatives This international visibility furthers our commitment to documenting and sharing our methodologies, inspiring similar community network projects in other underserved regions worldwide. ================================================================================ ## Visit to the Polytechnic Institute. Labdoo: From Barcelona Classrooms to the Community Network in Gandiol URL: http://sergiogimenez.com/posts/2025/labdoo-visita-politecnic/ Date: 2025-06-11 Tags: Labdoo, AUCOOP Recently, we had the opportunity to visit the [Barcelona Polytechnic Institute](https://politecnics.barcelona/es/) to share with vocational training students our experience with the community network project in Gandiol, Senegal. It was a highly enriching day where we could demonstrate firsthand how their work has a real impact on communities thousands of kilometers away. During our presentation, we explained in detail the structure of our community network: how it works technically, what services it offers to the local population, and what challenges we face in its implementation. ## The Fundamental Role of Labdoo A central aspect of our talk was highlighting the essential role that Labdoo plays in this entire process. This organization acts as a bridge between laptop donors and recipients like Hahatay, coordinating a network of volunteers who are dedicated to refurbishing and preparing these devices so they can have a second life in educational projects. In the specific case of the Polytechnic Institute, we discovered something particularly special: it's the students themselves who, as part of their training program, recondition these computers that later reach our project in Gandiol. This direct experience not only allows them to apply technical knowledge but also to participate in a project with real social impact. ![Jaume talk](images/jaume_charla.jpg "Jaume during the talk") ## A Virtuous Circle of Learning What makes this collaboration so valuable is the learning circle it generates: the institute's students improve their technical skills while preparing devices that, in turn, will help young people and adults in Gandiol to train through Hahatay's educational programs. It's a chain of solidarity where knowledge flows and multiplies. From our team's perspective, we considered it essential that these students could see the final destination of their work. We wanted them to know that those laptops that pass through their hands aren't lost in anonymity, but have names, faces, and stories behind them. Each recovered device means a training opportunity for someone in Gandiol. This visit has also been an excellent way to close this stage of the project, personally thanking those who make it possible for our community network to continue growing. The exchange of experiences, questions, and reflections allowed us to further appreciate this chain of collaboration that connects Barcelona with Gandiol. This type of encounter reinforces our conviction that technology, when shared and used with purpose, can be a powerful tool for social transformation. ![The team and the classroom](images/equipo_y_alumnos.jpg "The AUCOOP team, Paz, and the rest of the students") ================================================================================ ## Hahatay Streamlines Laptop Inventory with eReuse Software URL: http://sergiogimenez.com/posts/2025/ereuse-hahatay/ Date: 2025-03-21 Tags: eReuse, inventory, laptops, Labdoo Hahatay is adopting the [eReuse software suite](https://ereuse.org/en/), specifically Devicehub and Workbench, to enhance its inventory management. This marks a significant step forward in efficiently tracking and managing the numerous refurbished laptops received through the Labdoo initiative. Currently in its beta testing phase (as detailed [here](https://ereuse.org/en/2025/02/12/working-new-devicehub/)), the eReuse software is already providing valuable insights to the organization, while we also provide feedback to the developers for further software enhancements. Key benefits experienced by Hahatay include: * **Devicehub for Inventory Tasks:** Thanks to [the support of the Labdoo initiative](https://platform.labdoo.org/edoovillage?e=108374), Hahatay has received a significant number of laptops. Managing this influx has been challenging, but Devicehub provides a centralized system to accurately track the hardware of every laptop in our inventory. * **Devicehub for assignment and availability:** Devicehub also facilitates the tracking of laptop assignments to workers and volunteers, as well as the availability of devices. This ensures efficient distribution and eliminates confusion regarding device allocation. * **Workbench for Diagnostics:** The Workbench component enables the easy reading of technical specifications for each laptop and allows for thorough diagnostics to confirm proper functionality. This significantly streamlines the process of preparing laptops for deployment. !["Devicehub in use in the Hahatay infrastructure"](images/devicehub_screenshot.png "Devicehub in use in the Hahatay infrastructure") Even in its beta phase, the eReuse software is demonstrating its potential to substantially improve Hahatay's inventory management processes. This increased efficiency allows the team to focus more on our core mission and ensures the effective utilization of received laptops. Hahatay is proud to be part of the eReuse community and contribute to the development of this powerful open-source tool. The source code for devicehub and workbench is available on the [eReuse GitHub repository](https://github.com/eReuse) Stay tuned for more updates as Hahatay continues to integrate and utilize the eReuse software. ================================================================================ ## Hahatay Inaugurates New Labdoo Classroom URL: http://sergiogimenez.com/posts/2025/gandiol-labdoo-classroom/ Date: 2025-02-10 Tags: laptops, Labdoo, Tabax Nite We are thrilled to announce the completion and inauguration of a new classroom in Tabax Nite, which is a project located within Hahatay. This project, which we have been diligently working on, is now ready to serve the community of Gandiol! {{< two-figures-single-caption "images/aucoop-team.jpeg" "images/laptops.jpeg" >}} At the left, the AUCOOP team in Tabax Nite. At the right, the refurbished laptops provided by the [the support of the Labdoo initiative](https://platform.labdoo.org/edoovillage?e=108374). {{< /two-figures-single-caption >}} The classroom is equipped with refurbished laptops provided by the [Labdoo initiative](https://platform.labdoo.org/edoovillage?e=108374). These laptops will significantly enhance the learning experience of the students in Tabax Nite by providing access to a wealth of educational resources. The classroom will cater to students of all ages participating in the educational programs offered by Hahatay, such as the **Hahatay academie** linked programs such as the European funded project: "**DOUNDEL: Revitaliser la Culture Locale et la Communication Digitale pour un Développement Durable, l’autonomisation et la Formation des Jeunes et Femmes de Gandiol et Saint-Louis"**. {{< two-figures-single-caption "images/sergio-hablando-inauguracion.jpeg" "images/sergio-happy.jpeg" >}} At the left, Sergio speaking at the inauguration. At the right, a happy Sergio celebrating the completion of the classroom. {{< /two-figures-single-caption >}} This classroom is a testament to the dedication and hard work of all the volunteers involved in this project over the past years. It is equipped with WiFi, utilizing the bandwidth from the community network in Tabax Nite. This marks a significant step forward in the digitalization of the village, and we are incredibly proud of this achievement. Stay tuned for more updates as we continue to support and develop educational initiatives in Tabax Nite. ================================================================================ ## Day 21: Ba benen Yoon URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day21/ Date: 2025-02-08 Tags: senegal travel blog Today marked our final day in Gandiol, filled with goodbyes. We woke up without rushing and enjoyed a peaceful breakfast. As you may already know from previous posts, this is the best part of the day: coffee, Touba coffee, sandwiches with oil and spicy salt, and for those with a sweet tooth, chocopain. But, as always, the best part was the company and the conversation. Lorenzo came specifically to spend the morning with us and say goodbye. We spent the time packing, organizing everything, and preparing for the farewell, which was bittersweet. We felt satisfied with the work we had done: we met our goals, strengthened the network, and improved its resilience and stability—something that was much needed. But, as always, goodbyes are hard because this project has created strong emotional bonds over the years. Unfortunately, we couldn't have lunch with everyone today since there was an event at Hahatay about TODO. Instead, Salif prepared us some sandwiches with boiled eggs and *petit pois*, made by his aunt. Some of us enjoyed them before getting into the taxi, while others, caught up in the rush of saying goodbye and packing, missed out on them. :( In the afternoon, Bachir, the same taxi driver who brought us here, picked us up to take us to Saint Louis. Along the way, we made a brief stop in Louga to train the carrier pigeons that Salif had left us. In a few hours, they should find their way back to Saint Louis on their own. ![The whole team in the taxi](images/taxi_vuelta.jpg "Taxi back to Dakar") At the airport, the group split up. Aitor, Joan, and Sergio returned to Barcelona with their suitcases full of memories, souvenirs, football jerseys, friperie clothes, and hearts full of emotions. Meanwhile, Jaume and Roger will stay for another week to go on a cycling trip through Casamance. Maybe there will be a bonus track on the blog—who knows? With this, we say goodbye, hoping that this blog has managed to convey a little of what we feel and do when we are in this wonderful place. Ba benen Yoon! ![All the Hahatay-AUCOOP team](images/todos_hahatay.jpg "Ba benen Yoon!") ================================================================================ ## Day 20: Relax, Guen'dar and a new Rack URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day20/ Date: 2025-02-07 Tags: senegal travel blog Today, the whole team struggled to wake up since dinner went on a bit late, so the morning was a bit more relaxed. Sergio headed to Saint Louis to visit an old project he collaborated on in 2020 at the Mame Fatime Konté center. He also took the opportunity to buy some souvenirs for his loved ones. Meanwhile, Jaume helped Pablo with the well and the pump. Aitor spent the morning studying for an exam he has right after returning, and Joan caught up on a couple of classes he missed this semester. Later, they joined Pablo to properly document the salinity problem in the well so they could present it to an expert who might suggest possible solutions. In the afternoon, Aitor and Joan went to see the fishermen in Gen’dar, on the Saint Louis peninsula. Witnessing the arrival of the fishermen in their enormous cayucos after a long day of work was quite an impact. Then, they took a walk around the island before meeting up with the rest of the team at Tabax Nite. ![Guendar](images/guendar.jpg "Gendar is the neighborhood where fishermen work in Saint Louis") ![Car with an open trunk, packed with sacks](images/coche_petado.jpg "Sometimes, cars in Senegal seem to defy the laws of gravity") Meanwhile, Jaume, Roger, and Sergio stayed in Tabax Nite, finishing the last details before leaving Gandiol. First, Jaume and Roger drilled a hole in the Fess wall using a drill, metal rods, and a hammer to pass through the Ethernet cable coming from the woman’s house. Later, Sergio arrived with an old empty computer case, which would serve as an improvised "rack." ![Jaume happy after drilling a hole for the cable](images/jaume_boquete.JPG "Jaume happy after drilling a hole for the cable") Until now, the "data center" had been quite exposed and unprotected from external factors like dust. Additionally, this year’s rainy season was particularly strong, causing part of the roof to collapse. To prevent the main network components from being damaged, we decided to repurpose the old computer case, dismantle it, and use it as a "rack" to protect the equipment. We also added a fan to ensure proper cooling. The final result left us very satisfied. {{< two-figures-single-caption "images/montando_nuevo_rack.JPG" "images/montando_nuevo_rack-ii.JPG" >}} Sergio and Roger assembling all the network elements in the new 'rack' {{< /two-figures-single-caption >}} {{< two-figures-single-caption "images/rack-final-i.JPG" "images/rack-final-ii.JPG" >}} Y así quedó al final :) {{< /two-figures-single-caption >}} ================================================================================ ## Day 19: Inauguration of the Computer Room, *Guañi Guañi*, and Last Dinner at La Source URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day19/ Date: 2025-02-06 Tags: senegal travel blog We woke up more calmly today, knowing that everything was going smoothly. We had a relaxed breakfast and got to work. Roger spent the morning finalizing details in OpenWISP, focusing on analyzing network traffic graphs—both within Gandiol's internal network, the mesh, and the internet—as well as reviewing the number of WiFi users connected throughout Gandiol. Jaume, meanwhile, was troubleshooting some issues in Zabbix, identifying failures in certain switches. At the same time, Joan joined Lorenzo to go to Tabax Nité, where they worked on the final preparations for the inauguration of the computer room. {{< two-figures-single-caption "images/salle_info_i.JPG" "images/salle_info_ii.JPG" >}} Computer room at *Tabax Nité* ready for the inauguration {{< /two-figures-single-caption >}} {{< two-figures-single-caption "images/salle_info_iii.JPG" "images/salle_info_vi.JPG" >}} The entire team and the organizations we represent: AUCOOP, CCD UPC, and Labdoo {{< /two-figures-single-caption >}} Around midday, we all gathered to attend the inauguration of the computer room. During the event, all the key players who have contributed or will contribute to the development of the project gave brief speeches. Among them were AUCOOP, Hahatay, the director of the Tassinere High School (a local public institution), Amidou (a Senegalese journalist), Estrella (a professor at Kings College), KCD, and the Diputación Foral de Gipuzkoa, which provided financial support for the project. Sergio gave a short presentation on the work AUCOOP has done on the network over the years. Mamadou, as the master of ceremonies, led the event and introduced the different speakers. ![Sergio explaining the project](images/salle_info_iv.JPG "Sergio briefly explaining the project") In the afternoon, Jaume, Roger, and Aitor went to Saint Louis in search of hidden treasures in the friperie shops. This time, they had the help of Salif, an expert in the field. The trip was a success—they managed to get several items at very competitive prices thanks to the magic words "guañi guañi" (which means "lower, lower" in Wolof). However, Jaume was a little disappointed, as he had expected even more from the experience. ![Salif showing off the finds at the fukijai](images/salif_fukijai.JPG "Salif showing off the finds at the fukijai") Later, they took a taxi to La Source, where the rest of the team was waiting for them to share one last dinner together. The food (Phaco!) was delicious, and the conversation was even better. The night ended at Pablo’s house, where, accompanied by his drum and Sergio’s guitar, we sang some classics. Definitely a great way to close the day. ================================================================================ ## Day 18: Final OpenWISP Tests, Antenna Configuration, and Football Match in Sunukeur URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day18/ Date: 2025-02-05 Tags: senegal travel blog We woke up knowing it was going to be another intense day full of work and network improvements. ### Aitor & Sergio: Final OpenWISP Tests Aitor and Sergio headed to Fess to run several tests and ensure everything was working correctly. They simulated an OpenWISP failure to check if the routers would lose their configuration, but everything remained stable, proving the reliability of the system. Then, they tested the long-awaited **password change feature**, and it was a total success. They simply modified the global variable `password_wifi` in OpenWISP, and within minutes, all WiFi access points in different Gandiol locations had updated their passwords automatically. With this, one of the main objectives of the OpenWISP project was officially completed. They also tweaked the templates to update the DNS settings, which Sergio had recently changed. What would have previously been a tedious and manual task—logging into each router individually—was now done in a matter of minutes. ### Joan & Pablo: Configuring New Antennas Joan and Pablo worked on configuring new antennas to improve the Sunukeur-Aminata connection, which had been unreliable. They prepared everything so that, if needed, replacing the old link would be as simple as installing and aligning the antennas. After that, Joan added all the routers from the previous day to Zabbix and assigned them fixed IPs. ![Network tests on Zabbix](images/foto_prueba.jpg "Testing the network on Zabbix") ### Jaume & Roger: Fixing Weesul & JangKom Networks Jaume and Roger returned to Weesul to fix the issues from the day before. Initially, they tried to recreate the network using OpenWISP hosted in JangKom, but the VPN wasn’t working. In the end, they **rebuilt the entire mesh network from scratch**, adding a couple of extra nodes to improve coverage. The effort paid off, and everything was running smoothly. ![Jaume setting up a router](images/foto_jaume_router.jpg "Jaume configuring a router at Weesul") At lunchtime, they went to a bar with a terrace overlooking the **Senegal River and Saint-Louis**, where they enjoyed a delicious **spicy chicken and cheese taco**. ![Roger walking in Saint-Louis](images/foto_roger_caminant.jpg "Roger walking through Saint-Louis") After that, they headed to JangKom to add all the routers to OpenWISP and configure them using its templates. While working, they were offered a **hot yogurt with noodles and lots of sugar**, which turned out to be surprisingly good. Maybe that energy boost helped them finish their work quickly and efficiently. As a farewell from the center, they were also offered **Attaya**, this time with a hint of mint. To get back to the taxi stop, they took **bus number 8**, a very curious and cheap local bus—the ride only cost **100 CFAS**. Interestingly, the bus cashier was locked inside a small cage. ![OpenWISP configuration](images/foto-openwisp.png "Configuring OpenWISP") ![Zabbix configuration](images/foto-zabbix.jpg "Configuring Zabbix") ![Local bus in Saint-Louis](images/foto_bus.jpg "The curious number 8 bus") ### Afternoon: Football Match in Sunukeur In the afternoon, Jaume went to play a football match with the locals. He expected a **casual friendly game**, but instead found himself in a **serious tournament match** where Hahatay was fighting for a spot in the local league semifinals. The game had an official **referee and two linesmen** to call offsides! Jaume was subbed in during the second half, and as soon as he stepped onto the field, he slipped and fell. After that embarrassing moment, he recovered well and even assisted Salif for an amazing goal—**but it was ruled offside** (a clear mistake by the referee, **worse than the ones Real Madrid pays for!**). Despite this, **Hahatay won by two goals** and advanced to the semifinals! ### Joan, Pablo & Roger: More Antenna Testing Meanwhile, Joan and Pablo tested the **compatibility between new and old antennas** to avoid having to replace both in case of failure. They climbed **Mamadou’s rooftop**, aligned a new antenna with an old one, and tried to link them. Unfortunately, they discovered they were **not compatible** due to different radio protocols, despite being from the same brand. When Roger arrived from Saint-Louis and saw them on the roof, he immediately **climbed up to help**. ![Working on the rooftop](images/foto_tejado_t.jpg "Joan, Pablo, and Roger on Mamadou’s rooftop") ### Sunset at Zebra Bar & Special Dinner To end the day, we decided to go to **Zebra Bar** to watch the sunset. When we returned, a delicious **Ndiebe** was waiting for us—one of the team's favorite meals! ![Sunset at Zebra Bar](images/foto_puesta_sol.jpg "Sunset at Zebra Bar") ![Ndiebe dinner](images/foto_ndiebe.jpg "Ndiebe dinner, a team favorite") It was a day of great progress and unforgettable experiences. **More adventures await tomorrow!** ================================================================================ ## Day 17: Network Improvements in Saint-Louis and Final OpenWISP Setup URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day17/ Date: 2025-02-04 Tags: senegal travel blog Tuesday started with a long list of tasks, as we wanted to finish everything we had pending before leaving. After breakfast, we divided into groups and got to work. ![Breakfast to start the day](images/desayuno.JPG "Breakfast to start the day") ### Jaume and Joan: Router Update in Saint-Louis Jaume and Joan traveled to Saint-Louis to work at JangKom, one of Hahatay's facilities in the city. Their main goal was to update the firmware of several Russian routers that had been causing issues. Additionally, they planned to integrate a couple of routers into the mesh network to ensure good connectivity throughout the facility. ![Jaume and Joan working at JangKom](images/jaume_joan.jpg "Jaume and Joan working at JangKom") At lunchtime, they stopped at a nearby bar to enjoy the dish of the day: rice with typical fish. On their way back, they saw a foosball table and couldn't resist playing a match. Quickly, two local kids approached and invited them to join. The match was very close, ending in a 3-3 tie until Jaume and his partner scored the decisive goal. After saying their goodbyes, they returned to JangKom to finish their work. Around 5:00 PM, they finished at JangKom and decided to go to Weesul, another Hahatay facility in Saint-Louis. The mission was the same: update the Russian routers and add some to the mesh network. However, after a long day, they weren't as lucky: the main router's connection didn't detect the wired internet. After several attempts, they decided to leave it for the next day. They returned home around 9:00 PM, where a fish and salad dinner, saved for them by their teammates, was waiting. ### Aitor and Roger: OpenWISP Structuring and Backup Routers While Jaume and Joan worked in Saint-Louis, Aitor and Roger spent the morning at Pablo's house restructuring the device configuration in OpenWISP. Their goal was to create a global template for password change management. They also configured a new router with the new structure to replace the one at Sunukeur Square, which had been failing for days. Meanwhile, Pablo was welding a structure for a ladder that would be installed at Tabax Nite, and Lorenzo worked with a radial saw. ![Pablo welding](images/pablo.JPG "Pablo working on the ladder structure") ![Lorenzo working](images/loren.JPG "Lorenzo using the radial saw") By the end of the morning, Aitor and Roger began configuring and uploading several backup routers to OpenWISP. This will allow for the quick replacement of any router that fails, ensuring a smooth transition thanks to the OpenWISP templates. ### Afternoon: Final Adjustments and Sunset in Sunukeur In the afternoon, Roger continued configuring backup routers before heading to Aminata to fix the slave routers and resolve the internet connection issue with the master router. Thanks to OpenWISP, the configuration template solved everything efficiently. On his way back to Sunukeur, he witnessed a beautiful sunset. ![A beautiful sunset on the way home](images/puestada.JPG "Sunset in Tassinere") Meanwhile, Aitor stayed in Sunukeur reviewing the final structure of OpenWISP with Sergio. After confirming everything was in order, they replicated the setup at JangKom and Weesul. Unlike Sunukeur, these facilities would have two separate organizations, each with only two groups: masters and slaves. Once the structure was set, they tried to add some routers to the system, but VPN issues prevented them from integrating any devices. By the end of the day, along with Roger, who had returned from Aminata, they defined the tasks for the following day and concluded the day, satisfied with the progress and ready to continue moving forward. ================================================================================ ## Day 16: Back to Gandiol and Intense Workday URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day16/ Date: 2025-02-03 Tags: senegal travel blog Today, we woke up without much hurry, enjoying the morning calm before starting the day's plans. Roger and Jaume went out early to buy ferry tickets for their trip to Casamance next week, ensuring their mobility for the next stage of the journey. Meanwhile, Aitor, Joan, and Sergio visited a well-known store to purchase essential materials: Ethernet heads and a cable tester, key elements for continuing our work. ![shopping in Dakar](images/compra_dakar.jpg "Nerd Shopping in Dakar") By mid-morning, we met up with Pablo in the Plateau district to set off together by car towards Gandiol. The trip was smooth and without complications. {{< two-figures-single-caption "images/camino-a-gandiol.jpg" "images/baobabs-en-carretera.jpg" >}} On the way to Gandiol. The journey rewards us with sights like this baobab forest. {{< /two-figures-single-caption >}} Upon arrival, we were greeted with a delicious thieboudiene prepared by Daba. As always, its flavor was spectacular, a true feast for the palate. During lunch, we shared the table with the entire Gandiol community, including Mamadou, whom we hadn’t seen yet as he had been traveling in Spain. The afternoon was intense and productive. We split into two groups to tackle pending tasks. Roger and Aitor headed to Tabax Nité to reconfigure OpenWISP with a new design better suited to the organizational and technical structure. Meanwhile, Jaume, Joan, and Sergio took inventory of the available routers, aiming to organize and prepare the necessary devices for installing new access points in JanKom and Weesul, in Saint-Louis. ![Taking inventory](images/inventario-routers.jpg "Inventorying all routers that were not yet assigned") We ended the day with a couscous dinner, enjoying a pleasant after-dinner conversation where we took the opportunity to plan for the next day. A demanding workday is ahead, likely in Saint-Louis, where we will continue our efforts. With that in mind, we retired to rest and prepare for what’s to come. ================================================================================ ## Day 15: Second Day in Dakar. Cervantes: Genius or a Lucky Monkey? URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day15/ Date: 2025-02-02 Tags: senegal travel blog This morning, we woke up without any rush, as last night's party went on longer than expected. We took a stroll around the neighborhood with the intention of eating at the same place as yesterday, but since it was Sunday, the women had closed the stall. The kiosk owner told us that there was an open place at the end of the street, so we decided to head there. We all ate Thie Bou Djen Rouge together, which, though tasty, did not quite compare to the one Daba usually prepares for us at Hahatay. With our stomachs full, we returned home to rest for a while and avoid the hottest hours of the day. Everyone, except Sergio, who preferred to stay and rest, went to the laundromat to wash clothes and then exchanged some extra CFAS for the upcoming days. Later, we met again at a bar with an ocean view, where we witnessed another breathtaking African sunset. There, the younger mathematicians gave us a formal demonstration of the following statement: "A monkey would write Don Quixote infinitely many times if it randomly typed on a keyboard for an infinite amount of time." Roger, Sergio, and Jaume were amazed by the abstract thinking of the young mathematicians. This type of knowledge exchange among all team members allows us all to learn new things, both the more experienced ones and the younger ones alike. ================================================================================ ## Day 14: Travel to Dakar URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day14/ Date: 2025-02-01 Tags: senegal travel blog We woke up very early. Assane Bodge picked us up in Hahatay at 6:00 AM to take us to Saint-Louis, where we would catch the Dem Dikk bus to Dakar. Assane, with a punctuality not particularly common among Senegalese people, arrived right on time. The trip was quick, with very little traffic, and before long, we arrived at the entrance of Saint-Louis. While waiting, we had a glass of sugar with coffee at a small street stall. Soon after, we boarded the bus, which turned out to be very comfortable. It departed from Saint-Louis towards Dakar. {{< two-figures-single-caption "images/dem_dik_fuera.jpg" "images/dem_dikk.jpg" >}} Esperando a subir al autobús. Vamos como los guays del colegio. Los 5 detrás. {{< /two-figures-single-caption >}} During the journey, we made a technical stop in Thiès. We had a fataya, a type of fried pastry filled with meat or fish. Shortly after, we arrived in Dakar at noon. Once in the city, we headed to the apartment. After settling in and chatting with some locals, they recommended a small eatery that serves daily specials. We went there and were served some absolutely delicious Theiu Bou Yapp. ![Theiu Bou Yapp](images/thie-bou-yapp.jpg "Theiu Bou Yapp prepared by the women at the corner stall.") After a brief rest, we took a taxi to the Dakar mosque. We walked through the Sandanga market, immersing ourselves in the bustling and vibrant atmosphere of the city, until we reached Place de l'Indépendance. After the long walk, we sat at a bar to have a drink and share our first impressions of Dakar. ![Paseo por el mercado](images/paseo-mercado.jpg "Strolling through the Sandanga market.") One particularly interesting sight was a baobab tree standing in the middle of a narrow market street. The baobab is a sacred tree for Senegalese people, and they never dare to cut it down. In this case, a baobab was growing right in the middle of the street. ![Baobab en medio de la calle](images/baobab-mercado.jpg "Giant baobab in the middle of the street.") In the evening, we met up with Pablo and Rober, who were also in Dakar. Rober was leaving for Bilbao the next day, and Pablo had accompanied him to say goodbye. They decided to stay the weekend at Joaquín "Giby’s" house, the first volunteer who had been with Hahatay since its inception. About nine of us gathered and went to dine at a Diola restaurant. The food was exquisite, with delicious dishes at a very reasonable price. Later, we headed to a party to wrap up the night with great company and a festive atmosphere. ![Disrutando de una fiesta en Dakar](images/fiesta-primera.jpg "Enjoying a party in Dakar.") ================================================================================ ## Día 13: Waxtu bu baax, Pablo! URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day13/ Date: 2025-01-31 Tags: senegal travel blog In the morning, as usual, we split into two groups to tackle the day's tasks: ## Completion of the Daily Report Script The **monitoring team (Joan and Jaume)** spent the morning finalizing the script that will send a daily report on the network's status. As a fun detail, we added an **easter egg**: each morning, the report message will randomly greet Pablo in one of five different languages (*Spanish, French, English, Catalan, and Wolof*). ![Good morning, Pablo!](images/morningPablo.jpg "A few different quotes") ## Progress in OpenWISP and Unexpected Issues **Aitor and Roger** spent the morning configuring **OpenWISP**, creating different organizations for the routers to keep the various Hahatay installations well-organized. However, during this process, some router configurations were **accidentally deleted**. This issue turned into a valuable learning experience: they realized the importance of being extremely **strict with the structure of organizations, groups, and devices** within OpenWISP to prevent future errors. ## An Unexpected Visitor In the afternoon, while working, **Joan and Aitor** received a surprise visit: a **nearly 100-year-old, 50+ kg tortoise**, a resident of the Hahatay facilities, unexpectedly wandered into their room. ![Hahatay Tortoise](images/Tortuga.jpg "Hahatay Tortoise") ## Coffee with Lorenzo and Teamwork After an enjoyable coffee break with Lorenzo, each team resumed their tasks: - **Joan** worked on adding all the virtual devices deployed in **Proxmox** to the monitoring network. - **Jaume** focused on configuring **web services**. - **Aitor, Roger, and Sergio** defined the ideal structure of **organizations, groups, and devices** in **OpenWISP** so that password changes could be applied globally with a single click. ![Joan and Jaume’s Office](images/despacho.jpg "Joan and Jaume’s Office") ## Wrapping Up the Day at Teranga To end the day, we headed to our beloved **Teranga**, this time joined by **Salif**. However, it’s unlikely he’ll come with us again after we overwhelmed him with **philosophical, mathematical, IT-related, and, above all, extremely geeky discussions**. 😆 ================================================================================ ## Day 12: The mistery of the non working ethernet URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day12/ Date: 2025-01-30 Tags: senegal travel blog Today was a day of significant progress, with visits to local centers and solutions to key technical problems. ## Updating a Router at Defaratt In the morning, Joan and Jaume went to **Defaratt**, a recycling center linked to Hahatay, located in the village of Gandiol near the Aminata facilities. There, they set out to reconfigure an old router that required a complete firmware update to be integrated into our network. After a good while of work, they finally managed to get it up and running. ![Defaratt](images/Defaratt.jpg "Defaratt") ## Creating a Daily Report Service In the afternoon, Jaume and Joan began working on one of the goals set the previous day: creating an automated service that sends a **daily report** via Telegram at 8 AM, summarizing the network’s current status. This daily summary will be highly useful for Pablo, aka *Hahatay’s handyman*, as it will centralize all information and help quickly identify which router is malfunctioning and why. ## Configuring the Computer Lab and Cable Issues Meanwhile, Aitor and Roger worked on reconfiguring the router in the **computer lab** and preparing the main node for **Keru Jiggen** (*House of Women* in Wolof). While waiting for the keys to access and configure the other routers in the mesh network, they proceeded with the setup. ![Computer Lab Router Setup](images/ConfiguracionRouterTabaxNite.jpg "Computer Lab Router Setup") Once they gained access and configured the network, they encountered an unexpected issue: **the cable connecting the main node to the servers was not working**. This forced them to adjust their plan and analyze the network infrastructure to pinpoint the problem. ## A New Look After lunch, Roger gave Jaume a fresh haircut, a **new look** that, according to the group, was long overdue. ![Before Haircut](images/PeloAntes.jpg "Before Haircut") ![After Haircut](images/PeloDespues.jpg "After Haircut") With the haircut session finished, Pablo and Roger headed to **Tabax Nite** to investigate why the **Keru Jiggen** cable was not functioning. ## Solving the ethernet non working mistery After identifying all the cables coming from the server, they traced the underground wiring from the server to **Aula 1**, and from there to **Keru Jiggen**. Eventually, they discovered that **the cable was cut between Aula 1 and Keru Jiggen**, solving the mystery. The solution was clear: **dig up the cable, reroute it directly to the server, and crimp a new Ethernet cable**. Once the work was completed, everything functioned perfectly, and **Keru Jiggen was successfully connected to the network**. ![Broken Ethernet Cable](images/EthernetRoto.jpg "Broken Ethernet Cable") ## A Healthy Dinner and Well-Deserved Rest To end the day, we enjoyed a **delicious and healthy salad for dinner**, a refreshing break after an intense day of work. With full stomachs and the satisfaction of having solved several important issues, we went to bed, ready to take on a new day in Gandiol. ![Dinner Salad](images/Cena.jpg "Dinner Salad") ================================================================================ ## Day 11: Technical Advances and New Stories in Saint Louis URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day11/ Date: 2025-01-29 Tags: senegal travel blog Today, Wednesday, started with a shared breakfast under the typical heat of Senegal, but the team kept their spirits high and motivation strong to continue with the technical progress of the project. ## Future Plans with FDSUT In the morning, Sergio met with Lorenzo to have a meeting with the [FDSUT](https://fdsut.sn/), explain the project we have been working on together, and explore possible avenues for future collaboration. The meeting was very positive, and many possibilities for future projects in the region were opened. ![Sergio and Lorenzo at the meeting](images/sergio-loren-fdsut.png "Sergio and Lorenzo at Ndar Weesul before the meeting") ## Network Advances and Firewall Optimization Joan and Jaume took a short break from their work with Zabbix to focus on improving the network configuration. They worked on centralizing the firewall rules of the routers with internet access so that, in some Hahatay centers, there would be no internet during non-working hours, and in the residence, from 11:00 PM to 8:00 AM. This implementation had already been done on the master of each mesh, but it had one issue: by blocking the internet access, we couldn’t access routers from other areas when we needed to make configurations. Now, with this new solution, we can access the routers without any problem as we only block internet access. ![Xiaomi Routers in configuration](images/jaume_joan_trabaj.jpg "Jaume and Joan working") ## The Challenge of Xiaomi Routers Meanwhile, Roger and Aitor decided to stay in Sunukeur, as yesterday's return left them exhausted. They encountered some problems when trying to configure the Xiaomi routers, which were not receiving OpenWISP commands well. It turns out that Xiaomi released two versions of these routers with minimal hardware differences, causing incompatibilities with the firmware needed to install OpenWISP. The installation and update process continued to be a challenge, but it was a good opportunity to prepare spare routers or replace those that had not yet been reviewed. ![Xiaomi Routers in configuration](images/routers.JPG "Struggling with different routers") ## New Ideas and Challenges with Zabbix After lunch, Joan and Jaume returned to work with Zabbix. Although they did not make significant progress today, they discussed some ideas and began implementing new strategies to optimize network monitoring in the coming days. ## Solving the Problem of Turned Off Radios In the afternoon, Roger and Aitor focused on a problem that had arisen in several new routers: the radios were turned off. This prevented the routers from broadcasting Wi-Fi and communicating with the mesh network. After several attempts, they found some lines of code in the OpenWISP documentation that could apparently solve the problem, but when implemented, they disabled other necessary interfaces. After much trial and error, they managed to solve the problem, and now the templates for configuring slave and master routers are ready. ## New Server in JangKom After their workday at Ndar Weesul, Sergio and Lorenzo went to JangKom to install a new server that will allow monitoring and managing the networks of JangKom and Weesul using Zabbix and OpenWISP. The installation was somewhat unorthodox, but everything was finally stable. ![Lorenzo placing the new server in JangKom's office](images/lorenzo-colocando-server-jangkom.jpg "Lorenzo placing the new server in JangKom") ## Evening of Football and a Memorable Dinner At 6:30 PM, Aitor, Jaume, Joan, and Roger took a taxi to Saint Louis to watch the many Champions League matches being played that evening. They went to a very peculiar place called *Le Montagne*. There, they had a big screen where they showed different matches, about 20 minutes each, as they were played simultaneously. ![Football at Le Montagne](images/futbol.jpg "Football at Le Montagne") Later, Javier, one of Lorenzo and Pablo's friends who are staying at Hahatay these days, also came. It turned out that Javi works on various cooperation projects and has traveled across half of Africa and many other countries. We spent much of the night listening to his experiences, things he had seen, lived, that had led him to think and believe in a particular way, and he told us with humility and a smile on his face. ![Dinner with Javi](images/cena.JPG "Dinner with Javi") The night culminated with a spectacular dinner: three grilled *poissons* that were undoubtedly the best of the day. To finish, we saw many locals with a white concoction that they bought in bulk at the restaurant, and Jaume couldn't resist buying a bottle. It didn't smell or taste very good, but we all tried it, and no one felt bad the next day. ![The Fish](images/pescado.jpg "The Fish") ![The White Concoction](images/brebaje.jpg "The white concoction") ================================================================================ ## Day 10: Recovering Defaratt, Progress with OpenWisp, Heat and Sunsets URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day10/ Date: 2025-01-28 Tags: senegal travel blog The day began with the usual routine: a good breakfast to recharge before getting to work. But today, there was a little surprise on the table: Laura had prepared homemade hummus, a small change that made a difference and lifted everyone's spirits. ## Work in Fess Aitor and Roger set off early to work in Fess. The 20-minute walk there was pleasant, with perfect weather and a light breeze that made the journey much easier. ![Arriving at Fess](images/llegando_a_fess.jpg "Arriving at Fess") Once in Fess, they continued refining the OpenWISP templates to ensure the router configurations left no loose ends. They also worked on reconfiguring some static IPs that had been lost the previous day. Although the results weren’t too promising, at least they reached conclusions that will help improve OpenWISP implementation in the coming days. The way back, however, was a different story: the warm wind from the Sahara turned the walk into a real ordeal. Without the morning breeze, the heat became almost unbearable. ![Aitor and Roger working on OpenWISP](images/aitor_roger_openwisp.jpg "Aitor and Roger working on OpenWISP") ## Recovery of Defaratt Meanwhile, Jaume and Joan planned to recover **Defaratt**, a Hahatay center dedicated to plastic recycling. In theory, the site already had an antenna and a master router, so the first step was to check the old *Zabbix* system to see if they were still operational. Fortunately, everything was up and running, so we avoided the trip and stayed in *Sunukeur* to work on the configurations. However, the router in question was a **Linksys**, the same model that had given us trouble before, and we couldn’t download the necessary packages. After several unsuccessful attempts, we decided to focus on a new implementation in *Zabbix* to detect devices that restart multiple times in a single day, which usually indicates an issue with the wiring or the power connection. To our surprise, we found more problems than expected, so this task will continue in the coming days. ## Rest and Planning For lunch, we had a typical dish: **theibuiene rouge**. After eating, the heat was too intense to keep working, so everyone retreated to their rooms for a break. Some took a nap, and around 4:00 PM, we resumed work, using anything we could find to fan ourselves. ![Working in the heat](images/trabajando_al_calor.jpg "Working in the heat") At 5:00 PM, when Sergio finished his workday, we all gathered to organize tasks, mark the ones we had completed, update the issues that had arisen, and plan the next day's work. We kept working until 6:00 PM and, after a long and hot day, decided it was time for a break at *Teranga*. We arrived still overheated, but there we could cool down with some cold drinks and relax for a while. ![Resting at Teranga](images/descanso_en_el_teranga.jpg "Resting at Teranga") ![Snacks served with drinks at Teranga](images/pica_pica.jpg "Snacks served with drinks at Teranga") ## End of the Day Dinner was the perfect way to close the day. Plus, we met **Amina**, an artist who came to spend a few days in *Sunukeur* to share, get inspired, and learn from other artists—one of the many interesting initiatives offered by *Hahatay*. The conversation flowed with laughter and jokes until someone mentioned the movie *Torrente*. The joke turned into a challenge, and we started searching for it to watch. It wasn’t easy, but in the end, we managed to find a clip and ended the day laughing. ![Watching Torrente at night](images/torrente.jpg "Watching Torrente at night") Another day of learning, work, and shared moments. Tomorrow, another intense day awaits, but for now, it's time to rest. ================================================================================ ## Day 9: A Monday of Challenges and Learning in Senegal URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day9/ Date: 2025-01-27 Tags: senegal travel blog Today, Monday, we started the week with great energy and motivation after a very relaxing weekend. ## Solving Problems with the Mesh Network in Aminata In the morning, Jaume and Joan returned to Aminata equipped with a ladder and a clear goal: to make the installations fully operational. Upon arrival, they found that the main node was not properly configured. After resetting it and configuring it correctly, deploying the secondary nodes was relatively straightforward, as these were already almost entirely set up correctly. ![Joan working on the configuration](images/Joan_Escalera.jpg "Joan working on the configuration") In Tafa’s office, while placing one of the secondary nodes, they encountered some unexpected intruders: several nests of African wasps, longer than usual. After mustering up the courage, they managed to install the router properly in the office. ## Challenges and Lessons with OpenWISP Meanwhile, Aitor and Roger focused on working with OpenWISP configuration templates, tackling specific cases that caused numerous issues. As a result, they had to bother Laura several times to access her office and reconfigure the main router. Although the problems weren't fully resolved, the OpenWISP team took advantage of the day to gain substantial knowledge about the network management system. This understanding will allow them to move forward more confidently and efficiently in the days ahead. ## Sergio: The Constant Support Amidst it all, Sergio, who was working remotely today, was a great support for the entire team. He provided advice and clarity whenever the sub-teams encountered problems they couldn’t solve. His expertise and willingness to help always make a difference! ## An Afternoon of Sports and Technical Work In the afternoon, Joan and Sergio went for a run and later joined Aitor at the Teranga to enjoy another beautiful sunset together. ![Sunset at the Teranga](images/puesta_de_sol_teranga.jpg "Sunset at the Teranga") Meanwhile, Jaume and Roger worked on the tedious process of debricking. They managed to recover only one of the five “bricked” routers. ### What is a Debrick? The original firmware of the routers doesn’t allow many of the functions required by our community network. Therefore, we “hack” them and install alternative firmware that unlocks many additional features. However, if the installed firmware is not fully compatible with the hardware, the router becomes corrupted and stops working (brick). In such cases, a series of tedious steps is needed to restore it. If we manage to restore the router, we have successfully achieved a "debrick" ![Router-Brick Transformation](images/router-brick.jpg "Router-Brick Transformation") ## A Math Challenge to End the Day To wrap up the day, after dinner, Jaume presented a math problem to Aitor and Joan, keeping them engrossed for quite a while. We love these brainteasers that always manage to challenge us. ![Notes from Aitor and Joan solving the problem](images/triangulos.jpg "Notes from Aitor and Joan solving the problem") --- ================================================================================ ## Day 8: Work in Sunukeur, Zebrabar, and Night Football URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day8/ Date: 2025-01-26 Tags: senegal travel blog The day started off relaxed, with no rush. We woke up calmly and spent the morning working on pending tasks. ### Jaume and Joan: Synchronizing Zabbix with Telegram Jaume and Joan focused on continuing the Zabbix setup, successfully synchronizing it with Telegram. They created two notification groups: one to receive all alerts, whether warnings or errors, which will allow us to constantly monitor the network and perform debugging tasks. The second group will only be activated when a router stops working for the entire day, making it easier for the local team to quickly identify network failures. ### Aitor and Sergio: Router Replacement and OpenWISP Issues Aitor and Sergio worked on updating the Sunukeur network by replacing the master router. However, when they applied the OpenWISP configuration template, the router's graphical interface, LuCI, got misconfigured. They decided to leave the problem for the next day, as they needed more time to fix it properly without risking making the situation worse. ### Zebrabar At lunchtime, we headed to Zebrabar, where we met up with some of Lorenzo and Pablo's friends, making a total of 24 people. The fish dish of the day was particularly popular. ![Plat du Jour](images/plat_du_jour.jpg "Plat du Jour") After lunch, we spent some time at the place, once again enjoying the views and the peaceful atmosphere. ![Zebra Views](images/vistas_zebrabar.jpg "Beautiful views from Zebrabar") ![Zebra Relaxing](images/descanso.jpg "The team having a break") ### Return to Sunukeur: Dinner and Football On our return to Sunukeur, Lorenzo had organized dinner: grilled chicken with French fries and Fataya. After dinner, we set up the football match on a screen in the patio and enjoyed Barça's 7-1 victory. ![Dinner in Sunukeur](images/foto_cena.jpg "Dinner in Sunukeur with grilled chicken") ================================================================================ ## Day 7: A Calm Saturday in Senegal URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day7/ Date: 2025-01-25 Tags: senegal travel blog We started the day without rushing and decided to take a slow morning. It was such a luxury to sleep in, enjoy a relaxed breakfast, and share laughter while reminiscing about the funniest moments from the previous night. --- ## Reflecting on our Achievements In the morning, we took the opportunity to review the progress we had made throughout the week. It was deeply satisfying to realize just how far we had come: ### Zabbix Configuration We managed to integrate it with Telegram and add most of the network elements. ![Telegram: Zabbix problem notification](images/zabbixProblem.jpg "Telegram: Zabbix problem notification") ![Telegram: Zabbix problem resolved notification](images/zabbixResolved.jpg "Telegram: Zabbix problem resolved notification") ### OpenWISP Deployment We successfully deployed OpenWISP, added all the network routers, and now can configure mesh nodes with surprising ease. With this nearly completed, we just need to finalize the documentation, and this major integration project will be done. --- ## Exploring Saint Louis In the afternoon, Jaume, Joan, and Aitor went on a trip to Saint Louis, determined to experience the authentic essence of the city while avoiding the typical tourist route on the island of Saint Louis. ### The Local Market: An Organized Chaos The visit to the local market was an eye-opening experience. We found ourselves in a vibrant and chaotic environment where all kinds of foods were displayed in fascinating ways. Among colors, smells, and voices, we immersed ourselves in the everyday life of Saint Louis and were captivated by the charm of this remarkable market. ![Market](images/mercado_st_louis.jpg "Market") ![Market: Fish Section](images/mercado_st_louis_II.jpg "Market Fish Section") ### The Bazaar: Good, Cheap, and Beautiful After the market, we visited the second-hand bazaar again, where we snagged some incredible bargains. - **Jaume**: scored a jacket, a shirt, and a t-shirt at a great price. - **Aitor**: found a pair of cropped pants that fit perfectly. - **Joan**: wasn’t as lucky this time and left the bazaar empty-handed, though he laughed it off. --- ### A Different Way Back The return to Gandiol was an adventure in itself, as we chose to use a shared taxi, a common mode of transport in Senegal. How it works: 1. Head to a specific spot where you know taxis are waiting to head to Gandiol. 2. Wait for other passengers heading in the same direction. 3. Once the taxi is full, the journey begins. It’s an economical, practical, and uniquely cultural experience that gave us yet another anecdote to cherish. --- ## A Quiet Time in Gandiol Meanwhile, Roger and Sergio stayed in Gandiol. They spent some time working on the VPN project before heading to Teranga, our favorite local bar, to watch the sunset. --- Every day here in Senegal has its own rhythm, a perfect mix of accomplishments, learning, and discoveries that make this experience unforgettable. ================================================================================ ## Day 6: A Productive Day and Celebration at Lakhrar Beach URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day6/ Date: 2025-01-24 Tags: senegal travel blog Today we continued with the tasks we had planned, and each team made significant progress toward their goals. ## Progress with OpenWISP The OpenWISP team decided to head to Fess to change the environment and take the opportunity to solve some router issues in the area. After overcoming some difficulties, they managed to access all the necessary rooms and fix several key devices: * Repaired the router in the computer room. * Solved problems with the two routers in the radio station. Additionally, they configured a small two-node mesh network in the radio station, using only OpenWISP. Although one of the older routers became unusable (bricked), the positive takeaway is that we validated OpenWISP as a tool for creating mesh networks easily. Next steps: * Use OpenWISP to rebuild all mesh nodes. * Verify that DNS servers are correctly configured on all routers. * Ensure the firewall configuration is correct on all routers. ## Progress with Zabbix Good news: Zabbix is working perfectly. The system has notified us about errors in some routers that would have otherwise gone unnoticed. We’ve documented these issues in the task management system and are continuing to work on finalizing Aminata’s network. Additionally: * We customized Zabbix error messages to reduce unnecessary alerts and ensure that notifications are clear and relevant. * We flashed two additional routers that will be deployed to the *Ndar Weesul* space in Saint Louis. ## An Afternoon at Lakhrar Beach In the afternoon, we headed to Lakhrar Beach, a spectacular location surrounded by natural beauty, perfect for relaxing and celebrating the progress made during the week with a barbecue. The day was full of activity: while Joan, Sergio, and Aitor ventured into the sea to gather oysters that we would later cook over the fire, Jaume, Roger, and other Hahatay volunteers – Lorenzo, Pablo, and Rober – prepared the area to light the fire and cook the oysters, along with potatoes and steaks. ![Lakhrar Beach](images/andando_por_lakhrar.jpg "Arriving at Lakhrar Beach") ![Preparing Dinner at Lakhrar](images/tarde_lakhrar.png "Finishing preparations for dinner") The sunset at Lakhrar was an unforgettable sight. As night fell, we enjoyed a delicious dinner: Rober had prepared a tortilla earlier in the day as an appetizer, and the fresh oysters, gathered just hours before, were roasted over the fire, followed by steaks that completed an unparalleled feast. ![Sunset at Lakhrar](images/atardecer.jpg "Another beautiful sunset in Senegal") After dinner, we stayed by the bonfire, sharing stories and enjoying the tranquility of the night in an idyllic setting. Once the firewood was used up, we packed our things and headed back home, satisfied and ready to rest after a perfect day. ![Grilled Oysters](images/ostras.jpg "Grilled oysters, freshly picked from the sea and cooked") ![Evening at Lakhrar Beach](images/sobremesa.jpg "Sharing stories by the bonfire") ================================================================================ ## Day 5: Work in Sunukeur, Exploring Saint-Louis, and an Improvised Concert URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day5/ Date: 2025-01-23 Tags: senegal travel blog The day began early in Sunukeur, with breakfast giving us the energy to get started. We split into the same pairs as the previous day and spent the morning tackling the technical tasks on our agenda. ### Jaume and Joan: Progress with Zabbix and Network Maintenance Jaume and Joan focused on organizing and updating the router registry in Excel while installing the necessary Zabbix packages. They also added all available routers and antennas to the Zabbix server and conducted tests to set up a template with the desired triggers. This will allow us to receive only the most relevant notifications, optimizing network management. They also replaced the Linksys router in the residence with a new Xiaomi router, significantly improving connection stability. Additionally, they flashed two more routers that will soon be integrated into the network. ![Jaume and Joan working on Zabbix](images/foto_team_zabbix.jpg "Jaume and Joan working on Zabbix configuration") ### Aitor and Roger: OpenWISP Solutions and Firmware Updates Meanwhile, Aitor and Roger worked on integrating new routers into the OpenWISP server. During the morning, they updated the firmware on two Linksys routers that had been running an outdated OpenWRT version for three years. The process was delicate since any mistake could render the devices unusable (or "bricked," as we call it), but everything went smoothly. They also repaired a router in Sunukeur’s mesh network that lost its configuration during OpenWISP integration. Lastly, they made progress on creating a NetJSON configuration template to automate the process of configuring master routers in the future. ![Aitor and Roger working on OpenWISP](images/foto_team_openwisp.jpg "Aitor and Roger optimizing OpenWISP") ### Afternoon in Saint-Louis: Hahatay Centers and Local Exploration In the afternoon, we headed to Saint-Louis by taxi. This is where a little anecdote began: there were five of us, but the taxi was designed for four. We decided to squeeze in to avoid splitting up, but the police stopped us during the ride and fined us 1,000 CFA francs for exceeding the passenger limit. Despite this hiccup, we continued on our way and made the most of the afternoon. ![The taxi we took](images/foto_taxi1.jpg "The taxi before heading to Saint-Louis") ![Moment of the police fine](images/foto_taxi2.jpg "The police fined us for having five people in a four-person taxi") Aitor, Sergio, and Joan, along with Lorenzo, visited the two Hahatay centers on the island. There, they took measurements to assess how many routers are needed to optimize connectivity at those facilities. Meanwhile, Jaume and Roger explored the *friperie*, a second-hand clothing market with an impressive variety and affordable prices. It was an interesting and useful experience, especially for those who needed to replenish their wardrobe for the rest of the trip. ![Exploring the friperie](images/foto_friperie.jpg "Jaume and Roger shopping for clothes at the friperie") Before heading back, we made a stop to buy everything needed for tomorrow’s barbecue. ### Improvised Concert at Hahatay Back at Hahatay, we were surprised by an impromptu concert. Tafa brought his guitar, and Pablo joined in on the drums. The music filled the air, creating a magical atmosphere. Later, X, a young singer from Dakar currently doing an artist residency at Hahatay, joined in. Her voice added a special touch, and little by little, we all got involved—some clapping, others attempting to sing. It was an unforgettable moment that strengthened the bonds between everyone present. ![Improvised concert](images/foto_conciertillo.jpg "Improvised concert at Hahatay with Tafa and X") ### Dinner and Sunset Dinner was another highlight of the day. We enjoyed *petit pois*, a local dish similar to chickpeas, which has become one of our favorites here. The evening continued with more music and good conversations as we reviewed the day’s achievements and planned the tasks for tomorrow. ![Dinner at Hahatay](images/foto_sopar_2.jpg "Dinner at Hahatay with the team") These days, the sky is especially clear, making the sunsets spectacular. At the end of the day, we spent some time admiring the landscape from Hahatay, another reminder of how lucky we are to be experiencing this adventure. Finally, we went to bed, satisfied with everything we accomplished and ready to face a new day full of challenges and surprises. ================================================================================ ## Day 4: Fixing Aminata, Progress with OpenWISP, Zabbix, and Slam Concert URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day4/ Date: 2025-01-22 Tags: senegal travel blog In the morning, we split into two groups to tackle the day’s tasks: ### Jaume and Joan Fix Aminata and Take First Steps with Zabbix Jaume and Joan headed to Aminata with the goal of resolving the issues with the antennas that remained unsolved from the previous day. However, upon arrival, we were informed that there would be no power until 5:00 PM, forcing us to postpone some tasks until tomorrow. Nevertheless, we used the time to install an ethernet cable, which was perfectly secured, while another cable resisted for reasons we still don’t fully understand. Back in Sunukeur, we focused on setting up a new node in the mesh network. This node was integrated into the Zabbix server created by Sergio on the first day. After configuring it correctly, we ran some notification tests via Telegram, which proved successful. ### Roger and Aitor Advance with OpenWISP Meanwhile, Roger and Aitor stayed in Sunukeur to address issues with OpenWISP. They managed to register nearly all the routers in the area and, most notably, successfully changed the WiFi password on a test router using OpenWISP. This was one of the day’s main objectives. Tomorrow, we plan to test changing the passwords of multiple routers simultaneously to confirm that the system works efficiently. ![The team working in Sunukeur](images/oficina_de_la_mañana_del_equipo.jpg "The team working in Sunukeur") ![Sergio working](images/sergio_oficina.jpg "Sergio has been working all week and will be more present next week") ### Slam Concert in Aminata At 5:00 PM, we attended a concert organized in Aminata by residents of Hahatay. It was a unique experience to enjoy traditional music in such a special setting. After the concert, we shared a small snack that made the moment even more enjoyable. ![Slam concert in Aminata](images/slam.jpeg "Slam concert in Aminata") These days, there is very little dust in the air, which is uncommon but makes the sunsets spectacular. This is the view from our house. ![Sunset in Sunukeur](images/atardecer.jpg "Sunset in Sunukeur") We ended the day with a group dinner, reviewing the day’s achievements and planning for tomorrow’s tasks. We went to bed early, satisfied with what we accomplished and full of energy to keep moving forward. It was a productive day filled with great moments. More tomorrow. ![Dinner in Sunukeur](images/cena.jpeg "Dinner in Sunukeur. From left to right: Aitor, Joan, Yuzu, and Jaume") ================================================================================ ## Day 3: Diagnosing and Solving Network Issues URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day3/ Date: 2025-01-21 Tags: senegal travel blog We started the day with a good breakfast and divided into two groups to tackle the planned tasks. Sergio, Jaume, and Joan headed to Aminata to try to solve the connectivity issues in the network. From the beginning, our goal was to diagnose why the network wasn’t working. After several tests, we confirmed that both the router, with its mesh wifi system, and the switch were working correctly. However, the monitoring logs revealed that the antenna had been rebooting intermittently for several days. With some luck, the problem could be related to a poor connection in the ethernet cable, which might explain the continuous reboots of the antenna. ![Zabbix logs showing the antenna's reboots](images/zabbix-logs.png "Zabbix logs showing the antenna's reboots") Meanwhile, Roger and Aitor, unable to work at Aminata due to the lack of network, returned to Sunukeur. However, upon arrival, they encountered another obstacle: a power outage that also took down the network. They decided to head to Fess (2km on foot), but when asking Pablo for the keys, they found out that Sergio had them at Aminata. They opted to stay at Pablo’s house, where, after a while, the connection returned, and they were able to make progress on their tasks. ![Aitor working at Pablo's house](images/aitor_casa_pablo.jpg "Aitor working at Pablo's house") Later, we had Thiebou djen *rouge* for lunch at home, a small variation of Thiebou djen that includes tomato in the sauce. ![Roger and Jaume competing to see who can eat more Thiebou djen *rouge*](images/thiebudjen_tomate.jpg "Roger and Jaume competing to see who can eat more Thiebou djen *rouge*") The main goal for this week is to automate the wifi password changes. We believe that with periodic password changes, we can significantly reduce the number of users who are not connected in some way to Hahatay. To achieve this, the first step is to try registering devices in OpenWISP. We managed to register two test users, although both presented some issues. Due to electrical fluctuations, the connection was lost in the afternoon, which limited our progress in solving these issues. Nevertheless, we advanced in drafting NetJSON templates for OpenWISP and plan to first test the password change on a single router once power is restored at Sunukeur. In the afternoon, Sergio, Jaume, and Joan continued working at Aminata. We tested the ethernet cable and confirmed that pins 3 and 6 of the antenna were faulty, which explains the recurring problems. One of the best possible faults it could have been :). We attempted to crimp the new cable but didn’t have enough time to finish, so that task remains for tomorrow. ![Jaume placing the ethernet tester on the antenna to check the pins](images/jaume_subido_a_la_antena.jpg "Jaume placing the ethernet tester on the antenna to check the pins") ![Joan and Jaume crimping the ethernet cable](images/crimpando_cable.jpg "Joan and Jaume crimping the ethernet cable") Finally, at 6:30 PM, we called it a day and joined Lorenzo and Pablo for dinner at La Source. We enjoyed a delicious Faco, ending the day with good food and great conversations. Although the day was full of challenges, we’re making progress and are confident we’ll resolve the issues at Aminata and successfully register the routers in OpenWISP, hopefully tomorrow. ================================================================================ ## Day 2: Networks, Teamwork and Sunsets in Gandiol URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day2/ Date: 2025-01-20 Tags: senegal travel blog This morning, we split into two groups to tackle different tasks related to the network and the project. One group (Roger and Sergio) headed to Tabax Nité, where our servers and routers are located. During the review, we ensured everything was running smoothly and discussed ways to improve the network’s resilience by implementing: - **A management system**: This system will allow us to automatically change the access point passwords. The tool is open-source and called [OpenWisp](https://openwisp.io). It’s been three years since we last changed the password, and by now, half of Senegal probably knows it. This simple change could significantly reduce the number of "unwanted" users on the network. - **A monitoring system**: We plan to implement [Zabbix](https://zabbix.com), which will alert us when something in the network fails. This system integrates well with our routers (OpenWRT) and can also monitor other equipment, such as radio links and servers. Additionally, it could send notifications directly to the project’s Telegram chat, keeping everyone informed in real time. The other group went to investigate what was happening with Aminata’s network, which has been without internet for a few weeks. Unfortunately, when we arrived at the village, there was a power outage, making it impossible to diagnose the issue. We’ll need to return tomorrow to resolve this situation. Meanwhile, Jaume stayed with Joan and Aitor, teaching them how to set up mesh networks. They took the opportunity to update the process documentation and replaced a mesh node in Sunukeur, swapping out the old one at Pablo’s house. ![thie_bou_diene](images/thie_bou_diene.jpg "Daba's Thie bou diene is particularly good") --- In the afternoon, we all worked together in the courtyard. The wind shifted, and a pleasant breeze from the Atlantic created the perfect environment for outdoor work. ![the_team](images/the_team.jpeg "The team working in the courtyard") Later, we took some time to relax and headed to Teranga bar, known for its stunning sunset views. The sunset was spectacular—possibly one of the most beautiful we’ve seen in Senegal. The colors shifted hypnotically for almost 30 minutes until all traces of light disappeared over the horizon. ![sunset](images/sunset_teranga.jpg "Sunset in Gandiol I") ![sunset2](images/sunset_teranga-ii.jpg "Sunset in Gandiol II") To end the day, we had *ñepe* (not sure about the spelling), a type of delicious bean dish that’s one of the best dinner options. Afterward, we enjoyed chatting with the guests staying at Hahatay before calling it a night. ================================================================================ ## Day 1: Setting project goals URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day1/ Date: 2025-01-19 Tags: senegal travel blog Today has been a day full of reunions and first impressions at Hahatay. After arriving, we started the day with breakfast, which is undoubtedly the best time of the day here. We shared a pleasant morning with Laura, the children, and all the wonderful people who are part of Hahatay. ![desayuno](images/desayuno.jpg "Breakfast at Hahatay") After recharging our energy, we took a tour around the area to get up to date on what has changed and what remains to be done. During this tour, we encountered our first technical challenge: Aminata's router isn’t working, something we will address as soon as possible. Lunch was at Zebra Bar, where we met with Lorenzo and other good friends. It was a time to share stories and laughter, and we enjoyed a long chat together after the meal. ![vermut_zebra](images/vermut_zebra.jpg "Aperitif at Zebra Bar") ![primera_comida](images/primera_comida.jpg "First meal at Zebra Bar") In the afternoon, we decided to take a walk along the beach on our way back home, just as the sun was setting. Afterward, we sat down to plan the work for the coming weeks. Each of us shared our ideas, and together we prioritized what we want to accomplish. For this first week, we’ve set the following goals: 1. Resolve the internet connection issues at Aminata. 2. Install OpenWisp management software on the routers. 1. This will allow us to centrally manage all access points and simultaneously make changes to passwords across all of them. 3. Monitor all network elements in Gandiol using Zabbix. 1. This will enable us to proactively detect and resolve issues before they affect users. If we achieve these objectives, we will have made significant progress toward the success of this first week. There’s a lot of work ahead, but the motivation is high, and we’re ready to face the challenges. We closed the day with the satisfaction of having taken the first step and with the hope that these efforts will have a positive impact on the community. ================================================================================ ## Day 0: Travel's Day URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day0/ Date: 2025-01-18 Tags: senegal travel blog The day of travel is always a day full of nerves. But good nerves. In the end, we've spent a lot of time working on this, so it's very normal to feel a bit anxious. ![jaume_roger_sergio](images/jaume_sergio_roger_dia0.jpg "Jaume, Roger, and Sergio just before heading to the airport") The day started off a bit complicated right from the check-in counter. Jaume and I (Sergio) went to check in the suitcase. It weighed 26 kg, while the maximum allowed was 25. The woman marked it as "Heavy" but didn’t say anything else. She didn’t charge us extra, so we assumed that even though it was "Heavy," it was within the tolerance. Then, the woman at the counter asked us: —What’s your carry-on luggage? Jaume and I looked at each other and almost in unison replied: —This one. —We pointed to Jaume's backpack. The woman, in a not-so-friendly tone, said: —Well, it has to fit there. —She pointed to a metal frame where the backpack had to fit. Jaume, almost instinctively, like a ninja, reached into his backpack, pulled out the metal frame that was part of its structure, and passed it to me under the counter. I held the metal frame, hiding it from the woman’s view. Jaume managed to fit the backpack into the metal frame. He had to force it, but he did it. The woman nodded, looked at me, and asked: —You’re not carrying anything else? I shook my head. —Alright, you need to be at the boarding gate at 2:30 PM. Jaume and I nodded and left. Great, first boss of the day defeated. Next, we headed to the security check. There, from two carry-on bags, we took out 12 laptops, each in its own tray. The laptops were wrapped in bubble wrap to minimize damage from any impacts during the trip. The guard at the checkpoint, perplexed by the 10 trays filled with bubble-wrapped laptops — which looked more like drug packages than laptops — called his supervisor to take a look. He asked me: —What’s all this? —They’re laptops for a donation. —Do you have any documentation? I nodded and asked Roger for the donation letter that Lorenzo (Hahatay) had written in case something like this happened. The guard read the letter, it all checked out, and he let us pass. Second boss defeated. At the boarding gate, we managed to get all the luggage through as well. We only had a “backpack under the seat” allowance, and all the backpacks we carried exceeded the size limit (yes, the budget didn’t allow for much more). Third boss defeated. I’m writing these lines from 10 km above the ground, flying over some part of the Sahara. Now, when we arrive at the airport, we’ll face the final boss: customs. I’ll update later with the result. --- When we arrived at the airport, we passed through immigration without any issues, exchanged some euros for CFA francs, and then proceeded to customs. Roger went first without any problems. Then Jaume was asked to open the large suitcase. While his suitcase was being inspected, Joan and Aitor left with the other small suitcase. I stayed with Jaume and the police. The officer checked for a while; we gave him the donation letter. According to him, the letter didn’t have the customs stamp, and he recommended we keep that in mind for the next time. He let us through without any further issues. Final boss defeated. A little while later, Bachir, the taxi driver, picked us up and drove us to Gandiol. There, Pablo and Rober were waiting for us. We gave each other a big hug after almost a year without seeing each other. We settled into our rooms and went to sleep, as we were exhausted. ![taxi_bachir](images/taxi_bachir.png "The team in Bachir's taxi on the way to Gandiol") ================================================================================ ## Day -1: Setting everything up URL: http://sergiogimenez.com/posts/2025/senegal_travel_blog/day-1/ Date: 2025-01-17 Tags: senegal travel blog On Friday the 17th, we met in the afternoon at the university to pack the suitcases. We spent some time figuring out how to arrange the computers donated by Labdoo in the suitcases, deciding on the best layout, etc. We spent a couple of long hours preparing the luggage: packing the electronic equipment, taking care of all the last-minute details we might have missed... ![maletas](images/cerrando_maletas.jpeg "Cerrando maletas el día antes de salir") Once the suitcases were packed, Roger took them to his car to bring them directly to the airport the next day. ================================================================================ ## Hahatay Network Prize in IEEE CUNC Challenge 2024 URL: http://sergiogimenez.com/posts/2024/ieee-cunc-winners/ Date: 2024-11-28 Tags: ieee, cunc, award We are proud to announce that our team has won the Hahatay Network Prize in the IEEE CUNC Challenge. The IEEE CUNC Challenge is a competition that recognizes proof of concept and prototype solutions that address the challenges of the future internet in underserved areas. Our solution has been awarded with the "Honorable Mention" prize in the proof of concept category. ![ieee_certificate](images/IEEE-CTU2024-winners-certificate-Sergio-Gimenez_1.png) We would like to thank the IEEE CUNC Challenge organizers for this recognition and we look forward to continuing our work in this area. Please, find also below the presentation slides and the [final text](./files/Connected_the_unconnected_application_final.pdf) of the application. 📊 Key Resources: * [Presentation Slides](files/IEEE-CTU-Presentation-Hahatay-Network.odp) * [Full Application](files/Connected_the_unconnected_application_final.pdf) ================================================================================ ## What am I doing now? URL: http://sergiogimenez.com/now/ Date: 2024-09-22 _Last updated at {{< lastmod >}}._ - Pursuing a PhD with i2CAT and UPC on efficient and green 6G networks: [:six: 6G-RUPA](https://6grupa.com) - Currently on a [research stay at Boston University]({{< ref "/posts/2025/research-stay-at-bu" >}}) on 6G-RUPA and RINA (Sep-Dec 2025) :us: - Working as a Telecommunications Engineer at [i2CAT](https://i2cat.net) 🤓 - Module Development Group Leader for the Federation Manager at [ETSI's Open Operator Platform](https://oop.etsi.org/) - Developer/DevOps for [GÉANT](https://www.geant.org/) - Contributor to [OpenCAPIF](https://ocf.etsi.org/) - Participant in several Spanish and European research projects. - Since April 2026, also lecturing part-time at [Universitat Pompeu Fabra](https://www.upf.edu/) for the "Network Architecture" course in the 2nd year of the Bachelor's Degree in Engineering - President of [AUCOOP](https://aucoop.upc.edu), a UPC students organization doing IT-related cooperation projects - Maintaining [:senegal: hahatay.network](https://hahatay.network), a community network in Senegal with other volunteers - Starting a connectivity project in a school in Gochas, [Namibia :namibia:](https://foundawtion.org/archivos/5383) - Contributing to [eReuse.org](https://ereuse.org) :recycle: lifecycle management software for refurbished equipment - Besides nerdy stuff I really enjoy running, climbing :climbing:, making wine :wine_glass: (200L this year!), and [converting a 2006 van]({{< ref "/posts/2025/camper-history" >}}) for summer travels :bus: --- _[What is this page?][aboutnow]_. [aboutnow]: https://nownownow.com/about ================================================================================ ## A very brief introduction to RINA and its principles URL: http://sergiogimenez.com/posts/2022/rina_2_rina_and_its_principles/ Date: 2022-07-18 Tags: rina, tcp/ip In [the previous article](https://sergiogimenez.com/rina_1/) we talked about the flaws in the current network architecture. Before starting to break down how RINA improves the defects that the current architecture has, I would like to clarify something that I consider important. **RINA is not intended as a replacement for the current TCP/IP model**. RINA was born with the motivation to propose a new architecture to reach to where TCP/IP cannot. RINA can be incrementally deployed by interoperating with current technologies. You don't need a clean deployment as for example if you need with IPv6. That is, it can work in several different use cases (over an Ethernet network, over an IP network, etc.). ## Architecture Principles In general, RINA is based on the principle of **maximizing the invariants in the architecture**, so that the number of protocols on this one can be minimized. The following figure exemplifies this statement graphically: ![rina_architecture](./img/arch_protocols.png) *Abstract representation of the current network architecture and protocols versus the desired goal. Source: [RINA ETSI Report](https://www.etsi.org/deliver/etsi_gr/NGP/001_099/009/01.01.01_60/gr_NGP009v010101p.pdf)* What RINA tries, is to solve most of the complex problems within the architecture, that is, **all the issues that do not depend on the requirements of each network**. By solving those problems within the architecture, we will have fewer protocols and these will be more similar among them. ## What is "The Network"? As we have explained in the previous article, the network is nothing more than the channel that allows communication between applications (e.g. Skype, Mail, WhatsApp, etc.). Therefore, the network itself is a distributed application specialized in providing this communication channel between applications (ie, processes). In RINA, this channel is called DIF (Distributed IPC Facility), which means exactly what we have been saying: **an application that provides communication services between processes**. Let's do a little exercise to understand how the network is built. As a first approach for our model, we could have a single DIF that provides two applications with the ability to communicate: ![1_dif](./img/1_dif.png) *Representation of a DIF to provide IPC between two endpoints Source: Eduard Grasa, slides [Introduction to RINA](https://www.youtube.com/watch?v=1tB7Iy2Q3-o)* Now, Alice and Bob can speak to each other, but this is not fine at all. If we only have a DIF to provide communication to all the applications in the world, it would not work, ergo it is not scalable. But this is something that we can solve relatively easily. We need to isolate the different scopes in the networks: ![n_difs](./img/n_difs.png) *Representation of several DIFs to provide IPC between two endpoints. Source: Eduard Grasa, slides [Introduction to RINA](https://www.youtube.com/watch?v=1tB7Iy2Q3-o)* What we have in RINA then, are multiple DIFs that provide IPC to each other. At the end of the day, a DIF is just a distributed application. And how many DIFs have to be used in a network? Well, as many as the network designer deems appropriate for the use case that IPC is to be provided. For example, there will be a DIF (red) that will be above the physical level, which will accommodate the technology that modulates the information below (air, fiber, cable, etc.); or it may be interesting to have a segment of the metropolitan network (blue) further from the users, which adds more traffic to the flow. In the end, what we have is a more abstract and simpler architecture, since in a network there is only the same element repeated `N` times. With which, managing the network becomes easier, since only knowing how a DIF behaves and how it is related to another DIF (or application, because they interact in the same way), can be generalized to how the entire network interacts with all the elements that compose it. This is where Recursive in RINA comes from, since what you have is the same type of layer that is repeated and services are used from one layer to another in the same way that applications use services. It is important to emphasize that the different layers (different DIFs) do not have different functionalities, they only deal with providing communication services between processes in a scope. So, a DIF provides services for two applications to communicate, but… Can there be several applications using the services of the same DIF? Of course, in fact, more precisely, a DIF provides the communication services by allocating resources (memory in buffers, bandwidth capacity, etc.) for the different applications. Then, the applications request a communication flow from the DIF with specific requirements and some applications compete with others to obtain that flow. ## Inside a DIF And what exactly is inside a DIF? Within the DIFs, following the RINA philosophy, it is also intended to simplify their internal structure as much as possible (following the principle of maximizing invariances). The functions that a DIF performs are classified into three types: * Data transfer functions. * Data transfer control functions. * Layer management functions. To be able to carry out these functions, protocols are needed, just as it happens to us in the current architecture. But remember that we want to have the minimum protocols and we want to design them as simple as possible. To minimize the variability between protocols within the DIF to a minimum, what is done is to separate between **mechanism** and **policy**. Mechanisms are the **fixed** parts in a protocol. For example, the acknowledgment (ACK); which is a type of message used to find out if a packet has successfully arrived at its destination. Policy is the part of the protocol that changes. For example, **when** and **how** to send an ACK is a policy. And with this premise of separating between mechanism and policy, we find that only two protocols are enough to cover the three functions of the DIF: **EFCP** for data transfer and control, and **CDAP** for layer management. ## Naming and Addressing Without going into much detail, since [we have already talked about this in the other article](https://sergiogimenez.com/rina_1/), RINA proposes a naming scheme that facilitates mobility, simplifies traffic routing and provides multi-homing natively. We need applications to have a name, and applicatoins need to keep it regardless of where they are. Then, we have node addresses, which give us clues as to where they live. Finally, we have the point of attachment addresses, these addresses do tell us how to get to where the applications live. Below is a comparative table with the current naming system: | **Name** | **Indicates** | **Property** | RINA | IP | |------------------------- |--------------------- |-------------------------------------- |------ |------------------------ | | Name of the application | What? | Location independent | Yes | No | | Node address | Where? | Location dependent, path independent | Yes | No | | Point of attachment | How do I get there? | Path dependent | Yes | Yes, twice: IP and MAC | As we discussed earlier, we need applications to have a name, and to keep it regardless of where they are. Then we have node addresses, which give us clues as to where applications live. Finally, we have the point of attachment addresses, these addresses do tell us how to get to where the applications live. ## Final Recap If you have got it till the end, you will have realized that RINA provides a fairly abstract architecture, and consequently, the ultimate goal of RINA is to have a framework that allows you to develop protocols and thus be able to simplify networks in general. As I said at the beginning of the article, RINA can be applied in specific scopes, such as within datacenters. Being a relatively new technology, the idea is to start with very simple use cases and gradually move to larger and more complex use cases. Finally, if attach here some references that could might be interesting to extend RINA knowledge. * [Future Internet and RINA Architecture - EduTec&Cria](https://www.youtube.com/watch?v=1tB7Iy2Q3-o&t=2820s). The first is a talk, which has been used as a guide and reference to write these articles. In fact, these two articles could be considered as a synthesis/introduction of this talk. This talk explains in a very understandable and simple way what problems the current architecture has and how RINA can solve them. * [IRATI](https://irati.github.io/stack/) is an open source implementation of RINA that has a fairly comprehensive wiki and documentation on RINA. * [ETSI RINA Report](https://www.etsi.org/deliver/etsi_gr/NGP/001_099/009/01.01.01_60/gr_NGP009v010101p.pdf). This is the RINA standardization document in which all the technical details of RINA are explained in a more technical way. ================================================================================ ## Is TCP/IP broken? What is RINA and why it can solve the problems of the current architecture URL: http://sergiogimenez.com/posts/2022/rina_1_is_tcp_ip_broken/ Date: 2022-07-03 Tags: rina, tcp/ip Well, maybe Internet is not completely broken, but it does have several flaws. In fact, by being a little more rigorous and less alarmist with the title statement, we could say that the network architecture in which the Internet as we know it today is designed, can be improved. It may seem naive to say this, but I hope that by the end of this article you will understand the weaknesses of the current architecture and how we could improve it. But, let us start from the beginning. What is an **architecture**? We could define an architecture as a set of patterns and methodologies that allow designing elements with different requirements. Let's exemplify it. If we have in mind a church/cathedral, we can tell with relative ease, seeing the building, that it has a Gothic, Romanesque, classical architecture, etc. Although all the elements are buildings, each one has different characteristics. Therefore, **an architecture captures invariant and common patterns between different constructions independent of the requirements of each construction**. So we already have the concept of architecture defined, now we need the second: **network**. What is a network? After all, a network provides us with communication between two extremes, which from now on we will call endpoints. But what are these endpoints? These endpoints are ultimately applications (strictly speaking, process instances of the operating system). Therefore, a network is nothing more than a way to copy data in a distributed (and imperfect) way between two applications. This definition of network was very present at the beginning of communication networks, and in conclusion, it comes to say that **computer networks present inter-process communication services** (IPC). Well, we already have a more or less clear idea of ​​what a network architecture is. Now the question we could ask ourselves would be the following: What is the current network architecture? Answer is: **it is not formally defined**. According to our definition of architecture, the current model does not correspond to a formally and precisely defined architecture. What does exist are a series of rules that are fulfilled (more or less) and that work (more or less) and that there are problems that they do not contemplate, and then each use case must be solved independently. Let's take a closer look at what problems we have with the current "architecture". ![osi model](./img/osi_model.jpeg) *OSI architecture model (left, center) and Internet protocol suite model (left). Souce: [RINA ETSI REPORT](https://www.etsi.org/deliver/etsi_gr/NGP/001_099/009/01.01.01_60/gr_NGP009v010101p.pdf)* ## Problems ### Layering The current architecture leaves no room for new network protocols. There is a layer called "*network layer*" common throughout the internet above the link level. This implies that, for example, if a network wants to do non-IP routing, or hide internal routers of private networks from the public Internet, ad-hoc solutions must be used. The fact that specific solutions have to be used for each use case is a problem, because since it is something that is not contemplated in the common architecture, each network designer solves "his problems his way". The use case exposed before, where you want to do routing in a different way, can be solved with MPLS (Layer 2.5), but it can also be solved in other ways, for example in cellular networks there is GTP, or IP-tunneling protocols (packets IP within IP packets), etc. Ultimately, this section is intended to illustrate that because the architecture does not contemplate a common solution independent of network type, there are myriad disparate solutions. And in the end, this is solved in the way that is illustrated in the figure below. Something that a priori should be simple, with fixed layers, ends up becoming a reality in what is shown in the image below, where different protocols appear that are inserted between the different layers to be able to solve use cases that occur today and that architecture does not contemplate. If we had a well-defined and concrete architecture, we would not end up having a *macedonia* of protocols and specific solutions. ![layering](./img/layering.jpeg) *The Internet architecture model is constantly being extended to accommodate new use cases. Source: [RINA ETSI REPORT](https://www.etsi.org/deliver/etsi_gr/NGP/001_099/009/01.01.01_60/gr_NGP009v010101p.pdf)* ### Naming and Addressing Another problem that exists in the current architecture is how to identify different entities within a network. We have the **applications**, which are the **endpoints** of a network communication service. Let's see an example in the figure below. ![naming](./img/naming1.png) *Naming and Addressing in Current Architecture. Source: Eduard Grasa, slides [Introduction to RINA](https://www.youtube.com/watch?v=1tB7Iy2Q3-o) Applications do not have a separate name. To establish a TCP connection flow, we need the address where the application is located, as well as a port, which indicates the endpoint of the flow. Let's stop here for a moment. If we look at Alice's application address as [www.sergiogimenez.com:80](www.sergiogimenez.com:80), we see that this does not look like an IP address, and indeed requires DNS translation to convert it to an IP address. The DNS resolves the address before establishing the connection flow, but the DNS is an external system, not part of the network. The network doesn't understand application addresses, the network only understands that you are connecting one network interface (and one port) to another network interface (and another port). For example, if the network moves, the network has no idea that the same application is being instantiated elsewhere, then any management that needs to be done (such as re-routing traffic), cannot be done without a external element to the network (as is the case of the DNS). In conclusion: The fact that the network does not know the names of the applications is indeed an issue. ### Mobility As we have seen, the name of the application is not stable, and depends on the site where you are. A very simple example of the problems caused by this fact would be the following: I'm called myself Sergio at home, but that at work they called me something else, just for the simple fact of having moved. With networks, exactly this happens. If you move, your direction changes. And it must be so! Because the address must identify exactly where you are; but **the name of the application should be stable**, since it only indicates **who** you are and should not vary depending on **where** you are. But in the current model this does not happen. At the network layer (which deals with routing) there is only a single identifier: the IP address. Routers don't understand application names, only IP addresses. So if you want to be mobile on a network, you have to use... Guess what? More protocols. ### Multi-homing It may be the case that Alice has more than two network interfaces on her machine, that is, Alice can connect to one network or to more than one network. The problem here is that each interface must have a different IP address. So Alice's application has 2 addresses, since we have one address for each interface. Let's take an example, if Bob's app sends traffic to Alice's app, the network will route that traffic from `12.12.12.12` to `10.0.0.1`. What happens is that if `10.0.0.1` breaks, Bob's app has no way to send that traffic to Alice's app. The issue here is that Bob's app doesn't want to go to `10.0.0.1`, or `10.11.0.1`, **it wants to go to Alice's app**. ![naming2](./img/naming2.png) *The multi-homing problem. Source: Eduard Grasa, slides [Introduction to RINA](https://www.youtube.com/watch?v=1tB7Iy2Q3-o)* Of course, this is something that can be partially solved in the current model (*partially solved*, because the endpoints must participate in this solution, it is not the network itself that provides solutions). At this point, the reader already imagines how… more protocols (SHIM6, Multipath TCP, BGP…). However, if this had been thought of from the beginning and included in the architecture, a solution provided natively in the architecture could have been found for it. However, the solution to this problem is as trivial as shown in the figure below. ![naming3](./img/naming3.png) *Solution to the multi-homing problem. Source: Eduard Grasa, slides [Introduction to RINA](https://www.youtube.com/watch?v=1tB7Iy2Q3-o)* It would be enough that the architecture was designed with **addresses on the nodes**, not the interfaces. And then route traffic based on these node addresses. ## In Conclusion The current architecture, as we have been seeing, has defects: * In its structure. * In how protocols are designed: things in common between protocols are not rejected, they are all designed from scratch (although they perform very similar functions). * Names and addresses. As we have been seeing, it has all the multi-homing and mobility problems that we have mentioned. And we haven't talked about things that also would take us a while, such as the sockets API to program applications, security, network management, since the more protocols, the more complications when managing a network. Perhaps at this point, you might be thinking about how naive it can be to talk about "*how badly the Internet works*", but in reality, this information is reaching you thanks to the current architecture. And millions of things that work on this architecture and that no one 20 years ago thought could happen. But really, the things that have been mentioned are real defects that the architecture has and that can be improved. And from the will to try to improve all this, RINA appears. But this, we will talk about in detail in part 2 of this article. ================================================================================ ## Solving a Kaggle ML classification problem using XGBoost URL: http://sergiogimenez.com/posts/2020/kaggle_xgboost/ Date: 2020-01-27 Tags: machine learning, kaggle, xgboost, classification This post is about my first ever participation in a kaggle competition. The competition was organized by the Machine Learning techers of the MSc course I'm currently doing. To be honest, I had no idea about how to get through this kind of competition, but since it was a mandatory assignment and I had to do it, me and [my colleague](https://www.linkedin.com/in/gerard-castell-049a5912a/) really spent a lot of time trying to get the best possible score. All the details about the classification problem can be found [in kaggle](https://www.kaggle.com/c/anomaly-detection-in-4g-cellular-networks/), and the whole implementation of the model can be found [in this public repo](https://github.com/sergio-gimenez/anomaly-4G-detection). >**Disclaimer:** This post is not intended to show a rigurous and very formal approach of the problem solving, actually is intended to do the complete opposite. I will try to show how me and my colleague tackled the problem when knowing almost nothing in machine learning and how we obtained a score higher than 99%. For a more formal-ish approach of the work you [can take a look at the report we wrote](https://github.com/sergio-gimenez/anomaly-4G-detection/blob/master/MLEARN_Competition_Report.pdf). ## Summary Below, there is a summary of the whole pipeline. On the next blocks, we will dive deeply in all the modules shown. ![Summary pipeline breakdown](./img/competition_pipelin.png) # Pre-Processing ## The Dataset The dataset has been obtained from a real LTE deployment. During two weeks, different metrics were gathered from a set of 10 base stations, each having a different number of cells, every 15 minutes. The dataset is provided in the form of a csv file, where each row corresponds to a sample obtained from one particular cell at a certain time. Each data example contains the following features: - `Time` : hour of the day (in the format hh:mm) when the sample was generated. - `CellName`: text string used to uniquely identify the cell that generated the current sample. CellName is in the form xαLTE, where x identifies the base station, and α the cell within that base station (see the example in the right figure). - `PRBUsageUL` and `PRBUsageDL`: level of resource utilization in that cell measured as the portion of Physical Radio Blocks (PRB) that were in use (%) in the previous 15 minutes. Uplink (UL) and downlink (DL) are measured separately. - `meanThrDL` and `meanThrUL`: average carried traffic (in Mbps) during the past 15 minutes. Uplink (UL) and downlink (DL) are measured separately. - `maxThrDL` and `maxThrUL`: maximum carried traffic (in Mbps) measured in the last 15 minutes. Uplink (UL) and downlink (DL) are measured separately. - `meanUEDL` and `meanUEUL`: average number of user equipment (UE) devices that were simultaneously active during the last 15 minutes. Uplink (UL) and downlink (DL) are measured separately. - `maxUEDL` and `maxUEUL`: maximum number of user equipment (UE) devices that were simultaneously active during the last 15 minutes. Uplink (UL) and downlink (DL) are measured separately. `maxUE_UL+DL`: maximum number of user equipment (UE) devices that were active simultaneously in the last 15 minutes, regardless of UL and DL. - `Unusual`: labels for supervised learning. A value of 0 determines that the sample corresponds to normal operation, a value of 1 identifies unusual behavior. ``` python # Clone repository in order to get access locally to the datasets !rm -rf .git README.md !git clone https://github.com/sergio-gimenez/anomaly-4G-detection ``` ``` python train = pd.read_csv('anomaly-4G-detection/ML-MATT-CompetitionQT2021_train.csv', sep=';') test = pd.read_csv('anomaly-4G-detection/ML-MATT-CompetitionQT2021_test.xls', sep=';' ) ``` ``` python # Separate labels from data X = train.drop('Unusual', axis='columns') y = train['Unusual'] # We split the data into training and validation subsets (80% and 20%) in # order to validate our training X_train, X_validation, y_train, y_validation = train_test_split(X, y, train_size=0.8, random_state=1, stratify = y) X_test = test ``` ## Using non-quantitative features First thing to do regarding data pre-processing is to make sure all features are ready to be used, specially the non numerical ones: `Time` and `CellName`. `Time` has relevant correlation with the maximum traffic hours, although the day is not included in the date, still is a relevant enough feature. In order to make `Time` ready to use, there are several approaches. However, the chosen one has been to convert the time (minutes) to radians and split them up into two features, one applying a cosine and the other with sine. Regarding `CellName`, a simple mapping 1:1 with a numerical identifier for each cell name has been carried out. ``` python #Refactor time feature to minuts and cellName to unique identifier 1:1 def getTimeInMinutes(x): hh, mm = x.split(":") return int(hh)* 60 + int(mm) def createCellNameDictionary(data): cellList = [] for i in data["CellName"]: cellList.append(i) cellList = set(cellList) cellDict = {} for idx, value in enumerate(cellList): cellDict[value]=idx return cellDict def refactorFeaturesDataframe(data): #data["Time"] = data["Time"].apply(lambda x: getTimeInMinutes(x)) data["TimeCos"] = data["Time"].apply(lambda x: math.cos(getTimeInMinutes(x)*math.pi/(12*60))) data["TimeSin"] = data["Time"].apply(lambda x: math.sin(getTimeInMinutes(x)*math.pi/(12*60))) del data["Time"] cellNameDict = createCellNameDictionary(data); data["CellName"] = data["CellName"].apply(lambda x: cellNameDict[x]) return data ``` ``` python #Refactoring data from features to useful values X_train_df = refactorFeaturesDataframe(X_train) X_train = X_train_df.to_numpy() y_train = y_train.to_numpy() X_validation = refactorFeaturesDataframe(X_validation).to_numpy() y_validation = y_validation.to_numpy() X_test = refactorFeaturesDataframe(test).to_numpy() ``` ## Data Visualisation ### PCA Regarding PCA, given the number of new features desired, it tries to provide the projection using the correlation between some dimensions and keeping the maximum amount of information about the original data distribution. As can be seen in the image below, there are not clear clusters nor a clear defined pattern. Usual and unusual samples are mixed in many ways, fact that constraints the classifier that is going to be used, e.g linear classifiers can be directly excluded. ``` python pca = PCA(n_components=3) # Reduce to k=3 dimensions scaler = StandardScaler() X_norm = scaler.fit_transform(X_train) X_reduce = pca.fit_transform(X_norm) colors=['green' if l==0 else 'red' for l in y_train] fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(X_reduce[:,0], X_reduce[:, 1], X_reduce[:, 2], s=4, alpha=1,color=colors) plt.show() ``` ![Normalized PCA reduction to 3 features of the whole dataset](./img/pca_pre_ps.png) ### t-SNE In order to go through a different approach, a non-linear reduction such as t-SNE has been tried out. t-SNE is an unsupervised method that minimizes the divergence between a distribution that measures pairwise similarities of the input and a distribution that measures the similarities of the corresponding low-dimensional points in the embedding. As it can be observed in the figure below, t-SNE has built a set of separable clusters but with samples of different classes mixed in the same clusters, without a clear visual pattern. ``` python from sklearn.manifold import TSNE tsne = TSNE(n_components=2, verbose=1, perplexity=40, n_iter=300) tsne_results = tsne.fit_transform(X_train) df_subset={} df_subset['tsne-2d-one'] = tsne_results[:,0] df_subset['tsne-2d-two'] = tsne_results[:,1] df_subset['Labels'] = y_train plt.figure(figsize=(16,10)) sns.scatterplot( x="tsne-2d-one", y="tsne-2d-two", hue="Labels", palette=sns.color_palette("hls", 2), data=df_subset, legend="full", alpha=0.3 ) ``` ![Normalized t-SNE reduction in 2 dimension of the whole dataset](./img/tsne.png) ## Plain Vanilla Classifiers Due to the dataset nature, a linear classifier will not achieve an acceptable performance. A neural network did not work either due to the small dataset. A SVM with a Gaussian kernel was tested as well but, the results were not as good as the ones obtained by decision tree. Some results applying plain vanilla classifiers without any parameter tuning are shown in the table below. As it can be seen, the best performance is obtained with a plain vanilla decision tree. Therefore, we decided to dive deeply into that approach. | Classifier | Train Err. | Valdiation Err. | Accuracy | | ------------- | ---------- | :-------------: | -------- | | Decision Tree | 0 | 0.03 | 0.96 | | SVM (rbf) | 0.26 | 0.26 | 0.73 | | MLP | 0.27 | 0.27 | 0.73 | # Solving the Classification Problem ## XGBoost. Training the classifier One of the widely ensembled methods are gradient boosted decision trees. In a summarized way, boosting takes an iterative approach for training models. It trains models in succession, with each new model being trained to correct the errors made by the previous ones. A widely used implementation of the training described before is `XGBoost`. `XGBoost` is an optimized distributed gradient boosting library designed to be highly efficient, flexible and portable. All the necessary information about `XGBoost` can be found in the [XGBoost Documentation Page](https://xgboost.readthedocs.io/en/latest/) ----- **Note:** If you want to avoid the training process, and use the pre trained model, make sure the `xgb_model.joblib` is loaded in `anomaly-4G-detection/xgb_model.joblib`. If you want to go through the training process there are two ways: - __Fast way:__ The most suitable parameters we have found are already hardcoded in the pipe and no training process is involved at all in this part. - __Whole training process:__ If you want to do the whole training process by yourself comment the parameters in the pipe, comment clf_GS = RandomizedSearchCV(estimator=pipe, param_distributions=parameters, n_jobs=10, verbose=1, cv=[(slice(None), slice(None))], n_iter= 1) and uncomment ``` clf_GS = RandomizedSearchCV(estimator=pipe, param_distributions=parameters, n_jobs=10, verbose=1, cv=5, n_iter= 500) ``` ----- ``` python from xgboost import XGBClassifier, plot_importance from joblib import dump, load from google.colab import files from scipy.stats import uniform, randint try: clf_GS = load('anomaly-4G-detection/xgb_model.joblib') training = False except: training = True pipe = Pipeline(steps=[('std_slc', StandardScaler()), ('xgb_clf', XGBClassifier(random_state=1, scale_pos_weight=7, colsample_bytree= 0.053381469489678104, eta= 0.20289460663803338, gamma= 0.88723107873764, learning_rate= 0.15455380920536027, max_depth= 26, min_child_weight= 1, n_estimators= 565, subsample= 0.9738168894035317))]) parameters = { # 'xgb_clf__eta' : uniform(0.2, 0.35), # "xgb_clf__colsample_bytree": uniform(0.05, 0.2), # "xgb_clf__min_child_weight": randint(1, 5), # "xgb_clf__gamma": uniform(0.35, 0.6), # "xgb_clf__learning_rate": uniform(0.1, 0.3), # default 0.1 # "xgb_clf__max_depth": randint(10, 30), # default 3 # "xgb_clf__n_estimators": randint(500, 1000), # default 100 # "xgb_clf__subsample": uniform(0.6, 0.99) } #clf_GS = RandomizedSearchCV(estimator=pipe, param_distributions=parameters, n_jobs=10, verbose=1, cv=5, n_iter= 500) clf_GS = RandomizedSearchCV(estimator=pipe, param_distributions=parameters, n_jobs=10, verbose=1, cv=[(slice(None), slice(None))], n_iter= 1) clf_GS.fit(X_train, y_train) ``` ## Select features from model The last experiment that leads to a considerable enhancement is to take advantage of the features selected by the model to perform a feature reduction. Take into account that `XGBoost`, in essence, is a set of ensemble decision trees, so we could evaluate its features importance once the model is trained. Evaluating that data, we get the optimized threshold to reduce the accuracy using just 3 features (check next code block). The 'SelectFromModel' module allowed us to pass the thresholds to the already trained model and, once the best threshold is validated, transform the datasets using just the features that pass the threshold. This final experiment let us reduce the recall from 44 errors in validation to 14. In the test set we achieved a score of 99.83%, which was our best performance in the challenge. ``` python from sklearn.feature_selection import SelectFromModel if training: treshold_train_error = [] treshold_val_error = [] thresholds = np.sort(clf_GS.best_estimator_.named_steps["xgb_clf"].feature_importances_) current_error = 100.0 best_th = 0 for thresh in thresholds: # Do a feature reduction with relevant feature new_X_train = X_train selection = SelectFromModel(clf_GS.best_estimator_.named_steps["xgb_clf"], threshold=thresh, prefit=True) select_X_train = selection.transform(new_X_train) # Fit the classifier with the reduced dataset selection_model = RandomizedSearchCV(estimator=pipe, param_distributions=parameters, n_jobs=10, verbose=1, cv=[(slice(None), slice(None))], n_iter= 1) selection_model.fit(select_X_train, y_train) # Evaluate predictions with the dataset trained with the feature reduction pred_train = selection_model.predict(select_X_train) select_X_val = selection.transform(X_validation) pred_val = selection_model.predict(select_X_val) """" Classification report --------------------- """ train_error = 1. - accuracy_score(y_train, pred_train) train_cmat = confusion_matrix(y_train, pred_train) val_error = 1. - accuracy_score(y_validation, pred_val) val_cmat = confusion_matrix(y_validation, pred_val) treshold_train_error.append(train_error) treshold_val_error.append(val_error) print("\nThreshold of value %f" % thresh) print("--------------------------------") print('\ntrain error: %f ' % train_error) print('train confusion matrix:') print(train_cmat) print('\ntest error: %f ' % val_error) print('test confusion matrix:') print(val_cmat) print("\n") if val_error < current_error: current_error = val_error best_th = thresh best_transformation = select_X_train ``` Train and predict the data with the best feature reduction ``` python from sklearn.feature_selection import SelectFromModel # Get the best estimator we found in the previous block new_X_train = X_train selection = SelectFromModel(clf_GS.best_estimator_.named_steps["xgb_clf"], threshold=best_th , prefit=True) select_X_train = selection.transform(new_X_train) # Train the classifier with the best feature reduction selection_model = RandomizedSearchCV(estimator=pipe, param_distributions=parameters, n_jobs=10, verbose=1, cv=[(slice(None), slice(None))], n_iter= 1) selection_model.fit(select_X_train, y_train) # Save the model in a file and download locally. dump(clf_GS, 'xgb_model.joblib') files.download('xgb_model.joblib') pred_train = selection_model.predict(select_X_train) select_X_val = selection.transform(X_validation) pred_val = selection_model.predict(select_X_val) train_error = 1. - accuracy_score(y_train, pred_train) train_cmat = confusion_matrix(y_train, pred_train) val_error = 1. - accuracy_score(y_validation, pred_val) val_cmat = confusion_matrix(y_validation, pred_val) """" Classification report --------------------- """ print("\nThreshold of value %f" % thresh) print("--------------------------------") print('\ntrain error: %f ' % train_error) print('train confusion matrix:') print(train_cmat) print('\ntest error: %f ' % val_error) print('test confusion matrix:') print(val_cmat) print("\n") print("TRAINING\n" + classification_report(y_train, pred_train)) print("\nTESTING\n" + classification_report(y_validation, pred_val)) ``` And the results of the best estimator: ```source Threshold of value 0.462643 -------------------------------- train error: 0.000034 train confusion matrix: [[21376 1] [ 0 8146]] test error: 0.002439 test confusion matrix: [[5340 4] [ 14 2023]] TRAINING precision recall f1-score support 0 1.00 1.00 1.00 21377 1 1.00 1.00 1.00 8146 accuracy 1.00 29523 macro avg 1.00 1.00 1.00 29523 weighted avg 1.00 1.00 1.00 29523 TESTING precision recall f1-score support 0 1.00 1.00 1.00 5344 1 1.00 0.99 1.00 2037 accuracy 1.00 7381 macro avg 1.00 1.00 1.00 7381 weighted avg 1.00 1.00 1.00 7381 ``` ### Insightful data visualization Here, there is some data visualisation in order to see and understand why and what improved by performing the feature reduction. #### Evolution of the error for different thresholds This plot shows the improvement we gained by implementing the '`Feature Selection`' module. ``` python fig, ax = plt.subplots() ax.plot(thresholds, treshold_train_error, label='training') ax.plot(thresholds, treshold_val_error, label='validation') ax.set(xlabel='Threshold', ylabel='Error') ax.legend() plt.title('Evolution of the error for different thresholds') plt.show() ``` ![Loss vs threshold selection on feature reduction](./img/error_vs_threshold.png) #### Best performance feature reduction Our best feature reduction has 3 features , so then we can plot the resulting data set. ``` python colors=['green' if l==0 else 'red' for l in y_train] fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(best_transformation[:,0], best_transformation[:, 1], best_transformation[:, 2], s=4, alpha=1,color=colors) plt.title('Best-Performance Feature Reduction') plt.show() ``` ![Best-Performance Feature Reduction](./img/feature_reduction.png) #### Feature importance In this plot, is shown the features that are more relevant to `XGBoost` when it comes to classify. ``` python feature_importances = clf_GS.best_estimator_.named_steps["xgb_clf"].feature_importances_ columns = X_train_df.columns fig = plt.figure() plt.bar(np.arange(14) , feature_importances, align='center', alpha=0.5) plt.xticks(np.arange(14), columns, rotation='vertical') plt.ylabel('Normalized Importance') plt.title('Feature Importance') plt.show() ``` ![Feature Importance](./img/feature_importances.png) # Conclusions During this research, we have explored a vast amount of possible classifiers and techniques to deal with the binary classification problem exposed in this report. Among those all classifiers, XGBoost has resulted to be the proper one to perform this task, as other related resources suggested. # References Some nice references we checked in order to solve the problem: - [XGBoost Documentation](https://xgboost.readthedocs.io/en/latest/) - [How to Use XGBoost for Time Series Forecasting](https://machinelearningmastery.com/xgboost-for-time-series-forecasting/) - [XGBoost model](https://xgboost.readthedocs.io/en/latest/tutorials/model.html) - [Python Hyperparameter Optimization for XGBClassifier using RandomizedSearchCV](https://stackoverflow.com/questions/43927725/python-hyperparameter-optimization-for-xgbclassifier-using-randomizedsearchcv) - [A Beginner’s guide to XGBoost](https://towardsdatascience.com/a-beginners-guide-to-xgboost-87f5d4c30ed7) - [The proper way to use Machine Learning metrics](https://towardsdatascience.com/the-proper-way-to-use-machine-learning-metrics-4803247a2578) - [XGBoost and Imbalanced Classes: Predicting Hotel Cancellations](https://towardsdatascience.com/boosting-techniques-in-python-predicting-hotel-cancellations-62b7a76ffa6c) ================================================================================ ## URL: http://sergiogimenez.com/about/ My name is Sergio Giménez, I'm from Barcelona. However, currently I live between Barcelona and Teruel, a beautiful small city located in the so called "empty spain". I have both a bachelor and master's degree in Telecommunications Engineering from Universitat Politècnica de Catalunya. Currently I'm pursuing a PhD in the Compute Architecture Deparment. My research is focused on the development of new algorithms and protocols for the next generation of mobile networks, we call it [6G-RUPA][6grupa]. At my job I work as a researcher 🧑‍🎓 in the Software Networks area at the [i2cat Foundation][i2cat], a non-profit research and innovation center. Right now I'm leading the Federation Manager Module Development Group within [ETSI's Open Operator Platform (OpenOP)][openop], and I also teach the "Network Architecture" course part-time at [Universitat Pompeu Fabra][upf]. You can see my research in my [Google Scholar profile](https://scholar.google.com/citations?user=8Z6J9QoAAAAJ&hl=en). I'm also leading a volunteer-driven community network in [Hahatay][hahatay], [Gandiol Senegal](gandiol) :senegal:. We are building a community network to provide internet access to the local population. You can learn more about the project at [hahatay.network](https://hahatay.network). Recently, I started contributing to [eReuse.org][ereuse] :recycle:, a non-profit organization that aims to reduce electronic waste by promoting the reuse of electronic devices. All in all, I'm interested in different subjects such as software engineering, networks, distributed systems and privacy in general. Besides being a **massive nerd** I also have several hobbies: I love hiking :hiking_boot:, climbing :climbing:, travelling :airplane:, playing music :guitar: and reading :book:. My mother comes from a little tiny village in the mountains of Teruel, called El Cuervo :black_bird: so I go there often a lot to visit my family and enjoy the nature. I'm also making my own wine this year :wine_glass:. So, this is my portfolio and my blog. I wish you could learn something from here. If you want to stay in touch, the easiest is that you drop me an email [here](mailto:hi@sergiogimenez.com). [upc]: http://upc.edu [ac]: https://www.ac.upc.edu/en [i2cat]: https://i2cat.net [openop]: https://oop.etsi.org [upf]: https://www.upf.edu/ [6grupa]: https://6grupa.com [hahatay]: https://hahatay.org [gandiol]: https://maps.app.goo.gl/CxSkTdfESH8opv7E6 [bsky]: https://bsky.app/profile/sergio-gimenez.bsky.social [mastodon]: https://mastodon.social/@sergiogimenez [ereuse]: https://ereuse.org ================================================================================ ## URL: http://sergiogimenez.com/projects/ # My Projects and Contributions This page is a curated overview of the projects I build, maintain, or contribute to. The rest of this page adds context about the longer-term initiatives and communities behind that work. ## Software Projects These are the software projects and software initiatives that best represent what I am building and maintaining right now.
Project Description Role References
OpenOP Federation Manager The federation layer of ETSI's Open Operator Platform, an open-source operator platform for federating networks, testbeds, and service capabilities. Module Development Group Leader for the Federation Manager, responsible for technical roadmap and architectural integrity. OpenOP
Docs
Code
LEOPath A user-friendly, extensible Python-based simulator for analyzing routing algorithms in LEO satellite constellations. Maintainer and lead developer at i2CAT. GitHub
PyPI
AUCOOP-Mint A lightweight, no-nonsense, Windows-like OS for non-tech users with low-end refurbished hardware in mind. Contributor and maintainer for AUCOOP's refurbished-laptop software stack. GitHub
Docs
Community-Network-Handbook A field guide to build community networks from scratch. Contributor and editor for AUCOOP's community-network deployment documentation. GitHub
Site
PLMN-GraphSim Julia-based discrete event simulator that works over network graphs from national-grade mobile network operators. Contributor and researcher working on 6G network simulation and experimentation. GitHub
Docs
opencode-sessions Small CLI to search and reopen OpenCode sessions across all local projects. Personal utility I built to speed up local AI-assisted development workflows. GitHub
sergio-setup Personal workstation bootstrap scripts. My reproducible Linux setup for dev tools, shell, editor, keyboard, and sync services. GitHub
## Work Around The Software These are the longer-term initiatives and communities where I participate that shape a lot of the software work above.
Logo Title Description Role References
Hahatay Network Logo Hahatay Network A volunteer-driven community network in rural Senegal. Started in 2021. Today I lead and support much of the technical work. Site
GitHub
6G-RUPA Logo 6G-RUPA Research on improving future mobile networks using recursive architectures. This is the core topic of my PhD and a recurring theme in several simulators above. Site
AUCOOP Logo AUCOOP UPC student association focused on cooperation projects related to IT. Actively involved since 2017. Current president since 2025. Site
eReuse Logo eReuse Open-source lifecycle management software for refurbishing, traceability, wiping, and diagnostics. Contributor to the eReuse software ecosystem around refurbished devices. Site
Labdoo Logo Labdoo A volunteer network that provides refurbished laptops to schools in need. Hub manager at i2CAT and AUCOOP, contributing to projects in Senegal, Namibia, and Pakistan. Site
## Other Code Projects Smaller software projects I built in the past to learn, experiment, or scratch a specific itch.
Title Description References
GitHub wiki to Hugo A project that converts pages from a GitHub wiki into Hugo articles. GitHub
Python Scaffolding A Python scaffolding project. GitHub
Anomaly 4G Detection A project for detecting anomalies in 4G networks. GitHub
Blockfunding A blockchain-based crowdfunding platform. GitHub
## Open Source Software I Use and Support I am a strong believer in open source software, so I have allocated a few bucks every month to support some of the projects that I use almost everyday and would be hard to live without them.
Title Description References
Graphene OS De-googled, privacy friendly Android OS Site
Betterbird My day-to-day mail client, calendar aggregator and matrix client Site
Logseq A privacy-first, open-source knowledge base Site
Debian My main Linux Distro since 2019 Site
Bitwarden My password manager of choice Site
OpenWISP Open-source network management system for managing network infrastructure Site
## Non-Tech Projects Here is a list about non-tech projects I'm involved to. I believe that technology can be used to improve the world, but it is not the only way to do so. I am involved in several non-tech projects that aim to make a difference in the world.
Title Description
Campervan Conversion Converting my old Citroen Jumpy from 2006 into a functional campervan for traveling around Spain and Europe in Summer, and attending festivals.
Winemaking Making my own wine from grapes grown by my family.
================================================================================ ## URL: http://sergiogimenez.com/research/ # Publications *Last updated: May 25, 2026* ## 2025 - [**Unified Framework for Dynamic Traffic Management in Integrated 6G Terrestrial and Non-Terrestrial Networks**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:4TOpqqG69KYC) *M Mosahebfard, A Cárdenas, S Giménez-Antón, L Tomaszewski* Published in 2025. - [**Extending Intent-Powered Network Management with LMs in B5G Infrastructures**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:ufrVoPGSRksC) *CC González, S Giménez-Antón, M Tarzán-Lorente, H Chergui, ...* Published in 2025. - [**Assessing the impacts of computer reuse for digital inclusion from product information**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:YOwf2qJgpHMC) *M Roura, L Navarro, R Meseguer, S Giménez* Published in 2025. - [**Identity management for frameworks managing northbound APIs of future networks**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:7PzlFSSx8tAC) *E O’Brien, BDC Paulo, A Martin, MS Siddiqui, S Giménez-Antón* Published in 2025. - [**Toward Adaptive and High-Performance XR Services via Network Programmability and Monitoring**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:LkGwnXOMwfcC) *C Fernández-Martínez, S Giménez-Antón, AA AbdelNabi, CC Parra, ...* Published in 2025. ## 2024 - [**Progressive adoption of RINA in IoT networks: Enhancing scalability and network management via SDN integration**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:W7OEmFMy1HYC) *D Sarabia-Jácome, S Giménez-Antón, A Liatifis, E Grasa, M Catalán, ...* Published in 2024. - [**6G-RUPA: A flexible, scalable, and energy-efficient user plane architecture for next-generation mobile networks**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:YsMSGLbcyi4C) *S Giménez-Antón, E Grasa, J Perelló, A Cárdenas* Published in 2024. - [**Position paper: On the application of recursive inter-network architecture to the future quantum-enabled Internet**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:eQOLeE2rZwMC) *J Jordán-Parra, S Giménez-Antón, E Carmona-Cejudo, M Garcia-Romero, ...* Published in 2024. ## 2023 - [**Open-VERSO: a vision of 5G experimentation infrastructures, hurdles and challenges**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:Tyk-4Ss8FVUC) *A Martin, P Losada, C Fernández, M Zorrilla, Z Fernandez, A Gabilondo, ...* Published in 2023. ## 2022 - [**Application of multi-pronged monitoring and intent-based networking to verticals in self-organising networks**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:UeHWp8X0CEIC) *C Fernández, A Cárdenas, S Giménez, J Uriol, M Serón, ...* Published in 2022. - [**Rina-based virtual networking solution for distributed vnfs: Prototype and benchmarking**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:2osOgNQ5qMEC) *SG Antón, E Grasa, C Fernández, MS Siddiqui* Published in 2022. - [**Solutions for traffic isolation in 5G infrastructures using network slicing techniques**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:qjMakFHDy7sC) *Z Fernández, Á Gabilondo, Á Vázquez-Rodríguez, C Giraldo-Rodríguez, ...* Published in 2022. - [**Prototype and benchmark of a RINA-based virtual networking solution for Virtual Network Functions (VNFs)**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:9yKSN-GCB0IC) *S Giménez Antón* Published in 2022. - [**Design, implementation and benchmark of a RINA-based virtual networking solution for distributed VNFs**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:IWHjjKOFINEC) *SG Antón* Published in 2022. ## 2020 - [**A P4-enabled RINA interior router for software-defined data centers**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:u-x6o8ySG0sC) *C Fernández, S Giménez, E Grasa, S Bunch* Published in 2020. - [**A Proof of Concept implementation of a RINA interior router using P4-enabled software targets**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:u5HHmVD_uO8C) *S Gimenez, E Grasa, S Bunch* Published in 2020. - [**Development of a low-cost prototype to evaluate the performance of Transdermal Optical Links**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:Y0pCki6q_DkC) *SG Antón* Published in 2020. - [**Development of a low-cost prototype to evaluate the performance of Transdermal Optical Links**](https://scholar.google.comhttps://scholar.google.com/citations?view_op=view_citation&hl=es&user=o9sbhDUAAAAJ&citation_for_view=o9sbhDUAAAAJ:_FxGoFyzp5QC) *S Giménez Antón* Published in 2020. ================================================================================ ## CV URL: http://sergiogimenez.com/cv/