Strong FR connection | Weak FR connection | |
Slightly cryptic | e.g., 'white power', Reichsadler | e.g., Celtic crosses, meander patterns |
Highly cryptic | e.g., '14 words', Nordadler symbols, Kühnengruß | e.g., '100%', runic symbols |
Online
Date | Presenters | Method |
---|---|---|
3 July: | Alexander V., Luis G., Oscar O., Mia C. | descriptive inference |
10 July: | Lina S., Stephen W., Philomena B., Aarón Z. | ethnography |
17 July: | Corinna Z., Eva M., and Rostislav N. | process tracing |
24 July: | Sebastian K., Thomas R., Emilia Z., Florian P. | quant. text analysis |
24 July: | Lorenz F., Daniel B., Medina H. | quant. text analysis |
Date | Presenters | Method |
---|---|---|
15 May: | Idil M., Zeynep P., Liesl W., Selin K., Chiara W. | logistic regression |
22 May: | Gabriel W., Lina M., Florian S., Julian B. | discourse analysis |
29 May: | NO CLASS MEETING |
Date | Presenters | Method |
---|---|---|
5 June: | Rasmus B., Andre D., Josefine E., Ioanna L., Santiago C. | surveys |
12 June: | Omar B., Lela E., Niclas W. | network analysis |
19 June: | NO CLASS MEETING | |
26 June: | Colombe I., Konstantin S., Jakob W., Veronika L. | ethnography |
26 June: | Maksim K., Felix S., Jon L.D., Damir S., Korbinian M. | case study |
What do far-right actors (individuals or even groups/organisations) use the internet for? Is there anything distinctive compared to other types of actors?
see also Wahlström and Törnberg (2019)
Strong FR connection | Weak FR connection | |
Slightly cryptic | e.g., 'white power', Reichsadler | e.g., Celtic crosses, meander patterns |
Highly cryptic | e.g., '14 words', Nordadler symbols, Kühnengruß | e.g., '100%', runic symbols |
Legality and/or Terms of Service Compliance
|
|
---|---|
Legal and/or Non-Violation of Terms | Illegal and/or Violation of Terms |
Legality and/or Terms of Service Compliance
|
|
---|---|
Legal and/or Non-Violation of Terms | Illegal and/or Violation of Terms |
1. Donations/self-funding | |
Legality and/or Terms of Service Compliance
|
|
---|---|
Legal and/or Non-Violation of Terms | Illegal and/or Violation of Terms |
1. Donations/self-funding | |
2a. Sale of goods (merchandise, music, real estate, etc) | |
Legality and/or Terms of Service Compliance
|
|
---|---|
Legal and/or Non-Violation of Terms | Illegal and/or Violation of Terms |
1. Donations/self-funding | |
2a. Sale of goods (merchandise, music, real estate, etc) | |
2b. Sale of services (memberships, events, etc) | |
Legality and/or Terms of Service Compliance
|
|
---|---|
Legal and/or Non-Violation of Terms | Illegal and/or Violation of Terms |
1. Donations/self-funding | |
2a. Sale of goods (merchandise, music, real estate, etc) | |
2b. Sale of services (memberships, events, etc) | |
3. Criminal activities | |
Bundesministerium des Innern (2024):
right-wing extremist music events
Event | 2023 | 2024 |
---|---|---|
Concert | 39 | 29 |
‘Song evening’ | 132 | 130 |
Other | 40 | 151 |
Total | 322 | 307 |
Concert = [
{Year: "2009", Num: 125},
{Year: "2010", Num: 128},
{Year: "2011", Num: 131},
{Year: "2012", Num: 82},
{Year: "2013", Num: 78},
{Year: "2014", Num: 55},
{Year: "2015", Num: 63},
{Year: "2016", Num: 68},
{Year: "2017", Num: 68},
{Year: "2018", Num: 60},
{Year: "2019", Num: 64},
{Year: "2020", Num: 27},
{Year: "2021", Num: 18},
{Year: "2022", Num: 35},
{Year: "2023", Num: 39},
{Year: "2024", Num: 29},
]
SongEvening = [
{Year: "2009", Num: 38},
{Year: "2010", Num: 40},
{Year: "2011", Num: 30},
{Year: "2012", Num: 17},
{Year: "2013", Num: 47},
{Year: "2014", Num: 55},
{Year: "2015", Num: 54},
{Year: "2016", Num: 71},
{Year: "2017", Num: 88},
{Year: "2018", Num: 95},
{Year: "2019", Num: 133},
{Year: "2020", Num: 55},
{Year: "2021", Num: 59},
{Year: "2022", Num: 92},
{Year: "2023", Num: 132},
{Year: "2024", Num: 130},
]
Other = [
{Year: "2009", Num: 42},
{Year: "2010", Num: 71},
{Year: "2011", Num: 57},
{Year: "2012", Num: 49},
{Year: "2013", Num: 46},
{Year: "2014", Num: 51},
{Year: "2015", Num: 82},
{Year: "2016", Num: 84},
{Year: "2017", Num: 103},
{Year: "2018", Num: 115},
{Year: "2019", Num: 114},
{Year: "2020", Num: 59},
{Year: "2021", Num: 67},
{Year: "2022", Num: 130},
{Year: "2023", Num: 151},
{Year: "2024", Num: 148},
]
// Create a dropdown which dataset to display (Inputs.select) - Inputs.radio for radio buttons
// FIRST VERSION: viewof dataset = Inputs.radio(["Concert", "SongEvening", "Other"], {label: "Dataset"})
viewof datasets2 = Inputs.checkbox(
["Concert", "SongEvening", "Other"],
{label: "", value: ["Concert", "SongEvening", "Other"]}
)
// Choose the corresponding dataset based on the selection
// FIRST VERSION: selected_data = dataset === "Concert" ? Concert : dataset === "SongEvening" ? SongEvening : Other
// Combine the selected datasets into one array
selected_data2 = datasets2.flatMap(dataset => {
if (dataset === "Concert") {
return Concert.map(d => ({...d, dataset: "Concert"}));
} else if (dataset === "SongEvening") {
return SongEvening.map(d => ({...d, dataset: "SongEvening"}));
} else if (dataset === "Other") {
return Other.map(d => ({...d, dataset: "Other"}));
}
return [];
});
// plot as a bar plot with dodged bars coloured by dataset
Plot.plot({
x: {
label: "",
tickSize: 2,
tickRotate: -90,
tickFormat: d => d.toString()
},
y: {
label: "",
grid: true
},
color: {
legend: "ramp",
domain: ["Concert", "SongEvening", "Other"],
range: ["#800000", "#008080", "#FFD700"], // https://en.wikipedia.org/wiki/Web_colors
swatchSize: 60, // https://observablehq.com/plot/features/legends
marginLeft: 10,
width: 600,
height: 80,
className: "large-font"
},
margin: 100,
marks: [
Plot.barY(selected_data2, {
x: "Year",
y: "Num",
fill: "dataset",
groupby: "dataset",
x1: "dataset"
})
],
width: 1200,
height: 500,
style: {
fontSize: 40
}
})
To what extent do [alternative right-wing online news sites (RNS)] in the United States, United Kingdom, Germany, Austria, Sweden, and Denmark form national and transnational right-wing news ecologies through hyperlinking?
findings:
militant and hate organizations’ online success centers on their ability to operate across many platforms in parallel
Take the survey at https://forms.gle/6r8coBVy5v9C7x7t8
CasaPound
Extreme right, Islamist, Drug cartel, Extreme left, Buddhist nationalist, Separatist
CasaPound (e.g., Froio et al. 2020): (neo-)‘fascist’ organisation in Italy, highly active on digital media
9.9.2019: Facebook deactivates CasaPound page (and representatives), arguing the content is ‘hate speech’ and ‘incitement to violence’, violating Facebook’s Terms of Use
CP argues (before Court of Rome) ‘it proposed an update of historical fascism that exclusively values its social policies, and that it has publicly condemned racial laws’; that it does not violate Facebook’s terms of service — and that CP protected by article 21 of the Italian constitution
see further at: https://globalfreedomofexpression.columbia.edu/cases/casapound-v-facebook/
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-1vRk0WyoY9IFIZd6XjeguLMKR-vv1RKAcSOGoiWr5lMgw1oSQo6TiJH6DkEO3DcyNSYJoiqvDIEV58fY/" +
"pub?gid=418161089&single=true&output=csv",
10000, 1, 6); // adjust the last number to select all relevant columns
respondentCount = surveyResults.length;
define what is impermissible
defineCounts = aq.from(surveyResults)
.select("define")
.groupby("define")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
define_maxCountRE = Math.max(...defineCounts.objects().map(d => d.count));
plot_define = Plot.plot({
marks: [
Plot.barY(defineCounts, {
x: "define",
y: "count",
fill: "define",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"state actors",
"platform companies",
"independent regulator",
"other"
],
range: [
"teal",
"indigo",
"forestgreen",
"violet"
]
},
marginBottom: 200,
x: { label: "", tickSize: 2, tickRotate: -30, padding: 0.2,
domain: ["state actors", "platform companies", "independent regulator", "other"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(defineCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, define_maxCountRE]
},
facet: { data: defineCounts, x: "measure", label: "" },
marginLeft: 80,
style: {
width: 1600,
height: 500,
fontSize: 40,
},
});
make policy responses
policyCounts = aq.from(surveyResults)
.select("policy")
.groupby("policy")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
policy_maxCountRE = Math.max(...policyCounts.objects().map(d => d.count));
plot_policy = Plot.plot({
marks: [
Plot.barY(policyCounts, {
x: "policy",
y: "count",
fill: "policy",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"state actors",
"platform companies",
"independent regulator",
"other"
],
range: [
"teal",
"indigo",
"forestgreen",
"violet"
]
},
marginBottom: 200,
x: { label: "", tickSize: 2, tickRotate: -30, padding: 0.2,
domain: ["state actors", "platform companies", "independent regulator", "other"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(policyCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, policy_maxCountRE]
},
facet: { data: policyCounts, x: "measure", label: "" },
marginLeft: 80,
style: {
width: 1600,
height: 500,
fontSize: 40,
},
});
the order had erroneously attributed a special nature to the contract between the social network and the user, when it was instead an ordinary contract under civil law. In the absence of any legal basis, according to Facebook, it is not possible to attribute public service obligations to private sector players such as the protection of freedom of association and expression. Likewise, Facebook argued that it is not required to ensure special protection to some users such as organizations engaged in political activities by virtue of their role in the political debate.
should be predominant approach
approachCounts = aq.from(surveyResults)
.select("approach")
.groupby("approach")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
approach_maxCountRE = Math.max(...approachCounts.objects().map(d => d.count));
plot_approach = Plot.plot({
marks: [
Plot.barY(approachCounts, {
x: "approach",
y: "count",
fill: "approach",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"do nothing",
"attach warning",
"reduce possible views",
"permanently remove post",
"suspend poster's account"
],
range: [
"teal",
"goldenrod",
"darkorange",
"darkolivegreen",
"darkred"
]
},
marginBottom: 260,
x: { label: "", tickSize: 2, tickRotate: -30, padding: 0.2,
domain: ["do nothing", "attach warning", "reduce possible views", "permanently remove post", "suspend poster's account"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(approachCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, approach_maxCountRE]
},
facet: { data: approachCounts, x: "measure", label: "" },
marginLeft: 80,
style: {
width: 1600,
height: 500,
fontSize: 40,
},
});
deplatforming effective?
deplatformingCounts = aq.from(surveyResults)
.select("deplatforming")
.groupby("deplatforming")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
deplatforming_maxCountRE = Math.max(...deplatformingCounts.objects().map(d => d.count));
plot_deplatforming = Plot.plot({
marks: [
Plot.barY(deplatformingCounts, {
x: "deplatforming",
y: "count",
fill: "deplatforming",
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(deplatformingCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, deplatforming_maxCountRE]
},
facet: { data: deplatformingCounts, x: "measure", label: "" },
marginLeft: 60,
style: {
width: 1600,
height: 500,
fontSize: 40,
},
});
The results suggest that strategies of targeted removals, such as leadership removal and network degradation efforts, can reduce the ability of hate organizations to successfully operate online.
Anonymous feedback here: https://forms.gle/pisUmtmWdE13zMD58
Alternatively, send me an email: m.zeller@lmu.de