The closest text-to-speech program today is eSpeak which uses an ASCII variant of IPA phonemes. The problem with this is that it has a voice for each language (which is essentially the same voice) with a subset of the IPA phonemes available. I am intending to use IPA fully in my own text-to-speech program and associated voices (http://rhdunn.github.com/cainteoir/) but haven't gotten to implementing the text to phoneme and phoneme to audio parts yet, nor the associated tools for working with them and the different phoneme transcription schemes.
Speech in Language 1 by the user gets converted internally to text using speech recognition software. This then passes through a Language 1 to Language 2 translation program. The text in Language 2 then gets spoken using text-to-speech software using a voice created from the user's own voice. The bit in the middle is transparent to the user, which is why it looks like speech-to-speech.
Provided that the speech recognition engine is good enough, it can distinguish between the/Q/ and/A/ sounds in lot (British English:/lQt/, General American English:/lAt/), cot, hot, etc, with/A/ also appearing in father/fA:D@/. This will mean that the speech recognition engine will record the actual phonemes spoken, rather than the phonemes it thinks are being spoken. With this, it can then build up a database of phonemes to the recorded audio.
When a given language is selected (strictly speaking it is a language + accent, as Liverpudlian English sounds different to Australian English and Mexican Spanish sounds different to Argentinian Spanish) it will have a set of rules that describe how to convert the text into phonemes specific to that accent (for example, "ook" is usually pronounced/Vk/ in English, but in Scouse English it can be/Vx/). These rules provide a set of phonemes required by the language+accent to speak it properly.
The phonemes are transcriptions of IPA-based phonemes (http://en.wikipedia.org/wiki/International_Phonetic_Alphabet). If you plot the phonemes available by the voice on the phoneme charts, you can fill in more phonemes that are similar (e.g. using/A/ instead of/Q/ if the voice does not support/Q/, or an untrilled/r/ if the trilled version is not supported, where a trilled/r/ can be found in Spanish).
Then, provided that the voice can handle all the phonemes in a language+accent, you can then map between the two, allowing your English speaking voice to speak German, Chinese, Afrikaans or whatever language you have data for. The eSpeak text-to-speech program does a simple version of this to make the German, Polish, Swedish, Romanian, Dutch, Hungarian, French and Afrikaans MBROLA voices speak English.
You can also use it to have a voice support different accents, provided you have the rules for producing the correct phonemes.
Multiple saved values displayed over time was an example of how you could visualise data flow through an algorithm to get a better understanding of how the algorithm works -- it clearly does not scale to something like libreoffice or the kernel. Another way to visualise it would be in a form similar to the "Bubble Sort Dance" videos.
By speeding up the time between making a change and seeing its effect you end up being more productive.
How about being able to visualise what happened from a trace, with the trace log on one side and the code on another. When you move through the trace log, it jumps to that point in code. Same with an exception stack trace.
In your analysis tools, there will be things like regular expressions, state machines and lexers/parsers to extract information from the programs. How about being able to visualise the state machines and regular expressions and run test input on those directly and interactively. How about being able to see the flow of data through the regex shown as a graph. There are tools to do these kinds of things, but not in an immediate and interactive way.
I'm not saying that his approach works in all domains and for all problems. It will work better in some areas than others. It is another interesting way of providing immediate feedback to the thing you are working on to help solve problems.
It will take time to get the tooling support for this. I see a JavaScript canvas and SVG designer being the easiest to create and will be a leap forward in writing and creating those -- maybe applying that to tools like inkscape and gimp.
The others are more complex and will take time to evolve and see how to integrate with the editor/ide/designer program -- e.g. how do you support mixed javascript code that has canvas drawing, regexes, state machines and sorting algorithms?
I said desktop on ARM -- the desktop on 32/64-bit will work with existing applications just fine. The point was that "desktop" is not available as an option on the new platforms for any serious development (e.g. porting Photoshop or LibreOffice to ARM); you are relegated to using Metro and the WinRT APIs which are not designed for creating complex applications.
2. http://hexus.net/tech/news/software/35057-microsoft-windows-8-feature-app-suspension/ -- "This time around it's Microsoft's announcement that its goal is to suspend Metro apps that are currently not visible on the screen to curtail and, with any luck, cut completely their power consumption" and bear in mind that the desktop is just another application (unless Microsoft are treating the desktop applications in the Desktop application differently to Metro applications in Metro).
3. http://www.techpowerup.com/160208/Windows-8-To-Introduce-App-Suspension.html -- "Simply put, it is a kernel optimization that "suspends" applications that are running in the background without much activity." This is a further clarification on the suspension behaviour, which would mitigate the problem (e.g. what about an alarm clock application, an application polling a server infrequently, or VMware with a powered on but idle OS).
1/ Metro only -- good (only possible if you don't run Explorer/Office/other desktop applications, or want to visit websites with IE10 that use Silverlight/Flash/Java plugins)
2/ Desktop only -- good (not possible -- forced to interact with Metro through the start page, control panel, auto-start and other areas)
3/ Metro + Desktop -- bad (inconsistent UI interaction model: Desktop > Metro Control Panel > Vista/Win7 Advanced Control Panel Settings > XP Settings Dialogs,...)
The desktop is right there in Windows 8, just another tile. Just like DOS was still there on Win 3.1. The desktop is only available on ARM for Office and Explorer.
I see Microsoft trying to move from traditional Win32/64-based desktop applications to pure WinRT Metro applications in the future. However, I don't see this working for complex business applications.
And, reading about the multitasking behaviour in Win8, if you have something like VMware running, or are encoding a video for YouTube or have a build running on Desktop and switch to Metro, Windows will kill the desktop process in 10 seconds (it gives it that long to suspend).
The old JavaScript runtime supported multi-threading in the runtime itself. This resulted in the need for complex threading/locking code to make sure that data was being accessed correctly. This is hard to maintain, easy to get wrong, consumes more memory and slows down things like garbage collection.
The new JavaScript runtime is single-threaded. WebWorkers each have their own instance of a (single-threaded) JavaScript runtime that may be running on different threads.
You can still have your map/reduce/fold/... functions running in parallel; they will be implemented on top of WebWorkers. As the representation of each runtime is simpler, the engine as a whole can optimise the work between threads better and perform better code generation.
It also means that garbage collection is faster as it (a) does not navigate all memory allocated across all threads and (b) only blocks the thread the garbage collector is currently running on.
What the article is saying is that each instance of the JavaScript runtime runs in one thread. If you want multi-threaded JavaScript, you need multiple runtime instances (one per thread). This is how WebWorkers work.
If you have an unused function, the compiler can remove that. But if the unused function is calling another function, class, global variable, enumeration type, etc. then that unused function is blocking you changing/cleaning up those (e.g. preventing you removing the global variable even if it is only ever used by the unused function).
It also adds complexity to the readability of the code -- the developer does not necessarily know the function is unused or that it should not be used.
Refactoring is changing code from one form to another where the two behave identically (modulo bugs). These should be done in small individual patches/chunks so that it is easy to see what is going on (e.g. for the reviewer or bisecting a bug).
These include things like moving variable declarations to where they are first used, inlining a function by hand/removing a level of indirection introduced by the Visitor pattern and changing repeated code into a loop.
It helps if the code you are refactoring has decent test coverage, but refactoring is also important for design and code evolution and in some cases unit testing is not in place (e.g. refactoring to introduce tests into the code; refactoring a UI or other code that is difficult to unit test).
Refactoring allows you to simplify a complex codebase by removing cruft, or by restructuring the code to support redesign. If you let a codebase stagnate it will become complex and will end up holding you back from doing some changes.
It may be that you have inherited a C codebase and are transitioning it to C++, refactoring the code to use bool instead of int (or BOOL in Windows); moving variable declarations to where they are first used. It may be that your code is using COM where it is not necessary to do so, and are removing that (c.f. Mozilla Firefox).
Also, refactoring should be done with an aim in mind, a direction. Otherwise, you could flip between two code states indefinitely. Refactoring should be done to decrease the maintenance burden (making the code easier to read and understand by reducing the complexity and increasing the consistency). Refactoring should be done to improve the overall architecture and design of the code. Refactoring should be done to reduce code duplication.
Without refactoring a codebase will suffer from architectural decay and the maintenance burden will increase over time.
Except for the fact that these Open APIs are built on top of Open Source. Facebook uses PHP and has contributed back code that improves performance. Google are using Linux internally with their own Google File System and BigTables. Other web services are using NoSQL and LAMP stacks.
An "Open API" would allow an open source application to use that API. If it does not, it cannot be called an "Open API" as it is restrictive in what you can use to interact with it. It is rather a "Public API" that is documented for use by developers outside the company that created it. NOTE: An API can be both Open and Public, such as the Microsoft Win32 API.
Also note that an API is not Open Source -- an implementation of an API is Open Source. For example, wine is an Open Source implementation of the Win32 API, but Microsoft Windows is a closed source implementation of the same API. An API is the contract between the framework/service/platform and the program, allowing the program access to information or functionality provided by the service, framework or platform.
The article is misleading and is written in a way that looks like the author is trying to make Open Source look irrelevant.
1. Spell your companies name wrong many times on your website and twitter, plagiarizing content for your site from other sites. 2. Give cryptic responses to a query on the progress of an order from a customer. 3. Go on a trippy, grammar and spelling free email rage with the customer and an owner of a successful and popular website. 4. Threaten the people in step 3 and name drop any important people you met briefly or have no association with what-so-ever. 5.... 6. Profit???
Also known as... how to implode a company overnight.
Fukushima happened because: 1. it was a 30 year old plant 1 month away from being decommissioned; 2. it was hit by an unprecedented earthquake that damaged the walls of the plant -- immediately after which the plant was shut down (the fuel rods removed); 3. it was then hit by an unprecedented tsunami and is close to the sea -- this knocked out the diesel power generators and flooded the plant.
It was an extremely unlucky sequence of events -- the reactor was designed to withstand something like a magnitude 7 earthquake (and was hit with a magnitude 9 one), and survive a 7 ft tsunami (but was hit by a 10 ft one).
During the incident, the people at the plant worked selflessly and continually to help prevent the incident from escalating further, often putting themselves in danger due to the amount of radiation they were taking.
We can look back on this with hindsight and improve things, but what could they have done better with the reactor they had and the knowledge they had when it was built and even a year before the incident? Yes, there are now better and safer reactor designs, but they were not available 30 years ago.
With binary data, you have potential issues with the binary parser (e.g. has a hacker corrupted the log to trigger a buffer exploit in the binary-to-text program). Also, binary data is open to endian issues and integer/pointer size issues. Not to mention versioning (trying to read logs written using a different version of journald that write an incompatible journal file). Likewise if you only have access to fragments of the log.
Wikipedia [http://en.wikipedia.org/wiki/Usage_share_of_operating_systems] lists GNU/Linux as having a 1.49% share on Wikimedia sites and the median from various sources is 1.11%.
I don't want to dual boot my machine, or run Linux in a virtualised environment. I want a system where I can run the Linux distribution of my choosing on it without having a Windows install sitting there (including at the boot sequence). I want to tinker with, customise, upgrade, fix, modify and install custom software of my choosing on it.
The interesting case here (w.r.t. anti-trust issues) is not the uninstallation of IE10, or that you can use HTML5+JavaScript running on top of the Trident rendering engine for WinRT applications.
1/ Metro applications have limited interaction with Desktop applications, making switching between the two more complex (is IE10 using APIs that other apps don't have access to?).
2/ Metro (using the WinRT API via C++/.NET/whatever) is a completely different platform. There are some common APIs (DirectX10/11, Direct2D, etc.), but there are no Win32 APIs, and different/limited APIs that replace them. For example, the socket and TCP/IP APIs don't allow you to connect to localhost when running under Metro. So the other browser makers have to port their programs to this new platform, giving Microsoft a lead-time advantage.
This is important considering that Metro is the users first experience with Windows 8 and that most users will access the internet from Metro (no need to go to the desktop to browse the internet).
3/ Metro applications have to go through the Microsoft application store. Not sure what the implications are for this, such as how easy it is to get an application onto the store or what Microsoft's policies are for removal. May not be an issue for the major browsers, but the others may struggle (if they get to the point they have a working Metro application). What about Open Source code and browsers like Konquerer?
My guess is that the performance issues (using Firefox 7 and later) are due to the lack of a generational garbage collector in Firefox for JavaScript. Firefox uses the more traditional mark and sweep collector that has to pause javascript execution to scan for memory it can reclaim, and mark and sweep is not great for large complicated javascript code that is now prevelant through ajax, jquery, canvas and a growing number of rich web-based applications and games.
The firefox team are working on implementing a generational garbage collector similar to what chrome uses and are making improvements to the existing garbage collector.
Another area could be their implementation of the canvas element, which they have changed in Firefox 7 to have a closer binding to Direct2D on Windows 7 giving a performance boost there.
If I type something like "pizza hut in manchester" in Bing, I get a link to Bing Maps as the second item. If I type in something that has images like "london" I see a link to Bing's Image Search in the top 5-6 results. Searching for something video related puts Bing Video Search at #1 which aggregates from YouTube and others. This is no different to what Google are doing.
If Google are going to get regulated for favouring their own services for things like this, so should the other search engines.
The closest text-to-speech program today is eSpeak which uses an ASCII variant of IPA phonemes. The problem with this is that it has a voice for each language (which is essentially the same voice) with a subset of the IPA phonemes available. I am intending to use IPA fully in my own text-to-speech program and associated voices (http://rhdunn.github.com/cainteoir/) but haven't gotten to implementing the text to phoneme and phoneme to audio parts yet, nor the associated tools for working with them and the different phoneme transcription schemes.
Speech in Language 1 by the user gets converted internally to text using speech recognition software. This then passes through a Language 1 to Language 2 translation program. The text in Language 2 then gets spoken using text-to-speech software using a voice created from the user's own voice. The bit in the middle is transparent to the user, which is why it looks like speech-to-speech.
Provided that the speech recognition engine is good enough, it can distinguish between the /Q/ and /A/ sounds in lot (British English: /lQt/, General American English: /lAt/), cot, hot, etc, with /A/ also appearing in father /fA:D@/. This will mean that the speech recognition engine will record the actual phonemes spoken, rather than the phonemes it thinks are being spoken. With this, it can then build up a database of phonemes to the recorded audio.
When a given language is selected (strictly speaking it is a language + accent, as Liverpudlian English sounds different to Australian English and Mexican Spanish sounds different to Argentinian Spanish) it will have a set of rules that describe how to convert the text into phonemes specific to that accent (for example, "ook" is usually pronounced /Vk/ in English, but in Scouse English it can be /Vx/). These rules provide a set of phonemes required by the language+accent to speak it properly.
The phonemes are transcriptions of IPA-based phonemes (http://en.wikipedia.org/wiki/International_Phonetic_Alphabet). If you plot the phonemes available by the voice on the phoneme charts, you can fill in more phonemes that are similar (e.g. using /A/ instead of /Q/ if the voice does not support /Q/, or an untrilled /r/ if the trilled version is not supported, where a trilled /r/ can be found in Spanish).
Then, provided that the voice can handle all the phonemes in a language+accent, you can then map between the two, allowing your English speaking voice to speak German, Chinese, Afrikaans or whatever language you have data for. The eSpeak text-to-speech program does a simple version of this to make the German, Polish, Swedish, Romanian, Dutch, Hungarian, French and Afrikaans MBROLA voices speak English.
You can also use it to have a voice support different accents, provided you have the rules for producing the correct phonemes.
Multiple saved values displayed over time was an example of how you could visualise data flow through an algorithm to get a better understanding of how the algorithm works -- it clearly does not scale to something like libreoffice or the kernel. Another way to visualise it would be in a form similar to the "Bubble Sort Dance" videos.
By speeding up the time between making a change and seeing its effect you end up being more productive.
How about being able to visualise what happened from a trace, with the trace log on one side and the code on another. When you move through the trace log, it jumps to that point in code. Same with an exception stack trace.
In your analysis tools, there will be things like regular expressions, state machines and lexers/parsers to extract information from the programs. How about being able to visualise the state machines and regular expressions and run test input on those directly and interactively. How about being able to see the flow of data through the regex shown as a graph. There are tools to do these kinds of things, but not in an immediate and interactive way.
I'm not saying that his approach works in all domains and for all problems. It will work better in some areas than others. It is another interesting way of providing immediate feedback to the thing you are working on to help solve problems.
It will take time to get the tooling support for this. I see a JavaScript canvas and SVG designer being the easiest to create and will be a leap forward in writing and creating those -- maybe applying that to tools like inkscape and gimp.
The others are more complex and will take time to evolve and see how to integrate with the editor/ide/designer program -- e.g. how do you support mixed javascript code that has canvas drawing, regexes, state machines and sorting algorithms?
I said desktop on ARM -- the desktop on 32/64-bit will work with existing applications just fine. The point was that "desktop" is not available as an option on the new platforms for any serious development (e.g. porting Photoshop or LibreOffice to ARM); you are relegated to using Metro and the WinRT APIs which are not designed for creating complex applications.
App Suspension:
1. http://blogs.msdn.com/b/b8/archive/2012/02/09/building-windows-for-the-arm-processor-architecture.aspx -- can't find the specific quote in the article, but checking out the comments: e.g. "I hate that the OS suspends the app when it's not in the foreground. To fix this issue, I always run it in Visual Studio, so it doesn't get suspended."
2. http://hexus.net/tech/news/software/35057-microsoft-windows-8-feature-app-suspension/ -- "This time around it's Microsoft's announcement that its goal is to suspend Metro apps that are currently not visible on the screen to curtail and, with any luck, cut completely their power consumption" and bear in mind that the desktop is just another application (unless Microsoft are treating the desktop applications in the Desktop application differently to Metro applications in Metro).
3. http://www.techpowerup.com/160208/Windows-8-To-Introduce-App-Suspension.html -- "Simply put, it is a kernel optimization that "suspends" applications that are running in the background without much activity." This is a further clarification on the suspension behaviour, which would mitigate the problem (e.g. what about an alarm clock application, an application polling a server infrequently, or VMware with a powered on but idle OS).
Windows 8:
1/ Metro only -- good (only possible if you don't run Explorer/Office/other desktop applications, or want to visit websites with IE10 that use Silverlight/Flash/Java plugins)
2/ Desktop only -- good (not possible -- forced to interact with Metro through the start page, control panel, auto-start and other areas)
3/ Metro + Desktop -- bad (inconsistent UI interaction model: Desktop > Metro Control Panel > Vista/Win7 Advanced Control Panel Settings > XP Settings Dialogs, ...)
The desktop is right there in Windows 8, just another tile. Just like DOS was still there on Win 3.1. The desktop is only available on ARM for Office and Explorer.
I see Microsoft trying to move from traditional Win32/64-based desktop applications to pure WinRT Metro applications in the future. However, I don't see this working for complex business applications.
And, reading about the multitasking behaviour in Win8, if you have something like VMware running, or are encoding a video for YouTube or have a build running on Desktop and switch to Metro, Windows will kill the desktop process in 10 seconds (it gives it that long to suspend).
Kitten& is fine if you have non-virtual kittens :D. The use of auto (or auto&) is independent of using the range-based for.
Except you are starting on container C and ending on container c -- boom!
for (auto value : c) { /* ... */ }
is a lot cleaner and more reliable (auto& if you want to modify the value).
Also, you can now do:
int a[] = {6, 4, 9, 2, 5, 8, 3};
sort(begin(a), end(a));
Even things like:
std::string lookup_value(const std::map<std::string, std::string> &items, std::string value) {
auto match = items.find(value);
return (match != items.end()) ? match->first : std::string();
}
No ugly template expressions to be found.
The old JavaScript runtime supported multi-threading in the runtime itself. This resulted in the need for complex threading/locking code to make sure that data was being accessed correctly. This is hard to maintain, easy to get wrong, consumes more memory and slows down things like garbage collection.
The new JavaScript runtime is single-threaded. WebWorkers each have their own instance of a (single-threaded) JavaScript runtime that may be running on different threads.
You can still have your map/reduce/fold/... functions running in parallel; they will be implemented on top of WebWorkers. As the representation of each runtime is simpler, the engine as a whole can optimise the work between threads better and perform better code generation.
It also means that garbage collection is faster as it (a) does not navigate all memory allocated across all threads and (b) only blocks the thread the garbage collector is currently running on.
That's too complex for me!
What the article is saying is that each instance of the JavaScript runtime runs in one thread. If you want multi-threaded JavaScript, you need multiple runtime instances (one per thread). This is how WebWorkers work.
If you have an unused function, the compiler can remove that. But if the unused function is calling another function, class, global variable, enumeration type, etc. then that unused function is blocking you changing/cleaning up those (e.g. preventing you removing the global variable even if it is only ever used by the unused function).
It also adds complexity to the readability of the code -- the developer does not necessarily know the function is unused or that it should not be used.
Refactoring is changing code from one form to another where the two behave identically (modulo bugs). These should be done in small individual patches/chunks so that it is easy to see what is going on (e.g. for the reviewer or bisecting a bug).
These include things like moving variable declarations to where they are first used, inlining a function by hand/removing a level of indirection introduced by the Visitor pattern and changing repeated code into a loop.
It helps if the code you are refactoring has decent test coverage, but refactoring is also important for design and code evolution and in some cases unit testing is not in place (e.g. refactoring to introduce tests into the code; refactoring a UI or other code that is difficult to unit test).
Refactoring allows you to simplify a complex codebase by removing cruft, or by restructuring the code to support redesign. If you let a codebase stagnate it will become complex and will end up holding you back from doing some changes.
It may be that you have inherited a C codebase and are transitioning it to C++, refactoring the code to use bool instead of int (or BOOL in Windows); moving variable declarations to where they are first used. It may be that your code is using COM where it is not necessary to do so, and are removing that (c.f. Mozilla Firefox).
Also, refactoring should be done with an aim in mind, a direction. Otherwise, you could flip between two code states indefinitely. Refactoring should be done to decrease the maintenance burden (making the code easier to read and understand by reducing the complexity and increasing the consistency). Refactoring should be done to improve the overall architecture and design of the code. Refactoring should be done to reduce code duplication.
Without refactoring a codebase will suffer from architectural decay and the maintenance burden will increase over time.
Except for the fact that these Open APIs are built on top of Open Source. Facebook uses PHP and has contributed back code that improves performance. Google are using Linux internally with their own Google File System and BigTables. Other web services are using NoSQL and LAMP stacks.
An "Open API" would allow an open source application to use that API. If it does not, it cannot be called an "Open API" as it is restrictive in what you can use to interact with it. It is rather a "Public API" that is documented for use by developers outside the company that created it. NOTE: An API can be both Open and Public, such as the Microsoft Win32 API.
Also note that an API is not Open Source -- an implementation of an API is Open Source. For example, wine is an Open Source implementation of the Win32 API, but Microsoft Windows is a closed source implementation of the same API. An API is the contract between the framework/service/platform and the program, allowing the program access to information or functionality provided by the service, framework or platform.
The article is misleading and is written in a way that looks like the author is trying to make Open Source look irrelevant.
1. Spell your companies name wrong many times on your website and twitter, plagiarizing content for your site from other sites. ...
2. Give cryptic responses to a query on the progress of an order from a customer.
3. Go on a trippy, grammar and spelling free email rage with the customer and an owner of a successful and popular website.
4. Threaten the people in step 3 and name drop any important people you met briefly or have no association with what-so-ever.
5.
6. Profit???
Also known as ... how to implode a company overnight.
Fukushima happened because:
1. it was a 30 year old plant 1 month away from being decommissioned;
2. it was hit by an unprecedented earthquake that damaged the walls of the plant -- immediately after which the plant was shut down (the fuel rods removed);
3. it was then hit by an unprecedented tsunami and is close to the sea -- this knocked out the diesel power generators and flooded the plant.
It was an extremely unlucky sequence of events -- the reactor was designed to withstand something like a magnitude 7 earthquake (and was hit with a magnitude 9 one), and survive a 7 ft tsunami (but was hit by a 10 ft one).
During the incident, the people at the plant worked selflessly and continually to help prevent the incident from escalating further, often putting themselves in danger due to the amount of radiation they were taking.
We can look back on this with hindsight and improve things, but what could they have done better with the reactor they had and the knowledge they had when it was built and even a year before the incident? Yes, there are now better and safer reactor designs, but they were not available 30 years ago.
With binary data, you have potential issues with the binary parser (e.g. has a hacker corrupted the log to trigger a buffer exploit in the binary-to-text program). Also, binary data is open to endian issues and integer/pointer size issues. Not to mention versioning (trying to read logs written using a different version of journald that write an incompatible journal file). Likewise if you only have access to fragments of the log.
Wikipedia [http://en.wikipedia.org/wiki/Usage_share_of_operating_systems] lists GNU/Linux as having a 1.49% share on Wikimedia sites and the median from various sources is 1.11%.
You're not keeping up with the Microsoft tredmill. WinForms was deprecated for WPF which has now been replaced with WinRT.
I don't want to dual boot my machine, or run Linux in a virtualised environment. I want a system where I can run the Linux distribution of my choosing on it without having a Windows install sitting there (including at the boot sequence). I want to tinker with, customise, upgrade, fix, modify and install custom software of my choosing on it.
Yes, just like all the developers/studios that produce these games: http://wiki.xiph.org/Games_that_use_Vorbis.
The interesting case here (w.r.t. anti-trust issues) is not the uninstallation of IE10, or that you can use HTML5+JavaScript running on top of the Trident rendering engine for WinRT applications.
The interesting case is from https://wiki.mozilla.org/Firefox/Windows_8_Integration:
1/ Metro applications have limited interaction with Desktop applications, making switching between the two more complex (is IE10 using APIs that other apps don't have access to?).
2/ Metro (using the WinRT API via C++/.NET/whatever) is a completely different platform. There are some common APIs (DirectX10/11, Direct2D, etc.), but there are no Win32 APIs, and different/limited APIs that replace them. For example, the socket and TCP/IP APIs don't allow you to connect to localhost when running under Metro. So the other browser makers have to port their programs to this new platform, giving Microsoft a lead-time advantage.
This is important considering that Metro is the users first experience with Windows 8 and that most users will access the internet from Metro (no need to go to the desktop to browse the internet).
3/ Metro applications have to go through the Microsoft application store. Not sure what the implications are for this, such as how easy it is to get an application onto the store or what Microsoft's policies are for removal. May not be an issue for the major browsers, but the others may struggle (if they get to the point they have a working Metro application). What about Open Source code and browsers like Konquerer?
My guess is that the performance issues (using Firefox 7 and later) are due to the lack of a generational garbage collector in Firefox for JavaScript. Firefox uses the more traditional mark and sweep collector that has to pause javascript execution to scan for memory it can reclaim, and mark and sweep is not great for large complicated javascript code that is now prevelant through ajax, jquery, canvas and a growing number of rich web-based applications and games.
The firefox team are working on implementing a generational garbage collector similar to what chrome uses and are making improvements to the existing garbage collector.
Another area could be their implementation of the canvas element, which they have changed in Firefox 7 to have a closer binding to Direct2D on Windows 7 giving a performance boost there.
If I type something like "pizza hut in manchester" in Bing, I get a link to Bing Maps as the second item. If I type in something that has images like "london" I see a link to Bing's Image Search in the top 5-6 results. Searching for something video related puts Bing Video Search at #1 which aggregates from YouTube and others. This is no different to what Google are doing.
If Google are going to get regulated for favouring their own services for things like this, so should the other search engines.