Thursday, September 30, 2004
Sky Captain and the World of the Washed Out-Looking Two-Dimensional Harmless Robots
I... hmmm. My mind is bad tonight. I can't... remember things. Ugh.
Busy, busy, busy at work. Boy, I can't wait until [New software version] comes out! What a huge amount of personal pride I will take in the finished product! Some fucking salesperson scumbag told us all the other day, "I thank God every day for [other leathery salesperson, whose knowledge of computing is matched only by his success at being a non-awful non-scumsucking Willy Loman waste of space]." Jesus. Christ. People, I'm not taking anyone to task for not caring about something boring, but hey, I put in the time here -- in computer stuff, that is, not work. Thank God for me, because I care about boring shit so you don't have to.
Speaking of which, I'm still trying to get some developer docs for gzochi together. Plus, I'm trying to get more aggressive about actually implementing stuff now that will make it possible to get some game-like things working. I'm developing this sample "game" called "chat-example" that will hopefully be illustrative for new game designers, and I'm using it to help myself flesh out the Guile-to-C interface I want to implement; that is, I pretend that I have the entire API and XML parsing system that I need, and just go ahead and implement stuff and refer to not-yet-written procedures and stuff like that. This way I know what's necessary for when I go back and write the game management side of things. I've already discovered that I'll need to add at least some kind of minimal class/inheritance logic to make objects act the way you'd expect as a developer. Shit -- "logic." That's a business word for "the ideas in the algorithm." This shit is rubbing off on me.
Racist, racist, racist.
I gave some more money to Kerry yesterday. He didn't disappoint me tonight.
Monday, September 27, 2004
Tekeli-li!
Look at this, found on Jamie Zawinski's blog. It got me so paranoid and depressed that I printed out some Bertrand Russell to use as ammo should the need arise. Don't think it will -- the F's pretty secular.
My house smells just like a zoo
It's chock full of shit and puke
Cockroaches on the walls
Crabs crawlin' on my balls
Aw, but I'm so clean cut -- I just wanna fuck some slut!
Speaking of cockroaches, the roach problem here is bad tonight. I bought 4 new roach motels and put three of them in the kitchen, because those fuckers are getting bold. I saw a little one and a big waterbug in the cabinets wihin the span of like 15 minutes. Don't tell Mer. She'll find out when she reads this, anyway.
I went up to visit my old friend Asta last night -- yes, that's right, Sunday -- up in the 'Heights, round 187th or so. She was having a "hard liquor and boardgames" party, a premise dangerously close to hipsterism, but which turned out to be really sweet and nice. I saw a bunch of fairly acceptable people from high school, including, I'm pretty sure, a literal date-rapist, and got along pretty well with 'em all. The second best part, though, was coming home on the A. I was in the last car and it was empty and noisy -- perfect setting for a little singin' to one's self. And I sang all the way down to 145th, when this guy came into the car and wanted to sketch my portrait. "Not that you want or need a portrait," he said, "but I do the whole thing while the train is moving. I'm that good."
Wednesday, September 22, 2004
Chunk-Star
Don't drink, don't smoke, don't fuck -- fuck you!Listen to what happened. It's a computer thing, but it's crazy. I was fixing my sister's computer -- something I have to do every few months because she's always installing viruses and spyware and things like that. Usually it just means running AdAware and such, but this time I thought I'd install Windows XP Service Pack 2 in the hope that all the new security fixes would let me off the hook for this sort of thing in the future.
Straight-edge kids... fuck you!
Okay, so I get the laptop home and plug it into my network and it starts downloading SP2 automatically, which is nice. So that takes a while, and then it's 'validating' the download or some shit, so I go and start making some food. Well, I get back, and the laptop has turned itself off. This is where the crazy stuff begins. Guys, just so you know, I know next to nothing about any of this Windows shit, so keep it mind I am just guessing how to do all this stuff as I'm doing it.
Me: Oh, maybe SP2 needed to restart the laptop but it got turned off by accident. (Turns laptop back on.)
Laptop: (Begins to boot into Windows, then, accompanied by Blue Screen of Death) PROCESS1_INITIALIZATION_FAILED.
Me: Hmmm... the laptop is awfully hot. Maybe some internal motherboard sensor is freaking out. (Waits 10 minutes. Starts laptop up again.)
Laptop: PROCESS1_INITIALIZATION_FAILED.
Me: Gee, this looks bad. Let me search the Internet on my other computer to see what this means.
Internet: (Thinks for a while.) You are fucked. Format your hard disk and re-install Windows XP.
Me: Ack! No, I can't do that! This is my sister's laptop -- it's got all her MP3s on it and she needs it to write a paper for school tomorrow night! There's gotta be something I can do... oh, I know, I'll boot off a Windows XP CD and try to check the hard disk for errors. (Burns a copy of Windows XP Professional, Yale Academic Edition, and boots off of it.)
Laptop, via Windows XP CD: Do you want to start the Recovery Console?
Me: Ooh, that sounds good. Yeah!
Laptop: What's the Administrator password?
Me: Oh, fuck, I don't know. Hang on. (Makes a phone call to parents' house.) Hey, sister, what is the Administrator password?
Sister: There is no Administrator password!
Me: Okay, thanks. (Hangs up. Tries the CD-boot thing again.)
Laptop: What's the Administrator password?
Me: Ah, fuck.
Internet: Excuse me, but have you heard about these special programs you can use to reset Windows XP Administrator passwords? You burn them onto a CD and then you boot off the CD and then you can reset the password. Here, try this one.
Me: Oh, okay, thanks. (Burns the program onto a CD and boots the laptop off of it.)
Laptop, via Linux NTFS CD: Hey, you wanna try to reset the Administrator password?
Me: Yeah!
Laptop: Sorry, your registry files are corrupt! Peace!
Internet: Okay, that one didn't work out so well. You wanna try again with this one?
Me: Well... alright. (Burns the program onto a CD and boots the laptop off of it.)
Laptop, via Linux NTFS CD v2: Hey, you wanna try to reset the Administrator password?
Me: Yeah!
Laptop: Sorry, your registry files are corrupt! Peace! Oh, wait -- you wanna try to change the settings for the Recovery Console so it doesn't need the Administrator password?
Me: Uh... yeah, that sounds good. Let's do it. (Does it. Puts the Windows XP Boot CD back in the drive and reboots.)
Laptop: Okay, here's the Recovery Console. As you can see, it's a lot like DOS. You can type stuff and run a few programs.
Me: Well, I'm pretty sure this is all due to some kind of filesystem problem. Laptop, can we check the disk for errors?
Laptop: Sure. (Thinks for a while.) The disk is fine.
Me: Hmmm... what should we do now? Internet, any ideas?
Internet: Well, the registry, the giant configuration file for Windows, is divided into two big pieces. One's called SOFTWARE and has settings for installed programs; the other one's called SYSTEM and has all the settings for the hardware. There are backups of both files in "C:\WINDOWS\REPAIR."
Me: Okay, let's replace the SOFTWARE file with the backup one.
Laptop: PROCESS1_INITIALIZATION_FAILURE.
Me: That didn't work. Let's try replacing the SYSTEM file with the backup.
Laptop: (Reboots ad infinitum.)
Me: That's not good either. Well, I'm out of ideas again.
Internet: Excuse me, but I just found something that Microsoft's saying that might be helpful. Microsoft?
Microsoft: Yes, thanks, hmmm... well, you see, if you've got a bad Service Pack 2 installation, you can roll it back using the Recovery Console by typing 'batch spuninst.txt'.
Me: Okay, I'll try that. (Does. It works. The laptop is now back in the state it was in before the trouble started -- still with several viruses and spyware programs. It is 2:30 AM.)
And... scene.
Monday, September 20, 2004
Orance Juice Guerillas
Also you mentioned that Laura was hassling you for child support for this kid that you said you two'd never had. I asked whether you were going to try to prove that she was scamming you, but you were like, "No. She's got a paternity test that says it's mine." Oh.
Sunday, September 19, 2004
"Who The Hell Is Elaine Stritch"
Watching the Emmys for some reason. Tony Kushner, you are the original punk rocker.
I just solved this stupid synchronization problem that I'd been poking at all weekend and not getting. I say it's stupid because it looks obvious now that I've solved it, but, you know... ugh. And of course I'm going to explain because that's one of the things I like to do. So.
A semaphore is a synchronization primitive (well, it's not necessarily a primitive, but...) consisting of a condition variable and a counter. You can "wait on the semaphore" by attempting to decrement the value of the counter. If it's greater than zero when you do this, the counter gets decremented and the call returns immediately; if it's zero, your thread goes to sleep until another thread "posts the semaphore," incrementing the value of the counter, at which point your thread wakes up, decrements it, and the call returns.
Many semaphore implementations provide, in addition to the "wait" function, a "trywait" function, in which you merely check the value of the semaphore, and if it's zero, instead of sleeping, you just inform the calling thread that it would have slept. If it's not zero, you do what the normal wait function does, which is decrement the value of the counter and return. My semaphore implementation provides this function.
Here's what happened: I wanted to wait for an item to be added to this queue (the queue's embedded semaphore would get posted when this happened). I didn't want to wait forever, though, so I did a trywait on the queue's semaphore, and if it came back false, indicating that the value of the counter was zero, I would wait for a while to see if somebody added something to the queue -- and if they did, grab it and return it, otherwise just return NULL. Here's the problem: I'd do the trywait, it would come back false, so I'd sleep for a while, get woken up by somebody adding to the queue, grab the value, but hold on a sec -- the semaphore's counter never got decremented, because the trywait came back false initially and we never decremented when we got woken up! So the next person to wait for an item to get added to the list would see that the semaphore's counter was non-zero, decrement it, try to grab something off the list, get NULL, and, well... It showed up in my program as the server pinging the client over and over without waiting for the timeout period to pass.
Why do I post these boring explanations of boring stuff? Well, because it's not boring, fuckers -- it's awesome! It's totally a mind-blow the extent to which code can seem like this gaseous, chaotic stuff until you resolve a bug and all of a sudden it all coalesces into a beautiful, mechanically glorious whole. Three worlds, guys. Three worlds.
Starting to work on documentation; DocBook is real fun to work with, but the docbook2texinfo converter is super frustrating because it insists on naming your fucking info document with a normalized string it generates based on a bunch of mystery factors that I can't control. Like, for example, I can't make it produce 'gzochi-server.info' out of 'gzochi-server-manual.docbook.xml'. The best I can seem to do is 'gzochi_server_manual.info'. You hear that Steve Cheng? Insane. And don't get me started on how retarded automake can be when it comes to dynamically-generated documentation.
I didn't do anything this weekend.
Thursday, September 16, 2004
Marky Next
Oh yeah, and going home on the F, the train was making express stops because of construction or something, so one of the conductors was announcing which stops were gonna get skipped, but the intercom system was characteristically crackly, and it just so happened that whoever was driving the train needed to honk the horn at that moment because we were trying to pass another train or something, and, well, those subway horns are loud, so you basically couldn't hear the stops that the woman was announcing. Anyway, this fat, pretentious-looking dude sitting next to his girlfriend yells at the top of his lungs, "We can't hear you when you're blowing the horn! Argh!" Man, that pissed me off. I mean, I've got no surplus of love for the MTA, but:
- The person speaking over the intercom is not necessarily the person driving the train, moron.
- She's gonna read it at every stop.
- No one finds it plausible that you were so overcome with rage that you just had to vent your frustration in the most affronted-white person way in the middle of a crowded subway car on a Tuesday night.
- No one is impressed by your inability to control yourself.
- You are a fucking idiot.
Wow, how much is it literally about to rain?
So I just came back from the laundromat, where there's this adorable fat old curly-haired golden retriever. Okay, so some of the dryers they have are missing these top panel pieces, so you can see the inner workings of the machine, and guess what -- it's on fucking fire! Is this how all dryers work? The first time I saw it I thought something had gone wrong, but all the dryers there seem to do that. I guess if you want to make something hot, fire's the way to go.
Tuesday, September 14, 2004
Snapple-Grappling

Man, was my stomach fucked up tonight! I was eating carrots all day at work and I guess that was too much fiber, because when I got home some things started churning around down there. It's funny because usually when I get sick to my stomach it's this awful whole-body thing where I just feel like I'm gonna die all over, but this time my mind was very clear and I was just thinking to myself that I'd better get to a shitter. And boy, did it stink. I'm sorry, but it's true. The thing is, I was in the middle of feeding the cat -- I'll get to that in a second -- when I had a real strong urge to go, and she was so intent on getting me to finish mixing her food that she tried to follow me to the bathroom. I'd left the bathroom door slightly ajar and she stuck her paw in and tried her hardest to open it. After warning her that she wasn't gonna like the smell, I cracked the door enough for her to poke her head in, and she did, but yanked it right back out as soon as she got a whiff in this really funny awkward way.
Oh yeah, so the vet thinks she might be chewing on herself because of a food allergy, so we're feeding her this 'limited ingredient' cat food, which apparently consists of naught but duck and peas. Sick, right? And the weird thing is, she's hungry all the time now. She can't wait to suck down her next serving of this greyish-green gelatinous puree.
Guess which of my many Bosses came back from two weeks of paternity leave that I'm pretty sure are in addition to his standard 4 weeks of vacation and opened our first meeting with, "I don't care [if] you got to stay late." Take as many guesses as you like.
As if you guys didn't have enough blogs to read, Raymond Chen over at Microsoft has a great and interesting blog about the reasons behind various Windows / Microsoft / x86 idiosyncrasies. Everyone praises it; now I'm praising it.
Jesus Fucking Christ: (link-a-dink)
BEIJING (Reuters) - China executed four people, including employees of two of its Big Four state-owned banks, for fraud totaling $15 million, the state Xinhua news agency said Tuesday....
The precise number of people executed for all crimes in China is a state secret. Reports range from 5,000 to 10,000 a year, many for murder, but they have also been killed for corruption and crimes as minor as bottom-pinching.Maggles has a 'blog. She didn't think I'd find it, but I did.
Thursday, September 09, 2004
Red Hot Moon
I took The Rase out to dinner tonight and who should we see at Dojo but our old friends Asta and the loathsome Zeke. I hadn't seen Asta in years, literally. She is looking good, let me tell you. She once told this guy who was giving her a hard time "Suck my pussy!" and, you know, was pretty much able to sell that line in an earnest, non-sassy way, no easy task.
Um. What. Else. I am thoroughly bored and not bored with my job.
Weilding His Hideous Sandwich
Man, was it ever hard to get to work yesterday. I waited for like half an hour at the 7th Ave. F stop before someone on the opposite track yelled out to us that the East Broadway stop was flooded and that F trains were basically not going into Manhattan. So I got out of the station and grabbed the B67 to Flatbush and 7th Ave. for the 7th Ave. Q/B stop. A B came pretty quickly, and I thought my troubles were over until we got over the Manhattan bridge and then just... stopped. After about half an hour or 45 minutes or so, the radio twittered to us that there was a power outage at the West 4th St. stop and that trains who'd been trying to enter that station had decided to turn around and go back to Brooklyn. At first I thought that that's what we were going to do, which would have sucked, but it turned out we were just going to sit there and wait for them to get out of our way. That took about 30 more minutes. Finally they nudged our train just barely into Grand St. and we all had to walk through the train to the first car to exit. And there was a D train just sitting at Grand St. waiting to take me to work! And it did! That was great.
But the most irritating part of all of this was this very pear-shaped, baby-faced, acne ridden business-casual intern guy in our car who was or was acting like about 15 years old the whole goddamn time. He would take off his fucking discman headphones every few minutes and say things like, "They just can't do this to us. Fuck;" or, announcing to the whole car, "Okay, what I need right now is a fucking cigarette." Great, all the construction workers and part-time security guards trying to get to work are very impressed at what a grown-up smoker you are. They totally don't think you're a faggot. The more he said, "Fuck," the more ineffectual and irritating he sounded. Damn it. Oh yeah, and he totally wasn't cool with having to evacuate the train. While we were filing out, he kept asking everyone, "What are we doing? What are we doing? Are they going to make us walk through the tracks? Because I'm definitely not cool with that."
Anyway, what am I doing? I don't know. This laptop feels like it's ready to bite the dust. Yesterday I couldn't even get it to turn on.
Saw some Big Business last night. Happy Birthday, Chrittopher! With the help of Eric Prengel, I bought a delicious hero sandwich for only $4.50, and it lasted me all night!
Tom lent me a copy of Joe Sacco's Safe Area Gorazde, and it's really great, particularly the drawings. The reportage is, well, I don't know, it could use a good editor, most of it. But the drawings are fantastic, especially the ones Sacco does of himself. He looks totally creepy in his comic, even though he's actually kind of good looking in real life. I'm also reading W. G. Sebald's The Emigrants.
I miss you, too, little man!
What's going on with my programming project? Sorry guys, this has to be a part of every entry. Well, I got the ncurses interface for the little debug client I'm writing mostly off the ground. Ncurses is hard, but once you figure out how to do all the ncurses stuff in a single thread, it's cool. The only hard part is I can't figure out how not to force ncurses to busy-wait switching between listening for getch() input and listening to some other source (in my case, updates that show up in a synchronized queue). If you could do a select-based thing, it would be easy, since I could use a named pipe with the queue, but I don't know how to get getch() to write to an fd in the background. Crazy.
Tuesday, August 31, 2004
Twitter And Tweep
Believe it or not, I decided it would be a good idea to wear a suit to the march -- first of all because I look real snappy in a suit, but second and third because I wanted to demonstrate that young urban professionals (such as I am, I suppose) don't like Bush and, in case trouble broke out, the media might get some pictures of police arresting a guy in a suit. Well, there didn't turn out to be any trouble, but there did turn out to be a lot of heat. We got there -- there being the corner of 16th St. and 5th Ave., a location within this protest-assembly radius -- around 11:00 AM and then just pretty much stood around until 1:00 PM. (The thing was supposed to start at noon.) So there's the first picture, which I hope will convey something of how hot it was, since it doesn't really convey much else.
Oh yeah, so on the way to the thing, though, we ran into some UFP people who were giving away free signs to carry. We hadn't thought to make any signs, so we grabbed a couple but didn't really read what they said until it was too late to give them back. It turned out they were all about ending the occupation of Palestine, and, you know, I hate every goddamn country in the Middle East as much as the next Northeastern Elite, but I wasn't really feeling fired up over the concept of subhumanoid idol-worshippers fighting each other over a pathetic stretch of scorched earth, so after a few half-hearted death-to-Israels, Tom and Ted helped me turn my sign inside out. I wrote "Quagmire Accomplished" on mine; Cuntington did the same to his but ended up writing "Girlie Men 4 Kerry" on it, as you can see in that picture where Tom's holding it. That's a sentiment I can get behind, if you know what I mean.
Here's this inflatable pig thing that doesn't like Republicans.
So it was really hot, right? And I was wearing a suit, lest you all forget. And we were going like, fucking... one block an hour, literally. So at around 27th St., Katharine and I decided to take a little breather and stepped out of the march. I had to take a piss like nothin', so I roamed around until I found a wonderful, wonderful Starbucks that let me use the pisser without any questions. While I was waiting on line for the bathroom I heard this olive drab girl with a whole bunch of olive drab shit in her hair say, "This year I'm all about anti-corporate stuff. It's so freeing!" while she sipped on some kind of icy-pricy coffee drink. Irony, people: It's what we're fighting for. Irony: Is it the new... irony?
Katharine dropped out at this point. Wuss! A block later I saw an old woman with heatstroke throwing up a popsicle.
At around 30th St., we started seeing signs of the convention. First off, this hotel is apparently real happy to host the delegates. Well, Southgate & Affinia, if I ever have to stay at a luxury hotel in my hometown across the street from one of the most hectic awful transit hubs in the world, it ain't gonna be yours!
As we were getting close to the Garden, we saw all this black smoke from around 34th St. The local news later informed us that some "anarchists" had set this papier-mache dragon on fire to get a rise out of the cops. Bad, bad anarchists. Shame on you.
No, Republican National Convention; Thank you.
As we got to the garden, people started chanting "George Bush, go home!" Here's the thing, though -- nobody wanted to shout the whole thing, they either wanted to say "George Bush" or "go home!" and really nobody wanted to shout "George Bush." So I was the one who had to do the "George Bush" part, and I did it for about 5 minutes until my voice gave out. Here's a picture of all the cops hanging out around MSG; you can't really see too well, but there were a lot of them.
I don't have a picture of it, but that gigantic Fox News sign on 34th took a lot of verbal abuse as we rounded the corner towards 5th Ave.
Going across on 34th St. is where we started to meet some of the counter-protestors. The infamous Protest Warriors were the first ones we saw; they were all standing behind the barricades holding signs, most of which were concerned with various hypocrisies of Socialism. Hey, I'm a Federalist, guys. Don't waste your breath.
There were also like half a dozen garden variety religious wackos who had the typical array of signs and banners. I told the guy with the mangled fetus pictures that we should abort more babies, and this female protester next to me yelled out, "Leave my body out of this!" I'm not sure if she was agreeing with me or not. This other guy had this crude stenciled poster of a fighter jet that said "Support Bush, Support Jesus." I tried to get a round of "Fuck Jesus" going in response, but my fellow protesters pussed out; this dwarfy girl who looked like a real pain in the neck even told me not to go there. Christ, I hate women. Abort more babies!
Okay, last pictures -- this woman had a pretty sweet costume, but nobody was giving her any props. You liberals don't know a good thing when you see it.
This sign was cute, I guess. A bit too clever for its own good, though.
Another picture of cops, this time in this alley at around 30th St. and 5th Ave. One thing that's difficult to explain without better pictures is how many cops there were, especially on the 5th, which was a little weird, since that's where the protest started thinning out, actually. There would just be these huge banks of them, standing silently in formation, waiting for something to happen. And nothing did.
Okay, that's the end of it. Afterwards Mer and I went back to my parents' house (they'd marched as well, though we hadn't met up with them) and had some red wine and hamburgers on the deck in proper limousine liberal style. Now back to boring bullshit:
I want to donate a lot of my old comics to this comics museum / archive thing, but for tax reasons, I think, they want me to figure out how much I think they're worth, so I bought a copy of Wizard yesterday and carried a box of comics home from my parents' house and looked them all up in the price guide. Turns out this one box was worth around $300! Career in philanthropy, here I come.
I also had lunch with Devin at this place called Paul's on St. Mark's. Devin can really eat a hamburger, I tell you what. That thing was like a medicine ball made of meat.
What else, what else. Oh, so I finished The Stranger and now I'm reading some Jean Cocteau plays. The Infernal Machine is the best so far. I beat that game Knights of the Old Republic, too, playing as a "Darkie" Jedi. The ending is not great for either alignment, but let me tell you, you can kick a lot more ass as a Sith than as one of those ass-sucking Jedi. Speaking of ass-sucking, have you guys seen that new building-sized Calvin Klein ad on Houston street? That slut is all over that dude's butt.
Shattered Glass is off the hook.
Thursday, August 26, 2004
That Don't Matter, Joan
Boy, am I glad I didn't go to Amherst, though. Maybe it wasn't a representative sampling, but the people at the show were pretty creepy.
Ted got us tickets to see this play Frozen on Friday, which was fun as always, except that Frozen is probably the least interesting play you could possibly make about murdering children. Also I got some kind of awful food poisoning before the show and missed like the first 15 minutes because I was crapping all my organs out in the bathroom. They played this series of chimes like 3 or 4 times to get people to quiet down, I guess, but I started wondering if maybe they were trying to get me to hurry up in the john.
I got home at 7:40 or something today, which is pretty horrible. I don't feel horrible, though. The cat is chasing a nickel under the couch. I'm reading The Stranger and loving it.
I want to do this on Saturday, but I can't figure out where in NYC it's going to happen.
Monday, August 16, 2004
My Name Is Brody, I'm From Melbourne
Woah, has anyone out there tried to program with ncurses? That thing is fucked. It's like trying to position text absolutely in pre-CSS HTML or relatively in post-CSS HTML. This is all fucked. God, I want to die.
Reading: Killing Time, by Caleb Carr. The guy's an okay writer, I guess, but he's not much good at developing the interior monologue of the narrator. You know what I mean? It's like, it's really hard to tell what kind of a guy it is that's tell you the story.
WLIB sings:
Are things really getting better,
Like the newspaper says?
Thursday, August 12, 2004
Vultures Circle Round
My fucking bike got stolen last weekend! I kind of knew it could happen when I chained them up outside, so I'm not exactly reeling with the shock, but you know, I actually liked my bike, and I'd been nagging myself for some time to take it to 'On The Move' over on 12th and 7th to get it fixed up. Maybe it's for the best -- if it was gonna get stolen no matter what, I'm glad I didn't pump an extra $40 into it before the fact. I took Mer's bike upstairs (they didn't take it even though the two were chained together -- where's the justice, I ask) and put it in the bedroom.
Mer bought us an XBox! She got it with the game Knights of the Old Republic, which is pretty great. She's playing it now. It kind of defused my plans to buy a fancy new computer to play Call of You-Know-Who-Hu: Dark Cronners of the Scurth, because that game is coming out for XBox. So is DOOM3! Eat a grinch.
"At a point in every person's life, one has to look deeply into the mirror of one one's soul and decide one's unique truth in the world, not as we may want to see it or hope to see it, but as it is," McGreevey, a Democrat, said.Sounds like the guy wanted a piece of him:
The Associated Press reported that the man involved in the affair, a former government employee, demanded "an exorbitant sum of money to make it go away," a high-ranking administration official told wire service. Cabinet members and administration officials learned of that threat Wednesday night, the source said.First Alan Turing, now Jim McGreevey? You just can't have a gay affair this century without getting fucked.
Burned a copy of an older Distillers album, the one with Seneca Falls on it. It's okay, but not good enough to buy -- so I'm glad I didn't! Manifest destiny and all that.
Wednesday, August 04, 2004
This Ain't No Mecca, Man -- This Place Is Fucked!
Behind all the European faiths, religious and political, we find the first chapter of Genesis, which tells us that the world was created properly, that human existence is good, and that we are therefore entitled to multiply. Let us call this basic faith a categorical agreement with being.
The fact that until recently the word "shit" appeared in print as s--- has nothing to do with moral considerations. You can't claim that shit is immoral, after all! The objection to shit is a metaphysical one. The daily defecation session is daily proof of the unacceptability of Creation. Either/or: either shit is acceptable (in which case don't lock yourself in the bathroom!) or we are created in an unacceptable manner.
It follows, then, that the aesthetic ideal of the categorical agreement with being is a world in which shit is denied and everyone acts as though it did not exist. This aesthetic ideal is called kitsch.
Tuesday, August 03, 2004
Hang The Jerk Who Invented Work
On the plus side, after oh-so-much fussing and tweaking randomly and praying for my bug to go away, I finally figured out exactly what was going wrong with the socket communication in gzochi. I'm going to explain it, in case it can prevent any of you from tearing your own hair out over something similar: Okay, so first off, TCP sockets, which are great, are stream-oriented, which means you can treat them like files. That is, you can say, "hey, you, file descriptor! Do you have any data for me to read? I want 1024 bytes!" And the socket will say, "well, here's 37 bytes" and maybe the call to read() will even block for a little while before the socket says this because no one has actually sent the bytes. So here's what was happening in my program -- the user sends a message asking to join a game on a gzochi server; then, the server decides whether or not this is okay and tells the client so; then, if the request was approved, the server asynchronously sends a "token delivery" message, which is the key that will allow the client to actually initiate a datagram conversation with the server. The token is delivered asynchronously so that game availability would not necessarily be closely wed to the client requesting to join the game -- that was just a design choice I made, and hopefully it'll make the server more flexible in the long run. Anyway, what was happening was that the client would report the receipt of the message from the server saying whether or not the request to join the game was approved, but would not always (but sometimes would) receive the token, which, again, was sent in a separate message. I had no idea why this was happening.
Then I figured it out, and here's where it gets interesting. You'll need to know a few things: First of all, when you're reading from a stream into a buffer, you have to make sure that the buffer is big enough to hold the stuff you're reading. If, in one shot, you read, for example, 16 bytes, and you want to store all of it, you need to have a 16-byte buffer ready. You might think it'd be a good idea, then, to resize your buffer each time you read a byte -- read, allocate, read, allocate, etc., until you're done. No! This is bad, because allocation is time- / processor-intensive. Instead, what you do is try to read a big chunk at a time and write it all to the buffer, which is allocated by chunks. In my case, the chunk size is 1024 bytes.
The other key thing I should mention is that my TCP communication is mitigated by the use of zlib, a free (as in freedom) and wonderful compression library. zlib is also stream-oriented, in that you point it at some bytes and tell it to decompress them, and it'll come back and say, "hey, give me more bytes, the decompression's not finished," or, "okay, the message is fully decompressed." It figures out when it's decompressed the whole thing based on the input stream itself. This is great, because the stream-orientedness of TCP means that it's hard to tell when you've sent an entire message, especially when your messages are in (relatively) English text like mine are. I mean, you can use a certain character to signal the end of one message and the beginning of the next, but what if someone needs to send that character as part of a messaage? So by compressing the messages, I not only save bandwidth but also make the boundaries between messages programatically obvious.
So I grab 1024 bytes at a time, and zlib tells me when I've got a whole message. Here's where the problem was happening: If I grabbed more than one message's worth of bytes inside my message-reception code, I wouldn't look at anything past the point at which zlib told me it had decoded the first message. So each compressed message weighs it at about 100 bytes. When the client requests to join a game, the server sends two messages, one for the yes / no response, one for the token. On the client side, I ask the socket for 1024 bytes, and it gives me about 200. After processing about 100 of them, zlib tells me that it's done, and I return the decompressed message to the application layer, discarding the rest. So. It hadn't come up before because the server and client messages were usually one-to-one, like ping pong. It was when the second ball entered the mix that things started to go wrong.
Anyway, I fixed it by buffering my message-receiving code. So I still return the first message when zlib's finished decompressing it, but now I hang onto the remaining bytes and put them towards the next call to the message-receiving layer. Phew. Now I have to get back to designing this thing. Ugh. What a bad (2 months of utter anguish) coding experience.
Maybe I'm just an idiot.
Wednesday, July 28, 2004
I Put Her On The Guest List At The Show
Like the other weirdos do --
Ooh ooh-ooh-ooh ooh!
Implemented a full thread abstraction system for gzochi. It hasn't made me any happier. Maybe I'll port it to use dl*() instead of the preprocessor. I still can't figure out why this one block of code sometimes gets executed and sometimes doesn't -- valgrind doesn't report any memory problems, helgrind doesn't report any valid synchronization issues, and stepping through it in gdb makes the problem go away. Feels like a case of thread silliness / stack smashery, but I have no idea what to do about. Anyone, please, help me. Fuck.
Today was an easy day at work. I closed lots of bugs and made a concerted effort to make myself miserable by listening to Room On Fire. It worked!
Right now I'm watching some episodes of Bullshit! that Tom was kind enough to buy me. Yes, and I'm also wearing the Shrek 2 t-shirt, Tom, as a Dreamworks-gin scented tear rolls down my cheek. Katzenberg has won -- I love Shrek Brother.
Devlin, who's on the 12-to-12 right now, indicated that we'd rock out tonight. I'm pretty excited about that, since we're gonna try My Michelle, a song that rocks and, I think, is pretty easy to play on drums.
Friday, July 16, 2004
Just Don't Make Fun Of Mr. Jenkins, Mark
The other day I switched gzochi over to libpth, a user-space threading library, having bought the hype about it being a better choice for server systems and more portable than LinuxThreads pthreads. Well, more portable it may be, but the syscall-catching context switching it does is absolutely re. tard. ed. I don't want to have to write my entire application around a semi-working concurrency schema -- like, if I ever have to call *_yield(), something's wrong. I think I'm gonna switch it back to regular old retarded kernel pthreads... maybe. I don't know. I'm getting kind of sick of the whole thing.
I found a small bug in the glibc manual and they fixed it. My name's gonna be in the Changelog!
Wednesday, July 14, 2004
John McCain
"The constitutional amendment we're debating today strikes me as antithetical in every way to the core philosophy of Republicans. It usurps from the states a fundamental authority they have always possessed and imposes a federal remedy for a problem that most states do not believe confronts them."
NO:
He said if the U.S. Supreme Court strikes down the Defense of Marriage Act or "state remedies to judicial activism fail," then amending the federal Constitution might be "appropriate."
YES:
...the decision in Massachusetts to legalize same-sex marriages does "not represent a death knell to marriage."
Monday, July 05, 2004
Fricative
I hung out with Kevin Wasserman for a while yesterday (Ed.: July 4th, actually). I love that guy! He's real into cigars now (don't worry, he still likes HDTV)
I'm happy because I made some thread improvements. They didn't fix the real fucking problem, which is driving me absolutely bananas, but more on that in a second.
It's been a while since I wrote anything here.
I'm struggling to pound out this e-mail to my old senior project adviser, asking for a grad school recommendation. Do I really deserve a recommendation? The project was supposed to be about molecular biology, and I didn't learn that much about molecular biology. I'm worried that he'll want me to come up to the 'Have to discuss it and want me to pour forth on whether or not I've ever had an original idea in my life, Richard Yang-style. These are the types of thoughts that are always sub-pathetic and irritating to hear from other people but that are no less completely consuming when you're having them yourself.
gzochi's got a Heisenbug. For the non-technorati among you:
Heisenbug is a term used in software programming to describe a computer bug that disappears or alters its characteristics when it is researched.In my case it's a TCP message -- specifically, the one that delivers a "game entry token" to a user -- that never gets sent when I run gzochi-server from the command line, sometimes gets sent under gdb, and always gets sent under valgrind. After making myself crazy with it for the past two weeks, I've decided to ignore it and forge ahead. Hopefully it will present itself in a more obvious way later. But like I said, I did fix some other important stuff.
A common example are bugs that occur in a release-mode compile of a program but do not occur when researched under debug-mode, or some bugs caused by a race condition. The name is a pun on the physics term "Heisenberg Uncertainty principle", which is popularly believed to refer to the way observers affect the observed in quantum mechanics.
I had lunch with an old acquaintance yesterday. I'd been kind of hoping to rekindle our friendship -- we hadn't spoken much since 10th grade, really, mostly my fault -- but she was pretty concertedly ambivalent on the prospects of hanging out as far as I could tell. Or maybe she was just really depressed. Oh well, that's just the way life works.
My birthday's coming up. I could use a new wristwatch; mine loses time all over the place.
Tuesday, June 29, 2004
Pony Keg
I'm crushing on this Distillers song Seneca Falls real hard right now, which is kind of gay, since it's about Women's Rights. The funny thing is, a lot of web sites will let you download it for free. Maybe it was one of their singles or something.
I've got this scratchy feeling in my throat, which makes me thing I'm getting sick. The past two summers, I've gotten a bad sore throat and a fever right around this time -- I think it has something to do with mucus building up in my throat -- but I'd prefer not to have it happen right this weekend because, well, I want to eat hamburgers and drink beer and all that.
Having just come off the early shift, I seem to have picked up a disturbing habit -- I've started writing these pseudo-shorthand sentences, like, "Thanks for the data. Will get back to you shortly." Sick.