<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>Tomas Brandalik&apos;s Blog</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/tbrandalik/" />
<modified>2007-02-27T18:36:03Z</modified>
<tagline></tagline>
<id>tag:weblogs.java.net,2008:/blog/tbrandalik/359</id>
<generator url="http://www.movabletype.org/" version="3.01D">Movable Type</generator>
<copyright>Copyright (c) 2007, tbrandalik</copyright>
<entry>
<title>Getting started with Mobile internationalization API. Part 2</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/tbrandalik/archive/2007/02/getting_started_1.html" />
<modified>2007-02-27T18:36:03Z</modified>
<issued>2007-02-16T11:46:04Z</issued>
<id>tag:weblogs.java.net,2007:/blog/tbrandalik/359.6559</id>
<created>2007-02-16T11:46:04Z</created>
<summary type="text/plain">I&apos;m back to finish this tutorial which started here. So let&apos;s have a look at internal structure of a resource file and explain how to work with resources in JSR238. In part1 we talked about directory structure of resource files...</summary>
<author>
<name>tbrandalik</name>

<email>Tomas.Brandalik@Sun.COM</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/tbrandalik/">
<![CDATA[I'm back to finish this tutorial which started <a href="http://weblogs.java.net/blog/tbrandalik/archive/2007/02/getting_started.html">here</a>. So let's have a look at internal structure of a resource file and explain how to work with resources in JSR238. 

In <a href="http://weblogs.java.net/blog/tbrandalik/archive/2007/02/getting_started.html">part1</a> we talked about directory structure of resource files in the application, but I haven't shown any code for accessing them. Here is it. Main entry point into resource files is <i>ResourceManager</i> class. There's not much to screw up ;-)


<pre>	// look for phrases resource file under default locale
	rm = ResourceManager.getManager(“phrases“);

	// look for phrases resource file under en-US locale
	rmUS = ResourceManager.getManager(“phrases“, “en-US“);

	// get device resources
	rmDev = ResourceManager.getManager(““);
</pre>

Before we dive into resource file structure I have to mention also metafiles accompanying resource files. Metafiles are fairly simple. They contain only plain text, enumerating supported locales for given resource file. Next example is a metafile of <i>phrases</i> resource file from i18nDemo bundled with WTK2.5.<br>

<pre>"" en cs-CZ sk-SK he-IL zh-CN ja-JP de-DE it-IT es-ES</pre>
Main purpose of the metafile is to speed up look up of supported locales for a resource file.
If you call<br>
<pre>String[] supLocales = ResourceManager.getSupportedLocales("phrases");</pre>
the metafile is read first without need to scan thru a <i>/global</i> subdirectories.

However metafile is easily editable plain text file, it's not recommended to update it directly. Better use <a href="http://weblogs.java.net/blog/tbrandalik/archive/2007/02/getting_started.html#i18nmanager">i18n Resource Manager</a> which provides necessary integrity of metafiles and resource files. If metafile is a plain text file, resource file on the other hand is binary file designed to be efficient in storing and accessing resources. In general there are 2 types of resources in resource file:
<ul>
	<li>text strings (UTF-8 encoded)
	<li>binary data (images, sounds etc. stored as a raw data)
</ul>

Handling text string resources is very simple. Decoding of text strings from UTF-8 is provided by the JSR238 implementation of ResourceManager. Each string and each binary resource is identified by a number (integer in range 0 .. 0x7fffffff)<br>

<pre>	ResourceManager rm = ResourceManager.getManager(“phrases“);
	// get string id = 1234
	String s = rm.getString(1234);
</pre>

On the other hand binary resources are application dependent which means that developer is responsible for further processing of raw data retrieved from resource file. He has to turn raw data of for example png encoded file into an image.<br>

<pre>	ResourceManager rm = ResourceManager.getManager(“common“);
	// get image as binary data id = 5678
	byte[] idata = rm.getData(5678);
	Image img = Image.createImage(idata, 0, idata.length);
</pre>

Evenif it's not necessary for application developer to know the format of the resource file, it's interesting what's behind the scene and of course you can write your own tool for resource file creation. Following picture shows that resource file contains header informations and resource data items. Header informations are necessary for fast access, resource file doesn't have to be read sequentially to find particular resource but the index determines a position in the file. Here is what a structure of resource file looks like:
<pre>
    4 bytes for signature
    4 bytes for header length
    64-bit header entry
    64-bit header entry
    64-bit header entry
    ...
    64-bit header entry
    resource
    resource
    ...
    resource
</pre>

Each header entry is composed of a resource ID, Type and Offset:
<pre>  bits 63...32   resource ID
  bits 31...0    type and offset
</pre>
where values for the type are:
<ul>
<li>0x01 = string
<li>0x10 = binary data
<li>0x00 = end of resources
</ul>

<em>That's all for today. Next time formatting and sorting ...</em>]]>

</content>
</entry>
<entry>
<title>Skinning WTK on Linux</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/tbrandalik/archive/2007/02/skinning_wtk_on.html" />
<modified>2007-02-27T18:29:59Z</modified>
<issued>2007-02-15T11:00:08Z</issued>
<id>tag:weblogs.java.net,2007:/blog/tbrandalik/359.6549</id>
<created>2007-02-15T11:00:08Z</created>
<summary type="text/plain"><![CDATA[I'm working on Linux release for some time and I feel I need to have a fun little bit. I've googled for a look &amp; feels which would work on linux and found a page http://www.javootoo.com/ with custom L&amp;Fs and...]]></summary>
<author>
<name>tbrandalik</name>

<email>Tomas.Brandalik@Sun.COM</email>
</author>
<dc:subject>Community: Mobile &amp; Embedded</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/tbrandalik/">
<![CDATA[<p>I'm working on Linux release for some time and I feel I need to have a fun little bit. I've googled for a look &amp; feels which would work on linux and found a page <a href="http://www.javootoo.com/">http://www.javootoo.com/</a> with custom L&amp;Fs and tried to plug some of them into wtk toolbar. Some are free, some commercial, some work only on windows ...</p>

<p>Start with jdk linux native look and feel. jdk 6 native L&amp;F shows improvements comparing to jdk 5. But notice separators in the JToolBar, they aren't vertical.</p>

<p><strong>jdk 5</strong><br />
<img alt="jdk5.png" src="http://weblogs.java.net/blog/tbrandalik/archive/jdk5.png" width="812" height="229" /></p>

<p><br />
<strong>jdk 6</strong><br />
<img alt="jdk6-1.png" src="http://weblogs.java.net/blog/tbrandalik/archive/jdk6-1.png" width="810" height="205" /></p>

<p><strong>Alternative look and feels</strong><br />
To plug-in L&amp;F just edit ktoolbar script. Put L&amp;F jar on classpath and set property <em>-Dkvem.lookandfeel</em>. An example for synthetica L&amp;F:<br />
<pre>-Dkvem.lookandfeel="de.javasoft.plaf.synthetica.SyntheticaStandardLookAndFeel"</pre><br />
<strong>Napkin</strong><br />
<img alt="napkinlaf.png" src="http://weblogs.java.net/blog/tbrandalik/archive/napkinlaf.png" width="790" height="312" /></p>

<p></p>

<p><strong>Synthetica Green and Dream</strong><br />
<img alt="greendream-1.png" src="http://weblogs.java.net/blog/tbrandalik/archive/greendream-1.png" width="685" height="177" /></p>

<p></p>

<p><strong>Tonic slim</strong><br />
<img alt="toniclf_slim.png" src="http://weblogs.java.net/blog/tbrandalik/archive/toniclf_slim.png" width="668" height="206" /></p>

<p></p>

<p><strong>Tiny YQForest</strong><br />
<img alt="tinylaf-yqforest-1.png" src="http://weblogs.java.net/blog/tbrandalik/archive/tinylaf-yqforest-1.png" width="608" height="201" /></p>

<p><strong>L2FProd skins</strong><br />
You can try <a href="http://www.l2fprod.com/">L2FProd</a> skins if you edit ktoolbar starting script to look like this:<br />
<pre>java -Dkvem.home="${KVEM_HOME} \<br />
    -Djava.library.path="${KVEM_HOME}/bin \<br />
-cp $KVEM_LIB}/lf/skinlf.jar:${KVEM_LIB}/kenv.zip:${KVEM_LIB}/ktools.zip:${KVEM_BIN}/JadTool.jar:${KVEM_BIN}/MEKeyTool.jar:${KVEM_LIB}/customjmf.jar:${KVEM_API}/j2me-ws.jar:${KVEM_BIN}/schema2beansdev.jar:${KVEM_BIN}/j2me_sg_ri.jar:${KVEM_BIN}/jaxrpc-impl.jar:${KVEM_BIN}/jaxrpc-api.jar:${KVEM_BIN}/jaxrpc-spi.jar:${KVEM_BIN}/activation.jar:${KVEM_BIN}/mail.jar:${KVEM_BIN}/saaj-api.jar:${KVEM_BIN}/saaj-impl.jar:${KVEM_BIN}/xsdlib.jar \<br />
Skinit -pack ${KVEM_LIB}/lf/themepack.zip com.sun.kvem.toolbar.Main "$@"</pre><br />
Evenif this is a linux script I believe you can edit also win32 ktoolbar.bat script acordingly. You just need skinlf.jar on the classpath and download apropriate themepack.zip. Here are some of them:</p>

<p><br />
<strong>L2FProd cell shaded</strong><br />
<img alt="l2fp-cellshaded.png" src="http://weblogs.java.net/blog/tbrandalik/archive/l2fp-cellshaded.png" width="616" height="273" /></p>

<p><strong>L2FProd Graphite</strong><br />
<img alt="l2fp-graphite.png" src="http://weblogs.java.net/blog/tbrandalik/archive/l2fp-graphite.png" width="627" height="202" /></p>

<p><strong>L2FProd OpusOSDeep</strong><br />
<img alt="l2fp-opusosdeep.png" src="http://weblogs.java.net/blog/tbrandalik/archive/l2fp-opusosdeep.png" width="617" height="273" /></p>

<p><strong>L2FProd AAToxic</strong><br />
<img alt="l2fp-toxic.png" src="http://weblogs.java.net/blog/tbrandalik/archive/l2fp-toxic.png" width="616" height="271" /></p>]]>

</content>
</entry>
<entry>
<title>Getting started with Mobile internationalization API. Part 1</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/tbrandalik/archive/2007/02/getting_started.html" />
<modified>2007-02-16T11:40:51Z</modified>
<issued>2007-02-09T10:29:01Z</issued>
<id>tag:weblogs.java.net,2007:/blog/tbrandalik/359.6500</id>
<created>2007-02-09T10:29:01Z</created>
<summary type="text/plain">Mobile Internationalization API (JSR 238) or shortly called MIA comes as a part of wireless toolkit version 2.5. This entry is a quick start for those who wants to get familiar with this new API. You may object that user...</summary>
<author>
<name>tbrandalik</name>

<email>Tomas.Brandalik@Sun.COM</email>
</author>
<dc:subject>Community: Mobile &amp; Embedded</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/tbrandalik/">
<![CDATA[<p>Mobile Internationalization API (<a href="http://www.jcp.org/en/jsr/detail?id=238" target="_parent">JSR 238</a>) or shortly called MIA comes as a part of <a href="http://java.sun.com/products/sjwtoolkit/download-2_5.html" target="_parent">wireless toolkit version 2.5</a>. This entry is a quick start for those who wants to get familiar with this new API. You may object that user won't find devices supporting JSR238 on the current market. Yes, that's true, but the time when <a href="http://jcp.org/en/jsr/detail?id=248" target="_parent">MSA</a> replaces current JTWI standard is coming and it's always good to be ready ;-) ...<br><br />
Briefly JSR238 is a solution for internationalization and localization of MIDP applications. Who likes reading a theory has a chance to read more about both terms <a href="http://en.wikipedia.org/wiki/Internationalization_and_localization" target="_parent">here</a>. I personally like one sentence explanation which says that:<br />
<li>internationalization is a process of designing applications that way that it can be localized to various languages and regions.</i>" <br />
<li>localization is a process of translating software user interfaces from one language to another and adapting it to suit a foreign culture."</i></p>

<p><br />
Looking  back at CLDC/MIDP it has already introduced essential support for internationalization. I'm sure you remember that:<br />
<li>Characters encoding is Unicode.<br />
<li>Locale identification (see <a href="http://www.ietf.org/rfc/rfc3066.txt" target="_parent">RFC 3066</a>) and <i>microedition.locale</i> property were defined.<br />
<li>Date, Calendar, TimeZone classes are available.<br />
<li>InputStreamReader and OutputStreamWriter allow reading/writing character streams.</p>

<p><br />
JSR238 goes further and addresses following problems:<br />
<li>Separating of resources from the application source code. All localizable resources are stored out of the source code. It helps to easier translate an application without need to recompile and lowers possibility to introduce error.<br />
<li>Formatting of dates, times, numbers, currencies and messages. These items are correctly formatted according to locale set by application.<br />
<li>String collation. Collation is correct for the locale set by application.<br />
<a name="locale-identifier"></a><br />
<b>Locale identification</b><br />
Locale is the only way how to tell jsr238 implementation classes to behave according to desired locale. Locale identifier follows pretty same rules like in javaSE and is built as <i>2 letters of language code</i> followed by <i>2 letters of country code</i> and optionally a <i>language variant</i>. As a separator both underscore "_" and dash "-" are allowed.<pre>en-US, cs-CZ, zh-CN, ja-JP ... </pre>Interesting thing is that also empty string "" as a locale identifier is valid and signals that neutral formatting is required. I will talk about neutral formatting in next part of the guide ...</p>

<p><br />
<b>Resource files</b><br />
To allow easy localization of application all localizable resources has to be stored into separate <i>resource file</i>. JSR 238 defines 2 categories of resources. <i>device resources</i> and <i>application resources</i>. The <i>application resources</i> are the resources bundled with the application, <i>device resources</i> are "burned into" the device. Application developer is responsible for creating and maintaining application resources, on the other hand device resources are read only.<br />
Resource files are hold in a structure of folders defined by the specification. If you have WTK 2.5 installed (and I hope you have ;-)), go into <i>apps</i> folder and look into <i>i18nDemo</i> a project which contains JSR238 sample MIDlet. Open MIDlet binary <i>i18nDemo.jar</i> and along with package folders containing classes there is also folder <i>global</i> with resources. <i>Global</i> is a root folder for all resource files. You will notice subfolders which naming follows <a href="#locale-identification">locale identification</a> schema. These folders then contain localized resource files. Look at following picture:<br />
<img alt="basenames.png" src="http://weblogs.java.net/blog/tbrandalik/archive/basenames.png" width="146" height="161" hspace="20" vspace="20"/><br><br />
Resource file "common" appears there in 3 localized versions. Each is identified by the full path to the resource file.<pre>/global/common<br />
/global/en/common<br />
/global/en-US/common</pre><br />
Resource inheritance principle was implemented here to save space. It means resource don't repeat in resource files. If a resource, we are looking for, isn't found in <i>/global/en-US/common</i> next resource file <i>/global/en/common</i> is queried and then as a last try common resource file <i>/global/common</i> is queried. You've probably noticed resource file stored directly under <i>/global</i> folder. It's good strategy to store resources which aren't intended to be translated into resource files right under <i>/global</i> folder. These are called <i>common resources</i>.<br />
Inspecting a structure of resource files and resource files itself just in file browser isn't very comfortable. We prepared small utility <i>i18n Resource Manager</i> which really simplifies the work with resources. Run WTK Toolbar and load i18nDemo project. <i>I18n Resources Manger</i> is right in project menu here:<br />
<a name="i18nmanager"></a><br />
<img alt="i18nmanager.png" src="http://weblogs.java.net/blog/tbrandalik/archive/i18nmanager.png" width="812" height="527" vspace="20" hspace="20"/><br />
Another possibility to launch <i>i18n Resource Manager</i> is a script <i>WTK_HOME/bin/i18ntool</i>. Launch it with parameter &lt;path to any resource global folder&gt;<br />
<pre>i18ntool ../apps/i18nDemo/res</pre></p>

<p></p>

<p><br />
<i>In the next part we will look closer at resource files structure ...</i><br />
</p>]]>

</content>
</entry>
<entry>
<title>How to attach new wireless tooolkit to Netbeans MP</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/tbrandalik/archive/2007/02/how_to_attach_n_1.html" />
<modified>2007-02-08T13:36:52Z</modified>
<issued>2007-02-08T13:33:13Z</issued>
<id>tag:weblogs.java.net,2007:/blog/tbrandalik/359.6510</id>
<created>2007-02-08T13:33:13Z</created>
<summary type="text/plain">Netbeans Mobility Pack comes with already bundled WTK. The catch is that this is not current final version 2.5. Beginners sometimes can&apos;t find the way how to attach separately downloaded WTK. Don&apos;t worry this is really easy. The trick is...</summary>
<author>
<name>tbrandalik</name>

<email>Tomas.Brandalik@Sun.COM</email>
</author>
<dc:subject>Accessibility</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/tbrandalik/">
<![CDATA[<a href="http://www.netbeans.org/products/mobility/">Netbeans Mobility Pack</a> comes with already bundled WTK. The catch is that this is not current final version 2.5. Beginners sometimes can't find the way how to attach separately downloaded WTK. Don't worry this is really easy. The trick is to use <em>Java Platform Manager</em>  wizard hidden in <em>Tools</em> menu. Mobility Pack offers nice <a href="http://www.netbeans.org/kb/55/quickstart-mobility.html">Quick Start Guide</a> between others topics addressing also this problem. Look for section <em>Changing the Emulator Platform</em>.]]>

</content>
</entry>
<entry>
<title>Wireless Toolkit 2.5 is Final!</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/tbrandalik/archive/2007/02/wireless_toolki.html" />
<modified>2007-02-05T19:33:03Z</modified>
<issued>2007-02-05T15:38:53Z</issued>
<id>tag:weblogs.java.net,2007:/blog/tbrandalik/359.6482</id>
<created>2007-02-05T15:38:53Z</created>
<summary type="text/plain">&quot;9 from 10 wireless developers recommend new version of wireless toolkit&quot;</summary>
<author>
<name>tbrandalik</name>

<email>Tomas.Brandalik@Sun.COM</email>
</author>
<dc:subject>Community: Mobile &amp; Embedded</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/tbrandalik/">
<![CDATA[<p><em>Contributed by: Richard Gregor WTK engineering manager.</em><br><br />
After quite a long development, Sun Java Wireless Toolkit 2.5 for CLDC (oh man what's a long official name) is final, everybody can download it here:<br />
<a href="http://java.sun.com/products/sjwtoolkit/download-2_5.html">http://java.sun.com/products/sjwtoolkit/download-2_5.html</a> .</p>

<p>This is a really great release bringing the support for the Mobile Service Architecture (MSA). For those of you who are not aware, <a href="http://jcp.org/en/jsr/detail?id=248">Mobile Service Architecture</a> is a definition of a new Java platform for the mobile devices. It specifies what all APIs should be supported on the mobile phone that is MSA compliant. MSA is is a really rich platform that specifies essential client components of an end-to-end wireless environment. In comparison to its predecessor Java Technology for the Wireless Industry, MSA includes many more exciting APIs and I don't want to describe them all because it is long list and I need to do also something real for my living.</p>

<p>Let's take a look at what's new and cool in the toolkit.</p>

<p>   <img alt="toolkit.PNG" src="http://weblogs.java.net/blog/tbrandalik/archive/toolkit.PNG" width="783" height="621" /></p>

<h2>Forget about Flash, now we have SVG!</h2>

<p>SVG is powerful language for describing two-dimensional vector and mixed vector/raster graphics in XML.</p>

<p>SVG API implementation as specified in <a href="http://jcp.org/en/jsr/detail?id=226">JSR 226</a> is included in the toolkit and contains also optional parts not demanded by specification. Toolkit comes with 2 SVG demos that should help you start with SVG programming.</p>

<p><strong>SVG Demo</strong></p>

<p>SVG Demo includes simple demos that you can use as a start point. You can browse and display your svg files located on device's filesystem, render simple svg picture, play svg animation, create svg picture from scratch, work with events and manipulate svg images - all basic stuff you can do with SVG API.</p>

<p> <br />
   * Location Based Service : <br /></p>

<p>    <img alt="svg2.PNG" src="http://weblogs.java.net/blog/tbrandalik/archive/svg2.PNG" width="322" height="727" /></p>

<p><br />
<strong>SVG Contact List Demo</strong></p>

<p>If you wanna see something more advanced in SVG, then please check this demo. You can also try to run it on Nokia S40 phones with SVG support -looks amazing and comes with 2 skins.  </p>

<p>   * SVG Contact List: <br /></p>

<p>    <img alt="contact.PNG" src="http://weblogs.java.net/blog/tbrandalik/archive/contact.PNG" width="507" height="328" /></p>

<h2>Payment or how to make money</h2>

<p>Payment API allows your MIDlet to initiate payment transaction in a secure manner. Nice example of monetization is a JBricks game included in toolkit. You can buy additional lives or advanced levels of the game and pay either with your credit card or by sending a Premium Priced SMS. Payment implementation comes with very nice support.</p>

<p>   * You can manage the price for a certain feature e.g. live or level in the update file (*.jpp). To change data in this file, toolkit includes Payment Update File Editor: <br /></p>

<p>    <img alt="payment-editor.PNG" src="http://weblogs.java.net/blog/tbrandalik/archive/payment-editor.PNG" width="750" height="621" /></p>

<p><br />
Utilities by the way were redesigned - should be seen on the picture, isn't it? You can choose when new prices are taking place. There is not only client side for Payment but also the Payment Server. Payment console allows you to see payment communication, you can track details of network communication in the Network Monitor. Of course preview of all transactions and their status is available as well. For Payment API details please check <a href="http://jcp.org/en/jsr/detail?id=229">Payment API - JSR 229</a></p>

<p><br />
<h2>Good Morning, Buenos dias, Dobry den - Mobile Internationalization in Action</h2></p>

<p>With continuing globalization, the necessity for producing localized application is raising rapidly. Even though internationalization for !JavaSE and !JavaEE applications is well known process, with a lot of support from various tools, the situation in !JavaME/MIDP was not satisfactory for a long time, because there was no standard solution for solving internationalization issues. With the introduction of <a href="http://jcp.org/en/jsr/detail?id=238">JSR 238</a> (Mobile Internationalization API), !JavaME application developers can leverage it to create truly internationalized applications.</p>

<p>Basic ideas behind JSR 238 are here:</p>

<p>   * For multicultural/global applications<br />
   * Allows developers to internationalize their MIDP applications<br />
   * Central Concept – resource, data that is localized<br />
      * String<br />
      * Image<br />
      * Object<br />
   * Application - specific and Device - specific resources<br />
   * Application Resources are bundled as part of MIDlets suite jar file<br />
   * Includes support for cultural conventions</p>

<p><br />
Resources are in binary resource file, in format defined by <a href="http://jcp.org/en/jsr/detail?id=238">JSR 238</a>. Toolkit includes resource manager that makes it easy create and maintain different types of resources.</p>

<p>    <img alt="i18n.PNG" src="http://weblogs.java.net/blog/tbrandalik/archive/i18n.PNG" width="777" height="597" /></p>

<p><br />
<h2>Session Initiation Protocol (SIP)</h2></p>

<p>There is few good reasons for this API to be included:</p>

<p>   * It is a standard way how applications can set up communication<br />
   * Cost savings<br />
   * Security</p>

<p>SIP is used e.g. in Instant Messaging, Text and Voice Chat and Video Conferencing. Except API implementation, the Wireless toolkit includes demo SIP server (proxy and registrar). It is of course up to you, if you would rather use your real SIP server, no problem. Network Monitor has been extended so now you can track SIP communication too. There are 2 nice demos for SIP.</p>

<p>   * SIP Demo - for basic peer-to-peer communication<br />
   * GoSIP Demo - advanced demo using Built-in SIP server for simple chat between 2 devices</p>

<p><br />
There is a lot more in new Sun java Wireless Toolkit 2.5. Don't wait, go and review it yourself!</p>]]>

</content>
</entry>

</feed>