Fresh bread, every day.

Mix three cups of wheat flour (not stale), three cups of water, a heaped teaspoon of yeast, and beat with a whisk.

Let this sit a bit — half an hour is great.

Add a heaped teaspoon of salt, and three cups of flour, white or wheat. Knead. Knead well — it is not hard to knead well, but five minutes of vigorous work leaves you with excellent bread.

Put this in the fridge.

When you want bread, rip off a piece pleasant to hold in one hand. Roll it out flat with some flour under it. Don’t squish it around except for the rolling.

Turn a heavy drying pan or griddle on high, with no oil in it. When it’s reasonably warm, throw your flat piece of bread (which should be seven or eight inches across) on it. When it gets toasty on one side, do the other.

All told, there’s maybe ten minutes work in this. Bread dough easily keeps a week in the fridge if you cover it. It gets better with age to a point, too, so no fear about using it all in a day. Share it. It’s best hot out of the pan, still soft.

Apache must die.

I don’t mean to sound like I’m just harping at the friendly giant that runs most of the web sites on the net, but I have some issues.

First, Apache 2 has some interesting issues with deadlocking when getting sent a restart signal. I can kill my apache so it just hangs all new connections about 7/10 of the time when I run apachectl graceful.

Apache 1 just isn’t as featureful as Apache 2, so backporting my configuration would be painful.

The configuration file is amazingly complicated for some simple things. For example, I have Instiki running on my system, so I use mod_rewrite to direct things from virtualhosts to the instiki service port. The problem comes from lack of templates and the incompleteness of mod_rewrite. It’s not really fair to pin this on the rewrite module, as a real solution requires smarts at all levels and adherence to standards. However, assume in the following that everything is XHTML strict and follows the HTTP spec exactly. I honestly don’t care about supporting older stuff.

<VirtualHost *:80> ServerName wiki.foo.org ServerAlias wiki.bar.org ServerAlias public.baz.org RewriteEngine on RewriteCond %{HTTP_HOST} ([^.]*).([^.]*).(com|net|org) RewriteRule ^/(.*)$ http://instiki.internal:2500/%2/$1 [P] </VirtualHost>

That’s not too unweildy, but imagine it with more complex sets of rewrites (I average 20 per vhost in this project, and I have five slightly-varying vhosts), and more names per vhost (I have over a hundred domains per vhost, since I am somewhat successful in reducing the number of vhosts needed by using clever (and hard to read) rewrites.

First problem: having to bind to *:80, or use an IP in there; I’d like a separate bind statement, like Bind 1.2.3.4:80 and Bind [ffec::1]:80. Really. Let’s get the bindings out of a hundred (yes, really, I use Apache 2’s ability to include directoryfuls of config files heavily) separate files and many hundred vhosts, and into one place so they’re easy to change.

So the vhosts might look like just <VirtualHost>. Now, why should the first instance of the names to associate with the vhost be ServerName and the rest ServerAlias? In fact, in Apache 2, it’s not neccesary, so just use ServerAlias always, and let’s abolish ServerName. Now, let’s add a new directive. TemplateName, taking a string argument. It’ll define an “abstract” virtual host (possibly in addition to making concrete instances for each ServerAlias.

Now, to instantiate one of those templates, let’s use another directive, UseTemplate. It would take a string argument as well, and would copy in any inheritable directives from the vhost where the template was defined.

One other problem here is with mod_rewrite. It’s impossible to define the equivalent of ProxyPassReverse using the proxy support in mod_rewrite. With instiki, that means that it leaks the private internal address to the public whenever a redirect happens. It makes my ruleset double-complicated.

322

I would like to publically state that Verizon Wireless sucks. Not only does their customer service blow you off on occasion, their reception when standing under the freaking tower sucks.

If colcanon had lentils in it,

then it would be something like this. Half an onion, sliced in strips and sauteed. Half a head of cabbage, coarsely shredded. A couple pieces of ginger, a little garlic, a dash of red wine vinegar, a couple small potatoes, cut thin. A cup of lentils. Cover with water and boil into something between stew and soup. Add salt to taste.

320

My week hasn’t been all bad. I just had dinner with my parents and sister, followed by a good phone conversation with Carrie, which was not carried on on cellular phones. We had a choir carol-sing around a bonfire in the town park, and afterward, my family hung around talking to Aleta, which was delightful.

Now perhaps to make some mulled wine and program for a bit, though I might just go to bed. I wish I could make my brain stop when I’m tired. It just isn’t happening lately though.

319

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/121908 makes me warm and fuzzy.

French Onion Soup, Hearty and Vegetarian (but by no means Vegan)

Five onions, half a stick of butter. Slice the onions thin, and sauté on medium heat for a bloody long time — about forty-five minutes, making sure it doesn’t stick. The onions will be distinctly brown after treatment such as this.

Add a quart of water, three-quarters of a cup of pearled barley, half a dried serrano pepper, five allspice, two tablespoons of soy sauce, two drops of liquid smoke (quite optional but delicious), a pinch of rosemary, and a teaspoon of salt.

Simmer until the barley is tender, half an hour or so.

Serve with a grating of goat gouda or gruyère cheese, broiled if you can get it to float that long.

317

Looks like OpenWRT turns up the transmit power to 255 when it starts up on the Linksys WRT54G. Not good…

WiFi IEEE 802.11b/g ESSID:“theinternetco.net” Nickname:“acrux” Mode:Managed Frequency:2.462 GHz Access Point: 00:0F:66:E3:FC:A8 Bit Rate:24 Mb/s Tx-Power=31 dBm Sensitivity=20/200 Retry min limit:8 RTS thr:2347 B Fragment thr:2346 B Encryption key:off Link Quality:255/0 Signal level:-41 dBm Noise level:-7 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Good strong signal … outpaced several orders of magnitude by noise.

After a wl -i eth1 txpwr 40

WiFi IEEE 802.11b/g ESSID:“theinternetco.net” Nickname:“acrux” Mode:Managed Frequency:2.462 GHz Access Point: 00:0F:66:E3:FC:A8 Bit Rate:54 Mb/s Tx-Power=31 dBm Sensitivity=20/200 Retry min limit:8 RTS thr:2347 B Fragment thr:2346 B Encryption key:off Link Quality:16/0 Signal level:-55 dBm Noise level:-126 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Nice and clean!

316

The ZoomQuilt is among the coolest art projects I’ve ever seen. Thanks Erin.

315

Making yet another functional language, re-inventing LISP, is like making square wheels because thirteen-sided ones bother you.

314

I love IPv6. It’s this easy to set up a new host:

root@centauri:~# insmod ipv6 Using /lib/modules/2.4.20/ipv6.o root@centauri:~# ip addr 4: br0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue link/ether 00:0f:66:e3:fc:a6 brd ff:ff:ff:ff:ff:ff inet 172.16.17.245/24 brd 172.16.17.255 scope global br0 inet6 fe80::20f:66ff:fee3:fca6/10 scope link inet6 2001:470:1f01:301:20f:66ff:fee3:fca6/64 scope global dynamic valid_lft 2591997sec preferred_lft 604797sec root@centauri:~# ping6 nbtsc.org PING nbtsc.org (2001:470:1f01:301:208:c7ff:feca:2758): 56 data bytes 64 bytes from 2001:470:1f01:301:208:c7ff:feca:2758: icmp6_seq=0 ttl=64 time=19.3 ms

Add multicast DNS or anycast DNS, get the IANA to register a well-known DNS anycast address, and getting on the internet will require zero configuration, and not require ugly systems like DHCP. There simply won’t be anything to configure.

313

Thank RedHat for RPM.

My computer did some serious evil to itself today. I fixed it in a couple hours, thanks to RPM’s database:

rpm -qa > rpms then for I in cat rpms; do echo $I:; rpm -V $I; done | tee log

Those two commands give a list of what’s damaged and how, and based on that, makes it darn easy to restore stuff.

User data is something else entirely, of course, but there’s a reason I keep that on another drive and make backups…

Compare this to the nearly identical but much more laughable situation I dealt with this afternoon on a customer’s computer. Windows, having no central understandable database of what’s been messed up, nor any way to restore just one corrupt file (unless it’s a DLL or other immutable system file). I spent three hours tracking down the fact that the system registry hive file was damaged, as was the backup, then had to re-install all of windows to make it function again. The only reason it didn’t take ten hours to fix is that this particular customer has three important files: his inbox, his address book and his quicken data store. Nothing else mattered. A re-install took as long as my fixing my own computer did in total, and the damage to mine was far, far worse.

312

Lessig asks questions, Powell evades with the usual.

311

I must say that Instiki isn’t the most efficient wiki implementation I’ve ever seen.

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 32296 aredride 16 0 869m 543m 8224 S 0.0 53.7 14:31.37 ruby 32354 aredride 16 0 869m 543m 8224 S 0.0 53.7 0:00.00 ruby 32355 aredride 15 0 869m 543m 8224 S 0.0 53.7 0:00.07 ruby

How Wikis get spammed

This was in our access log. Nothing removed to protect the guilty, either.

217.8.227.181 - - [26/Nov/2004:02:54:59 -0700] “GET /wiki/NBTSWikiWiki?edit HTTP/1.1” 200 7843 “http://www.google.ru/search?q=wiki++inurl:edit&num=20&hl=ru&lr=&start=120&sa=N” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; dial; .NET CLR 1.1.4322)”

That a GET for the edit page directly, referred by google.ru.

217.8.227.181 - - [26/Nov/2004:02:55:02 -0700] “GET /style.css HTTP/1.1” 200 984 “http://community.nbtsc.org/wiki/NBTSWikiWiki?edit” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; dial; .NET CLR 1.1.4322)”

217.8.227.181 - - [26/Nov/2004:02:55:04 -0700] “GET /wiki.css HTTP/1.1” 200 707 “http://community.nbtsc.org/wiki/NBTSWikiWiki?edit” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; dial; .NET CLR 1.1.4322)”

Getting the style-sheet. Weird, for a robot, but not unheard of. By the user-agent tag, it might be an automated Internet Explorer process. Six seconds.

217.8.227.181 - - [26/Nov/2004:02:55:34 -0700] “POST /wiki/NBTSWikiWiki HTTP/1.1” 302 - “http://community.nbtsc.org/wiki/NBTSWikiWiki?edit” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; dial; .NET CLR 1.1.4322)”

Standard POST, just like all edits. I did not log what fields were filled in, but it might be interesting to see. Thirty seconds. Done by hand?

217.8.227.181 - - [26/Nov/2004:02:55:50 -0700] “GET /wiki/NBTSWikiWiki;1.255 HTTP/1.1” 200 65875 “http://community.nbtsc.org/wiki/NBTSWikiWiki?edit” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; dial; .NET CLR 1.1.4322)”

A GET on the updated page. Probably just because IE does it, not because they’re checking their work. Twenty-five seconds. Or maybe they just have a slow (or distant, they’re coming from Siberia) connection.

Whois says they’re from Siberia, anyway:

inetnum: 217.8.224.0 - 217.8.235.255 netname: SCS-900 descr: Siberian Cellular Systems - 900 descr: GSM provider in Novosibirsk country: RU admin-c: SY27-RIPE tech-c: SY27-RIPE status: ASSIGNED PA notify: hostmaster@scs-900.ru mnt-by: SCS-MNT changed: ip-dbm@ripn.net 20021021 source: RIPE

SORBS says that perhaps that’s a façade:

Address and Port: 217.8.227.181 Record Created: Mon Sep 20 06:39:07 2004 GMT Record Updated: Mon Sep 20 06:39:07 2004 GMT Additional Information: Likely Trojaned Machine, host running Korgo3 trojan Currently active and flagged to be published in DNS