Shared posts

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 News‘ Tucker 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.

19 Sep 23:34

Matt Taibbi Returns

by Katie Halper
Tom Roche

VERY EXCELLENT

Click here for the full episode, including the extended interview with Matt Taibbi: Matt and Aaron ask why hasn’t Hillary Clinton been questioned for her Russiagate involvement, Matt remembers pranking General Secretary Gorbachev, and we take Matt’s new media quiz.

Once a Useful Idiot, always a Useful Idiot.

Matt Taibbi, who’s taken a hiatus from this pod to write his next book (he gives a sneak peek in the extended interview), just can’t stay out of the game. He’s back to talk about Democrats and Republicans sucking, the weird and terrible media, and the scary stories that are ignored by the mainstream.

His newest article on taint teams sheds like on a dark new phenomenon. The FBI has given itself the power to raid lawyers, take all of their documents, and then give itself permission to use the stolen documents in unrelated cases. It’s an easy way to skip getting a search warrant, and gives the government unprecedented power to bury its enemies. Matt explains the ominous story in detail.

And subscribe for the full interview: Matt and Aaron ask why hasn’t Hillary Clinton been questioned for her Russiagate involvement, Matt remembers pranking General Secretary Gorbachev, and we take Matt’s new media quiz.

Taibbi’s back this week, and you’re not gonna want to miss it. Check it out.

Subscribe now

19 Sep 22:59

Mini Show #55: Queen Elizabeth, Union Busting, Insider Trading, Credit Cards, & More!

Tom Roche

VERY EXCELLENT end segment: Matt Stoller on US payment system (esp credit cards) as an archaic ripoff compared to rest of world

Krystal, Saagar, & friends talk about youth voters, Queen Elizabeth, Saudi funding, congressional insider trading, credit card monopoly, & more!


To become a Breaking Points Premium Member and watch/listen to the show uncut and 1 hour early visit: https://breakingpoints.supercast.com/


To listen to Breaking Points as a podcast, check them out on Apple and Spotify


Apple: https://podcasts.apple.com/us/podcast/breaking-points-with-krystal-and-saagar/id1570045623 


Spotify: https://open.spotify.com/show/4Kbsy61zJSzPxNZZ3PKbXl 


Merch: https://breaking-points.myshopify.com/


Ryan Grim: https://theintercept.com/podcasts/deconstructed/ 


Emily Jashinsky: https://thefederalist.com/author/emilyjashinsky/ 


Matt Stoller: https://mattstoller.substack.com/

Learn more about your ad choices. Visit megaphone.fm/adchoices

19 Sep 19:10

NYT Spreads Myths on Inflation

by Dean Baker
Tom Roche

excellent short Baker blast against elite-promoted fake economic history

There is a common myth that Germany’s hyperinflation led to the collapse of democracy in Germany and the rise of Hitler. That is a nice story for pushing the inflation hawks’ agenda, but it doesn’t correspond to reality.

The hyperinflation had ended by 1924 and Germany’s economy stabilized with moderate rates of inflation and unemployment. The economic event that most directly was associated with Hitler’s rise to power was the Great Depression and surge in unemployment that followed the crash of the US stock market in 1929.

This reality didn’t stop Jonathan Wiseman, in a NYT “political memo,” from invoking this myth in a piece on the political consequences of inflation.

“’From bitter historical experience, we know how quickly inflation destroys confidence in the reliability of political institutions and ends up endangering democracy,’ Helmut Kohl, the chancellor of Germany, said in 1995, harking back to the hyperinflation of the Weimar Republic.”

The piece also blames Jimmy Carter’s failed re-election effort on the inflation in 1979 and 1980.

“Four years later, Jimmy Carter’s dreams of a second term were vaporized by 13.5 percent inflation.”

While high inflation surely hurt Carter’s re-election prospects, we also had a severe recession in 1980.

 

The unemployment rate soared from 6.0 percent in December of 1979, to 7.8 percent in July of 1980. This was one of the fastest surges of unemployment in the country’s history. The run-up in unemployment, just months before the election, surely had a large impact on Carter’s prospects. It is very misleading to imply that it was just inflation that sank Carter.

The post NYT Spreads Myths on Inflation appeared first on Center for Economic and Policy Research.

17 Sep 15:31

Episode 210 - The Call is Coming From Inside The House

Tom Roche

EXCELLENT--I disagree with Zogby's committment to the (wholly-owned by corporate America) Democratic Party, but he makes the case for CorpDem collaboration about as well as can be done.

Subscribe to Bad Faith on Patreon to instantly unlock our full premium episode library: http://patreon.com/badfaithpodcast   

This week Briahna sppeaks to DNC member, senior advisor to Jesse Jackson, & founder of the Arab American Institute James Zogby about the DNC's latest betrayal: Their failure to even debate a resolution, introduced by Dr. Zogby, to get dark money out of Democratic Party primaries. After seeing how hostile the Democratic Party is to progressives from Jesse Jackson to Summer Lee, does Zogby still see the Democratic Party as a party in which progressives can effect change? Briahna asked him about the structure of the DNC, whether he'd support the "dirty break" strategy, and what it would've looked like if Bernie went 3rd party in 2016.

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).

17 Sep 15:29

663 - Death Comedy Jam feat. Kath Krueger (9/16/22)

Tom Roche

not all-time-great Chapo, but if there's one thing The Guys can do well, it's crush the alien evil that is The Clintons

In this edition of 'Come and See TV' the boys are joined by official Gutsy woman, Katherine Krueger to discuss Hillary and Chelsea Clinton's new AppleTV series "Gutsy." HIldawg and Chels investigate topics such as: are women funny? How to refuse hate, can women be clowns? in what amounts to vanity project that is the Democratic party equivalent of OJ's "If I Did It" memoir.


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.

17 Sep 00:09

Friday Night Comedy Returns

Tom Roche

nothing to listen to here, but note that News Quiz restarts this week (F 16 Sep), but unfortunately rather restrained

Friday Night Comedy returns 23 September wherever you listen to podcasts. Or listen to episodes of The News Quiz and Party's Over now, before anywhere else, first on BBC Sounds.
16 Sep 17:16

Andrea: Hacking Projectile to search in all my projects

by Andrea
Tom Roche

interesting mostly as illustrating [ag](https://geoff.greer.fm/ag/) hacking via elisp. I'm such a dinosaur I only use *grep, but someday I should pay attention to [this exhaustive search-tool comparison](https://beyondgrep.com/feature-comparison/) (archived [here](https://beyondgrep.com/feature-comparison/)) and start trying tools like `ack`, `ag`, and `ripgrep`

A simple trick to make Projectile even more useful!