A waterbed patent was rejected due to it appearing in a Heinlein novel [1]. Prior art is any publication (journal article, blog post, novel, movie, etc.) or public release (software, hardware), no matter how obscure that describes the patent in sufficient detail so that it can be reproduced by someone skilled in the art prior to the application of the patent.
For example, the UI interaction in Minority Report cannot be patented as it is described in the movie sufficiently, but a holographic touchscreen display to realize that UI would be patentable (the film does not sufficiently describe the tech involved).
Not only that, but if you have watched 75% of the video and go back near the beginning, youtube will forget that you have over 75% already and only keep the small play-ahead buffer. And, if you leave the video and come back after a certain period it will refuse to load more data saying "an error has occurred", so you need to refresh the page.
I suspect that it is to do with adding the vampire mechanic to Dawnguard (new skill tree, new form, powers and abilities, etc.). This most likely required modifying the core Skyrim engine (program) to add the new logic, which is where Bethesda is likely having the issues getting working on the PS3. With Shivering Isles, I suspect that this did not require extending the core Oblivion engine just adding new content.
One of the jurors said that they stopped considering prior art as it was taking too much time. They also said that they wanted to send a message to Samsung to punish it (despite what the jury instructions -- which they did not read -- said).
The lawyers did not have time to defend/invalidate the patents -- they were given 25 hours total for examination and cross-examination of the witnesses. A lot of evidence (internal designs, the Night Ridder, StarTrek PADD, 2001 device, etc.) was excluded.
Also, invalidating patents is done in the Supreme Court, not the Court where this was tried.
That's part of the problem:
-- there are lots of different rulings (Lotus vs Borland, Bilski, Oracle vs Google, Samsung vs Apple) that are saying different things;
-- the validity of the patents in Samsung vs Apple was not assessed in the Supreme Cort before assessing damages for selling infringing (if any) products;
-- trivial patents that are non-trivially worded (the invention is supposed to be sufficiently documented it is reproducible by someone versed in the area in question, these patents aren't) have been flooding the USPTO for years;
-- there is no adequate prior art investigation prior to approval (this is left to the courts);
-- patents are valid far too long (compare the pace of technology now vs. when patents were introduced).
No, it just means that you cannot correlate the data. Without knowing what the high/low cycle was like previously -- with data spanning at least two ice ages -- you cannot make predictions like "this is a result of human pollution" or "this is caused by global warming" or how much of an impact we are having. Now, I am not saying we are having no effect on the planet, I am saying it is difficult to separate natural vs arteficial varaince.
It is possible to measure and correlate human impact on the Earth for things like CFCs, but just having data recorded over a small period of time (when considering ice ages) without any other measurements is not possible to draw any conclusions other than "the Arctic ice is getting smaller for now" (looking at the current trend in the data). We don't know if this is part of a longer cycle (low/high ice cover over ice ages) or if it is associated with the amount of CO2 in the oceans (which we do know is increasing and is man made due to the amount of CO2 we are producing and the equillibrium equation CO2 and water have).
For example, lets say we record the average temperature of a place starting at winter, where we have humans building fires for warmth. As we keep track of the temperatures it moves into summer and the temperatures increase. Now we say that the averate temperature is at a record high. This is true, but we have not recorded the activity for a full season.
Now, one way to get a better picture is to have the records of both the Arctic and Antarctic ice. Measure other factors like the ambiant water temperature, ambiant air temperature, CO2 levels, amount of solar radiation, thickness of the ozone layer, solar activity level (measuring the effect, if any, that solar cycles have on ice levels) as well. Then you can look for correlations and patterns. Then you can create theories and make predicitons based on those.
And what about all open source licenses (BSD, GPL, Apache,...) that effectively have the same thing? Note that this also includes things like the Boost C++ Libraries that are the basis for libraries going into new versions of C++ (with several Boost libraries making it into TR1 and C++11), Qt and other libraries. If a company releases software that has a security vulnerability in one of these libraries it distributes, is that company liable for that said library? Are they liable if they distribute things like the Microsoft C/C++ runtimes if those include security vulnerabilities?
The problem is that no software (unless it is very trivial) will be bug free and typical software is large and complex, so the likelyhood it will have security vulnerabilities is exceptionally high (I would say is a given).
That is not to say that companies/developers cannot employ techniques to reduce these -- things like adequate unit/component/integration tests, fuzz testing, security reviews, static code analysis, etc. -- it is just impossible to not have any.
Unit tests are hugely important. Getting the code under test early is a lot easier than retrofitting it to existing code.
I will also stress that a good test library/framework/harness should provide you with as much information as possible when a test case fails -- this should help quickly identify the problematic code.
Also, get into the practice of writing test cases for bugs -- especially if you can do that before fixing the bug. This will help avoiding regressions in the future when doing things like refactoring the code or fixing other bugs.
For my projects, I will typically fix things I find as I find them. Where I use a bug/issue tracker is for bigger things like tracking planned features for a roadmap -- things that will take longer to develop.
You could also have a problem near a release that is not critical, but you need to remember to fix it later on, or a defect that can only be fixed with an architectural change.
A bug tracking system is also useful for other people to report issues or feature requests they find to you/the developers -- things you are not necessarily aware of. This could also be extended to handle support issues for the application that are not necessarily bugs.
For other things -- like document format standard support -- I track them by using CSV files in the codebase that enumerate the sections in the standard and include the release in which they are implemented. Different versions of the standard get their own CSV file, with a high-level implementation CSV file for the standard across versions. I then use those to generate HTML implementation status pages.
Technically, the Visual C++ command line was only available for free with the Platform/Windows SDK ~10 years ago. The reason they did that back then was that GCC was free and could be used to write Windows applications. Microsoft then saw it as a threat to their development platform, so released the compiler as part of the SDK for free to compete.
Now, with Microsoft dropping the Visual C++ 2011 compiler from the SDK, they are going to be in the same situation they were in ~10 years ago, but this time with GCC and LLVM/Clang being available *and* having better support for the new C++11 standard language features.
Yes, Visual C++ 2010 will still be available, but it has limited C++11 support. This means that projects like Notepad++, WinMerge, Firefox, Chromium and others that use the Windows SDK to build on Windows will either (1) have to restrict their C++11 usage, (2) complicate their code with workarounds for unsupported features or (3) not support the Visual C++ compiler. In the short term, they are going to use a combination of 1 and 2, but a few years down the line this will likely change.
I tried to run Gnome 3 on Ubuntu 11.04. Not the best thing to do, but I was interested in trying it out. I broke the login UI so I could not log into the system.
Now, if this was Windows I would be forced to reinstall. In Linux, I could switch to a shell prompt (i.e. Ctrl+Alt+F4 worked). With that I was able to add, remove and upgrade components/the system so the GUI login prompt worked again and I had a functional system. I have not had to reinstall my Linux desktop system (which I am using now) for years.
BTW: You did not need to reinstall from scratch to fix the KDE issue. You could have switched to a shell prompt, installed Gnome or Unity and used that.
If you have problems, then report bugs. Don't go "oh, this is horrible, so I will complain about it and do nothing." I do (https://bugs.launchpad.net/~msclrhd-gmail).
This also goes for the people complaining about Gnome 3 and Unity. If you don't report the issues, they are unlikely to get fixed.
If you look at the work that Apple supports (clang, etc.), they are using non-GPL licenses. Same goes for code on CodePlex (the Microsoft site for C#/.NET open source projects). If you look at any of the ruby, python, javascript projects on GitHub, they tend to use a non-GPL license.
C/C++ projects make up 11% of the projects on github and these tend to be the languages that use GPL.
I personally use GPL for my projects because I am happy with that license, and use other projects that are GPL. Others may not, so they are free to choose a different language.
And we have heard repeatedly from Brian Proffitt that the GPL is dying/dead, but is still being used for new projects. Oh and this is article dated December 16, 2011, so why is this news now?
Python, Ruby or some other similar scripting languages are great to start on and build up an understanding -- they allow you to start small and build up an understanding of what you are doing without any "noise".
The Khan Academy has programming videos oriented around Python (http://www.khanacademy.org/#computer-science), not sure how good they are but the Math videos are good so it'd be worth checking out.
An advantage of python is that if you run it from the command line on its own, you get an interpreter where you can start typing commands and seeing the results (e.g. 2+5 'hello world'.split(' ') ':'.join(['a', 'b']) ).
The other language mentioned here is JavaScript. The main problems with starting with JavaScript as a language is what other non-scripting languages suffer from: there is a lot you have to do to get up and running (there is nothing like hearing "just ignore the public static void bit for now" when learning to program) -- especially when you have to read a different markup (html) to get started.
If you do decide to go down the JavaScript route, use something that makes it interactive and fun. See the "Bret Victor - Inventing on Principle" video (http://vimeo.com/36579366) for a good idea on that w.r.t. the 2D drawing APIs where you have the JavaScript on one side and the picture it generates on the other and what you change on the JavaScript side gets immediately picked up on the picture side. See http://gabrielflor.it/water for an implementation of this!
More generally, a good choice to start with is something that gives you decent feedback quickly and something that allows you to experiment and have fun with it.
But on the linux world, you don't have a "press the activities button on Gnome Shell to take you to the KDE desktop, or press the KDE menu to take you to the Unity shell" like you do in Windows 8, with your KDE asnd GNOME applications managed by different task managers.
KDE/Qt applications and GNOME/Gtk+ applications running side-by-side is equivalent to Metro applications running windowed on the Desktop shell, and Desktop applications running full screen Metroized on the Metro shell.
Microsoft are only supporting WinRT (the new API to write Metro applications) applications, not Win32 applications (aside from Microsoft Office, IE and Windows Explorer) on Windows ARM. Those are the only times you get to see the desktop on ARM devices and it is only there because they cannot port Office in time.
Any Metro applications that are published (going through the Microsoft store, which is the only way to distribute Metro applications) have to use WinRT (including the WinRT subset of the Win32 API) -- if you use any of the verboten Win32 APIs you cannot get your application on the Metro store.
How many articles refer to the desktop as "legacy" (google "windows 8 legacy desktop").
Does the Metro Desktop interaction feel integrated, smooth, consistent and supported to you, or does it feel like Microsoft said "we need to support 'legacy' applications, so we'll tack the desktop on to Metro as another Metro application and not bother about seamlessly integrating the two".
Microsoft are not supporting desktop -- they have shoved it into a Metro-style application that runs the Desktop in isolation to everything else, just like you can run your DOS/command line in a nice little Desktop window. Yes, they will tweak it here and there to keep businesses happy, but all the new stuff will be done in the Metro world.
Having competing products (browsers, compilers, operating systems,...) help keep those products from stagnating and help push all involved products to improving. It also helps prevent people being reliant on specific compiler/browser/office suite behaviour. GCC is not a "crap compiler", just like Firefox is not a "crap browser". That is not saying that GCC is issue free, nor that it has improved in part as a result from LLVM/Clang. Likewise, LLVM/Clang is not the panacea of compilers.
Competition on a level playing field is a good thing.
A waterbed patent was rejected due to it appearing in a Heinlein novel [1]. Prior art is any publication (journal article, blog post, novel, movie, etc.) or public release (software, hardware), no matter how obscure that describes the patent in sufficient detail so that it can be reproduced by someone skilled in the art prior to the application of the patent.
For example, the UI interaction in Minority Report cannot be patented as it is described in the movie sufficiently, but a holographic touchscreen display to realize that UI would be patentable (the film does not sufficiently describe the tech involved).
[1] http://www.techrepublic.com/article/geek-trivia-strange-waterbedfellows/6098825
Not only that, but if you have watched 75% of the video and go back near the beginning, youtube will forget that you have over 75% already and only keep the small play-ahead buffer. And, if you leave the video and come back after a certain period it will refuse to load more data saying "an error has occurred", so you need to refresh the page.
I suspect that it is to do with adding the vampire mechanic to Dawnguard (new skill tree, new form, powers and abilities, etc.). This most likely required modifying the core Skyrim engine (program) to add the new logic, which is where Bethesda is likely having the issues getting working on the PS3. With Shivering Isles, I suspect that this did not require extending the core Oblivion engine just adding new content.
One of the jurors said that they stopped considering prior art as it was taking too much time. They also said that they wanted to send a message to Samsung to punish it (despite what the jury instructions -- which they did not read -- said).
The lawyers did not have time to defend/invalidate the patents -- they were given 25 hours total for examination and cross-examination of the witnesses. A lot of evidence (internal designs, the Night Ridder, StarTrek PADD, 2001 device, etc.) was excluded.
Also, invalidating patents is done in the Supreme Court, not the Court where this was tried.
Compare this trial with Oracle vs Google.
That's part of the problem:
-- there are lots of different rulings (Lotus vs Borland, Bilski, Oracle vs Google, Samsung vs Apple) that are saying different things;
-- the validity of the patents in Samsung vs Apple was not assessed in the Supreme Cort before assessing damages for selling infringing (if any) products;
-- trivial patents that are non-trivially worded (the invention is supposed to be sufficiently documented it is reproducible by someone versed in the area in question, these patents aren't) have been flooding the USPTO for years;
-- there is no adequate prior art investigation prior to approval (this is left to the courts);
-- patents are valid far too long (compare the pace of technology now vs. when patents were introduced).
No, it just means that you cannot correlate the data. Without knowing what the high/low cycle was like previously -- with data spanning at least two ice ages -- you cannot make predictions like "this is a result of human pollution" or "this is caused by global warming" or how much of an impact we are having. Now, I am not saying we are having no effect on the planet, I am saying it is difficult to separate natural vs arteficial varaince.
It is possible to measure and correlate human impact on the Earth for things like CFCs, but just having data recorded over a small period of time (when considering ice ages) without any other measurements is not possible to draw any conclusions other than "the Arctic ice is getting smaller for now" (looking at the current trend in the data). We don't know if this is part of a longer cycle (low/high ice cover over ice ages) or if it is associated with the amount of CO2 in the oceans (which we do know is increasing and is man made due to the amount of CO2 we are producing and the equillibrium equation CO2 and water have).
For example, lets say we record the average temperature of a place starting at winter, where we have humans building fires for warmth. As we keep track of the temperatures it moves into summer and the temperatures increase. Now we say that the averate temperature is at a record high. This is true, but we have not recorded the activity for a full season.
Now, one way to get a better picture is to have the records of both the Arctic and Antarctic ice. Measure other factors like the ambiant water temperature, ambiant air temperature, CO2 levels, amount of solar radiation, thickness of the ozone layer, solar activity level (measuring the effect, if any, that solar cycles have on ice levels) as well. Then you can look for correlations and patterns. Then you can create theories and make predicitons based on those.
And what about all open source licenses (BSD, GPL, Apache, ...) that effectively have the same thing? Note that this also includes things like the Boost C++ Libraries that are the basis for libraries going into new versions of C++ (with several Boost libraries making it into TR1 and C++11), Qt and other libraries. If a company releases software that has a security vulnerability in one of these libraries it distributes, is that company liable for that said library? Are they liable if they distribute things like the Microsoft C/C++ runtimes if those include security vulnerabilities?
The problem is that no software (unless it is very trivial) will be bug free and typical software is large and complex, so the likelyhood it will have security vulnerabilities is exceptionally high (I would say is a given).
That is not to say that companies/developers cannot employ techniques to reduce these -- things like adequate unit/component/integration tests, fuzz testing, security reviews, static code analysis, etc. -- it is just impossible to not have any.
Actually, it will (https://bugzilla.mozilla.org/show_bug.cgi?id=759945) along with AAC and H.264 via libstagefright.
What it likely means is things like providing JavaScript APIs for multi-touch, orientation and accelerometer queries, audio reading/writing, etc.
Or even RTF summary,
Unit tests are hugely important. Getting the code under test early is a lot easier than retrofitting it to existing code.
I will also stress that a good test library/framework/harness should provide you with as much information as possible when a test case fails -- this should help quickly identify the problematic code.
Also, get into the practice of writing test cases for bugs -- especially if you can do that before fixing the bug. This will help avoiding regressions in the future when doing things like refactoring the code or fixing other bugs.
For my projects, I will typically fix things I find as I find them. Where I use a bug/issue tracker is for bigger things like tracking planned features for a roadmap -- things that will take longer to develop.
You could also have a problem near a release that is not critical, but you need to remember to fix it later on, or a defect that can only be fixed with an architectural change.
A bug tracking system is also useful for other people to report issues or feature requests they find to you/the developers -- things you are not necessarily aware of. This could also be extended to handle support issues for the application that are not necessarily bugs.
For other things -- like document format standard support -- I track them by using CSV files in the codebase that enumerate the sections in the standard and include the release in which they are implemented. Different versions of the standard get their own CSV file, with a high-level implementation CSV file for the standard across versions. I then use those to generate HTML implementation status pages.
Open a new tab and point it to "about:memory" -- this should tell you what is consuming the memory.
Why are things so heavy in the future? Has the Earth's gravity increased or something?
Technically, the Visual C++ command line was only available for free with the Platform/Windows SDK ~10 years ago. The reason they did that back then was that GCC was free and could be used to write Windows applications. Microsoft then saw it as a threat to their development platform, so released the compiler as part of the SDK for free to compete.
Now, with Microsoft dropping the Visual C++ 2011 compiler from the SDK, they are going to be in the same situation they were in ~10 years ago, but this time with GCC and LLVM/Clang being available *and* having better support for the new C++11 standard language features.
Yes, Visual C++ 2010 will still be available, but it has limited C++11 support. This means that projects like Notepad++, WinMerge, Firefox, Chromium and others that use the Windows SDK to build on Windows will either (1) have to restrict their C++11 usage, (2) complicate their code with workarounds for unsupported features or (3) not support the Visual C++ compiler. In the short term, they are going to use a combination of 1 and 2, but a few years down the line this will likely change.
I tried to run Gnome 3 on Ubuntu 11.04. Not the best thing to do, but I was interested in trying it out. I broke the login UI so I could not log into the system.
Now, if this was Windows I would be forced to reinstall. In Linux, I could switch to a shell prompt (i.e. Ctrl+Alt+F4 worked). With that I was able to add, remove and upgrade components/the system so the GUI login prompt worked again and I had a functional system. I have not had to reinstall my Linux desktop system (which I am using now) for years.
BTW: You did not need to reinstall from scratch to fix the KDE issue. You could have switched to a shell prompt, installed Gnome or Unity and used that.
If you have problems, then report bugs. Don't go "oh, this is horrible, so I will complain about it and do nothing." I do (https://bugs.launchpad.net/~msclrhd-gmail).
This also goes for the people complaining about Gnome 3 and Unity. If you don't report the issues, they are unlikely to get fixed.
Didn't we have this story last week?
If you look at the work that Apple supports (clang, etc.), they are using non-GPL licenses. Same goes for code on CodePlex (the Microsoft site for C#/.NET open source projects). If you look at any of the ruby, python, javascript projects on GitHub, they tend to use a non-GPL license.
C/C++ projects make up 11% of the projects on github and these tend to be the languages that use GPL.
I personally use GPL for my projects because I am happy with that license, and use other projects that are GPL. Others may not, so they are free to choose a different language.
And we have heard repeatedly from Brian Proffitt that the GPL is dying/dead, but is still being used for new projects. Oh and this is article dated December 16, 2011, so why is this news now?
Welcome to the FUD machine.
NOTE: the main relevant examples on the video are:
2:30 - 9:40 -- example 1 : dynamic interactive JavaScript canvas 2D drawing editor
10:20 - 16:40 -- example 2 : visualizing the effects of time-dependent code (using a game as an example of this), experimenting with game mechanics
16:40 - 22:40 -- example 3 : visualizing algorithms and data flow
The python example should read:
2+5
[ENTER]
'hello world'.split(' ')
[ENTER]
':'.join(['a', 'b'])
[ENTER]
Slashdot ate the angle brackets on ENTER.
Python, Ruby or some other similar scripting languages are great to start on and build up an understanding -- they allow you to start small and build up an understanding of what you are doing without any "noise".
The Khan Academy has programming videos oriented around Python (http://www.khanacademy.org/#computer-science), not sure how good they are but the Math videos are good so it'd be worth checking out.
An advantage of python is that if you run it from the command line on its own, you get an interpreter where you can start typing commands and seeing the results (e.g. 2+5 'hello world'.split(' ') ':'.join(['a', 'b']) ).
The other language mentioned here is JavaScript. The main problems with starting with JavaScript as a language is what other non-scripting languages suffer from: there is a lot you have to do to get up and running (there is nothing like hearing "just ignore the public static void bit for now" when learning to program) -- especially when you have to read a different markup (html) to get started.
If you do decide to go down the JavaScript route, use something that makes it interactive and fun. See the "Bret Victor - Inventing on Principle" video (http://vimeo.com/36579366) for a good idea on that w.r.t. the 2D drawing APIs where you have the JavaScript on one side and the picture it generates on the other and what you change on the JavaScript side gets immediately picked up on the picture side. See http://gabrielflor.it/water for an implementation of this!
More generally, a good choice to start with is something that gives you decent feedback quickly and something that allows you to experiment and have fun with it.
But on the linux world, you don't have a "press the activities button on Gnome Shell to take you to the KDE desktop, or press the KDE menu to take you to the Unity shell" like you do in Windows 8, with your KDE asnd GNOME applications managed by different task managers.
KDE/Qt applications and GNOME/Gtk+ applications running side-by-side is equivalent to Metro applications running windowed on the Desktop shell, and Desktop applications running full screen Metroized on the Metro shell.
Microsoft are only supporting WinRT (the new API to write Metro applications) applications, not Win32 applications (aside from Microsoft Office, IE and Windows Explorer) on Windows ARM. Those are the only times you get to see the desktop on ARM devices and it is only there because they cannot port Office in time.
Any Metro applications that are published (going through the Microsoft store, which is the only way to distribute Metro applications) have to use WinRT (including the WinRT subset of the Win32 API) -- if you use any of the verboten Win32 APIs you cannot get your application on the Metro store.
How many articles refer to the desktop as "legacy" (google "windows 8 legacy desktop").
Does the Metro Desktop interaction feel integrated, smooth, consistent and supported to you, or does it feel like Microsoft said "we need to support 'legacy' applications, so we'll tack the desktop on to Metro as another Metro application and not bother about seamlessly integrating the two".
Microsoft are not supporting desktop -- they have shoved it into a Metro-style application that runs the Desktop in isolation to everything else, just like you can run your DOS/command line in a nice little Desktop window. Yes, they will tweak it here and there to keep businesses happy, but all the new stuff will be done in the Metro world.
You mean like Chrome's rapid release cycle?
Having competing products (browsers, compilers, operating systems, ...) help keep those products from stagnating and help push all involved products to improving. It also helps prevent people being reliant on specific compiler/browser/office suite behaviour. GCC is not a "crap compiler", just like Firefox is not a "crap browser". That is not saying that GCC is issue free, nor that it has improved in part as a result from LLVM/Clang. Likewise, LLVM/Clang is not the panacea of compilers.
Competition on a level playing field is a good thing.