Alternative, not so glowing review...
on
Homepage Usability
·
· Score: 2
I also submitted a review of this book to Slashdot a week or two ago, but mine got knocked back. My review was substantially more in-depth, but far less complimentary.
What worries me most is what you see on the front page of the site, namely the logos of a bunch of companies like Rational, Construx and SAP, who have vested interests in software engineering processes. If the committee goes away for a couple of years, comes back with a carbon copy of the Rational Unified Process and tells everyone they need to buy Rational Rose to get a certification, I'm going to be more than a little annoyed.
The basic problem is that there is simply no consensus in the industry as to what constitutes "good engineering" in software, beyond a certain very basic level. We're a very, very young discipline, and unlike structural or electronic engineering the mathematics does not exist to prove what we are doing is right.
In the absence of any real proveability in our craft, all you can do is make broad pronounciations, and then quibble about their interpretations. You can say "testing is good", but you'd never get a room full of programmers to agree whether test-first programming is better than testing completed code, and nobody's yet been able to determine which is more efficient under which circumstances. Similarly, you can say "well-designed code is good", but who's going to moderate the dispute between the CMM waterfall three month design phase group, the moderate Agile "design the module just before you code it" group, and the eXtreme "design is something you achieve as a by-product of merciless refactoring" party.
I have little faith in the mission of this group, as I can't ever see it coming up with a satisfactory document. Either the qualification for being a software engineer will be so broad as to be useless, or (more likely) it will mean that the industry will continue on as it always has, we'll just go back to being called programmers, and spend our time scoffing at certified "software engineers" as followers of an arcane, broken methodology.
I consider myself a good programmer. It's been my experience that depending on the complexity of the language, it takes between six months to a year of experience in a language before you are fluent. Fluency is not mastery, it's the point at which you can sit in front of the code and write in such a way that you are using the language, not wrestling with it. And you can't write good code when you're fighting the language.
As for reading a language. Sure, you can read any program immediately, provided the syntax is familiar, and the code is well named and well commented. On the other hand, there are always unfamiliar syntaxes - take someone who's only coded in C and Perl, and put them in front of Lisp or Smalltalk, and they'll need a couple of days work just to be able to parse it.
You can learn enough to slap a program together in a week, provided the syntax of the language isn't particularly alien, but it's not going to be one you're proud of the week after, when you've learned a little bit more. You'll know the syntax and control structures. You'll have some idea of the shape of the main libraries, and you'll know where in the documentation to look if you need to know more.
I've done this before - I remember having three days to learn enough of a particular language to fool a customer into thinking I knew what I was doing. And I did, we got the tender, I continued to learn more over the ensuing weeks, and the customer was happy with me. Looking back, my total unfamiliarity with the language probably cost this customer many thousands of dollars in lost productivity, for all the time I took looking up library functions in the language documentation, and all the time I spent inefficiently re-implementing functions that were already available, but that I wasn't aware of enough to know to look for them.
A week of study will qualify you to painstakingly inch through other peoples code with piles of documentation at hand, and get a pretty good gist of what the code is doing. It'll qualify you to write something artificial for your CS class. It'll qualify you to make simple logical changes real code. It will NOT qualify you to write, or make significant changes real code.
The syntax of a language is only the smallest, and easiest part of it to learn. The libraries, the idioms are far more important. Knowing all the weird letters you can stick at the end of a regexp in Perl. Knowing that double-checked locking in Java doesn't work. Knowing which collection in the STL is most suited to the data you're storing. Would you trust the maintenance programmer you've just hired and taught C in a week not to introduce an exploitable buffer overflow?
Charles Miller
Java is not C, it can be more like Smalltalk.
on
Java IDEs?
·
· Score: 2
When partnering with Kent Beck, most everyone has this experience:
Something goes wrong. The code doesn't work. You start to think: "What could cause that to happen?" Kent doesn't think about what the problem is. He just sets a halt in the system and lets Smalltalk tell him what the problem is.
Sometimes you're right about what the problem is. If you're really quick you'll be able to tell Kent what to edit in the window he's already looking at. If you're really quick.
Sometimes you're not right about what the problem is. Forget it, he has already fixed it.
Train yourself to think about where to put the halt, not to think about what the problem is. Of course it's a great feeling when you can reason to the problem. But we're not here to make our brains feel good, we're here to get the code working as quickly as possible. Setting the halt and letting Smalltalk tell you will help you build working code faster.
I develop Java using IBM's VisualAge for Java. Here's what I do when I find a bug:
I don't try to work out precisely where the bug is. I just set a breakpoint in its general vicinity.
I step through until I find what's going wrong. I make liberal use of my ability to inspect any variable in scope, to highlight pieces of code and evaluate them while the program is halted, or to write random code snippets in the evaluation area, and inspect their results as they execute in the context of the halted program. The big problem with writing printfs is you have to guess (out of everything that's in scope, and every method you're calling) which ones are giving you bogus results. If you knew what the problem is, you wouldn't need the printfs. If you're wrong, you have to write a new batch of printfs and run the whole test again. If you're in the debugger, you can just go through them one by one, from most to least likely.
When I locate the bad code, I fix it from the debugger, save (which drops the stack frame back to the beginning of the method), and let it run. The test then goes green.
I guarantee, using this method, 90% of the time I'll have fixed the bug while you're still writing printfs and scratching your head.
The reason that Microsoft have a monopoly position is that the barrier to entry in the OS market is so immense. Windows is the result of twenty years of coding, legacy applications and market dominance against which you would have to compete if you're an OS startup.
Take, for example, device drivers. The first thing you'd ask when hearing of a new OS is "does it work with my hardware?" Because of Microsoft's market dominance, nobody will release PC hardware without a working set of Windows drivers. On the other hand, if you're developing a new OS, you have to write all the drivers yourself, most of the time going on your hands and knees to the hardware vendors who may or may not release the specs for their device to you.
And if you have overcome the device drivers hurdle, you get the applications hurdle. Each new version of Windows is very, very careful to remain compatible with the applications running in previous versions. Otherwise they wouldn't sell. Ditto, nobody but a few hobbyists are going to buy an OS without any applications.
When Microsoft was starting out, other people wrote applications for them. Visicalc was ported to MS-DOS. Lotus 1-2-3 was the IBM PC's killer application. On the back of that, Microsoft used their profits to build their own applications suite, and through bundling and leveraging their OS dominance, they managed to subsume the productivity applications market until there was only Office left.
People don't get trained in Word Processing any more, they get trained in Word. If you're running an office, you want your staff to be as productive as possible, so if you hire someone with Word Processing experience (i.e. Word experience), you'd better be giving them Word to work with, or they'll be working inefficiently, and complaining that the replacement sucks, even if it has identical (or better) features, because it works differently.
So if you want to compete in the OS market, you'd better also produce something that works just the same as Word, and interoperates flawlessly with it. This is tough, since MS Word is a constantly moving target of file-formats and features with a budget behind it that dwarfs anything that a competing company can attempt.
You'd better produce it yourself, too. Unlike in the early days of DOS, Windows 3.1 and MacOS, you're not going to find another start-up willing to write the next Killer App for your Operating System, because it's assumed no matter how good you are, you're going to fail. Nobody producing commercial software is going to bother writing against an OS nobody uses, they're going to be putting all their resources into making sure the Windows version works properly, because that's what people use.
In the meantime, do you have a killer app that you're writing that's going to revolutionise the industry? Your business plan had better include cashing out in five years, because in twelve months Microsoft will have produced a cheap imitation of your product and bundled it with Windows. In two years, their product will be close enough to yours that you'll start losing market share as more and more people stop bothering to download your better software, and in five years, you'll be left behind because you just don't have the resources to compete.
The barrier to entry is too high.
The only alternative OS that survives in the consumer realm is MacOS. It does so because the Mac started out before Microsoft had consolidated their monopoly position, and because you can still get Office on it. Even then, Apple only barely hang on to solvency by the skin of their teeth, again and again.
Let's name the most common "alternative" applications installed on Windows PCs.
1. Winamp - free, propped up by AOL/TW, threatened by the integration of Media Player and Win XP.
2. ICQ - free, propped up by AOL/TW, pretty much killed by AOL IM, both of which are now threatened by the integration of MSN Messenger with Win XP - if everyone's got a passport account and MSN Messenger, another IM application is unnecessary.
3. Netscape - free, propped up by AOL/TW, annihilated by the bundling of MSIE with Windows 95/98.
4. RealPlayer - free, installed with Netscape, threatened by the bundling of Media Player with XP.
That's a pretty scary pattern. It tells us that in the real world, where the only viable consumer platform is Windows, the only people who can survive writing software for Windows are either the writers of esoteric, niche applications that haven't appeared on Microsoft's radar yet, or people who are willing to give their software away for free (libre).
If you have to give your software away, you have to find some other revenue model, which is why all the non-Microsoft applications are covered in advertisements, "shop now" buttons and unwanted features that point to stuff that the software publisher may get some revenue from. And because of this, people are further driven away from the non-MS applications, because the advertising model is so intensely annoying.
It's incredibly anti-competetive. Internet Explorer, Media Player, MSN Messenger, Hotmail, Passport. None of these things are free. Whenever you buy a license for Windows, you're paying for ALL of these things. That's what bundling is. Take a product that people have to buy, and tie it to products they don't in order to undersell, starve and kill your competition.
If you prefer Mozilla, Quicktime, Winamp, ICQ/AOL-IM/Jabber and use your own email service, you simply can't choose not to pay for Explorer, Media Player, Messenger, Hotmail and Passport. The major applications I use at work only run on Windows, and thus, despite wanting none of them, they're still paying for Internet Explorer, Media Player, Messenger, Hotmail and Passport.
The only way my employer can do business is by subsidising Microsoft's effort to stamp out competing applications, even though we don't use, nor want the bundled software we're paying for. Microsoft have you by the balls. Anything the US justice department can do to loosen that grip, up to and including burying Bill Gates up to his neck by a nest of fire ants is fine by me.
You can't compare an ancient mainframe to a modern workstation. Why not look at the specs of what's available today? zSeries (the new name for s390) run on pretty damn fast copper-wire PPC CPU's. I seem to recall 800MHz as the figure, and since they're RISC you can add a fudge factor when comparing them with the latest Intel - so they don't have quite the straight-line speed, but they're close. On the other hand, your biggest Intel box is 4-way, while the zSeries has up to 20 CPUs (16 for SMP, plus 4 that can be dedicated to handling I/O).
The minimum memory you can stick in a zSeries is 1 gigabyte. The maximum is 64 gigabytes.
Storage throughput has similarly increased since your employer purchased their dinosaur, I just couldn't find figures for what they are now.
Tomcat is the reference implementation of the most recent Servlet/JSP standards. As such, it has undergone very little optimization, and isn't particularly friendly to administer. Scratch the surface of anyone who's had to run Tomcat, and you'll find someone who's had a variety of CLASSPATH, speed and reliability problems.
<p>Don't use Tomcat in anything but a development environment, or to test things against the standard implementation. There are many free and non-free alternatives available.
<p>The whole point of the J2EE standards is that the techniques that you can use to deploy an application on Tomcat should work on <i>any</i> J2EE compliant servlet container. The webapp filesystem layout Tomcat uses, which is explained in this article, is really just a Sun standard available on most modern java application servers.
The plaintiff in anti-spam cases is not the recipient of the email, but the person who runs the mail host that's being spammed. In this particular case, the plaintiff hosted two or three domains, and got one copy of the spam. Big deal, fifty bucks. Now imagine you're $big_ISP, and you receive several thousand spams a day from a single source. Your parent company has a legal department that's not really busy this week. Hello real deterrent.
Charles Miller --
Re:It's not just web pages
on
AI Movie Promo
·
· Score: 2
Yeah, it's funny how pretty much an identical submission ended up in Plastic a day ot two ago.
Products such as Websphere can be released on one OS platform (Linux) and run on IBM's entire range of hardware.
Linux has a lot more "geek momentum" than AIX. The guys in the server room would probably be much more excited to get a kick-ass RS/6000 if it meant they could stick Linux on it.
It gives them something to talk about in their upcoming advertising campaign.
IBM is a hardware company. To them, software is a way to sell hardware. If Linux is popular, then it's in IBM's interest to make sure it runs on their most expensive kit. They'd rather sell an RS/6000 than a Netfinity. (this also explains their porting it to S/390 first)
I wouldn't be surprised if the long term plan was to fold the enterprise functionality of AIX into Linux, have the OS maintained by the open source community with much less IBM manpower than AIX takes, and then put AIX out to pasture.
Debuggers: Check out visual age, it is meant to be excellent. However, having used both VC and JBuilder, I don't find any limitations in the java debugger. Why? Because I spend much less time using it. In fact I rarely need it at all.
I live In the VisualAge debugger. The ability to edit the source, hit save, have the changes linked into the running application, and immediately step over the code I just wrote to make sure it does what I want it to is pretty damn good. If you're unsure of exactly what to do with a method (say you're working with some unfamiliar API or toolkit), you can just leave it empty, set a breakpoint, and then be able to inspect all the objects available to you while you write the method in the debugger's source pane.
Just set the halt contains some very, very good advice for working in this kind of environment. (Okay, it's about SmallTalk, but VAJava is really VASmalltalk with another language kludged onto it)
One of the great advances of web standards is that they have re-introduced the strict separation of structural markup from display markup. This effort is actually a bonus for the vision-impaired, or handheld users, because the more standards-compliant a site is, the more likely it is to be possible to get some kind of coherent content out of a site after the "designed for 800x600 graphical displays" styles have been stripped away.
This is one of the real problems with the current system. The more you have to tweak your site just so it'll work in NS4.x, NS3.x, IE3 and IE4, the less inclined you are to do the work that will also make it viewable in non-traditional browsers, screen readers and handhelds. If people used standards-compliant browsers, then the effort now put into supporting 5 different browsers, could instead be put into supporting 5 different modes of viewing.
"I mean, Jesus H Christ on a motherfucking bike, does this really constitute "news for nerds" ?
What exactly is wrong with IPV4 for Quake ?"
What is wrong with it is the fact that there aren't nearly enough IPv4 addresses to go around. There's an artificial scarcity of addresses that's creating an economy in selling blocks of numbers, which has to be a pretty ludicrous concept when instead we can just make sure there's more numbers than will ever be needed. There's the perpetuation of stupid systems like forcing dialup users to have dynamic addresses. Eventually we will have to switch over to something with a bigger address space. IPv6 is the only viable alternative at the moment, so the more people who are playing with it, programming with it, and generally getting their hands dirty, the smoother the switch-over will be.
"No less than William Gates III (who I normally diagree with vehemently) is on the record as saying 'there is no evidence of consumer demand for an IPv6 offering'"
William Gates III also said that 640k would be enough for everyone.
Of course there's no consumer demand for an IPv6 offering. There's no consumer demand for IPv4 either. Just ask the average consumer if they want IPv4, and they'll say "huh?" There's consumer demand for The Internet, but the consumers don't know, don't care, and don't even think how their packets get from A to B. Thus, it's up to us, the people who actually make this sucker run, to do the dirty work of making sure it will still be running ten years from now.
With regards to the page on the namedroppers list, I'm sorry to disappoint you, but you've just encountered the power of selective reporting. What DJB is describing is most likely the normal operation of a moderated mailing list, as seen from the point of view of a certifiable paranoid.
I've observed how DJB behaves on mailing lists and on Usenet, and I'm willing to bet that if you were moderating a mailing list with him on it, you'd be deleting a significant number of his posts too. He tries to make every forum into a self-aggrandizing soapbox on which to berate the slightest shortcoming in any competing program.
He has the attitude of a zealot - to DJB it's impossible to even imagine that someone might have a different opinion to his own, therefore anyone who disagrees with him is being dishonest. He's on record on separate occasions as repeatedly labeling Weitse Venema (author of tcp wrappers) and Paul Vixie (ISC lead) frauds just because they don't agree with his interpretations of how software should work.
Bernstein writes good software. qmail rocks, and I'm sure djbdns is good too. He also, however, has the worst interpersonal skills I've ever seen on the Internet. I know people who refuse to use qmail, even though they know it's the best MTA for their purposes, purely because its author is such a wanker.
Hands up who remembers DJB's encounter with a.s.r?
The PC is an aberration. It's existed in various forms for about 20 years now, but that doesn't give it the right to exist for 20 more. For most people, the computer is an appliance that does three things. Games, Internet access, and office productivity tasks.
People who read slashdot aren't the general public. Most of the general public DON'T LIKE computers, and would throw them away at the least provocation in exchange for an appliance that could do a few simple things, so long as it did them well, and was cheaper than a PC.
We already see that the vast majority of the gaming market has moved over (or should I say back) from general-purpose computers to the console market. Why? Because for users, consoles are instant-on and no hassles, and for developers they are a stable platform to aim at.
A lot of people have a PC and a games console.
Just like there's a market for dedicated games boxes, there's one for dedicated Internet boxes. An instant-on device that configures its own Internet connection and has a friendly interface should find a market, especially compared to PCs, which are crufty, annoying boxes that are really difficult to set up, and generally have about three times the power that an average user would need.
As far as office productivity goes, the most that home users tend to do with this is load up Word to write letters. Add a simple word processor and a printer interface, and Jane Grandma won't need a PC at all.
The problem with net appliances has been that the hardware is still too expensive. This has meant that you've either ended up with incredibly weak machines that can't run real software, and thus give people a terrible net experience (WebTV), or appliances that have the power to run real Internet applications, but have to be sold at a loss, and therefore get bought out by hobbyists looking for a toy to install Linux on, and who don't care that the hardware isn't as powerful as an off-the-shelf machine.
As processors get further and further into the realm of "power-you-don't-need", net appliances will get cheaper, until they're actually at the point that you can get a net appliance significantly cheaper than an entry-level PC, without noticing it's under-powered by comparison, and without having to have your purchase subsidised.
Give my mother something that can do e-mail, web browsing, and type letters for around US$300 bucks, and she'll be able to throw away the crappy P-100 she uses for her home computing, and she'll thank you profusely.
From reading the comments posted so far, there's a long stream of "So what? Get a life!" posts. To see that sort of thing coming from slashdot readers has got to be the biggest case of "Pot. Kettle. Black" that I've seen in a long while. It seems that even amongst geeks, there continues to be the constant need to place yourself on the next social rung up from the person beside you - to take something that someone else enjoys, and say "Hey, you're just a nerd. You should be doing something cool instead."
I don't play Diablo myself. I didn't even particularly like nethack. But being the sort of person who can happily spend an entire weekend coding, I can understand people who give their spare time away to something they enjoy, and in which they find some kind of challenge and fulfilment. And to have some fuckwits come along and callously erase all that hard work is going to hurt a hell of a lot of people.
Human nature depresses me. I say we take off and nuke the site from orbit, it's the only way to be sure.
The very existence of System.out.println demonstrates that java isn't purely OO.
The java.lang.System class encapsulates the environment in which the application is being run. One property of that environment is an output stream called "standard output". This property becomes the class variable 'out', of type java.io.PrintStream.
You could add levels of indirection, and have a System.getCurrentSystem().getStandardOut(), but that'd change nothing but the amount you'd have to type.
Like all PrintStream objects, out has several overloaded println() methods that allow you to output data to the stream. PrintStream is just another subclass of java.io.OutputStream, which means you if you have a method with a signature public void printToStream(OutputStream out), then you could call printToStream(System.out) in exactly the same way you could call printToStream(new FileOutputStream(myFile))
Could you explain to me what part of this isn't OO?
The US election is a perfect example of what you get when you have two fundamentally bland candidates who totally fail to motivate people. Send people to the polls to choose between two indistinguishable candidates, and guess what? They'll come out 50/50.
...after all of this, there will be only one indisputable fact about the Florida vote: The margin of error was larger than the margin of victory.
It's impossible to find out what "the will of the people" is under these circumstances. No matter how you count, the margin for error will remain higher than the margin of victory. Thus, tossing a coin, asking a lawyer, or taking your life-line and calling a friend are equally valid ways of deciding who gets to be US president.
Of course, the logical thing is to just hold the election over and over again until you poor Americans get it right.
Remove it from the sidebar, using the conveniently-placed "Tabs" button. Voila.
Also, I'd have to check this, but I'm pretty sure that while a sidebar tab is not the visible frame, it's ignored - so while you're not actively looking at the "What's Related" tab, it's not doing anything.
Charles Miller --
Oops, I forgot to add...
on
eLection '04
·
· Score: 1
The ballot papers in Australia would give the average Palm Springs resident a total brain meltdown. The instructions are: "Number every box on the green piece of paper. On the white piece of paper, either place the number '1' in a single box above the line, or number every box below the line."
Charles Miller --
Re:It is compulsory to vote in Australia?
on
eLection '04
·
· Score: 1
It is compulsary to vote in state and federal parliamentary elections, and in referenda. If you do not vote, you are sent a letter asking you to explain why you didn't vote. If you don't have a good excuse (being overseas at the time of the election usually works), you are fined.
However, your obligation as far as voting goes, is to pick up a ballot paper, take it into a booth, and then put the paper in a big cardboard box. What you do in between is not monitored, so nobody ever knows whether you have voted for a candidate, or whether you just write "You all suck" on the paper.
Australian elections also work on a preferential system. You number the candidates from 1 to n. They count up all the '1' votes, and then drop the lowest candidate. They then take the votes of everyone who voted for the lowest candidates, and redistribute them based on the next-highest preference on the ballots. This continues until someone has > 50% of the vote.
You know, this is being covered by every single other news site out there. Slashdot doesn't _have_ to give us a blow-by-blow of the US elections if it doesn't want to.
Personally, I'm just going to hide my head under a pillow and chant "whoever gets in, it's only four years until the next one", like I do with most local elections.
I also submitted a review of this book to Slashdot a week or two ago, but mine got knocked back. My review was substantially more in-depth, but far less complimentary.
Anyway, you can read my review of Homepage Usability here.
Charles Miller
What worries me most is what you see on the front page of the site, namely the logos of a bunch of companies like Rational, Construx and SAP, who have vested interests in software engineering processes. If the committee goes away for a couple of years, comes back with a carbon copy of the Rational Unified Process and tells everyone they need to buy Rational Rose to get a certification, I'm going to be more than a little annoyed.
The basic problem is that there is simply no consensus in the industry as to what constitutes "good engineering" in software, beyond a certain very basic level. We're a very, very young discipline, and unlike structural or electronic engineering the mathematics does not exist to prove what we are doing is right.
In the absence of any real proveability in our craft, all you can do is make broad pronounciations, and then quibble about their interpretations. You can say "testing is good", but you'd never get a room full of programmers to agree whether test-first programming is better than testing completed code, and nobody's yet been able to determine which is more efficient under which circumstances. Similarly, you can say "well-designed code is good", but who's going to moderate the dispute between the CMM waterfall three month design phase group, the moderate Agile "design the module just before you code it" group, and the eXtreme "design is something you achieve as a by-product of merciless refactoring" party.
I have little faith in the mission of this group, as I can't ever see it coming up with a satisfactory document. Either the qualification for being a software engineer will be so broad as to be useless, or (more likely) it will mean that the industry will continue on as it always has, we'll just go back to being called programmers, and spend our time scoffing at certified "software engineers" as followers of an arcane, broken methodology.
Charles Miller
I consider myself a good programmer. It's been my experience that depending on the complexity of the language, it takes between six months to a year of experience in a language before you are fluent. Fluency is not mastery, it's the point at which you can sit in front of the code and write in such a way that you are using the language, not wrestling with it. And you can't write good code when you're fighting the language.
As for reading a language. Sure, you can read any program immediately, provided the syntax is familiar, and the code is well named and well commented. On the other hand, there are always unfamiliar syntaxes - take someone who's only coded in C and Perl, and put them in front of Lisp or Smalltalk, and they'll need a couple of days work just to be able to parse it.
You can learn enough to slap a program together in a week, provided the syntax of the language isn't particularly alien, but it's not going to be one you're proud of the week after, when you've learned a little bit more. You'll know the syntax and control structures. You'll have some idea of the shape of the main libraries, and you'll know where in the documentation to look if you need to know more.
I've done this before - I remember having three days to learn enough of a particular language to fool a customer into thinking I knew what I was doing. And I did, we got the tender, I continued to learn more over the ensuing weeks, and the customer was happy with me. Looking back, my total unfamiliarity with the language probably cost this customer many thousands of dollars in lost productivity, for all the time I took looking up library functions in the language documentation, and all the time I spent inefficiently re-implementing functions that were already available, but that I wasn't aware of enough to know to look for them.
A week of study will qualify you to painstakingly inch through other peoples code with piles of documentation at hand, and get a pretty good gist of what the code is doing. It'll qualify you to write something artificial for your CS class. It'll qualify you to make simple logical changes real code. It will NOT qualify you to write, or make significant changes real code.
The syntax of a language is only the smallest, and easiest part of it to learn. The libraries, the idioms are far more important. Knowing all the weird letters you can stick at the end of a regexp in Perl. Knowing that double-checked locking in Java doesn't work. Knowing which collection in the STL is most suited to the data you're storing. Would you trust the maintenance programmer you've just hired and taught C in a week not to introduce an exploitable buffer overflow?
Charles Miller
I'm with Kent Beck on this one:
I develop Java using IBM's VisualAge for Java. Here's what I do when I find a bug:
I don't try to work out precisely where the bug is. I just set a breakpoint in its general vicinity.
I step through until I find what's going wrong. I make liberal use of my ability to inspect any variable in scope, to highlight pieces of code and evaluate them while the program is halted, or to write random code snippets in the evaluation area, and inspect their results as they execute in the context of the halted program. The big problem with writing printfs is you have to guess (out of everything that's in scope, and every method you're calling) which ones are giving you bogus results. If you knew what the problem is, you wouldn't need the printfs. If you're wrong, you have to write a new batch of printfs and run the whole test again. If you're in the debugger, you can just go through them one by one, from most to least likely.
When I locate the bad code, I fix it from the debugger, save (which drops the stack frame back to the beginning of the method), and let it run. The test then goes green.
I guarantee, using this method, 90% of the time I'll have fixed the bug while you're still writing printfs and scratching your head.
The reason that Microsoft have a monopoly position is that the barrier to entry in the OS market is so immense. Windows is the result of twenty years of coding, legacy applications and market dominance against which you would have to compete if you're an OS startup.
Take, for example, device drivers. The first thing you'd ask when hearing of a new OS is "does it work with my hardware?" Because of Microsoft's market dominance, nobody will release PC hardware without a working set of Windows drivers. On the other hand, if you're developing a new OS, you have to write all the drivers yourself, most of the time going on your hands and knees to the hardware vendors who may or may not release the specs for their device to you.
And if you have overcome the device drivers hurdle, you get the applications hurdle. Each new version of Windows is very, very careful to remain compatible with the applications running in previous versions. Otherwise they wouldn't sell. Ditto, nobody but a few hobbyists are going to buy an OS without any applications.
When Microsoft was starting out, other people wrote applications for them. Visicalc was ported to MS-DOS. Lotus 1-2-3 was the IBM PC's killer application. On the back of that, Microsoft used their profits to build their own applications suite, and through bundling and leveraging their OS dominance, they managed to subsume the productivity applications market until there was only Office left.
People don't get trained in Word Processing any more, they get trained in Word. If you're running an office, you want your staff to be as productive as possible, so if you hire someone with Word Processing experience (i.e. Word experience), you'd better be giving them Word to work with, or they'll be working inefficiently, and complaining that the replacement sucks, even if it has identical (or better) features, because it works differently.
So if you want to compete in the OS market, you'd better also produce something that works just the same as Word, and interoperates flawlessly with it. This is tough, since MS Word is a constantly moving target of file-formats and features with a budget behind it that dwarfs anything that a competing company can attempt.
You'd better produce it yourself, too. Unlike in the early days of DOS, Windows 3.1 and MacOS, you're not going to find another start-up willing to write the next Killer App for your Operating System, because it's assumed no matter how good you are, you're going to fail. Nobody producing commercial software is going to bother writing against an OS nobody uses, they're going to be putting all their resources into making sure the Windows version works properly, because that's what people use.
In the meantime, do you have a killer app that you're writing that's going to revolutionise the industry? Your business plan had better include cashing out in five years, because in twelve months Microsoft will have produced a cheap imitation of your product and bundled it with Windows. In two years, their product will be close enough to yours that you'll start losing market share as more and more people stop bothering to download your better software, and in five years, you'll be left behind because you just don't have the resources to compete.
The barrier to entry is too high.
The only alternative OS that survives in the consumer realm is MacOS. It does so because the Mac started out before Microsoft had consolidated their monopoly position, and because you can still get Office on it. Even then, Apple only barely hang on to solvency by the skin of their teeth, again and again.
Let's name the most common "alternative" applications installed on Windows PCs.
1. Winamp - free, propped up by AOL/TW, threatened by the integration of Media Player and Win XP.
2. ICQ - free, propped up by AOL/TW, pretty much killed by AOL IM, both of which are now threatened by the integration of MSN Messenger with Win XP - if everyone's got a passport account and MSN Messenger, another IM application is unnecessary.
3. Netscape - free, propped up by AOL/TW, annihilated by the bundling of MSIE with Windows 95/98.
4. RealPlayer - free, installed with Netscape, threatened by the bundling of Media Player with XP.
That's a pretty scary pattern. It tells us that in the real world, where the only viable consumer platform is Windows, the only people who can survive writing software for Windows are either the writers of esoteric, niche applications that haven't appeared on Microsoft's radar yet, or people who are willing to give their software away for free (libre).
If you have to give your software away, you have to find some other revenue model, which is why all the non-Microsoft applications are covered in advertisements, "shop now" buttons and unwanted features that point to stuff that the software publisher may get some revenue from. And because of this, people are further driven away from the non-MS applications, because the advertising model is so intensely annoying.
It's incredibly anti-competetive. Internet Explorer, Media Player, MSN Messenger, Hotmail, Passport. None of these things are free. Whenever you buy a license for Windows, you're paying for ALL of these things. That's what bundling is. Take a product that people have to buy, and tie it to products they don't in order to undersell, starve and kill your competition.
If you prefer Mozilla, Quicktime, Winamp, ICQ/AOL-IM/Jabber and use your own email service, you simply can't choose not to pay for Explorer, Media Player, Messenger, Hotmail and Passport. The major applications I use at work only run on Windows, and thus, despite wanting none of them, they're still paying for Internet Explorer, Media Player, Messenger, Hotmail and Passport.
The only way my employer can do business is by subsidising Microsoft's effort to stamp out competing applications, even though we don't use, nor want the bundled software we're paying for. Microsoft have you by the balls. Anything the US justice department can do to loosen that grip, up to and including burying Bill Gates up to his neck by a nest of fire ants is fine by me.
Charles Miller
Given that Microsoft still run their business on AS/400's, it's probably crossed their mind already :)
In late breaking news, conclusive studies reveal an even more concrete link between trolling slashdot, and having no sexual behaviour at all.
Charles Miller
--
The minimum memory you can stick in a zSeries is 1 gigabyte. The maximum is 64 gigabytes.
Storage throughput has similarly increased since your employer purchased their dinosaur, I just couldn't find figures for what they are now.
Charles Miller
--
Smeg.
Don't ever post when you've just woken up.
--
Tomcat is the reference implementation of the most recent Servlet/JSP standards. As such, it has undergone very little optimization, and isn't particularly friendly to administer. Scratch the surface of anyone who's had to run Tomcat, and you'll find someone who's had a variety of CLASSPATH, speed and reliability problems.
<p>Don't use Tomcat in anything but a development environment, or to test things against the standard implementation. There are many free and non-free alternatives available.
<p>The whole point of the J2EE standards is that the techniques that you can use to deploy an application on Tomcat should work on <i>any</i> J2EE compliant servlet container. The webapp filesystem layout Tomcat uses, which is explained in this article, is really just a Sun standard available on most modern java application servers.
<p>Charles Miller
--
Charles Miller
--
Yeah, it's funny how pretty much an identical submission ended up in Plastic a day ot two ago.
Charles Miller
--
- Products such as Websphere can be released on one OS platform (Linux) and run on IBM's entire range of hardware.
- Linux has a lot more "geek momentum" than AIX. The guys in the server room would probably be much more excited to get a kick-ass RS/6000 if it meant they could stick Linux on it.
- It gives them something to talk about in their upcoming advertising campaign.
- IBM is a hardware company. To them, software is a way to sell hardware. If Linux is popular, then it's in IBM's interest to make sure it runs on their most expensive kit. They'd rather sell an RS/6000 than a Netfinity. (this also explains their porting it to S/390 first)
- I wouldn't be surprised if the long term plan was to fold the enterprise functionality of AIX into Linux, have the OS maintained by the open source community with much less IBM manpower than AIX takes, and then put AIX out to pasture.
Charles Miller--
I live In the VisualAge debugger. The ability to edit the source, hit save, have the changes linked into the running application, and immediately step over the code I just wrote to make sure it does what I want it to is pretty damn good. If you're unsure of exactly what to do with a method (say you're working with some unfamiliar API or toolkit), you can just leave it empty, set a breakpoint, and then be able to inspect all the objects available to you while you write the method in the debugger's source pane.
Just set the halt contains some very, very good advice for working in this kind of environment. (Okay, it's about SmallTalk, but VAJava is really VASmalltalk with another language kludged onto it)
Charles Miller
--
One of the great advances of web standards is that they have re-introduced the strict separation of structural markup from display markup. This effort is actually a bonus for the vision-impaired, or handheld users, because the more standards-compliant a site is, the more likely it is to be possible to get some kind of coherent content out of a site after the "designed for 800x600 graphical displays" styles have been stripped away.
This is one of the real problems with the current system. The more you have to tweak your site just so it'll work in NS4.x, NS3.x, IE3 and IE4, the less inclined you are to do the work that will also make it viewable in non-traditional browsers, screen readers and handhelds. If people used standards-compliant browsers, then the effort now put into supporting 5 different browsers, could instead be put into supporting 5 different modes of viewing.
Charles Miller
--
What is wrong with it is the fact that there aren't nearly enough IPv4 addresses to go around. There's an artificial scarcity of addresses that's creating an economy in selling blocks of numbers, which has to be a pretty ludicrous concept when instead we can just make sure there's more numbers than will ever be needed. There's the perpetuation of stupid systems like forcing dialup users to have dynamic addresses. Eventually we will have to switch over to something with a bigger address space. IPv6 is the only viable alternative at the moment, so the more people who are playing with it, programming with it, and generally getting their hands dirty, the smoother the switch-over will be.
William Gates III also said that 640k would be enough for everyone.
Of course there's no consumer demand for an IPv6 offering. There's no consumer demand for IPv4 either. Just ask the average consumer if they want IPv4, and they'll say "huh?" There's consumer demand for The Internet, but the consumers don't know, don't care, and don't even think how their packets get from A to B. Thus, it's up to us, the people who actually make this sucker run, to do the dirty work of making sure it will still be running ten years from now.
Charles Miller
--
With regards to the page on the namedroppers list, I'm sorry to disappoint you, but you've just encountered the power of selective reporting. What DJB is describing is most likely the normal operation of a moderated mailing list, as seen from the point of view of a certifiable paranoid.
I've observed how DJB behaves on mailing lists and on Usenet, and I'm willing to bet that if you were moderating a mailing list with him on it, you'd be deleting a significant number of his posts too. He tries to make every forum into a self-aggrandizing soapbox on which to berate the slightest shortcoming in any competing program.
He has the attitude of a zealot - to DJB it's impossible to even imagine that someone might have a different opinion to his own, therefore anyone who disagrees with him is being dishonest. He's on record on separate occasions as repeatedly labeling Weitse Venema (author of tcp wrappers) and Paul Vixie (ISC lead) frauds just because they don't agree with his interpretations of how software should work.
Bernstein writes good software. qmail rocks, and I'm sure djbdns is good too. He also, however, has the worst interpersonal skills I've ever seen on the Internet. I know people who refuse to use qmail, even though they know it's the best MTA for their purposes, purely because its author is such a wanker.
Hands up who remembers DJB's encounter with a.s.r?
Charles Miller
--
The PC is an aberration. It's existed in various forms for about 20 years now, but that doesn't give it the right to exist for 20 more. For most people, the computer is an appliance that does three things. Games, Internet access, and office productivity tasks.
People who read slashdot aren't the general public. Most of the general public DON'T LIKE computers, and would throw them away at the least provocation in exchange for an appliance that could do a few simple things, so long as it did them well, and was cheaper than a PC.
We already see that the vast majority of the gaming market has moved over (or should I say back) from general-purpose computers to the console market. Why? Because for users, consoles are instant-on and no hassles, and for developers they are a stable platform to aim at.
A lot of people have a PC and a games console.
Just like there's a market for dedicated games boxes, there's one for dedicated Internet boxes. An instant-on device that configures its own Internet connection and has a friendly interface should find a market, especially compared to PCs, which are crufty, annoying boxes that are really difficult to set up, and generally have about three times the power that an average user would need.
As far as office productivity goes, the most that home users tend to do with this is load up Word to write letters. Add a simple word processor and a printer interface, and Jane Grandma won't need a PC at all.
The problem with net appliances has been that the hardware is still too expensive. This has meant that you've either ended up with incredibly weak machines that can't run real software, and thus give people a terrible net experience (WebTV), or appliances that have the power to run real Internet applications, but have to be sold at a loss, and therefore get bought out by hobbyists looking for a toy to install Linux on, and who don't care that the hardware isn't as powerful as an off-the-shelf machine.
As processors get further and further into the realm of "power-you-don't-need", net appliances will get cheaper, until they're actually at the point that you can get a net appliance significantly cheaper than an entry-level PC, without noticing it's under-powered by comparison, and without having to have your purchase subsidised.
Give my mother something that can do e-mail, web browsing, and type letters for around US$300 bucks, and she'll be able to throw away the crappy P-100 she uses for her home computing, and she'll thank you profusely.
Charles Miller
--
From reading the comments posted so far, there's a long stream of "So what? Get a life!" posts. To see that sort of thing coming from slashdot readers has got to be the biggest case of "Pot. Kettle. Black" that I've seen in a long while. It seems that even amongst geeks, there continues to be the constant need to place yourself on the next social rung up from the person beside you - to take something that someone else enjoys, and say "Hey, you're just a nerd. You should be doing something cool instead."
I don't play Diablo myself. I didn't even particularly like nethack. But being the sort of person who can happily spend an entire weekend coding, I can understand people who give their spare time away to something they enjoy, and in which they find some kind of challenge and fulfilment. And to have some fuckwits come along and callously erase all that hard work is going to hurt a hell of a lot of people.
Human nature depresses me. I say we take off and nuke the site from orbit, it's the only way to be sure.
Charles Miller
--
The java.lang.System class encapsulates the environment in which the application is being run. One property of that environment is an output stream called "standard output". This property becomes the class variable 'out', of type java.io.PrintStream.
You could add levels of indirection, and have a System.getCurrentSystem().getStandardOut(), but that'd change nothing but the amount you'd have to type.
Like all PrintStream objects, out has several overloaded println() methods that allow you to output data to the stream. PrintStream is just another subclass of java.io.OutputStream, which means you if you have a method with a signature public void printToStream(OutputStream out), then you could call printToStream(System.out) in exactly the same way you could call printToStream(new FileOutputStream(myFile))
Could you explain to me what part of this isn't OO?
Charles Miller
--
The US election is a perfect example of what you get when you have two fundamentally bland candidates who totally fail to motivate people. Send people to the polls to choose between two indistinguishable candidates, and guess what? They'll come out 50/50.
There's a good article on feed that points out:
It's impossible to find out what "the will of the people" is under these circumstances. No matter how you count, the margin for error will remain higher than the margin of victory. Thus, tossing a coin, asking a lawyer, or taking your life-line and calling a friend are equally valid ways of deciding who gets to be US president.
Of course, the logical thing is to just hold the election over and over again until you poor Americans get it right.
Charles Miller
--
Remove it from the sidebar, using the conveniently-placed "Tabs" button. Voila.
Also, I'd have to check this, but I'm pretty sure that while a sidebar tab is not the visible frame, it's ignored - so while you're not actively looking at the "What's Related" tab, it's not doing anything.
Charles Miller
--
The ballot papers in Australia would give the average Palm Springs resident a total brain meltdown. The instructions are: "Number every box on the green piece of paper. On the white piece of paper, either place the number '1' in a single box above the line, or number every box below the line."
Charles Miller
--
It is compulsary to vote in state and federal parliamentary elections, and in referenda. If you do not vote, you are sent a letter asking you to explain why you didn't vote. If you don't have a good excuse (being overseas at the time of the election usually works), you are fined.
However, your obligation as far as voting goes, is to pick up a ballot paper, take it into a booth, and then put the paper in a big cardboard box. What you do in between is not monitored, so nobody ever knows whether you have voted for a candidate, or whether you just write "You all suck" on the paper.
Australian elections also work on a preferential system. You number the candidates from 1 to n. They count up all the '1' votes, and then drop the lowest candidate. They then take the votes of everyone who voted for the lowest candidates, and redistribute them based on the next-highest preference on the ballots. This continues until someone has > 50% of the vote.
Charles Miller
--
You know, this is being covered by every single other news site out there. Slashdot doesn't _have_ to give us a blow-by-blow of the US elections if it doesn't want to.
Personally, I'm just going to hide my head under a pillow and chant "whoever gets in, it's only four years until the next one", like I do with most local elections.
Charles Miller
--