12-08-02 - 2


Concrete figures for something I regularly cite -

In the financial year 2001-2002, ending March 31, Sony posted net revenue of $56.9 billion (US dollars), with "net profit" of roughly $115 million ("operating income" of $1 billion). Granted, it was an especially bad year for Sony. In the current fiscal year, ending March 31, 2003, Sony expects to do much better, with closer to $1 billion (net) profit, on about the same revenue, $60 billion. Still, in this year Sony expects only a 1% profit margin on most of its business (consumer electronics), with the difference being made up by the 10% profit margin on PS2 games. Sony has a miniscule $5 million in cash reserves available. Sony has around $16 billion in hard assets (mainly machinery) that Microsoft doesn't have, but that's not really any sort of advantage.

In the same period, (year ended June 30, 2002), Microsoft posted revenue of $28.3 billion and net income of $7.8 billion (operating income of $11 billion). Microsoft has a staggering $38 billion dollars in cash (and non-cash liquid assets). This year (2003) appears to be even better for Microsoft, with estimated revenue around $32 billion, and "operating income" around $14 billion (net income around $10 billion). Microsoft has a staggering profit margin in the 25% to 30% range.

Just to compare, let's look at GE, perhaps the largest and most powerful corporation in the world. GE has total assets in excess of $500 billion, revenue around $130 billion, with profit around $14 billion.

Interestingly enough, GE and Microsoft are two of the largest tax-break-receivers in America. GE largely gets them through complicated leasing schemes; GE has paid on average a 10% tax on its profit in recent years (it should be paying 35% - that's a savings of over $3 billion each year). Notably, GE would be paying even much less (around 2%) if it weren't for the AMT (Alternative Minimum Tax) laws. Microsoft has received huge tax breaks due to a huge loop-hole for stock option grants. Stock options today are an essentially tax-free way to pay employees and write off profit. Microsoft has received roughly $3 billion in breaks each year, and in fact pays almost zero dollars in taxes.

All of this information is public; you can search Google and easy find it, and more. Most of it is available straight off the companies' own web sites, if you go and read their financial reports.

Another point of comparison - the entire GNP of Somalia is around $1 billion, about $200-300 per capita (I just picked Somalia to look up at random, by the way). The outstanding foreign debt that Somalia owes is around $3 billion. If you look at the world with importance assigned to dollars (which the people in power clearly do) it's easy to see how we can give breaks to GE ($495 billion) and bomb Somalia ($0).

12-08-02 - 1


There's been much hubbub lately of the five New York boys who have been found not guilty of the rape & murder in Central Park in 1989. The five boys confessed, but new evidence (and a new suspect) has led to them recanting the confession and their convictions being over-turned.

Why is there any surprise about this at all? University studies estimate that around 20% of the people in prison did not commit the crimes they are in for. And having a "confession" is almost anectodal evidence. Suspects are pressured to confess in many ways - with pure intimidation and physical violence, but mainly with promises that they'll be put in jail for much longer if they don't confess. These tactics are illegal, but widespread. The American criminal "justice" system is designed to put someone (preferably someone poor) in jail for the crime as fast as possible, whether they did it or not. The law enforcement establishment generally can't be concerned with complicated things like the truth or due process, which tend to get in the way of quickly finding a scapegoat.

Another fun development in this vein is the fact that a circuit court has recently ruled that "Enemy combatants" may be held prisoner indefinetely without being charged and with only the slightest evidence. These "enemy combatants" may be American citizens captured on American soil (though in all honesty, I don't understand why it's deemed reasonable to not provide non-citizens with the same due process rights as citizens). This is clearly the action of a police state, not a free democracy, and yet the puppet-courts are all too eager to uphold these gross violations of human rights that our commandant has inflicted upon us.


12-04-02 - 1


Yet more of the war on terror making me sick. All these adds about "if you buy drugs, you may be supporting terrorists" are fucking shit. Let's look at the facts - if you pay your taxes, you ARE supporting terrorists. Essentially every major terrorist area (Iran, Iraq, Afghanistan, Indonesia, Columbia, Nicaragua, Israel, Turkey) has received direct aid and arms from the US government. If you buy gas (oil), you ARE supporting terrorists. That oil money goes directly to the rich of the middle east, who pass it on to terrorists. Yet our government resists all drives to make the US less oil-dependent. It all makes me want to puke.


11-24-02 - 1


Some simple analysis of Capitalism. First of all, the only way to profit in a capitalist business is to swindle your customers. This is almost true by definition. If you sell an asset at cost, you haven't made any profit, you've simplify turned a non-liquid asset into a liquid asset. In order to make a profit, you must sell over cost. In order to make a big profit, you must sell something that's worth very little at a very high price. For example, Wall Street sold internet stock during the boom this way; they were really the same as a "pet rock" - very high price, very low value (HPLV). Generally, the Capitalist establishment is very excited about HPLV commodities, it spends a lot more on advertising them. Some examples are stocks, entertainment, fancy cars, diet foods, fancy clothes, cigarettes, booze, lottery tickets, software, etc. There are other more complicated ways that the Establishment acheives HPLV. One is with subsidies. Agribusiness, for example, gets the cost of production subsidized, while keeping the cost the same through price controls. The result is that if you grow wheat yourself, it has low value, because it must compete with the wholesale price of subsidized product, but major agribusiness has still made a large profit.

The next interesting thing in Capitalism is to realize that corporations are run by people. In an "ideal" capitalist model, corporations are just like individuals - they choose the things that are best for them. In reality, this doesn't happen. The reason is that corporations are run by CEO's, and CEO's are human, therefore they are greedy and selfish. The result is that Corporations do what is best for CEO's. Now, CEO's are almost by definition part of the Moneyed Elite. The Moneyed Elite in general sticks together and watches out for each other, since they live in great fear that the people will become empowered and try to acheive decent living conditions, which would ruin the great skewing of wealth that the Elite enjoy. CEO's also have connections in the Elite in their friends and family, their Alma Mater, their previous job, and of course they want to make sure they can jump to another good job when they run their current company into thye ground. The result is that CEO's generally do what is good for the Elite, hence Corporations generally make decisions based on benefitting the Moneyed Elite. Corporations clearly care nothing for their employees; they will do things to make them happy, but only in so far as it improves productivity, hence their bottom line. Furthermore, CEO's are generally very short sighted, and logically so. They really don't care how the Corporation does in the long term, because they want to get fired (and thus earn a huge severance) and then either retire (subsidized by the workers of the Corporation) or take a huge hiring bonus (and stock option grant that waters down the holdings of the average stock holder). CEO's only want to improve the profits of the company for the major shareholders (the Elite) in the short term. Thus, doing things like breaking up companies, shutting down factories, etc. are all "good for the company" (meaning "good for the Moneyed Elite") despite the human cost to the workers.

Governments and corporations in general are machines to improve the lives of the few at the cost of the many. Of course, not all governments are this way, but the US certainly is, and any one else that gets out of line, we rapidly bring back into line through sactions, IMF rules, etc. You may think, "hey, I have my DVD player and my SUV, I'm doing fine" - well, you're getting close to Moneyed Elite yourself (did you approve of the recent tax cut?), but you've still been thoroughly taken advantage of. Can you afford to buy the house you live in? How long could you afford to live without work? Are there open spaces near you, clean air to breathe? Are you afraid of the dangerous poor element? The real life-quality-improving benefit of your labor has been skimmed and diluted and sabotaged.

Taxes. Many people object to taxes, because it is a direct transfer of money from you to Government, and the Government will generally use it for bad things (direct transer of money to the Elite, via Lockheed, Boeing, ADM, Monsanto, EDS, foreign intervention, etc.). This is true, but to take out all your resentment on taxes is foolish. You must realize that your real wealth has been much more heavily adversely affected through subtle means - you're paid less than you should be, health insurance costs more than it should, things you buy are price-inflated, the things you own are depreciated, and the wonderful free things in the world (nature, community) are destroyed. Furthermore, Government is not all bad. Neither Governments nor Corporations are really entirely intentionally corrupt. There's no vast conspiracy. Many of the people who do these things don't really realize what they're doing. They're only doing what they were taught was right in a capitalist system - they are doing what's best for themselves (and their friends). America glorifies greed more than any other country. If you can gain fame and fortune by screwing over your neighbor, you are a clever hero, not the bastard that you should be considered. Our cultures idolatizes robbers and thugs like John Rockefeller, JP Morgan, Teddy Roosevelt, Andrew Carnegie, Jack Welch, etc. Even modern anti-heros like Bill Gates may be occasionally villified (out of jealousy), but anyone would trade places with him any day. Money is far more important than the means used to get it. Money is far more important than any side effects inflicted on others to obtain it.


11-21-02 - 1


The "War on Terror" is a horrible sham. Violence against the oppressed has never in the history of world made terrorists stop. It only enrages them, it makes the problem worse. After every major crack-down, terrorism INCREASES. Washington planners are smart, they must have known this. The purpose of the so-called "war on terror" was never to stop terrorism. What was it for? To create a pretext for invading Iraq? To distract the US from the horrible handling of domestic policy by the President? To change the flow of the opium trade? To destabilize Pakistan? or Saudi Arabia? Who knows what Machiavellian mischief is at work in the minds of the puppet masters.


11-9-02 - 1


I wonder why publishers allow games to be rented. Do video game rentals really reduce sales? Maybe they actually increase sales of good games? I wonder why there's no CD rental shops; obviously the people would just copy the CDs, but the rental shop would still make money - have the record labels made it illegal? If so, why don't game publishers do the same?


11-7-02 - 3


It's about the code. Who cares what comes out on the screen? The end result is always the same, it's the architecture, the foundation, the firmament, the supports - therein lies the beauty. Munch's Oddysee was a mediocrity-fest, but little bits of code inside were sweet shining gems. Some programmers really don't get this; they make unnecessary function calls, allocations, long ugly functions, overly terse variable names, overly long variable names, unclear strange ways of doing simple things. Their code may work fine, but it does not speak to the heart of the sensitive programmer. All books of poetry work equally well as timber, the beauty is in the composition.

11-7-02 - 2


Sales, and the whole principle behind sales, really bugs me. Almost any interaction where you're trying to get someone to endorse you or agree with you is a form of a "sale". Politics is a sale. Your interaction with your management is sales, and the interaction of your company with its funders is sales.

Sales is all about lying. If you try to sell the truth, you will fail. Even if your product is better, someone else will come in and promise impossible things, and they will get the sale. They will lie, BS, tell half truths, and take the sale from you.

In game development this happens in the pitch to the publisher. I could go to a publisher and say "In 2 years, I will form a company and develop a console shooter which is competetive with Halo 2", and I could be telling the truth (really!). Someone else will go to the publisher and say "in 1 year I will develop a game that will open up new markets and be a AAA hit". They are full of shit, but the publisher will give them the deal. If the publisher even thought about it a second they'd know which one was the better deal, but the reality is that they're a bunch of idiots.

I have problems with selling ideas all the time. If I go to someone and tell them an idea about how to do something better, probably 75% of the time they say "oh yeah" and then they don't do it. This is because I've given them gold, but it hasn't been sold well. Those same people will *pay* to go to GDC and get told the same thing from so-called experts. If the experts tell it to them, they'll think it's a great idea.

Sales sucks.

11-7-02 - 1


Sometimes it's amazing to me that decent games ever get made. Every single game development house seems to be a complete distaster of poor management, poor game designers, poor scheduling, poor communication, unnecessary crunches, etc. etc. And yet, somehow, some people occasionally manage to make a good game.


It's amusing to me that essentially all software companies won't give you time to do research, and yet they'll fire you if you don't. If you don't do research, your knowledge gets old, you're not on the cutting edge, you're not the good shit. In the worst companies, they restrict developers' time so badly that the developers' really lose touch with the cutting edge, and the only way to get educated people in is by hiring from somewhere that was more liberal. This is all part of a gross pattern of poor management of software developers.


10-15-02 - 1


NYPD Blue, and most TV "Cop Dramas", glorify police brutality. Then again, so do most "ra ra" war movies, etc.. This fiction of the out-of-control authority figure who doesn't play by the rules and takes justic into his own hands is some kind of sexy idol. I think it's disgusting. In the real world these guys are cowboys who usually don't know what the hell they're doing and just go around showing their dick to the world by slapping people around. These cop shows need to show a lot more cases of cops beating people up who did nothing wrong.


10-12-02 - 1


The profusion of medical drugs for afflictions of the mind is really disturbing to me. The idea of treating the populace at large for minor problems in their mental state is based on the underlying assumption that the doctors can define a "normal" mind state, and that it's inherently good to have a mind which is more "normal". Now, certainly I agree that there are people like manic-depressives and schizophrenics who have serious chemical problems in their brains and who can really benefit from treatment. But, millions of americans with depression? "bipolar disorder"? "anxiety disorder"? "panic disorder"? "social phobia"? People are not perfect, we all have strange little behaviors that we're not always happy about. We're shy, insecure, stressed, pushy, selfish, hyperactive, etc. etc. at what point is this just "you" vs. "a problem"?

The obvious next step is that in order to increase sales of pharmaceuticals, more and more mundane behavior will be treated. Did you miss the bus and feel upset? Pop a pill. Did you spill wine on your shirt? You may have critical embarrasment disorder, pop a pill. Do you stand at the side of the room in dance clubs, ashamed to shake your booty? You have booty-shake phobia, pop a pill. Are you a bit of a bastard? You may have not-very-nice disorder. Pop a pill.

What scares me even more is when parents drug their children. I've seen many of my own friends in high school put on Prozac. Sure, they were a little depressed - but that was probably because their parents were divorced, their dad treated them like shit, and their mom slept around. The parents surely complained to the doctor about their "hard to manage little brat", and the doctor suggested Prozac. I've seem little kids on Ritalin being fed bowls of Frosted Flakes and drinking Coke. This shit really pisses me off, because these psychotropic drugs are not well understood, the brain is not well understood, and childhood is a critical development time - these children are quite possibly being permanently damaged.

There are tons of web pages on this stuff, search "psychotropic" on google.


8-28-02 - 1


I saw "The Good Girl" last night; good movie. Jennifer Aniston is used as a lure to get people into the theater that normally wouldn't watch an "art" movie. It's written by Mike White, who wrote "Chuck & Buck", which was a *great* movie. Those movies are exactly the kind I've always been interested in making - little sad stories about life. The characters are a little bit unusual, but still believable, they're not over-the-top characitures like so many movies. I think that sadness (and the associated compassion) is one of the few beautiful things in the world.

I'd like to make a movie about a telemarketer. He's despised by most of the people he talks to throughout the day, how can he live with himself given that he spends his days doing such an insulting and pointless job? To him, his life is just like the rest of the human experience - the work's unpleasant, the people he talks to are rude to him, but he tries to joke with coworkers, he hates his boss, he's shy around a girl he likes at the coffee machine, and he looks at garbage men and wonders how they can stand their job. He wants more from his life, and he dreams of going to a fashion design school, but instead he watches TV at night.

I want to work on stories about the human experience.


5-22-02 - 1


BRDF for leaves (on trees and plants) would work well. I hope to get to try it some time reasonably soon.

Some software that should exist (I could/would write if I had time) :

  • Quality image zooming (enlargement). WM Withers has an article called "Augural Image Zooming" , but I'm convinced you can do even better with modern image analysis techniques. Image analysis comes mainly in three forms : 1. pattern identification and re-synthesis and used in texture generation; 2. histogram modelling, as used in image compression; 3. shape identification by edges and gradients as used in image-recognition. Combine these three and you can make a very good local model of images, which can be used for lots of things; one of them is image zooming (enlargement) with quality preservation.

  • Image sharpening. Again, using the above techniques, you should be able to take a blurry image and sharpen it. Obviously, the data's not there to make a perfect reconstruction, but with modeling, you could get close.

  • Image hole filling. Remove a chunk of an image, and fill in the hole by modeling around the borders and using continuity. This is not just blurring, it's extrapolation of the patterns. So, if you had a ball on carpet, and you remove the ball section of the image, it should be able to fill the hole with "carpet"-like pattern.


I finally saw "Eyes Wide Shut". It's incredibly beautiful, visually; Kubrik's use of color is really amazing. I particularly liked the way all the interiors at night are so orange and warm, with such strong blues outdoors. Other than the technical prowess, I found it very bland. It left me feeling nothing strong, feeling like nothing had really happened. I certainly couldn't imagine why so many people felt so strongly for or against the movie. Maybe I wanted it to be longer; I felt like the first 2 hours of the movie were a good setup for something interesting to happen - maybe the Tom Cruise character would try to inflitrate the secret society, maybe the couple would be torn apart by their desires for other people, maybe they would act out some of their urges for transgression and then find that they really didn't want that life, etc. something! anything passionate and powerful and dramatic, but none of that happened.

In the same match of movies, I saw "Hidden Agenda" by Ken Loach, one of my new favorite directors. This movie also leaves you with an ending where nothing really happens, but it's quite satisfying. Hidden Agenda is an interesting twist on the traditional detective narrative; throughout the movie, you essentially know who did, and most of why. The plot is about the detective trying to find a way to bring the perpetrators to justice without tearing apart his own life and the whole world he lives in. In the end, he can't, so the movie ends with the world being stuck in the same corrupt shit-hole it's always in.


I think there's a big market in games for non-hardcore gamers. The problem is that it's very hard to make games for these people. The Sims does a very good job at it, but there aren't many others. Of course there are the puzzle games (Bejewelled, etc.), but I haven't seen a single puzzle game since Tetris which does anything new. Also, people won't pay much for puzzle games and it's not a huge market, though this will continue to be a market. To make a game for these people, it can't involve twitch, it can't involve precise control, since many of these people find the mouse or gamepad to be a very awkward input device; it can't be too complicated or be a contest of wits since many of these people aren't very bright. It needs to be something like a card game; most card games are not very complicated, don't require speed or lots of brains, etc. the best card games have an element of skill so that a better player will statistically beat a less skilled player, but they also have enough of an element of luck that a weaker player will win often enough to not be discouraged. Games like the MMORPG's are sort of a start in this direction, though the high end players of those games are very hard-core and savvy there are also barely-computer-literate people who play them almost as chat rooms.


Dungeon Siege - we put the TS in RPG


I've been thinking about audio analysis and modification a lot lately. Audio's weird because it seems very simple compared to images, being a 1d signal instead of a 2d signal, but in fact it's quite complicated. For one thing, you have a very wide frequency range; you need to work from about 10 Hz to 10 KHz , that means that the very-large-scale structure (low frequency sound) can span (at least) 2k samples, and as much as 96k samples if you're really picky. For another thing, there's a lot of complicated perceptual stuff like chords, harmonics, octaves and such which are very deeply embedded in the brain. For another, there's this whole issue of phase; that is, you can take a continuous wave and shift it without changing the way it sounds to the ear. I like to think of audio as made up of two parts : the "shapes" of sounds, like you see in the attack of a sound; this stuff is very phase-dependent, like drums and such are primarily in the "shape". The other part is the continuous tones; this stuff is just a superposition of simple waveforms, and it's phase-invariant. The funny thing is that this is a totally overcomplete representation; either "shape" or "waves" can represent the whole signal on their own, but usually one or the other is natural. I haven't found this well addressed in the literature; it seems like a big problem for audio in general. For example, if I want to do instrument recognition (like to take a recorded audio track and separate out the components), I need to do this shape/wave analysis. To recognize an instrument, I want to look at it in a phase-invariant way, I want to scale out ther frequency of the note, and I want to scale out the amplitude; I want to get the sample into a standard reference frame so that I can just compare it to a library.

The Windowed Fourier Transform is sort of a good start for analyzing audio. The goal is get a picture of the frequency content of the signal at each time. So, at each time, you do a Fourier Transform to sample at max frequency with a very small window (a window is something like a Gaussian function that you multiply on to smoothly select out just a portion of the original signal), then you sample the next lower frequency with a slightly larger window, all the way up to a very low frequency with a very large window. This is some kind of crazy analysis, and it's not a correct complete orthonormal basis; the goal is not to exactly regenerate the original signal. So, now we have this set of data which says at each time, how much of a given frequency is present. We can say "at time t, what's the spectrum?". Now we can do things like adjust the pitch of the sound without changing the speed it plays, just be up-shifting all this information. Similarly, we can change the speed of the sound without changing the pitch. We regenerate an output signal by interpolating all this information; we need to phase-adjust to make the regeneration smooth and continuous, eg. not introducing any lumps in the signal that we're going to hear. The signal that comes out is not anything like the original, but it sounds just like the original. The differences lie only in small phase adjustments of various frequency components; this can make the waveform look really different in something like a trivial difference (ala RMSE), but it hasn't changed so far as your ear is concerned.

Of course, this is much too slow; it's O(N^2log(N)) . In practice, instead of sampling at every time, you sample in intervals, like 0.1 milliseconds apart. Then you also don't analyze all the way down to very low frequencies; you just stop at some reasonably high frequency, like 100 Hz, and you hope that the lower stuff sort of comes out right.


Kung Fu Chess is great; in many ways it's superior to the games we big-budget game developers make; it's a blast, it's simple, it's quick, and it's deep.

I have some sympathy for terrorism; I need to explain that a lot more, because at first sight it's sort of offensive. If you were a small ethnic group tormented by oppressors who took your freedom and killed your relatives, how could you stand up to them? You cannot hope to defeat their army, so traditional war will get you nowhere, but at the same time you cannot allow this to happen. It's all very nice to say "rely on the international community", but that typically gets you nowhere. So, how can you possibly affect change? The only way is to make it too difficult for the oppressors to keep their hold on you. The most effective way to do that is with terrorism. The Algerians did it to the French, the East Timorese did it to the Indonesians, hell the Americans did it to the Brittish. In all those cases, the terrorists were clearly in the right; of course, when we agree with them we call them "revolutionaries" or "freedom fighters" or something. Now, I'm not saying that the Al Qaeda falls into this group, nor am I saying that the Palestinians necessarily do either (that's very complicated), but certainly many Palestinians *believe* that they are in this group, fighting the just fight for their freedom in the only way they can. The support that the United States gives to Israel, which has become a totalitarian state with no mercy, disgusts me.


I just put up the PPMZ2 code here on my site, and it's reminded me why I stopped working on it back in 1999. I hit a couple of funny issues; I was working mainly with the Calgary Corpus, and I was (and still am) convinced that PPMZ is very close to the best you can do with a Markov coder. There were some funny files in the Corpus - "geo" and "pic". "pic" is an actual binary image, and you could compress it better if you could tell it was an image, deduce its dimensions, and use a bilevel image coder on it. You could also do well on it just be transposing it, so that you packing image columns rather than rows. PPMZ was incapable of figuring any of this out on its own, of course. "geo" is a binary file from a GIS database or something like that; anyway it consists of a bunch of 4-byte floats one after another. You can pack it best if you can figure that out, and actually read it in 4-byte chunks and do some special float packer. You can also do well just by reorganizing it so that the significant bits of the floats are together; that is, reorg it from ABCDABCD... to AAA..BBB..CCC..DDD... ; again, PPMZ couldn't figure this out on its own. This was all old news, and somewhat depressing, but I pressed on. Then, around the time that I gave up, people started really working on coders that special-cased English text. PPMZ has always been very good at English text, so I thought I would play that game as well. In fact, PPMZ2 right now has a mode with a pre-conditioned order-0 model for text which knows the nature frequency of occurance of the letters in English. Anyway, most of the special casing for text involves taking advantage of rule-based patterns that a finite-context coder (like a Markov model) cannot capture. For example, capitol letters in English text primarily occur only in a few places; at the start of a sentence or on a proper noun. So, you can first compress your text all in lower case, and then go back through and pack the capitols as a boolean flag on each letter; that flag is highly predictable; ". " predicts a capitol very well, as does "english" (trying to make "English"), etc. Similarly, punctuation is highly predictable. You can do very well by packing English text as all lower case with no punctuation, eg. with a 27-letter alphabet (sending spaces), and then filling in the remaining characters, which are highly predictable from the text. There's a lot more you can do, but this is a good sampling. This depresses me. What I'm doing here is building *my* special knowledge of the data into the coder. The idea of general-purpose coder is that it should be figuring these things out on its own. Part of the problem with that is that I have seen millions and millions of words of English text; that is my coding model is very well conditioned and very large; in a sense we humans have a massive amount of "side information" in the form of our shared collective knowledge. I'm reminded of this Star Trek TNG episode where a race of people speak entirely in references; they say "Darmok and Jalad at Tanagra" (or something like that) and it means a huge amount because of their shared side-information. The other depressing thing is that a lot of this information is rule-based or "finite state", and not well described with a finite context model. We still have no way of efficienctly learning (approximate) rules or finite-state information in compression, and it's unclear to me how to get there. I'm sure it will happen, but we're really getting into the realm of AI and computer learning. You need a multi-stage compressor, where at the lowest level, you're running something like PPMZ, but it's also feeding the text through some fancy AI (like a Neural Net or what ever) that's learning about rules in the data and feeding probabilities back to the base compression engine. The only problem with this picture is the one I mentioned before about the amount of conditioning data. Most compression engines are "one-off" without long-term memory, which is a mess to deal with; this means that they don't have long to learn about the data, and these AI engine do need a lot of time to learn.


I'd like to see a research project to try to simulate a single real scene in CG. So far as I know this has never been done; pick a place, like my living room, and try to build it in CG and render images that look "real". The test of "real" should be done by comparing photos and CG shots and asking a blind sample of people which is the computer-generated shot. The CG qualifies as "real" when >= 50% of the people say the CG shot is the real one. I think it would be interesting, once the image gets really close to looking real, then you can take photos and compare, and ask yourself "why doesn't the CG image look real?". I think a lot of interesting stuff could come out of that; is it dust in the air making the lighing more diffuse in the real world? Is it that the sun light arriving in the real world is varying and non-uniform because it's been through all kinds of interactions on the way to the living room? Is it the layers of dirt and dust on objects in the real world? Is it subtle subsurface scattering and other micro-surface effects? Is it that 2d textures just can't look really real; that you actually need cloth and wood and such that have 3d shape, etc...


More and more projects that I'm considering working on are in the realm of human-mimicing machines. Let me start back at the beginning. Some things I'm interested in are shape identification in images and extraction of instruments in audio. I know these things are possible in a reliable and accurate way, because humans can do it. You must be able to describe what humans do with some algorithm, that could be reproduced in a machine. The problem with this argument is that it may not be practical; that is, how close are tasks like these to "true AI" - that is, making a machine that has creativity, etc. For example, when I see that a "zebra" is a "zebra", as opposed to a funny-looking white horse with extreme shadows on it, how much of my database of knowledge about the world am I using? How hard is it to fool the brain? (pretty hard, with real images).


The Spherical Harmonic technique of Hanrahan et.al. in Siggraph 2001 is pretty great; it's practical in realtime on PixelShader 1.4 hardware (eg. the new Radeons). You can think of it as an enhancement of the old "environment mapped lighting" technique, which I've discussed many times in various places. On the other hand, the useful applications of this technique are still quite low due to some difficult problems. It really only works with static lighting environments, because you need to spend a lot of time precomputing these maps (that's kind of the whole point, to be able to do much higher quality lighting math in your precomputation step), and it only works for the moment in very small closed environments, because there's no good way to sample at multiple points and interpolate, or whatever.


I think it's quite possible that the laws of the universe are infinite. First, a bit of Goedel argument, ala Penrose :

The physical laws of the universe correpond to a formal system, in that they specify which computations can be done in that universe, and computations correspond to logical statements ala Turing/Penrose. Now, the Goedel theorem says that for any consistent formal system F, there exist statements which cannot be proved with F. In fact, the Goedel statement on F, let's call it G(F), is a true statement that cannot be proved with F. Now if F is the formal system of the physical laws of the universe, then G(F) cannot be proved with it, but G(F) is true, so those laws must not be all the laws of the universe!! This is a bad paradox, and the only way to solve it is by making F exempt to Goedel. One way to do that is if F is infinitely large.

Let me digress briefly to say that an "infinite" F need not be infinite in the way you might think; that is, it need not really be an infinite set of rules. It might just be an infinitely precise number with infinite entropy (like the "Chaikin number"). Now, a number like PI does not count, because it can be computed with a finite set of rules, and a number like sqrt(2) certainly doesn't count, but maybe the (unitless) charge of the electron (the "alpha" constant, roughly 137 (more like 137.03597... though perhaps different in an infinite number of places) might be such a number. Note that an infinite set of rules can be encoded in an infinite number, so in a sense, they are equivalent, but thinking in terms of infinite numbers seems closer to our every day experience. Now, it's quite possible that numbers like alpha will be derived by some deeper theory, and so not really have infinite entropy, but for the moment our physics has lots of these infinite numbers.

Anyway, this is all sort of an aside to my main point, which is - so what if the rules of the universe are infinite? I think it was Einstein's achilles heel in the end that he thought there must be a finite set of knowable rules that control the universe. Sure, there might be, but there also might not be. Note that I'm talking here about "knowable in principle", and not "knowable in practice", because it's possible that the rules of the universe are finite and knowable, but are just far too complex for our minds to ever understand. For example, the rules might take 2^9999 bits to encode, which would prevent humans from ever knowing them. So, whatever, who cares? The role of physics is not to find the absolute answer about what the universe is doing; even if you had the final set of rules, you could never know that it was the final set of rules! The role of physics is to find a good model for the universe. A model should be able to predict what will happen when a certain configuration moves through time in the universe with a high degree of accuracy. Our current model (quantum field theory + general relativity) is incredibly good; it's certainly not the end, and I suggest there may be no end, and in fact whether there is an end is the wrong the question to ask.

The question "is quantum mechanics the final answer?" is usually asked for the wrong reasons, as if it not being the final answer somehow invalidates it. It's not the final answer, but that doesn't make it any less valid. The ideas that quantum mechanics puts in our heads, about superpositions of amplitudes moving through time, sampling all possible paths, those ideas are good ideas, even if they're not right! Why? Because they fit the universe so closely, that they're a good approximation. Wave theory of sound is not "right"; what's actually happening is a complicated QFT interaction of all those atoms; who cares? wave theory is perfectly valid as an approximation, and it's very useful to think that way. The question "what is actually happening when a sound wave moves through air?" might be a bad question, it might be unanswerable; and who cares if it is? The right question is "what is the simplest very good approximation of the mechanism for sound waves moving through air?" (or something like that).

Non-scientists (and surprisingly many scientists) have a lot of trouble giving up this idea that science is about figuring out the root of the universe. It's not, and to ever claim that you have the final laws is a completely indefensible position.


I wonder when modern band name styles developed. I mean, at some point in history, like in the 19th century, bands were named in logical ways, like "The London Quartet" or the "David Goliath and his Large Band". Then, some group started calling themself something like "Bedspread". That must have been a weird time; by the 40s it seems that weird group names were an accepted thing. Weird-band-namers in that time must have thought themselves very clever; now, names like "Pavement" or "Cake" don't seem clever at all, and are completely divorced of meaning; even in the age of "The Crickets" and "The Beatles" the bands felt compelled to have some logical reason for their name, be it an insect on one of their recordings, or a pun.

I wonder if toilet paper companies do "field" product testing. I have this image of the Charmin toilet paper lab; they develop a new product, and then they're like "ok, Stan, make some beans, gotta test it".

I've been wondering this for a long time, but don't think I've written it down : all those products that say "not tested on animals" - what are they tested on? The consumer? Should I be scared of using a shampoo that's not tested on animals? Better to test on chimpanzees than humans, no?


Idea for better enlarging of images :

Take an image. Wavelet transform it with a nice smooth-basis wavelet. You will end up seeing the shape of the mother wavelet in the enlarged image, so choice of the wavelet may be important; for best quality, allow several choices and let the user pick the one that turns out best. Now, increase the size of the image in the wavelet domain by adding more subband levels. For example, a 1x1 source image would just make an "LL" band. A 4x4 would make an LL and 2 sets of {LH,HL,HH} ; you can double the image size by adding an {LH,HL,HH} band. Fill out the new bands somehow (see later). Now inverse-transform the wavelet image. Result is a higher resolution image.

Now the question is how to fill out the added bands. The easiest thing is to make them zero. If you do this, it's equivalent to using the source pixels as coefficients for mother wavelets in a higher resolution; if, for example, the wavelet is a "cosine" wavelet transform (ala EZDCT) then this is just Fourier-upsampling. The reason this is cool is that there are better things to do. It turns out that natural images have correlation at all levels of resolution. What that means is that all the "LH" bands roughly look the same; in particular, the correlation matrix between an "LH" band at level (n-1) and an "LH" band at level (n) is roughly the same for all (n) !! This means that we can build a deduced heurstic correlation matrix (via stastical analysis, just like a compressor would do) and then use that to predict the next level!

(minor note to self/implementer : make sure your wavelets are normalized; work in YUV space; maybe gamma-adjust to make the intensities light linear? use doubles throughout).


There's this really old idea to do virtual storage by having a small hard drive, and then keep lots of data floating around on the wires and routers of the internet. It occurred to me the other day that this could actually be done now in a cool "guerilla" way. So, idea for using the internet to back up your hard drive :

This is a lossy storage system, so it's used only for optional backups, and ideally each file would be stored in several places for RAID-style safety. Basically, you run a background task which is constantly feeding your data out to the internet. Your data can be crammed into lots of places. The program can get you lots of free website accounts on geocities, yahoo, etc. and cram your data up there; the program can post your data to the usenet newsgroups and then recover it via news archives; the program can get you lots of free email accounts and email the data to those accounts. Of course the data would be encrypted! Someone more sneakily, the data can just be routed around in loops. You can send out data to bad email addresses all over the internet; when it bounces back to you, you can delete it if you don't need it (and immediately send it out again). The result is that at least one backup of every file on your machine is floating around as an email in transit. You can make the turn-around longer by routing the mail through loops of anonymous re-senders and other such free services. You can use a chain of free email accounts to keep your data flowing in loops.


I bought 4 kiwis. The first I ate was very unripe, quite sour and hard. I waited a few days and ate the next, it was pretty sour and not soft at all. Today I ate the third kiwi; it has a slight hint of sweetness, and a little bit of softness. Perhaps the last kiwi will be good.

Today I thought to tell my youngest brother, James, that he needs to learn to do things that he finds unpleasant or disagrees with, "since in life, it's sometimes necessary to do those things to reach your goals". Then I paused and realized that I'm still not convinced of that fact. In my youth I would have flown into a rage over that edict, crying that it's senseless - why would you do something unpleasant in your life in order to acheive pleasantness in your life!? if the goal of life is to enjoy it, then just do it now! Why is enjoyment later considered better than enjoyment now? (as an aside, there is of course no "goal" or "reason" for life except to get to the end (why did the chicken live? to die), by which reasoning the suicides are the real "winners" in life, and the martyrs are doing a good job too, but they've got some confused side track about some nonsense "cause" or other). Anyway, I was saying that in my youth I rebelled against the idea that one must ocassionally conform to the social rules and "play the game" (as the say) in order to get ahead. I would mouth off in school, trying to show the teachers that I didn't consider them superior, and that this enforced heirarchy was only an obstruction to real learning; I would refuse to do busy-work, occasionally getting B's in classes I should have aced because of things like "points off for using pencil when you're required to use pen" or "points off for handwriting" or "didn't do the assignment to write each vocabulary word ten times". I felt the same way socially, and still do somewhat. I would intentionally violate social mores that I thought were silly. For example, at various times I thought religion was just insane - how can a rational person believe that a woman was made from a man's rib? (for example) - and I would tell people so. I would call people by slurs just to see their reaction, because I thought it insane to get riled up over what a complete stranger calls you. I would wear ragged, ripped clothing all the time to outrage the goofs.

I've moved past all this silliness to some extent; I now find it just as silly for me to find amusement in someone getting riled up as I find it silly that they got riled up. (as an aside, I used to be incredibly amused by the pure insanity and ridiculousness of the world; now I find it much more depressing; what I once thought just insane I now see as a manifestation of greed, sloth, avarice, and stupidity in the human race). Anyway, I now (sometimes) hold my tongue when I know someone is telling a lie, or when I have an opportunity for an "I told you so" or such. I now play some of the "games". For example, a good "game" that my dad me is this one : if you have an idea which you expect will receive resistance, first place the seed of the idea, then coax the decision maker towards that idea. When he arrives at it on his own, praise him for his brilliance, all the while basking in getting your way. This method is much more likely to get results than just presenting the idea and all the pros and cons, since people are much more likely to support their own idea than someone else's. Is it wrong to play this "game" ? Certainly not; it's a very mild form of manipulation compared to what some people do. Does it make me feel sick inside? Yes, a little bit. Do I wish I worked and lived in a place where I never had to do things like that? Yes, very much. Does such a place exist? Maybe not.


A mini survey of sorts; I've got a bunch of research I've done that I could write about, so you all can vote on what you'd like to hear about :

  • Fast ray-triangle intersection with side information (barycentric precomputation)
  • Experiments on primitive bounding volumes (aka "you're probably doing the wrong thing")
  • Detailed analysis of light & shadow techniques (aka "it's hopeless")
  • Fast collision detection with line-swept spheres


Movies : The Eel (Shohei Imamura) ; Music : The Shins


More thoughts on work as war. It's amazing what trials and horror you can fight through in war. BUT the minute you feel that your cause is not just, your resolve disintegrates and the leeches and mud and cold and hunger all become unbearable. Also, if your general is lobbing grenades into your platoon and giggling (I imagine something like a cross between MacArthur in Dr. Strangelove and the policeman in Young Frankenstein), you sort of turn around say "what the fuck are you doing?" incredulously, like "you want us to fight this war, but you're killing us!". Then you toss down your guns and go home.


Reading about the horrible human rights violations China has committed recently (and throughout its history), I initially think that it's a horrible irony to grant the 2008 Olympic games to Beijing, games that are supposed to unite the world and be a symbol of a free peaceful society. What's the alternative, though? Denying them that, and trade, and normal relations with the west? Isolating China (like a child sent to its room for bad behavior) is surely the wrong tack. An isolated China would stew and build hatred for the west. The political think tanks are right that the only way to free China is by embracing it, and simply trying to ignore its transgressions (while still voicing disapproval). Of course, this business of not even acknowledging the violations has got to go.


I guess I'll never be really happy in any corporation. A human needs freedom, a human needs to be able to be really wrong once in a while, to get naked and run around the office, to punch holes in the wall, to just scream, to curse at everyone around and then buy them coffees, to take all your mates on a drive to Mexico. I can't handle this idea of working with people you don't like and living your life in the time outside of work; I'm not sure why, lots of people seem to do it, but not I. I need my coworkers to be my mates, to have that camraderie, etc. It's not just about getting personally wild, though, it's about the company being wild. It's about not using focus groups, it's about doing things that don't appeal to the mass market. I want to write Kafka, not Steven King, I want to make Rushmore, not Rush Hour, I want to paint Francis Bacon, not Dali. Unfortunately, most of the people doing wild things don't know WTF they're doing. It's also very hard to find them. Genius is a rare thing, and it's very hard to spot before it's exploded publicly (genius and insanity are only epsilon apart).

I read recently that the way modern armies work is entirely based on the pack mentality of the troops in a platoon. Any one soldier on his own might stop and say "wait, what the fuck am I doing here?" and run on home, but if he has that good bond with his platoon, he'll think "no, I can't bail out on my mates". A good workplace is the same way - even if you're ready to collapse, you know you have to suck it up to help out your crew. I've been thinking a lot lately about these analogies between armies and companies. I think the dream in a corporation is to have a strong and wise leader that you can respect, like Duke Leto Atreides or Romell or Napoleon or Henry V, and not a maniac or idiot or coward. The best feeling is to trust and feel secure in the hands of your leadership - to know that if you can follow orders and execute them, then all will be well. Humans can do amazing things when they're set up for it. The best situation is to have a trusted leader and for him to say "Look, I've got this master plan, and here's your role : do this and this, and if everyone does their part, we'll be victorious". If you really believe it, then you'll get it done and go to incredible lenghs to do so. The worst thing is when you don't trust your leader, and they give you that same speech, and you know inside that even if you do your part perfectly, the war won't be won, and you'll be hearing the same speech next week.


Sometimes I just want to get crazy, to be poor, broke, live in the big city, and do something important, do something to change the world, do something different, like art or music or *something*, to be addicted to drugs, or a criminal. To not just be a cog in the machine, to not just do the same crap that everyone in the world is doing, to not be replaceable, to not enjoy nice wine, to not have a nice car, to not watch television. But then that feeling passes and I go back to doing all those things that I despised a moment ago, because after all, I do like them so.

One of my best memories is sitting on the floor in college, drinking and smoking and playing poker (badly), listening to Pavement and Luna and the Replacements and such. It was simple, it wasn't big fun, but it was pure. I wasn't hanging out with them for any calculated reason, it wasn't to build business relationships, or to get invited on their next ski trip, or to get with the sister, or whatever, it was just a moment.

I need to find someone older who's gotten through this. It seems like many people feel this lack of satisfaction in their youth, and most people get over it by simply having their spirit killed over the years, until eventually they just are content to work like drones and go home to their dog and their television. One of the better attitudes that I've seen is to just sort of ignore the crap that's going on around, and just try to do your own thing in whatever situation you're in and make the best of it. Perhaps I need to do more of that, but I still have too much desire to improve the world to just sit back and laugh when crazy shit happens. For example, when someone tries to run me off the road, I can't just laugh about it, I want to cut them off and get out of my car and give them a lecture about the shit they're doing. If you're Kieslowski, making films in communist Poland, the right thing to do is to try to express yourself, but to work within the system. Even when the censors chop up your movie, or when you have to put all your meaning into subtle subtext, you can be happy about doing what you really want to; it's futile and fruitless to rail against the system. I must learn from this.

In the real world, commercial pressures and focus groups and such are a must. So, the secret is to find that compromise, that sweet spot, where you can do the artistic things that you really want to, and to also be successful enough to keep going.


In article , hsutter@acm.org says...
> note that the above version has other problems
>(e.g., the return value should be a reference to non-const and the function
>should end with "return *this;").

I've read this over and over and just can't understand it.  I don't
see what the possible benefit of this is.  The only reason why you
should return a reference from your assignment operator (that I can see)
is so that you can write code like

a = b = c;


(a = b) == c


I don't think it's a good idea to write interfaces that permit this, and
I have no interest in supporting client code that does this.

Now, I've often heard it said that "integral types support it, so you
should support it" , but integral types support all kinds of things that
I don't support, like bitwise OR operators.  Why should my Mutex class
try to act like an integer?


Jesse Helms, Phil Gramm, and Strom Thurmond are all finally leaving the Senate (by not running for re-election) due to old age. The enemy is vanquished by attrition, but surely the Hydra will grow new heads.

I have very little time for the "rants" these days; I can't get to my web-site from work, and I have very few moments of free time at home.

There's this traditional casting of blame in companies up and down the heirarchy. Management sits around and says "my workers are a bunch of bums, it's their fault the job's not getting done", and the workers sit around and say "management is a bunch of bums, it's their fault we weren't told to do the right job". This is inevitable to some extent; it takes a very extraordinary personality to actually accept the blame, and anyway a lot of the time everyone is to blame so both people may be correct. Regardless, this breeds bad blood, and is to be avoided. I think the only way to do this is to merge management and labor; that way, labor can't blame the schedulers - they made the schedule themselves! To do this you need a really open environment, where everyone knows everything and is involved in all aspects of the work.

This whole terrorism this has captivated the county, of course. The sick side of me can't help being proud of the terrorists - everyone was so sure that they could never do any significant damage in America, but look how they've succeeded! Of course, the deaths of the innocents is terrible, but it's also terrible in Palestine, in Afghanistan, in Pakistan, in Timor, in Indonesia, in China, in Haiti, in Cuba, in Columbia, etc. etc. Chances are, the US will retaliate hard against someone (not necessarilly the culprit). This is a huge mistake; it's what creates terrorists in the first place. The only remedy for terrorism is defense and bringing peace to the troubled parts of the world, not counter-attack.


I've been thinking a lot lately about the comparison of "work" and "school". It seems that in the games industry, there is widespread acceptance that you have to crunch to finish a product (this is a belief held through most of the software industry). In school, someone who crunches to finish a report is a slacker, a procrastinator. Often, you can get the job done that way (in school), but it definitely doesn't produce the best results. The best work is done by getting as much done as early as possible. I was always a bit of a procrastinator when I knew I could get away with it, but whenever I got an assignment that was actually difficult I would say "oh crap" and immediately get to work. Now, in industry you could blame this on a couple of things. You could say it's due to bad scheduling, it's due to the difficulty of estimating how long things will take, it's due to the changing nature of the task, etc. However, all of these excuses presume that you originally intended to meet your deadline by steady even progress. I think that assumption is wrong. I think most executives and producers in the game industry have the intention from the beginning of making a hard crunch at the end. Now, almost all of them (except for the cowboys) will tell you that they don't have that intention, and some of them will even believe it when they say it (it's a truism that the higher you are in the corporate machine, the more you lie; that's not necessarilly a personal flaw, it's just a very strong pattern (part of the reason for that is just that the lower-rung people have less to lie about; they don't know the secrets so they can't keep them! (and let me qualify that again : much of the "lieing" isn't straightforward; it's usually in the form of not sharing all the information you have))).

Anyway, where does this come from? Certainly, in school, most people were procrastinators. Only a handful actually started early, and many of those were just brown-nosers, honor-rollers that end up going nowhere in their lives. So, what's left is a handful of magna-cum-laude who start things early, and a mess of procrastinating business (&c) majors. So, given those odds, chances are your boss is one of the latter. Now, I'm not sure this accounts for all of it. There are many more issues. One is that the schedulers have often never done the work they're scheduling. Because of that they really don't believe the truth that everyone in the business knows : when you work creative people beyond their limit, their net work goes down even as their number of hours goes up. This has been documented over and over in productivity studies, but the corporate machine just doesn't get it. The fundamental reason for this is that until you've experienced it, you just don't believe it. Most writers and composers know it; if you try to work too hard, you'll never get done at all. Dante wrote one page of the Inferno each day; this pace is normal for writers (though the regularity isn't). The other big issue is that the schedulers really believe that they'll get tons of work done in the final crunch. The really sad thing about this is that it's partially true. The damned employees are very irresponsible and just don't do the right work. It's not a matter of working hard, it's a matter of what you're doing when you work. They'll say "there're months left, no need to do the hard stuff, let's work on the fun stuff" and the hard stuff will never get done until crunch. There's also a way that crunch focuses you on really helping out the bottleneck in the pipeline, as opposed to just doing your own thing.


I was just thinking about cleaning the house, and it made me think of programming. When I clean, I tend to have one of two modes of operation. In one mode, I'm on a mission to eradicate every last ounce of filth. I usually start somewhere juicy, like the bathroom, and scrub and scrub for hours, dusting the ceilings, replacing the air filters, etc. Alas, once I've finished my one room, hours have passed, and I have no energy to clean any more. In the other mode, I'm just trying to straighten up for guests (or whatever); I attack only the very visible filth - clothes on the floor, dishes in the sink. Dust and grime goes completely ignored.

This strikes me as just what programming personalities are like - either meticulous and perfectionist, but isolated, or comprehensive but not thorough. Now, the ideal programmer will initially do the most important things, and then refine to get more thorough as necessary or as he ("he" not "she", let's not kid ourselves) has time. So, what's this like in a house? You do a first pass to clean the most obvious things, then a second pass to scrub the floor, next do the laundry, wash the windows, finally dust, etc. It's interesting that nobody actually works or lives like this. It's the logic thing, but it's just not human.


(very old) Interesting compression idea :

16-bit fixed width codes.

Basically, the 16-bits refers into a
static dictionary.

Two ways to generate :

1. Explicity dictionary.  Transmit the dictionary, or
precompute and store it for a set of data.  You compute
it by finding the most common 65536 strings of 1 or 
more characters and just listing them in order and
assigning each a code.

2. Implicit dictionary.  You just transmit probabilities
for all the characters, eg. order-0 statistics.  Then
you make the code by making the highest-probability 64k
combinations.  First, load in the 256 single-characters,
then add the highest-probability string, then the next,


I've been doing a lot of wacky template programming lately (I'll be posting some of it on my page as soon as I get around to it). It's helped me to become much more comfortable with it, which is somewhat of a bad thing. I no longer have such a nice healthy fear of templates. Of course I still fear the compile time, the code bloat, the many instructions generated from a single line, the exposing of functionality to headers, etc. ; what I'm losing is the concept of how damn confusing they are to people who aren't familiar with them. This is important - my code is becoming harder for people at large to understand, and that's a bad thing.


Excessive sarcasm makes my ears bleed.


The new Lexus SC 430 is a beauty. I must resist blowing all my cash on cars. One of my favorite quotes from John Carmack was in response to "why do you blow so much cash on cars?"; he responded with something like "I spend 90% of my time at work or sleeping; the rest of the time is spent primarily driving between work and home; I want that free time to be as pleasurable as possible".

The difference between great programmers and terrible ones is not that the great programmers are somehow much better at solving hard problems. They are, but that's not where the big difference (a factor of 2-10X productivity) comes from. The big difference comes from the fact that great programmers don't make the problems easy for themselves.


The grape boycott ended with a whimper a few months ago. In the 80's with Cesar Chavez at the helm, it was quite high profile. In the 90's, after beatings from teamsters and much apathy from the populace, the boycott was called off and hardly anyone actually noticed. There are more illegals and temporary workers in grape picking now, and the strength of the union is greatly decreased. In the mean time, we can all boycott Carl's Junior. The owner, Carl Karcher, is an ultra-right-wing political reactionary. He takes his profits from your hamburger purchases and gives the money to anti-abortion groups and other such insanity. Anyway, we should boycott Carl's Jr. just for the insult of those disgusting commercials.


Part of me loves coding on my own. I'm 2 or 3 times more productive when I'm working alone - no meetings, no bugs caused by other people, all the code is quality, and I know it all well cuz I did it, it's all in the style I find most readable and sensible, etc. For example, I did the whole "Galaxy" demo in about a week or two or real work time (I did it in the hours before and after the work day at Surreal). That would've taken months of developer work time as part of a team! Alas, whenever I work alone I come back to the same damn problems : 1. I can't make money doing that, and 2. I can never make anything really great that way, since there's only so much one person can do, and of course I'm missing and the art and etc. Hmm.. I must be unhappy no matter what I do !? (Addendum : reading Code Complete now, I see all kind of studies and figures which show how the productivity per person takes a *hard* dive as you add more people. They estimate that productivity (measured in lines of code) goes down by a factor of 10 (an order of magnitude) from an individual project to a large team).


Affirmative action based on race is preposterous. Medical schools and colleges let in rich spoiled caucausianized minorities because of it who have no business getting in that way. The whole idea of affirmative action is to account for previous disadvantages - those ricks blacks and latinos had no disadvantages! Now, affirmative action based on poverty does make sense and is reasonable. A child from the inner city has an unfair disadvantage on the SAT's (for example) regardless of race. The same is true for contractors and city jobs; most governments have an AA policy in hiring contract jobs; they should instead of poverty or neighborhood based policies.


I just found a Sushi Robo CD for 98 cents. It rocks. Also check out Grandaddy and Silkworm.

I went to the game developer "hard core" technical seminar last week. It was great to meet lots of people that I have been emailing with for the past two years; lots of smart guys there. I left like a lot of people were stuck on accuracy and CPU-intensive work, and not nearly enough people were blown away by just how hot current graphics hardware is, and how much we can do with it.


D3DX for DirectX 8 is better than most (all?) 3d engines out there. Yes, your 3d engine sucks (and so does mine). Why do I think it's so great? It's got a mesh optimizer for vertex cache, it's got a good implementation of VIPM progressive meshes, it's got a "Technique" abstraction of multiple passes with fallback techniques for older hardware, it's got an efficient smoothed skin mesh, it's got exporters to get meshes from popular 3d art packages, it's got a lean and efficient model class. Hmm.. that sounds like a pretty full feature list for a 3d engine, and while being full-featured it's also lean, efficient, and pretty well documented. By contrast, most current 3d engines don't have many of those features, and instead they have kludgy big inefficient memory-wasteful classes with bad art paths and bugs galore, poor 3d content exporters, no abstracted multi-pass fallbacks for old hardware, and very bad speed on GeForce2. Don't whine that you couldn't have done what D3DX does - you could easily have done all of that just using the DirectX 7 interfaces if you actually knew what to do with a 3d engine. I haven't seen a single 3d engine that made the right decisions about its feature set - D3DX gets them right (I certainly made the wrong decisions at Wild Tangent; I wasn't nearly quick enough to see the power of modern hardware, and how it should be pushed, and how important it is to have a minimalist 3d engine which is low-featured, but every feature is *quality*).

I (or you) could make the best 3D engine in the world by taking D3DX/Dx8 and slapping a scene-graph + collision wrapper on it.

old rants