Shared posts

06 Oct 02:23

Culture Wars, Fake Populism & the Reactionary Rabbit Hole, w/ Chapo’s Matt Christman

Tom Roche

if you like Christman rants (and I mostly do), this is for you: almost entirely about US politics and culture, excellent analysis punctuated by firebreathing bouts of rage

With the Democratic Party hopelessly incapable of doing anything to address our many crises, the far-right has managed to brand itself as subversive using oligarch funding for anti-woke and pseudo-populist campaigns. The result is to send more and more lost and alienated people down the reactionary rabbit hole. 


How do we understand and navigate our way through this dystopian political scene? To discuss this and more Rania Khalek was joined by Matt Christman, co-host of the popular podcast Chapo Trap House.


Listen to every episode of Rania Khalek Dispatches anywhere you get podcasts.

Apple: https://apple.co/3zeYpeW 

Spotify: https://spoti.fi/3za9DRK


04 Oct 22:12

Whatever Next with Miles Jupp

Tom Roche

If you're as ancient as I am, you grew up watching Monty Python's Flying Circus and were forever scarred. Provided you /enjoy/ (as I do) that sort of thing--(mostly) low-key, played-straight, imaginatively-weird short funny bits--and esp if you can appreciate BBC self-satire, and double-esp if you consider (as I do) Miles Jupp to be one of the Grand Dukes of radio comedy, you should find this VERY EXCELLENT. (Otherwise, please die soon :-)

An Unexpected Visitor at The Grange. Miles turns his hand to a new BBC 1 game show, guests on the new podcast Jumpers of My Life with Seann Walsh and fights Julia Davis for a major role in a major new movie. Starring Miles Jupp with Vicki Pepperdine, Julia Davis, Seann Walsh, Jocelyn Jee Essien, Philip Fox, Justin Edwards, Dominique Moore, Andy Zaltzman, Simon Mann and David Gower Written by Miles Jupp & James Kettle Script edited by Graeme Garden Produced by Victoria Lloyd A Random Entertainment Production
02 Oct 17:01

Garjola Dindi: A workaround for an annoying EXWM behavior

by Garjola Dindi
Tom Roche

EXWM--more importantly XELB, the Elisp bindings for X (protocol)--always seemed to me like the old-school (like, 1980s) definition of "hack": cool engineering-wise, but more of a (very-old-school word) lark than something you'd wanna maintain. Unfortunately, this seems to be true, per pullquote (link added by me):
> The pain point with EXWM is that its development and maintenance suddenly stopped after [its creator and maintainer went AWOL](https://github.com/ch11ng). There have been discussions here and there to continue the development, but, to the best of my knowledge, no initiative has really taken off.

I have been using the Emacs X Window Manager, EXWM, for a couple of years now and I have come to depend on it for an efficient and friendly workflow for most of what I do at the computer. Before that, I had been using StumpWM for 4 or 5 years and I was already sold on tiling window managers. For someone like me who does everything in Emacs except for browsing sites that need Javascript or watching videos, EXWM seems to be the perfect setup.

The pain point with EXWM is that its development and maintenance suddenly stopped after the creator and maintainer went AWOL. There have been discussions here and there to continue the development, but, to the best of my knowledge, no initiative has really taken off.

Some well known EXWM users in the community started migrating to other WMs, like StumpWM, Herbstluftwm or or QTile. I also tried to get back to StumpWM, since I had used it for a long time, but I found the experience inferior to EXWM: having M-x everywhere and not having to use different key bindings when talking to the WM or to Emacs is a real comfort.

However, some time ago, floating windows started behaving annoyingly. For instance, when saving a file in Firefox, the file chooser application would be too high and the Save button would be below the bottom of the screen. I then would have to move the window up so that I could click. Not knowing anything about X, I wasn't able to diagnose the issue.

I ended writing a little function to resize a floating window:

(defun my/resize-floating-frame (width height)
  "Resize a floating exwm frame to WIDTHxHEIGHT"
  (interactive "nWidth: \nnHeight: ")
    (let ((floating-container (frame-parameter exwm--floating-frame
                                               'exwm-container)))
      (exwm--set-geometry floating-container nil nil width height)
      (exwm--set-geometry exwm--id nil nil width height)
      (xcb:flush exwm--connection)))

and bound it to a key to call it with a size that would fit:

(exwm-input-set-key (kbd "s-x r") (lambda () (interactive) (my/resize-floating-frame 600 800)))

So now, instead of grabbing the mouse and manually moving the window, I could just use s-x r and hit enter, since the Save button is selected by default. This is a big win, but after a couple of days, I became tired of this and thought that this could be automated. Also, the arbitrary fixed size may not be appropriate depending on the monitor I am using.

So with a little more elisp, I wrote a function that computes the size of the window and works with a hook which is called by EXWM and the end of the setup of the floating window:

(defun my/adjust-floating-frame-size ()
  "Ensure that the current floating exwm frame does not exceed the size of the screen"
  (let* ((frame (selected-frame))
         (width (frame-pixel-width frame))
         (height (frame-pixel-height frame))
         (w1 (elt (elt exwm-workspace--workareas 0) 2))
         (h1 (elt (elt exwm-workspace--workareas 0) 3))
         (w2 (elt (elt exwm-workspace--workareas 1) 2))
         (h2 (elt (elt exwm-workspace--workareas 1) 3))
         (max-width (round (* 0.75 (min w1 w2))))
         (max-height (round (* 0.75 (min h1 h2))))
         (final-height (min height max-height))
         (final-width (min width max-width)))
    (set-frame-size frame final-width final-height t)))
(add-hook 'exwm-floating-setup-hook #'my/adjust-floating-frame-size 100)

All this may seem complex and one could think that too much elisp-foo is needed to do all this. This is absolutely not the case. With a little effort and time, it is not difficult to navigate the source code and test things interactively to see how they behave. In this particular case, searching for hooks in the EXWM package (M-x describe-variable) and trying little code snippets on the *scratch* buffer got me there rather quickly.

This is yet another demonstration of the power of Emacs: you can modify its behavior interactively and all source code and documentation is immediately accessible. You don't need to be a skilled programmer to do that.

That's user freedom, the real meaning of software freedom.

02 Oct 16:47

667 - Go In Dry feat. Séamus Malekafzali (9/29/22)

Tom Roche

ehh banter followed by EXCELLENT Malekafzali interview--one of the better recent pieces on current Iranian politics

The boys return from hell to look at our own hell on earth: floods, fascism in Italy, UK collapse, increasingly dastardly American police violence. We’re then joined by Séamus Malekafzali to discuss the ongoing mass protests in Iran.


Dates & Tickets to all our upcoming shows: https://www.chapotraphouse.com/live

And of course, links to our new merch: https://chapotraphouse.shop/

Get bonus content on Patreon

Hosted on Acast. See acast.com/privacy for more information.

01 Oct 14:18

Radio Ecoshock: Tipping Point Hell Approaches

by Alex Smith
Tom Roche

VERY EXCELLENT--Smith's usual doomerism restrained, just lets the science speak

UK scientist David McKay warns we approach multiple tipping points – maybe the most important warning of the year. From Stanford, Professor Rob Jackson, Chair of the Global Carbon Project, says controlling methane is our best chance for a livable climate. NCAR senior  …
01 Oct 14:15

Party's Over - 2nd September

Tom Roche

excellent final (E6) episode of current series of this [BBC radio comedy](https://www.bbc.co.uk/programmes/m000y1g9/episodes/guide)

What happens when the prime minister suddenly stops being prime minister? One day you're the most powerful person in the country, the next you're irrelevant, forced into retirement 30 years ahead of schedule and find yourself asking, 'What do I do now?'

"I can't just disappear like Gordon Brown. They say he barely gets out of bed now. Just sits there doing word-searches and eating Kit Kat Chunkies. Miserable. I hate the chunky ones." Former British Prime Minister Henry Tobin.

This week, the gang return to their old stomping ground on a mission to find their fortune.

Starring Miles Jupp, Ingrid Oliver, Emma Sidi and Justin Edwards.

Written by Paul Doolan and Jon Hunter Producer: Richard Morris Production co-ordinator: Caroline Barlow Sound recordist and designer: Jerry Peal

A BBC Studios Production

30 Sep 20:48

Hill TV Censors Segment on Rashida Tlaib's Description of Israel as "Apartheid Government," Bars Reporter

by Ryan Grim
Tom Roche

SINGULAR: note 2nd half of this piece (archived [here](https://archive.ph/0EGT4)) is a transcript of the [monologue that got Katie Halper fired from "Rising"](https://breakthroughnews.org/this-is-what-got-katie-halper-censored-canceled-by-the-hill-israel-is-an-apartheid-state/) (archived [here](http://web.archive.org/web/20220930204208/https://breakthroughnews.org/this-is-what-got-katie-halper-censored-canceled-by-the-hill-israel-is-an-apartheid-state/)). Halper defines apartheid, shows how the Zionist regime in Israel satisfies the definition, cites other organizations who concur with that assessment, and even Israeli officials (including electeds) who likewise concur. Not only makes her case, but this affair demonstrates Zionist power over even nominally-alternative US corporate-funded-media (USCFM) outlets.

Executives at a major broadcasting company stepped in this week to block the airing of a segment on Hill TV that defended Rep. Rashida Tlaib, D-Mich., amid an ongoing controversy inside the Democratic Party.

Tlaib had been attacked by colleagues for saying, “I want you all to know that among progressives, it becomes clear that you cannot claim to hold progressive values yet back Israel’s apartheid government.”

As a co-host of the Hill TV morning show “Rising,” presenter Katie Halper on Monday made the controversy the subject of her Radar: the name “Rising” uses to brand its monologues. Each show includes two Radars, one from a left perspective and one from a right perspective, and as a former co-host of the show, I’ve recorded more than 150 of them. There is no approval process: A co-host files a script, which is loaded into a teleprompter. The monologue is then recorded, with a back-and-forth discussion and debate with the other co-host following it. The segment is then uploaded to a variety of platforms along with the rest of the show.

But Halper — who spoke publicly about the censorship Thursday evening on her livestream — said that Monday’s process was different. After the taping of the segment, producers asked co-host Robby Soave to do what’s known as a “pick up,” a fairly standard editorial addition to a segment. In this case, Soave was asked to repeat something that had already been included, namely the perspective of Anti-Defamation League CEO Jonathan Greenblatt that stood in opposition to Tlaib. Later, Halper was told the segment was being reviewed and held up. Later in the week, she was told it wouldn’t run. When she asked if she could discuss the subject in her next appearance on Hill TV, she was told her invitation had been rescinded, according to an email from an executive with Nexstar Media Group, which owns Hill TV, along with scores of local news channels and the cable channel NewsNation, which recently hired former CNN presenter Chris Cuomo.

Halper’s monologue examined Tlaib’s claim that Israel has the characteristics of an apartheid state by exploring the definition of apartheid and quoting from human rights organizations such as Israel-based B’Tselem, Human Rights Watch, and Amnesty International. She quoted former Israeli Prime Minister Ehud Barak saying that Israel could become an apartheid state if it didn’t change course, and so on.

Halper also made reference to Israeli laws that bar Palestinians from traveling freely or living in Israel proper even if they are married to an Israeli, as well as to laws that grant or exclude entry into the country specifically on the basis of religion or ethnicity.

The decision of whether to post the segment was kicked from “Rising” producers to The Hill’s Editor-in-Chief Bob Cusack. In a call with Halper on Wednesday, he framed Halper’s segment as similar to an op-ed submission, telling her that The Hill accepts some submissions and rejects other submissions, and that this right extends to Hill TV journalism as well.

Producers told Halper that perhaps a standard segment would work, but when Halper proposed to a Nexstar executive that she use her next appearance for such a segment, she was told her services would no longer be needed.

“We wanted to let you know that we will not be needing you to appear on Rising tomorrow am,” the executive told Halper Wednesday in an email she provided to The Intercept. “Please feel free to submit any unpaid invoices for your work on Rising. We wish you all the best.”

Gary Weitman, the chief communications officer for Nexstar, declined to comment.

Halper’s monologue is below:

Rep. Rashida Tlaib has been condemned by some over comments she made about Israel. Here’s CNN’s Jake Tapper reporting on what the Michigan Democrat said and the response it prompted.

I’m not a Jewish colleague of Tlaib, but I am a Jew and I am outraged. Not by Tlaib, but by the attacks on Tlaib. Rashida Tlaib is saying that Israel is an apartheid state and that people who claim to have progressive values cannot support an apartheid state. No matter how loose a definition of progressive we use, it certainly excludes supporting a racist apartheid system.

What’s outrageous is that Tlaib would be pilloried over her comments. What’s outrageous is that the Anti-Defamation League’s Jonathan Greenblatt would claim that Israel is not an apartheid government. What’s outrageous is that Jake Tapper would accept Greenblatt’s judgment as the truth and not propaganda that needed to be pushed back against.

I understand that Greenblatt and perhaps Tapper “feel” like Israel is not an apartheid state but unfortunately for them, apartheid isn’t about your feelings. It’s about facts. 

So let’s look at the facts on the ground. 

First of all, what is apartheid? 

Apartheid is an Afrikaans word that means apartness. It was the official policy in South Africa from 1948 and 1994, allowing white South Africans, in the minority, to rule over and discriminate against the vast majority of Black South Africans. 

But apartheid doesn’t just apply to South Africa. In 1973, the U.N. defined “the crime of apartheid” as including “similar policies and practices of racial segregation and discrimination as practiced in Southern Africa,” as well as any “inhuman acts committed for the purpose of establishing and maintaining domination by one racial group of persons over any other racial group of persons and systematically oppressing them.” In 1998, the Rome Statute of the International Criminal Court defined apartheid as “inhumane acts of a character” that are “committed in the context of an institutionalized regime of systematic oppression and domination by one racial group over any other racial group or groups and committed with the intention of maintaining that regime.”

These inhuman acts include, among others “infliction upon the members of a racial group or groups of serious bodily or mental harm, by the infringement of their freedom or dignity, or by subjecting them to torture or to cruel, inhuman or degrading treatment or punishment; By arbitrary arrest and illegal imprisonment of the members of a racial group or groups. … Any legislative measures and other measures calculated to prevent a racial group or groups from participation in the political, social, economic and cultural life of the country and the deliberate creation of conditions preventing the full development of such a group or groups, in particular by denying to members of a racial group or groups basic human rights and freedoms, including … the right to leave and to return to their country, the right to a nationality, the right to freedom of movement and residence, the right to freedom of opinion and expression, and the right to freedom of peaceful assembly and association. … Any measures including legislative measures, designed to divide the population along racial lines by the creation of separate reserves and ghettos for the members of a racial group or groups, the prohibition of mixed marriages among members of various racial groups, the expropriation of landed property belonging to a racial group or groups or to members thereof.”

Israel’s own laws certainly fit this definition of apartheid.

Look at the Law of Return of 1950 and tell me it’s not apartheid. The law allows any Jew, which means anyone with one Jewish grandparent, the right to move to Israel and automatically become citizens of Israel. It gives their spouses that right too, even if they’re not Jewish. Palestinians, of course, lack that right. 

Lest you had any doubts about that, the Israeli Citizenship Law of 1952 deprived Palestinian refugees and their descendants of legal status, the right to return and all other rights in their homeland. It also defined Palestinians present in Israel as “Israeli citizens” without a nationality and group rights.

These laws together obviously fit into the International Criminal Court’s apartheid criteria: The Israeli laws prohibit “members of a racial group” “the right to leave and to return to their country, the right to a nationality, the right to freedom of movement and residence.”

The Citizenship and Entry into Israel Law of 2003, which was reauthorized in March of this year, makes people who live in the West Bank and Gaza Strip ineligible for the automatic granting of Israeli citizenship and residency permits that are usually available through marriage to an Israeli citizen. Not only can non-Israeli Jews not get Israeli citizenship through their Israeli spouses, but in some cases they can’t live with them in Israel. 

More recently, the controversial Nation State Law established that “The fulfillment of the right of national self-determination in the State of Israel is unique to the Jewish people.” It also stipulated, “The state views Jewish settlement as a national value and will labor to encourage and promote its establishment and development.” It cancels the status of Arabic as an official language, and omits all mention of Israel as a democracy, the equality of its citizens, and the existence of the Palestinian population.

This legal obliteration of Palestinians clearly fulfills the U.N.’s definition of apartheid, dividing “the population along racial lines by the creation of separate reserves and ghettos for the members of a racial group or groups.”

These are just some of the reasons that human rights organizations have declared Israel an apartheid state. Of course it should come as no surprise that Palestinian human rights organizations have been calling Israel’s government an apartheid one for decades. Al Haq, Al Mezan’s Center for Human Rights, Adalah: the Legal Center for Arab Minority Rights in Israel, and Addameer: Prisoner Support and Human Rights Association have documented Israeli apartheid.

More recently, organizations like Human Rights Watch and Amnesty International have also conceded that Israel enacts apartheid policies.

Israel’s own human rights organization B’Tselem has declared, “The Israeli regime enacts … an apartheid regime. B’Tselem reached the conclusion that the bar for defining the Israeli regime as an apartheid regime has been met after considering the accumulation of policies and laws that Israel devised to entrench its control over Palestinians.” B’Tselem divides the way Israeli apartheid works into four areas:

“Land – Israel works to Judaize the entire area, treating land as a resource chiefly meant to benefit the Jewish population. Since 1948, Israel has taken over 90% of the land within the Green Line and built hundreds of communities for the Jewish population. Since 1967, Israel has also enacted this policy in the West Bank, building more than 280 settlements for some 600,000 Jewish Israeli citizens. Israel has not built a single community for the Palestinian population in the entire area stretching from the Mediterranean Sea and the Jordan River (with the exception of several communities built to concentrate the Bedouin population after dispossessing them of most of their property rights).

Citizenship – Jews living anywhere in the world, their children and grandchildren – and their spouses – are entitled to Israeli citizenship. In contrast, Palestinians cannot immigrate to Israeli-controlled areas, even if they, their parents or their grandparents were born and lived there. Israel makes it difficult for Palestinians who live in one of the units it controls to obtain status in another, and has enacted legislation that prohibits granting Palestinians who marry Israelis status within the Green Line.

Freedom of movement – Israeli citizens enjoy freedom of movement in the entire area controlled by Israel (with the exception of the Gaza Strip) and may enter and leave the country freely. Palestinian subjects, on the other hand, require a special Israeli-issued permit to travel between the units (and sometimes inside them), and exit abroad also requires Israeli approval.

Political participation – Palestinian citizens of Israel may vote and run for office, but leading politicians consistently undermine the legitimacy of Palestinian political representatives. The roughly five million Palestinians who live in the Occupied Territories, including East Jerusalem, cannot participate in the political system that governs their lives and determines their future. They are denied other political rights as well, including freedom of speech and association.”

Israeli officials and politicians, too, have described their own country as an apartheid state.

Former attorney general Michael Ben-Yair wrote in 2002, “we established an apartheid regime in the occupied territories immediately following their capture. That oppressive regime exists to this day.”

Zehava Galon, former chair of Israel’s Meretz party, said in 2006, Israel was “relegated” to “the level of an apartheid state.”

In 2007, Israel’s former education minister Shulamit Aloni wrote, “the state of Israel practices its own, quite violent, form of apartheid with the native Palestinian population.”

In 2008, former environment minister Yossi Sarid said, “what acts like apartheid, is run like apartheid and harasses like apartheid, is not a duck — it is apartheid.”

Even Israel’s prime ministers have used the A word. In a recently published 1976 interview, assassinated Israeli Prime Minister Yitzhak Rabin said, “if we don’t want to get to apartheid … I don’t think it’s possible to contain over the long term, a million and a half [more] Arabs inside a Jewish state.”

In 2007 yet another prime minister, Ehud Olmert, warned, “If the day comes when the two-state solution collapses, and we face a South African-style struggle for equal voting rights, then, as soon as that happens, the State of Israel is finished.” Well, Israel isn’t finished, but they do face a “South African-style struggle.”

Prime Minister Ehud Barak said in 2010, “As long as in this territory west of the Jordan river there is only one political entity called Israel it is going to be either non-Jewish, or non-democratic. If this bloc of millions of ­Palestinians cannot vote, that will be an apartheid state.”

Surely South African leaders who suffered, struggled, and finally destroyed apartheid in their nation understood what apartheid is. And the great South African leaders Nelson Mandela and Desmond Tutu saw Israel policies as apartheid. In 1997 Mandela said, “The U.N. took a strong stand against apartheid; and over the years, an international consensus was built, which helped to bring an end to this iniquitous system. But we know too well that our freedom is incomplete without the freedom of the Palestinians.”

In 2013, Desmond Tutu recalled being struck by the similarities between what he experienced in apartheid South Africa and what he observed in Israel

To my friends in the Democratic Party who want to support Israel and who who want be progressives, it is important to listen to what international law, Israeli politicians and South Africans leaders and apartheid survivors say about the apartheid system in Israel. But we would all do well to look at what South Africa did with its apartheid system. Simply put, it left apartheid behind. 

So the question we should be asking ourselves as progressives and Americans and some of us as Jews is not how to excoriate Rashida Tlaib for pointing out the obvious, or how to turn all criticisms of Israel as challenges to Israel’s right to exist or as expressions of anti-Semitism. Rather, the question to ask is how an apartheid-free Israel would look.

The post Hill TV Censors Segment on Rashida Tlaib’s Description of Israel as “Apartheid Government,” Bars Reporter appeared first on The Intercept.

28 Sep 23:04

Michael and Us: Penn and Paintbrush

Tom Roche

excellent as usual

Libertarian magicians Penn & Teller turn their gaze to the art world in TIM'S VERMEER (2013), a documentary that attempts to prove that, with just the right set of tools and a lot of money, one wealthy entrepreneur can paint a Vermeer. We discuss the bleak, empty void that is Penn & Teller's view of art.


See Luke at the Toronto International Festival of Authors on September 27 - https://festivalofauthors.ca/event/critical-conversation-new-working-class/


Check out Luke's book The Dead Center - https://www.orbooks.com/catalog/the-dead-center/


Michael and Us is a podcast about political cinema and our crumbling world hosted by Will Sloan and Luke Savage.



Hosted on Acast. See acast.com/privacy for more information.

28 Sep 23:00

666 - Chapo Goes To Hell (9/27/22)

Tom Roche

VERY EXCELLENT: very funny, despite no Felix. As I have long suspected and
* Matt confirms: Hell is almost exactly like Houston.
* Anton LaVey confirms: "Not all libertarians are Satanists, but all Satanists are libertarians."
* Hitler confirms: Goebbels "draws furry art now" and "only speaks Portuguese."
* Satan confirms: Hell is woke now.
* Will and Matt confirm: the food is really good.
* James Adomian confirms: he can totally, hilariously *nail* Christopher Hitchens.

Chapo goes to Hell and meets the various denizens there:

𖤐 Satan

𖤐 Hitler

𖤐 LaVey

𖤐 Hitchens

Featuring: Henry Zebrowski, Derek & @Dril, James Adomian.


Dates & Tickets to all our upcoming shows: https://www.chapotraphouse.com/live

And of course, links to our new merch: https://chapotraphouse.shop/

Get bonus content on Patreon

Hosted on Acast. See acast.com/privacy for more information.

28 Sep 18:30

Ozone, Water Vapor and Temperature: It’s a Complex Relation

by Germán Martinez
Tom Roche

so O3 atmospheric chemistry is complex even on Mars (which this study is about)

Four graphs from the paper.
Editors’ Highlights are summaries of recent papers by AGU’s journal editors.
Source: Journal of Geophysical Research: Planets

Ozone (O3) and water vapor (H2O) play a key role in the atmospheric chemistry of Mars. Photolysis of H2O generates ozone-destroying radicals (the HOx family), which in turn regenerate photo-dissociated CO2 in the upper atmosphere through the reaction CO + OH à CO2 + H. Therefore, the anticorrelated coupling between O3 and H2O is critical to stabilize the composition of the Mars CO2 atmosphere. While this anticorrelation has been long predicted from models, coincident orbital retrievals of both species have been lacking until recently.

Olsen et al. [2022] use measurements in solar occultation mode from the mid-infrared channel of the Atmospheric Chemistry Suite (ACS/MIR) on board the ExoMars Trace Gas Orbiter (TGO) to measure coincident profiles of O3, H2O and temperature. Then, the authors analyze the relations between these three profiles as function of elevation and time. They find that water vapor abundance is controlled by atmospheric temperature, and that, as expected, O3 and H2O are anti-correlated. Water vapor condenses when the atmosphere cools, allowing O3 to build up as the production of ozone-destroying radicals is reduced. Conversely, warmer temperatures lead to H2O enhancements and ozone loss.

Interestingly, comparisons with the LMD Mars Global Climate Model reveal that the observed O3 abundance is larger by factors between 2 and 6, indicating important differences in the rate of odd-hydrogen photochemistry on Mars as compared to that used in models. This discrepancy has important implications for the photochemical cycles of H2O and CO, as well as trace gases such as HCl and CH4, and it may arise from the use of the model without heterogeneous chemistry (i.e., without the inclusion of heterogeneous uptake of OH, HO2 and H2O2 on water ice aerosols).

In combination with previous coincident observations of O3 and water vapor H2O from SPICAM on board Mars Express (Lefèvre et al. [2021] and references therein), and from the NOMAD-UVIS instrument on board TGO (Patel et al. [2021]), the results in Olsen et al. [2022] represent a significant step in defining current model-data disagreements in our understanding of Mars’s photochemistry.

Citation: Olsen, K. S., Fedorova, A. A., Trokhimovskiy, A., Montmessin, F., Lefèvre, F., Korablev, O., et al. (2022). Seasonal changes in the vertical structure of ozone in the Martian lower atmosphere and its relationship to water vapour. Journal of Geophysical Research: Planets, 127, e2022JE007213. https://doi.org/10.1029/2022JE007213

—Germán Martínez, Associate Editor, Journal of Geophysical Research: Planets

Text © 2022. The authors. CC BY-NC-ND 3.0
Except where otherwise noted, images are subject to copyright. Any reuse without express permission from the copyright owner is prohibited.
28 Sep 18:28

Satellites Can Accurately Take Earth’s Temperature

by Rebecca Dzombak
Tom Roche

pullquote:
> satellites with microwave-based sensing slightly outperformed infrared-based sensing. Among the six data sets, MODIS (Moderate Resolution Imaging Spectroradiometer)/Aqua and Advanced Along-Track Scanning Radiometer—both infrared data sets—most reliably tracked temporal changes in near-surface air temperatures, suggesting they are currently the best candidates for long-term temperature monitoring and trend detection.

A bright red, orange, and yellow thermal image of London and the surrounding area maps hotter and cooler areas of the city. The center of the image is the city of London, which is yellow, indicating that it is hotter than surrounding suburbs, which appear in varying shades of orange and red. The suburbs tend to become cooler, and appear darker red, moving toward the edges of the image. The River Thames snakes from right to left across the center of the image. It and several water reservoirs to the left of center are black, indicating that they are much cooler than the neighboring land.
Source: Earth and Space Science

Changes in near-surface air temperatures around the world are one of the most important indicators of climate change. But to fully capture the impact rising temperatures have on people, plants, and processes at Earth’s surface, climate scientists and models must consider the temperature of the land itself as well.

Land surface temperature—literally, how warm or cool Earth is to the touch—is important because it affects almost every process at Earth’s surface from evaporation to human health. Land surface temperature is distinct from near-surface air temperature, which is typically measured by weather stations 2 meters above the ground, but the two usually track each other quite closely. With global coverage of temperature from both microwave and infrared data, satellites can help fill in gaps in near-surface air temperature data where weather stations aren’t available, such as Antarctica and the Tibetan Plateau. The data are also valuable in their own right: Land surface temperatures are used to map urban heat islands and heat disparities, check the accuracy of climate models, and assess drought severity.

However, land and air temperature measurements don’t always track each other as accurately as usual, so scientists need to check them carefully before they use them to study the climate. To determine which land surface temperature (LST) satellite data sets are the most reliable, Good et al. completed the first assessment of six different land surface temperature data sets from the European Space Agency’s Climate Change Initiative for LST project. The researchers compared those data to near-surface air temperature data to check for mismatches and looked for inconsistencies, for example, after satellite sensors were changed.

The team found that the six satellite-based land surface temperature data sets generally show similar variability to near-surface temperatures from weather stations, but satellites with microwave-based sensing slightly outperformed infrared-based sensing. Among the six data sets, MODIS (Moderate Resolution Imaging Spectroradiometer)/Aqua and Advanced Along-Track Scanning Radiometer—both infrared data sets—most reliably tracked temporal changes in near-surface air temperatures, suggesting they are currently the best candidates for long-term temperature monitoring and trend detection. The others suffered from stability problems that resulted in jumps and disconnections from the near-surface air temperature data.

Together, the findings point to the importance that long-term, satellite-based records for land surface temperature can have for understanding changes to Earth’s climate while highlighting the need for careful consideration of any data set’s consistency over time. (Earth and Space Science, https://doi.org/10.1029/2022EA002317, 2022)

—Rebecca Dzombak, Science Writer

Citation: Dzombak, R. (2022), Satellites can accurately take Earth’s temperature, Eos, 103, https://doi.org/10.1029/2022EO220423. Published on 28 September 2022.
Text © 2022. AGU. CC BY-NC-ND 3.0
Except where otherwise noted, images are subject to copyright. Any reuse without express permission from the copyright owner is prohibited.
27 Sep 23:00

Eurovibe! At the Mercedes Benz Arena

by The Späti Boys
Tom Roche

EXCELLENT dive into German and European sports (et al) culture, esp compared to US

Rob, Julia and Nick sit down and talk about their time at the Eurobasket Quarterfinals in Berlin. A more laidback round of experiencing Eurovibes in the wild.

HOW TO SUPPORT US:
https://www.patreon.com/cornerspaeti

HOW TO REACH US:
Corner Späti https://twitter.com/cornerspaeti
Julia https://twitter.com/KMarxiana
Rob https://twitter.com/leninkraft
Nick https://twitter.com/sternburgpapi
Uma https://twitter.com/umawrnkl
Ciarán https://twitter.com/CiaranDold

Support Corner Späti

26 Sep 18:34

#143 Moving the Goalposts

Tom Roche

EXCELLENT description of how US private/charter schools are increasingly failing to deliver the student test scores which were used to justify their increasingly-large tax subsidies, and how privatization propaganda is accordingly getting increasingly squishy (focusing on "values," "character," etc)

What if data doesn’t matter? That’s the question that has been weighing on education researcher Josh Cowen. After spending two decades studying school vouchers, Cowen has concluded that the data is too stark to justify spending public dollars on private tuition. And yet school choice advocates are proposing - and increasingly winning - massive expansions of these programs. That seeming contradiction has spurred Cowen to speak out, and he hopes that other academics will join him–-before it’s too late. The financial support of listeners like you keeps this podcast going. Subscribe on Patreon: https://www.patreon.com/HaveYouHeardPodcast or donate on PayPal: https://www.paypal.me/haveyouheardpodcast
26 Sep 16:51

Episode 212 - Labor Pains

Tom Roche

EXCELLENT short history of US labor c1945-2022 and current political implications

Subscribe to Bad Faith on Patreon to instantly unlock our full premium episode library: http://patreon.com/badfaithpodcast   This week, Briahna asks history professor and author of A History of America in Ten Strikes Erik Loomis whether the past reveals the potential of the current labor surge. How did we go from almost no union activity to a workforce strong enough to force FDR into creating the modern social safety net in ten years or so? What role did third party's play, and is the modern left too indifferent to supporting third party movements? And importantly: why is there so much hostility to the idea of a general strike? What does history tell us about the power of solidarity strikes, and what can we do today to make these "illegal" strikes more likely to occur?   Subscribe to Bad Faith on YouTube for video of this episode. Find Bad Faith on Twitter (@badfaithpod) and Instagram (@badfaithpod).   Produced by Armand Aviram.   Theme by Nick Thorburn (@nickfromislands).
26 Sep 16:48

Gemma Arrowsmith's Sketched Out

Tom Roche

not hilarious, but consistently funny sketch comedy well worth 27 min of your time

Gemma Arrowsmith has a new sketch show on Radio 4, but will she be able to host it herself? In the first episode, Paterson Joseph who has been drafted in to host by execs Theo and Cleo, who hope he will boost ratings. Gemma has to work out how to wrestle back control of her show, full of sketches about the Pemberley Cinematic Universe, a Musical Theatre news bulletin, and we find out who banksy really is. Performed by: Gemma Arrowsmith, Kudzanayi Chiwawa, Dan Starkey & Thomas Nelstrop Guest host: Paterson Joseph Written by: Gemma Arrowsmith Script Edited by: Tasha Dhanraj Sound design: Neil Goody at Premises Studios Production Coordinator: Sarah Nicholls The Producer was Gwyn Rhys Davies, a BBC Studios Production.
26 Sep 15:26

Andrey Listopadov: Reproducible Research with Org Mode, Fennel, and LÖVE

by Andrey Listopadov
Tom Roche

not much interested in {Lua, Fennel, LÖVE} but a good detailed illustration of literate programming with Org

Today I would like to talk about three separate tools, and how we can combine them with the power of Emacs.

Our tools for today are:

  • Fennel - a Lisp-like surface syntax for Lua that makes programming in Lua fun and more robust.
  • Org Mode - a markup language and an application inside Emacs, which allows its users to create documents that include interactive pieces of code.
  • LÖVE - a game engine that allows programming games in Lua.

This post is itself a program, describing how you could create similar Org documents and explore literate programming/reproducible research with Fennel, or other languages for that matter. It’s possible thanks to Org Mode and my new package ob-fennel, which implements necessary functions for sending Fennel code blocks to the REPL process. For a better experience, you should read this in Emacs, and you can get the original .org file from here. If you want to follow the instructions, make sure to install Fennel and LÖVE for this to work.

Bootstrapping LÖVE

First, we need to bootstrap LÖVE so it could understand Fennel code:

local fennel = require "fennel"
table.insert(package.loaders or package.searchers, fennel.searcher)

We’ve required fennel the library and registered the fennel.searcher function as one of the functions responsible to loading files. With that, theoretically, we no longer need to write any more Lua code, and instead, we can write in Fennel, and then use plain Lua’s require to load the files. Let’s create a REPL (Read Eval Print Loop) that will allow us to do interactive programming in LÖVE via its thread and event systems.

First, let’s require fennel once again, and also require love.event. Next, we’ll do a little trick that I’ll explain later, but for now, we’ll only need to capture the module-scope value of ... into variables event and channel:

(local fennel (require :fennel))
(require :love.event)

(local (event channel) ...)

This will make sense in a moment. Now, we need a REPL itself. REPL consists of the prompt that asks for more input, and the loop that calls the prompt which reads some input and sends it to a channel. Let’s define the prompt function first:

(fn prompt [next-line?]
 (io.write (if next-line? "" ">> ")) (io.flush) (io.read))

Now, we can create the infinite loop, that will read from stdin and push the read value into LÖVE’s event system. That’s where we’ll use the captured event variable, however, we’ll need to run this loop only in a LÖVE thread, so we’ll check if the channel was bound:

(when channel
 ((fn loop [input]
 (love.event.push event input)
 (let [[event-type &as message] (channel:demand)]
 (match message
 [:data output]
 (each [_ ret (ipairs output)]
 (print ret))
 [:error kind & data]
 (print (string.format
 "%s error: %s" kind
 (accumulate [msg "" _ message (ipairs data)]
 (.. msg (tostring message))))))
 (loop (prompt (= event-type :next-line)))))
 (prompt)))

Once data appears in the channel, this function exterminates what pattern it received. It is always a table, where the first element means the kind of data, and the rest of the table is the data itself. That’s the protocol we’re going to write in a moment.

The loop check if the event-type is either :data or :error and acts accordingly. In addition to that, there’s a third event-type :next-line which represents the situation when the REPL receives incomplete input and waits for more lines. Let’s implement this protocol:

(let [thread (-> "repl.fnl"
 love.filesystem.read
 (fennel.compileString nil)
 (love.filesystem.newFileData :repl)
 love.thread.newThread)
 io-channel (love.thread.newChannel)
 coro (coroutine.create fennel.repl)]
 (->> {:readChunk (fn [{: stack-size}]
 (when (> stack-size 0)
 (io-channel:push [:next-line]))
 (coroutine.yield))
 :onValues (fn [data] (io-channel:push [:data data]))
 :onError (fn [kind ...] (io-channel:push [:error kind ...]))}
 (coroutine.resume coro))
 (thread:start :eval io-channel)
 (set love.handlers.eval #(coroutine.resume coro $)))

This is an asynchronous REPL, made with Lua’s coroutines. You may wonder, how it will start the loop function if it was under the when channel guard, but that’s exactly what this piece of code does.

First, it loads itself via love.filesystem.read and compiles Fennel code to Lua via fennel.compileString function. Next, this compiled representation is used to create a FileData object, that is used to start a LÖVE thread with the love.thread.newThread function. So this module will be executed twice - first when main.lua loads the file, and second, when LÖVE spawns the thread, but were not there, yet.

After we’ve created the thread we create an io-channel and the REPL coroutine. Next, we start the coroutine by passing it a table of functions, each of which will push data to the io-channel. Importantly, the readChunk function pauses the coroutine after every read, allowing it to run asynchronously within the main thread.

Finally, we start the thread by passing :eval which will be bound to the event variable, and io-channel which will be bound to channel. This thread spins the loop function, which blocks the thread waiting for the input, while the main LÖVE thread continues to run.

With all of that, we can finally require the repl.fnl file in the main.lua like this:

require "repl"

Also, let’s disable vsync while we’re at it. For some reason, it makes the REPL slow on my machine. We won’t be needing it anyway:

function love.conf(t)
 t.window.vsync = 0
end

Now we can start hacking in real time!

Drawing plots

Since we’re done with the literate programming example, let’s look at how the reproducible research can be organized. I’m sure you should be familiar with the concept of a notebook, like R Markdonw or Jupiter. We’re going to achieve something like that.

If you’re reading this file in Emacs, which you should, press the C-c C-v t shortcut, which will run the org-babel-tangle function. After executing it, Emacs will create three files main.lua, conf.lua, and repl.fnl in the same directory as this file. If you’re not reading this file in Emacs, then, well, get Emacs, or just believe me - it works.

Let’s plot a function via LÖVE2D and Fennel. I’m not sure if there’s a library for drawing plots with LÖVE, but it’s ain’t fun to use something like that anyways, so let’s build our own! First, we’ll need a Canvas object to draw to:

(local canvas (love.graphics.newCanvas 640 480))

Put the cursor in this source code block and press C-c C-c shortcut (or call the org-babel-execute-src-block function with M-x) The empty LÖVE window will appear, and Emacs will display a message in the prompt area, with the contents something like “Please re-evaluate once Fennel is initialized”. We won’t be needing this window, so you can minimize it - we’ll be drawing off-screen onto a canvas and then saving it as an image. Org-mode provides us with all we’ll need to preview results without leaving Emacs.

Once Fennel is loaded, and all threads were spawned, hit C-c C-c again, and you should see "nil" in the echo area. This means that the code was executed successfully and the canvas variable was created.

Now, let’s write a function that will draw a grid to the active canvas. First, we’ll need a function that will calculate the grid step based on the zoom level. Our zoom level is represented in percentages, which we’ll later convert to values by dividing by 100. However, for our grid, we will be doing an infinite zoom with finite details.

This function computes the step between each grid line based on current zoom level.

(fn calc-step [zoom]
 (let [gscale (^ 10 (bit.bor (math.log zoom 10) 0))]
 (* zoom 100 (/ gscale))))

It’s a bit convoluted, but the key here is the bitwise or operator - that’s what makes our grid cycle between zoom levels properly. We now can define the function that computes and draws the grid itself:

(fn draw-grid [zoom]
 (let [(w h) (: (love.graphics.getCanvas) :getDimensions)
 step (calc-step zoom)]
 (love.graphics.setColor [1 1 1 1])
 (love.graphics.rectangle :fill 0 0 w h)
 (love.graphics.setLineWidth 1)
 (each [_ [step color]
 (ipairs [[(/ step 10) [0.7 0.7 0.7 (/ (% step 1000) 1000)]]
 [(* step 1) [0.9 0.9 0.9 (- 1 (/ (% step 1000) 1000))]]])]
 (let [grid []]
 (fcollect [x (+ (/ w 2) step) w step :into grid] [x 0 x h])
 (fcollect [x (- (/ w 2) step) 0 (- step) :into grid] [x 0 x h])
 (fcollect [y (+ (/ h 2) step) h step :into grid] [0 y w y])
 (fcollect [y (- (/ h 2) step) 0 (- step) :into grid] [0 y w y])
 (love.graphics.setColor color)
 (each [_ line (ipairs grid)]
 (love.graphics.line line))))))

This function actually draws two grids - one for unit size, and one for 1/10 of the unit size, and applies dynamic transparency based of the zoom level. This way, we can create an illusion of the infinite zoom level, that It’s a bit verbose, but all it really does is create a table of line segments from the center of the canvas in all four directions with the calculated step interval.

This only draws the grid, though, we also need to draw the X and Y axis, with some markings indicating the zoom level:

(fn draw-axis [zoom]
 (let [(w h) (: (love.graphics.getCanvas) :getDimensions)
 step (calc-step zoom)]
 (love.graphics.setLineWidth 1)
 (love.graphics.setColor [0.3 0.3 0.3 1])
 (love.graphics.line [(/ w 2) 0 (/ w 2) h])
 (love.graphics.line [0 (/ h 2) w (/ h 2)])
 (let [h (/ h 2) w (/ w 2)]
 (for [x step w step]
 (love.graphics.line [(+ x w) h (+ x w) (+ h 2)])
 (love.graphics.print (string.format "%.1f" (/ x zoom)) (+ x w) (+ h 5)))
 (for [x (- step) (- w) (- step)]
 (love.graphics.line [(+ x w) h (+ x w) (+ h 2)])
 (love.graphics.print (string.format "%.1f" (/ x zoom)) (+ x w) (+ h 5)))
 (for [y step h step]
 (love.graphics.line [w (+ y h) (+ w 2) (+ y h)])
 (love.graphics.print (string.format "%.1f" (- (/ y zoom))) (+ w 5) (+ y h)))
 (for [y (- step) (- h) (- step)]
 (love.graphics.line [w (+ y h) (+ w 2) (+ y h)])
 (love.graphics.print (string.format "%.1f" (- (/ y zoom))) (+ w 5) (+ y h)))
 (love.graphics.print 0 (+ w 5) (+ 5 h)))))

This function works similarly to the draw-grid one, except it only draws two lines intersecting at the canvas’ center, and the numbers, indicating units of measure. Each number also has a small mark at the axis for better readability.

Finally, let’s write a function plot that will accept a function fun which it will plot on the canvas, and some additional arguments, like from, to, step. Also, did I mention that you should press C-c C-c on each code block in this section? It will send the code to the running LÖVE process, and we will be able to see the results dynamically. But before we do that, let’s write a function that transforms so-called world coordinates to screen coordinates:

(fn world->screen-coordinates [[x y] zoom]
 (let [(w h) (: (love.graphics.getCanvas) :getDimensions)]
 [(+ (* x zoom) (/ w 2)) (+ (- (* y zoom)) (/ h 2))]))

Oh, and we also need a function for generating a unique file name for the output image:

(fn unique-fname [name suffix]
 (let [(base ext) (string.match name "(.*)%.(.-)$")]
 (if (love.filesystem.getInfo
 (.. base (or suffix "") "." ext))
 (unique-fname name (+ (or suffix 0) 1))
 (.. base (or suffix "") "." ext))))

Alright, here’s the plot function:

(fn plot [{:fun f : from : to : step : zoom}]
 (let [image (unique-fname "result.png")]
 (canvas:renderTo
 #(let [zoom (/ (or zoom 100) 100)
 (w h) (: (love.graphics.getCanvas) :getDimensions)]
 (draw-grid zoom)
 (draw-axis zoom)
 (love.graphics.setColor [1 0 0 1])
 (love.graphics.setLineWidth 1)
 (let [points (fcollect [x from to (or step 0.1)]
 (world->screen-coordinates [x (f x)] zoom))]
 (each [i [x1 y1] (ipairs points)]
 (match (. points (+ i 1))
 [x2 y2] (love.graphics.line x1 y1 x2 y2))))))
 (: (canvas:newImageData) :encode :png image)
 (print (.. (love.filesystem.getSaveDirectory) "/" image))))

This function uses the renderTo method of the canvas object. It accepts an anonymous function, which draws the gird, the axis, sets the color of the plot to red, and finally draws the plot with love.graphics.points. We can execute it like that, by pressing C-c C-c on the next code block:

(plot {:fun #(* $ $) :from -50 :to 50 :step 0.01 :zoom 5000})

This produces an image, which you should see if you call the org-toggle-inline-images function. As you can see, it plots a simple \(x^2\) function, but we can plot any other, like \(\tan(\sin(x))\):

(plot {:fun #(math.tan (math.sin $)) :from -10 :to 10 :zoom 5000})

Or a more complex example would be generating a square wave via this formula \(\sum_{k=1,3,5,7,...,29}^{} \frac{sin(x\mul{k})}{k}\):

(plot {:fun #(accumulate [res (math.sin $)
 _ k (ipairs (fcollect [k 3 29 2] k))]
 (+ res (/ (math.sin (* $ k)) k)))
 :from -500 :to 500 :step 0.01 :zoom 8000})

You get the idea.

Additionally, we can create a function that plots Org tables, like this one:

x y
0 0
2 2
5 7
6 3
8 12
15 20
17 -2
19 -7
25 0

The function is mostly similar to plot except instead of calling a function it just goes through each table row, and builds line segments to draw:

(fn plot-table [{: data : zoom}]
 (let [image (unique-fname "result.png")]
 (canvas:renderTo
 #(let [zoom (/ (or zoom 1000) 100)
 (w h) (: (love.graphics.getCanvas) :getDimensions)]
 (draw-grid zoom)
 (draw-axis zoom)
 (love.graphics.setColor [1 0 0 1])
 (love.graphics.setLineWidth 1)
 (each [i row (ipairs data)]
 (let [[x1 y1] (world->screen-coordinates row zoom)]
 (match (. data (+ i 1))
 next-row
 (let [[x2 y2] (world->screen-coordinates next-row zoom)]
 (love.graphics.line x1 y1 x2 y2)))))))
 (: (canvas:newImageData) :encode :png (string.format image))
 (print (.. (love.filesystem.getSaveDirectory) "/" image))))

We can plot it like this, passing the table via the :var data=lines header property:

(plot-table {: data :zoom 1000})

You can build more complex functions, that, for example, draw several graphs on the same canvas, or draw entirely different types of graphs altogether. Though this requires defining functions for all these kinds of visualizations, and I guess this is why people tend to use other languages for the task, like R.

Inline evaluation

Well, graphs are cool and all, but what about supplying values into the text directly? We can do that too, and although, we could do this in our LÖVE REPL, that’s a great opportunity to showcase another ability of Org Babel - run multiple instances of Fennel, using completely different environments!

For example, suppose we have some kind of a formula, that, for example, calculates the Ackermann function:

(fn A [m n]
 (if (= n 0) 0
 (= m 0) (* 2 n)
 (= n 1) 2
 (A (- m 1)
 (A m (- n 1)))))

We can define the function \(n^2\) using the (fn square [n] (A 1 n)), and use it like (square 4) producing 16 as a result. Or, we can define a function that computes \(2\uparrow\uparrow{n}\) like this: (fn two⇈n [n] (A 2 n)). Calling it as (two⇈n 4) gives us 65536.

These code blocks are running in a separate session, using a regular Lua interpreter, instead of our LÖVE REPL. This is done by specifying the :session header argument, and giving it a name, which instructs ob-fennel to spawn a new process. Upon exporting, the results of the inline evaluation would update automatically which eliminates the problem of stale data in the paper. The results always reflect the actual code they were computed with.

The power of Org

The examples above are just the tip of the iceberg of what you can do with the Org package. Back when I wasn’t an Emacs user, I often found threads on the topic “why should I use Emacs?” and each of these threads contained at least one answer which just said “Org Mode”. I never understood why - what’s so good about Org that I can’t get from, say, Markdown?

Since then, I’ve switched to Emacs and started this blog, using Org Mode, Hugo, and the ox-hugo package. Org mode has a built-in exporting engine, which can export .org files to PDF, ODT, LaTeX, Markdown, or HTML files. The ox-hugo package adds another backend for this engine, which exports to Hugo compatible markdown, which is then used by Hugo to build this website.

And when I was starting this blog, I wasn’t sure that I made the right investment - I’ve just switched to Emacs a couple of months before, and I’m using this Org thing for writing. I was uneasy because if I would stop enjoying writing in this setup I might lose all motivation for writing altogether. But thankfully, I’ve liked the Org+Hugo combination, and it became the reason why I haven’t left Emacs since - it’s just too good as a writing experience.

Literate programming was the way I learned Org. I’ve used it to configure Emacs because Org Mode provides a way to load .org files as Emacs Lisp files, and you can replace your init.el with init.org if you want to. But to be honest, it’s a fun experiment, but I don’t find literate programming to be that practical. It’s even harder to consider, given that there aren’t a lot of tools besides Emacs, that allows writing programs in this style using any language. And you can’t just make your coworkers use Emacs all of a sudden. Yes, there are solutions specific to a particular language, but they lack usability in my opinion.

Reproducible research was a hot topic lately, and the growing popularity of Jupiter notebooks is a great indication. Org Mode might not provide all the fancy UI elements, that Jupiter notebook has, but theoretically speaking, nothing prevents you from writing a UI in a standalone tool, like the game engine, and using it as a rendering frontend from the comfort of Emacs. This post partly shows this, although, I went a more static route with embedded images. But still, anything is possible if you have the dedication to do it.

I hope this post was an interesting read, and you’ve become interested in Emacs and Org Mode, or even in Fennel and LÖVE combo. Feel free to contact me if you have any questions on the topic. See you soon!

25 Sep 21:28

Long Reads: Elizabeth Schmidt on Somalia and the Superpowers

Tom Roche

Jacobin Long Reads at its best with this history of Somalia c1960-c2012

Elizabeth Schmidt joins Long Reads for a discussion about Somalia's modern history of politics, crisis, and foreign intervention. Elizabeth is professor emeritus of history at Loyola University Maryland and the author of six books about Africa, including Foreign Intervention in Africa After the Cold War: Sovereignty, Responsibility, and the War on Terror.


Read her piece, "US Interference in Somalia Has Been a Disaster for Somalis," here: https://jacobin.com/2022/08/somalia-siad-barre-islamists-us-military


Get a year-long subscription to Jacobin, including our new issue, "Inflation," for $20: https://bit.ly/jacobinradio


Long Reads is a Jacobin podcast looking in-depth at political topics and thinkers, both contemporary and historical, with the magazine’s longform writers. Hosted by Features Editor Daniel Finn. Produced by Conor Gillies, music by Knxwledge.



Hosted on Acast. See acast.com/privacy for more information.

25 Sep 17:26

Common's Like Water for Chocolate

by jimdero@jimdero.com (Greg Kot, Jim DeRogatis, Alex Claiborne, Andrew Gill)
Tom Roche

yet another VERY EXCELLENT "Classic Album Dissection," also discusses Common's career (in music) before and after this y2k album, as well as the Soulquarian movement, et much al

Over 20 years later, Common’s album Like Water for Chocolate remains a socially conscious, hip hop masterpiece. Hosts Jim DeRogatis and Greg Kot revisit an interview they did with Common during this time, plus they talk about the music, production history and lasting impact.

 

Join our Facebook Group: https://bit.ly/3sivr9T

Become a member on Patreon: https://bit.ly/3slWZvc

Sign up for our newsletter: https://bit.ly/3eEvRnG

Make a donation via PayPal: https://bit.ly/3dmt9lU

Send us a Voice Memo: Desktop: bit.ly/2RyD5Ah  Mobile: sayhi.chat/soundops

 

Featured Songs:

Common, "The Light," Like Water For Chocolate, MCA, 2000

Common, "Time Travelin' (A Tribute to Fela)," Like Water For Chocolate, MCA, 2000

Common, "Take It EZ," Can I Borrow a Dollar?, Relativity, 1992

Common, "I Used to Love H.E.R.," Resurrection, Relativity, 1994

D'Angelo, "Brown Sugar," Brown Sugar, Virgin, 1995

Common, "Funky for You," Like Water For Chocolate, MCA, 2000

Common, "A Song for Assata," Like Water For Chocolate, MCA, 2000

Common, "Payback Is a Grandmother," Like Water For Chocolate, MCA, 2000

Common, "The 6th Sense," Like Water For Chocolate, MCA, 2000

Common, "Thelonius," Like Water For Chocolate, MCA, 2000

Common, "Geto Heaven, Pt. 2 (Remix T.S.O.I.) [feat. Macy Gray]," Like Water For Chocolate, MCA, 2000

Common, "A Film Called (Pimp)," Like Water For Chocolate, MCA, 2000

Kanye West, "We Don't Care," The College Dropout, Roc-A-Fella, 2004

Kendrick Lamar, "Institutionalized (feat. Bilal, Anna Wise & Snoop Dogg)," To Pimp a Butterfly, Top Dawg Entertainment, 2015

Kacey Musgraves, "justified," Star-Crossed, MCA Nashville, 2021

Support The Show: https://www.patreon.com/soundopinions

See omnystudio.com/listener for privacy information.

24 Sep 19:19

Party's Over - 12th August

Tom Roche

EXCELLENT if formulaic BBC radio comedy--sparking wit at snappy pace

What happens when the prime minister suddenly stops being prime minister? One day you're the most powerful person in the country, the next you're irrelevant, forced into retirement 30 years ahead of schedule and find yourself asking 'What do I do now?'

"I can't just disappear like Gordon Brown. They say he barely gets out of bed now. Just sits there doing word-searches and eating Kit Kat Chunkies. Miserable. I hate the chunky ones." Former British Prime Minister Henry Tobin

This week, a security breach leads to MI5 sending Henry a new personal protection officer.

Starring Miles Jupp, Ingrid Oliver, Emma Sidi, Justin Edwards and Mali Ann Rees.

Written by Paul Doolan and Jon Hunter Producer: Richard Morris Production co-ordinator: Caroline Barlow Sound recordist and designer: David Thomas

A BBC Studios Production

24 Sep 14:30

How the West Provoked War in Ukraine

by Katie Halper
Tom Roche

VERY EXCELLENT

Click here for the full episode, including the extended interview with Ben Abelow where the expert plays political chess to show the previous and predicted moves of these cold war leaders.

Researcher and writer Dr. Ben Abelow, a scholar who lobbied Congress on nuclear arms policy, joins Useful Idiots to explain, as his new book argues, how the west brought war to Ukraine.

“The goal of the US,” Abelow says, “is not to save Ukrainians but to degrade Russia’s military until they won’t be able to fight in the future. And while some say stopping Russia is a humanitarian goal, the way one would degrade Russia’s military is to keep an extended war going and fight to the last Ukrainian.”

Abelow analyzes the history of this cold war, the aggression by each side, and the hypocrisy of the argument that Ukraine has a sacrosanct right to join NATO.

“The right to join NATO is the right to place a western military arsenal on Russia’s border. If Russia made a military alliance with Canada or Mexico, US leaders would not be talking about their right to do so.”

And on this week’s news of Putin announcing military escalation and giving a thinly-veiled threat of nuclear war, Dr. Abelow warns:

“I hope it’s taken seriously.”

These are scary times. So buckle up, cook some Nyquil chicken, and get ready for this week’s episode of Useful Idiots. Check it out now.

Subscribe now

24 Sep 14:20

665 - Beltway Phoenix: Total Brandonization feat. Dave Weigel (9/23/22)

Tom Roche

Christman and Weigel on the shitshow that is US electoral politics

Matt and Chris are once again joined by “Punished” Dave Weigel to look at the final matchups in the 2022 mid term elections. With the election shaping up to be a referendum on Dobbs vs. “The Economy”, do the Democrats have it in them to pull off an unexpected win? Is McConnell trying to throw the race? Do you really need a functioning brain to be a U.S. Senator? Answers to all this and more within.


Dates & Tickets to all our upcoming shows: https://www.chapotraphouse.com/live

And of course, links to our new merch: https://chapotraphouse.shop/

Get bonus content on Patreon

Hosted on Acast. See acast.com/privacy for more information.

23 Sep 20:41

Ep. 167: The Attractive Anti-Politics of 'Gerontocracy' Discourse

Tom Roche

VERY EXCELLENT

"Why Are We Still Governed by Baby Boomers and the Remarkably Old?," inquires The New York Times. "Why Do Such Elderly People Run America?," The Atlantic wonders. "Gerontocracy Is Hurting Democracy," insists New York Magazine’s Intelligencer. "Too old to run again? Biden faces questions about his age as crises mount," The Guardian reports.   Though these headlines are framed as exploratory questions, news media seem to have their minds made up: the problem with Washington is that it’s chock full of geezers. In recent years, we’ve often heard that U.S. policymaking, helmed at the federal level by seventy- and eighty-somethings like Donald Trump, Joe Biden, and Nancy Pelosi, and at the state level by the similarly aged Dianne Feinstein, Chuck Grassley and Pat Leahy, is simply growing too old and out of touch with the electorate.   There’s some credence to this, of course. It’s certainly true that those occupying the most powerful positions in U.S. government, on the whole, don’t legislate to the needs of the public – whether on healthcare, policing, education – the list goes on and on. But is that really because of legislators' age? Why does age have to be the focus in this analysis, rather than policy positions and, relatedly, class interests, which exist independent of age? Who does it serve to reduce the causes of U.S. austerity politics and violence to pat, Pepsi marketing-style "generation gap" discourse? On this episode show, we detail how "generations" analysis is ineffectual and, more often than not, misses the mark. We'll discuss how fears of a "gerontocracy" can – if not in intent, in effect – malign old age itself, stigmatize the elderly and, above all, distract from what could be a substantive critical analysis of real, more profound vectors of oppression such as class, racism, sexism and anti-LGBTQ currents.   Our guest in Winslow Erik Wright.
22 Sep 00:42

Michael and Us: Coronation Training Montage

Tom Roche

VERY EXCELLENT: MU episode#=366 starts by analyzing role of monarchy in culture of US, UK, and Canada (and in politics of latter 2) before a rollicking savagery of the bad history, characters, and moviemaking of 'The Kings Speech'. As the winner of the 2010 'Best Picture' Oscar (which our hosts try to explain, if only to condemn), it proved yet once again that, as someone once said, ["God Is Not Great"](https://en.wikipedia.org/wiki/God_Is_Not_Great) ... that someone being, of course, Christopher Hitchens, who remained a great writer--at least, a great crafter of prose--long after his politics went to hell. Accordingly, Luke wraps the ep by reading excerpts from Hitch's review of this very movie, including yet another well-deserved destruction of the cult of Winston Churchill. 43 min of your time will be *very well spent*.

We mark Queen Elizabeth's passing by looking at towering work of royalist kitsch, THE KING'S SPEECH (2010). We discuss how this Oscar-winner humanizes the monarchy in order to uphold it.


See Luke speak at the Toronto International Festival of Authors on September 27 - https://festivalofauthors.ca/event/critical-conversation-new-working-class/


Hear Will on Canadaland - https://www.canadaland.com/podcast/815-our-royals-our-elves/


Michael and Us is a podcast about political cinema and our crumbling world hosted by Will Sloan and Luke Savage.




Hosted on Acast. See acast.com/privacy for more information.

21 Sep 17:41

Real Python: What Does if __name__ == "__main__" Do in Python?

Tom Roche

good short explanation of this important (as a guy who uses lotsa commandline scripts) Python idiom, also archived [here](http://web.archive.org/web/20220921144918/https://realpython.com/if-name-main-python/)

The if __name__ == "__main__" idiom is a Python construct that helps control code execution in scripts. It’s a conditional statement that allows you to define code that runs only when the file is executed as a script, not when it’s imported as a module.

When you run a Python script, the interpreter assigns the value "__main__" to the __name__ variable. If Python imports the code as a module, then it sets __name__ to the module’s name instead. By encapsulating code within if __name__ == "__main__", you can ensure that it only runs in the intended context.

By the end of this tutorial, you’ll understand that:

  • Python’s if __name__ == "__main__" idiom allows code to run only when the script is executed, not when it’s imported.
  • The idiom checks if the __name__ variable equals "__main__", confirming that the script is the top-level module.
  • Using this idiom helps prevent unintended code execution during module imports.
  • It’s useful for adding script-specific logic, such as user input or test cases, without affecting module imports.
  • Best practices suggest using this idiom minimally and placing it at the bottom of the script for clarity.

You’ve likely encountered Python’s if __name__ == "__main__" idiom when reading other people’s code. No wonder—it’s widespread! Understanding Python’s if __name__ == "__main__" idiom will help you to manage script execution and module imports effectively. In this tutorial you’ll explore its mechanics, appropriate usage, and best practices.

Take the Quiz: Test your knowledge with our interactive “Python Name-Main Idiom” quiz. You’ll receive a score upon completion to help you track your learning progress:


Interactive Quiz

Python Name-Main Idiom

Test your knowledge of Python's if __name__ == "__main__" idiom by answering a series of questions! You've probably encountered the name-main idiom and might have even used it in your own scripts. But did you use it correctly?

Get Your Code: Click here to download the free sample code that you’ll use to learn about the name-main idiom.

In Short: It Allows You to Execute Code When the File Runs as a Script, but Not When It’s Imported as a Module

For most practical purposes, you can think of the conditional block that you open with if __name__ == "__main__" as a way to store code that should only run when your file is executed as a script.

You’ll see what that means in a moment. For now, say you have the following file:

Python echo.py
 1def echo(text: str, repetitions: int = 3) -> str:
 2    """Imitate a real-world echo."""
 3    echoes = [text[-i:].lower() for i in range(repetitions, 0, -1)]
 4    return "\n".join(echoes + ["."])
 5
 6if __name__ == "__main__":
 7    text = input("Yell something at a mountain: ")
 8    print(echo(text))
Copied!

In this example, you define a function, echo(), that mimics a real-world echo by gradually printing fewer and fewer of the final letters of the input text.

Below that, in lines 6 to 8, you use the if __name__ == "__main__" idiom. This code starts with the conditional statement if __name__ == "__main__" in line 6. In the indented lines, 7 and 8, you then collect user input and call echo() with that input. These two lines will execute when you run echo.py as a script from your command line:

Shell
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
Copied!

When you run the file as a script by passing the file object to your Python interpreter, the expression __name__ == "__main__" returns True. The code block under if then runs, so Python collects user input and calls echo().

Try it out yourself! You can download all the code files that you’ll use in this tutorial from the link below:

Get Your Code: Click here to download the free sample code that you’ll use to learn about the name-main idiom.

At the same time, if you import echo() in another module or a console session, then the nested code won’t run:

Python
>>> from echo import echo
>>> print(echo("Please help me I'm stuck on a mountain"))
ain
in
n
.
Copied!

In this case, you want to use echo() in the context of another script or interpreter session, so you won’t need to collect user input. Running input() would mess with your code by producing a side effect when importing echo.

When you nest the code that’s specific to the script usage of your file under the if __name__ == "__main__" idiom, then you avoid running code that’s irrelevant for imported modules.

Nesting code under if __name__ == "__main__" allows you to cater to different use cases:

  • Script: When run as a script, your code prompts the user for input, calls echo(), and prints the result.
  • Module: When you import echo as a module, then echo() gets defined, but no code executes. You provide echo() to the main code session without any side effects.

By implementing the if __name__ == "__main__" idiom in your code, you set up an additional entry point that allows you to use echo() right from the command line.

There you go! You’ve now covered the most important information about this topic. Still, there’s more to find out, and there are some subtleties that can help you build a deeper understanding of this code specifically and Python more generally.

Read the full article at https://realpython.com/if-name-main-python/ »


[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short & sweet Python Trick delivered to your inbox every couple of days. >> Click here to learn more and see examples ]

21 Sep 01:52

Bonus Episode: Don’t Think for Yourself, Chapter 1

Tom Roche

excellent

Peter reads the first chapter of his new book Don’t Think for Yourself: Authority and Belief in Medieval Philosophy, available from University of Notre Dame Press. Pre-order with the code 14FF20 from undpress.nd.edu, to get a 20% discount!

20 Sep 20:41

A Progressive Vision for the Economy

Tom Roche

VERY EXCELLENT interview with the one-and-only Dean Baker

Since it was founded 23 years ago, the Center for Economic and Policy Research has sought to challenge the right-wing consensus that often rules economic policymaking in Washington, D.C. CEPR co-founder Dean Baker joins Jon Schwarz to discuss his career, his thoughts on the Biden economy, and his ideas for the future.

https://join.theintercept.com/donate/now



Hosted on Acast. See acast.com/privacy for more information.

20 Sep 17:11

US imperial theorist Fukuyama praises the deep state (with historian Aaron Good)

Tom Roche

VERY EXCELLENT, esp regarding the intellectual history behind US {foreign/military policy, international relations}, tracing its lineage from Samuel P. Huntington (1927-2008) and the Trilateral Commission through his colleague Zbigniew Brzezinski to the neocons, now to his student Fukuyama and the neoliberal transition and its disturbing alliance with the US empire deepstate. (Regarding that authoritarian alliance: listen to this week's [Useful Idiots](https://usefulidiots.substack.com/p/matt-taibbi-returns) (archived [here](http://web.archive.org/web/20220916170148/https://usefulidiots.substack.com/p/matt-taibbi-returns)) for more on this disturbing development.)

US imperial court philosopher Francis Fukuyama once declared liberal capitalist democracy was the "end of history." Now he is openly praising the deep state. Ben Norton is joined by political scientist Aaron Good of the American Exception podcast to analyze his fallacious arguments. VIDEO: https://youtube.com/watch?v=Rr1a4BshPo8 You can support Aaron's show American Exception at https://patreon.com/americanexception
20 Sep 05:17

PBS and BBC Team Up to Misinform About Brazil’s Bolsonaro

by Brian Mier
Tom Roche

just when you thought imperial corporate-funded media couldn't sink any lower ...

 

Both the US and British governments supported the rise of Brazil’s far-right President Jair Bolsonaro. A high-ranking British Treasury official—allegedly future Prime Minister Liz Truss—had secret meetings with the future president in 2018 to discuss “free trade, free markets and post-Brexit opportunities”  (BrasilWire, 3/25/20).

The US Department of Justice was a crucial partner in the Lava Jato (“Car Wash”) investigation, which resulted in the prosecution and jailing of Brazil’s left-leaning former president Luiz Inácio “Lula” da Silva. The politically motivated legal campaign against Lula served to prevent his participation in the 2018 presidential election, in what Gaspard Estrada calls “the biggest judicial scandal in Brazilian history.”

Because of this history, and because Brazil is a hard country to explain concisely, I was weary to learn that the British and US state-affiliated media outlets BBC and PBS had co-released a documentary about Jair Bolsonaro only a few weeks before this year’s Brazilian presidential election (10/2–30/22). It didn’t fail to disappoint.

Rise of the Bolsonaros was released on August 28 on PBS, and is airing as a three-part series in Britain on BBC2.  It tells the story of Brazil’s far-right president through the words of people like Steve Bannon, Bolsonaro’s son Flavio, journalists, and current or former allies of the president, including a far-right lawmaker who is merely introduced as an “anti-corruption crusader.”

Feigned objectivity

Maria de Rosario

The only time a member of the Brazilian Workers Party got to speak was when Rep. Maria do Rosario was asked to describe her reaction to a misogynistic taunt from Bolsonaro.

With over 20 interviewees, the producers feign objectivity by granting a small proportion of airtime to progressive politicians. Two of the three progressive interviewees, however, are from the relatively tiny PSOL party—a nonthreatening source, given that the party is not even running a presidential candidate this year. The single representative of Lula’s Workers Party, Rep. Maria do Rosario, is given around 30 seconds to answer the following aggressively uncomfortable question: “How did you feel when Bolsonaro told you you didn’t deserve to be raped?”

The cast of journalists included some of the biggest cheerleaders for Lava Jato and Lula’s politically motivated imprisonment. Given the most airtime among the journalist interviewees was Brian Winter, who was introduced as a former Reuters chief in Brazil. The fact that Winter’s current job was not mentioned is indicative of the documentary’s editorial bias.

Winter is vice president of policy at Americas Society/Council of the Americas, the think tank founded by David Rockefeller in 1963 that was a key player in the 1973 coup against Chilean President Salvador Allende. Since then, AS/COA has worked, most recently  through its media arm, Americas Quarterly—of which Winter is editor-in-chief—to promote nearly every other far-right US intervention in Latin America, including the recent regime-change efforts in Venezuela and Bolivia.

AS/COA held a closed-door meeting in New York in 2017 with US business leaders and Bolsonaro—then a presidential hopeful—evidently prompting Americas Quarterly to lend increasingly favorable coverage to the far-right demagogue. The think tank’s current list of donors reads like a who’s who of mining and agribusiness corporations, many of which have benefited immensely from the massive privatization and environmental deregulation campaigns that followed the 2016 legislative coup against President Dilma Rousseff.

Desertification = development

During the Rise of the Bolsonaros opening montage, as footage of a burning rainforest appeared on screen, Winter said, “Jair Bolsonaro believes that the Brazilian Amazon is the magical path to economic prosperity.” There was no mention of Winter’s prominent role within AS/COA, which counts the agribusiness giant Cargill as one of its “elite corporate members.” This omission is especially glaring, since Cargill has been repeatedly cited as one of the main culprits in the destruction of the Amazon rainforest.

This set the tone for the film’s treatment of one of the only Bolsonaro policies that was criticized in the nearly three-hour production: illegal deforestation. Every time footage related to this issue appeared, a journalist or Bolsonaro ally arrived on screen to water it down, usually by a ratio of at least two to one.

Camila Azevedo: "We don't want to be walking around naked all our lives."

Bolsonaro meme designer Camila Azevedo describes how deforestation is helping the Indigenous.

One example came nearly an hour in, when the issue of deforestation was first given in-depth treatment. “From the very beginning, Bolsonaro wanted to develop the Amazon economically,” BBC‘s Katy Watson said—as if it were a given that the desertification of former rain forests, the poisoning of rivers with mercury and the destruction of renewable commodity chains is good for the economy.

Similar treatment was given to Bolsanaro’s systematic persecution and dispossession of Brazil’s Indigenous communities, some of which still live with little or no contact with outsiders. APIB—a coalition of Indigenous associations from across Brazil—has already called on the International Criminal Court to investigate Bolsonaro for genocide and crimes against humanity. After Indigenous leader Maial Kayapó explained how Bolsonaro encourages violence against her people, Camila Azevedo, the Bolsonaro family’s young meme designer, pops on the screen and says: “Most Indigenous, they want land to till…. They don’t want to walk around naked for the rest of their lives.”

Rags to riches

 

Jair Bolsonaro

Jair Bolsonaro gives PBS viewers a tour of his childhood home.

Bolsonaro’s early years are framed as a rags-to-riches story of rugged individualism. The story begins with the laughable claim that Bolsonaro grew up in the “badlands” of Brazil. In fact, Bolsonaro was born in Campinas, a relatively wealthy city with a metro area population of 3.7 million.

The banana-farming town of Eldorado, where they moved when he was 11, while located in one of the poorest regions of Brazil’s richest state of Sao Paulo, could hardly be called a “badlands.” Brazil’s badlands are the semi-arid back country of the Northeast, where gangs of Wild West–style outlaws called cangaceiros roamed on horseback until the 1940s.

In introducing Brazil’s sub-fascist military dictatorship (1964–85), corporate PR flack Brian Winter tells us that it was Bolsonaro’s “golden age.” Brazilian studies professor Anthony Perreira says:

If you were in one of the armed left groups, if you were a member of the Communist Party, if you were a student, and if you were engaged politically, it was a very dangerous time. But for a lot of people, it was a period of growth.

For the last 500 years, Brazil’s export commodity–based economy has been characterized by cyclical boom and bust periods. During the 21-year dictatorship, there was indeed a five-year boom period between 1968–73, but due to the government’s repression of organized labor and its efforts to suppress wages, it was accompanied by a drastic increase in income inequality. By the time the dictatorship ended, Brazil had become one of the most unequal countries in the world.

This inequality was exacerbated by the military government’s lack of commitment to public education, and its eagerness to take out massive loans from the World Bank to fund unsuccessful, environmentally devastating projects in the Amazon rainforest. Such failures led to the economic stagnation, hyperinflation and crippling foreign debt of what is now referred to as the “lost decade” of the 1980s.  When Perreira says, “For a lot of people it was a period of growth,” he is clearly referring to the elites who currently finance Bolsonaro rather than the Brazilian working class, which this documentary misrepresents as constituting the president’s primary base of support.

Man of the people

Bolsonaro’s petit bourgeois origins, glossed over in the film, are revealed in the story of his military career. Agulhas Negras, the elite Brazilian army academy where Bolsonaro studied after attending the Preparatory School of the Brazilian Army, has an extremely competitive admissions process.  It’s not the type of place where someone who grew up in “rags” would get into, but a traditional pathway of social ascension for members of the lower-middle class.

The documentary also relates how, in September 1986, then-Captain Bolsonaro wrote an article that appeared in Veja (9/3/86), a national news magazine, complaining about military officer salaries. A journalist says Bolsonaro “couldn’t afford to buy a house,” without mentioning that he was arrested for breaking army regulations by publishing the article. The documentary frames Bolsonaro as being broke and unable to support his family, but at the time of the article, Brazilian army captains earned 10,433 cruzados per month—over 12 times the country’s minimum salary of 804 cruzados.

Brian Winter

Brian Winter: “I was there when a reporter asked….” Where was he? At AS/COA. What was he doing there? Introducing Bolsonaro to his corporate sponsors in the mining, petroleum and agribusiness industries.

The salary may have been lower than what Bolsonaro felt he deserved, but it placed him among the roughly 10% of the national population in the upper-middle class.  Accurately portraying Bolsonaro as a Brazilian elite, however, doesn’t fit with the director’s attempt to portray Lula, who grew up in a mud shack and started working in a factory at age 14, as a liberal elite, and Bolsonaro as a man of the people, the same way Fox NewsTucker Carlson recently did during his one-week stay in Brazil running electoral propaganda for the president (FAIR.org, 7/25/22).

Bolsonaro’s 2017 visit to New York is presented as a brilliant strategy to validate his future candidacy to the Brazilian public, to show that “important people in the US wanted to listen to what he had to say.” Interviewee Brian Winter’s role in introducing Bolsonaro to US business elites is not mentioned at all, only alluded to by his anecdote about how cleverly Bolsonaro answered a question from a US reporter at the time about his rape comments directed at Maria do Rosario.

US-style culture war

Meanwhile, Steve Bannon and his far-right allies like Jason Miller have maintained communications with the Brazilian president’s family for years. In fact, the relationship between Bolsonaro’s sons and the American far right is so good that one of them attended the January 5, 2021, “war council” in Washington, DC, prior to the invasion of Capitol Hill. Bannon’s claim in the documentary that he reached out to the Bolsonaros to learn about their social media strategy seems like a blatant lie, since many of the tactics employed by Bolsonaro were clearly based on the Trump campaign’s culture war rhetoric.

The idea that Lula and Bolsonaro are at opposite ends of a US-style culture war is given disproportionate emphasis in the documentary. For example, at certain times when Lula is discussed, footage of men kissing at a pride parade appears on screen, as does an image of the former president holding a rainbow flag.

Such exaggerated treatment of Lula’s role in the cultural sphere ignores the fact that his popularity was largely driven by massive increases in spending on public health and education and successful poverty-reduction policies. Although, unlike Bolsonaro, Lula is not openly homophobic, he has faced criticism from the LGBT community for not going far enough to advance LGBT rights, and from feminists for not legalizing abortion.

Flavio Bolsonaro

Showcasing Flavio Bolsonaro’s sensitive side.

Nevertheless, the largest protests of Brazil’s working class since Bolsonaro took office had nothing to do with culture wars. The 2019 Education Tsunami protests, organized by student groups and teachers unions, brought over 2 million people into the streets of dozens of cities, and effectively stalled the Bolsonaro administration’s attempts to charge tuition at public universities.

Rio de Janeiro city councilor and anti–police violence crusader Marielle Franco, who is introduced only as an LGBT activist, was not a member of Lula’s Workers Party. Her assassination at the hands of members of a Rio de Janeiro militia, whose leader Adriano da Nobrega’s wife and mother both worked as “ghost employees” in Flavio Bolsonaro’s state congressional cabinet, is another scandal involving the Bolsonaro family that the documentary glosses over.

Instead, Flavio Bolsonaro, who appears several times in the documentary, shares humorous anecdotes about his childhood, and cries to the camera while remembering the 2018 stabbing incident involving his father, which far-right forces falsely tried to blame on Communists.

Missing Moro

Sergio Moro and Jair Bolsonaro

Conspicuously absent: Sergio Moro, who broke the law to remove Lula from the 2018 presidential elections then went on work as Bolsonaro’s minister of justice, is not mentioned once in the documentary.

The most glaring problem in the deeply flawed Rise of the Bolsonaros is the omission of arguably the single most important player in Bolsonaro’s rise to the presidency: former Lava Jato investigation judge Sergio Moro. During a period in which the Lava Jato task force was having frequent meetings with the US Department of Justice and the FBI, Moro repeatedly broke the law by collaborating with prosecutors to discredit the Workers Party and help Bolsonaro.

The documentary doesn’t mention that Lula’s election-season arrest, on charges of committing “undetermined acts of corruption,” was made after the Brazilian supreme court, under threats from the Army, opened an exception to the Constitution to enable his imprisonment while his appeals were ongoing. Instead, it brings up frivolous charges that were dropped before his trial even started, such as “receiving 1 million euros in bribes.” The fact that Lula was ultimately released from prison after the election is written off as a “technicality.” There is also no acknowledgment  that this delay was only made possible by the political bias of a crooked judge who illegally colluded with prosecutors throughout the trial.

While stating that the supreme court ruled that Lula could run for public office, the documentary omits the fact that he was fully exonerated on all charges, while the judge who imprisoned him, Sergio Moro, was found by that same court to have been tainted by judicial bias. An especially relevant piece of information left out of Rise of the Bolsonaros is the supreme court’s charge that Moro leaked fraudulent audio tapes to media in order to damage the reputation of Workers Party candidate Fernando Haddad just one week before the presidential elections, and then, in a clear conflict of interest,  accepted a cabinet position in the Bolsonaro government.

Not even mentioning Moro, let alone describing the crimes he committed to empower Bolsonaro, discredits the entire documentary. Without Moro, a false impression is left that Jair Bolsonaro’s rise to power was based entirely on his family’s cunning.

Steve Bannon

Steve Bannon gets the last word.

The program ends, laying any doubts about its lack of objectivity to rest once and for all, with the narrator saying, “The fate of Brazil is in the hands of its people,” followed by a 40-second pep talk by Steve Bannon—giving the last word on the upcoming Brazilian election to one of the main advocates for overturning the last US election.

The fact that US and British state-affiliated media outlets would promote misleading narratives less than a month before the most complicated Brazilian presidential election in modern history is another sad example of the long tradition of Western media facilitating imperialist meddling in Latin American elections.


Featured image: Jair Bolsonaro and sons, pictured in Rise of the Bolsonaros.


Messages to PBS can be sent to viewer@pbs.org (or via Twitter: @PBS). Please remember that respectful communication is the most effective.

The post PBS and BBC Team Up to Misinform About Brazil’s Bolsonaro appeared first on FAIR.

19 Sep 23:50

AskHistorians Podcast Episode 205 - Götz von Berlichingen and Robber Knights of the Holy Roman Empire with /u/PartyMoses

Tom Roche

VERY EXCELLENT

Jeremy Salkeld (EnclavedMicrostate) talks with /u/PartyMoses about the life and times of robber knight Götz von Berlichingen, who fought in various conflicts in the Holy Roman Empire in the early sixteenth century, and most famously did so with a prosthetic right hand. Topics discussed include martial culture, the politics of the Holy Roman Empire in the reign of Charles V, and disability in Early Modern Europe. 49 mins.

19 Sep 23:50

AskHistorians Podcast Episode 206 – The Moscow Metro with /u/mikitacurve

Tom Roche

excellent

Jeremy Salkeld (EnclavedMicrostate) talks with /u/mikitacurve about the creation and development of the Moscow Metro under Stalin, its origins in Soviet debates over urban planning, and how the art and monumentality of the underground railroad reflected the utopian ideals of the Soviet Union, even amid the ongoing Terror on the surface. 70 mins.