The author's comment about the use of the * syntax in C to mean indirection immediately recalled his comments about different communities having different velocity vectors for the same constructs.
C++ manages to distinguish itself by having multiple velocity vectors for a single construct. The technical term for this is multiparadigm. It means: a furball of vectors all pointing in different directions.
In the generic phase space, operator*() no longer means indirection. It roughly means "evaluate iterator in default expression context".
vector<pair<int,double> > V;
for (vecpairiter a = V.begin(); a != V.end(); ++a) {
if (a->first == 42) {
meaning += a->second;
*a = pair<int,double>(0, 0.0);
}
}
Here operator->() is used to perform a non-default evaluation.
typedef vector<Object> Vobj;
typedef Vecobj::iterator Vobjiter;
typedef vector<Vecobjiter> VVobj;
typedef VVobj::iterator VVobjiter;
for (Vobjiter a = V.begin(); a != V.end(); ++a) {
for (VVobjiter b = a->begin(); b != a->end(); ++b) {
cout << *b << '\n';
}
}
Care to re-evaluate whether the human mind is really all that good at coping with ugly syntax?
The point of this example is that iterators themselves are first class objects. You assign, compare, modify these just like any other object. An iterator does not stand in for the object(s) it is capable of accessing.
If you did make it stand in for the object (bottom of indirection chain) you would still need a notation for dereferencing N levels from the top (regardless of the depth of the composition), otherwise iterator composition won't work.
I guess it would look like this:
a// value of fully dereferenced chain
^a// iterator at top of chain
*^a// one level dereference from top
**^a// two levels dereference from top
That cracks me up. STL programmers spend more time manipulating iterators than they do manipulating the base objects.
The only syntax I've never been able to swallow is Pascal's use of ^ to get me back to the thing I was really thinking about: getting the iteration correct.
Axis and Allies, a military board game, is the best study of balance and strategy I've ever encountered.
The game begins in a precarious state. It's not possible given the rules of engagement for both Britian and Germany to sustain their naval power. Germany gets the first kick at the can. Germany has enough air power to knock out the British navy and take control of the shipping lanes between Europe and Africa.
Unfortunately, Germany is caught between a rock and a hard place. Moscow is also teetering on the brink of collapse. Germany's best hope of gaining Moscow is to throw everything they have at the eastern front. This doesn't leave enough resources to knock out the British navy. If they don't knock out the British navy, Britian will probably knock out the German navy.
Germany has several major lines of play, and within that many minor lines of play.
Germany will undertake about four skirmishes in the first turn. There will be tank battles in western Europe, infantry pressure into Eastern Europe, aircraft engagements in the North Atlantic, submarine engagements along the coast of North Africa.
Germany has enough power, depending on the exact balance of the attacks chosen, to have the advantage in all four skirmishes. Usually three battles go with the odds, one battle goes against the odds. The battle which goes sour determines which type of unit the Germans will lose.
Will it be aircraft, tanks, infantry, or submarines? Depending on which of these the Germans find themselves deprived of, they will have to make different choices as the game develops. They might do exceptionally well in the naval engagements gaining complete control over North Africa in the process, as well as preventing Britian from re-establishing their navy for many years to come. But if their infantry on the eastern front collapsed, their rush into Moscow is ruined. Or it could work out the other way around. The Germans might find themselves capable of applying relentless pressure on the eastern front while the British and Americans struggle from afar to divert the German jaugernaut.
Most of the reason this game works is the nature of the conflict resolution. From a military point of view it makes very little sense. The attacking and defending sides take turn rolling dice. You role one dice for each participating unit, and the value you need to role to inflict a kill depends upon the attack strength (or counter-attack strength) of the unit in question.
The weird part is that once you determine how many units are killed, the side ***who suffered the fatalities*** choses which units to sacrifice. So if you have a stack of infantry, tanks and aircraft, in the first phases of the battle only you infantry will die (because you will always choose to sacrifice these first).
It turns out that battles with large numbers of infantry on both sides are fairly easy to predict. The randomness of the dice has little impact at first, because the infantry removed have very little impact on the rate at which fatalities are inflicted.
Battles with consist entirely of precious units and few infantry are nerve wracking. One lucky role at the outset and either party can achieve a decisive crushing costly victory.
If you feel you have the upper hand, you tend to engage fewer battles and ensure that every battle has a few extra infantry to offset the risk of a decisive reversal.
If you feel your grip on power slipping, you tend to risk more finely balanced engagements. If you try to engage four battles holding a small advantage in each, you just might prevail in all four. But if one goes sour, your ability to project power in that part of the world will be compromised for years to come.
Playing the low variance strategy, you can count on maintaining your ability to project power in all spheres of the map. But your material advantage will dissipate as your adversary counter attacks with a high variance strategy (which by the rules of combat inflicts more damage on average).
Often the weaker player discovers he controls superior forces on the parts of the map where there is little he can accomplish with those forces. The stronger player finds that he controls weaker forces, but arranged such that they can be coordinated effectively.
Neither player gets to choose where they prevail. Japan might find itself holding a massive navy and complete control of the Malaysian coast, with not much choice but to turn toward America (risking a dangerous depletion against superior American production). Meanwhile, if the Russians have put down the Germans on the eastern front, they'll be massing to press Japan back on their own eastern front. Japan doesn't have the mobility to press into Russian from the east, and they can't afford to let their massive navy sit idle on the coast while Russia mounts the counter offensive. Japan must plan to prevail against America in time to bring their fleet back to the defensive.
This is another situation which forces a player to choose a different balance between high risk and low risk strategies.
If the Japanese suffer losses mostly in their fighter aircraft, they will be sitting beside America with naked aircraft carriers ripe for the plucking. Japan desperately needs to reinforce the aircraft carriers, and only fighter aircraft will do. Meanwhile, the Russians (who are Allied forces) can make it very difficult for Japan to deploy their fighter aircraft toward America by picking battles where the Japanese most need their fighter aircraft present.
The net effect as a player is that you can there suffering waves of gut wrenching panic over the placement of one aircraft or one infantry. There are always multiple small fronts teetering on a knife edge.
Partly this is achieved by a game structure where the global variance is quite low (you can predict fairly confidently how many of your battles you are likely to win), but the local variance is generally quite high (you don't know which of your battles will be the one you lose).
The secondary factor is that both players are actively contesting the variance in every theatre of engagement.
You might have enough power to take the safe (low variance) position in three of the four major battles you need to engage. Which of those three battles, exactly what balance of variance?
The way the game is set up, it could take forever for the game to achieve resolution. The driving factor that achieves game resolution is the massive American manufacturing capability. Unless the Axis powers gain the balance of industrial power in the rest of the world, eventually the Americans become unstoppable.
Defense can be coordinated, attacks can not. If the attack Britian, American planes stationed in Britian participate in the defense. But when Britian counter attacks the Germans, the American planes to not participate. For this reason, the Allies often sacrifice valuable American units for the sake of preserving less valuable British or Russian units. Because the Americans simply can't get enough forces into Europe for the Americans to mount a valid counter attack of their own.
If America is played well, it will usually allow itself to suffer massive material losses in Europe in order to blunt the Axis momentum in gaining control over European industrial capacity. This leaves America somewhat exposed in the Pacific and pretty much naked in their homeland. The American material sacrifices in Europe do much to blunt the Germans, but leave the Japanese free to accumulate as much naval power as they desire.
Hardly a game resolves without a harrowing attack from a powerful Japanese navy toward the naked American homeland, with only a few American airbases on the Pacific islands between them.
Often the player controlling America will instead approach the game with an American mindset. This player will fiddle around with his massive airforce gaining control of one Pacific island after another in the slow crawl toward the Japanese homeland while the Germans punish Britian mercilessly.
This kind of game will usually swing on the control of the production capacity of small outlying territories. Did you have that one last tank to crush the Indonesian capitol, or was it lost knocking at the gates? If you had only equiped that invasion force with one extra infantry three moves ago!
Imagine a game of Go where the chips have two numerical values: 1 or 2. On your turn you choose whether to place chip of value 2, or two chips of value 1. When you capture, the capture is not automatic. A roll of the dice determines whether the entire capture succeeds (and all the captured stones are removed), or the capture fails and the placed stone is lost. The probability of the capture succeeding would be some function of the weight of the capturing stones versus the weights of the stones risking capture.
Do you put down one stone of weight two and go for the sure thing? Or do you try to regain lost ground by placing two stones of weight one, having only a marginal advantage in each capture, and a large risk that one or the other (or even both) will fail?
The best strategy games are those where the nuances of play primarily impact variance. These kinds of games force players to react to the unexpected, take what is given, and make fine determinations of risk, balance, and timing.
You need a fairly high level of play to experience the extremes of inner torment which A&A is capable of creating. I imagine that if you overplayed the game certain dominant themes would emerge and the fine lines of balance would degenerate.
Some people play A&A with a joker in the deck. These are high risk technologies you can research which make your units more potent (should you be so lucky). This is the gambit of people with short attention spans and an inability to endure anguish or nurture a losing position against the odds.
The reason most games lack true strategy is because it's way too hard on the digestion to really play a game that works.
Absolutely he has a different point. His first statement is a call for checks and balances. And then everyone runs him into the ground for partisanship, but who among us has no stripes?
When Sun takes their turn on the stage, as they surely will to satisfy their legal obligation to maximize shareholder value, I'm positive Diffie will be the first to applaud (in private) when his counterparts on other chuckwagons take their turn yodeling the opposition.
I fear for the future reading the commentary this article has generated.
Recent changes, such as the DMCA, have already seriously undermined the historic checks and balances which make democracy possible. How can people not see that lacking the proper checks and balances excessive concentration of power is inescapable? It then becomes an argument about who, not whether, and sadly it seems that most commentators here are already well along in contesting the who.
Democracy is not a system, it is a meta system. Partisanship must be suspended if the meta system is to remain viable. Disagreeing on the government must not degenerate to the point where it becomes impossible to enact a free constitution.
On the other hand, you have to stop for a second and think about how the benchmark algorithms were chosen if it proves that easy to "hack the compiler" to achieve fantastic runtimes.
I remember the original video benchmark cheat (windows era). Suprise, suprise it was ATI who created this genre in the first place.
PC Magazine had this absolutely stupid benchmark which people took very seriously. It consisted of drawing the same small bitmap on the screen in the same position a zillion times. ATI took it upon themselves to optimize a zillion-1 occurrences of the bitmap redraw by detecting that it was running the PC Mag benchmark code.
Oh yes, ATI was hammered then too. I was more outraged by the sorry excuse that constituted PC Magazine's attempt at a benchmark.
With benchmark code that bad, how could the playing field possibly remain level?
The same thing applies in the 3D era. Image quality is routinely ignored.
I can give a good example of this. I built two systems around the same time. One was a Pentium III 750 with a Matrox G450. The other was an Athlon 900 with a Radeon 32MB DDR. We thought the Athlon+Radeon would be a far better gaming system. The G450 sucks, right?
We configured these machines side by side to run Quake3. The G450 was too slow in 32 bit color mode, so we tweaked it into 16 bit color mode, and decreased the texture quality a notch or two.
The Radeon ran fine in 32 bit color mode with maximum textures. In 32 bit color mode with more detailed textures it still ran 10% faster than the tweaked G450. A stunning victory if I was reporting for a popular web site.
As it happens, the G450 in 16 bit color mode with reduced textures produced an equal or superior image to the Radeon DDR. The G450's saturation, contrast, and hue was much to my preference. And this remained true despite endless adjustments of both cards and both monitors.
Secondly, the reduced texture quality had no impact on game play whatsoever. Generally when I play I'm wheeling around in a blur. Who has time to watch the scenery?
So far, it's really a saw off.
But then the kicker: the G450 frame rate proved more robust. The G450 might lose 30% frame rate on a complex corner of the map, where the Radeon frame rate would fall by half. On the demo map, if you walked onto the big pink tongue the Radeon was chunking away at 20 fps while the G450 remained tolerably smooth.
So what good does it do for Matrox to produce a superb implementation of their 16 bit color mode when the reviewers insist on trashing it for running poorly in 32 bit color mode--without even noting that Matrox's 16 bit color mode is equal or superior to many of the competing products' 32 bit color modes?
And why is this so rarely reported? Because reading the benchmark results, no god fearing game player would dare to touch a G450.
I aim my personal blame cannon at Nvidia. Nvidia is the company who convinced the world that 32 bit color was necessary even if the image quality produced was crap anyway. ATI is merely doing what the peanut gallery demands.
Absolutely correct. The uptime on my w2k was interrupted only by hardware problems and service patches.
How about someone rating the MTBP (mean time between patches)? The MTBP is a far bigger problem than the MTBF.
I did have some problems with w2k initially. All of my problems were due to PC Anywhere, a bad Matrox driver, a bad SB Live! driver (SMP bugs), and a stick of memory that went south.
Maybe the reason my w2k box ran so well was my Enermax 350W power supply. I think people who run Unix also tend to build better boxes.
Despite the impressive months-at-a-time stability I experienced with w2k, this machine is now running Debian. After my memory went bad and I contemplate rebuilding my software environment with all the correct patches and drivers I came down with a serious case of patchitis.
Let me tell you, though, that dselect is no walk in the park either. Ever installed ext3 on Potato and then discovered that the XFree on Potato needs some extra TLC to run dual-head, so you go ahead and run Testing anyway?
What's the net cost of Potato running two years behind the times?
Unix guys are like the people who spend two weeks at the beginning of summer painstakingly ridding their yards of every weed and vermin, and then spend the rest of the summer drinking beer in their hammock hurling abuse at their neighbors who have to spray their Dandilions every other week.
I'm getting tired of reading comments mired in funny money reality. Advertising is an expense, not a revenue. People who buy products which are promoted through costly advertising are willingly subsidizing the vendor.
I guess the premium is less painful when it doesn't look like a subscription fee.
Advertising is porn. The babe on the Corvette makes us feel sexy, so we pay an extra $15 for an inferior product. What is it about hot chicks that causes men to reach for their wallets? Whether it's a hooker or whatever the hell X10 sells, what's the difference?
I remember when I came to/. to find out which database program to use. The scorn heaped on Postgres was of a particularly inferior quality, the positive comments especially well informed. That's what/. is worth. I don't understand how hanging strings of colored triangles around the parking lot is going to carry the day.
Google has entirely the right idea: matching the form of advertising to the sentiments of its users.
The fundamental problem is that programmers are not taught to properly differentiate structural constraints from logical constraints.
A structural constraint is not writing to a pointer unless you are certain that the pointer points to valid storage.
A logical constraint is not writing to a pointer unless you are certain the operation contributes to the functionality you are implementing.
Mistakes occur when programmers start thinking about the logical constraints before coding the structural constraints.
A good example is writing a device driver for a device you don't really understand. You're going to spend a lot of mental effort trying to understand the logical requirements of the device. Somewhere along the way you forget to address a structural requirement of the operating system.
The only cure for this is to adopt the habit of coding structural constraints _before_ you start to address your logical constraints.
The big surprise when you learn to do this is that most programs write themselves. It can very surprising how little "logic" most programs really have, and how few ways there are to implement that logic without violating structural constraints.
The downside of adopting structural discipline is that programming in the C language becomes less enjoyable. You begin to realize that 90% of your work is extremely blue collar, and only 10% of your work can be considered creative.
I wish I could say that C++ is the cure. I've devoted a decade of my life to mastering C++. C++ eliminates the worst elements of the C language at the expense of introducing new complications ten times more difficult to teach.
People come along all the time with the idea of simplifying C++. Invariably, these people throw away the most promising features of the language, templates, while elevating the most pedestrian feature, the object model.
I'm waiting for the day a language comes along where I can sit down and code up a custom memory management policy that exactly meets the need of my application and be entirely sure that it is going to work the first time, every time.
The language which makes that possible hasn't been invented yet.
It can't be done in C because there isn't enough abstraction. It can't be done in C++ because of the vast complexity of the language. It can't be done in any of the popular alternatives because those languages have defined the task of solving the really hard problems as not being part of computer science.
I know a young man just like you. DLink used to sell a 530TX network card based on the Via Rhine chipset. Recently they "upgraded" the product. It is now sold as the 530TX+ based on some crappy Realtech chipset.
I think my friend has already spent an entire day of his life trying to find a different network card that costs the same as the old DLink (approximately $15), but isn't based on a Realtech chipset. He even did this for the benefit of a machine he was building for a Windows user. How would a Windows user tell the difference?
Complaining about one purchase of FP is like chasing a penny down a sewer grate.
Nothing wrong with the grammar at all if you ressurect a few elisions. One of the characteristics of English, as opposed to Latin, is that it tolerates a wide range of informalities.
intellectual property [rights] or other rights
The end user may not: 1) use the software [to disparage the evil empire]; 2) infringe upon the [undisparagable] parties; 3) violate; 4) promote.
You can make a stronger case that the original punctuation is sloppy.
Sigh. The vast majority of signals intelligence is devoted to traffic analysis: figuring out who people are talking to. Think about this. Do you think they have the resources to read all the stuff they can capture?
Once they decide that an individual is connected into too many suspicious circles (drugs, munitions, political activism, voting democrat, etc etc) only at that point do they consider devoting resources to decyphering the content of the traffic exchanged. Compared to the total volume of traffic exchanged on global networks, they have the resources to crack only a tiny sliver of those communications.
If everyone out there is using nearly unbreakable encryption they simply don't have the resources to sift through everything they want to look at.
It's very important to limit the total volume of strongly encrypted traffic. If they manage to limit strong encryption to 1% of the population consisting entirely of/. geeks, terrorists, and kiddie pervs that makes the expense and difficulty of their job at least an order of magnitude more bearable.
In no way whatsoever do the objectives of this initiative depend upon Bin Laden adopting an American approved backdoor technology.
Arguing that the American government thinks this is the objective of their backdoor policy is juvenile circularity invented to justify our _premise_ that the government is too stupid to be trusted in anything.
Let me try to paint a picture of how things work based on what I believe to be the existing American capability in rough factors of ten.
I would think that the Echelon system maintains a unique identity for 1 billion of the world's 10 billion people. This group would include the majority of people who have used a telephone at some point in their lives, and not many who haven't. We can think of this group as the "literate and connected" group.
Out of of this roster of one billion "known" individuals, 100 million would be identified as belonging to the sphere of national interests. Anyone with a degree in metalurgy, who has ever travelled to the middle east or the eastern block, who has ever held a pilots license or owned an airplane, people involved in international trade, people trained to operate weaponry of any kind, people on the inside of national infrastructure grids, etc etc. What they are looking for at this level is overlap between the groups motivated to cause trouble and the groups with the skills or resources to cause trouble. The only thing they need to identify about people in this group is the various spheres of influence each person belongs to.
Out of this group 10 million people are identified who have a significant presence in groups representing both means and motive. If you are in this group, Echelon problably knows your great grandmother's maiden name. Your location is monitored and the people you communicate with are identified and recorded. Your traffic will be subjected to keyword analysis and correlation beyond what the bulk filters are capable of processing. A select ten percent of your communications are permanently recorded in case they become interesting at a future point in time.
Out of this group, 1 million people are identified who combine means+motive+opportunity. It is this group of people where they become very interested in digesting the _contents_ of your communications. Perhaps 1% of this is selected for a few seconds of human attention.
Our of this group, 100 thousand people are subject to exhaustive scrutiny and human analysis.
Out of this group, 10 thousand individuals are actively operated against. If you are in this group, there are white vans parked in your street, your cigarette lighter contains a satellite transponder, your keystrokes are monitored by devices that can only be seen under an electron microscope. To belong to this group you need to have your fingers stuck into more than one pie. These people are the tendrils that bind shadowy worlds together.
Out of this group, you have 1000 people designated as the world's primary disruptors of shit. If you are in this group there is someone in the intelligence service who knows more about your life than you know about yourself. Your continued existence is reviewed daily. It's a good practice to surround youself with equally despicable proteges who are eager to take your place.
Out of this group, there are 100 people who's continued existance is considered bothersome. These are the people who out so well protected or removed from American influence that nothing much can be done about it.
Out of this group, 10 people are nominated by American politicians to play the part of celebrity terrorist. These are the "forces of evil" who constantly invoked to sway public opinion on any issue where it allows the government to get what it wants.
Take a good look at that pyramid and decide whether it matters to the American intelligence service whether ten million people use strong crypto or whether one hundred million people use strong crypto. The intelligence service needs to know enough about this group of 100 million people to determine which subset of 10 million people deserve the next layer of surveillance.
But no, if Bin Laden alone uses strong encryption, the entire government agenda against the strong encryption is ridiculed as being completely bogus. A fine example of/. rhetoric.
Actually, it would be best for all concerned if every opportunity to legitamately profit from environmentally sensitive behaviour was exploited immediately.
Get a grip here guy. If it costs money to comply with environmental regulations, chances are that much of that money being spent is creating other waste streams. How much of the cost of trucking waste from away from an incinerator is spent on diesel fuel? Or the waste from a power generation station?
The absorbing boundary in where every industrial process feeds its waste into other industrial processes. If an input ends its life in a landfill, that input either needs to be eliminated entirely, or another industrial process needs to be invented which reclaims that input (usefully). It does no good burning a pound of diesel fuel to reclaim a pound of some other input.
Labelling these success stories "propaganda" really irritates me. We should be promoting every small accomplishment at creating closed-loop processes at every opportunity. Enough of this bullshit logic about hydrogren being a "clean" fuel because the carbon is released in some state != California.
That's a strange model of when to open your mouth. Caring about something = having something worth saying. The level of discussion here would be much improved if fewer people believed that.
Some people have used car analogies (the Mustang 5.0 with a 4.7 litre engine), but no one has made the key observation.
Chips are being sold based on the tachometer scale. The P4 revs at 2GHz. The Athlon revs at 1.4GHz. Most of the buying public thinks that the tachometer is actually the speedometer.
So now AMD is painting different lines on the tachometer. They are writing 1600 where 1400 used to be etched. It's going to confuse the mechanics all to hell without doing anything about the ignorance of the buying public.
The whole thing makes AMD look cheap.
How do they go about conveying the message that the Athlon 1400 is a six cylinder engine versus the P4 which is a four cylinder engine?
I remember reading biker magazines about ten years ago. In North America, you had 600cc bikes which redlined in the 16,000 RPM range. In Tokyo, 600cc bikes were not street legal. The biggest bike allowed was in the 250cc range IRRC. So in Tokyo you had these 250cc bikes that redlined at 28,000 RPM. You had to pull 10,000 just to cross an intersection. Isn't that a perfect description of the Pentium 4?
Back when all the other chip cloners were playing games with their product naming, I never bought any of those chips. I feel the same way about rebate stickers: the amount of mental effort required to read the fine print exceeds the expected return from redeeming the coupon (should you be so lucky that a cheque ever arrives). I tend to make my life simpler by looking at only those products "gimmick not included". If the sticker makes me work harder to decide what I'm buying, I don't buy it.
I think AMD is exchanging one bottle of single malt (customers who are influential and know what they are doing) for one Joe-sixpack of American beer. They are heading out into territory that will be fought on marketting terms rather than on technical terms. Good luck to them.
I remember another company that took this route: Gateway 2000. They started off with unbeatable price/performance, and then they veered into big screen TVs and five-disc CD changers. Look at Gateway 2000 now.
How long will it be before the AMD PR2100 and the AMD PR2200 are just the same chip in a different die color?
The way these things work is that the usedid he picked at random was probably the userid of a secret mistress of one of the top FBI agents.
I was once a witness to a purse snatching where the victim happened to be the wife of the first cop who showed up. In the middle of something like that you sometimes doubt whether your mind is functioning normally. The cop car rolls up, the cop jumps out and immediately proceeds to give the victim a three minute hug. Hey, these guys are more compassionate than I thought.
The activity that followed couldn't have been outdone if the War Measures Act had just been invoked. The guy who snatched the purse is probably doing concurrent life sentences by now.
Somehow I doubt that the American government, regardless of where the money comes from, wants to become known around the world as the iron curtain of information exchange. Corporations want their profits, but they want their "apple pie" just as badly. Organizations like RIAA whom everyone hates already can take the brunt of shutting down a music exchange service. When it comes to shutting down a heterogenous system of interchange because someone *might* be exchanging materials in violation of copyright, that's the end of the Apple Pie era of corporate relations. Nike will never be the same again.
The networks discussed are a far cry from what's possible in the ultimate scenario. There's nothing about the coordination of these networks that make them unsuited to fully distributed stochastic control processes. You can slow the fabric down, but you can't make it run any slower than a juicy rumour in Washington. The politicos only have to look to their own brutally effective system of ad hoc "information sharing" to see how pointless this is in the end analysis.
I think the question is off target. Even the good answers aren't going to help you.
I'm primary a C++ programmer. I had several good Windows compilers, so I stuck with NT as my primary system for a long time. I'd used Unix in small doses along the way, and I'd always had the MKS tools installed (ls, grep, find, etc.) since the days of MSDOS. Complaints about the stability of NT are overblown. The NTFS file system was extremely stable and it didn't bug me that I had to reboot once every two weeks. The real problem with NT is that the environment is claustrophobic. Using multiple tools should be the easy way to do things, not the hard way.
My first project was converting an old 486 box into a firewall for my new cable modem. A high school student down the street started me off with slack. One of the first things I had to figure out was how to differentiate my two identical network cards by creating an alias. I asked the kid down the street. He had no idea. He said, "I just use different cards." Thanks a lot.
No matter what choice you make, if you have an ambitions at all sometime in the first week or two you're going to find yourself in over your head. Think of it as survival training. Be ruthless, beat the problem to death, and take notes. Survival skills at the command line will stay with you no matter what system you end up chosing. Somehow in my messing around I hosed my route table. I must have typed "ifconfig" and "route show" 2000 times that day. My neuronal patterns have never been the same since. That's where the real learning takes place.
I didn't find slack "logical" after leaving NT. It might be logical, but it didn't seem logical. The rc.d hierarchy gave me shivers. Major transitions are never painless.
The Linux packet filters were in major flux at the time. I found it very confusing to keep track of the new/old ipchains/whatever. It seemed to me that Linux changed way too much and way too fast. I decided to crawl into a peaceful corner where I could really think. I replaced slack with OpenBSD.
For me, OpenBSD was an instant love affair. I could tell right away that OpenBSD was a product of a similar mind. Your first experience installing OpenBSD is the partition editor, a tool that takes you back in time further than Austin Powers. One thing OpenBSD does not have is good looking teeth. Some people never get past that.
One of the qualities of OpenBSD is that the internal documentation, the man pages, are both comprehensive and accurate. Very light on actual examples. You have to be prepared to try out many, many different arguments until you get the incantation right. Then it works. In most cases, forever.
Even in OpenBSD I had some horrible fights along the way. If you set up a DHCP interface a script file/sbin/dhclient-script is run when the interface comes up, and this script clobbers/etc/resolv.conf with parameters obtained from the DHCP server. The resolv.conf file doesn't warn you about this. I edited that file half a dozen times one day before I figured out why my changes were always getting nuked.
When I upgraded to OpenBSD 2.6 I discovered that the DHCP server at my ISP was incompatible with the changes made to OpenBSD's dhclient. It was my ISP who was violating the standard. I had to scour the web for hours to find a patch to dhclient that allowed my internet interface to function. Five minutes after installing the system I'm patching kernel utilities.
When I upgraded to OpenBSD 2.7 I happened to have the exact network card (a certain 3com) which the OpenBSD people had broken in that release. I had to patch and recompile my kernel before I could bring my network up. Once again, I was patching my kernel five minutes after completing the install.
The moral of the story is don't get yourself a Jeep if you aren't prepared to change a flat tire.
Part of changing a flat tire is being willing to work with whatever tools you find in the trunk. In OpenBSD that means suffering with "vi". As painful as it was, I forced myself to use vi for every configuration file I edited. I've mostly been using xemacs for source code editing on both Windows and Linux/BSD. I think vi sucks, but that's another entirely personal judgement. I plugged my nose and learned to get by, because I know someday I'll be in a pickle and vi will be the only thing there.
About six months ago I set up a second desktop machine. I now have Redhat 7.1 beside my w2k box. I chose Redhat only because the C++ compiler I use, KAI, is only officially supported under Redhat 7.1. It probably works on other distributions, but I don't consider myself experienced enough (yet) to be breaking my own trails. It's another "plug my nose and live with it" scenario.
I didn't find the automatic Redhat installer any easier than the OpenBSD installer. Austin Powers has a prettier set of teeth, but that's about it. When the graphical installer lets you down, you're left twice as confused about what to do next. I had a Matrox G450 in that box, but the support was only up to date for the G400. Partly it worked, but partly it didn't.
What I can say about Redhat is that the man pages are three points less trustworthy, complete, and accurate. The Redhat man pages feel content to document some Unix, some place, some time. Not necessarily how Redhat 7.1 itself works in the here and now.
Next time around it will be Debian. As you learn more, you'll realize that management is more important than quick gratification. On the other hand, when you try out Linux for the first time it doesn't help if you have twenty problems and you can't get quick gratification on any of them. You'll just end up thrashing.
Here's some words of wisdom that will matter in the long run a lot more than which distro you choose:
Learn to use the power of a good shell. I have zsh on every machine because zsh has the best support for interactive command editing. This is even more important when you don't know shit and you have to type every command ten times to get it right.
Set your machine up with reasonable external security (no unnecessary ports open to the world), then make your internal security lax. I was having enough trouble coping with all my problems that I didn't need to worry about whether I was root or not. A year later I figured out how to set up sudo for noauth, so I could use sudo all the time without having to type my root password all day long. Now that I mostly know when I need to be root and when I don't, I'm starting to tighten up my internal security as well. But during the steep part of my learning curve, internal security was a whole lot of extra hassle I didn't need to deal with.
Use SSH exclusively. Nuke telnet. Nuke ftp. SSH can do amazing things once you get to know it. Maybe that's not the first thing to start with, but you should plan on making it the second.
Learn as much as you can about the localhost routing table. I ran OpenBSD for a six weeks before I finally got my DNS set up properly. That was an aggravation I don't ever want to live through again. Connection attempts would hang mysteriously for 15 seconds. Half the command line tools would lock up in resolver freezes (unless I added the -n argument to everything). Somehow on Redhat when I upgraded a network card it lost the default route. The machine was crippled until I figured out how to restore the default route manually. People who've been using Linux for years completely forget what it's like to have a broken resolver and not know how to fix it, or to have to type numeric IP addresses for all other hosts on your local network segment because you don't have your "search" option in resolv.conf set up right (or whatever mysterious place that might exist under Linux).
Finally, try not to chmod 777 too much. I'm sure I did that a lot in the first couple of months. Any effort you put into understand Unix permissions ultimately goes a long way.
The attitude you bring is ten times more important that which distribution you start out with. You're going to wreck your first install, get over it. I've now build six OpenBSD firewalls and I've just barely reached the point where the process is entirely smooth. Learning takes repetition and that means a lot of breaking things and a lot of fixed things.
Finally, the most important point of all. There's a psychology that goes along with using NT that you'll have to lose. In NT when things don't go well there's a panic that rises up inside. Because you know that even after you fix the problem, it still isn't going to work 100%. You can't afford be screwed on both sides. NT teaches the attitude "play now, pay later". The "pay later" comes when you really need something to work 100% and it just isn't possible.
In Linux/BSD the psychology is "pay now, play forever". In your worst moments repeat the magic manta "once I fix this, it will never ever bite me in the ass again". If you've been using NT for a long time you aren't capable of believing that, but it's true. Trust me.
DOS had a built in path length limit. It wouldn't let you cd beyond that length. But you could still mkdir onemore. mkdir onemore\onemore. mkdir onemore\onemore\onemore. Pretty soon DOS crashes.
I built three relatively silent systems. One was a dual PIII/750, one was a Celeron, one was a 1GHz Athlon. The two big systems are under my desk. One has been running with the side off for the past week. Together they make about as much noise as someone blowing out the candles on a birthday cake. I can't hear either hard drive operating.
I used Papst fans, Enermax FC power supplies, Fujitsu FDB hard drives, rubber gromets to mount the hard drives, and a few bits of sound absorbing foam. Actually, the Celeron had the noisiet parts so we glued half a dozen expired mouse pads to the inside of the case, black foamy side up. Very effective.
It's really worth the trouble. My patience for technical writing has more than doubled since I eliminated the droning noises. I used to play Quake just to drown out the background noise.
What bugged me about the review was the comments on the the G450. I use a G450 in the dual PIII/750 system. I had a Radeon 32MB DDR in the 1G Athlon (KT7A-RAID).
We used to play network Quake at home. I played on the G450, my brother on the Radeon DDR. I set my system to 16 bit color, lowered the texture detail slightly (which I didn't give a damn about), and stuck to a lower screen resolution (either 800x600 or 640x480 depending on how I was feeling).
My brother set the Radeon DDR to 32 bit color. 16 bit color on that card is very ugly and not much faster. He was probably one screen resolution up from me. His frame rate averaged about 30% faster. Did it make any difference?
Well, we finally decided that the G450 was more playable. (I didn't have SMP enabled, so it wasn't due to CPU power.) The 16 color on the Matrox was at least as saturated as the Radeon in 32 bit color. It was hard to get a gamma curve on the Radeon which didn't cause the image to have a slightly washed color tone. You could almost get it perfect, but the dark parts would be just a bit too dark.
On the G450 it was trivial to get excellent color and gamma.
With tons of bots on the map, the Radeon was definitely a bit more brisk. However, the Radeon was *much* more sensitive to the complexity of the map. You'd be cruising along at 60fps or better then hit a bad part of the map and plunge down to 20 fps momentarily. The Matrox hummed along at 45 fps all day long, unless you had ten bots in the same room, then it would taper off maybe down to 30 fps.
The G450 is far more playable than the numbers suggest. I could see the map just as well at my curtailed settings as my brother could with more colors and more pixels.
My playing style is somewhat Gretzky-like. I can run into a crowded room and just know where everyone else is almost all of the time. You can tell where the guy behind you is going by how the guy in front of you moves. I'm a lousy player against people who never miss. For everyone else, I'm mayhem in motion. If I want to shoot someone 90 degrees to my left I usually do a dead spin 270 degrees to my right (so I can see enough of the room to pick up my next three targets). I don't shoot at people, I shoot at places I don't want people to go. I had no trouble at all playing this style with a G450 and I even preferred it in many ways to a Radeon DDR on a faster processor, with faster memory.
It takes a lot of gall to call the G450 a crappy card. It's kind of like an amateur golfer who decides his scores are bad because his equipment sucks.
Don't do that unless you have a good sense of smell. PC fans aren't guaranteed to start up below 7 to 9 volts. One day it just won't start.
If you're really desperate, get a fan rated to start at 7 volts and regulate the 12V supply down to 7.5 volts with a $2 regulator or a bunch of small diodes.
People on this thread are obsessing about details and evading the issues. That's sad, because this is an important topic. Altruism is a slippery subject. That's why when the The Selfish Gene came along it was such a big event. The selfishness was still there, you just had to look in a different place.
Chip is discussing cultural altruism, the idea that communities can adopt altruistic social conventions. The GPL itself has two faces. Stallman had a selfish motivation for creating the GPL community: his own convenience. The GPL community is an altruistic culture, but only mildly so compared to the normal context of debate.
Think about bats exchanging blood meals. One night you feed well and return to the nest to find your buddy on the verge of starvation. So you cough up a blood meal. There's goes desert. Then you hit a dry spell and now you are verging on starvation. You see your buddy return to the nest with a fat belly. He turns away. You die.
The term for this behaviour is "defection". It's stupid to look for altruism in a context where defection doesn't inflict real harm.
It's not easy to decide what behaviour in the GLP community counts as defection. Stallman created the GPL in an era of scarcity. Good quality code in those days was difficult to obtain. Now we are in an era where the code we have is as much of a problem as the code we don't have. It's quite possible that trolls are doing the most harm to the GPL community.
I try to figure out why Stallman felt so injured by his inability to access other people's changes. I think his ambitions weren't compatible with duplication of effort. He needed to cajole people into cooperation in order to get where he wanted to go. That was a different time. These days software has become an enormous ecology. In a large ecology, there are always niches. Niches promote diversity, and diversity is usually good.
One of the key functions of a healthy ecology is colonizing new resources. When new hardware comes out, the gcc toolchain is often the first spoor. gcc is like the worms in the soil that make it possible for plants to set down roots. Regardless what vegetation comes and goes, the worms need to be there. I think the GPL makes a lot of sense in that niche. However, it's definitely a mistake to think that the GPL is the only approach to homeostatic altruism or that the ecosystem doesn't benefit from a diversity of approach.
Would the security of OpenBSD be improved by adopting the GPL? It makes me laugh to even think about it. A secure OS hardly wants to apply every patch that's floating around. In this context abundance is a bigger threat than scarcity. Here, take the code, go away! Leave us alone! Our classical GPL notion of defection (playing with your marbles in a tree fort) makes no sense at all. Does any thread of defection remain? If defection doesn't apply, none of Chip's arguments about altruism have any bearing.
If OpenBSD does not survive on the basis of policing altruism, how does it survive? (Isn't that a more interesting question than predicting its doom?) I find the theory of absorbing boundaries more applicable in this context. Altruism is a social theory. Nothing stirs debate like a social theory. In that sense, altruism is a selfish meme entirely in its own right. Absorbing boundaries are abstract and dull.
Let's peel away altruism's self promotion, and look at some other possibilities here.
To begin with, OpenBSD is not terribly dependent on growth. In fact, OpenBSD actively resists growth wherever possible. Security and growth are not often on speaking terms. What OpenBSD does appreciate are contributions which fix or simplify the existing system. The scarcity the OpenBSD team confronts is their own ability to review the code base. Nothing makes their life easier in that department than having less code, or less cluttered code.
But let's suppose Theo gets a brain tumour and decides he needs an aggressively protectionist license. The dirty bastards must give something back! How would he write an OpenBSD GPL? No one can use OpenBSD until after they've submitted an approved patch to the OpenBSD team? Just what would make their lives easier: a pro-troll license.
We'd have to add an anti-troll provision. If you submit three patches which contain bugs, shoot yourself. Ask a question from the FAQ three times, climb into the OpenBSD powered baby mulcher. A Darwinian license would be a nice thing, but I don't think it would accelerate progress on OpenBSD.
An interesting example of OpenBSD thriving is the KAME IPv6 extensions which have been donated to the BSD lineage by a consortium of seven Japanese companies. None of this work is under the GPL that I've ever seen. This is the heartland of the inter-op niche. I don't think it hurts anyone that the KAME implementation can be used in any context. The valuable commodity here is conceptual experience. Would it make sense to impose an agglutinating license like the GPL? I don't think so.
On reflection, it makes more sense to think of your code being incorporated into OpenBSD being a privilege rather than an obligation. Even supposing you write a perfect piece of code, the world changes. If your perfect routine is hidden away in a proprietary system whose going to notice when the world changes in a way which violates your requirements for correct operation? Not only do the modules need to remain correct, but the interactions need to remain correct. How about contributing your component back to OpenBSD? Now you have a group of clever and decidated people paying a lot of attention to potential problems and you aren't paying them for the service they are offering you. Amazing!
There are lots of reasons why people will continue to contribute back to BSD even if the license doesn't compel it. What's strange about the GPL is the currency of return even makes sense. This can only be the case when quantity matters as much as quality. The GPL community has a very aggressive process of assimilating crap. It eats crap and shits food. (Sometimes after more than one iteration.) That alone should make it clear that the GPL is an odd corner of the ecology.
If the selfish altruism argument carried any real weight, we wouldn't be using the GPL. We'd be using an anti-DMCA license.
This software is free to everyone, except those people who profit from making it illegal for us to determine how things work so that we can add support to our platform.
Finally a definition of "defection" red in tooth and claw. If anything is going to bring down the GPL or BSD communities, it's a legal context where you can't write the code in the first place.
Another area where the GPL falls flat is in code re-use. The GPL is very effective at encouraging code re-use at the component level (i.e. via linkage). But that's not the whole story. Object oriented designs encourage run-time re-use; generic designs encourage compile time re-use. The LGPL covers components, but it isn't much use for generic code.
Generic code exists to make the implementation space easier to navigate. It doesn't have much to do with the finished product. Code re-use at this level makes the most sense if everyone re-uses it. The scarcity here is in compatible skill sets. This an area where you really don't want niches. We all know about languages whose name includes a number.
Wouldn't it be better when the day comes that a proprietary chunk of code gets donated back to the community that the proprietary code is already based on the same generic libraries? The GPL does not encourage that. A generic source code library hardly needs the GPL to enforce community. Re-use is a community almost by definition.
The GPL doesn't appeal to me much. I've never been that interested in peering over my shoulder to see how other people are getting on.
All the things I'm interested in working on I find are already under the BSD licenese. Often the ideas are more valuable than the source code anyway.
I see the GPL as being an inherently materialistic license based on the view that source code is an intrinsically valuable commodity. 90% of the code I've seen I'd only maintain at gunpoint. Stallman must get more pleasure than I do at realizing everyone else's version of the same code is worse still.
To make the GPL non-materialistic, it would have to control ideas. I'll really laugh the first time I see a GPL patent granted.
"This patent is free for all to use, but patents which cites this patent must also be GPL'd"
Is that the view of the world the GPL community wishes to take?
I can't help but paraphrase an American senate review panel on the subject of selfishness:
Q: Does the staggering sum of money we are spending on this supercolider in any way help to defend the American people?
A: The staggering sum of money we are spending on this supercolider makes America worth defending.
I'm disappointed to see Chip take such a narrow position on the role of political altruism. I think creativity is its own reward, and that creativity flourishes best where politics is practiced least.
I'm in complete agreement. The people who thought the Netscape garbage scow was going to be turned around overnight need Ritalin added to their water supply.
The only feature of Mozzila that no one here speaks for seems to be the integrated mail client (and all the other platform riff raff). I followed BugZilla for a while and the mail client sucked up *tons* of debugging resources. I suspect that this was a political requirement, and not a choice made by the Mozilla team.
In most other respects, Mozilla's decisions stem from the nature of the open source development process. You don't gain support by telling people that the product doesn't work on their favorite platform, doesn't support their native language, and has an interface which doesn't conform with their cultural expectations.
Bloatware: an application which supports any feature which I myself don't require.
Linux supports diversity via a plethora of distributions. Mozilla supports diversity via XUL and its comprehensive i18n implementation. These things didn't come for free.
The people who are grousing about Mozilla suffer from the syndrome I call "majorism".
Identify the group with the largest political clout (ie5 users on x86 Windows) and judge by the standards of this group alone. Despite the fact that this group is *least* in need of an alternative product, and least likely to adopt one even if it came along.
It's true that Mozilla made plenty of mistakes. But as far as I'm concerned, Mozilla had the courage to make the right mistakes, and I still believe that courage will pan out at the end of the day. Stability, agility, and beauty were deferred in the name of portability and process.
A year ago Tiger Woods make the decision to correct his back swing (he thought it was too loopy, if I recall the "technical term"). For a year or so he wasn't exactly setting the world on fire, and I read no end of editorials written by people who'd fallen off the Tiger wagon. "Sure he's good, but he isn't great." Where is he now?
In my book, great is when you value your potential more than your short term success. No one ends up looking as foolish as those who judge too soon.
As soon as I saw the first version I wished that/. would sometimes corroborate the slant before posting them.
There was no factual accuracy to the slant of the original story as posted. This is very unfair to the organizations who have to cope with the PR backlash.
The author's comment about the use of the * syntax in C to mean indirection immediately recalled his comments about different communities having different velocity vectors for the same constructs.
// value of fully dereferenced chain
// iterator at top of chain
// one level dereference from top
// two levels dereference from top
C++ manages to distinguish itself by having multiple velocity vectors for a single construct. The technical term for this is multiparadigm. It means: a furball of vectors all pointing in different directions.
In the generic phase space, operator*() no longer means indirection. It roughly means "evaluate iterator in default expression context".
vector<pair<int,double> > V;
for (vecpairiter a = V.begin(); a != V.end(); ++a) {
if (a->first == 42) {
meaning += a->second;
*a = pair<int,double>(0, 0.0);
}
}
Here operator->() is used to perform a non-default evaluation.
typedef vector<Object> Vobj;
typedef Vecobj::iterator Vobjiter;
typedef vector<Vecobjiter> VVobj;
typedef VVobj::iterator VVobjiter;
for (Vobjiter a = V.begin(); a != V.end(); ++a) {
for (VVobjiter b = a->begin(); b != a->end(); ++b) {
cout << *b << '\n';
}
}
Care to re-evaluate whether the human mind is really all that good at coping with ugly syntax?
The point of this example is that iterators themselves are first class objects. You assign, compare, modify these just like any other object. An iterator does not stand in for the object(s) it is capable of accessing.
If you did make it stand in for the object (bottom of indirection chain) you would still need a notation for dereferencing N levels from the top (regardless of the depth of the composition), otherwise iterator composition won't work.
I guess it would look like this:
a
^a
*^a
**^a
That cracks me up. STL programmers spend more time manipulating iterators than they do manipulating the base objects.
The only syntax I've never been able to swallow is Pascal's use of ^ to get me back to the thing I was really thinking about: getting the iteration correct.
Axis and Allies, a military board game, is the best study of balance and strategy I've ever encountered.
The game begins in a precarious state. It's not possible given the rules of engagement for both Britian and Germany to sustain their naval power. Germany gets the first kick at the can. Germany has enough air power to knock out the British navy and take control of the shipping lanes between Europe and Africa.
Unfortunately, Germany is caught between a rock and a hard place. Moscow is also teetering on the brink of collapse. Germany's best hope of gaining Moscow is to throw everything they have at the eastern front. This doesn't leave enough resources to knock out the British navy. If they don't knock out the British navy, Britian will probably knock out the German navy.
Germany has several major lines of play, and within that many minor lines of play.
Germany will undertake about four skirmishes in the first turn. There will be tank battles in western Europe, infantry pressure into Eastern Europe, aircraft engagements in the North Atlantic, submarine engagements along the coast of North Africa.
Germany has enough power, depending on the exact balance of the attacks chosen, to have the advantage in all four skirmishes. Usually three battles go with the odds, one battle goes against the odds. The battle which goes sour determines which type of unit the Germans will lose.
Will it be aircraft, tanks, infantry, or submarines? Depending on which of these the Germans find themselves deprived of, they will have to make different choices as the game develops. They might do exceptionally well in the naval engagements gaining complete control over North Africa in the process, as well as preventing Britian from re-establishing their navy for many years to come. But if their infantry on the eastern front collapsed, their rush into Moscow is ruined. Or it could work out the other way around. The Germans might find themselves capable of applying relentless pressure on the eastern front while the British and Americans struggle from afar to divert the German jaugernaut.
Most of the reason this game works is the nature of the conflict resolution. From a military point of view it makes very little sense. The attacking and defending sides take turn rolling dice. You role one dice for each participating unit, and the value you need to role to inflict a kill depends upon the attack strength (or counter-attack strength) of the unit in question.
The weird part is that once you determine how many units are killed, the side ***who suffered the fatalities*** choses which units to sacrifice. So if you have a stack of infantry, tanks and aircraft, in the first phases of the battle only you infantry will die (because you will always choose to sacrifice these first).
It turns out that battles with large numbers of infantry on both sides are fairly easy to predict. The randomness of the dice has little impact at first, because the infantry removed have very little impact on the rate at which fatalities are inflicted.
Battles with consist entirely of precious units and few infantry are nerve wracking. One lucky role at the outset and either party can achieve a decisive crushing costly victory.
If you feel you have the upper hand, you tend to engage fewer battles and ensure that every battle has a few extra infantry to offset the risk of a decisive reversal.
If you feel your grip on power slipping, you tend to risk more finely balanced engagements. If you try to engage four battles holding a small advantage in each, you just might prevail in all four. But if one goes sour, your ability to project power in that part of the world will be compromised for years to come.
Playing the low variance strategy, you can count on maintaining your ability to project power in all spheres of the map. But your material advantage will dissipate as your adversary counter attacks with a high variance strategy (which by the rules of combat inflicts more damage on average).
Often the weaker player discovers he controls superior forces on the parts of the map where there is little he can accomplish with those forces. The stronger player finds that he controls weaker forces, but arranged such that they can be coordinated effectively.
Neither player gets to choose where they prevail. Japan might find itself holding a massive navy and complete control of the Malaysian coast, with not much choice but to turn toward America (risking a dangerous depletion against superior American production). Meanwhile, if the Russians have put down the Germans on the eastern front, they'll be massing to press Japan back on their own eastern front. Japan doesn't have the mobility to press into Russian from the east, and they can't afford to let their massive navy sit idle on the coast while Russia mounts the counter offensive. Japan must plan to prevail against America in time to bring their fleet back to the defensive.
This is another situation which forces a player to choose a different balance between high risk and low risk strategies.
If the Japanese suffer losses mostly in their fighter aircraft, they will be sitting beside America with naked aircraft carriers ripe for the plucking. Japan desperately needs to reinforce the aircraft carriers, and only fighter aircraft will do. Meanwhile, the Russians (who are Allied forces) can make it very difficult for Japan to deploy their fighter aircraft toward America by picking battles where the Japanese most need their fighter aircraft present.
The net effect as a player is that you can there suffering waves of gut wrenching panic over the placement of one aircraft or one infantry. There are always multiple small fronts teetering on a knife edge.
Partly this is achieved by a game structure where the global variance is quite low (you can predict fairly confidently how many of your battles you are likely to win), but the local variance is generally quite high (you don't know which of your battles will be the one you lose).
The secondary factor is that both players are actively contesting the variance in every theatre of engagement.
You might have enough power to take the safe (low variance) position in three of the four major battles you need to engage. Which of those three battles, exactly what balance of variance?
The way the game is set up, it could take forever for the game to achieve resolution. The driving factor that achieves game resolution is the massive American manufacturing capability. Unless the Axis powers gain the balance of industrial power in the rest of the world, eventually the Americans become unstoppable.
Defense can be coordinated, attacks can not. If the attack Britian, American planes stationed in Britian participate in the defense. But when Britian counter attacks the Germans, the American planes to not participate. For this reason, the Allies often sacrifice valuable American units for the sake of preserving less valuable British or Russian units. Because the Americans simply can't get enough forces into Europe for the Americans to mount a valid counter attack of their own.
If America is played well, it will usually allow itself to suffer massive material losses in Europe in order to blunt the Axis momentum in gaining control over European industrial capacity. This leaves America somewhat exposed in the Pacific and pretty much naked in their homeland. The American material sacrifices in Europe do much to blunt the Germans, but leave the Japanese free to accumulate as much naval power as they desire.
Hardly a game resolves without a harrowing attack from a powerful Japanese navy toward the naked American homeland, with only a few American airbases on the Pacific islands between them.
Often the player controlling America will instead approach the game with an American mindset. This player will fiddle around with his massive airforce gaining control of one Pacific island after another in the slow crawl toward the Japanese homeland while the Germans punish Britian mercilessly.
This kind of game will usually swing on the control of the production capacity of small outlying territories. Did you have that one last tank to crush the Indonesian capitol, or was it lost knocking at the gates? If you had only equiped that invasion force with one extra infantry three moves ago!
Imagine a game of Go where the chips have two numerical values: 1 or 2. On your turn you choose whether to place chip of value 2, or two chips of value 1. When you capture, the capture is not automatic. A roll of the dice determines whether the entire capture succeeds (and all the captured stones are removed), or the capture fails and the placed stone is lost. The probability of the capture succeeding would be some function of the weight of the capturing stones versus the weights of the stones risking capture.
Do you put down one stone of weight two and go for the sure thing? Or do you try to regain lost ground by placing two stones of weight one, having only a marginal advantage in each capture, and a large risk that one or the other (or even both) will fail?
The best strategy games are those where the nuances of play primarily impact variance. These kinds of games force players to react to the unexpected, take what is given, and make fine determinations of risk, balance, and timing.
You need a fairly high level of play to experience the extremes of inner torment which A&A is capable of creating. I imagine that if you overplayed the game certain dominant themes would emerge and the fine lines of balance would degenerate.
Some people play A&A with a joker in the deck. These are high risk technologies you can research which make your units more potent (should you be so lucky). This is the gambit of people with short attention spans and an inability to endure anguish or nurture a losing position against the odds.
The reason most games lack true strategy is because it's way too hard on the digestion to really play a game that works.
Absolutely he has a different point. His first statement is a call for checks and balances. And then everyone runs him into the ground for partisanship, but who among us has no stripes?
When Sun takes their turn on the stage, as they surely will to satisfy their legal obligation to maximize shareholder value, I'm positive Diffie will be the first to applaud (in private) when his counterparts on other chuckwagons take their turn yodeling the opposition.
I fear for the future reading the commentary this article has generated.
Recent changes, such as the DMCA, have already seriously undermined the historic checks and balances which make democracy possible. How can people not see that lacking the proper checks and balances excessive concentration of power is inescapable? It then becomes an argument about who, not whether, and sadly it seems that most commentators here are already well along in contesting the who.
Democracy is not a system, it is a meta system. Partisanship must be suspended if the meta system is to remain viable. Disagreeing on the government must not degenerate to the point where it becomes impossible to enact a free constitution.
I remember the original video benchmark cheat (windows era). Suprise, suprise it was ATI who created this genre in the first place.
PC Magazine had this absolutely stupid benchmark which people took very seriously. It consisted of drawing the same small bitmap on the screen in the same position a zillion times. ATI took it upon themselves to optimize a zillion-1 occurrences of the bitmap redraw by detecting that it was running the PC Mag benchmark code.
Oh yes, ATI was hammered then too. I was more outraged by the sorry excuse that constituted PC Magazine's attempt at a benchmark.
With benchmark code that bad, how could the playing field possibly remain level?
The same thing applies in the 3D era. Image quality is routinely ignored.
I can give a good example of this. I built two systems around the same time. One was a Pentium III 750 with a Matrox G450. The other was an Athlon 900 with a Radeon 32MB DDR. We thought the Athlon+Radeon would be a far better gaming system. The G450 sucks, right?
We configured these machines side by side to run Quake3. The G450 was too slow in 32 bit color mode, so we tweaked it into 16 bit color mode, and decreased the texture quality a notch or two.
The Radeon ran fine in 32 bit color mode with maximum textures. In 32 bit color mode with more detailed textures it still ran 10% faster than the tweaked G450. A stunning victory if I was reporting for a popular web site.
As it happens, the G450 in 16 bit color mode with reduced textures produced an equal or superior image to the Radeon DDR. The G450's saturation, contrast, and hue was much to my preference. And this remained true despite endless adjustments of both cards and both monitors.
Secondly, the reduced texture quality had no impact on game play whatsoever. Generally when I play I'm wheeling around in a blur. Who has time to watch the scenery?
So far, it's really a saw off.
But then the kicker: the G450 frame rate proved more robust. The G450 might lose 30% frame rate on a complex corner of the map, where the Radeon frame rate would fall by half. On the demo map, if you walked onto the big pink tongue the Radeon was chunking away at 20 fps while the G450 remained tolerably smooth.
So what good does it do for Matrox to produce a superb implementation of their 16 bit color mode when the reviewers insist on trashing it for running poorly in 32 bit color mode--without even noting that Matrox's 16 bit color mode is equal or superior to many of the competing products' 32 bit color modes?
And why is this so rarely reported? Because reading the benchmark results, no god fearing game player would dare to touch a G450.
I aim my personal blame cannon at Nvidia. Nvidia is the company who convinced the world that 32 bit color was necessary even if the image quality produced was crap anyway. ATI is merely doing what the peanut gallery demands.
Absolutely correct. The uptime on my w2k was interrupted only by hardware problems and service patches.
How about someone rating the MTBP (mean time between patches)? The MTBP is a far bigger problem than the MTBF.
I did have some problems with w2k initially. All of my problems were due to PC Anywhere, a bad Matrox driver, a bad SB Live! driver (SMP bugs), and a stick of memory that went south.
Maybe the reason my w2k box ran so well was my Enermax 350W power supply. I think people who run Unix also tend to build better boxes.
Despite the impressive months-at-a-time stability I experienced with w2k, this machine is now running Debian. After my memory went bad and I contemplate rebuilding my software environment with all the correct patches and drivers I came down with a serious case of patchitis.
Let me tell you, though, that dselect is no walk in the park either. Ever installed ext3 on Potato and then discovered that the XFree on Potato needs some extra TLC to run dual-head, so you go ahead and run Testing anyway?
What's the net cost of Potato running two years behind the times?
Unix guys are like the people who spend two weeks at the beginning of summer painstakingly ridding their yards of every weed and vermin, and then spend the rest of the summer drinking beer in their hammock hurling abuse at their neighbors who have to spray their Dandilions every other week.
I'm getting tired of reading comments mired in funny money reality. Advertising is an expense, not a revenue. People who buy products which are promoted through costly advertising are willingly subsidizing the vendor.
/. to find out which database program to use. The scorn heaped on Postgres was of a particularly inferior quality, the positive comments especially well informed. That's what /. is worth. I don't understand how hanging strings of colored triangles around the parking lot is going to carry the day.
I guess the premium is less painful when it doesn't look like a subscription fee.
Advertising is porn. The babe on the Corvette makes us feel sexy, so we pay an extra $15 for an inferior product. What is it about hot chicks that causes men to reach for their wallets? Whether it's a hooker or whatever the hell X10 sells, what's the difference?
I remember when I came to
Google has entirely the right idea: matching the form of advertising to the sentiments of its users.
DCLXVI
Alphabet of the Beast.
The fundamental problem is that programmers are not taught to properly differentiate structural constraints from logical constraints.
A structural constraint is not writing to a pointer unless you are certain that the pointer points to valid storage.
A logical constraint is not writing to a pointer unless you are certain the operation contributes to the functionality you are implementing.
Mistakes occur when programmers start thinking about the logical constraints before coding the structural constraints.
A good example is writing a device driver for a device you don't really understand. You're going to spend a lot of mental effort trying to understand the logical requirements of the device. Somewhere along the way you forget to address a structural requirement of the operating system.
The only cure for this is to adopt the habit of coding structural constraints _before_ you start to address your logical constraints.
The big surprise when you learn to do this is that most programs write themselves. It can very surprising how little "logic" most programs really have, and how few ways there are to implement that logic without violating structural constraints.
The downside of adopting structural discipline is that programming in the C language becomes less enjoyable. You begin to realize that 90% of your work is extremely blue collar, and only 10% of your work can be considered creative.
I wish I could say that C++ is the cure. I've devoted a decade of my life to mastering C++. C++ eliminates the worst elements of the C language at the expense of introducing new complications ten times more difficult to teach.
People come along all the time with the idea of simplifying C++. Invariably, these people throw away the most promising features of the language, templates, while elevating the most pedestrian feature, the object model.
I'm waiting for the day a language comes along where I can sit down and code up a custom memory management policy that exactly meets the need of my application and be entirely sure that it is going to work the first time, every time.
The language which makes that possible hasn't been invented yet.
It can't be done in C because there isn't enough abstraction. It can't be done in C++ because of the vast complexity of the language. It can't be done in any of the popular alternatives because those languages have defined the task of solving the really hard problems as not being part of computer science.
I know a young man just like you. DLink used to sell a 530TX network card based on the Via Rhine chipset. Recently they "upgraded" the product. It is now sold as the 530TX+ based on some crappy Realtech chipset.
I think my friend has already spent an entire day of his life trying to find a different network card that costs the same as the old DLink (approximately $15), but isn't based on a Realtech chipset. He even did this for the benefit of a machine he was building for a Windows user. How would a Windows user tell the difference?
Complaining about one purchase of FP is like chasing a penny down a sewer grate.
Nothing wrong with the grammar at all if you ressurect a few elisions. One of the characteristics of English, as opposed to Latin, is that it tolerates a wide range of informalities.
intellectual property [rights] or other rights
The end user may not: 1) use the software [to disparage the evil empire]; 2) infringe upon the [undisparagable] parties; 3) violate; 4) promote.
You can make a stronger case that the original punctuation is sloppy.
Sigh. The vast majority of signals intelligence is devoted to traffic analysis: figuring out who people are talking to. Think about this. Do you think they have the resources to read all the stuff they can capture?
Once they decide that an individual is connected into too many suspicious circles (drugs, munitions, political activism, voting democrat, etc etc) only at that point do they consider devoting resources to decyphering the content of the traffic exchanged. Compared to the total volume of traffic exchanged on global networks, they have the resources to crack only a tiny sliver of those communications.
If everyone out there is using nearly unbreakable encryption they simply don't have the resources to sift through everything they want to look at.
It's very important to limit the total volume of strongly encrypted traffic. If they manage to limit strong encryption to 1% of the population consisting entirely of
In no way whatsoever do the objectives of this initiative depend upon Bin Laden adopting an American approved backdoor technology.
Arguing that the American government thinks this is the objective of their backdoor policy is juvenile circularity invented to justify our _premise_ that the government is too stupid to be trusted in anything.
Let me try to paint a picture of how things work based on what I believe to be the existing American capability in rough factors of ten.
I would think that the Echelon system maintains a unique identity for 1 billion of the world's 10 billion people. This group would include the majority of people who have used a telephone at some point in their lives, and not many who haven't. We can think of this group as the "literate and connected" group.
Out of of this roster of one billion "known" individuals, 100 million would be identified as belonging to the sphere of national interests. Anyone with a degree in metalurgy, who has ever travelled to the middle east or the eastern block, who has ever held a pilots license or owned an airplane, people involved in international trade, people trained to operate weaponry of any kind, people on the inside of national infrastructure grids, etc etc. What they are looking for at this level is overlap between the groups motivated to cause trouble and the groups with the skills or resources to cause trouble. The only thing they need to identify about people in this group is the various spheres of influence each person belongs to.
Out of this group 10 million people are identified who have a significant presence in groups representing both means and motive. If you are in this group, Echelon problably knows your great grandmother's maiden name. Your location is monitored and the people you communicate with are identified and recorded. Your traffic will be subjected to keyword analysis and correlation beyond what the bulk filters are capable of processing. A select ten percent of your communications are permanently recorded in case they become interesting at a future point in time.
Out of this group, 1 million people are identified who combine means+motive+opportunity. It is this group of people where they become very interested in digesting the _contents_ of your communications. Perhaps 1% of this is selected for a few seconds of human attention.
Our of this group, 100 thousand people are subject to exhaustive scrutiny and human analysis.
Out of this group, 10 thousand individuals are actively operated against. If you are in this group, there are white vans parked in your street, your cigarette lighter contains a satellite transponder, your keystrokes are monitored by devices that can only be seen under an electron microscope. To belong to this group you need to have your fingers stuck into more than one pie. These people are the tendrils that bind shadowy worlds together.
Out of this group, you have 1000 people designated as the world's primary disruptors of shit. If you are in this group there is someone in the intelligence service who knows more about your life than you know about yourself. Your continued existence is reviewed daily. It's a good practice to surround youself with equally despicable proteges who are eager to take your place.
Out of this group, there are 100 people who's continued existance is considered bothersome. These are the people who out so well protected or removed from American influence that nothing much can be done about it.
Out of this group, 10 people are nominated by American politicians to play the part of celebrity terrorist. These are the "forces of evil" who constantly invoked to sway public opinion on any issue where it allows the government to get what it wants.
Take a good look at that pyramid and decide whether it matters to the American intelligence service whether ten million people use strong crypto or whether one hundred million people use strong crypto. The intelligence service needs to know enough about this group of 100 million people to determine which subset of 10 million people deserve the next layer of surveillance.
But no, if Bin Laden alone uses strong encryption, the entire government agenda against the strong encryption is ridiculed as being completely bogus. A fine example of
Actually, it would be best for all concerned if every opportunity to legitamately profit from environmentally sensitive behaviour was exploited immediately.
Get a grip here guy. If it costs money to comply with environmental regulations, chances are that much of that money being spent is creating other waste streams. How much of the cost of trucking waste from away from an incinerator is spent on diesel fuel? Or the waste from a power generation station?
The absorbing boundary in where every industrial process feeds its waste into other industrial processes. If an input ends its life in a landfill, that input either needs to be eliminated entirely, or another industrial process needs to be invented which reclaims that input (usefully). It does no good burning a pound of diesel fuel to reclaim a pound of some other input.
Labelling these success stories "propaganda" really irritates me. We should be promoting every small accomplishment at creating closed-loop processes at every opportunity. Enough of this bullshit logic about hydrogren being a "clean" fuel because the carbon is released in some state != California.
That's a strange model of when to open your mouth. Caring about something = having something worth saying. The level of discussion here would be much improved if fewer people believed that.
Get a grip guy. If you think content control is the same thing as gun control, you don't know very much about gun control.
Some people have used car analogies (the Mustang 5.0 with a 4.7 litre engine), but no one has made the key observation.
Chips are being sold based on the tachometer scale. The P4 revs at 2GHz. The Athlon revs at 1.4GHz. Most of the buying public thinks that the tachometer is actually the speedometer.
So now AMD is painting different lines on the tachometer. They are writing 1600 where 1400 used to be etched. It's going to confuse the mechanics all to hell without doing anything about the ignorance of the buying public.
The whole thing makes AMD look cheap.
How do they go about conveying the message that the Athlon 1400 is a six cylinder engine versus the P4 which is a four cylinder engine?
I remember reading biker magazines about ten years ago. In North America, you had 600cc bikes which redlined in the 16,000 RPM range. In Tokyo, 600cc bikes were not street legal. The biggest bike allowed was in the 250cc range IRRC. So in Tokyo you had these 250cc bikes that redlined at 28,000 RPM. You had to pull 10,000 just to cross an intersection. Isn't that a perfect description of the Pentium 4?
Back when all the other chip cloners were playing games with their product naming, I never bought any of those chips. I feel the same way about rebate stickers: the amount of mental effort required to read the fine print exceeds the expected return from redeeming the coupon (should you be so lucky that a cheque ever arrives). I tend to make my life simpler by looking at only those products "gimmick not included". If the sticker makes me work harder to decide what I'm buying, I don't buy it.
I think AMD is exchanging one bottle of single malt (customers who are influential and know what they are doing) for one Joe-sixpack of American beer. They are heading out into territory that will be fought on marketting terms rather than on technical terms. Good luck to them.
I remember another company that took this route: Gateway 2000. They started off with unbeatable price/performance, and then they veered into big screen TVs and five-disc CD changers. Look at Gateway 2000 now.
How long will it be before the AMD PR2100 and the AMD PR2200 are just the same chip in a different die color?
The way these things work is that the usedid he picked at random was probably the userid of a secret mistress of one of the top FBI agents.
I was once a witness to a purse snatching where the victim happened to be the wife of the first cop who showed up. In the middle of something like that you sometimes doubt whether your mind is functioning normally. The cop car rolls up, the cop jumps out and immediately proceeds to give the victim a three minute hug. Hey, these guys are more compassionate than I thought.
The activity that followed couldn't have been outdone if the War Measures Act had just been invoked. The guy who snatched the purse is probably doing concurrent life sentences by now.
Freeeeeeeeeedome! Thus was formed the nation of Xanadu.
Somehow I doubt that the American government, regardless of where the money comes from, wants to become known around the world as the iron curtain of information exchange. Corporations want their profits, but they want their "apple pie" just as badly. Organizations like RIAA whom everyone hates already can take the brunt of shutting down a music exchange service. When it comes to shutting down a heterogenous system of interchange because someone *might* be exchanging materials in violation of copyright, that's the end of the Apple Pie era of corporate relations. Nike will never be the same again.
The networks discussed are a far cry from what's possible in the ultimate scenario. There's nothing about the coordination of these networks that make them unsuited to fully distributed stochastic control processes. You can slow the fabric down, but you can't make it run any slower than a juicy rumour in Washington. The politicos only have to look to their own brutally effective system of ad hoc "information sharing" to see how pointless this is in the end analysis.
I'm primary a C++ programmer. I had several good Windows compilers, so I stuck with NT as my primary system for a long time. I'd used Unix in small doses along the way, and I'd always had the MKS tools installed (ls, grep, find, etc.) since the days of MSDOS. Complaints about the stability of NT are overblown. The NTFS file system was extremely stable and it didn't bug me that I had to reboot once every two weeks. The real problem with NT is that the environment is claustrophobic. Using multiple tools should be the easy way to do things, not the hard way.
My first project was converting an old 486 box into a firewall for my new cable modem. A high school student down the street started me off with slack. One of the first things I had to figure out was how to differentiate my two identical network cards by creating an alias. I asked the kid down the street. He had no idea. He said, "I just use different cards." Thanks a lot.
No matter what choice you make, if you have an ambitions at all sometime in the first week or two you're going to find yourself in over your head. Think of it as survival training. Be ruthless, beat the problem to death, and take notes. Survival skills at the command line will stay with you no matter what system you end up chosing. Somehow in my messing around I hosed my route table. I must have typed "ifconfig" and "route show" 2000 times that day. My neuronal patterns have never been the same since. That's where the real learning takes place.
I didn't find slack "logical" after leaving NT. It might be logical, but it didn't seem logical. The rc.d hierarchy gave me shivers. Major transitions are never painless.
The Linux packet filters were in major flux at the time. I found it very confusing to keep track of the new/old ipchains/whatever. It seemed to me that Linux changed way too much and way too fast. I decided to crawl into a peaceful corner where I could really think. I replaced slack with OpenBSD.
For me, OpenBSD was an instant love affair. I could tell right away that OpenBSD was a product of a similar mind. Your first experience installing OpenBSD is the partition editor, a tool that takes you back in time further than Austin Powers. One thing OpenBSD does not have is good looking teeth. Some people never get past that.
One of the qualities of OpenBSD is that the internal documentation, the man pages, are both comprehensive and accurate. Very light on actual examples. You have to be prepared to try out many, many different arguments until you get the incantation right. Then it works. In most cases, forever.
Even in OpenBSD I had some horrible fights along the way. If you set up a DHCP interface a script file
When I upgraded to OpenBSD 2.6 I discovered that the DHCP server at my ISP was incompatible with the changes made to OpenBSD's dhclient. It was my ISP who was violating the standard. I had to scour the web for hours to find a patch to dhclient that allowed my internet interface to function. Five minutes after installing the system I'm patching kernel utilities.
When I upgraded to OpenBSD 2.7 I happened to have the exact network card (a certain 3com) which the OpenBSD people had broken in that release. I had to patch and recompile my kernel before I could bring my network up. Once again, I was patching my kernel five minutes after completing the install.
The moral of the story is don't get yourself a Jeep if you aren't prepared to change a flat tire.
Part of changing a flat tire is being willing to work with whatever tools you find in the trunk. In OpenBSD that means suffering with "vi". As painful as it was, I forced myself to use vi for every configuration file I edited. I've mostly been using xemacs for source code editing on both Windows and Linux/BSD. I think vi sucks, but that's another entirely personal judgement. I plugged my nose and learned to get by, because I know someday I'll be in a pickle and vi will be the only thing there.
About six months ago I set up a second desktop machine. I now have Redhat 7.1 beside my w2k box. I chose Redhat only because the C++ compiler I use, KAI, is only officially supported under Redhat 7.1. It probably works on other distributions, but I don't consider myself experienced enough (yet) to be breaking my own trails. It's another "plug my nose and live with it" scenario.
I didn't find the automatic Redhat installer any easier than the OpenBSD installer. Austin Powers has a prettier set of teeth, but that's about it. When the graphical installer lets you down, you're left twice as confused about what to do next. I had a Matrox G450 in that box, but the support was only up to date for the G400. Partly it worked, but partly it didn't.
What I can say about Redhat is that the man pages are three points less trustworthy, complete, and accurate. The Redhat man pages feel content to document some Unix, some place, some time. Not necessarily how Redhat 7.1 itself works in the here and now.
Next time around it will be Debian. As you learn more, you'll realize that management is more important than quick gratification. On the other hand, when you try out Linux for the first time it doesn't help if you have twenty problems and you can't get quick gratification on any of them. You'll just end up thrashing.
Here's some words of wisdom that will matter in the long run a lot more than which distro you choose:
Learn to use the power of a good shell. I have zsh on every machine because zsh has the best support for interactive command editing. This is even more important when you don't know shit and you have to type every command ten times to get it right.
Set your machine up with reasonable external security (no unnecessary ports open to the world), then make your internal security lax. I was having enough trouble coping with all my problems that I didn't need to worry about whether I was root or not. A year later I figured out how to set up sudo for noauth, so I could use sudo all the time without having to type my root password all day long. Now that I mostly know when I need to be root and when I don't, I'm starting to tighten up my internal security as well. But during the steep part of my learning curve, internal security was a whole lot of extra hassle I didn't need to deal with.
Use SSH exclusively. Nuke telnet. Nuke ftp. SSH can do amazing things once you get to know it. Maybe that's not the first thing to start with, but you should plan on making it the second.
Learn as much as you can about the localhost routing table. I ran OpenBSD for a six weeks before I finally got my DNS set up properly. That was an aggravation I don't ever want to live through again. Connection attempts would hang mysteriously for 15 seconds. Half the command line tools would lock up in resolver freezes (unless I added the -n argument to everything). Somehow on Redhat when I upgraded a network card it lost the default route. The machine was crippled until I figured out how to restore the default route manually. People who've been using Linux for years completely forget what it's like to have a broken resolver and not know how to fix it, or to have to type numeric IP addresses for all other hosts on your local network segment because you don't have your "search" option in resolv.conf set up right (or whatever mysterious place that might exist under Linux).
Finally, try not to chmod 777 too much. I'm sure I did that a lot in the first couple of months. Any effort you put into understand Unix permissions ultimately goes a long way.
The attitude you bring is ten times more important that which distribution you start out with. You're going to wreck your first install, get over it. I've now build six OpenBSD firewalls and I've just barely reached the point where the process is entirely smooth. Learning takes repetition and that means a lot of breaking things and a lot of fixed things.
Finally, the most important point of all. There's a psychology that goes along with using NT that you'll have to lose. In NT when things don't go well there's a panic that rises up inside. Because you know that even after you fix the problem, it still isn't going to work 100%. You can't afford be screwed on both sides. NT teaches the attitude "play now, pay later". The "pay later" comes when you really need something to work 100% and it just isn't possible.
In Linux/BSD the psychology is "pay now, play forever". In your worst moments repeat the magic manta "once I fix this, it will never ever bite me in the ass again". If you've been using NT for a long time you aren't capable of believing that, but it's true. Trust me.
DOS had a built in path length limit. It wouldn't let you cd beyond that length. But you could still mkdir onemore. mkdir onemore\onemore. mkdir onemore\onemore\onemore. Pretty soon DOS crashes.
I used Papst fans, Enermax FC power supplies, Fujitsu FDB hard drives, rubber gromets to mount the hard drives, and a few bits of sound absorbing foam. Actually, the Celeron had the noisiet parts so we glued half a dozen expired mouse pads to the inside of the case, black foamy side up. Very effective.
It's really worth the trouble. My patience for technical writing has more than doubled since I eliminated the droning noises. I used to play Quake just to drown out the background noise.
What bugged me about the review was the comments on the the G450. I use a G450 in the dual PIII/750 system. I had a Radeon 32MB DDR in the 1G Athlon (KT7A-RAID).
We used to play network Quake at home. I played on the G450, my brother on the Radeon DDR. I set my system to 16 bit color, lowered the texture detail slightly (which I didn't give a damn about), and stuck to a lower screen resolution (either 800x600 or 640x480 depending on how I was feeling).
My brother set the Radeon DDR to 32 bit color. 16 bit color on that card is very ugly and not much faster. He was probably one screen resolution up from me. His frame rate averaged about 30% faster. Did it make any difference?
Well, we finally decided that the G450 was more playable. (I didn't have SMP enabled, so it wasn't due to CPU power.) The 16 color on the Matrox was at least as saturated as the Radeon in 32 bit color. It was hard to get a gamma curve on the Radeon which didn't cause the image to have a slightly washed color tone. You could almost get it perfect, but the dark parts would be just a bit too dark.
On the G450 it was trivial to get excellent color and gamma.
With tons of bots on the map, the Radeon was definitely a bit more brisk. However, the Radeon was *much* more sensitive to the complexity of the map. You'd be cruising along at 60fps or better then hit a bad part of the map and plunge down to 20 fps momentarily. The Matrox hummed along at 45 fps all day long, unless you had ten bots in the same room, then it would taper off maybe down to 30 fps.
The G450 is far more playable than the numbers suggest. I could see the map just as well at my curtailed settings as my brother could with more colors and more pixels.
My playing style is somewhat Gretzky-like. I can run into a crowded room and just know where everyone else is almost all of the time. You can tell where the guy behind you is going by how the guy in front of you moves. I'm a lousy player against people who never miss. For everyone else, I'm mayhem in motion. If I want to shoot someone 90 degrees to my left I usually do a dead spin 270 degrees to my right (so I can see enough of the room to pick up my next three targets). I don't shoot at people, I shoot at places I don't want people to go. I had no trouble at all playing this style with a G450 and I even preferred it in many ways to a Radeon DDR on a faster processor, with faster memory.
It takes a lot of gall to call the G450 a crappy card. It's kind of like an amateur golfer who decides his scores are bad because his equipment sucks.
Don't do that unless you have a good sense of smell. PC fans aren't guaranteed to start up below 7 to 9 volts. One day it just won't start.
If you're really desperate, get a fan rated to start at 7 volts and regulate the 12V supply down to 7.5 volts with a $2 regulator or a bunch of small diodes.
People on this thread are obsessing about details and evading the issues. That's sad, because this is an important topic. Altruism is a slippery subject. That's why when the The Selfish Gene came along it was such a big event. The selfishness was still there, you just had to look in a different place.
Chip is discussing cultural altruism, the idea that communities can adopt altruistic social conventions. The GPL itself has two faces. Stallman had a selfish motivation for creating the GPL community: his own convenience. The GPL community is an altruistic culture, but only mildly so compared to the normal context of debate.
Think about bats exchanging blood meals. One night you feed well and return to the nest to find your buddy on the verge of starvation. So you cough up a blood meal. There's goes desert. Then you hit a dry spell and now you are verging on starvation. You see your buddy return to the nest with a fat belly. He turns away. You die. The term for this behaviour is "defection". It's stupid to look for altruism in a context where defection doesn't inflict real harm.
It's not easy to decide what behaviour in the GLP community counts as defection. Stallman created the GPL in an era of scarcity. Good quality code in those days was difficult to obtain. Now we are in an era where the code we have is as much of a problem as the code we don't have. It's quite possible that trolls are doing the most harm to the GPL community.
I try to figure out why Stallman felt so injured by his inability to access other people's changes. I think his ambitions weren't compatible with duplication of effort. He needed to cajole people into cooperation in order to get where he wanted to go. That was a different time. These days software has become an enormous ecology. In a large ecology, there are always niches. Niches promote diversity, and diversity is usually good.
One of the key functions of a healthy ecology is colonizing new resources. When new hardware comes out, the gcc toolchain is often the first spoor. gcc is like the worms in the soil that make it possible for plants to set down roots. Regardless what vegetation comes and goes, the worms need to be there. I think the GPL makes a lot of sense in that niche. However, it's definitely a mistake to think that the GPL is the only approach to homeostatic altruism or that the ecosystem doesn't benefit from a diversity of approach.
Would the security of OpenBSD be improved by adopting the GPL? It makes me laugh to even think about it. A secure OS hardly wants to apply every patch that's floating around. In this context abundance is a bigger threat than scarcity. Here, take the code, go away! Leave us alone! Our classical GPL notion of defection (playing with your marbles in a tree fort) makes no sense at all. Does any thread of defection remain? If defection doesn't apply, none of Chip's arguments about altruism have any bearing.
If OpenBSD does not survive on the basis of policing altruism, how does it survive? (Isn't that a more interesting question than predicting its doom?) I find the theory of absorbing boundaries more applicable in this context. Altruism is a social theory. Nothing stirs debate like a social theory. In that sense, altruism is a selfish meme entirely in its own right. Absorbing boundaries are abstract and dull.
Let's peel away altruism's self promotion, and look at some other possibilities here. To begin with, OpenBSD is not terribly dependent on growth. In fact, OpenBSD actively resists growth wherever possible. Security and growth are not often on speaking terms. What OpenBSD does appreciate are contributions which fix or simplify the existing system. The scarcity the OpenBSD team confronts is their own ability to review the code base. Nothing makes their life easier in that department than having less code, or less cluttered code.
But let's suppose Theo gets a brain tumour and decides he needs an aggressively protectionist license. The dirty bastards must give something back! How would he write an OpenBSD GPL? No one can use OpenBSD until after they've submitted an approved patch to the OpenBSD team? Just what would make their lives easier: a pro-troll license.
We'd have to add an anti-troll provision. If you submit three patches which contain bugs, shoot yourself. Ask a question from the FAQ three times, climb into the OpenBSD powered baby mulcher. A Darwinian license would be a nice thing, but I don't think it would accelerate progress on OpenBSD.
An interesting example of OpenBSD thriving is the KAME IPv6 extensions which have been donated to the BSD lineage by a consortium of seven Japanese companies. None of this work is under the GPL that I've ever seen. This is the heartland of the inter-op niche. I don't think it hurts anyone that the KAME implementation can be used in any context. The valuable commodity here is conceptual experience. Would it make sense to impose an agglutinating license like the GPL? I don't think so.
On reflection, it makes more sense to think of your code being incorporated into OpenBSD being a privilege rather than an obligation. Even supposing you write a perfect piece of code, the world changes. If your perfect routine is hidden away in a proprietary system whose going to notice when the world changes in a way which violates your requirements for correct operation? Not only do the modules need to remain correct, but the interactions need to remain correct. How about contributing your component back to OpenBSD? Now you have a group of clever and decidated people paying a lot of attention to potential problems and you aren't paying them for the service they are offering you. Amazing!
There are lots of reasons why people will continue to contribute back to BSD even if the license doesn't compel it. What's strange about the GPL is the currency of return even makes sense. This can only be the case when quantity matters as much as quality. The GPL community has a very aggressive process of assimilating crap. It eats crap and shits food. (Sometimes after more than one iteration.) That alone should make it clear that the GPL is an odd corner of the ecology.
If the selfish altruism argument carried any real weight, we wouldn't be using the GPL. We'd be using an anti-DMCA license. This software is free to everyone, except those people who profit from making it illegal for us to determine how things work so that we can add support to our platform.
Finally a definition of "defection" red in tooth and claw. If anything is going to bring down the GPL or BSD communities, it's a legal context where you can't write the code in the first place.
Another area where the GPL falls flat is in code re-use. The GPL is very effective at encouraging code re-use at the component level (i.e. via linkage). But that's not the whole story. Object oriented designs encourage run-time re-use; generic designs encourage compile time re-use. The LGPL covers components, but it isn't much use for generic code.
Generic code exists to make the implementation space easier to navigate. It doesn't have much to do with the finished product. Code re-use at this level makes the most sense if everyone re-uses it. The scarcity here is in compatible skill sets. This an area where you really don't want niches. We all know about languages whose name includes a number.
Wouldn't it be better when the day comes that a proprietary chunk of code gets donated back to the community that the proprietary code is already based on the same generic libraries? The GPL does not encourage that. A generic source code library hardly needs the GPL to enforce community. Re-use is a community almost by definition.
The GPL doesn't appeal to me much. I've never been that interested in peering over my shoulder to see how other people are getting on.
All the things I'm interested in working on I find are already under the BSD licenese. Often the ideas are more valuable than the source code anyway.
I see the GPL as being an inherently materialistic license based on the view that source code is an intrinsically valuable commodity. 90% of the code I've seen I'd only maintain at gunpoint. Stallman must get more pleasure than I do at realizing everyone else's version of the same code is worse still.
To make the GPL non-materialistic, it would have to control ideas. I'll really laugh the first time I see a GPL patent granted. "This patent is free for all to use, but patents which cites this patent must also be GPL'd"
Is that the view of the world the GPL community wishes to take?
I can't help but paraphrase an American senate review panel on the subject of selfishness: Q: Does the staggering sum of money we are spending on this supercolider in any way help to defend the American people? A: The staggering sum of money we are spending on this supercolider makes America worth defending.
I'm disappointed to see Chip take such a narrow position on the role of political altruism. I think creativity is its own reward, and that creativity flourishes best where politics is practiced least.
I'm in complete agreement. The people who thought the Netscape garbage scow was going to be turned around overnight need Ritalin added to their water supply.
The only feature of Mozzila that no one here speaks for seems to be the integrated mail client (and all the other platform riff raff). I followed BugZilla for a while and the mail client sucked up *tons* of debugging resources. I suspect that this was a political requirement, and not a choice made by the Mozilla team.
In most other respects, Mozilla's decisions stem from the nature of the open source development process. You don't gain support by telling people that the product doesn't work on their favorite platform, doesn't support their native language, and has an interface which doesn't conform with their cultural expectations.
Bloatware: an application which supports any feature which I myself don't require.
Linux supports diversity via a plethora of distributions. Mozilla supports diversity via XUL and its comprehensive i18n implementation. These things didn't come for free.
The people who are grousing about Mozilla suffer from the syndrome I call "majorism".
Identify the group with the largest political clout (ie5 users on x86 Windows) and judge by the standards of this group alone. Despite the fact that this group is *least* in need of an alternative product, and least likely to adopt one even if it came along.
It's true that Mozilla made plenty of mistakes. But as far as I'm concerned, Mozilla had the courage to make the right mistakes, and I still believe that courage will pan out at the end of the day. Stability, agility, and beauty were deferred in the name of portability and process.
A year ago Tiger Woods make the decision to correct his back swing (he thought it was too loopy, if I recall the "technical term"). For a year or so he wasn't exactly setting the world on fire, and I read no end of editorials written by people who'd fallen off the Tiger wagon. "Sure he's good, but he isn't great." Where is he now?
In my book, great is when you value your potential more than your short term success. No one ends up looking as foolish as those who judge too soon.
As soon as I saw the first version I wished that
There was no factual accuracy to the slant of the original story as posted. This is very unfair to the organizations who have to cope with the PR backlash.