How many times have you heard the phrase, "the poorest of the poor, those that live on less than a dollar a day"?
I am tired of it.
You can grow your own food, and they call you "poor". Or you can buy transgenic, pesticide-laced, flavorless tomatoes at the store, and they call you "rich".
Poverty and riches do exist, but they have nothing to do with dollars.
Fast and Effective Procedure Inlining, by Oscar Waddell and Kent Dybvig.
Great, great paper. It could be my ignorance, but I never realized that copy propagation, dead code elimination, constant folding, and procedure inlining were all the same operation.
I think I'm going to implement their algorithm soon. It should be straightforward, given that the new high-level intermediate language that I'm working on for Guile is basically the same as their language.
Tonight I would like to write about something of which I am deeply shameful. Please bear with me as I describe my experiences.
From the beginning of 2003 to the end of 2004 I had the privilege of teaching 8th and 9th grade kids in Namibia, a southern African country grappling with the aftermath of apartheid. Unfortunately for my students, I failed.
As a worker within the educational system, I just did my job, namely: convey the curriculum conferred upon me to convey. I damaged kids in the process. Let me count the ways, from nonmonotonically least to worst:
I made kids take tests.
Typically these would be tests coming from the district, containing problems from previous examinations.
These examinations favored students that understand the intentions of those "setting" the test over those students that had a love for questions and not for answers.
I acquiesced with the idea of giving kids multiple-choice tests, and with the idea of giving them tests in general.
These tests always check answers rather than feeling. A student who has a feeling for reality must be able to formalize and reduce her ideas; a holist whose ideas are nuanced is necessarily required to reduce her ideas to symbology.
I forced kids away from their loves by engaging them in an alienated environment.
The pressing question was not, "What do you think is the best way forward for your country with regards to energy?". Rather it was, "Compute the energy difference between position A and position B." The important questions have already been asked; the job of the successful technologist is merely to fill in the details.
I forced kids to ask for permision.
They asked for permission to go to the bathroom.
A request to go to the bathroom (in reality, a row of latrines) was understood as a request either to suit bodily needs (plausible) or to escape from supervision. On the probability of the latter, I often refused requests, in order preserve my dominance.
Kids had to ask permission to engage in anything that left my authoritative purveyal.
I always refused these requests to go home (to tend the goats that wanted to munch their neighbors' fields), to study in the library (an assured invitation to lasciviousness), etc. These were "obvious attempts to take advantage of our generosity".
Note that here, "our" is not racial: it was classist. The prerogative was with the controllng class, in this case the teachers.
I humilliated kids via alienation.
Those kids that really loved their subjects were forced to endure grueling tests to prove that they were worthy, whereas kids that just viewed subjects as hurdles were comfortably given exams on subjects not central to their fundamental ideology.
To put it another way: those that did not love, were passed according to their dedication; those that did love their subjects were passed according to their ability to sublimate their love into obedience to the assigned canon.
I humiliated kids by domination.
This point is very difficult for me to describe.
For my Western readers, imagine this: you are out in the middle of what you perceive to be "nowhere". You are far from Bachelors' degrees, far from Madison Avenue, and you have been asked to take care of a group of 25 kids.
At the beginning they are curious; also they are afraid. What's up with this white guy (in my case) teaching my class?
In my case, well, I stuck to the subject as prescribed both by the curriculum and by the final examinations for my grade. After all, I wasn't going to leave my kids unprepared for my grade's exams.
But all was not right. I went too slow for many. Also, some kids didn't quite get the things that I taught; I was going too fast. There were many valid reasons for this not-getting, not least the fact that South African Apartheid had formally ended only in 1990.
Aside from that, though, there was a range of abilities in my classes. Should I have taught to the most advanced? To the most needy? Who were the most needy?
Personally, I decided just to do my job as a teacher. I neglected Severus Hilma and Namwiha Sakaria (both beautiful, intelligent people) to teach to the rest. I don't really know why I did this -- some sense of the "broader good".
I think that I was wrong.
I should have taught only those who wanted to learn what I had to teach.
Those that I taught were already immensely intelligent -- many of them had been caring for their families and providing their own food for many years before they entered my classroom.
These peoples' knowledge was cheapened and degraded by being put through the industrial wringer of monetary effect. Schools produce the employable; these men and mostly women that had sustained their families with their sweat are worth *nothing* to the institutions seeking to pay back IMF-refinanced loans.
So they didn't need me and my coercion. All they needed was either a space in wish to consolidate their gains, or a helper along the path to academic credentials.
As I say, I failed in both. I neglected the first in an atmosphere of utmost discipline, and I neglected the last in a pedantic effort to make sure that all were at the same place in the great Textbook In The Sky.
When you as an enlightened elite are being ignored, well, that cannot stand.
I made kids kneel inside the classroom facing the wall. They were thus pained personally, and shamed by their peers.
I made kids lie down in the hot sand. This was painful and degrading.
I hit kids on the heads with dusty erasers. Their hair would be all white -- the intention was to amplify the strike with the disapproval of the kid's peers.
I hit kids on the heads with my knuckles. I recall one time in my second year teaching, one beautiful student named Daniel Ricard said after I had hit a companion of his, "Mr. Wingo never used to hit students."
I made kids go to the principal's office. This was a somewhat idle threat, to the extent that perhaps in the shuffle, the kid would get let off the hook. But this was not in my interest so I would follow through.
Once in the principal's office, the kid would get a talking to, with fear: the fear of damage. Almost always the damage would manifest itself: a whipping with a stick, or with a rubber pipe, or with a piece of a fan belt.
I recall a story that a fellow teacher told me of his principal, who had beat a student badly with the only thing at hand, the flat of a machete blade. The student got cut up a bit, and the family complained. The school ended up paying 500 Namibian dollars (about 80 euros) from the school fund -- the fund that the students paid to begin with.
I tell you this tonight because the writing of it relieves my conscience in some sense; it tells my story, though not absolutely. Again in some sense I hope for that Christian construction of "redemption", in which the confessor somehow is understood.
I do not hope for forgiveness, for that is not of the readers of this weblog to give, I do not think. But understanding I do ask. Thank you.
Yesterday a friend I met in Namibia called to say that he was in town. Dinner ensued. Today, buying a five-pound-plus hunk of meat at the Boquería I ran into another Namibian Peace Corps connection. Yay!
I took a vacation from work this week to do an intensive dinghy sailing course at the municipal sailing center. The center is excellent. It's in a great location (the olimpic port, with its own ramp to the water), the instructors are good for the most part, and the prices are excellent. After reaching a certain level of proficiency, you can take out their boats any time you want for something like 9 euros an hour. Excellent.
We've been sailing RS Visions, a two-person boat with trapeze wires. Trapezing out feels wonderful. Being on the water is something else, it's a completely new perspective on the city, one that places it in a geography, one that takes a larger view.
I was a bit worried that I wasn't going to enjoy it as much on Wednesday when the waves were larger, but yesterday was perfect. Today the course ends, off to GUADEC next week. Perhaps more on that later.
In The New Yorker's online edition, neatly absconded between flashy adverts showing how beautifulhappysmart you could be, lies a gem of a column, Watching Lebanon: Washington's interests in Israel's war. The sources are a bit weak, but the story is believable.
An exceedingly rational and legalistic Stephen Shalom explains how a principled person should react to the situation in Lebanon, at least as it was a week ago. I finished the article feeling clarified. I have a tendency to side with the oppressed in any pair, to the point of concealing their crimes; Shalom transcends that. Nonviolence is a hard path. update: fixed the link to point to a full version of the article.
and a bonus
Guardian journalist Rory Carroll writes How I never quite fell for South Africa. The fellow's account is true and distressing in many ways. Life among South Africa's poor, yes; but the class distinction is what bothers me. Namibia is similar, in some places.
the next movement
I think I'm going to inflict myself on Paris this weekend, meeting up with a fellow wanderer on our third continent thus far. Provided that the train station still has some tix.
The move is still experimental, awaiting a bit of feedback before I update the web site and such, but from the little time I have had with bzr (bazaar), I can say that it is much, much easier. I just don't think like Tom Lord does.
A new report on free and proprietary software in public computer labs in Africa is out from the good folks at bridges.org. Skip down to the "Key ground-level findings" for the buzzword-laden summary.
From my experience in Namibia, I think their findings are mostly accurate. Free software has historically worked well only in well-planned, well-supported installations. You can always find random people to administer an isolated installation of windows 98 boxes; linux expertise is much harder to come by. And it is unfortunately true that most computer labs are not sustainable. Do-gooders from $RICH_COUNTRY drop 20 computers in a room, say "go", and then wonder why it doesn't exist two years later.
On the other hand, if well done, free software can be a liberating force in the developing world. Namibia was lucky to have Schoolnet.na, a home-grown organization that focused as much on the human side of computing as the actual hardware.
Went to Madrid last weekend to see my sister Ellen and friend Erinn. Good folks, pleasant town. Hadn't been there for five years, but it's more the same than different.
And, El made me banana bread and gumbo. Taste-o-home in a foreign city.
By star-alignment I met up with some friends from Namibia there in Madrid. They had been travelling four months through west Africa, and had loads of crazy stories to tell. We came back to Barcelona Sunday night, and they flew back to the states this morning. We had a great time listening to all my music from there, our memories of being crunched in bush taxis growing somehow fonder in the distance.
The hardest part of the trip is stopping, though. Two and a half years is a lot of momentum.
Ran across this article on intentional types in dynamic languages the other day. Seems relevant to the D-BUS bindings discussion going on p.g.o, especially the part at the end about input and output. Old is new again.
Fixed a couple bugs in the crossposter, added some regexps to deal with the images.
I learned a new word: laleka, literally to make sleep, figuratively to bid farewell. Onda lalekwa ohela -- yesterday I was on the receiving end of that verb.
My plan of making a clean getaway today was foiled by miscommunication, though. Back home I'd expect that something I tell to a husband to also go to the wife, and vice versa, but here they are entirely separate channels of communication. My meme (both e's pronounced like spanish) somehow didn't get the word that I was actually leaving today -- they really wanted to give gifts, to show to folks back home what it's like here. So I stayed. It wouldn't have been right otherwise.
Tomorrow I hit the road.
A bit of culture first, then about code.
I didn't do anything I intended to do this evening, which was nice. I was going to the bars in the village to fraternize with folk after quaffing a bit (to lubricate the tongue), but got roped into going to the pastor's house to help his wife edit a job application. It was pleasant, actually, and I got oshikundu, a fine beverage made from millet, which they don't seem to make at my house.
Then I headed to a certain bar, but got waylaid before that -- ended up somewhere else just gabbing with various characters. After a few beverages, tried to go home, but ended up at another bar called Don't Destoried My Friends' Please For Sure !! Long chats at sunset, which get more beautiful by the day. Today was one of those low cloud cover days, cool and breezy, but with a space for the sun to light up the sky from underneath. Then, with the fading light I did head home, savannah silhouette on the horizon, black palm trees, black ground, yellow sky, the vastness of it all fading into stars.
After eating porridge and meat with the family, we sat around watching the one channel that comes in on TV. Some program about traditional dances of the various peoples here in Namibia. It's wild -- these people are programmed, imbibed, steeped in rhythm and dance. It's not just a stereotype. There are a few families I know back home that are like this, mostly from the Appalachains, but few they are. I envy them.
The Hereros are funny I think. The women adopted their dresses from the German colonial wives in the 1880s and the men even adopted the old soldier uniforms. Culture lives though, in the headpieces worn by the women, which resemble the horns of a cow, an almost sacred animal to them. The dance I saw involved them imitating the bobbing and swishing of cattle heads, ending in an impaling of some invisible creature. Near holiness does not, however, impede Hereros from enjoying beef.
The Owambos, the people where I am, have the strangest dances I'd say. Often the beat is odd, literally: the one on TV tonight was in 7/4. Two halfs and three quarters, maybe at 90 bpm or so. When I see them dance, I see the shape of old knarled trees, whose roots belie their motion: moving with wind, but also changing shape over time. So their flailing arms and legs appear to me. I was out in the deep bush a couple of weekends ago and played one of my Oshiwambo songs for some folks at a bar. They broke out into a clapping circle, 65-year-old women singing and dancing, limbs flailing in the full moonlight.
That is one flavor of Owambo dance, unique to them. The other is more common to the various groups, and is overtly, almost terribly sexual. People here can move their hips in all directions. To say hips will limit your thoughts though. "Pelvis" might be more apt. These dances are performed only by the young, from about 5 up to 25. Sometimes you can catch older people doing it, but only if small people are doing it to, and the moment has to be right. It's deemed improper.
(Before I continue, I should note that yes, I do like it.)
I'm not sure, but get the idea that pre-puberty kids don't think anything sexual about the dances. Probably for that reason, it's more acceptable for them to do it. For instance, at my school, which is grades 8-10, you won't find but a couple people willing to dance like that in public. But imagine, the Kwangali people had "R.S.S." tatooed on the back of their skirts: "Rundu Senior Secondary". The announcer noted that "like a lot of African dance styles, this one mostly involves shaking of the hips. Some of you might get some ideas, but remember, this is strictly for entertainment!"
There's some kind of contradiction here. My American mind sees something wrong with allowing sexuality to kids, but the Owambo mind thinks pelvic gyrations are only for the young. But I envy them too, with their inborn rhythm, and I loath the missionaries that shoved listless Lutheran church tunes into mouths that once called and responded in 7/4. Yet, the incidence of rape is phenomenal in this country, presumably the burn of the gift of sexuality to children. It is acceptable for old people to look sexually at grade-school girls shaking polaroids on TV. Here it is the wo-man chained by the gift, not Prometheus the giver.
Coda: There's a girl on my homestead these days that is astonishingly beautiful. She scares me though, because I don't want her to die. I know that when I come back in however many years, many people I know will be sleeping underground. AIDS: 20-30% of sexually active adults served.
Worked on some of the lower-level wrappers in guile-gnome. Today, the focus was on custom wrappings for boxed structures, like GdkRectangle and GdkColor. Types like these have more useful Scheme representations than opaque objects, for instance as vectors or as strings (in the case of GdkColor).
However, these representations were only being used for wrapping arguments and return values, not general GValue marshalling (as in GObject properties and signal closures). After writing the low-level code to get this to work, it took surprisingly long to get the bindings generator to do what I needed. The final interface looks like this (wordpress is butchering the code tag though):
(wrap-custom-boxed! "GdkRectangle" "GDK_TYPE_RECTANGLE"
(list "if (" c-var ")" scm-var " = scm_gdk_rectangle_to_scm (" c-var ");"
"else " scm-var " = SCM_BOOL_F;")
(list c-var " = scm_scm_to_gdk_rectangle (" scm-var ");"))
The first and second args are the type name and the GType ID. The third and fourth are code fragments to translate between C and Scheme values. The fragments are made of strings and lists of strings that should be concatenated. The interesting thing is that the c-var and scm-var bindings aren't bound by the proc, which indicates that wrap-custom-boxed! is a macro, but also that they can't be known when this form is evaluated -- only when the bindings are actually written out. (This code might be expanded inline into a complicated function, like one with a GList*-of-const-gchar* argument, for instance.)
So, the macro wraps the forms in closures, which will later be called with scm-var and c-var as arguments. Then when the closures are executed, the proper names go in. The technique of lambda-wrapping is reminiscent of Guy Steele's hygienic macro implementation in his Rabbit scheme compiler. (I wonder what problem the theoreticians had with his implementation -- it was really elegant.)
The list notation for code fragments has been in g-wrap for a long time. It's ugly to work in two languages, though; it would be nice if we could implement a straightforward mapping between pseudo-scheme and C, like:
'(if (% c-var)
(set! (% scm-var) (scm_gdk_rectangle_to_scm (% c-var)))
(set! (% scm-var) #f))
In this case a list with % in the first arg would indicate a substitutable parameter. A bit trickier would be:
'(set! (% scm-var) (if (% c-var) (scm_gdk_rectangle_to_scm (% c-var)) #f))
In the latter case the if maps to the terniary operator, whereas in the first it maps to C's if. And there's a lot of C that Scheme doesn't have -- . and ->, bit shifts, infix arithmetic, casts, types, prototypes, etc. But a lot of it maps nicely, and with a way to escape down into text output we should be able to limp along with an incomplete implementation.
λgtk got a disturbing amount of blog-press, especially considering that it is really immature right now. (Uses the C closure interface, no subclassing, probably no object properties, etc.) I am jealous, yes! Someone should get a planet scheme going. I have a low probability of doing so, but given enough time I don't need 10,000 monkeys, I'll get around to it.
10,000 monkeys should have been Ximian's motto.
The count: 2 days to leaving the village, 10 to landing in san francisco. I'm packing up the computer today -- no more hacking for a while.
I hosted a party last weekend for thanksgiving. A buddy came over two days in advance so we could cook everything. We planned on having two turkeys, but some moron at the grocery store decided to put all their turkeys through the meat cutter. So we had turkles, turkey circles, the shape made when taking the cross section of a drumstick.
It was strange waking up and saying goodbye to people, those ones that are leaving a few weeks early. The momentum of being is so great that after years in a place, it's hard to recognize a turn in the road. You know it's there, but it sneaks up. Now everytime I see someone here I have to calculate if it's the last time. A bit sad, this interstitial time.
It doesn't help that I'm busy still with schoolwork, or that I was too hung over to clean house yesterday (Sunday). They say beer cures a hangover, but it's really just temporary.
It seems Wim Taymans has finally uploaded his grand scheme to, er, well do something to the internals of GStreamer. I'm looking forward to having a gander at it. Might be a nuclear power plant instead of a bikeshed -- will be interesting to see the responses on the list.
The count: +/-7 days to leaving the village, 16 to landing in San Francisco.
Well well, time passing without key-tapping on the weblog. Greetings, November, and see you later. Hardly knew you.
I fly out of this country three weeks from today. I have my itinerary, finally:
Dec. 16: -> San Francisco Dec. 22: -> Lafayette, LA Dec. 25: -> Charlotte
Jan 14: -> Barcelona
So, time back home is at a premium. Hence the US$2300 plane tickets. I'm excited to go -- there's none of the usual trepidation about the future, not knowing what's next. Time with friends and family is going to be really nice.
state of the non-hack
Lots of distractions these days, no time for programming. I still need to grade a couple of tests so that I can give my learners their final marks. Then there's the thanksgiving dinner this weekend -- 30+ people, at my house, two turkeys, six pies, stuffing and all of the normal accoutrements. Then there's the other thing -- the volunteers that will be replacing my group are in the are now, demanding attention and mostly deserving it. Interesting people, and new ones at that.
I put out a few releases of guile-gnome recently. Nice to get some contributions from other folks. The issue as of late has been parallel installation and library versioning. Tricky, but I think we have the problem licked.
Got around to building guile 1.7 the other day. Threads in guile 1.7 are the platform's native threads, which is pthreads on unix. The only part that needs to run single-threaded is GC. Quite impressive -- I don't know of any other dynamic language that makes native threading this easy. Clue me in if you know of one. (Pthreads only, please :)
22 days until landing in SF.