id, the makers of Quake & Doom have consistently supported the reverse-engineering community that has grown up around their products. Within days of the release of Quake III, independent developers were posting their own level editors because they had successfully reverse engineered the binary format of id's files.
Not only does id not take action against these folks, they support them with code releases from the product and ongoing.plan files describing upcoming tweaks and the algorithms used in the games. Write to the id developers and they are likely to write back, answering questions about the game and encouraging you to write your own tools for it.
These independent tools are what have allowed the game modification (mods) communities to grow around their games and have led to id's real cash cow: licensing game engines. Other game makers license id's engine in part because there are so many tools available for it. In a recent Gamasutra article, the lead programmer for Soldier of Fortune, a new 3D game, talked about why his company chose to license the Quake engine: because the tools created by independent developers for level editing and cut scene creation were so good.
I find it interesting that "what is a computer" is kind of like the discussion people used to have over "what is a person" when AI looked like it was around the corner.
This is the discussion that goes: Is a person with an artificial heart still a person? Is a person with an artificial limb still a person? Artificial kidney (dialysis)? Artificial eye? Brain?
In my mind I've been using the same "computer" for ten years. I never replace more than 5% of the computer at a time, so it never becomes a new computer. I distinguish my computer from other computers by its "personality": directory structure, user names, UI skins, shell scripts, etc.
I don't expect MS or laywers to recognize this sentimental/philosophical point. As computing resources become more swappable and more portable, the philosophy is going to start edging into the business world. Licensing software for "one computer" is a wierd concept in a world where a computer is a collection of flash rams, URL's for resources stored on the net, pluggable IO devices, etc. If you use a laptop, 50% of your computer's hardware is probably modular: you can remove the CD/DVD drive, battery, USB external keyboard and mouse, external monitor, PCMCIA cards, and flash rams. With more people moving towards regular permanant storage of data on the web (ie. all of my e-mail sits in a web mail account and many of my files on a university server) and computers becoming completely modular (my Mac and PC share all of their USB devices), I'm not so sure a computer is something you can point at, pick up, and lug down the stairs. It is more of a concept.
Say you have done something that you - and some other people - believe to be very, very good and maybe even very, very important. But most people don't recognize its importance. Worse, most people don't even recognize its existence. It's different from what they expect or what they have ever run across. What you have, you believe, is a breakthrough. The classic sequence of events for any breakthrough is:
(1) Most people don't recognize its existence.
(2) When they do recognize it, their immediate reaction is to laugh or scoff at it.
(3) Some of those people become curious about this thing that they are laughing at, and then think about it, and so come to appreciate its true worth.
This is a very good point. I had always thought they were about mocking pseudo science. Apparently they are to bring attention to good and bad science that would otherwise be ignored because it also has some humor value.
This is actually how URL's work in England (and maybe all of Europe?). Software translates them back and forth between English and US style. I think URL's are always displayed US style in UI's these days, however.
com.microsoft.www makes a lot more sense. Also, this fits nicely with schemes like Java's name space, where your piece of a namespace begins with your URL. For example, when sun releases new Java packages, they go in the package named com.sun.*.
The real Luddites were opposed to technology being used to suppress people. They all lost their jobs or were put in to dangerous jobs interacting with some scary automated weaving machinery when the industrial revolution occured in England. Like the citizens in "Metropolis", they smashed the machines that were supplanting people and leaving large numbers of the poor unemployed or facing lousy jobs.
I think they were right. When new technology is introduced, it should be used to make life better for all of society, not to make the rich richer and eliminate the need for other economic classes. Mechanization and new technology have always promised that the work day would get shorter, safer, and easier. So why are so many people working 12 hour days at multiple jobs?
Most of us are lucky; we are the technological elite and we like our jobs. But too frequently, people (like us) have introduced new technologies without thinking about the social impact. In the case of the Luddites, clever engineers figured out how to make an electric loom. But noone figured out how the textile producing population of England was supposed to support itself. I think the whole point of being 'human' is in looking to higher goals than feeding yourself for one day. Introducing technology that is more efficient and makes you money and more secure is a good thing-- but if the cost is destroying the livelyhood of large parts of your society, it's time to figure out a plan for them to succeed as well.
Now, the modern "Luddites" tend to be the exact opposite of this. They are protecting large, abusive corporations from technologies that would liberate many people both intellectually and financially. I think it is insulting to the original Luddites to call these new folks "Luddites."
Steve Macguire "Debugging the development process"
and
Leavitt et al. "Readings in Managerial Psychology"
as well as "The Mythical Man Month" if you have not read it already.
Managers are very important: they are meta-programmers, enabling lots of other people to do their work and facilitating them doing it better. It has been statistically shown that the best engineering managers are good engineers (good engineers don't necessarily make good managers, however. This is a one-way thing).
Like a battlefield commander, the worst thing a manager can do is nothing. People look to you to lead them, and you need to lead them somewhere, even if you don't have enough information to make the optimal decision at the time.
Listen to people on your team and other managers. Being a manager is not about coming up with good ideas; it is about recognizing them when you hear them.
Shirts with high polyester amounts feel crappy but don't need to be ironed as much.
I come to/. for "News for nerds", not "News for rabid Linux fanatics." I consider articles on Monty Python, Black Holes, Linux, and Calculus all news for nerds... and this one was too. Let's see more generic "nerd" stories; not fewer!
Well, also the fact that a huge chunk of the web isn't even indexed at all.
The increasing use of JavaScript, Flash, Acrobat, Images, and other technologies that take human readable text and put it into forms a web search engine can't parse or understand is taking many of the "fancy" sites out of search engines.
The irony is that these tend to be the sites that are trying very hard to get to the top of search engine listings.
I once considered patenting some bad ideas (along the lines of using negative numbers as sentinal values, undocumented OS capabilities, etc.) so that I would own the IP and be able to sue companies that used these bad practices.
-m
Sounds like Wallace and Grommit's A Grand Day Out:)
I was amazed to find out that some of my Mech. E. friends from college are happily building a rocket to launch to over 100km. I guess this is their equivalent of a little open source project on the side (and I'm wondering why I majored in CS if they get to build rockets). Apparently any Joe with enough perserverance (in this case a few 22 year olds) can go purchase enough liquid oxygen to blow themselves and a small town sky high, machine a few parts and stick it together, fill out nice forms for the FAA and friends, then send the whole thing sky high. Very cool.
Of course, I keep trying to convince them it should be computer guided so I can get in on the action, but they wisely seem to favor "simpler is better."
Well, it has accessors, which allow good separation of state and interfaces. (An accessor is a method that looks like a field).
It allows casting without a type-check, something that Java disallows for language integrity but can be a pain when writing deserializers, memory management, etc.
C# has a preprocessor, so you can use conditional compilation and macros again (yes, these can be abused, but they can also be used very effectively by a good programmer).
Having multiple inheritance and dynamic arrays back from C++ is very nice as well.
While the animated Mach 5 had the uncanny ability to fly, drive under water, the real-life replica is a little more "limited" with special jumping hydraulics, interactive voice responses to the steering-wheel buttons and a pair of circular saw-blades -- an indispensable gizmo for those off-road car chases. The remote-control homing pigeon will also be added in the future, as will the underwater periscope (no word, however, whether or not the car will gain submersible powers).
I've developed extensively under both. Developing under Linux means mastering a pile of little tools, then choosing the right subset to attack a project. Rather than having a single IDE or source control system, you have tons of little scripting languages, editors and utilities that can be brought to bear.
This has a much steeper learning curve and to truly master it, you have to be a true hacker, thinking in terms of how you can recombine little pieces to make something new. Many developers are better off under a Windows IDE like DevStudio since it takes care of all of the little things. However, I really take advantage of being able to use the same editor (in my case, Emacs!) for everything, being able to extend my environment easily, and having such a large set of tools (perl, python, make, awk, sed, xargs, diff, rcs, cvs, etc.) that I can recombine easily. A lot of little things that are all really good at what they do is much better than one large framework that paralyzes you when it doesn't meet your needs.
Yes, many of these tools are available for Windows. The environment isn't supportive of them, however. Forking under Win32 is extremely slow, so using a bunch of little tools is less efficient than using a single tool. We're talking orders of magnitude here. The Win32 port of Emacs has never quite gotten along with my environment; slashes go in an un-C/Java-friendly direction, the concept of "disks" vs. "mounts" isn't really supported, my configuration files don't make sense on Win32. None of this is Windows' "fault," or a serious argument that Windows is an inferior platform (I think it is a superior platform for most applications, just not development) it's just that the little tools approach doesn't work.
I do a lot of computer graphics work, so the FFT is among my top 10 for that field. Marching cubes, phong shading, environment mapping, bilinear interpolation, BSP & portal PVS are also on top of my list.
What a perfect nerd question: what's your favorite algorithm, baby?!
Here's one: the FFT Algorithm allows transformation between positional space and fourier space (for a 1d signal, like audio, this is the transformation between a "time" based and a "frequency" based signal) and vice-versa in O(n * lg n) time for n power of 2.
Why is this important? Convolution, the primary operation involved in computing all kinds of neat filters, can be performed in O(n^2) time in time space, but O(n) time in frequency space. (i.e. it's a lot faster to perform image filtering in Fourier space). The problem is that the normal Fourier transform takes O(n^2) time, so you can't get into and out of Fourier space to justify performing filtering there.
With the FFT, filtering can be performed in O(n*lg n) time, since you can hop into Fourier space quickly, perform the filter, and hop back (the constants work out to this being useful after n ~= 100,000, which is a reasonable point for audio and most images).
The FFT is a great example of an algorithm that suddenly tipped the asymptotic scales and revolutionized an entire discipline.
Let's not forget that Aliens use the same symbols for scientific & mathematical notation and also had a guy named "Pythogoreas." Boy was I suprised when after sitting in the alien learning machine Goodboy sounded like a Harvard grad and not a Psyclo community college alumnus.
Not only does id not take action against these folks, they support them with code releases from the product and ongoing .plan files describing upcoming tweaks and the algorithms used in the games. Write to the id developers and they are likely to write back, answering questions about the game and encouraging you to write your own tools for it.
These independent tools are what have allowed the game modification (mods) communities to grow around their games and have led to id's real cash cow: licensing game engines. Other game makers license id's engine in part because there are so many tools available for it. In a recent Gamasutra article, the lead programmer for Soldier of Fortune, a new 3D game, talked about why his company chose to license the Quake engine: because the tools created by independent developers for level editing and cut scene creation were so good.
-m
This is the discussion that goes: Is a person with an artificial heart still a person? Is a person with an artificial limb still a person? Artificial kidney (dialysis)? Artificial eye? Brain?
In my mind I've been using the same "computer" for ten years. I never replace more than 5% of the computer at a time, so it never becomes a new computer. I distinguish my computer from other computers by its "personality": directory structure, user names, UI skins, shell scripts, etc.
I don't expect MS or laywers to recognize this sentimental/philosophical point. As computing resources become more swappable and more portable, the philosophy is going to start edging into the business world. Licensing software for "one computer" is a wierd concept in a world where a computer is a collection of flash rams, URL's for resources stored on the net, pluggable IO devices, etc. If you use a laptop, 50% of your computer's hardware is probably modular: you can remove the CD/DVD drive, battery, USB external keyboard and mouse, external monitor, PCMCIA cards, and flash rams. With more people moving towards regular permanant storage of data on the web (ie. all of my e-mail sits in a web mail account and many of my files on a university server) and computers becoming completely modular (my Mac and PC share all of their USB devices), I'm not so sure a computer is something you can point at, pick up, and lug down the stairs. It is more of a concept.
-m
The couple with the fewest problems were "street acrobats".
-m
-m
com.microsoft.www makes a lot more sense. Also, this fits nicely with schemes like Java's name space, where your piece of a namespace begins with your URL. For example, when sun releases new Java packages, they go in the package named com.sun.*.
-m
Somehow I think Heinlein wouldn't have minded using one as a sexual novelty in a sleazy motel, however, given his later fiction.
No offense, though. He's the man.
-m
I think they were right. When new technology is introduced, it should be used to make life better for all of society, not to make the rich richer and eliminate the need for other economic classes. Mechanization and new technology have always promised that the work day would get shorter, safer, and easier. So why are so many people working 12 hour days at multiple jobs?
Most of us are lucky; we are the technological elite and we like our jobs. But too frequently, people (like us) have introduced new technologies without thinking about the social impact. In the case of the Luddites, clever engineers figured out how to make an electric loom. But noone figured out how the textile producing population of England was supposed to support itself. I think the whole point of being 'human' is in looking to higher goals than feeding yourself for one day. Introducing technology that is more efficient and makes you money and more secure is a good thing-- but if the cost is destroying the livelyhood of large parts of your society, it's time to figure out a plan for them to succeed as well.
Now, the modern "Luddites" tend to be the exact opposite of this. They are protecting large, abusive corporations from technologies that would liberate many people both intellectually and financially. I think it is insulting to the original Luddites to call these new folks "Luddites."
-m
Managers are very important: they are meta-programmers, enabling lots of other people to do their work and facilitating them doing it better. It has been statistically shown that the best engineering managers are good engineers (good engineers don't necessarily make good managers, however. This is a one-way thing).
Like a battlefield commander, the worst thing a manager can do is nothing. People look to you to lead them, and you need to lead them somewhere, even if you don't have enough information to make the optimal decision at the time.
Listen to people on your team and other managers. Being a manager is not about coming up with good ideas; it is about recognizing them when you hear them.
Shirts with high polyester amounts feel crappy but don't need to be ironed as much.
Good luck!
-m
-m
I come to /. for "News for nerds", not "News for rabid Linux fanatics." I consider articles on Monty Python, Black Holes, Linux, and Calculus all news for nerds... and this one was too. Let's see more generic "nerd" stories; not fewer!
magic
The increasing use of JavaScript, Flash, Acrobat, Images, and other technologies that take human readable text and put it into forms a web search engine can't parse or understand is taking many of the "fancy" sites out of search engines.
The irony is that these tend to be the sites that are trying very hard to get to the top of search engine listings.
-m
I once considered patenting some bad ideas (along the lines of using negative numbers as sentinal values, undocumented OS capabilities, etc.) so that I would own the IP and be able to sue companies that used these bad practices. -m
-magic
magic
Mulder was abducted by aliens at the end of the season finale for season 6. -magic
I was amazed to find out that some of my Mech. E. friends from college are happily building a rocket to launch to over 100km. I guess this is their equivalent of a little open source project on the side (and I'm wondering why I majored in CS if they get to build rockets). Apparently any Joe with enough perserverance (in this case a few 22 year olds) can go purchase enough liquid oxygen to blow themselves and a small town sky high, machine a few parts and stick it together, fill out nice forms for the FAA and friends, then send the whole thing sky high. Very cool.
Of course, I keep trying to convince them it should be computer guided so I can get in on the action, but they wisely seem to favor "simpler is better."
-m
It allows casting without a type-check, something that Java disallows for language integrity but can be a pain when writing deserializers, memory management, etc.
C# has a preprocessor, so you can use conditional compilation and macros again (yes, these can be abused, but they can also be used very effectively by a good programmer).
Having multiple inheritance and dynamic arrays back from C++ is very nice as well.
magic
So I question whether the pigeon is there.
-m
This has a much steeper learning curve and to truly master it, you have to be a true hacker, thinking in terms of how you can recombine little pieces to make something new. Many developers are better off under a Windows IDE like DevStudio since it takes care of all of the little things. However, I really take advantage of being able to use the same editor (in my case, Emacs!) for everything, being able to extend my environment easily, and having such a large set of tools (perl, python, make, awk, sed, xargs, diff, rcs, cvs, etc.) that I can recombine easily. A lot of little things that are all really good at what they do is much better than one large framework that paralyzes you when it doesn't meet your needs.
Yes, many of these tools are available for Windows. The environment isn't supportive of them, however. Forking under Win32 is extremely slow, so using a bunch of little tools is less efficient than using a single tool. We're talking orders of magnitude here. The Win32 port of Emacs has never quite gotten along with my environment; slashes go in an un-C/Java-friendly direction, the concept of "disks" vs. "mounts" isn't really supported, my configuration files don't make sense on Win32. None of this is Windows' "fault," or a serious argument that Windows is an inferior platform (I think it is a superior platform for most applications, just not development) it's just that the little tools approach doesn't work.
magic
What other algorithms would you folks suggest?
I do a lot of computer graphics work, so the FFT is among my top 10 for that field. Marching cubes, phong shading, environment mapping, bilinear interpolation, BSP & portal PVS are also on top of my list.
What a perfect nerd question: what's your favorite algorithm, baby?!
magic
Why is this important? Convolution, the primary operation involved in computing all kinds of neat filters, can be performed in O(n^2) time in time space, but O(n) time in frequency space. (i.e. it's a lot faster to perform image filtering in Fourier space). The problem is that the normal Fourier transform takes O(n^2) time, so you can't get into and out of Fourier space to justify performing filtering there.
With the FFT, filtering can be performed in O(n*lg n) time, since you can hop into Fourier space quickly, perform the filter, and hop back (the constants work out to this being useful after n ~= 100,000, which is a reasonable point for audio and most images).
The FFT is a great example of an algorithm that suddenly tipped the asymptotic scales and revolutionized an entire discipline.
-m
-m
-m
Iron Chef rocks. Here's hoping they bring it back...
magic
m