When Code Red first came out, my work computer was a Linux box which ran VMWare so that I could run Outlook (required by the company) and occasionally test under Windows. Because 99% of the time I was just using my virtual PC as an Outlook client, I completely forgot that it was running IIS and all the other M$ junk.
Needless to say, I was surprised to find that my Linux box was one of the machines that got hit by Code Red. The sysadmins probably had to tell me three times before I'd believe it.
This is where the term Virus came from. It could "spread" from one host to another. And each time, it could inflict more damage until it killed the host computer.
Actually, "virus" has to do more with how they reproduce than the fact that they spread. Computer viruses reproduce like biological viruses: by inserting their code (or DNA) into a host, and then being read as a part of the host. Worms, on the other hand, really are self-replecating, since they are standalone programs.
Whether or not any infectious program written in an interpreted language is a virus depends on your point of view, since you may or may not consider them standalone, especially if the OS can execute it as transparently as a binary.
Oils are used as a base ingrediant in plastics. While we may someday move a hyrdogen economy, and we might even eventually get away from the internal combustion engine. Were not about to stop using plastics. Petroleum products go into a whole lot more than our gas tank, something many people are oblivious too.
Petroleum is hardly the only source of oil. Ever since I was a kid the nice people at the Minnesota State Fair were handing out plastic pens made from corn. Right now polymers made from corn and soybeans have relatively few applications (since it's more expensive to grow oil than to pump it), but they have a number of advantages, especially when you want a material that will eventually decompose. With plant-derived plastics, you have control over how biodegradable the polymer will be.
I've visited a few CAVE's in my time as well, and I find absolutely nothing wrong with the concept that the primary function of a CAVE is for the expression of art.
Here's what I just emailed to them, cc'ing the IT directors of Mass. and Minnesota:
Subject: Linux is not a 'boondoggle'
Dear sirs,
I would like to respond to your press release 'Mass. Taxpayers Hurt by Proposed Software Monopoly'. In that press release, you claim that by requiring open source techonolgies, such as Linux, costs to taxpayers will increase. I strongly disagree with that assessment, and I wish that my own state, Minnesota, would take similarly bold cost-saving measures.
Linux and open source are not monopolies-- there are many companies that compete to sell Linux products and support-- and they are by no means boondoggles. Linux and open source software are used prominantly by such high-tech companies as Yahoo, Amazon, Google, and Apple Computer. Even Microsoft has been known to use open source software (including BSD Unix, a Windows and Linux competitor) in its operations.
I work for a five-person high-tech service-oriented company as the guy who writes our support software. We're a start up with very little money, so every employee constantly looks at ways to cut costs and reduce waste. All of our furniture, plus our printer and copier, was purchased used, at eBay, garage sales, or local auctions. If government can cut waste by emulating the private sector, they should follow our lead!
We have one desktop or laptop computer for each employee: the CEO has his personal Apple Powerbook, two employees have low-end Windows laptops, and the two techies (myself and the system administrator) have the cheapest desktops we could find, with Windows ripped out and replaced with Linux.
Our server room houses five computers, three of which run Linux. We plan to get rid of one of our non-Linux machines and put its functionality on one of the Linux machines. We also own two iMacs we use for trade shows. (These were chosen because they are eye-catching; the price of both computers was less than the cost of running a booth at one trade show.)
For us, Linux has been a big win in keeping costs down. In the server room, we can do more on cheaper harware. On desktops, nearly all of our support problems have been related to viruses, worms, spyware, and trojan horses on our two Windows computers. We can keep most of it out with anti-virus software, but not all. We've considered switching the Windows laptops over to a commercial version of Linux (ApplixWare), but we're holding off for now because the change would be as disruptive as upgrading to a new version of Windows.
Granted, we're not a typical organization. Three-fifths of the company is tech savvy enough to diagnose their own desktop problems, and support costs are built into salaries we can't avoid. However, we know exactly how much time we're spending on desktop support, and we know exactly how much money we're spending on software. Linux and open source software has three major advantages: up-front cost, ease of support, and predictability of upgrade costs. It's a big win on all three.
I've studied the issues and have come to the conclusion that open source software is no more expensive to support, and often far cheaper. An entry-level Linux administrator often demands a higher wage than an entry-level Windows administrator, but employers demand more from the Linux administrator. Linux desktops can be administered remotely more effectively than Windows, so a Linux administrator can take care of an entire company's computers without leaving his/her office. Thus, far more machines can be serviced per administrator. Also, Linux machines can be locked down far more effectively, so damage from employees customizing their computers (either deliberately or due to email viruses, if they were to exist on Linux) can be minimized.
As you're aware, governments sometimes make really dumb decisions. To minimize this, they often make policy decisions to limit decision-making. These aren't always perfect. For example, when times are tough they might implement a hiring free
The weather is awesome! In fact,
the sun is finally visible starting a few days ago! A nice, slow (~1/365th the rate up north) sunrise with the sun circling the horizon. Too bad it's cloudy and windy so much. Oh, and it's still cold, even though spring has arrived.
Buy an iBook or Powerbook. They're pretty cheap, lovely to use, and you've got a good excuse for needing one. If your budget doesn't allow, check on eBay for a used G4 system (an eMac, for instance) and grab it instead.
Just out of curiosity I looked on eBay under 'iMac' and found a 333Mhz one going for under $200, with 2 hours left in the auction. That's good enough to run OS X and OS 9 with all the browsers you might want. I don't think there ever was an iMac without Ethernet, so you're good to go in an office environment. My three year old PowerBook is the same speed (but with tons more memory) and I keep looking for an excuse to replace it with a fancier one. Unfortunately, that thing runs pretty well with the newest software, has had Wi-Fi since the day I bought it, and plays DVDs just fine.
Here, while Slashdotters keep saying that M$ will fall or fade or be bitten, they've added $10 Billion to their $40 Billion cash hoard, DURING A CRISIS THAT'S PUTTING EVERYONE ELSE OUT OF BUSINESS.
That's not unlike IBM at its mainframe peak, when its doom to PCs was being sealed. Nor is it unlike Apple, which had its most profitable years when it was selling bland, beige boxes and loosing market share like nobody's business.
Nor is it unlike most economic downturns, when worker productivity is at its highest, and profits-per-sale are exceptional for the same reason. The reason? Fewer employees and less investment in new products.
The point is that present profits are often not a good indication of future success, and that profit and market share aren't necessarily linked. M$ hasn't found a way to counteract the fundamental economic and political advantages of open source software. Nor do I think they will.
... but in the case of older people, who may be using older, hand-me-down, or whatever-they-could-find-in-the-store computers, they're likely to be running Netscape 4 or a similar vintage AOL or IE. My advice would be:
do the CSS thing
AND use vintage browser workarounds
Hmmm... I think wines age better than web browsers, but in this case your audience has vintage both.
Did anyone else notice that this refers to blocklists, when the more common terminology is blacklist?
Just in case I was missing some new nomenclature, I checked Google. 'Spam Blacklist' yields 63,700 results and a category (Computers > Internet > Abuse > Spam > Blacklists) whereas 'Spam blocklist' yields 3,9600 results. Oddly, it is used at least a little: there's a blocklist.com, for example.
Although the issues involved in this case are slightly different, The term 'Software Archaeology' (or at least 'Programmer Archeologist') might come from Vernor Vinge's book 'A Deepness in the Sky'.
In that book, code-as-data is taken to an extreme, and the best programmers have the title "Programmer Archaeologist", since they spend little time writing new code; instead they look through old code to find something written for a similar situation. It isn't that old programmers are better-- it's that the software contains facts and information that are of value.
Whereas on Star Trek someone might look through an ancient captain's log to learn about a bizarre planet/new race/weird disease/strange technology, in Vinge's book that sort of specialized information is stored in the source code for software that was written at the time to deal with the situation.
If the code is structured to make it easy to differentiate between the proprietary part and the open source part, this shouldn't be a problem. If you don't, it won't just be a legal problem, it will be a mantainance nightmare.
Give the proprietary section and the open source sections clearly different names, place the source for each in different places with different file names, and use those names in the contract.
For example, in Java, I would have two separate code bases: com.thecompany and org.myproject. I would keep a separate source directory for each, including separate build scripts (although the proprietary one might call the OSS one.) The legalese would refer to the "org.myproject" code by name.
Finally, when in doubt, place new code in the proprietary base. You can always migrate it into the OSS one (I hope!), but once in the OSS one it's hard to get out. That's true of any library vs. application or private vs. protected vs. public (source, not legalese) decision: start restrictive, and migrate out.
People tend to forget that the Midwest (around the Twin Cities in particular) was one of the big homes of computing during the Age of Mainframes (1950s-70s.) Control Data, Cray, and Sperry (later Sperry-Univac) were all Twin Cities companies. [More info]
Bob McCoy, the curator of that ex-museum, has been known to do private phernology readings using his
psychograph machines, circa 1905. I don't know if he still does, but it wouldn't hurt to give him a call if you're in town. It's the closest experience to having your mind read/wiped/transplanted by a Victorian mad scientist that you can get.
He's an interesting guy. Not only does he collect quackery and old typesetting machines, he's also an ordained Unitarian Universalist minister. When a geeky friend of mine was getting married several years ago, he was quite concerned about finding a minister with a theology and temperment he could relate to. I suggested Bob, the wedding was a success, and they're still happily married.
Greyscale may be great for simulating perfect color blindness, but lousy for the common case. For partially color-sighted people (which includes nearly all color blind people) as well as fully-sighted people, the colors actually distract from brightness variations. We unfortunate slightly color blinded people are too distracted by color saturation to see subtle differences which you may be depending on.
A better solution is to use a specialized palette, or to convert reds to greens (RGB-wise, not perceptually)-- and even then keep in mind that someone's gamma may be hideously off.
In the end, it's best to design with multiple cues: textual, color (hue, brightness, AND saturation), iconic, spacial (size & location), and contextual (grouping, logical ordering, etc.) This takes care of not only color blindness, but all the other physical and mental disabilities-- not to mention all the simulated disabilities that people have when they are inattentive or in a hurry.
Except that they don't always. Try minimizing iTunes. Not only do the hints go away, the buttons move from horizontal to vertical. I can't tell you how many times I've closed an iTunes window trying to un-minimize it.
It's not an OS "problem" -- it's a design issue. The "desktop" is designed to be a security boundary within which programs can send each other I/O. If you insist on running a privileged program within the desktop, you deserve what's coming.
The original author even indicated that Unix/X11 probably suffers from the same issue, except there's no exploit code yet. Anyway, it's like running "pine" as root, and then blaming Unix when the user shells out somehow.
This is a well-known and very old problem with the design of X. I heard about it in college, back in the early '90s. If you were to design a windowing system these days, you might be smart enough not to use function pointer addresses in shared memory for interprocess communications. But back when X (and windows) were first desgined, they had neither CPU cycles nor the memory to do it right. Arguably X had less excuse for poor security, since it was designed as a multi-user system for running GUIs across the Internet.
At the beginning of the article it says "IBM Japan Ltd and Oki Electric Industry Co have won a 188 million yen ($1.59 million) contract". At the end it says "The new system... is expected to halve the network's operating costs to around 350 billion yen a year".
I suspect that there is a typo in there; you don't typically spend x to produce a system that costs 2000*x to operate.
Is it just me, or is it a bad idea to name an OS update after Smeagol? He killed his brother, took the Ring(which corrupted him), lost the Ring, finds the boys and leads them to be eaten. Failing that, in his jubilation after biting off Frodo's finger, accidentally kills himself and destroys everything immediately around him. This sounds more like a Windows update to me.
Yeah, but it will have great Tolkien Ring support!
...so you can have 1 developer using Perl, another using C#. Try that in Java...
Try having 2 developers write in Perl. That can be just as unmaintainable!
Seriously, even when it's just me writing in two languages, the result can be a hideously disorganized mess.
Where I'm working now, I use Java and JSP for most things, and we're trying to migrate shell scripts into Java and Ant tasks. We started out using Python and Zope, but Java seemed more natural for the task at hand.
The factors that drive my workplace decision making are:
If I'm hit by a bus, how long would it take for someone to figure out what I was doing? Java is highly structured for this, from Javadoc to the hierarchical layout of the source code. Perl and Python are not. C#, from what I've heard, is similar to Java in this regard.
Does the development environment support best practices? In particular: unit testing, version control, and object/relational mapping. Version control works for any language. Unit testing is arguably best supported by Java, given the breadth of tools and people working on it. I have yet to find an object/relational tool that works as well as NeXT's environment did, though Java is getting there.
Is code succinct, legible, and well-structured? From the samples I've seen, C# has a better getter/setter grammar, while Java has more succinct documentation grammar.
Does it run on whatever we have? We have some hardware that requires Sparc. However, most of our servers are x86/Linux-- they're cheap and our admin trusts them to be secureable..NET obviously fails in this regard.
How good are the support libraries? Java beats the pants off of everything else I've seen. My pattern is all too often (1) discover I need something (2) write a half-assed implementation (3) discover that the Apache Foundation already has a well-written, well-documented, open source implementation.
Every language annoys me in some way, but for the sort of server-side, cross-platform code I'm writing these days, Java is less annoying than the alternatives. But perhaps the thing I love the most is that best practices often show up first in Java. A vibrant open source community, which includes some of the best brains in the industry, is a dream to take advantage of. (Perl has CPAN, which is great, but it has the feel of a collection of weekend projects.) Java has the feel of a healthy capitalist economy, with everything from Wall Street (Apache) to kids selling lemonaide on the sidewalk.
I'm not at all concerned that Apple will be hurt by competing against an overwhelming army of Windows developers.
In my experience, more developers just means a bigger project-- whether the task is big or not. Big projects are multi-fasceted, with lots of internally extensible components. The extensibility may be useful, but often it just serves to make it possible for lots of programmers to work on it independantly.
One good example of this is operating systems. Windows XP is huge. It feels huge. The design is centered around trying to make its zillions of features accesible-- using wizards, generic tree views, AI that tries to second-guess you etc. And I'm not talking components like device drivers-- I'm talking the higher level OS features. This is typical for huge projects. OS X does pretty much the same things, yet the design feels simple. Where Windows uses generic components (tree views, etc.), OS X frequently uses a GUI specifically designed for each particular feature. The Preferences window resizes to exactly fit a component, rather than leaving holes to fit unused features. These are signs of a small project. The sort of tight coordination required for that degree of polish-- the appearance that every decision passes through one look-and-feel tyrant-- doesn't scale.
An extreme example of something that feels huge (which I actually use) is NetBeans, Sun's open source Java IDE. Everything is done with a generic component, which makes everything feel thrown together and nothing is easy to find. There's no designer choosing what features to point out and which ones to bury.
A web browser has two fundamental parts: standards handling (HTML, HTTP, XML, CSS, images, etc.), and the GUI. In the case of standards handling, Apple is borrowing from KDE-- so they have Linux geeks worrying about compliance for them. That sort of thing is done well by a large, distributed group.
Apple's principal contribution is an Cocoa wrapper for the web libraries and a GUI. Each of these tasks are best suited for a small group. They each succeed best when they have the consistent feel of having been designed by one person.
PNGs never caught on because IE doesn't support them
PNGs will never catch on until M$ supports all their features.
I can't get PNGs to work
The fact of the matter is, PNGs work great as a drop-in replacement for GIFs. If you limit yourself to what GIFs can do, IE 4.x and Netscape 4.x can use them just fine. And those browsers have just about disappeared from old age.
Of course, if you create a 24-bit PNG to compete with an 8-bit GIF, the GIF will be smaller. Otherwise the PNG will be significantly smaller. If you use gamma correction in the PNG, weird things can happen when people have their gamma misconfigured.
In my own tests a year ago, IE 5.5 on Windows and Mac, as well as Netscape 7 and Mozilla (on Windows, Mac and Linux), all browsers did just fine with 8-bit images, 24-bit images, as well as alpha transparency. That last one is really, really cool looking and everyone should try it.
My theory is that few people use PNGs because most of the HTML books out there recommend GIFs because that's what the authors learned and nobody has bothered to correct them.
Did anyone else read this and immediately parse this as something out of Vernor Vinge's
A Deepness in the Sky?
The book describes a species of aliens who see in many more colors than we do. One color, commonly found in sunsets, is translated into English as "plaid."
If you haven't read it already, I highly recommend it. It's arguably the best book by one of the brightest authors out there. He's the only author where I can't find anything to quibble about concerning his computer science.
[Sample Chapter]
When Code Red first came out, my work computer was a Linux box which ran VMWare so that I could run Outlook (required by the company) and occasionally test under Windows. Because 99% of the time I was just using my virtual PC as an Outlook client, I completely forgot that it was running IIS and all the other M$ junk.
Needless to say, I was surprised to find that my Linux box was one of the machines that got hit by Code Red. The sysadmins probably had to tell me three times before I'd believe it.
Whether or not any infectious program written in an interpreted language is a virus depends on your point of view, since you may or may not consider them standalone, especially if the OS can execute it as transparently as a binary.
Petroleum is hardly the only source of oil. Ever since I was a kid the nice people at the Minnesota State Fair were handing out plastic pens made from corn. Right now polymers made from corn and soybeans have relatively few applications (since it's more expensive to grow oil than to pump it), but they have a number of advantages, especially when you want a material that will eventually decompose. With plant-derived plastics, you have control over how biodegradable the polymer will be.
I assume you mean you can't buy cigarettes. That means something completely different in the USA.
Here's what I just emailed to them, cc'ing the IT directors of Mass. and Minnesota:
Subject: Linux is not a 'boondoggle'
Dear sirs,
I would like to respond to your press release 'Mass. Taxpayers Hurt by Proposed Software Monopoly'. In that press release, you claim that by requiring open source techonolgies, such as Linux, costs to taxpayers will increase. I strongly disagree with that assessment, and I wish that my own state, Minnesota, would take similarly bold cost-saving measures.
Linux and open source are not monopolies-- there are many companies that compete to sell Linux products and support-- and they are by no means boondoggles. Linux and open source software are used prominantly by such high-tech companies as Yahoo, Amazon, Google, and Apple Computer. Even Microsoft has been known to use open source software (including BSD Unix, a Windows and Linux competitor) in its operations.
I work for a five-person high-tech service-oriented company as the guy who writes our support software. We're a start up with very little money, so every employee constantly looks at ways to cut costs and reduce waste. All of our furniture, plus our printer and copier, was purchased used, at eBay, garage sales, or local auctions. If government can cut waste by emulating the private sector, they should follow our lead!
We have one desktop or laptop computer for each employee: the CEO has his personal Apple Powerbook, two employees have low-end Windows laptops, and the two techies (myself and the system administrator) have the cheapest desktops we could find, with Windows ripped out and replaced with Linux.
Our server room houses five computers, three of which run Linux. We plan to get rid of one of our non-Linux machines and put its functionality on one of the Linux machines. We also own two iMacs we use for trade shows. (These were chosen because they are eye-catching; the price of both computers was less than the cost of running a booth at one trade show.)
For us, Linux has been a big win in keeping costs down. In the server room, we can do more on cheaper harware. On desktops, nearly all of our support problems have been related to viruses, worms, spyware, and trojan horses on our two Windows computers. We can keep most of it out with anti-virus software, but not all. We've considered switching the Windows laptops over to a commercial version of Linux (ApplixWare), but we're holding off for now because the change would be as disruptive as upgrading to a new version of Windows.
Granted, we're not a typical organization. Three-fifths of the company is tech savvy enough to diagnose their own desktop problems, and support costs are built into salaries we can't avoid. However, we know exactly how much time we're spending on desktop support, and we know exactly how much money we're spending on software. Linux and open source software has three major advantages: up-front cost, ease of support, and predictability of upgrade costs. It's a big win on all three.
I've studied the issues and have come to the conclusion that open source software is no more expensive to support, and often far cheaper. An entry-level Linux administrator often demands a higher wage than an entry-level Windows administrator, but employers demand more from the Linux administrator. Linux desktops can be administered remotely more effectively than Windows, so a Linux administrator can take care of an entire company's computers without leaving his/her office. Thus, far more machines can be serviced per administrator. Also, Linux machines can be locked down far more effectively, so damage from employees customizing their computers (either deliberately or due to email viruses, if they were to exist on Linux) can be minimized.
As you're aware, governments sometimes make really dumb decisions. To minimize this, they often make policy decisions to limit decision-making. These aren't always perfect. For example, when times are tough they might implement a hiring free
Glad you asked!
Just out of curiosity I looked on eBay under 'iMac' and found a 333Mhz one going for under $200, with 2 hours left in the auction. That's good enough to run OS X and OS 9 with all the browsers you might want. I don't think there ever was an iMac without Ethernet, so you're good to go in an office environment. My three year old PowerBook is the same speed (but with tons more memory) and I keep looking for an excuse to replace it with a fancier one. Unfortunately, that thing runs pretty well with the newest software, has had Wi-Fi since the day I bought it, and plays DVDs just fine.
Nor is it unlike most economic downturns, when worker productivity is at its highest, and profits-per-sale are exceptional for the same reason. The reason? Fewer employees and less investment in new products.
The point is that present profits are often not a good indication of future success, and that profit and market share aren't necessarily linked. M$ hasn't found a way to counteract the fundamental economic and political advantages of open source software. Nor do I think they will.
I know I can't sign my name with the mouse. I'm left handed, but I use my right hand for the mouse.
It's a habit I've had since my dad bought a 128k Macintosh in 1984. The mouse cord simply wouldn't strech over to the left side.
Hmmm... I think wines age better than web browsers, but in this case your audience has vintage both.
Just in case I was missing some new nomenclature, I checked Google. 'Spam Blacklist' yields 63,700 results and a category (Computers > Internet > Abuse > Spam > Blacklists) whereas 'Spam blocklist' yields 3,9600 results. Oddly, it is used at least a little: there's a blocklist.com, for example.
Although the issues involved in this case are slightly different, The term 'Software Archaeology' (or at least 'Programmer Archeologist') might come from Vernor Vinge's book 'A Deepness in the Sky'.
In that book, code-as-data is taken to an extreme, and the best programmers have the title "Programmer Archaeologist", since they spend little time writing new code; instead they look through old code to find something written for a similar situation. It isn't that old programmers are better-- it's that the software contains facts and information that are of value.
Whereas on Star Trek someone might look through an ancient captain's log to learn about a bizarre planet/new race/weird disease/strange technology, in Vinge's book that sort of specialized information is stored in the source code for software that was written at the time to deal with the situation.
If the code is structured to make it easy to differentiate between the proprietary part and the open source part, this shouldn't be a problem. If you don't, it won't just be a legal problem, it will be a mantainance nightmare.
Give the proprietary section and the open source sections clearly different names, place the source for each in different places with different file names, and use those names in the contract.
For example, in Java, I would have two separate code bases: com.thecompany and org.myproject. I would keep a separate source directory for each, including separate build scripts (although the proprietary one might call the OSS one.) The legalese would refer to the "org.myproject" code by name.
Finally, when in doubt, place new code in the proprietary base. You can always migrate it into the OSS one (I hope!), but once in the OSS one it's hard to get out. That's true of any library vs. application or private vs. protected vs. public (source, not legalese) decision: start restrictive, and migrate out.
People tend to forget that the Midwest (around the Twin Cities in particular) was one of the big homes of computing during the Age of Mainframes (1950s-70s.) Control Data, Cray, and Sperry (later Sperry-Univac) were all Twin Cities companies. [More info]
He's an interesting guy. Not only does he collect quackery and old typesetting machines, he's also an ordained Unitarian Universalist minister. When a geeky friend of mine was getting married several years ago, he was quite concerned about finding a minister with a theology and temperment he could relate to. I suggested Bob, the wedding was a success, and they're still happily married.
A better solution is to use a specialized palette, or to convert reds to greens (RGB-wise, not perceptually)-- and even then keep in mind that someone's gamma may be hideously off.
In the end, it's best to design with multiple cues: textual, color (hue, brightness, AND saturation), iconic, spacial (size & location), and contextual (grouping, logical ordering, etc.) This takes care of not only color blindness, but all the other physical and mental disabilities-- not to mention all the simulated disabilities that people have when they are inattentive or in a hurry.
Except that they don't always. Try minimizing iTunes. Not only do the hints go away, the buttons move from horizontal to vertical. I can't tell you how many times I've closed an iTunes window trying to un-minimize it.
At the beginning of the article it says "IBM Japan Ltd and Oki Electric Industry Co have won a 188 million yen ($1.59 million) contract". At the end it says "The new system... is expected to halve the network's operating costs to around 350 billion yen a year".
I suspect that there is a typo in there; you don't typically spend x to produce a system that costs 2000*x to operate.
Seriously, even when it's just me writing in two languages, the result can be a hideously disorganized mess.
Where I'm working now, I use Java and JSP for most things, and we're trying to migrate shell scripts into Java and Ant tasks. We started out using Python and Zope, but Java seemed more natural for the task at hand.
The factors that drive my workplace decision making are:
- If I'm hit by a bus, how long would it take for someone to figure out what I was doing? Java is highly structured for this, from Javadoc to the hierarchical layout of the source code. Perl and Python are not. C#, from what I've heard, is similar to Java in this regard.
- Does the development environment support best practices? In particular: unit testing, version control, and object/relational mapping. Version control works for any language. Unit testing is arguably best supported by Java, given the breadth of tools and people working on it. I have yet to find an object/relational tool that works as well as NeXT's environment did, though Java is getting there.
- Is code succinct, legible, and well-structured? From the samples I've seen, C# has a better getter/setter grammar, while Java has more succinct documentation grammar.
- Does it run on whatever we have? We have some hardware that requires Sparc. However, most of our servers are x86/Linux-- they're cheap and our admin trusts them to be secureable.
.NET obviously fails in this regard.
- How good are the support libraries? Java beats the pants off of everything else I've seen. My pattern is all too often (1) discover I need something (2) write a half-assed implementation (3) discover that the Apache Foundation already has a well-written, well-documented, open source implementation.
Every language annoys me in some way, but for the sort of server-side, cross-platform code I'm writing these days, Java is less annoying than the alternatives. But perhaps the thing I love the most is that best practices often show up first in Java. A vibrant open source community, which includes some of the best brains in the industry, is a dream to take advantage of. (Perl has CPAN, which is great, but it has the feel of a collection of weekend projects.) Java has the feel of a healthy capitalist economy, with everything from Wall Street (Apache) to kids selling lemonaide on the sidewalk.In my experience, more developers just means a bigger project-- whether the task is big or not. Big projects are multi-fasceted, with lots of internally extensible components. The extensibility may be useful, but often it just serves to make it possible for lots of programmers to work on it independantly.
One good example of this is operating systems. Windows XP is huge. It feels huge. The design is centered around trying to make its zillions of features accesible-- using wizards, generic tree views, AI that tries to second-guess you etc. And I'm not talking components like device drivers-- I'm talking the higher level OS features. This is typical for huge projects. OS X does pretty much the same things, yet the design feels simple. Where Windows uses generic components (tree views, etc.), OS X frequently uses a GUI specifically designed for each particular feature. The Preferences window resizes to exactly fit a component, rather than leaving holes to fit unused features. These are signs of a small project. The sort of tight coordination required for that degree of polish-- the appearance that every decision passes through one look-and-feel tyrant-- doesn't scale.
An extreme example of something that feels huge (which I actually use) is NetBeans, Sun's open source Java IDE. Everything is done with a generic component, which makes everything feel thrown together and nothing is easy to find. There's no designer choosing what features to point out and which ones to bury.
A web browser has two fundamental parts: standards handling (HTML, HTTP, XML, CSS, images, etc.), and the GUI. In the case of standards handling, Apple is borrowing from KDE-- so they have Linux geeks worrying about compliance for them. That sort of thing is done well by a large, distributed group.
Apple's principal contribution is an Cocoa wrapper for the web libraries and a GUI. Each of these tasks are best suited for a small group. They each succeed best when they have the consistent feel of having been designed by one person.
- PNGs may be great, but nobody uses them
- PNGs never caught on because IE doesn't support them
- PNGs will never catch on until M$ supports all their features.
- I can't get PNGs to work
The fact of the matter is, PNGs work great as a drop-in replacement for GIFs. If you limit yourself to what GIFs can do, IE 4.x and Netscape 4.x can use them just fine. And those browsers have just about disappeared from old age.Of course, if you create a 24-bit PNG to compete with an 8-bit GIF, the GIF will be smaller. Otherwise the PNG will be significantly smaller. If you use gamma correction in the PNG, weird things can happen when people have their gamma misconfigured.
In my own tests a year ago, IE 5.5 on Windows and Mac, as well as Netscape 7 and Mozilla (on Windows, Mac and Linux), all browsers did just fine with 8-bit images, 24-bit images, as well as alpha transparency. That last one is really, really cool looking and everyone should try it.
My theory is that few people use PNGs because most of the HTML books out there recommend GIFs because that's what the authors learned and nobody has bothered to correct them.
More info:
The book describes a species of aliens who see in many more colors than we do. One color, commonly found in sunsets, is translated into English as "plaid."
If you haven't read it already, I highly recommend it. It's arguably the best book by one of the brightest authors out there. He's the only author where I can't find anything to quibble about concerning his computer science. [Sample Chapter]