I'm not too fussed about XUL, but I'd love to see some support for XBL. Of course, XBL2 isn't really finished yet and XBL1 as currently implemented in Mozilla has a few warts that make it hard to implement in other browsers.
I think if you turn off plugins in the preferences it'll stop bugging you. At least, I have plugins disabled in my Opera and I don't see this dialog. The caveat is that I've had plugins disabled in Opera since Opera supported it, so it might well be something else in my dog-eared, decrepit user profile that I've been dragging around with me since version 6 or so.
Many 64-bit Linux distros struggle to run 32-bit apps because they are only supplied with 64-bit versions of the libraries, which a 32-bit binary can't link with.
The recommended solution seems to be to create an alternative root directory which has the 32-bit version of the distribution inside it and then run the 32-bit apps in a chroot. Obviously this is a bit of a pain in the ass. Opera does, I believe, have a statically-linked 32-bit Linux binary which should be a little easier to run on a 64-bit system, though.
Whenever people talk about "Internet OS" I think you should really read it as "Network OS". Once a company gets big enough to have any sort of IT infrastructure it should be capable of running its own beefy central server to power its thin clients. I expect that the "Internet desktop" services will, if they ever catch on at all, be limited mostly to individuals and very small businesses that don't have the resources or expertise to run these things themselves. At the very least, a medium-sized enterprise should be able to pay a support firm to maintain its own in-house server.
Since you seem to know a lot more about this than I do, one more question:
How does this autoconfiguration relate to the DNS? In particular, if I switch providers and my prefix changes, is there some mechanism for changing this in DNS without manually updating a bajillion records? A global search/replace on the zone file would do it, but some people don't have direct access to their zone files but are instead restricted to managing them through a web UI or similar, and so manually updating a few dozen records would be very tedious.
I'm not sure how much control you have over these networks, but have you considered enabling IPv6 on them so that you can have a globally unique IP for each machine?
Sadly, these networks are not my responsibility. I simply connect to them to support my company's software which uses the network (and is thus sprawled across several machines); the network is managed either by them in-house or by a third-party.
It's not really clear to me what kind of addressing I'd use if I did deploy IPv6 in this situation. Link-local is out because these are two separate networks connected by a PPP link. Site-local carries the same disadvantages as the private IPv4 address ranges and I seem to remember it was deprecated anyway. Presumably I'd have to get some "real" IPv6 addresses, but I'm not really sure where I'd get them from. Is it even possible to get "real" IPv6 address allocations that would persist should IPv6 catch on? If so, who would I get them from?
The obvious UI for this would be to have it be just another item on the "Save as Type..." list in the Save dialog, and another type it supports through the standard Open dialog. There isn't a "Word Document" or an "HTML" submenu on the file menu. Why this inconsistent UI?
A stateful firewall watches for TCP handshakes, UDP packets and other such things and records them in a connection-tracking table. It can then make use of this table to make decisions about whether to forward packets. The most common configuration is not to forward packets that are not for an established connection. You can also configure it not to forward incoming TCP handshakes, thus preventing the outside world from reaching you.
NAT is built on top of this mechanism. The NAT software just intercepts packets and rewrites their source or destination addresses based on information in the firewall's connection-tracking table. You can disable NAT and still keep all of the security you had before. The only thing you lose is the ability to hide multiple hosts behind a single public IP address, which is a very important thing in a world where ISPs are very stingy with them. The problems with port forwarding and UPnP really have nothing to do with NAT and everything to do with stateful firewalls; their configurations often make a lot of assumptions about who is a client and who is a server that make life difficult for peer-to-peer protocols and "role reversal" protocols like the X window system.
This practice of using private IP address ranges causes me no end of problems when I'm connecting to other people's networks (via dialup or VPN) for support purposes. Quite often these ranges conflict with one another and I end up having to create static routes on my workstation so that I can talk to all of the hosts I need to. My life would be much easier if all hosts had public IP addresses, even if those addresses weren't actually routable from the public Internet; the important thing is that the addresses be globally unique, and that is the main disadvantage of using NAT in conjunction with private IP address ranges.
Both NAT and stateful firewalls cause headaches, but let's not get their respective benefits and drawbacks confused with one another.
This scheme seems fine until you encounter a stubborn developer that uses proportional fonts. There's one such developer at my company, and he doesn't even just use one proportional font: I think his editor uses regular Tahoma for most text, but renders strings in something else (not sure what) and comments in Comic Sans MS. He's always screwing up my lining-up-with-spaces, but at least my tabs-to-indent stay intact.
Once the editor's managing the tabs cleverly like that, I start to want crazy things like automatic wrapping in comments that respect the comment syntax. Imagine if the comment in ETNotepad's example was considered to be one long string of text and wrapped automatically to however many lines are necessary to avoid the comment running off the screen. This could also be extended to code if people are happy to make some consistent rules about how they wrap. I have some rules of thumb for line-wrapping which I think could be expressed in code, but I've seen some developers that just seem to make it up as they go along.
My rule of thumb is to try always to break on bracketing delimiters like braces and parens. This means that almost all start-of-line whitespace boils down to indenting:
void myFunction( ^---int a, ^---int b, );
This generally works best if you're writing in a language that doesn't mind spurious separators on the last element, like the comma on the last parameter in my example. If your language doesn't allow this, you need to make sure to keep the commas/semicolons/whatever right when you add/remove items in the list.
Of course, I don't normally do this for parameter declarations, since unless you've got some really crazy functions they are generally quite short, and it doesn't look so hot when two brackety things end up together:
void myFunction( ^---int a, ^---int b, ) { ^---whatever(); }
It's probably better to look at more "current" adventure games like Broken Sword 3. It broke away from the point-and-click model to a more console-friendly interface and was thus able to do reasonably well in both th PC and console markets. It used 3D graphics that were quite reasonable for the time.
I really don't get PHP's whole "fail and spew crap out to the browser but continue executing" thing. They either need to stop execution completely or generate no warning and return some kind of error code. Clearly they are failing to check the return value of mysql_connect here, but even if they had that first warning would have been printed.
In the PHP app I begrudgingly develop at work we have a custom error handler that upgrades all PHP warnings to fatal errors. This at least saves the embarassment of a half-broken page full of PHP warnings if something goes drastically wrong. It does mean, however, that if a fopen or a mysql_connect fails we die right away, even if there was error checking. There's liberal use of @ all over this app as a result.
(Turning down error_reporting to not include warnings is an option, but since PHP has plenty of warnings that should be fatal errors this is just asking for something unexpected to happen and for everything to blow up because PHP carried on regardless.)
I'd guess that the poster was referring to the fact that Mozilla's rendering engine was designed to render under the CSS model primarily and then the quirky stuff that didn't fit in was implemented on top of that, while IE -- due to its legacy -- takes the opposite tactic of taking a "tag soup" rendering engine and shoe-horning CSS rendering stuff into it. Many of IE's rendering bugs can be attributed to a poor mapping of CSS properties onto IE's traditional rendering model.
One of my boxes has a virus protection feature, and whenever it's switched on it makes entertaining beeping noises on startup and says that my MBR might be infected with a virus, presumably because it's detected LILO in there. Not sure what it is about LILO that upsets it so much, but as a result I keep that feature disabled so the system will reboot cleanly.
The goal of the Pacifica technology is to do the virtualization in the hardware to avoid the need to emulate devices. Microsoft's Virtual PC product is forced to emulate a particular network card (an old Intel 10mbit card, if memory serves) and then translate usage of that network card to calls to the NT device drivers for the real network card. Under Pacifica, the virtualized system talks directly to the real network card and the hypervisor software (which runs beneath the OS kernel) co-ordinates the different OS kernels in a similar sense to how the NT kernel co-ordinates multiple applications talking to the network card.
Since the hypervisor software is essentially "an OS to run OSes on top of", if you can find a way get some software running in there you can do whatever you want with the "real" OS completely oblivious.
My lifestyle is pretty cheap. I don't really buy many expensive things. I generally just buy what I need to live and some simple things to make life fun, such as books or TV show DVDs. I could easily live on half my salary and work half as many hours.
However, no-one is interested in a part-time software developer. There's less overhead in one full-time (40hr/week) employee than two 20hr/week employees. Even though I would love to work a 20hr week in exchange for half of my salary, there are lots of people out there that are happy to work 40hr weeks, meaning there's no market for 20hr/week staff. Unless everybody agrees to half their hours, and thus allows the economy to adjust, as far as I can tell I'm stuck with my 40hr weeks and more money than I really know what to do with.
(and no, I'm not earning that much compared to most developers. I don't know how those guys manage to spend it all.)
I'm no technophobe, but I always have at least one paper document on my desk at work. Why? Firstly, because then I can free up my monitor for more important things like my text editor, and secondly because I can scrawl all over a paper document with my handy ballpoint pen much more easily than I can annotate an electronic document using my mouse and keyboard.
I think IE's main problem is that it has a legacy from the Netscape era, so their rendering model is designed for that rather than for the CSS rendering model. Though they are superficially similar, there are many important differences, and this is what made Netscape 4's CSS implementation suck so badly: they tried to map it onto their existing rendering model which was fundamentally incompatible. Mozilla, on the other hand, is built on top of the CSS rendering model, with the old Netscape-style model implemented in terms of the CSS model (for the most part, at least). You can observe this by digging out Mozilla's html.css, in which every element's presentation is defined.
Microsoft is trying to adapt their rendering engine to the new model, but this is obviously proving quite difficult for them. I'd guess that most of their bugs so far have been caused by trying to map CSS onto their old model the way Netscape did, without ensuring that the two are completely compatible.
At work I get around this by having a little script that preprocesses CSS. My CSS files start with some property declarations and then reference these properties like this:
The verbose property declarations are used to present a pretty property generator for our designers to use so that they can play about with the color selections, alignments and so forth with a friendly interface and previews. We can then generate a static stylesheet file which we can make final manual tweaks to and use on a site. Unfortunately I can't release this stuff since it's owned by my employer, but it wouldn't be hard to roll your own similar software. The most complicated part is the bit that parses those property at-rules, since it's essentially a cut-down CSS parser; if I was doing it over again I'd probably use a simpler syntax.
It seems like quite a roundabout way to do it at first, but really it's not much different to using an HTML pre-processor to produce the boilerplate stuff on a large, static site.
CSS supports a table layout model. Firefox, Opera, Safari and Konquerer all support it. Note which popular browser is missing from the set. Working entirely from the standard, you can create a table-like layout without table markup. For example
body { display: table; } body #navbar { display: table-cell; } body #main { display: table-cell; }
The main disadvantage of this (other than IE's lack of support) is that the document content must be in the right order to follow normal table layout. CSS3 has features that address this limitation by allowing you to shift about the order of elements from the stylesheet, so if we ever manage to get there CSS tables might become workable.
Your closing question is fair, though. I can't help but wonder what documents they had in mind when they were designing the CSS layout model, since it seems to make common things very difficult (columns, dividing lines, etc) by optimizing for "one-dimensional" rendering, which is very rarely used.
Re:The one thing that bothers me with opera..
on
Opera 9.0 Released
·
· Score: 1
I'll agree with you wholeheartedly that the default UI in Opera sucks since they switched to that god-awful skin. I'm not really sure what posessed them to do it. Fortunately, though, they retained the option to switch back to a native interface from the skin settings, which you can get at by right-clicking on any toolbar and selecting "Customize Toolbars" and then picking the Skin tab. (I'm sure there's a much more intuitive way to get there, but my menu is currently a bit screwed due to my using a custom menu from Opera 7 on my new Opera 9 install!)
What you see there depends on your OS, but for example on Windows Opera ships with a "Windows Native" skin which uses native widgets. Note that despite being called a "skin" this really is native rendering, not just a bunch of bitmaps that look a bit like Windows's default widgets. I personally use a third-party custom skin called Minimalist Native which has much simpler buttons that I find much more pleasing.
Note that you're not really supposed to edit that ini file, but instead create a copy of it and edit that. The stock file is likely to get overwritten next time you upgrade.
Fortunately it's easy enough to get a custom copy to edit. In the toolbar/menu preferences section (on the Advanced tab) you can select the standard configuration and click "Duplicate" to get a copy of the configuration, then select it. You'll find that ini file in your profile rather than in the main Opera directory.
This approach does have its disadvantages, though. In particular, when new versions come out your menus won't update to the newest version. My Opera 9 still has menus from Opera 7 as a result of this, since I've been carrying along the same profile for years. I'm working on manually rectifying all of the differences so that everything works again, since this version has finally removed the old preferences dialog and changed the way the JavaScript Console (now the Error Console) is invoked, and probably other things I've not encountered yet. Most of it still works, though.
I'm not too fussed about XUL, but I'd love to see some support for XBL. Of course, XBL2 isn't really finished yet and XBL1 as currently implemented in Mozilla has a few warts that make it hard to implement in other browsers.
I think if you turn off plugins in the preferences it'll stop bugging you. At least, I have plugins disabled in my Opera and I don't see this dialog. The caveat is that I've had plugins disabled in Opera since Opera supported it, so it might well be something else in my dog-eared, decrepit user profile that I've been dragging around with me since version 6 or so.
Many 64-bit Linux distros struggle to run 32-bit apps because they are only supplied with 64-bit versions of the libraries, which a 32-bit binary can't link with.
The recommended solution seems to be to create an alternative root directory which has the 32-bit version of the distribution inside it and then run the 32-bit apps in a chroot. Obviously this is a bit of a pain in the ass. Opera does, I believe, have a statically-linked 32-bit Linux binary which should be a little easier to run on a 64-bit system, though.
Whenever people talk about "Internet OS" I think you should really read it as "Network OS". Once a company gets big enough to have any sort of IT infrastructure it should be capable of running its own beefy central server to power its thin clients. I expect that the "Internet desktop" services will, if they ever catch on at all, be limited mostly to individuals and very small businesses that don't have the resources or expertise to run these things themselves. At the very least, a medium-sized enterprise should be able to pay a support firm to maintain its own in-house server.
Since you seem to know a lot more about this than I do, one more question:
How does this autoconfiguration relate to the DNS? In particular, if I switch providers and my prefix changes, is there some mechanism for changing this in DNS without manually updating a bajillion records? A global search/replace on the zone file would do it, but some people don't have direct access to their zone files but are instead restricted to managing them through a web UI or similar, and so manually updating a few dozen records would be very tedious.
Sadly, these networks are not my responsibility. I simply connect to them to support my company's software which uses the network (and is thus sprawled across several machines); the network is managed either by them in-house or by a third-party.
It's not really clear to me what kind of addressing I'd use if I did deploy IPv6 in this situation. Link-local is out because these are two separate networks connected by a PPP link. Site-local carries the same disadvantages as the private IPv4 address ranges and I seem to remember it was deprecated anyway. Presumably I'd have to get some "real" IPv6 addresses, but I'm not really sure where I'd get them from. Is it even possible to get "real" IPv6 address allocations that would persist should IPv6 catch on? If so, who would I get them from?
The obvious UI for this would be to have it be just another item on the "Save as Type..." list in the Save dialog, and another type it supports through the standard Open dialog. There isn't a "Word Document" or an "HTML" submenu on the file menu. Why this inconsistent UI?
A stateful firewall watches for TCP handshakes, UDP packets and other such things and records them in a connection-tracking table. It can then make use of this table to make decisions about whether to forward packets. The most common configuration is not to forward packets that are not for an established connection. You can also configure it not to forward incoming TCP handshakes, thus preventing the outside world from reaching you.
NAT is built on top of this mechanism. The NAT software just intercepts packets and rewrites their source or destination addresses based on information in the firewall's connection-tracking table. You can disable NAT and still keep all of the security you had before. The only thing you lose is the ability to hide multiple hosts behind a single public IP address, which is a very important thing in a world where ISPs are very stingy with them. The problems with port forwarding and UPnP really have nothing to do with NAT and everything to do with stateful firewalls; their configurations often make a lot of assumptions about who is a client and who is a server that make life difficult for peer-to-peer protocols and "role reversal" protocols like the X window system.
This practice of using private IP address ranges causes me no end of problems when I'm connecting to other people's networks (via dialup or VPN) for support purposes. Quite often these ranges conflict with one another and I end up having to create static routes on my workstation so that I can talk to all of the hosts I need to. My life would be much easier if all hosts had public IP addresses, even if those addresses weren't actually routable from the public Internet; the important thing is that the addresses be globally unique, and that is the main disadvantage of using NAT in conjunction with private IP address ranges.
Both NAT and stateful firewalls cause headaches, but let's not get their respective benefits and drawbacks confused with one another.
This scheme seems fine until you encounter a stubborn developer that uses proportional fonts. There's one such developer at my company, and he doesn't even just use one proportional font: I think his editor uses regular Tahoma for most text, but renders strings in something else (not sure what) and comments in Comic Sans MS. He's always screwing up my lining-up-with-spaces, but at least my tabs-to-indent stay intact.
Once the editor's managing the tabs cleverly like that, I start to want crazy things like automatic wrapping in comments that respect the comment syntax. Imagine if the comment in ETNotepad's example was considered to be one long string of text and wrapped automatically to however many lines are necessary to avoid the comment running off the screen. This could also be extended to code if people are happy to make some consistent rules about how they wrap. I have some rules of thumb for line-wrapping which I think could be expressed in code, but I've seen some developers that just seem to make it up as they go along.
My rule of thumb is to try always to break on bracketing delimiters like braces and parens. This means that almost all start-of-line whitespace boils down to indenting:
This generally works best if you're writing in a language that doesn't mind spurious separators on the last element, like the comma on the last parameter in my example. If your language doesn't allow this, you need to make sure to keep the commas/semicolons/whatever right when you add/remove items in the list.
Of course, I don't normally do this for parameter declarations, since unless you've got some really crazy functions they are generally quite short, and it doesn't look so hot when two brackety things end up together:
It's probably better to look at more "current" adventure games like Broken Sword 3. It broke away from the point-and-click model to a more console-friendly interface and was thus able to do reasonably well in both th PC and console markets. It used 3D graphics that were quite reasonable for the time.
I really don't get PHP's whole "fail and spew crap out to the browser but continue executing" thing. They either need to stop execution completely or generate no warning and return some kind of error code. Clearly they are failing to check the return value of mysql_connect here, but even if they had that first warning would have been printed.
In the PHP app I begrudgingly develop at work we have a custom error handler that upgrades all PHP warnings to fatal errors. This at least saves the embarassment of a half-broken page full of PHP warnings if something goes drastically wrong. It does mean, however, that if a fopen or a mysql_connect fails we die right away, even if there was error checking. There's liberal use of @ all over this app as a result.
(Turning down error_reporting to not include warnings is an option, but since PHP has plenty of warnings that should be fatal errors this is just asking for something unexpected to happen and for everything to blow up because PHP carried on regardless.)
I'd guess that the poster was referring to the fact that Mozilla's rendering engine was designed to render under the CSS model primarily and then the quirky stuff that didn't fit in was implemented on top of that, while IE -- due to its legacy -- takes the opposite tactic of taking a "tag soup" rendering engine and shoe-horning CSS rendering stuff into it. Many of IE's rendering bugs can be attributed to a poor mapping of CSS properties onto IE's traditional rendering model.
Yes, they have.
One of my boxes has a virus protection feature, and whenever it's switched on it makes entertaining beeping noises on startup and says that my MBR might be infected with a virus, presumably because it's detected LILO in there. Not sure what it is about LILO that upsets it so much, but as a result I keep that feature disabled so the system will reboot cleanly.
The goal of the Pacifica technology is to do the virtualization in the hardware to avoid the need to emulate devices. Microsoft's Virtual PC product is forced to emulate a particular network card (an old Intel 10mbit card, if memory serves) and then translate usage of that network card to calls to the NT device drivers for the real network card. Under Pacifica, the virtualized system talks directly to the real network card and the hypervisor software (which runs beneath the OS kernel) co-ordinates the different OS kernels in a similar sense to how the NT kernel co-ordinates multiple applications talking to the network card.
Since the hypervisor software is essentially "an OS to run OSes on top of", if you can find a way get some software running in there you can do whatever you want with the "real" OS completely oblivious.
I have several copyrights! Where do I sign up?
My lifestyle is pretty cheap. I don't really buy many expensive things. I generally just buy what I need to live and some simple things to make life fun, such as books or TV show DVDs. I could easily live on half my salary and work half as many hours.
However, no-one is interested in a part-time software developer. There's less overhead in one full-time (40hr/week) employee than two 20hr/week employees. Even though I would love to work a 20hr week in exchange for half of my salary, there are lots of people out there that are happy to work 40hr weeks, meaning there's no market for 20hr/week staff. Unless everybody agrees to half their hours, and thus allows the economy to adjust, as far as I can tell I'm stuck with my 40hr weeks and more money than I really know what to do with.
(and no, I'm not earning that much compared to most developers. I don't know how those guys manage to spend it all.)
I'm no technophobe, but I always have at least one paper document on my desk at work. Why? Firstly, because then I can free up my monitor for more important things like my text editor, and secondly because I can scrawl all over a paper document with my handy ballpoint pen much more easily than I can annotate an electronic document using my mouse and keyboard.
I think IE's main problem is that it has a legacy from the Netscape era, so their rendering model is designed for that rather than for the CSS rendering model. Though they are superficially similar, there are many important differences, and this is what made Netscape 4's CSS implementation suck so badly: they tried to map it onto their existing rendering model which was fundamentally incompatible. Mozilla, on the other hand, is built on top of the CSS rendering model, with the old Netscape-style model implemented in terms of the CSS model (for the most part, at least). You can observe this by digging out Mozilla's html.css, in which every element's presentation is defined.
Microsoft is trying to adapt their rendering engine to the new model, but this is obviously proving quite difficult for them. I'd guess that most of their bugs so far have been caused by trying to map CSS onto their old model the way Netscape did, without ensuring that the two are completely compatible.
At work I get around this by having a little script that preprocesses CSS. My CSS files start with some property declarations and then reference these properties like this:
The verbose property declarations are used to present a pretty property generator for our designers to use so that they can play about with the color selections, alignments and so forth with a friendly interface and previews. We can then generate a static stylesheet file which we can make final manual tweaks to and use on a site. Unfortunately I can't release this stuff since it's owned by my employer, but it wouldn't be hard to roll your own similar software. The most complicated part is the bit that parses those property at-rules, since it's essentially a cut-down CSS parser; if I was doing it over again I'd probably use a simpler syntax.
It seems like quite a roundabout way to do it at first, but really it's not much different to using an HTML pre-processor to produce the boilerplate stuff on a large, static site.
CSS supports a table layout model. Firefox, Opera, Safari and Konquerer all support it. Note which popular browser is missing from the set. Working entirely from the standard, you can create a table-like layout without table markup. For example
The main disadvantage of this (other than IE's lack of support) is that the document content must be in the right order to follow normal table layout. CSS3 has features that address this limitation by allowing you to shift about the order of elements from the stylesheet, so if we ever manage to get there CSS tables might become workable.
Your closing question is fair, though. I can't help but wonder what documents they had in mind when they were designing the CSS layout model, since it seems to make common things very difficult (columns, dividing lines, etc) by optimizing for "one-dimensional" rendering, which is very rarely used.
I'll agree with you wholeheartedly that the default UI in Opera sucks since they switched to that god-awful skin. I'm not really sure what posessed them to do it. Fortunately, though, they retained the option to switch back to a native interface from the skin settings, which you can get at by right-clicking on any toolbar and selecting "Customize Toolbars" and then picking the Skin tab. (I'm sure there's a much more intuitive way to get there, but my menu is currently a bit screwed due to my using a custom menu from Opera 7 on my new Opera 9 install!)
What you see there depends on your OS, but for example on Windows Opera ships with a "Windows Native" skin which uses native widgets. Note that despite being called a "skin" this really is native rendering, not just a bunch of bitmaps that look a bit like Windows's default widgets. I personally use a third-party custom skin called Minimalist Native which has much simpler buttons that I find much more pleasing.
Note that you're not really supposed to edit that ini file, but instead create a copy of it and edit that. The stock file is likely to get overwritten next time you upgrade.
Fortunately it's easy enough to get a custom copy to edit. In the toolbar/menu preferences section (on the Advanced tab) you can select the standard configuration and click "Duplicate" to get a copy of the configuration, then select it. You'll find that ini file in your profile rather than in the main Opera directory.
This approach does have its disadvantages, though. In particular, when new versions come out your menus won't update to the newest version. My Opera 9 still has menus from Opera 7 as a result of this, since I've been carrying along the same profile for years. I'm working on manually rectifying all of the differences so that everything works again, since this version has finally removed the old preferences dialog and changed the way the JavaScript Console (now the Error Console) is invoked, and probably other things I've not encountered yet. Most of it still works, though.