Damn, whatever happened to just being humane?
on
The Jobs Crunch
·
· Score: 2, Interesting
The underlying issue here is that a country should care for its people who are indigent, poverty-stricken, ill, weak, and downtrodden. Its a matter of humanity. Period. Forget everything else.
I can't believe I'm reading posts about flat taxes and people saying that they are fair. Does $6,000 mean more to a person making $30,000 a year versus $60,000 for someone making $300,000? OF COURSE. There's nothing "FAIR" (whatever that means) about a rich guy paying the same percentage as a poor guy. Whoever said that FAIR means that everything is equal all the time? That is totally moronic. Being humane and caring for the downtrodden isn't some magic EQUATION. It is a state of mind. An attitude. A principle.
I simply can't believe that people in the USA, my own country, are still fighting to see how we can take care of these issues without sacrificing anything out of our own lives.
I don't care how it gets done. Taxes. Charity. Donations. Faith-based organizations.
Get over your pocketbook and your ego and take care of your country for once.
A lot of thought went into the Apple logo and what it signified. The guys over at Apple were very fond of making statements with imagery, design, and color.
In another universe, maybe...
on
Lonely Planets
·
· Score: 1
According to some popular theories, relating to the distrbution and formation of matter, there is actually strong scientific evidence that supports the notion of identical duplicates of ourselves existing two or three parallel universes away. More and more scientists are starting to accept the notion that we are not the only universe, but rather that we are one of infinite universes.
So, if identical living beings exist in other parallel universes, then it stands to reason that other living organisms exist in our own universe. We probably will never be able to reach other life forms within this universe, but it probably is there.
A few months ago in Scientific American, there was a fabulous article on parallel universes and the distribution of matter. It really is worth checking out.
Reading that article, it makes you feel good because you feel like you aren't alone. But on the other hand, it makes you feel smaller and more alone than ever.
The article was okay, I guess. Very, very elementary. I would assert that most schedulers are O(1), though. Its really nothing new. This article was probably good for someone who never heard of a scheduler or worked with one.
Although the article was about scheduling, I would have like to have seen some more text about Big-O notation and why it is important to programmers. To me, any good programmer should have a good concept of Big-O notation, how it relates to traversing data structures (such as trees), et cetera.
The article did not make a point as to why good schedulers use priority queues. Which is simple, really. All priority queues are O(1) for getting the next item in the queue. It has nothing to do with scheduling, but it is the nature of the priority queue itself... as a data structure.
I would have liked to have seen the article in its whole form. I wonder if it went into more depth about Big-O, et cetera.
> The popular vote isn't relevant, nor is this the first time such has happened.
Of course it isn't the first time that it has happened. I certainly didn't mean to apply that it was.
However, the popular vote is relevant. I'm not saying that this is how we choose our leaders. But, to the people (psychologically), the popular vote is very relevant. It simply does not feel right. Nor has it felt right any of the past times when it happened.
It just leaves a very bitter taste. Especially when combined with our voting system being in shambles. The 2000 election was just a really sad state of affairs on more than one front. And I think for the country to get past it, we're going to have to have someone who is non-Clinton or non-Bush in power.
I never have been for the war in Iraq. And that is my own opinion. I'm not anti-American, and I love my country. But in this case, I just don't love what my country did.
All of these disagreements aside, I really think that America has to heal soon. The issue with the "war" goes much deeper than just the "war" itself.
A lot of people simply hate Bush because of what happened in the 2000 elections. There was never a decisive victory (Bush had more electoral votes, Gore had the popular vote). And that simply was horrible to swallow... for myself included. There was absolutely no closure.
I have never seen the US more divided than it is right now. I will not vote for Bush in 2004 (nor would I vote for Gore if the situation presented itself). Simply for the reason that I think to vote for either person is bad for the country.
As long as Bush is in power, there will be a huge rift between people in the United States. We really need someone who is a uniter... someone who can help the nation get past what happened in 2000. It isn't Bush. It isn't Gore. It has to be someone who has nothing to do with any of those people.
I don't know who that person is... I wish I did. But Democrats and Republicans alike should be seeking to unite and heal this country again. I, for one, am tired of all the hate. This should be the number one priority of whatever leader we elect.
The fact of the matter is, Bush is pretty bad with it comes to diction and grammar. He is in a position where communicating effectively is of utmost importance.
You use the example of "human" being pronounced as "yooman". But this isn't even in the same ballpark. Bush pronouncing "nuclear" as "nookyoolar" is equivalent of someone pronouncing "human" as "hymen".
His mispronunciation of this word is not due to REGIONAL accent. I live in Texas, and I can tell you that 99.9% of the people I know don't pronounce it that way. Only intellectual morons pronounce it that way.
I have no problems with republicans praising the guy for the good things he does. But give me a break, already. Stop acting as if the guy isn't a linguistic idiot. You aren't convincing anyone.
I have the 1.1 beta, and they STILL have not fixed the bug where you cannot merge more than one page of labels at a time. I still have to go back to Microsoft Office for that. If that was fixed, I'd be free of MS Office once and for all.
After reading some of these proposed features, I have to question why people would not use one of the already engineered languages.
The great example is Eiffel. Eiffel basically has every thing that you could possibly want in an OO language. Its design by contract features are pretty much unsurpassed. Polymorphism. True covariance. The whole nine yards.
I have used C/C++/Java pretty much my entire career. But after dabbling in Eiffel, it opened my eyes that C++/C are not the end all be all of languages. In fact, it seems to me that C++ was striving to be more like languages such as Eiffel.
I guess old habits die hard... which is why we stick with C++, Java, and the like. It also stands to reason why we continue to try to enhance C++ into different, more robust forms (Objective, D, etc).
But after using Eiffel for a few years now, I can say that I think it is highly superior to C++ in so many ways. But the big lacking it has is in its libraries. Eiffel simply has nowhere near the library support of C++, Java, or Python.
Anyways... I'm rambling here... but I wanted to put a plug in for Eiffel. For those who want a taste of something different.
"You have to bluff," says Jonathan Schaeffer, who heads up the university's Games Research Group and who already has a world-champion checkers computer program under his belt. "If you do not bluff, you're predictable. If you're predictable, you can be exploited."
Poker is like chess, as many others have pointed out. A computer bluffing (randomly or not) would not help it against a world-class player.
Why? Because good players do not bluff at random. Good players will only bluff in situations where the other player has a history of taking the bait.
And the only way that a computer would have a chance to outbluff a human player would be if it was already programmed with the opponent's playing tendencies.
And even in that case, the opponent, knowing he is playing a computer, could just alter his bluffing and baiting strategy in some stupid fashion and still beat the computer. Kasparov has proved this time and time again by beating computer opponents by making totally idiotic and unorthodox moves, unnecessary sacrifices, ugly openings... against computers to throw them off. Those same moves would have been nails in the coffin against equally matched human players.
In games like poker, I don't think a computer will ever be able to beat a world-class player at his/her best.
Why, when there's a need to interoperate, does OSS invariably fall back on the 'chain of programs communicating via a pipe of characters' model from the 1970s, even though mechanisms for defining rich, concurrent interfaces have been in common use for ages everywhere else?
One huge reason is bloat. Some applications have very robust messaging libraries/interfaces for third-party interoperability, but if you have to include tons of libraries and such... it makes you think twice. And that goes for any types of applications.
Though old, the "pipe 'ole ASCII" format is very lightweight. Very easy to write. Extremely fast. Less headache. And requires no library dependecies with the third party software you're trying to talk to.
Lots of people prefer this method as opposed to CORBA, JMS, IIOP, RMI, or any number of interoperability protocols out there. Which is apparrent because of the vast number of projects which still used piped-stream style ASCII communication.
Actually, that's not exactly what I was thinking about when I said "refactor". Renaming a class is really just doing a "Replace in files" for a simple regular expression. And then compiling to make sure you got everything. That's easy... in Eclipse or any other platform.
I was thinking more along the lines of other stuff that Eclipse does "quick-and-easy"... like pushing methods up/down. Or actually changing class structures. Changing widely-used method signatures. Stuff like that.
Some types of refactoring being difficult can be a good thing. Because it makes programmers think about different ways that they might accomplish the same thing... rather than just take the "quick-and-easy" way out.
Refactoring is always risky, and requires care and deliberance. Trusting your IDE to do these things for you might be pushing the envelope a little too far, I think. That's what I really meant.
It evades me why so many Java developers lean so much towards one single program to try to work effectively and solve all their problems. I often get people in my office saying, "How can you possibly work effectively using more than one tool?" It really amazes me. If you make some programmers use more than one tool, they simply fall apart. As if Visual Basic style programming is all they can do.
I cannot stand to have one tool that has everything built into it. I would much rather just combine two or three tools together and use them effectively. The idea of the fully-integrated development environment has never made sense nor appealed to me.
I have tried Eclipse repeatedly, and probably won't ever use it regularly. I think the project management is very cumbersome. And FORGET trying to use external VCS tools with Eclipse. Eclipse caches so much crap, that if anything VCS-related happens outside the environment, Eclipse goes nuts becuase it is out of sync. Not to mention that I have seen people get burned by Eclipse's dependency checker not actually compiling all the files. That's another problem. You can't compile _just one file_. It has to try to compile everything -- every time. And sometimes, that isn't what you want to do. And personally, I think the DIFF in Eclipse sucks. It has no colors whatsoever, so it is difficult to see what has changed. When diffing, it also does not ignore file changes that span across lines. So if you use a code formatter like Jalopy or Jindent, you get hosed if it formats long lines into multiple lines. These changes show up as differences -- when they really aren't. Eclipse does have some sweet features, but it really has some warts, too, IMHO.
If you are a programmer's programmer, and want a good, free IDE to use on Win32, I would highly recommend Gel. It isn't open-source, but it is freeware (the author will probably go commercial at some point). It is written in Delphi, so it is totally native. It is extremely fast and intuitive. Lightweight. It has the features you NEED. Not the kitchen sink. It doesn't do refactoring -- although some actually think refactoring by hand is better. Its VCS supports is really non-existent (although I use WinCVS -- so it doesn't matter).
It is a very solid Java IDE. I'll take it over Eclipse any day. I love having a native editor that only takes up 20 megs of RAM at the worst.
My regular Win32 working combo is:
Gel - Java IDE WinCVS/Command-line CVS - Source Control GVim - General purpose text editing Jikes - Compiler JSwat - remote debugging (if I need it)
1) Read "Code Complete" and "Design Patterns". Others will be thankful... trust me.
2) Have pride in what you do. Programming IS an art. It requires talent, practice, motiviation, inspiration, creativity, and experience to write good code. Know your craft.
3) Eliminate the KINGDOMS on your team. That is, one person should not solely own one part of the system... hence a "king". Make sure at least two people are knowledgeable about one part of a system.
4) Utilitize tried-and-true design patterns. These are your brushes and your paints.
5) Be politically aware in code reviews. Take constructive criticism constructively and remove your ego. If a reviewer is suggesting that you make a minor change, and the change doesn't harm anything... DO IT. Being inclusive of others' ideas in your code will make everyone happy.
6) When reviewing other people's code, don't be superficially critical. Programmers have different styles. A car, on the outside, may not appeal to you, but it doesn't mean that it isn't a well built/designed vehicle.
7) When designing (or refactoring) portions of code, have design reviews (informal or formal) with at least one other developer. Bounce all your ideas and thoughts. Get ideas and thoughts in return. Use your whiteboard for goodness sakes. That's what it is there for.
8) Praise other developers when they do well. Programmers need to know when they're doing good as well as bad. Programmers appreciate praise from other programmers more than they do from anyone else.
9) When you have to be critical of someone else's code, be constructive. Apply honesty with a feather... not with a sledge hammer. Instead of saying, "What the fuck??? You're not threadsafe and possibly creating multi-tons."... say... "Do you think that synchronizing this singleton might work here better... so we're threadsafe?"... for example.
10) Be consistent in your code. It makes your code more easily maintained by others.
11) Document. Please write comments. Don't be so egotistical to think that your code is self-documenting. Even in COBOL and Eiffel... the two most verbose languages on the planet... this isn't the case.
Its called The Market Economy and Capitalism. The whole US economy is built around the presumption that if you can increase supply by lowering costs then do it.
That is apples to oranges. What you are saying works in a closed system. And the system we are talking about isn't closed. The American job market being flooded with workers from other countries and from other economies.
Capital should under all economic doctrines be replaced by capital that is cheaper and can work more efficiently.
Very simplistic. But very wrong. Unless you favor slave labor and the total deregulation of the entire job industry.
In ANY system, a disruption within it will cause certain effects, some positive and some negative. The only question is HOW BIG is the disruption. The non-regulated inclusion of thousands upon thousands of H1B workers who are willing to work for slave wages (at least for techies) has seriously disrupted the economy.
This is exactly what the H1B workers do for the US economy, so as far as the government is concerned (especially our current administration) this is a fantastic thing.
No. The government would MUCH prefer that a programmer who is worth $80,000 a year... actually MAKE $80,000 a year. Because that means more taxes. What we've ended up with is a worker base that makes less money. That means less tax revenue. That means the government ISN'T happy.
Most states are having severe budget deficits because the tax (income and sales) collections were VERY adversely affected by all the unemployment. Especially in the big tech states.
This isn't how I personally feel (guess I'm not so right winged) but its how most business people feel that I have met over the last year or so.
These "business people" only hold these views until their own market is suffering the same thing. I used to hear "business people" who ran call centers say these things. Until lots of call centers went to India.
You meant to say "pre-relational." Pick and other multivalues databases have been around for a long time, sure. That makes them "pre-relational" because they predate the big shift to relational databases.
No. I mean to say "post-relational". Because they support 1NF as well as multi-valued relationships. Which means that they handle more than 1NF.
The very concept of multivalued columns is a violation of 1st normal form, though, so they are not on a sound theoretical foundation the way RDBMSs are.
Multi-valued databases support 1NF as well as multi-valued relationships. If someone wants 1NF, they can use a multi-valued database for that. MV databases have full integrity constraint support, PK columns, the whole nine. They are there for the taking.
Where MV databases shine is in the denormalization of data. 1NF by itself simply doesn't cut it (performance-wise) for these kinds of functions. Which is why Pick-based/MV databases are used by huge financial institutions and ERP vendors.
What amazes me is that a lot of people think Oracle is actually the first one to tackle this problem with their materialized views and such. Some think star schemas were first to deal with data crunching, et al.
MV databases have been doing this for decades. And still today, they do it faster than any of these databases do it.
You are calling "multi-valued" "post-relational"??
That's not what I call it. That is what the vendors of these databases call it. Because these databases are RDBMSs that support multi-valued relations as well as 1NF relationships.
Currently, the only database management system (although the current implementations are 100% it), based on a foundation of LOGIC is the RELATIONAL Database Management System.
Again, you should do some reading yourself. Multi-valued databases also support the same features as 1NF RDBMSes. If you want 1NF, by all means, you have it. But if you want multi-valued, you have it there, too.
Multi-valued is just another word for "eh well, put anything in it - I don't care".
Again, you're wrong. Multi-valued databases provide an easy-to-use mechanism to denormalize data when necessary. And though all of us would love to use 1NF 100% of the time, it simply is not reasonable if you have huge amounts of data that have to be repeatedly summarized, or sliced-and-diced.
Actually, multi-valued/post-relational databases have been doing this for many years now. Such database vendors are Pick Systems and IBM uniVerse (formerally Informix/VMark).
These databases are extremely fast, loosely typed, support many different table types, support SQL, support multi-valued (columns within columns) versions of SQL, fully ACID, have APIs written for every major language out there. All of these databases usually support two procedural languages underneath which are native to the database. One is called Access/TCL (Terminal Control Language). The other language is ordinarily a flavor of BASIC. The former language is extremely terse, much like RPG. While the latter is much more like writing a GW-BASIC program.
These databases have been around for decades now. They are running in huge environments, processing terabytes of information, have been tested and re-tested, and have been stable for decades.
As a chess player, I can say that this entire match is completely uninteresting to me. What does this prove?
Chess is a game without luck. Not unlike Tic-Tac-Toe. Chess is a game where the better player is measured solely based on their ability to see many permutations into the future and pick the best outcome. In chess, there is plotting and strategy involved, but if you are playing an opponent who can see further into the board than you can... then you will lose. There is no ENTROPY in chess at all. Which, computationally speaking, makes it about as impressive as Tic-Tac-Toe.
There is little doubt that computers will routinely beat the best grandmasters. Because computers take any and all skill out of the game... and reduce it to its most simple level -- seeing all the permutations.
This doesn't impress me at all. This impresses me about as much as a computer calculating huge prime numbers. The raw computing power is impressive, but the actual computing process itself is very unimpressive.
Seeing a computer beat a human at chess is about as impressive as seeing a computer calculate a series of numbers faster than a human. Very unimpressive.
When computers use REAL skill -- balancing luck/chance/entropy against strategy... then I will be impressed. I want to see a computer beat master poker players at the World Series of Poker. I want to see a computer beat a professional billiards players. I want to see see a computer win at games such as Bridge.
The fact of the matter is... when you introduce any kind of entropy into a game... the computer falls apart. Hell, even Deep Junior was flustered quite often when Kasparov would make totally retarded/unprofessional moves.
A lot of Kasparov's strategy was about introducing his own "entropy" into the game... i.e.... make moves that the computer wasn't programmed to expect he would make. Kasparov made some unbelievable moves with his pawn fronts that would have easily cost him the game to other human grandmasters.
Nothing impressive here. Next.
Just more retreading on the same tire...
on
Struts Kick Start
·
· Score: 2, Insightful
I have used Struts, and personally, I really don't see anything special about it. While I agree that having "scriptlets" in your HTML is generally bad form, I have similar problems with putting Java-centric tags in presentation code as well.
Struts, Java Server Faces, Servlets... All of these tools do not solve a real issue at hand, which is that when it comes to internet/HTML applications, the presentation layer should not tie you to any language, or to any language-specific framework.
I should be able to write a "View" that simply Looks at a standard XML-based model, and construct my page from that. Without having to put any kind of Java or Java-based tags in my code. XSLT comes far in doing that, but has a few shortcomings.
The missing piece is a standardized interface upon which posts/gets etc... can be performed without regard to the View, or to the language used in the application server. This interface should of course handle necessary things such as session management, authentication, and the like. This way, we could change out our underlying backend without having to change the presentation code at all.
This is where I give CORBA a lot of props. It definitely had some problems, but it was a wonderful intermediate interface that didn't care who its client was. As long as the client spoke IIOP... life was good.
The same should be done for web interfaces. The presentation layer should not care beans about the backend... expect that the container is aware of a common/neutral interface. No vendor specific tags. No language-specific tags. No proprietary garbage that ties you to any particular container.
XML, XSLT, XSD are great. Java is great. All these technologies are great. But the lack of a common interface/framework which seamlessly ties them together for web applications is the real problem.
if one would have the choice of birth control methods (and humans were certianly created/evolved/morphed with brains to make choice), then abstitence clearly has less of a failure rate and would be the better choice.
Likewise, I suppose that abstinence of gun usage is probably the best method of preventing gun fatalities. That is the logic you are using.
Condoms are for prevention of pregnancy and protection from STDs. Pure and simple. Not unlike a gardening glove. Not unlike the safety on a firearm. Not unlike a redundant power supply.
A condom is a safety device. It protects against things which can result from something that everyone does.
Saying a condom promoted sex is like saying that a safety promotes gun usage. It doesn't promote it. It just makes the act safer.
If people are going to do it anyway, then there is nothing wrong with people doing it safer.
Whoa, whoa! I disagree with each one of these. We are talking about J2SE 1.4, are we not? I'm quite happy with the collections framework (and I compare this to both stdc++ and the Smalltalk collections library), the java.nio.* package is very sophisticated, and IMHO the threading model is a matter of taste, not stemming from any particular technical disadvantage.
If you're quite happy with Java's collections framework, then you haven't worked with any kind of efficient data structures or understand how they work. I don't mean that as an insult. Only in recent times do I actually understand what data structures should be. Most people don't know. You should check out a few good libraries such as JGL. Again, if you think Java's collections libraries are such a dream, you haven't read the code or even understand what is going on. To even compare Java to a Smalltalk collections libraries or stdc++ is pretty shortsighted. Hell, Java doesn't even handle primitive data structures other than static arrays. Pretty weak if you ask me.
As for Java's non-blocking I/O... it is still far from what it needs to be. Although, it is far better than what used to exist... it is far from seamless and far from transparent. But, since Sun refuses to rewrite core I/O libraries, I guess the poor design has to continue.
And the threading model is not a matter of taste. The threading model absolutely sucks. Java has no real idea of thread priority. Notify/yield/wait is extremely unpredictable with no real guarantee as to what can happen when a thread is notified. Stopping threads is extremely cumbersome. Inter-thread communication is difficult. The list goes on and on.
I'm not going to go into more details except to say that you may feel that J2SE 1.4 is a gift to the masses, but in reality, there are core issues that still remained unsolved. Rather... new 'features' are still piled on top of the old crap. This makes things worse.
So I reiterate my prior point. My hope is that IBM or other groups, and continue to deliver extension libraries to Java that are better designed and better performing that Sun's core libraries. SWT is still immature, but as it stands now, it will definitely pass Swing as soon as it gets a few more complex widgets in the toolkit.
I do feel that with what IBM is doing, others will follow IBM's lead and develop other extension libraries that are better than the Java core itself. IBM has proved it can be done, and can be done without modifying the core.
>> SWT library already does include GUI >> widgets/toolkit.
I appreciate the comment, but I thought I'd point you to what I said...;-)
I predict that the SWT libraries will not only get quite expansive... but include things other than GUI widgets/toolkits
Basically, what I was saying is that SWT already has GUI/widgets (which you confirmed), but that it probably will be more expansive to include other classes which help GUIs perform better.. but aren't actually widgets. Such as better thread management. Better data structures/collections. Etc.
As someone who has written several Swing based applications, I can say that Java sorely needs this kind of a shot in the arm for the client-side to be even remotely feasible.
Up to this point, Sun has ignored the client-side, and rightly so. Because Microsoft and MFC rules on the client side (on Win32). Sun exploited the server-side breach that Microsoft had ignored.
But now, Java needs to become a viable alternative to C++ based programming on the client-side. And the only way this is going to happen is for Java to have some kind of a native GUI presence on each platform it runs on. This is where IBM and the SWT libraries come in.
Currently, the SWT libraries are still immature. The Eclipse platform itself is still immature. But they will get better and better. I predict that the SWT libraries will not only get quite expansive... but include things other than GUI widgets/toolkits.
If IBM plays their cards right (and so far they have)... I can see them actually introducing more Java extension libraries for other things that Sun did a terrible job on. Collections. Better native threading model. Better I/O model. The list goes on and on.
Personally, I would have no problem with writing a Java application that only imported IBM extension libraries. As long as they were well-written, and performed well.
Sun really needs to get on the ball here. The time has come to open-source Java. Let the developers do with the language what needs to be done to bring it to the next level.
Otherwise... companies like IBM are going to do it anyways. Just using extension libraries. If Microsoft was smart, they'd have done five years ago what IBM is doing now. Microsoft would own Java on the client-side if they would have played it right.
The underlying issue here is that a country should care for its people who are indigent, poverty-stricken, ill, weak, and downtrodden. Its a matter of humanity. Period. Forget everything else.
I can't believe I'm reading posts about flat taxes and people saying that they are fair. Does $6,000 mean more to a person making $30,000 a year versus $60,000 for someone making $300,000? OF COURSE. There's nothing "FAIR" (whatever that means) about a rich guy paying the same percentage as a poor guy. Whoever said that FAIR means that everything is equal all the time? That is totally moronic. Being humane and caring for the downtrodden isn't some magic EQUATION. It is a state of mind. An attitude. A principle.
I simply can't believe that people in the USA, my own country, are still fighting to see how we can take care of these issues without sacrificing anything out of our own lives.
I don't care how it gets done. Taxes. Charity. Donations. Faith-based organizations.
Get over your pocketbook and your ego and take care of your country for once.
Just FYI, this is a much heralded rumor, but isn't true :
o us .html
http://www.turing.org.uk/turing/scrapbook/wondr
A lot of thought went into the Apple logo and what it signified. The guys over at Apple were very fond of making statements with imagery, design, and color.
According to some popular theories, relating to the distrbution and formation of matter, there is actually strong scientific evidence that supports the notion of identical duplicates of ourselves existing two or three parallel universes away. More and more scientists are starting to accept the notion that we are not the only universe, but rather that we are one of infinite universes.
So, if identical living beings exist in other parallel universes, then it stands to reason that other living organisms exist in our own universe. We probably will never be able to reach other life forms within this universe, but it probably is there.
A few months ago in Scientific American, there was a fabulous article on parallel universes and the distribution of matter. It really is worth checking out.
Reading that article, it makes you feel good because you feel like you aren't alone. But on the other hand, it makes you feel smaller and more alone than ever.
The article was okay, I guess. Very, very elementary. I would assert that most schedulers are O(1), though. Its really nothing new. This article was probably good for someone who never heard of a scheduler or worked with one.
Although the article was about scheduling, I would have like to have seen some more text about Big-O notation and why it is important to programmers. To me, any good programmer should have a good concept of Big-O notation, how it relates to traversing data structures (such as trees), et cetera.
The article did not make a point as to why good schedulers use priority queues. Which is simple, really. All priority queues are O(1) for getting the next item in the queue. It has nothing to do with scheduling, but it is the nature of the priority queue itself... as a data structure.
I would have liked to have seen the article in its whole form. I wonder if it went into more depth about Big-O, et cetera.
> The popular vote isn't relevant, nor is this the first time such has happened.
Of course it isn't the first time that it has happened. I certainly didn't mean to apply that it was.
However, the popular vote is relevant. I'm not saying that this is how we choose our leaders. But, to the people (psychologically), the popular vote is very relevant. It simply does not feel right. Nor has it felt right any of the past times when it happened.
It just leaves a very bitter taste. Especially when combined with our voting system being in shambles. The 2000 election was just a really sad state of affairs on more than one front. And I think for the country to get past it, we're going to have to have someone who is non-Clinton or non-Bush in power.
I never have been for the war in Iraq. And that is my own opinion. I'm not anti-American, and I love my country. But in this case, I just don't love what my country did.
All of these disagreements aside, I really think that America has to heal soon. The issue with the "war" goes much deeper than just the "war" itself.
A lot of people simply hate Bush because of what happened in the 2000 elections. There was never a decisive victory (Bush had more electoral votes, Gore had the popular vote). And that simply was horrible to swallow... for myself included. There was absolutely no closure.
I have never seen the US more divided than it is right now. I will not vote for Bush in 2004 (nor would I vote for Gore if the situation presented itself). Simply for the reason that I think to vote for either person is bad for the country.
As long as Bush is in power, there will be a huge rift between people in the United States. We really need someone who is a uniter... someone who can help the nation get past what happened in 2000. It isn't Bush. It isn't Gore. It has to be someone who has nothing to do with any of those people.
I don't know who that person is... I wish I did. But Democrats and Republicans alike should be seeking to unite and heal this country again. I, for one, am tired of all the hate. This should be the number one priority of whatever leader we elect.
The fact of the matter is, Bush is pretty bad with it comes to diction and grammar. He is in a position where communicating effectively is of utmost importance.
You use the example of "human" being pronounced as "yooman". But this isn't even in the same ballpark. Bush pronouncing "nuclear" as "nookyoolar" is equivalent of someone pronouncing "human" as "hymen".
His mispronunciation of this word is not due to REGIONAL accent. I live in Texas, and I can tell you that 99.9% of the people I know don't pronounce it that way. Only intellectual morons pronounce it that way.
I have no problems with republicans praising the guy for the good things he does. But give me a break, already. Stop acting as if the guy isn't a linguistic idiot. You aren't convincing anyone.
I have the 1.1 beta, and they STILL have not fixed the bug where you cannot merge more than one page of labels at a time. I still have to go back to Microsoft Office for that. If that was fixed, I'd be free of MS Office once and for all.
After reading some of these proposed features, I have to question why people would not use one of the already engineered languages.
The great example is Eiffel. Eiffel basically has every thing that you could possibly want in an OO language. Its design by contract features are pretty much unsurpassed. Polymorphism. True covariance. The whole nine yards.
I have used C/C++/Java pretty much my entire career. But after dabbling in Eiffel, it opened my eyes that C++/C are not the end all be all of languages. In fact, it seems to me that C++ was striving to be more like languages such as Eiffel.
I guess old habits die hard... which is why we stick with C++, Java, and the like. It also stands to reason why we continue to try to enhance C++ into different, more robust forms (Objective, D, etc).
But after using Eiffel for a few years now, I can say that I think it is highly superior to C++ in so many ways. But the big lacking it has is in its libraries. Eiffel simply has nowhere near the library support of C++, Java, or Python.
Anyways... I'm rambling here... but I wanted to put a plug in for Eiffel. For those who want a taste of something different.
"You have to bluff," says Jonathan Schaeffer, who heads up the university's Games Research Group and who already has a world-champion checkers computer program under his belt. "If you do not bluff, you're predictable. If you're predictable, you can be exploited."
Poker is like chess, as many others have pointed out. A computer bluffing (randomly or not) would not help it against a world-class player.
Why? Because good players do not bluff at random. Good players will only bluff in situations where the other player has a history of taking the bait.
And the only way that a computer would have a chance to outbluff a human player would be if it was already programmed with the opponent's playing tendencies.
And even in that case, the opponent, knowing he is playing a computer, could just alter his bluffing and baiting strategy in some stupid fashion and still beat the computer. Kasparov has proved this time and time again by beating computer opponents by making totally idiotic and unorthodox moves, unnecessary sacrifices, ugly openings... against computers to throw them off. Those same moves would have been nails in the coffin against equally matched human players.
In games like poker, I don't think a computer will ever be able to beat a world-class player at his/her best.
One huge reason is bloat. Some applications have very robust messaging libraries/interfaces for third-party interoperability, but if you have to include tons of libraries and such... it makes you think twice. And that goes for any types of applications.
Though old, the "pipe 'ole ASCII" format is very lightweight. Very easy to write. Extremely fast. Less headache. And requires no library dependecies with the third party software you're trying to talk to.
Lots of people prefer this method as opposed to CORBA, JMS, IIOP, RMI, or any number of interoperability protocols out there. Which is apparrent because of the vast number of projects which still used piped-stream style ASCII communication.
Actually, that's not exactly what I was thinking about when I said "refactor". Renaming a class is really just doing a "Replace in files" for a simple regular expression. And then compiling to make sure you got everything. That's easy... in Eclipse or any other platform.
I was thinking more along the lines of other stuff that Eclipse does "quick-and-easy"... like pushing methods up/down. Or actually changing class structures. Changing widely-used method signatures. Stuff like that.
Some types of refactoring being difficult can be a good thing. Because it makes programmers think about different ways that they might accomplish the same thing... rather than just take the "quick-and-easy" way out.
Refactoring is always risky, and requires care and deliberance. Trusting your IDE to do these things for you might be pushing the envelope a little too far, I think. That's what I really meant.
It evades me why so many Java developers lean so much towards one single program to try to work effectively and solve all their problems. I often get people in my office saying, "How can you possibly work effectively using more than one tool?" It really amazes me. If you make some programmers use more than one tool, they simply fall apart. As if Visual Basic style programming is all they can do.
:
I cannot stand to have one tool that has everything built into it. I would much rather just combine two or three tools together and use them effectively. The idea of the fully-integrated development environment has never made sense nor appealed to me.
I have tried Eclipse repeatedly, and probably won't ever use it regularly. I think the project management is very cumbersome. And FORGET trying to use external VCS tools with Eclipse. Eclipse caches so much crap, that if anything VCS-related happens outside the environment, Eclipse goes nuts becuase it is out of sync. Not to mention that I have seen people get burned by Eclipse's dependency checker not actually compiling all the files. That's another problem. You can't compile _just one file_. It has to try to compile everything -- every time. And sometimes, that isn't what you want to do. And personally, I think the DIFF in Eclipse sucks. It has no colors whatsoever, so it is difficult to see what has changed. When diffing, it also does not ignore file changes that span across lines. So if you use a code formatter like Jalopy or Jindent, you get hosed if it formats long lines into multiple lines. These changes show up as differences -- when they really aren't. Eclipse does have some sweet features, but it really has some warts, too, IMHO.
If you are a programmer's programmer, and want a good, free IDE to use on Win32, I would highly recommend Gel. It isn't open-source, but it is freeware (the author will probably go commercial at some point). It is written in Delphi, so it is totally native. It is extremely fast and intuitive. Lightweight. It has the features you NEED. Not the kitchen sink. It doesn't do refactoring -- although some actually think refactoring by hand is better. Its VCS supports is really non-existent (although I use WinCVS -- so it doesn't matter).
It is a very solid Java IDE. I'll take it over Eclipse any day. I love having a native editor that only takes up 20 megs of RAM at the worst.
My regular Win32 working combo is
Gel - Java IDE
WinCVS/Command-line CVS - Source Control
GVim - General purpose text editing
Jikes - Compiler
JSwat - remote debugging (if I need it)
11 things developers can do
(not in any particular order)
1) Read "Code Complete" and "Design Patterns". Others will be thankful... trust me.
2) Have pride in what you do. Programming IS an art. It requires talent, practice, motiviation, inspiration, creativity, and experience to write good code. Know your craft.
3) Eliminate the KINGDOMS on your team. That is, one person should not solely own one part of the system... hence a "king". Make sure at least two people are knowledgeable about one part of a system.
4) Utilitize tried-and-true design patterns. These are your brushes and your paints.
5) Be politically aware in code reviews. Take constructive criticism constructively and remove your ego. If a reviewer is suggesting that you make a minor change, and the change doesn't harm anything... DO IT. Being inclusive of others' ideas in your code will make everyone happy.
6) When reviewing other people's code, don't be superficially critical. Programmers have different styles. A car, on the outside, may not appeal to you, but it doesn't mean that it isn't a well built/designed vehicle.
7) When designing (or refactoring) portions of code, have design reviews (informal or formal) with at least one other developer. Bounce all your ideas and thoughts. Get ideas and thoughts in return. Use your whiteboard for goodness sakes. That's what it is there for.
8) Praise other developers when they do well. Programmers need to know when they're doing good as well as bad. Programmers appreciate praise from other programmers more than they do from anyone else.
9) When you have to be critical of someone else's code, be constructive. Apply honesty with a feather... not with a sledge hammer. Instead of saying, "What the fuck??? You're not threadsafe and possibly creating multi-tons."... say... "Do you think that synchronizing this singleton might work here better... so we're threadsafe?"... for example.
10) Be consistent in your code. It makes your code more easily maintained by others.
11) Document. Please write comments. Don't be so egotistical to think that your code is self-documenting. Even in COBOL and Eiffel... the two most verbose languages on the planet... this isn't the case.
Its called The Market Economy and Capitalism. The whole US economy is built around the presumption that if you can increase supply by lowering costs then do it.
That is apples to oranges. What you are saying works in a closed system. And the system we are talking about isn't closed. The American job market being flooded with workers from other countries and from other economies.
Capital should under all economic doctrines be replaced by capital that is cheaper and can work more efficiently.
Very simplistic. But very wrong. Unless you favor slave labor and the total deregulation of the entire job industry.
In ANY system, a disruption within it will cause certain effects, some positive and some negative. The only question is HOW BIG is the disruption. The non-regulated inclusion of thousands upon thousands of H1B workers who are willing to work for slave wages (at least for techies) has seriously disrupted the economy.
This is exactly what the H1B workers do for the US economy, so as far as the government is concerned (especially our current administration) this is a fantastic thing.
No. The government would MUCH prefer that a programmer who is worth $80,000 a year... actually MAKE $80,000 a year. Because that means more taxes. What we've ended up with is a worker base that makes less money. That means less tax revenue. That means the government ISN'T happy.
Most states are having severe budget deficits because the tax (income and sales) collections were VERY adversely affected by all the unemployment. Especially in the big tech states.
This isn't how I personally feel (guess I'm not so right winged) but its how most business people feel that I have met over the last year or so.
These "business people" only hold these views until their own market is suffering the same thing. I used to hear "business people" who ran call centers say these things. Until lots of call centers went to India.
Now they think much differently.
Can you give answers to the following important (in my mind) statistics:
1) How many users will convert from Windows desktops to Linux desktops?
2) How many users will convert from Linux desktops to Windows desktops?
To me, these are that stats that really matter. How much market share is Linux taking away from Windows, and vice versa.
You meant to say "pre-relational." Pick and other multivalues databases have been around for a long time, sure. That makes them "pre-relational" because they predate the big shift to relational databases.
No. I mean to say "post-relational". Because they support 1NF as well as multi-valued relationships. Which means that they handle more than 1NF.
The very concept of multivalued columns is a violation of 1st normal form, though, so they are not on a sound theoretical foundation the way RDBMSs are.
Multi-valued databases support 1NF as well as multi-valued relationships. If someone wants 1NF, they can use a multi-valued database for that. MV databases have full integrity constraint support, PK columns, the whole nine. They are there for the taking.
Where MV databases shine is in the denormalization of data. 1NF by itself simply doesn't cut it (performance-wise) for these kinds of functions. Which is why Pick-based/MV databases are used by huge financial institutions and ERP vendors.
What amazes me is that a lot of people think Oracle is actually the first one to tackle this problem with their materialized views and such. Some think star schemas were first to deal with data crunching, et al.
MV databases have been doing this for decades. And still today, they do it faster than any of these databases do it.
You are calling "multi-valued" "post-relational"??
That's not what I call it. That is what the vendors of these databases call it. Because these databases are RDBMSs that support multi-valued relations as well as 1NF relationships.
Currently, the only database management system (although the current implementations are 100% it), based on a foundation of LOGIC is the RELATIONAL Database Management System.
Again, you should do some reading yourself. Multi-valued databases also support the same features as 1NF RDBMSes. If you want 1NF, by all means, you have it. But if you want multi-valued, you have it there, too.
Multi-valued is just another word for "eh well, put anything in it - I don't care".
Again, you're wrong. Multi-valued databases provide an easy-to-use mechanism to denormalize data when necessary. And though all of us would love to use 1NF 100% of the time, it simply is not reasonable if you have huge amounts of data that have to be repeatedly summarized, or sliced-and-diced.
Learn before you speak, at least.
Actually, multi-valued/post-relational databases have been doing this for many years now. Such database vendors are Pick Systems and IBM uniVerse (formerally Informix/VMark).
These databases are extremely fast, loosely typed, support many different table types, support SQL, support multi-valued (columns within columns) versions of SQL, fully ACID, have APIs written for every major language out there. All of these databases usually support two procedural languages underneath which are native to the database. One is called Access/TCL (Terminal Control Language). The other language is ordinarily a flavor of BASIC. The former language is extremely terse, much like RPG. While the latter is much more like writing a GW-BASIC program.
These databases have been around for decades now. They are running in huge environments, processing terabytes of information, have been tested and re-tested, and have been stable for decades.
Check them out if you are interested.
As a chess player, I can say that this entire match is completely uninteresting to me. What does this prove?
Chess is a game without luck. Not unlike Tic-Tac-Toe. Chess is a game where the better player is measured solely based on their ability to see many permutations into the future and pick the best outcome. In chess, there is plotting and strategy involved, but if you are playing an opponent who can see further into the board than you can... then you will lose. There is no ENTROPY in chess at all. Which, computationally speaking, makes it about as impressive as Tic-Tac-Toe.
There is little doubt that computers will routinely beat the best grandmasters. Because computers take any and all skill out of the game... and reduce it to its most simple level -- seeing all the permutations.
This doesn't impress me at all. This impresses me about as much as a computer calculating huge prime numbers. The raw computing power is impressive, but the actual computing process itself is very unimpressive.
Seeing a computer beat a human at chess is about as impressive as seeing a computer calculate a series of numbers faster than a human. Very unimpressive.
When computers use REAL skill -- balancing luck/chance/entropy against strategy... then I will be impressed. I want to see a computer beat master poker players at the World Series of Poker. I want to see a computer beat a professional billiards players. I want to see see a computer win at games such as Bridge.
The fact of the matter is... when you introduce any kind of entropy into a game... the computer falls apart. Hell, even Deep Junior was flustered quite often when Kasparov would make totally retarded/unprofessional moves.
A lot of Kasparov's strategy was about introducing his own "entropy" into the game... i.e.... make moves that the computer wasn't programmed to expect he would make. Kasparov made some unbelievable moves with his pawn fronts that would have easily cost him the game to other human grandmasters.
Nothing impressive here. Next.
I have used Struts, and personally, I really don't see anything special about it. While I agree that having "scriptlets" in your HTML is generally bad form, I have similar problems with putting Java-centric tags in presentation code as well.
Struts, Java Server Faces, Servlets... All of these tools do not solve a real issue at hand, which is that when it comes to internet/HTML applications, the presentation layer should not tie you to any language, or to any language-specific framework.
I should be able to write a "View" that simply Looks at a standard XML-based model, and construct my page from that. Without having to put any kind of Java or Java-based tags in my code. XSLT comes far in doing that, but has a few shortcomings.
The missing piece is a standardized interface upon which posts/gets etc... can be performed without regard to the View, or to the language used in the application server. This interface should of course handle necessary things such as session management, authentication, and the like. This way, we could change out our underlying backend without having to change the presentation code at all.
This is where I give CORBA a lot of props. It definitely had some problems, but it was a wonderful intermediate interface that didn't care who its client was. As long as the client spoke IIOP... life was good.
The same should be done for web interfaces. The presentation layer should not care beans about the backend... expect that the container is aware of a common/neutral interface. No vendor specific tags. No language-specific tags. No proprietary garbage that ties you to any particular container.
XML, XSLT, XSD are great. Java is great. All these technologies are great. But the lack of a common interface/framework which seamlessly ties them together for web applications is the real problem.
if one would have the choice of birth control methods (and humans were certianly created/evolved/morphed with brains to make choice), then abstitence clearly has less of a failure rate and would be the better choice.
Likewise, I suppose that abstinence of gun usage is probably the best method of preventing gun fatalities. That is the logic you are using.
Condoms are for prevention of pregnancy and protection from STDs. Pure and simple. Not unlike a gardening glove. Not unlike the safety on a firearm. Not unlike a redundant power supply.
A condom is a safety device. It protects against things which can result from something that everyone does.
Saying a condom promoted sex is like saying that a safety promotes gun usage. It doesn't promote it. It just makes the act safer.
If people are going to do it anyway, then there is nothing wrong with people doing it safer.
Whoa, whoa! I disagree with each one of these. We are talking about J2SE 1.4, are we not? I'm quite happy with the collections framework (and I compare this to both stdc++ and the Smalltalk collections library), the java.nio.* package is very sophisticated, and IMHO the threading model is a matter of taste, not stemming from any particular technical disadvantage.
If you're quite happy with Java's collections framework, then you haven't worked with any kind of efficient data structures or understand how they work. I don't mean that as an insult. Only in recent times do I actually understand what data structures should be. Most people don't know. You should check out a few good libraries such as JGL. Again, if you think Java's collections libraries are such a dream, you haven't read the code or even understand what is going on. To even compare Java to a Smalltalk collections libraries or stdc++ is pretty shortsighted. Hell, Java doesn't even handle primitive data structures other than static arrays. Pretty weak if you ask me.
As for Java's non-blocking I/O... it is still far from what it needs to be. Although, it is far better than what used to exist... it is far from seamless and far from transparent. But, since Sun refuses to rewrite core I/O libraries, I guess the poor design has to continue.
And the threading model is not a matter of taste. The threading model absolutely sucks. Java has no real idea of thread priority. Notify/yield/wait is extremely unpredictable with no real guarantee as to what can happen when a thread is notified. Stopping threads is extremely cumbersome. Inter-thread communication is difficult. The list goes on and on.
I'm not going to go into more details except to say that you may feel that J2SE 1.4 is a gift to the masses, but in reality, there are core issues that still remained unsolved. Rather... new 'features' are still piled on top of the old crap. This makes things worse.
So I reiterate my prior point. My hope is that IBM or other groups, and continue to deliver extension libraries to Java that are better designed and better performing that Sun's core libraries. SWT is still immature, but as it stands now, it will definitely pass Swing as soon as it gets a few more complex widgets in the toolkit.
I do feel that with what IBM is doing, others will follow IBM's lead and develop other extension libraries that are better than the Java core itself. IBM has proved it can be done, and can be done without modifying the core.
>> SWT library already does include GUI
;-)
>> widgets/toolkit.
I appreciate the comment, but I thought I'd point you to what I said...
I predict that the SWT libraries will not only get quite expansive... but include things other than GUI widgets/toolkits
Basically, what I was saying is that SWT already has GUI/widgets (which you confirmed), but that it probably will be more expansive to include other classes which help GUIs perform better.. but aren't actually widgets. Such as better thread management. Better data structures/collections. Etc.
That's what I was actually saying.
As someone who has written several Swing based applications, I can say that Java sorely needs this kind of a shot in the arm for the client-side to be even remotely feasible.
Up to this point, Sun has ignored the client-side, and rightly so. Because Microsoft and MFC rules on the client side (on Win32). Sun exploited the server-side breach that Microsoft had ignored.
But now, Java needs to become a viable alternative to C++ based programming on the client-side. And the only way this is going to happen is for Java to have some kind of a native GUI presence on each platform it runs on. This is where IBM and the SWT libraries come in.
Currently, the SWT libraries are still immature. The Eclipse platform itself is still immature. But they will get better and better. I predict that the SWT libraries will not only get quite expansive... but include things other than GUI widgets/toolkits.
If IBM plays their cards right (and so far they have)... I can see them actually introducing more Java extension libraries for other things that Sun did a terrible job on. Collections. Better native threading model. Better I/O model. The list goes on and on.
Personally, I would have no problem with writing a Java application that only imported IBM extension libraries. As long as they were well-written, and performed well.
Sun really needs to get on the ball here. The time has come to open-source Java. Let the developers do with the language what needs to be done to bring it to the next level.
Otherwise... companies like IBM are going to do it anyways. Just using extension libraries. If Microsoft was smart, they'd have done five years ago what IBM is doing now. Microsoft would own Java on the client-side if they would have played it right.