<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:fare</id>
  <title>Cybernethics / Cybernéthique</title>
  <subtitle>Liberty, Ethics and Information / Liberté, Éthique et Information</subtitle>
  <author>
    <name>François-René Rideau</name>
  </author>
  <link rel="alternate" type="text/html" href="http://fare.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom"/>
  <updated>2009-12-12T19:18:42Z</updated>
  <lj:journal userid="1199821" username="fare" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://fare.livejournal.com/data/atom" title="Cybernethics / Cybernéthique"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:151460</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/151460.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=151460"/>
    <title>Good reasons for irrational belief</title>
    <published>2009-12-12T19:18:00Z</published>
    <updated>2009-12-12T19:18:42Z</updated>
    <category term="strategy"/>
    <category term="irrationality"/>
    <category term="reason"/>
    <category term="en"/>
    <content type="html">&lt;p&gt;
The other day, I had a dream, which I now realize was a premonition,
in which I was blogging about the rationality of irrationality.
Here are good reasons to be irrational:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;
Information is not free.
It's not usually worth paying the price for certainty,
and moreover, by the time you're 100% sure of something,
it's probably useless (except if you're a mathematician).
We constantly have to act on uncertain information,
at the risk of making either great mistakes or great discoveries
&amp;mdash; all men are irreducibly Entrepreneurs.
&lt;/li&gt;&lt;li&gt;
Hesitation is costly.
Any long term project requires commitment,
trust in partners, faith in success, etc.
which can only be based on imperfect information.
Moreover, once the project is started,
time spent worrying or hesitating, even due to good reasons,
only decreases the chances of success of the project,
while irrational faith in success is a self-fulfilling prophecy.
&lt;/li&gt;&lt;li&gt;
Most errors don't matter that much.
When they matter, there's no need to eagerly chase them,
because they'll come after you all by themselves,
and then it's time to fix them.
And in the rare cases where feedback is deadly
and you can't fix an error after the fact,
it is better to err a lot on the side of caution
than to err only ever so much on the side of danger,
so you shouldn't go looking to hard for the truth.
&lt;/li&gt;&lt;li&gt;
It's important to agree with others
on the outcome of otherwise arbitrary decisions.
It doesn't matter all that much how one should pronounce
the words that convey any given meaning;
but if you don't use words in such way that
the other party will make sense of it,
you won't convey any meaning at all.
And you really don't want to mispronounce                                                                                                                                      &lt;a href="http://en.wikipedia.org/wiki/Shibboleth"&gt;shibboleth&lt;/a&gt;                                                                                                               (though one man's pronounciation is another man's mis-).                                                                                                                       &lt;/li&gt;&lt;li&gt;
It's hard to unbundle good and bad ideas,
yet good ideas often come in package-deals with bad ideas.
Untangling ideas often requires costly domain-specific expertise
and efforts that are not always worth the results.
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;
Of course, just because there are good reasons to follow strategies
that have the adoption of bad ideas as a necessary consequence,
it does not follow that any of those bad ideas is good in itself,
or even that the strategy was successful in any particular instance.
So having an allegedly good epistemic strategy
is no excuse to any of your individual errors.
&lt;/p&gt;&lt;p&gt;
However, the important point is that you should be understanding
decision-making in terms of rules and strategies
rather than individual decisions.
This is also the main point of Henry Hazlitt's
&lt;cite&gt;The Foundation of Morality&lt;/cite&gt;,
or of the new (dawkinsian) point of view on genetics and memetics.
That's why you should welcome the identification of individual errors,
not just as opportunities to fix mistakes (which is not always possible),
but also as opportunities to improve your process itself.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:151064</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/151064.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=151064"/>
    <title>A killer app for the XO? MYCIN!</title>
    <published>2009-12-10T22:05:37Z</published>
    <updated>2009-12-10T22:20:17Z</updated>
    <category term="ai"/>
    <category term="lisp"/>
    <category term="medecine"/>
    <category term="poverty"/>
    <category term="expert systems"/>
    <category term="en"/>
    <content type="html">&lt;p&gt;Doctors are expensive. Yet &lt;em&gt;most&lt;/em&gt; of what they do is follow a simple algorithm with lots of rules. A human aided by an expert system could do the very same thing, for cheaper!
&lt;/p&gt;&lt;p&gt;
Of course, in rich countries, the established trade unions will never let such a thing be deployed, suing whoever tries to help others with it for unlicensed use of medecine, to protect their legal monopoly. The bastards will also (rightfully this time) argue that a trained physician will know the rules just as well, and be able to better interpret the rules and more importantly, to better interpret the many elements to use as input.
&lt;/p&gt;&lt;p&gt;
And still, an untrained person with a machine could do all the easy things that a doctor would try, and redirect only the hard cases to a doctor. And in a poor country, that could save a lot of lives. And even in currently rich countries, a lot of money could be saved, and the effort of trained doctors could be redirected where they too would be able to save a lot of lives.
&lt;/p&gt;&lt;p&gt;
Moreover, such an expert system is not fantasy, it has already been written, long ago: &lt;a href="http://en.wikipedia.org/wiki/Mycin"&gt;MYCIN&lt;/a&gt;. It could easily be updated, and then customized with regional data about which diseases are prevalent where, and what treatment is available at what price there. And of course, it could be taylored towards the non-expert in a way that flags situations where a human expert is needed vs situations where a simple treatment should be tried first.
&lt;/p&gt;&lt;p&gt;
Let's give MYCIN on an XO to teachers, priests and social workers. A cheap way to save plenty of lives!
&lt;/p&gt;&lt;p&gt;
Did I say XO? I meant &lt;a href="http://www.samizdata.net/blog/archives/2009/12/mobile_phones_i.html"&gt;cell phone&lt;/a&gt; &amp;mdash;
maybe equipped with an &lt;a href="http://nextbigfuture.com/2009/04/cellscope-will-enable-malaria-and.html"&gt;optical modification to diagnose malaria&lt;/a&gt;!
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:150938</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/150938.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=150938"/>
    <title>Libert-o-meter!</title>
    <published>2009-12-07T01:57:15Z</published>
    <updated>2009-12-07T03:32:33Z</updated>
    <category term="libertarian"/>
    <category term="law"/>
    <category term="libert-o-meter"/>
    <category term="en"/>
    <content type="html">&lt;p&gt;
See how far you score in this test.
&lt;/p&gt;&lt;ol start="0"&gt;&lt;li&gt;
I feel outrage when I am myself victim of theft or aggression, or other interference with my voluntary transactions.
&lt;/li&gt;&lt;li&gt;
I am concerned when I witness the theft or aggression of another person.
&lt;/li&gt;&lt;li&gt;
I recognize that other people have the right to indulge in any voluntary transactions, even though I may despise them, for it's none of my business.
&lt;/li&gt;&lt;li&gt;
I protest against third parties that prevent other individuals from completing voluntary transactions.
&lt;/li&gt;&lt;li&gt;
I believe that government and collective entities are overreaching when they interfere in the life of individuals and their voluntary transactions.
&lt;/li&gt;&lt;li&gt;
I think there are fixed limits to government powers and inalienable individual rights.
&lt;/li&gt;&lt;li&gt;
I surmise that the domain of legitimate government action is very limited and that current governments are largely exceeding their prerogatives and doing more harm than good.
&lt;/li&gt;&lt;li&gt;
I reckon that theft is no less theft when it is done legally by government and that intervention against voluntary transactions is no less illegitimate when done in the name of the people.
&lt;/li&gt;&lt;li&gt;
I take stock that there is no such thing as an external force above and beyond society, only forces internal to society, subject to the same universal dynamics of the incentives of responsible or irresponsible individual decision-makers.
&lt;/li&gt;&lt;li&gt;
I can make a conceptual distinction between governments as organizations of public force and government as monopolies of public force, and I understand in this as in any matter, monopolies establish the power of parasites without scruples upon honest people.
&lt;/li&gt;&lt;li&gt;
I realize that only individuals may possess rights, that one can only delegate or cede rights one possesses and is free to keep and exercise himself, that "communities" are fictitious entities, and that claims to represent "Government", "Nation" or "God" are bogus scams to dispossess individuals from their rights.
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;small&gt;
Inspired by &lt;a href="http://fare.livejournal.com/105461.html"&gt;this previous post&lt;/a&gt;, as the project of a crafted paper device
to be exchanged at the
&lt;a href="http://www.misteriosos.org/?p=119"&gt;Very Merry UnBirthday Gift Swap&lt;/a&gt;
organized by the Banditos Misteriosos.
&lt;/small&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:150555</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/150555.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=150555"/>
    <title>Examples of Valid Political Reasoning - Imperialism Again</title>
    <published>2009-12-06T04:45:24Z</published>
    <updated>2009-12-06T04:45:24Z</updated>
    <category term="libertarian"/>
    <category term="politics"/>
    <category term="war"/>
    <category term="reason"/>
    <category term="argument"/>
    <category term="imperialism"/>
    <category term="en"/>
    <content type="html">&lt;p align="justify"&gt;
Having argued
&lt;a href="http://fare.livejournal.com/150446.html"&gt;the relevance of political reasoning&lt;/a&gt;,
I'd like to illustrate how this reasoning may be conducted.
&lt;/p&gt;&lt;p align="justify"&gt;
While my friend &lt;a href="http://hodja.livejournal.com/"&gt;Nasreddin Hodja&lt;/a&gt;
chastises me for daring to take sides
in conflicts that he thinks I should avoid,
I think that he brilliantly uses himself the very proficiency
that I'm trying to illustrate and encourage with my previous propositions:
when others arbitrarily compare two abstract alternatives
of a choice unavailable to anyone according
to a few criteria of which they presuppose the relevance
(often in a mystic quest of purity)
while ignoring infinitely many other potential criteria,
hodja precisely finds
&lt;a href="http://fare.livejournal.com/149824.html?thread=486464#t486464"&gt;an objective holistic criterion&lt;/a&gt; to compare
the relative overall goodness of two countries &amp;mdash;
the massive revealed preferences of migrants and non-migrants
between these countries,
migration being a concrete choice actually available to many.
&lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;p align="justify"&gt;
The very same criterion can indeed be used to support my
Libertarian Imperialist position in favor of European colonization
over the regimes that preceded or followed,
and in favor of outright American Imperialism
over the proxy-based American Hegemony
that democratic "good" conscience caused to replace the former,
or of American Hegemony over the World Communist Conspiracy it once opposed.
&lt;/p&gt;&lt;p align="justify"&gt;
Indeed with the very same argument one may argue that
the European Colonial Empires in the 19th century
were nicer places than the regimes that preceded or succeded them:
there was voluntary migration to and within these places
while run by Europeans
(and not just by Europeans: Gandhi was once a lawyer in South Africa),
and the flow of inhabitants since has been massive emigration.
Was Vietnam better off surrendered to communists?
Was Algeria better off surrendered to islamo-national-socialists?
Was Africa better off left to tens of local tyrants?
Was India better off left for native leaders to partition
in religion-based countries?
Millions of refugees risking their lives on the sea,
and otherwise abandoning all their belongings to migrate,
have answered a resounding "no" by voting with their feet,
and important one-way flux of migrants continue to do so every year
that massive brutal border bureaucracies can but slow down.
&lt;/p&gt;&lt;p align="justify"&gt;
As for the situation before European colonization,
the same places were medieval or prehistoric backwaters then,
all much less densely populated than afterwards,
when inhabited at all (as large parts of South Africa weren't).
At the best of its private corporate management, and
even at the worst of its subsequent public administration,
India probably was much better ruled than
under the wantonly genocidal mughals
or the no less brutal marathas.
The French exactions in Indochina do not even begin to compare
with the conquest of the Champa by the Viet.
&lt;/p&gt;&lt;p align="justify"&gt;
Even in the much reviled case of the iberian conquistadores,
it isn't obviously clear that the reign of Europeans
over what is now latin america was worse than
the previous dominion of the anthropophagic aztecs
or the totalitarian human-sacrificing incas.
In any case, we should be wary of not blaming on
the political organization of the invaders
the large part that imported diseases had on destruction of indians.
And in response to the zealots of good conscience,
we may argue that the prohibition of the slavery of indians
did little to improve their lot and certainly made their lives
less valuable to the conquerors.
&lt;/p&gt;&lt;p align="justify"&gt;
The very worst of European imperialism was probably Leopold's Congo.
It is a sad episode of history of which there is little good to say.
And still, except for the scale enabled by technology
it wasn't obviously worse in intent than the very worst of
non-European conquest in Africa
(which is unfortunately not well recorded,
due to Africa being largely prehistoric until then).
Moreover, to the discharge of Europeans, the episode did raise
humanitarian outrage in Europe in a way that it never ever did
anywhere else in the world at any other time,
and was ultimately stopped by Europeans.
Finally, the role of "private" capitalist makers of agricultural rubber
cannot be understated as a factor behind making the brutal collection
of wild rubber by unchecked political "public" rulers unprofitable.
&lt;/p&gt;&lt;p align="justify"&gt;
Of course, it is always important to realize what you are comparing to what,
and to avoid making
&lt;a href="http://fare.tunes.org/liberty/economic_reasoning.html"&gt;accounting fallacies&lt;/a&gt; when comparing.
Just because European Imperialism has been a boon for mankind
and generally an improvement not just over what preceded it
but also what followed it,
doesn't mean that the people who spearheaded it were in any way nice people,
doesn't mean that it didn't cause massive crimes towards a great number of victims,
doesn't mean that it wasn't obviously wrong in many ways,
doesn't mean it was the best conceivable system then,
doesn't mean it is the best imaginable system now,
etc., etc.
But it probably means we can learn lessons from it that are relevant to our future,
and unlearn poisonous propaganda by which we were taught to
hate it, despise it, be ashamed of it.
&lt;/p&gt;&lt;p align="justify"&gt;
All in all, it &lt;em&gt;is&lt;/em&gt; possible to make meaningful, objective, measurable,
&lt;em&gt;comparative&lt;/em&gt; value judgments about political institutions, etc.,
and the above are examples of it.
Furthermore, you cannot even start to contradict my specific examples
without first admitting the possibility of valid such statements!
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:150446</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/150446.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=150446"/>
    <title>The Relevance of Political Reasoning</title>
    <published>2009-12-02T04:16:29Z</published>
    <updated>2009-12-02T15:59:49Z</updated>
    <category term="politics"/>
    <category term="reason"/>
    <category term="mu"/>
    <category term="en"/>
    <content type="html">&lt;p align="justify"&gt;
When someone rises to &lt;em&gt;unilaterally&lt;/em&gt; denounce
the involvement of one government in some conflict,
or more generally the policy of any person or institution
on any contested issue,
that someone is precisely not staying out of the conflict,
but taking sides.
&lt;/p&gt;&lt;p align="justify"&gt;
As I've argued previously,
&lt;a href="http://fare.livejournal.com/150094.html"&gt;&lt;em&gt;mu&lt;/em&gt; should be the a priori answer&lt;/a&gt;
by most honest people to most such questions, affirmations or intimidations.
Before he may dare to step out of
the prudent refusal to take sides that ought to be his default stance,
an honest man should master basic competency and knowledge
in the subject at stake.
&lt;/p&gt;&lt;p align="justify"&gt;
But while pointing out this obvious requirement of intellectual honesty
is sadly the only thing to reply to most appeals to action,
as spread by fools who speak authoritatively of
what they refuse to make any effort to know,
or from crooks who try to draft you in support of their plans,
there are still times when a question is worth trying to answer earnestly, and "mu" doesn't apply.
Which of a limited number of alternatives should be preferred by whom?
How do the costs and benefits of some policy compare over its rivals?
What would or will a competent administrator do?
Which of two oppressors is more deserving of being obeyed or opposed,
of being supported or rebelled against? And for what reasons?
&lt;/p&gt;&lt;p align="justify"&gt;
Not only are these questions in themselves not always vain,
they can also have very practical consequences.
And I'm not speaking just for the appointed or presumptive
administrator, shareholder, investigator or otherwise
scholarly specialist in an institution
empowered to make policy decisions.
Even the layman without any political decision power may
have to make important decisions based on such analysis.
For instance, he may choose when to invest in which country
and when to divest from it;
choose when to consider migrating (if ever)
to which other country (if any);
determine what is the most effective way to deploy charitable help
and in which country,
assuming one wants to maximize the positive effects of it;
determine what conflicts are worth committing one's resources to
and which should be avoided like plague; etc.
&lt;/p&gt;&lt;p align="justify"&gt;
At times questions of politics can be objectively answered.
And even when an objective answer would be contingent
on assumptions that one is unable to confirm or infirm,
or on counter-factuals posited for the sake of exercise,
it is sometimes worth making the effort of developing the discipline
that allows to think correctly about this class of issues.
That is where it is important to develop a good narrative
that can explain what's going on.
Understanding conflicts and how they should be resolved
is not only an important proficiency to understand past history,
it's but also an essential tool to anticipate and create the future.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:150094</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/150094.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=150094"/>
    <title>Which side do you support? Mu.</title>
    <published>2009-11-28T00:14:01Z</published>
    <updated>2009-11-29T03:19:31Z</updated>
    <category term="war"/>
    <category term="mu"/>
    <category term="en"/>
    <content type="html">&lt;p align="justify"&gt;
In response to the
&lt;a href="http://fare.livejournal.com/149824.html?thread=486464#t486464"&gt;judicious remarks&lt;/a&gt;
of my friend Hodja whose comments on my blog I appreciate immensely,
I will add a few clarifications to complete my previous
&lt;a href="http://fare.livejournal.com/149824.html"&gt;Defense of Libertarian Imperialism&lt;/a&gt;
in a series of posts.
&lt;/p&gt;&lt;p align="justify"&gt;
First, and most importantly, I think that hodja and I
actually agree on the importance of
staying out (emotionally, physically, etc.) of conflicts
that others try to impose upon us.
Every time we manage to stay out of a conflict
into which others are trying to draw us against our will,
we make a small victory against oppression.
I even wrote quite a few posts on this topic already,
most of them in French:
&lt;a href="http://fare.livejournal.com/tag/mu"&gt;mu&lt;/a&gt;
&amp;mdash; the zen buddhist answer that &lt;q&gt;unasks&lt;/q&gt; a question
the premises of which you deny to accept.
&lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;p align="justify"&gt;
When "my" government forces me to go to war with bad guys,
I may or may not object on the principle that
only a less criminal government has the right to fight a more criminal one
&amp;mdash; but I &lt;em&gt;do&lt;/em&gt; object in either case to
their drafting my support (in the form of increased taxes)
not just for this war of theirs
but also for the details of their implementation of it.
Now similarly, when "my" government refuses to go to war
with another government that it declares is legit,
I may or may not object according to the principle that
the other government is or isn't deserving to be toppled
&amp;mdash; but I &lt;em&gt;do&lt;/em&gt; object to their preventing me
(with my own tax money!)
from supporting wars I think are just and worth fighting
in the specific way that I think they ought to be waged.
In either case, they are drafting my support
to their specific implementation of specific goals
no less in times of forced "peace" than in times of forced "war".
My opposition to their monopoly on the provision of security
is wholly independent from any particular decision
they make or fail to make in declaring and misimplementing war or peace.
&lt;/p&gt;&lt;p align="justify"&gt;
Moreover, inasmuch as anyone is lobbying with any power towards
influencing said government into either going to war or not going to war
&amp;mdash; he is exerting political power, and I am objecting to this power
just as much from them as from anyone with any bit of government power.
I am just as much against peace-mongers as against war-mongers.
"Do not speak in my name" is my equal message to both.
Of course, most people who blather either way are but fools without any power
proportionate to the noise they are making, wasting both their time and mine.
Nevertheless they do participate in the general brainwashing and
in the competition to determine who will temporarily be
the tyrant who imposes his will upon me,
whichever is their position on this particular conflict.
And indeed, the main argument of most "peacemongers" is not at all to oppose
the spending of trillions of dollars of stolen money by government
&amp;mdash; they just want to spend it
in their own soul-crushing socialist enslavement schemes.
Slow death instead of quick death.
&lt;/p&gt;&lt;p align="justify"&gt;
That is why an honest man's first and vehement response to any intimidation
towards taking side in a conflict should be "mu":
a refusal to take sides and to waste resources
into something that is none of your business,
upon which you have no influence whatsoever,
something that is beyond your competence in more ways than one,
whereas you have more important and effective things to do.
Leave the decision and the responsibility for it fall upon
each empowered government official,
who'll be making the decision independently from you anyway.
Meanwhile, focus on doing good where actual good you can do.
&lt;/p&gt;&lt;p align="justify"&gt;
And it is indeed an actual good cheaply achieved to
disarm the trap of "big urgent catastrophes" that crooks prepare
and that your friends may be falling into.
Help your friends not become the useful idiots of statist oppression,
both victims that they are of mental traps laid by
the political oppressors who seek their support,
and contagious propagators of these viral memes that victimize them.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:149824</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/149824.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=149824"/>
    <title>In Defense of Libertarian Imperialism</title>
    <published>2009-11-25T16:57:08Z</published>
    <updated>2009-11-26T02:52:04Z</updated>
    <category term="libertarian"/>
    <category term="communism"/>
    <category term="war"/>
    <category term="imperialism"/>
    <category term="en"/>
    <content type="html">&lt;p align="justify"&gt;
Many libertarians, after Rothbard, start from the (correct) assumption
that one's government is one's first and most direct enemy,
to the conclusion that one should always side with
the enemies of one's current oppressor.
Rothbardians have thus prolificly denounced the US
and supported its enemies in its hot and cold wars with
National Socialist Germany,
International Socialist Russia,
Communist China, North Korea, North Vietnam,
National Islamist Iran or Iraq, etc.
&lt;/p&gt;&lt;p align="justify"&gt;
Of course, applying the same "logic",
the respective citizens of those countries
whose government are in conflict with USG
should in turn support the US government in its fight against their own
&amp;mdash; if only their own government wouldn't murder them immediately
at the mere utterance of such a support.
And to take this line of reasoning to its conclusion,
a Pole in 1939 should
have supported Hitler and Stalin as opponents
to his current oppressive government.
&lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;p align="justify"&gt;
A "logic" that reaches different conclusions for different people
is actually not a logic. It's polylogism, a fallacy of double standards,
a rhetorical device to back whichever absurdity one fancies.
Moreover, underlying this fallacy, we see another typical case
where people who should know better fall into an
&lt;a href="http://fare.tunes.org/liberty/economic_reasoning.html"&gt;accounting fallacy&lt;/a&gt;:
just because a current oppressor is identified (current account negative)
current non-oppressors (current account zero)
are considered a better alternative as part of an unrelated
future choice between oppressors.
&lt;/p&gt;&lt;p align="justify"&gt;
"There are two kinds of pacifists:
those who try to disarm the aggressors,
and those who try to disarm the victim."
At the margin, you may only have the choice between two oppressors.
Making this economic (moral) choice about the future based on
a historical accounting of one's past personal relationship with them
is completely stupid and baseless.
The enemy of your current oppressor
may oppress you far more than said current oppressor if he wins,
not to speak of his current victims,
as Hitler and Stalin may have amply demonstrated to the hypothetical
Pole who would have believed the rothbardian argument.
&lt;/p&gt;&lt;p align="justify"&gt;
Some oppressors are objectively
&lt;a href="http://fare.livejournal.com/66415.html"&gt;better than others&lt;/a&gt;.
And one should support the better oppressors against the worse oppressors,
whichever of them is currently oppressing one.
For all its warts, the corrupt US-backed South Vietnamese regime was better than
the wanton mass-murdering Russia-backed North Vietnam, and
should have been supported in its war of defense against the communist aggressor.
The wanton mass-murdering Russia-backed North Vietnam itself
was better than the outright genocidal China-backed khmer rouge,
and should have been supported in its war of aggression against that regime.
The latter regimes were no less imperialist than the previous
for being backed by Russia or China rather than the US or France;
but they were much less libertarian.
&lt;/p&gt;&lt;p align="justify"&gt;
Similarly, for all the crimes committed by their men,
the British and French Colonial Powers
should have been supported in their conquests of barbarian and totalitarian powers
that previously existed in Africa, India, Vietnam, etc.
In all those countries, colonial oppression may have been a bad thing,
pre-colonial oppression was worse, and so was post-colonial oppression.
The regimes that were toppled by colonial imperialists
were never peaceful to their own people, and had no "right" to remain in place.
The offenses they committed against their later victors may have been large
(as in the case of systematic muslim raping enslavers
around the mediterranean sea) or comparatively trifling
(as in the case of various disputes with european merchants or missionaries);
they were often reason enough to wage war, and even when not,
the new conqueror had no less right to rule than the previous one;
only more so for his more liberal laws.
&lt;/p&gt;&lt;p align="justify"&gt;
But apparently, to the racists who call themselves anti-colonialists,
the color of the skin of the ruler matters more than
whether he's an honest, competent administrator
or a corrupt wanton mass-murderer.
And so the racists and leftists from the Western Establishment,
after conquering the University, the main-stream media
and the public administrations,
have managed to push for local brown-faced mass-murderers
to replace rather honest white administrators
everywhere that a colonial power once existed,
tamed after its initial bloody installation.
Worse, they have successfully disarmed and embargoed
those who were resisting communism in Russia, China, Vietnam
and paralyzed the attempts of western reactionaries to help the victims.
&lt;/p&gt;&lt;p align="justify"&gt;
Let it not be said that those of us who call for the use of force
against barbarians are pro-war.
The war was started long ago, and the enemies of life, property and liberty
have never granted any truce even less peace, to those they seek to oppress.
Those who deny property rights and claim totalitarian power over our lives
are at war with us, whether their agenda is open or remains concealed
behind pleas for greater "social justice" and claims of "saving the planet".
They have successfully subverted many weak societies and their entryism
in all venues of power is now bearing fruit even in the formerly strongest societies.
Expect no mercy from these enemies. And grant them none.
&lt;/p&gt;&lt;p align="justify"&gt;
The essential proficiency in political science
is to distinguish friends from foes.
You may be a fool and not know the difference;
the enemies of liberty are quintessential political beasts
and sense this difference very well.
You're a fool if you believe yourself at peace with socialists,
islamists and other totalitarians.
You're a fool no less if you realize there is conflict but think you
can bargain, negotiate or compromise your way into peace with them.
Any appeasement talk with totalitarians can fool but yourself and your allies,
never the enemy.
Their very nature, the way and the reason they live,
their deepest aspiration, their ultimate value, is to prey on producers;
there is no more peace to be had with them than with the plague.
If you're waiting for men in black to knock at your door
before you realize these men are at war with you,
you're a pretty useless ally in this war;
you're just another of these "useful idiots" as Lenin called them.
&lt;/p&gt;&lt;p align="justify"&gt;
Free Market defense agencies would certainly have to fight
attempts by the totalitarians to seize power;
meanwhile totalitarians would certainly do systematic entryism
in whichever defense agencies they can to turn them into their tool.
And so this eternal war will certainly continue
in the Anarchy dreamed by anarcho-capitalists just as it exists now,
though freedom to choose one's defender may make it easier
to win that war over and over again.
In any case, fighting back at the totalitarians
will happen in the Free Societies of Tomorrow,
and is thus certainly no crime.
It thus isn't a crime now even in the Semi-Free Societies of Today,
and wasn't a crime in the Semi-Free Societies of Yesterday,
though those who may have waged this war may themselves
not have been innocent of other lesser crimes.
&lt;/p&gt;&lt;p align="justify"&gt;
However, inasmuch as there are many tyrants
to be kicked out in the world today
there is no more an Imperial force to kick them out
and replace them with something better.
Inasmuch as there are a whole lot of totalitarian activists to be crushed,
there is no Imperial force to crush them
and spread civilization in place of
the poisons these activists spread in people's minds.
"Conservatives" and "Neo-conservatives" have bitten bait, hook and line
into the "progressive" ideology of Democracy,
and will sacrifice all liberties on the altar of this
&lt;a href="http://mises.org/store/Democracy-The-God-That-Failed-P240C0.aspx"&gt;God That Failed&lt;/a&gt;.
They cannot replace tyranny with anything but another tyranny
in foreign countries,
and even at home they are part of the problem rather than the solution.
Meanwhile, "progressives" and outright "socialists" continue with
little impediment on their war on liberty,
and there is no one to stop them, only minor hurdles that slow them down.
National armies and police forces, having monopolized the defense of property rights
in the last semi-free countries able to fight,
are now securily controlled by enemies of liberty.
The war has been waged, and it has been won by the Enemy.
&lt;/p&gt;&lt;p align="justify"&gt;
But this war was waged first with ideas.
The reconquest will also happen first with ideas.
Before guns may speak on our side again and
at long last give the totalitarians a taste of their own medecine,
we have a long way to go.
Happily, modern technology makes it easier than ever for ideas to spread;
and so, we must wage the war with ideas, with faith that
it is precisely what makes our ideas good
that will make them prevail in the end.
&lt;/p&gt;&lt;p&gt;
(Cross-posted on &lt;a href="http://distributedrepublic.net/archives/2009/11/25/in-defense-libertarian-imperialism"&gt;http://distributedrepublic.net/archives/2009/11/25/in-defense-libertarian-imperialism&lt;/a&gt;.)
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:149685</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/149685.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=149685"/>
    <title>Boston Lisp Meeting: Monday 2009-12-14 Sam Tobin-Hochstadt</title>
    <published>2009-11-25T01:03:06Z</published>
    <updated>2009-11-25T12:16:27Z</updated>
    <category term="lisp"/>
    <category term="boston"/>
    <category term="boston-lisp-meeting"/>
    <category term="samth"/>
    <category term="meeting"/>
    <category term="lightning-talk"/>
    <category term="typed scheme"/>
    <category term="en"/>
    <content type="html">&lt;p align="center"&gt;&lt;a href="http://fare.livejournal.com/149685.html"&gt;http://fare.livejournal.com/149685.html&lt;/a&gt;&lt;/p&gt;&lt;p align="justify"&gt;
A Boston Lisp Meeting will take place
on Monday, December 14th 2009 at 1800 at NEU WVH 366.
&lt;em&gt;&lt;b&gt;Sam Tobin-Hochstadt&lt;/b&gt;&lt;/em&gt; will talk about &lt;em&gt;Typed Scheme&lt;/em&gt;.
&lt;/p&gt;&lt;p align="justify"&gt;
Additionally, we will have two 5-minute Lightning Talks,
each followed by 2-minute Q&amp;#38;A. Speakers to be announced.
&lt;/p&gt;&lt;p align="justify"&gt;
Also, there will be a buffet offered by ITA Software.
Registration is not necessary but appreciated.
See details below.
&lt;/p&gt;&lt;a name="SECTION_1"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;1 Sam Tobin-Hochstadt on Typed Scheme&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
Typed Scheme is a system for incrementally porting
untyped PLT Scheme programs to a typed language.
The type system is designed to automatically accommodate typical Scheme idioms,
and includes several novel features to support this.
It also offers sound and automatic interoperability with untyped code.
It has been used in real applications and
on thousands of lines of existing Scheme code.
&lt;/p&gt;&lt;p align="justify"&gt;
&lt;a href="http://www.ccs.neu.edu/home/samth/typed-scheme/"&gt;http://www.ccs.neu.edu/home/samth/typed-scheme/&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Sam Tobin-Hochstadt is a postdoc at Northeastern University,
working for Matthias Felleisen.
He is investigating the integration of typed and untyped languages,
with a focus on Scheme and JavaScript.
As a graduate student, he developed Typed Scheme,
which he continues to maintain.
He is currently supported by a grant from the Mozilla Corporation.
&lt;/p&gt;&lt;a name="SECTION_2"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;2 Lightning Talks&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
At every meeting, before the main talk,
there are two slots for strictly timed 5-minute "Lightning Talks"
followed by 2 minutes for questions and answers.
&lt;/p&gt;&lt;p align="justify"&gt;
The slots for next meeting are still open.
Step up and come talk about your pet project!
Contact me at fare at tunes.org.
&lt;/p&gt;&lt;a name="SECTION_3"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;3 Time and Location&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
&lt;b&gt;The Lisp Meeting will take place on
Monday December 14th 2009 at 1800 (6pm)
at NEU WVH 366.&lt;/b&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Note that we're back on a Monday, and that we're using a new location.
&lt;/p&gt;&lt;p align="justify"&gt;This is at
Northeastern University,
in the Computer Science building WVH (West Village H,
see &lt;a href="http://tmp.barzilay.org/wvh.jpg"&gt;this picture&lt;/a&gt;)
when you arrive from the T
on Huntington Avenue
(Green E line, stop at Northeastern Station,
or possibly Museum of Fine Arts;
you can also walk from Ruggles on the Orange line).
As the number indicates, the room is on the third floor.

Northeastern maps and direction:
&lt;a href="http://www.northeastern.edu/campusmap/maps.html"&gt;http://www.northeastern.edu/campusmap/maps.html&lt;/a&gt;

Many thanks go to Eli Barzilay for arranging for the room,
and to Northeastern University for welcoming us.
&lt;/p&gt;&lt;a name="SECTION_4"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;4 Dinner&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
&lt;a href="http://itasoftware.com/careers/"&gt;ITA Software&lt;/a&gt;
a fine employer of Lisp hackers (disclaimer: I work there),
is kindly purchasing a buffet to accompany our monthly Boston Lisp meeting.
Anyone who attends is welcome to partake.
&lt;/p&gt;&lt;p align="justify"&gt;
We appreciate it if you let us know you're coming,
and what food taboos you have,
so that we can order the correct amount and kind of food.
Tell us by sending email to
boston-lisp-meeting-register at common-lisp.net.
We won't send any acknowledgement unless requested;
importantly, we'll keep your identity and address confidential
and won't communicate any such information to anyone, not even to our sponsors.
&lt;/p&gt;&lt;a name="SECTION_5"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;5 More about the Meeting&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
The previous Boston Lisp Meeting on
Thursday October 29th 2009 had about 30 participants.
&lt;b&gt;Daniel Herring&lt;/b&gt; spoke about &lt;b&gt;LibCL&lt;/b&gt; and
&lt;b&gt;Alex Plotnick&lt;/b&gt; about &lt;b&gt;CLWEB&lt;/b&gt;.
&lt;a href="http://fare.livejournal.com/148335.html"&gt;http://fare.livejournal.com/148335.html&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
We're always looking for more speakers.
The call for speakers and all the other details are at:
&lt;a href="http://fare.livejournal.com/120393.html"&gt;http://fare.livejournal.com/120393.html&lt;/a&gt;
Volunteers to give Lightning Talks are also sought.
&lt;a href="http://fare.livejournal.com/143723.html"&gt;http://fare.livejournal.com/143723.html&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
For more information, see our web site &lt;a href="http://boston-lisp.org/"&gt;http://boston-lisp.org/&lt;/a&gt;
For posts related to the Boston Lisp meetings in general, follow this link:
&lt;a href="http://fare.livejournal.com/tag/boston-lisp-meeting"&gt;http://fare.livejournal.com/tag/boston-lisp-meeting&lt;/a&gt;
or subscribe to our RSS feed:
&lt;a href="http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting"&gt;http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Please forward this information to people you think would be interested.
Please accept my apologies for your receiving this message multiple times.
My apologies if this announce gets posted to a list where it shouldn't,
or fails to get posted to a list where it should.
Feedback welcome by private email reply to fare at tunes.org.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:149264</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/149264.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=149264"/>
    <title>Software Irresponsibility</title>
    <published>2009-11-20T14:05:02Z</published>
    <updated>2009-11-30T12:33:11Z</updated>
    <category term="software"/>
    <category term="responsibility"/>
    <category term="lisp"/>
    <category term="xcvb"/>
    <category term="asdf"/>
    <category term="en"/>
    <content type="html">&lt;p align="justify"&gt;
In the way of achieving a healthy software development environment,
a lot of projects fall in one of these two DON'Ts:
irresponsibility and territoriality.
Irresponsibility is when there is no one in charge
of making things right (with respect to a whole category of problems).
Territoriality is when there is someone in charge,
and he won't let anyone else touch the code without him.
They may sound opposite to one another, but often
irresponsibility is a result of territoriality, where
the person in charge just isn't interested in the kind of problem
you're experiencing, and so any consideration for such problems
gets disregarded in favor of whatever fits the interests of the maintainer.
&lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;
&lt;p align="justify"&gt;
As a notorious example of irresponsible software design,
I will cite PHP, whose maintainer has repeatedly claimed
he was never interested in designing a good programming language.
It shows.
But I'm sure you'll find plenty of familiar examples
in your own experience,
from the irresponsive provider of some proprietary software
you've been locked into using,
to maybe someone from some other department of your company
that you've had to deal with,
and perhaps even to yourself with respect to your own users.
&lt;/p&gt;&lt;p align="justify"&gt;
Of course, it is always possible to start a new project
to replace the software you're dissatisfied with.
But the costs associated to such endeavour are often huge.
You will have to reimplement not just the parts
that the replaced software did wrong,
but also the parts it did right.
While by assumption you can clearly see parts of the design that are wrong
and do better with respect to those parts, you may be lacking
the proficiency, time and interest to do as well on these other parts.
Last but not least, the community around the original software,
that made it valuable, will not switch to the new one for merely small gains,
and the transition from the old system to the new system
may impose demanding constraints of backwards compatibility.
&lt;/p&gt;&lt;p align="justify"&gt;
Free Software can drastically reduce the cost of starting a new project,
by allowing you to fork the existing code base, copy large chunks of it,
or at the very least read the code of what you may have to be compatible with.
It does not make the cost go down to zero, however.
There again, cruft that made the original software bad enough
that you felt like changing it
will be a heavy burden upon you if you keep it,
and a huge setback to reimplement if you decide to throw it away.
And even in the world of free software, some licenses can incur
a higher cost to forking than others: for instance,
licenses designed to be incompatible with other licenses,
licences that force you to distribute the code as source,
that prevent you from making any adaptation and keep the name,
or otherwise put hurdles in the way of forkers.
&lt;/p&gt;&lt;p align="justify"&gt;
In the world of Common Lisp, an interesting case
of not-so-responsible software is
&lt;a href="http://www.cliki.net/ASDF"&gt;ASDF&lt;/a&gt;.
Some of you might be tempted to sneer,
is he going to blame the problem with ASDF on
the original author who is long gone,
and the current maintainer who isn't committing enough energy
and availability to making the project go forward?
No, not at all.
Dan Barlow actually did a great job while he was there,
and if no one is stepping up to offer more than Gary King provides,
it's certainly not Gary who is to blame;
he is getting blatant bugs fixed and accepting consensual patches,
and at this point forking would be trivial to fork the git repo
if anyone were dissatisfied with Gary's performance.
Rather, I'll argue that any problem with ASDF is a symptom of the way
responsibilities are distributed with respect to its update,
and propose a small technical change that can hopefully improve things a lot.
&lt;/p&gt;&lt;p align="justify"&gt;
When Dan Barlow wrote ASDF in 2001, he only wanted a better
semi-portable CL build system that he could use
on top of SBCL for his own projects,
something that would be more declarative
than the previous best alternative MK:DEFSYSTEM,
and would only need to support modern ANSI CL implementations
not old forgotten Lisp variants.
In developing ASDF, he loosely followed the better design principles
once proposed by Kent Pitman for an extensible CL build system.
In all those objectives, ASDF was a tremendous success,
and CL users should all be grateful to Dan was his achievement.
However, as usual the problem lies with issues he didn't try to tackle.
&lt;/p&gt;&lt;p align="justify"&gt;
Problems with ASDF include
the painful way you have to configure it,
deficient support for
&lt;a href="https://bugs.launchpad.net/asdf/+bug/479470"&gt;documentation&lt;/a&gt;
or &lt;a href="https://bugs.launchpad.net/asdf/+bug/479478"&gt;testing&lt;/a&gt;,
broken support for conditional compilation,
missing support for generated files,
its weird TRAVERSE algorithm,
etc.
Unlike the issue of
&lt;a href="http://common-lisp.net/project/xcvb/doc/ilc09-xcvb-paper.pdf"&gt;deterministic incremental compilation&lt;/a&gt;
that prompted me to start XCVB,
none of the above issues is unsolvable in itself within ASDF.
But the constraints within which ASDF is developed make it hard to solve them.
Happily, some of these constraints can be removed with a little bit of hackery.
&lt;/p&gt;&lt;p align="justify"&gt;
Most importantly, ASDF has a distribution bootstrap problem:
it specifies how to load other systems, but
nothing specifies how ASDF itself is loaded into your system.
That problem is left to whoever writes the Lisp implementation,
distributes the Lisp package, or maintains a larger project
within which ASDF is used.
And in the world of Common Lisp, there are tens of different implementations,
many of them packaged in various ways.
To make the problem tractable, ASDF follows the constraint that it
comes as a single file that may be loaded independently of its location,
and doesn't depend on any third party library beside what is included
by each supported implementation.
&lt;/p&gt;&lt;p align="justify"&gt;
This means that the provider of libraries that use ASDF
must rely on the least common denominator of ASDF features,
unless he wants to force his users to make sure they upgrade their ASDF.
Upgrading the current ASDF could conceivably be easy, but is actually hard,
because of the
&lt;a href="https://bugs.launchpad.net/asdf/+bug/485687"&gt;inability to hot-upgrade a loaded ASDF&lt;/a&gt;.
It is still possible to remove an old ASDF and replace it,
and XCVB does it in an ugly way
(see how xcvb/no-asdf deletes the ASDF package and anything that uses it);
however, files compiled against the old ASDF may not work with the new one
and vice versa
(I've had "interesting" issues that way
while using xcvb-master in slightly different setups).
&lt;/p&gt;&lt;p align="justify"&gt;
This inability to upgrade further
makes the pre-packaging of a Lisp implementation
with a given version ASDF a bit of a damned if you do, damned if you don't
proposition to Lisp implementers and distributors.
Happily, implementers have the option of only providing ASDF when REQUIRE'd,
and this is the preferred way for users to specify they want to use ASDF,
when it is available.
Distributors may not have this option inasmuch as
there is no standard mechanism to hook into an implementation's REQUIRE.
An example of a failed attempt at distributing Common Lisp with ASDF is
common-lisp-controller. It tried to provide a way to make sure there is always
a configured ASDF, but their solution only works if everyone uses only
debian or another supported OS distribution,
and only if the debian maintainers keep up with all
the common-lisp software (implementations and libraries)
that one may want to use;
two hypotheses that have been disproved in practice
with respect to the needs of many users.
&lt;/p&gt;&lt;p align="justify"&gt;
To step back to the problem of responsibility,
the current constraints of ASDF are such that a consistent upgrade of ASDF
requires action on the part of tens of people, each in his own territory:
ASDF contributors, Lisp implementers, package distributors.
If only one hacker alone decides to upgrade ASDF,
he has to incur the cost of the associated work of modifying ASDF
and the risk that this will introduce incompatibilities,
for little overall progress in terms of what users may rely upon
unless he convinces tens of other people also do the same.
Thus, the costs of adoption are high, the benefits of development are low,
development is slow, and a cycle of stagnation continues.
&lt;/p&gt;&lt;p align="justify"&gt;
If someone cares about the future of ASDF, I recommend they should address
the upgradability bug, which will itself unlock a big hurdle on the way
of further evolution of ASDF. Note that this upgradability includes both
the technical ability to load a new ASDF on top of an old one, but probably
also the proper configuration of ASDF, to load systems from a series of
configured paths declared in user and system preference files.
&lt;/p&gt;&lt;p align="justify"&gt;
Personally, I'd rather work on XCVB, and invite
people interested in build systems to work on it instead of ASDF.
But if XCVB is to prevail, it may as well prevail
against the best ASDF that ASDF can be.
&lt;/p&gt;&lt;p align="justify"&gt;
XCVB tries to avoid all the problems of ASDF by stepping back
from the assumption that everything happens
in a one Lisp world that has already been setup.
Instead, XCVB will manage many Lisp worlds that it will help you setup.
It doesn't live inside your Lisp image, and thus doesn't depend
on Lisp implementers or distributors to provide it for you;
it can therefore evolve fast without any issue due to slow distribution.
It is also liberated from the constraint ASDF has
of itself having no dependencies,
because these dependencies would both make bootstrap more difficult
and interfere with other versions of same software
as part of the software being built.
XCVB thus reuses plenty of libraries and is richer in features,
and will use even more libraries in the future.
All this in addition to its original essential distinguishing feature
of providing deterministic incremental compilation.
&lt;/p&gt;&lt;p align="justify"&gt;
XCVB isn't complete yet, but I believe that on supported implementations
(currently only SBCL, CCL, CLISP, but I could add more on demand,
or you could do it yourself), it is already better than ASDF.
If you care for CL build systems, please fix ASDF;
but please give XCVB a try, too.
&lt;/p&gt;&lt;p align="justify"&gt;
Even if you don't care for CL build systems,
organize your software developments so that
every upgrade step can be done by the single maintainer of a single project,
without requiring the coordination
between many people in many different projects.
&lt;/p&gt;&lt;p align="justify"&gt;
This lesson should be particularly dear to those who dream of
making a Standard for Lisp, Scheme, Javascript, Java
or any other language or piece of software:
if you need to agree on something that will require
future coordination between plenty of people,
it is almost sure to fail to evolve fast enough to remain relevant,
even though one or two iterations might make it live
(see e.g. R6RS and its current attempted successor).
Instead, you should offer software that already runs
with a free software reference implementation that
others can trivially adapt to their systems if needed
(also in Scheme, compare the SRFI process).
After your code has become de facto standard, you might not even care
for it being any kind of de jure standard anymore.
Whereas if there's going to be a de jure standard,
it will be blood and conflict as long as there's anything to disagree about,
and still resentment at the unsatisfying compromise that results.
&lt;/p&gt;&lt;p align="justify"&gt;
The same idea also accounts for
&lt;a href="http://en.wikipedia.org/wiki/Conway%27s_Law"&gt;Conway's Law&lt;/a&gt;:
if you divide your software project between many teams,
each team will build its own code base,
and the structure of the software will end up following
the structure of the teams that build it.
Parts of the software where the ownership is not clearly assigned
but where authority is divided will be the scene for
conflict, slow evolution, bad design (if design at all), etc.
Vertical disintegration, where independent teams
manage layers of the software and its life-cycle,
will in particular lead to a multiplication of such dysfunctional interfaces
between entrenched overlapping code bases
the global architecture of which cannot be refactored.
&lt;/p&gt;&lt;p align="justify"&gt;
Happily, solving the problem of irresponsible software
is much easier than solving the problem of
&lt;a href="http://unqualified-reservations.blogspot.com/2009/01/gentle-introduction-to-unqualified_29.html"&gt;irresponsible government&lt;/a&gt;.
&lt;/p&gt;&lt;p align="justify"&gt;
PS: I've since accepted co-maintainership of ASDF.
If problems persist beyond March 2010, blame me.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:149005</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/149005.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=149005"/>
    <title>You're invited to my Birthday Party!</title>
    <published>2009-11-14T21:40:40Z</published>
    <updated>2009-11-14T21:41:34Z</updated>
    <category term="birthday"/>
    <category term="boston"/>
    <category term="party"/>
    <category term="en"/>
    <content type="html">&lt;p&gt;
Next Saturday November 21st 2009, from 2pm to 10pm, I'll have a late house-warming party and an early Birthday party, in Cambridge Massachusetts, and you are cordially invited.
&lt;/p&gt;&lt;p&gt;
112 Thorndike St #2, Cambridge MA 02414&lt;br /&gt;
Near to Lechmere Station (Green line) and
not far from Kendall Sq/MIT (Red line).&lt;br /&gt;
Phone: 617 595 2601
&lt;/p&gt;&lt;p&gt;
Sorry for a late notice.
Please RSVP with number of guests.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:148888</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/148888.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=148888"/>
    <title>Stolen Concept of the day: "Social Contract"</title>
    <published>2009-11-14T07:14:51Z</published>
    <updated>2009-11-14T14:14:58Z</updated>
    <category term="natural law"/>
    <category term="social contract"/>
    <category term="socialism"/>
    <category term="epistemology"/>
    <category term="en"/>
    <content type="html">&lt;p&gt;
"Social contract" theorists try to replace universal natural law with arbitrary social constructs, but start by &lt;a href="http://www.nathanielbranden.com/catalog/articles_essays/the_stolen_concept.html"&gt;stealing the very concept&lt;/a&gt; of contract from the framework of natural law that they are claiming to do away with.
&lt;/p&gt;&lt;p&gt;
If there is no prior, higher, Law, then no contract whatsoever, "social" or else, is binding. Anything goes, contracts are void at best, fraud at worst, but fraud, theft, rape and murder are just as good as anything else, so who cares?
&lt;/p&gt;&lt;p&gt;
If there is a prior, higher, Law, that says that contracts are binding, and provides for enforcement of such contracts, then who needs a social contract? There already is a Law. Moreover, an alleged "Social contract" can neither contradict nor override this Natural Law without which it is void.
&lt;/p&gt;&lt;p&gt;
In either case, "Social Contract" theorists are crooks, and their theories are just another fraud to justify the arbitrary power of the mighty over the weak as if it had been somehow consented.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:148642</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/148642.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=148642"/>
    <title>Free as in Beer</title>
    <published>2009-11-09T12:23:22Z</published>
    <updated>2009-11-09T12:52:16Z</updated>
    <category term="joke"/>
    <category term="free"/>
    <category term="robot"/>
    <category term="socialism"/>
    <category term="en"/>
    <content type="html">&lt;p&gt;
In the country where I come from, health care is free.
&lt;/p&gt;&lt;p&gt;
Is it?
&lt;/p&gt;&lt;p&gt;
Yes: doctors and nurses work for nothing.
Their job is so deeply satisfying to them
that they don't need either food or sleep, not even a bath.
They are born ready-to-work with medical omniscience
and so don't need years of expensive parenting and training.
Moreover, hospitals and medical equipment grow naturally
in otherwise infertile land.
&lt;/p&gt;&lt;p&gt;
Oh my! Nuclear-powered robots have taken over your country and control all resources!
&lt;/p&gt;&lt;p&gt;
Did I tell you about the free education?
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:148335</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/148335.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=148335"/>
    <title>Boston Lisp Meeting: Thursday 2009-10-29 Alex Plotnick, Daniel Herring</title>
    <published>2009-10-23T07:31:41Z</published>
    <updated>2009-10-25T14:23:28Z</updated>
    <category term="lisp"/>
    <category term="lightning-talk"/>
    <category term="meeting"/>
    <category term="boston"/>
    <category term="boston-lisp-meeting"/>
    <category term="en"/>
    <content type="html">&lt;p align="justify"&gt;
A Boston Lisp Meeting will take place
on Thursday, October 29th 2009 at 1800 at MIT 34-401B.
&lt;em&gt;&lt;b&gt;Alex Plotnick&lt;/b&gt;&lt;/em&gt; with talk about &lt;em&gt;CLWEB&lt;/em&gt;,
and &lt;em&gt;&lt;b&gt;Daniel Herring&lt;/b&gt;&lt;/em&gt;
will give a short presentation of &lt;em&gt;LibCL&lt;/em&gt;.
&lt;/p&gt;&lt;p align="justify"&gt;
Additionally, we will have two 5-minute Lightning Talks,
each followed by 2-minute Q&amp;#38;A. Speakers to be announced.
&lt;/p&gt;&lt;p align="justify"&gt;
Also, there will be a buffet offered by ITA Software.
Registration is not necessary but appreciated.
See details below.
&lt;/p&gt;&lt;a name="SECTION_1"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;1 Alex Plotnick on CLWEB&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
&lt;b&gt;CLWEB&lt;/b&gt; is a literate programming system for Common Lisp
in the tradition of Knuth's WEB and CWEB systems.
These systems are based on the idea that
there are two audiences for every program &amp;mdash;
the machine on the one hand and human programmers on the other &amp;mdash;
and that these two audiences have very different requirements for
understanding a given program. They take as input a document
containing a mixture of source code, TeX, and WEB control codes,
and output both a program suitable for compilation or evaluation,
and also a TeX file that contains a pretty-printed version of the
source code along with accompanying commentary. The former is for
the machine, while the latter is ready for typesetting, printing,
and reading by a human. CLWEB is of course itself a literate program,
written in itself, using (mostly) portable Common Lisp as the source
language.
&lt;/p&gt;&lt;p align="justify"&gt;
&lt;a href="http://www.cs.brandeis.edu/~plotnick/clweb/"&gt;http://www.cs.brandeis.edu/~plotnick/clweb/&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Alex Plotnick is a graduate student in computer science at Brandeis
University. His interests include natural and computer language
semantics, computational linguistics, and philosophy of language.
&lt;/p&gt;&lt;a name="SECTION_2"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;2 Daniel Herring on LibCL&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
&lt;b&gt;LibCL&lt;/b&gt;
is a collection of Libraries for Common Lisp.
CL has a wide range of libraries available,
yet there are persistent rumors that CL has no libraries,
or that they're hard to find and install.
LibCL was created to tackle these issues
by creating a distribution bundling many libraries
into a single download.
This presentation will focus on the dream, current progress,
and issues which have arisen.
&lt;/p&gt;&lt;p align="justify"&gt;
Daniel Herring works as an associate staff at MIT Lincoln Laboratory. His academic interests center around control theory and walking robotics; practical issues such as computer algebra brought him to lisp.
&lt;/p&gt;&lt;p align="justify"&gt;
&lt;a href="http://libcl.com/"&gt;http://libcl.com/&lt;/a&gt;
&lt;/p&gt;
&lt;a name="SECTION_3"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;3 Lightning Talks&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
At every meeting, before the main talk,
there are two slots for strictly timed 5-minute "Lightning Talks"
followed by 2 minutes for questions and answers.
&lt;/p&gt;&lt;p align="justify"&gt;
The slots for next meeting are still open.
Step up and come talk about your pet project!
Contact me at fare at tunes.org.
&lt;/p&gt;&lt;a name="SECTION_4"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;4 Time and Location&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
&lt;b&gt;The Lisp Meeting will take place on
Thursday October 29th 2009 at 1800 (6pm)
at MIT 34-401B.&lt;/b&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Note that this is not the usual day of the week.
&lt;/p&gt;&lt;p align="justify"&gt;
As the numbers indicate, the room is in Building 34, on the 4th floor.
This is the usual location, on 50 Vassar Street, Cambridge.
&lt;/p&gt;&lt;p align="justify"&gt;
MIT map: &lt;a href="http://whereis.mit.edu/bin/map?selection=34"&gt;http://whereis.mit.edu/bin/map?selection=34&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Google map: &lt;a href="http://maps.google.com/maps?q=50+Vassar+St,+Cambridge,+MA+02139,+USA"&gt;http://maps.google.com/maps?q=50+Vassar+St,+Cambridge,+MA+02139,+USA&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Many thanks go to Alexey Radul for arranging for the room, and to MIT for welcoming us. 
&lt;/p&gt;&lt;a name="SECTION_5"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;5 Dinner&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
&lt;a href="http://itasoftware.com/careers/"&gt;ITA Software&lt;/a&gt;
a fine employer of Lisp hackers (disclaimer: I work there),
is kindly purchasing a buffet to accompany our monthly Boston Lisp meeting.
Anyone who attends is welcome to partake.
&lt;/p&gt;&lt;p align="justify"&gt;
We appreciate it if you let us know you're coming,
and what food taboos you have,
so that we can order the correct amount and kind of food.
Tell us by sending email to
boston-lisp-meeting-register at common-lisp.net.
We won't send any acknowledgement unless requested;
importantly, we'll keep your identity and address confidential
and won't communicate any such information to anyone, not even to our sponsors.
&lt;/p&gt;&lt;a name="SECTION_6"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;6 More about the Meeting&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
The previous Boston Lisp Meeting on
Wednesday, September 30th 2009 had about 20-odd participants.
&lt;b&gt;Christine Flood&lt;/b&gt; spoke about
&lt;b&gt;Project Fortress&lt;/b&gt;.
&lt;/p&gt;&lt;p align="justify"&gt;
We're always looking for more speakers.
The call for speakers and all the other details are at:
&lt;a href="http://fare.livejournal.com/120393.html"&gt;http://fare.livejournal.com/120393.html&lt;/a&gt;
Volunteers to give Lightning Talks are also sought.
&lt;a href="http://fare.livejournal.com/143723.html"&gt;http://fare.livejournal.com/143723.html&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
For more information, see our web site &lt;a href="http://boston-lisp.org/"&gt;http://boston-lisp.org/&lt;/a&gt;
For posts related to the Boston Lisp meetings in general, follow this link:
&lt;a href="http://fare.livejournal.com/tag/boston-lisp-meeting"&gt;http://fare.livejournal.com/tag/boston-lisp-meeting&lt;/a&gt;
or subscribe to our RSS feed:
&lt;a href="http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting"&gt;http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Please forward this information to people you think would be interested.
Please accept my apologies for your receiving this message multiple times.
My apologies if this announce gets posted to a list where it shouldn't,
or fails to get posted to a list where it should.
Feedback welcome by private email reply to fare at tunes.org.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:148185</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/148185.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=148185"/>
    <title>Of threads, forks and PCLSRing in high-level languages</title>
    <published>2009-10-12T13:16:20Z</published>
    <updated>2009-11-17T17:08:33Z</updated>
    <category term="lisp"/>
    <category term="tao of programming"/>
    <category term="concurrency"/>
    <category term="pclsring"/>
    <category term="en"/>
    <content type="html">&lt;p align="justify"&gt;
Amongst the little Common Lisp projects I have been working on at ITA,
that we have
&lt;a href="http://common-lisp.net/project/qitab/"&gt;published as free software&lt;/a&gt;,
there is
&lt;a href="http://common-lisp.net/gitweb?p=projects/qitab/single-threaded-ccl.git"&gt;single-threaded-ccl&lt;/a&gt;,
a small modification
to &lt;a href="http://www.clozure.com/clozurecl.html"&gt;Clozure CL&lt;/a&gt; (CCL)
that allows it to start and run in a single thread.
Why is that hack necessary at all?
Because I'd like to do useful computations in forks
(including but not limited to parallel compilation with
&lt;a href="http://common-lisp.net/gitweb?p=projects/qitab/poiu.git"&gt;POIU&lt;/a&gt; or
&lt;a href="http://common-lisp.net/project/xcvb/"&gt;XCVB&lt;/a&gt; or
robust Erlang-style concurrency), but
(a) the upstream CCL insists on always spawning ancillary threads
during system initialization to manage interactive I/O, and
(b) threads pretty much guarantee that most attempts to compute in a fork
will result in massive instability.
I'll cover the first issue quickly,
but the second issue is what I will develop.
&lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;p align="justify"&gt;
Unhappily regarding the first issue,
Gary Byers, the top CCL author and maintainer,
has expressed his disinterest in providing an option
for single-threaded startup in the upstream CCL,
even though I offered that I could do the porting and maintaining myself.
Note that such supported interface would probably involve more
than my small hack: my hack sacrifices some interactive features,
meaning that you have to manually call &lt;tt&gt;finish-output&lt;/tt&gt;
to flush your output stream buffers
before you may expect the user to see what you printed
(which you should do to be standard-compliant anyway),
and to that you need to manually poll for any Ctrl-C interrupts
to have them processed.
Yet supporting the option wouldn't be hard,
as long as you don't care too much for interrupts:
1- you'd have to refactor and clean up the startup process,
which would be a good thing anyway, and
2- you'd have to do the right thing with streams,
which is just a special variable away (like Perl's &lt;tt&gt;$|&lt;/tt&gt;),
though it would probably be better to keep
an &lt;tt&gt;interactive?&lt;/tt&gt; slot in the stream class
(possibly initialized by default from such special variable).
Now, getting interrupts right may be tricky
(and may involve some of the PCLSRing issues discussed below)
but I'm sure the target audience of the single-threaded-ccl,
who write system software,
would be quite happy to live with that restriction.
There is little to add to this issue,
so I'll say no more.
&lt;/p&gt;&lt;p align="justify"&gt;
The second issue is more interesting.
The conclusion is that
&lt;b&gt;if you have threads when you fork, the only safe things to do
are pretty much to either call &lt;tt&gt;execve(2)&lt;/tt&gt;
or to dump a &lt;tt&gt;core(5)&lt;/tt&gt;&lt;/b&gt;,
unless you go through excruciating pains to otherwise make it work.
These excruciating pains are what I'd like to walk you through.
&lt;/p&gt;&lt;p align="justify"&gt;
The reason that fork doesn't marry well with threads is that
when you fork, the child process will have only one active thread
(a copy of the one that forked)
in an address space that is a copy (on write by either party)
of the memory of the parent process;
therefore, all the data structures
that are being shared by the current thread with other threads
may be in whatever transient state these threads
(not to speak about signal handlers!)
may have been putting them
at the moment the kernel copied the address space
(which itself may or may not be atomic when multiprocessors are involved).
The consequence is that unless the forking thread took care to hold a lock
on each and every single shared data-structure
that the child might possibly need to use
(which might involve properly blocking signals),
any of these data-structures may have been made available to the child
in an unusable state that is completely unfixable
(including it possibly being unsafe to attempt to reclaim associated resources).
&lt;/p&gt;&lt;p align="justify"&gt;
Thus, unless you can solve this difficult concurrency problem,
if you use fork and want to continue useful computations in the child,
you must eschew the problem and either fork
&lt;em&gt;before&lt;/em&gt; any other thread is started,
or &lt;em&gt;after&lt;/em&gt; all other threads have exited cleanly
&amp;mdash; and you cannot just kill threads,
for the same reason that they might be in the middle of modifying
shared data-structures at the time you would shoot them down.
Alternatively, you might not care at all about continuing any computation
in the child process with any of the datastructures
that these other threads may be accessing:
you might be about to &lt;tt&gt;execve(2)&lt;/tt&gt; a new program
without the need for any of those datastructures to setup that call,
or you might be about to dump a core in the middle of the
(possibly suspect) computation for purely analytic purposes
without the need to resume computation afterwards.
Or you have indeed protected the few datastructures you care for
with appropriate locks, and might not care about the minefield
in the rest of your address space because you know
that neither your child process nor any of the libraries that it uses
will ever roam in that minefield (not even through a signal handler)
nor need to reclaim the memory resources.
&lt;/p&gt;&lt;p align="justify"&gt;
But what if you want to actually solve the difficult problem?
What if you want to achieve multithreaded
&lt;a href="http://fare.tunes.org/tmp/emergent/pclsr.htm"&gt;PCLSRing&lt;/a&gt;
and synchronize all your threads in a state that is stable enough
for the child to resume computations?
The problem is solvable in theory
(indeed was a topic of my PhD thesis),
and there even exist tools to solve it in practice,
though we may soon find these tools to be lacking.
&lt;/p&gt;&lt;p align="justify"&gt;
Speaking of tools, some smart ass may point you at an interface function
meant to help you solve the problem somewhat modularly: &lt;a href="http://www.opengroup.org/onlinepubs/009695399/functions/pthread_atfork.html"&gt;pthread_atfork&lt;/a&gt;.
But the existence of this function doesn't guarantee
that it will be used properly,
or even that it is possible to use it properly.
Indeed, you can &lt;tt&gt;grep(1)&lt;/tt&gt; in vain for calls to it in most libraries,
including allegedly thread-safe libraries
and downright multithreaded libraries;
you'll find that few if any use atfork at all.
But don't blame the library authors too fast
before you consider the cost/benefit analysis
of even trying to use this interface properly.
&lt;/p&gt;&lt;p align="justify"&gt;
First problem is, when you attempt to grab all those locks you need,
you not only have to track down what all those locks are,
you also have to order them properly. Indeed,
if one thread tries to grab lock A then lock B,
while another thread tries to grab lock B then lock A,
then you are due for a deadlock;
and even if you modify your code so the second thread
will back out of B after failing to get A before it tries again,
then for all your efforts
you may avoid the deadlock but still have a livelock.
The only safe and live solution is there should be
a clear dependency (partial) order between locks, and that
you should never try to grab a higher-level lock
while holding a lower-level lock.
Now, if your atfork is trying to grab all the locks,
then you have to define a total order that is compatible
with the previous partial order, and
if two threads attempt to each compute such a total order,
they better agree on the topmost element for whichever
common subset of locks they are trying to grab.
&lt;/p&gt;&lt;p align="justify"&gt;
In the case of simple low-level C libraries
without dynamic datastructures,
getting such an order should be straightforward:
each library would have a global lock
and only call lower-level libraries,
so you'd grab the higher level library lock first,
then the lower level library lock;
hopefully, the way your linker works, it calls initializers
for lower-level libraries first, and the atfork handlers
will be registered in the correct order.
But then again, are you sure your library writers got this right?
Considering how little the feature is used, it doesn't encourage
anyone to bother trying and debugging a non-deterministic
concurrency issue.
And because you don't expect others to bother,
why bother yourself, when your work will be in vain
unless they do their part of the job?
In absence of an enforcement mechanism these things just don't happen.
Since there is no automated such mechanism,
and the social incentives are lacking,
you better be ready to go through the source code
to ensure things are done right when you need them.
And when the code is proprietary, you better have a great relation
with the authors to get what you need, and the authors better be
just as madly clever as you are to get it to work.
&lt;/p&gt;&lt;p align="justify"&gt;
But we were talking about the simple case of low-level libraries
with only one or a few static global locks each.
Now consider what happens if you're writing a higher-level library
that has to take into account a dynamic set of locks, or worse
where some user-provided callbacks or other higher-order functions
may be called while holding a lock, that may themselves cause
operations requiring lower locks to be called.
And what if these callbacks even potentially cause
the dependency order between the locks of various libraries
to not be known statically at compile-time,
or worse to change with phases of your program?
Remember that before this ordering issue kicked in,
we were assuming that you could trace the set
of all the resources involved in your high-level computation.
To say the least, it all requires that you should possess
a jolly good understanding of all concurrency issues throughout the code.
Worse even, you will have to maintain that deep understanding
as your code evolves, and as the libraries you use evolve.
If you are writing a small part of some biggish software involving
tens of developers past, present and future,
your chance of getting this right are pretty thin.
&lt;/p&gt;&lt;p align="justify"&gt;
It would be nice if some automatic tool
helped you get it right by construction,
by tracking all the resources in use and their dependency order;
but such tool doesn't exist, and even if it did,
it would only be useful if it were used on each and every module
that will run in the same address space as your module.
There again, we're far from it.
Does your favorite high-level programming language implementation
properly use atfork in its runtime?
Does it allow you to declare resources in a way that allows
them to be automatically tracked down with their dependency order
always well-established?
Does it provide hooks for your application
to register its own atfork handlers?
I bet it doesn't.
But then again, I may be
&lt;a href="http://code.google.com/p/python-atfork/"&gt;proven wrong&lt;/a&gt;!
And if enough people start using it, that might build enough pressure
to get all these libraries to properly use it.
&lt;/p&gt;&lt;p align="justify"&gt;
However, holding locks is only one part of the problem.
Then comes the cleanup of the resources in the child process.
If the fork is a one-off for a special-purpose operation,
or even an n-off for a small-enough bounded number n,
you may not actually care;
you may tolerate that a large part of your address space
be occupied with unused and unusable resources
reserved for the use of now non-existent threads,
that these resources will never be used, may bitrot quietly,
and hopefully will quickly end up being swapped out.
But if spawning threads and forking are both part
of your normal computation model,
you will find that after a few iterations,
the descendent's memory will be all clogged with unfreed resources.
Actually, address space is only one problem, and
other resources may leak and run out,
like file descriptors and other operating system handles and capabilities;
Finally, not being able to track down these leaking resources
and get rid of them might not just be a performance issue,
but also be a security issue:
what if you fork to run unsafe libraries, in which a malicious cracker
can now inject code that captures passwords and other sensitive information?
&lt;/p&gt;&lt;p align="justify"&gt;
Once again, when you deal with simple low-level libraries,
the problem is relatively straightforward:
in your cleanup handler, just reset your global datastructures
to remove any trace of datastructures used by other threads;
then be sure to restart any required ancillary thread
before the next time it is used,
informing it about any datastructure you kept for the current thread (if any).
If you were maintaining a stateful session with a server,
you may have to reinitialize a new session,
any existing transaction being aborted
as if a "normal" communication error had happened
(and you handle these cases, don't you?).
Then again, for reasons already discussed,
just because it is straightforward doesn't mean
it has been provided to you;
after all, it is tedious code to maintain,
code for which there is no expected user.
&lt;/p&gt;&lt;p align="justify"&gt;
Now once you try to generalize the procedure
to arbitrary higher levels of abstractions,
including whichever layers of application reside
&lt;em&gt;above&lt;/em&gt; the language or module you are trying to write,
then you realize that to fully and properly solve
the problem of forking with threads,
you have to fully solve the reputedly difficult problem
of properly interrupting and killing a thread;
indeed what you are trying to do is precisely cleaning up resources
from threads that were interrupted at a random moment in some parent
but were never otherwise properly interred.
&lt;/p&gt;&lt;p align="justify"&gt;
And there the difficulty lies in that while you may have
a proper understanding of your code,
and do what it takes to correctly preserve its invariants
and not break any of the invariants of the lower level layers
that you rely upon,
you cannot know what invariants matter to the application layers above you:
they could be just anything.
You just can't do what it takes when you can't know what it takes,
and some applications will want
something different and opposite from what want other applications.
That is why language implementers can with a lot of work
achieve enough PCLSRing to synchronize every thread in a stable state
with respect to say memory allocation invariants,
so that garbage collection can be successfully undertaken;
but they can't make it so that any thread (much less all threads)
will be in a stable enough state as to be safely killed
irregardless of what the application invariants are.
Surely you could easily kill the thread,
unlink its stack from the GC roots,
and reclaim its storage.
But little good would that do if that meant
your application was then stuck because that thread was in the middle
of some high-level operation, and no one will be able to cleanup
after this half-done operation when the thread is dead.
&lt;/p&gt;&lt;p align="justify"&gt;
Was the interrupted thread in the middle of transfering money from
account A to account B, with the transferred amount being currently
included in both (respectively neither) account?
You better not interrupt there, or money will have appeared
(respectively disappeared) from your accounting system,
presumably a bad thing.
Hopefully, if the thread was in the middle of any transaction,
it will be holding some kind of lock, and you will only be able
to interrupt it when the lock is released.
Now the thread may be constantly in the middle of such transactions,
and the odds of interrupting it at the right moment may be slim;
so you can't just poll for the thread to be in a stable state,
you need the interruption to be queued and processed
as soon as the thread exits its atomic operation and reaches a stable state.
Except that what is stable to one upper level of the code
may not be stable enough for one yet higher level of the code,
so you want to queue your interruption at the highest level that matters.
Finally, the thread might not naturally reach a stable state
in any reasonable, predictable or otherwise satisfactory amount of time
if left to its own device, especially where optimizations may reorder
operations and skip any stable state.
Therefore you may have to not just wait for the target thread to stabilize,
but make it enter a special execution mode where it will do its best
to promptly rollback or rollforward its current transaction
and leave the thread in a proper state suitable for interruption.
&lt;/p&gt;&lt;p align="justify"&gt;
And of course, once you've gotten the PCLSRing itself correct,
you still need be able to walk the stable state of the process
and do whatever cleanups and resets are necessary to account for the death
of the threads that you killed.
Tracing garbage collection might do a lot of work for you,
but you may still have to unregister
the deceased activities and their resources
from whichever registries you use
before the GC may be able to do its job.
And the unregistration will probably be different
during a fork's child cleanup from what it is in the parent:
in the parent, you want to do things gracefully,
completing transactions by committing or aborting them,
returning resources to the system and various servers;
in the child,
you want to just forget about those things of which you have a duplicate,
neither commit nor abort transactions
that are the parent's property to complete,
just relinquishing access to those resources
to which you were given an undeserved duplicated handle.
Thus you can't "just" unwind the stack
and play the normal unwind handlers and other finalizers
&amp;mdash; unless the handlers were built in such a way that
they can recognize that you're unwinding in a special "throw it away" mode.
Note that this part is tricky even in the single-threaded case;
the multi-threaded case only compounds it slightly in that
you have to not forget to walk the resources from other threads
to deallocate them,
in addition to those from parts of the current thread's continuation
that are irrelevant to the child.
The part that is really made harder by multithreading is the PCLSRing problem;
the subsequent cleanup is mostly just "normally hard".
&lt;/p&gt;&lt;p align="justify"&gt;
What might do the trick would be an interface for declarative
resource-dependency management in your programming language API.
Did you see one? No? Too bad. Problem is, it might be non-trivial
to implement right, difficult to prove correct statically,
and costly to enforce dynamically.
In low-level languages, things may be simple,
programmers will receive no help whatsoever to get them right.
Higher-level languages might conceivably offer support
to automate these things, but solving the problem in general case
might be quite tricky for language implementers.
With higher-order functions and modules,
establishing a sound concurrency protocol may depend on
clients and servers respecting the mutual contract.
Now can language support is there or can there be
to clearly define and enforce such contract?
Is there significant research in solving that problem?
Not that I know of &amp;mdash;
but I haven't followed recent developments.
Region-based memory management and substructural typing
look like a good trail to follow;
but does it go all the way to PCLSRing?
If you know, please tell me.
&lt;/p&gt;&lt;p align="justify"&gt;
Meanwhile, I'll keep using the usual "solution" &amp;mdash;
let the garbage accumulate, and forget the TUNESy hopes
of a system capable of holistic bookkeeping,
instead manually create a controlled subsystem that does its own bookkeeping
of the things I manually specify as important,
so I may export them from a cluttered system
and reimport them into a fresh one.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:147720</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/147720.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=147720"/>
    <title>One's Own Man</title>
    <published>2009-10-08T05:11:24Z</published>
    <updated>2009-10-08T05:14:28Z</updated>
    <category term="self-help"/>
    <category term="pride"/>
    <category term="happy"/>
    <category term="poverty"/>
    <category term="socialism"/>
    <category term="malawi"/>
    <category term="en"/>
    <content type="html">&lt;p align="justify"&gt;
A few months ago, my friend and former colleague
&lt;a href="http://marcobaringer.com/"&gt;Marco Baringer&lt;/a&gt;
made a presentation of a photo reportage he did in a village
lost in the middle of nowhere in Malawi.
&lt;/p&gt;&lt;p align="justify"&gt;
People were literally dirt poor.
Living a primitive agricultural life
with little access to modernity, education or medical care,
the same tasteless food everyday, a short life expectancy,
high incidence of AIDS, corrupt government
and inefficient bureaucracy, etc.
A wretched life.
&lt;/p&gt;&lt;p align="justify"&gt;
Yet, asked if people were happy, Marco said that yes,
despite their miserable life conditions, and their being conscious
how fickle their lives were and how much richer the rest of the world was,
the Malawi inhabitants displayed genuine smiles and radiated happiness.
And the embodiment of that happiness was his host, who proudly claimed to him
that the food he was serving, he cropped himself on
his own land, and the shack in which he was hosting was his own house
he built himself.
&lt;/p&gt;&lt;p align="justify"&gt;
Happiness and pride in being one's own man, no matter how small.
What a lesson, that the restless hapless destitutes
subsidized into zombiedom by our Welfare States will never learn!
&lt;/p&gt;&lt;p align="justify"&gt;
The worst ignominy of socialists is possibly neither
in the plunder of the productive they enslave,
nor in the aristocratic morgue with which they impose
their reign of good-thinking evil,
but in the total ruination of the lives
of the unproductive they claim to help.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:147676</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/147676.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=147676"/>
    <title>Boston Lisp Meeting: Wednesday 2009-09-30 - Christine Flood on Fortress</title>
    <published>2009-09-25T11:38:17Z</published>
    <updated>2009-09-25T14:34:37Z</updated>
    <category term="lisp"/>
    <category term="lightning-talk"/>
    <category term="meeting"/>
    <category term="boston"/>
    <category term="boston-lisp-meeting"/>
    <category term="en"/>
    <content type="html">&lt;p align="center"&gt;&lt;a href="http://fare.livejournal.com/147676.html"&gt;http://fare.livejournal.com/147676.html&lt;/a&gt;&lt;/p&gt;&lt;p align="justify"&gt;
A Boston Lisp Meeting will take place
on Wednesday, September 30th 2009 at 1800 at NEU WVG 108,
where &lt;b&gt;Christine Flood&lt;/b&gt; will speak about
&lt;b&gt;Project Fortress&lt;/b&gt;.
&lt;/p&gt;&lt;p align="justify"&gt;
Additionally, we will have two 5-minute Lightning Talks,
each followed by 2-minute Q&amp;#38;A. Speakers to be announced.
&lt;/p&gt;&lt;p align="justify"&gt;
Also, there will be a buffet offered by ITA Software.
Registration is not necessary but appreciated.
See details below.
&lt;/p&gt;&lt;a name="SECTION_1"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;1 Christine Flood on Project Fortress&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
&lt;b&gt;Project Fortress&lt;/b&gt;
is a programming language designed at Sun Labs with these fundamental principles:
&lt;/p&gt;&lt;p align="justify"&gt;
What you write on your white board works
(Standard Mathematical Syntax).
Implicit Parallelism
(Let the runtime system exploit the fine grained parallelism in your algorithm).
Languages should be designed from the ground up to grow over time
(A small fixed core with as much of Fortress as possible in Fortress libraries).
&lt;/p&gt;&lt;p align="justify"&gt;
Other features include strong static typing and transactional memory.
&lt;/p&gt;&lt;p align="justify"&gt;
This talk will give you an overview of the language and walk through some examples.
Feel free to check out our open source implementation and language specification at
&lt;a href="http://ProjectFortress.sun.com/"&gt;http://ProjectFortress.sun.com/&lt;/a&gt;.
&lt;/p&gt;&lt;p align="justify"&gt;
&lt;b&gt;Christine Flood&lt;/b&gt; is a research scientist at Sun Microsystems Labs.
She has been working in the field of computer science for 20 years.
Her interests are in programming language design and implementation
particularly garbage collection and parallelism.
She's a former Symbolics/MIT hacker.
&lt;/p&gt;&lt;a name="SECTION_2"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;2 Lightning Talks&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
At every meeting, before the main talk,
there are two slots for strictly timed 5-minute "Lightning Talks"
followed by 2 minutes for questions and answers.
&lt;/p&gt;&lt;p align="justify"&gt;
The slots for next meeting are still open.
Step up and come talk about your pet project!
Contact me at fare at tunes.org.
&lt;/p&gt;&lt;a name="SECTION_3"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;3 Time and Location&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
&lt;b&gt;The Lisp Meeting will take place on
Wednesday September 30th 2009 at 1800 (6pm)
at NEU WVG 108.&lt;/b&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
This is neither the usual day of the week, nor the usual location.
This is at
Northeastern University,
in the West Village G residence building which is right &lt;em&gt;behind&lt;/em&gt;
the Computer Science building WVH
(see &lt;a href="http://tmp.barzilay.org/wvh.jpg"&gt;this picture&lt;/a&gt;)
when you arrive from the T
on Huntington Avenue
(Green E line, stop at Northeastern Station,
or possibly Museum of Fine Arts;
you can also walk from Ruggles on the Orange line).
As the number indicates, the room is on the first floor.
&lt;/p&gt;&lt;p align="justify"&gt;
Northeastern maps and direction:
&lt;a href="http://www.northeastern.edu/campusmap/maps.html"&gt;http://www.northeastern.edu/campusmap/maps.html&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Many thanks go to Eli Barzilay for arranging for the room,
and to Northeastern University for welcoming us.
&lt;/p&gt;&lt;a name="SECTION_4"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;4 Dinner&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
&lt;a href="http://itasoftware.com/careers/"&gt;ITA Software&lt;/a&gt;
a fine employer of Lisp hackers (disclaimer: I work there),
is kindly purchasing a buffet to accompany our monthly Boston Lisp meeting.
Anyone who attends is welcome to partake.
&lt;/p&gt;&lt;p align="justify"&gt;
We appreciate it if you let us know you're coming,
and what food taboos you have,
so that we can order the correct amount and kind of food.
Tell us by sending email to
boston-lisp-meeting-register at common-lisp.net.
We won't send any acknowledgement unless requested;
importantly, we'll keep your identity and address confidential
and won't communicate any such information to anyone, not even to our sponsors.
&lt;/p&gt;&lt;a name="SECTION_5"&gt;&lt;/a&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" bgcolor="#FFC189"&gt;&lt;font size="+1" face="sans-serif"&gt;&lt;b&gt;5 More about the Meeting&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p align="justify"&gt;
The previous Boston Lisp Meeting on August 31th
had about 20-odd participants.
Emmanuel Schanzer talked about
&lt;em&gt;Teaching Mathematics and Problem-Solving through Programming&lt;/em&gt;,
preceded by lightning talks by
Gregory Marton on &lt;em&gt;Teaching Linguistics through Programming&lt;/em&gt;
and Alex Plotnick on &lt;em&gt;Gabriel's Gimmick&lt;/em&gt;.
&lt;/p&gt;&lt;p align="justify"&gt;
We're always looking for more speakers.
The call for speakers and all the other details are at:
&lt;a href="http://fare.livejournal.com/120393.html"&gt;http://fare.livejournal.com/120393.html&lt;/a&gt;
Volunteers to give Lightning Talks are also sought.
&lt;a href="http://fare.livejournal.com/143723.html"&gt;http://fare.livejournal.com/143723.html&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
For more information, see our web site &lt;a href="http://boston-lisp.org/"&gt;http://boston-lisp.org/&lt;/a&gt;
For posts related to the Boston Lisp meetings in general, follow this link:
&lt;a href="http://fare.livejournal.com/tag/boston-lisp-meeting"&gt;http://fare.livejournal.com/tag/boston-lisp-meeting&lt;/a&gt;
or subscribe to our RSS feed:
&lt;a href="http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting"&gt;http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Please forward this information to people you think would be interested.
Please accept my apologies for your receiving this message multiple times.
My apologies if this announce gets posted to a list where it shouldn't,
or fails to get posted to a list where it should.
Feedback welcome by private email reply to fare at tunes.org.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:147325</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/147325.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=147325"/>
    <title>The Priority of Virtues</title>
    <published>2009-09-14T23:58:21Z</published>
    <updated>2009-09-23T15:23:34Z</updated>
    <category term="philosophy"/>
    <category term="priority"/>
    <category term="war"/>
    <category term="roman empire"/>
    <category term="ethics"/>
    <category term="virtue"/>
    <category term="en"/>
    <content type="html">&lt;p align="justify"&gt;
Does Virtue lead to Misfortune and Vice to Prosperity?
Do we live in an Evil World where vice is rewarded while virtue is punished?
Is Virtue counter-productive in This World,
and does the only hope of vindication for the virtuous
lie in an After-Life?
&lt;/p&gt;&lt;p align="justify"&gt;
Not at all.
Though this World is not perfect,
there is an essentially progressive logic to it;
and not only does this Logic reward Virtue,
that it does is the very definition of Virtue indeed.
However this logic is not the mystical logic of good intentions rewarded by fairy godmothers
nor is it the official logic of social conformity rewarded by benevolent authorities.
It is the implacable logic of Reality,
that rewards the Essential Virtue of each domain of Existence
with its Tautological consequence.
&lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;p align="justify"&gt;
Thus, the First Virtue, that applies to anything or anyone that Is, is Survival.
What survives, survives &amp;mbsp; what doesn't, dies out.
Those individuals or groups, genes or memes,
that would sacrifice this Virtue to any other virtue
will not be there very long to embody the "superior" virtues
to which they commit the sacrifice of Survival, this First Virtue.
Whatever real or alleged "Superiority", "Purity",
any and all Principles embodied or claimed by the sacrificer,
will disappear with those who claim them over their own survival
when said survival is at stake.
&lt;/p&gt;&lt;p align="justify"&gt;
The Second Virtue, that applies to anyone who Acts, is Success.
What succeeds, succeeds &amp;mdash; what doesn't, fails.
Any agent who would sacrifice the Success of his action
to any other virtue of his action, will see his action fail,
and the resources he committed wasted.
When this action is a struggle against an Enemy,
then Success equates with Victory,
and Failure is Defeat.
Little will matter the "preserved virtues" of the failed and defeated,
for their resources will be wasted or seized,
and not available anymore to fuel "virtuous" action successful or un-.
So called good manners, proper forms, rules of engagement, taboos
and other principles of action or inaction will
lead to failure and see the extent of their acceptance dwindle
when they are promoted despite their opposition to Success.
&lt;/p&gt;&lt;p align="justify"&gt;
The Third Virtue, that applies to any sentient being, is Truth.
What is true, is true &amp;mdash;
what isn't, is false.
Truth accurately describes reality
and guides action towards success.
Falsity misleads about reality,
it will take who follows it towards failure.
The time you spend avoiding Truth to pander to your own emotional weakness,
to the displayed sensitiveness of others or to the Official Creed
is time you waste not correcting courses of action that lead to Failure or Death.
&lt;/p&gt;&lt;p align="justify"&gt;
I'm sure you can similarly figure out for yourself
the essential Virtues attached to each subdomain of existence,
to each class of action, etc.
You can also imagine how subjectivists, mystics and other liars
will fallaciously confuse genres to reach absurd conclusions.
For instance, they may invoke my argument to identify
the Virtue inherent to Lying, which is
Success at misleading a victim from truth,
which they will say opposite to my Third Virtue of Truth,
and something inherently Vicious and against good morality.
Except that this Virtue is opposing Truth in the victim,
not the Actor who does the lying, and so there is no contradiction
in my theory, there is conflict of interest between the liar and his victim.
Moreover, whereas lying to innocent people to defraud them is indeed a vice,
lying to aggressors to save yourself isn't;
and lying as part of a magic show is just what the public is looking for;
and so once again, any contradiction stems from emotionalists
who fail the korzybskyan sanity test and are unable to either
abstract the concept of an action away from its context
or to correctly take into account the context when the concept is applied.
&lt;/p&gt;&lt;p align="justify"&gt;
Other typical fallacies will be the confusion of identity in situations
when someone readily sacrifices his biological life for someone or something he loves.
The absurdists will praise sacrifice as such and see it as a Virtue in itself.
But the Truth instead is that sacrifice is the price, the negative part of the deal,
and that the survival of something worth &lt;em&gt;more&lt;/em&gt; than the price is the desired result,
the positive part of the deal, and what makes the action virtuous
if indeed the outcome is the best the self-sacrificer may hope to achieve.
The Truth is that our biological lives are finite and have finite value even to ourselves,
that we as individuals can choose to a large enough extent what we identify with
and what is sufficiently part of us;
and so we may want to promote the survival of that which we identify with
above the continuation of what would be left of our biological life without it.
This will especially be the case
when circumstances are dire and our expected self-controlled biological life is short anyway.
Which is why an adult in a rich country at peace
won't sell himself into slavery for a small chance of survival of his kids,
but the same adult in a poor country at war may do it gladly:
what he's getting for it might be the same in the two cases,
but what he's paying may have dwindled from a lot to very little.
&lt;/p&gt;&lt;p align="justify"&gt;
Now, another Virtue is the ability to recognize that sacrifice
(big or small) is sometimes worth it,
and to distinguish when it is and when it isn't.
And it is indeed yet another Virtue to have the Discipline
of making the sacrifices that are worth it
without having to pay the price of either thinking about it every time
or erring too often in the process,
especially when innate reflexes and bad habits
would otherwise tend to have you make the wrong choice.
But that is very very different from Sacrifice as being good in itself:
this is Discipline being good in itself.
Getting less is bad, sacrificing more is bad;
getting more is good, efficient discipline that gets you more for less is good.
&lt;/p&gt;&lt;p align="justify"&gt;
In the end, the important point to recognize is thus that Virtues have Priorities.
There is a precedence of Virtues, and
failing to cultivate virtues in the correct order is itself a Vice.
When evil men are in power and destroy a civilization (their own, or another one),
is it Vice being rewarded over Virtue?
No, it is Vice being rewarded over an even worse Vice.
The cruel barbarians who enslave a town may be vicious murderers,
their very success proves that they correctly cultivated survival and victory,
whereas their victims failed.
Whatever secondary virtues the conquered may have possessed
that the conqueror did not,
they lost the primary virtues that would have made them prevail.
It is the failure of their primary virtues, and not the success of their secondary virtues,
that is sanctioned by the victory of the "barbarians" over the "civilized".
And that victory proves that those "barbarians" for all their faults
were indeed cultivating some essential virtue that went amiss amongst the "civilized".
&lt;/p&gt;&lt;p align="justify"&gt;
Thus, when the Roman Empire fell to Germanic and Hungarian invaders,
it had turned into a totalitarian bureaucracy where even "free" men
were burdened by extraordinary taxes and exacting regulations,
whereas the Germans and Huns still applied Common Law amongst each other,
and were tied by personal bonds rather than impersonal Statutes.
Unlike the "citizens" of the Roman Empire,
the barbarians still had a Self to fight for and to assert violently.
Ignorant and unrefined as they may otherwise have been,
the Germans knew some essentials principle of Law that had been lost in the Roman Empire.
In a very strong and essential sense,
they were more civilized than the populations they conquered.
&lt;/p&gt;&lt;p align="justify"&gt;
The Priority of Virtues may often seem harsh to the weak of mind,
who would rather take the primary virtues for granted and
do without the price of maintaining them.
They will soon enough find a superior entity to promise them a better life
for the price of their freedom, until they find that this "better" life is
not worth living without the freedom to be a Self who lives it.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:147160</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/147160.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=147160"/>
    <title>Law, War and Territory</title>
    <published>2009-09-03T05:05:45Z</published>
    <updated>2009-09-03T05:05:45Z</updated>
    <category term="libertarian"/>
    <category term="law"/>
    <category term="geography"/>
    <category term="war"/>
    <category term="en"/>
    <content type="html">&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;p align="justify"&gt;
Libertarianism at heart is a theory of Law.
It applies the filter of praxeology to norms of human behavior,
i.e. it denounces the invalidity of those norms
that imply performative contradiction
between their hypotheses and their conclusions,
the statement of the norm and its application,
their intent and their consequences, etc.
The only norm that remains unscathed is that of individual property rights
of oneself, what one produces and what one obtains through consensual exchange.
I have nothing to add or remove on this topic
from the works of say, Guillaumat,
who himself builds on Hoppe, Rothbard, Mises, Bastiat.
&lt;/p&gt;&lt;p align="justify"&gt;
Now, the best norms in world do little good when they are not followed,
and they tend to not be followed when they go unenforced,
and other, corrupt, norms are being enforced instead.
Which takes us back into the topic of Politics, and more generally Military Science.
For Politics is indeed "the continuation of war by other means".
&lt;/p&gt;&lt;a name="cutid2"&gt;&lt;/a&gt;&lt;p align="justify"&gt;
Unhappily, this is a topic on which most libertarians blank out.
And this allows many a Statist to rightfully argue
that Politics is a necessary aspect of Society,
and then smuggle with that argument the non-sequitur premise
that this aspect has to be based on a &lt;i&gt;de jure&lt;/i&gt; Monopoly.
&lt;/p&gt;&lt;p align="justify"&gt;
Indeed, libertarians understand that the State, a monopoly on public force,
is itself a violation of property Rights,
and a tool to exact further usurpations of such.
Monopoly Laws, Monopoly Police, Monopoly Army, are all tools directed towards commoners
to oppress them, rob them, enslave them.
However, many libertarians confusedly reject Laws, Police, Army as evil in themselves,
when it is the State that originates the evil that corrupts them.
It is as if, seeing how Monopoly Agriculture has served to starve people
in Ukraine, North Korea and other communist countries,
someone would conclude that Agriculture itself is evil and serves to starve people.
On the other hand, most people who understand the importance of War and Politics
don't have any of the understanding of Law that libertarians have.
So we have Right without Might and Might without Right,
and a lot of misery as the two seldom meet.
&lt;/p&gt;&lt;p align="justify"&gt;
It is true that Army is the very first thing that
a State will monopolize, without which no other Monopoly is possible;
and so State implies State Army.
But it does not follow that Army implies State Army implies State.
Otherwise, there would be no defense against a State but another State,
Anarchy would be a practical impossibility,
and all these theories would be absurdities.
But they are not. There is such thing as an Army without a Monopoly:
a confederacy of individuals who fight together without being compelled,
and whose common leaders (if any) hold their power after the fact
by the continued voluntary support of the confederates,
rather than holding their power before the fact
despite the will of draftees.
&lt;/p&gt;&lt;p align="justify"&gt;
Certainly, geographical considerations are important in military matters,
and thus even in the most libertarian of worlds, you may see borders and
demarcation zones that separate people who won't live together.
Jews and Arabs may be separated by a wall even when States collapse;
some fundamentalist christians may retire in delimited zones that
no homosexual or abortionist may safely enter;
gated communities may protect some capitalists from some communists,
and some communists from some capitalists;
etc.
When two groups have values that clash in a deadly way,
physical separation is good, and neat contiguous geographical zones
are a cheap way to enforce it,
and you may find yourself with &lt;i&gt;de facto&lt;/i&gt; "monopolies" and "oligopolies" of force
even where de attempts at establishing a &lt;i&gt;de jure&lt;/i&gt; Monopoly
will be universally condemned.
But any apparent contradiction here only stems
from the &lt;em&gt;insane&lt;/em&gt; (as identified by Korzybski)
confusion between Law and Fact.
(About the difference 
between &lt;i&gt;de facto&lt;/i&gt; "monopoly" and &lt;i&gt;de jure&lt;/i&gt; Monopoly,
see my previous essay
&lt;a href="http://fare.tunes.org/liberty/microsoft_monopoly.html"&gt;Government and Microsoft: a Libertarian View on Monopolies&lt;/a&gt;.
About the proper relationship between Law and Fact, see my speech
&lt;a href="http://fare.tunes.org/liberty/sofia2005.html"&gt;Capitalism is the Institution of Ethics&lt;/a&gt;.)
And conflicts don't have to be deadly,
for geographical demarcations to appear;
it only takes cohabitation to be costly for different well-delimited territories
to have mutually incompatible laws, each supported by a local oligopoly,
maybe even a local hegemony or supremacy.
Note that a very same security institution
can partake cooperatively or not with other institutions
in the enforcement of different laws on different territories
("public" or "private" doesn't matter, see my essay about
&lt;a href="http://fare.tunes.org/liberty/economic_reasoning.html"&gt;Accounting Fallacies vs Economic Reasoning&lt;/a&gt;.)
&lt;/p&gt;&lt;p align="justify"&gt;
In any case, I have to thank Mencius Moldbug for helping me conceptualize
that Geography is an essential aspect of the Military Art &lt;em&gt;and hence of Law&lt;/em&gt;,
though I think he misses something important
when he implicitly embraces the geographical Monopoly of force of the State
in what looks like a typical confusion
between those two very different kinds of monopolies,
between Fact and Law.
Mencius Moldbug does not show signs of deep confusion however, and
he may yet re-embrace a better libertarianism than the one he forsook.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:146698</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/146698.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=146698"/>
    <title>EVAL-WHEN considered harmful to your mental health</title>
    <published>2009-08-26T12:05:46Z</published>
    <updated>2009-08-26T16:29:02Z</updated>
    <category term="lisp"/>
    <category term="metaprogramming"/>
    <category term="eval-when"/>
    <category term="macros"/>
    <category term="en"/>
    <content type="html">&lt;p align="justify"&gt;
In my adventures in the building of Common Lisp software,
I have had to deal more than I wish I had
with something that is largely misunderstood, because it is completely crazy:
&lt;a href="http://www.lispworks.com/documentation/HyperSpec/Body/s_eval_w.htm"&gt;&lt;tt&gt;EVAL-WHEN&lt;/tt&gt;&lt;/a&gt;.
In the hope that the loss of my sanity might be redeemed however fractionarily
by the slightest enlightment of my better,
I thought I would write up my conclusions.
Dumping the topic on paper will also hopefully allow me
to empty my mind from the sheer
&lt;a href="http://fare.livejournal.com/tag/cthulhu"&gt;horror&lt;/a&gt;.
&lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;p align="justify"&gt;
Common Lisp features the notion that processing the code
from source text to effective side effects happens in many stages
that may or may not be interleaved or distinguished:
read-time, macro-expansion-time, compile-time, load-time, execution-time.
&lt;tt&gt;EVAL-WHEN&lt;/tt&gt; allows you to control up to a point
what gets evaluated in the latter three "times".
&lt;/p&gt;&lt;p align="justify"&gt;
The interleaving between the evaluation stages
comes from the fact that
code processing happens one form at a time,
with the result of each stage being passed on to the next stage
before the next form is read.
This allows for any side-effect by the processor
to be effective by the time the next form is processed.
However, depending on whether you're typing code at the REPL,
&lt;tt&gt;LOAD&lt;/tt&gt;ing a Lisp source file,
&lt;tt&gt;COMPILE-FILE&lt;/tt&gt;ing it then &lt;tt&gt;LOAD&lt;/tt&gt;ing a compiled file,
&lt;tt&gt;EVAL&lt;/tt&gt;ing or &lt;tt&gt;COMPILE&lt;/tt&gt;ing a form,
then which of compile-time, load-time and execution-time happens,
which is deferred, which doesn't happen, and how they interleave
with each other and with macro-expansion-time may vary wildly.
&lt;/p&gt;&lt;p align="justify"&gt;
Read-time always happens first.
It reads a stream of text
(an unfortunate choice of specification,
INTERLISP and Smalltalk fans may tell you)
and dumps CONS cells to represent
Lisp code in S-Expression forms
(an unfortunate choice of specification,
PLT Scheme fans will tell you).
&lt;tt&gt;#.&lt;/tt&gt; and the &lt;tt&gt;*READTABLE*&lt;/tt&gt;
and its macro-characters
allow you to specify code that is evaluated at read-time,
which actually allows you (though in a painful way)
locally or globally
compile code that uses any syntax of your choice
(see
&lt;a href="http://kpreid.livejournal.com/14713.html"&gt;how kpreid does it for E&lt;/a&gt;).
&lt;/p&gt;&lt;p align="justify"&gt;
Macro-expansion time happens second,
separately on each toplevel form read by the reader at read-time.
Macro-expansion is specified thanks to
&lt;tt&gt;DEFMACRO&lt;/tt&gt;, &lt;tt&gt;DEFINE-SYMBOL-MACRO&lt;/tt&gt; and their lexical variants
&lt;tt&gt;MACROLET&lt;/tt&gt; and &lt;tt&gt;SYMBOL-MACROLET&lt;/tt&gt;, as well as the awesome
&lt;tt&gt;DEFINE-SETF-EXPANDER&lt;/tt&gt;
(and friend &lt;tt&gt;DEFINE-MODIFY-MACRO&lt;/tt&gt;),
and the tricky
&lt;tt&gt;DEFINE-COMPILE-MACRO&lt;/tt&gt; and the not-so-great &lt;tt&gt;*MACROEXPAND-HOOK*&lt;/tt&gt;.
Common Lisp macros are at the same time all-powerful
(being able to transform any source code into any other source code)
and all-ignorant
(being unable to track the surrounding lexical context
or original source location,
and limited in how they may analyze the enclosed lexical content
short of reimplementing a full code walker for CL
and any implementation-defined extension).
This causes minor but nagging issues with lack of hygiene,
difficulty to trace errors, but more importantly,
it makes it impossible to write non-local transformations in a modular way,
short of reinventing a whole new system to replace the current one
or somehow sit on top of it
(but then one might find that because
the &lt;tt&gt;*MACROEXPAND-HOOK*&lt;/tt&gt; isn't called
on special forms and normal syntax, one needs to hack the reader if one
wants to intercept everything without requiring the user to wrap each form
in a magic wrapper).
&lt;/p&gt;&lt;p align="justify"&gt;
Then the processor goes through &lt;em&gt;some&lt;/em&gt; stages of evaluation:
either compilation that may or may not be followed by loading,
or direct execution that may or may not involve some kind of compilation.
Whichever stages happen then may or may not be themselves
interleaved with the macro-expansion of the given form itself:
it is allowed for the implementation
to start compiling or executing part of a form
while the rest of it isn't macroexpanded,
or to fully macroexpand before it compiles
(though full macroexpansion does require
at least some level of code-walking and lexical scope analysis
to distinguish actual macros from other forms that happen to
use the same symbols as macros).
&lt;/p&gt;&lt;p align="justify"&gt;
If you are typing code at the REPL, &lt;tt&gt;LOAD&lt;/tt&gt;ing a Lisp source file,
or &lt;tt&gt;EVAL&lt;/tt&gt;ing some form, then the execution-time happens and only it,
with all its side-effects.
Any &lt;tt&gt;EVAL-WHEN&lt;/tt&gt; turns into a &lt;tt&gt;PROGN&lt;/tt&gt; if it
contains the &lt;tt&gt;:EXECUTE&lt;/tt&gt; clause, otherwise into &lt;tt&gt;NIL&lt;/tt&gt;.
Note that this may or may not be interleaved with macro-expansion,
so that for instance, SBCL may start evaluating
&lt;tt&gt;(when nil (foo))&lt;/tt&gt; and reduce it to &lt;tt&gt;NIL&lt;/tt&gt;
without ever expanding the macro &lt;tt&gt;(foo)&lt;/tt&gt;,
so that if you were expecting this expansion to happen and cause side-effects,
you'll be surprised to find it won't
(as we were when testing ASDF-DEPENDENCY-GROVEL).
&lt;/p&gt;&lt;p align="justify"&gt;
If you are calling &lt;tt&gt;COMPILE&lt;/tt&gt; on some code, said code is also to be run
at in a future &lt;tt&gt;:EXECUTE&lt;/tt&gt;-time and &lt;tt&gt;EVAL-WHEN&lt;/tt&gt; behaves as above.
Because the code to be compiled has to be a function
(named or anonymous),
there is no toplevel,
and &lt;tt&gt;:COMPILE-TOPLEVEL&lt;/tt&gt; or &lt;tt&gt;:LOAD-TOPLEVEL&lt;/tt&gt; clauses
are irrelevant and ignored.
If I understand correctly, the compiler is also allowed
to not expand macros
when it can statically prove that they are in an unreachable piece of code;
however, in practice,
the way compilers are typically written in passes,
macros are often fully expanded by the time any advanced analysis happens based on which such dead code could be eliminated.
&lt;/p&gt;&lt;p align="justify"&gt;
Where &lt;tt&gt;EVAL-WHEN&lt;/tt&gt; behaves differently is
when you are using &lt;tt&gt;COMPILE-FILE&lt;/tt&gt;
and when you &lt;tt&gt;LOAD&lt;/tt&gt; the result of a FASL
resulting from such a &lt;tt&gt;COMPILE-FILE&lt;/tt&gt;.
In these cases, each toplevel form after expansion (or interleaved with it)
is processed in a way that separates some effects that happen at compile-time
and effects that are to happen at load-time.
The &lt;tt&gt;:COMPILE-TOPLEVEL&lt;/tt&gt; clause of an &lt;tt&gt;EVAL-WHEN&lt;/tt&gt;
indicates that all enclosed effects
are to happen at compile-time
(i.e. they happen in the current image, and they are also dumped
in the CFASL if you use them in SBCL 1.0.30.4 or later,
so they may happen when each time said CFASL is loaded
in this image or a future one).
The &lt;tt&gt;:LOAD-TOPLEVEL&lt;/tt&gt; clause of an &lt;tt&gt;EVAL-WHEN&lt;/tt&gt; indicates
that all enclosed effects are to happen at load-time
(i.e. they are dumped in the FASL and will happen
each time said FASL is &lt;tt&gt;LOAD&lt;/tt&gt;ed,
in this image or a future one, but they do not happen in the current image
unless the &lt;tt&gt;:COMPILE-TOPLEVEL&lt;/tt&gt; clause was also specified).
Some special forms have effects at both compile-time and load-time,
such as &lt;tt&gt;IN-PACKAGE&lt;/tt&gt; that changes the current package at both times,
or &lt;tt&gt;DEFVAR&lt;/tt&gt; that will declare the variable special at compile-time
in addition to declaring it &lt;em&gt;and&lt;/em&gt; optionally setting it at load-time,
etc.
The &lt;tt&gt;:EXECUTE&lt;/tt&gt; clause is ignored at the toplevel
(but it and only it remains meaningful in non-toplevel subforms).
&lt;/p&gt;&lt;p align="justify"&gt;
In practice, — and if you only need to remember one thing about
&lt;tt&gt;EVAL-WHEN&lt;/tt&gt;, this is it, —
only three combinations are safe, and then again,
only one is useful:
&lt;b&gt;&lt;tt&gt;(EVAL-WHEN (:COMPILE-TOPLEVEL :LOAD-TOPLEVEL :EXECUTE) ...)&lt;/tt&gt;
should wrap things that need be available in the compilation environment
as well as the target environment&lt;/b&gt;,
such as the functions, variables and side-effects used by macros themselves;
it is the only combination that is both useful and safe.
&lt;/p&gt;&lt;p align="justify"&gt;
&lt;tt&gt;(:LOAD-TOPLEVEL :EXECUTE)&lt;/tt&gt; is safe,
but it is the implicit default around any toplevel form
and thus you never need to specify it explicitly,
except possibly to restrict the effects of
a surrounding &lt;tt&gt;EVAL-WHEN&lt;/tt&gt; when used inside a macro that may expand
to such thing (which would be poor style).
&lt;/p&gt;&lt;p align="justify"&gt;
&lt;tt&gt;(:COMPILE-TOPLEVEL :EXECUTE)&lt;/tt&gt; is the last safe combination,
but its utility is very restricted.
It is to be used for side-effects you only want
in the compilation environment,
most notably local modification of the readtable.
Now, such a side effect will happen when you originally compile the file,
and unless to some locally bound symbol like the &lt;tt&gt;*READTABLE*&lt;/tt&gt;,
it will persist in the session where you compile
but not further sessions that are restarted from already compiled FASLs,
causing non-deterministic havoc in incremental ASDF builds.
Note that modifications to the readtable object itself
(as opposed to a copy of it) will indeed be such maybe escaping, maybe not
side effects.
File-system access to compute anything non-deterministic
will similarly be very bad taste
(If deterministic, you may want to do it at read-time,
and if not, you may want to defer it until image-dump-time).
One redeeming context for the use for such combination for lasting side-effects
is when you use XCVB while enabling SBCL's CFASL mechanism
(present since SBCL 1.0.30.4),
which isn't portable to other implementations (yet),
but will guarantee that the enclosed side-effects &lt;em&gt;will&lt;/em&gt;
be replayed before compiling each file that depends on yours, and none other.
To summarize, this combination, while safe,
is for very special restricted usage patterns.
Unless you're an expert, don't try this combination;
and don't even think of using other combinations.
&lt;/p&gt;&lt;p align="justify"&gt;
Indeed all other combinations are bogus,
except imaginably in the guts of some fairly low-level optimization macro,
because there will always be cases when they won't do what you think,
depending on how the source file is being processed.
i.e. the user may depending on his needs either &lt;tt&gt;LOAD&lt;/tt&gt; on the source
or &lt;tt&gt;COMPILE-FILE&lt;/tt&gt; it then &lt;tt&gt;LOAD&lt;/tt&gt; of the FASL,
or he may only &lt;tt&gt;LOAD&lt;/tt&gt; the FASL in a new image to
incrementally re-compile a previously compiled system with ASDF,
and your code should behave reasonably well and mean the same thing
in all these cases.
&lt;/p&gt;&lt;p align="justify"&gt;
Finally, when a FASL or CFASL file is loaded, the dumped side-effects happen:
symbols are interned, &lt;tt&gt;LOAD-TIME-VALUE&lt;/tt&gt;s are computed,
function, variables and macros are defined,
any toplevel side-effect happens, etc.
Note that read-time and macro-expansion time were considered
neither compile-time nor load-time side-effects and
thus should not be present in either CFASL or FASL.
This is actually a feature, as it allows one to use side effects
while reading or macro-expanding,
without the same side-effects having to be dumped
then later replayed at load-time.
Indeed they won't be dumped with SBCL and other sane implementations,
though there might or might not conceivably exist a crazier implementations.
However, if there are side-effects you do at macro-expansion-time,
you want to persist and be replayed at compile-time-time (when using CFASLs)
or load-time (when using FASLs), then your macros should typically expand
to code that includes the same side-effects at compile-time and/or load-time
through the proper use of &lt;tt&gt;EVAL-WHEN&lt;/tt&gt;,
in addition to (or replacement to)
said code being evaluated at macro-expansion-time (if needed).
While migrating a big project from ASDF to XCVB,
I have notably had to debug a macro that was using
&lt;tt&gt;(EVAL (DEFCLASS ...))&lt;/tt&gt; and a &lt;tt&gt;FINALIZE-INHERITANCE&lt;/tt&gt;
at macroexpansion time so as to be able to invoke the MOP
and query the parsed class,
but was failing to include the &lt;tt&gt;DEFCLASS&lt;/tt&gt; in the expansion,
thus working in a build from clean,
but causing failures when building incrementally from ASDF,
or when building deterministically from XCVB,
as some macro-expansions in further files were expecting the
class to have been defined and its inheritance finalized,
which they would not be when loading from FASLs.
&lt;/p&gt;&lt;p align="justify"&gt;
In conclusion, &lt;tt&gt;EVAL-WHEN&lt;/tt&gt; is a tool that makes it easy
to shoot yourself in the foot, but only has one legitimate usage
(two if using XCVB).
You should understand the few but important cases when you need it,
ergo for functions and variables that will be used at macroexpansion-time.
My recommendation, though, if you like to do non-trivial metaprogramming,
would be to avoid the primitive madness of Common Lisp,
and use a modern language where staged compilation
has some well-defined semantics,
such as the PLT Scheme module language, OCaml's camlp4,
and other systems that preprocess files deterministically.
PLT macros have the additional advantages of being hygienic,
and playing well with source locations for the debugger and other tools, etc.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:146665</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/146665.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=146665"/>
    <title>Boston Lisp Meeting: Monday 2009-08-31 - Emmanuel Schanzer</title>
    <published>2009-08-18T18:59:50Z</published>
    <updated>2009-08-18T23:19:05Z</updated>
    <category term="lisp"/>
    <category term="lightning-talk"/>
    <category term="meeting"/>
    <category term="boston"/>
    <category term="boston-lisp-meeting"/>
    <category term="en"/>
    <content type="html">&lt;p align="justify"&gt;
A Boston Lisp Meeting will take place
on Monday, August 31st 2009 at 1800 at MIT 34-401B,
where
&lt;b&gt;&lt;em&gt;Emmanuel Schanzer&lt;/em&gt;&lt;/b&gt; will speak about
&lt;b&gt;Teaching Mathematics and Problem-Solving through Programming&lt;/b&gt;.
&lt;/p&gt;&lt;p align="justify"&gt;
Additionally, we will have two 5-minute Lightning Talks,
each followed by 2-minute Q&amp;A:
&lt;b&gt;&lt;em&gt;Gregory Marton&lt;/em&gt;&lt;/b&gt; will talk about
&lt;b&gt;Teaching Linguistics through Programming&lt;/b&gt;
and &lt;b&gt;&lt;em&gt;Alex Plotnick&lt;/em&gt;&lt;/b&gt; will talk about &lt;b&gt;Gabriel's Gimmick&lt;/b&gt;,
an odd little idiom for (mis)using the sequence functions.
&lt;/p&gt;&lt;p align="justify"&gt;
Also, there will be a buffet offered by ITA Software.
Registration is not necessary but appreciated.
See details below.
&lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;
&lt;p align="center"&gt;&lt;center&gt;*&lt;/center&gt;&lt;/p&gt;&lt;p align="justify"&gt;
&lt;b&gt;&lt;em&gt;Emmanuel Schanzer&lt;/em&gt;&lt;/b&gt; will speak about
&lt;b&gt;Teaching Mathematics and Problem-Solving through Programming&lt;/b&gt;.
Most people agree that students should be exposed
to some form of Computer Science before graduating high school,
but there is little consensus about what kind of exposure is best.
At the same, Algebra has been identified as
a pivotally important concept for students,
both as the crucial gateway to higher forms of mathematics
and as an indicator of future success.
This talk explores Bootstrap
&lt;a href="http://www.bootstrapworld.org/"&gt;http://www.bootstrapworld.org/&lt;/a&gt;,
a particular approach to computer science education
that focuses on Algebra instruction as
a natural format for computer programming.
Over the course of nine classes,
students are exposed to functions and variables,
and use their knowledge to design and build a simple videogame.
Bootstrap is currently active in middle schools around the country,
using volunteer teachers from companies and universities
to teach programming to children as young as ten years old.
&lt;/p&gt;&lt;p align="justify"&gt;
Emmanuel Schanzer is the Program Director for Bootstrap,
an organization which trains volunteer teachers
to bring functional computer programming
to underprivileged middle school students around the country
using the curriculum he's developed since 2004.
He began teaching Computer Science in 2000,
teaching students at Cornell University how to program in Scheme,
and later constructed Bootstrap to teach the same concepts
as part of an afterschool program.
He is now a Doctoral Candidate at Harvard University,
studying Cognitive Science and Mathematics Instruction.
&lt;/p&gt;&lt;p align="center"&gt;&lt;center&gt;* *&lt;/center&gt;&lt;/p&gt;&lt;p align="justify"&gt;
At every meeting, before the main talk,
there are two slots for strictly timed 5-minute "Lightning Talks"
followed by 2 minutes for questions and answers.
&lt;/p&gt;&lt;p align="justify"&gt;
The slots for next meeting are still open.
Step up and come talk about your pet project!
&lt;/p&gt;&lt;p align="center"&gt;&lt;center&gt;* * *&lt;/center&gt;&lt;/p&gt;&lt;p align="justify"&gt;
&lt;b&gt;The Lisp Meeting will take place on
Monday August 31st 2009 at 1800 (6pm)
at MIT, Room 34-401B.&lt;/b&gt;
&lt;/p&gt;&lt;a name="cutid2"&gt;&lt;/a&gt;&lt;p align="justify"&gt;
As the numbers indicate, the room is in Building 34, on the 4th floor.
This is the usual location, on 50 Vassar Street, Cambridge.
&lt;/p&gt;&lt;p align="justify"&gt;
MIT map:
&lt;a href="http://whereis.mit.edu/bin/map?selection=34"&gt;http://whereis.mit.edu/bin/map?selection=34&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Google map:
&lt;a href="http://maps.google.com/maps?q=50+Vassar+St,+Cambridge,+MA+02139,+USA"&gt;http://maps.google.com/maps?q=50+Vassar+St,+Cambridge,+MA+02139,+USA&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Many thanks go to Alexey Radul for arranging for the room,
and to MIT for welcoming us.
&lt;/p&gt;&lt;p align="center"&gt;&lt;center&gt;* * * *&lt;/center&gt;&lt;/p&gt;&lt;p align="justify"&gt;
&lt;u&gt;Dinner&lt;/u&gt;:
&lt;b&gt;&lt;a href="http://itasoftware.com/careers/"&gt;ITA Software&lt;/a&gt;&lt;/b&gt;,
a fine employer of Lisp hackers (disclaimer: I work there),
is kindly purchasing a buffet to accompany our monthly Boston Lisp meeting.
Anyone who attends is welcome to partake.
&lt;/p&gt;&lt;p align="justify"&gt;
We appreciate it if you let us know you're coming,
and what food taboos you have,
so that we can order the correct amount and kind of food.
Tell us by sending email to
&lt;tt&gt;boston-lisp-meeting-register&lt;/tt&gt; at &lt;tt&gt;common-lisp.net&lt;/tt&gt;.
We won't send any acknowledgement unless requested;
importantly, we'll keep your identity and address confidential
and won't communicate any such information to anyone, not even to our sponsors.
&lt;/p&gt;&lt;p align="justify"&gt;
Somehow, we the organizers got mixed up at the July meeting,
and the promised buffet didn't materialize.
I offer my sincere apologies to all concerned for this blatant failure.
&lt;/p&gt;&lt;p align="center"&gt;&lt;center&gt;* * * * *&lt;/center&gt;&lt;/p&gt;
&lt;a name="cutid3"&gt;&lt;/a&gt;
&lt;p align="justify"&gt;
The previous Boston Lisp Meeting on July 27th
had about 30-odd participants.
Bruce Lewis talked about OurDoings,
and Richard Kreuter about Unary REQUIRE.
&lt;a href="http://fare.livejournal.com/145087.html"&gt;http://fare.livejournal.com/145087.html&lt;/a&gt;.
&lt;/p&gt;&lt;p align="justify"&gt;
We're always looking for more speakers.
The call for speakers and all the other details are at
&lt;a href="http://fare.livejournal.com/120393.html"&gt;http://fare.livejournal.com/120393.html&lt;/a&gt;
Volunteers to give
&lt;a href="http://fare.livejournal.com/143723.html"&gt;Lightning Talks&lt;/a&gt; are also sought.
&lt;/p&gt;&lt;p align="justify"&gt;
For more information, see our web site
&lt;a href="http://boston-lisp.org/"&gt;boston-lisp.org&lt;/a&gt;.
For posts related to the Boston Lisp meetings in general, follow this link:
&lt;a href="http://fare.livejournal.com/tag/boston-lisp-meeting"&gt;http://fare.livejournal.com/tag/boston-lisp-meeting&lt;/a&gt;
or subscribe to our RSS feed:
&lt;a href="http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting"&gt;http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting&lt;/a&gt;
&lt;/p&gt;&lt;p align="justify"&gt;
Please forward this information to people you think would be interested.
Please accept my apologies for your receiving this message multiple times.
My apologies if this announce gets posted to a list where it shouldn't,
or fails to get posted to a list where it should.
Feedback welcome by private email reply to fare&amp;#64;tunes.org.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:146336</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/146336.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=146336"/>
    <title>Bitur-Camember, short version</title>
    <published>2009-08-18T06:01:45Z</published>
    <updated>2009-08-18T14:13:30Z</updated>
    <category term="libertarian"/>
    <category term="politics"/>
    <category term="bitur-camember"/>
    <category term="socialism"/>
    <category term="economics"/>
    <category term="en"/>
    <content type="html">&lt;p align="justify"&gt;
&lt;b&gt;The &lt;em&gt;&lt;a href="http://fare.livejournal.com/32611.html"&gt;Law of Bitur-Camember&lt;/a&gt;&lt;/em&gt; at Equilibrium&lt;/b&gt;:
The value of any unowned resource will be destroyed
by the political process of grabbing it.
&lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;p align="justify"&gt;
&lt;b&gt;Stability of the Law around Equilibrium&lt;/b&gt;:
The more uncertain the ownership of the resource
and the more certain its value,
the more certain the destruction.
&lt;/p&gt;&lt;p align="justify"&gt;
&lt;b&gt;Corollaries&lt;/b&gt;:
The political process destroys
the value of all known resources that are up for grabs.
The socialist process of systematically denying legitimacy
to property rights
applies the political process universally
and destroys the value of all resources available to humans.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:145966</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/145966.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=145966"/>
    <title>Cons sang sucent polis tiques</title>
    <published>2009-08-07T00:57:27Z</published>
    <updated>2009-08-07T00:57:27Z</updated>
    <category term="libertarian"/>
    <category term="politics"/>
    <category term="classes"/>
    <category term="fr"/>
    <category term="bipartisan"/>
    <content type="html">&lt;p align="justify"&gt;
"La gauche et la droite sont d'accord"
argumentait mon politicard de cousin à propos de telle taxe.
Mais quand gauche et droite sont d'accord
sur ce qui ne paraît pas évident à tous,
c'est par définition même que l'intérêt de la classe politique unie
s'oppose à celui de la société civile.
C'est ainsi que les politiques bipartisanes sont les plus liberticides.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:145837</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/145837.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=145837"/>
    <title>Moins que rien!</title>
    <published>2009-07-30T01:00:26Z</published>
    <updated>2009-07-30T10:49:09Z</updated>
    <category term="libertarian"/>
    <category term="classes"/>
    <category term="socialism"/>
    <category term="fr"/>
    <category term="revolution"/>
    <content type="html">&lt;p align="justify"&gt;
Les policiers se plaignent
&lt;a href="http://www.lemonde.fr/societe/article/2009/07/17/nous-les-policiers-on-nous-traite-comme-des-moins-que-rien_1219754_3224.html"&gt;d'être traités comme des moins que rien&lt;/a&gt;.
Or, ils le sont à juste titre.
Car en tant que classe,
les policiers &lt;em&gt;sont&lt;/em&gt; des moins que rien:
des larbins de l'état.
Ils sont donc traités comme que de droit,
tout particulièrement par les populations les plus opprimées par l'état.
&lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;p align="justify"&gt;
Vivement que le monopole de la police,
principalement employée au service du crime légal,
soit complètement remplacé par des polices privées en concurrence,
au service de la défense des honnêtes gens.
D'ores et déjà, de nombreux particuliers et de nombreuses entreprises
font appel à des compagnies de sécurités privées.
Moins chères et plus efficaces que la police nationale,
elles sont là où on a besoin d'elles quand on a besoin d'elles,
et non pas comme les monopolistes
pour inspecter les travaux finis des criminels,
ni surtout pour agir de façon contreproductive:
faire poireauter les témoins et mariner les victimes
pour enregistrer leur histoire sans rien faire,
sauf parfois à forcer les innocents de payer gîte et couvert
aux coupables dans des écoles du crime,
voire d'y envoyer des innocents.
Les polices privées défendent les victimes
plutôt que de les désarmer et de les opprimer.
Et sans privilège d'état, elles ne se permettent pas d'abuser de
leur pouvoir envers des innocents,
sous peine de réparation des dommages avec intérêts.
&lt;/p&gt;&lt;p align="justify"&gt;
Il en va pour les enseignants comme pour les policiers.
En tant que classe,
ce sont des larbins dont l'unique objet est
le lavage de cerveau à la sauce républicaine.
Quelques honnêtes gens par ci par là ne changent pas
cette tendance générale, ni la nature profonde de leur boulot.
Enseigner les maths? Non.
Transmettre les bases de la rationalité,
apprendre à reconnaître, dénoncer et éviter les raisonnement fallacieux?
Que nenni.
Offrir des outils pertinents pour la future vie
professionnelle, personnelle, civile ou militaire des élèves?
Pas du tout.
La rigueur dans l'abstraction, l'esthétique dans la représentation,
l'épistémologie derrière le formalisme?
À la trappe.
Dégoûter des maths avec des exercices stupides et abrutissants
d'où toute valeur a été évacuée, si.
Ne transmettre aux élèves que la conformité à l'ordre imposé,
l'habituation à la manipulation de formalismes vides, oui.
Donner un air d'autorité à tout ce qui se fait
avec chiffres et symboles,
précisément.
C'est ainsi que même dans la matière censément la plus objective,
on prépare au respect
pour la numérologie enseignée sous les doux noms
de "sciences économiques et sociales",
d'"histoire-géographie"
et maintenant de "climatologie",
toutes pseudo-sciences par lesquelles
les hommes de l'état justifient leurs prochaines spoliations.
&lt;/p&gt;&lt;p align="justify"&gt;
Le meilleur des profs ne peut pas faire grand'chose
contre les années avant et après lui,
et sera puni s'il sort
de la bouillie bureaucratique appelée "programme",
voire pire s'y oppose ouvertement.
Idem pour le meilleur des flics qui voudrait défendre la justice
plutôt que de faire marcher le système,
et ne pensons même pas à celui qui voudrait défendre la justice
&lt;em&gt;contre&lt;/em&gt; le système.
&lt;/p&gt;&lt;p align="justify"&gt;
Selon la théorie libérale des classes sociales,
dans tous pays il y a essentiellement deux classes:
la classe dominante,
constituée de ceux qui profitent du pouvoir
(recevant impôts ou taxes para-fiscales, dividendes d'un monopole légal,
privilèges exorbitants, etc.)
et la classe dominée, constituée de
ceux qui paient de gré ou de force ce que les précédent reçoivent,
dans le jeu à somme négative de l'interaction politique.
&lt;/p&gt;&lt;p align="justify"&gt;
Bien sûr, dans la variante corrompue par Marx
dont nous serine la propagande nationale socialiste,
la distinction entre dominant et dominée est remplacée
par une bouillie dénuée de sens,
dont le principe est qu'est dénoncé comme "dominant"
les victimes désignées produisant ou possédant des ressources à piller,
et quiconque se met en travers des projets spoliateurs des actuels hommes de l'état
ou de ceux aspirant à le devenir.
&lt;/p&gt;&lt;p align="justify"&gt;
Le résultat est bien sûr que les politiciens, bureaucrates, enseignants,
journalistes et autres apparatchiks en position de
désigner victimes et bénéficiaires de la force de monopole public
sont la vraie classe dominante d'aujourd'hui,
les vrais ennemis de classe de nous autres les opprimés,
la vraie engeance à extirper —
en les
&lt;a href="http://unqualified-reservations.blogspot.com/2008/06/ol8-reset-is-not-revolution.html"&gt;lustrant&lt;/a&gt; et non en les liquidant,
car contrairement aux socialistes,
nous n'exaltons pas le meurtre politique
sous les "doux" nom de
"&lt;a href="http://fare.livejournal.com/127797.html"&gt;révolution&lt;/a&gt;".
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:145607</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/145607.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=145607"/>
    <title>Les routes de la servitude</title>
    <published>2009-07-29T14:42:34Z</published>
    <updated>2009-07-31T11:49:56Z</updated>
    <category term="mathematics"/>
    <category term="teaching"/>
    <category term="fr"/>
    <category term="statism"/>
    <category term="libertarian"/>
    <category term="education"/>
    <category term="fallacies"/>
    <category term="economics"/>
    <category term="roads"/>
    <category term="argument"/>
    <category term="anarchism"/>
    <content type="html">&lt;p align="justify"&gt;
Mon ami Bernhard m'envoie un lien vers un article prétendant dénoncer
&lt;a href="http://images.math.cnrs.fr/Le-prix-de-l-anarchie.html"&gt;le prix de l'anarchie&lt;/a&gt; par des modèles mathématiques.
&lt;/p&gt;&lt;p align="justify"&gt;
Cet article est tellement faux que j'ai du mal à imaginer comment
un auteur apparemment intelligent et capable de raisonnement logique
peut amonceller autant de sophismes.
Comme quoi, le formalisme logique détaché du réel n'est pas la raison,
mais la ratiocination des superstitions irrationnelles.
&lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;p align="justify"&gt;
D'abord l'hypothèse implicite est comme d'habitude
que l'état est une entité
supérieure bienveillante dont le prix est nul.
Pourtant, le prix de l'état est
&lt;a href="http://fare.tunes.org/liberalisme/regne_magie_noire.html#footnote13"&gt;prouvablement élevé&lt;/a&gt;.
Mais faire des pseudo-comparaisons à sens unique,
c'est l'essence même du
&lt;a href="http://fare.tunes.org/liberalisme/raisonnement_economique.html"&gt;sophisme comptable&lt;/a&gt; à la base de toutes les tromperies étatiques.
&lt;/p&gt;&lt;p align="justify"&gt;
Ensuite, l'auteur ne comprend visiblement pas la différence entre
anarchie (absence de chef) et anomie (absence de règles),
alors que l'arbitraire politique est précisément l'anomie
cependant que des règles objectives se passent de chef.
Ainsi, dans un système libéral, les routes et les ponts
ont des
&lt;a href="http://www.quebecoislibre.org/04/040915-5.htm"&gt;propriétaires&lt;/a&gt;
qui peuvent émettre les règles pour
l'utilisation de leur propriété bien plus fines et utiles
que l'interdiction pure et simple que propose notre mathématicien.
Par exemple, mettre un péage avant l'accès au pont.
Il n'est pas interdit de se renseigner sur la nature des positions
que l'on prétend critiquer
avant de se lancer dans des divagations sans fondement.
Mais l'honnêteté intellectuelle n'est pas ce qui étouffe
nos étatistes d'enseignants en mathématique;
il ne suffit pas pour cela d'appliquer la règle apprise dans
l'exercice 5.7.11 du bouquin officiel au programme,
et le chien méchant mais pas si bête mordra les prisonniers récalcitrants du goulag plutôt que la main du KGBiste qui le nourrit.
&lt;/p&gt;&lt;p align="justify"&gt;
Enfin, notre idiot utile du totalitarisme rouge
pourrait se demander en quoi il s'agit d'un
&lt;a href="http://fare.tunes.org/liberalisme/regne_magie_noire.html#SECTION_2"&gt;"bien public"&lt;/a&gt;
que de vouloir à tout prix subventionner les automobilistes
à coup de routes construites avec de l'argent volé aux non-automobilistes.
Et ce d'autant moins quand la face verte de son totalitarisme
le conduira ailleurs à se plaindre qu'il y a trop d'automobilistes.
&lt;/p&gt;&lt;p align="justify"&gt;
En fin de compte, là comme ailleurs,
il n'y a rien que la volonté totalitaire
de tout contrôler via un état-nation auquel on s'identifie
par un acte de foi stupide,
au nom de ce qu'il incarnerait la société -
identification qui est l'essence même du national-socialisme.
Ainsi, du plus petit abrutisseur par exercices écervelants
au directeur de recherche au CNRS (excusez du peu),
nos profs de maths d'être fiers de participer au lavage de cerveau
par lequel on enseigne le nazisme à l'école publique.
L'état a des chiens de garde
qui bavent en mordant les prisonniers révoltés,
et d'autres qui glosent avec des symboles mathématiques
pour noyer la critique
sous la morgue d'une autorité pseudo-scientifique.
Mais un chien est un chien.
&lt;/p&gt;&lt;p align="justify"&gt;
&lt;u&gt;PS&lt;/u&gt;:
encore une fois, je me suis emporté un peu vite contre l'auteur.
Car s'il répète les modèles trompeurs de charlatans,
il inclut un paragraphe d'avertissement sur la différence entre le sens arbitraire des mots en mathématiques et les concepts réels que dénotent communément ces mots.
Mes plates excuses à lui donc,
il ne fait pas partie de ces trop nombreux
chiens de garde du totalitarisme
(parmi lesquels certains des auteurs qu'il cite),
même s'il reprend leurs mots sans les élucider.
&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:fare:145402</id>
    <link rel="alternate" type="text/html" href="http://fare.livejournal.com/145402.html"/>
    <link rel="self" type="text/xml" href="http://fare.livejournal.com/data/atom/?itemid=145402"/>
    <title>Pot surprise!</title>
    <published>2009-07-29T01:35:57Z</published>
    <updated>2009-07-29T09:14:08Z</updated>
    <category term="travel"/>
    <category term="reception"/>
    <category term="fr"/>
    <category term="paris"/>
    <content type="html">&lt;p align="justify"&gt;Vous qui me lisez êtes tous invités à un pot chez mes parents (Paris 16ème) ce Vendredi 31 juillet 2009 à partir de 18h! Apportez à manger ou commandez votre repas. RSVP avec nombre de personnes pour les coordonnées précises si vous ne les avez pas encore.&lt;/p&gt;</content>
  </entry>
</feed>
