And then? Will they purchase original software or will shift to Free software? They would buy their pirated software from another vendor (which presumably sells clean, non-virus-infected pirated software CDs).
I can't stand to use anything but Winamp! Well, that's not true, but I won't go anywhere near the limited functionality that is iTunes. No ogg vorbis support out of the box, etc.
Running windows as administrator? Or have they fixed that bug already? I now use foobar2000 as a normal user. It's nice, but I miss AVS...
Adding to that is the fact that PHP has never had a sane database interface, even though it's freakin' designed to interface with databases! Code like: mysql_query("SELECT * FROM foo WHERE bar='". sqlClean($bar). "'") is just plain hard to read and is just plain prone to error. Give me something like query("SELECT * FROM foo WHERE bar=?", $bar) any day. The compiler should do the heavy lifting for me -- as a programmer I should worry about solving problems. Navigating through spaghetti like "'".clean($var)."'" is not something I ever want to do.
Thanks for saying that. It is one of the things that I hate the most about PHP (manually quoting data for the database). This is from http://dev.mysql.com/tech-resources/articles/4.1/p repared-statements.html. stating how you have to use a different (and only included with PHP5) interface to use prepared statements and bind parameters.
Another API that has prepared statement support is PHP. PHP 5 has a new MySQL interface called "mysqli". You can read more about the mysqli extension in the mysqli section of the PHP Manual. The API provided by the mysqli extension is also nearly a one-for-one match with the C API, so the documentation for the C API may also be useful in learning about the PHP API.
Those of you that are Perl or Java users have had prepared statements for quite a long time. However, those were client-side prepared statements. The client-side prepared statements provide the same security benefit, but none of the performance increases. Don't worry though, MySQL Connector/J has support for server-side prepared statements in the new 3.1 release. Perl's DBD::mysql driver will have support in the next release of the 2.9 tree. The best part is that your code is already written to use them, so all you have to do to take advantage of the new feature is to upgrade the driver behind the scenes.
It's not like they (PHP devs) had nothing to learn from, I believe ODBC had query parameters before PHP3 was released. Maybe it's because the PHP team insists on making the database libraries as close as possible to the C libraries they are based on, but bind parameters (even emulated, client-side ones) are easier to use and less error-prone than escaping the values one-by-one.
I think GCC can refine its guessing of branch probabilities using runtime profile data (see -fprofile-arcs and -fbranch-probabilities, also this page about improving GCC's optimizer). I don't know how close this is to your ideals though... Better ask a GCC developer.
Those are additions to the standard (extra features for those who need them). Dollar quoting is useful because PostgreSQL treats stored procedure code as strings. Without dollar quoting, you would have to play delimiter games or escape every single quote inside the stored procedure to create stored procedures. And about the C comments, doesn't MySQL have those too?
About case-sensitivity in table names... I thought that was only about the case folding? (PostgreSQL stores unquoted table names in lowercase, the SQL standard specifies uppercase), see 4.1.1
Quoting an identifier also makes it case-sensitive, whereas unquoted names are always folded to lower case. For example, the identifiers FOO, foo, and "foo" are considered the same by PostgreSQL, but "Foo" and "FOO" are different from these three and each other. (The folding of unquoted names to lower case in PostgreSQL is incompatible with the SQL standard, which says that unquoted names should be folded to upper case. Thus, foo should be equivalent to "FOO" not "foo" according to the standard. If you want to write portable applications you are advised to always quote a particular name or never quote it.)
InnoDB tables support checking of foreign key constraints. See Section 14.2, "The InnoDB Storage Engine". Note that the FOREIGN KEY syntax in InnoDB is more restrictive than the syntax presented for the CREATE TABLE statement at the beginning of this section: The columns of the referenced table must always be explicitly named. InnoDB supports both ON DELETE and ON UPDATE actions on foreign keys. For the precise syntax, see Section 14.2.6.4, "FOREIGN KEY Constraints".
For other storage engines, MySQL Server parses and ignores the FOREIGN KEY and REFERENCES syntax in CREATE TABLE statements. The CHECK clause is parsed but ignored by all storage engines. See Section 1.9.5.5, "Foreign Keys".
Oh look, ignoring constraints without a warning! You said:
Well, if you can argue that, then "missing foreign key constraints is a feature, not a bug!"
The bad things about MySQL (to me at least) aren't about the nonportable extra features (they can be convenient, but makes it harder to switch databases), but about the features that it lacks (like, you know, proper support for constraints...)
They probably need to license the ribbon. Since that page says:
Can any applications use the license?
The
license is available for applications on any platform, except for
applications that compete directly with the five Office applications
that currently have the new UI (Microsoft Word, Excel, PowerPoint,
Outlook, and Access).We wanted to make the IP available broadly
to partners because it has benefits to Microsoft and the Office
Ecosystem.At the same time, we wanted to preserve the uniqueness
of the Office UI for the core Office productivity applications.
Let's face it, PHP hasn't had a standard database API for quite a long time (I guess there's PDO now). The most common database that PHP is used with is MySQL, which did not have bind parameters for quite a long time, so PHP programmers resort to mysql_real_escape_string or before that mysql_escape_string and then concatenating the query and the parameters while better databases have supported bind parameters since PHP 3.
And even if the database API does not natively have separate parsing and binding stages, at least it would make sense to emulate them, because if the database API later gains the ability to bind parameters / send parameters separately from the statement, the users don't have to change their code.
If mysql_query was used like this:
mysql_query($db, "select * from products where (color = ?) and (price < ?)", $color, $maxprice);
Then no-one would complain about escaping statements being "hard". Instead we have things like gpc_magic_quotes instead...
Prefixing every variable with a $ doesn't seem to serve any real purpose. Ok, so I can have a variable called $variable and a function called "function". I could do that anyway. It means you don't have to define variables to use them -- same with Ruby, except Ruby doesn't use prefixes. Perl uses prefixes, but it also uses them for interpolation in strings -- I don't think PHP can do that. Ruby manages that interpolation without prefixing variables except when they're in a string.
Use Firefox's DOM inspector, change the values in the form fields, change the user agent, and submit... still doesn't solve the "show your code" bit though:)
(In fact, the next version of Javascript borrows a lot from Python; generators are basically from Python, array comprehensions are from Haskell IIRC but the syntax is the Python one, and the most main-stream language with de-structuring assignment is Python.)
Aren't you forgetting another language? Another one that starts with "P"? From the "New in JavaScript 1.7" page:
This capability is similar to features present in languages such as Perl and Python.
VB.Net is the exact opposite, one might as well code in COBOL.Net.
This NetCOBOL for.NET seems interesting... It integrates with VS2005, the GUI designer, and the ASP.NET designer, but with that kind of syntax, who would want to use it (except companies porting older COBOL code)? I'm not really sure it's fair to compare VB.NET to something like this:
77 String-1 USAGE OBJECT REFERENCE SYS-STRING . . . INVOKE SYS-STRING "Equals" USING BY VALUE a BY VALUE b RETURNING returnValue
Well, here's what the Debian people say (in a section titled "Quality of implementation") -- I've marked the important part:) :
People often say how they came to Debian because of apt-get, or that apt is the killer app for Debian. But apt-get is not what makes the experience so great: apt-get is a feature readily reproduced (and, in my opinion, never equalled), by other distributions -- call it urpmi, apt4rpm, yum, or what have you. The differentiating factor is Debian policy, and the stringent package format QA process (look at things like apt-listchanges, apt-list-bugs, dpkg-builddeps, pbuilder, pbuilder-uml -- none of which could be implemented so readily lacking a policy (imagine listchangelog without a robust changelog format)). It is really really easy to install software on a Debian box.
This resembles cargo cult (http://en.wikipedia.org/wiki/Cargo_cult) religions: that is, apt-get is the visible aspect of Debian's policy system, the same way that cargo-cult practices saw runways and other characteristics as the source of western goods ("cargo"), and built their own replicas, complete with fake wooden headphones for control towers. In the same way, other distributions have created the shallow visible aspect of Debian's packaging infrastructure, without addressing the deep issues of policy. Worse: the conflicts of technical requirements and marketing / economic imperatives often work at cross purposes. Less perversely for most GNU/Linux distros than for proprietary software, but still clearly present.
Red Hat, Mandrake, and other distributions in the class have really massive base installations. Why? I do believe it's because it's a PITA to install software. Even with RPM, it's a kludgey procedure, impossible to codify. With Debian, it was a breeze.
So the killer app is really Debian policy, the security team, the formal bug priority mechanisms, and the policy about bugs (namely: any binary without a man page is an automatic bug report. Any interaction with the user not using debconf is a bug). As the Wiki page Why Debian Rocks (http://twiki.iwethey.org/Main/WhyDebianRocks) puts it:
This is the crux, the narthex, the throbbing heart of Debian and what makes it so utterly superior to all other operating systems. Policy is defined. It is clear. It is enforced through the tools you use every day. When you issue apt-get install foo, you're not just installing software. You're enforcing policy - and that policy's objective is to give you the best possible system.
What Policy defines are the bounds of Debian, not your own actions on the system. Policy states what parts of the system the package management system can change, and what it can't, how to handle configuration files, etc. By limiting the scope of the distribution in this way, it's possible for the system administrator to make modifications outside the area without fear that Debian packages will affect these changes. In essence, Policy introduces a new class of bugs, policy bugs. Policy bugs are release-critical -- a package which violates policy will not be included in the official stable Debian release.
Let me reiterate, because that is the whole secret: A package which violates policy will not be included in the official stable Debian release.
Fill whole partition with a single file, mount the file as a volume, ignore the physical partition, use the file-hosted volume. The difference between this and encrypting a partition or a harddisk by the user from admin's point of view is moot.
I thought that "encrypting a partition" means you encrypt the entire physical partition so that other users cannot use it (or worse, encrypting partitions that contain system programs). If the administrator is afraid that a user will use the entire partition for one filebased volume then he should configure quotas.
For your database, MySQL is the only stable option for SQL on Rails at the moment--the development team decided to tackle the gold standard first. However, work is underway to add support for a few more databases: PostgreSQL, SQLite, Oracle(TM), SQL Server(TM), DB2(TM), Firebird(TM), Fox Pro(TM), FileMaker Pro(TM), Lotus Approach(TM), XML(TM), Ingres, Sybase(TM), Informix(TM), GNU(TM) gdbm, Oracle Berkeley DB(TM), and Microsoft Excel(TM). Just about any operating system will do, but we recommend one with Minesweeper.
That was using Classic ASP/VBScript with ADO. The statement is definitely not "prepared" but there's no need to escape strings. When I tried PHP I can't believe that PHP (or rather the mysql database connection layer) has no concept of bind parameters.
From what I recall, it saves a memory dump to a file. That would include app state, undo, and other information that didn't need to survive, and it shoves it into semi-permanent storage.
Actually it's a "compound document" and is structured somewhat like a filesystem containing other subdocuments (moreinfo)
Have you tried Ubuntu? You absolutely do _not_ need any hacks to use it as a normal desktop system. In fact, I would venture to say that it's easier to install and configure than Windows XP is.
Of course, nowadays a "normal desktop system" is expected to play MP3 files "out of the box":)
As much as I like Pascal, there are several flaws in your argument.
Array size validation doesn't exactly come for free, it must be checked at runtime for every access in which the compiler cannot prove that the index is within the array bounds. For dynamically sized arrays passed as procedure parameters they may even have to be checked for every access. New() and Dispose() is not garbage collection – they're no different from C's malloc() and free() i.e. you still leak memory if you call New() and don't call Dispose().
You say that VBScript is bad, but please note that the ASP object model is pretty nice, and that you can access it through any ActiveScript language. Windows comes by default with VBScript and JScript, but you can also use PerlScript,
ActiveRuby, and Python (with the
Win32 extensions). That also means you get to use the libraries of those languages, which are a lot better than what VBScript itself has to offer.
And then? Will they purchase original software or will shift to Free software? They would buy their pirated software from another vendor (which presumably sells clean, non-virus-infected pirated software CDs).
At least that uses getElementById(), not document.all.thething...
Thanks for saying that. It is one of the things that I hate the most about PHP (manually quoting data for the database). This is from http://dev.mysql.com/tech-resources/articles/4.1/p repared-statements.html. stating how you have to use a different (and only included with PHP5) interface to use prepared statements and bind parameters.
It's not like they (PHP devs) had nothing to learn from, I believe ODBC had query parameters before PHP3 was released. Maybe it's because the PHP team insists on making the database libraries as close as possible to the C libraries they are based on, but bind parameters (even emulated, client-side ones) are easier to use and less error-prone than escaping the values one-by-one.
DBD::CSV does SQL on CSV files... It's relational, right? :-)
I think GCC can refine its guessing of branch probabilities using runtime profile data (see -fprofile-arcs and -fbranch-probabilities, also this page about improving GCC's optimizer). I don't know how close this is to your ideals though... Better ask a GCC developer.
Those are additions to the standard (extra features for those who need them). Dollar quoting is useful because PostgreSQL treats stored procedure code as strings. Without dollar quoting, you would have to play delimiter games or escape every single quote inside the stored procedure to create stored procedures. And about the C comments, doesn't MySQL have those too?
About case-sensitivity in table names... I thought that was only about the case folding? (PostgreSQL stores unquoted table names in lowercase, the SQL standard specifies uppercase), see 4.1.1
From the MySQL 5.0 manual:
Oh look, ignoring constraints without a warning! You said:
The bad things about MySQL (to me at least) aren't about the nonportable extra features (they can be convenient, but makes it harder to switch databases), but about the features that it lacks (like, you know, proper support for constraints...)
They probably need to license the ribbon. Since that page says:
...maybe they won't do it any time soon...
Google Code Jam allows Java, C++, C#, VB.NET and .
That already exists (although I don't know how well it works).
I hate PHP too, but it can interpolate variables in strings...
Well, probably because I'm just not that good at JavaScript... and the DOM inspector is so easy to use.
Use Firefox's DOM inspector, change the values in the form fields, change the user agent, and submit... still doesn't solve the "show your code" bit though :)
Aren't you forgetting another language? Another one that starts with "P"? From the "New in JavaScript 1.7" page:
Or is Perl "less mainstream" than Python nowadays?
This NetCOBOL for .NET seems interesting... It integrates with VS2005, the GUI designer, and the ASP.NET designer, but with that kind of syntax, who would want to use it (except companies porting older COBOL code)? I'm not really sure it's fair to compare VB.NET to something like this:
Well, here's what the Debian people say (in a section titled "Quality of implementation") -- I've marked the important part :) :
I thought that "encrypting a partition" means you encrypt the entire physical partition so that other users cannot use it (or worse, encrypting partitions that contain system programs). If the administrator is afraid that a user will use the entire partition for one filebased volume then he should configure quotas.
Because it's funny?
Or at least something like this?
That was using Classic ASP/VBScript with ADO. The statement is definitely not "prepared" but there's no need to escape strings. When I tried PHP I can't believe that PHP (or rather the mysql database connection layer) has no concept of bind parameters.
And don't forget COBOL for .NET! Among its features:
Here are some screenshots.
Actually it's a "compound document" and is structured somewhat like a filesystem containing other subdocuments (more info)
Of course, nowadays a "normal desktop system" is expected to play MP3 files "out of the box" :)
As much as I like Pascal, there are several flaws in your argument.
Array size validation doesn't exactly come for free, it must be checked at runtime for every access in which the compiler cannot prove that the index is within the array bounds. For dynamically sized arrays passed as procedure parameters they may even have to be checked for every access. New() and Dispose() is not garbage collection – they're no different from C's malloc() and free() i.e. you still leak memory if you call New() and don't call Dispose().
You say that VBScript is bad, but please note that the ASP object model is pretty nice, and that you can access it through any ActiveScript language. Windows comes by default with VBScript and JScript, but you can also use PerlScript, ActiveRuby, and Python (with the Win32 extensions). That also means you get to use the libraries of those languages, which are a lot better than what VBScript itself has to offer.