I have a few Rackable boxes now in our normally cooled data center. They are used as high density storage servers so they have a lot of disk drives, but they loose drives at a much higher rate than our other Dell and Supermicro based clones. You have to tread lightly around them because the slightest vibration will cause them to reboot. Yes they are properly mounted, etc.
Some of my favorite are things where MyQL accepts values it shouldn't and it doesn't throw an error. For example you can insert a 0 into a date field, 30000000000 into an in column (it will just ignore the higher order bits.
MySQL is OK for quick and dirty, but it will always be dirty. If you want MySQL to be decent:
1) Set it up with InnoDB and make that the default table type. MyISAM should only be used for data warehouse tpye applications where you are doing a lot of IO and its OK for the DB to be down for hours while you recover your corrupted MyISAM tables. 2) Set the strict sql mode in the my.cnf. I don't remember exactly what the parameter name is, but you want MyQL to throw an error if you throw stupid values at it. Otherwise it will accept wacky values and you'll end up debugging it later. 3) Set the default character set to UTF-8 if you can. This can be a bear but its worth it to be able to handle foreign characters. 4) Avoid the fancy "features" if you can. The old features still have unresolved bugs and it isn't going to get any better with more and more storage engines going in. 5) Monitor the performance constantly and be prepared to partition your data. Scale out isn't always as easy as it sounds.
I will have to agree that most companies hear that mysql is fast, so they go with it. After all we want a fast web site, so the database had better be fast. We can argue about bandwidth to the customer, or the app server, etc. being the ultimate bottleneck, but the promise of speed is sexy and sexy sells.
But what is the cost? MyIsam has table level locking which bites when you have a long running query or batch update and another OLTP application which gets locked out until the batch job finishes. It also sucks when someone accidentally inserts a value greater than 2^32 into an INT column and mysql quietly truncates it without throwing an error. Same with inserting dates like '2000-02-31' or even '0000-13-44'. Ironically this is the type of data validation which Rasmus? was speaking about. I think this is why he was recommending validating data in the application code. If you don't validate it there
The somewhat sketchy SQL support is another area of concern. There are workarounds here, but you end up jumping through some mysql specific hoops go get things working. I have had to do a lot of creating temporary tables to get around the crummy subselect support as you know. Don't get me started with repairing broken tables.
What DOES work fairly well in Mysql is the replication. It really helps scalability to spread all those requests across several machines. That being said I did break replication by dropping a test database which did not exist on the slaves (why should they care if they cannot execute drop database on a database which does not exist. But then again, this is a trade off of of correctness and robustness at the expense of speed.
Mysql is easy to set up in the first place, but it is difficult to maintain in a production environment. For example, things get really weird when you start mixing storage backends. Taking consistent backups and dealing with transactions and locking get hairy. The documentation is splintered with details about certain things like tuning parameters in many places and no clear way to get the entire story in one place. Maybe this is just my problem.
I have been using Mysql for a long time and I was quite pleased. I came from an oracle background and the price performance could not be beat. At one time I wrote a great circle distance user defined function to do geospatial queries. For the longest time I did not miss foreign keys or transactions. I had all that logic in my application (for the good and bad of it). But then I needed real transactions and I wished my database threw an error when some nonsense data got inserted. Now days I am leaning towords using postgres.
One final thing to note is that postgres is licensed under the BSD license. This means that if you are working on an appliance type application, you should consider using postgres and saving yourself a whole lot of licensing fees.
Use one of the many free video hosting sites. Require that the user watch a video and answer a simple question from the video like "What color was the car shown in the video?" The run time of the video should be small (under 30 seconds) and the question must be trivial and fill in the blank (not multiple choice).
Not a perfect solution of course. Someone could still pay for the answers, but it would take them more time to watch a video than look at one image. The videos might be related to the subject matter of the site and actually be entertaining or informative for valid users to watch. Captcha questions might be a little harder for a topically relevant video to further insure a user is worth the price of admission.
http://www.aircharter.com/ is another web site which allows you to price and book charter aircraft over the web. I worked on this site during the boom. We used some interesting AI to optimize the itinerary for best price, fastest time, etc.
Charter aircraft are more expensive than regular commercial flights, but there are a host of advantages. You are not tied to a predetermined schedule. You can land at smaller regional airports which might be closer to your final destination and quicker due to the lower traffic volumes. You don't have to wait to check your bags, board, reclaim your bags, subject to anal probes, etc. The best itineraries are the ones which a bunch of small cites over a short time.
What occurs to me is that the networks should charge more for the commercial slot right before the show comes back. I often watch at least part of that ad as I don't want to miss the beginning of the show. If the networks did this they could offset some of their "losses". They could action that space off the the highest bidder in an Overture fashion and the runners up would get the less desirable middle slots.
Anyway product placement in the content is the wave of the future. People are more likely to believe an actor not necessarily associated to the product endorsing the product subtly in the context of the show AND we can't easily fast forward over it. Funny thing is that this is how they did commercials way back when everything on TV was live.
Can we fix the VFS system first?. As one of the linked articles says all filesystems are equal but ext3 is the first among equals. Anyone who has tried running NFS over ReiserFS can attest to that. The VFS filesystem does not treat everyone equally. Although I am happy to see progress with the ext series of filesystems, I would like to see better support for other filesystems first.
Another issue is that distributions don't support all the features available in ext3. Did you know that ext3 supports indexed directories? This will aid situations like mail servers where there are many, many files in a single directory. It would if distributions would use proper mount options. Extended attributes and ACLs will be the most sought after features the next few years I think (think BFS and the nascent WinFS). Ext3 supports these, but alas these features are not enables by default by the major distributions. I guess it is too difficult for them to support or they figure we are ready for such advanced features.
My last gripe has to do with the features they are adding to ext3 to make ext4. Most of the features list seem to center around large file support and other features necessary for enterprise size data. I'm all for managing this class of data on Linux, but do we need to do in ext? There is already XFS, JFS, maybe even ReiserFS for applications like this. Can we keep ext3 clean and pure for core Linux support? The majority of files in a basic install are small, read often, and written to once in a while. Keeping ext3 optimal for basic necessities while allowing enterprise users to get their work done via access to enterprise filesystems like XFS seems like the best of both worlds to me.
Anyhow we filesystem snobs are very lucky to have all these choices in Linux. Tuning your applications from the filesystem up with SW RAID, LVM, and various filesystem options can net quite a performance boost. The BSD distributions don't have these choices although they have GEOM, Vinum, FFS (the grandfather of all UNIX filesystems including the ext series) with soft updates which are fine options. And where is this all knowing ZFS for linux?
You could use your in house search engine (or a google appliance if your lucky) to find any existing content or I supose your current system of crawling, parsing and regexes would suffice.
Then I would recoment the mod_security module for apache http://www.modsecurity.org/ It will scan any POST requests for banned pattern. You could leverage the regexes you already wrote to scan the content in the first place.
I think mod_secrity does what the FS and McAfee appliances do at much better (free as in beer) price.
MS TCP/IP stack is in inet.dll. That is probably where the bug is.
I was a beta tester for IE4 (so flame me, OK) and I found a bug in the HTTP1.1 keep-alive implementation. They never saw it because they tested only against IIS and I tested against Apache which implemented it correctly of course.
They didn't want to fix it until I explained that %60 (at the time) of the web runs on Apache servers.
In fact the MS product manager wanted me to call "the Apache company and have them fix Apache." Duh. Me- "There is nobody to call sir, and the problem is YOUR problem and not theirs."
They delayed IE4 for two weeks after it had gone gold to fix it. So don't flame me.
Anyway, that bug was in inet.dll, and I bet this one is too.
IT still has value, but only as infrastructure for now. The B2B and ERP bread and butter (or was it pie in the sky) days will subside for a while.
But pull a wire on a laser printer and watch them jump for the IT support guy. Do they get out the old Selectric and carbon copy? Heck no. They're lost without Word and that HP5 pumpiing out copy.
What if the phone and voicemail system breaks? Do people get out the backup carrier pigeons? Bullhorns? Interoffice mail? Probably not.
These are just the technologies that the end users have figured out how to use. The flashy powerpoint demonstrations on all that whiz bang, expensive stuff looked good, and promissed a lot but the end users could not actually use the product.
They will catch up, someday, eventually. I hope... .
Sorry, but I don't think these are _really_ robots. I mean, where is the autonomy? Do they do anything for themselves? According to the Yahoo article they are directed from a "wireless desktop control."
IMHO these are merely remote controlled surveillance systems generously equipped with a grenade launcher and 12 gage shotgun.
The buzz bombs of WWII were more autonomous than these and thus more like a true robot. In the same vein, cruise missiles are more autonomous and thus much more "robotic" to me.
Every leaf router should drop packets with a return address that is not in its internal IP space. So if I am the netadmin for www.xyz.com and my address space is x.y.z.0/255.255.255.0, then I should have a rule that any packet leaving my network should have a proper, ie x.y.z.0/255.255.255.0, return address.
Ever ping a the broadcast address of some network then look in the ARP cache?
Sure there are mounds of computers there. Maybe they have labels in English, but isn't Taiwan or Japan a lot more likely source? Aren't they the #1 manufactures of consumer electronics worldwide? Both are small island nations with limited (possibly none) landfill opportunities. Why would a scofflaw in the US or UK hire a boat to haul garbage to China, when they could just put it in a sack and dump it at a local landfill?
You have agreed on QT for the GUI stuff, so why not use POSIX for the threading and I/O? It is available on NT and UNIX certainly. I don't know if there is a POSIX API for serial ports.
POSIX support can be buggy (surprise) on NT and many function calls have "undefined" behavior according to the spec, but it IS the most ubiquitus API out there.
It seems that MUDs and MOOs in particular could provide a next generation user interface.
Objects like files and folder could be scripted with methods allowing them to be graphicaly chained together to perform tasks. The resulting chain object would probably look like some sort of Rube Goldberd moustrap contraption. This is similar to a command line like "kill -9 `ps aux | grep netscape | awk '{print $2}' `"
Objects could be created, extended and saved in in a MOO environment. The next level is to make it 3D and interactive like some sort of interactive, cartoon fiction.
The point is not stealing verses inventing everything from scratch. The point is attribution and the creation and improvement of intellectual property. After all, we are all "standing on the shoulders of giants" when we use things like UNIX, C and day I say Perl.
In liberal arts "stealing" other peoples work is called plagiarism and there are well established policies for dealing with it. Of course one is allowed and usually encouraged to read other peoples works and even include them in your own WITH PROPER CITATION. The distinction is that you must cite your references.
The same should go for CS. If you cannot solve the assignment go ahead and use someone else's code, but you should cite it as their code and not call it your own. Calling it your own is plagiarism and the same thing as ripping the copyright notices off of BSD kernel code. If you must use others code, you should try and improve it or you should expect a lower grade.
In a group project there seem to be a few possible metrics. These things seem to mirror what happens in a real world development project anyway in my experience.
1) Allow/. style peer grading within the group. Slackers will get graded poorly by their peers.
2) Define good interfaces and use contract style programming to allow individual members to work independently on their own parts (a class, subroutine, etc.). The group gets graded as a whole on the quality of the design which can be seen in the interface definitions (or problem decomposition if you will) and of course the overall quality of the resulting software.
3) Use CVS and track how many lines of code are committed by whom and when they do it. Lines of code isn't the end all of metrics, but it does show people are doing work. If you look at the commit log and see that one student worked steadily thruout the project period and another hacked it all together in one night, you might take that into consideration too.
One old trick to increase productivety in a multitasking environment is to increase the time slice spent on each task. Output increases when one spends more time on each task before switching to the next since fewer task switches are performed to complete a task. However, the perceived response time to new tasks increases as well.
This tradeoff happens with people as well. I call it "goal driven" verses "interupt driven" systems. A goal driven person or process will be more productive in terms of output, whereas an interupt driven system will feel more responsive.
Whether it's better to be goal driven or interupt driven depends on your role. If you are a sysadmin responsable for 100 users and their systems, you might be better off by acting in an interupt driven fasion and servicing the most important tasks first. A programmer OTOH might be more productive by acting in a goal oriented manner and finishing one programming task completely before switching to the next. The apropriate strategy reflects the role.
A sysadmin is more human oriented and is best serviced by an interupt driven strategy. Programming is inherently project oriented and thus better served by a goal driven strategy.
I had an idea for educational software that could use an input device similar to this. Why not make a Tai Chi or Karate teaching software?
You could log in and the program would prepare a lesson based on your progress. A video would play instructing you in a particular move. It would then prompt you to try it yourself perhaps showing a model of your sensed movements next to the "ideal" execution. It could calculate what you did right and wrong (use a neural network) and instruct you on how to improve. Of course a virtual sparing partner could be included similar to the Mortal Kombat game.
Tai Chi and streching would appeal to older folks. Karate, Tai Bo, etc. would appeal to the younger genration. Arobics, boxing, and dancing instruction could also be done this way.
The software infrastructure could be open source, but I think the "database" of moves and lessons would require expensive production (hire a black belt, construct series of lessons, record them) and marketing (have to hire someone famouse and put their mug on the box). Perhaps a mixed licensing model.
I have a few Rackable boxes now in our normally cooled data center. They are used as high density storage servers so they have a lot of disk drives, but they loose drives at a much higher rate than our other Dell and Supermicro based clones. You have to tread lightly around them because the slightest vibration will cause them to reboot. Yes they are properly mounted, etc.
Rackable == cheaply made
This page has a list of MySQL gotchas
http://sql-info.de/mysql/gotchas.html
Some of my favorite are things where MyQL accepts values it shouldn't and it doesn't throw an error. For example you can insert a 0 into a date field, 30000000000 into an in column (it will just ignore the higher order bits.
MySQL is OK for quick and dirty, but it will always be dirty. If you want MySQL to be decent:
1) Set it up with InnoDB and make that the default table type. MyISAM should only be used for data warehouse tpye applications where you are doing a lot of IO and its OK for the DB to be down for hours while you recover your corrupted MyISAM tables.
2) Set the strict sql mode in the my.cnf. I don't remember exactly what the parameter name is, but you want MyQL to throw an error if you throw stupid values at it. Otherwise it will accept wacky values and you'll end up debugging it later.
3) Set the default character set to UTF-8 if you can. This can be a bear but its worth it to be able to handle foreign characters.
4) Avoid the fancy "features" if you can. The old features still have unresolved bugs and it isn't going to get any better with more and more storage engines going in.
5) Monitor the performance constantly and be prepared to partition your data. Scale out isn't always as easy as it sounds.
I will have to agree that most companies hear that mysql is fast, so they go with it. After all we want a fast web site, so the database had better be fast. We can argue about bandwidth to the customer, or the app server, etc. being the ultimate bottleneck, but the promise of speed is sexy and sexy sells.
But what is the cost? MyIsam has table level locking which bites when you have a long running query or batch update and another OLTP application which gets locked out until the batch job finishes. It also sucks when someone accidentally inserts a value greater than 2^32 into an INT column and mysql quietly truncates it without throwing an error. Same with inserting dates like '2000-02-31' or even '0000-13-44'. Ironically this is the type of data validation which Rasmus? was speaking about. I think this is why he was recommending validating data in the application code. If you don't validate it there
The somewhat sketchy SQL support is another area of concern. There are workarounds here, but you end up jumping through some mysql specific hoops go get things working. I have had to do a lot of creating temporary tables to get around the crummy subselect support as you know. Don't get me started with repairing broken tables.
What DOES work fairly well in Mysql is the replication. It really helps scalability to spread all those requests across several machines. That being said I did break replication by dropping a test database which did not exist on the slaves (why should they care if they cannot execute drop database on a database which does not exist. But then again, this is a trade off of of correctness and robustness at the expense of speed.
Mysql is easy to set up in the first place, but it is difficult to maintain in a production environment. For example, things get really weird when you start mixing storage backends. Taking consistent backups and dealing with transactions and locking get hairy. The documentation is splintered with details about certain things like tuning parameters in many places and no clear way to get the entire story in one place. Maybe this is just my problem.
I have been using Mysql for a long time and I was quite pleased. I came from an oracle background and the price performance could not be beat. At one time I wrote a great circle distance user defined function to do geospatial queries. For the longest time I did not miss foreign keys or transactions. I had all that logic in my application (for the good and bad of it). But then I needed real transactions and I wished my database threw an error when some nonsense data got inserted. Now days I am leaning towords using postgres.
One final thing to note is that postgres is licensed under the BSD license. This means that if you are working on an appliance type application, you should consider using postgres and saving yourself a whole lot of licensing fees.
Not a perfect solution of course. Someone could still pay for the answers, but it would take them more time to watch a video than look at one image. The videos might be related to the subject matter of the site and actually be entertaining or informative for valid users to watch. Captcha questions might be a little harder for a topically relevant video to further insure a user is worth the price of admission.
http://www.aircharter.com/ is another web site which allows you to price and book charter aircraft over the web. I worked on this site during the boom. We used some interesting AI to optimize the itinerary for best price, fastest time, etc.
Charter aircraft are more expensive than regular commercial flights, but there are a host of advantages. You are not tied to a predetermined schedule. You can land at smaller regional airports which might be closer to your final destination and quicker due to the lower traffic volumes. You don't have to wait to check your bags, board, reclaim your bags, subject to anal probes, etc. The best itineraries are the ones which a bunch of small cites over a short time.
What occurs to me is that the networks should charge more for the commercial slot right before the show comes back. I often watch at least part of that ad as I don't want to miss the beginning of the show. If the networks did this they could offset some of their "losses". They could action that space off the the highest bidder in an Overture fashion and the runners up would get the less desirable middle slots.
Anyway product placement in the content is the wave of the future. People are more likely to believe an actor not necessarily associated to the product endorsing the product subtly in the context of the show AND we can't easily fast forward over it. Funny thing is that this is how they did commercials way back when everything on TV was live.
Can we fix the VFS system first?. As one of the linked articles says all filesystems are equal but ext3 is the first among equals. Anyone who has tried running NFS over ReiserFS can attest to that. The VFS filesystem does not treat everyone equally. Although I am happy to see progress with the ext series of filesystems, I would like to see better support for other filesystems first.
Another issue is that distributions don't support all the features available in ext3. Did you know that ext3 supports indexed directories? This will aid situations like mail servers where there are many, many files in a single directory. It would if distributions would use proper mount options. Extended attributes and ACLs will be the most sought after features the next few years I think (think BFS and the nascent WinFS). Ext3 supports these, but alas these features are not enables by default by the major distributions. I guess it is too difficult for them to support or they figure we are ready for such advanced features.
My last gripe has to do with the features they are adding to ext3 to make ext4. Most of the features list seem to center around large file support and other features necessary for enterprise size data. I'm all for managing this class of data on Linux, but do we need to do in ext? There is already XFS, JFS, maybe even ReiserFS for applications like this. Can we keep ext3 clean and pure for core Linux support? The majority of files in a basic install are small, read often, and written to once in a while. Keeping ext3 optimal for basic necessities while allowing enterprise users to get their work done via access to enterprise filesystems like XFS seems like the best of both worlds to me.
Anyhow we filesystem snobs are very lucky to have all these choices in Linux. Tuning your applications from the filesystem up with SW RAID, LVM, and various filesystem options can net quite a performance boost. The BSD distributions don't have these choices although they have GEOM, Vinum, FFS (the grandfather of all UNIX filesystems including the ext series) with soft updates which are fine options. And where is this all knowing ZFS for linux?
You could use your in house search engine (or a google appliance if your lucky) to find any existing content or I supose your current system of crawling, parsing and regexes would suffice.
Then I would recoment the mod_security module for apache http://www.modsecurity.org/ It will scan any POST requests for banned pattern. You could leverage the regexes you already wrote to scan the content in the first place.
I think mod_secrity does what the FS and McAfee appliances do at much better (free as in beer) price.
There is also OpenGFS http://opengfs.sourceforge.net/ and Oracle Cluster File System http://oss.oracle.com/projects/ocfs/
These may go away since their major reason for existing was that Sistina had closed up source for GFS.
Thanks RedHat. With LVM2, GFS, my EMC SAN and my cluster of Gentoo boxes (ya, sorry 'bout that part) I'm going to have lots of fun.
> could get away with using the word
> "renaissanciest".
Larry is a cunning linguist for sure, but now we know he is a master debater as well.
MS TCP/IP stack is in inet.dll. That is probably where the bug is.
I was a beta tester for IE4 (so flame me, OK) and I found a bug in the HTTP1.1 keep-alive implementation. They never saw it because they tested only against IIS and I tested against Apache which implemented it correctly of course.
They didn't want to fix it until I explained that %60 (at the time) of the web runs on Apache servers.
In fact the MS product manager wanted me to call "the Apache company and have them fix Apache." Duh. Me- "There is nobody to call sir, and the problem is YOUR problem and not theirs."
They delayed IE4 for two weeks after it had gone gold to fix it. So don't flame me.
Anyway, that bug was in inet.dll, and I bet this one is too.
Butthead:: Hehe, hey Beavis it say on /. that India's gonna "shoot the moon." hehe hehe.
Beavis:: Ya, hehe hehe. Who are they gonna "shoot the moon" at? Hehe
Butthead:: Uhhh, I think it says they're aiming for China or something then China's gonna moon them back in 2010.
Beavis:: Ya, Cool. Hehe. SHOOOOT DA MOOOON, hehe SHOOOOT DA MOOOON.
Butthead:: Beavis, you suck.
And on and on...
IT still has value, but only as infrastructure for now. The B2B and ERP bread and butter (or was it pie in the sky) days will subside for a while.
But pull a wire on a laser printer and watch them jump for the IT support guy. Do they get out the old Selectric and carbon copy? Heck no. They're lost without Word and that HP5 pumpiing out copy.
What if the phone and voicemail system breaks? Do people get out the backup carrier pigeons? Bullhorns? Interoffice mail? Probably not.
These are just the technologies that the end users have figured out how to use. The flashy powerpoint demonstrations on all that whiz bang, expensive stuff looked good, and promissed a lot but the end users could not actually use the product.
They will catch up, someday, eventually. I hope...
.
The plant is located in Fishkill, NY. Is this an omen of what's to come?
IMHO these are merely remote controlled surveillance systems generously equipped with a grenade launcher and 12 gage shotgun.
The buzz bombs of WWII were more autonomous than these and thus more like a true robot. In the same vein, cruise missiles are more autonomous and thus much more "robotic" to me.
Don't believe the hype...
Doesn't UNIX time run out at about the same time?
We REALLY need to change it to 64 bits now!
Every leaf router should drop packets with a return address that is not in its internal IP space. So if I am the netadmin for www.xyz.com and my address space is x.y.z.0/255.255.255.0, then I should have a rule that any packet leaving my network should have a proper, ie x.y.z.0/255.255.255.0, return address.
Ever ping a the broadcast address of some network then look in the ARP cache?
Sure there are mounds of computers there. Maybe they have labels in English, but isn't Taiwan or Japan a lot more likely source? Aren't they the #1 manufactures of consumer electronics worldwide? Both are small island nations with limited (possibly none) landfill opportunities. Why would a scofflaw in the US or UK hire a boat to haul garbage to China, when they could just put it in a sack and dump it at a local landfill?
POSIX support can be buggy (surprise) on NT and many function calls have "undefined" behavior according to the spec, but it IS the most ubiquitus API out there.
Check it out.
This according to the Netcraft link in the article. Lower TCO, better uptime...
Objects like files and folder could be scripted with methods allowing them to be graphicaly chained together to perform tasks. The resulting chain object would probably look like some sort of Rube Goldberd moustrap contraption. This is similar to a command line like "kill -9 `ps aux | grep netscape | awk '{print $2}' `"
Objects could be created, extended and saved in in a MOO environment. The next level is to make it 3D and interactive like some sort of interactive, cartoon fiction.
It kind of reminds me of ps Doom
Dennis
The point is not stealing verses inventing everything from scratch. The point is attribution and the creation and improvement of intellectual property. After all, we are all "standing on the shoulders of giants" when we use things like UNIX, C and day I say Perl.
/. style peer grading within the group. Slackers will get graded poorly by their peers.
In liberal arts "stealing" other peoples work is called plagiarism and there are well established policies for dealing with it. Of course one is allowed and usually encouraged to read other peoples works and even include them in your own WITH PROPER CITATION. The distinction is that you must cite your references.
The same should go for CS. If you cannot solve the assignment go ahead and use someone else's code, but you should cite it as their code and not call it your own. Calling it your own is plagiarism and the same thing as ripping the copyright notices off of BSD kernel code. If you must use others code, you should try and improve it or you should expect a lower grade.
In a group project there seem to be a few possible metrics. These things seem to mirror what happens in a real world development project anyway in my experience.
1) Allow
2) Define good interfaces and use contract style programming to allow individual members to work independently on their own parts (a class, subroutine, etc.). The group gets graded as a whole on the quality of the design which can be seen in the interface definitions (or problem decomposition if you will) and of course the overall quality of the resulting software.
3) Use CVS and track how many lines of code are committed by whom and when they do it. Lines of code isn't the end all of metrics, but it does show people are doing work. If you look at the commit log and see that one student worked steadily thruout the project period and another hacked it all together in one night, you might take that into consideration too.
Just my $.02.
Dennis
Take a look at how Jamie Zawinski did it.
One old trick to increase productivety in a multitasking environment is to increase the time slice spent on each task. Output increases when one spends more time on each task before switching to the next since fewer task switches are performed to complete a task. However, the perceived response time to new tasks increases as well.
This tradeoff happens with people as well. I call it "goal driven" verses "interupt driven" systems. A goal driven person or process will be more productive in terms of output, whereas an interupt driven system will feel more responsive.
Whether it's better to be goal driven or interupt driven depends on your role. If you are a sysadmin responsable for 100 users and their systems, you might be better off by acting in an interupt driven fasion and servicing the most important tasks first. A programmer OTOH might be more productive by acting in a goal oriented manner and finishing one programming task completely before switching to the next. The apropriate strategy reflects the role.
A sysadmin is more human oriented and is best serviced by an interupt driven strategy. Programming is inherently project oriented and thus better served by a goal driven strategy.
You could log in and the program would prepare a lesson based on your progress. A video would play instructing you in a particular move. It would then prompt you to try it yourself perhaps showing a model of your sensed movements next to the "ideal" execution. It could calculate what you did right and wrong (use a neural network) and instruct you on how to improve. Of course a virtual sparing partner could be included similar to the Mortal Kombat game.
Tai Chi and streching would appeal to older folks. Karate, Tai Bo, etc. would appeal to the younger genration. Arobics, boxing, and dancing instruction could also be done this way.
The software infrastructure could be open source, but I think the "database" of moves and lessons would require expensive production (hire a black belt, construct series of lessons, record them) and marketing (have to hire someone famouse and put their mug on the box). Perhaps a mixed licensing model.