About 13 years ago, I had a TI-81 calculator which I loved. One day I put it in my bag to take to school, along with some honey that I was going to have for lunch. The top of the honey came off and the calculator soaked in it until it became completely permeated by honey. I could see honey inside the screen. The calculator no longer worked at this point.
So I took the calculator home, filled the sink with water, and swished the calculator around in the water for about ten minutes until I couldn't see honey inside the screen anymore.
Then I let it dry out. A day went by and it still wasn't working. Then another day, still dead.
After about three days the inside of the screen had cleared to the point where it only had some condensed moisture around the edges. At this point it not only turned on on, but to my delight I discovered that it still had all the programs that I had laboriously typed in over the past few months.
The government classifies programming as a service sector job. This is because no actual tangible good is produced -- it's not farming, and it's not manufacturing.
I read your objection as saying "yes but those are low-paying jobs" and that may be true. But "low-paying" is not the same as "service sector", and should not be confused with it.
The problem is that all of this has to happen in different rooms. The spinning wheel has to be in a temperature-controlled room (there were actually two different wheels, in two different rooms with different temperatures). The pipettes and bench are in another room, and the optical density measurement device is in yet another room, because it's shared between multiple labs.
There are fully automated labs where everything is set up in a more machine-friendly way, but they're much more expensive. More expensive than grad students, anyway.
Also, don't understimate the difficulty of programming a robot arm to manipulate all this stuff. It requires a combination of force (you sometimes have to push hard to get things in), and judgement (if you push in the wrong way, you'll just crush them).
Lots of people are commenting that this isn't that useful because the robot won't come up with new scientific breakthroughs. But I suspect that none of these people have actually done biotech lab work.
Lab work largely consists of doing the same thing over and over and over and over. My partner is doing a PhD in molecular biology, and I have spent more than a few nights and weekends helping her by being a robot. For example, one Sunday I spent about 10 hours gathering "growth curve" data. This involves taking dozens of vials of growing yeast, and measuring their optical density every 2 hours or so. To do this, you take the vials out of a spinning wheel, put them in a tube holder, carry the tubes to a desk, put new tips on a pipette, mix the tubes to stir them up again, suck out some of the fluid, and squirt the fluid into a smaller tube. Then you put the large tubes back, carry the little tubes to the optical density device, insert them, run the measurement, print out the results, pull out the little tubes, put them in a styrofoam holder for posterity, and repeat.
This process was incredibly labor intensive -- I had about 10 minutes of rest time every 2 hours, over the course of 10 hours. And after those 10 hours my partner took over and continued the process for another 10 hours.
Not only would a robot have been a welcome relief to this process, we actually spent quite a while discussing the specific requirements and possible design of such a robot.
A robot like this is useful because it provides the equivalent of a compiler and automated test suite. The interesting things in biological science do not come from grad students running through the grunt work manually -- they come from grad students using their brains to design the experiment and then analyze the results.
Obviously this robot won't replace the grad students entirely. But it might let them be vastly more productive.
Verification of arbitrary programs is a very different proposition from constructing programs given a specification. The first is based on taking a given program and proving it has certain properties. The second is based on creating a program that has certain properties because you constructed it that way.
There are lots of ways to create an under-specified specification that admits multiple possible program implementations, and then allow the compiler to simply "choose one" arbitrarily. For examples, look into the field of constraint programming. What the grandparent post is really asking for is "don't-care nondeterminism" applied at the level of static code, rather than the level of dynamic exploration, as with constraint programming.
The difficulty with this is not so much that it is impossible, as that we currently don't have many mathematical tools for predicting the runtime behavior of static code. The problem is similar to looking at a picture of the Mandelbrot set and trying to figure out what equation to use to produce it. I expect that there will always be a limit to what kinds of dynamic behavior we will be able to deduce static rules for, but over time the set of dynamic behaviors that we "understand" enough to automatically generate will grow. In particular, most of the dynamic behaviors that people are interested in are relatively simple to describe -- a dropdown list is much simpler than the Mandelbrot set, for example.
For example, we have already made progress in fields such as parsing, register allocation, garbage collection, etc. The set of techniques that are "baked into" modern programming languages will continue to grow, and what currently requires detailed implementation will eventually be automatically generated. At that point, we'll take it for granted, and people (such as the author of the parent post) will continue to claim that it's impossible to move any further towards the holy grail of automatic programming.
You have to let people know the project exists. Simply listing it on freshmeat won't get you much, as I know (I've listed a couple of projects there). My site gets practically zero traffic from those listings.
There are a couple things I've found that help. First, find a discussion group focused on a subject relevant to your project, and mention it occasionally when it becomes relevant to the discussion -- this gets you kickstarted, but it's not a long-term solution. Second, you might start some kind of blog on the site, so that people have a reason to follow your progress. Rant about the state of the real estate market or something. This is the long-term solution.
I've done both of these things, and eventually they get you a lot more traffic than freshmeat ever will. The more traffic you get, the more likely that someone will link to your site, which will raise your google ranking, which increases the amount of traffic you get, which starts the whole feedback loop all over again. You just need to focus on making sure that your visitors have a reason to link you once they're there.
Actually I think it's pretty reasonable to start the history at the time of the printing press, because until that time, the bible itself didn't really matter that much. The church hierarchy simply told the illiterate peasants what christianity was really all about, and the peasants didn't have any bible with which to check those claims. There was a lot of regional variation in what the official church doctrine was, because priests were free to fit the official church teachings into local traditions, to better accomodate their local community.
Once the printing press was invented, you got the Protestant Revolution -- Luther claimed that christians didn't need the hierarchy to tell them how to act, all they had to do was read the bible. Once this happened, and people started actually reading the bible, you got hundreds of christian sects (because everybody read it slightly differently), and the church splintered.
In order to counteract the Protestant Revolution, the church had to prove that it wasn't simply a corrupt beaurocracy, so it decided to fix up its doctrine to correspond better with the bible. And that's when the catholic church became conservative -- until that time, they basically had a monopoly on intellectual thought throughout Europe. All the new artistic movements, all the new literary movements, everything came from the Church.
So considering that the bible wasn't really important until the printing press, it seems a natural place to start following its history.
Re:The *Real* Problem with X11 and the unix deskto
on
Qt On DirectFB
·
· Score: 1
actually X selections are more powerful than other systems at allowing cut-n-paste and drag-n-drop of non-text. X selections let the pastee and paster negotiate on a prefered file format based on what they have to offer and what they can accept.
Actually, Windows does the same thing, as does the Java drag-and-drop api.
And if you think that's funny...
on
The Big Kerplop
·
· Score: 0, Troll
> Wait, this is/. No chance of pregnancy here. Whew!
If you think that's funny, then perhaps you should consider the impression it makes on women considering going into programming as a career. I get so tired of people claiming that the programming industry isn't sexist, when comments like this get moderated to 5.
How would you feel about going into programming if it was largely dominated by women, and if you wanted to fit in then you would be expected to become "one of the girls" and just laugh along with comments like this one?
I'm not just complaining for my own sake here -- it's also in (straight) men's best interest to get rid of this kind of atmosphere. Wouldn't you like to work in a career where you might actually have the opportunity to meet women? If so, then quit acting like this is a boys-only clubhouse.
Go right ahead, moderate this as a troll. But someone's got to say something sometime.
This is fun!:) I loved galaga when it was new. The only problem is that once you get to where you can shoot four bullets at once, the game is pretty easy. And it's not clear what to do with the falling ships (I was expecting them to hook up with my current ship, ala galaga, and let me shoot double).
I actually started a similar project with someone I was teaching java (we were going to do pacman), but she never got this far. Thanks for posting.
11. You must never install software on my computer that hijacks other software, causing it to display popups or to add affiliate ids to purchases I make.
12. You must never install software on my computer that connects to a remote server, unless the software first obtains my permission to do so, and explains what information will be sent to the remote server.
Re:This is a GOOD patent.
on
Mighty Amazon
·
· Score: 1
Now that Amazon has spent the money to prove that the idea IS a good one, why should everyone else get to use that idea for free
Because it wouldn't cost Amazon anything
Because it would help the rest of the economy grow.
When I first started programming, I worked with a guy we all knew as RDH. He owned an audi, and at some point he started bringing the rom from his car in to work, and disassembling it. Then he tweaked it, burnt a new rom, and stuck it back in the car. This was five or six years ago.
I rode in his car a couple times. There were five or six big switches mounted on the passenger-side dashboard. I asked him once what they did, and all he said was "Don't touch those" (we were driving at the time).
Apparently he became relatively well-known in the Audi enthusiast community. A google search for RDH Audi turns up 656 hits. His initials are even listed in this page of Acronyms related to Audi.
First, try not to spread around all the code that changes the GUI. For example, if you're displaying a dialog box, I like to have one function that basically computes the entire dialog's appearance -- fills in all the fields, enables/disables everything, sets labels correctly, etc, etc. Think of the entire GUI as the result of a computation that takes your "model" as input -- and make that computation centralized. It's easier to correctly handle one or two different "something changed" events than one or two hundred.
If you take that to the extreme, then you'll eventually run into slow update times, since you're basically redrawing everything whenever anything changes. So if you start noticing slow response time, then you can start separating the update code into pieces that do less work. But avoid premature optimization.
Second, always make sure that your GUI accurately reflects the contents of your model. For example, if you're working on a GUI that controls some hardware, and the user hits the Shutdown button, then don't immediately display that the device has shut down -- instead, just send the shutdown message to the device, take whatever precautions you need to in order to make sure you don't let the user hit Shutdown a second time, and then wait until you hear back from the device before you display to the user that it has shut down. In fact, I wouldn't even display to the user that the device is "shutting down", since for all you know it never got the message.
In general, when updating the GUI, try to update everything that MIGHT have possibly changed, instead of trying to do the least work possible. An example of a program that fails to do this correctly is Abiword when it uses red under-squiggles for misspelled words. If you scroll so that part of the squiggle is off the page, and then you scroll back up, then sometimes the squiggle gets displayed incorrectly -- it looks sheared.
It's been a couple years since I did GUI work, but off the top of my head those are a couple of the most useful techniques.
Apparently it needed to be pointed out -- nobody else has.
Given that this comment was made in the context of hiring, I think the implicit assumption that the candidate would be a heterosexual male is even more disturbing.
Come on people! Don't let this kind of crap go unchallenged!
Don't get all worked up over this. Nearly every large corporation runs software that they themselves have created, and which they never release or even mention to the outside world. This is usually called "in-house" software. If Microsoft manages to create a system that won't run any in-house software, then no large corporation will buy it.
Clearly, if a corporation can create its own software and run it, so can anyone else, whether they compiled it themselves or downloaded it from the net. At worst, you might have to run a little script to "bless" a binary that you downloaded from the net, by resigning it with your own key or something.
There are some newer technologies that extend the old concept of "search", in order to make browsing much easier online. For example, check out Barnes and Nobles BookBrowser. It organizes books by overlapping categories, and makes it much easier to find books you didn't know about. I picked up a couple books I'd never heard of, by exploring their science fiction categories.
About 13 years ago, I had a TI-81 calculator which I loved. One day I put it in my bag to take to school, along with some honey that I was going to have for lunch. The top of the honey came off and the calculator soaked in it until it became completely permeated by honey. I could see honey inside the screen. The calculator no longer worked at this point.
So I took the calculator home, filled the sink with water, and swished the calculator around in the water for about ten minutes until I couldn't see honey inside the screen anymore.
Then I let it dry out. A day went by and it still wasn't working. Then another day, still dead.
After about three days the inside of the screen had cleared to the point where it only had some condensed moisture around the edges. At this point it not only turned on on, but to my delight I discovered that it still had all the programs that I had laboriously typed in over the past few months.
The government classifies programming as a service sector job. This is because no actual tangible good is produced -- it's not farming, and it's not manufacturing.
I read your objection as saying "yes but those are low-paying jobs" and that may be true. But "low-paying" is not the same as "service sector", and should not be confused with it.
The problem is that all of this has to happen in different rooms. The spinning wheel has to be in a temperature-controlled room (there were actually two different wheels, in two different rooms with different temperatures). The pipettes and bench are in another room, and the optical density measurement device is in yet another room, because it's shared between multiple labs.
There are fully automated labs where everything is set up in a more machine-friendly way, but they're much more expensive. More expensive than grad students, anyway.
Also, don't understimate the difficulty of programming a robot arm to manipulate all this stuff. It requires a combination of force (you sometimes have to push hard to get things in), and judgement (if you push in the wrong way, you'll just crush them).
Lots of people are commenting that this isn't that useful because the robot won't come up with new scientific breakthroughs. But I suspect that none of these people have actually done biotech lab work.
Lab work largely consists of doing the same thing over and over and over and over. My partner is doing a PhD in molecular biology, and I have spent more than a few nights and weekends helping her by being a robot. For example, one Sunday I spent about 10 hours gathering "growth curve" data. This involves taking dozens of vials of growing yeast, and measuring their optical density every 2 hours or so. To do this, you take the vials out of a spinning wheel, put them in a tube holder, carry the tubes to a desk, put new tips on a pipette, mix the tubes to stir them up again, suck out some of the fluid, and squirt the fluid into a smaller tube. Then you put the large tubes back, carry the little tubes to the optical density device, insert them, run the measurement, print out the results, pull out the little tubes, put them in a styrofoam holder for posterity, and repeat.
This process was incredibly labor intensive -- I had about 10 minutes of rest time every 2 hours, over the course of 10 hours. And after those 10 hours my partner took over and continued the process for another 10 hours.
Not only would a robot have been a welcome relief to this process, we actually spent quite a while discussing the specific requirements and possible design of such a robot.
A robot like this is useful because it provides the equivalent of a compiler and automated test suite. The interesting things in biological science do not come from grad students running through the grunt work manually -- they come from grad students using their brains to design the experiment and then analyze the results.
Obviously this robot won't replace the grad students entirely. But it might let them be vastly more productive.
Verification of arbitrary programs is a very different proposition from constructing programs given a specification. The first is based on taking a given program and proving it has certain properties. The second is based on creating a program that has certain properties because you constructed it that way.
There are lots of ways to create an under-specified specification that admits multiple possible program implementations, and then allow the compiler to simply "choose one" arbitrarily. For examples, look into the field of constraint programming. What the grandparent post is really asking for is "don't-care nondeterminism" applied at the level of static code, rather than the level of dynamic exploration, as with constraint programming.
The difficulty with this is not so much that it is impossible, as that we currently don't have many mathematical tools for predicting the runtime behavior of static code. The problem is similar to looking at a picture of the Mandelbrot set and trying to figure out what equation to use to produce it. I expect that there will always be a limit to what kinds of dynamic behavior we will be able to deduce static rules for, but over time the set of dynamic behaviors that we "understand" enough to automatically generate will grow. In particular, most of the dynamic behaviors that people are interested in are relatively simple to describe -- a dropdown list is much simpler than the Mandelbrot set, for example.
For example, we have already made progress in fields such as parsing, register allocation, garbage collection, etc. The set of techniques that are "baked into" modern programming languages will continue to grow, and what currently requires detailed implementation will eventually be automatically generated. At that point, we'll take it for granted, and people (such as the author of the parent post) will continue to claim that it's impossible to move any further towards the holy grail of automatic programming.
Money is usually finite, too. Especially in research. Power costs money. Cooling also costs money.
For those who didn't catch the reference to the skateboarder: http://antwrp.gsfc.nasa.gov/apod/ap031001.html
Apparently slashdot posts work pretty well too. 40 visits in 30 minutes, and still counting...
You have to let people know the project exists. Simply listing it on freshmeat won't get you much, as I know (I've listed a couple of projects there). My site gets practically zero traffic from those listings.
There are a couple things I've found that help. First, find a discussion group focused on a subject relevant to your project, and mention it occasionally when it becomes relevant to the discussion -- this gets you kickstarted, but it's not a long-term solution. Second, you might start some kind of blog on the site, so that people have a reason to follow your progress. Rant about the state of the real estate market or something. This is the long-term solution.
I've done both of these things, and eventually they get you a lot more traffic than freshmeat ever will. The more traffic you get, the more likely that someone will link to your site, which will raise your google ranking, which increases the amount of traffic you get, which starts the whole feedback loop all over again. You just need to focus on making sure that your visitors have a reason to link you once they're there.
Actually I think it's pretty reasonable to start the history at the time of the printing press, because until that time, the bible itself didn't really matter that much. The church hierarchy simply told the illiterate peasants what christianity was really all about, and the peasants didn't have any bible with which to check those claims. There was a lot of regional variation in what the official church doctrine was, because priests were free to fit the official church teachings into local traditions, to better accomodate their local community.
Once the printing press was invented, you got the Protestant Revolution -- Luther claimed that christians didn't need the hierarchy to tell them how to act, all they had to do was read the bible. Once this happened, and people started actually reading the bible, you got hundreds of christian sects (because everybody read it slightly differently), and the church splintered.
In order to counteract the Protestant Revolution, the church had to prove that it wasn't simply a corrupt beaurocracy, so it decided to fix up its doctrine to correspond better with the bible. And that's when the catholic church became conservative -- until that time, they basically had a monopoly on intellectual thought throughout Europe. All the new artistic movements, all the new literary movements, everything came from the Church.
So considering that the bible wasn't really important until the printing press, it seems a natural place to start following its history.
actually X selections are more powerful than other systems at allowing cut-n-paste and drag-n-drop of non-text. X selections let the pastee and paster negotiate on a prefered file format based on what they have to offer and what they can accept.
Actually, Windows does the same thing, as does the Java drag-and-drop api.
> Wait, this is /. No chance of pregnancy here. Whew!
If you think that's funny, then perhaps you should consider the impression it makes on women considering going into programming as a career. I get so tired of people claiming that the programming industry isn't sexist, when comments like this get moderated to 5.
How would you feel about going into programming if it was largely dominated by women, and if you wanted to fit in then you would be expected to become "one of the girls" and just laugh along with comments like this one?
I'm not just complaining for my own sake here -- it's also in (straight) men's best interest to get rid of this kind of atmosphere. Wouldn't you like to work in a career where you might actually have the opportunity to meet women? If so, then quit acting like this is a boys-only clubhouse.
Go right ahead, moderate this as a troll. But someone's got to say something sometime.
This is fun! :) I loved galaga when it was new. The only problem is that once you get to where you can shoot four bullets at once, the game is pretty easy. And it's not clear what to do with the falling ships (I was expecting them to hook up with my current ship, ala galaga, and let me shoot double).
I actually started a similar project with someone I was teaching java (we were going to do pacman), but she never got this far. Thanks for posting.
11. You must never install software on my computer that hijacks other software, causing it to display popups or to add affiliate ids to purchases I make.
12. You must never install software on my computer that connects to a remote server, unless the software first obtains my permission to do so, and explains what information will be sent to the remote server.
Now that Amazon has spent the money to prove that the idea IS a good one, why should everyone else get to use that idea for free
Because it wouldn't cost Amazon anything
Because it would help the rest of the economy grow.
If you're in the Boston area, I'm selling one on Ebay right now.
Sorry, I just couldn't resist.
Another poster mentioned that oracle is pushing linux in a big way, so I assume that handles the software.
Here's the hardware: SGI's altix. Each linux OS image can scale to 64 processors and 512 Gigs of physical RAM. These images can then be clustered, to "span terabytes of global shared memory". Prices start at $70k for 4 CPUs and 36G RAM, and go to $1.2M for 64 CPUs.
Sun's hardware is about four times as expensive.
When I first started programming, I worked with a guy we all knew as RDH. He owned an audi, and at some point he started bringing the rom from his car in to work, and disassembling it. Then he tweaked it, burnt a new rom, and stuck it back in the car. This was five or six years ago.
I rode in his car a couple times. There were five or six big switches mounted on the passenger-side dashboard. I asked him once what they did, and all he said was "Don't touch those" (we were driving at the time).
Apparently he became relatively well-known in the Audi enthusiast community. A google search for RDH Audi turns up 656 hits. His initials are even listed in this page of Acronyms related to Audi.
First, try not to spread around all the code that changes the GUI. For example, if you're displaying a dialog box, I like to have one function that basically computes the entire dialog's appearance -- fills in all the fields, enables/disables everything, sets labels correctly, etc, etc. Think of the entire GUI as the result of a computation that takes your "model" as input -- and make that computation centralized. It's easier to correctly handle one or two different "something changed" events than one or two hundred.
If you take that to the extreme, then you'll eventually run into slow update times, since you're basically redrawing everything whenever anything changes. So if you start noticing slow response time, then you can start separating the update code into pieces that do less work. But avoid premature optimization.
Second, always make sure that your GUI accurately reflects the contents of your model. For example, if you're working on a GUI that controls some hardware, and the user hits the Shutdown button, then don't immediately display that the device has shut down -- instead, just send the shutdown message to the device, take whatever precautions you need to in order to make sure you don't let the user hit Shutdown a second time, and then wait until you hear back from the device before you display to the user that it has shut down. In fact, I wouldn't even display to the user that the device is "shutting down", since for all you know it never got the message.
In general, when updating the GUI, try to update everything that MIGHT have possibly changed, instead of trying to do the least work possible. An example of a program that fails to do this correctly is Abiword when it uses red under-squiggles for misspelled words. If you scroll so that part of the squiggle is off the page, and then you scroll back up, then sometimes the squiggle gets displayed incorrectly -- it looks sheared.
It's been a couple years since I did GUI work, but off the top of my head those are a couple of the most useful techniques.
Apparently it needed to be pointed out -- nobody else has.
Given that this comment was made in the context of hiring, I think the implicit assumption that the candidate would be a heterosexual male is even more disturbing.
Come on people! Don't let this kind of crap go unchallenged!
No, it's really more like sexism. Wait a minute... in fact it is sexism! Fancy that.
Don't get all worked up over this. Nearly every large corporation runs software that they themselves have created, and which they never release or even mention to the outside world. This is usually called "in-house" software. If Microsoft manages to create a system that won't run any in-house software, then no large corporation will buy it.
Clearly, if a corporation can create its own software and run it, so can anyone else, whether they compiled it themselves or downloaded it from the net. At worst, you might have to run a little script to "bless" a binary that you downloaded from the net, by resigning it with your own key or something.
There are some newer technologies that extend the old concept of "search", in order to make browsing much easier online. For example, check out Barnes and Nobles BookBrowser. It organizes books by overlapping categories, and makes it much easier to find books you didn't know about. I picked up a couple books I'd never heard of, by exploring their science fiction categories.
Once you hit 35 or 40, you'll have a much harder time finding a job, even though you'll be better qualified. What kind of merit system is that?
Just turn the volume all the way down. Works for me.