I ran into a similar situation some years back at Carnegie Mellon University. A friend of mine discovered a means of acquiring AFS authentication tokens belonging to other students. (The tokens were not being destroyed properly. The technique involved editing the boot image (vmunix) with emacs.)
This was a significant security hole. Every year, a couple of idiots try to cheat. With the ability to become any other user, well, Pandora's box was wide open.
My friend asked for my advice on how to proceed. Should he contact the administration? I told him, flat out, if he went to the administration, he could expect to have his computer accounts immediately terminated. Without them, he would receive a forced-fail in all his computer science classes. He could also expect to face a "rubber-stamp" academic review board, and either a suspension or outright expulsion from the school.
This is, unfortunately, not idle speculation. Some years earlier, my best friend at CMU (Jeff) had created a subdirectory. Well, several subdirectories, actually. Nested. The professor (Phil) was a complete loon who couldn't code his way out of a paper bag. He decided Jeff's subdirectories had crashed the system. We accessed the logfiles. Jeff didn't have anything to do with that system going down. That didn't stop the termination of all his computer accounts, the forced-fails, or the academic review board and suspension. My one big regret was that Jeff never filed a lawsuit against CMU.
So, getting back to the AFS hole: I'm a member of the local Alpha Phi Omega chapter. At that time, one of our advisors was an upper echelon hacker, an absolute wizard, who was responsible for a large chunk of the actual implementation on the systems involved. I arranged for a private meeting between the three of us. The details were discussed openly and frankly, along with possible solutions. A trivial fix was put into place.
To the best of my knowledge, no one else, and specifically no one in the administration, was ever notified. My friend continued his education uninterrupted, and eventually obtained his degree.
This is an incident with one Photographer, who is apparently fairly clueless at that. It is not an industry-wide problem.
When I got married, I contracted a professional photographer. We talked. We decided what we wanted.
He wanted ownership of the negatives. Fine. They are of much higher quality than the usual over-the-counter junk. I don't have the resources to use them. And I got a lower overall price in exchange for buying reprints from him.
I wanted digital copies. I wanted to put prints out on the web, etc. He agreed to supply standard 3x5 proofs, photographs not computer printouts, and I was licensed to reproduce and distribute them, digitally, however I so wished. No conflicts. No problems...
In the words of the modern day, it's called "advertising".
Granted, I have to do all the scanning. (And I'm still scanning...) But, I can throw them up on a web site, say "hey mom, are these the ones you want", and go buy her an album.
Yeah, someone can just print the pictures out. But they're going to be pretty lousy prints. The hardcopy quality is going to suck dingo kidneys, and will only get worse as you enlarge the image.
When it came time to buy a 2'x3' (feet, not inches) print for my grandfather's wall, well I went to the photographer. The negatives were of sufficient quality that he could produce a gorgeous print at that resolution.
Oh, and digital reproduction rights wasn't the only point of that contract I changed. I also added a line insisting that he bring a backup-camera, even if it was only a 35mm...
That new computer that set you back $2000 is going to be a boat anchor in a couple of years. How long do you expect your relationship to last? What are you willing to spend on it? (Because those "wife" and "motherhood" upgrades are going to make that ring look like chump change.)
Buying diamonds: Local mall shops are good for getting a feel for what the 4-C's mean. But for god's sake, don't buy from them. First of all, what they have is crap. Second, it's extremely overpriced crap. (Well above the "list" price.)
In most major cities there are some major diamond vendors. In Pittsburgh, they're downtown in the Clark building. They are worth checking out. These guys will sell diamonds at the "list" price.
Now check out BOMI. Call them -- Their website is best used for the phone numbers. Bomi sells for under the "list" price. Their merchandise is top notch. And they do mail-order. (Sprite, if you are reading this, this is why your stone was 50% larger and a grade better in quality than you thought I could afford.)
Oh, and in case you've overlooked the obvious: Get it insured! Talk to the folks who are selling your homeowners insurance, renters insurance, or at worse, car insurance, and see about adding to your policy.
So many of the people over here seem to think that this is a trivial problem. I beg to differ...
I ran into a similar, if somewhat simpler problem recently. 13 employees. 6 shifts per day. Various assorted constraints. In particular, there were frequent vacation constraints (on the order of 1-2 weeks per person per month).
Ignoring these constraints, there are 720 possible ways to assign 6 people to 6 different shifts. There are 1,716 possible ways to choose 6 people from a set of 13. Given 31 days in a month, that's 7*10^188 possible schedules forming the search space.
The problem domain is NP complete. To examine every possible solution, we are looking at a computational time beyond the eventual heat-death of the universe.
If we don't need an optimal solution, but merely a solution, the problem becomes much more tractable. Until we consider the constraints.
The constraints may very well dictate that no valid solution exists. The catch is proving that no valid solution exists, for the non-trivial case, without examining every possible solution. I have not yet investigated how feasible this may be. It is certainly very domain, or rather constraint, specific.
GA's and other evolutionary programming techniques won't guarantee that you will ever find a valid solution, let alone the running time.
On the other hand, exploring the space from the most constrained timepoint outwards to the next most constrained timepoint, and so forth, backtracking as necessary, may have the unfortunate effect of exploring the entire search space. Properly coded, an interactive UI could permit the user to pause the work and "assist" by adding additional constraints, thereby limiting the search space.
On the other hand, provided you don't get into an over-constrained scenario, you can get awfully far with a simple greedy algorithm that attempts to load-balance.
Then there are the more mundane aspects: The UI itself. Data storage and retrieval. Adjusting the schedule to changing constraints (replanning). Printing and publishing the results. Providing the status of the search currently in progress.
They will occupy a fair bit of coding time as well.
I suggest you design the system. Figure out all the data entry, output, and UI bits. Don't implement. Just plan it all out. Then estimate how much time each part will take to write, code, and test. Especially test. Add up all the times, and see whether it's even possible to complete this software before you leave...
The best "beginner" programming assignment that I ever heard of was about sorting. Very fundamental stuff. But the items to sort were graphically displayed, with a simple API to swap two items. The goal was to let folks see their software in action.
In an improved version of this approach, each student was told to sort the numbers, and given the initialize(), value(i), and swap(i,j) functions. But they were not told how to perform the sorting. Afterwards, each different sorting algorithm that was implemented was described by the students, and the professor covered any techniques that had been missed. This leads to a discussion of O(N^2) vs O(NlogN). And a future assignment to implement and compare (graph) the efficiencies (number of swaps) of different sorting algorithms.
Ultimately, if you can foster a attitude of "here's a little bit, lets see how far you can take this", and then shape their results further, they will learn far more.
The most instructive assignment I ever had was based on this. It involved writing a simple 3D perspective drawing program from scratch. The instructor said we could use any language, on any computer, and write the code any way we wanted to. Grades were entirely based on how well it ran. Some time after we turned it in, he announced the next assignment: Extend the previous assignment to handle shading from multiple light sources. That assignment, whether intentionally or not, taught me more about commenting and documenting my code than anything else ever did.
The audio aspects are fairly easy. Any decent sound card will suffice. The Audio API permits you to buffer input/output... But you probably want to use a pre-allocated non-swappable memory block to make sure nothing is lost when transferring to disk. Also, I'd suggest going with a multi-threaded approach.
Be aware that specific sound cards may limit your audio frequency sampling rates. Furthermore, these sampling rates may not be too accurate, and may vary somewhat based on the characteristics of the card, the manufacturer, the current temperature, the phase of the moon, etc.
The Linux kernel runs at 100 Hz. So you are looking at 10ms slices, which may impact your temporal resolution issues.
For video, webcams are useless. (Low resolution, low frame rates, painful interfaces.) If you want still pictures, try gphoto. For motion pictures, you will need some sort of NTSC (American TV standard) video capture, from a video camera. Given the extreme bulk of this video data, you will need some form of compression during the capture operation: JPEG, MPEG2, etc. There are a number of Linux based solutions. The matrox marvel G200/G400 (NOT the G450, NOT the Millennium) is one that I've played with, and has fairly good Linux support.
Be aware that these forms of compression (JPEG, MPEG) will limit your visual frequency range in the frame (field). Rapidly changing data will be lost. (For example, alternating dark/light bars every other pixel.) In practice, this means that minor-ghosting is filtered out. But for your experiments, working with fruit-flies, this may have negative consequences.
Your simplest solution might be to obtain a Replay or TiVo unit, or even a VCR, and use that for the video recording. Possibly interfacing the remote-control into a Linux-based software application.
Drop me a line if I can be of further help... (da0g@yahoo.com)
I would like to complain about the Digital Millennium Copyright Act.
I find it disturbing that I can go to jail, and/or be fined, for the crime of trying to watch a DVD I have legally purchased.
I find it disturbing that works I create: poetry, humor, fiction; Can be banned on the grounds that they can be mathematically combined to produce DVD decrypting software.
There is a distinction between a copyright holder being entitled to compensation if someone reproduces their work without permission, and the copyright holder being entitled to control what works others may create, and how their works may be used after a sale has taken place.
The most recent travesty goes too far. The RIAA has successfully utilized the DMCA to suppress the presentation and publication of an academic research paper. The paper, by Dr. Edward Felten, a professor at Princeton University, and others, was to be presented at the Pittsburgh Information Hiding Workshop conference earlier today.
In a statement, read earlier today, Dr. Felten said:
On behalf of the authors of the paper "Reading Between the Lines: Lessons from the SDMI Challenge," I am disappointed to tell you that we will not be presenting our paper today.
Our paper was submitted via the normal academic peer-review process. The reviewers, who were chosen for their scientific reputations and credentials, enthusiastically recommended the paper for publication, due to their judgment of the paper's scientific merit.
Nevertheless, the Recording Industry Association of America, the SDMI Foundation, and the Verance Corporation threatened to bring a lawsuit if we proceeded with our presentation or the publication of our paper. Threats were made against the authors, against the conference organizers, and against their respective employers.
Litigation is costly, time-consuming, and uncertain, regardless of the merits of the other side's case. Ultimately we, the authors, reached a collective decision not to expose ourselves, our employers, and the conference organizers to litigation at this time.
We remain committed to free speech and to the value of scientific debate to our country and the world. We believe that people benefit from learning the truth about the products they are asked to buy. We will continue to fight for these values, and for the right to publish our paper.
We look forward to the day when we can present the results of our research to you, our colleagues, through the normal scientific publication process, so that you can judge our work for yourselves.
This tragedy only serves to highlight the problems with our existing legal DMCA framework.
The truth is far more frightening. We have an industry that is being dragged, kicking and screaming, into the 21st century. They are trying to retain outdated and outmodeled technological approaches.
The truth is that there are alternatives to technological and legal barriers to copyright violation with digital media. Alternatives that provide superior protection, and enhance revenues.
Please do something about this atrocious piece of legislature called the Digital Millennium Copyright Act. It only serves to block progress while providing monopoly status for a select few.
I ran into a similar situation some years back at Carnegie Mellon University. A friend of mine discovered a means of acquiring AFS authentication tokens belonging to other students. (The tokens were not being destroyed properly. The technique involved editing the boot image (vmunix) with emacs.)
This was a significant security hole. Every year, a couple of idiots try to cheat. With the ability to become any other user, well, Pandora's box was wide open.
My friend asked for my advice on how to proceed. Should he contact the administration? I told him, flat out, if he went to the administration, he could expect to have his computer accounts immediately terminated. Without them, he would receive a forced-fail in all his computer science classes. He could also expect to face a "rubber-stamp" academic review board, and either a suspension or outright expulsion from the school.
This is, unfortunately, not idle speculation. Some years earlier, my best friend at CMU (Jeff) had created a subdirectory. Well, several subdirectories, actually. Nested. The professor (Phil) was a complete loon who couldn't code his way out of a paper bag. He decided Jeff's subdirectories had crashed the system. We accessed the logfiles. Jeff didn't have anything to do with that system going down. That didn't stop the termination of all his computer accounts, the forced-fails, or the academic review board and suspension. My one big regret was that Jeff never filed a lawsuit against CMU.
So, getting back to the AFS hole: I'm a member of the local Alpha Phi Omega chapter. At that time, one of our advisors was an upper echelon hacker, an absolute wizard, who was responsible for a large chunk of the actual implementation on the systems involved. I arranged for a private meeting between the three of us. The details were discussed openly and frankly, along with possible solutions. A trivial fix was put into place.
To the best of my knowledge, no one else, and specifically no one in the administration, was ever notified. My friend continued his education uninterrupted, and eventually obtained his degree.
-D.
This is an incident with one Photographer, who is apparently fairly clueless at that. It is not an industry-wide problem.
When I got married, I contracted a professional photographer. We talked. We decided what we wanted.
He wanted ownership of the negatives. Fine. They are of much higher quality than the usual over-the-counter junk. I don't have the resources to use them. And I got a lower overall price in exchange for buying reprints from him.
I wanted digital copies. I wanted to put prints out on the web, etc. He agreed to supply standard 3x5 proofs, photographs not computer printouts, and I was licensed to reproduce and distribute them, digitally, however I so wished. No conflicts. No problems...
In the words of the modern day, it's called "advertising".
Granted, I have to do all the scanning. (And I'm still scanning...) But, I can throw them up on a web site, say "hey mom, are these the ones you want", and go buy her an album.
Yeah, someone can just print the pictures out. But they're going to be pretty lousy prints. The hardcopy quality is going to suck dingo kidneys, and will only get worse as you enlarge the image.
When it came time to buy a 2'x3' (feet, not inches) print for my grandfather's wall, well I went to the photographer. The negatives were of sufficient quality that he could produce a gorgeous print at that resolution.
Oh, and digital reproduction rights wasn't the only point of that contract I changed. I also added a line insisting that he bring a backup-camera, even if it was only a 35mm...
That new computer that set you back $2000 is going to be a boat anchor in a couple of years. How long do you expect your relationship to last? What are you willing to spend on it? (Because those "wife" and "motherhood" upgrades are going to make that ring look like chump change.)
Buying diamonds: Local mall shops are good for getting a feel for what the 4-C's mean. But for god's sake, don't buy from them. First of all, what they have is crap. Second, it's extremely overpriced crap. (Well above the "list" price.)
In most major cities there are some major diamond vendors. In Pittsburgh, they're downtown in the Clark building. They are worth checking out. These guys will sell diamonds at the "list" price.
Now check out BOMI. Call them -- Their website is best used for the phone numbers. Bomi sells for under the "list" price. Their merchandise is top notch. And they do mail-order. (Sprite, if you are reading this, this is why your stone was 50% larger and a grade better in quality than you thought I could afford.)
Oh, and in case you've overlooked the obvious: Get it insured! Talk to the folks who are selling your homeowners insurance, renters insurance, or at worse, car insurance, and see about adding to your policy.
So many of the people over here seem to think that this is a trivial problem. I beg to differ...
I ran into a similar, if somewhat simpler problem recently. 13 employees. 6 shifts per day. Various assorted constraints. In particular, there were frequent vacation constraints (on the order of 1-2 weeks per person per month).
Ignoring these constraints, there are 720 possible ways to assign 6 people to 6 different shifts. There are 1,716 possible ways to choose 6 people from a set of 13. Given 31 days in a month, that's 7*10^188 possible schedules forming the search space.
The problem domain is NP complete. To examine every possible solution, we are looking at a computational time beyond the eventual heat-death of the universe.
If we don't need an optimal solution, but merely a solution, the problem becomes much more tractable. Until we consider the constraints.
The constraints may very well dictate that no valid solution exists. The catch is proving that no valid solution exists, for the non-trivial case, without examining every possible solution. I have not yet investigated how feasible this may be. It is certainly very domain, or rather constraint, specific.
GA's and other evolutionary programming techniques won't guarantee that you will ever find a valid solution, let alone the running time.
On the other hand, exploring the space from the most constrained timepoint outwards to the next most constrained timepoint, and so forth, backtracking as necessary, may have the unfortunate effect of exploring the entire search space. Properly coded, an interactive UI could permit the user to pause the work and "assist" by adding additional constraints, thereby limiting the search space.
On the other hand, provided you don't get into an over-constrained scenario, you can get awfully far with a simple greedy algorithm that attempts to load-balance.
Then there are the more mundane aspects: The UI itself. Data storage and retrieval. Adjusting the schedule to changing constraints (replanning). Printing and publishing the results. Providing the status of the search currently in progress.
They will occupy a fair bit of coding time as well.
I suggest you design the system. Figure out all the data entry, output, and UI bits. Don't implement. Just plan it all out. Then estimate how much time each part will take to write, code, and test. Especially test. Add up all the times, and see whether it's even possible to complete this software before you leave...
The best "beginner" programming assignment that I ever heard of was about sorting. Very fundamental stuff. But the items to sort were graphically displayed, with a simple API to swap two items. The goal was to let folks see their software in action.
In an improved version of this approach, each student was told to sort the numbers, and given the initialize(), value(i), and swap(i,j) functions. But they were not told how to perform the sorting. Afterwards, each different sorting algorithm that was implemented was described by the students, and the professor covered any techniques that had been missed. This leads to a discussion of O(N^2) vs O(NlogN). And a future assignment to implement and compare (graph) the efficiencies (number of swaps) of different sorting algorithms.
Ultimately, if you can foster a attitude of "here's a little bit, lets see how far you can take this", and then shape their results further, they will learn far more.
The most instructive assignment I ever had was based on this. It involved writing a simple 3D perspective drawing program from scratch. The instructor said we could use any language, on any computer, and write the code any way we wanted to. Grades were entirely based on how well it ran. Some time after we turned it in, he announced the next assignment: Extend the previous assignment to handle shading from multiple light sources. That assignment, whether intentionally or not, taught me more about commenting and documenting my code than anything else ever did.
The audio aspects are fairly easy. Any decent sound card will suffice. The Audio API permits you to buffer input/output... But you probably want to use a pre-allocated non-swappable memory block to make sure nothing is lost when transferring to disk. Also, I'd suggest going with a multi-threaded approach.
Be aware that specific sound cards may limit your audio frequency sampling rates. Furthermore, these sampling rates may not be too accurate, and may vary somewhat based on the characteristics of the card, the manufacturer, the current temperature, the phase of the moon, etc.
The Linux kernel runs at 100 Hz. So you are looking at 10ms slices, which may impact your temporal resolution issues.
For video, webcams are useless. (Low resolution, low frame rates, painful interfaces.) If you want still pictures, try gphoto. For motion pictures, you will need some sort of NTSC (American TV standard) video capture, from a video camera. Given the extreme bulk of this video data, you will need some form of compression during the capture operation: JPEG, MPEG2, etc. There are a number of Linux based solutions. The matrox marvel G200/G400 (NOT the G450, NOT the Millennium) is one that I've played with, and has fairly good Linux support.
Be aware that these forms of compression (JPEG, MPEG) will limit your visual frequency range in the frame (field). Rapidly changing data will be lost. (For example, alternating dark/light bars every other pixel.) In practice, this means that minor-ghosting is filtered out. But for your experiments, working with fruit-flies, this may have negative consequences.
Your simplest solution might be to obtain a Replay or TiVo unit, or even a VCR, and use that for the video recording. Possibly interfacing the remote-control into a Linux-based software application.
Drop me a line if I can be of further help... (da0g@yahoo.com)
Dear ...,
I would like to complain about the Digital Millennium Copyright Act.
I find it disturbing that I can go to jail, and/or be fined, for the crime of trying to watch a DVD I have legally purchased.
I find it disturbing that works I create: poetry, humor, fiction; Can be banned on the grounds that they can be mathematically combined to produce DVD decrypting software.
There is a distinction between a copyright holder being entitled to compensation if someone reproduces their work without permission, and the copyright holder being entitled to control what works others may create, and how their works may be used after a sale has taken place.
The most recent travesty goes too far. The RIAA has successfully utilized the DMCA to suppress the presentation and publication of an academic research paper. The paper, by Dr. Edward Felten, a professor at Princeton University, and others, was to be presented at the Pittsburgh Information Hiding Workshop conference earlier today.
In a statement, read earlier today, Dr. Felten said:
This tragedy only serves to highlight the problems with our existing legal DMCA framework.
The truth is far more frightening. We have an industry that is being dragged, kicking and screaming, into the 21st century. They are trying to retain outdated and outmodeled technological approaches.
The truth is that there are alternatives to technological and legal barriers to copyright violation with digital media. Alternatives that provide superior protection, and enhance revenues.
Please do something about this atrocious piece of legislature called the Digital Millennium Copyright Act. It only serves to block progress while providing monopoly status for a select few.