Uh, did you read my post? X11 can already do that "without reconfiguring"--the APIs and user mode programs are all there.
If your particular laptop configuration can't do it, it's either because you are missing drivers or because you misconfigured your laptop during installation. Those are problems with lack of support from hardware vendors, not with X11. The way to fix those problems is to either buy supported hardware or to buy a commercial X11 server for your hardware.
Re:Speak for yourself, OSX is more than there alre
on
Syllable 0.5.4 Released
·
· Score: 3, Insightful
When a complete novice wants to install something from a CD on OSX all they do is drag the.app bundle to the hard disk,
Complete novices don't install applications on their machines at all--they use whatever comes preinstalled. That's why both Apple and PC vendors sell machines with entire software suites preinstalled.
with Linux you either have to use some vendor specific tool to manage the myriad dependencies or run rpm manually.
There is nothing to "manage": the major Linux distributions handle all the dependencies for you. That's a big advantage Linux has over both Windows and Macintosh.
Linux is a great desktop, provided you want to only use the software that you are given by the distributor
Yes, that's quite right. And unlike Macintosh, Linux vendors give their users single-stop solutions for all their software needs.
OSX, all that is quite unnecessary.
Installing and maintaing software on OS X is a lot of work: for most third party applications, you have to manually download, install, and update applications. If there are dependencies, you have to track those down manually as well.
Worse, unlike Windows, Macintosh doesn't even have a single, consistent way of installing or removing packages.
Call me when I can plug my laptop into a docking station and get video up on two monitors without having to edit a configuration file.
X11 has excellent multi-monitor support, as well as screen rotation, and dynamic geometry changes, together with GUI apps for accessing that functionality. X11's support for those features is better than anything else out there.
If X11 running on your laptop can't do those things, it's because it doesn't have the right low-level driver. You aren't going to fix a lack of drivers by creating another open source window system.
In different words, call me when Syllable reliably does those things on a wide variety of hardware.
There are very specific reasons people don't use it, X-windows being one of those big reasons.
I challenge you to name any significant end-user visible difference between up-to-date versions of X11 and up-to-date versions of the Windows and Macintosh graphics subsystems. In fact, all three of them are client-server systems. If anything, the one that is furthest behind technically is the Windows graphics subsystem, which hasn't hindered its acceptance.
The goal here is to make a fully functional OS that will appeal to the average user
Yes, and what appeals to the average user is applications. You don't get more applications by throwing out a perfectly functional and widely supported graphics subsystem and starting from scratch.
Even if your assertion that there was something so fatally wrong with X11 that nothing based on it could possibly succeed in the market were true, you could simply build on the framebuffer versions of Qt or Gtk+--you'd get lots of applications with very little extra work.
By your logic then, its forever going to be 95% windows 4% mac, and 1% unix.
Those numbers are already wrong, if they were ever right.
which is completely unimpeded by any legacy X-Windows foundations or toolkits beneath.
It is Syllable that is the "legacy design" here. The entire industry is finally moving to more dynamic languages (Java, C#, Python, VB.NET, Objective C), dynamic GUI configuration (XUL, Glade, Avalon), vector graphics (SVG, Render, DisplayPDF), and client-server GUI models (XP-GDI, DisplayPDF, X11).
While one can discuss the relative merits of those technologies, relative to any of them, an OS with a GUI based on a huge C++ GUI library is an anachronism. Except for Syllable's nifty graphics, Smalltalk-80 looks like it was more advanced and flexible technology a quarter of a century ago.
It's called Cygwin Setup. It's not apt (AFAIK), but it seems to be working well. Of course, it does come with the Cygwin libraries, but you can hardly expect people to try to port that stuff to raw Windows APIs.
Open source already has quick and convenient upgrade/patch systems, systems that ensure system-wide consistency.
Per-program updates and installers like Mozilla has are a nuisance because application packages get out of sync and you end up having to keep track of new releases manually. Software like Mozilla has them because neither of the two commercial platform (Windows, Macintosh) can get their act together on package and dependency management.
Think about it: this is one stupid business method patent that doesn't affect open source software. Of course, it doesn't affect Microsoft or IBM or any of the other companies that Microsoft has a cross-licensing agreement with either. Mainly, it just keeps new competitors out of the market.
Still, the nature of the patent demonstrates again just what kind of company Sun is and what kind of person Schwartz is.
Wow - How could Microsoft be so insensitive as to create jobs.
As with every business, expanding a company requires investments for office space, support staff, and all that. Well, some of those investments need to happen outside the company: new roads, airport expansions, government support staff, etc. That's what companies pay corporate taxes for.
When companies don't pay corporate taxes, other tax payers end up paying for corporate expenses. Basically, if you live in WA and Microsoft doesn't pay enough corporate taxes, then your tax dollars go directly to Microsoft stock holders. Is that what you want?
So why is it a brain anomaly if you or I have reading difficulties?
"Anomaly" doesn't mean "bad", it means "different from the normal or common". Einstein's brain was an anomaly, too.
It's not like natural selection has created a pool of "good reading brains".
No, but cultures have created writing systems that have worked "well enough" for most brains. Maybe they can be improved further and be made to work for more people; if you have any ideas, publish them.
"So far I have been able to manage replying and keeping up the work for making the typeface available, although I am not sure for how long this will be the case," she said.
Maybe just putting it up for download on her website would ensure widest and easiest distribution of the font? Right now, the website seems oddly covered in trademark and patent notices.
_Most_ programmers with any measurable breadth can sit back and shake their head. Sorry!
I completely agree that most programmers still agree with your point of view. That's why so much software is still full of security holes, crashes so frequently, requires hundreds of megabytes of memory, and misses so many deadlines.
struggling to grip with a wide variety of blindlingly obvious fact.
I stated one of the design decisions behind C++ and that it will never therefore have a GC
"You don't pay for what you don't use" makes a great slogan. But products often promise something and fail to deliver. In particular, in C/C++, you pay dearly for the use of manual storage management, both in terms of performance and in terms of safety.
Are you joking? The syntax and semantics are in many cases nearly identical.
Java and Java-without-new would be nearly identical languages, yet they would be very different in practice. To discuss similarity between languages, one has to talk about how the languages work for software development.
To you, and your obvious genius, everything is flawed, all stifling your abilities.
As I was saying, there are plenty of decent languages and platforms. Just pick anything other than C/C++ and chances are you will be much better off.
If you really have 20 years of coding experience, I suggest you consider an early retirment.
Why should I? It has taken a while, but the industry is coming around to my point of view: Java and C# are hugely popular for new projects, while C and C++ are more and more relegated to legacy code. You are the anachronism, the software equivalent of a member of the "flat earth society". Sounds to me like it's time for you to retire.
I'm sorry, it's a myth? Apparently many millions of people, many far better programmers than you, have completely been deceived!
You are absolutely right, they have.
One of the core ideas behind the design of C++ is "if you don't use it, you don't pay for it".
If you live in a hovel, you also don't pay for things you don't use.
Java/C# and even C++ really aren't wildly different languages.
They are quite similar in the sense that they all use a lot of braces. That's pretty much where the similarity ends, however.
shows you're a language war fanboy, and most fanboys are beginners who don't know any better.
Like your other ideas, you are wrong there as well. I have more than 20 years and several hundred KLOC of C programming under my belt (Saber C and Purify made it more bearable). Unlike you, however, I know better than to think that just because it can be done and people pay for it, it must be a good idea.
Furthermore, if anything, I'm an "anti-fanboy": I'm saying that C and C++ are almost uniquely bad in their disregard for type safety and runtime safety. Java and C# just happen to be the most popular alternatives right now.
That FAQ is way outdated. Lambda has access to variables in the enclosing scope. The syntactic restrictions on statements still exist, but (obviously) don't exist for named nested functions.
Generally, I would prefer having a syntactically unrestricted lambda/block in Python, but between iterators, list comprehensions, and functional lambda, the need for any kind of complicated nested block almost never arises.
In the context of how these languages are used, blocks just don't make a significant difference in practice. Writing a Gnome or KDE application isn't any easier in Ruby than in Python because of blocks.
Note that I generally think that syntax and scoping do matter: Perl and Tcl both have huge problems with syntax and scoping, but Ruby and Python do not IMO.
The OP said "operating system kernel," though, and like it or not, kernels run on bare metal.
The problems don't go away just because it's in the kernel: modern kernels still need to clean up their resources, get software components to talk to each other nicely, and not crash when there is a bug somewhere.
Even if you want to write your OS in C# or Haskell or whatever, you'll only get to do so after you write a runtime for your language in something more low-level.
Support for garbage collection, dynamic typing, and runtime safety in a language do not preclude the use of that language for implementing low-level features. Furthermore, such languages can demonstrably be used to implement their own runtimes and kernels; except for a few scattered assembly language instructions for things like CPU mode switching and register initialization, no code needs to be written in assembly language.
Haskell lacks some necessary facilities, but Modula 3, Ada, C#, and some varieties of Lisp, Java, and Smalltalk have them and several of them have been used for those purposes.
What evidence do you have that GTK (I have no experience with QT) is a poorly designed object framework?
Nowhere did I say it was "poorly designed". Gtk+ is probably about as good a toolkit as you can design with C.
Python and Perl also have bindings that are very comfortable within their own object framework.
Yes, after a lot of work has been spent on fixing the bindings and the bugs. And even then PyGtk applications written in pure Python still can crash with memory management and pointer errors. And there are still limitations when it comes to inheritance, memory management, and when mixing Gtk+, Python, and some other OO language.
It's a myth that C/C++ is particularly fast or efficient for those applications: in the absence of language-provided features like garbage collection, runtime safety, or dynamic typing, people end up reinventing those features over time, badly and less efficiently.
Both Gtk and Qt are actually sad examples of this: not only does their functionality suffer from their choice of language (each has invented their own object models), their resource requirements are embarrassingly bad.
application programming. Here development speed is more important than execution speed. Python and kin provide 'good enough' execution speed when coupled with proper libries (QT, etc) with the fastest development speed.
Languages like Python have other problems for the development of large systems, like the lack of static type checking. Python is great, however, for prototyping, extensions language uses, and for single programmer projects.
But, in any case, there is a lot of application software that requires much better performance than languages like Python can deliver: CAD systems, graphics systems, image encoders/decoders/editors, vector graphics renderers, typesetting and layout software (including web browsers and editors), audio encoders/decoders, GIS systems and mapping programs, speech recognition engines, and lots more. No, application developers have neither the time nor the resources to turn all the compute intensive core functionality in C/C++ code and then link that into Python. C# is a good middle ground.
let alone C# or Java, although we may be ready for it in 5 years or so.
The performance of Sun's Java implementation is excellent (although Java sucks for other reasons). The performance of C# implementations is quickly catching up with Java implementations.
How difficult it is to build applications for.NET depends on the tools you use for building those applications, not the runtime you execute them with. So, you can use VisualStudio or Sharpdevelop or whatever other.NET tools you use for developing Mono applications.
But, in addition, Mono also offers bindings to the Gtk+/Gnome APIs, and that makes software development a lot easier for Gnome developers. There are some GUI builders you can already use with those Mono bindings, and a new GUI builder will be integrated into Monodevelop, giving you a VisualStudio.NET-like experience developing applications for Mono and Gnome.
So, in short, yes, Mono "captures the simplicity of the.NET framework" and then some.
For me, Obj-C combined with Cocoa (*Step), is that same sweet spot.
To each their own, but I suspect you are in a small minority. Garbage collection, safe modules, type-safe linkage, and runtime code generation are all important modern language features that C# has and Objective C lacks.
A 5mW laser does not seem to damage a person's eye even when they look directly into it for 15 minutes (see here for example).
From a distance of what must be miles away, aimed at a moving aircraft, you would need a laser that was orders of magnitude more powerful in order to damage someone's eye. Even with a powerful laser, you'd generally have to look directly into the optical axis to cause serious vision impairment. And while I haven't gotten injured by a laser, the few times I looked into one accidentally, there was little doubt about when it happened or where the light came from.
Even more implausible is the claim in the article that someone would "[continue] to suffer eye pain and deteriorating vision"; laser injuries to the eye do not cause continued deterioration and they do not cause chronic pain (here).
The whole thing strikes me as wildly implausible. As the article above shows, apparently erroneous claims of laser injuries are fairly frequent. A more likely explanation is that someone is lying, perhaps because he wants to retire early or did something else stupid and wants it covered.
The CIA factbook definitions are in agreement with common usage and other definitions.
By that account, Norway and the UK are republics,
I don't know about Norway, but the UK is not quite a republic because some legislative powers are still passed on hereditarily.
In any case, none of these descriptions are mutually exclusive: a country could be a federal republic, a constitutional monarchy, and a democracy all at the same time. In the case of the US, it happens to be both a federal republic and a democracy.
Uh, did you read my post? X11 can already do that "without reconfiguring"--the APIs and user mode programs are all there.
If your particular laptop configuration can't do it, it's either because you are missing drivers or because you misconfigured your laptop during installation. Those are problems with lack of support from hardware vendors, not with X11. The way to fix those problems is to either buy supported hardware or to buy a commercial X11 server for your hardware.
When a complete novice wants to install something from a CD on OSX all they do is drag the .app bundle to the hard disk,
Complete novices don't install applications on their machines at all--they use whatever comes preinstalled. That's why both Apple and PC vendors sell machines with entire software suites preinstalled.
with Linux you either have to use some vendor specific tool to manage the myriad dependencies or run rpm manually.
There is nothing to "manage": the major Linux distributions handle all the dependencies for you. That's a big advantage Linux has over both Windows and Macintosh.
Linux is a great desktop, provided you want to only use the software that you are given by the distributor
Yes, that's quite right. And unlike Macintosh, Linux vendors give their users single-stop solutions for all their software needs.
OSX, all that is quite unnecessary.
Installing and maintaing software on OS X is a lot of work: for most third party applications, you have to manually download, install, and update applications. If there are dependencies, you have to track those down manually as well.
Worse, unlike Windows, Macintosh doesn't even have a single, consistent way of installing or removing packages.
Call me when I can plug my laptop into a docking station and get video up on two monitors without having to edit a configuration file.
X11 has excellent multi-monitor support, as well as screen rotation, and dynamic geometry changes, together with GUI apps for accessing that functionality. X11's support for those features is better than anything else out there.
If X11 running on your laptop can't do those things, it's because it doesn't have the right low-level driver. You aren't going to fix a lack of drivers by creating another open source window system.
In different words, call me when Syllable reliably does those things on a wide variety of hardware.
There are very specific reasons people don't use it, X-windows being one of those big reasons.
I challenge you to name any significant end-user visible difference between up-to-date versions of X11 and up-to-date versions of the Windows and Macintosh graphics subsystems. In fact, all three of them are client-server systems. If anything, the one that is furthest behind technically is the Windows graphics subsystem, which hasn't hindered its acceptance.
The goal here is to make a fully functional OS that will appeal to the average user
Yes, and what appeals to the average user is applications. You don't get more applications by throwing out a perfectly functional and widely supported graphics subsystem and starting from scratch.
Even if your assertion that there was something so fatally wrong with X11 that nothing based on it could possibly succeed in the market were true, you could simply build on the framebuffer versions of Qt or Gtk+--you'd get lots of applications with very little extra work.
By your logic then, its forever going to be 95% windows 4% mac, and 1% unix.
Those numbers are already wrong, if they were ever right.
which is completely unimpeded by any legacy X-Windows foundations or toolkits beneath.
It is Syllable that is the "legacy design" here. The entire industry is finally moving to more dynamic languages (Java, C#, Python, VB.NET, Objective C), dynamic GUI configuration (XUL, Glade, Avalon), vector graphics (SVG, Render, DisplayPDF), and client-server GUI models (XP-GDI, DisplayPDF, X11).
While one can discuss the relative merits of those technologies, relative to any of them, an OS with a GUI based on a huge C++ GUI library is an anachronism. Except for Syllable's nifty graphics, Smalltalk-80 looks like it was more advanced and flexible technology a quarter of a century ago.
It's called Cygwin Setup. It's not apt (AFAIK), but it seems to be working well. Of course, it does come with the Cygwin libraries, but you can hardly expect people to try to port that stuff to raw Windows APIs.
For Windows, you can use Cygwin.
For Mac OS X, you can use Fink.
For both of them, there are also commercial software update systems.
The problem is that neither Apple nor Microsoft ship or support such systems, probably because it would cause them business and legal problems.
Open source already has quick and convenient upgrade/patch systems, systems that ensure system-wide consistency.
Per-program updates and installers like Mozilla has are a nuisance because application packages get out of sync and you end up having to keep track of new releases manually. Software like Mozilla has them because neither of the two commercial platform (Windows, Macintosh) can get their act together on package and dependency management.
Think about it: this is one stupid business method patent that doesn't affect open source software. Of course, it doesn't affect Microsoft or IBM or any of the other companies that Microsoft has a cross-licensing agreement with either. Mainly, it just keeps new competitors out of the market.
Still, the nature of the patent demonstrates again just what kind of company Sun is and what kind of person Schwartz is.
Wow - How could Microsoft be so insensitive as to create jobs.
As with every business, expanding a company requires investments for office space, support staff, and all that. Well, some of those investments need to happen outside the company: new roads, airport expansions, government support staff, etc. That's what companies pay corporate taxes for.
When companies don't pay corporate taxes, other tax payers end up paying for corporate expenses. Basically, if you live in WA and Microsoft doesn't pay enough corporate taxes, then your tax dollars go directly to Microsoft stock holders. Is that what you want?
So why is it a brain anomaly if you or I have reading difficulties?
"Anomaly" doesn't mean "bad", it means "different from the normal or common". Einstein's brain was an anomaly, too.
It's not like natural selection has created a pool of "good reading brains".
No, but cultures have created writing systems that have worked "well enough" for most brains. Maybe they can be improved further and be made to work for more people; if you have any ideas, publish them.
"So far I have been able to manage replying and keeping up the work for making the typeface available, although I am not sure for how long this will be the case," she said.
Maybe just putting it up for download on her website would ensure widest and easiest distribution of the font? Right now, the website seems oddly covered in trademark and patent notices.
_Most_ programmers with any measurable breadth can sit back and shake their head. Sorry!
I completely agree that most programmers still agree with your point of view. That's why so much software is still full of security holes, crashes so frequently, requires hundreds of megabytes of memory, and misses so many deadlines.
struggling to grip with a wide variety of blindlingly obvious fact.
Yes, the facts are blindingly obvious.
I stated one of the design decisions behind C++ and that it will never therefore have a GC
"You don't pay for what you don't use" makes a great slogan. But products often promise something and fail to deliver. In particular, in C/C++, you pay dearly for the use of manual storage management, both in terms of performance and in terms of safety.
Are you joking? The syntax and semantics are in many cases nearly identical.
Java and Java-without-new would be nearly identical languages, yet they would be very different in practice. To discuss similarity between languages, one has to talk about how the languages work for software development.
To you, and your obvious genius, everything is flawed, all stifling your abilities.
As I was saying, there are plenty of decent languages and platforms. Just pick anything other than C/C++ and chances are you will be much better off.
If you really have 20 years of coding experience, I suggest you consider an early retirment.
Why should I? It has taken a while, but the industry is coming around to my point of view: Java and C# are hugely popular for new projects, while C and C++ are more and more relegated to legacy code. You are the anachronism, the software equivalent of a member of the "flat earth society". Sounds to me like it's time for you to retire.
I'm sorry, it's a myth? Apparently many millions of people, many far better programmers than you, have completely been deceived!
You are absolutely right, they have.
One of the core ideas behind the design of C++ is "if you don't use it, you don't pay for it".
If you live in a hovel, you also don't pay for things you don't use.
Java/C# and even C++ really aren't wildly different languages.
They are quite similar in the sense that they all use a lot of braces. That's pretty much where the similarity ends, however.
shows you're a language war fanboy, and most fanboys are beginners who don't know any better.
Like your other ideas, you are wrong there as well. I have more than 20 years and several hundred KLOC of C programming under my belt (Saber C and Purify made it more bearable). Unlike you, however, I know better than to think that just because it can be done and people pay for it, it must be a good idea.
Furthermore, if anything, I'm an "anti-fanboy": I'm saying that C and C++ are almost uniquely bad in their disregard for type safety and runtime safety. Java and C# just happen to be the most popular alternatives right now.
People have written systems consisting of millions of lines of assembly language, too. Just because people do something doesn't mean it's a good idea.
That FAQ is way outdated. Lambda has access to variables in the enclosing scope. The syntactic restrictions on statements still exist, but (obviously) don't exist for named nested functions.
Generally, I would prefer having a syntactically unrestricted lambda/block in Python, but between iterators, list comprehensions, and functional lambda, the need for any kind of complicated nested block almost never arises.
In the context of how these languages are used, blocks just don't make a significant difference in practice. Writing a Gnome or KDE application isn't any easier in Ruby than in Python because of blocks.
Note that I generally think that syntax and scoping do matter: Perl and Tcl both have huge problems with syntax and scoping, but Ruby and Python do not IMO.
The OP said "operating system kernel," though, and like it or not, kernels run on bare metal.
The problems don't go away just because it's in the kernel: modern kernels still need to clean up their resources, get software components to talk to each other nicely, and not crash when there is a bug somewhere.
Even if you want to write your OS in C# or Haskell or whatever, you'll only get to do so after you write a runtime for your language in something more low-level.
Support for garbage collection, dynamic typing, and runtime safety in a language do not preclude the use of that language for implementing low-level features. Furthermore, such languages can demonstrably be used to implement their own runtimes and kernels; except for a few scattered assembly language instructions for things like CPU mode switching and register initialization, no code needs to be written in assembly language.
Haskell lacks some necessary facilities, but Modula 3, Ada, C#, and some varieties of Lisp, Java, and Smalltalk have them and several of them have been used for those purposes.
In my experience, the latter far outweighs the former (as long as raw performance isn't the issue).
The operative word being "my"; static type checking becomes important when developing large systems over a long time and/or with many developers.
Also, static type checking, interactive development/testing, and zero compilation times are not mutually exclusive.
What evidence do you have that GTK (I have no experience with QT) is a poorly designed object framework?
Nowhere did I say it was "poorly designed". Gtk+ is probably about as good a toolkit as you can design with C.
Python and Perl also have bindings that are very comfortable within their own object framework.
Yes, after a lot of work has been spent on fixing the bindings and the bugs. And even then PyGtk applications written in pure Python still can crash with memory management and pointer errors. And there are still limitations when it comes to inheritance, memory management, and when mixing Gtk+, Python, and some other OO language.
operating system kernel or core library,
It's a myth that C/C++ is particularly fast or efficient for those applications: in the absence of language-provided features like garbage collection, runtime safety, or dynamic typing, people end up reinventing those features over time, badly and less efficiently.
Both Gtk and Qt are actually sad examples of this: not only does their functionality suffer from their choice of language (each has invented their own object models), their resource requirements are embarrassingly bad.
application programming. Here development speed is more important than execution speed. Python and kin provide 'good enough' execution speed when coupled with proper libries (QT, etc) with the fastest development speed.
Languages like Python have other problems for the development of large systems, like the lack of static type checking. Python is great, however, for prototyping, extensions language uses, and for single programmer projects.
But, in any case, there is a lot of application software that requires much better performance than languages like Python can deliver: CAD systems, graphics systems, image encoders/decoders/editors, vector graphics renderers, typesetting and layout software (including web browsers and editors), audio encoders/decoders, GIS systems and mapping programs, speech recognition engines, and lots more. No, application developers have neither the time nor the resources to turn all the compute intensive core functionality in C/C++ code and then link that into Python. C# is a good middle ground.
let alone C# or Java, although we may be ready for it in 5 years or so.
The performance of Sun's Java implementation is excellent (although Java sucks for other reasons). The performance of C# implementations is quickly catching up with Java implementations.
How difficult it is to build applications for .NET depends on the tools you use for building those applications, not the runtime you execute them with. So, you can use VisualStudio or Sharpdevelop or whatever other .NET tools you use for developing Mono applications.
.NET framework" and then some.
But, in addition, Mono also offers bindings to the Gtk+/Gnome APIs, and that makes software development a lot easier for Gnome developers. There are some GUI builders you can already use with those Mono bindings, and a new GUI builder will be integrated into Monodevelop, giving you a VisualStudio.NET-like experience developing applications for Mono and Gnome.
So, in short, yes, Mono "captures the simplicity of the
For me, Obj-C combined with Cocoa (*Step), is that same sweet spot.
To each their own, but I suspect you are in a small minority. Garbage collection, safe modules, type-safe linkage, and runtime code generation are all important modern language features that C# has and Objective C lacks.
A 5mW laser does not seem to damage a person's eye even when they look directly into it for 15 minutes (see here for example).
From a distance of what must be miles away, aimed at a moving aircraft, you would need a laser that was orders of magnitude more powerful in order to damage someone's eye. Even with a powerful laser, you'd generally have to look directly into the optical axis to cause serious vision impairment. And while I haven't gotten injured by a laser, the few times I looked into one accidentally, there was little doubt about when it happened or where the light came from.
Even more implausible is the claim in the article that someone would "[continue] to suffer eye pain and deteriorating vision"; laser injuries to the eye do not cause continued deterioration and they do not cause chronic pain (here).
The whole thing strikes me as wildly implausible. As the article above shows, apparently erroneous claims of laser injuries are fairly frequent. A more likely explanation is that someone is lying, perhaps because he wants to retire early or did something else stupid and wants it covered.
The CIA factbook definition is meaningless.
The CIA factbook definitions are in agreement with common usage and other definitions.
By that account, Norway and the UK are republics,
I don't know about Norway, but the UK is not quite a republic because some legislative powers are still passed on hereditarily.
In any case, none of these descriptions are mutually exclusive: a country could be a federal republic, a constitutional monarchy, and a democracy all at the same time. In the case of the US, it happens to be both a federal republic and a democracy.