Jeg prøver virkelig

Men jeg har simpelthen ikke energi til det.

Jeg prøver virkelig. Jeg prøver virkelig at lytte. At forstå folk der føler sig undertrykte. At blive klogere på hvordan det er at være kvinde. At være afroamerikaner. Eller afrodansker for den sags skyld. Hvordan det er at føle at man hverken er mand eller kvinde. Jeg bruger endda ret store mængder af min fritid på at arbejde for afviklingen af både Copenhagen Pride og World Pride. Og det bliver jeg ved med.

Men der er ting jeg ikke længere orker. Og der er heldigvis enkle måder at gøre noget ved det.

Jeg modtager dagligt en mail fra Medium med links til interessante historier. Og der er virkelig meget interessant. Der er også mange historier der handler om transkønnedes adgang til toiletter i det usanske midtvest, hvordan ting mænd gør er toksiske og hvorfor hvide personer pr definition altid er racister. Og hvorfor mit køn og hudfarve betyder at jeg helt automatisk er utroligt priviligeret.

Jeg har også abonneret på en podcast med en feministisk læsning af Star Trek. Det er ca. samme historie.

Og jeg orker det ikke. Der er problemer med racisme i verden. Mænd er skyldige i mange ting. Og hvorfor i himlens navn transkønnedes brug af toiletter langt ude på landet i USA stadig er et problem fatter jeg ikke.

Men jeg orker det ikke. Vi har rigeligt med problemer i Danmark. Hvis ikke jeg synes vi har nok problemer i Danmark, kan jeg kigge på de problemer der er i Sverige og Tyskland. Jeg har simpelthen ikke mental båndbredde til på daglig basis at skulle forholde mig til det shitshow de har gang i mellem Canada og Mexico. Noget af det bliver jeg nødt til at forholde mig til. Den nuværende præsident lader til at være fast besluttet på at gøre alt (som i ALT) forkert. Det påvirker resten af verden. Men at en eller anden religiøs galning i Reydell Arkansas vil forbyde transkønnede at bruge bestemte toiletter påvirker ikke mig. Det påvirker ikke nogen jeg kender. Nej, det påvirker reelt heller ikke de transkønnede jeg kender, for de har aldrig været i Reydell Arkansas og de kommer heller aldrig til at besøge stedet (strengt taget aner jeg ikke om det er problem i den pågældende by. Den har 23 indbyggere).

Mit mentale overskud rækker heller ikke til dagligt at få min mailboks fyldt med historier om at alverdens problemer i verden er noget mænd er ansvarlige for. Ja, det er sandsynligvis mænd der primært har ansvaret for et givet problem. Men 41% af de kvindelige vælgere i USA stemte på Trump efter CNNs exitpoll at dømme. Af de kvinder der stemte derovre. Så det er måske ikke kun mænds skyld. Og personligt er jeg også lidt i tvivl om hvordan mit køn har indflydelse på dén problemstilling. Jeg har ikke stemmeret i USA.

Og mit liv er simpelthen for kort til at jeg dagligt skal have at vide at min hudfarve betyder at jeg er medansvarlig for den måde politiet i Dogtown Alabama behandler afroamerikanere. Jeg er den stolte efterkommer af mange generationer af husmænd, fæstebønder og ufaglærte arbejdere. Jeg har en kusine der er et år ældre end mig. Hun var den første der fik en studentereksamen i vores familie. Jeg var nummer to. Jeg var den første i min familie der besøgte USA. Og jeg bilder mig ikke ind at de relativt korte tjenesterejser har haft ret stor indflydelse på hvordan politiet i USA opfører sig.

Ja, jeg lever et utroligt priviligeret liv. Men det handler ikke om at jeg er hvid. Eller mand. Det handler om at jeg har været så heldig at blive født i et ufatteligt rigt smørhul af et land. Langt væk fra naturkatastrofer og krige. På et tidspunkt i verdenshistorien hvor landet faktisk er rigt og langt væk fra ulykker. Det er ikke mit køn der gjorde at jeg fik en lang videregående uddannelse. Det er heller ikke min hudfarve. Hvis jeg klarer mig bedre end en afrodansk kvinde, eller hvem det nu er jeg har flere privilegier end, er det fordi jeg var heldig at blive født i en familie der opdrog mig til at tage en uddannelse. Og fordi jeg tog den. Mit privilegie stammer fra mine forældres protestantiske pligtetik kombineret med en dansk liberal markedsøkonomi, der har kunne finansiere en velnæret socialdemokratisk velfærdsstat. Altsammen placeret i en pt. hyggelig, frugtbar og fredelig udkant af det nordlige Europa. Med alt hvad der dertil hører af neuroser, depressioner og mavesår. Hvor, og den globale vinkel bør man måske huske, selv en enlig kontanthjælpsmodtager over 30 uden børn, og så kan man næsten ikke få udbetalt mindre fra fælleskassen – stadig har en indtægt der placerer vedkommende blandt de 20% bedst stillede på kloden (*).

Så. Jeg har opsagt mit månedlige bidrag til podcasten. Og samtlige historier i den daglige Medium mail om hvorfor jeg er et dårligt menneske bliver blokeret, mutet og slettet.

(*) med andre ord, ja, der er forskelle i mulighederne også blandt danskere. Men hvis vi et øjeblik løfter blikket fra vores egen navle, vil det gå op for os, at de forskelle i “privilegier” er som at se meget rige mennesker beklage sig over at de kun har råd til en enkelt Ferrari, mens den endnu rigere nabo har råd til to. Fuldstændigt afkoblet fra at 20 kilometer længere sydpå lever i voldsom fattigdom. Det er i øvrigt interessant at betragte hvem der taler mest om privilegier. Overvejende er der tale om personer der får penge af det offentlige, til at tage en gratis uddannelse, der overvejende vil føre til beskæftigelse i projekter finansieret af det offentlige. Eller – mere præcist, finansieret af de værdier der skabes af dem der ikke i udpræget grad har fået penge for at tage en gratis uddannelse, så de kan arbejde i projekter finansieret af folk der arbejder.

Relativering

Man kan ikke kritisere kineserne for at spise vilde eksotiske dyr, og dermed udløse den nuværende krise. Du ved, den der begynder at lugte af Den Spanske Syge, sammenbrud af demokratier, økonomisk depression, og stigende nationalistisk populisme.

Men nej. Det er racisme. Det fremmedgør den kinesiske kultur, og placerer den som det “andet”. Og det er meget farligt. Vi spiser også saltlakrids, og det er næsten det samme. Der var også noget med at Den Spanske Syge stammer fra en svinefarm i Kansas, og vi spiser stadig svin.

Og så glemmer vi for et kort øjeblik, at moderne studier mere end antyder at Den Spanske Syge kom fra Kina.

Vi må i øvrigt ikke kalde Den Spanske Syge for den spanske syge. Trump har nemlig kaldt COVID-19 for den kinesiske virus. Det gør han som led i en barnlig spinkrig med kineserne, der har travlt med at undertrykke meldinger om at sygdommen først viste sig i oktober/november. Og iøvrigt antyde at det må være det amerikanske militær der har indført smitten i Kina.

Så pt er der en heftig debat på wikipedia, om hvorvidt den spanske syge skal omdøbes til 1918 influenzaen. Hvorfor? Ja, det giver heller ikke mening for mig.

Den vestlige civilisation kommer ikke til at gå under på grund af en aldrende befolkning, indvandring fra Afrika eller en agressiv virus (fra Kina).

Den vestlige civilisation kommer til at gå under, fordi vi ikke bryder os om at stå ved at den kultur vi dyrker her, faktisk er andre kulturer overlegen.

Må man sige det? Tja.

Kulturer der giver kvinder de samme rettigheder som mænd er efter min mening bedre end kulturer der ikke gør.

Kulturer der praktiserer og beskytter ytringsfrihed, er efter min mening bedre end kulturer der ikke gør.

Kultruer der leverer medicinske og videnskabelige fremskridt der får mennesker til at leve bedre og længere liv, er, efter min mening, bedre kulturer end kulturer der ikke gør.

Kulturer der giver homosexuelle ret til at eksistere, er efter min meget personlige mening, bedre kulturer end kulturer der ikke gør.

Og kulturer der undlader at slippe vira fra flagermus og pangoliner løs, og får verden til at gå under er efter min mening grundlæggende bedre end kulturer der gør.

Og ellers er testen: Hvis du er villig til at risikere at drukne i Middelhavet for at komme fra en kultur til en anden – hvilken kultur mener du så er bedst?

Hjemmearbejdsobservationer

Verden er ved at gå under. Og vi arbejder hjemmefra.

Observationer:

  1. Det er stadig ikke muligt at deltage i to møder samtidig.
    1. Det har chefen stadig ikke opdaget
  2. I stedet for at finde ud af hvilke møder der kunne være klaret med en email, finder vi nu ud af hvilke emails der åbenbart skal klares med et online møde.

Errorbars on barcharts

Errorbars

An errorbar is a graphical indication of the standard deviation of a measurement. Or a confidence interval.

The mean of a measurement is something. We want to illustrate how confident we are of that value.

How do we plot that?

I am going to use three libraries:

library(ggplot2)
library(dplyr)
library(tibble)

ggplot2 for plotting, dplyr to make manipulating data easier. And tibble to support a single line later.

Then, we need some data.

data <- data.frame(
  name=letters[1:3],
  mean=sample(seq(4,15),3),
  sd=c(1,0.2,3)
)

I now have a dataframe with three variables, name, mean and standard deviation (sd).

How do we plot that?

Simple:

data %>% 
  ggplot() +
  geom_bar( aes(x=name, y=mean), stat="identity", fill="skyblue") +
  geom_errorbar(aes(x=name, ymin=mean-sd, ymax = mean+sd), width=0.1)

plot of chunk unnamed-chunk-12

So. What on earth was that?

The pipe-operator %>% takes whatever is on the left-hand-side, and inserts it as the first variable in whatever is on the right-hand-side.

What is on the right-hand-side is the ggplot function. That would normally have a datat=something as the first variable. Here that is the data we constructed earlier.

To that initial plot, which is completely empty, we add a geom_bar. That plots the bars on the plot. It takes an x-value, name, and a y-value, mean. And we tell the function, that rather than counting the number of observations of each x-value (the default behavior of geom_bar), it should use the y-values provided. We also want a nice lightblue color for the bars.

To that bar-chart, we now add errorbars. geom_errorbar needs to know the x- and y-values of the bars, in order to place them correctly. It also needs to know where to place the upper errorbar, and the lower errorbar. And we supply the information that ymin, the lower, should be the mean value minus the standard deviation. And the upper bar, ymax, the sum of the mean and sd. Finally we need to decide how broad those lines should be. We do that by writing “width=0.1”. We do not actually have to, but the default value results in an ugly plot.

And there you go, a barchart with errorbars!

Next step

That was all very nice. However! We do not usually have a nice dataframe with means and standard deviations calculated directly. More often, we have a dataframe like this:

mtcars %>% 
  remove_rownames() %>% 
  select(cyl, disp) %>% 
  head()
##   cyl disp
## 1   6  160
## 2   6  160
## 3   4  108
## 4   6  258
## 5   8  360
## 6   6  225

I’ll get back to what the code actually means later.

Here we have 32 observations (only 6 shown above), of the variables “cyl” and “disp”. I would now like to make a barplot of the mean value of disp for each of the three different values or groups in cyl (4,6 and 8). And add the errorbars.

You could scroll through all the data, sort them by cyl, manually count the number of observations in each group, add the disp, divide etc etc etc.

But there is a simpler way:

mtcars %>% 
  remove_rownames() %>% 
  select(cyl, disp) %>% 
  group_by(cyl) %>% 
  summarise(mean=mean(disp), sd=sd(disp))
## # A tibble: 3 x 3
##     cyl  mean    sd
##   <dbl> <dbl> <dbl>
## 1     4  105.  26.9
## 2     6  183.  41.6
## 3     8  353.  67.8

mtcars is a build-in dataset (cars in the us in 1974). I send that, using the pipe-operator, to the function remove_rownames, that does exactly that. We don’t need them, and they will just confuse us. That result is then send to the function select, that selects the two columns/variables cyl and disp, and discards the rest. Next, we group the data according to the value of cyl. There are three different values, 4, 6 and 8. And then we use the summarise function, to calculate the mean and the standard deviation of disp, for each of the three groups.

Now we should be ready to plot. We just send the result above to the plot function from before:

mtcars %>% 
  remove_rownames() %>% 
  select(cyl, disp) %>% 
  group_by(cyl) %>% 
  summarise(mean=mean(disp), sd=sd(disp)) %>% 
  ggplot() +
    geom_bar( aes(x=cyl, y=mean), stat="identity", fill="skyblue") +
    geom_errorbar(aes(x=cyl, ymin=mean-sd, ymax = mean+sd), width=0.1)

plot of chunk unnamed-chunk-15
All we need to remember is to change “name” in the original to “cyl”. All done!

But wait! There is more!!

Those errorbars can be shown in more than one way.

Let us start by saving our means and sds in a dataframe:

data <- mtcars %>% 
  remove_rownames() %>% 
  select(cyl, disp) %>% 
  group_by(cyl) %>% 
  summarise(mean=mean(disp), sd=sd(disp))

geom_crossbar results in this:

data %>% 
ggplot() +
  geom_bar( aes(x=cyl, y=mean), stat="identity", fill="skyblue") +
  geom_crossbar( aes(x=cyl, y=mean, ymin=mean-sd, ymax=mean+sd))

plot of chunk unnamed-chunk-17

I think it is ugly. But whatever floats your boat.

Then there is just a vertival bar, geom_linerange. I think it makes it a bit more difficult to compare the errorbars. On the other hand, it results in a plot that is a bit more clean:

data %>% ggplot() +
  geom_bar( aes(x=cyl, y=mean), stat="identity", fill="skyblue") +
  geom_linerange( aes(x=cyl, ymin=mean-sd, ymax=mean+sd))

plot of chunk unnamed-chunk-18

And here is geom_pointrange. The mean is shown as a point. This probably works best without the bars.

data %>% ggplot() +
  geom_bar( aes(x=cyl, y=mean), stat="identity", fill="skyblue", alpha=0.5) +
  geom_pointrange( aes(x=cyl, y=mean, ymin=mean-sd, ymax=mean+sd))

plot of chunk unnamed-chunk-19

#OKBoomer – når man er Generation X

#OKBoomer. Det seneste klynk fra Millenials. Og det kan åbenbart også bruges med os i Generation X.

Der er ikke så meget andet at svare end “OK Zoomer”. Og det er da superinteressant at der kommer sådan et nedladende og afvisende udtryk fra netop den generation der går så supermeget op i at bruge de rigtige og respektfulde ord om alle.

Åbenbart alle andre end dem de lige er uenige med.

Egentlig er man som GenX ligeglad. Vi var ligeglade med Boomernes latterligheder. Det er vi også med Millenials og Zoomere.

Men lad os da bare tage et rant:

Generation X blev født under den kolde krig. Vi var som børn bevidste om at København når som helst kunne forvandles til en radioaktiv ruinhob. Vi blev udstyret med en nøgle, så vi selv kunne lukke os ind – også i en alder der i dag ville føre til at man blev tvangsfjernet af kommunen. For vores boomerforældre skulle realisere sig selv. Undertiden i en grad så vi blev skilsmissebørn, fordi mor besluttede sig for at blive feminist, og hade alle mænd, og far skulle udleve sin midtvejskrise med en motorcykel og en yngre model.

Da vi blev teenagere havde vi udsigt til en historisk høj ungdomsarbejdsløshed, og var bange for at blive ældre, for sultecirkulæret truede forude.

Og verden kunne stadig når som helst gå under. Hvis ikke på grund af atomkrig, så på grund af det hul i ozonlaget der ville give os alle hudkræft inden vi fyldte 30.

Så vi var generation nåh. Vi var generation Y. Y for “why”, for hvorfor gøre noget, når det hele alligevel snart endte i armageddon. Vi voksede op og blev nihilister.

Vi havde en kort periode i vores ungdom, hvor det så fornuftigt ud. Der var vækst, beskæftigelse, og demokratiet så ud til at brede sig.

Det holdt lige indtil en flok religiøse fanatikere besluttede sig for, at fordi deres overtro var bedre end andres overtro – så var det helt ok at slå folk ihjel på semi-industriel skala.

Dér mistede vi endegyldigt vores tro på fremtiden.

Nu går vi så på arbejde. Arbejde der æder vores sjæle. Hvis vi er knap så heldige, bliver vi kørt direkte fra arbejde til krematoriet. Hvis vi er rigtig heldige, får vi lov til at gå på pension inden vi fylder 80.

Og hvorfor gør vi det? Jo, den fest boomerne har holdt siden de gik på efterløn som 60-årige skal finansieres. Og det navlepillende, identitetspolitiske egotrip millenials har gang i, skal vi også betale for.

Så hvis du siger OK boomer til mig – så trækker jeg på skuldrene, og siger “Meh. OK zoomer”.

Tips og tricks til Berlin

Pinligt få tips. Men dog et par stykker.

Rigsdagsbygningen – historie i læssevis. Og man kan komme op i kuplen. Har vi hørt. Man skal booke adgang online. Og det er en meget omstændelig proces. Så gør det i meget god tid! Stiller man sig i kø (og det gør man også i god tid inden de åbner), så er der adgang sen aften. Det skal man ikke være ked af – Berlin gør sig godt ved nattetide.

Vi er glade for jazz. Og vi blev ganske fornøjede med ATrane, der har livemusik flere gange om ugen: www.a-trane.de

Interessant – og meget anbefalelsesværdig brunch: House of small wonder. Japansk-europæisk fusionsmorgenmad.

Det naturhistoriske museum. Klassiske museumsdyder. Og en ganske imponerende samling af dinoer, blandt andet Tristan, et imponerende T Rex skelet. Deres samling af vådpræparater er efter vores mening rigelig grund til at besøge museet, selv hvis man ikke er interesseret i dinoer.

Hvor spiser man? Rotisserie Weingrün på Gertraudenstrasse 10 i mitte er afsindig godt. Men nu gå jeg også gerne efter steder der har brisler på menuen.

Einstein unter den linden er også ok. Det er www.einstein-udl.com

Project Euler 5 – Smallest multiple

What is the smallest, positive, number that can be divided by all numbers from 1 to 20 without any remainder?

We are given that 2520 is the smallest that can be divided by all numbers from 1:10.

One number that can definitely be divided by all numbers from 1:20 is:

factorial(20)
## [1] 2.432902e+18

But given that

factorial(10)
## [1] 3628800

is rather larger than 2520, it is definitely not the answer.

The answer must be a multiple of all the primes smaller than 20. A number that is divisible by 15, will be divisible by
3 and 5.

The library “numbers” have a lot of useful functions. Primes(20) returns all primes smaller than 20, and prod() returns the product of all those primes

library(numbers)
prod(Primes(20))
## [1] 9699690

Could that be the answer?

What we are looking at is the modulo-operator. 9699690 modulo 2 – what is the remainder? We know that all the remainders, dividing by 1 to 20 must be 0.

prod(Primes(20)) %% 2
## [1] 0

And our large product is divisible by 2 without a remainder.

Thankfully the operator is vectorized, so we can do all the divisions in one go:

9699690 %% 1:20
##  [1]  0  0  0  2  0  0  0  2  3  0  0  6  0  0  0 10  0 12  0 10

Nope.

9699690 %% 4
## [1] 2

Leaves a remainder.

(2*9699690) %% 4
## [1] 0

Now I just need to find the number to multiply 9699690 with, in order for all the divisions to have a remainder of 0.
That is, change i in this code until the answer is true.

i <- 2
all((i*9699690) %% 1:20 == 0)
## [1] FALSE

Starting with 1*9699690, I test if all the remainders of the divisions by all numbers from 1 to 20 is zero.
As long as they are not, I increase i by 1, save i*9699690 as the answer, and test again.
If the test is TRUE, that is all the remainders are 0, the while-loop quits, and I have the answer.

i <- 1
while(!all((i*9699690) %% 1:20 == 0)){
 i <- i + 1
 answer <- i*9699690
}

Undskyld

Undskyld.

Undskyld at jeg er mand.

Undskyld at min hud er hvid.

Undskyld at jeg også føler mig som mand.

Undskyld at jeg er midaldrende.

Undskyld.

Undskyld at jeg kom til at skrive at jeg er mand.

 

Undskyld at jeg er veluddannet.

Undskyld at jeg er i arbejde.

Undskyld at jeg har en bolig.

 

Undskyld at jeg kom til at sige noget du er uenig i.

Undskyld, at det betyder at jeg ønsker at slå dig ihjel. Det vidste jeg ikke at det gjorde. Undskyld.

Undskyld at jeg ikke er medlem af den forening.

Undskyld at jeg er medlem af den forening.

Undskyld at jeg er for venstreorienteret.

Undskyld at jeg ikke er venstreorienteret nok.

Undskyld at jeg ikke fejler noget. Ret alvorligt i hvert fald.

Undskyld at jeg kun er moderat overvægtig.

Undskyld at nogen med samme køn og hudfarve som mig, gjorde noget slemt for 300 år siden.

Undskyld.

Undskyld at jeg havde den hat på.

Undskyld at lytter til den musik jeg lytter til.

Undskyld at jeg ikke lytter til den musik jeg ikke lytter til.

Undskyld at jeg ikke køber økologisk salt.

Undskyld.

Undskyld.

Undskyld.

Inkonsistens

Der er pride. Eller, det var der da jeg gik i gang med at skrive det her. Jeg bliver nok ikke færdig inden det er slut. Men jeg tror indholdet vil være gyldigt nogle år endnu.

Vi har et par udfordringer i år. Det er der hvert år. Denne gang er en af sagerne følgende: En kunstner skulle have været på scenen. Hun udtalte at Priden ikke gjorde sit arbejde, og at det er bullshit at Infernal er blevet booket som hovednavn. Infernal er nemlig ikke et LGBT-band. Kunstnerne er ikke LGBT-personer. Og Priden burde, efter hendes mening, kun have LGBT-kunstnere som hovednavne. Hvorefter hun opremser en række LGBT-kunstnere, som jeg aldrig har hørt om. Ikke at mit begrænsede kendskab til musikbranchen skal lægge dem til last, men definitionen på et hovednavn er lidt at det er kunstnere som folk kender.

Og så kom hun ikke på scenen alligevel. Man kan læse mere her.

Hvorfor er det et problem? Ja, det giver uro i miljøet, det tager opmærksomhed fra festlighederne, og det politiske indhold. Men den overordnede problemstilling dukker op igen og igen:

LGBT-separatismen. Den strømning, der argumenterer for at kun LGBT-kunstnere må komme på scenen. Og for en masse andre ting i samme grundlæggende retning.

Og det giver knaster, for separatisterne ønsker at udelukke heteroseksuelle kunstnere. Kritikken bliver ofte intersektionel. For det er også “problematisk” at det overvejende er hvide cis-kønnede kunstnere der er på scenen.

Det er selvfølgelig en kritik der har noget for sig. Det er en LGBT-festival. Så hvorfor skal heteroseksuelle kunstnere på scenen? Det er en mangfoldighedsfestival, så hvorfor kun, eller altovervejende, hvide kunstnere? Og hvorfor ikke også flere transkønnede kunstnere? Og her opstår den første modstrid, den første inkonsistens, der giver problemer. Kan en mangfoldighedsfestival bevidst udelukke heteroseksuelle kunstnere? Afhængig af opgørelsesmetoder, er ca. 90% af befolkningen heterosexuelle. Hvor mangfoldig er en festival hvis den bevidst fravælger 90% af befolkningen? Alene baseret på deres seksuelle orientering?

Lige her finder vi, efter min knap så ydmyge holdning, en af årsagerne til at LGBT-bevægelsen bliver udsat for hån, spot og latterliggørelse. Argumentet er: “I kræver mangfoldighed, men vælger selv at udelukke størstedelen af befolkningen alene på grund af deres seksuelle orientering. Det hænger jo ikke sammen.”

Den mere radikale udlægning af separatismen klager også over at der ikke er flere farvede personer, eller Persons Of Color (POC) på scenen. Det er jo også et reelt argument. En mangfoldighedsfestival kan naturligvis ikke være ensfarvet. Men argumentet udarter ofte til en kritik af at der er “hvide mennesker” på scenen. Definitionen af racisme er normalt at man forskelsbehandler på baggrund af hudfarve. Når (dele af) LGBT-bevægelsen bruger ordet “hvid” pejorativt, lyder det for en traditionel opfattelse af racismebegrebet ret, nåja, racistisk.

Så LGBT-separatisterne mødes naturligvis med hån, spot og latterliggørelse. Argumentet er “I kæmper mod forskelsbehandling af mennesker baseret på deres hudfarve. Og dog udtaler I jer negativt om folk på baggrund af deres hudfarve – så længe den hudfarve er hvid. Det hænger jo ikke sammen.” Og det gør det jo ikke.

En af de ting der ser ud til at ske er, at dele af LGBT-miljøet importerer retorik og problemstillinger fra primært USA. Og selvom vi har rigeligt at kæmpe med i Danmark, så er der en noget større pulje af problemer for LGBT-personer i USA. Men det bliver ofte lidt mærkeligt, når aktivister i Danmark begynder at bekæmpe problemer der i det væsentlige ikke, eller kun i meget begrænset omfang, relativt set, faktisk findes i Danmark. Mit pt foretrukne eksempel er fokus på BIPOC-personer. De er særligt undertrykte i Danmark. BIPOC står for “Black, Indigenous & People of Color”. Og ja, personer i Danmark der har en anden hudfarve end hvid møder mange udfordringer, ikke mindst regulær racisme. Men indegenous. Det betyder indfødte. Indfødte personer er efter den logik særligt undertrykte og udsatte i Danmark. Hvis vi definerer Danmark som rigsfællesskabet er der lidt om det. Grønlændere er vitterligt undertrykte og udsatte i Danmark.

Men går man ud i offentligheden, og taler om hvor hårdt indfødte i Danmark har det, lyder det ærligt talt lidt underligt. De indfødte i Danmark er danskerne. I hvert fald i Syddanmark, den del der ikke er Grønland og Færøerne. Uanset hvor meget oprindelige amerikanere, i daglig tale indianere, måtte have af udfordringer, så er de ikke indfødte i Danmark. Det bliver, måske ikke overraskende, opfattet som meget besynderligt i den brede befolkning her til lands. Hvad værre er, man taler om det på en måde, hvor man fodrer den højreekstreme, etno-nationalistiske bevægelse i Danmark. Den mener jo netop at de indfødte i Danmark er udsatte og truede. En del af dem hiver faktisk fat i indianernes udfordringer i USA. “Se hvad der skete med den oprindelige befolkning i Nordamerika da der kom indvandrere til kysterne. Det samme kommer til at ske med os danskere, når muhammedanerne invaderer os.” er fortællingen.

Vi kommer ikke i LGBT-bevægelsen til at undgå kritik. Vi har nogle dagsordener, der udfordrer det etablerede og sætter spørgsmålstegn ved normer. Det vil naturligt medføre en reaktion. Men vi kan vælge at lade være med at gøre det vanskeligere for os selv, ved at åbne flanker for angreb. Når der er selvmodsigelser i vores argumentation, gør vi det for let for vores modstandere. Ovenstående er bare et meget lille udvalg af inkonsistenserne. Vi kan heller ikke både argumentere for at køn udelukkende er socialt konstruerede, men samtidig så endogene og medfødte som det logisk følger af retorikken om transkønnede. Eller at det er meget urimeligt at store virksomheder ikke viser deres støtte til LGBT-miljøet, samtidig med at vi kritiserer den når de så gør det. Eller at forskelsbehandling på grund af køn er meget forkert, samtidig med at “mænd” bruges som skældsord. Eller at det på den ene side er meget vigtigt at der ikke er nogen der sætter etiketter på andre, og at folk selv skal have lov at definere hvad de er, samtidig med at vi kritiserer Simon Emil Ammitzbøll-Bille og Tommy Ahlers for ikke at kalde sig selv panseksuelle.

Eller. Selvfølgelig kan vi argumentere for både det ene og det andet. Men vi skal holde op med at mene, at når modstriden bliver eksponeret og problematiseret, så er det fordi de der gør det er onde og reaktionære. Det er de sikkert også. Men det skyldes også at vores argumenter ikke altid hænger specielt godt sammen. Det første er en lang kamp at gøre noget ved. Det tager tid at flytte folks holdninger, og det er grundlæggende kun dem selv der kan flytte sig.

Men det andet. Det kan vi gøre noget ved.

 

 

Tracking temperature and humidity in our cellar

So we got to rent a new room in the cellar. It is a bit exposed, and we are not absolutely sure that it is actually frost-free. Or how humid the room is for that matter. How to track that? An arduino with a digital thermometer? With an SD-card reader? Or a Raspberry Pi?

The problem is that the room is too far from our appartment ruling out something connected to the internet – unless I want to go full IoT and set up something with a mobile connection.

After a couple of hours considering this, I came up with this basic plan:

  • Connect a digital thermometer and hygrometer to a Raspberry Pi Zero.
  • Write something that reads the values, and collect the data.
  • Write something else, that tries to connect to a mobile hotspot from my cell-phone.
  • When the connection is made – dump the collected data somewhere.
  • Make sure that you pass the room on a regular basis with the mobile hotspot active.

How to do that? I already had a Raspberry Pi Zero v 1.1 lying around. It has build-in wifi. First step is to set it up with a fresh SD-card:

  1. Download the Raspbian Buster Lite image from https://www.raspberrypi.org/downloads/raspbian/
  2. Inset the sd-card in the computer, and follow the instructions on https://www.raspberrypi.org/documentation/installation/installing-images/README.md. I already had Balena Etcher installed.

Next, it would be nice to connect to it via USB, rather than connecting the Pi to a screen and work directly on it. In order to be able to do that, I go to the boot-folder on the newly flashed SD-card. There I do this:

  1. add the line “dtoverlay=dwc2″ at the very bottom of config.txt
  2. Open the file cmdline.txt, locate the parameter “rootwait” and immediately after that, add this “modules-load=dwc2,g_ether”.
  3. Make af file called “ssh”

Now, in principle, you move the sd-card to your Pi, connect it to the UBS-port on your computer, and you should be able to ssh into pi@raspberrypi.local, using raspberry as the password.

However, it is not quite that simple. When the Pi has been connnected to the laptop, go to settings, choose the wired connection, choose IPV4, and change the “method” to only link-local (do the same for IPV6). And under Identity, change the name to raspberrypi.local.

And now we can ssh into it.

Next step is to get some temperature and humidity readings.

For that purpose, I’m using a DHT22 sensor. More specifically an already wired up sensor. It has four connections, but I’m only using three. The red wire, power is connected to a 3.3V, the black wire to ground, and the yellow data-wire to any GPIO pin. I’m using pin 2

Next – after the Pi is again connected to power, and I have SSH’ed into it, some packages need to be installed.

Before that can be done, I need to get it connected to wifi.

As I am going to use my cell-phone for that I set that up to provide a hotspot. The ssid (or name of the hotspot) is set to NusseMobil, and the password to 3.141592653.

Then I edit the file /etc/wpa_supplicant/wpa_supplicant.conf file on the Pi:

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

And add this to the end of the file:

network={
ssid=”NusseMobil”
psk=”3.141592653″

Then I run this command:

wpa_cli -i wlan0 reconfigure

to get the Pi to take in the new network configuration.

Testing: Unplug the Pi from the laptop, and connect it to a separate power source. Does the Pi connect to the hotspot? If so, stuff is working, and I plug it into the laptop again.

Now I ssh into the Pi, make sure that there is live connection to the web (ping www.dr.dk is the standard way in Denmark to test that)

Now the necessary packages can be installed:

sudo apt-get update

sudo apt-get install build-essential python-dev python-openssl git

Lets see if it works

cd examples

sudo ./AdafruitDHT.py 22 2

22 because I am working with the DHT22 sensor, 2 because it is connected to GPIO 2 on the board.

Neat. Currently the temperature is 27.2 and the humidity is 55.1%

I have not compared with other thermometers, but it seems plausible.

The sensors in this package is only ready every two seconds. That should be plenty, but I should take that into consideration in the following steps.

I want to save data to a google spreadsheet. In order for that to work, I need an API-key. I follow the instructions on this page:

https://gspread.readthedocs.io/en/latest/oauth2.html

More or less – small changes appears to have crept in. Anyway, I create a new service account caled newcellar, and give it the role of editor.

I get at json file contain interesting and incomprehensible stuff.

I transfer it to the Raspi using ssh:

sudo rsync /path/to/local/file username@PCB:/path/to/remote/destination

Within the file is a mail-adress. I make a new google drive sheet, and share it with that mailadress.

editing the example from the package:

sudo nano google_spreadsheet.py

I add json filename and spreadsheet name

And try to run it:

sudo ./google_spreadsheet.py

Nope! A couple of packages are still missing:

pip install gspread

pip install –upgrade oauth2client

And then I can run it. I get an error telling me that I have forgotten to activate the API. Luckily the error provides the link I need to go to.

And after a couple of minutes the change has propagated through Googles servers, and things are working. The spreadsheet are now steadily being populated with temperature and humidity readings every 30 seconds.

Nice!

How long can I run it on batteries?

That depends on how much power is drawn by the Pi.

This site:

Raspberry Pi Power Consumption Data

has measured the power consumption by a Pi Zero w to about 250 mA. Battery capacity is measured in Ah (amp hours, usually as mAh).

The powerbank I am going to use initially, is 15.000 mAh, giving me 15000/250 60 hours of operation.