<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5483741054242776395</id><updated>2012-01-28T07:28:14.681+01:00</updated><category term='mobile'/><category term='flash'/><category term='titan'/><category term='rich mobilenet application'/><category term='osgi'/><category term='android'/><category term='rich internet application'/><category term='specification'/><category term='java'/><category term='comparison'/><category term='ajax'/><category term='g1'/><category term='rma'/><category term='html'/><category term='prosyst'/><category term='midp3'/><category term='ria'/><category term='mbs'/><category term='book'/><category term='sprint'/><category term='ercp'/><title type='text'>Pici's blog on mobile Java</title><subtitle type='html'>Fascinating things about Java, mobility, OSGi, Android etc</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://picisblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://picisblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Pici</name><uri>http://www.blogger.com/profile/04094299517370355247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_u_AwGCJrcIw/ShLVr6OtpiI/AAAAAAAAADk/o2JQpvIy_Xw/S220/GaborPecsy.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5483741054242776395.post-6862476248389108611</id><published>2009-01-14T12:35:00.011+01:00</published><updated>2009-01-14T17:30:27.615+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mbs'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='g1'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='prosyst'/><title type='text'>mBS for Android Updates</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_u_AwGCJrcIw/SW3T0hQ-pLI/AAAAAAAAACs/-3hcVspHCkM/s1600-h/mBSforAndroid.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 145px; height: 130px;" src="http://4.bp.blogspot.com/_u_AwGCJrcIw/SW3T0hQ-pLI/AAAAAAAAACs/-3hcVspHCkM/s400/mBSforAndroid.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5291118036466443442" /&gt;&lt;/a&gt; 
Today &lt;a href="http://www.prosyst.com/"&gt;ProSyst&lt;/a&gt; released the updated (0.2)
version of &lt;a href="http://dz.prosyst.com/oss#mBS_Android"&gt;mBS for Android&lt;/a&gt;, the Android
port of the leading embedded implementation of
&lt;a href="http://www.osgi.org/"&gt;OSGi Framework&lt;/a&gt; and services.
The updated version can now be run on &lt;a href="http://code.google.com/intl/hu/android/download_list.html"&gt;
Android SDK 1.0 R2&lt;/a&gt; as well as on the &lt;a href="http://www.t-mobileg1.com/"&gt;T-Mobile G1&lt;/a&gt; device. Just like the previous version, this release is free of charge for non-commercial use.

&lt;h3&gt;Release Content&lt;/h3&gt;

The 0.2 version contains:
&lt;ul&gt;
 &lt;li&gt; mbs.apk - the updated version of mBS for Android
 &lt;li&gt; mconsole-proff-6.1.41.zip - ProSyst mConsole remote management tool
 &lt;li&gt; demo.zip - Bundles demonstrating the use of OSGi services on top of Android
 &lt;li&gt; readme.htm - Detailed installation instruction for the release and the demos
 &lt;li&gt; License_Eula_ProSyst.txt
&lt;/ul&gt;

&lt;h3&gt;The changes made to mBS for Android&lt;/h3&gt;

&lt;h5&gt;Classloading Changes&lt;/h5&gt;

The   Android   platform   does   not   allow   to   define   classes  using
&lt;code&gt;ClassLoader.defineClass(byte[])&lt;/code&gt;.  Therefore the classloading mechanisms in
mBS for Android had to be updated.
&lt;p&gt;
The Android platform provides special
utility  class  for  loading  classes from external DEX files, class name is
&lt;code&gt;dalvik.system.DexFile&lt;/code&gt;.  For this purpose new Class Provider was implemented,
which  uses  the  Android  DexFile  utility.  When  we start the mBS for Android
application the starting process goes through the following steps:
&lt;ol&gt;
   &lt;li&gt; The Android platform activates the main activity of the mBS Android application.
   &lt;li&gt; The main activity loads /res/raw/mbs_image.zip as resource and extracts it in the data directory of the application. The data directory is /data/data/com.prosyst.mbs.android.starter/app_mbs.
   &lt;li&gt; When the mBS image is extracted in the file system of the Android platform the main activity creates special &lt;code&gt;java.lang.ClassLoader&lt;/code&gt;, which uses the &lt;code&gt;dalvik.system.DexFile&lt;/code&gt; for loading classes from the serverjvm15.jar.
   &lt;li&gt; After the class loader is created the main activity loads the &lt;code&gt;Start&lt;/code&gt; class of the mBedded Server and invokes its &lt;code&gt;main(String[])&lt;/code&gt; method in separated thread.
   &lt;li&gt; The the main method call is finished the mBedded Server application is started on the Android platform and the main activity updates the status of the provided information, the startup time and the used memory.
&lt;/ol&gt;
For   debug   purposes   the   output   of   the   mBS   is   redirected  to
/data/data/com.prosyst.mbs.android.starter/app_mbs/bin/vms/mbs.log     file,
which can be opened using the Android SDK tools.

&lt;h5&gt;Network Permissions&lt;/h5&gt;

In  the previous version of the mBS Android application there was no need to
add  any permissions to the application for its normal work. In Android v1.0
the  mBS needs special permissions for opening any server sockets. Therefore
the following line was added in the AndroidManifest.xml file:
&lt;p&gt;&lt;code&gt;
   ...&lt;br&gt;
   &amp;lt;uses-permission android:name="android.permission.INTERNET" /&amp;gt;&lt;br&gt;
   ...&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h5&gt;Signed Application Package&lt;/h5&gt;

In  the  previous  version  of  mBS  Android  application its was allowed to
install  Android  applications,  which are not signed. In Android v1.0 it is
not  allowed  to  install such application. Therefore the new version of mBS
Android  application  is signed.

&lt;h3&gt;Future Plans&lt;/h3&gt;

ProSyst  is working on additional demos and tools that help to leverage this
technology.  This  release  was created as a proof of concept to demonstrate
the  feasibility  of  using  mBS on Android. However, ProSyst can productize
this version if there is a significant interest in using this technology.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5483741054242776395-6862476248389108611?l=picisblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://picisblog.blogspot.com/feeds/6862476248389108611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5483741054242776395&amp;postID=6862476248389108611' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/6862476248389108611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/6862476248389108611'/><link rel='alternate' type='text/html' href='http://picisblog.blogspot.com/2009/01/mbs-for-android-updates.html' title='mBS for Android Updates'/><author><name>Pici</name><uri>http://www.blogger.com/profile/04094299517370355247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_u_AwGCJrcIw/ShLVr6OtpiI/AAAAAAAAADk/o2JQpvIy_Xw/S220/GaborPecsy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_u_AwGCJrcIw/SW3T0hQ-pLI/AAAAAAAAACs/-3hcVspHCkM/s72-c/mBSforAndroid.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5483741054242776395.post-2865869772429585238</id><published>2008-09-05T12:24:00.014+02:00</published><updated>2008-09-05T13:34:08.634+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='ria'/><category scheme='http://www.blogger.com/atom/ns#' term='rma'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='rich mobilenet application'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='titan'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='rich internet application'/><title type='text'>Rich Internet MobileNet Applications</title><content type='html'>&lt;h2&gt;Introduction
&lt;/h2&gt;
Using AJAX-style user interface for OSGi-based applications is not a new idea. We even saw this concept on mobile devices, for example in an &lt;a href="http://thehereweb.googlepages.com/osgigpsmapmashupservletfornokian800"&gt;OSGi demo at Java One in 2007&lt;/a&gt;. The Rich MobileNet Application (RMA) concept takes these ideas several steps further and generalizes them to other UI technologies as well. The concept was first introduced in the &lt;a href="http://www.osgi.org/CommunityEvent2008/Program"&gt;OSGi Community Event 2008&lt;/a&gt; in a &lt;a href="http://www.osgi.org/wiki/uploads/CommunityEvent2008/12_bostrom.pdf"&gt;presentation by Jon Bostrom&lt;/a&gt;. RMAs are an important new feature of &lt;a href="http://developer.sprint.com/site/global/develop/technologies/sprint_titan/p_sprint_titan.jsp"&gt;Sprint Titan Platform&lt;/a&gt;. But what exactly RMAs are?

&lt;h2&gt;Motives
&lt;/h2&gt;

&lt;a href="http://en.wikipedia.org/wiki/Rich_Internet_application"&gt;Rich Internet applications (RIAs)&lt;/a&gt; are web applications that have the features and functionality of traditional desktop applications. RIAs typically transfer the processing necessary for the user interface to the web client but keep the bulk of the data (i.e., maintaining the state of the program, the data, etc.) back on the application server.
&lt;p&gt;
Rich MobileNet Applications are the mobile extensions of Rich Internet Applications. Though many ideas used in RIAs are applicable and beneficial in mobile environments, there are mobile specific aspects that need to be taken into consideration when creating an application for mobile:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Connection Model&lt;/i&gt;: as opposed to RIAs, mobile applications should function in an occasionally connected environment. Access to the Internet may be available, may be limited or may not be present at all. For better user experience and improved usability, applications have to be prepared both in on-line and off-line mode, they may need to be able to synchronize data stored on the device with a backend when getting online, and be ready to use the local data store when the connection is not available.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Integration to Phone functions&lt;/i&gt;:  applications designed for mobile devices should take advantage of mobility. Therefore, they need to be able to access the specific functions of the underlying device, such as call control, position, messaging or PIM.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Task flow, task focus&lt;/i&gt;: mobile applications have to prepare for mobile-specific events (for example incoming calls)&lt;/li&gt;
&lt;li&gt;&lt;i&gt;One hand operation&lt;/i&gt;: mobile applications should prepare for the limited input capabilities of the device and should be easily usable with one hand.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Touch&lt;/i&gt;: RMAs should be able to utilize the touch capabilities of the device, however they should also be prepared to operate without touch support as many devices do not have touch UI at the moment.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;UI design&lt;/i&gt;: Device displays are lot smaller than PC screens. Additionally, the screen size and resolution may vary in a wide spectrum between devices. Some devices have multiple displays and the user may switch between them while using the application. Mobile applications should be prepared to such variances and be able to adapt to the device UI capabilities flexibly.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Code loading&lt;/i&gt;: RIAs are typically loaded over the Internet at start up. Though this approach has advantages in lower maintenance costs – no need to reinstall application at update – it makes the application dependent on Internet access. Mobile applications have to operate in an occasionally connected environment; therefore, it must be possible to install applications to a device locally.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Security&lt;/i&gt;: Accessing mobile-specific functionality is an important opportunity for mobile application, but they represent a big risk for the security and privacy of the device user. Additionally, mobile devices are subject to different kinds of attacks than PCs. For example, they operate in a changing network environment – due to mobility and roaming – and they are much easier to steal or lose. Therefore, the security measures applied in mobile applications and the underlying platform need to address these new threats as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If an application doesn’t handle these aspects properly, the result may be limited or no usability and poor user experience.
Rich MobileNet Applications (RMAs) are the mobile extensions of Rich Internet Applications. Though building on technologies used in RIAs and benefiting from their advantages – like platform independence – they utilize mobile-specific solutions that enable the optimization of user experience for mobile devices.

&lt;/p&gt;&lt;h2&gt;So, what is an RMA?
&lt;/h2&gt;
An RMA consists of a renderable UI – HTML/CSS, JavaScript, &lt;a href="http://www.adobe.com/products/flashlite/"&gt;Flash Lite&lt;/a&gt; etc – that is executing in the corresponding container and which can access the services running in &lt;a href="http://www.osgi.org/"&gt;OSGi Service Platform&lt;/a&gt;. These services can be generic-purpose services, shared by multiple applications or they can be application-specific, which allow implementing the computation-intensive business logic of the application in Java, utilizing the full power of CDC JVM and the OSGi Framework on top.&lt;p&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u_AwGCJrcIw/SMEMSfVMzKI/AAAAAAAAABc/xB5PH2w7-Tk/s1600-h/rmaarch.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_u_AwGCJrcIw/SMEMSfVMzKI/AAAAAAAAABc/xB5PH2w7-Tk/s400/rmaarch.gif" alt="" id="BLOGGER_PHOTO_ID_5242484953023564962" border="0" /&gt;&lt;/a&gt;

&lt;b&gt;RMA Architecture in Titan Platform&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Using CDC Java enables access to device functions (messaging, positioning, call control, PIM etc.) and platform services like file system, networking or even a database. Using Java security, a fine-grained access control of these resources is implemented.
&lt;/p&gt;&lt;p&gt;
Mobile OSGi provides the platform to develop applications from components (shared or application specific) and it enables the management of these components both locally and for a remote administrator. Using the local management capabilities and OSGi dependency management, missing components can be loaded on demand.
&lt;/p&gt;&lt;p&gt;
Using HTML or Flash as UI technologies enables a high level of portability with rich user experience. However, probably an even more important aspect is that these technologies are currently used for Internet applications. They have established patterns and solutions for most typical tasks, there are frameworks supporting web application development. RMA enables to take these into use in mobile applications.
&lt;/p&gt;&lt;p&gt;
The communication between the UI runtime and the OSGi Service Platform uses some HTTP-based remote access protocol like SOAP or JSON RPC. OSGi is an ideal platform for this with its servlet container implementation known as the HTTP Service. The Service Platform provides a mechanism that automatically exposes the available services through the supported protocols. It also provides a service registry where RMAs can find and bind the available services. These automatic mechanisms make the creation of services simple and straightforward, the service developers’ exposure to the complexities of remote access is minimal.
&lt;/p&gt;&lt;p&gt;
OSGi HTTP Service is used to enable the local installation of web applications to the device. Local installation capability is very important for the occasionally connected devices to ensure the availability of the application.

&lt;/p&gt;&lt;h2&gt;More Complex Scenarios
&lt;/h2&gt;
The architecture above describes the simplest form of Rich MobileNet Applications, where the application UI and the services are both installed to the device locally and all communication takes place within the device between these entities. However, RMAs are not limited to this simple architecture only:
&lt;ul&gt;
&lt;li&gt;Services can be external to the device. They can be publicly available web services on the Internet but they can also be services running on another mobile device. RMAs can simply mesh up local and remote services to create some unique user experience.
&lt;/li&gt;&lt;li&gt;Applications don’t necessarily have to be installed to the device locally. An AJAX-style web application can be just loaded from a public web site on the Internet (or another mobile device) and it can still access services locally on the device (under appropriate access control).
&lt;/li&gt;&lt;li&gt;The management capabilities of Mobile OSGi enable advanced RMAs to check the availability of required services and initiate their deployment if they are missing.
&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Conclusion
&lt;/h2&gt;
RMAs are an exciting adaptation of the RIA concept to mobile devices. It enables RIA developers to leverage their knowledge in the mobile space but without compromising the user experience on these limited devices. RMA support will be an integral part of Sprint Titan Platform; it will be in devices early next year. So watch out and prepare, RMAs are around the corner!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5483741054242776395-2865869772429585238?l=picisblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://picisblog.blogspot.com/feeds/2865869772429585238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5483741054242776395&amp;postID=2865869772429585238' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/2865869772429585238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/2865869772429585238'/><link rel='alternate' type='text/html' href='http://picisblog.blogspot.com/2008/09/rich-internet-applications-go-mobile.html' title='Rich &lt;del&gt;Internet&lt;/del&gt; MobileNet Applications'/><author><name>Pici</name><uri>http://www.blogger.com/profile/04094299517370355247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_u_AwGCJrcIw/ShLVr6OtpiI/AAAAAAAAADk/o2JQpvIy_Xw/S220/GaborPecsy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_u_AwGCJrcIw/SMEMSfVMzKI/AAAAAAAAABc/xB5PH2w7-Tk/s72-c/rmaarch.gif' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5483741054242776395.post-8166685481219304852</id><published>2008-06-18T13:02:00.004+02:00</published><updated>2008-06-18T13:20:42.450+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='specification'/><title type='text'>Java Specification Wanted</title><content type='html'>During the weekend, I wasted long hours on searching for a Java specification. The document is question is called &lt;span style="font-style:italic;"&gt;Configurations and Profiles Architecture Specification&lt;/span&gt; and it is like the Constitution of JavaME.
It defines the architecture for the JavaME platform, what are the rules that you must follow when standardizing APIs for JME. What can you do in a JSR and what you mustn't.
&lt;p&gt;
However, if you &lt;a href="http://www.google.com/search?hl=en&amp;q=%22Configurations+and+Profiles+Architecture+Specification%22&amp;btnG=Google+Search"&gt;Google&lt;/a&gt; this title, you will get only a handful hits, almost each of them are references to this document from other specifications. And a 5-year old entry from a forum where somebody was seeking the same document. I searched for it on &lt;a href="http://java.sun.com"&gt;java.sun.com&lt;/a&gt;, even in the &lt;a href="http://www.archive.org"&gt;Wayback Machine&lt;/a&gt; but couldn't find it. The closest I got to this document is that I talked to someone who saw it but didn't have a copy anymore.&lt;br&gt;
I'm not saying that it &lt;span style="font-style:italic;"&gt;cannot&lt;/span&gt; be found, but I failed miserably. So if you happen to know the whereabout of this document, or happen to have a copy of it in some dusty corner of you hard drive, I would really appreciate if you could share it with me.
&lt;p&gt;
And apart from the fact how lousy I am in web searches, wouldn't you expect such an important a document to be in a very obvious and visible place?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5483741054242776395-8166685481219304852?l=picisblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://picisblog.blogspot.com/feeds/8166685481219304852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5483741054242776395&amp;postID=8166685481219304852' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/8166685481219304852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/8166685481219304852'/><link rel='alternate' type='text/html' href='http://picisblog.blogspot.com/2008/06/java-specification-wanted.html' title='Java Specification Wanted'/><author><name>Pici</name><uri>http://www.blogger.com/profile/04094299517370355247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_u_AwGCJrcIw/ShLVr6OtpiI/AAAAAAAAADk/o2JQpvIy_Xw/S220/GaborPecsy.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5483741054242776395.post-7543573393282093997</id><published>2008-03-14T14:00:00.013+01:00</published><updated>2009-01-14T17:35:58.127+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mbs'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='prosyst'/><title type='text'>ProSyst publishes OSGi for Android</title><content type='html'>&lt;p&gt;Today &lt;span class="nobr"&gt;&lt;a href="http://www.prosyst.com/" rel="nofollow"&gt;ProSyst&lt;/a&gt;&lt;/span&gt; released the beta version of mBS for Android. &lt;span class="nobr"&gt;&lt;a href="http://www.prosyst.com/products/osgi_se_prof_ed.html" rel="nofollow"&gt;mBS&lt;/a&gt;&lt;/span&gt; is the leading OSGi implementation in the embedded market. The beta release of the Android version is available from &lt;span class="nobr"&gt;&lt;a href="http://dz.prosyst.com/prosyst/mbs_android/mbs-prof-android_6.2.174.zip" rel="nofollow"&gt;ProSyst Developer Zone&lt;/a&gt;&lt;/span&gt;. This release is under ProSyst Non-Commercial License, which permits free use for non-commercial trials.&lt;/p&gt;  

&lt;h3&gt;Why to use OSGi on top of Android?&lt;/h3&gt;  
&lt;p&gt;OSGi and Android are both component platforms. However, due to the differences discussed in an &lt;span class="nobr"&gt;&lt;a href="http://picisblog.blogspot.com/2008/02/introduction-google-and-open-handset.html" rel="nofollow"&gt;earlier post about Android&lt;/a&gt;&lt;/span&gt;, there are significant benefits in using OSGi on top of Android:&lt;/p&gt; 
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Lack of class-sharing:&lt;/b&gt; Android doesn't support the class sharing between application packages, which leads to class duplication between components of a modularly deployable application. Such class duplication puts high burden on platform maintenance as well if there are shared components.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Fine-grained components:&lt;/b&gt; in Android, component communication involves interprocess communication which leads to coarse-grained components with high abstraction-level interfaces. The efficient communication between OSGi components - i.e. direct method calls - permits a much finer grained decomposition. The fine-grained component model enables plugin architectures like in &lt;span class="nobr"&gt;&lt;a href="http://www.eclipse.org/ercp" rel="nofollow"&gt;Eclipse eRCP&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Device Management:&lt;/b&gt; Remote manageability is an essential feature both for enterprises and mobile operator. Android currently doesn't include this feature, but OSGi offers an out of the box solution for this are.&lt;/li&gt;
&lt;/ul&gt;   

&lt;h3&gt;Release Content and Requirements&lt;/h3&gt;  
&lt;p&gt;Content of the release:&lt;/p&gt; 
&lt;ul&gt;&lt;li&gt;mbs.apk - mBS for Android&lt;/li&gt;&lt;li&gt;mconsole-proff-6.1.41-19-12-2007.zip - ProSyst mConsole remote management tool&lt;/li&gt;
&lt;li&gt;demo.zip - Bundles demonstrating the use of OSGi services on top of Android&lt;/li&gt;
&lt;li&gt;readme.htm - Detailed installation instruction for the release and the demos&lt;/li&gt;
&lt;li&gt;ProSyst Non-Commercial license.txt&lt;/li&gt;
&lt;/ul&gt;   

&lt;h4&gt;mBS for Android&lt;/h4&gt;  
&lt;p&gt;The mbs.apk package contains the mBS distribution as an Android application package. It can be directly deployed to Android using the adb tool. The product can then be found under the All desktop item.
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_u_AwGCJrcIw/R9p4rSAy6uI/AAAAAAAAAA8/nZ8oKoOxuEw/s1600-h/mBSAndroid-app.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_u_AwGCJrcIw/R9p4rSAy6uI/AAAAAAAAAA8/nZ8oKoOxuEw/s320/mBSAndroid-app.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5177583406580689634" /&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;This mBS distribution contains the full OSGi R4 framework implementation and the following services:&lt;/p&gt; 
&lt;table&gt;&lt;tbody&gt; 
  &lt;tr&gt; 
    &lt;td&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u_AwGCJrcIw/R9p5liAy6vI/AAAAAAAAABE/OsWpoPJbC8M/s1600-h/mBSAndroid-telnetConsole.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_u_AwGCJrcIw/R9p5liAy6vI/AAAAAAAAABE/OsWpoPJbC8M/s320/mBSAndroid-telnetConsole.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5177584407308069618" /&gt;&lt;/a&gt;
    &lt;/td&gt; 
    &lt;td&gt;
     &lt;ul&gt;
       &lt;li&gt;Configuration Admin&lt;/li&gt;
       &lt;li&gt;IO Connector&lt;/li&gt;
       &lt;li&gt;Console&lt;/li&gt;&lt;li&gt;Data store (db.jar)&lt;/li&gt;
       &lt;li&gt;Device Manager&lt;/li&gt;
       &lt;li&gt;HTTP Service&lt;/li&gt;
       &lt;li&gt;Servlet API&lt;/li&gt;
       &lt;li&gt;Kit Installation Manager&lt;/li&gt;
       &lt;li&gt;Log Service(log.jar)&lt;/li&gt;
       &lt;li&gt;Metatype Service&lt;/li&gt;
       &lt;li&gt;ProSyst Message Protocol&lt;/li&gt;
       &lt;li&gt;Initial Provisioning Service&lt;/li&gt;
       &lt;li&gt;ProSyst Utility Package&lt;/li&gt;
       &lt;li&gt;Socket Connection Service&lt;/li&gt;
       &lt;li&gt;Telnet Console&lt;/li&gt;
       &lt;li&gt;User Admin Service&lt;/li&gt;
       &lt;li&gt;Remote User Administration support&lt;/li&gt;
     &lt;/ul&gt; 
  &lt;/td&gt; 
&lt;/tr&gt; 
&lt;/tbody&gt;&lt;/table&gt;  

&lt;p&gt;The mBS port works with Android M5 or later as it depends on some bugfixes introduced in the M5 release.&lt;/p&gt;  

&lt;h4&gt;mConsole&lt;/h4&gt;  
&lt;p&gt;The mconsole-proff-6.1.41-19-12-2007.zip contains ProSyst mConsole, a remote management console that allows the management of OSGi framework. This package can be installed to a PC and it can be used to remotely manage the OSGi framework running on Android. This version of mConsole uses the ProSyst Management Protocol for the management but other management protocols are supported as well. Using the management console allows: &lt;/p&gt; 
&lt;ul&gt;
&lt;li&gt;Installing/updating a bundle to the framework&lt;/li&gt;
&lt;li&gt;Uninstalling bundles&lt;/li&gt;
&lt;li&gt;Starting/stopping bundles&lt;/li&gt;
&lt;/ul&gt;   
&lt;p&gt;mConsole runs on Windows-based PCs.&lt;/p&gt;  
&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u_AwGCJrcIw/R9p6lCAy6wI/AAAAAAAAABM/1Hk4Y3HI4-k/s1600-h/mBSAndroid-mConsole.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_u_AwGCJrcIw/R9p6lCAy6wI/AAAAAAAAABM/1Hk4Y3HI4-k/s320/mBSAndroid-mConsole.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5177585498229762818" /&gt;&lt;/a&gt;
&lt;/p&gt;   

&lt;h3&gt;Porting Experience&lt;/h3&gt;  
&lt;p&gt;Porting Java applications to Android, if it doesn't involve the porting of UI should be easy. However, during the technical work, ProSyst team had to face some challenges due to some bugs in Android and the lack of documentation for the Dalvik Virtual Machine. The major issues are described here to help the work of other porting projects:&lt;/p&gt;  

&lt;h5&gt;Stack Size&lt;/h5&gt; 
&lt;p&gt;By default the stack size of the Dalvik VM is set to 1 KB. Which was a bit few when starting mBS with a large number of bundles. The stack size can be set using the -Xss command line argument. For example -Xss65536 sets the stack size to 64K. Unfortunately, it's not known how this argument can be specified for a regular Android application. As a workaround for this issue, mBS was modified to explicitly set the stack size when the corresponding Thread objects are created.&lt;/p&gt;  

&lt;h5&gt;DEX converter bugs&lt;/h5&gt; 
&lt;p&gt;There are some bugs in the dx tool provided in Android. ProSyst reported these bugs to Google, but it's good to be aware of these limitations until the problems are fixed.&lt;/p&gt;  
&lt;p&gt;The dx tool fails to generate code for the following try-catch-finally structure:&lt;/p&gt;
&lt;p&gt;
&lt;code&gt; 
   try { &lt;BR&gt;
      // do something but do not return anything. &lt;BR&gt;
      // If you have "return object" here the &lt;BR&gt;
      // construction is OK.                     &lt;BR&gt;
   } catch (Throwable th) {             &lt;BR&gt;
      // log the error                         &lt;BR&gt;
   } finally {                                  &lt;BR&gt;
      // free the resources                            &lt;BR&gt;
      // The DEX file generator fails to parse &lt;BR&gt;
      // this section and starts eating memory &lt;BR&gt;
      // and doing nothing. &lt;BR&gt;
   }&lt;BR&gt;
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;Another failing construct is when &lt;code&gt;Object[]&lt;/code&gt; is used to refer to different types of arrays, like in the code snippet below:&lt;/p&gt; 
&lt;p&gt;
&lt;code&gt;
   Object[] data = null;            &lt;BR&gt;
   if (condition1) {              &lt;BR&gt;
      data = new String[10];&lt;BR&gt;
   } else if (condition2) {     &lt;BR&gt;
      data = new MyObject[10];      &lt;BR&gt;
   }                                    &lt;BR&gt;
&lt;/code&gt;
&lt;/p&gt;

&lt;h3&gt;Future Plans&lt;/h3&gt;  
&lt;p&gt;
ProSyst is working on additional demos and tools that help to leverage this 
technology. This release was created as a proof of concept to demonstrate the feasibility of using mBS on Android. However, ProSyst can productize this version if there is a significant interest in using this technology.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5483741054242776395-7543573393282093997?l=picisblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://picisblog.blogspot.com/feeds/7543573393282093997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5483741054242776395&amp;postID=7543573393282093997' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/7543573393282093997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/7543573393282093997'/><link rel='alternate' type='text/html' href='http://picisblog.blogspot.com/2008/03/today-prosyst-released-beta-version-of.html' title='ProSyst publishes OSGi for Android'/><author><name>Pici</name><uri>http://www.blogger.com/profile/04094299517370355247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_u_AwGCJrcIw/ShLVr6OtpiI/AAAAAAAAADk/o2JQpvIy_Xw/S220/GaborPecsy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_u_AwGCJrcIw/R9p4rSAy6uI/AAAAAAAAAA8/nZ8oKoOxuEw/s72-c/mBSAndroid-app.gif' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5483741054242776395.post-3151778696861446720</id><published>2008-03-12T09:36:00.005+01:00</published><updated>2008-03-12T09:48:01.800+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='midp3'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><title type='text'>A quick comparison of MIDP3 and OSGi</title><content type='html'>&lt;p&gt;A number of times I heard the argument, that &lt;span class="nobr"&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=271" rel="nofollow"&gt;JSR-271 MIDP 3.0&lt;/a&gt;&lt;/span&gt; provides a solution for everything that OSGi provides, maybe less elegantly, so &lt;span class="nobr"&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=232" rel="nofollow"&gt;JSR-232&lt;/a&gt;&lt;/span&gt; is not needed. It had a been a while since I last read JSR-271, so now I took the time and read the Public Review version of the specification. So here I provide a brief comparison of the two specifications. I don't want to claim that OSGi is better or worse than MIDP 3. It would be comparing apples to peaches, they are meant for different purposes. I just want to prove, that OSGi does add value, even to MIDP 3, so it makes sense to use them together. And the added value is not only by providing more elegance.&lt;/p&gt;  

&lt;h2&gt;Device Management&lt;/h2&gt;  
&lt;p&gt;I mention Device Management only briefly, as this is clearly the apples to peaches category. A significant part of JSR-232 is dealing with operational management of the components throughout their complete lifecycle, from deployment to removal.
I think operational management is a very important added value. It is easy to see that manageability of software assets is essential for enterprise applications, where the financial success of a company can directly depend on the proper operation of an applications. However, it is equally important for mobile operators to reduce their customer care costs and improve customer satisfaction. Just consider the recent release of &lt;span class="nobr"&gt;&lt;a href="http://mobileosgi.blogspot.com/2008/02/sprint-nextel-goes-live-with-mobile.html" rel="nofollow"&gt;Sprint Titan platform&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;  
&lt;p&gt;MIDP 3 on the other hand hardly contains anything related to management of the applications. The only exception is the over the air provisioning of MIDlets. So there is a lot of value to add here.&lt;/p&gt;   

&lt;h2&gt;Component Platform&lt;/h2&gt;  
&lt;p&gt;As remote management is so clearly out of the scope of MIDP 3, people were referring to the component model of the two platforms when they said that MIDP3 has everything that OSGi has.&lt;/p&gt;  
&lt;p&gt;In earlier releases, MIDlets used to be monolithic applications running in isolated silos. There was no interaction between MIDlets and it wasn't possible to share code either, well except by copying the classes from one version to the other. MIDP 3 introduced some new concept to improve in these ares:&lt;/p&gt; 
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Liblets&lt;/b&gt; are class library like packages, which can be used to share code between MIDlet suites&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Inter Midlet Communication&lt;/b&gt; using a special ICM protocol&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Autostart MIDlets&lt;/b&gt; are MIDlets that the AMS  must start when the device starts and restart if they fail.&lt;/li&gt;
&lt;/ul&gt;
These are the technologies that now form the &lt;em&gt;"MIDP 3 component platform"&lt;/em&gt;. Let's see how these realize some common characteristics of such platforms.

&lt;h3&gt;Encapsulation&lt;/h3&gt;  
&lt;p&gt;One characteristic of a module system is encapsulation, the ability of a component to hide the specifics of its implementation and selectively export its internals. OSGi bundles can decide on Java package level which classes to make available for other components. Liblets are completely transparent, all resources in a Liblet are available for its clients. Additionally, the Liblet is executed in the namespace of the MIDlet using it - together with all other dependent Liblets as well - and it is the responsibility of the Liblet and MIDlet developers to avoid name collisions between these entities.&lt;/p&gt;

&lt;h3&gt;Dependency Management&lt;/h3&gt;  
&lt;p&gt;In OSGi, the dependencies are expressed in terms of Java packages and their versions. The dependencies are resolved at runtime, the whole system is so dynamic that the components can be updated even at runtime, without breaking the operation of the platform.&lt;/p&gt;  
&lt;p&gt;MIDlet suites have to express their dependencies on Liblets in the MIDlet descriptor and manifest. During the installation, these dependencies are recursively resolved, and if the resolution succeeds, all required Liblets and the MIDlet suite will be installed.&lt;/p&gt;  
&lt;p&gt;OK, MIDP 3 is "less elegant" than OSGi. But it still handles dependencies, doesn't it? Well, there is a "small" difference between OSGi and MIDP 3 dependency model. As I said, OSGi uses package names and versions to express dependencies. MIDP 3 uses Liblet name, vendor name, version and the &lt;em&gt;SHA-1 hash of the Liblet package&lt;/em&gt; as the means of expressing dependencies.&lt;/p&gt;  
&lt;p&gt;What does this mean? All dependencies refer to an exact compilation of a a particular Liblet, as sometime even a recompilation gives slightly different byte code, which results in a completely different hash value. So if you want to update a Liblet on a device, you have to update &lt;em&gt;all&lt;/em&gt; Liblets and MIDlets that depend on it. Even if you corrected a small bug or just lost the binary copy of the earlier compilation.&lt;/p&gt;  
&lt;p&gt;So yes, literally speaking there is dependency handling, but the true purpose of managing dependencies - i.e. the ability to mix and match components while ensuring their proper interoperability - is completely lost, due to the rigid mechanism, which prevents any mixing. &lt;/p&gt;  
&lt;p&gt;Besides, this solution greatly reduces the value of Liblets in decomposition as well. You cannot change a Liblet individually. If there is a bug in a Liblet, you have to redeploy all dependent applications and Liblets to fix it.&lt;/p&gt;  

&lt;h3&gt;Security Model&lt;/h3&gt;  
&lt;p&gt;In OSGi, each bundle has its own associated permissions, its own protection domain. Bundles coming from a trusted source can obtain high privileges and expose services for less trusted components in a controlled manner. For example the permission to load native code should not be available for all components. But a component from trusted source can expose a native service to all other components by wrapping it with a Java interface. The clients of this interface will not need the permission to load any native code to use this service. This enables the creation of bundles that extend the platform with new services.&lt;/p&gt;  
&lt;p&gt;MIDP 3 Liblets are executed in the protection domain of their client MIDlets, which means that the code in the Liblet is executed with the exact same privileges as the host MIDlet. Therefore a Liblet cannot do anything that the host MIDlet could not do either.&lt;/p&gt;  

&lt;h3&gt;Component Interactions&lt;/h3&gt;  
&lt;p&gt;OSGi components interact via services. Services can be found via the central service registry, where any component can register its services. A service is then accessed via method simple calls and arbitrary data types can be used as parameters.&lt;/p&gt;  
&lt;p&gt;Apart from shared files or shared databases, MIDlets can interact via events. MIDP 3 defined an eventing mechanism, which allows MIDlets to publish and listen to events. An event can carry a single scalar or String value and an additional byte array as data.&lt;/p&gt;  
&lt;p&gt;I guess it's pretty clear which mechanism is more developer-friendly.&lt;/p&gt;  

&lt;h2&gt;Summary&lt;/h2&gt;  
&lt;p&gt;I have no problem with MIDP 3. Honestly! I do respect the work they did in the expert group and I understand how heavy burden the backwards compatibility requirement with MIDP 2.1 and CLDC was. I just wanted to point out that JSR-232 can add value, even to MIDP 3. And this value is not only marginal improvement of some existing features of MIDP 3. The means provided by MIDP 3 to decompose and manage complex applications are not suitable. JSR-232 can complement these weaknesses by its well-established component model and rich features in operational management.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5483741054242776395-3151778696861446720?l=picisblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://picisblog.blogspot.com/feeds/3151778696861446720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5483741054242776395&amp;postID=3151778696861446720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/3151778696861446720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/3151778696861446720'/><link rel='alternate' type='text/html' href='http://picisblog.blogspot.com/2008/03/quick-comparison-of-midp3-and-osgi.html' title='A quick comparison of MIDP3 and OSGi'/><author><name>Pici</name><uri>http://www.blogger.com/profile/04094299517370355247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_u_AwGCJrcIw/ShLVr6OtpiI/AAAAAAAAADk/o2JQpvIy_Xw/S220/GaborPecsy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5483741054242776395.post-1066781643899796776</id><published>2008-03-04T20:17:00.014+01:00</published><updated>2008-03-04T20:59:24.371+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='ercp'/><category scheme='http://www.blogger.com/atom/ns#' term='titan'/><category scheme='http://www.blogger.com/atom/ns#' term='sprint'/><title type='text'>Developing Titan Applications - Tools</title><content type='html'>&lt;a href="http://www.sprint.com/"&gt;Sprint&lt;/a&gt; has released their new Titan platform last week. Titan is a next generation Java platform for Sprint Windows Mobile devices. In addition to supporting existing MIDP Java ME applications, it includes the more capable CDC/Foundation Java Virtual Machine and OSGi framework. You can read more about Titan in &lt;a href="http://mobileosgi.blogspot.com/2008/02/sprint-nextel-goes-live-with-mobile.html"&gt;Mobile OSGi blog.&lt;/a&gt;

Titan is currently available for Windows Mobile 6 devices as an installable add on. In the future, devices will ship with pre-installed Titan, and Sprint plans to extend Titan support to other phone categories and platforms as well.

This is a very important milestone for mobile OSGi and it opens up very exciting new opportunities for mobile Java. I plan to write a number of articles about how to develop applications for this new platform. However, before starting development work, it worth to have a look at the tools available. There is a step-by-step introduction - in the form of videos -
on the &lt;a href="http://developer.sprint.com/site/global/develop/technologies/sprint_titan/p_sprint_titan.jsp"&gt;Titan&lt;/a&gt; page at Sprint ADP. I don't want to repeat the information available there, rather complement it with some practical notes.&lt;p&gt;

&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;em&gt;&lt;strong&gt;The Development Tools&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

From the &lt;a href="http://developer.sprint.com/site/global/develop/technologies/sprint_titan/p_sprint_titan.jsp"&gt;Titan page&lt;/a&gt;, after some registration you can download the &lt;a href="http://developer.sprint.com/getDocument.do?docId=98326"&gt;development tools&lt;/a&gt; for
creating applications for Titan. The tools are based on the &lt;a href="http://www.eclipse.org/downloads/"&gt;Eclipse IDE 3.3 Europa&lt;/a&gt; release.

First you need to set up the environment. Follow the instructions on video for how to &lt;a href="http://developer.sprint.com/getDocument.do?docId=98327"&gt;install &lt;/a&gt;and &lt;a href="http://developer.sprint.com/getDocument.do?docId=98328"&gt;configure &lt;/a&gt;the development tools. The configuration step is very important in order to make sure that the IDE uses the provided CDC 1.1 Java runtime instead of your installed JDK version and the provided &lt;a href="http://www.eclipse.org/ercp/"&gt;eRCP&lt;/a&gt; version as the development target instead of RCP provided as part of the Eclipse IDE.&lt;p&gt;

&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;em&gt;&lt;strong&gt;First Project&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

Now you're ready to create your &lt;a href="http://developer.sprint.com/getDocument.do?docId=98329"&gt;first project&lt;/a&gt;. The project template creates a simple eRCP application with some basic UI elements. We're ready to try it! Unfortunately, there's no built in device emulator in the toolset. The tool supports on-device execution and debugging
(see &lt;a href="http://developer.sprint.com/getDocument.do?docId=98330"&gt;video&lt;/a&gt;) only. &lt;span style="font-style: italic;"&gt;So what can you do, if you don't have access to a WM6 device, or you find it &lt;/span&gt; &lt;span style="font-style: italic;"&gt;more convenient to start first with an emulator on PC?
&lt;/span&gt;Fortunately, Titan Runtime can be installed to &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=38c46aa8-1dd7-426f-a913-4f370a65a582&amp;amp;displaylang=en"&gt;Windows Mobile 6 Emulator&lt;/a&gt;.&lt;p&gt;


&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;em&gt;&lt;strong&gt;The Emulator&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

First download and install the emulator to your PC. The emulator is available in a number of different localized versions, pick the one you like. However. make sure that you download one of the &lt;span style="font-style: italic;"&gt;Professional &lt;/span&gt;images, Titan doesn't work with the Standard ones.

Now you need to install &lt;a href="http://developer.sprint.com/getDocument.do?docId=98323"&gt;Titan Runtime &lt;/a&gt;to the Emulator.  The easiest way to get TitanDeviceRuntime-v1.0.CAB to the emulator is via a shared folder. After starting the emulator, you can select a shared folder in &lt;span style="font-weight: bold;"&gt;File&lt;/span&gt; &gt; &lt;span style="font-weight: bold;"&gt;Configure...&lt;/span&gt; menu. The content of the shared folder can be accessed from the Emulator using the &lt;span style="font-weight: bold;"&gt;File Explorer&lt;/span&gt; in the "\Storage Card" folder. Just click on the CAB file to begin the installation.

Similarly, you need to install the &lt;a href="http://developer.sprint.com/getDocument.do?docId=98324"&gt;Titan Device Tools&lt;/a&gt;, which enable "on-device" debugging of applications or application startup from the IDE.

&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;em&gt;&lt;strong&gt;Network Setup&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

The desktop and device-side tool components use sockets for communication, so you need to setup a network access.

&lt;ol&gt;&lt;li&gt;First you need to download and install &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=DC8332D6-565F-4A57-BE8C-1D4718D3AF65&amp;amp;displaylang=en"&gt;Virtual PC 2007&lt;/a&gt; because the Emulator uses the virtual network adaper support in VPC.&lt;/li&gt;&lt;li&gt;Now you can enable the "NE2000 Network Adapter" in the &lt;span style="font-weight: bold;"&gt;Network&lt;/span&gt; tab of the &lt;span style="font-weight: bold;"&gt;Configuration &lt;/span&gt;window of the Emulator.
&lt;/li&gt;&lt;li&gt;After enabling it, you should bind the adapter to one of the network interfaces installed to your PC. For this purpose, I used the &lt;a href="http://support.microsoft.com/kb/839013"&gt;Microsoft Loopback Adapter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;You have to assign a static IP address to the emulator, because you have to be able to configure that IP address in the tools in your IDE. Open &lt;span style="font-weight: bold;"&gt;Settings &lt;/span&gt;in the Start Menu  of the Emulator, select the &lt;span style="font-weight: bold;"&gt;Connections &lt;/span&gt;tab and then &lt;span style="font-weight: bold;"&gt;Network Cards&lt;/span&gt;. Select the "NE2000 Compatible Ethernet Driver" and then &lt;span style="font-weight: bold;"&gt;Use specific IP address&lt;/span&gt;. I used 192.168.42.1 as the address of the loopback adapter and assigned 192.168.42.2 to the Emulator. You need to softreset the Emulator (&lt;span style="font-weight: bold;"&gt;File &lt;/span&gt;&gt; &lt;span style="font-weight: bold;"&gt;Reset &lt;/span&gt;&gt; &lt;span style="font-weight: bold;"&gt;Soft&lt;/span&gt;) to ensure that the changes take effect.
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_u_AwGCJrcIw/R82lbqhC-VI/AAAAAAAAAAk/noigxMDc_Dg/s1600-h/netcfg2.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_u_AwGCJrcIw/R82lbqhC-VI/AAAAAAAAAAk/noigxMDc_Dg/s320/netcfg2.gif" alt="" id="BLOGGER_PHOTO_ID_5173973441606515026" border="0" /&gt;&lt;/a&gt;
&lt;/li&gt;&lt;li&gt;Finally, you need to configure the development plugins in the IDE. Open &lt;span style="font-weight: bold;"&gt;Run &lt;/span&gt;&gt; &lt;span style="font-weight: bold;"&gt;Run Dialog...&lt;/span&gt;, select &lt;span style="font-weight: bold;"&gt;OSGi on Device&lt;/span&gt; from the list on the left and then fill in the form, entering the IP address in the &lt;span style="font-weight: bold;"&gt;Device IP&lt;/span&gt; field.
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u_AwGCJrcIw/R82nUKhC-XI/AAAAAAAAAA0/0lN6BOZJSsI/s1600-h/eclrundialog.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_u_AwGCJrcIw/R82nUKhC-XI/AAAAAAAAAA0/0lN6BOZJSsI/s320/eclrundialog.gif" alt="" id="BLOGGER_PHOTO_ID_5173975511780751730" border="0" /&gt;&lt;/a&gt;
&lt;/li&gt;&lt;/ol&gt;Now you can try to run the sample application in the Emulator. Click &lt;span style="font-weight: bold;"&gt;Run&lt;/span&gt;! You should see something like this:
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u_AwGCJrcIw/R82mXKhC-WI/AAAAAAAAAAs/ZksOyBSRXtE/s1600-h/running.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_u_AwGCJrcIw/R82mXKhC-WI/AAAAAAAAAAs/ZksOyBSRXtE/s320/running.gif" alt="" id="BLOGGER_PHOTO_ID_5173974463808731490" border="0" /&gt;&lt;/a&gt;&lt;p&gt;

&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;em&gt;&lt;strong&gt;Final Notes&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

After the installation of Titan Device Tools, a black and blue disc-like icon appears on the task bar. This is  a simple application that allows you to manage the lifecycle of the OSGi framework on the device. By default the framework is always running, you can use this application to stop or
restart it. Notice that the icon is animating while an operation is in progress!

WM6 Emulator emulates an ARM CPU and executes ARM native code, which is quite resource demanding, so don't expect too quick operation. In particular, when you start the emulator, it is useful to wait until the framework completely starts, before trying to run an application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5483741054242776395-1066781643899796776?l=picisblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://picisblog.blogspot.com/feeds/1066781643899796776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5483741054242776395&amp;postID=1066781643899796776' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/1066781643899796776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/1066781643899796776'/><link rel='alternate' type='text/html' href='http://picisblog.blogspot.com/2008/03/developing-titan-applications-tools.html' title='Developing Titan Applications - Tools'/><author><name>Pici</name><uri>http://www.blogger.com/profile/04094299517370355247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_u_AwGCJrcIw/ShLVr6OtpiI/AAAAAAAAADk/o2JQpvIy_Xw/S220/GaborPecsy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_u_AwGCJrcIw/R82lbqhC-VI/AAAAAAAAAAk/noigxMDc_Dg/s72-c/netcfg2.gif' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5483741054242776395.post-8658798204014545290</id><published>2008-02-19T18:38:00.009+01:00</published><updated>2008-02-19T19:12:31.726+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>A Comparision of OSGi and Android</title><content type='html'>&lt;span style="font-style: italic; font-weight: normal;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Author's note: this article was originally posted to the &lt;a href="http://www.adon-line.de/kunden/prosystBlog/"&gt;ProSyst blog&lt;/a&gt;. I just publish it here as well, without changing the content.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;


&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;em&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;a href="http://www.google.com/" title="Google" target="_blank"&gt;Google&lt;/a&gt; and the &lt;a href="http://www.openhandsetalliance.com/" title="Open Handset Alliance" target="_blank"&gt;Open Handset Alliance&lt;/a&gt; announced the &lt;a href="http://code.google.com/android/" target="_blank" title="Android"&gt;Android&lt;/a&gt; platform late last year. Shortly after that the &lt;a href="http://code.google.com/android/documentation.html" title="Android SDK" target="_blank"&gt;Android SDK&lt;/a&gt; was published to the developer community and an exciting &lt;a href="http://code.google.com/android/adc.html" title="10 million dollar developer challenge" target="_blank"&gt;10 million dollar developer challenge&lt;/a&gt; was announced too, which generated lots of developer interest. Due to this interest and the support of a number of industry players, Android is expected to gain significant market share in the future.

&lt;p align="left"&gt;&lt;a href="http://www.osgi.org/" title="OSGi" target="_blank"&gt;OSGi&lt;/a&gt; is a technology that has been developed for 10 years. Originally created to be the core platform of home gateways, slowly it was adapted in a number of verticals, including automotive industry or enterprise applications. In 2006, Release 4 of OSGi was published, which includes support for mobile phones and other handheld devices. Based on this technology, &lt;a href="http://www.jcp.org/en/jsr/detail?id=232" title="JSR-232" target="_blank"&gt;JSR-232 &lt;/a&gt;defines a dynamic, manageable component platform for mobile devices. Nokia eRCP platform, which is available for E90 and some other S60 3.1 devices, is based on JSR-232. The same technology is used by the Sprint Titan platform, for which devices will hit the market in 2008.&lt;/p&gt;
&lt;p&gt;Both OSGi and Android define a development platform for component-based development and provide an implementation for the service-oriented architecture, within the mobile device. &lt;strong&gt;So, are they the same or completely different?&lt;/strong&gt;&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u_AwGCJrcIw/R7sU5YbjqZI/AAAAAAAAAAc/6ZpdSv_9HG4/s1600-h/ddfg.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_u_AwGCJrcIw/R7sU5YbjqZI/AAAAAAAAAAc/6ZpdSv_9HG4/s320/ddfg.gif" alt="" id="BLOGGER_PHOTO_ID_5168747973380909458" border="0" /&gt;&lt;/a&gt;

&lt;p align="left"&gt;
Admittedly, there are a number of similarities as well as some key differences. This article provides a high-level comparison of the two platforms, highlighting these key differences.&lt;/p&gt;

&lt;p align="left"&gt;&lt;span style="font-size:130%;"&gt;&lt;em&gt;&lt;strong&gt;Comparison&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Runtime Environment&lt;/strong&gt;&lt;/p&gt;
&lt;p align="left"&gt;Though somewhat external to the platforms, it worths to have a look at the runtime environments in which the two platforms are used.&lt;/p&gt;
&lt;p&gt;OSGi can be used in a number of standard Java environments. It defines the minimum runtime requirements – so called Minimum Execution Environment – and any Java implementation that meets those requirements is sufficient to run OSGi. Minimum EE is a quite small API subset, which ensures that OSGi is usable in a wide variety of Java Runtimes, including JSE 1.1 or JME CDC1.0/FP1.0 as examples. This gives OSGi the required flexibility, which makes it applicable in a wide range of verticals from home automation to mobile devices. Frankly, OSGi extends a Java VM by introducing additional runtime execution environment features like the component model.
&lt;/p&gt;
&lt;p align="left"&gt;Android is an operating system with a new and proprietary application runtime technology. Though the applications are developed using the Java language, they are then compiled to a proprietary byte code format and are executed on the Dalvik Virtual Machine, a special VM created for Android. It is interesting to note that if converted to a Dalvik Executable, OSGi can be run on Android.&lt;/p&gt;
&lt;p&gt;A key difference between the two platforms is that while Android applications are executed in &lt;strong&gt;separate instances&lt;/strong&gt; of the DVM, OSGi executes all applications in the same JVM. Executing application in separate DVM instances – i.e. separate OS processes – has the advantage of easier resource management and resource reclamation, when applications need to be stopped forcefully. On the other hand, it requires more memory and communication between components is more complex and more expensive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Component Model&lt;/strong&gt;
&lt;/p&gt;&lt;p&gt;Though both OSGi and Android are component platforms, there are a number of differences between their approaches. Probably the most important difference is the class-sharing ability of OSGi. Android components are executed in separate processes, which are fully isolated. It is not possible for a component to load a class from another one. This means that when a component uses the services of another component, all the service interfaces and parameter classes must be part of the client component as well, which creates a strong coupling between components and leads to unnecessary code duplication, which makes the maintenance very complicated. OSGi uses a classloader-based isolation model, which allows the components (bundles in OSGi terminology) to selectively export some of their internal packages to other bundles. Bundles can declare their package dependencies and the framework is responsible for matching the required and provided packages and make sure that the system is consistent. These mechanisms ensure that there’s no need to duplicate code among bundles and it helps to reduce the coupling of bundles and simplifies maintenance.&lt;/p&gt;
&lt;p align="left"&gt;A related difference between the two models is component versioning. In OSGi, everything is versioned, while Android provides no support for versioning at all. Though at first glance, the extensive use of versioning may seem to be annoying in OSGi, the use of version numbers and version ranges enables the platform to very elaborately manage dependencies between components and thereby ensure that the whole system is in a consistent shape. This is extremely important for post-shipment maintenance of the platform.&lt;/p&gt;

&lt;p align="left"&gt;&lt;strong&gt;Service Model&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The key difference between the two platform’s service models is the service access. In OSGi, services are lightweight. They are accessed using direct method calls, they are easy and cheap to use. In Android, services are heavyweight. They are accessed using inter-process communication, which makes service access slower and more expensive. This leads to a different style of using services. In OSGi, services are used extensively and they play a very important role in keeping components lightweight and loosely coupled. In Android, services are coarse grained and will likely be used much less frequently. While in OSGi services can be used as plugins to other applications, in Android they are closer to the traditional web service model.&lt;/p&gt;

&lt;p align="left"&gt; &lt;strong&gt;Application Model&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Android defines its own application model. Applications can be constructed from components of four types. Activities are components, which interact with the device user. Services are background execution tasks. Content Providers are data stores and Intent Listeners are event handlers for system-wide events.&lt;/p&gt;
&lt;p align="left"&gt;OSGi is application model agnostic. It defines a component model, where components – bundles – have a lifecycle, but it doesn’t define a concrete application model. Rather, it can host a number of application model. &lt;a href="http://www.eclipse.org/" target="_blank" title="Eclipse Foundation"&gt;Eclipse Foundation&lt;/a&gt; defined (embedded) Rich Client Platform, an application model based on OSGi bundles. JSR-232 defines the Foreign Application Model, which allows OSGi to host any existing application model. This is particularly interesting in the light of the next wave of mobile application fragmentation. The number of open mobile application platforms grows rapidly. A variety of different Linux systems (LiMO, Qt, etc.) and Java platforms (Android, JavaFx, CDC Java) add to the well known “oldies” like MIDP, S60 and Win Mobile. How could a carrier or an enterprise ever support such a fleet? OSGi is one answer – pick the application model you like and run it on any platform!&lt;/p&gt;

&lt;p align="left"&gt;&lt;strong&gt;Manageability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the key requirements for mobile devices – especially in the smart-phone segment – is remote manageability (often also referred to as MDM, Mobile Device Management). MDM includes device configuration, application deployment and maintenance, status monitoring, data backup and replication services. While device complexity, use cases and volumes increase, the ability to remotely manage devices becomes vital for mobile operators and enterprises. JSR-232 defines a mobile service platform, which is designed from the ground up to support device management. As a result, a device administrator is in full control of all components running on the device, he can monitor and control all aspects of the device without requiring the application developer to deal with this complexity.

Device management is not visible in Android. Presumably, it is left up to OEMs and operators to take care of. Though a platform should make MDM as transparent to developers as possible, still there are some aspects developers are concerned with:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Versioning – it is a simple feature but it’s the key for manageability. Without versioning support, it is impossible to manage updates and dependencies.&lt;/li&gt;&lt;li&gt;Management-related APIs – though some basic APIs (configuration, logging) are present, there are a number of APIs missing, like deployment, lifecycle management or monitoring.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;How can enterprises update their Android devices with a newer application version?&lt;/p&gt;

&lt;p align="left"&gt;&lt;strong&gt;Standards&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;An important difference between the two platforms is their grounding on standards. OSGi is a standard that has been developed for ten years and reached a high level of maturity. It has been adopted by a number of JSR in &lt;a href="http://www.jcp.org/" target="_blank" title="JCP"&gt;JCP&lt;/a&gt; and there are number of independent commercial and open source implementations, optimized for different fields of use. In addition, the OSGi Alliance has very strong backwards compatibility requirements.&lt;/p&gt;
&lt;p&gt;Android is an open source initiative, where APIs are defined by the implementation itself, which is currently managed by a single company. Though this approach is a lot more flexible, the lack of a specification standard, the lack of backwards compatibility and the lack of acceptance tests bear significant fragmentation risks to the community. How does Android look like tomorrow?&lt;/p&gt;

&lt;p align="left"&gt;&lt;strong&gt;Does Open Mean Undefined?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The biggest challenge of comparing Android to another platform is the large number of open questions. Android so far published the SDK for application developers, which focuses on the areas that Google thinks are of developers’ concern. As long as you want to develop simple end user applications, you probably have what you need. But if you happen to develop a complex application package, maybe an enterprise application or an application suite, where security, deployment, configuration and other management functions are important, you realize that all these are left open i.e. the platform doesn’t specify them and you have to build your application on assumptions. Cross-implementation compatibility of Android will be an interesting topic to observe.&lt;/p&gt;

&lt;p align="left"&gt;&lt;span style="font-size:130%;"&gt;&lt;em&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;The two platforms give very different solutions for the same question. Process-based isolation model in Android is an advantage in resource management on the other hand the lack of class-sharing ability seriously limits the sharing of components and makes platform management very difficult. The lack of versioning and lack of management APIs is a further limitation. Presumably, OEMs will provide some solutions for these important requirements; however those will be proprietary and will lead to fragmentation of the platform. The lack of standard and acceptance testing also increase the fragmentation risk. Though Android has some promising features, there seems to be a long way to go to reach maturity.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5483741054242776395-8658798204014545290?l=picisblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://picisblog.blogspot.com/feeds/8658798204014545290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5483741054242776395&amp;postID=8658798204014545290' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/8658798204014545290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/8658798204014545290'/><link rel='alternate' type='text/html' href='http://picisblog.blogspot.com/2008/02/introduction-google-and-open-handset.html' title='A Comparision of OSGi and Android'/><author><name>Pici</name><uri>http://www.blogger.com/profile/04094299517370355247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_u_AwGCJrcIw/ShLVr6OtpiI/AAAAAAAAADk/o2JQpvIy_Xw/S220/GaborPecsy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_u_AwGCJrcIw/R7sU5YbjqZI/AAAAAAAAAAc/6ZpdSv_9HG4/s72-c/ddfg.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5483741054242776395.post-3267686578782573829</id><published>2008-02-18T15:46:00.006+01:00</published><updated>2008-02-18T16:06:58.952+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='specification'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>OSGi Specification as a book</title><content type='html'>I don't know how you feel, but books are special for me.  A book, you can touch it, you can feel it and it smells like.... well, like a book. I know that the use of electronic media is more economic, easier to access  and more environment friendly, but I  just have to have my favorites in hard copy as well.
If you are dealing with &lt;a href="http://www.osgi.org/"&gt;OSGi&lt;/a&gt;, the ultimate source of information is the Specification. As opposed to many sloppy specifications, OSGi specs are well-written, easy to read, with lots of explanations and pointers to additional material, they are more like a book than a usual spec. And finally, the Release 4 version of OSGi specification is &lt;a href="http://www.aqute.biz/Blog/20080205"&gt;available as a book&lt;/a&gt;. I really have to have a copy! The only sad thing is that the book contains the core platform specification only, the R4 mobile specification - a separate book - is not (yet?) available.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5483741054242776395-3267686578782573829?l=picisblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://picisblog.blogspot.com/feeds/3267686578782573829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5483741054242776395&amp;postID=3267686578782573829' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/3267686578782573829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5483741054242776395/posts/default/3267686578782573829'/><link rel='alternate' type='text/html' href='http://picisblog.blogspot.com/2008/02/osgi-specification-as-book.html' title='OSGi Specification as a book'/><author><name>Pici</name><uri>http://www.blogger.com/profile/04094299517370355247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_u_AwGCJrcIw/ShLVr6OtpiI/AAAAAAAAADk/o2JQpvIy_Xw/S220/GaborPecsy.jpg'/></author><thr:total>1</thr:total></entry></feed>
