Nothing ever shows up on my friends feed here. I think this is true even if people I have friended make posts. So it looks like none of my friends have ever posted anything. Kind of hard to use this website this way.



Livejournal used to have a feature called "Phone Post," where you could leave an audio recording as an entry by calling a number on your phone. I think. I only barely remember this feature.

I have been trying to organize the tens of thousands of media files on my big storage, and one of my automated processes tries to cluster them by information in id3 tags. One of the clusters exposed by this is one with genre "speech" and tag unknown0: "". The artist tags are livejournal names and the filename is the date posted. They're all between 2003-2004 and have that old-timey phone audio quality. A little ahead of its time, I suppose.
  • Current Music
    The Former Yugoslavia - Easy


This website would be all right except that parts of it don't work outside of Chrome. Maybe it's all my content blockers. Maybe it's just really focused on the needs of Chrome users. In any case, this was once a very successful social media site. Good job, Brad.


Guys, I still care.

But wow is my userinfo and icon out-of-date! It's been so long. I aged. I've been surgically, cosmetically altered. I gained and lost henges of stone. In and out of love. Cycled from pale to tan and back. And for what? For fun, mostly. I did it all for the fun.

Well, it's probably going to be a while before the ride is over, so what's next?

Approximately 3,000 degrees Fahrenheit

I didn't think welding would be so funny. Maybe it's only funny to me. There are 8 people in my class, and we were all standing around with oxyacetylene torches on Monday, learning how to ignite them. The first step is to turn on the acetylene and light it. Acetylene, when burning slowly, lets off little floating balls of carbon, dark black, which are buoyed by the heat. We had the room ventilators switched off so that we could hear the instructions, so these little balls accumulated in the spacious volume of the welding shop, until it was absolutely filled with little floating black dots. It was like a demo effect. I could not stop grinning at it.

On top of that, we're all supposed to be wearing long sleeved natural fibers, to protect our arms from high temperature sparks and burns from the UV rays that arc welding emits. Everyone else was in light summery colors. Of course, I'm wearing a black turtleneck. (I have years of experience wearing this kind of thing in Hawaiian weather.) Eventually all those little black dots start coming back down and landing on absolutely everything. They're carbon, so they smudge into little grey smears all over everyone's clothing. We all look filthy! Except me, because I'm wearing black. Ha ha!

My first project is a little cube. I have already cut out all its faces on the powerful but somewhat imprecise hydraulic shear in the metal shop. Its geometry is going to be... a little wonky. Arty, I'll say.

(no subject)

I see a few posts drawing a contrast between the facebook name policy and the Google+ one. I guess they don't seem that different to me, since my facebook account was banned in mid-2007 for not using my real (probably "real to the government") name. It's still banned.

7/12/2007 3:37 PM:


Fake names are a violation of our Terms of Use. Facebook requires users
to provide their full first and last names (i.e. no initials).
Impersonating anyone or anything is prohibited. Nicknames are only
permitted if they are a variation of your first or last name. Also,
nicknames cannot be used in replacement of your first or last name. The
accepted format is as follows: FirstName 'Nickname' LastName.

If you would like to use this profile again, just get back to us with
your real name and we will reactivate the account for you.

Thanks for your understanding,

Customer Support Representative

(no subject)

Since I am only thinking about coding (and travel arrangements) on the run-up to a demo event, I always forget that I'm about to spend time with some of the best people ever. Afterwards, I try to make a note about that... note to self: demoparties have best people ever.

I ran out of time and did not enter the compo at Evoke. One reason is: I developed on ATI hardware this time, and I have some kind of weird nvidia bug I can't figure out. It doesn't seem like I'm doing anything wrong... though I have been at fault for the overwhelming majority of bugs so far.

The bug is this: I have a fragment shader which is used to displace screen pixels. The screen pixels are read from a 2D texture, the displacement direction and amount is read from a 3D texture (and is animated by changing the depth coordinate in that texture). The part in question is like this:

#version 330 core
// FS_Break.frag
uniform sampler2D tx1; // a screen sized texture which is a capture of the screen color buffer
uniform sampler3D tx2; // a 3D texture containing displacement data
uniform float tx2z;    // how deep in the 3D texture to read from
uniform float amount;  // severity of effect. 0.0 = no effect.

layout(location = 0, index = 0) out vec4 Color;

in vec2 ouv1; // interpolated texture coordinate 

void main() {
    Color=texture(tx1,ouv1 + vec2(amount * texture(tx2, vec3(ouv1, tx2z)).rg - vec2(0.5,0.5) ) );
Works as expected on ATI. On my nvidia machine, it results in an empty screen. Messing around with it shows some very weird properties:
// correctly displays the screen sample
Color= texture(tx1, ouv1);

// correctly displays the attenuated displacement texture
Color = amount * texture(tx2, vec3(ouv1, tx2z));

// this is used in some more variations below..
vec4 nvbug = texture(tx2, vec3(ouv1, tx2z));


// blank screen.
Color= texture(tx1, ouv1 + amount * nvbug.rg * 0.0000000001);

// not blank.
Color= texture(tx1, ouv1 + amount * nvbug.rg * 0.000000000);

// this is the best one:
// replace either branch with Color = vec4(1.0,1.0,1.0,1.0) and it works as written
// but if both texture values are used, even if never combined or used at the same time, blank!!!
if(amount > 0.4) {
	Color= texture(tx1, ouv1);
//	Color = vec4(1.0,1.0,1.0,1.0);
} else {
	Color = nvbug;
//	Color = vec4(1.0,1.0,1.0,1.0);

So... that's driving me nuts. I thought maybe my textures were two different formats and that ATI was doing some pixel format conversion that NV wasn't, but that seems unlikely. Clearly the driver is optimizing out one or the other texture reference when it computes that it is unused. But what's wrong?? I guess I will go over my texture parameters one at a time tomorrow.