I find most of the problems with code is that it is badly architected, or just was a design in progress and NEVER refactored.
There are a few people I know that I can read their code much like a book and it can be completely devoid of comments. But the indentation, variable naming, subroutine splitting follow some very precise rules which I've seen elsewhere. It was to the point that in 15 seconds I pointed to an offending line of code after talking about queue structure (the code was the wrong of linear v.s. circular).
There is an aesthetic beauty to good code. The form follows the function precisely. There aren't any extra variables. This is probably the same as the Quality Plateau as stated in the programmers stone below.
The splits across files are also well thought out. Each file can stand on its own and would be reusable and self contained. They contain a lot of statics. The separation into the files is also along a minimalist interface - as few exports and imports.
Most of this is from a bi-weekly refactoring - new functions end up in the wrong file, or they are proven to work untuned, so AFTER IT WORKS part of the process IS TO MAKE THE CODE SIMPLE TO MAKE DOCUMENTATION EASY.
Complex code is hard to understand even with perfectly accurate (maintained) documentation. But this is where comments come in. If something is being done that is subtle or otherwise not immediately apparent from the code structure should be explained. For embedded targets, it could describe the hardware effect (e.g. the Check LED will turn ON).
Another area is to bypass a compiler bug (or anomaly - not all of C's behavior is precisely specified), so if x11 breaks, but x*2048 works, state that. Or to synthesize another operator, e.g. if you have 16*x around in z from earlier lines of code, and do you can do y=17*x or do y=x+z ;/* y=17*x */ - you must indicate the conceptual target of your "hand optimization".
The worst code I've seen - up to the totally opaque is usually in Object Oriented designs. This is NOT a problem with OO, but its misuse. Instead of LED_PORT |= CHECK_LED;/* ON */, someone will create three layers of objects to a universal idealized interface, then three more layers getting to the hardware, each in a different file, so Activate(Check); [which somehow goes to LEDOn which inherits something to actually do it, but the actual bits and port will be elsewhere] will be all you see and you don't know if the hardware is broken or which of the layers the error is in. You still can do the original line in C++, and it will be completely obvious what you are doing and what line or bit to test and what it does.
Three layers should suffice for most designs. A layer is a power as in the inverse of logarithm. So the complexity of 30 lines in one layer would be a complexity of 225 in two and 1000 in three. When you create a layer, you create interfaces across that layer. And you have to document the interfaces completely and precisely. It is easier to annul an interface than to document and maintain one.
Think about TCP/IP. Basically 4 layers including the application and physical. The problem with the 7 layer ISO model is that it was too deep. TCP/IP was simple, straightforward, and clear.
So as far as comments, they should indicate the exceptions - code that is dissonant from the aesthetic for a reason.
The rest (interfaces, data, etc.) should be clearly documented, but that doesn't mean as inline comments.
Such a law would be good in the context of a reformed liability law. Right now if someone is.001% liable they can still pay 100% of the damages. This applies if they didn't know or intend the outcome.
Open Source software can be much like a public park. There should be an exemption for free, public *anything* that doesn't involve criminal negligence. If you don't pay admission, it would be up to you to make sure you don't do anything stupid on the play equipment.
At that point, Red Hat, SUSE, etc. can assume as much or as little liability as they want as they add a paid layer on top of the commons.
Further, Source is stuck somewhere being a device (like a toaster) or a book. If you don't like the ending of a book, or how the cake turns out, the book is in no way defective. If you can't follow instructions, or even if you simply won't, or the instructions are wrong or dangerous, you normally can't sue the author. You can sue if the toaster is defective and is actually an ignition source when used as directed.
An EULA in the usual form Microsoft uses basically declares it to be a device. If I can't read it or analyze it or quote it, but only use it, it is a device and not a book. Also it says you don't even own it (even the single copy as under copyright).
GPL on the other hand says lets discuss, improve, analyze the work, and by the way, you can run it and maybe use it to do something useful (like a recipe in a cookbook). It might be used as a device, but it is still a "book". And I think you could tweak the GPL if necessary to make it legally fall into the same liability category as a book.
Between tort reform, and resolving the device / artistic work dichotomy, I think GPLed software would thrive.
But we do not have wise leaders, and Microsoft sends more money to prevent clear thought on the part of our legislators.
You are running some program and do something interesting, like accidently pasting a text document onto a URL and something crashes. Ah. Try it again. OK, if it is over 4800 or so bytes it crashes, bring up the debugger. Ah, at 4894 is the stack where the IP...
Here is the specific difference between closed and open models.
If I find it on Microsoft, about the only thing I can do is write a sploit for the skript kiddiez. Of course I can contact Microsoft, but they won't respond for the shorter of 4 months, or when the skript kiddiez get going. Even then it usually takes two weeks for a hotfix that breaks half the software on the server, and then another two weeks for a fix for the fix that I can apply. [Don't worry, I haven't run anything from Microsoft for several months and hope to stay Microsoft Free as much as possible].
If I find it on GNU/BSD/Linux, I pull up the source, add a test or whatever I deem appropriate and send a patch with a description of the problem and fix to the maintainer along with a little chiding about how embarrassing it should be to have such a hole. And the minor version is incremented the next day, so everyone doing apt-get regularly won't be affected, and in a few days every distribution will have it added to the security update section.
Even if I had the source to Micros... I probably wouldn't have enough to recompile or fix things. I could find the line of code causing the problem, but anyone who can write a sploit can read disassembly.
Microsoft's integration makes the problem worse since any problem with what should be middleware runs in the OS. A Netscape flaw on Linux wouldn't get you root (at least not directly - you would have to find a suid flawed program). But any problem with Outlook and/or IE gives you more than enough to cause problems.
Again, and to summarize, any software defect has a good potential to be exploited, without the source, so simply running something until it crashes (at least on MS) is a much more productive way to mine for exploitable security holes than reading through the source. The integration within MS software (the browser is part of the OS) makes the OS vulnerable because it includes the middleware, making it much larger and more complex (a flaw in IE thus *IS* a flaw in the OS), and as such cannot be sand-boxed easily.
A dual channel 160UW system with two 10K (or faster!) drives will blow away any dual drive IDE system. But it would be more expensive.
SCSI has multitasking capability (you can give multiple commands to each of multiple devices and have them processed as each device gets time). Add a CD-Writer or even CD-ROM to an IDE system and watch what happens if you try to access both the disk and CD. The Multimedia command set was originally SCSI (which is one of the reasons there is an IDE-SCSI option/module in the linux kernel).
You can also put 15 devices per wide SCSI bus, but still can only do two per IDE.
IDE is simpler and thus cheaper, but has a limited performance envelope, i.e. degrades under a number of conditions common to certain environments like servers. It isn't really a VHS v.s. Beta. CRT v.s. LCD might be closer. Or Sedan v.s. Pickup truck - If your job involves taking clients to lunch v.s. going to Lowes or Home Depot to get stuff.
We might also prevent shoplifting to require all stores to strip-search everyone upon entry and exit, but I think people would just stop shopping.
The alternative is to keep copying illegal, just as it is now. The industry can still use watermarking to find large sources of piracy (e.g. some of the offshore wholesale copiers), but don't try to protect casual copying except declaring it illegal. That can be done today and doesn't require any law. Indeed, theateres have coded movies so Hollywood can find sources of first-run movies that are pirated.
Ask if you can TODAY audit the Congresscritter's computers, or their offsprings computers and other media and see if they would be willing to suffer the penalties of anything you find. By the way, look in the drawers or trunk for pliers, screwdrivers and other "burglary tools" that should be outlawed because they can be used for breaking and entering.
Finally, let them pass this stupid law, but stipulate that as a requirement that any media coming under that law would GIVE UP ALL FIRST AMMENDMENT CLAIMS AND PROTECTIONS (since they want consumers to give up fair use), so that, for example, a town can declare an R rated movie indecent, and drag Jack Valente into court and then prison if they distribute it or send it in the area. Hollywood would then want the bill killed. Or better yet, a porn tax, so that any protected media would have a recorded transaction and a ratings-based tax charged. If they don't like it they can just leave it unencrypted.
If PA requires it I find it ironic that municipalities aren't required to insure their important data. There are probably other areas where they require CITIZENS to be insured before they will issue something.
In the afternoon or evening, I can get in the zone almost immediately. And I can often stay nearly indefinitely, as long as I'm not forced out. I can handle only so many interruptions - the worst are those that pose another problem that I can't immediately work on but can think about. My mind will try forking and multitasking. Other interruptions are less severe (to get something to eat, etc.), especially when I can control when to do them - after finishing a major section instead of in the middle.
An office with lots of linear desk space to each side with a printer nearby (which supports the HP small lineprinter font) and highlighters (when I refactor, I usually take the listing to another room and start marking). A nearby caffeine supply, usually a large cup of coffee, or something else so I don't have to feel thirsty. A way to silence my phone or otherwise insure only critical calls get through. Basically freedom from external or internal distractions.
A large, LCD screen. Something like the Apple 22" Cinema is optimal, but a large CRT with subdued lighting is also OK. I want to see several pages of information onscreen. Overlapped or iconified windows don't count. Otherwise subdued lighting, full spectrum, and/or task lighting. Especially with CRTs - they tend to bloom and blur at higher brightness. A comfortable chair - this might be a posture chair or stool. The idea here is to prevent fatigue, generally, and from having to fiddle with the UI to view what I need to.
A reasonably fast computer. My train of thought derails if I break too often. The toolset I use is fast at grepping or otherwise searching and editing and recompiling. When I finish with a set of changes I should be able to keep focus.
Flexible time. Some people are morning people, others are afternoon people. I am a night person. This is good in that I can work productively until 4am if needed, and in fact I can't sleep much earlier if I keep thinking of solutions or things I want to try. Often I can keep going until I finish something then realize how tired I am and realize that the eastern horizon is rather bright. But if it is too early, I can't get started. I can find 60 ultraproductive hours per week, and sustain that, but few of them occur between 9 and 5.
Only PCs. Actually only 686 PCs with DRM hardware. Except maybe for a few embedded processors running crippled, dumbed down versions of IE and WMP (which doesn't even do MP3, and that is not GPLed).
In a Microsoft ecosystem, innovation is an endangered specie.
Linux can fragment, but there are always the same set of APIs and programs. Gentoo isn't that different from RedHat, from SuSE, from Mandrake, from Slackware...
Under the worst case scenario Windows would fragment less than Linux already has, and Linux is not a nightmare of missing pieces. At worst some pieces are in different places, but the environment already has compensated.
There are "third sigma" versions of Linux, but there is also Windows XP embedded, both of which are heavily adapted to particular things, e.g. LTSP, LRP.
"Fair Use" is what allows both copyright and the first amendment to coexist.
For example, 60 Minutes broadcast excerpts of the "I have a dream" speech by Martin Luther King, and didn't have to pay the King foundation (or whatever legal entity who owns the copyright) anything.
Government doesn't have a "Censored" stamp, but it does have "Top Secret" which is often abused. (I think Senator Moynahan wrote a book on this). If they could just stamp "Copyright" and then sue the New York Times, CNN, or whoever for broadcasting something embarrassing like the pentagon papers, the first amendment would cease to have any force or effect.
As far as "copying" entire works between media or formats - downloading to an MP3 player or making a backup of your hard drive, that might not come under "fair use", but that is a different thing - that "fair use" doesn't cover the acts, as opposed to it being rooted in the constitution (in this case fair use follows from the freedom of speech and of the press - such speech and/or publication - of otherwise copyrighted material - is protected by the first amendment).
Choose the features and functionality required in your run-time image.
Unlike system setup, where you are given a small number of choices about which features to include, embedded platforms offer a vast array of features to choose from. For example, in Windows XP Embedded you can choose to include low-level system features such as FAT or NTFS as well applications like Windows Media(TM) Player or Internet Explorer.
This is from their embedded group. They don't seem to have any difficulty.
Someone should clue in the media or states. Windows XP Embedded is touted to be from the same codebase, as for the rest, Microsoft says it all itself:
http://www.microsoft.com/windows/Embedded/xp/tec hi nfo/develop/training.asp
Which says:
Choose the features and functionality required in your run-time image.
Unlike system setup, where you are given a small number of choices about which features to include, embedded platforms offer a vast array of features to choose from. For example, in Windows XP Embedded you can choose to include low-level system features such as FAT or NTFS as well applications like Windows Media(TM) Player or Internet Explorer.
The best thing about Apple is probably the displays. I got a 22" Cinema display (the $500 rebate if purchased with a G4 expires today though, but they may cut prices). The pain in my pocketbook is more than made up for by the complete lack of eyestrain.
The LCDs are 300:1 or 350:1 contrast ratio. There are some for PCs, but the cheapest "big screen" I know of is the Apple Cinema at $2499. PC screen with lots of pixels are well over $3000.
If you must use a CRT, as someone else said DON'T TURN UP THE BRIGHTNESS. The best I've found is to have a dark work area. Most monitors blur when you turn them up. Also they tend to alias with any florescent or other lights. Also, there are sometimes moire effects. You want to stay at a slightly lower resolution at a higher refresh rate. (in your case you might want a bright work area with brighter monitor since your pupils would have a smaller area and thus maybe distort less).
Also, always wear sunglasses out of doors. I don't know precisely how bad UV is, but my eyesight is still good.
I think it is because the Microsoft propaganda machine keeps saying how great they are, and we know better. Basically they overpaid for their preinstalled ("free?") OS and have to convince themselves they haven't been taken.
Since Microsoft is a monopoly, they violate the Cheaper, Better, Faster - pick two rule. Any other choice will have all three attributes. (Even Apple's OS X is less than a new XP install).
Since Microsoft can't innovate (without undermining their monopoly), they market with FUD. And use the legal system or other things - per cpu licenses, "naked pc" horror stories, etc. Why should Microsoft care? Because they are trying to sell bottled tap water claiming a trademark on water. We are just responding.
There are lots of things called "Linux" that do a lot of major changes to major parts. Real time for embedded, virtualization, etc. There is MkLinux, and BSD is more the same than different (architecturally) - even Apple, superinnovator, couldn't think of anything better than Mach + BSD + IOKit (devfs like). But the innovation occurs within the framework.
Apple's Darwin is probably not exciting due to Apple - The Apple license doesn't let you take it and run with it. But there are "new ideas".
The open/read/write/ioctl/fork/exec model is nearly universal. You find these back in DOS and nearly every other OS in some form.
The only "new" simple machine in thousands of years was the rollamite (see http://www.ids.bc.ca/scroller/scroller-main.htm for links).
Even some research into content lookup directories (Slashdot had it a few weeks ago but I don't remember the exact term) ends up as modifications to Linux - probably something in the fs directory. Other things end up in the driver, network, or kernel as a patch. And the multiple journaling filesystems. Or devfs?
Unix may be old and unadventerous, but you forgot the adjectives solid and proven. What new ideas are you thinking of - those that aren't idiosyncratic? Or those that won't slip in to the existing tree? What capability would be in the new OS that couldn't be grafted onto Linux?
Maybe MS thinks it can only compete against decade old masscomp, apollo, or other boxes.
But I can see why they won't say "Linux"
1. Linux is flexible. It runs on everything from Tivos through mainframes.
2. Experts are available on newsgroups or IRC for free with possible delay, and each part is documented with plenty of howtos.
3. Windows is one huge complex blob. Their "Pocket guide" to W2K Systems administration is larger than most epic novels. You apparently need wide as well as deep pockets:). Linux (and Mac OS X! and other BSDies) are componentized. Upgrading or completely changing the mail system doesn't require even one reboot, nor affects anything else. Any apparent complexity in Linux/BSD/etc is only because of the many parts, each of which is independent. Windows (the browser is part of the operating system) is worse because it is only one part - were it a car, the battery and transmission would be welded to the engine.
Finally, Unisys seems to have some very cool big-iron hardware. And it is even x86 based. Unisys could port Linux and probably have a very cool enterprise server. But instead they want to tout Windows (how much is Microsoft paying them? Is their balance sheet that bad so they would be a good short candidate).
Unisys - the power of two: Bill Gates and the CEO of Unisys.
Linux - the power of hundreds of thousands: on the internet.
Ok, if I spend a lot of cash and agree not to sell it in a real consumer PC, Microsoft will sell me a version of XP where I can mix and match parts. I think I can even remove the browser. This is their embedded version of XP (does it have product activation?).
But although they say it is too technically challenging to re-engineer windows XP so OEMs can do it, in their embedded section this is a selling point.
The problem is that with 13M users, if.1% have a problem, that is 13K people with only 400 Customer Service Reps. So the hold time is 30 minutes and often they just rudely say "You violated terms or conditions", or "Fax us all your identity papers - bank account, utility bill, driver's license", then they seem to have a part-time fax, and they constantly lose the faxes (apparently they haven't thought about things like case numbers).
Meanwhile your account is locked without anything you can do about it, often for reasons you don't know or know to be false (a buyer pays, but PYPL thinks something is wrong with it and/or the seller and locks both).
When it works, it's fine. But if they ever lock an account (and you don't have to do anything) it is a nightmare.
Many NT shops won't apply a service pack since they will break more things than they fix. Or you have to be very careful and verify that things still work. Hot fixes have similar problems.
Linux/GNU/sendmail/BSD/etc. vulnerabilities tend to affect one item which is fixed without bothering anything else.
The other statistic which isn't mentioned is how many sites ARE STILL VULNERABLE to all the common exploits.
If the result of Mr. Bill's focus on trustworthiness is a series of huge service packs that break everything yet again it will only be good for Linux. Robustness and compatibility are not in focus right now but probably will be about 48 hours after super service pack is released.
Oh, and will they do that for NT or will they force everyone to upgrade to 2K or XP to fix all the vulnerabilities?
The process I am familiar with involves a general "Requirements" document, followed by a "Design" document. In the requirements, all the inputs, transforms, and outputs are listed, which in effect "solves" most of the problem they are trying to get at BEFORE it is estimated. By the time the Design is done, all the I/T/Os are detailed.
The hardest part is always getting the user or engineering committee to agree on what the inputs or outputs are. Do we need sensor X? Is Y going to be fully articulated, or have a limited range of motion? How do we handle error cases (BSOD?, dialogs?, Ignore, log, and reset since the user won't understand anyway?).
I've often been accurate on my estimates (over the 80/80 given above) - but I insist on defining things comprehensively first. And I know my "velocity" (in the Extreme Programming sense of that word).
Extreme Programming bypasses the argument because it breaks the problem down to very small pieces which can be estimated. Just do small sets of I/T/Os and get feedback.
That is often much more effective than trying to get a person or persons to agree on what the inputs and outputs and other specifications are, especially when the user probably doesn't know what they want.
A lot turns on what they mean by "random". If you think sound, and can extract a white noise component, you could mathematically say X% are truly random bits (where any bit string can be replaced by [nearly] any other).
All compression is the creation of virtual machines that have instructions like "write a zero" "write a one" "copy 8 bits from 24 bits ago". More instructions need more bits to specify. Truly random data would require random instructions.
Office XP or whatever the latest bloatware incarnation for their own platform is the usual level of complexity and quality. Back when NT was out, NT was actually hard to crash but Word and Excel was capable of doing it.
Conversely, Mac OS X's version of Office X is actually nice to use. There are people at Microsoft who can write good software. If that was the basis of a version for Linux it would actually help things. Then you could replace the OS and keep everything else. Run smbfs/samba instead (assuming you don't want to just go NFS or something else native). No outlook, no OTDs.
It is a violation of federal law to tamper with any automotive emission system. That is one reason the modules are made difficult to alter. The other reason is purely the harsh environment, things like hot salt spray isn't good for circuit boards and other electronics.
But the engine control module and software, etc. is all part of the "emission control system". Modify them and you aren't "street legal". The anti-theft portion comes from the insurance companies. Many people won't buy models if the insurance gets too expensive.
When I estimate, and the resources are there, I usually hit, if not dead-on, then very close. Basically I look how complex the system (in this case, embedded systems) is going to be, and can fairly accurately estimate how long it will take me to complete the program. The 20% sometimes is because things go easier (e.g. I find an OS solution so I don't have to write something) or worse (e.g. the hardware has problems so I can't test). But I can usually see the complexity - number of inputs, outputs, equations (reduced to atomic operations), and how they interact, and know my own "velocity" (See the Extreme Programming series for a larger discussion of something that does work).
But that doesn't help. The first problem is if I say something will be done by January 15th, they will still want it (without any help, tools, extra paid OT, etc.) on December 15. The technically correct estimate is not politically (or in marketing terms) correct.
A second problem is when you are at the bottom of the feeding chain, so if some of your test hardware goes bad, you can't get it fixed quickly, or if they disassemble your test setup every few weeks to ship engineering modules (which aren't replaced) to customers, so you start with the assumption of a reasonable development and test environment, and retrograde to LEDs on soldered leads to check things.
Sometimes this effect is in a different order - I depend on a computer or test hardware being engineered in parallel by another group, so the first test milestone in january can't be done until may when the hardware actually appears. Oh, and the extra time for an emulation system so we could develop without actual hardware was shot down because it was guaranteed to be there in january. I think one project didn't have functional hardware until two weeks before the first ship date.
Those are purely technical, but then there are political considerations. E.g. I'm using the Unix type work environment that exists everywhere free (Linux, Win32 with CygWin, etc.) and GCC but they have been using ideosyncratic windows tools - something not quite completely unlike make as a builder, some other C compiler (it had much better C++ support but C v.s. C++ embedded is another rwar). Some code (non-)documentation and editing tool that isn't integrated (they promise they might do something in a few years to integrate things). So I have to change from a porsche to a top-heavy underpowered motorhome and still try to keep up speed.
Then some higher up doesn't like version control tools. Not even something as simple as CVS. So we can't reconstruct anything other than release images making simple changes or backouts (or integrations) much more difficult.
Why is it impossible to estimate how long it takes to empty a 50 gallon trough with a 1 gallon bucket assuming you can do one bucketfull every 10 seconds? Well, they want it emptied in 3 minutes regardless of your calculation. No, you can't use the spigot so when the trough gets empty you won't be able to fill the bucket. Oh, and the bucket had a hole in it and we replaced it with a sieve. And didn't we tell you before the estimate that you can't empty close to the trough, you need to walk 100 feet up stairs and pour carefully through a 1 inch hole - we haven't budgeted for a funnel either. Oh and...
Estimates are wrong more because the assumptions are wrong (or those doing the calculation are wrong). Or what needs to be submitted needs to be wrong to be accepted - lowest bidder then add cost after it is half done v.s. accurate original bid.
And if the environment is such that you can't control things, something like extreme programming is the way to go since it is flexible enough to accommodate constant changes to function, priority, and staffing. Though it won't work when the problems are political.
I find most of the problems with code is that it is badly architected, or just was a design in progress and NEVER refactored.
/* y=17*x */ - you must indicate the conceptual target of your "hand optimization".
/* ON */, someone will create three layers of objects to a universal idealized interface, then three more layers getting to the hardware, each in a different file, so Activate(Check); [which somehow goes to LEDOn which inherits something to actually do it, but the actual bits and port will be elsewhere] will be all you see and you don't know if the hardware is broken or which of the layers the error is in. You still can do the original line in C++, and it will be completely obvious what you are doing and what line or bit to test and what it does.
/ www.tuxedo.org/~esr/writings/taoup/
There are a few people I know that I can read their code much like a book and it can be completely devoid of comments. But the indentation, variable naming, subroutine splitting follow some very precise rules which I've seen elsewhere. It was to the point that in 15 seconds I pointed to an offending line of code after talking about queue structure (the code was the wrong of linear v.s. circular).
There is an aesthetic beauty to good code. The form follows the function precisely. There aren't any extra variables. This is probably the same as the Quality Plateau as stated in the programmers stone below.
The splits across files are also well thought out. Each file can stand on its own and would be reusable and self contained. They contain a lot of statics. The separation into the files is also along a minimalist interface - as few exports and imports.
Most of this is from a bi-weekly refactoring - new functions end up in the wrong file, or they are proven to work untuned, so AFTER IT WORKS part of the process IS TO MAKE THE CODE SIMPLE TO MAKE DOCUMENTATION EASY.
Complex code is hard to understand even with perfectly accurate (maintained) documentation. But this is where comments come in. If something is being done that is subtle or otherwise not immediately apparent from the code structure should be explained. For embedded targets, it could describe the hardware effect (e.g. the Check LED will turn ON).
Another area is to bypass a compiler bug (or anomaly - not all of C's behavior is precisely specified), so if x11 breaks, but x*2048 works, state that. Or to synthesize another operator, e.g. if you have 16*x around in z from earlier lines of code, and do you can do y=17*x or do y=x+z ;
The worst code I've seen - up to the totally opaque is usually in Object Oriented designs. This is NOT a problem with OO, but its misuse. Instead of LED_PORT |= CHECK_LED;
Three layers should suffice for most designs. A layer is a power as in the inverse of logarithm. So the complexity of 30 lines in one layer would be a complexity of 225 in two and 1000 in three. When you create a layer, you create interfaces across that layer. And you have to document the interfaces completely and precisely. It is easier to annul an interface than to document and maintain one.
Think about TCP/IP. Basically 4 layers including the application and physical. The problem with the 7 layer ISO model is that it was too deep. TCP/IP was simple, straightforward, and clear.
So as far as comments, they should indicate the exceptions - code that is dissonant from the aesthetic for a reason.
The rest (interfaces, data, etc.) should be clearly documented, but that doesn't mean as inline comments.
Very good resources:
http://www.ftech.net/~honeyg/progstone/
http:/
Such a law would be good in the context of a reformed liability law. Right now if someone is .001% liable they can still pay 100% of the damages. This applies if they didn't know or intend the outcome.
Open Source software can be much like a public park. There should be an exemption for free, public *anything* that doesn't involve criminal negligence. If you don't pay admission, it would be up to you to make sure you don't do anything stupid on the play equipment.
At that point, Red Hat, SUSE, etc. can assume as much or as little liability as they want as they add a paid layer on top of the commons.
Further, Source is stuck somewhere being a device (like a toaster) or a book. If you don't like the ending of a book, or how the cake turns out, the book is in no way defective. If you can't follow instructions, or even if you simply won't, or the instructions are wrong or dangerous, you normally can't sue the author. You can sue if the toaster is defective and is actually an ignition source when used as directed.
An EULA in the usual form Microsoft uses basically declares it to be a device. If I can't read it or analyze it or quote it, but only use it, it is a device and not a book. Also it says you don't even own it (even the single copy as under copyright).
GPL on the other hand says lets discuss, improve, analyze the work, and by the way, you can run it and maybe use it to do something useful (like a recipe in a cookbook). It might be used as a device, but it is still a "book". And I think you could tweak the GPL if necessary to make it legally fall into the same liability category as a book.
Between tort reform, and resolving the device / artistic work dichotomy, I think GPLed software would thrive.
But we do not have wise leaders, and Microsoft sends more money to prevent clear thought on the part of our legislators.
And Microsoft still crashes a lot.
You are running some program and do something interesting, like accidently pasting a text document onto a URL and something crashes. Ah. Try it again. OK, if it is over 4800 or so bytes it crashes, bring up the debugger. Ah, at 4894 is the stack where the IP...
Here is the specific difference between closed and open models.
If I find it on Microsoft, about the only thing I can do is write a sploit for the skript kiddiez. Of course I can contact Microsoft, but they won't respond for the shorter of 4 months, or when the skript kiddiez get going. Even then it usually takes two weeks for a hotfix that breaks half the software on the server, and then another two weeks for a fix for the fix that I can apply. [Don't worry, I haven't run anything from Microsoft for several months and hope to stay Microsoft Free as much as possible].
If I find it on GNU/BSD/Linux, I pull up the source, add a test or whatever I deem appropriate and send a patch with a description of the problem and fix to the maintainer along with a little chiding about how embarrassing it should be to have such a hole. And the minor version is incremented the next day, so everyone doing apt-get regularly won't be affected, and in a few days every distribution will have it added to the security update section.
Even if I had the source to Micros... I probably wouldn't have enough to recompile or fix things. I could find the line of code causing the problem, but anyone who can write a sploit can read disassembly.
Microsoft's integration makes the problem worse since any problem with what should be middleware runs in the OS. A Netscape flaw on Linux wouldn't get you root (at least not directly - you would have to find a suid flawed program). But any problem with Outlook and/or IE gives you more than enough to cause problems.
Again, and to summarize, any software defect has a good potential to be exploited, without the source, so simply running something until it crashes (at least on MS) is a much more productive way to mine for exploitable security holes than reading through the source. The integration within MS software (the browser is part of the OS) makes the OS vulnerable because it includes the middleware, making it much larger and more complex (a flaw in IE thus *IS* a flaw in the OS), and as such cannot be sand-boxed easily.
A dual channel 160UW system with two 10K (or faster!) drives will blow away any dual drive IDE system. But it would be more expensive.
SCSI has multitasking capability (you can give multiple commands to each of multiple devices and have them processed as each device gets time). Add a CD-Writer or even CD-ROM to an IDE system and watch what happens if you try to access both the disk and CD. The Multimedia command set was originally SCSI (which is one of the reasons there is an IDE-SCSI option/module in the linux kernel).
You can also put 15 devices per wide SCSI bus, but still can only do two per IDE.
IDE is simpler and thus cheaper, but has a limited performance envelope, i.e. degrades under a number of conditions common to certain environments like servers. It isn't really a VHS v.s. Beta. CRT v.s. LCD might be closer. Or Sedan v.s. Pickup truck - If your job involves taking clients to lunch v.s. going to Lowes or Home Depot to get stuff.
We might also prevent shoplifting to require all stores to strip-search everyone upon entry and exit, but I think people would just stop shopping.
The alternative is to keep copying illegal, just as it is now. The industry can still use watermarking to find large sources of piracy (e.g. some of the offshore wholesale copiers), but don't try to protect casual copying except declaring it illegal. That can be done today and doesn't require any law. Indeed, theateres have coded movies so Hollywood can find sources of first-run movies that are pirated.
Ask if you can TODAY audit the Congresscritter's computers, or their offsprings computers and other media and see if they would be willing to suffer the penalties of anything you find. By the way, look in the drawers or trunk for pliers, screwdrivers and other "burglary tools" that should be outlawed because they can be used for breaking and entering.
Finally, let them pass this stupid law, but stipulate that as a requirement that any media coming under that law would GIVE UP ALL FIRST AMMENDMENT CLAIMS AND PROTECTIONS (since they want consumers to give up fair use), so that, for example, a town can declare an R rated movie indecent, and drag Jack Valente into court and then prison if they distribute it or send it in the area. Hollywood would then want the bill killed. Or better yet, a porn tax, so that any protected media would have a recorded transaction and a ratings-based tax charged. If they don't like it they can just leave it unencrypted.
If PA requires it I find it ironic that municipalities aren't required to insure their important data. There are probably other areas where they require CITIZENS to be insured before they will issue something.
Replace the MBR with the LTSP boot, except for about 1/100 which can install the full LTSP as a server.
Or image demolinux in a similar manner, or remove all the hard drives (might take longer), and run them through a fixture and make them ext3.
In the afternoon or evening, I can get in the zone almost immediately. And I can often stay nearly indefinitely, as long as I'm not forced out. I can handle only so many interruptions - the worst are those that pose another problem that I can't immediately work on but can think about. My mind will try forking and multitasking. Other interruptions are less severe (to get something to eat, etc.), especially when I can control when to do them - after finishing a major section instead of in the middle.
An office with lots of linear desk space to each side with a printer nearby (which supports the HP small lineprinter font) and highlighters (when I refactor, I usually take the listing to another room and start marking). A nearby caffeine supply, usually a large cup of coffee, or something else so I don't have to feel thirsty. A way to silence my phone or otherwise insure only critical calls get through. Basically freedom from external or internal distractions.
A large, LCD screen. Something like the Apple 22" Cinema is optimal, but a large CRT with subdued lighting is also OK. I want to see several pages of information onscreen. Overlapped or iconified windows don't count. Otherwise subdued lighting, full spectrum, and/or task lighting. Especially with CRTs - they tend to bloom and blur at higher brightness. A comfortable chair - this might be a posture chair or stool. The idea here is to prevent fatigue, generally, and from having to fiddle with the UI to view what I need to.
A reasonably fast computer. My train of thought derails if I break too often. The toolset I use is fast at grepping or otherwise searching and editing and recompiling. When I finish with a set of changes I should be able to keep focus.
Flexible time. Some people are morning people, others are afternoon people. I am a night person. This is good in that I can work productively until 4am if needed, and in fact I can't sleep much earlier if I keep thinking of solutions or things I want to try. Often I can keep going until I finish something then realize how tired I am and realize that the eastern horizon is rather bright. But if it is too early, I can't get started. I can find 60 ultraproductive hours per week, and sustain that, but few of them occur between 9 and 5.
Only PCs. Actually only 686 PCs with DRM hardware. Except maybe for a few embedded processors running crippled, dumbed down versions of IE and WMP (which doesn't even do MP3, and that is not GPLed).
In a Microsoft ecosystem, innovation is an endangered specie.
Linux can fragment, but there are always the same set of APIs and programs. Gentoo isn't that different from RedHat, from SuSE, from Mandrake, from Slackware...
Under the worst case scenario Windows would fragment less than Linux already has, and Linux is not a nightmare of missing pieces. At worst some pieces are in different places, but the environment already has compensated.
There are "third sigma" versions of Linux, but there is also Windows XP embedded, both of which are heavily adapted to particular things, e.g. LTSP, LRP.
"Fair Use" is what allows both copyright and the first amendment to coexist.
For example, 60 Minutes broadcast excerpts of the "I have a dream" speech by Martin Luther King, and didn't have to pay the King foundation (or whatever legal entity who owns the copyright) anything.
Government doesn't have a "Censored" stamp, but it does have "Top Secret" which is often abused. (I think Senator Moynahan wrote a book on this). If they could just stamp "Copyright" and then sue the New York Times, CNN, or whoever for broadcasting something embarrassing like the pentagon papers, the first amendment would cease to have any force or effect.
As far as "copying" entire works between media or formats - downloading to an MP3 player or making a backup of your hard drive, that might not come under "fair use", but that is a different thing - that "fair use" doesn't cover the acts, as opposed to it being rooted in the constitution (in this case fair use follows from the freedom of speech and of the press - such speech and/or publication - of otherwise copyrighted material - is protected by the first amendment).
Disclaimer: IANAL, but this is my understanding.
http://www.microsoft.com/windows/Embedded/xp/techi nfo/develop/training.asp
This is about 1/2 way down the page:
Choose the features and functionality required in your run-time image.
Unlike system setup, where you are given a small number of choices about which features to include, embedded platforms offer a vast array of features to choose from. For example, in Windows XP Embedded you can choose to include low-level system features such as FAT or NTFS as well applications like Windows Media(TM) Player or Internet Explorer.
This is from their embedded group. They don't seem to have any difficulty.
c hi nfo/develop/training.asp
Someone should clue in the media or states. Windows XP Embedded is touted to be from the same codebase, as for the rest, Microsoft says it all itself:
http://www.microsoft.com/windows/Embedded/xp/te
Which says:
Choose the features and functionality required in your run-time image.
Unlike system setup, where you are given a small number of choices about which features to include, embedded platforms offer a vast array of features to choose from. For example, in Windows XP Embedded you can choose to include low-level system features such as FAT or NTFS as well applications like Windows Media(TM) Player or Internet Explorer.
The best thing about Apple is probably the displays. I got a 22" Cinema display (the $500 rebate if purchased with a G4 expires today though, but they may cut prices). The pain in my pocketbook is more than made up for by the complete lack of eyestrain.
The LCDs are 300:1 or 350:1 contrast ratio. There are some for PCs, but the cheapest "big screen" I know of is the Apple Cinema at $2499. PC screen with lots of pixels are well over $3000.
If you must use a CRT, as someone else said DON'T TURN UP THE BRIGHTNESS. The best I've found is to have a dark work area. Most monitors blur when you turn them up. Also they tend to alias with any florescent or other lights. Also, there are sometimes moire effects. You want to stay at a slightly lower resolution at a higher refresh rate. (in your case you might want a bright work area with brighter monitor since your pupils would have a smaller area and thus maybe distort less).
Also, always wear sunglasses out of doors. I don't know precisely how bad UV is, but my eyesight is still good.
I think it is because the Microsoft propaganda machine keeps saying how great they are, and we know better. Basically they overpaid for their preinstalled ("free?") OS and have to convince themselves they haven't been taken.
Since Microsoft is a monopoly, they violate the Cheaper, Better, Faster - pick two rule. Any other choice will have all three attributes. (Even Apple's OS X is less than a new XP install).
Since Microsoft can't innovate (without undermining their monopoly), they market with FUD.
And use the legal system or other things - per cpu licenses, "naked pc" horror stories, etc. Why should Microsoft care? Because they are trying to sell bottled tap water claiming a trademark on water. We are just responding.
There are lots of things called "Linux" that do a lot of major changes to major parts. Real time for embedded, virtualization, etc. There is MkLinux, and BSD is more the same than different (architecturally) - even Apple, superinnovator, couldn't think of anything better than Mach + BSD + IOKit (devfs like). But the innovation occurs within the framework.
Apple's Darwin is probably not exciting due to Apple - The Apple license doesn't let you take it and run with it. But there are "new ideas".
The open/read/write/ioctl/fork/exec model is nearly universal. You find these back in DOS and nearly every other OS in some form.
The only "new" simple machine in thousands of years was the rollamite (see http://www.ids.bc.ca/scroller/scroller-main.htm for links).
Even some research into content lookup directories (Slashdot had it a few weeks ago but I don't remember the exact term) ends up as modifications to Linux - probably something in the fs directory. Other things end up in the driver, network, or kernel as a patch. And the multiple journaling filesystems. Or devfs?
Unix may be old and unadventerous, but you forgot the adjectives solid and proven. What new ideas are you thinking of - those that aren't idiosyncratic? Or those that won't slip in to the existing tree? What capability would be in the new OS that couldn't be grafted onto Linux?
Maybe MS thinks it can only compete against decade old masscomp, apollo, or other boxes.
:). Linux (and Mac
But I can see why they won't say "Linux"
1. Linux is flexible. It runs on everything from Tivos through mainframes.
2. Experts are available on newsgroups or IRC for free with possible delay, and each part is documented with plenty of howtos.
3. Windows is one huge complex blob. Their "Pocket guide" to W2K Systems administration is larger than most epic novels. You apparently need wide as well as deep pockets
OS X! and other BSDies) are componentized. Upgrading or completely changing the mail system doesn't require even one reboot, nor affects anything else. Any apparent complexity in Linux/BSD/etc is only because of the many parts, each of which is independent. Windows (the browser is part of the operating system) is worse because it is only one part - were it a car, the battery and transmission would be welded to the engine.
Finally, Unisys seems to have some very cool big-iron hardware. And it is even x86 based. Unisys could port Linux and probably have a very cool enterprise server. But instead they want to tout Windows (how much is Microsoft paying them? Is their balance sheet that bad so they would be a good short candidate).
Unisys - the power of two: Bill Gates and the CEO of Unisys.
Linux - the power of hundreds of thousands: on the internet.
Ok, if I spend a lot of cash and agree not to sell it in a real consumer PC, Microsoft will sell me a version of XP where I can mix and match parts. I think I can even remove the browser. This is their embedded version of XP (does it have product activation?).
But although they say it is too technically challenging to re-engineer windows XP so OEMs can do it, in their embedded section this is a selling point.
which has a wall of shame full of horror stories.
.1% have a problem, that is 13K people with only 400 Customer Service Reps. So the hold time is 30 minutes and often they just rudely say "You violated terms or conditions", or "Fax us all your identity papers - bank account, utility bill, driver's license", then they seem to have a part-time fax, and they constantly lose the faxes (apparently they haven't thought about things like case numbers).
The problem is that with 13M users, if
Meanwhile your account is locked without anything you can do about it, often for reasons you don't know or know to be false (a buyer pays, but PYPL thinks something is wrong with it and/or the seller and locks both).
When it works, it's fine. But if they ever lock an account (and you don't have to do anything) it is a nightmare.
Many NT shops won't apply a service pack since they will break more things than they fix. Or you have to be very careful and verify that things still work. Hot fixes have similar problems.
Linux/GNU/sendmail/BSD/etc. vulnerabilities tend to affect one item which is fixed without bothering anything else.
The other statistic which isn't mentioned is how many sites ARE STILL VULNERABLE to all the common exploits.
If the result of Mr. Bill's focus on trustworthiness is a series of huge service packs that break everything yet again it will only be good for Linux. Robustness and compatibility are not in focus right now but probably will be about 48 hours after super service pack is released.
Oh, and will they do that for NT or will they force everyone to upgrade to 2K or XP to fix all the vulnerabilities?
The process I am familiar with involves a general "Requirements" document, followed by a "Design" document. In the requirements, all the inputs, transforms, and outputs are listed, which in effect "solves" most of the problem they are trying to get at BEFORE it is estimated. By the time the Design is done, all the I/T/Os are detailed.
The hardest part is always getting the user or engineering committee to agree on what the inputs or outputs are. Do we need sensor X? Is Y going to be fully articulated, or have a limited range of motion? How do we handle error cases (BSOD?, dialogs?, Ignore, log, and reset since the user won't understand anyway?).
I've often been accurate on my estimates (over the 80/80 given above) - but I insist on defining things comprehensively first. And I know my "velocity" (in the Extreme Programming sense of that word).
Extreme Programming bypasses the argument because it breaks the problem down to very small pieces which can be estimated. Just do small sets of I/T/Os and get feedback.
That is often much more effective than trying to get a person or persons to agree on what the inputs and outputs and other specifications are, especially when the user probably doesn't know what they want.
throwing money down a hole.
A lot turns on what they mean by "random". If you think sound, and can extract a white noise component, you could mathematically say X% are truly random bits (where any bit string can be replaced by [nearly] any other).
All compression is the creation of virtual machines that have instructions like "write a zero" "write a one" "copy 8 bits from 24 bits ago". More instructions need more bits to specify. Truly random data would require random instructions.
Office XP or whatever the latest bloatware incarnation for their own platform is the usual level of complexity and quality. Back when NT was out, NT was actually hard to crash but Word and Excel was capable of doing it.
Conversely, Mac OS X's version of Office X is actually nice to use. There are people at Microsoft who can write good software. If that was the basis of a version for Linux it would actually help things. Then you could replace the OS and keep everything else. Run smbfs/samba instead (assuming you don't want to just go NFS or something else native). No outlook, no OTDs.
It is a violation of federal law to tamper with any automotive emission system. That is one reason the modules are made difficult to alter. The other reason is purely the harsh environment, things like hot salt spray isn't good for circuit boards and other electronics.
But the engine control module and software, etc. is all part of the "emission control system". Modify them and you aren't "street legal". The anti-theft portion comes from the insurance companies. Many people won't buy models if the insurance gets too expensive.
When I estimate, and the resources are there, I usually hit, if not dead-on, then very close. Basically I look how complex the system (in this case, embedded systems) is going to be, and can fairly accurately estimate how long it will take me to complete the program. The 20% sometimes is because things go easier (e.g. I find an OS solution so I don't have to write something) or worse (e.g. the hardware has problems so I can't test). But I can usually see the complexity - number of inputs, outputs, equations (reduced to atomic operations), and how they interact, and know my own "velocity" (See the Extreme Programming series for a larger discussion of something that does work).
But that doesn't help. The first problem is if I say something will be done by January 15th, they will still want it (without any help, tools, extra paid OT, etc.) on December 15. The technically correct estimate is not politically (or in marketing terms) correct.
A second problem is when you are at the bottom of the feeding chain, so if some of your test hardware goes bad, you can't get it fixed quickly, or if they disassemble your test setup every few weeks to ship engineering modules (which aren't replaced) to customers, so you start with the assumption of a reasonable development and test environment, and retrograde to LEDs on soldered leads to check things.
Sometimes this effect is in a different order - I depend on a computer or test hardware being engineered in parallel by another group, so the first test milestone in january can't be done until may when the hardware actually appears. Oh, and the extra time for an emulation system so we could develop without actual hardware was shot down because it was guaranteed to be there in january. I think one project didn't have functional hardware until two weeks before the first ship date.
Those are purely technical, but then there are political considerations. E.g. I'm using the Unix type work environment that exists everywhere free (Linux, Win32 with CygWin, etc.) and GCC but they have been using ideosyncratic windows tools - something not quite completely unlike make as a builder, some other C compiler (it had much better C++ support but C v.s. C++ embedded is another rwar). Some code (non-)documentation and editing tool that isn't integrated (they promise they might do something in a few years to integrate things). So I have to change from a porsche to a top-heavy underpowered motorhome and still try to keep up speed.
Then some higher up doesn't like version control tools. Not even something as simple as CVS. So we can't reconstruct anything other than release images making simple changes or backouts (or integrations) much more difficult.
Why is it impossible to estimate how long it takes to empty a 50 gallon trough with a 1 gallon bucket assuming you can do one bucketfull every 10 seconds? Well, they want it emptied in 3 minutes regardless of your calculation. No, you can't use the spigot so when the trough gets empty you won't be able to fill the bucket. Oh, and the bucket had a hole in it and we replaced it with a sieve. And didn't we tell you before the estimate that you can't empty close to the trough, you need to walk 100 feet up stairs and pour carefully through a 1 inch hole - we haven't budgeted for a funnel either. Oh and...
Estimates are wrong more because the assumptions are wrong (or those doing the calculation are wrong). Or what needs to be submitted needs to be wrong to be accepted - lowest bidder then add cost after it is half done v.s. accurate original bid.
And if the environment is such that you can't control things, something like extreme programming is the way to go since it is flexible enough to accommodate constant changes to function, priority, and staffing. Though it won't work when the problems are political.