Russell

Members
  • Content count

    1380
  • Joined

  • Last visited

Community Reputation

118 Neutral

About Russell

  • Rank
    Contributor
  1. Find the next number

    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24... wtf, I have no life...
  2. Poll: Are men and women different?

    I am man. I eat meat and fart. RAWWWR!!!! Women are same.
  3. I saw that Trolltech is going to make the next version of Qt available for Windows open source development, for free. Previously the open source version was only available for Linux, Unix, and MacOS X. To use it with Windows you had to buy a commercial license (not cheap). It will be released under the GPL. So this is great news, I think. Then I read this. Qt/Windows Dual License FAQ Quote:Can I now use Qt for free everywhere? No, this is not the case. You can use Qt for free only if you are writing Open Source software following the obligations of the GPL license. You will then need to publish the source code of your software for free, unlimited re-use and re-distribution by anyone for any purpose. If you, for any reason, should be unable or unwilling to do this, you need to buy a commercial license. So here's my question. If I write some open source program using Qt, and years from now I stop development and either have no means or desire to continue publishing the source code, I have to purchase a commercial license? I know there are sites like Sourceforge where I could probably park the source code for the rest of my life, so practically it shouldn't be a problem, but I think it's silly to have to worry about that the rest of my life for some hobby project.
  4. Gadget<char, Foo>::Fun() could mean either the generic or the specialized version, as opposed to Widget<char>::Fun() which clearly means the specialized version. So the reason why this technique does not scale for member functions is ambiguity. However, you can partially specialize classes, but you have to implement the whole class. Is this all correct? Maybe I need to reread the section on templates in The C++ Programming Language [smile]
  5. double faster than float

    In my chess program I switched from a 32-bit node counter (which would overflow sometimes) to a 64-bit counter. The version with the 64-bit counter ran slightly faster (on a 32-bit machine). It was reproducable, and I have had one other author of a different chess program tell me he had the exact same thing happen, also reproducable. Niether of us could figure out why. There are many hardware factors with cache, cache invalidation, alignment, branch prediction, and so on. There are also compiler factors. Any or all of those could combine for a huge number of reasons why my program ran 2% faster when logic suggested it should be slightly slower.
  6. In Modern C++ Design it gives one of the drawbacks of templates in section 1.4: Quote:Specialization of member functions does not scale. You can specialize any member function of a template with one template parameter, but you cannot specialize individual member functions for templates with multiple template parameters. For example: template <class T> class Widget { void Fun () { /* generic implementation */ } }; // OK: specialization of a member function of Widget template <> Widget<char>::Fun () { // special implementation } template <class T, class U> class Gadget { void Fun () { /* generic impementation */ } }; // Error! Cannot partially specialize a member class of Gadget template <class U> void Gadget<char, U>::Fun () { // special implementation }; I have not used template specialization very much, and I don't understand his point or his example. Is he saying it is not possible to use template specialization in this way, or is he saying it doens't solve any of the design problems he's trying to solve? Clarification would be appreciated.
  7. Obstacles to Linux game development

    Quote:Original post by C-Junkie Quote:Original post by stimarco Fuck Linux. Fuck Windows. They'll be dead and forgotten long before most of you are.I'm actually quite skeptical of this. Can you think of a reason linux would ever die? It's perfectly capable of evolving into anything it needs to be.I agree completely. Unix will be around in some form (Linux, BSD, or something else) way longer than Windows, Microsoft, or any of us. Why? The same reason that the main world religions will still be around well after all of us are gone. It only takes one special person from each generation to keep it going, and that one special person always seems to have a knack for recruiting a global army of volunteers. There will always be another Stallman or Torvalds to lead the charge. Unix is now its own organism with seperate cells capable of operating independently, indefinitely. Major world religions are the same way. The internet is the same way. Imagine how difficult it would be to destroy a major religion. Even if you could accomplish some unimaginably difficult feat like destroying every copy of the bible in existence (hard copy, digital copy, etc.), you would still have to destroy every person who knows portions of it (or all of it) by heart. So even if a situation like SCO-vs-Linux destroyed Linux, it doesn't matter. Too many people "know Linux by heart". It could easily be recreated from scratch and given a new name. Look at BeOS, which was financially driven. The money ran out. It died. It was buried. It rose again. Now there are multiple efforts to recreate it from scratch. Now imagine how Unix, which is not financially driven, and has more staying power than BeOS ever did, could die. If it could happen, I think it would have to just fizzle out over many decades or centuries, or we would evolve to a technological state where computers or operating systems are no longer needed or used, or the earth would have to spontaneously explode or something.
  8. URGENT : __forceinline

    Quote:Original post by ziruz it is like this because other wise the compiler can't insert the code at compile-time... Not true. The Intel and Microsoft compilers can inline from a source file, if you enable such optimizations. Also, __forceinline does not guarentee that a function will be inlined.
  9. Using AI to rank players

    Quote:Original post by Melaskia While this system will not be perfect, i would like to see for example that two players with the same score have 50% chance to win. Sounds like the ELO rating system to me.
  10. Solaris Dev Tools...

    Quote:Original post by Telamon They say Stanford is a top university for CS, but the facilities here really don't bear that out. The main student developement machines run _Solaris_. That's right. Ugh. I'm writing some pretty complicated programs for my graduate AI class and writing code in emacs is driving me crazy - I usually write code with Visual Studio in Windows. Typing code into a text editor, hand-editting makefiles, and using the godawful ddd debugger makes me feel like I'm back in the 1980s. What kinds of tools do professional Unix developers use? Are there any that look and act just like Visual Studio? I'm going crazy... Do you also still ride a bicycle with training wheels? And do you then mock Lance Armstrong because he doesn't use training wheels? No? Then why do you rely on your crutch in Visual Studio? And why do you mock Solaris? Any computer geek in 6th grade can operate Visual Studio perfectly. Solaris is possibly the most stable and solid operating system in the world. Someone at Stanford is doing you a great favor in forcing you to learn new development tools. To me it sounds like you are so far behind that you actually think you're ahead. My only hope is that you aren't really a CS major, and that you are somehow taking this AI class in the CS department as a part of your MIS degree or something. I find it difficult to believe that at a school like Stanford a CS major can make it to graduate work and not be comfortable developing in unix. Or (hopefully) that you're just venting :-)
  11. "ls" doesn't show anything anymore.

    At least you didn't replace ls with rm...
  12. Timkin, I think the disagreements here are a result of different goals from this experiment. You, and other academic types, are interested in finding a better strategy in terms of game theory, while others are more interested in finding an optimal strategy for the real world. For instance, consider a drug lord that could work to gain a ruthless reputation, and then he could be reasonably sure that the other prisoner would choose to spend more time in jail than to rat him out, because being such a ruthless person the drug lord will surely have this other prisoner tortured and killed, then kill his entire family. Then the optimal strategy extends beyond the walls of the jail house. But you are interested in something different, and "playing by the rules" can mean different things depending upon the situation.
  13. minmax memory optimizations?

    In code I've seen, people don't typically make a copy of the board (although it isn't usually a big issue for games like chess, a minor linear slowdown in an exponential problem). Typically people make a stack (usually a simple C array) of only the info that needs to be backed up (or info which is more efficient to backup). For instance, in chess you can bidirectionally incrementally update the side to move (it doesn't need to be backed up). The color is just toggled back and forth, white, black, white, black, irregardless of whether you are making or retracting a move. The castling rights, on the other hand, must be backed up. You can't incrementally recompute the previous castling rights when undoing a move, so it has to be backed up. There are lots of algorithms which are used for searching game trees, but the most popular ones fall into a small number of categories (and pretty much everything is just an optimization on minimax, depth first search). You have basic minimax (or negamax, same thing), which will search (for a uniform tree) B^D nodes where B is the branching factor (number of legal moves per node), and D is the search depth. Then you have alpha-beta which is equivalent to minimax in that it provably produces the same score as minimax, but will only search between B^D nodes (worst case, same as minimax) and sqrt(B^D) nodes, depending upon how well the moves are ordered at each node (i.e. it is much more efficient if you have a "good guess" handy). After this, it is mostly variations on the theme of minimal-window alpha-beta searching, which include principle-variation-search (PVS) and negascout (which, for practical purposes is the same thing as PVS), and Memory-enhanced-Test-Driver (MTD) based algorithms like MTD(f). These algorithms (PVS, negascout, MTD(f)) typically provide some small linear improvement above alpha-beta (~10-20%). Other methods are out there, such as best-first algorithms like SSS* and B*. Unfortunately, the drawback of breadth-first/best-first tree search algorithms is that you need an infinite amount of memory for them to work in practical situations. Interestingly enough, SSS* and B* can be implemented as a form of MTD search. The last few algorithms are kind of special case algorithms, not generalized game playing algorithms like the rest. In this category we have conspiracy number search family, and the proof number search family. They can be used in some situations to find quick results, such as finding very deep forced checkmates in chess in very few nodes, or to get a sort of pseudo-confidence level for how sure you can be about a "good guess" that you have. And of course, depending upon the game, there are a multitude of enhancements to any of these algorithms. For instance, in go they use a lot more of things like ANNs, GAs, and so on, while in games like checkers or chess the brute force tree search approach has yet to meet a serious rival. I'm not sure I would call something like prob-cut or multi-prob-cut an algorithm per se. It is really a heuristic method of forward pruning the search tree (i.e. theoretically unsound, unstable). The difference is that an algorithm like alpha-beta does backward pruning, i.e. it only prunes sub-trees that is has proven to be irrelevant to the final result of the search. BTW, are you able to share with us what game you are working on? I can't think of many where having to copy the board state when making/undoing moves would "slaughter performance". You could be playing go on a 1000x1000 board, but then copying that board around is the least of your worries since your branching factor is one million :-)
  14. Obstacles to Linux game development

    1. Linux, following in the Unix tradition, was written for knowledgeable, responsible users. Linux obviously does a much better job of trying to be user friendly, but it is still not quite as simple as using a machine running Windows XP (which came pre-installed from Dell, of course). 2. Society believes that if something sounds too good to be true, then it is. Unfortunately they have good reason to think this. Watch the evening news on any given night and there is bound to be a story about some scam artist ripping people off. 3. Last year during the holiday visits to see my grandparents, aunts, and uncles, I remember them all sitting around talking about which diets they were on. One was on the Atkins diet, another on the South Beach diet, and another on the Sugar Busters diet. None of them had lost much weight, and they all said they generally felt horrible. They looked at my uncle and said, "You've lost weight. What diet are you on?" He replied, "I'm on the eat less diet, with exercise. I feel great." The point is, people are lazy. There is a simple, straightforward solution for losing weight starring us all right in the face and we go to monumental efforts to avoid the simple solution. When it comes to feeding the family, many people find that it's easier for them to pay more money and go to McDonalds instead of take a little extra time and make something considerably more healthy. All of this basically holds true for this situation. Most people already have a Windows machine. It's easier for them to drive to the computer store and buy Visual C++, install, and start coding. If it crashes, no problem, just reboot. Even if by some chance they were made aware of gcc, it sounds too good to be true. "If the free one is just as good as this one, why does this one cost hundreds of dollars? Wouldn't everyone just use the free one? What if the free one is a virus like I read about in the newspaper? It might take over my computer and steal my retirement fund!" Well, in this age of people running scams, can you blame them for thinking this? Even if someone concedes that Linux/gcc/KDevelop/etc. is superior (considering the cost compared to commercial alternatives), they are willing to pay for convenience. Even if they go so far as to try it, they will quit the first time they run into something they aren't familiar with. "It wants to know how big the partition should be for /usr/var/log... What is a partition? And what is /usr/var/log?" - "This gcc thing won't compile my code. It compiled fine in Windows..." - "KDevelop keeps crashing and it says something about missing a KDE library. Hmmm, I never had this problem in Windows..." Unfortunately rebooting isn't going to fix this crashing problem. Even if they are still giving it a try, just wait until they post a question and someone tells them to "RTFM!" Currently, Linux just isn't for everyone. I think this story is humorous, but true: MGBs, TANKS, AND BATMOBILES
  15. free chess ai?

    Add support for the UCI protocol or the Winboard protocol and you can use any one of the hundreds of free Winboard and UCI chess engines as your AI. There are a number of very strong ones. Ruffian 1.05 (about the same strength as the commercial version of Ruffian, supports Winboard and UCI), and Pro Deo (a.k.a. Rebel, the author decided to make it available for free). Aristarch and List are two more that are very strong. There are also commercial engines supporting UCI and Winboard such as Shredder and The King (the engine in ChessMaster). Here is a list of ratings for almost 200 Winboard and UCI engines. Here is a list of over 270 Winboard and UCI engines. Go here and click on the "Downloads" or "Info pages" drop down list box to download any of them.