Escalation and restraint
| Date | Presenters | Method |
|---|---|---|
| 4 Dec: | Shahadaan, Kristine, Daichi | ethnography |
| 11 Dec: | Bérénice, Zorka, Victoria, Katharina | content analysis |
| 18 Dec: | Shoam, Aidan, Tara, Sebastian | QCA |
What should we, students of political violence, know about antifa? (causes? organisation/leadership? radical subcultures and mobilisation? strategies?)
is antifa a ‘gang’ (Pyrooz and Densley 2018)? is antifa a ‘group’ (LaFree 2018)?
Pyrooz and Densley (2018, 233): “the history of antifa reads like a history of violence”
vs.
Bray (2017, 169): “In truth, violence represents a small though vital sliver of anti-fascist activity.”
Should state security (in Germany, elsewhere) designate antifa as extremist/terrorist
ARD series (in German): https://www.ardaudiothek.de/sendung/die-fascho-jaegerin-der-fall-lina-e-und-seine-folgen/94838298/
recent journal article: Jones and Schuhmacher (2024)
In putting their “bodies on the line,” militant anti-fascists aspire to defeat fascist organizing, to de-stabilize it, and ultimately de-mobilize it. At its root, anti-fascist militancy is the promise to effect intimidation, humiliation and de-moralization upon fascists. This involves a physical commitment to “no platforming” (p. 124)
Take the survey at https://forms.gle/12tV7fgjcAyC8iVG6
import { liveGoogleSheet } from "@jimjamslam/live-google-sheet";
import { aq, op } from "@uwdata/arquero";
// UPDATE THE LINK FOR A NEW POLL
surveyResults = liveGoogleSheet(
"https://docs.google.com/spreadsheets/d/e/" +
"2PACX-1vSzXDDMtCvL7AeQx2C5Qwg_FEhFHA6dWov5vprYGiQLzzFJARc0RJQniUe-InSkwTCCqTdTv_XXKeEi/" +
"pub?gid=720467942&single=true&output=csv",
10000, 1, 6); // adjust the last number to select all relevant columns
respondentCount = surveyResults.length;ideology secondary to pragmatic issues?
ideology_secondCounts = aq.from(surveyResults)
.select("ideology_second")
.groupby("ideology_second")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
ideology_second_maxCountRE = Math.max(...ideology_secondCounts.objects().map(d => d.count));
plot_ideology_second = Plot.plot({
marks: [
Plot.barY(ideology_secondCounts, {
x: "ideology_second",
y: "count",
fill: "ideology_second",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"Strongly disagree",
"Disagree",
"Neutral",
"Agree",
"Strongly agree"
],
range: [
"red",
"pink",
"lightgrey",
"lightgreen",
"forestgreen"
]
},
marginBottom: 180,
x: { label: "", tickSize: 2, tickRotate: -45,
domain: ["Strongly disagree", "Disagree", "Neutral", "Agree", "Strongly agree"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(ideology_secondCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, ideology_second_maxCountRE]
},
facet: { data: ideology_secondCounts, x: "measure", label: "" },
marginLeft: 140,
style: {
width: 1350,
height: 500,
fontSize: 30,
}
});more likely to escalate if losing support?
losing_supportCounts = aq.from(surveyResults)
.select("losing_support")
.groupby("losing_support")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
losing_support_maxCountRE = Math.max(...losing_supportCounts.objects().map(d => d.count));
plot_losing_support = Plot.plot({
marks: [
Plot.barY(losing_supportCounts, {
x: "losing_support",
y: "count",
fill: "losing_support",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"Yes",
"No",
"Maybe"
],
range: [
"forestgreen",
"darkred",
"goldenrod"
]
},
marginBottom: 80,
x: { label: "", tickSize: 2, tickRotate: -1, padding: 0.2,
domain: ["Yes", "No", "Maybe"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(losing_supportCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, losing_support_maxCountRE]
},
facet: { data: losing_supportCounts, x: "measure", label: "" },
marginLeft: 60,
style: {
width: 1600,
height: 500,
fontSize: 40,
},
});most important factor allowing restraint?
allows_restraintCounts = aq.from(surveyResults)
.select("allows_restraint")
.groupby("allows_restraint")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
allows_restraint_maxCountRE = Math.max(...allows_restraintCounts.objects().map(d => d.count));
plot_allows_restraint = Plot.plot({
marks: [
Plot.barY(allows_restraintCounts, {
x: "allows_restraint",
y: "count",
fill: "allows_restraint",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"strategic factors",
"resource constraints",
"moral convictions",
"strong/weak organisation",
"other"
],
range: [
"darkred",
"goldenrod",
"cadetblue",
"forestgreen",
"gray"
]
},
marginBottom: 400,
x: { label: "", tickSize: 2, tickRotate: -40, padding: 0.2,
domain: ["strategic factors", "resource constraints", "moral convictions", "strong/weak organisation", "other"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(allows_restraintCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, allows_restraint_maxCountRE]
},
facet: { data: allows_restraintCounts, x: "measure", label: "" },
marginLeft: 60,
style: {
width: 1600,
height: 500,
fontSize: 40,
},
});most likely to provoke escalation?
provoke_escalationCounts = aq.from(surveyResults)
.select("provoke_escalation")
.groupby("provoke_escalation")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
provoke_escalation_maxCountRE = Math.max(...provoke_escalationCounts.objects().map(d => d.count));
plot_provoke_escalation = Plot.plot({
marks: [
Plot.barY(provoke_escalationCounts, {
x: "provoke_escalation",
y: "count",
fill: "provoke_escalation",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"state repression",
"economic inequality",
"limited political access",
"other"
],
range: [
"violet",
"indigo",
"goldenrod",
"orange"
]
},
marginBottom: 500,
x: { label: "", tickSize: 2, tickRotate: -60, padding: 0.2,
domain: ["state repression", "economic inequality", "limited political access", "other"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(provoke_escalationCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, provoke_escalation_maxCountRE]
},
facet: { data: provoke_escalationCounts, x: "measure", label: "" },
marginLeft: 60,
style: {
width: 1600,
height: 500,
fontSize: 40,
},
});states should remain open to negotiating with politically violent groups?
negotiatingCounts = aq.from(surveyResults)
.select("negotiating")
.groupby("negotiating")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
negotiating_maxCountRE = Math.max(...negotiatingCounts.objects().map(d => d.count));
plot_negotiating = Plot.plot({
marks: [
Plot.barY(negotiatingCounts, {
x: "negotiating",
y: "count",
fill: "negotiating",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"Strongly disagree",
"Disagree",
"Neutral",
"Agree",
"Strongly agree"
],
range: [
"red",
"pink",
"lightgrey",
"lightgreen",
"forestgreen"
]
},
marginBottom: 180,
x: { label: "", tickSize: 2, tickRotate: -45,
domain: ["Strongly disagree", "Disagree", "Neutral", "Agree", "Strongly agree"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(negotiatingCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, negotiating_maxCountRE]
},
facet: { data: negotiatingCounts, x: "measure", label: "" },
marginLeft: 140,
style: {
width: 1350,
height: 500,
fontSize: 30,
}
});relates to our Week 11-12 classes on state responses
are there significant examples of escalation and/or restraint in cases you know of?
(‘ascending the ladder of abstraction,’ Sartori 1970)
(‘ascending the ladder of abstraction,’ Sartori 1970)
Tore Bjørgo on Why the Nordic Resistance Movement Restrains its Use of Violence (Bjørgo and Ravndal 2020)
Anonymous feedback here: https://forms.gle/NfF1pCfYMbkAT3WP6
Alternatively, please send me an email: m.zeller@lmu.de