It depends on what parts of the spec. Looking at the/. summary, it is silly to dismiss everything in HTML5 because it may compromise security.
If you take parts of the spec like the new section elements (header, footer, article, section, etc.) I can't think of any attack vectors for them from a specification point of view. Same goes for CSS3 things like rounded corners and gradients. There may be exploits in how browsers implement those specifications, but that is a QOI issue with the browser, not the spec. Same goes for loading audio or video and the canvas drawing APIs.
There are at least two features of HTML5 I see that require consideration from a security POV: web sockets and the file API. These also have a QOI consideration for the browsers implementing them, and there may be other areas as well.
From a website designers POV, there is also a QOI consideration in that the site should work and be functional if JavaScript is disabled and/or if audio/video are disabled (just like there is the alt attribute for images). This is both a security concern and an acccessibility concern. Obviously, there will be a downgraded experience (e.g. not being able to play a game) just like what happens now if you disable JavaScript or Flash.
On Windows they use DirectX and also use Direct2D/DirectWrite if available (Vista or later).
On Linux, they use XRender (2D) and OpenGL.
On Mac, they use the relevant Mac APIs, including IIRC Quartz.
This is like what games do when they choose between DirectX 8/9, DirectX 10/11 and OpenGL. I bet Chromium, WebKit and Qt do similar things for their accelerated graphics.
Exactly. Opera is also (from reports) a great browser and IE9 is making great strides catching up with the rest.
It also looks to be close as to when Firefox and IE9 are released to see which browser will be first to have a major release supporting hardware acceleration.
Also, Firefox were first to start to investigate and write code to use hardware accelerated graphics through Direct2D/DirectWrite.
At the end of the day, who was first does not matter. What matters is that we have decent performance (JavaScript, graphics and other areas) and decent standards support. Most of that was either pushed by Opera or one of the open source browsers/engines (Firefox, Chrome or WebKit). This is good for the customers as everyone gets these improvements to varying degrees no matter which (recent version of a) browser they choose.
Firefox has support for MathML (and has done for a long time) which WebKit and Chrome are only just starting to introduce. Firefox has just/is landing support for using SVG in img tags.
There are a lot of standards out there and different vendors choose to add support for them at different times. You can pick and choose standards, or pick and choose tests, and say that any browser is better than any other browser.
Also, at the time Chrome's JIT was being implemented, Firefox were developing their tracing JIT (TraceMonkey) which they are now integrating with a Chrome-style method JIT (JaegerMonkey) to replace their older interpreter (SpiderMonkey).
The more I think about it, the more I think that civilisation is not going to end through war or asteroids or whatever else -- it is going to implode on ourselves because of all the scare stories we create.
Hell, breathing and the metabolic process produce free electrons that destroy DNA and cause cancer, so breathing is bad for you and you mustn't do it! Exercising just speeds up the metabolic rate and damages your bones and other parts of the body. Therefore, exercising is bad for you! But if you don't exercise, you will get fat and die as well, so not exercising is bad for you!
If you go out and buy groceries, you may get hit by a car and die! If you don't go out and get some food you will starve to death!
Emulation is where you run instructions of one CPU on a different one by mimicing (or should I say, emulating) the behaviour.of that CPU. This can also go as far as emulating BIOS and OS functionality.
There are various emulators for things like GameBoys and Amigas that allow you to run those games and applications on your PC.
DOSBox is another example of an emulator, which emulates older x86 architecture behaviour as well as graphics and sound chips in addition to running the DOS interrupts and utilities.
WINE is different in that it runs the applications and games on the physical computer hardware (not emulating them). For example, a game makes Direct3D calls, which are then routed to WineD3D which then maps them onto OpenGL calls which then call into the systems graphics card.
The key thing here is that with WINE, you could in theory run various wine DLLs on Windows (such as running the Wine DirectX 10 libraries on XP once they are sufficiently complete).
What, so you don't want to find out how to lose 40lb overnight, or see the pretty logo/site design that takes up 50% of the viewing area? Are you actually saying that you want to read the *content* of the web page?
> - in Tools, Page Info, Media, you used to be able to use the arrow keys to scroll down the list of assets on the web page (so you could find that favorite pic/swf etc), now it switches the dialog tabs ??
That's a keyboard focus issue/misunderstanding.
If you go to the `Tools > Page Info` dialog (via mouse, `Alt+T, I` or `Ctrl+I`) the keyboard focus is on the dialog tab panel at the top -- left/right arrow keys move between tabs.
If you click on the `Media` tab with the mouse, the keyboard focus is still on that tab strip -- left/right arrow keys move between tabs.
If you press the `Tab` key or press the mouse button inside the asset list, the keyboard focus is now on the asset list -- left/right arrow keys move between assets.
In the old days, JavaScript was interpreted. This means that the JavaScript engine is evaluating the program as it runs, instead of the CPU evaluating the program. This is what the Firefox SpiderMonkey engine does and it is slow.
When Chrome was released and there was a push to make things faster, Mozilla wrote an engine called TraceMonkey. This engine supports tracing jit, which is to say that the engine watches what javascript code gets executed (the tracing part) and uses that to produce optimised code that the CPU will execute (the jit -- or just-in-time compilation -- part).
Chrome's V8 engine, Apple's Nitro engine and others use what is called method jit. This means that the javascript code for a method (function) is compiled to code the CPU can execute when that method is called.
Mozilla are currently working on a similar method jit engine called JaegerMonkey. This engine is taking the nitro assembler (the code that generates the CPU instructions) and writing everything else on top of this. In addition, they are also taking the Yarr! regular expression engine that IIR, Chrome is using to speed up their regular expression handling.
Mozilla are looking to blend the method jit and tracing jit together -- hence the "one generation ahead" comment.
Mozilla are also optimising various javascript calls (a contrived example would be replacing calls to Math.sin with the sin CPU instruction) to provide "fast paths" that speed up code that uses those calls.
Why do they need multi-threaded javascript? What benefit is it providing?
There are some things written in javascript -- e.g. a snes and a gameboy emulator -- that are pathologically slow (10-15 frames per second) using the FF 3.6 javascript engine. With the jaegermonkey engine, they are seeing performance that is matching, and in some cases edging over, Chrome (~60 frames per second).
Is the sound issue running Flash videos on Firefox on Ubuntu/other Linux distro using pulseaudio? I had that issue in the past (read: pre-10.04), but it is working fine now (I suspect some pulseaudio fix introduced in 10.04 fixed it -- either that or the out-of-process plugin feature in FF 3.6).
public class Hello {
public static void Main(String [] args) {
System.out.writeline("hello world");
}
}
When learning languages/programming, it is better to start with an interpreted language like Python or Ruby where you get immediate feedback and start simple.
Also, learn more than one type of programming language (Python, C, C++, Java, Haskell, Prolog, Lisp, Clojure, Groovy, Go,...).
Exactly. You don't need to use template meta-programming to get the job done for most tasks.
Hell, just use the better C subset and the C++ library if you want to.
There is also no need for a Singleton of a Factory that creates Factories to create objects that you pass an Observer to that calls a function to do something when a simple parametrised free-standing function will do the same job. The maintainer of the code will thank you for it (even if that maintainer is you at some point down the road).
Think about the data and what operations you are performing on that data.
Also, use the right languages and structures. If you have XML that you want to visualise as HTML, XSLT is designed to do that easily and reliably. If you are using JavaScript and/or python, use JSON and the native type system. Use standard library functions over hand-written ones unless you have a clear, measurable need not to.
Work with the languages and tools you have, not against them.
An interesting test for Go will be: how easy is it to develop and maintain complex programs that solve real-world problems (web browsers, operating systems, stock trade analysis/processing, quantum mechanics analysis,...)?
Go is an interesting language, but so far it has been solving simple toy problems.
I don't like your proprietary G# language, so have invented a similar syntax called Gala that generates native G code using the Cobject type system designed for COMB.
Your post highlights a key difference between written and spoken words -- we tend to contract words ("have a" to "hav.uh") and will flow one word into another ("said John" the d at the end of said and the d in the dZ sound merge, so the d at the end of said is dropped -- "sE dZ0n").
Some people drop certain letters at the beginning and end of words -- "'e said 'what 'ave you been doin' today?'". This also makes it more complicated to transcribe. Not to mention regional dialect variations and strong accents.
Then you have words like "four candles" "fork 'andles", "night train" "night rain" (http://en.wikipedia.org/wiki/Homophones) -- a lot of The Two Ronnies humour stemmed from word play that take advantage of the difference between written and spoken speech and how the audience interprets them (see the Hieroglyph sketch for another classic example). 'Ello 'Ello did a similar thing as well.
Benchmarks give repeatable tests that can be used to see how well something is performing and how that is changing over time -- see the arewefastyet.com site for graphs of this type of data. The benchmarks should give examples of specific workflows and use cases (string concatenation, for example).
Benchmarks do not necessarily equate to responsiveness in the browser, but that is not what these are testing. That's not to say that responsiveness is not important -- other people are looking into that and have expertise in those areas of the code and what needs to be done to improve things.
TFA also notes that JaegerMonkey wins in one benchmark over TraceMonkey, and TraceMonkey wins in the other. The ultimate aim is to use both, giving a fast (JaegerMonkey) baseline.
There are also other factors -- like when garbage collection gets invoked, and reducing the amount of disk I/O -- that are being (and have been) looked into.
It isn't a matter of "just do X and things will be super fast and responsive". There are a lot of complicated things involved, and complex interactions.
Don't you mean true|false|FileNotFound -- http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
It depends on what parts of the spec. Looking at the /. summary, it is silly to dismiss everything in HTML5 because it may compromise security.
If you take parts of the spec like the new section elements (header, footer, article, section, etc.) I can't think of any attack vectors for them from a specification point of view. Same goes for CSS3 things like rounded corners and gradients. There may be exploits in how browsers implement those specifications, but that is a QOI issue with the browser, not the spec. Same goes for loading audio or video and
the canvas drawing APIs.
There are at least two features of HTML5 I see that require consideration from a security POV: web sockets and the file API. These also have a QOI consideration for the browsers implementing them, and there may be other areas as well.
From a website designers POV, there is also a QOI consideration in that the site should work and be functional if JavaScript is disabled and/or if audio/video are disabled (just like there is the alt attribute for images). This is both a security concern and an acccessibility concern. Obviously, there will be a downgraded experience (e.g. not being able to play a game) just like what happens now if you disable JavaScript or Flash.
On Windows they use DirectX and also use Direct2D/DirectWrite if available (Vista or later).
On Linux, they use XRender (2D) and OpenGL.
On Mac, they use the relevant Mac APIs, including IIRC Quartz.
This is like what games do when they choose between DirectX 8/9, DirectX 10/11 and OpenGL. I bet Chromium, WebKit and Qt do similar things for their accelerated graphics.
Exactly. Opera is also (from reports) a great browser and IE9 is making great strides catching up with the rest.
It also looks to be close as to when Firefox and IE9 are released to see which browser will be first to have a major release supporting hardware acceleration.
Exciting times.
Also, Firefox were first to start to investigate and write code to use hardware accelerated graphics through Direct2D/DirectWrite.
At the end of the day, who was first does not matter. What matters is that we have decent performance (JavaScript, graphics and other areas) and decent standards support. Most of that was either pushed by Opera or one of the open source browsers/engines (Firefox, Chrome or WebKit). This is good for the customers as everyone gets these improvements to varying degrees no matter which (recent version of a) browser they choose.
Firefox has support for MathML (and has done for a long time) which WebKit and Chrome are only just starting to introduce. Firefox has just/is landing support for using SVG in img tags.
Firefox improved support for the ARIA accessibility standard in FF3, beating the support in other browsers and with no support in Chrome 1 -- http://www.paciellogroup.com/blog/aria-tests/ARIA-SafariaOperaIEFF.html with an updated list at http://www.paciellogroup.com/blog/?p=474y.
There are a lot of standards out there and different vendors choose to add support for them at different times. You can pick and choose standards, or pick and choose tests, and say that any browser is better than any other browser.
Also, at the time Chrome's JIT was being implemented, Firefox were developing their tracing JIT (TraceMonkey) which they are now integrating with a Chrome-style method JIT (JaegerMonkey) to replace their older interpreter (SpiderMonkey).
To the Broadcom team and everyone else who made this happen: you have my heartfelt thanks.
The more I think about it, the more I think that civilisation is not going to end through war or asteroids or whatever else -- it is going to implode on ourselves because of all the scare stories we create.
Hell, breathing and the metabolic process produce free electrons that destroy DNA and cause cancer, so breathing is bad for you and you mustn't do it! Exercising just speeds up the metabolic rate and damages your bones and other parts of the body. Therefore, exercising is bad for you! But if you don't exercise, you will get fat and die as well, so not exercising is bad for you!
If you go out and buy groceries, you may get hit by a car and die! If you don't go out and get some food you will starve to death!
Emulation is where you run instructions of one CPU on a different one by mimicing (or should I say, emulating) the behaviour.of that CPU. This can also go as far as emulating BIOS and OS functionality.
There are various emulators for things like GameBoys and Amigas that allow you to run those games and applications on your PC.
DOSBox is another example of an emulator, which emulates older x86 architecture behaviour as well as graphics and sound chips in addition to running the DOS interrupts and utilities.
WINE is different in that it runs the applications and games on the physical computer hardware (not emulating them). For example, a game makes Direct3D calls, which are then routed to WineD3D which then maps them onto OpenGL calls which then call into the systems graphics card.
The key thing here is that with WINE, you could in theory run various wine DLLs on Windows (such as running the Wine DirectX 10 libraries on XP once they are sufficiently complete).
1739 here on Ubuntu 10.04 with the latest NVidia driver. Hallucinogenic mode results in 599.
I don't know how this compares with IE9, though.
What, so you don't want to find out how to lose 40lb overnight, or see the pretty logo/site design that takes up 50% of the viewing area? Are you actually saying that you want to read the *content* of the web page?
Shocking!
> - in Tools, Page Info, Media, you used to be able to use the arrow keys to scroll down the list of assets on the web page (so you could find that favorite pic/swf etc), now it switches the dialog tabs ??
That's a keyboard focus issue/misunderstanding.
If you go to the `Tools > Page Info` dialog (via mouse, `Alt+T, I` or `Ctrl+I`) the keyboard focus is on the dialog tab panel at the top -- left/right arrow keys move between tabs.
If you click on the `Media` tab with the mouse, the keyboard focus is still on that tab strip -- left/right arrow keys move between tabs.
If you press the `Tab` key or press the mouse button inside the asset list, the keyboard focus is now on the asset list -- left/right arrow keys move between assets.
At least this is the case with latest FF.
In the old days, JavaScript was interpreted. This means that the JavaScript engine is evaluating the program as it runs, instead of the CPU evaluating the program. This is what the Firefox SpiderMonkey engine does and it is slow.
When Chrome was released and there was a push to make things faster, Mozilla wrote an engine called TraceMonkey. This engine supports tracing jit, which is to say that the engine watches what javascript code gets executed (the tracing part) and uses that to produce optimised code that the CPU will execute (the jit -- or just-in-time compilation -- part).
Chrome's V8 engine, Apple's Nitro engine and others use what is called method jit. This means that the javascript code for a method (function) is compiled to code the CPU can execute when that method is called.
Mozilla are currently working on a similar method jit engine called JaegerMonkey. This engine is taking the nitro assembler (the code that generates the CPU instructions) and writing everything else on top of this. In addition, they are also taking the Yarr! regular expression engine that IIR, Chrome is using to speed up their regular expression handling.
Mozilla are looking to blend the method jit and tracing jit together -- hence the "one generation ahead" comment.
Mozilla are also optimising various javascript calls (a contrived example would be replacing calls to Math.sin with the sin CPU instruction) to provide "fast paths" that speed up code that uses those calls.
http://arewefastyet.com/ shows the performance of these over time.
Why do they need multi-threaded javascript? What benefit is it providing?
There are some things written in javascript -- e.g. a snes and a gameboy emulator -- that are pathologically slow (10-15 frames per second) using the FF 3.6 javascript engine. With the jaegermonkey engine, they are seeing performance that is matching, and in some cases edging over, Chrome (~60 frames per second).
Is the sound issue running Flash videos on Firefox on Ubuntu/other Linux distro using pulseaudio? I had that issue in the past (read: pre-10.04), but it is working fine now (I suspect some pulseaudio fix introduced in 10.04 fixed it -- either that or the out-of-process plugin feature in FF 3.6).
The obfuscated C compiler by Fabrice Bellard -- which became the tiny C compiler -- supports scripting C as well as compiling the C code.
I advanced to wget ages ago -- I heard it was the future of browsing.
Djkstra said that Go2 was evil!
Python/Ruby/others
print 'hello world'
Java/C#/others
public class Hello {
public static void Main(String [] args) {
System.out.writeline("hello world");
}
}
When learning languages/programming, it is better to start with an interpreted language like Python or Ruby where you get immediate feedback and start simple.
Also, learn more than one type of programming language (Python, C, C++, Java, Haskell, Prolog, Lisp, Clojure, Groovy, Go, ...).
I'm just waiting for someone to write a Go library called Ogle so we can have Go/Ogle or Go+Ogle.
Exactly. You don't need to use template meta-programming to get the job done for most tasks.
Hell, just use the better C subset and the C++ library if you want to.
There is also no need for a Singleton of a Factory that creates Factories to create objects that you pass an Observer to that calls a function to do something when a simple parametrised free-standing function will do the same job. The maintainer of the code will thank you for it (even if that maintainer is you at some point down the road).
Think about the data and what operations you are performing on that data.
Also, use the right languages and structures. If you have XML that you want to visualise as HTML, XSLT is designed to do that easily and reliably. If you are using JavaScript and/or python, use JSON and the native type system. Use standard library functions over hand-written ones unless you have a clear, measurable need not to.
Work with the languages and tools you have, not against them.
An interesting test for Go will be: how easy is it to develop and maintain complex programs that solve real-world problems (web browsers, operating systems, stock trade analysis/processing, quantum mechanics analysis, ...)?
Go is an interesting language, but so far it has been solving simple toy problems.
I don't like your proprietary G# language, so have invented a similar syntax called Gala that generates native G code using the Cobject type system designed for COMB.
Your post highlights a key difference between written and spoken words -- we tend to contract words ("have a" to "hav.uh") and will flow one word into another ("said John" the d at the end of said and the d in the dZ sound merge, so the d at the end of said is dropped -- "sE dZ0n").
Some people drop certain letters at the beginning and end of words -- "'e said 'what 'ave you been doin' today?'". This also makes it more complicated to transcribe. Not to mention regional dialect variations and strong accents.
Then you have words like "four candles" "fork 'andles", "night train" "night rain" (http://en.wikipedia.org/wiki/Homophones) -- a lot of The Two Ronnies humour stemmed from word play that take advantage of the difference between written and spoken speech and how the audience interprets them (see the Hieroglyph sketch for another classic example). 'Ello 'Ello did a similar thing as well.
Benchmarks give repeatable tests that can be used to see how well something is performing and how that is changing over time -- see the arewefastyet.com site for graphs of this type of data. The benchmarks should give examples of specific workflows and use cases (string concatenation, for example).
Benchmarks do not necessarily equate to responsiveness in the browser, but that is not what these are testing. That's not to say that responsiveness is not important -- other people are looking into that and have expertise in those areas of the code and what needs to be done to improve things.
TFA also notes that JaegerMonkey wins in one benchmark over TraceMonkey, and TraceMonkey wins in the other. The ultimate aim is to use both, giving a fast (JaegerMonkey) baseline.
There are also other factors -- like when garbage collection gets invoked, and reducing the amount of disk I/O -- that are being (and have been) looked into.
It isn't a matter of "just do X and things will be super fast and responsive". There are a lot of complicated things involved, and complex interactions.