
My name is
David Robins:
Christian, lead developer (resume), writer, photographer, runner,
libertarian (voluntaryist),
and student.
This is also my son David Geoffrey Robins' site.
SCons: I am a convert
News, Technical, School ·Sunday November 8, 2009 @ 15:34 EST (link)
The make utility is venerable. It's also rather simplistic and somewhat crufty. The easy things are easy, but sometimes the hard things are impossible. Despite the many features added to the most common instance of the tool, make GNU make, it becomes inconvenient for all but the simplest projects. So I hunted around for something better for my UW compilers project.
At Hilton (c. 2004), I built a Perl tool—hmake, Hilton make—that leveraged the power of Perl, meaning that all hmake did was run the Perl program Makefile.pl if it was found, after minimal setup (I know CPAN distributions use Makefile.PL but uppercase PL seemed gauche and inconsistent). Makefile.pl was supposed to use the hilton::Make module and provide it a list of targets/dependencies, possibly including Perl code, which would be examined and built optimally depending on what had changed since the last build, just like make. Except hmake had Perl available to do complex target mappings (e.g. database definition files like gst_membership.cfg to perl modules like GstMembership.pm) which weren't possible with standard make. It could also do the usual install tasks etc.
SCons ("A software construction tool") (FAQ) has taken this to the next level. It is built using Python, not Perl, which is fine since I've been writing a few utilities in Python lately anyway, and the language is growing on me. It seems to be actively maintained and reasonably well documented (although apparently the (long) man page is kept more up to date); class documentation; there is also a wiki where I found several helpful nodes including one about the equivalent of make .PHONY targets, e.g., making scons run tests (replacing make test). And the source code is eminently readable; I was reading a fair amount of it figuring out how it all worked.
It is based around the concept of Builders, objects which produce target files from sources. They are very flexible, and it comes with a good number of useful defaults. I thought I would need to build flex and bison builders, but it comes with them, including analyzing the command-lines for --defines and --header-file and adding those to the target list. I did have to tweak it to understand that my scanner (.l) and parser (.y) files create C++ (.cc), not C (.c) files (I could have used use .ll and .yy, but I reject those on principle: the source is still the same type). I also added the Bison-generated location.h and position.hh files using a variant of this recipe. SCons already has an include-file scanner (no more messing around with gcc -MMD etc.), but needed to know how location.hh and position.hh were generated ("emitted" in SCons-speak) so it knew to build the parser before files that included those files.
I will not be using make in future projects unless compelled to. Call me a fan, and a devotee of scons, and kudos to the developers for a great tool.
Honey sick with 'flu
News, Technical, School ·Sunday November 8, 2009 @ 11:38 EST (link)
Honey had a bit of a temperature yesterday, but it got worse today: 100.9° and a bad cough; I picked her up some cough medicine and TamiFlu™ this morning. The cough medicine will make her sleepy, which should let her get some rest despite the wracking cough. We're not sure if it's H1N1 or regular 'flu. And I figure it's just a matter of time until I have it too.
I went down a bit of a rathole in my CSEP501 compiler project: I wanted to be able to replace nodes easily, without chasing references, so tried to use handles (pointers to pointers), but that led to a lot of hassle with my use of dynamic_cast<> and in other places too, so I used svn merge with a reverse revision specification to back out those changes. Lost some time, but learned a few things, and I'm still almost through type checking and propagation. Earlier I had a partner, but since I'm interested in building on a large number of extensions and he doesn't have the time for it right now, we agreed amicably last week to go our separate ways from project part three (ASTs) onward, and so notified the instructor.
I did some work on the torrent-mover to handle movies, and also wrote a scan option that's about equivalent to "Video Manager" in the MythTV menu: it recreates the (videometadata) database from video files present. I had a bit of trouble with Unicode characters in filenames: in particular, "à" came in as U+DCE0, which I found out is from the U+DC80-DCFF range, meaning a bad character (in the source encoding of the filename—probably taken as ASCII) which was put into the lower 8 bits when converted to a Python internal (Unicode) string. Replacing it with the intended U+00E0 fixed most of the issues. (Caused by the Law and Order episode "Folie à Deux.")
Books finished: Economics In One Lesson, Computer Science and Perl Programming.DVDs finished: X-Men Origins: Wolverine, Sex Drive, Psycho, 12 Rounds, Prom Night, Changeling, The Bank Job, Fired Up!.
rTorrent patch, periodic torrent download
News, Technical ·Wednesday October 21, 2009 @ 03:58 EDT (link)
I patched rTorrent to fix a crash on setting a torrent to erase on finishing. There was an existing ticket, so I added my patch to it. rTorrent is an ncurses BitTorrent client that works well under GNU screen, but it's best features are a programmable API (XMLRPC over SCGI) and use of directory monitoring (drop a .torrent file in a directory, it'll start downloading) and status files (it can easily be set to create a symlink with the name of the torrent file + .finished, pointing to the download, when the download is complete).
rTorrent is the largest piece in automating weekly downloads of TV shows that we watch; the rest is a few scripts—Python, not Perl, to branch out a little. I also have a perl program that will rename and file downloaded episodes according to their names from epguides.com; I'll connect it up to auto-rename finished downloads. The other piece of the puzzle is the isoHunt JSON search API. Three programs need finishing:
grabber - given a search spec, such as "House S06E05", query isoHunt and return good torrents (removing listings with poor scores, too few S/L, possibly negative comments, or that aren't plain AVI files), downloading the best one and moving it to the rTorrent watch directory to start a download.
monitor - check the rTorrent watch directory for finished files; remove the .finished indicator and run the episode renamer on the target; add a symlink to a "new downloads" folder.
scheduler - given a show and its day/time, look it up on epguides.com to find the latest episode and run grabber. If grabber doesn't find anything, queue up the search to try again later. Cron jobs will be set to look for each show, and to periodically re-check for queued items.
ep - given a file (or show and series/episode), look up the episode name on epguides.com and rename the file appropriately.
Together this will be a neat little system and save a fair bit of manual work—which is a fundamental goal of computer science ("What can be efficiently automated?").
Update: The patch was committed in April 2010, six months after it was provided.
Books finished: Glenn Beck's Common Sense.
Second Amendment Day #4
News, Guns ·Sunday October 18, 2009 @ 20:16 EDT (link)
Once more (1 2 3) a group from Microsoft's MSgun group descended on the Sultan shooting pit. There was a pretty good turnout, and the rain which had been plaguing the area for the past few days held off and we even saw sun in the afternoon. It was a good day and as always a good time of solidarity, shooting, and suds (followup was at Redhook).
I finally (Saturday the 24th) got around to going through my photos, paring 807 down to 168, due to shooting several series trying to get the action shot. I have inserted a few I liked here and the rest can be seen using my thumbnail viewer (Tim, please don't hack it by filling up the log file—thanks :).
Kjell took video of the Mosin Nagant volley fire (you may need to be logged in to Facebook and/or be his friend to see it). Joe also took some photos, but as far as I know they're only available on an internal Microsoft share (I'll add a link if there is one, to his or anyone else's photos/videos of the event).
Books finished: Robert E. Lee On Leadership.DVDs finished: Transporter 3, Race To Witch Mountain, In the Electric Mist, The Last House On The Left, Taken, Haunting In Connecticut.
Cases in Constitutional Law #2: we're sorry for the inconvience of doing your job
Law ·Sunday October 11, 2009 @ 19:38 EDT (link)
[✓] Muskrat v. United States (1911): In this case the U.S. government attempted to use the court as a sounding board for distribution of tribal property among the Cherokee Indians, who had recently been admitted to citizenship. Chief Justice Taney ruled that the court could rule on only "cases and controversies", original or appellate as specified in the Constitution, a case being "a suit instituted according to the regular course of judicial procedure" (Marshall), and controversies meaning either the same as cases or referring only to civil suits (Field). There needed to be actual litigants with conflicting interests. The ruling closed the door on "this court… [being] required to give opinions on the nature of advice concerning legislative action,—a function never conferred upon it by the Constitution, and against the exercise of which this could has steadily set its face from the beginning."
[✓] Luther v. Borden (1849): The court correctly refused to interfere in a political matter, that of the charter government of Rhode Island (that restricted the franchise to certain landowners) against Thomas Dorr's popular government, judging it a matter for the state itself, and the executive and legislative branches, if interference from the federal government was necessary at all (in this case, it was not). Admission of the state into the original union, and seating of its congressmen, was held as tacit approval by the legislature of Rhode Island's (and Oregon's, in Pacific States Telegraph and Telephone Co. v. Oregon) "republican form of government".
[✓] Colegrove v. Green (1946): The court again refused to involve itself in a political matter having to do with the apportionment of congressional seats in Illinois: in 1946, rural areas were vastly overrepresented due to continued use of the 1901 apportionment despite much of the state population being now concentrated near Chicago. (Would that a later court had held itself to the same restraint regarding school districts as this court held itself to in regards to voting districts.)
[✗] Baker v. Carr (1962): This case was similar to Colegrove; it took place in Tennessee, which likewise had undergone a population shift but was still using apportionment based on the 1901 census. In this case, however, the court decided to interfere in states' business, under cover of the Fourteenth Amendment—a mess that was rammed through despite rejection by southern states after ousting carpetbagger congresses that had ratified it before passage. To a libertarian, apportionment of voting districts is almost entirely irrelevant since the non-aggression principle denies the state the power to initiate force or take property. However, a state's internal arrangements should remain its business and the Constitution does not allow for federal interference, as emphasized by the Tenth Amendment. While their actions are somewhat understandable—a vote in one county should have comparative weight to one in another—it was not under federal jurisdiction. From Frankfurter's dissent (with Harlan):
The court today reverses a uniform course of decision established by a dozen cases, including one by which the very claim now sustained was unanimously rejected only five years ago. The impressive body of rulings thus cast aside reflected the equally uniform course of our political history regarding the relationship between population and legislative representation—a wholly different matter from denial of the franchise to individuals because of race, color, religion or sex. …
… The Framers carefully and with deliberate forethought refused to so enthrone the judiciary. In this situation, as in others of like nature, appeal for relief does not belong here. Appeal must be to an informed, civilly militant electorate. … In any event there is nothing judicially more unseemly than for this Court to make in terrorem pronouncements….
This begins a "train of usurpations" done under the umbrella of the Fourteenth Amendment, that has continued until this day.
[✘] Frothingham v. Mellon (1923): A chance for the court to "show its quality": the plaintiff brought suit alleging that the effect of certain appropriations would increase her burden of taxation, an unjust taking without due process of law (violating the Fifth Amendment). The court failed here, by affirming the decision of a lower court that dismissed the suit, on the pretext that
[A taxpayer's] interest in the moneys of the Treasury… is comparatively minute and indeterminable; and the effects of future taxation of any payment out of the funds so remote, fluctuating, and uncertain that no basis is afforded for an appeal….
The administration of any statute likely to produce additional taxation to be imposed upon a vast number of taxpayers, the extent of whose several liability is indefinite and constantly changing, is essentially a matter of public, and not of individual, concern. If one taxpayer may champion and litigate such a cause, then every other taxpayer may do the same, not only in respect to the statute here under review, but also in respect of every other appropriation act and statute whose administration requires the outlay of public money, and whose validity may be questioned. The bare suggestion of such a result, with its attendant inconveniences, goes far to sustain the conclusion which we have reached, that a suit of this character cannot be maintained.
So they ruled against taxpayers having remedy for unconstitutional takings and apportionments because doing their job would inconvenience them, although with a few good precedents the envisioned flood is unlikely as lower courts would fall in line and the high court would then not need to hear cases of this nature. An individual can be prosecuted for larceny in any amount; why not the government, especially with the practical effect of the broad application actually stopping millions or billions of dollars of unconstitutional takings.
Cases in Constitutional Law #1: courts should be conservative
Law ·Sunday October 11, 2009 @ 14:39 EDT (link)
These cases are from the 9th edition of Cases in Constitutional Law by Cushman and Koukoutchos. I am not a lawyer, but I have read and understand the United States Constitution (and some related commentaries) and have a reasonable grounding in logic and history. None of these cases are beyond the grasp of the United States citizen, nor should any be reticent to call out unconstitutional pronouncements even if they come from the highest judiciary in the land.
[✓] Hawke v. Smith (1920): The Ohio state constitution had been amended in November 1918 to allow a referendum on (U.S.) Constitutional amendments if it was petitioned for by 6% of the voters within 90 days. When the state legislature ratified the 18th amendment ("Prohibition") on January 27, 1919, the requisite petitions were obtained within 90 days, and subsequently the people voted against ratification, but on January 29, 1919 the U.S. Secretary of State proclaimed the ratification of the amendment.
The case before the court was whether this Ohio law was in conflict with article 5 of the U.S. Constitution, which spelled out ratification procedures, in this case, by approval of two thirds of the legislatures of the states. The court found that it did conflict since "legislatures" clearly meant the Ohio general assembly and that it was not subject to review by referendum.
This is a reasonable decision since the state legislatures are granted the power to ratify. If Ohio wanted to allow the people to review a ratification decision, they would have to do it before they communicated the ratification to the U.S. Secretary of State. It's unreasonable to allow reversal after an amendment has been ratified (by the nation), although not unreasonable to allow a state to take back its ratification if the amendment has not yet become law.
[✗] Coleman v. Miller (1939): The court found that despite Kansas' earlier rejection of an amendment, it could still ratify it later, however it gave troubling indications that the reverse would not be true, which, despite historical precedent (the 14th amendment, which was rammed through by force) is patently ridiculous (the ratification process should not be a ratchet that only turns one way until the amendment has actually become law). The court also said it lacked jurisdiction to compel time limits on the ratification of amendments.
[✓] Marbury v. Madison (1803): The case established "judicial review" in the United States, meaning that courts could overturn unconstitutional laws. Marshall gave a splendid defense of the idea, which, while reasonable, opens a rather large and dangerous door for future abuses. In fact in this case admirable restraint was shown when the court found that the law allowing them to issue the requested writ of mandamus, which they felt was justified and could be issued by a lower court, was unconstitutional. This opinion also includes a well-referenced definition of "cases and controversies". It doesn't even introduce a new power, since once a court decides against a law, even without judicial review every subsequent case would be decided similarly, sometimes by lower courts following precedent, so it has the mere effect of saving the court's time, promoting stare decisis, while not completely closing the door for a future court to revisit an issue.
[✓] Eakin v. Raub (1825): This is where the authors begin to run off the rails a bit (which as we know inevitably leads to a train wreck). The particular case is not all that interesting; it is a minority state court opinion arguing against the power of judicial review determined in Marbury on the grounds of separation of powers and that, provided a law is passed according to constitutional procedure, it is not the judiciary's role to invalidate it, but to interpret it, and are not required to agree with it, with any fault due to unconstitutionality remaining with the legislature. I believe judicial review provides a reasonable check on legislative power; like any tool it can be used for good or ill and sometimes its presence is better than its absence, and sometimes not.
Returning to the original point, the liberal bias of the authors begins to show:
Undaunted by the experiences of the Roosevelt era, Attorney General Edwin Meese III, speaking for the administration of Ronald Reagan, in 1985 launched an all-out campaign to effect dramatic changes in constitutional law and underlying doctrine. He announced that in his opinion the only valid interpretation of the Constitution was one that reflected the values of the original framers and established a policy that no person would be nominated for a federal judgeship who did not subscribe to this point of view.
While the "intent of the framers" is one of the earliest techniques of constitutional interpretation, it tends to produce extremely conservative results by today's standards and has largely given way to techniques that more closely reflect the current needs of a modern society. Moreover, assuming it was the intent of the framers to have the document interpreted by the courts at all, it may fairly be argued that they did not intend it to be interpreted with the rigidity of a statue. As Justice Marshall emphasized in McCulloch v. Maryland (1819), "We must never forget that it is a constitution we are expounding." Also, it is worth noting that even in the opinion that follows, Marshall does not rely on the intent of the framers for support. Pushed far enough, an interpretation based exclusively on "original intent" would virtually emasculate the due process clause of the Fifth and Fourteenth Amendments and could conceivably result in abandoning judicial review entirely.
The following points may be made in response. Meese's actions were necessary in light of Roosevelt's massive constitutional abuses with his fascistic regulation, government-supported cartels, and redistributive programs. By definition, a court should be conservative, i.e., "disposed to preserve existing conditions, institutions, etc., or to restore traditional ones, and to limit change." Its role is to interpret the laws, not to make new ones. Also by definition, the Constitution is a statute; article 6: "This Constitution, and the Laws of the United States which shall be made in Pursuance thereof; and all Treaties made, or which shall be made, under the Authority of the United States, shall be the supreme Law of the Land; and the Judges in every State shall be bound thereby, any Thing in the Constitution or Laws of any State to the contrary notwithstanding." As for Marshall's quoted comment, it is (due to the lack of context, not any fault of his) completely content-free. Finally, appealing to emasculation of laws whose reach has far exceeded their intended purpose is not a sympathetic line of argument.
DVDs finished: Edge, Trick 'r Treat, Orphan, Miss March.
New scope on the Ruger
News ·Friday October 9, 2009 @ 20:02 EDT (link)
Went shooting Wednesday, taking the Ruger 10/22 out for the first time with the scope (Bushnell Banner "Dusk and Dawn" 3-9x40). I was just shooting at fairly close targets in the SVRC pistol put (.22s are allowed; still a lot of fun. Since the scope is set for 50 yards the POI was low.
Found a new site—a kinder, friendlier version of FML (not linked, for language etc.; Google it if you're curious): My Life Is Average is pretty cool; random positive, somewhat banal, but interesting (voted on by readers) events from people's lives.
I got a Nerf N-Strike Maverick gun recently, and a pack of 30 extra darts; it's entertaining to shoot it at my apartment or office walls (or window). Passes time while compiling, or when the symbol servers are slow. I'd bought a different one, a single shot (reload after every shot), but returned it; this is a six-shooter with a rotating cylinder like a revolver, and is spring powered, requiring one pull of the slide per shot, and requiring a reload after the cylinder has been emptied.
I'm reading a Constitutional law book, so I'm going to make a few notes on the cases it covers in coming entries. Some other books I've been reading mention interesting (and fatally flawed) cases; The Politically Incorrect Guide to American History and 33 Questions About American History You're Not Supposed To Ask go over several well known bad cases that are clearly political and not really constitutional (e.g. Dredd Scott, which held that slaves and their descendants were not and could not be citizens, which was reversed by the 14th amendment, which, while necessary, was rammed through illegally and is abused these days to claim that children of illegal aliens are United States citizens; but I digress).
Books finished: The Politically Incorrect Guide To the Great Depression and the New Deal, The Politically Incorrect Guide to Capitalism, Libertarian Nation.DVDs finished: V for Vendetta, Star Trek: Deep Space Nine - Season 6.
The cookies of my browser
News, Technical ·Friday October 2, 2009 @ 20:34 EDT (link)
Yesterday I noticed that my BitTorrent downloads were much slower than usual (about 100kb/s) for a comparably-seeded torrent that in the past would have gone much faster (1Mb/s). I connected to Comcast's LiveChat tech support and talked to someone named Juvy. Here's how the conversation went (starting 3am Friday); I entered with the complaint "BitTorrent suddenly slow":
…
Juvy> Let me check on that.
Juvy> Before anything else, can you please provide the complete account holder's name, account number, as well as the account service address?
David> I'll give you the account #. #### ## ### #######
David> The rest you don't need.
Juvy> Sincwe when did you notice this issue, David?
David> Today
Juvy> Okay.
Juvy> One moment please.
Juvy> Is it only BitTorrent that is slow or are you having slow page loading with other websites?
David> No other websites are as big. It wouldn't be noticeable. I hadn't realized yet that he didn't know what BitTorrent was, and was assuming it was a website; I meant most web pages weren't as large as BitTorrent downloads, and so a bandwidth reduction wouldn't be noticeable.
Juvy> Okay.
Juvy> While on the process of addressing your concern, I will now perfom a health check on your system. This is a proximity check on your services to see that they are working correctly. Would that be okay with you?
David> What does it involve?
Juvy> It involves the connection from our server to your computer system and back. It also involves the system check if your computer system (modem, computer, cable wirings, and router (if any)) is in good working condition.
David> OK, go ahead.
Juvy> Please check that all your cable wirings are secured and intact.
David> I'm using the connection to talk to you. I think they're working.
Juvy> I will need to reset your modem on my end. We may be disconnected with this process. However, do not worry since we will be reconnected right after.
Juvy> Would that be okay with you?
David> OK.
Juvy> I will reset your modem now. One moment please.
Juvy> Hello there. How is your internet connection?
David> i can get to websites, but bittorrent is still slow I.e., no worse, but no better either.
Juvy> Okay.
Juvy> Please optimize your browser by clearing your cookies. Close the browser and open another one. Then try to access BitTorrent again. Began to realize he didn't know what BitTorrent was at ths point.
David> bittorrent doesn't use cookies.
Juvy> I am pertaining to the cookies of your browser, David.
David> the cookies of my browser will not slow down bittorrent. trust me on this.
Juvy> David, I would just like to clarify. Are you using the connection of Systems Vortex? The business name for the account was Vortex Systems, since I have the domain, but they entered it incorrectly (not Juvy's fault).
David> yes.
Juvy> Thank you for the confirmation. David, are you using a router?
David> no Although I have a gateway machine that serves a similar purpose.
Juvy> David, is it okay if you do a hard reset of your modem on your end?
The modem can be reset by using the "reset" button located on the back of the unit. Get a pen, paperclip, or other point object and depress the reset button until you see the lights on the front of the unit go off. Release the reset button and wait for the unit to cycle up.
David> OK, will do.
user David_ has left room
analyst Juvy has left room
David> ok, it reset
When I reset it it lost our static IP. Had to drive into Microsoft so I could contact tech support—this time I contacted business class tech support by phone and talked to a much better informed person, Kisha, who was able to quickly fix restore the static IP (couldn't really verify until I got home, though). Then I was back to the baseline—slow BitTorrent. It was a real pain, since I had to reconfigure the modem, using a machine with a GUI (I believe I called it massively braindead in the past).
I was upset enough to take an axe to the old DSL modem at right. I'd optimistically tried selling it on Craigslist for $5, but there was no interest, and I really wanted to hit something, but not something useful or valuable. I still have one more DSL modem if Comcast messes me up again.
Books finished: 33 Questions About American History You're Not Supposed To Ask, Telempath.
Lebensraum
News, Guns ·Monday September 28, 2009 @ 22:36 EDT (link)
Our apartment isn't nearly so cramped—we've moved some things around and actually have "room to live": the couches aren't all against one another, the treadmill is out of the way, books are in bookshelves, and we can watch TV from a reasonable distance.
I feel a bit like an Enron employee as we're shredding a lot of old records unnecessarily kept (medical EOBs, utility bills, outdated financial statements). There's still about a 8" stack remaining. I'm also still going through folders and boxes to find things to sell, give away, throw out, or pack tightly on one of the shelves that go all the way high ceiling that are a great feature of this place.
Recently a car prowler in the Northgate area of Seattle was shot by the car owner (from his balcony) with a Mosin Nagant. Apparently he got jail time, even though the criminal was committing a felony and that's supposed to be a complete defense. Some responses from MSGun with which I wholeheartedly agree:
I have a hard time wrapping my head around the idea that someone who is committing crime has any rights or expectation of protection from society.—JC
Everything the thieves did was WRONG. They intruded on a personÂs home, stole his belongings, and committed multiple felonies in the process. They needed to stay at home and work on their résumés to apply for jobs, not go out and steal another's property. Instead they robbed a guy who had a gun for a stupid stereo. It was flat out dumb.
I donÂt know why we speak of thieves and other criminals as deserving more rights than the people they victimize, but the more I think about it, the less I am able to sympathize with them. They chose to put themselves in a dangerous situation through their occupation, and one got killed due to occupational hazards. It is my opinion the only thing the guy did wrong (presuming the statements he made were true) was to speak to police before his lawyer.—TH
The law sucks, and is complete BS. A thief live in constant fear for their life if they have the balls to invade my home. Period.—SY
Okay, what gets me is the thief continued to carry the speaker after seeing the armed owner. I think any sane person would have dropped the speaker and ran like hell. Right or wrong this punk needed to be removed from society.—SN
More Texas-style laws allowing use of deadly force in defense of property and life are called for. Once someone has decided to invade or steal property, they should feel like a dead man walking with every theft bringing them closer to having some just soul arrange a meeting with their maker.
Honey's aunt Linda was recently diagnosed with cancer—please pray for her.
Oktoberfest at Tim and Katts'
News ·Sunday September 27, 2009 @ 03:33 EDT (link)
On Sunday we were at Tim and Katt's for an Oktoberfest party (1400-1900 although officially it was 1200-2000). They served homemade pretzels, brats, fries (long ones they fried themselves), black forest cake (soaked in brandy), and of course beer. We played Mafia; in the second game I got killed early and went for a 20-minute walk and the game still had about 10 minutes to go when I got back (could have driven home and picked up a book, and then I might have stayed for another game; but I hate to sit around with nothing to do, and the "dead" aren't supposed to talk). Good party. Got to see Tim's new shotgun, too: a used Benelli, in camo colors, very long (too long for Katt to handle comfortably).
DVDs finished: Cujo.
<Previous 10 entries>