<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="http://blogs.forum.nokia.com/styles/rss.css" type="text/css"?>
<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
  xmlns="http://my.netscape.com/rdf/simple/0.9/"
>

 <channel>
  <title>Daniel Rocha&#039;s Forum Nokia Blog</title>
  <link>http://blogs.forum.nokia.com/blog/daniel-rochas-forum-nokia-blog</link>
  <description>&lt;p&gt;A blog about everything that sounds interesting to me and Forum Nokia audience.&lt;/p&gt;
</description>
 </channel>
    <item>
   <title>Is the Java Community Process hindering innovation in Java ME?</title>
   <description>&lt;p&gt;
Specifying new APIs and functionalities through the JCP seems a good idea at a first glance, right? This limits fragmentation in the Java platform, ensures the APIs are agreed upon by a number of stakeholders, and limits the adoption of proprietary APIs by manufacturers, making them resort to the &amp;quot;official&amp;quot; APIs defined by the JSR expert groups.
&lt;/p&gt;
&lt;p&gt;
In the desktop and server environments, this seems to be working wonderfully well: new features are added and released aggressively, keeping Java at pace with or ahead of the most modern development technologies and other languages.
&lt;/p&gt;
&lt;p&gt;
But what has it done for mobile development?&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Granted, MIDP 2.0 was a great thing and optional APIs based on it were created and adopted very fast by just about everybody. This opened new doors for the development of sophisticated Java ME applications using Bluetooth, file system, multimedia, location, web services, the works. However, this process seems to have stopped circa 2004.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Take &lt;a href=&quot;http://forum.nokia.com/devices/3250&quot;&gt;Nokia 3250&lt;/a&gt; for example: launched in 2005, it had a nice API package for that time, and i liked it. Now look at the &lt;a href=&quot;http://www.forum.nokia.com/devices/N96&quot;&gt;Nokia N96&lt;/a&gt;: latest of the latest from Nokia, has dozens of new hardware and native C++ functionalities, three new runtimes (Python, WRT and Flash 3). What is new on it&#039;s Java? MIDP 2.1 (zzz), eSWT (not a JSR) and IAP UI (proprietary). The core runtime support is the same as a 2.5 year old device. Where is the innovation?&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
In 2 and a half years, we saw the rise of two entirely new platforms: Android and iPhone, dozen new runtimes for mobiles (Python, Flash, WRT, WidSets) and .NET Compact Framework becoming a serious contender. What have we seen in Java ME? MIDP3 has been in the works since 2004! 
&lt;/p&gt;
&lt;p&gt;
4 years is enough time for many new platforms and runtimes to emerge, but not enough for finishing a spec? This is my question to you: is Java ME lagging behind as an innovation platform because of JCP?&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Your opinions are eagerly awaited.
&lt;/p&gt;
&lt;p&gt;
[]s&lt;br /&gt;
Daniel&amp;nbsp;
&lt;/p&gt;</description>
   <link>http://blogs.forum.nokia.com/blog/daniel-rochas-forum-nokia-blog/2008/08/29/java_me_jcp</link>
      <pubDate>Fri, 29 Aug 2008 20:37:57 +0000</pubDate>   
  </item>
    <item>
   <title>Which technology should I use for development? Round 1: Java</title>
   <description>&lt;p&gt;
If I had just made a dollar each time I heard this question...&amp;nbsp; *&lt;strong&gt;sigh&lt;/strong&gt;*.
&lt;/p&gt;
&lt;p&gt;
With the availability of so many different development technologies in Nokia&#039;s platforms today, sometimes is hard to decide which of them we should use to build our application, isn&#039;t it? There&#039;s Java, Symbian C++, Open C, Flash Lite, WidSets, WRT Widgets, Python, and the list is still growing. 
&lt;/p&gt;
&lt;p&gt;
This is good news for developers, since not everybody has the same technical background nor is developing the same kinds of applications; this means at least one of the technologies will fit our experience and purpose like a glove, and we are going to use it. On the other side, this may confuse newcomers to the wonderful but fragmented mobile software world. Usually it goes like this:&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Question: &lt;/strong&gt;&amp;quot;I want to write an application that opens a file and sends it out to a web server. What should I use to create it?&amp;quot;&lt;br /&gt;
&lt;strong&gt;Answer 1: &lt;/strong&gt;&amp;quot;Java ME, FileConnection API&amp;quot;&lt;br /&gt;
&lt;strong&gt;Answer 2: &lt;/strong&gt;&amp;quot;Don&#039;t bother, use C++ or you will get a lot of security prompts.&amp;quot;&lt;br /&gt;
&lt;strong&gt;Answer 3: &lt;/strong&gt;&amp;quot;Why use C++ when you can do the same with Python? C++ is way too hard!&amp;quot; &lt;br /&gt;
&lt;strong&gt;Answer 4: &lt;/strong&gt;&amp;quot;Python does not run on S40, use Java.&amp;quot;&lt;br /&gt;
&lt;strong&gt;Answer 5: &lt;/strong&gt;&amp;quot;Do you really need all that jazz? Why don&#039;t you go with Flash Lite and use server-based persistence? Your application will look great!&amp;quot;&lt;br /&gt;
&lt;strong&gt;Answer 6: &lt;/strong&gt;&amp;quot;Flash Lite is too fragmented. Use Java, but beware of the MIDlet signing issues or your app&#039;s user experience will be crap!&amp;quot;
&lt;/p&gt;
&lt;p&gt;
Go check the &lt;a href=&quot;http://discussion.forum.nokia.com&quot;&gt;Discussion Boards&lt;/a&gt;. It is crowded with examples of conversations like the one above. Having answered this question so many times before, I decided to summarize my answers in this blog, in the hopes of helping developers decide what use from the growing technology options pool offered in mobile devices these days. Please keep in mind that the following are my opinions on the subject; yours may differ and even prove mine wrong, but that&#039;s the beauty of interacting with people within a community. As the number of technologies it too big for a single post, I will continue my analysis in the upcoming posts. I will start off with the most popular mobile developmentp platform, Java ME.
&lt;/p&gt;
&lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;
&lt;p&gt;
&lt;strong&gt;
Technology:&lt;/strong&gt; Java
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Good for:&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;u&gt;Productivity applications&lt;/u&gt; - Examples: sports trackers, expense control apps, Personal Information Management (calendar, phonebook, etc.). &lt;/li&gt;
	&lt;li&gt;&lt;u&gt;Games&lt;/u&gt; - Both casual and complex.&lt;/li&gt;
	&lt;li&gt;&lt;u&gt;Enterprise applications&lt;/u&gt; - These don&#039;t require fancy user interfaces. Using LCDUI and the standard packages can go a long way pretty fast.&lt;/li&gt;
	&lt;li&gt;&lt;u&gt;Rapid prototyping&lt;/u&gt; and &lt;u&gt;proof-of-concept&lt;/u&gt; applications. &lt;/li&gt;
	&lt;li&gt;&lt;u&gt;Network applications&lt;/u&gt; - RSS readers, weather services, blogging applications, mobile versions of Web applications. &lt;/li&gt;
	&lt;li&gt;Creating truly &lt;u&gt;portable apps&lt;/u&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Why?&lt;/strong&gt;&amp;nbsp;
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;u&gt;Java and its mobile version are very simple to use and learn&lt;/u&gt; -&amp;nbsp; An experienced programmer, even coming from other C/C++-based languages, can get a pretty good working knowledge of how everything works in a matter of weeks and start producing applications quickly. This leads to faster time-to-market for Java ME apps. &lt;/li&gt;
	&lt;li&gt;&lt;u&gt;Applications are generally portable&lt;/u&gt; between S60 and S40 platforms - Although there are some differences in implementation, supported packages, audio/video formats and so on, those are few in number and thus easier to work around. You don&#039;t need to entirely rewrite your application so it will run on N95 instead of 6131: a few runtime checks and versioning tools will be enough. &lt;/li&gt;
	&lt;li&gt;&lt;u&gt;Game API&lt;/u&gt; combined with optional packages makes it a killer for game development &lt;/li&gt;
	&lt;li&gt;S&lt;u&gt;traightforward network API makes it easy to communicate with web services&lt;/u&gt; - The GCF (Generic Connection Framework) is a simple and unified way of using the network on Java ME applications. Once you learn how to do one kind of connection, you will have learned them all.  
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Bad for:&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;u&gt;Accessing device resources&lt;/u&gt; - Examples: SMS Inbox, file system, gallery, hardware.&lt;/li&gt;
	&lt;li&gt;&lt;u&gt;Multimedia applications&lt;/u&gt; - Examples: Video streaming players, audio and video recorders, camera applications.&lt;/li&gt;
	&lt;li&gt;&lt;u&gt;Performance-intensive applications&lt;/u&gt; - Scientific computing, image processors, video decoders, sound processors. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Why?&amp;nbsp;&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Java&#039;s functionalities depend on Java Community Process process:
	if there&#039;s no official, industry-standard API for what you want to do,
	you are out of luck. Example: accessing SMS inbox. &lt;/li&gt;
	&lt;li&gt;Mobile Media API implementation is (too) highly modular, a lot of runtime checks are needed. Also, most functionality is implemented on the native side and then made available to Java&#039;s virtual machine, such as the camera access. This may have a serious impact on performance. &lt;/li&gt;
	&lt;li&gt;Fine-grained control over video, audio and camera is generally not available. Although JSR 234 (Advanced Multimedia Supplements) tackles some of these issues, it still can&#039;t be compared to what&#039;s available on other technologies, and its device availability is still low.  &lt;/li&gt;
	&lt;li&gt;Access to the file system is provided by FileConnection API, but it&#039;s somewhat restricted and requires the midlet to be signed, otherwise multiple security prompts will be displayed, taking your user to tears (believe me). The signing process itself costs money and has some bureaucracy, so be prepared.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
As I said before, these are my opinions on the technologies. It does not mean that X is better than Z, and Z should be thrown into the dirt and kicked in the head, like XML in the funny &lt;a href=&quot;http://burningbird.net/writing/the-parable-of-the-languages/&quot;&gt;The Parable of the Languages&lt;/a&gt;. If you get your requirements right, it&#039;s very likely that your question of &amp;quot;what to use&amp;quot; will answer itself. Need to access the Inbox? Down with Java. Need portability? Down with Python and C++. Fancy UI? Flash. Requirements management is a science, not an art, so when you get it right from the start, the development technology to use will pop up naturally.&lt;br /&gt;
&lt;p&gt;
Next time I will cover the darling of all Internet programmers, now getting much of the attention on S60 platform: Python.
&lt;/p&gt;
&lt;p&gt;
See you! 
&lt;/p&gt;</description>
   <link>http://blogs.forum.nokia.com/blog/daniel-rochas-forum-nokia-blog/2008/05/27/which_technology</link>
      <pubDate>Tue, 27 May 2008 18:29:05 +0000</pubDate>   
  </item>
    <item>
   <title>Want a sexy UI in your Java MIDlet? It&#039;s now possible with LWTUI! (with video)</title>
   <description>&lt;p&gt;
Sexy UIs are all the rage today, right? FlashLite apps, WRT Widgets, WidSets, all of them have distinctive user experiences which differ greatly from the way we interact with native S40 and S60 applications. More colors, more animations, better usability, all making up a great way for developers to differentiate their applications and make them more attractive to the end user.
&lt;/p&gt;
&lt;p&gt;
In Java MIDlets however, you are stuck with a very poor UI toolkit, the LCDUI, which has very few components and few options on how to alter their appearance; most of the time you&#039;re giving hints to the underlying implementation regarding the way you want the components to be displayed. Even if you do so, however, there&#039;s still a big chance your hints will be ignored and the UI will be rendered differently on each device. This can be a pain if you are developing for many different phones, with different screen sizes, input methods and form factors. Actually, to be fair, this can be a pain even if your target is a single device.
&lt;/p&gt;
&lt;p&gt;
To circumvent these challenges, developers had either to developer their own UI toolkits, based on raw Canvasses, or use a 3rd. party toolkit such as &lt;a href=&quot;http://www.j2mepolish.org&quot; title=&quot;J2ME Polish&quot;&gt;J2ME Polish&lt;/a&gt;, which is great but requires a paid license to develop commercial applications, and this can be an unbearable cost to a small developer.
&lt;/p&gt;
&lt;p&gt;
Searching the web and some mailing lists, I found this very interesting project, called &lt;a href=&quot;https://lwuit.dev.java.net/&quot;&gt;LTWUI (Lightweight UI Toolkit)&lt;/a&gt;, which is a cross-device UI toolkit created to provide developers with the possibility of developing compelling user interfaces without writing painful low-level Canvas code. It&#039;s based on Swing programming paradigm and it&#039;s key functionalities are: 
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://blogs.forum.nokia.com//data/blogs/resources/300002/Screenshot0021.jpg&quot; /&gt;&lt;br /&gt;
&lt;em&gt;&amp;nbsp;LWTUI demo midlet running on E61i&lt;/em&gt;
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Swing Like MVC&lt;/li&gt;
	&lt;li&gt;Layouts&lt;/li&gt;
	&lt;li&gt;PLAF &amp;amp; Themes&lt;/li&gt;
	&lt;li&gt;Fonts&lt;/li&gt;
	&lt;li&gt;Touch Screen&lt;/li&gt;
	&lt;li&gt;Animations &amp;amp; Transitions&lt;/li&gt;
	&lt;li&gt;Rich widgets&lt;/li&gt;
	&lt;li&gt;3D Integration&lt;/li&gt;
	&lt;li&gt;Painters&lt;/li&gt;
	&lt;li&gt;Modal Dialogs&lt;/li&gt;
	&lt;li&gt;External Tools&lt;/li&gt;
	&lt;li&gt;I18N/L10N&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
It&#039;s still in Early Access release but you can go to the project page and download it so you can play around with the toolkit and run its demos on emulators and real devices. The great thing is that the library is released under the Sun Licensing Agreement (SLA) which makes it usable by commercial applications without having to pay any fee.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
I ran the LWTUIDemo midlet on my Nokia E61i and N95 and it worked beautifully. It&#039;s a bit slow though, but nothing that compromises the user experience. I recorded a video of LWTUI running on my N95, so you can see what&#039;s up for use in your Java apps; I guarantee you will enjoy it.
&lt;/p&gt;
&lt;p&gt;
Last but not least, the project is open source, so you can contribute to it, just go to the &lt;a href=&quot;https://lwuit.dev.java.net/&quot;&gt;project page&lt;/a&gt; for more details on how to participate.
&lt;/p&gt;
&lt;p&gt;
Here&#039;s the video, enjoy it:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;object type=&quot;application/x-shockwave-flash&quot; width=&quot;450&quot; height=&quot;350&quot; data=&quot;http://www.youtube.com/v/qAWMy_O7zrU&quot; id=&quot;ltVideoYouTube&quot;&gt;
	&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/qAWMy_O7zrU&quot; /&gt;
	&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot; /&gt;
	&lt;param name=&quot;allowScriptAcess&quot; value=&quot;sameDomain&quot; /&gt;
	&lt;param name=&quot;quality&quot; value=&quot;best&quot; /&gt;
	&lt;param name=&quot;bgcolor&quot; value=&quot;#FFFFFF&quot; /&gt;
	&lt;param name=&quot;FlashVars&quot; value=&quot;playerMode=embedded&quot; /&gt;
&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;
[]s&lt;br /&gt;
Daniel&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;</description>
   <link>http://blogs.forum.nokia.com/blog/daniel-rochas-forum-nokia-blog/2008/05/14/lwtui_toolkit</link>
      <pubDate>Wed, 14 May 2008 22:23:39 +0000</pubDate>   
  </item>
    <item>
   <title>A little bit of hot Java</title>
   <description>&lt;p&gt;
Pretty interesting document posted by Aleksi Uotila on&amp;nbsp;the &lt;a href=&quot;http://blogs.s60.com/java/2008/04/eswt_article_posted.html&quot;&gt;S60 Java blog&lt;/a&gt;, containing a PDF document about S60 3.2&#039;s eSWT plug-in for Java applications. I have been using this toolkit&#039;s desktop version for years and I must say I have never looked back to Swing or AWT, so I really hope there&#039;s more development on this side for mobile devices, since innovation on Java platform has been a bit slow these days, partly due to the JCP process and everything.
&lt;/p&gt;
&lt;p&gt;
Here are some screenshots of how eSWT apps look like:
&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;http://blogs.s60.com/java/eswt/setting_jing.PNG&quot; border=&quot;0&quot; width=&quot;242&quot; height=&quot;324&quot; /&gt;&amp;nbsp;&lt;img src=&quot;http://blogs.s60.com/java/eswt/compose_haze.PNG&quot; border=&quot;0&quot; width=&quot;242&quot; height=&quot;321&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
Direct link to the article &lt;a href=&quot;http://blogs.s60.com/java/S60_eSWT_article.pdf&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
******************************************
&lt;/p&gt;
&lt;p&gt;
After Carbide.j&#039;s demise, I have been working hard to get used to the other toolsets in the market. Adaptation to NetBeans Mobility Pack was pretty swift, but I can&#039;t say the same about EclipseME, since I had many conflicts with my version of Eclipse, &lt;a href=&quot;http://wiki.forum.nokia.com/index.php/Installing_Java_ME_development_tools_for_S60&quot;&gt;but thanks to Leisti&#039;s article on Wikipedia&lt;/a&gt;&amp;nbsp;I finally got what works with what then my setup is now running smoothly, and I&#039;m a big fan of C-like macro preprocessing, which helps a lot in reducing the problems of device fragmentation. EclipseME, as well as NetBeans, have this feature and I love it, specially when dealing with &amp;quot;new&amp;quot; APIs not available across S40 and S60 (Location API, do you hear me?) and also with the (too) highly modular Mobile Media API.
&lt;/p&gt;
&lt;p&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
// #ifdef DEBUG&lt;br /&gt;
System.out.println(&amp;quot;Some debug output&amp;quot;);&lt;br /&gt;
// #endif&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/code&amp;gt;
&lt;/p&gt;
&lt;p&gt;
******************************************
&lt;/p&gt;
&lt;p&gt;
Speaking of fragmentation, the other day I was checking my GMail account and I came across an ad for &lt;a href=&quot;http://www.tirawireless.com/products/products_overview.asp&quot;&gt;Tira Jump 2008&lt;/a&gt;. For those who don&#039;t know it, Jump is a tool to facilitate application deployment across mobile devices, so you don&#039;t have to do it manually. I saw a presentation by these guys at JavaOne 2005 and was pretty impressed when they created a MIDlet game which could run on 120 devices almost automatically. Today they claim support to 1200 device models, which is quite a number! They have a free version of the tool that you can use to test the product and deploy your midlet in up to 12 different models. I&#039;ll give it a try later.
&lt;/p&gt;
&lt;p&gt;
******************************************
&lt;/p&gt;
&lt;p&gt;
Why so much JAVA? I&#039;m writing some chapters of an upcoming Java book for a well-known editor, so I have been thinking in Java instead of Portuguese for the past two weeks, and it&#039;s been fun. 
&lt;/p&gt;
&lt;p&gt;
Speaking of Portuguese, my native language, the &amp;quot;hot java&amp;quot; joke never made any sense to us, since we don&#039;t call our coffee &amp;quot;Java&amp;quot;, but I nevertheless inserted throughout the post just to please our English-speaking readers :)
&lt;/p&gt;</description>
   <link>http://blogs.forum.nokia.com/blog/daniel-rochas-forum-nokia-blog/2008/04/11/hotjava</link>
      <pubDate>Fri, 11 Apr 2008 16:36:34 +0000</pubDate>   
  </item>
  </rdf:RDF>

