Africa’s dictators club has much to fear after Yahya Jammeh’s fall

Yahya Jammeh, who lost last week’s presidential election in Gambia after 22 years in power. PHOTO | FILE

What you need to know:

  • It is true that Gambia is a small country of only two million.But Yahya Jammeh was not a trivial figure.
  • Due to his extreme eccentricities, he had drawn wide attention and become a symbol of the suffering a self-anointed president-for-life, with no clear economic plan, can inflict on his people.

What now, for dictators and life presidents across Africa? The fall of Yahya Jammeh, or to confer his full title, His Excellency Sheikh Professor Alhaji Dr Yahya Abdul-Aziz Awal Jemus Junkung Jammeh Naasiru Deen Babili Mansa (Conqueror of Two Rivers) is a huge development.

It is true that Gambia is a small country of only two million.

But Yahya Jammeh was not a trivial figure.

Due to his extreme eccentricities, he had drawn wide attention and become a symbol of the suffering a self-anointed president-for-life, with no clear economic plan, can inflict on his people.

Gambian youth have been voting with their feet on a regular basis for the last two decades, making the long, humiliating, dangerous journey across the Mediterranean to try and find economic opportunities in Europe.

Just last month, Fatim Jawara, the 19-year-old goalkeeper of Gambia’s women’s national football team, became the latest of hundreds of Gambians to die on the trip across the Sahara desert and into the sea in a bid to get into Europe.

Yahya Jammeh will not be missed and his shock defeat at the ballot box will surely have sent a shiver down the spines of other self-declared life presidents. Can the surprise outcome in the Gambia be pulled off in Uganda, Zimbabwe, Chad, Equatorial Guinea, Cameroon, Burundi, the DRC and elsewhere?

What happened after the first major political earthquake of the multi-party era in Zambia might offer a guide.

On October 31, 1991, voters went to the polls to decide between president Kenneth Kaunda, the gentleman president and “father of the nation” who had become extremely unpopular amid an economic crisis, and his challenger Frederick Chiluba, a fire-spitting trade unionist who promised greater political freedom and offered a plan to revive the economy.

Kaunda was absolutely crushed. Chiluba won 81 per cent of the vote.

More shockingly, on a continent where most people had known presidents to leave office only at death or in a coup, Kaunda stepped down.

The outcome created a panic in other single party dictatorships which were being forced to adopt competitive politics at the end of the Cold War.

This is how the New York Times reported it on November 1, 1991: “Other presidents who have held office for more than two decades have resisted suggestions that they allow democratic elections: Mobutu Sese Seko, who is battling to hold on in Zaire, H. Kamuzu Banda, who retains absolute authority in Malawi, and Felix Houphouet-Boigny, who clings to power in the Ivory Coast despite an increasingly vigorous opposition. “In Kenya, Daniel arap Moi, President since 1978, has refused to allow opposition parties.”

Of all those mentioned in the report, only Moi survived more than a decade in office after Kaunda’s fall.

Moi was wily enough to adopt some form of multi-partyism, while using public funds to divide the opposition and open a path to victory, despite securing less than 40 per cent of the vote in both the 1992 and 1997 elections.

The others were soon forced out of office. Kamuzu Banda was resoundingly defeated by Bakili Muluzi in 1994.

Mobutu fled into Togo in 1997 after his army refused to fight on his behalf when Laurent Kabila’s rebels approached Kinshasa.

Houphouet-Boigny, on the other hand, died in 1993 but his failure to allow a free choice of his successor left Cote d’Ivoire in a protracted crisis.

So the lesson from 1991 is that the fall of a dictator can create, by example, a contagion effect that spreads beyond borders.

For those inclined to hold on to power violently, the recent exit of Blaise Compaore, who fled Burkina Faso after protesters burned down parliament, shows that there are limits to how far violent security forces can go in thwarting the will of the people.

Jammeh, with his miracle cures for everything, extreme repression of rights and murder of journalists and his wild policies including a campaign against “witches” that left dozens dead, was rightly rejected by the people of Gambia.

The club of dictators will be losing more than a bit of sleep in the next few months.

* * If no #mcl-market-ticker element exists, the widget inserts itself right * after this var sel = thisScript && thisScript.getAttribute("data-target"); if (sel) { var t = document.querySelector(sel); if (t) return t; } // 2) A dedicated mount element the host page provides. var el = document.getElementById(CONFIG.targetId); if (el) return el; // 3) Fallback: insert right after this script tag. el = document.createElement("div"); el.id = CONFIG.targetId; if (thisScript && thisScript.parentNode) { thisScript.parentNode.insertBefore(el, thisScript.nextSibling); } else { document.body.appendChild(el); } return el; } // ---- Data pipeline (identical logic to the standalone banner) ------------ function apiUrl(path) { if (!path) return path; if (/^https?:\/\//i.test(path)) return path; return CONFIG.apiBase + (path.charAt(0) === "/" ? "" : "/") + path; } function toNum(v) { var n = parseFloat(String(v == null ? "" : v).replace(/,/g, "")); return isFinite(n) ? n : null; } function fmtNum(v) { var n = parseFloat(String(v).replace(/,/g, "")); if (!isFinite(n)) return String(v == null ? "" : v); var d = Math.abs(n) >= 1 ? 2 : 4; return n.toLocaleString("en-US", { minimumFractionDigits: d, maximumFractionDigits: d }); } function changeClass(d) { if (d == null || Math.abs(d) < 1e-9) return "flat"; return d > 0 ? "up" : "down"; } function arrow(d) { if (d == null || Math.abs(d) < 1e-9) return "▬"; return d > 0 ? "▲" : "▼"; } async function fetchFiles(category, count) { var res = await fetch(apiUrl("/api/files?category=" + category)); if (!res.ok) throw new Error("list " + category + " " + res.status); var list = await res.json(); return Array.isArray(list) ? list.slice(0, count || 1) : []; } async function parseSheet(meta) { var res = await fetch(apiUrl(meta.url)); if (!res.ok) throw new Error("download " + res.status); var buf = await res.arrayBuffer(); var wb = XLSX.read(buf, { type: "array" }); return XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { defval: "" }); } function buildStocks(rows) { var items = []; rows.forEach(function (r) { var sym = r["Symbol"] || r["symbol"]; if (!sym) return; var close = toNum(r["Close"]); if (close == null) return; var prev = toNum(r["Prev Close"] || r["Previous Close"]); var delta = prev != null ? close - prev : null; var pct = (delta != null && prev) ? (delta / prev) * 100 : null; items.push({ sym: sym, val: fmtNum(close), delta: delta, pct: pct }); }); return items; } function buildForex(rows, prevRows) { var pmean = {}; (prevRows || []).forEach(function (r) { if (r["Currency"]) pmean[r["Currency"]] = toNum(r["Mean"]); }); var items = []; rows.forEach(function (r) { var cur = r["Currency"]; if (!cur) return; var mean = toNum(r["Mean"]), buy = toNum(r["Buying"]), sell = toNum(r["Selling"]); if (buy == null && sell == null && mean == null) return; var pv = pmean[cur]; var ref = mean != null ? mean : (buy != null && sell != null ? (buy + sell) / 2 : (buy != null ? buy : sell)); var delta = pv != null ? ref - pv : null; var pct = (delta != null && pv) ? (delta / pv) * 100 : null; items.push({ sym: cur, buy: buy != null ? fmtNum(buy) : "—", sell: sell != null ? fmtNum(sell) : "—", delta: delta, pct: pct }); }); var order = CONFIG.majorCurrencies; items.sort(function (a, b) { var ia = order.indexOf(a.sym), ib = order.indexOf(b.sym); if (ia === -1) ia = 999; if (ib === -1) ib = 999; if (ia !== ib) return ia - ib; return a.sym < b.sym ? -1 : 1; }); return items; } function chgHTML(it) { var cls = changeClass(it.delta); if (it.delta == null) return ''; var pctTxt = it.pct != null ? (it.pct >= 0 ? "+" : "") + it.pct.toFixed(2) + "%" : ""; return '' + arrow(it.delta) + " " + pctTxt + ""; } function stockHTML(it) { return '' + it.sym + '' + it.val + "" + chgHTML(it) + ""; } function forexHTML(it) { return '' + it.sym + "" + '' + CONFIG.labels.buy + ' ' + it.buy + ' · ' + CONFIG.labels.sell + ' ' + it.sell + "" + chgHTML(it) + ""; } function pill(t, k) { return '' + t + ""; } function render(track, stocks, forex, dateLabel) { if ((!stocks || !stocks.length) && (!forex || !forex.length)) { track.innerHTML = '
' + CONFIG.labels.unavailable + "
"; track.style.animation = "none"; return; } var parts = []; if (stocks && stocks.length) { parts.push(pill(CONFIG.labels.stocks)); stocks.forEach(function (s) { parts.push(stockHTML(s)); }); } if (forex && forex.length) { parts.push(pill(CONFIG.labels.forex, "forex")); forex.forEach(function (f) { parts.push(forexHTML(f)); }); } if (dateLabel) parts.push('' + CONFIG.labels.updated + ": " + dateLabel + ""); var content = parts.join(""); track.innerHTML = content + content; // duplicated for a seamless loop requestAnimationFrame(function () { var dur = Math.max(20, Math.round((track.scrollWidth / 2) / CONFIG.pxPerSecond)); track.style.animation = "none"; void track.offsetWidth; track.style.animation = "mcl-scroll " + dur + "s linear infinite"; }); } async function load(track) { try { var results = await Promise.allSettled([fetchFiles("hisa", 1), fetchFiles("fedha", 2)]); var stocks = [], forex = [], dateLabel = ""; if (results[0].status === "fulfilled" && results[0].value.length) { var hf = results[0].value[0]; dateLabel = hf.date || ""; stocks = buildStocks(await parseSheet(hf)); } if (results[1].status === "fulfilled" && results[1].value.length) { var ff = results[1].value; var curRows = await parseSheet(ff[0]); var prevRows = ff[1] ? await parseSheet(ff[1]) : []; forex = buildForex(curRows, prevRows); if (!dateLabel) dateLabel = ff[0].date || ""; } render(track, stocks, forex, dateLabel); } catch (e) { if (!track.querySelector(".mcl-item")) { track.innerHTML = '
' + CONFIG.labels.unavailable + "
"; track.style.animation = "none"; } } } function mountAndRun() { injectStyle(); var mount = getMount(); mount.innerHTML = '
' + '
' + CONFIG.brand + "" + '' + CONFIG.live + "
" + '
' + CONFIG.labels.unavailable + "
"; var track = mount.querySelector(".mcl-track"); function go() { load(track); setInterval(function () { load(track); }, CONFIG.refreshMs); } if (window.XLSX) { go(); return; } var sc = document.createElement("script"); sc.src = "https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"; sc.onload = go; sc.onerror = function () { track.innerHTML = '
' + CONFIG.labels.unavailable + "
"; }; (document.head || document.documentElement).appendChild(sc); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", mountAndRun); } else { mountAndRun(); } })();