These are both good things. All the examples I have seen for.NET use the same ol' synchronous reekage that has been going on forever. But perhaps people just haven't tapped its full potential yet.
Of course neither of these observations helps Linux if they use CORBA:(.
Work on the reading comprehension. I never advocated using SOAP or any other form of RPC. I wasn't actually considering clustering as the intended application per se, but it doesn't matter, the point is I advocate using sane, asynchronous interfaces when communicating over a network. ANY form of RPC, be it CORBA/DCOM/whatever, does not qualify as either of these.
And yes, I do advocate creating sockets (unless you know a better way to do network I/O from userspace:-D), but you can wrap the raw socket interfaces in any way you wish, and likewise with data marshalling. Just don't wrap them in a poor way like CORBA does, otherwise Linux will be hanging by Microsoft's coattails forever.
I find the GNOME mindset of copying Microsoft blindly to be somewhat bothersome. I understand the mindset of wanting to re-implement everything MS does (the "me too" syndrome), but oftentimes it seems like they don't consider whether Microsoft is doing things the right way.
Take.NET for example. One of the things it hinges on is SOAP/DCOM, which is essentially XML-based RPC. Now some in the open source community look at this and say "Hey! We can do that too! We have XML support! We have CORBA!", but I see this as a rash move. Without launching into a discussion of XML (which deserves its own rant), consider that RPC implementations are really a poor approach to network-based applications. To a newbie, RPC looks really cool, and it is in some ways a pretty neat-looking trick; just make method calls to another machine instead of your own! In practice however there is no golden rule stating that RPC, at least in current implementations, is the best way to write distributed applications.
A local method call and a network transaction are different things and should be treated as such. When you try to transparently layer one over the other, you end up blocking, which is a great way to write poor applications which use too many threads and end up tied in resource conflicts and deadlocks. Even if you can solve the non-trivial problem of synchronization, who wants all our apps spawning 2-3 threads to do trivial network operations? Isn't it the Linux community always complaining about bloat? The more you fill up your process table, the more your machine slows down.
Likewise, where is the error handling? If a CORBA routine returns failure, how can you be sure that the operation did not actually complete successfully on the receiving machine but that it failed to notify the caller due to network problems?
So anyway, I am all for Ximian et. al. providing an alternative to.NET, but I would prefer that they did it the right way, with actual network protocols which have actual asynchronous non-blocking interfaces.
I had actually heard from a friend that no one could understand this movie without reading the book first. Don't think I am some book-hating bigot, although 2001 isn't the typical thing I read in my spare time. For example I read Contact before it was made into a movie, and I enjoyed is a lot -- but on the other hand I thought the movie portrayed it pretty effectively too. Kubrick obviously failed to do this. Whether or not that was "impossible" is open for debate. But regardless the point I was making is that the movie is really kind of crappy. The pace is ridiculously slow, with a lot of repetition and really long boring space scenes. While I'm sure the effects (look! people sitting upside-down!) were spectacular in their day, to a contemporary viewer such as myself they register as a big fat so-what.
Likewise with the score...gee...Blue Danube...never heard that before...thanks for playing it throughout the entire freaking movie.
I'm sorry but I don't see anything redeeming about the color scene. As another poster suggests perhaps a healthy dose of LSD is required to appreciate it?
Anyway, nothing on the book, and nothing on Kubrick, but I don't see what all the fuss is about regarding the film.
-W.W.
Please give me one technical reason why file transfer via ftp is more efficient than file transfer over http. I'll give you a hint: it isn't. In fact, if you are opening multiple connections with ftp, then it is monstrously more inefficient. There is no magic that ftp is working in order to transfer files better over TCP. FTP is a terrible, deprecated protocol, which should never be used ever. DIE FTP DIE DIE. Thank you.
OK, this is a very funny link, but I do take issue with a few things:
#33 - I loved masters of the universe when I was a kid. I had all the action figures. Maybe he's right and in reality the movie did suck, but I don't appreciate my childish fantasy world being broken.
#32 - Yes, this movie sucked, but I think the reviewer missed the point with the "trapped in a world he never made" tagline. This is a direct quote from the "Howard the Duck" comic book, which is nothing less than one of the most brilliant humor books ever published. The "real" comic book howard was witty, satirical, biting, and nothing at all like the horrible mis-representation that is his movie version. The tagline is not intended to make sense.
#24 - This is actually one of my favorite movies. It was way underrated when it came out, but its actually an incredibly funny comedy which is also somewhat touching. Al Franken is great as Stuart (I love his work in general), and the scenes with his family being dysfunctional are really rolling-in-the-ailes quality. I don't see what he has against this movie. Am I crazy here? Does anyone agree with me?
#20 - Wow. Is this a joke? I have never, ever heard of anything like this before. A live action Garbage Pail Kids movie. I'm really glad I never watched this.
#3 - Sidekicks. How could this not be #1?
There you have my rantings. Take them for what they're worth. Keep in mind its 3am.'
A long, long time ago, in a university far, far away, I wrote my own GTK-C++ wrapper, titled "ObjGTK+", for many of the same reasons Guillaume mentions. The goal of my framework was to be extremely clear and concise, be well documented, and in general be focused towards making the developer feel happy, which I felt Gtk-- was not. As an example, here's "Hello, World" in ObjGTK+:
#include <objgtk.h>
class MainWin : public Window
{
public:
MainWin();
gint OnDeleteEvent(void);
void OnHelloButtonClicked(void);
int main(int argc, char *argv[])
{
OG_Init(&argc, &argv);
MainWin *mainwin = new MainWin;
mainwin->Show();
OG_Main();
return(0);
}
Anyway, as soon as this got on Freshmeat, I received some responses (a first!), some encouraging (including some w/ patches, etc.), and one from Karl admonishing me for duplicating his work and urging me to give up ObjGTK and join the Gtk-- project. Now, Karl was very courteous and he did have some points -- a lot of my complaints were really stylistic issues which could presumably be fixed, and Gtk-- had some features which I could not easily duplicate (at the time they were starting to adopt libsigc++, which Guillaume apparently thinks is badly written, but regardless was a very useful idea which worked perfectly in this context. They also had the aforementioned stack-heap duality, whereas all my widgets were on the heap. The implementation of this was so awful I can barely describe it, let alone duplicate it). ObjGTK, although it was fully documented and somewhat useful, was incomplete (hey, I had only been working on it for two weeks), and Gtk-- had classes for almost every GTK+ type and then some. And so after a few such e-mails, I removed ObjGTK from the net and subscribed to the Gtk-- mailing list.
At this point my C++-wrapper development in Linux was pretty much over. I observed the mailing list for a couple of weeks, decided that the first thing I wanted to do was work on the documentation (at this point Gtk-- had no reference documentation and a couple of short programs acting as a tutorial), and quickly foundered. The source was very hard to work through. The headers seemed to be in three places at once, and the methods themselves were sometimes designed so circumlocutiously that it was almost impossible to tell what they did. It was hard to separate the "real" code which I was supposed to be writing from the code which was auto-generated from the GTK+ header files. And, my naive intentions of "fixing" the style issues were undoable; Gtk--'s conventions were simply too deeply rooted and too at-odds with my "simple"
style of programming.
My last run-in with Linux GUI programming was when I had the urge to continue working with an old program which had a GUI interface. I had originally written it in GTK+, then ported it to ObjGTK+ as a test of the latter's capabilities. Now since ObjGTK was dead, I figured the next logical step would be to re-write it in Gtk--. I downloaded the latest libsigc++ and libgtkmm, and got cracking. The first thing I started to write was the toolbar code. I scanned the Gtk-- documentation, found some methods which seemed appropriate, and started writing. It didn't compile because the methods didn't seem to exist. Flummoxed, I sent a message to the Gtk-- mailing list, and recieved a reply from Karl stating that yes, those methods didn't exist anymore, and giving me an example of the "better" way to write toolbar code, which was basically about 50 lines of horrible template code (in contrast to 40 or so lines of GTK+ code, or 20 of ObjGTK).
That was the last straw for me...not because of the bad documentation or the weird style standards, but because of how much this situation reminded me of the chapter in the "UNIX Hater's Handbook" where the UNIX style (make it easy to program) was contrasted with the Lisp style (make it easy to use). In my mind, Karl had become too obsessed with keeping to his academic theoretical perfection, and had disregarded the thing which make an API worthwhile, namely usability.
Looking back I suppose one could see Gtk-- as a shame, a deplorable situation that should never have happened. Personally, I disagree. When I worked with QT, I found it easy to use but I thought their pre-processor approach was terrible. Libsigc++ was a much more elegant solution to the problem which we have Karl to thank for. Likewise, I heavily disagree with another poster here who claimed that pointers are better than references. Pointers create unsafe interfaces, whereas with a reference you are always guaranteed to be passing an object which actually exists. ObjGTK+ used pointers exclusively, and if I re-did it today I would definitely change that.
I look forward to working with Inti; from the descriptions I've read it sounds like a good balance. I'm glad that it's there now since I no longer have the kind of free time I had in college to work on Open Source projects. Maybe soon I'll reorganize my schedule, subscribe to the Inti mailing list and start pestering them with stylistic issues:-).
Uhh...competition? The Microsoft optical mice SUCK. If you move them too fast (such as doing a quick 180-then back in counter-strike) they will go insane and start flying the cursor around the screen. This basically makes them useless for gaming. I had one for a day before I returned it. Most likely Apple's new mouse will be just as useless.
1. Edit/etc/inetd.conf and comment out everything you don't use. This should be pretty much everything, especially rsh, telnet and ftp (of course, some people do use ftp, but at least uninstall anonymous ftp support if you do). If you need telnet-like access to your machine, install ssh. A web server is generally OK, but be careful when writing CGI scripts.
2. Likewise, go into/etc/rc.d and get rid of all the crap you don't need. You don't need rpc.statd if you're not using NFS, and you don't need sendmail running all the time unless your machine is going to be an smtp server. If you don't know what a particular service does, ask someone.
3. Make sure every user on the machine (especially root) has a "strong" password, i.e. not a dictionary word, and with strange combinations of alphanumerics. If you don't know if your password is good, download a password cracker and crack your own passwd file. Of course, your passwd file shouldn't have any passwords in it, since you should really be using shadow passwords. This is the default on most distributions now, but if you don't have an/etc/shadow, you need to enable them fast.
4. Go to your distributions' security updates site daily and check for new updates. If you find any for packages you have installed, install them. Likewise, read securityfocus.com and other sites like it (or just subscribe to bugtraq) on a daily basis, and if you find you have a vulnerability which your distrtibution is not patching, download a new version for yourself and compile it from the sources.
5. Harden your general permissions and so forth. A good script to do this in my opinion is sherpa (http://rcrelia.hypermart.net/sherpa/) which will also convert your passwd file to shadow if needs be. In general most distributions install way too much software by default. You could probably improve your security greatly just by going through the package list, reading the descriptions, and getting rid of anything which you don't use, especially if it deals with the network or is setuid.
If you want to be really ridiculously paranoid, there are other things you can do as well, such as installing an IDS like tripwire or snort. In general however, the steps above when done properly will keep out 99% of the script kiddies who are most likely using their l33t portscanners to check your subnet for the "cool exploit of the week." If a security professional is really, really determined to get into your machine, then you may not be able to stop him given enough time. But as long as your name doesn't end with "himomura" this shouldn't be a problem.
Eiffel is just not expressive enough to be used as a real language. One looping construct? Bleh. It may seem like nitpicking, but having ugly code (with bad CAPS USAGE and END statements), and very rigid syntax are valid reasons to avoid a language. Hell, I'll be the first one to admit that Lisp has frustrating syntax for a beginner, but Lisp also has features which most other languages cannot duplicate. Eiffel is just another imperative language clone, reminicient of C, C++, Object-Pascal, Java, Smalltalk, Ada, Algol, FORTH, etc. etc. etc. Whoopie.
Eiffel devotees have always scratched their head at C++ programmers, who were for a long time working with an "inferior" language (before C++ had templates, exceptions, etc.), but what they failed to realize was that people could develop programs QUICKLY in C++, whereas writing Eiffel code is like repeatedly banging your head against a wall.
First of all, there is nothing new here. C# doesn't bring anything to the language table which hasn't been done many times before. Its just another imperative language clone (in this case, they just completely cloned Java...yay). I hoping was Microsoft would take this opportunity to really innovate and produce something with features which no one has ever seen before. Instead we get the same recycled ALGOL stuff as always; what a shame.
The language design notwithstanding however, C# is still useless; it's simply not portable enough to be a real language. I don't even mean portable in the Java sense...I mean "has a remote chance of being compiled on any platform other than win32, ever." Of course there will be people who will willingly tie themselves to passing fads like Microsoft.net, but for most part this language is relegated to the VB world of little windoze proggies. Exciting if you use VB I suppose, but not of interest to the average Slashdotter.
We can only hope this thing dissapears quickly and doesn't do too much damage in the meantime.
...of the technique of producing sound from a TI graphing calculator. Essentially, you hold a walkman radio up to the calc, then use certain assembler instructions to generate different levels of interference.
I don't know what "referential transparency" means. Yes, Lisp allows side effects and sequences. Yes, there are advanced type systems of that kind available -- Lisp is an extremely extensible language.
I'm not exactly sure what the point of universal lazy evaluation is, but you can do it in Lisp if you want to. Likewise, there's no particular reason why you can't curry functions automatically, but I'm not sure why you'd want to. Functions in lisp don't need to be curried because they can take more than one argument.
I agree with your comments on Pike...languages which don't compile themselves are so lame (*cough*Perl*cough*).
Haskell is a pretty cool language, but I wouldn't say it has "outclassed" Lisp. There aren't too many advocates of functional programming left nowadays...lets not belittle each other with petty in-fighting.
"Not so long ago, if you asked what Lisp was for, many people would have answered 'for artificial intelligence.' In fact, the association between Lisp and AI is just an accident of history. Lisp was invented by John McCarthy, who also invented the term 'artificial intelligence.' His students and colleagues wrote their programs in Lisp, and so it began to be spoken of as an AI language. This line was taken up and repeated so often during the brief AI boom in the 1980's that it became almost an institution."
The truth is that Lisp (and its dialects) is an extraordinarily versatile and powerful language. It is suitable for just about anything, including operating system design (people have and are still writing great operating systems in lisp) and application programming (emacs anyone?), especially involving embedded scripting languages. The features which make Lisp unique (first class functions, lexical closures, powerful macros, etc. etc.) also make it able to adapt to practically any problem in computer science and solve it both elegantly and efficiently.
Perhaps more than any other language, Lisp has taken a bad rap as of late, usually by people who haven't put any effort into learning it, or worse yet, people who have never tried it at all. I challenge those of you who took Lisp for granted as some sort of "AI language" to actually try it for yourself. At first you may find it awkward to adapt to Lisp's style of programming, but eventually you'll come to realize that the reason you felt awkward was because what you were doing before was not a very good method of programming or problem solving in general.
I don't know where you get this "huge number" from. Everyone I know at my college has stopped buying music, preferring to get it for free via napster (or now that napster has been banned, gnutella, ftp sites or internal opennap servers). No one buys music online. Why would they? I don't support the RIAA, but I also don't deny that they're losing profits from applications like napster. The issue is that they had way too much profits to begin with.
The title of this article is misleading, because most everyone involved in this discussion seems to be a proponent of Open Source. From what I can tell, Raymond is basically going on with his usual Libertarian claptrap and this time is actually getting owned by someone who seems to actually know what's going on in the world (Lessig and Newman).
It's not that Raymond or Libertarians (e.g., virulently anti-socialist objectivist gun-owners) in general don't have some interesting points, but as usual he's taking their arguments way too far and coming up with the usual Libertarian nonsense...all government and government regulation is bad, the Internet will give birth to a free society, blah blah blah.
I honestly wish Raymond would stick to championing Open Source rather than trying to inject his Libertarian ideals where they are really irrelevant and don't belong. At least he's pretty good at the former. Kudos to Lessig for a well-thought out argument.
The advance payment is for the development NVidia is doing for the (shudder) X-Box. The press release is dated April 18, whereas NVidia has been withholding register-level info on their cards for at least 6 months-1 year.
You ought to have a look at Counter-Strike for Half-Life. Some of the features implemented:
Realistic damage: there are no LAW rockets, only varieties of pistols, shotguns, machineguns, and rifles, all of which look, feel and sound similar to their real-life counterparts. The damage is definitely toned down from real life, but it's also realistic enough to make you step back and think before you do something (getting a head shot on a person without a helmet on is almost always fatal).
Good teamplay: it's multiplayer only, so you never have to deal with AI. The scenario is terrorist vs. SWAT, and the gameplay is extremely deep with an emphasis on strategy, rather than muscles, to win.
Ammo limits: At the beginning of each round you can buy weapons of your choice, but each play can only carry one gun at a time (along with a pistol and a combat knife), and picking another up off the ground requires dropping the one you have. Likewise guns themselves are balanced. Sniper rifles are heavy and make your character move slower, and are innaccurate when fired from the hip.
As for the directional sound, I would suggest investing in a 3D sound card and a good set of speakers (you'll also want a hefty 3D video card and a decent net connection). You talk like you would like to be serious about FPS gaming if you could find something that appeals to you, well, here's your chance. Don't complain though if you're not willing to make the neccessary investments to do so.
I know this wasn't meant to be taken seriously, but in reality dinosaurs and people were never on the earth at the same time. The Cretaceous peroid ended approximately 65 million years ago, and humans first appeared during the Pleistocene epoch, which started 1.8 million years ago. It's a common misconception that "cavemen" fought with dinosaurs.
One word: Tcl
:(
Unfortunetly it wasn't around when sendmail was written
These are both good things. All the examples I have seen for .NET use the same ol' synchronous reekage that has been going on forever. But perhaps people just haven't tapped its full potential yet.
:(.
Of course neither of these observations helps Linux if they use CORBA
Work on the reading comprehension. I never advocated using SOAP or any other form of RPC. I wasn't actually considering clustering as the intended application per se, but it doesn't matter, the point is I advocate using sane, asynchronous interfaces when communicating over a network. ANY form of RPC, be it CORBA/DCOM/whatever, does not qualify as either of these.
:-D), but you can wrap the raw socket interfaces in any way you wish, and likewise with data marshalling. Just don't wrap them in a poor way like CORBA does, otherwise Linux will be hanging by Microsoft's coattails forever.
And yes, I do advocate creating sockets (unless you know a better way to do network I/O from userspace
I find the GNOME mindset of copying Microsoft blindly to be somewhat bothersome. I understand the mindset of wanting to re-implement everything MS does (the "me too" syndrome), but oftentimes it seems like they don't consider whether Microsoft is doing things the right way.
.NET for example. One of the things it hinges on is SOAP/DCOM, which is essentially XML-based RPC. Now some in the open source community look at this and say "Hey! We can do that too! We have XML support! We have CORBA!", but I see this as a rash move. Without launching into a discussion of XML (which deserves its own rant), consider that RPC implementations are really a poor approach to network-based applications. To a newbie, RPC looks really cool, and it is in some ways a pretty neat-looking trick; just make method calls to another machine instead of your own! In practice however there is no golden rule stating that RPC, at least in current implementations, is the best way to write distributed applications.
.NET, but I would prefer that they did it the right way, with actual network protocols which have actual asynchronous non-blocking interfaces.
Take
A local method call and a network transaction are different things and should be treated as such. When you try to transparently layer one over the other, you end up blocking, which is a great way to write poor applications which use too many threads and end up tied in resource conflicts and deadlocks. Even if you can solve the non-trivial problem of synchronization, who wants all our apps spawning 2-3 threads to do trivial network operations? Isn't it the Linux community always complaining about bloat? The more you fill up your process table, the more your machine slows down.
Likewise, where is the error handling? If a CORBA routine returns failure, how can you be sure that the operation did not actually complete successfully on the receiving machine but that it failed to notify the caller due to network problems?
So anyway, I am all for Ximian et. al. providing an alternative to
I had actually heard from a friend that no one could understand this movie without reading the book first. Don't think I am some book-hating bigot, although 2001 isn't the typical thing I read in my spare time. For example I read Contact before it was made into a movie, and I enjoyed is a lot -- but on the other hand I thought the movie portrayed it pretty effectively too. Kubrick obviously failed to do this. Whether or not that was "impossible" is open for debate. But regardless the point I was making is that the movie is really kind of crappy. The pace is ridiculously slow, with a lot of repetition and really long boring space scenes. While I'm sure the effects (look! people sitting upside-down!) were spectacular in their day, to a contemporary viewer such as myself they register as a big fat so-what.
Likewise with the score...gee...Blue Danube...never heard that before...thanks for playing it throughout the entire freaking movie.
I'm sorry but I don't see anything redeeming about the color scene. As another poster suggests perhaps a healthy dose of LSD is required to appreciate it?
Anyway, nothing on the book, and nothing on Kubrick, but I don't see what all the fuss is about regarding the film.
-W.W.
Please give me one technical reason why file transfer via ftp is more efficient than file transfer over http. I'll give you a hint: it isn't. In fact, if you are opening multiple connections with ftp, then it is monstrously more inefficient. There is no magic that ftp is working in order to transfer files better over TCP. FTP is a terrible, deprecated protocol, which should never be used ever. DIE FTP DIE DIE. Thank you.
-W.W.
OK, this is a very funny link, but I do take issue with a few things:
#33 - I loved masters of the universe when I was a kid. I had all the action figures. Maybe he's right and in reality the movie did suck, but I don't appreciate my childish fantasy world being broken.
#32 - Yes, this movie sucked, but I think the reviewer missed the point with the "trapped in a world he never made" tagline. This is a direct quote from the "Howard the Duck" comic book, which is nothing less than one of the most brilliant humor books ever published. The "real" comic book howard was witty, satirical, biting, and nothing at all like the horrible mis-representation that is his movie version. The tagline is not intended to make sense.
#24 - This is actually one of my favorite movies. It was way underrated when it came out, but its actually an incredibly funny comedy which is also somewhat touching. Al Franken is great as Stuart (I love his work in general), and the scenes with his family being dysfunctional are really rolling-in-the-ailes quality. I don't see what he has against this movie. Am I crazy here? Does anyone agree with me?
#20 - Wow. Is this a joke? I have never, ever heard of anything like this before. A live action Garbage Pail Kids movie. I'm really glad I never watched this.
#3 - Sidekicks. How could this not be #1?
There you have my rantings. Take them for what they're worth. Keep in mind its 3am.'
-W.W.
How does a snippet of gdk code prove anything about gtk? If you don't like gdk's low-level interface, use gtk, don't write your own widgets.
Sure, I don't like everything about gtk's interface, but this comment is just pure FUD.
-W.W.
#include <objgtk.h>
class MainWin : public Window
{
public:
MainWin();
gint OnDeleteEvent(void);
void OnHelloButtonClicked(void);
private:
Button *hello_button;
};
MainWin::MainWin()
{
SetupTable(3, 3);
SetTitle("Hello, World");
SetUSize(300, 150);
SetPosition(GTK_WIN_POS_CENTER);
hello_button = new Button("Hello!");
hello_button->ConnectClicked(CALLBACK(OnHelloButt
Add(hello_button, 1, 2, 1, 2);
}
gint MainWin::OnDeleteEvent(void)
{
OG_Quit();
return FALSE;
}
void MainWin::OnHelloButtonClicked(void)
{
g_message("Hello!");
}
int main(int argc, char *argv[])
{
OG_Init(&argc, &argv);
MainWin *mainwin = new MainWin;
mainwin->Show();
OG_Main();
return(0);
}
Anyway, as soon as this got on Freshmeat, I received some responses (a first!), some encouraging (including some w/ patches, etc.), and one from Karl admonishing me for duplicating his work and urging me to give up ObjGTK and join the Gtk-- project. Now, Karl was very courteous and he did have some points -- a lot of my complaints were really stylistic issues which could presumably be fixed, and Gtk-- had some features which I could not easily duplicate (at the time they were starting to adopt libsigc++, which Guillaume apparently thinks is badly written, but regardless was a very useful idea which worked perfectly in this context. They also had the aforementioned stack-heap duality, whereas all my widgets were on the heap. The implementation of this was so awful I can barely describe it, let alone duplicate it). ObjGTK, although it was fully documented and somewhat useful, was incomplete (hey, I had only been working on it for two weeks), and Gtk-- had classes for almost every GTK+ type and then some. And so after a few such e-mails, I removed ObjGTK from the net and subscribed to the Gtk-- mailing list.
At this point my C++-wrapper development in Linux was pretty much over. I observed the mailing list for a couple of weeks, decided that the first thing I wanted to do was work on the documentation (at this point Gtk-- had no reference documentation and a couple of short programs acting as a tutorial), and quickly foundered. The source was very hard to work through. The headers seemed to be in three places at once, and the methods themselves were sometimes designed so circumlocutiously that it was almost impossible to tell what they did. It was hard to separate the "real" code which I was supposed to be writing from the code which was auto-generated from the GTK+ header files. And, my naive intentions of "fixing" the style issues were undoable; Gtk--'s conventions were simply too deeply rooted and too at-odds with my "simple"
style of programming.
My last run-in with Linux GUI programming was when I had the urge to continue working with an old program which had a GUI interface. I had originally written it in GTK+, then ported it to ObjGTK+ as a test of the latter's capabilities. Now since ObjGTK was dead, I figured the next logical step would be to re-write it in Gtk--. I downloaded the latest libsigc++ and libgtkmm, and got cracking. The first thing I started to write was the toolbar code. I scanned the Gtk-- documentation, found some methods which seemed appropriate, and started writing. It didn't compile because the methods didn't seem to exist. Flummoxed, I sent a message to the Gtk-- mailing list, and recieved a reply from Karl stating that yes, those methods didn't exist anymore, and giving me an example of the "better" way to write toolbar code, which was basically about 50 lines of horrible template code (in contrast to 40 or so lines of GTK+ code, or 20 of ObjGTK).
That was the last straw for me...not because of the bad documentation or the weird style standards, but because of how much this situation reminded me of the chapter in the "UNIX Hater's Handbook" where the UNIX style (make it easy to program) was contrasted with the Lisp style (make it easy to use). In my mind, Karl had become too obsessed with keeping to his academic theoretical perfection, and had disregarded the thing which make an API worthwhile, namely usability.
Looking back I suppose one could see Gtk-- as a shame, a deplorable situation that should never have happened. Personally, I disagree. When I worked with QT, I found it easy to use but I thought their pre-processor approach was terrible. Libsigc++ was a much more elegant solution to the problem which we have Karl to thank for. Likewise, I heavily disagree with another poster here who claimed that pointers are better than references. Pointers create unsafe interfaces, whereas with a reference you are always guaranteed to be passing an object which actually exists. ObjGTK+ used pointers exclusively, and if I re-did it today I would definitely change that.
I look forward to working with Inti; from the descriptions I've read it sounds like a good balance. I'm glad that it's there now since I no longer have the kind of free time I had in college to work on Open Source projects. Maybe soon I'll reorganize my schedule, subscribe to the Inti mailing list and start pestering them with stylistic issues
-W.W.
Dude, B2B is SO last month.
-W.W.
Uhh...competition? The Microsoft optical mice SUCK. If you move them too fast (such as doing a quick 180-then back in counter-strike) they will go insane and start flying the cursor around the screen. This basically makes them useless for gaming. I had one for a day before I returned it. Most likely Apple's new mouse will be just as useless.
-W.W.
If you're using OpenBSD, you can probably just go ahead and skip steps 1, 2 and 5. :-)
-W.W.
1. Edit /etc/inetd.conf and comment out everything you don't use. This should be pretty much everything, especially rsh, telnet and ftp (of course, some people do use ftp, but at least uninstall anonymous ftp support if you do). If you need telnet-like access to your machine, install ssh. A web server is generally OK, but be careful when writing CGI scripts.
/etc/rc.d and get rid of all the crap you don't need. You don't need rpc.statd if you're not using NFS, and you don't need sendmail running all the time unless your machine is going to be an smtp server. If you don't know what a particular service does, ask someone.
/etc/shadow, you need to enable them fast.
2. Likewise, go into
3. Make sure every user on the machine (especially root) has a "strong" password, i.e. not a dictionary word, and with strange combinations of alphanumerics. If you don't know if your password is good, download a password cracker and crack your own passwd file. Of course, your passwd file shouldn't have any passwords in it, since you should really be using shadow passwords. This is the default on most distributions now, but if you don't have an
4. Go to your distributions' security updates site daily and check for new updates. If you find any for packages you have installed, install them. Likewise, read securityfocus.com and other sites like it (or just subscribe to bugtraq) on a daily basis, and if you find you have a vulnerability which your distrtibution is not patching, download a new version for yourself and compile it from the sources.
5. Harden your general permissions and so forth. A good script to do this in my opinion is sherpa (http://rcrelia.hypermart.net/sherpa/) which will also convert your passwd file to shadow if needs be. In general most distributions install way too much software by default. You could probably improve your security greatly just by going through the package list, reading the descriptions, and getting rid of anything which you don't use, especially if it deals with the network or is setuid.
If you want to be really ridiculously paranoid, there are other things you can do as well, such as installing an IDS like tripwire or snort. In general however, the steps above when done properly will keep out 99% of the script kiddies who are most likely using their l33t portscanners to check your subnet for the "cool exploit of the week." If a security professional is really, really determined to get into your machine, then you may not be able to stop him given enough time. But as long as your name doesn't end with "himomura" this shouldn't be a problem.
-W.W.
Eiffel is just not expressive enough to be used as a real language. One looping construct? Bleh. It may seem like nitpicking, but having ugly code (with bad CAPS USAGE and END statements), and very rigid syntax are valid reasons to avoid a language. Hell, I'll be the first one to admit that Lisp has frustrating syntax for a beginner, but Lisp also has features which most other languages cannot duplicate. Eiffel is just another imperative language clone, reminicient of C, C++, Object-Pascal, Java, Smalltalk, Ada, Algol, FORTH, etc. etc. etc. Whoopie.
Eiffel devotees have always scratched their head at C++ programmers, who were for a long time working with an "inferior" language (before C++ had templates, exceptions, etc.), but what they failed to realize was that people could develop programs QUICKLY in C++, whereas writing Eiffel code is like repeatedly banging your head against a wall.
-W.W.
I always thought that being a homophobe was kinda stupid.
-W.W.
First of all, there is nothing new here. C# doesn't bring anything to the language table which hasn't been done many times before. Its just another imperative language clone (in this case, they just completely cloned Java...yay). I hoping was Microsoft would take this opportunity to really innovate and produce something with features which no one has ever seen before. Instead we get the same recycled ALGOL stuff as always; what a shame.
The language design notwithstanding however, C# is still useless; it's simply not portable enough to be a real language. I don't even mean portable in the Java sense...I mean "has a remote chance of being compiled on any platform other than win32, ever." Of course there will be people who will willingly tie themselves to passing fads like Microsoft.net, but for most part this language is relegated to the VB world of little windoze proggies. Exciting if you use VB I suppose, but not of interest to the average Slashdotter.
We can only hope this thing dissapears quickly and doesn't do too much damage in the meantime.
-W.W.
...of the technique of producing sound from a TI graphing calculator. Essentially, you hold a walkman radio up to the calc, then use certain assembler instructions to generate different levels of interference.
-W.W.
Uhm...try gtk_widget_show_all()
Shows a widget and all its children.
Bub-bye
-W.W.
I don't know what "referential transparency" means. Yes, Lisp allows side effects and sequences. Yes, there are advanced type systems of that kind available -- Lisp is an extremely extensible language.
I'm not exactly sure what the point of universal lazy evaluation is, but you can do it in Lisp if you want to. Likewise, there's no particular reason why you can't curry functions automatically, but I'm not sure why you'd want to. Functions in lisp don't need to be curried because they can take more than one argument.
I agree with your comments on Pike...languages which don't compile themselves are so lame (*cough*Perl*cough*).
Haskell is a pretty cool language, but I wouldn't say it has "outclassed" Lisp. There aren't too many advocates of functional programming left nowadays...lets not belittle each other with petty in-fighting.
-W.W.
From "On Lisp" by Paul Graham:
"Not so long ago, if you asked what Lisp was for, many people would have answered 'for artificial intelligence.' In fact, the association between Lisp and AI is just an accident of history. Lisp was invented by John McCarthy, who also invented the term 'artificial intelligence.' His students and colleagues wrote their programs in Lisp, and so it began to be spoken of as an AI language. This line was taken up and repeated so often during the brief AI boom in the 1980's that it became almost an institution."
The truth is that Lisp (and its dialects) is an extraordinarily versatile and powerful language. It is suitable for just about anything, including operating system design (people have and are still writing great operating systems in lisp) and application programming (emacs anyone?), especially involving embedded scripting languages. The features which make Lisp unique (first class functions, lexical closures, powerful macros, etc. etc.) also make it able to adapt to practically any problem in computer science and solve it both elegantly and efficiently.
Perhaps more than any other language, Lisp has taken a bad rap as of late, usually by people who haven't put any effort into learning it, or worse yet, people who have never tried it at all. I challenge those of you who took Lisp for granted as some sort of "AI language" to actually try it for yourself. At first you may find it awkward to adapt to Lisp's style of programming, but eventually you'll come to realize that the reason you felt awkward was because what you were doing before was not a very good method of programming or problem solving in general.
-W.W.
I don't know where you get this "huge number" from. Everyone I know at my college has stopped buying music, preferring to get it for free via napster (or now that napster has been banned, gnutella, ftp sites or internal opennap servers). No one buys music online. Why would they? I don't support the RIAA, but I also don't deny that they're losing profits from applications like napster. The issue is that they had way too much profits to begin with.
-W.W.
The title of this article is misleading, because most everyone involved in this discussion seems to be a proponent of Open Source. From what I can tell, Raymond is basically going on with his usual Libertarian claptrap and this time is actually getting owned by someone who seems to actually know what's going on in the world (Lessig and Newman).
It's not that Raymond or Libertarians (e.g., virulently anti-socialist objectivist gun-owners) in general don't have some interesting points, but as usual he's taking their arguments way too far and coming up with the usual Libertarian nonsense...all government and government regulation is bad, the Internet will give birth to a free society, blah blah blah.
I honestly wish Raymond would stick to championing Open Source rather than trying to inject his Libertarian ideals where they are really irrelevant and don't belong. At least he's pretty good at the former. Kudos to Lessig for a well-thought out argument.
-W.W.
The advance payment is for the development NVidia is doing for the (shudder) X-Box. The press release is dated April 18, whereas NVidia has been withholding register-level info on their cards for at least 6 months-1 year.
-W.W.
You ought to have a look at Counter-Strike for Half-Life. Some of the features implemented:
Realistic damage: there are no LAW rockets, only varieties of pistols, shotguns, machineguns, and rifles, all of which look, feel and sound similar to their real-life counterparts. The damage is definitely toned down from real life, but it's also realistic enough to make you step back and think before you do something (getting a head shot on a person without a helmet on is almost always fatal).
Good teamplay: it's multiplayer only, so you never have to deal with AI. The scenario is terrorist vs. SWAT, and the gameplay is extremely deep with an emphasis on strategy, rather than muscles, to win.
Ammo limits: At the beginning of each round you can buy weapons of your choice, but each play can only carry one gun at a time (along with a pistol and a combat knife), and picking another up off the ground requires dropping the one you have. Likewise guns themselves are balanced. Sniper rifles are heavy and make your character move slower, and are innaccurate when fired from the hip.
As for the directional sound, I would suggest investing in a 3D sound card and a good set of speakers (you'll also want a hefty 3D video card and a decent net connection). You talk like you would like to be serious about FPS gaming if you could find something that appeals to you, well, here's your chance. Don't complain though if you're not willing to make the neccessary investments to do so.
-W.W.
I know this wasn't meant to be taken seriously, but in reality dinosaurs and people were never on the earth at the same time. The Cretaceous peroid ended approximately 65 million years ago, and humans first appeared during the Pleistocene epoch, which started 1.8 million years ago. It's a common misconception that "cavemen" fought with dinosaurs.
-W.W.