The All-Thing

All stick and no carrot, since ought-three.

`Moral certainty is always a sign of cultural inferiority. The more uncivilized the man, the surer he is that he knows precisely what is right and what is wrong. All human progress, even in morals, has been the work of men who have doubted the current moral values, not of men who have whooped them up and tried to enforce them. The truly civilized man is always skeptical and tolerant, in this field as in all others. His culture is based on ``I am not too sure''.' -- H. L. Mencken.


六月二十七日望湖樓醉書 (蘇軾)


| web page

Other views:
RSS 1.0
RSS 0.91
Plain (good for lynx)

Past posts:

Sun Mon Tue Wed Thu Fri Sat
18 19 20 21 22 23 24
25 26 27 28 29 30  

Recent comments:
Re: Log Age by
Re: Move by Sid Clark
Re: One good thing about music by Sid Clark
Re: Further resolution by Sid Clark
Re: Re: Re: Move by steph
Re: Re: Re: Move by alison
Re: Re: Grammar by William
Re: Re: Move by William
Re: Re: Move by William
Re: Move by alison
Re: Move by fiona!
Re: Move by Steph
Re: Grammar by alison
Re: All about the maffin' and sciencein' by alison
Re: Goddammit by The Goat

Recent search referers:
monster garage crack
friends season 2 torrent
vice city bit torrent
torrent the sims
korean bit torrent download
hindi bit torrent
monster garage torrent
XIII crack download (x2)
"On Being a Researcher"
torrent pr0n
torrent all sims
one piece movie 4 torrent
xbox torrent
Bit Torrent for "My Boss's Daughter"
bit torrent travel
chinese torrent
Shogun no cd crack
gta:vc bit torrent download
celine dion torrent download

William's Aggregated Feeds

Creative Commons License
This work is licensed under a Creative Commons License.

Mon, 15 Mar 2004

Changing the world

Ok, let's brainstorm a minute. I need focus.

So what kinds of computer-related things do I think actually have the potential to change my world in the next three decades? (I.e. in the span of time before the entirety of my skill set is made completely obsolete and my ability to keep up completely surpassed.)

I don't think it's any kind of NLP, frankly. I've heard some pretty amazing speech recognition stuff (we have one at work for recognizing people's names that's very useful) but even if that gets rolled into some kind of useful interface, it's not really going to change the way we live. Except for eliminating some jobs.

Any kind of text processing... blah. I doubt anything is going to happen in the next three decades besides current technology getting faster and better, and all that means is that there'll be a slightly reduced need for analysts and translators. I understand the lay of the land here, and this field isn't ripe for a breakthrough. The only thing it's ripe for is stewing in its own juices for another century.

There are two things I can think of that I'm pretty sure can change my life in the mid-term future.

1. Ubiquitous networking and portable devices. Get everything bluetooth-enabled (or, Allah willing, some other protocol that isn't as brain-dead and committee-designed). Your PDA+cellphone, your house, your car, your computer. Your fridge, your oven and your lightswitch. Now all these guys know where you are and know what you're doing. And they're connected to every other device in the fucking world. Holy shit. Think of the things you could do.

2. New ways of networking. This is less formulated than the first one, but. Look how much old people's lives have changed over the past ten years because of the web. Or in the past three years because of AIM. There's opportunity for much much more out there. I'm not sure what, but wikis, blogs, p2p... these are all new communication modalities that have sprung up essentially in the last two or three years. There's got to be more, and better. I don't know what, but I'm betting that centralized distribution (print news, the RIAA, etc.) ain't it.

Posted at 14:05 | /computing | (leave a comment) | permalink

Tue, 10 Feb 2004


Continuations are cool in an impress-your-friends kind of way, but if you already have exception handling and threading, is there really any usefulness to be got from them? Is there really any construct that they express more naturally?

My guess is no.

Posted at 11:12 | /computing | (leave a comment) | permalink

Tue, 03 Feb 2004


Having never really used wireless, every time I use it seems like a complete miracle. I imagine I feel about it the same way that old people feel about airplanes or air conditioning: a source of continual child-like wonder. I'm sitting at 1369 right now and I feel like I'm witnessing transubstantiation.

(Brief aside: why is it that every girl in every coffeehouse I go to is a grading essays from third-graders? I mean, I don't have anything against third-grade teachers, except in as much as they remind me of my roommate, but is there really nothing else that women do around here?)

I spent the weekend basically ignoring all societal obligations and making sweet, sweet love to Ruby. I love Ruby so much. I know I'm cheating on Perl, and that makes me feel bad, because Perl and I have been together for such a long time, but being with Ruby is so... liberating. It's like going commando all the time.

I feel like Ruby is Lisp, but in a line-editor-friendly format (sexps are a bitch to edit, no matter how many Emacs modes you have in your pocket). And with the results of 30-odd years of collective programming experience added—regexps and lambas are built in to the syntax in ways that make them easy to use. Oh, and much more object-oriented, although it's easy to avoid that for short shell scripts.

And apparently Ruby is a lot like Python (which I've never used) but basically more logical and consistent. Everything is a reference, so there's no confusion about passing by value or by reference. Everything is an expression, so you can say things like a = (b = (c + d)) which you can't do (apparently, wtf) in Python. And everything is a class; there's none of the fast fundamental type/slow object duality of Java and Python. Plus closures and continuations... it's just sweet.

One of my favorite things about Ruby is that you can do stuff like this:

class Goat
  def initialize(cannibal = true, zombie = true)
    @cannibal = cannibal
    @zombie = zombie
  attr_accessor :cannibal, :zombie

which creates get and set methods for cannibal and zombie. Cool, you may think, I can escape the Java hell of writing a bazillion getCannibal() and setCannibal() methods. But this isn't a syntax thing; there's actually an attr_accessor method that is being called that creates these methods at the class level.

I've been using a package called Vapor that transparently serializes your objects to a relational database. It's pretty fucking nice, but you have to mark your variables dirty every time you change them. It took me all of fifteen minutes to figure out how to write a attr_accessor_persist method with exactly the same syntax and functionality, except that the setter method also marks the variables as dirty. Writing code that generates other code makes me happy; writing code that generates other code at run-time makes me ecstatic.

That being said, there are a few things I don't like about Ruby, like the lack of keyword arguments (though these are coming soon, apparently). And, to be honest, I now kinda like the Python indentation thing, if only because it removes the need for "end"'s or }'s. I don't agree with all of Paul Graham's language ideology, but I do agree with this: minimizing code size is a pretty good metric of language goodness.

But my negative feelings are pretty trivial, compared to the all the good things Ruby gets me. Never going to waste my time programming in C again.

Posted at 18:55 | /computing | (leave a comment) | permalink

Fri, 30 Jan 2004

Gateway 200X/XL on Linux

I've created a wiki page for configuring Linux on the Gateway 200X and XL laptops.

Many thanks to Greg, who is putting a ton of work into this.

Posted at 12:03 | /computing | (leave a comment) | permalink

Mon, 26 Jan 2004


Is it just me, or is every PHP program written by people who are just learning how to program? It's like the VB of the web... once you learn how to actually program, you quickly move on to something else.

Just another uninformed opinion.

Posted at 11:35 | /computing | (leave a comment) | permalink

Tue, 13 Jan 2004

Linux Media Jukebox/PVR

Now that I am regularly seeing hard drives at 50 cents/gig, I have finally been spurred to taking on a project I've been devoting some thought to recently: building a Linux-based digital media jukebox/PVR.

People have been building homebrew TiVO-style devices using Linux for a while now, using software like Freevo. The idea here is basically the same, except that I want to have a LOT of storage space and I will probably use it for playing music more than they do, and recording TV less.

Now TiVO sells for $350 for the box plus $300 for a lifetime subscription. I'm willing to bet that, even using off-the-shelf components, I can build something way better than TiVO for that price.

I want to be able to:

  • Control the thing via TV and remote control.
  • Record TV like TiVO. (At the very least, be able to set up scheduled recording of shows.)
  • Play DVDs and CDs, obviously, but also be able to dump their contents to disk and play back at any time.
  • Burn DVDs or CDs of any hard drive contents.
  • Have a continuous stream of music playing all the time.
  • Connect the thing to a LAN and have it serve files.
  • Never worry about disk space. (That means 400 GB at the least.)
  • Place the thing next to my stereo components without wincing at its appearance.

And I want to spend at most $650. I think I can do this, though it's going to require a lot of Freevo hax0ring.

(The other inspiration for this is a recent offer, from a friend, of a 120GB music collection that he and six musician friends created by pooling their collective collections. Sweet.)

Here we go.

Posted at 19:22 | /computing | 2 comments | permalink

Wed, 07 Jan 2004

Big Rat Patch

Found a bug with BigRat. Reported it, submitted a patch, and within an hour there was a new version on CPAN ready to go.

Now that's fucking open source software for you.

Posted at 11:05 | /computing | (leave a comment) | permalink

Fri, 19 Dec 2003

Burrows-Wheeler Transform

So we've been talking a little about this at work and I just found a good page describing it here:

It's like magic. Basically, the BWT is a completely reversible O (n log n) transformation that increases the compressibility of text. It's pretty mind-blowing to follow through the algorithm because it's really not clear, at least on the first pass, how it works, much less why it works. But the basic idea is that it permutes characters by sorting on their (left or right) contexts, which tends to group similar characters together, as they typically have similar contexts. Of course, doing this in a reversible manner is the brilliant part.

So this will work on any data that exhibits local contexts, which is the vast majority of data that we, as humans, care about (though not all—there are apparently certainly types of image data for which this doesn't hold true, though I'm not clear on the specifics). It would be interesting to compare the effect this has on, say, English vs. Chinese at the character level vs. Chinese at the byte level in different encodings.

I think bzip2 uses the BWT as a first pass, so they've apparently decided it is useful for arbitrary binary data.

Posted at 20:22 | /computing | 1 comment | permalink

Thu, 18 Dec 2003


You know you're getting into heavy stuff when you can't even read the numbers your program is spitting out without another layer of interpretation. Now that I've hooked up this arbitrary precision rational number package to my project at work, I'm getting shit like

doc 48 has cached value 133612457154683010512606719606961737906380203/2584230589
40325073947019947179448817289472690 and actual val 483523604/1015360315 at ./ap- line 755, <> line 53.

Great, thaaaaanks Perl. Let me just pull out my sola-powa Casio bidness calculata....

Posted at 17:47 | /computing | (leave a comment) | permalink


A colleague of mine has a bluetooth-aware cellphone and has it set up with his computer, which he uses to play music, such that when he receives a phone call, the music automatically drops in volume, and when he leaves the room, it pauses, and when he returns, it resumes. That, as we say in Chinese, is pretty fucking cool.

I would like to do that. And there are a ton of other neat things I can think of doing along the same lines, if I could write bluetooth code on my cellphone. This is some cool shit! And happy, I am contemporaneously also in the market for a new cellphone. So I'd like to know: what cellphones can be developed for, easily, particularly wrt bluetooth functionality?

Do you, my dear readers (and for once that includes the retards who arrive here by searching for cracks and pr0n, which is 95% of my traffic) know of such a phone?

Posted at 15:14 | /computing | 1 comment | permalink

Wed, 10 Dec 2003

Perfect Compression

The following perl code compresses arbitrary data of size n into a set of n files, each with size 0. Independent of n, the total compressed file size is 0. Data is completely recoverable. Thus, perfect compression.

while(<>) {
        foreach $char (split //) {
                open(OUT, >compressed.$num) or die;
                utime ord($char), ord($char), compressed.$num;

Decompression is left as an exercise for the reader. (But it's quite trivial.)

Another day, another field of computer science laid to waste....

Posted at 15:12 | /computing | (leave a comment) | permalink

Sun, 30 Nov 2003

On the Death of Lisp

"In the case of AOLserver [...] Jim Davidson and Doug McKee had only a few months to build the whole server from scratch. They wanted users to be able to write small programs that ran inside the server process. They therefore needed a safe interpreted language so that a programming error by one user didn't crash the server and bring down all the Web services for an organization.

Tcl was available. Tcl was easy to download and designed to fit inside larger application programs. Doug and Jim [could] read through the Tcl source code and modify it to be thread safe. So it was critically important for them that Tcl was open-source and simple enough so as to not require months or years of study to understand the whole system.

Compare this to Lisp. Some of the best and brightest computer scientists raised money to build commercial Lisp implementations that they then went out and hawked in an indifferent and confused marketplace. They succeeded only in breaking their hearts and their investors' wallets. A handful of academics produced free open-source implementations, notably CMU Common Lisp and various versions of Scheme. But these multi-megabyte monsters weren't designed to fit neatly into someone else's program. Nor was there any document explaining how to do it.

Lisp developers have the satisfaction of knowing that they got it right 30 years before anyone else. But that's about all they have to show for 40 years of hard work and hundreds of millions of dollars in government and private funding. These days, most former Lisp programmers are stuck using Unix and Microsoft programming environments and, not only do they have to put up with these inferior environments, but they're saddled with the mournful knowledge that these environments are inferior."

 — Phil Greenspun in TCL for Web Nerds

Something or someone pointed me to this quote a few months ago, and I forgot about it, but it came back to my head recently in the context of some or other discussion. Probably about the Sisyphean struggle I had in using Guile as a scripting language.

I keep coming back to Guile because I think that they, of everyone, may actually have a chance at building a stable, usable Scheme interpreter. Maybe Lisp (shut up, Scheme is Lisp, especially to a C hax0r like me) isn't so dead. But the important point to take away from this is that in the real world—sorry, that's a little harsh—outside of academic contexts, what determines the success of a particular programming language is everything except the actual programming aspect of it.

Posted at 07:37 | /computing | (leave a comment) | permalink

Fri, 21 Nov 2003

Gateway ECDT

It turns out that the ACPI support on the Gateway laptop is all fux0red under Linux because Gateway ships these machines with a fux0red BIOS. Of course, they also ship compensating Windows drivers, effectively rendering the power-management, battery monitoring, etc. capabilities of the machine Windows-only. Thanks guys.

Specifically, the BIOS lacks an ECDT, so parsing the DSDT during ACPI setup time dies violently as there's no way to access the embedded controller region. I have been hax0ring the kernel trying to fake an ECDT but without too much success: I have (what I believe to be) a fake ECDT that I plug in, but the kernel rejects it with:

 tbget-0292: * Info: Table [ECDT] replaced by host OS
tbrsdt-0227: * Error: Invalid signature where RSDP indicates RSDT/XSDT should be located

which I really understand. And unfortunately the acpi-devel list is only sporadically useful—though I can't say I blame them, as this is a hardware issue.

But it sure would be awfully nice to be able to see how much battery juice was remaining....

UPDATE 1/30/2004: I've created a wiki page for this:

Posted at 22:37 | /computing | 4 comments | permalink

Mon, 17 Nov 2003

The Model Church

Wow. Read this linux-kernel thread. Like a fucking adventure novel. (From Cryptogram. )

Posted at 10:52 | /computing | (leave a comment) | permalink

Wed, 05 Nov 2003

XML what now?

Why does everyone claim their shit is an XML parser when, in fact, they are just XML tokenizers?

Man, XML is such a pita. It's so ugly and clunky and verbose and all the libraries for tokenizing it just seems flaky... is there really a reason for me to use it in place of something application-specific? Je pense que non. I know it's the old new thing and all, but really, I'm just not convinced it's a good general-purpose solution.

Incidentally, I know I've arrived at, in the dark ages long gone, the concept of Wall complexity —kind of the data format analog to Kolmogorov complexity. The Wall complexity of a particular format is measured by the the size of the smallest Perl script that can parse it.

Thus, XML sucks.

Posted at 23:43 | /computing | (leave a comment) | permalink


Nothing so needs reforming as other people's habits. -- Mark Twain