I have ported iplace.akshell.com (server side JS) into PHP (but hosted in Google Appengine using Quercus). I am using Objectify to contact with Google Datastore. The port is easy, akshell code and appengine code is very similar, even with the use of Imgshow API. I am using PHP-styled of Imgshow API calling, but using Imgshow Java implementation. Quercus make PHP and Java worked excellent together. PHP is able to directly call the Java classes and methods, but at the same time it remains the common functions supported by original PHP.
Akshell is very exciting, Quercus does too.
Next step I want to try is researching the automatic registered Second Life Agent with server side script outside. The Agent should be able to register automatically to the server when they online in Second Life. And then the user from the website is able to control the Second Life in-world object to perform some operations for them. For iPlace, the agent may grab the surrounding information such as who (Second Life User) had just passed by the agent.
At the same time, I am developing an iPhone Apps for iPlace Tool but just for experimental purposes. It is a simple apps to display list of checked-in places. It fetched XML from akshell server. I am using ActionScript 3 to do this mobile apps, and had deployed in iPhone. But by right it should be able to run in any other mobile phone such as Android and Blackberry. See what we can do between the integration of these three platforms (Second Life, Akshell / Appengine (Cloud), Mobile).
Last updated June 13, 2011 12:18am.
I first learnt Appengine new Channel API around these days. This is a great API that can be used to create Comet (reverse ajax) Application, or non technically, real time web application. The use cases may be real time stock feed, multi-player web game, and more. It makes Comet application development easier with easy-to-understand API and setup.
I have created an Appengine Channel API Code Demo open source repository on Google Code, and have created a first demo, a very and super simple hero game prototype, with the use of HTML5 Canvas implementation. The user is able to control and move the hero and maybe shooting. The most important thing to showcase is the ability to see another hero (remote user) in your browser screen. Both of you can control it and see their move. For now, you may use two browser windows to see the differents.
I would or may update this code repository later, during the process of my research dugging into Channel API.
I should think more use case that can be realized by using this great Channel API later.
Sometimes when we deploy our appengine application, it stucked in the middle or happens any accidents, we tried to redeploy but failed because it showed there is another same transactions had been running. Therefore, there is a need to rollback the deployment.
How we do in windows?
Now, locate your appengine sdk installation folder, open window command prompt (cmd), and then cd to [appengine installation folder]\bin\
Before that, locate your web application’s build directories, such as: “C:\Users\fyhao\Documents\NetBeansProjects\fyhao1_2\build\web”
appcfg.cmd rollback “C:\Users\fyhao\Documents\NetBeansProjects\fyhao1_2\build\web”
It will rollback now.
My web application worked fine locally but failed when I tried to deploy to Google Appengine. The problem faced is JSP Compilation Problem, it stated that it couldn’t found com/sun/…./javac classes.
The solution is:
1. First, locate your Google Appengine SDK installation folders:
such as, [ C:\Users\fyhao\Desktop\eclipse-jee-ganymede-SR2-win32\appengine-java-sdk-1.4.0\appengine-java-sdk-1.4.0 ]
2. Locate [installation folder[\bin\appcfg.cmd file, you will see:
@java -cp "%~dp0\..\lib\appengine-tools-api.jar" com.google.appengine.tools.admin.AppCfg %*
@"C:\Program Files\Java\jdk1.6.0\bin\java" -cp "%~dp0\..\lib\appengine-tools-api.jar" com.google.appengine.tools.admin.AppCfg %*
as you see, change java into JDK path.
3. And then, locate [JDK path]\lib\tools.jar, copy this file into [appengine installation folder]\lib\shared
And then, now, you can try again if it worked successfully.