Category Archives: AJAX

Cappuccino and Objective-J

Today, I came up with 280 Slides, a web presentation design editor. I was shocked by its pretty looking Mac-like UI at the first glance.

From an interview to 280 Sliders developer, I learned to know that Cappuccino is the framework behind the product. And Objective-J language is introduced so they can port Apple’s Cocoa framework. Cocoa is a framework based on Apple’s own language Objective-C. In fact, 280 Slides’ UI looks like Apple’s Keynotes. And the 280 Sliders’ developers are former Apple developers. Cappuccino parses Objective-J files, which are with file extension .j, convert to JavaScript codes and executes them on the fly.

So, another cross compiler, Objective-C to JavaScript. It is quite worthy for further digging.

And digging into sources, I find that it uses lots of images to make up the whole UI, includes button, scrollbar, window borders and other components. And besides *.j and *.js files, there are some *.plist and *.sj files. *.sj use the same syntax as normal JavaScript. But from the sources, I guess they are compiled and mixed from *.j. Besides the core Objective-J.js, AppKit.sj, Foundation.sj and SlideKit.sj are three important files.

And it is great to hear the news that Cappuccino and Objective-J will be open-sourced at http://objective-j.org/ in the near future.

Posted in AJAX, JavaScript | Tagged , | 119 Comments

Eclipse RAP 1.0 Comes

Eclipse RAP team has just released its 1.0.

The RAP project enables developers to build rich, Ajax-enabled Web applications by using the Eclipse development model, plug-ins with the well known Eclipse workbench extenstion points, JFace, and a widget toolkit with SWT API (using qooxdoo for the client-side presentation). The project has graduated from incubation and released its 1.0 release.

In fact, Eclipse RAP and Java2Script have a lot in common. Both are based on SWT API and have goals to provide ways for developers to share the same base of code for products that deploy to the web and the desktop. Here is overview of Eclipse RAP. And you can also read Java2Script’s overview for comparisons.

And you can also check out Eclipse RAP demo to get more details. It’s interesting to see that RAP and Java2Script have 2 very similar demos: RAP’s RWT Control Demo and Java2Script’s SWT Control Examples.

More discussion may be found at ajaxian.com.

Related link: InfoWorld Eclipse offers AJAX server

Posted in AJAX, Java, Sharing, SWT | 2 Comments

Java2Script 1.0.0 Final Release

Here comes Java2Script 1.0.0 final release!

Please visit http://j2s.sourceforge.net/ for more information.

Feature List
==========

Java2Script Core
—————-
1. Object oriented JavaScript simulator is introduced
2. JavaScript ClassLoader is built inside
3. Eclipse JDT based Java to JavaScript compiler, support Java 1.4 and Java 5 features, including generic, enums, static imports, enhanced loops
4. Support incremental building for Java projects
5. Support Hotspot JavaScript swapping for debugging
6. Support most classes in java.lang.*, java.utils.* and others packages
7. Support native JavaScript through @j2s* Javadoc in Java sources
8. Support creating Java2Script projects by wizard, including Servlet project
9. Support loading *.js from Firefox Add-on.
10. Support Eclipse 3.1.*, 3.2.* and 3.3.*

Java2Script SWT
—————
1. Eclipse SWT 3.1 API is ported for JavaScript in modern browsers, Firefox, Internet Explorer, Opera, Safari
2. Window manager is built inside
3. Support UI blocking fow SWT’s Shell and Dialog
4. Support SWT deffered layout
5. Support detecting font size change in Firefox

Java2Script AJAX
—————-
1. HttpRequest/AJAX is introduced for both Java and JavaScript
2. Simple RPC API is introduced to call back Java server, which supports Cross Site Scripting
3. Support dynamic class loading for both Java and JavaScript
4. Support Java reflection (early implementation)

Java2Script JUnit
—————–
1. Support JUnit tests both Test Case and Test Suite in text mode.

Java2Script Example
——————-
1. Google Talk in JavaScript ( http://demo.java2script.org/gtalk/ )
2. SWT Control Examples ( http://demo.java2script.org/controls/ )

For more feature detailed description, please visit:
http://j2s.sourceforge.net/features.html

Posted in AJAX, Java, Java2Script News, JavaScript, RPC, Simple RPC, SWT | 341 Comments

Java2Script’s GTalk

I spent about three days writng an SWT based Google Talk client. And the client used Smack Jabber library, which has simple APIs. As writing the client, I kept the code compatible with Java2Script, which means that I can use the latest Java2Script daily release to pack it as a web servlet application and deploy it as rich internet application (RIA). Here is snapshot of Java2Script version of Google Talk:

Java2Script's GTalk

And here is the online Java2Script’s GTalk.

And because Java2Script’s SimpleRPC supports Cross Site Script, the above application can be loaded from any pages by adding the following HTML

Launch GoogleTalk

to your page.

Or you can just copy the above “javascript:…” part (without quotes) and paste it to address bar and go. You will get a Google Talk client (pure JavaScript) in your page (this page or other pages). This “javascript:…” part is considered as A Link An Application (ALAA).

By digging about Google Talk on Digg.com, I found that Google Talk Gadget on Google’s personalized homepage was really hitting the latest news.

Enjoy it.

Update:

The Java2Script’s Google Talk sources are available at SVN repository now:
http://j2s.svn.sourceforge.net/viewvc/j2s/trunk/demos/org.java2script.demo.gtalk/

And you can also download j2s-1.0.0-m5-gtalk.zip, unzip it and deploy gtalk.war to your Java servlet container.

Posted in A Link An Application, AJAX, ALAA, Java2Script News, RPC, Screenshot, Simple RPC, SWT | 82 Comments

Reload:A Link An Application

Copy following as a link and paste in your browser address bar (A new tab or a new window, or other existed tab page[Maybe a Google search result page, not this blog page]):

javascript:if(a="[email protected]://demo.java2script.org/org.eclipse.swt.examples/bin/",window["ClazzLoader"]!=null)$w$(a);else{var d=document,t="onreadystatechange",x=d.createElement("SCRIPT"),f=function(){var s=this.readyState;if(s==null||s=="loaded"||s=="complete"){$w$(a);}};x.src="http://archive.java2script.org/1.0.0-v20061220/j2slib.z.js";(typeof x[t]=="undefined")?x.onload=f:x[t]=f;d.getElementsByTagName("HEAD")[0].appendChild(x);void(0);}

According to your connection speed, it may take a few seconds before some Java2Script things come up. Enjoy it.

Replace the link’s “$wt.examples.controlexample.ControlExample @ http://demo.java2script.org/org.eclipse.swt.examples/bin/” with your Java2Script application URL. It’s class’s full name + @ + the class’s *.js bin root folder. If the URL is not very long (total javascript url string length < 500), it will be OK for modern browsers to load your application.

Posted in A Link An Application, AJAX, ALAA, JavaScript, Sharing, SWT | 173 Comments

Screenshot of Java2Script Web Notepad

I spent some time to enhance a web notepad with auto-save feature. Here is screenshot:

Java2Script Web Notepad

As a matter of security fact, it is not ready for public tests, so now I am not publishing the . Maybe later I will add more strict rules to the notepad so that no malicious modifications harm the system. Or maybe I will not take such a risk.

Actually, more desktop applications can be converted into rich internet applications. I even consider converting a terminal console into Java2Script web application is possible. But maybe I won’t do so.

Posted in AJAX, Java, RPC, Screenshot, Sharing, Simple RPC, SWT | 6 Comments

Java2Script 1.0.0 M4 Released

After some delay, Java2Script 1.0.0 M4 now released.

New and Noteworthy
==================
Java2Script Core
—————-
1. Support org.eclipse.swt.widgets.Dialog#open in compiler level
2. Extension point for external script visitor, see
http://j2s.sourceforge.net/articles/tutorial-extended-compiler.html
3. Bug-fix of M3 compiler
Java2Script SWT
—————
1. CoolBar, ToolBar, Menu, ColorDialog, FontDialog, Tree, Table, Combo,
and other widgets improvement
2. Support org.eclipse.swt.widgets.Dialog#open in asynchronous mode.
Java2Script AJAX
—————-
1. Simple RPC. See
http://j2s.sourceforge.net/blog/2006/10/12/java2script-introduces-sim…
2. Update HttpRequest according to working draft of
http://www.w3.org/TR/XMLHttpRequest/
Java2Script Developer Team
————————–
1. Welcome our new developer – Sal Ferro, who joined Java2Script in
October, 2006.
2. Google Group http://groups.google.com/group/java2script/ created.
Joined us!
********
Next Release would be 1.0.0 RC with improved performance in late
December, 2006.
Stay tuned.

Update:
As a matter of mistake, I placed 1.0.0 M3’s “j2slib” into Java2Script
1.0.0 M4 for Eclipse 3.2 (Eclipse 3.1 was not affected). I just
repacked and released 1.0.0 M4. If anyone happened to download and
install M4 with M3’s “j2slib”, please re-download and re-install M4:
http://prdownloads.sourceforge.net/j2s/j2s-1.0.0-m4-repack-eclipse-3.2.zip?download

Posted in AJAX, Java2Script News | 13 Comments

Extending Java2Script Compiler

Now, the java 2 javascript compiler of the java2script can be extended. There is a tutorial for demonstrating the extension mechanism.
This extension mechanism can be used to override default behavior of java2script compiler. So, why do we need to override the default behavior of the java2script compiler? Let’s have a simple example. Suppose an application that uses a library that can not be converted to java script, an ejb invocation:

EJBX x = EJBUtil.newInstance(EJBX.class, jndiName);

x.methodA();

Now if we use the default java2script compiler the code would be something like:

var x = foo.bar.EJBUtil.newInstance(….);

x.methodA();

But, we now that this will not work. It seems to be unsolvable before the extension mechanism is introduced. But now the java2script compiler can be extended to convert such these codes to another java script code that does work on a browser and also does not use the library.
Now if we extend the java2script compiler we can generate a stub invocation like this, that sould work without any ejb import or invocation:

ServletFacade.runEJBMethod(“foo.bar.EJBX”, “methodA”, jndiName);
//And the ServletFacade could be an stub for calling a servlet that can run EJBs

So, with this mechanism, one can convert any source code in his own way.

Posted in AJAX, Java2Script News, JavaScript | Leave a comment

Java2Script Introduces Simple RPC

Java2Script now introduces Simple RPC, which is aiming to help Java
developers balancing and debugging *local* and *remote* procedure calls for AJAX RIAs without knowledge of serialization and deserialization.

In Simple RPC, Java client have two modes: AJAX mode and local Java Thread mode (Default mode).
Here are some simple words describing the procedure of developing AJAX RIAs with Simple RPC.

1. Java developer can debug those procedure calls in local Java Thread mode with local Java SWT client.

2. After functions implemented, they can add a Java servlet wrapper (Java2Script provided), export all things as a JAR file and deploy it to Java EE container.

3. And now switch Java client to AJAX mode (set some static variables) and test whether the deployed servlet is OK or not.

4. If not correctly deployed or bugs popup, developers can switch back to local Java
Thread mode and do their debugging again.

5. In the end, use Java2Script compiler to compiler the Java SWT client into JavaScript RIA client and test it in browser.

For more details, please check out latest codes from SVN.

Posted in AJAX, How To, Java, Java2Script News, RPC, Simple RPC | 2 Comments

LZ77 JavaScript Compressor Reloaded

Updated: June 4, 2007, LZ77 JavaScript Compressor http://demo.java2script.org/lz77js/ is rebuilt using Java2Script Simple RPC technology.

In early of this year, I had a post “LZ77-JS-Compressor: Another way of compressing JavaScript“. It seemed that lots of people were seeking pure LZ77 JavaScript Compressor, and some of them clicked the above post. And the above link is on the top 2 position for key world “js compressor” in Google.

As mentioned in the above post, pure JavaScript decoder’s performance was very poor for large *.js file (>200k)! So I stopped focusing on further development of LZ77 JS compressor after the post. So no technical details were found there but pure LZ77 JS compressor’s poor performance was told there.

But as top 2 position link for key world “js compressor” in Google, I decide not to disappoint visitors with no discrete implementations any more. Here now, I give an implementation (Thanks for J2S 1.0.0 M3, so such a solution does not require much time and pains):

LZ77 JavaScript Compressor“: This is a J2S/SWT application, sending the raw JavaScript sources back to server to do LZ77 compressing (Java servlet). (Mentioned: the server s eems being unstable with low bandwidth.)

J2S SWT LZ77 JavaScript Compressor

If you uncheck “RegExp trimming before LZ77” option in the above application, you can compress any plain text (HTML/CSS/SVG/…) besides JavaScript sources.

This LZ77 implementation was considered as buggy. I used in J2S Clazz.

BTW: Developing the above J2S/SWT application (including wrapping the old LZ77 utilities into a servlet) took me about 2 hours.

For JS compressor, I recommend you to use Dean’s Packer.

PS: “LZ77 JavaScript Compressor” is now using LZ77-JS-Comopresser compressed JavaScript: http://bl.ognize.com/j2s-ajax-rss-reader/net.sf.j2s.lib_1.0.0.v320/j2slib/j2slib.lz77.z.js (30k) rather than earlier http://bl.ognize.com/j2s-ajax-rss-reader/net.sf.j2s.lib_1.0.0.v320/j2slib/j2slib.z.js (55k)

Posted in AJAX, JavaScript, Sharing | 7 Comments