Wednesday, April 8, 2009

Seriously this time, the new language on App Engine: Java™


Today, Google has announce the availability of a new programming language for Google App Engine. Please welcome the Java runtime!


Realized that the chance to bring this kind of simplicity to Java developers was too good of an opportunity to pass up. When App Engine launched publicly, that Java language support was both the first and the most popular request filed in the Issue Tracker. I am thrilled to see that this enthusiasm extended beyond the Java language to all of the various programming languages that have been implemented on top of the Java virtual machine -- not to mention all of the popular web frameworks and libraries.
Also knew that Java developers are choosy:
  • They live by their powerful tools (Eclipse, Intellij, NetBeans, Ant, etc.).
  • They try to avoid lock-in and strive for re-use. Standards-based development (defacto or otherwise) is key.
  • They harness sophisticated libraries to perform language feats which are nearly magical (GWTGuice, CGLIB, AspectJ, etc...).
  • They even use alternate languages on the JVM, like Groovy, Scala, and JRuby.
Google wants to give developers something that they could be ecstatic about, but google knew that it would have to marry the simplicity of Google App Engine with the power and flexibility of the Java platform. Google also wanted to leverage the App Engine infrastructure -- and by extension Google's infrastructure -- as much as possible, without giving up compatibility with existing Java standards and tools.
And so that's what Google did. App Engine now supports the standards that make Java tooling great. (Google is also working on the tooling too, with Google Plugin for Eclipse). It provides the current App Engine API's and wraps them with standards where relevant, like the Java Servlet API, JDO and JPA, javax.cache, and javax.mail. It also provides a secure sandbox that's powerful enough to run your code safely on Google's servers, while being flexible enough for you to break abstractions at will.
There is a vast amount of Java code out there, much of it written without consideration of sandboxing, and we can't test it all. 
The google team has also been working on many other improvements to App Engine, which we're really excited to launch to you as well:
  • Access to firewalled data: grant policy-controlled access to your data behind the firewall.
  • Cron support: schedule tasks like report generation or DB clean-up at an interval of your choosing.
  • Database import: move GBs of data easily into your App Engine app. Matching export capabilities are coming soon, hopefully within a month.
Java is a trademark or registered trademark of Sun Microsystems, Inc. in the United States and other countries.

Tuesday, April 7, 2009

A short introduction to SIP (Session Initiation Protocol)

SIP stands for Session Initiation Protocol and is an application level signaling protocol. It is designed to create, modify and terminate sessions between one or more participants. Typical SIP sessions can be telephone calls, multimedia distribution and conference participations.

The base SIP specification is defined by IETF rfc3261.

SIP container/Sip Servlet API (SSA).
The Sip Servlet API (SSA) is an extension of the HTTP Servlet Specification. Some important aspects of the SSA :


  • For developing SIP enabled applications. Supporting UAC, UAS, Proxy and B2BUA.
  • Aligned with HTTP Servlet API for development of converged applications (originating HTTP, sending SIP request, bridging HTTP and SIP Session) spawning multiple protocols and media types.
  • Separating the developer and the deployer roles by deployment descriptors 
  • Several applications may execute on the same incoming or outgoing messages, which allows application composition. Every application processes the message independently from one another.
  • Application data can be stored in sessions and application context.


There are two versions of SSA, 1.0 and 1.1:

SSA 1.0 is defined in JSR 116, which have reached final status (released).
SSA 1.1 is defined in JSR 289, which is still on early stage (under development).


The SIP container is under development, towards SSA 1.1 (JSR 289). SSA 1.0 Test Compatibility Kit (TCK) tests towards the SIP container passes with the exception of two failures :


  • test_context. This test case, among other, checks that the information in context is Servlet related. But some extra information is stored there by the application server which causes this to fail. This is not a violation of the SSA 1.0 and can be counted as not critical.
  • test_proxy_gen2xx. This tests the ability of a proxy to generate its own 2XX responses, to act as an UAS. This functionality is not implemented in current version, but there is ongoing effort to add this.



The Sip Stack

The Sip Servlet implementation requires a Sip stack to control the signaling operations. The Sip Stack is provided by Ericsson Inc, and is currently used for Ericsson IMS products. The Sip Container and Stack were developed at Ericsson R&D sites in Stockholm, Sweden.

Some characteristics of the Sip Stack implementation :


  • Lazy Parsing
  • Low footprint
  • Efficient


Sailfin: Open Source SIP Servlets Technology for GlassFish.
The Sailfin project, adds SIP Servlets technology extension to Glassfish, providing high availability, clustering features and integrating with the existing services. Sailfin is a joint effort, working towards to achieve JSR-289 compatibility and will be the source of all SIP related development for Glassfish.

Monday, April 6, 2009

How Did Cloud Computing Start?

At a basic level, cloud computing is simply a means of delivering IT resources as services. Almost all IT resources can be delivered as a cloud service: applications, compute power, storage capacity, networking, programming tools, even communications services and collaboration tools.

Cloud computing began as large-scale Internet service providers such as Google, Amazon, and others built out their infrastructure. Architecture emerged: massively scaled, horizontally distributed system resources, abstracted as virtual IT services and managed as continuously configured, pooled resources. This architectural model was immortalized by George Gilder in his October 2006 Wired magazine article titled “The Information Factories.” The server farms Gilder wrote about were architecturally similar to grid computing, but where grids are used for loosely coupled, technical computing applications, this new cloud model was being applied to Internet services.

Both clouds and grids are built to scale horizontally very efficiently. Both are built to withstand failures of individual elements or nodes. Both are charged on a per-use basis. But while grids typically process batch jobs, with a defined start and end point, cloud services can be continuous. What’s more, clouds expand the types of resources available — file storage, databases, and Web services — and extend the applicability to Web and enterprise applications.

At the same time, the concept of utility computing became a focus of IT design and operations. As Nick Carr observed in his book The Big Switch, computing services infrastructure was beginning to parallel the development of electricity as a utility. Wouldn’t it be great if you could purchase compute resources, on demand, only paying for what you need, when you need it?
For end users, cloud computing means there are no hardware acquisition costs, no software licenses or upgrades to manage, no new employees or consultants to hire, no facilities to lease, no capital costs of any kind — and no hidden costs. Just a metered, per-use rate or a fixed subscription fee. Use only what you want, pay only for what you use.

Cloud computing actually takes the utility model to the next level. It’s a new and evolved form of utility computing in which many different types of resources (hardware, software, storage, communications, and so on) can be combined and recombined on the fly into the specific capabilities or services customers require. From CPU cycles for HPC projects to storage capacity for enterprise-grade backups to complete IDEs for software development, cloud computing can deliver virtually any IT capability, in real time. Under the circumstances it is easy to see that a broad range of organizations and individuals would like to purchase “computing” as a service, and those firms already building hyperscale distributed data centers would inevitably choose to begin offering this infrastructure as a service.

Friday, February 27, 2009

Friday, February 20, 2009

Zend Announces Beta of Zend Server, Includes Java Capability

Zend today is announcing that it has opened a public beta of their new product called Zend Server. It's completely free for anyone to go download and try it out. Zend is really hoping for some good feedback to make this product the best it can be.

The interesting thing is that even the free community edition now includes their Java capability, previously only available to high-end customers. They feel this will enable a lot more in the Java community to experiment with PHP and gain some of the benefits of dynamic scripting languages like PHP, in conjunction with running Java code they may have already built and have running in production.

Zend Server is designed to be an all-in-one installer to get setup quickly with Apache, PHP, Zend Framework, and a PHP optimizer (opcode cache, very much a necessity with dynamic languages like PHP). It also comes with an admin UI to configure PHP easily. It uses native installers for various operating systems, and is available for Windows, Mac OS X (the CE edition), and Linux (.deb, .rpm or tarball).

There are two versions being released. The full Zend Server (which after Beta will be a commercial product, price to be announced), and Zend Server CE, which is a version completely free to use however you wish. The full Zend Server comes with the following additional features:

* Page Caching (based on URLs, no code changes necessary)
* Monitoring (email alerts on slow DB queries, broken code executions, etc.)
* Support & Hot Fixes (so PHP is always up-to-date)

If you are interested in trying out Zend Server for yourself, check out some of the following links:

* Learn more about Zend Server. http://www.zend.com/en/products/server/
* Download Zend Server (either edition) to try out in beta. http://www.zend.com/en/products/server/downloads-all

Tuesday, January 27, 2009

Java + U

Java Everywhere

A rare opportunity for you to meet James Gosling @ Sun Tech Days 09.


A rare opportunity for you to meet James Gosling @ Sun Tech Days 09.

James Gosling, Vice President and Sun Fellow

The father of Java technology, James Gosling received a B.Sc. in Computer Science from the University of Calgary, Canada in 1977. He received a Ph.D. in Computer Science from Carnegie-Mellon University in 1983. The title of his thesis was "The Algebraic Manipulation of Constraints". He is currently a VP & Fellow at Sun Microsystems. He has built satellite data acquisition systems, a multiprocessor version of Unix®, several compilers, mail systems and window managers. He has also built a WYSIWYG text editor, a constraint based drawing editor and a text editor called 'Emacs' for Unix® systems. At Sun his early activity was as lead engineer of the NeWS window system. He did the original design of the Java programming language and implemented its original compiler and virtual machine. He has recently been a contributor to the Real-Time Specification for Java. He is currently a researcher at Sun labs where his primary interest is software development tools.

This year, he is starting his travel with a visit to Hyderabad, India. Register yourself for Sun Tech Days 09 and listen to what the father of Java has to say about its future. While you are at it, use the opportunity to network with your peers as well as industry leaders.

Monday, January 26, 2009

A new PHP IDE rolls into town - NetBeans

Was shocked the other day to hear that someone was using a certain IDE for PHP development.  That IDE being Netbeans.  If you haven’t ever used NetBeans it is an IDE project child of SUN and use to just be for Java development.

Looks like on the latest version (6.5) you get a whole slew of extra languages to develop in!  Check out all the features of NetBeans 6.5 here.  Now NetBeans supports (for Dynamic Languages) PHP, Ruby, JavaScript, Groovy, and Python.  It also has support for many of the well know AJAX frameworks out there like my personal favorite jQuery.  Oh it also has great HTML support.

This IDE has the makings of something great, it’s free, it supports the syntax of many languages.  However is it better than the former PHP champ Zend IDE 5.5 (standalone)?  Let’s compare the two.

Supported Languages:  Zend has compatibility for PHP and HTML, and that is really it.  It handles JavaScript ok, at least it’s useful for finding out whether or not I screwed up some brackets while using jQuery.

NetBeans on the other hand can handle a whole slew of languages from Java to C++ to many web-development languages.   Netbeans +3.

Syntax Strictness:  NetBeans could be stricter on the way it handles the PHP syntax.  One thing I always really liked about Zend was when I tried typing a function name and I didn’t write the function yet or didn’t have it included into the file that the IDE gave me a bunch of shit about it.  This helps you make sure you don’t have to wait until you debug it to figure you might have spelt it wrong or didn’t include it.

On the flip side NetBeans will throw the penalty flag if your HTML tags are out of order (ex: ) something Zend doesn’t do. Tie: Zend +1 NetBeans +1.

FTP:  One of Zend’s main drawing points for me was it’s awesome FTP support.  You could set up a bunch of FTP accounts and be working off multiple servers, transferring files, the whole works.  It was incredibly sweet.

NetBeans has FTP support, but you set it up for that project, which works just fine.  However sometimes I would use Zend as a FTP program so I didn’t have to boot up FileZilla.   Zends was just more robust, Zend +1.

Code Completion:  Where would we be today without code completion?  Honestly it can save you so much time.  Zend would code complete everything everything automatically, it was simple and effective.  It didn’t get in the way because they did it right.

NetBeans will code complete automatically on variables, but normally nothing else unless you pull a ctrl+space (at least on linux).  I was really turned off by this when I started using it, but over the course of a week I realized how often I didn’t even need code completion.  You’d be surprised how often you just don’t even think about it and type it out.  I mean I know if I’m going to be typing mysql_fetch_array, I just type mysql and hit ctrl+space.  I think this is really a horse a piece, and shouldn’t put my own preference into play.  Tie NetBeans +1, Zend +1.

Debugging:  Before I started using Zend I was using NuSphere PHP on Windows, which is very good, but pricey.  Anyways, NuSphere’s debugging was awesome, Zends - well I never could get it to work at all from Linux.  It never really bugged me too much because I’m so use to not using a debugger to debug, I know that sounds weird but I can do it.

NetBeans got the debugger working under Linux no problem, probably because when I tried to debug it told me where to go to set it up.  Love it, I can debug just like I use to be able to do with the NuSphere IDE.  NetBeans +1.

I could go on for a while but, NeBeans is the winner pretty hands down, it does much more better than Zend.  Sure there’s a couple things here or there, but I had been using Zend for at least 6 months so some of that is a little personal bias.

There’s many neat extra features in NetBeans 6.5 but I’ll leave those to you to discover, just check it out.  You don’t have to download everything, you can just download the PHP part, so if your using Ubuntu Linux (like me) don’t use apt-get (or aptitude) to get it as they may still have and older version in the repository, and it doesn’t come how you want it - just php.

Happy coding.