Wednesday

Adobe, Zend combine Flash and PHP development

Flash Builder 4.5 for PHP helps developers build apps for Web, desktop, and mobile systems, including Apple's iOS devices. But you can use Eclipse with plug-in available along with Flex sdk to compile in Eclipse itself.


Zend Technologies and Adobe Systems today announced Flash Builder 4.5 for PHP, which enables developers to use PHP and Flash development skills to build rich Internet applications for mobile, Web, and desktop platforms.

The product provides an IDE combining Adobe's Flash Builder 4.5, for ActionScript-based Flash client development, and Zend Studio 8, for server-side PHP capabilities. Accentuating the use for mobile deployments, the two vendors said applications can be delivered to Google Android, Research in Motion BlackBerry Tablet OS, and Apple iOS systems. For iOS, the IDE exports the applications into native code, rather than run in an the AIR (Adobe Integrated Runtime) software, which Apple prohibits on iOS. Android apps are also exported to a native package.

[ Adobe is backing Android tablets with Flash Player 10.2. | Keep up on key mobile developments and with InfoWorld's Mobile Edge blog and Mobilize newsletter. | Follow Paul Krill on Twitter. ]

Flash Builder 4.5 for PHP, said Zend CEO Andi Gutmans, "makes it very easy for PHP developers to also build mobile apps, and it makes very easy for mobile developers to build server-side apps. We're coming at this from both angles." Applications themselves can be built on Windows or Mac clients.

"Developers will now be able to use one tool, one framework, and one common code base and build apps that run on Android, BlackBerry, and iOS," said Dave Gruber, Adobe group product manager. Flash Builder 4.5 for PHP is due by May 11, with the premium edition, featuring network tracking and memory and performance profilers, priced at $799. A standard edition lacking these features will cost $399. Adobe and Zend are making the announcement concurrently with Adobe's rollout of its Adobe Creative Suite 5.5 product line.

This article, "Adobe, Zend combine Flash and PHP development," was originally published at InfoWorld.com. Follow the latest developments in business technology news and get a digest of the key stories each day in the InfoWorld Daily newsletter. For the latest developments in business technology news, follow InfoWorld.com on Twitter.

Paul Krill is an editor at large at InfoWorld, focusing on coverage of application development (desktop and mobile) and core Web technologies such as HTML5, Java, and Flash.

Cloud computing underwhelms PHP developers

Developers still see it as the future, but they think it is currently overhyped and vendor-driven


While technology vendors continue to pound home the message of cloud computing, PHP developers Tuesday viewed the concept as overhyped and were not in agreement on its benefits.

Developers at the ZendCon 2010 PHP conference in Santa, Clara, Calif., heard Zend Technologies CEO Andi Gutmans tout the company's cloud computing plans, which involve developing Zend PHP Cloud Platform. During his presentation, however, developers appeared mostly underwhelmed when Gutmans asked if cloud computing was game-changing or just hype. Afterward, developers gave cloud computing mixed reviews.

[ Oracle discussed its cloud plans on Monday . | Stay on top of the latest app dev news with the Developer World newsletter. ]

"I guess I have a feeling that 10, 15 years from now, maybe we'll all be using this stuff, but right now, it's entirely pushed by vendors," said Phillip Winn, back-end developer for games builder Tapulous.

"I don't see value in it," Winn said. "I don't have a strong opinion. I don't care. It doesn't affect me."

Winn recalled a former employer who thought cloud computing could be used to cut costs and reduce staff levels. "Economically, it ended up not making any sense for them," said Winn.

Cloud computing, said attendee Chuck Hudson, founder of Aduci, a consulting firm, has been the subject of some hype. "But there's definitely some opportunity there to leverage cloud computing," with developers able to rapidly develop systems and for enterprises to save on infrastructure and maintenance costs, Hudson said.

Rather than view cloud computing as a potential job-killer, Hudson sees it as a chance for IT persons to expand horizons. "I think it's more an opportunity for people in their current roles to learn the new technology and apply it. So I think it's just retooling your toolset."

Cloud computing, said Joseph Munowenyu, computer programmer at Valley City State University, in North Dakota, is "where everything is headed." At consulting firm Atos Origin, the company does not yet use cloud computing, said Atos developer Chris Campbell. "It's something we've been looking at." But he also saw "an element of hype" to the concept.

After his presentation, Gutmans acknowledged people could be "a bit tired of hearing about [cloud computing] because there's so much talk about it." But customers are nonetheless interested in leveraging its benefits, Gutmans said. Zend Cloud Platform will feature portable and native cloud services, application platform monitoring, cluster management, application deployment, configuration management, and IDE integration.

Within the same building complex as ZendCon, attendees at the Cloud Computing Conference & Expo conference Tuesday were more upbeat about cloud computing, as would be expected.

"We're definitely interested in cloud computing and right now, I'm on a research project where we're actually using the Amazon Web Services [cloud] environment to do all of our research work," said Jim Cannaliato, vice president of technology at SAIC.

Another attendee noted his company's growing use of cloud computing. "We've got some bits and pieces, so we're not fully cloud-enabled, but that's the direction we're heading," said Sadri Behbahany, senior director of IT at Wacom, which makes tablet input devices.

This article, "Cloud computing underwhelms PHP developers," was originally published at InfoWorld.com. Follow the latest developments in business technology news and get a digest of the key stories each day in the InfoWorld Daily newsletter.

Read more about cloud computing in InfoWorld's Cloud Computing Channel.

Paul Krill is an editor at large at InfoWorld, focusing on coverage of application development (desktop and mobile) and core Web technologies such as HTML5, Java, and Flash.

Google releases video chat source code

Google has released the code for WebRTC, a voice and video codec for the Web


Google has released the source code for a technology that it hopes developers will use to embed real-time video and voice chat functionality in their Web applications.

Google acquired the technology, called WebRTC (Web Real Time Communication), when it purchased VoIP (Voice over IP) software developer Global IP Solutions in 2010, for approximately $68.2 million. The company said it would open source the technology early last month.

[ Track the latest trends in open source with InfoWorld's Open Sources blog and Technology: Open Source newsletter. ]

WebRTC is a set of voice and video signal processing technologies, which can be accessed by developers through HTML tags and JavaScript APIs (application programming interfaces).

Today, Internet audio and video chat services from companies such as Skype are chiefly proprietary, accessible through plug-ins and client downloads. Last month, Microsoft agreed to purchase Skype for $8.5 billion.

Google wants third-party developers to use the voice and video engines to create chat applications that can be run directly from within a browser. Global IP Solutions has built WebRTC-based mobile clients for Android, Windows Mobile and the iPhone. Ericsson Labs built a videoconference prototype with the technology as well.

The move to open source WebRTC echoes a similar move Google made when it acquired video compression provider On2 Technologies in 2010. Google subsequently released On2's VP8 video codec as open source to provide a royalty-free alternative to the widely used H.264 standard.

Google is working with other browser developers, such as Mozilla and Opera, in hopes they will support the technology in their browsers. The company is also participating in W3C (World Wide Web Consortium) and IETF (Internet Engineering Task Force) projects for creating real-time communication Web standards. WebRTC is based on the W3C's Web Applications 1.0 API.

The source code is available under a royalty-free BSD (Berkeley Software Distribution)-style license.

Google did not immediately respond to requests for comment.

Joab Jackson covers enterprise software and general technology breaking news for The IDG News Service. Follow Joab on Twitter at @Joab_Jackson. Joab's email address is Joab_Jackson@idg.com

Building Semantic Web CRUD operations using PHP

When developing a Web application, it's standard practice to create a database structure on which server-side code is placed for the logic and UI layers. To connect to the database, the server-side code needs to do some basic creating, updating, deleting, and — most importantly — reading of records. As databases behind Web applications are typically relational databases, these CRUD operations are done using the well-known language, SQL. However, as Web development is increasingly occurring through object-oriented programming (OOP), the model is changing.

The Resource Description Framework (RDF) is a perfect way to describe objects while maintaining the meaning of that data. Simple Protocol and RDF Query Language (SPARQL — pronounced "sparkle") is the language typically used to query against that data, as it syntactically matches the structure of RDF itself. Both RDF and SPARQL are technologies within what has been dubbed the Semantic Web stack.

To fully embrace the Semantic Web idea, you can apply traditional Web-development techniques to RDF data using SPARQL. This article shows how to use a simplified Model-View-Controller (MVC) design pattern, the PHP server-side scripting language, and SPARQL for connecting to RDF — as opposed to using SQL on a relational database system.

SQL and SPARQL CRUD operations

Prerequisites

This article assumes a basic understanding of SQL, PHP, and Web application development. An understanding of Semantic Web is also beneficial. To run the create, update, and delete commands on Semantic Web-based data, you need a Semantic Web data store that supports the SPARQL/Update specification.

It's worth taking a look at the similarities and differences between CRUD operations when developed in SQL and SPARQL. Listing 1 shows the SQL code for a read operation.


Listing 1. SQL for the read operation
SELECT realname, dob, location FROM UserTable  WHERE realname = "John Smith"; 

Compare that SQL-based code with the SPARQL-based code shown in Listing 2. These are two read operations because they're the easiest to understand, implement, and explain. This is true for both SQL and SPARQL.


Listing 2. SPARQL for the read operation
     PREFIX foaf:   PREFIX rdf:  SELECT ?uri ?name ?dob ?location FROM  WHERE { ?uri rdf:type foaf:Person ; foaf:name "John Smith" ; foaf:birthday ?dob ; foaf:location ?location . } ; 

Your first thought when comparing the two listings is likely to be that the SPARQL version clearly has many more lines than the SQL version. That is true, but don't be tricked into thinking that the SQL is necessarily simpler and cleaner. SPARQL, depending on the engine that you run it against, can be completely distributed through something known as the linked data effect. In addition, it allows you to have dynamic schemas because of its interlinked object-oriented perspective, in contrast to SQL's strictly relational perspective. If you were to split relational database tables into as many islands of data, you would actually have many more lines of SQL in comparison to SPARQL — not to mention that the SQL would be full of those nasty JOIN descriptors.

The first two lines of the SPARQL are the PREFIX declarations. According to Semantic Web theory, everything — whether an object or a data graph source (also an object) — has a Uniform Resource Identifier (URI). The PREFIX lines are simply applying a temporary label to some URIs — in this case, the Friend of a Friend and RDF schemas. The benefit here is that you can use the PREFIX declarations later in the query instead of having to use the full URIs.

The next line of the SPARQL code describes the query request. It's essentially the same as the SQL statement, except for the additional request for the URI. Take note of the use of question marks (?) to indicate that the term is a variable.

The FROM statement describes where to grab data. It's the same in SQL and SPARQL, except that in SPARQL, the data source name is a URI, rather than a string denoting a physical location on your computer or network.

The WHERE statements are quite different from each other because with SPARQL, you must specify which schemas to use to fetch data. Once again, if you tried to do this using traditional methods, you would need a lot more than plain SQL: You'd need to use the PHP, the Java™ programming language, or some other server-side language to do checking between data sources. It is reasonably clear what the lines of SPARQL do, which includes ensuring that the data being retrieved is only of the type Person. SPARQL fetches a name and a location while doing some pattern matching to find the right John Smith.

Create

CRUD operations in SPARQL are typically a bit more shrouded in mystery than the read operation. However, they can be done. To begin, the create operation inserts a new record or object into the table or graph.


Listing 3. SQL for the create operation
     INSERT  INTO UserTable (realname, dob, location)  VALUES ("John Smith", "1985-01-01", "Bristol, UK");  

Now, compare the SQL-based code in Listing 3 with the SPARQL-based code in Listing 4 for the same create operation.


Listing 4. SPARQL for the create operation
     PREFIX foaf:   PREFIX rdf:  INSERT  INTO GRAPH   (?realname, ?dob, ?location)  {  rdf:Type  foaf:Person ;   foaf:name "John Smith" ;   foaf:birthday  <1985-01-01T00:00:00> ;  foaf:location "Bristol, UK"  } 

Once again, notice that the PREFIX lines work exactly as they do in the read operation with SPARQL. The INSERT INTO works similarly to SQL, but again, this is URI-based rather than string-, table-, and name-based, which allows the operation to be done across HTTP. You must also specify the schema again. Here, it's slightly easier to understand than in the read operation, as you can have practically any kind of property so long as it is compatible with the schema. This is a benefit and a beauty of the distributed dynamically extensible objects formalism RDF provides.

Delete

If you create, at some point, you are probably going to want to delete. For instance, users may want to delete their account on your site (obviously unfortunate that they want to leave, but they may have valid reasons). Listing 5 provides the SQL code for a typical delete operation.


Listing 5. SQL for the delete operation
     DELETE FROM UserTable  WHERE realname = "John Smith" 

Now, compare the SQL-based code in Listing 5 with the SPARQL-based code in Listing 6.


Listing 6. SPARQL for the delete operation
     DELETE  FROM GRAPH  { ?predicate ?object } 

The fundamental difference between the SQL and the SPARQL code is that the SQL deletes a row in a table, whereas the SPARQL deletes "all triples" relating to the "John Smith" object denoted by http://www.example.org/graph/johnsmith#me. This difference is the result the graph-based nature of the RDF model.

Update

Many Web applications allow users to update their information. The UPDATE operation is what makes that possible. Listings 7 and 8 demonstrate how to code this in SQL and SPARQL.


Listing 7. SQL for the update operation
      UPDATE UserTable SET location = "Weston-super-Mare, UK" WHERE realname = "Joanne Smith" 

Now compare the SQL-based code in Listing 7 with the SPARQL-based code in Listing 8 for the update operation.


Listing 8. SPARQL for the update operation
     PREFIX foaf:  MODIFY   DELETE {?uri foaf:location ?location}  INSERT {?uri foaf:location "Weston-super-Mare, UK"} WHERE { ?uri foaf:name "Joanne Smith" } 

UPDATE with SPARQL may seem incredibly silly, but it's completely valid when you understand that you aren't updating a relational table row — you're updating one very specific relationship within a graph. The easiest way to do this without attaining multiple locations is to delete and insert. The MODIFY keyword is used to establish the connection to the right graph.

Connecting to SQL and SPARQL database systems

To execute the above SQL and SPARQL statements, you must connect to the system somehow. Different systems, obviously, have different connection methods. One common method is to connect to a generic database using Open Database Connectivity (ODBC) drivers, which are often included in current versions of Mac OS X and Linux® systems, and are installable on other operating systems such as Windows®. ODBC essentially provides a simple generic API to connect to an SQL database of your choice. Interestingly, ODBC also works with some Semantic Web data stores such as OpenLink Virtuoso. However, most other Semantic Web data stores require some custom connection procedure or a custom-made generic connection system such as RDF2Go (at the time of writing, RDF2Go is only for Java technology) that work with a variety of systems such as Seseme and Jena. An alternative to consider if your data is going to be exposed over HTTP is a SPARQL connection method over HTTP, which makes your data "Linked Data"-ready and can be completely distributed. Because the range of connection methods for SQL and SPARQL vary, it isn't feasible to cover these in any detail here.

SQL and SPARQL through PHP

After selecting a connection method, the traditional next step is to establish common operations in PHP. For a customized system, this is usually done using SQL strings with PHP variables injected and passed to it through function parameters. The function will then connect to the database and execute this transaction. The proposal here is to do exactly the same for a SPARQL-RDF connection as would be done for an SQL-RDBMS connection.

So, take a gander at another code comparison — this time using the PHP language — starting with read, then going on to create, delete, and update, as with the code comparisons above. Use a hypothetical query execution function called query_execute, which takes in a string representation of the SQL/SPARQL statement.

Read

First up is the simple read operation. Variables can be injected into the query using string concatenation in PHP.


Listing 9. SQL for the read operation
     function readUserInfo($realname) {     $sqlstatement = "SELECT realname, dob, location FROM UserTable WHERE     realname = \"" + realname + "\";";     return query_execute($sqlstatement);     } 

Now, compare the SQL-based PHP code in Listing 9 with the SPARQL-based PHP code in Listing 10 for the humble read operation.


Listing 10. SPARQL for the read operation
      function readUserInfo($realname) {     $sqlstatement = "PREFIX foaf:      PREFIX rdf:  SELECT ?uri ?name ?dob ?location  FROM  WHERE  { ?uri rdf:type foaf:Person ;  foaf:name \"" + $realname + "\" ;  foaf:birthday ?dob ; foaf:location ?location . } ;";     return query_execute($sparqlstatement); } 

As you can see, the above function has been developed in such a way that the function name and parameters are identical, which means that you could start using the SPARQL version straightaway. Plus, if you're using an ODBC system, you won't need to worry about return types changing.

Create

As above, so below. The following PHP methods inject variables into a string to run a dynamic query. Listing 11 shows how to do that with a create operation.


Listing 11. SQL for the create operation
      function createUserInfo($realname, $dob,     $location) {     $sqlstatement = "INSERT INTO UserTable (realname, dob,     location) VALUES (\"" + $realname + "\", \"" + $dob + "\", \"" +     $location + "\");"; return query_execute($sqlstatement); } 

Now compare the SQL-based PHP code in Listing 11 with the SPARQL-based PHP code in Listing 12 for the create operation


Listing 12. SPARQL for the create operation
      function createUserInfo($uri, $realname,     $dob, $location) {     $sparqlstatement = "PREFIX foaf:      PREFIX rdf:  INSERT INTO GRAPH      (?realname, ?dob, ?location)      {      " + $uri + " rdf:Type     foaf:Person ;     foaf:name \"" + $realname + "\" ;     foaf:birthday         <" + $dob + ">> ;         foaf:location \"" + $location + "\}" return query_execute($sparqlstatement);     } 

For simplicity, the SPARQL version of this function includes a URI parameter, although it is simple enough to do some additional string concatenation to make the function declaration identical to the SQL.

Delete

Use injection through concatenation in PHP to perform the delete operation. Please note, as mentioned in the previous section, that different variables pass into the SQL and the SPARQL versions. Listing 13 shows the SQL code for the delete operation.


Listing 13. SQL for the delete operation
      function deleteUserInfo($realname) {     $sqlstatement = "DELETE FROM UserTable WHERE realname = \"" + John Smith + "\"";         return query_execute($sqlstatement);  } 

Now, compare the SQL-based PHP code in Listing 13 with the SPARQL-based PHP code in Listing 14 for the delete operation.


Listing 14. SPARQL for the delete operation
      function deleteUserInfo($uri) {     $sparqlstatement = "DELETE FROM GRAPH      {<" + $uri +     "> ?predicate ?object }";      return query_execute($sparqlstatement);  } 

Once again, for simplicity, the SPARQL version of the function takes in a URI, rather than the real name. You could use the DELETE SPARQL statement with a WHERE clause to find the data by name rather than URI, which would enable you to have an identical function header to the SQL version.

Update

Updating a record is fairly simple in both SQL and SPARQL through PHP. Just be aware of the different structures that relational databases and RDF provide. Listing 15 shows the SQL code for the update operation.


Listing 15. SQL for the update operation
      function updateUserInfo($realname, $location)     {         $sqlstatement = "UPDATE UserTable SET location = \"" + $location + "\" WHERE realname = \"" + $realname+ "\";";             return query_execute($sqlstatement);      } 

Now compare the SQL-based PHP code in Listing 15 with the SPARQL-based PHP code in Listing 16 for the update operation.


Listing 16. SPARQL for the update operation
      function updateUserInfo($realname,     $location) {      $sparqlstatement = " PREFIX foaf:  MODIFY  DELETE {?uri foaf:location ?location}  INSERT {?uri foaf:location \"" + $location + "\"} WHERE {      ?uri foaf:name \"" + $realname + "\"     }         ";         return query_execute($sparqlstatement);     } 

The function declarations in the SQL and SPARQL versions are identical. As a result, swapping from SQL to SPARQL is simple.

Although it's quite easy to move from a data source with an SQL endpoint to a data source with a SPARQL endpoint, there are two important areas you need to be aware of: levels of abstraction and the similarities and differences between SQL and SPARQL. You want to avoid that trapped feeling that comes from thinking that one language is practically identical to another. So it's best to understand a language's limitations while at the same time exploiting the language's features — in particular, the various syntax sugar and graphical representations provided by different languages.

Levels of abstraction

The example code in this article is strongly coupled to the database structure. In theory, there is only a certain level of loose coupling that SQL and RDBMS can cope with before table structure reorganization must occur. However, this is not the case with SPARQL and RDF. With SPARQL, your coupling with data can be very abstract because of the distributed but interlinked nature of the RDF. The reusability of the examples in this article could potentially be improved by increasing their abstractness. However, for our purposes, simple closely coupled functions are used to exemplify the similarities and differences between SPARQL and SQL.

As you can see from the example code, there are many similarities between SQL and SPARQL. The differences come in when understanding the Web-based, graphical, and object-oriented nature of RDF and how that filters into the SPARQL language. As a simplified rule of thumb, you can imagine the triple structure in RDF and SPARQL as basically representing, in order, the unique primary key of a row (the subject), the attribute/column name (the predicate or relationship) and the cell data that is based on the row and column (the object). In addition, SPARQL can take full advantage of HTTP communication, and, therefore, data can be (but doesn't have to be) distributed over intranets, extranets, and the wider Internet.

Why move from SQL to SPARQL?

There are many reasons why you would want to move from SQL to SPARQL. The details extend beyond the scope of this article, but you could be motivated by the following points:

  • You want a more distributed data solution.
  • You want to expose your data on the Web for people to use and link to.
  • You may find Node-Arc-Node relationships (triple) easier to understand than relational database models.
  • You may want to understand your data in a pure object-oriented fashion to work with an OOP paradigm (PHP V5 and later supports OOP).
  • You want to build generic agents that can connect to data sources on the Web.

Of course, there are also reasons why you may not want to move away from SQL, and they are probably perfectly valid reasons. SPARQL is an additional method of querying, not necessarily an immediate replacement of SQL. The same goes for relational data and Semantic Web-based data. These are not replacements. Instead, it's best to think in terms of merging newer and older techniques to produce a hybrid system that can handle and be handled by older legacy systems and the current and future systems.

curtsy: Daniel Lewis

Friday

Is This Web 3.0?

Not everyone agrees on exactly what Web 2.0 entails. As with all great buzzwords and concepts, people are already predicting what Web 3.0 will be. Will rich internet applications dominate it?

RIAs are still in their infancy, but when done right they're incredibly powerful tools. When Google launched Google Maps a few years ago, it opened people's eyes to the fact that web browsers can do much more than merely display pictures and text.

Currently, there are four mainstream mechanisms being used to develop RIAs.


AJAX/JavaScript: AJAX is a web development technique for using JavaScript with XML to create a rich internet application by dynamically and asynchronously exchanging data in the background without having to refresh the page. Google Maps and Gmail demonstrated what could be done with simple existing technologies like JavaScript and XMLHttpRequest. Google, Microsoft and Yahoo! all now promote their own AJAX toolkits to assist in building AJAX-rich media functionality.

Flash/Flex: The first horse in the RIA race was Flash. Adobe/Macromedia with its Flash/Flex infrastructure is still the leader in online video. Combining the programming capabilities of Flex makes an incredibly powerful toolset for creating internet applications. Flash has strong penetration and when used effectively can enhance your website.

Silverlight/.NET: Microsoft is barreling ahead with Silverlight, a browser plug-in to deliver interactive web applications that should be taken seriously. The company launched Silverlight earlier this year and is promoting it heavily to its large partner development network. Silverlight is delivered to a browser via XAML, which is a text-based markup language. This makes it easier for search engines to scan Silverlight vs. Flash.

OpenLaszlo: Finally, even though you don't see it much, there's an open-source platform for RIAs called OpenLaszlo. Initially developed as a proprietary system by Laszlo Systems, it was made open source in 2004. Not wanting to be left out of the RIA race, IBM--consistent with its embracing of Linux and other open source--has helped propel OpenLaszlo. The company worked with Laszlo Systems to use the open source Eclipse development platform with OpenLaszlo. Applications for OpenLaszlo can be run in Flash or in DHTML.

One current issue with Flash is that while search engines can index it, they don't index it as well as with text because Flash is a binary compiled file. That's why most websites aren't entirely created in Flash. Accessibility and keyboard navigation can be issues with these rich applications as well. If you don't have a mouse or can't use one, then you'll have problems with these technologies. Also, while the plug-ins have sizable browser penetration, they're problematic for some users.

What It Means for You
What does all of this mean for business owners in the Web 2.0 era? For the tech entrepreneur it means new opportunities. Many traditional client server applications are being pressured to move their applications to the web. Entrepreneurs can potentially displace client server apps with new innovative web applications. For other entrepreneurs, you have to evaluate your business and what specific benefits you can get from adding rich features to your website.

Ever Evolving
There will be other emerging technologies in the RIA area. The combination of these rich features will help trends like social networking continue to evolve. We'll likely see many websites with more drag-and-drop-type features in the next few years. The online/offline office also will continue to develop as predominant internet companies compete with Microsoft Office for the next generation office applications. Web applications will continue to become more robust and feature rich than ever before.

courtsy: Frank Bell

Thursday

NASA updated to MySql

The NASA Acquisition Internet Service (NAIS) (http://nais.nasa.gov/) is responsible for providing the general public with information regarding contract opportunities with the revered space organization. A network of servers interconnecting 12 of NASA's field installations, NAIS is the only means for obtaining acquisition information for contracts ranging between $25,000 and $500,000. Saving NASA and its partners roughly $4 million annually, the NAIS model has been so successful that it has been adopted by the U.S. FedBizOpps program (http://www.eps.gov/) as a means for providing access to contracting opportunities for the entire U.S. Government. Furthermore, NAIS supports several thousand users, and receives on average 300,000 hits each month.

Given NAIS' mission-critical purpose at NASA, quite a few heads turned when they announced the successful conversion of the NASA Acquisition Internet Service database backend from Oracle to MySQL. Restructuring of Oracle licensing agreements would have left NAIS facing a serious budgeting dilemma. As a result, the NAIS team began searching out a more cost-effective database solution. The obvious choice? Open Source. And within the Open Source arena, the NAIS team settled upon what they considered to be the most robust database product available: MySQL.

Asked what aspects of MySQL were most appealing, NAIS director Jim Bradford responded with three, paraphrased here:

  • Cost: Because the total cost of MySQL is limited to the cost of technical support, given that MySQL is available for free download and use in most cases.
  • Support: Due to the large developer community which can be found on the Internet. Although NASA has used direct support from the MySQL developers infrequently, he stated that "they were very helpful and responsive when needed". Furthermore, NAIS developer John Sudderth stated in an article discussing the switch that the cost for official support was about 1 percent of the technical support expenditure for Oracle (http://www.gcn.com/vol19_no33/enterprise/3275-1.html).
  • Compatibility: MySQL can easily interface with most SQL-compliant applications through ODBC.

Perhaps a fourth advantage to making the switch to MySQL could be attributed to performance. "We noticed an increase in [speed of] performance since the change and have not experienced any problems with the product.", says NAIS Computer Systems Analyst and project leader Dwight Clark stated in an article for Federal Computer Week (http://www.fcw.com/fcw/articles/2000/1204/pol-nasa-12-04-00.asp).

courtsy: W.J. Gilmore

MySQL and "LAMP" Save istockphoto.com $900K

Istockphoto.com is the biggest royalty-free stock photo community in the world, and its sister company, istockpro.com, is home to a host of illustrious professional photographers. Every week, approximately 5,000 photographers upload more than 2,500 photos (2.5 GB) to MySQL® -- the world's most popular open source database -- and approximately 1,250(1.25 GB) are accepted and posted to istock Web sites. More than 200,000 customers, including corporations, advertising and public relations agencies, and individuals access these photo databases and download 20-30 GB daily for a variety of uses. The MySQL database tracks every photo submitted and manages the permissions and billing, all for the fraction of the cost of traditional database systems.

"We operate a classic LAMP system," says Patrick Lor, executive vice president. "MySQL enables us to grow our business at a rate of 15 to 30 percent a month.

“A traditional database would have required at least a million dollars in funding for design, hardware, and all of the other costs associated with such solutions. We still wouldn't have gained the flexibility and stability that MySQL provides. With the LAMP approach, we've built a business based on sweat and ideas, and are growing it exponentially. And, it only cost about $100,000 to implement.”

According to Lor, istockphoto.com has a unique billing system that saves the company substantial costs associated with invoicing. In this model, users pay a $10 fee and then download photos against that sum. With each download, the user is issued a receipt. When the $10 runs out, users simply make another deposit. The MySQL database monitors the entire process.

Istockpro.com, the other istock site, operates somewhat differently. Professional photographers submit their photos, which are then posted to the Web site. Users then pay by credit card. MySQL tracks permissions and transactions, and provides some minimal accounting features to the photographers. Again, email receipts are issued, avoiding many of the costs typically associated with invoicing.

Prior to moving to an open source solution, istock Web sites relied on Cold Fusion. Lor states that, in addition to costs associated with this product, they were working with a version that they thought needed more work before it could help achieve their goals.

“We realized that MySQL and other open source products opened more options for us, ” says Lor. “The talent pool was more varied and the costs were certainly lower. More importantly, open source provides stability that is critical to our operations. Traffic is king in this business, and if we can't reliably support our photographers and our customers, we're out of business.”

Lor says that his company also jumped on what it saw as a trend toward using open source solutions for the enterprise, with unexpected results. The increasing legitimacy of open source solutions enables istock to approach much larger partners, such as Adobe Systems, Inc., than would otherwise be possible.

“After all, we're using the same database that Google and Yahoo! rely on,” Lor says. “That means that our choice of database is an asset, and not a liability when we go after partners and new business. It helps us grow.”

MySQL helps istock grow in other ways, as well. According to Lor, the 250,000-strong customer database records comprise active users who frequently ask for new features. MySQL helps accommodate these requests, enabling Lor and his team to make changes “on the fly,” in most cases within an hour or two.

Additionally, the istockphoto site is particularly active, with photographers - and their photographs - changing on a daily basis. MySQL tracks and manages these updates seamlessly.

When you're growing as rapidly as istock, scalability becomes mission-critical. Over the last year, the istockphoto configuration has grown from three to 10 Intel processors running Apache and Unix. This database comprises 250 GB of data, with 115 tables and 7.7 million records.

The istockpro database comprises 500 GB and runs on six Intel processors. It supports 41 tables and 2.7 million records.

“MySQL is such an integral part of our business, that it literally allows us to exist,” says Lor. “The fact that we can grow as quickly as we do is also attributable in large part to MySQL and the open source community.”

courtsy: mysql

Beyond Spot-Checking: Why LLM Applications Require Specialized Evaluation

  images generated by meta ai Building applications with Large Language Models (LLMs) feels deceptively fast at first. A single engineer can...