Org Web Adapter

journals/2019_05_23.org

Thursday, 5/23/2019

ID
de61fdff-0fa7-4a06-8f5c-c67a3abecbe1

#+BEGIN: clocktable :scope file :maxlevel 2

#+CAPTION: Clock summary at

| Headline | Time | |

|----------------------+---------+-------|

| *Total time* | *15:16* | |

|----------------------+---------+-------|

| Wednesday, 5/22/2019 | 15:16 | |

| \_ Tasks [16/17] | | 15:16 |

#+END:

Tasks [14/14]

DONE Clean dishes

@homechoredishes

CLOSED:

:LOGBOOK:

CLOCK: -- => 0:40

:END:

DONE Set tasks for the day

@personaldaily

CLOSED:

:LOGBOOK:

CLOCK: -- => 0:31

:END:

DONE Write in daily journal

@personalhabitjournal

CLOSED: SCHEDULED:

:LOGBOOK:

CLOCK: -- => 0:04

CLOCK: -- => 0:14

:END:

DONE Move sheep fence to stable

@farmfencingsheep
FENCED
STABLE FRONT

CLOSED: SCHEDULED:

:LOGBOOK:

CLOCK: -- => 1:09

:END:

DONE Hang up laundry

@homechorelaundry

CLOSED:

:LOGBOOK:

CLOCK: -- => 0:36

:END:

DONE Read up on exploring GDB for debugging python

@readingpythongdbdebugging

CLOSED:

:LOGBOOK:

CLOCK: -- => 0:22

:END:

https://stripe.com/en-ca/blog/exploring-python-using-gdb

[[https://stripe.com/en-ca/blog/exploring-python-using-gdb][Exploring Python Using GDB]]
website

Article

People tend to have a narrow view of the problems they can solve using [[http://sources.redhat.com/gdb/][GDB]]. Many

think that GDB is just for debugging [[http://en.wikipedia.org/wiki/Segmentation_fault][segfaults]] or that it's only useful with C

or C++ programs. In reality, GDB is an impressively general and powerful tool.

When you know how to use it, you can debug just about anything, including

Python, Ruby, and other dynamic languages. It's not just for inspection

either---GDB can also be used to modify a program's behavior while it's running.

When we ran our [[/en-ca/blog/capture-the-flag][Capture The Flag]] contest, a lot of people asked us about

introductions to that kind of low-level work. GDB can be a great way to get

started. In order to demonstrate some of GDB's flexibility, and show some of the

steps involved in practical GDB work, we've put together a brief example of

debugging Python with GDB.

Imagine you're building a web app in Django. The standard cycle for building one

of these apps is to edit some code, hit an error, fix it, restart the server,

and refresh in the browser. It's a little tedious. Wouldn't it be cool if you

could hit the error, fix the code while the request is still pending, and then

have the request complete successfully?

As it happens, the [[http://www.youtube.com/watch?v=M54qmZZKKPA][Seaside]] framework supports exactly this. Using one of

Stripe's [[https://github.com/stripe/monospace-django][example projects]], let's take a look at how we could pull it off in

Python using GDB:

GDB Demo Screencast

Pretty cool, right? Though a little contrived, this example demonstrates many

helpful techniques for making effective real-world use of GDB. I'll walk through

what we did in a little more detail, and explain some of the GDB tricks as we

go.

For the sake of brevity, I'll show the commands I type, but elide some of the

output they generate. I'm working on Ubuntu 12.04 with GDB 7.4. The manipulation

should still work on other platforms, but you probably won't get automatic

pretty-printing of Python types. You can generate them by hand by running =p

PyString_AsString(PyObject_Repr(obj))= in GDB.

Getting Set Up

First, let's start the monospace-django server with =--noreload= so that Django's autoreloading doesn't get in the way of our GDB-based reloading. We'll also use the =python2.7-dbg= interpreter, which will ensure that less of the program's state is optimized away.

#+BEGIN_EXAMPLE

$ git clone http://github.com/stripe/monospace-django

$ cd monospace-django/

$ virtualenv --no-site-packages env

$ cp /usr/bin/python2.7-dbg env/bin/python

$ source env/bin/activate

(env)$ pip install -r requirements.txt

(env)$ python monospace/manage.py syncdb

(env)$ python monospace/manage.py runserver --noreload

$ sudo gdb -p $(pgrep -f monospace/manage.py)

GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2) 7.4-2012.04

Copyright (C) 2012 Free Software Foundation, Inc.

[...]

Attaching to process 946

Reading symbols from /home/evan/monospace-django/env/bin/python...done.

(gdb) symbol-file /usr/bin/python2.7-dbg

Load new symbol table from "/usr/bin/python2.7-dbg"? (y or n) y

Reading symbols from /usr/bin/python2.7-dbg...done.

#+END_EXAMPLE

As of version 7.0 of GDB, it's possible to [[http://sourceware.org/gdb/current/onlinedocs/gdb/Python.html][automatically script GDB's behavior]], and even register your own code to pretty-print C types. Python comes with its own hooks which can pretty-print Python types (such as =PyObject *=) and understand the Python stack. These hooks are loaded automatically if you have the =python2.7-dbg= package installed on Ubuntu.

Whatever you're debugging, you should look to see if there are relevant GDB scripts available---useful helpers have been created for many dynamic languages.

Catching the Error

The Python interpreter creates a =PyFrameObject= every time it starts executing a Python stack frame. From that frame object, we can get the name of the function being executed. It's stored as a Python object, so we can convert it to a C string using =PyString_AsString=, and then stop the interpreter only if it begins executing a function called =handle_uncaught_exception=.

The obvious way to catch this would be by creating a GDB breakpoint. A lot of frames are allocated in the process of executing Python code, though. Rather than tediously continue through hundreds of false positives, we can set a /conditional breakpoint/ that'll break on only the frame we care about:

#+BEGIN_EXAMPLE

(gdb) b PyEval_EvalFrameEx if strcmp(PyString_AsString(f->f_code->co_name), "handle_uncaught_exception") == 0

Breakpoint 1 at 0x519d64: file ../Python/ceval.c, line 688.

(gdb) c

Continuing.

#+END_EXAMPLE

Breakpoint conditions can be pretty complex, but it's worth noting that conditional breakpoints that fire often (like =PyEval_EvalFrameEx=) can slow the program down significantly.

Generating the Initial Return Value

Okay, let's see if we can actually fix things during the next request. We resubmit the form. Once again, GDB halts when the app starts generating the internal server error response. While we investigate more, let's disable the breakpoint in order to keep things fast.

What we really want to do here is to let the app finish generating its original return value (the error response) and then to replace that with our own (the correct response). We find the stack frame where =get_response= is being evaluated. Once we've jumped to that frame with the [[http://sourceware.org/gdb/current/onlinedocs/gdb/Selection.html#index-up-451][=up=]] or [[http://sourceware.org/gdb/current/onlinedocs/gdb/Frames.html#index-frame_0040r_007b_002c-command_007d-430][=frame=]] command, we can use the [[http://sourceware.org/gdb/current/onlinedocs/gdb/Continuing-and-Stepping.html#index-finish-314][=finish=]] command to wait until the currently selected stack frame finishes executing and returns.

#+BEGIN_EXAMPLE

Breakpoint 1, PyEval_EvalFrameEx (f=

Frame 0x3534110, for file [...]/django/core/handlers/base.py, line 186, in handle_uncaught_exception [...], throwflag=0) at ../Python/ceval.c:688

688 ../Python/ceval.c: No such file or directory.

(gdb) disable 1

(gdb) frame 3

#3 0x0000000000521276 in PyEval_EvalFrameEx (f=

Frame 0x31ac000, for file [...]/django/core/handlers/base.py, line 169, in get_response [...], throwflag=0) at ../Python/ceval.c:2666

2666 in ../Python/ceval.c

(gdb) finish

Run till exit from #3 0x0000000000521276 in PyEval_EvalFrameEx (f=

Frame 0x31ac000, for file [...]/django/core/handlers/base.py, line 169, in get_response [...], throwflag=0) at ../Python/ceval.c:2666

0x0000000000526871 in fast_function (func=,

pp_stack=0x7fffb296e4b0, n=2, na=2, nk=0) at ../Python/ceval.c:4107

4107 in ../Python/ceval.c

Value returned is $1 =

#+END_EXAMPLE

Patching the Code

Now that we've gotten the interpreter into the state we want, we can use [[http://docs.python.org/c-api/index.html][Python's internals]] to modify the running state of the application. GDB allows you to make fairly complicated dynamic function invocations, and we'll use lots of that here.

We use the C equivalent of the Python [[http://docs.python.org/library/functions.html#reload][=reload=]] function to reimport the code. We have to also reload the =monospace.urls= module so that it picks up the new code in =monospace.views=.

One handy trick, which we use to invoke git in the video and curl here, is that you can run shell commands from within GDB.

#+BEGIN_EXAMPLE

(gdb) shell curl -s -L https://gist.github.com/raw/2897961/ | patch -p1

patching file monospace/views.py

(gdb) p PyImport_ReloadModule(PyImport_AddModule("monospace.views"))

$2 =

(gdb) p PyImport_ReloadModule(PyImport_AddModule("monospace.urls"))

$3 =

#+END_EXAMPLE

We've now patched and reloaded the code. Next, let's generate a new response by finding =self= and =request= from the local variables in this stack frame, and fetch and call its =get_response= method.

#+BEGIN_EXAMPLE

(gdb) p $self = PyDict_GetItemString(f->f_locals, "self")

$4 =

(gdb) set $request = PyDict_GetItemString(f->f_locals, "request")

(gdb) set $get_response = PyObject_GetAttrString($self, "get_response")

(gdb) set $args = Py_BuildValue("(O)", $request)

(gdb) p PyObject_Call($get_response, $args, 0)

$5 =

#+END_EXAMPLE

In the above snippet, we use GDB's =set= command to assign values to variables.

Alright, we now have a new response. Remember that we stopped the program right where the original =get_response= method returned. The C return value for the Python interpreter is the same as the Python return value. And so, to replace that return value on x86, we just have to store the new return value in a register--- =$rax= on 64-bit x86--- and then allow the execution to continue.

GDB allows you to refer to refer to the values returned by every command you evaluate by number. In this case, we want =$5=:

#+BEGIN_EXAMPLE

(gdb) set $rax = $5

(gdb) c

Continuing.

#+END_EXAMPLE

And, like magic, our web request finishes successfully.

GDB is a powerful precision tool. Even if you spend most of your time writing code in a much higher-level language, it can be extremely useful to have it available when you need to investigate subtle bugs or complex issues in running applications.

DONE Prep for Thorn interview

@personalinterviewprepjobsearchthorn

CLOSED: SCHEDULED:

:LOGBOOK:

CLOCK: -- => 0:08

:END:

DONE Interview with Mike and Kyle at Thorn

@personalinterview

CLOSED: SCHEDULED:

LINK
https://thorn.zoom.us/j/144008924

:LOGBOOK:

CLOCK: -- => 2:14

:END:

+ Design simple website scrapper

+ URL for thread on message board

+ JSON array of message objects

DONE Write down intro notes for Almost Sunrise

prep@churchcollabfilm

CLOSED: SCHEDULED:

DONE Reading from Granta

@readinghistoryblog

CLOSED: SCHEDULED:

:LOGBOOK:

CLOCK: -- => 0:16

:END:

https://granta.com/to-zinder/

[[https://granta.com/to-zinder/][To Zinder | Sven Lindqvist | Granta Magazine]]
website

Article

Translated from the Swedish by [[https://granta.com/contributor/joan-tate/][Joan Tate]]

A Note from the Publisher:

/Sven Lindqvist was similar to the young Swedish climate activist Greta Thunberg

in that he was not interested in hope or false optimism. He wanted the truth.

His own rock solid belief in fundamental equality meant that he was never swayed

by tropes of colonial inequality or historicist apologies. And this belief of

his was not, one sensed, ideological -- it was a much deeper conviction than

that. Equality for Sven was simply true, a fact of life. I was so proud to

publish him. He was an extraordinary writer -- like Sebald and Coetzee, his work

combines depth with a quality of evenness and dry beauty. In some ways he was

essentially a travel writer -- he looked at the world and found it wanting. And

who could not agree with him?   /

[[https://www.waterstones.com/book/exterminate-all-the-brutes/sven-lindqvist/9781847081988][[[https://granta.com/wp-content/uploads/2019/05/Brutes-Cover.jpg]]]]

\\

/The following is the final chapter of/  [[https://www.waterstones.com/book/exterminate-all-the-brutes/sven-lindqvist/9781847081988][Exterminate All the Brutes]] /by Sven

Lindqvist. Over twenty years ago, Sven Lindqvist, one of the great pioneers of a

new kind of experiential history writing, set out across Central Africa.

Obsessed with a single line from Conrad's The Heart of Darkness -- Kurtz's

injunction to ‘Exterminate All the Brutes' -- he braided an account of his

experiences with a profound historical investigation, revealing to the reader

with immediacy and cauterizing force precisely what Europe's imperial powers had

exacted on Africa's people over the course of the preceding two centuries./

[[https://www.waterstones.com/book/exterminate-all-the-brutes/sven-lindqvist/9781847081988][Exterminate All the Brutes]] / is available now from Granta Books./

The Nazi slaughter of the Jews, like every other event, however unique it may

be, has to be seen in its historical context.

Arno J. Mayer, in his controversial book /Why Did the Heavens Not Darken? The

“Final Solution” in History/ (1988), goes right back to the horrors of the

Thirty Years' War, the storming of Magdeburg on May 10, 1631, when thirty

thousand men, women, and children were murdered, and even further back to the

mass murder by the Crusaders of eleven hundred innocent inhabitants of Mainz in

1096, to find equivalents to the mass murders of Jews during World War II.

On the other hand, there is no mention of the European slave trade, which

forcibly moved fifteen million Negroes between continents and killed perhaps

just as many. Nor are the nineteenth­century European colonial wars or punitive

expeditions mentioned. If Mayer had as much as glanced in that direction, he

would have found so many examples of brutal extermination based on clearly

racial convictions, that the Thirty Years' War and the Crusades would seem to

lie unnecessarily far back.

On my journey through the Sahara alone, I have been in two Mainzes. One is

called Zaatcha, where the entire population was wiped out by the French in 1849.

The other is Laghouat, where on December 3, 1852, after the storming, the

remaining third of the population, mainly women and children, was massacred. In

one single well, 256 corpses were found.

That was how one mixed with the inferior races. It was not considered good form

to talk about it, nor was it anything that needed concealing. It was established

practice. Only occasionally was there any debate -- for instance, over the

events taking place while Joseph Conrad was writing Heart of Darkness and the

Central African Expedition was on its way toward Zinder.

*

The bus to Zinder leaves at 7:30. At dawn I find a man with a wheelbarrow to

help me wheel away my word processor and suit­case. It is a windy and cold

morning, some fires flickering over by the stalls across the street, a few lamps

glowing faintly, overcome by the morning light.

After half an hour, the driver arrives and starts washing the windows of the big

white Renault truck that has been converted into a bus. On the sides it says in

giant red letters: societe nationale de transport nigerenne.

Vendors of loose cigarettes and sticky lollipops start assembling. A shivering

man is carrying round red nuts, already shelled and indecently naked on his

tray. A bright yellow baby's cap frames his anthracite black face.

Toward half-past eight, the blind women come, all of them at once, all singing,

all begging, all led by children, some of the women with newborn babies on their

backs.

At nine, the passengers are called out according to the passenger list and each

given a small piece of paper, which afrer another roll call is exchanged for the

ticket already booked and paid for the day before yesterday.

A man stands on a barrel and flings the luggage up to the driver, who stows it

on to the roof of the bus. After that the station supervisor gets into the bus

and, standing inside where he is very difficult to hear, starts the third and

determining roll call. It is not easy to predict how a name like mine will

sound. I miss the name and thus lose my booked seat in the front of the bus.

Only the seats at the back are left.

I can still change my mind. I can still jump off. Here at the far back I will

never cope with the jolts. And once out in the desert there is no return. One

has to go on, for eight hours, whatever happens. It is now, at this moment, and

only now, I still have a chance to get off.

Always the same alloy of panic and joy at the moment of departure. It is like

losing your foothold in a great love affair. What will happen now? I have no

idea. All I know is that I have just thrown myself out into it.

*

At the head of the 1898 Central African Expedition was Captain Voulet and

Lieutenant Chanoine.

Paul Voulet, the thirty-two-year-oldson of a doctor, had, according to his

officer colleagues, ‘a true love of blood and cruelty coupled with a sometimes

foolish sensitivity.' He was, it was said afterward, a weak character dominated

by two evil people, his black mistress and Chanoine.

Charles Chanoine, the son of a general, was described as impulsive, ruthless,

and cruel -- ‘cruel out of cold-bloodedness as well as for pleasure.' Two years

previously, in 1896, the two friends had conquered Ouagadougou in what is now

Burkina Faso, and had shown themselves to be skilled at burning down villages

and murdering natives. Faced with this new expedition, Voulet boasted to the

governor of Sudan of how he would crush resistance by letting the villages burn.

So despite, or perhaps thanks to, his reputation, Voulet was appointed head of

an expedition that was to explore the area between the Niger and Lake Chad and

place it, as was said, ‘under French protection.'

Otherwise his orders were vague in the extreme. ‘I don't pretend to be able to

give you any instructions on which route to choose or how you are to behave

toward the native chieftains and peoples,' wrote the minister for the colonies

modestly.

Voulet was given a free hand to use the methods for which he had made himself

notorious.

*

It is 270 miles from Agadez to Zinder -- 270 miles of washboard, sanded over by

high wandering dunes that lift the bus and throw it down with fierce, stunning

jolts.

The driver maintains a good speed in order to get there before sunset. It is

like sitting on a leaping compressed air drill. The fat in my blood ought to be

churned to butter by the vibration.

At the same time you have to be constantly prepared to rise in the saddle and

receive the great jolts with your thigh and arm muscles instead of your spine.

But I miss every fourth or every tenth one, not noticing in time that the driver

has taken his foot off the accelerator, and I am suddenly hurled with full force

down toward the center of the earth. All my vertebrae come tumbling down and the

disks in my spine have to take the whole jolt.

For the first hours the wind is very strong. The dust turns day into white

night, and the sand sweeps over steppe and savanna. The white steppe grass

drowns, the bushes ride in despair on the waves of sand. The occasional tree is

glimpsed in the blurred murkiness of the sand, and misty human figures struggle

on, whipped by the sand in the air.

The sand seems to be the attacker when the desert comes, but it is the dryness

that kills. Dead plants can no longer bind and stop the sand. We drive for hours

through sparse forest where only every hundredth tree is alive. White tree

trunks lie like distorted skeletons on the ground.

After five desert hours we are suddenly in among fields. The cultivation

boundary has moved forward until it coincides with the boundary of the desert.

The vulnerable living space the nomads once found between desert and field no

longer exists.

*

Here on the edge of the desert, in 1898, marched the Central African Expedition.

It consisted of nine French officers, seventy regular Senegal soldiers, and

thirty interpreters and ‘agents.' In addition, they had recruited four hundred

‘auxilliaries,' Africans who went with the French and took part in the fighting

for a chance to plunder. In Tombouctou, ninety Senegalese joined them, placed at

the expedition's disposal by Lieutenant-Colonel Klobb.

Voulet took with him great quantities of arms and ammunition, but had not taken

any means of paying the bearers. His men simply seized eight hundred black men

and forced them to be bearers. The latter were dressed for the hot climate

prevailing where they were captured and suffered severely from the night cold in

the desert. A dysentery epidemic broke out, and148 bearers died during the first

two months of the expedition. Chanoine set an example by having anyone who tried

to escape shot.

They requisitioned food from the villages, naturally without payment. What with

baggage and mistresses, the expedition had grown to sixteen hundred people and

eight hundred animals. It moved on like a swarm oflocusts through areas normally

living on the edge of starvation. Neither of the two commanders had any

experience of desert areas. The expedition cruised between the water holes,

dominated by the necessity of supplying men and animals with forty tons of water

a day.

*

Meanwhile Joseph Conrad was sitting at his Chippendale desk at Pent Farm in

Kent, penciling out his story about Kurtz, the story of outrages committed in

the name of Civilization and Progress. He could not have been influenced by

contemporary events in French Sudan, as he knew nothing about them.

Not until January 29, when Conrad had almost finished his story, was one of the

French officers, Lieutenant Peteau, sent back owing to ‘lack of discipline and

enthusiasm.' Not until February 5 did Peteau write a fifteen-page letter to his

wife-to-be in Paris to tell her of some of the atrocities he had been involved

in.

The forcibly recruited bearers were maltreated and refused medical attention

during the dysentery epidemic, Peteau writes. Those who were unable to continue

were beheaded. Twelve bearers were shot for trying to escape, the rest bound

together with neck chains, in groups of five.

To recruit new bearers, the French sent out patrols, which sur­ rounded the

villages at dawn and shot anyone trying to escape. As evidence that they had

carried out their orders, the soldiers took the heads back with them. Voulet had

the heads impaled on stakes and placed out to frighten the population into

submission.

In Sansan-Hausa, a village already under French ‘protection,' Voulet had given

orders that thirty women and children were to be killed -- with bayonets, to

save ammunition. According to the chieftain, Kourtey, there were even more

victims. ‘I had done nothing to them,' he said. ‘I gave them everything they

asked for. They ordered me to hand over six horses and thirty head of cattle

within three days. I did so. And yet they killed everyone they could get hold

of. A hundred and one men, women, and children were massacred.'

*

Peteau's fiancée sent his letter to her deputy in parliament, and in the middle

of April, the government intervened. The governor of Sudan gave orders to

Lieutenant-Colonel Klobb in Tombuoctou to find Voulet and remove from him his

command of the expedition.

Just as in Conrad's novel Marlow set off into the interior to find Kurtz, Klobb

took up the hunt for Voulet. His tracks were easy to follow; they consisted of

ruins and corpses, which increased in number appallingly the closer Klobb came.

Klobb found guides who had displeased Voulet and had been strung up alive, low

enough for hyenas to eat their feet, while the rest of the bodies were left to

the vultures. Outside the burned-out village ofTibiri, 120 miles west of Zinder,

Klobb found the bodies of thirteen women hanging in the trees. Outside

Koran-Kaljo, nearer to Zinder, hung two corpses of children.

On July 10, 1899, Klobb arrived at the little village of Damangara to be told

that Voulet was only a few hours' march away.

*

In the middle of the night, my father telephones. Surprised and confused, I rush

across the hotel yard in the dark to take the call in Reception. When I lift the

receiver I can hear nothing but a hollow crackling.

Nor could I expect anything else, I realize when I wake up. After all, Father is

dead.

The heat enfolds me in its moist embrace. The heat in the Sahara stings like a

whiplash, but only where the searchlight of the sun fell; in the shade it was

cool, at night cold. Here in Zinder the summer temperature seldom goes below

105°F.

Your veins swell and snake along under your skin, pumping, throbbing, ready to

burst. Hands and feet swell, the soles of your feet sting, fingers resemble

small clubs, your skin is not large enough. Your face swells up, becomes porous

and opens. Sweat spurts out through the pores, suddenly, just as when a heavy

rain­drop strikes your skin.

I can feel a burning heat on the inside of my lower arm and notice it is

brushing my stomach. I have burned myself on my own body.

All flesh thickens, overflows, starts running. A movement and your body is

soaked all over. Keep still and nonetheless you are soaked.

I drink so much, the salt balance in my body is disturbed. Then I eat salt,

become thirsty, and have to drink even more. My belly swells, my body slops

about, nothing helps.

Next morning I am sitting as usual in the library of the French Institute

reading Klobb's journal. But my mind stiffens like coagulated blood in my head,

and the afternoons start earlier and earlier, sinking deeper and deeper into a

hot torpor.

In the evening as I sit waiting for the news on the hotel owner's radio, I hear

a sea moving in the rise and fall of the interference. Above me, filled with a

wonderful cool, roll the huge roaring breakers of space.

*

The meeting between Klobb and Voulet was even more dramatic than the meeting

between Marlow and Kurtz in Conrad's novel, by then already finished and

published in /Blackwood's/ magazine. Marlow did not after all have to make Kurtz

come back with him. Kurtz was seriously ill and went with him after some

persuasion. Voulet did not.

Klobb sent a sergeant and two soldiers with a letter that briefly and curtly

told Voulet he had been removed from his command and was to return home

immediately. Voulet replied that he had six hundred rifles against Klobb's fifty

and would open fire if Klobb approached.

On July 13, Voulet had a hundred and fifty women and children executed as

punishment for the death of two of his soldiers during an attack on a nearby

village. On the same day, he once again wrote to Klobb and warned him not to

come any nearer.

Klobb was convinced that neither Senegalese soldiers nor French officers would

bring themselves to shoot at a superior officer. He counted on the ninety

soldiers he had lent the expedition preferring to obey him rather than Voulet.

What he did not know was that Voulet and Chanoine had kept his letter secret

from the other whites and had sent them all out on various assignments in the

vicinity, keeping with them only the black troops personally loyal to them.

On July 14, Bastille Day, Klobb's and Voulet's troops stood facing each other.

Klobb gave his men strict orders not to open fire under any circumstances. Then

he started slowly walking toward Voulet, who had his soldiers fire two salvos

into the air. When Klobb was within earshot, he stopped and started speaking

directly to the soldiers.

Voulet was furious and, threatening them with a pistol, forced his men to fire

at Klobb. Klobb was wounded and fell -- still calling on his men not to answer

fire. The next salvo killed him.

*

Naturally, Voulet had not read Conrad's recently published story about Kurtz,

the white man who, with terror and magic, had made himself king over a black

realm in the heart of the continent.

But when the white officers returned that evening, Voulet told them what had

happened and suggested a solution of exactly that kind: they would continue to

Lake Chad and there set up their own kingdom, ‘a strong and impenetrable empire,

surrounded by a waterless desert.'

‘I am no longer a Frenchman. I am a black chief,' said Voulet.

The following day, the black sergeants decided to mutiny. Voulet was warned by

an interpreter, who was immediately shot for not warning him earlier. Voulet

mounted his horse and, with Chanoine, addressed the soldiers, firing at them at

the same time. The soldiers answered fire and killed Chanoine. When Voulet tried

to approach the camp the following morning, he was also shot.

The French officers held a council of war and decided to continue the

expedition. They marched toward Zinder and captured the town.

*

The hotel owner sits allday in the yard talking to his parrot, his voice

caressing and loving, quite different from the brusque commanding tone he

otherwise uses in his contact with the outside world.

Sometimes he brings his two dogs here and exercises them in the yard. An adopted

son takes up a middle position, a handsome black boy, son of his dead

housekeeper.

I am the only guest.

I am engrossed in the history of Zinder. It turns out that a much larger French

expedition, which had just crossed the Sahara in the summer of 1899, was on its

way to Zinder. So it was quite superfluous for other Frenchmen to capture the

town.

But the remains of the Central African Expedition got there first. These were

the troops to gain everlasting glory by occupying Zinder, the expedition's

officers hoping their crimes would be forgotten.

They were right.

When the murder of Klobb became known in Paris, an official inquiry was set up

on August 23. After having accumulated three huge cardboard boxes of statements

and documents, they found only one conceivable explanation: the climate. Voulet

must have gone mad in the African heat.

The crimes of the others were excused and forgotten, and France kept her

captured possessions.

The French left wing took over in government in1899 and had little interest in

digging any further into the affair. The right wing had even less. The ugly

truth stayed in the inquiry's cardboard boxes.

*

Eventually the facts trickled out. Of course, educated Frenchmen knew roughly,

or even quite precisely, by what means their colonies were captured and

administered.

Just as educated Frenchmen in the 1950s and 1960s knew what their troops were up

to in Vietnam and Algeria.

Just as educated Russians in the 1980s knew what their troops did in

Afghanistan, and educated South Africans and Americans during the same period

knew what their ‘auxilliaries' were doing in Mozambique and Central America

respectively.

Just as educated Europeans today know how children die when the whip of debt

whistles over poor countries.

It is not knowledge that is lacking. The educated general public has always

largely known what outrages have been committed and are being committed in the

name of Progress, Civilization, Socialism, Democracy, and the Market.

*

At all times it has also been profitable to deny or suppress such knowledge.

Even today there are readers of Conrad's story who maintain it lacks universal

application.

It has been said that the circumstances in the Congo of the Belgian monarch were

unique. The novel cannot be seen as an accusation against the whole of the

civilized world, as the oppressive Belgian regime in the Congo was a

one-of-a-kind phenomenon already condemned by most reasonable people.

But during just those months when Conrad was writing the book, similar or even

worse events were occurring by another river, the Niger, on the way to another

chamber of the same dark heart.

No, the Belgians were not unique, nor were the Swedish officers in their

service. Conrad would have been able to set his story using any of the peoples

of European culture. In practice, the whole of Europe acted according to the

maxim ‘Exterminate all the brutes.'

Officially, it was, of course, denied. But man to man, everyone knew. That is

why Marlow can tell his story as he does in Conrad's novel. He has no need to

count up the crimes Kurtz committed. He has no need to describe them. He has no

need to produce evidence. For no one doubted it.

Marlow-Conrad was able to assume quite calmly that both the listening gentlemen

on the yacht, the /Nellie/, and the readers of /Blackwood's/ silently knew quite

enough to understand the story and in their own imaginations develop details the

novel only implied. This knowledge is a fundamental prerequisite of the book.

This knowledge could be expressed in general and scholarly language. Imperialism

is a biologically necessary process that, according to the laws of nature, leads

to the inevitable destruction of the lower races. Things of that kind could be

said. But the way it actually happened, what it really did to the exterminators

and the exterminated, that was at most only implied.

And when what had been done in the heart of darkness was repeated in the heart

of Europe, no one recognized it. No one wished to admit what everyone knew.

*

Everywhere in the world where knowledge is being suppressed, knowledge that, if

it were made known, would shatter our image of the world and force us to

question ourselves -- everywhere there, Heart of Darkness is being enacted.

*

You already know that. So do I. It is not knowledge we lack. What is missing is

the courage to understand what we know and draw conclusions.

/The above is an excerpt from Sven Lindqvist's/ [[https://www.waterstones.com/book/exterminate-all-the-brutes/sven-lindqvist/9781847081988][Exterminate All the Brutes]] /,

translated from the Swedish by Joan Tate and available now from Granta Books./

DONE Move chicken tractor

@farmchickenstractor

CLOSED: SCHEDULED:

:LOGBOOK:

CLOCK: -- => 0:43

:END:

DONE Pull out taps

CLOSED:

DONE Almost Sunrise film

@churchcollabfilmshowing

CLOSED:

:LOGBOOK:

CLOCK: -- => 4:38

:END:

DONE Watch NBA playoffs

@personalsportstvnba

CLOSED:

:LOGBOOK:

CLOCK: -- => 2:20

:END:

Journal

Nabby is freaking out on my shoulder right now ... Sometimes I don't know what's

wrong with a baby. I always think of profoundish things while I'm doing

something else. Usually working outside or running. Then I sit down here in

front of the computer and I say the day is nice or some shit.

My hands hurt today. After clearing a bunch of alders with the kuhuri knife

yesterday I'm exhausted. I woke up stiff, like I'd done a long run or something.

It was worth it though. The birches down at Brad's property line look great. I

need to fix my chainsaw and get some mix and bar oil and then I can really do a job.

I have an interview with Thorn today, and I'm strangely not nervous. I would

have thought I would be, given how my other interviews went, but not today. It

might help that I also have the stress of MCing the Almost Sunrise showing today.