Thursday, May 1, 2025

Lando Ndasingwa

 

Landoald 'Lando' Ndasingwa (died 7 April 1994) was a Rwandan politician and businessman. He was killed on the first day of the Rwandan genocide.



Life

edit
Hotel Chez Lando

Ndasingwa founded the hotel Chez Lando in the 1980s with his Canadian wife Hélène.[3] Following Ndasingwa's death, the hotel was taken over by his sister Anne-Marie Kantengwa.[4]

Educated at the Collège Saint-André of Kigali, the Université Nationale du Rwanda at Butare, Université Laval at Quebec City, McGill University, and Université de Montréal, Ndasingwa was a former professor at the Université Nationale du Rwanda and ethnic Tutsi. As a politician, he was the leader and vice president of the moderate Liberal Party and was granted the portfolio of Minister of Labour and Social Affairs in the Habyarimana transitional government put in place after the Arusha Accords. He was the only Tutsi member of the transitional government.[2]

On February 17, 1994, UNAMIR commander Roméo Dallaire received information of a plot to assassinate Ndasingwa and Joseph Kavaruganda, both prominent political moderates. In his book Shake Hands with the Devil, Dallaire claims that he informed them of this plot, and neither were surprised. As an outspoken and well-known public figure, Ndasingwa was the frequent target of attacks on propaganda radio station RTLM.[5]

Death

edit

On April 7, 1994 , Ndasingwa and his Canadian wife, Hélène Pinski, both graduates of the Université de Montréal, were abducted from their house along with their two children, Malaika (age 17) and Patrick (age 15), and Ndasingwa's mother by the government's Presidential Guard, despite being under UNAMIR protection. All were subsequently killed the same day as the assassination of Juvénal Habyarimana and Cyprien Ntaryamira. During his final moments, he and his family requested UNAMIR troops for protection as the presidential guard assaulted their home, his final words being "It's too late."[6][5][1]

One of his sisters, Louise Mushikiwabo, became much later (December 2009) Minister of Foreign Affairs and Cooperation in Paul Kagame's government, and, then (October, 2018), Secretary General of the Organisation internationale de la Francophonie.[7][2]

References

edit
  1. ^ 
    Jump up to:
  2. ^ 
    Jump up to:
    a b c d Bartrop, Paul, ed. (2012). A Biographical Encyclopedia of Contemporary Genocide: Portraits of Evil and Good. ABC-CLIO. ISBN 9780313386794.
  3. ^ "Chez Lando fire causes minimal damage | the Rwanda Focus". Archived from the original on 2016-10-22. Retrieved 2016-10-18.
  4. ^ "the Institute for Economic Empowerment of Women – Anne-Marie Kantengwa". www.ieew.org. Archived from the original on 2017-02-02. Retrieved 2018-06-25.
  5. ^ 
    Jump up to:
    a b Off, Carol (2010). The Lion, the Fox and the Eagle. Random House of Canada. pp. 51–52. ISBN 9780307370778.
  6. ^ "Interviews - Colonel Luc Marchal | the Triumph of Evil | FRONTLINE | PBS". PBS.
  7. ^ Mushikiwabo's Autobiography on the site crimesofwar.org Archived 

0 Comments:

Post a Comment

Comment here

Subscribe to Post Comments [Atom]

<< Home

.

Nzayisenga Adrien

Rwanda • Africa • History • Business • Technology • Knowledge

Page Views
0
Visitors
0
AdSense Revenue
Check AdSense

Support Nzayisenga Adrien

Ushobora gushyigikira ibikorwa byacu by'ubushakashatsi, ubumenyi, amateka n'itangazamakuru.

Support / Pay

Uko system ikora

Abasomyi basura blog → Google igatanga ads → abantu bareba cyangwa bagakanda ads mu buryo busanzwe → AdSense ikabara amafaranga → Google ikishyura konti yawe hakurikijwe payment settings za AdSense.

Ntukande ku matangazo yawe kandi ntusabe abandi kuyakandaho. Clicks zigomba kuba genuine.

. Rwanda Nziza Ngobyi Iduhetse | ADFID TV | Nzayisenga Adrien ADFID Africa | Digital Library & AI Content Creator

ADFID Africa

African knowledge, digital publishing and AI-powered content creation in one platform.

🤖 AI Content Creator

Create articles, YouTube scripts, Shorts, Facebook posts and SEO content.

📚 Digital Library

Store and manage your African books, research and educational resources.

📺 ADFID TV

Transform written articles into video-ready scripts.

💰 Monetization

Prepare your platform for advertising, subscriptions and reader support.

🤖 ADFID TV AI Content Creator

Create multiple content formats from one article.

📚 ADFID Africa Digital Library

📤 Upload E-Book

📊 ADFID Dashboard

Books

0

Articles Created

0

AI Generations

0

Platform Status

ONLINE

System Information

This running version stores demo data in your browser using localStorage.

For a production platform, connect this interface to a real backend, database, authentication system and AI API.

❤️ Support ADFID Africa

Support Knowledge & African Digital Content

Your support can help develop educational materials, African history resources, digital books and media content.


Email: nayisengadrianos@gmail.com

Mobile: +250 784 296 338

require("dotenv").config(); const express = require("express"); const multer = require("multer"); const path = require("path"); const crypto = require("crypto"); const { createClient } = require("@supabase/supabase-js"); const app = express(); const PORT = process.env.PORT || 3000; const SUPABASE_URL = process.env.SUPABASE_URL; const SUPABASE_SERVICE_KEY = process.env.SUPABASE_SERVICE_KEY; const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD; if (!SUPABASE_URL || !SUPABASE_SERVICE_KEY || !ADMIN_PASSWORD) { console.error("Missing required environment variables."); process.exit(1); } const supabase = createClient( SUPABASE_URL, SUPABASE_SERVICE_KEY, { auth: { autoRefreshToken: false, persistSession: false } } ); app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(express.static(path.join(__dirname, "public"))); const upload = multer({ storage: multer.memoryStorage(), limits: { fileSize: 100 * 1024 * 1024 }, fileFilter: (req, file, cb) => { const extension = path.extname(file.originalname).toLowerCase(); if ( extension !== ".pdf" && file.mimetype !== "application/pdf" ) { return cb(new Error("Only PDF files are allowed.")); } cb(null, true); } }); function checkAdmin(req, res, next) { const password = req.headers["x-admin-password"]; if (!password || password !== ADMIN_PASSWORD) { return res.status(401).json({ error: "Unauthorized" }); } next(); } function cleanFileName(name) { return name .replace(/[^a-zA-Z0-9._-]/g, "-") .replace(/-+/g, "-") .toLowerCase(); } /* GET BOOKS */ app.get("/api/books", async (req, res) => { try { const search = (req.query.search || "").trim(); let query = supabase .from("books") .select("*") .order("created_at", { ascending: false }); if (search) { query = query.or( `title.ilike.%${search}%,author.ilike.%${search}%,category.ilike.%${search}%` ); } const { data, error } = await query; if (error) { throw error; } res.json(data || []); } catch (error) { console.error(error); res.status(500).json({ error: "Unable to load books." }); } }); /* UPLOAD BOOK */ app.post( "/api/books", checkAdmin, upload.single("pdf"), async (req, res) => { try { if (!req.file) { return res.status(400).json({ error: "Please select a PDF file." }); } const title = (req.body.title || "").trim(); const author = (req.body.author || "").trim(); const description = (req.body.description || "").trim(); const category = (req.body.category || "General").trim(); if (!title || !author) { return res.status(400).json({ error: "Title and author are required." }); } const unique = crypto.randomBytes(8).toString("hex"); const filename = `${Date.now()}-${unique}-${cleanFileName(req.file.originalname)}`; const storagePath = `pdfs/${filename}`; /* Upload PDF to Supabase Storage */ const { error: uploadError } = await supabase.storage .from("books") .upload( storagePath, req.file.buffer, { contentType: "application/pdf", upsert: false } ); if (uploadError) { throw uploadError; } /* Get public PDF URL */ const { data: publicData } = supabase.storage .from("books") .getPublicUrl(storagePath); const pdfUrl = publicData.publicUrl; /* Save book information */ const { data, error } = await supabase .from("books") .insert({ title, author, description, category, pdf_path: storagePath, pdf_url: pdfUrl, downloads: 0 }) .select() .single(); if (error) { throw error; } res.json({ success: true, message: "Book uploaded successfully.", book: data }); } catch (error) { console.error(error); res.status(500).json({ error: error.message || "Book upload failed." }); } } ); /* DELETE BOOK */ app.delete( "/api/books/:id", checkAdmin, async (req, res) => { try { const id = req.params.id; const { data: book, error: findError } = await supabase .from("books") .select("*") .eq("id", id) .single(); if (findError) { throw findError; } /* Delete PDF from storage */ if (book.pdf_path) { await supabase.storage .from("books") .remove([ book.pdf_path ]); } /* Delete database record */ const { error: deleteError } = await supabase .from("books") .delete() .eq("id", id); if (deleteError) { throw deleteError; } res.json({ success: true }); } catch (error) { console.error(error); res.status(500).json({ error: "Unable to delete book." }); } } ); /* DOWNLOAD BOOK Increments download counter. */ app.get( "/api/books/:id/download", async (req, res) => { try { const id = req.params.id; const { data: book, error } = await supabase .from("books") .select("*") .eq("id", id) .single(); if (error || !book) { return res.status(404).send( "Book not found." ); } /* Increase download count */ await supabase .from("books") .update({ downloads: Number(book.downloads || 0) + 1 }) .eq("id", id); /* Redirect to PDF */ res.redirect(book.pdf_url); } catch (error) { console.error(error); res.status(500).send( "Download failed." ); } } ); /* HEALTH CHECK */ app.get("/api/health", (req, res) => { res.json({ status: "running", application: "ADFID Africa Digital Library" }); }); /* ERROR HANDLER */ app.use((error, req, res, next) => { console.error(error); res.status(400).json({ error: error.message || "Something went wrong." }); }); app.listen(PORT, () => { console.log(""); console.log( "==========================================" ); console.log( " ADFID Africa Digital Library" ); console.log( " PDF Library Server" ); console.log( ` Running: http://localhost:${PORT}` ); console.log( ` Admin: http://localhost:${PORT}/admin.html` ); console.log( "==========================================" ); }); ADFID Library Administration

ADFID AFRICA DIGITAL LIBRARY

Administrator Panel

Administrator Login