<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Advogato blog for slamb</title>
    <link>http://www.advogato.org/person/slamb/</link>
    <description>Advogato blog for slamb</description>
    <language>en-us</language>
    <generator>mod_virgule</generator>
    <pubDate>Wed, 22 May 2013 13:28:40 GMT</pubDate>
    <item>
      <pubDate>Fri, 21 Sep 2007 22:17:34 GMT</pubDate>
      <title>21 Sep 2007</title>
      <link>http://www.advogato.org/person/slamb/diary.html?start=64</link>
      <guid>http://www.advogato.org/person/slamb/diary.html?start=64</guid>
      <description>&lt;b&gt;&lt;a&#xD;
href="http://www.advogato.org/person/Akira/diary/73.html"&gt;akira&lt;/a&gt;,&#xD;
re: deleting code&lt;/b&gt;&#xD;
&#xD;
&lt;p&gt; &lt;blockquote&gt;&#xD;
One of my most productive days was throwing away 1000 lines&#xD;
of code.&lt;br&gt;&#xD;
--&lt;br&gt;&#xD;
Ken Thompson&#xD;
&lt;/blockquote&gt;&#xD;
&#xD;
&lt;p&gt; Interesting. One of my most productive days was throwing&#xD;
away 15000 lines of code.&#xD;
&#xD;
&lt;p&gt; &lt;p&gt;A consequence of the increased scale of systems? Maybe;&#xD;
probably also apples and oranges. These 15000 lines of code&#xD;
were written by a poorly supervised contractor, and Ken&#xD;
Thompson's 1000 lines were probably his own work.</description>
    </item>
    <item>
      <pubDate>Fri, 8 Jun 2007 23:49:48 GMT</pubDate>
      <title>8 Jun 2007</title>
      <link>http://www.advogato.org/person/slamb/diary.html?start=63</link>
      <guid>http://www.advogato.org/person/slamb/diary.html?start=63</guid>
      <description>&lt;b&gt;spam flags&lt;/b&gt;&#xD;
&#xD;
&lt;p&gt; I mentioned before that Thunderbird and Mail.app have slightly different flags &#xD;
for indicating that a message is ham rather than spam. Well, their interaction &#xD;
seemed to be even weirder than that alone would explain - if a message was &#xD;
marked as not junk in Mail.app, no attempt to mark it as junk in Thunderbird &#xD;
would stick. Look for &lt;a&#xD;
href="http://lxr.mozilla.org/mailnews/search?string=NonJunk"&gt;NonJunk&#xD;
&lt;/a&gt; and you'll find this (reformatted to fit your television):&#xD;
&#xD;
&lt;p&gt; &lt;pre&gt;&#xD;
PRBool messageClassified = PR_TRUE;&#xD;
...&#xD;
if (FindInReadable(NS_LITERAL_CSTRING("NonJunk"), keywords...)&#xD;
  mDatabase-&amp;gt;SetStringProperty(uidOfMessage, "junkscore", "0");&#xD;
// Mac Mail uses "NotJunk"&#xD;
else if (FindInReadable(NS_LITERAL_CSTRING("NotJunk"), keywords...)&#xD;
  mDatabase-&amp;gt;SetStringProperty(uidOfMessage, "junkscore", "0");&#xD;
// ### TODO: we really should parse the keywords into&#xD;
// space delimited keywords before checking&#xD;
else if (FindInReadable(NS_LITERAL_CSTRING("Junk"), keywords...)&#xD;
{&#xD;
  PRUint32 newFlags;&#xD;
  dbHdr-&amp;gt;AndFlags(~MSG_FLAG_NEW, &amp;amp;newFlags);&#xD;
  mDatabase-&amp;gt;SetStringProperty(uidOfMessage, "junkscore", "100");&#xD;
}&#xD;
else&#xD;
  messageClassified = PR_FALSE;&#xD;
&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt; On startup, Thunderbird says that a message is not junk if Mail.app said it &#xD;
was NotJunk. When marking a message as Junk, it doesn't clear Mail.app's &#xD;
NotJunk flags. Brilliant! How could this plan possibly fail?&#xD;
&#xD;
&lt;p&gt; What annoys me is that Thunderbird added this feature after Mail.app but &#xD;
made a subtle change that broke interoperability. Then they realized their &#xD;
parsing sucked and they were interpreting Mail.app's NotJunk as saying Junk. &#xD;
They fixed it with this hack job and the bug popped up elsewhere - now &#xD;
Thunderbird's attempt to change the marking to junk won't stay across &#xD;
restarts. A little forethought and there wouldn't have been this mess.</description>
    </item>
    <item>
      <pubDate>Fri, 8 Jun 2007 04:23:37 GMT</pubDate>
      <title>8 Jun 2007</title>
      <link>http://www.advogato.org/person/slamb/diary.html?start=62</link>
      <guid>http://www.advogato.org/person/slamb/diary.html?start=62</guid>
      <description>&lt;b&gt;Training server-side Bayesian filters&lt;/b&gt;&#xD;
&#xD;
&lt;p&gt; Last night I worked on an unobtrusive way to train SpamAssassin's Bayesian &#xD;
database. (Autotraining sure spam and ham as it's delivered is nice, but you &#xD;
at least need a way of correcting its mistakes or it will keep making them.) &#xD;
The &lt;a&#xD;
href="http://spamassassin.apache.org/full/3.1.x/doc/sa-learn.html"&gt;&#xD;
sa-learn&lt;/a&gt; utility is quite easy to use, but how do you specify what &#xD;
messages to feed to it? I haven't seen any good glue for this. You want to &#xD;
feed it messages which have been examined and categorized, and ideally you &#xD;
want to feed it each message exactly once. (&lt;tt&gt;sa-learn&lt;/tt&gt; does realize &#xD;
that it's seen a message before, but it still takes some processing time to do &#xD;
even that.)&#xD;
&#xD;
&lt;p&gt; I decided to harness the power of &lt;a&#xD;
href="http://www.ietf.org/rfc/rfc2060.txt"&gt;RFC 2060&lt;/a&gt;. My trainer &#xD;
connects via IMAP4rev1, executes a &lt;tt&gt;SEARCH&lt;/tt&gt; command for &#xD;
candidates (letting the server do the work of an arbitrarily complex query), &#xD;
downloads the messages and pipes them through &lt;tt&gt;sa-learn&lt;/tt&gt;, flags &#xD;
them as learned (so the next search will skip them), and disconnects. I &#xD;
implemented it using &lt;a&#xD;
href="http://imapfilter.hellug.gr/"&gt;imapfilter&lt;/a&gt;, and so far it works quite &#xD;
well. This approach would even work well if the SpamAssassin machine were &#xD;
separate from the mail store machine.&#xD;
&#xD;
&lt;p&gt; In the process, I noticed that Thunderbird updates spam status on the IMAP &#xD;
server in the &lt;tt&gt;Junk&lt;/tt&gt; and &lt;tt&gt;NonJunk&lt;/tt&gt; keywords. Mail.app does &#xD;
the same, in the &lt;tt&gt;Junk&lt;/tt&gt; and &lt;tt&gt;NotJunk&lt;/tt&gt; keywords (plus a few &#xD;
others). Did you see it? One uses &lt;tt&gt;No&lt;b&gt;n&lt;/b&gt;Junk&lt;/tt&gt;, the other&#xD;
&lt;tt&gt;No&lt;b&gt;t&lt;/b&gt;Junk&lt;/tt&gt;. How hard would it have been to get these guys &#xD;
in a room to fight this one out? Grr. They have a weird interaction because &#xD;
they just didn't put any thought into it.&#xD;
&#xD;
&lt;p&gt; I also tried out &lt;a href="http://www.lua.org/" &gt;Lua&lt;/a&gt; for the first time, as &#xD;
it's imapfilter's extension language. Turns out I hate it. I really wanted to like &#xD;
it. I had been thinking of using it all over an embedded product for rapid &#xD;
development with little resources. It's &lt;a href="http://www.lua.org/manual/5.1/manual.html#8" &gt;minimalist&lt;/a&gt;, &#xD;
fast, and so on. But it's just unpleasant to use. Maybe it's  &#xD;
&lt;i&gt;too&lt;/i&gt; minimalist. I would have liked a separate array type (rather than &#xD;
just "tables" / associate arrays), and I hate "high-level" languages without &#xD;
exceptions. imapfilter's library is also a bit limiting - its &#xD;
&lt;tt&gt;fetch_message&lt;/tt&gt; and &lt;tt&gt;pipe_to&lt;/tt&gt; do everything in memory. &#xD;
That makes me more irritated that Lua doesn't just have an array slice syntax &#xD;
I can use to pass message lists to &lt;tt&gt;fetch_message&lt;/tt&gt;. And it means I &#xD;
have to spawn &lt;tt&gt;sa-learn&lt;/tt&gt; a bunch of times for reasonable memory &#xD;
consumption, and starting a Perl process heavy with modules takes a long &#xD;
time.&#xD;
&#xD;
&lt;p&gt; I might end up rewriting my trainer in Python using either &lt;a&#xD;
href="http://docs.python.org/lib/module-imaplib.html"&gt;imaplib&lt;/a&gt; and &#xD;
&lt;a href="http://docs.python.org/lib/module-&#xD;
subprocess.html" &gt;subprocess&lt;/a&gt; or &lt;a href="http://twistedmatrix.com/documents/current/api/&#xD;
twisted.mail.imap4.html" &gt;twisted.mail.imap4&lt;/a&gt; and &lt;a&#xD;
href="http://twistedmatrix.com/documents/current/api/&#xD;
twisted.internet.process.html"&gt;twisted.internet.process&lt;/a&gt;. I'm not real &#xD;
impressed with either mail API, though. I like the &lt;a href="http://&#xD;
java.sun.com/products/javamail/" &gt;JavaMail&lt;/a&gt; API better, but forking and &#xD;
interacting with child processes from Java (or even &lt;a&#xD;
href="http://www.jython.org/"&gt;Jython&lt;/a&gt;) sounds painful.</description>
    </item>
    <item>
      <pubDate>Wed, 2 May 2007 22:02:05 GMT</pubDate>
      <title>2 May 2007</title>
      <link>http://www.advogato.org/person/slamb/diary.html?start=61</link>
      <guid>http://www.advogato.org/person/slamb/diary.html?start=61</guid>
      <description>&lt;b&gt;&lt;a href="http://www.advogato.org/person/clarkbw/diary.html?&#xD;
start=106" &gt;clarkbw&lt;/a&gt;, re: security choices&lt;/b&gt;&#xD;
&#xD;
&lt;p&gt; &lt;blockquote&gt;C. You are connected to a site pretending to be &#xD;
www.url.com &amp;hellip;&#xD;
Something evil could be going on! Someone might be trying to trick you! &#xD;
Though odds are this isn&amp;rsquo;t true, it&amp;rsquo;s likely that guilt or the legal &#xD;
department &#xD;
required us to put this dialog up just for this case.&lt;/blockquote&gt;&#xD;
&#xD;
&lt;p&gt; No, no, no, no, no! This text is the &lt;b&gt;entire purpose&lt;/b&gt; of SSL. &#xD;
If it's &#xD;
really unlikely, then thousands of people wouldn't have created an entire &#xD;
ecosystem around validating identities. You have to realize that a private &#xD;
conversation is totally worthless if you don't know who you are talking to, and &#xD;
if nothing warns you when that validation fails, why would you have validation &#xD;
at all? This text wasn't added by lawyers; it was added by people who just &#xD;
spent man-centuries creating cryptosystems which would be absolutely &#xD;
worthless if this text were not displayed.&#xD;
&#xD;
&lt;p&gt; This dialog box shouldn't say "don't worry, this is probably &#xD;
something wrong with their setup. Just go on, send them your credit card &#xD;
number like always." That would defeat the purpose of the system so bady &#xD;
I'm having trouble coming up with an analogy. It's sort of like a policeman &#xD;
seeing someone trying to pick a lock and &lt;b&gt;opening it for them&lt;/b&gt;, then &#xD;
standing by, smiling, as they walk off with all the valuables the lock was &#xD;
protecting. If you downplay the security concerns of sending important &#xD;
information over this link, you're basically telling the lock "sometimes keys &#xD;
screw up, just let him in." (I warned you the analogy sucked.)&#xD;
&#xD;
&lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;p&gt; &lt;b&gt;It should be alarming!&lt;/b&gt; It needs to be alarming &#xD;
enough that if someone goes to their bank's website and sees this dialog &#xD;
box, they won't enter their password. Instead, they'll call their bank on the &#xD;
telephone and tell them that they've spotted fraud. This is the correct action - &#xD;
it's either true or it will get the correct people angry at the security people &#xD;
who screwed up the configuration. It's very rare for a major bank to totally &#xD;
botch their security setup like this.&#xD;
&#xD;
&lt;p&gt; On the other hand, it shouldn't be so alarming that it will prevent people from &#xD;
browsing some random untrusted website which they have no intention of &#xD;
sending important information to. It's not uncommon for people to require &#xD;
SSL on a site, not bother paying the money to have it signed by a widely-&#xD;
trusted CA, and have instructions for people with particularly sensitive &#xD;
passwords to import the certificate into their browser. That's not a site &#xD;
configuration problem, either - it's a "you haven't given the computer a way &#xD;
to verify their identity" problem.&#xD;
&#xD;
&lt;p&gt; I agree that examining a certificate and finding the problem is unrealistic for &#xD;
most people. Maybe the details of the certificate should be in an "Advanced" &#xD;
pull-out or something.</description>
    </item>
    <item>
      <pubDate>Wed, 2 May 2007 00:07:26 GMT</pubDate>
      <title>2 May 2007</title>
      <link>http://www.advogato.org/person/slamb/diary.html?start=60</link>
      <guid>http://www.advogato.org/person/slamb/diary.html?start=60</guid>
      <description>&lt;b&gt;&lt;a href="http://www.advogato.org/person/clarkbw/diary.html?&#xD;
start=105" &gt;clarkbw&lt;/a&gt;, re: security choices&lt;/b&gt;&#xD;
&#xD;
&lt;p&gt; I'm not convinced there's a problem with the status quo. For the 90% of people &#xD;
you describe, the SSL certificate dialog box comes down to this:&#xD;
&#xD;
&lt;p&gt; &lt;blockquote&gt;Your connection to &lt;tt&gt;www.bigbank.com&lt;/tt&gt; is insecure. It's &#xD;
likely that people are trying to steal your money.&#xD;
&#xD;
&lt;p&gt; Give them my money | Cancel&lt;/blockquote&gt;&#xD;
&#xD;
&lt;p&gt; My parents don't understand X.509 PKI, but they do understand that they care if &#xD;
a connection is secure if and only if they plan to send financial credentials over &#xD;
it. They know - and the computer doesn't - what information they are planning &#xD;
to send. Thus, they are capable of responding to this dialog correctly 100% of &#xD;
the time. Choosing either option for them would be right less than 100% of the &#xD;
time. A complicated voting scheme would be right less than 100% of the time.</description>
    </item>
    <item>
      <pubDate>Tue, 10 Apr 2007 00:01:51 GMT</pubDate>
      <title>10 Apr 2007</title>
      <link>http://www.advogato.org/person/slamb/diary.html?start=59</link>
      <guid>http://www.advogato.org/person/slamb/diary.html?start=59</guid>
      <description>&lt;b&gt;&lt;a href="http://www.advogato.org/person/apenwarr/diary.html?&#xD;
start=265" &gt;apenwarr&lt;/a&gt;, re: tabbed MDI&lt;/b&gt;&#xD;
&#xD;
&lt;p&gt; &lt;blockquote&gt;Tabbed browsing is [...] less flexible [than MDI], because &#xD;
there's &#xD;
no way to display two documents side-by-side. Imagine if Photoshop used &#xD;
tabbing between images: useless! (In fairness, the hybrid model used in &#xD;
Firefox, &#xD;
where you can open a new window or a new tab, is a really good balance. I &#xD;
just &#xD;
wish there was an easy way to "convert this tab into a window" or vice versa.)&#xD;
&lt;/blockquote&gt;&#xD;
&#xD;
&lt;p&gt; That's not a fundamental limitation of tabbed MDI. Do you have a Mac? Open &#xD;
&lt;a href="http://www.adiumx.com/" &gt;Adium&lt;/a&gt; and with a couple &#xD;
conversations. &#xD;
You can drag the tabs - not only to rearrange them within a window, but also &#xD;
to drag one out of one window into another and back. It's intuitive and even &#xD;
has nice eye candy. (IIRC gaim has this same feature, though it doesn't look &#xD;
as nice.) I'd post a trendy screencapture video if I knew how to do such things &#xD;
easily. Every now and then I try to do it in Safari or Firefox and am &#xD;
disappointed that it doesn't work.</description>
    </item>
    <item>
      <pubDate>Sat, 24 Mar 2007 17:43:57 GMT</pubDate>
      <title>24 Mar 2007</title>
      <link>http://www.advogato.org/person/slamb/diary.html?start=58</link>
      <guid>http://www.advogato.org/person/slamb/diary.html?start=58</guid>
      <description>&lt;b&gt;&lt;a href="http://www.advogato.org/person/haruspex/diary.html?&#xD;
start=255" &gt;haruspex&lt;/a&gt;&lt;/b&gt;&#xD;
&#xD;
&lt;p&gt; I read the manual. Ironically, you did what you accused me of - not reading fully &#xD;
before complaining. Read my full post, and you'll see a mention of bison and &#xD;
(not coincidentally) the same bison pattern rule found in the GNU make manual. &#xD;
Unfortunately, those tools are not universally available, and this particular &#xD;
project is developed by a lot of BSD people. I anticipate requiring GNU make and &#xD;
bison would be a hard sell.</description>
    </item>
    <item>
      <pubDate>Sat, 24 Mar 2007 10:12:13 GMT</pubDate>
      <title>24 Mar 2007</title>
      <link>http://www.advogato.org/person/slamb/diary.html?start=57</link>
      <guid>http://www.advogato.org/person/slamb/diary.html?start=57</guid>
      <description>&lt;b&gt;make oddities&lt;/b&gt;&#xD;
&#xD;
&lt;p&gt; I'm trying to correctly express the dependencies for running yacc, which &#xD;
produces multiple targets from a single invocation. Let's start with a rule from &#xD;
racoon2's &lt;tt&gt;lib/Makefile.in&lt;/tt&gt;:&#xD;
&#xD;
&lt;p&gt; &lt;pre&gt;&#xD;
.y.c:&#xD;
        $(YACC) $(YFLAGS) $&amp;lt;&#xD;
        mv -f y.tab.c cfparse.c&#xD;
&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt; There are three problems with this:&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;it has a hardcoded filename in a pattern rule,&#xD;
&lt;li&gt;it has an intermediate file with a generic filename, which causes &#xD;
problems when run in parallel. I use &lt;tt&gt;make -j4&lt;/tt&gt;...this gets run in &#xD;
parallel if there are multiple &lt;tt&gt;.y&lt;/tt&gt; files, and in a non-obvious case I'll &#xD;
mention below&#xD;
&lt;li&gt;It doesn't mention the &lt;tt&gt;y.tab.h&lt;/tt&gt; target that other files &#xD;
(&lt;tt&gt;cftoken.o&lt;/tt&gt;) depend on.&#xD;
&lt;/ul&gt;&#xD;
&#xD;
&lt;p&gt; As far as I see, there's no way to express to make the generic intermediate &#xD;
file problem. The best you could do is to use &lt;tt&gt;lockfile(1)&lt;/tt&gt;. But it's not &#xD;
universally available, and if I'm going to try convincing a project to switch to &#xD;
tools not universally available, I might as well just try for &lt;tt&gt;bison&lt;/tt&gt;, &#xD;
which produces unique filenames directly. Now my rule can look like this:&#xD;
&#xD;
&lt;p&gt; &lt;pre&gt;&#xD;
%.tab.c %.tab.h: %.y&#xD;
	$(BISON) $(YFLAGS) $&amp;lt;&#xD;
&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt; This works under GNU make, and &lt;i&gt;almost&lt;/i&gt; works under BSD make. &#xD;
The problem there is that it's run twice. Easy to see with a test file:&#xD;
&#xD;
&lt;p&gt; &lt;pre&gt;&#xD;
.PHONY: all&#xD;
all: foo.out1 foo.out2&#xD;
&#xD;
&lt;p&gt; %.out1 %.out2: %.in&#xD;
	lockfile -r0 mylock&#xD;
	touch $*.out1 $*.out2&#xD;
	sleep 1&#xD;
	rm -f mylock&#xD;
&#xD;
&lt;p&gt; clean:&#xD;
	rm -f mylock foo.out[12]&#xD;
&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt; It works with &lt;tt&gt;gmake&lt;/tt&gt; but fails with &lt;tt&gt;bsdmake&lt;/tt&gt;. And here's &#xD;
something odd: replace that pattern rule with a static one...&#xD;
&#xD;
&lt;p&gt; &lt;pre&gt;&#xD;
foo.out1 foo.out2: foo.in&#xD;
	lockfile -r0 mylock&#xD;
	touch foo.out1 foo.out2&#xD;
	sleep 1&#xD;
	rm -f lock&#xD;
&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt; ...and GNU make fails, too. A non-intuitive difference between static and &#xD;
pattern rules: static rules use multiple targets on a line to say that both &#xD;
targets are made with similar commands (but different &lt;tt&gt;$@&lt;/tt&gt;), while a &#xD;
pattern one says that both targets are made with the exact same invocation.&#xD;
&#xD;
&lt;p&gt; What about cheating by making one target depend on another?&#xD;
&#xD;
&lt;p&gt; &lt;pre&gt;&#xD;
%.tab.c: %.y&#xD;
	$(BISON) $(YFLAGS) $&amp;lt;&#xD;
&#xD;
&lt;p&gt; %.tab.h: %.tab.c&#xD;
&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt; I thought about it, but there's no guarantee the targets are produced in a &#xD;
particular order, and if they happen in the one opposite what I give, it will &#xD;
rebuild. It might end up doing that over and over again if my choice is &#xD;
consistently wrong.&#xD;
&#xD;
&lt;p&gt; I guess what I can do is make &lt;tt&gt;cftoken.o&lt;/tt&gt; depend on &#xD;
&lt;tt&gt;cfparse.tab.c&lt;/tt&gt;, as a surrogate for &lt;tt&gt;cfparse.tab.h&lt;/tt&gt;. It's silly, &#xD;
but it works.&#xD;
&#xD;
&lt;p&gt; My conclusion: make sucks, and GNU make sucks a little less than most. But I &#xD;
guess I already knew that from &lt;a href="http://miller.emu.id.au/pmiller/&#xD;
books/rmch/?ref=DDiyet.Com" &gt;Recursive Make Considered Harmful&lt;/a&gt;. &#xD;
(Besides making the argument you'd expect from the title, it has some good &#xD;
points like how GNU make's reparsing of changed include files put it a step &#xD;
above the rest.)</description>
    </item>
    <item>
      <pubDate>Sun, 11 Mar 2007 07:32:25 GMT</pubDate>
      <title>11 Mar 2007</title>
      <link>http://www.advogato.org/person/slamb/diary.html?start=56</link>
      <guid>http://www.advogato.org/person/slamb/diary.html?start=56</guid>
      <description>&lt;b&gt;&lt;a href="http://www.advogato.org/person/lkcl/diary.html?&#xD;
start=366" &gt;lkcl&lt;/a&gt;, re: message passing&lt;/b&gt;&#xD;
&#xD;
&lt;p&gt; First, you're wrong about &lt;tt&gt;rename()&lt;/tt&gt;: it's not atomic. There is an &#xD;
intermediate step that processes can see. From the Linux manpage:&#xD;
&#xD;
&lt;p&gt; &lt;blockquote&gt;&#xD;
       However, when overwriting there will probably be a window in which &#xD;
both&#xD;
       oldpath and newpath refer to the file being renamed.&#xD;
&lt;/blockquote&gt;&#xD;
&#xD;
&lt;p&gt; (The atomicity people say it provides is carefully limited...&lt;tt&gt;newpath&lt;/tt&gt; &#xD;
either refers to the old file or the new file. That's generally all you need.)&#xD;
&#xD;
&lt;p&gt; Second, your statement that Linux lacks message passing and atomic &#xD;
operations is false. Linux has many forms of message &#xD;
passing between processes/threads - pipes/FIFOs/sockets, POSIX message &#xD;
queues, etc, and they are entirely suitable for the task &lt;a href="http://&#xD;
www.advogato.org/person/pphaneuf/diary.html?start=312" &gt;pphaneuf asked &#xD;
about&lt;/a&gt;. I'm not sure what atomicity guarantee he'd need that Linux &#xD;
doesn't provide. You call &lt;tt&gt;write()&lt;/tt&gt; to send a byte on a wake-up pipe, &#xD;
and that byte is either in the buffer or it's not. There's no intermediate state; &#xD;
therefore, it is atomic. What more do you want? Block until the other process/&#xD;
thread has actually grabbed the byte? Why? You can build that if desired.&#xD;
&#xD;
&lt;p&gt; Third, your mention of microkernels is a nonsequitur. I find Tanenbaum's &#xD;
work, and the &lt;a href="http://os.inf.tu-dresden.de/L4/" &gt;L4&lt;/a&gt; project &#xD;
you're alluding to by mentioning those universities, to be quite interesting. &#xD;
However, microkernels are not necessary to provide any particular IPC facility &#xD;
for userspace processes to communicate amongst themselves.</description>
    </item>
    <item>
      <pubDate>Fri, 9 Feb 2007 08:11:35 GMT</pubDate>
      <title>9 Feb 2007</title>
      <link>http://www.advogato.org/person/slamb/diary.html?start=55</link>
      <guid>http://www.advogato.org/person/slamb/diary.html?start=55</guid>
      <description>&lt;a href="http://www.advogato.org/person/ncm/diary.html?&#xD;
start=163" &gt;ncm&lt;/a&gt;, here are five tidbits you probably didn't know about &#xD;
me:&#xD;
&#xD;
&lt;p&gt; &lt;ol&gt;&#xD;
&lt;li&gt;I first learned about the Internet by dialing &lt;a href="http://&#xD;
www.iscabbs.com/" &gt;ISCABBS&lt;/a&gt; through my dad's dual-speed 300/1200 &#xD;
baud modem when I was 10.&#xD;
&#xD;
&lt;p&gt; &lt;li&gt;My official major in college was electrical engineering then computer &#xD;
science, but my favorite classes and professors were in physics. If I hadn't &#xD;
already loved computing for nine years before finding the physics for majors &#xD;
classes, I'd be on a different path today.&#xD;
&#xD;
&lt;p&gt; &lt;li&gt;When I drove from Iowa City to the Bay Area with a carload of belongings, &#xD;
I showed up at the doorstep of &lt;a href="http://www.spy.net/&#xD;
~dustin/" &gt;good&lt;/a&gt;  &lt;a href="http://bleu.west.spy.net/&#xD;
~noelani/" &gt;friends&lt;/a&gt; I met through ISCABBS. I'd never been to Northern &#xD;
California or met them in person, and I lived with them for the next year.&#xD;
&#xD;
&lt;p&gt; &lt;li&gt;I was once nearly thrown in a Tanzanian jail. The Arusha and Serengeti &#xD;
offices of Tanzanian Immigration and Customs disagree on the legality of my &#xD;
crossing the border by bicycle from Kenya so far from an official border post. &#xD;
I probably shouldn't have taken the advice of a Kenyan who'd spent three &#xD;
days in Egyptian military custody for entering without a visa.[*]&#xD;
&#xD;
&lt;p&gt; &lt;li&gt;During that crossing, my friends and I went through a dozen inner tubes &#xD;
and two dozen patches before running out twelve kilometers from our &#xD;
destination and walking. Three days cycling from Karen, Kenya to Loliondo, &#xD;
Tanzania - much of it on a rocky, hilly, windy earthen path that diverged &#xD;
wildly from our map - will do that. We had to bum a 450 km ride to Arusha &#xD;
where we could get replacements. Probably the stupidest thing I've ever done, &#xD;
but the trip was one of the greatest experiences of my life. The people were &#xD;
kind, generous, and amazing in the truest sense of the word.&#xD;
&lt;/ol&gt;&#xD;
&#xD;
&lt;p&gt; [*] "What did you &lt;i&gt;see&lt;/i&gt;?" "Camels and sand. Camels and sand. What do &#xD;
&lt;i&gt;you&lt;/i&gt; see?" But all worked out for him, too - he met his wife in Egypt.</description>
    </item>
  </channel>
</rss>
