Slashdot videos: Now with more Slashdot!

View

Discuss

Share

We've improved Slashdot's video section; now you can view our video interviews, product close-ups and site visits with all the usual Slashdot options to comment, share, etc. No more walled garden! It's a work in progress -- we hope you'll check it out (Learn more about the recent updates).

The Windows API is so broad, so deep, and so functional that most ISVs would be crazy not to use it. And it is so deeply embedded in the source code of many Windows apps that there is a huge switching cost to using a different operating system instead...

It is this switching cost that has given the customers the patience to stick with Windows through all our mistakes, our buggy drivers, our high TCO, our lack of a sexy vision at times, and many other difficulties [...] Customers constantly evaluate other desktop platforms, [but] it would be so much work to move over that they hope we just improve Windows rather than force them to move.

In short, without this exclusive franchise called the Windows API, we would have been dead a long time ago.

In 2002, Be Inc. sued [4] Microsoft claiming that Hitachi had been dissuaded from selling PCs loaded with BeOS, and that Compaq had been pressured to not market an Internet appliance in partnership with Be. BeOS also claimed that Microsoft acted to artificially depress Be Inc's IPO. The case was eventually settled out of court[5] with no admission of liability on Microsoft's part.

I frequently think of the behaviors I see in terms of human behavior and human emotional responses even though I know that they are wrong. The motivation and perception of a pig is incredibly different from that of a human, even a child at a similar level of intellectual development. The perfect person to readup on to learn about how fundamentally damaging the "anthropomorphic" view is to our understanding of animals is Temple Grandin.

Science has shown that animals such as mammals and birds feel pain in a manner similar to humans. Insects, viruses and microbes are not able to feel pain or suffer. More research is needed to determine the extent that fishes and amphibians feel pain. Present research shows that they do experience fear. Fear is very aversive and animals should be shielded form situations that cause great fear. Fear will cause a great rise in stress hormones.[...]When the structure of the brain and nervous system is studied, there is no black and white line between people and higher mammals such as chimps, dogs or cows.[...]As nervous system and brain complexity increases the welfare needs of the animal increase and become more complex, but all animals that have sufficient nervous systems complexity to suffer from either pain or fear need basic welfare protections. Animals with complex brains also have greater social needs and a need for greater environmental enrichment.[...]It is obvious to me that intelligent animals such as elephants experience emotions that are more complex than simple pain or fear. They will need different legal protections than animals with simpler nervous systems. The degree of protection, and environmental and social enrichment an animal will require will be dependent on the level of complexity of its nervous system.

Her opinions do not support your assertion that "the motivation and perception of a pig is incredibly different from that of a human," or that animals do not resemble human behavior or emotional responses.

Whoa, don't blow my mind quite so hard. I'm not sure I can handle all this wisdom at the same time.

C'mon, you think I execute shell commands by writing a C program that calls fork(), exec(), and pipe()? You think I write web pages pixel by pixel? Obviously high-level languages and programming paradigms are appropriate in many cases.

I'm sticking it to the Java weenies who think that C and C++ are obsolete. The people who year after year say that *now* Java is "often as fast as C++ and sometimes faster." The people who still won't acknowledge that there is a real reason C and C++ are still the languages of OS kernels.

It's not premature optimization to write libavcodec in C. Likewise with OS kernels, virtual machines, rendering engines, DSP plugins, and many other applications where the code will almost certainly be on the critical path of a resource-intensive application. It's not premature optimization to use manual memory management in applications that need to move lots of data around with low latency.

This is why I never understand how people can say "sure, maybe Java/garbage-collection/50mb-binaries/etc. are a little slower, but computers are SO FAST these days and programmer productivity is SO much more important. Hardware is cheap, programmers are expensive." etc.

But the killer thing here is that MapReduce says absolutely nothing about the updates problem.

That's because MapReduce is a data processing system, not a data storage system. You should read about BigTable, which is the data storage system we use (I work at Google), which does support updates.

In your comments on this thread, I think you miss the key difference between an RDBMS and a system like BigTable. BigTable is almost perfectly horizontally scalable. When you need more capacity, it really is as simple as throwing more machines at the problem.

RDBMS's can never give you this kind of horizontal scalability, because they make a promise to you that you can transactionally modify any two bits of data anywhere in your database. Fulfilling this promise requires that either your whole database lives on a single machine, or that you use a distributed transaction protocol like 2PC (which totally kills performance).

So when your database gets busier than a single machine can handle, you have to manually partition your database into multiple physical databases. All the nice RDBMS features like transactions, joins, foreign keys, triggers, etc. can only (reasonably) work within a single physical database. The divide between physical databases is something your application code has to deal with -- it has to know to direct its queries to the correct partition. And repartitioning your data to run on more machines later is an invasive procedure, both operationally and to your application's code.

BigTable is designed around the reality that a database of any significant size will need to run on more than one machine. It only guarantees that you can transactionally modify data within a single row. This gives BigTable the ability to move rows around between machines without the application even knowing this is happening. If you add more machines, BigTable can immediately start moving some subset of your rows onto this new machine.

I recommend reading this paper for a far more in-depth look at this pattern. The key point of this paper is:

A scale-agnostic programming abstraction must have the notion of entity as the boundary of atomicity.