<?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:blogger='http://schemas.google.com/blogger/2008' 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-7746035232350865175</id><updated>2026-10-20T16:43:41.119+01:00</updated><category term="java"/><category term="armel nene"/><category term="java developer"/><category term="netbeans"/><category term="web 2.0"/><category term="web applications"/><category term="api"/><category term="programming"/><category term="google"/><category term="twitter"/><category term="facebook"/><category term="gwt"/><category term="javafx"/><category term="open source"/><category term="google app engine"/><category term="java me"/><category term="social networking"/><category term="startups"/><category term="London Startups Group"/><category term="etapix"/><category term="mysql"/><category term="portlet"/><category term="ria"/><category term="sun"/><category term="technology"/><category term="youtube"/><category term="android"/><category term="apache"/><category term="architect"/><category term="bebo"/><category term="cloud"/><category term="cloud computing"/><category term="j2se"/><category term="jsr168"/><category term="liferay"/><category term="microblogging"/><category term="mobile market"/><category term="networking"/><category term="paas"/><category term="plugins"/><category term="rest web services"/><category term="revenue"/><category term="Adobe Flash"/><category term="Adobe Flex"/><category term="IBM"/><category term="IoT"/><category term="big data"/><category term="cloud developer"/><category term="direct message"/><category term="dynamic programming"/><category term="eclipse"/><category term="enterprise search"/><category term="interview"/><category term="iphone"/><category term="javscript"/><category term="news"/><category term="php"/><category term="plug-ins"/><category term="portal"/><category term="problem solving"/><category term="ruby"/><category term="start-ups"/><category term="visualization"/><category term="wave"/><category term="web services"/><category term="ATOM"/><category term="Apache Foundation"/><category term="IE8"/><category term="Internet Explorer"/><category term="JDeveloper"/><category term="JavaFx Composer plugin"/><category term="Oracle"/><category term="RAD"/><category term="RSS"/><category term="Software Patent"/><category term="ajax"/><category term="algorithm"/><category term="amazon beanstalk"/><category term="angularjs"/><category term="annotated"/><category term="anonymous"/><category term="architecture"/><category term="bit.ly"/><category term="business intelligence for web site"/><category term="chart"/><category term="chrome"/><category term="cio"/><category term="cloudbees"/><category term="complex algorithm"/><category term="compromised systems"/><category term="conference"/><category term="confession"/><category term="container"/><category term="data structure"/><category term="database"/><category term="db2"/><category term="desktop"/><category term="discussion"/><category term="distributed system"/><category term="dynamic type language"/><category term="eclipseLink"/><category term="event"/><category term="facebook apps"/><category term="fastest execution time"/><category term="file indexer"/><category term="football"/><category term="free analytics"/><category term="ftp"/><category term="gae j"/><category term="garage"/><category term="godaddy"/><category term="google analytics"/><category term="great mind"/><category term="hacked"/><category term="hackers"/><category term="heroku"/><category term="html5"/><category term="iaas"/><category term="interview question"/><category term="java interview"/><category term="java swing"/><category term="jmeter"/><category term="job interview"/><category term="jpa"/><category term="jquery"/><category term="jsf"/><category term="json"/><category term="line"/><category term="linkedin"/><category term="london"/><category term="lucene"/><category term="mental algorithm"/><category term="mobile"/><category term="mobile app"/><category term="mobile application"/><category term="nutch"/><category term="openid"/><category term="openshift"/><category term="opera"/><category term="oracle cloud"/><category term="parachute"/><category term="parachutist dilemma"/><category term="philosoper dilemma"/><category term="platform as a service"/><category term="primefaces"/><category term="real time analytics"/><category term="restful"/><category term="rich internet application"/><category term="saas"/><category term="safari"/><category term="server"/><category term="silverlight"/><category term="skype"/><category term="soap"/><category term="soccer"/><category term="solr"/><category term="sport"/><category term="static type language"/><category term="stolen passwords"/><category term="system integration"/><category term="threat"/><category term="time"/><category term="tinyurl"/><category term="traveling robot"/><category term="tutorial"/><category term="vision"/><category term="wcms"/><category term="wearable tech"/><category term="web"/><category term="web apps"/><category term="web browser"/><category term="web content management"/><category term="web crawler"/><category term="website report"/><category term="website traffic analyser"/><category term="windows azure"/><category term="woopra"/><title type='text'>A. Nene</title><subtitle type='html'>Enterprise Architect</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-6880558161665529610</id><published>2014-10-13T21:18:00.000+01:00</published><updated>2014-10-13T21:18:19.641+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="architect"/><category scheme="http://www.blogger.com/atom/ns#" term="architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="distributed system"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="rest web services"/><category scheme="http://www.blogger.com/atom/ns#" term="restful"/><category scheme="http://www.blogger.com/atom/ns#" term="soap"/><category scheme="http://www.blogger.com/atom/ns#" term="system integration"/><category scheme="http://www.blogger.com/atom/ns#" term="web applications"/><category scheme="http://www.blogger.com/atom/ns#" term="web services"/><title type='text'>Web Services Architecture – When to Use SOAP vs REST</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLsfIHwYFzXFU2TW71DiHv8zs6i50UdTWG1WgOyNeUXsnrFdPPSNl56i40XbtXiH8xdRpZWYtjNcaNacfuLZtzehStI_iJ8IoTaFcpO-EljVppVhaKt_j_9KVQIWo8H19-E9kfWPcoHpbz/s1600/screwupcolor.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLsfIHwYFzXFU2TW71DiHv8zs6i50UdTWG1WgOyNeUXsnrFdPPSNl56i40XbtXiH8xdRpZWYtjNcaNacfuLZtzehStI_iJ8IoTaFcpO-EljVppVhaKt_j_9KVQIWo8H19-E9kfWPcoHpbz/s1600/screwupcolor.png&quot; /&gt;&lt;/a&gt;&lt;span xmlns=&quot;&quot;&gt;SOAP (Simple Object Access Protocol) and REST (Representation State Transfer) are popular with developers working on system integration based projects. Software architects will design the application from various perspectives and also decides, based on various reasons, which approach to take to expose new API to third party applications. As a software architect, it is good practice to involve your development team lead during system architecture process. &lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;This article, based on my experience, will discuss when to use SOAP or REST web services to expose your API to third party clients.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;
&lt;span xmlns=&quot;&quot;&gt;Web Services Demystified&lt;/span&gt;&lt;/h2&gt;
&lt;span xmlns=&quot;&quot;&gt;Web services are part of the Services Oriented Architecture.  Web services are used as the model for process decomposition and assembly. I have been involved in discussion where there were some misconception between &lt;i&gt;web services &lt;/i&gt;and &lt;i&gt;web API&lt;/i&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;The W3C defines a &lt;a href=&quot;http://en.wikipedia.org/wiki/Web_service&quot;&gt;Web Service&lt;/a&gt; generally as:&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;
&lt;span xmlns=&quot;&quot;&gt;A software system designed to support interoperable machine-to-machine interaction over a network.&lt;/span&gt;&lt;/blockquote&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;
&lt;span xmlns=&quot;&quot;&gt;Web API also known as Server-Side Web API is a programmatic interface to a defined request-response message system, typically expressed in JSON or XML, which is exposed via the web – most commonly by means of an HTTP-based web server. (extracted from  &lt;a href=&quot;http://en.wikipedia.org/wiki/Web_API&quot;&gt;Wikipedia&lt;/a&gt;)&lt;/span&gt;&lt;/blockquote&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;Based on the above definition, one can insinuate when SOAP should be used instead of REST and vice-versa but it is not as simple as it looks. We can agree that &lt;i&gt;Web Services &lt;/i&gt;are not the same as &lt;i&gt;Web API&lt;/i&gt;. Accessing an image over the web is not calling a web service but retrieving a web resources using is Universal Resource Identifier. HTML has a well-defined standard approach to serving resources to clients and does not require the use of web service in order to fulfill their request.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;
&lt;span xmlns=&quot;&quot;&gt;Why Use REST over SOAP&lt;/span&gt;&lt;/h2&gt;
&lt;span xmlns=&quot;&quot;&gt;Developers are passionate people.  Let&#39;s briefly analyze some of the reasons they mentioned when considering REST over SOAP:&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;h3&gt;
&lt;span xmlns=&quot;&quot;&gt;REST is easier than SOAP&lt;/span&gt;&lt;/h3&gt;
&lt;span xmlns=&quot;&quot;&gt;I&#39;m not sure what developers refer to when they argue that REST is easier than SOAP.  Based on my experience, depending on the requirement, developing REST services can quickly become very complex just as any other SOA projects. What is your service abstracting from the client? What is the level of security required? Is your service a long running asynchronous process? And many other requirements will increase the level of complexity.  Testability: apparently it easier to test RESTFul web services than their SOAP counter parts. This is only partially true; for simple REST services, developers only have to point their browser to the service endpoints and a result would be returned in the response. But what happens once you need to add the HTTP headers and passing of tokens, parameters validation… This is still testable but chances are you will require a plugin for your browser in order to test those features. If a plugin is required then the ease of testing is exactly the same as using SOAPUI for testing SOAP based services.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;h3&gt;
&lt;span xmlns=&quot;&quot;&gt;RESTFul Web Services serves JSON that is faster to parse than XML&lt;/span&gt;&lt;/h3&gt;
&lt;span xmlns=&quot;&quot;&gt;This so called &quot;benefit&quot; is related to consuming web services in a browser. RESTFul web services can also serve XML and any MIME type that you desire. This article is not focused on discussing JSON vs XML; and I wouldn&#39;t write any separate article on the topic. JSON relates to JavaScript and as JS is very closed to the web, as in providing interaction on the web with HTML and CSS, most developers automatically assumes that it also linked to interacting with RESTFul web services. If you didn&#39;t know before, I&#39;m sure that you can guess that RESTFul web services are language agnostic.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;Regarding the speed in processing the XML markup as opposed to JSON, a performance test conducted by David Lead, Lead Engineer at MarkLogic Inc, find out to be a &lt;a href=&quot;http://balisage.net/Proceedings/vol10/html/Lee01/BalisageVol10-Lee01.html&quot;&gt;myth&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;h3&gt;
&lt;span xmlns=&quot;&quot;&gt;REST is built for the Web&lt;/span&gt;&lt;/h3&gt;
&lt;span xmlns=&quot;&quot;&gt;Well this is true according to Roy Fielding &lt;a href=&quot;https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf&quot;&gt;dissertation&lt;/a&gt;; after all he is credited with the creation of REST style architecture. REST, unlike SOAP, uses the underlying technology for transport and communication between clients and servers. The architecture style is optimized for the &lt;i&gt;modern&lt;/i&gt; web architecture. The web has outgrown is initial requirements and this can be seen through HTML5 and web sockets standardization. The web has become a platform on its own right, maybe &lt;i&gt;WebOS&lt;/i&gt;. Some applications will require server-side state saving such as financial applications to e-commerce.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;h3&gt;
&lt;span xmlns=&quot;&quot;&gt;Caching&lt;/span&gt;&lt;/h3&gt;
&lt;span xmlns=&quot;&quot;&gt;When using REST over HTTP, it will utilize the features available in HTTP such as caching, security in terms of TLS and authentication. Architects know that dynamic resources should not be cached. Let&#39;s discuss this with an example; we have a RESTFul web service to serve us some stock quotes when provided with a stock ticker. Stock quotes changes per milliseconds, if we make a request for BARC (Barclays Bank), there is a chance that the quote that we have receive a minute ago would be different in two minutes. This shows that we cannot always use the caching features implemented in the protocol. HTTP Caching be useful in client requests of static content but if the caching feature of HTTP is not enough for your requirements, then you should also evaluate SOAP as you will be building your own cache either way not relying on the protocol.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;h3&gt;
&lt;span xmlns=&quot;&quot;&gt;HTTP Verb Binding&lt;/span&gt;&lt;/h3&gt;
&lt;span xmlns=&quot;&quot;&gt;HTTP verb binding is supposedly a feature worth discussing when comparing REST vs SOAP. Much of public facing API referred to as RESTFul are more REST-like and do not implement all HTTP verb in the manner they are supposed to. For example; when creating new resources, most developers use POST instead of PUT. Even deleting resources are sent through POST request instead of DELETE.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;SOAP also defines a binding to the HTTP protocol. When binding to HTTP, all SOAP requests are sent through POST request.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;h3&gt;
&lt;span xmlns=&quot;&quot;&gt;Security&lt;/span&gt;&lt;/h3&gt;
&lt;span xmlns=&quot;&quot;&gt;Security is never mentioned when discussing the benefits of REST over SOAP. Two simples security is provided on the HTTP protocol layer such as basic authentication and communication encryption through TLS. SOAP security is well standardized through WS-SECURITY. HTTP is not secured, as seen in the news all the time, therefore web services relying on the protocol needs to implement their own rigorous security. Security goes beyond simple authentication and confidentiality, and also includes authorization and integrity. When it comes to ease of implementation, I believe that SOAP is that at the forefront.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;
&lt;span xmlns=&quot;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h2&gt;
&lt;span xmlns=&quot;&quot;&gt;This was meant to be a short blog post but it seems we got to passionate about the subject. &lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;I accept that there are many other factors to consider when choosing SOAP vs REST but I will over simplify it here. For machine-to-machine communications such as business processing with BPEL, transaction security and integrity, I suggest using SOAP. SOAP binding to HTTP is possible and XML parsing is not noticeably slower than JSON on the browser. For building public facing API, REST is not the undisputed champion. Consider the actual application requirements and evaluate the benefits. People would say that REST protocol agnostic and work on anything that has URI is beside the point. According to its creator, REST was conceived for the evolution of the web. Most so-called RESTFul web services available on the internet are more truly REST-like as they do not follow the principle of the architectural style. One good thing about working with REST is that application do not need a service contract a la SOAP (WSDL). WADL was never standardized and I do not believe that developers would implement it. I remember looking for Twitter WADL to integrate it.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;I will leave you to make your own conclusion. There is so much I can write in a blog post. Feel free to leave any comments to keep the discussion going.&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/6880558161665529610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2014/10/web-services-architecture-when-to-use.html#comment-form' title='23 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/6880558161665529610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/6880558161665529610'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2014/10/web-services-architecture-when-to-use.html' title='Web Services Architecture – When to Use SOAP vs REST'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLsfIHwYFzXFU2TW71DiHv8zs6i50UdTWG1WgOyNeUXsnrFdPPSNl56i40XbtXiH8xdRpZWYtjNcaNacfuLZtzehStI_iJ8IoTaFcpO-EljVppVhaKt_j_9KVQIWo8H19-E9kfWPcoHpbz/s72-c/screwupcolor.png" height="72" width="72"/><thr:total>23</thr:total><georss:featurename>London, UK</georss:featurename><georss:point>51.5073509 -0.12775829999998223</georss:point><georss:box>51.1912379 -0.77320529999998222 51.8234639 0.51768870000001777</georss:box></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-4075922529501184313</id><published>2014-10-01T08:55:00.000+01:00</published><updated>2014-10-01T08:55:29.529+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="angularjs"/><category scheme="http://www.blogger.com/atom/ns#" term="architect"/><category scheme="http://www.blogger.com/atom/ns#" term="dynamic programming"/><category scheme="http://www.blogger.com/atom/ns#" term="json"/><category scheme="http://www.blogger.com/atom/ns#" term="liferay"/><category scheme="http://www.blogger.com/atom/ns#" term="portlet"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="rest web services"/><category scheme="http://www.blogger.com/atom/ns#" term="wcms"/><category scheme="http://www.blogger.com/atom/ns#" term="web content management"/><title type='text'>Liferay and AngularJS Made Simple: Connecting AngularJS to a Backend with REST and JSON</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg9JeFDa_kJkUpVVFhiAi4cdZLS-wrg0lTE8e_dmQaQsc9nDbEHQRkOwMjmq1Wb_ahk_xoREAOt7c5Sr-QW5TTqcuPfTiqyxdtKQbSdfYaO-kWBmozkreHZt-WOnCagTDIWUOXyNsiHgts/s1600/angularjs.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg9JeFDa_kJkUpVVFhiAi4cdZLS-wrg0lTE8e_dmQaQsc9nDbEHQRkOwMjmq1Wb_ahk_xoREAOt7c5Sr-QW5TTqcuPfTiqyxdtKQbSdfYaO-kWBmozkreHZt-WOnCagTDIWUOXyNsiHgts/s1600/angularjs.png&quot; height=&quot;336&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;h1&gt;
&lt;span xmlns=&quot;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/h1&gt;
&lt;h1&gt;
&lt;span xmlns=&quot;&quot;&gt;Introduction&lt;/span&gt;&lt;/h1&gt;
&lt;span xmlns=&quot;&quot;&gt;Liferay is the leading Open Source Enterprise Portal. One may asked what an enterprise portal is and this question is very valid as it has been asked on every single Liferay project that I have worked. This blog post is not about defining what an enterprise portal is but it wouldn&#39;t be a crime if we provided a brief definition:&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;
&lt;span xmlns=&quot;&quot;&gt;An enterprise portal is a web application which provides services required by an enterprise such as: user management, authentication and authorisation services, ability to connect to third party applications and provide a single point of access to multiple applications, hence the &quot;portal&quot;.&lt;/span&gt;&lt;/blockquote&gt;
&lt;span xmlns=&quot;&quot;&gt;The above is my own definition and it could be extended to encompass web content management, content management system (CMS) and single sign on (SSO). This post is about Liferay and the use of its web content management system (WCMS) to create single page applications using AngularJS. The motivation to create portlets using AngularJS instead of Java is as:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Portlet development using Java is very expensive&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Not many Java developers with portlet experience&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Java portlets development requires heavy duty tools such as build tools, IDE and JVM&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Portlet developers need to be familiar with the Portlet API, lifecycle and framework&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span xmlns=&quot;&quot;&gt;We will focus on Liferay available RESTful web services API but do remember that you can create your own custom web services using Liferay service builder SDK.&lt;/span&gt;&lt;br /&gt;
&lt;h1&gt;
&lt;span xmlns=&quot;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/h1&gt;
&lt;h1&gt;
&lt;span xmlns=&quot;&quot;&gt;Liferay RESTFul API and Security&lt;/span&gt;&lt;/h1&gt;
&lt;span xmlns=&quot;&quot;&gt;Liferay ReSTFul and SOAP API implement the same security as the core library:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;API can be secured so that only authenticated users can access them (AUTHENTICATION)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;API can be secured so that only users with the right roles can executed certain API calls (AUTHORIZATION)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span xmlns=&quot;&quot;&gt;When creating your own custom API, Liferay Services Builder will create the necessary permission for the web services API.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;For a list of API available in Liferay, point your browser to the following&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;a href=&quot;http://&amp;lt;your-server-address&amp;gt;:&amp;lt;your-server-port&amp;gt;/api/jsonws&quot;&gt;http://&amp;lt;your-server-address&amp;gt;:&amp;lt;your-server-port&amp;gt;/api/jsonws&lt;/a&gt;&lt;br /&gt;    &lt;/span&gt;&lt;/blockquote&gt;
&lt;span xmlns=&quot;&quot;&gt;Liferay will provide a means of testing the services calls when the above URL is loaded. Most services execution will require authentication or a secured token to be passed on with the calls. This level of a security is required in an enterprise environment. It is possible to stop Liferay from checking for the secured token in &lt;i&gt;portal-ext.properties&lt;/i&gt; as&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;
&lt;span xmlns=&quot;&quot;&gt;Auth.token.check.enabled=false&lt;/span&gt;&lt;/blockquote&gt;
&lt;span xmlns=&quot;&quot;&gt;Software developments should promote code reuse, therefore by separating the business logic from the portlet code, developers can share the business logic with third party applications. &lt;/span&gt;&lt;br /&gt;
&lt;h1&gt;
&lt;span xmlns=&quot;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/h1&gt;
&lt;h1&gt;
&lt;span xmlns=&quot;&quot;&gt;Why Use AngularJS to Create Web Applications (Not Portlets)?&lt;/span&gt;&lt;/h1&gt;
&lt;span xmlns=&quot;&quot;&gt;This is not a tutorial on AngularJS. Developers should use the same approach for developing any AngularJS application to developing Liferay web applications.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;AngularJS is a popular JavaScript framework promoting Object Oriented Development (OOD) and Model View Controller (MVC) to the JavaScript community. Java developers are already custom with the methodology through the use of Spring MVC and JSF for front end developments. Developers familiar with Google Web toolkit (GWT) should find themselves in familiar territory. Now to answer the question of why use AngularJS to create web applications on Liferay?&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;AngularJS is JavaScript and therefore can be executed in the browser without recompilation and redeployment. Liferay Web Content Management System (WCMS) provides an HTML editor and content versioning. Liferay JSONWS API runs on the same server and can be accessed through the JavaScript written in the WCMS. AngularJS modules can be written in a third party editor such Notepad++ and uploaded to Liferay Content Management System (CMS). The Liferay CMS provides a link to the latest version of the file which can be referenced in the HTML/ JavaScript code. By creating the web services in Java through Liferay Services Builder, the java developer can focus on the business logic – including testing. The front end developer can utilise his skills in HTML and JavaScript to develop the user interfaces and any necessary interactions with the backend through the ReSTFul services. There is a clear separation of work and accountability. The learning curve for the Java developers to create the services will be minimal. To preview the live code, the frontend developer only has to save the content (WCMS) and refresh the page to see the latest changes.&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;Here is a quick example:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOAf9C_Jrt_C30RXS3yh62Ok9cTgfl6PnZNRRQSwbmahGr6sEdU487XwVZGliO86zjDj1qPQfHVHKB2anYjEZymAh29hZG3v740u9VcygKlHxObF5z1-f4G3TKZzKXYk7RcO_gKReGsVSE/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;span xmlns=&quot;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt; &amp;lt;div ng-app=&quot;&quot; ng-controller=&quot;companiesController&quot;&amp;gt;  
   &amp;lt;ul&amp;gt;  
    &amp;lt;li ng-repeat=&quot;x in data&quot;&amp;gt;{{&#39;title: &#39; +x.title + &#39;, group Id: &#39; + x.groupId }}&amp;lt;/li&amp;gt;  
   &amp;lt;/ul&amp;gt;  
 &amp;lt;/div&amp;gt;  
 &amp;lt;script&amp;gt;  
   function companiesController($scope,$http) {  
    $http.post(&quot;http://localhost:8080/api/jsonws/assetentry/get-company-entries/company-id/10157/start/0/end/5?p_auth=cbSXanJ2&quot;)  
    .success(function(response) {$scope.data = response;});  
   }  
   companiesController.$inject = [&#39;$scope&#39;, &#39;$http&#39;];  
 &amp;lt;/script&amp;gt;&amp;lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;  
&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
You can copy the above in a new web content article and see the result displayed on the page. Make sure to change red bold values to your system specific:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Company id: for ease of testing, you can retrieve that value from the control panel&lt;/li&gt;
&lt;li&gt;P_auth: this value can be looked up programmatically as it will change every time the user logs into the portal&lt;/li&gt;
&lt;/ul&gt;
Traditionally, the simple code above would require a JavaServer page or JSF application which is slow for rapid prototyping. In software testing, portlets controller are one of the most complex components to test. By creating a clear separation between components, testers and automated tools can test each components individually. The sample code pulls information from Liferay REST web services and displays a list of registered companies on the page.&lt;br /&gt;
&lt;h1&gt;
&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt;
Conclusion&lt;/h1&gt;
Liferay has a rich set of features which allows developers to create enterprise components and applications. When working with ReSTFul services, Liferay Web Content Management editor can act as an Integrated Development Environment in the browser. AngularJS is approaching maturity and it is very popular with web developers. Liferay 7 (next release as of writing ) will be introducing single page portlets but this is already possible with AngularJS and ReSTFul web services API. Needless to say that you can use any web browser to create content in Liferay CMS and debug your code in real time using tools such as Firebug.&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/4075922529501184313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2014/10/liferay-and-angularjs-made-simple.html#comment-form' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/4075922529501184313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/4075922529501184313'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2014/10/liferay-and-angularjs-made-simple.html' title='Liferay and AngularJS Made Simple: Connecting AngularJS to a Backend with REST and JSON'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg9JeFDa_kJkUpVVFhiAi4cdZLS-wrg0lTE8e_dmQaQsc9nDbEHQRkOwMjmq1Wb_ahk_xoREAOt7c5Sr-QW5TTqcuPfTiqyxdtKQbSdfYaO-kWBmozkreHZt-WOnCagTDIWUOXyNsiHgts/s72-c/angularjs.png" height="72" width="72"/><thr:total>24</thr:total><georss:featurename>London, UK</georss:featurename><georss:point>51.5073509 -0.12775829999998223</georss:point><georss:box>51.1912379 -0.77320529999998222 51.8234639 0.51768870000001777</georss:box></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-1394716222474906561</id><published>2014-09-25T13:19:00.000+01:00</published><updated>2014-09-25T13:19:35.876+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="architect"/><category scheme="http://www.blogger.com/atom/ns#" term="big data"/><category scheme="http://www.blogger.com/atom/ns#" term="enterprise search"/><title type='text'>Big Data Architecture Best Practices</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;   &lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqL3HCLMJCBkGVFjuKCxLqDjrlAIWofh1v43TYCuWTpqLx2hQzwNPgAjAxh09FGveyzv36jqsaGau5QdXhYHmR7zpuStGrGs9-YYfo4OJLyTVhetYDSku_thZXvnzm9GFJPnFjCloOK2VU/s1600/Architect_&amp;_neo.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqL3HCLMJCBkGVFjuKCxLqDjrlAIWofh1v43TYCuWTpqLx2hQzwNPgAjAxh09FGveyzv36jqsaGau5QdXhYHmR7zpuStGrGs9-YYfo4OJLyTVhetYDSku_thZXvnzm9GFJPnFjCloOK2VU/s1600/Architect_&amp;_neo.png&quot; height=&quot;209&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp;&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;The marketing department of software vendors have done a good job making Big Data go mainstream, whatever that means. The promise of we can achieve anything if we make use of &lt;i&gt;Big Data&lt;/i&gt;; business insight and beating our competitions to submission. Yet, there is no well-publicised Big Data successful implementation. The question is: why not? Clearly this silver bullet where businesses have seen billions of dollars invested in but &lt;b&gt;no return on investment! &lt;/b&gt;Who is to blame? After all, businesses do not have to publicise their internal processes or projects. I have a different view to that and the cause is on the IT department. Most Big Data projects are driven by the technologist not the business there is create lack of understanding in aligning the architecture with the business vision for the future.&lt;/span&gt;&lt;br /&gt;
&lt;h1&gt;
&lt;span xmlns=&quot;&quot;&gt;The Preliminary Phase&lt;/span&gt;&lt;/h1&gt;
&lt;span xmlns=&quot;&quot;&gt;Big Data projects are not different to any other IT projects. All projects spur out of business needs / requirements. This is not The Matrix; we cannot answer questions which have not been asked yet. Before any work begin or discussion around which technology to use, all stakeholders need to have an understanding of:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;The organisational context&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;The key drivers and elements of the organisation&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;The requirements for architecture work&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;The architecture principles&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;The framework to be used&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;The relationships between management frameworks&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;The enterprise architecture maturity&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span xmlns=&quot;&quot;&gt;In the majority of cases, Big Data projects involves knowing the current business technology landscape; in terms of current and future applications and services:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Strategies and business plans&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Business principles, goals, and drivers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Major framework currently implemented in the business&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Governance and legal frameworks&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;IT strategy&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Pre-existing Architecture Framework, Organisational Model, and Architecture repository&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
&lt;span xmlns=&quot;&quot;&gt;The Big Data Continuum&lt;/span&gt;&lt;/h1&gt;
&lt;span xmlns=&quot;&quot;&gt;Big Data projects are not and should never been executed in isolation. The simple fact that Big Data need to feed from other system means there should a channel of communication open across teams. In order to have a successful architecture, I came up with five simple layers/ stacks to Big Data implementation. To the more technically inclined architect, this would seem obvious:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Data sources&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Big Data ETL&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Data Services API&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Application&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;User Interface Services&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2qUTgIujadL0XXfqoZUBUN_d6VgmIjV2_1YwEj8idzKgh7F1tHYJHNVzbnCLFAROJH4MLdwxnNJvtPdu-RmyO9RxCARtKHYe4bEUO2MFWS51Y5vWpXGmodOJXT6RKCZzJFB_oCvk98DzX/s1600/big+data+protocol+stack.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2qUTgIujadL0XXfqoZUBUN_d6VgmIjV2_1YwEj8idzKgh7F1tHYJHNVzbnCLFAROJH4MLdwxnNJvtPdu-RmyO9RxCARtKHYe4bEUO2MFWS51Y5vWpXGmodOJXT6RKCZzJFB_oCvk98DzX/s1600/big+data+protocol+stack.PNG&quot; height=&quot;225&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Big Data Protocol Stack&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;   &lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;
&lt;span xmlns=&quot;&quot;&gt;Data Sources&lt;/span&gt;&lt;/h2&gt;
&lt;span xmlns=&quot;&quot;&gt;Current and future applications will produce more and more data which will need to be process in order to gain any competitive advantages from them. Data comes in all sorts but we can categorise them into two:&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Structured data – usually stored following a predefined formats such as using known and proven database techniques. Not all structured data are stored in database as there are many businesses using flat files such as Microsoft Excel or Tab Delimited files for storing data&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Unstructured data – businesses generates great amount of unstructured data such emails, instant messaging, video conferencing, internet, flat files such documents and images, and the list is endless. We call the data &quot;unstructured&quot; as they do not follow a format which will make facilitate a user to query its content.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;span xmlns=&quot;&quot;&gt;I have spent a large part of my career working on Enterprise Search technology before even &quot;Big Data&quot; was coined. Understanding where the data is coming from and in what shape is valuable to a successful implementation of a Big Data ETL project. Before a single a line of programming code is written, architects will have to try and normalise the data to common format.&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;
&lt;span xmlns=&quot;&quot;&gt;Big Data ETL&lt;/span&gt;&lt;/h2&gt;
&lt;span xmlns=&quot;&quot;&gt;This is the part that excites technologists and especially the development teams. There are so many blogs and articles published every day about Big Data tools that this creates confusions among non-tech people. Everybody is excited about processing petabytes of data using the coolest kid on the block: Hadoop and its ecosystem. Before we get carried away, we first need to put some baseline in place:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Real-time processing&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Batch processing&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;   &lt;/span&gt;&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiawY85_JT_gYlLt3-nzeFs0gpAYKcUHSRbgLhKqsMv5wzosApFXi42Wr0YBn9UFQyy2nZqJZXYrRebLrorDX2klATYKrz9Ig9Jcnv1dpEh-dmytd4APrUIW146qzjhctmLmTm9-0LkW3m4/s1600/Master+Data+Management+-+Big+Data.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiawY85_JT_gYlLt3-nzeFs0gpAYKcUHSRbgLhKqsMv5wzosApFXi42Wr0YBn9UFQyy2nZqJZXYrRebLrorDX2klATYKrz9Ig9Jcnv1dpEh-dmytd4APrUIW146qzjhctmLmTm9-0LkW3m4/s1600/Master+Data+Management+-+Big+Data.PNG&quot; height=&quot;243&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Big Data - Data Consolidation&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;span xmlns=&quot;&quot;&gt;The purpose of &lt;i&gt;Extract Transform Load&lt;/i&gt; projects, regardless of using Hadoop or not, is to consolidate the data into a single view &lt;b&gt;Master Data Management&lt;/b&gt; for querying on demand. Hadoop and its ecosystem deals with the ETL aspect of Big Data not the querying part. The tools used will heavily depends of processing need of the project: either Real-time or batch; i.e. Hadoop is a batch processing framework for large volume of data. Once the data has been processed, the Master Data Management system (MDM) can be stored in a data repository such as NoSQL based or RDBMS – this will only depends on the querying requirements.&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;
&lt;span xmlns=&quot;&quot;&gt;Data Services API&lt;/span&gt;&lt;/h2&gt;
&lt;span xmlns=&quot;&quot;&gt;As most of the limelight goes to the tools for ETL, a very important area is usually overlooked until later almost as a secondary thought. MDM will need to be stored in a repository in order for the information to be retrieve when needed. In a true Service Oriented Architecture spirit, the data repository should be able to expose some interfaces to external third party applications for data retrieval and manipulation. In the past, MDM were mostly created in RDBMS and retrieval and manipulation were carried out through the use of the Structured Query Language. Well this does not have to change but architects should be aware of other forms of database such NoSQL types. The following questions should be asked when choosing a database solution:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Is there are standard query language&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;How do we connect to the database; DB drivers or available web services&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;Will the database scale when the data grows&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span xmlns=&quot;&quot;&gt;What security mechanism are in place for protecting some or whole data&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span xmlns=&quot;&quot;&gt;Other questions specific to the project should also be included in the checklist.&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;
&lt;span xmlns=&quot;&quot;&gt;Business Applications&lt;/span&gt;&lt;/h2&gt;
&lt;span xmlns=&quot;&quot;&gt;So far, we have extracted the data, transformed and loaded it into a Master Data Management system. The normalised data is now exposed through web services (or DB drivers) to be used by third party applications. Business applications are the reason why to undertake Big Data projects in the first place. Some will argue that we should hire Data Scientists (?). According many blogs, Data Scientist roles is to understand the data, explore the data, prototype (new answers to unknown questions) and evaluate their findings. This is interesting as it reminds me the motion picture The Matrix, where the Architect knew the answers to the questions before Neo has even asked them yet and decides which one are relevant or not. Now this is not how businesses are run. It will be extremely valuable if the data scientist may suggest subconsciously (Inception) a new way to do something but most of the time the questions will come from business to be answered by the Data Scientist or whoever knows the data. The business applications will be the answer to those questions.&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;
&lt;span xmlns=&quot;&quot;&gt;User Interfaces Services&lt;/span&gt;&lt;/h2&gt;
&lt;span xmlns=&quot;&quot;&gt;User interfaces are the make or break of the project; a badly designed UI will affect adoption regardless of the data behind it, an intuitive design will increase adoption and maybe user will start questioning the quality of the data. Users will access the data differently; mobile, TV and web as an example. Users will usually focus on a certain aspect of the data and therefore they will require the data to be presented in a customised way. Some other users will want the data to be available through their current dashboard and match their current look and feel. As always, security will also be a concern. Enterprise portal have been around for a long time and they are usually used for data integration projects. Nevertheless, standards such as Web Services for Remote Portlets (WSRP) make it possible for User Interfaces to be served through Web Service calls.&lt;/span&gt;&lt;br /&gt;
&lt;h1&gt;
&lt;span xmlns=&quot;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h1&gt;
&lt;span xmlns=&quot;&quot;&gt;This article show the importance of architecting a Big Data project before embarking on the project. The project needs to be in line with the business vision and have a good understanding of the current and future technology landscape. The data needs to bring value to the business and therefore business needs to be involved from the outset. Understanding how the data will be used is key to its success and taking a service oriented architecture approach will ensure that the data can serve many business needs.&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/1394716222474906561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2014/09/big-data-architecture-best-practices.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/1394716222474906561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/1394716222474906561'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2014/09/big-data-architecture-best-practices.html' title='Big Data Architecture Best Practices'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqL3HCLMJCBkGVFjuKCxLqDjrlAIWofh1v43TYCuWTpqLx2hQzwNPgAjAxh09FGveyzv36jqsaGau5QdXhYHmR7zpuStGrGs9-YYfo4OJLyTVhetYDSku_thZXvnzm9GFJPnFjCloOK2VU/s72-c/Architect_&amp;_neo.png" height="72" width="72"/><thr:total>6</thr:total><georss:featurename>London, UK</georss:featurename><georss:point>51.5073509 -0.12775829999998223</georss:point><georss:box>51.1912379 -0.77320529999998222 51.8234639 0.51768870000001777</georss:box></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-1133126062562732400</id><published>2014-09-17T13:14:00.001+01:00</published><updated>2014-09-17T13:14:32.482+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="big data"/><category scheme="http://www.blogger.com/atom/ns#" term="football"/><category scheme="http://www.blogger.com/atom/ns#" term="garage"/><category scheme="http://www.blogger.com/atom/ns#" term="IoT"/><category scheme="http://www.blogger.com/atom/ns#" term="soccer"/><category scheme="http://www.blogger.com/atom/ns#" term="sport"/><category scheme="http://www.blogger.com/atom/ns#" term="vision"/><category scheme="http://www.blogger.com/atom/ns#" term="wearable tech"/><title type='text'>4 Reasons Football Teams Should Use Big Data and IoT</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIht4NwNpLvcrJT8UBCOnoW6uFB4xoLay1M_fcBshe93k8G7fkWDC8DALJRE0hxdhGqraKEUHK1giZMu0OUu_UxoKq8DTjGyMwRmRnjrxHPACcaGpY6cp4WiIxZ_TuKdRRS2QwwkxCxRAA/s1600/futuristic+footbal.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIht4NwNpLvcrJT8UBCOnoW6uFB4xoLay1M_fcBshe93k8G7fkWDC8DALJRE0hxdhGqraKEUHK1giZMu0OUu_UxoKq8DTjGyMwRmRnjrxHPACcaGpY6cp4WiIxZ_TuKdRRS2QwwkxCxRAA/s1600/futuristic+footbal.jpg&quot; height=&quot;360&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This is a case why football teams (or soccer for my transatlantic friends) should make greater use of the Internet of Things and big data. &lt;br /&gt;&lt;br /&gt;Here are some 5 simple reasons:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
1. Player health tracking&lt;/h2&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;In 2012, then only 24 years of age, &lt;a href=&quot;http://en.wikipedia.org/wiki/Fabrice_Muamba&quot; target=&quot;_blank&quot;&gt;Fabrice Muamba&lt;/a&gt; a footballer from Bolton Wanderers suffered an heart attack on live TV during an FA Cup game. This was not the first such incident on live TV; &lt;a href=&quot;http://www.bbc.co.uk/sport/0/football/23052120&quot; target=&quot;_blank&quot;&gt;Marc-Vivien Foe&lt;/a&gt;, the Cameroonian player, died on June 26 2003 during a confederation cup game against France. Not to mentioned what happens off-pitch, football club have a duty to look after their players and that&#39;s including their health. &lt;br /&gt;&lt;br /&gt;Let&#39;s clear, I&#39;m not saying that current health wearable devices could have saved them but they could have played a great role. Read the signs early to avoid the disaster as prevention will always be better than the cure.&lt;br /&gt;&lt;br /&gt;So how can be big data helps us improve the athletes health? You may ask. I will simplify it for illustration purposes. Teams need to put in a place an IoT and Big Data strategy where athlete will wear various devices during training and games. Think about a heart monitoring bracelets that players can wear during training and games for the physiotherapy team to analyse later or in real time. The devices will record the time, number of foot steps (within a period - in order to differentiate between walking and running) and heart rate. Let&#39;s say that player John Smith health is changing during the game, the physios will get alerted of the change of condition and can take appropriate actions. Maybe we can add devices to shin pads so that players do not have to wear uncomfortable devices.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
2. Player positioning and technique&lt;/h2&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;Great players do this naturally but not all players are born equal. I remember when I used to play football in my early teen for &lt;a href=&quot;http://fr.wikipedia.org/wiki/Union_sportive_Orl%C3%A9ans_Loiret_football&quot; target=&quot;_blank&quot;&gt;USO&lt;/a&gt; back in France. In training, we would learn how to shoot, head the ball and basic skills. The trainer would then let us know what we did wrong and how to ameliorate our techniques. Now professional players have a large team working with them daily; strikers will have coaches to help them for attacking positioning, goal keeper will have coaches too and etc... The current tech used by the teams are heavy duty machine which are employed behind close doors. How can IoT make improve on this? Again through wearable technology, we can track players movement. GPS integrated devices will track player movement over a map (football field), chin pad enabled devices will help visualise the player shooting techniques. The list of devices are only limited to your own imagination but the possibilities are endless. Players can then analyse their own data or with the help of their coach, see how they can improve. No more killing pigeons with those bad shots over the bar!&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
3. Team metrics&lt;/h2&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;Now what is the point of all that data generated if not put to use? We have health data and game metrics (positioning and technique) about the whole team. The players health will give us an indication of who is fit for game. Being a big fan of the beautiful game, we have observed how various conditions can affect a player performance such as weather and pitch condition. The data scientists would analyse who can perform better under the current conditions. Don&#39;t get it wrong; top players, if fit for the game, are indispensable to the team but all advices should be welcomed. You will have what we call &quot;the best team on paper&quot;. Gamblers use this technique in various events to pick their winners/ losers.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
4. Opponents analysis&lt;/h2&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;Usually we can find a wealth of information about teams from various sources such as sport sites, videos and blogs. The more you know about your opponents the better you will perform (Sun Tzu - Art of War). Team changes twice a year (transfer window) for those who can afford it. Is a team really as good as their last game? This question can be answered with big data analytics. Taking the conditions into consideration and our own team metrics, we can pick a strategy (team formation, defensive or attacking...). The big data gives (all) the information that we need in order to make decisions.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
Conclusion&lt;/h2&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;The Internet of Things (IoT) and Big Data provides an opportunity, even if not new, to gather information and make executive decisions much faster than before. There should not be any reasons not to have the full picture before hand. Football, as any other sports, is very competitive and everyone wants to create advantage. IoT devices are getting cheaper and more data can be collected for analysis. Big Data has the tools but not a silver bullet. We can prevent tragedies by tracking our players health and help them improve by analysing their techniques. Let&#39;s realistic that winning a game is probably beyond Big Data and IoT alone but they will play a big part in shaping the future of the game.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/1133126062562732400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2014/09/4-reasons-football-teams-should-use-big.html#comment-form' title='179 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/1133126062562732400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/1133126062562732400'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2014/09/4-reasons-football-teams-should-use-big.html' title='4 Reasons Football Teams Should Use Big Data and IoT'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIht4NwNpLvcrJT8UBCOnoW6uFB4xoLay1M_fcBshe93k8G7fkWDC8DALJRE0hxdhGqraKEUHK1giZMu0OUu_UxoKq8DTjGyMwRmRnjrxHPACcaGpY6cp4WiIxZ_TuKdRRS2QwwkxCxRAA/s72-c/futuristic+footbal.jpg" height="72" width="72"/><thr:total>179</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-5787446674140147141</id><published>2014-09-08T16:34:00.000+01:00</published><updated>2014-09-08T16:34:24.083+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="IoT"/><category scheme="http://www.blogger.com/atom/ns#" term="news"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="startups"/><title type='text'>Technology news about start-ups big data cloud IoT Liferay</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;&lt;br /&gt;   &lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnNVsnDnOgRmCXJF8xJR8WiMLfpB3Yd2OfsmRdrqxvMAZuinUX3aeFOru5iKPRMD4mpKQiXrmHwIxl9pB0LxKvQSqtP-h0nkMZzJZBmf4s9JprFOVwlwMW8-pAQEeoDv7DsHIWt-xyerRx/s1600/tfile_business_images_1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnNVsnDnOgRmCXJF8xJR8WiMLfpB3Yd2OfsmRdrqxvMAZuinUX3aeFOru5iKPRMD4mpKQiXrmHwIxl9pB0LxKvQSqtP-h0nkMZzJZBmf4s9JprFOVwlwMW8-pAQEeoDv7DsHIWt-xyerRx/s1600/tfile_business_images_1.jpg&quot; height=&quot;322&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;After over two years of break, I&#39;m back at it again – this time with a redefined purpose. As before, I will be sharing my technical views and experience through articles, whitepaper, tutorials. I will include interviews with tech start-ups from across the web; the system architecture and methodology. The start-ups will include videos and best practices learn from experience. Previously, I was approached by many to do some reviews of tech gadgets and sites, therefore I will try to accommodate that crowd whenever I can.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;Over the past two years, I have been involved in some very exciting projects such as launching a new public facing web portal for a leading German car manufacturer to launch the fleet of electric cars. Working as a principal architect on the project and managing team across geographical boundaries. Then moved on as Principal Portal Architecture at Accenture on project for Europe leading grocery retailer to develop business to business portal and integrating it with various third party applications. Sure – this meant that I couldn&#39;t blog anymore or even attend some of the tech events around me. I missed the blogosphere and the sharing of knowledge but I&#39;m back now.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;Why not make some requests on the sort of tutorials you would like me to do or site (start-ups) you would like to review. As always, my primary focus will be Big Data, Cloud, Business Intelligence, Liferay and Java Development. The Internet of Things will also be covered as Java is playing a major role in its enablement.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span xmlns=&quot;&quot;&gt;Hope you enjoy my new content as you enjoyed the old ones and see you soon.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/5787446674140147141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2014/09/technology-news-about-start-ups-big.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/5787446674140147141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/5787446674140147141'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2014/09/technology-news-about-start-ups-big.html' title='Technology news about start-ups big data cloud IoT Liferay'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnNVsnDnOgRmCXJF8xJR8WiMLfpB3Yd2OfsmRdrqxvMAZuinUX3aeFOru5iKPRMD4mpKQiXrmHwIxl9pB0LxKvQSqtP-h0nkMZzJZBmf4s9JprFOVwlwMW8-pAQEeoDv7DsHIWt-xyerRx/s72-c/tfile_business_images_1.jpg" height="72" width="72"/><thr:total>12</thr:total><georss:featurename>London, UK</georss:featurename><georss:point>51.5073509 -0.12775829999998223</georss:point><georss:box>51.1912379 -0.77320529999998222 51.8234639 0.51768870000001777</georss:box></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-4044828919417491756</id><published>2012-12-31T16:41:00.001+00:00</published><updated>2014-09-04T19:05:57.391+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="anonymous"/><category scheme="http://www.blogger.com/atom/ns#" term="compromised systems"/><category scheme="http://www.blogger.com/atom/ns#" term="ftp"/><category scheme="http://www.blogger.com/atom/ns#" term="godaddy"/><category scheme="http://www.blogger.com/atom/ns#" term="hacked"/><category scheme="http://www.blogger.com/atom/ns#" term="hackers"/><category scheme="http://www.blogger.com/atom/ns#" term="stolen passwords"/><category scheme="http://www.blogger.com/atom/ns#" term="threat"/><title type='text'>I Got hacked today and never use GoDaddy.com for hosting</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHCi45joPGW_LeKCAIR0_1_KSqO8veMkNN0dtjl3yYPL37pbKLfUzz_ywGt71pFLqMuu5-Pcd-O2ArN9qYtmaOzZcojaRXG72WUP6swGZsAifInd3aHCynwVZnQ1w9LelNjQ9YplcE-vXg/s1600/sexy-angelina-jolie2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHCi45joPGW_LeKCAIR0_1_KSqO8veMkNN0dtjl3yYPL37pbKLfUzz_ywGt71pFLqMuu5-Pcd-O2ArN9qYtmaOzZcojaRXG72WUP6swGZsAifInd3aHCynwVZnQ1w9LelNjQ9YplcE-vXg/s1600/sexy-angelina-jolie2.jpg&quot; height=&quot;253&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&amp;nbsp;I&#39;m going to get straight to the point; the last 24hrs one of my domain got hacked. Initially I thought it was one my developer messing stuff on the server. Today, 31st December 2012, I tried accessing the domain through the web browser to see if they were any updates from the development team. When tried to browse to the web site, my antivirus started to go crazy: Threat detected - Exploit Blackhole Exploit Kit (type 2371). First thing I did was to get the team on the phone and you can imagine how conversation went. These are the steps have taken so far:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Conversation with dev team: in summary; make sure that you didn&#39;t use any code that you copied and pasted from the internet and change all user names and passwords.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
Conversation with GoDaddy Support:&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
Godaddy: Hi, How can I help you today?&lt;br /&gt;
Me: My domain xxxx got hacked today...&lt;br /&gt;
G: Ok?! What can we do for you?&lt;br /&gt;
M: I would like to have a copy of the FTP log for my domains, please.&lt;br /&gt;
G: Oh...we can&#39;t do that&lt;br /&gt;
M: Why not?&lt;br /&gt;
G: It&#39;s for security reason that we cannot provide you with the logs.&lt;br /&gt;
M: very strange as my account got hacked and this means that you have an intruder on your network, therefore you system is potentially vunerable to more attacks...&lt;br /&gt;
G: Sorry sir but our systems are secured...&lt;br /&gt;
M: clearly not, so what do you suggest I do?&lt;br /&gt;
G: You can delete all files and folders in your domain...&lt;br /&gt;
M: We are alreay reverting the system to a backup state but that does not garantee to our system will be safe from any hidden script put in place by the hacker...&lt;br /&gt;
G: Sorry but that&#39;s all we can do...&lt;br /&gt;
M: Do you have a virus scanner that you can run on our domain?&lt;br /&gt;
G: Yes...Let me check the cost for that...It will cost about £45+VAT&lt;br /&gt;
M: Is there any default protection that comes with my package, I am on the Ultimate package?&lt;br /&gt;
G: No, there isn&#39;t any default antivirus provided for any packages...&lt;br /&gt;
M: So there is nothing I can do check for viruses and malware unless I pay the £45?&lt;br /&gt;
G: No, you have to pay for the service...&lt;br /&gt;
M: No problem, I&#39;ll just take my business to a more secure hosting provider&lt;br /&gt;
G: Ok.&lt;br /&gt;
M: Good bye!&lt;br /&gt;
&lt;br /&gt;
Now, if you navigate to &lt;a href=&quot;http://www.godaddy.com/hosting/web-hosting.aspx?ci=76393&quot; target=&quot;_blank&quot;&gt;Godaddy hosting page&lt;/a&gt; you will see that there is a malware scanner provide but no antivirus therefore leaving my systen open to threats. It is shame because I have been with them for quite awhile but you can only the strength in a relationship only when it is put to the test. On this final note, I do not recommend GoDaddy hosting for any businesses.&lt;br /&gt;
&lt;br /&gt;
Feel free to share your views in the comments.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/4044828919417491756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2012/12/i-got-hacked-today-and-never-use.html#comment-form' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/4044828919417491756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/4044828919417491756'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2012/12/i-got-hacked-today-and-never-use.html' title='I Got hacked today and never use GoDaddy.com for hosting'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHCi45joPGW_LeKCAIR0_1_KSqO8veMkNN0dtjl3yYPL37pbKLfUzz_ywGt71pFLqMuu5-Pcd-O2ArN9qYtmaOzZcojaRXG72WUP6swGZsAifInd3aHCynwVZnQ1w9LelNjQ9YplcE-vXg/s72-c/sexy-angelina-jolie2.jpg" height="72" width="72"/><thr:total>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-9201293845265817126</id><published>2012-05-22T16:27:00.001+01:00</published><updated>2014-09-04T12:07:41.189+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud computing"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud developer"/><category scheme="http://www.blogger.com/atom/ns#" term="cloudbees"/><category scheme="http://www.blogger.com/atom/ns#" term="facebook apps"/><category scheme="http://www.blogger.com/atom/ns#" term="google app engine"/><category scheme="http://www.blogger.com/atom/ns#" term="heroku"/><category scheme="http://www.blogger.com/atom/ns#" term="openshift"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="paas"/><category scheme="http://www.blogger.com/atom/ns#" term="windows azure"/><title type='text'>PaaS Cloud - The Rise of The Developer Entrepreneur</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPDPuxsZ6y7m5u9YnO8BTxXTJyOjXd5Vv_3-WFyhN4aRtx9vPMBAUHHUObsUYjAg_Flntx_gnjjV8IM-xxHcaj5lUEmkhgRahsmCeWkE5c9Boj9Pd95PkwHvWBQiMi7hgwRtckXbAF05Cu/s1600/the-journey-to-the-paas_2294x1203.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPDPuxsZ6y7m5u9YnO8BTxXTJyOjXd5Vv_3-WFyhN4aRtx9vPMBAUHHUObsUYjAg_Flntx_gnjjV8IM-xxHcaj5lUEmkhgRahsmCeWkE5c9Boj9Pd95PkwHvWBQiMi7hgwRtckXbAF05Cu/s1600/the-journey-to-the-paas_2294x1203.png&quot; height=&quot;332&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
In bad times such as recession, there is the inevitable fact that some people will be laid off by their employer. In these&amp;nbsp;circumstances, when software developer are made redundant they usually set-up shop. The majority goes into providing software development services for small company or friends. They&amp;nbsp;set-up&amp;nbsp;websites to promote their services and few focuses on building their own product.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In London, services based company took a massive hit during the downturn and it is still felt now; well the UK and now in a double-dip recession. So what is my point here? It is much harder to sell services and even harder to export services than products. When providing services, your market has geographical constraint; just think what would take for your to sell your services to a potential client 100 miles from your local?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
It used to be hard to build products in the past due to high cost of hardware; to build a java-based product you had to find a suitable host and then pay for a dedicated server or VPS. As you are already tightening your belt, it is likely that you do not want to spend £60 + VAT a month on services to host your product and all the headache of troubleshooting it in case of problem.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Enter the PaaS, Platform as a Service. For this posting I am going to look at PaaS from a Java perspective but it should be applicable to any other programming language.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The competition in the PaaS market is fierce there is no single winner yet. Amazon is the leader for IaaS but not much to be deployed on Beanstalk as yet. If you look around the market, you can see that major technology vendor are jumping on the bandwagon:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://aws.amazon.com/elasticbeanstalk/&quot; target=&quot;_blank&quot;&gt;Amazon Beanstalk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openshift.redhat.com/app/&quot; target=&quot;_blank&quot;&gt;Red Hat OpenShift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.google.com/appengine/&quot; target=&quot;_blank&quot;&gt;Google AppEngine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.heroku.com/&quot; target=&quot;_blank&quot;&gt;Heroku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.cloudbees.com/&quot; target=&quot;_blank&quot;&gt;CloudBees&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.windowsazure.com/&quot; target=&quot;_blank&quot;&gt;Microsoft Windows Azure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.oracle.com/&quot; target=&quot;_blank&quot;&gt;Oracle Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://upon2020.com/2011/04/the-ever-growing-list-of-paas-companies-and-paas-projects/&quot; target=&quot;_blank&quot;&gt;etc&lt;/a&gt;.... &amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Some of those PaaS services are free such as OpenShift and CloudBees. OpenShift runs on JBossAS7 and if you are using &lt;a href=&quot;http://www.eclipse.org/&quot; target=&quot;_blank&quot;&gt;Eclipse&lt;/a&gt; for it becomes a breeze to develop and deploy, but the only downside is that it&#39;s still in beta stage.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Utilising the current ecosystem of PaaS, you can go from:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
inception (idea) -&amp;gt; development -&amp;gt; product&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
for almost nothing. The prototyping is now free for example you can use &lt;a href=&quot;http://www.heroku.com/facebook&quot; target=&quot;_blank&quot;&gt;Heroku to build Facebook apps&lt;/a&gt; &amp;nbsp;making all the Facebook API directly available to your app and hosted for free (until you out grow your free account of course). I will suggest that developers familiarises themselves with &lt;a href=&quot;http://theleanstartup.com/&quot; target=&quot;_blank&quot;&gt;Lean Startup&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Lean_software_development&quot; target=&quot;_blank&quot;&gt;Lean Software Development&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If you are a developer and out-of work, you have no excuse of no building your cloud apps. Even if you do not want to start a business and you can do it as a learning practice and use that to your advantage next time you are interviewing for a new role.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
With PaaS Cloud, every developer is a potential entrepreneur and the barriers to entry are almost non-existent. If you are looking for a job, it is no longer acceptable just to have some sample code on GitHub but you should also have a sample project hosted on a free cloud provider to showcase.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; This is blog was written from &lt;a href=&quot;http://www.salesforce.com/uk/events/details/cs12-london/&quot; target=&quot;_blank&quot;&gt;Cloudstock 2012&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.ibm.com/cloud-computing/images/the-journey-to-the-paas_2294x1203.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/9201293845265817126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2012/05/paas-cloud-rise-of-developer.html#comment-form' title='66 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/9201293845265817126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/9201293845265817126'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2012/05/paas-cloud-rise-of-developer.html' title='PaaS Cloud - The Rise of The Developer Entrepreneur'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPDPuxsZ6y7m5u9YnO8BTxXTJyOjXd5Vv_3-WFyhN4aRtx9vPMBAUHHUObsUYjAg_Flntx_gnjjV8IM-xxHcaj5lUEmkhgRahsmCeWkE5c9Boj9Pd95PkwHvWBQiMi7hgwRtckXbAF05Cu/s72-c/the-journey-to-the-paas_2294x1203.png" height="72" width="72"/><thr:total>66</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-492016617179660830</id><published>2012-05-06T01:20:00.001+01:00</published><updated>2014-09-04T19:33:44.156+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Adobe Flex"/><category scheme="http://www.blogger.com/atom/ns#" term="desktop"/><category scheme="http://www.blogger.com/atom/ns#" term="html5"/><category scheme="http://www.blogger.com/atom/ns#" term="java swing"/><category scheme="http://www.blogger.com/atom/ns#" term="javafx"/><category scheme="http://www.blogger.com/atom/ns#" term="ria"/><category scheme="http://www.blogger.com/atom/ns#" term="rich internet application"/><category scheme="http://www.blogger.com/atom/ns#" term="silverlight"/><category scheme="http://www.blogger.com/atom/ns#" term="technology"/><category scheme="http://www.blogger.com/atom/ns#" term="web apps"/><title type='text'>Developers should not believe the HTML5 hype</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUQ9c7GOB_gzu-YC6nBnZxUEiq9rGFtHiENErX_7e0r2o5WHPgxAxPkmLVsiJx42YdyHS33revtkWcbd-fcr0Wvno432S13gNvJe86aFta7XiElI_wlFUbr0GtvuXOcgwcTruqXy8PD_eJ/s1600/HTML5_Logo_256.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUQ9c7GOB_gzu-YC6nBnZxUEiq9rGFtHiENErX_7e0r2o5WHPgxAxPkmLVsiJx42YdyHS33revtkWcbd-fcr0Wvno432S13gNvJe86aFta7XiElI_wlFUbr0GtvuXOcgwcTruqXy8PD_eJ/s1600/HTML5_Logo_256.png&quot; /&gt;&lt;/a&gt;As an Architect and Lead developer, I have to sit down with the non-techie and convince them why I think a technology or framework is the right one for a project and then I build my team to deliver the solution. The past two years or so, the marketing engine of technology companies have been spinning at full throttle. &lt;b&gt;HTML5 is a the future, everything will run in the browser and more blah blah blah.&lt;/b&gt;&lt;br /&gt;
Don&#39;t get me wrong, HTML5 brings some good technologies to the web application developer. Nevertheless, I think there is a lot of hype as HTML5 doesn&#39;t really bring anything new to the table.&lt;br /&gt;
First of all, there are multiple type of applications that we are all well-aware of;&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Consumer&lt;/li&gt;
&lt;li&gt;Business&lt;/li&gt;
&lt;li&gt;Enterprise&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Consumer Application&lt;/b&gt;&lt;/h4&gt;
&lt;br /&gt;
If you are building a consumer oriented application which doesn&#39;t use any of the native functionality of OS, then I would recommend the application to be built in HTML5 and all the RIA fanfare that comes with it. You can best view this in the mobile space where developers build either native or web apps depending on the application requirement. Remember that web application (HTML5 ) do not have direct access to printers, USB port or any other hardware such as Bluetooth and network services. Simple word processing application that can be developed in HTML5 such as Google Doc (where this blog is typed from). I haven&#39;t come across any serious application written in HTML5 or the likes yet (JavaFX, Flash and Silverlight are not HTML5).&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Business Application&lt;/h4&gt;
Critical business application such as POS which requires access to barcode scanner as an example can&#39;t be written using HTML5. You can have a native application delivered through the browser such as Java Applets ( or JavaFX) using webstart. Java applets can access OS features and hardware and provides another layer of security. Business application are delivered in controlled environments, for example, the application can be deployed on Linux desktop in company &quot;a&quot; environment only. For as much &quot;fanfare&quot; one might create around HTML5, these type of application will not cease to exist.&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Enterprise Application&lt;/h4&gt;
&lt;br /&gt;
Enterprise applications come in various forms, from desktop to servers. As this is a comparison to HTML5, I will only focus on desktop application. First, let take a financial company such as a stock brokerage firm. There is a reason why stock trading application run as closely to the OS as possible ( and also to the exchange), in one word, &lt;b&gt;PERFORMANCE&lt;/b&gt;. Web browsers performance sucks regardless of which one you are using, JavaScript is just too slow to implement some of the logic. In the trading business, a millisecond is all that is required to lose millions of £. Can you for one second imagine building a Bloomberg trading platform using web technologies, that&#39;s laughable. There is a reason why the finance industry are still using Java Swing as their desktop technology of choice.&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Conclusion&lt;/h4&gt;
HTML5 is a promising step in the right direction to building scalable robust web application but it will not obliterate desktop applications, not today, not tomorrow, not ever (really!?). We can already see it in the mobile space where developers rather write native application so that they can utilize OS features and hardware. Web applications cannot access you local files directory (I am not talking uploading a file to a site) to read or write. &amp;nbsp;A simple operation such as reading available space in a directory or writing a log to a local directory is not possible (again I am not talking about downloading or saving a page). Therefore, developers should not believe the hype. HTML5 is not the silver bullet and it is a shame when companies such as Adobe sends mix-messages by discontinuing their Flex offering. Anyway, Adobe has never been a big player in the enterprise desktop application market.&lt;br /&gt;
&lt;br /&gt;
If you disagree with my points, feel free to share your thoughts.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/492016617179660830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2012/05/developers-should-not-believe-html5.html#comment-form' title='30 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/492016617179660830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/492016617179660830'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2012/05/developers-should-not-believe-html5.html' title='Developers should not believe the HTML5 hype'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUQ9c7GOB_gzu-YC6nBnZxUEiq9rGFtHiENErX_7e0r2o5WHPgxAxPkmLVsiJx42YdyHS33revtkWcbd-fcr0Wvno432S13gNvJe86aFta7XiElI_wlFUbr0GtvuXOcgwcTruqXy8PD_eJ/s72-c/HTML5_Logo_256.png" height="72" width="72"/><thr:total>30</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-980284987273672478</id><published>2012-04-30T12:56:00.000+01:00</published><updated>2014-09-04T12:05:59.974+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="amazon beanstalk"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud computing"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud developer"/><category scheme="http://www.blogger.com/atom/ns#" term="gae j"/><category scheme="http://www.blogger.com/atom/ns#" term="google app engine"/><category scheme="http://www.blogger.com/atom/ns#" term="java developer"/><category scheme="http://www.blogger.com/atom/ns#" term="paas"/><category scheme="http://www.blogger.com/atom/ns#" term="platform as a service"/><title type='text'>5 Things all Java developer should know when developing for the cloud</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEeAk0kZIxSuGOC66DwJy6IemC8rGdtqtd9-7MiECeYKP9RFJDPFFSS4lOQ3rAj6bWl7c7B1OkN39luhZ_bXr4y0RwIAdqvESYCCxkYto5nY35aWi9vbRXGm29j7Wsi1rZCRsLPwMzx0zu/s1600/vodafone-top-6.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEeAk0kZIxSuGOC66DwJy6IemC8rGdtqtd9-7MiECeYKP9RFJDPFFSS4lOQ3rAj6bWl7c7B1OkN39luhZ_bXr4y0RwIAdqvESYCCxkYto5nY35aWi9vbRXGm29j7Wsi1rZCRsLPwMzx0zu/s1600/vodafone-top-6.jpg&quot; height=&quot;256&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
The last couple of years, &quot;Cloud Computing&quot; replaced Web 2.0 as the new buzzword. You can read, hear and see everywhere the cloud is coming. To most developer, this is still the same old sh*t. If you have experience in developing distributed system then you should be fine, you say. Well not entirely true, the IT department wants to deploy on cheap cloud and therefore some restrictions now applies. I will list 5 things that I think all developers should know when working with cloud Platform as a Service provider such as Amazon Beanstalk or Google App Engine. This list also applies to IaaS architecture. Some of the points might be obvious to the more experienced, nevertheless, they need to be mentioned.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;Static objects&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;/ol&gt;
We all know the difference between instance variable (non-static) and class variable (static variable). We use static to tell the JVM that they should only be one instance of this variable (singleton). If the static variable is declared with the &quot;final&quot; keyword, this will not cause a problem in a distributed environment as the value will never change. The problem is when we expect the value of the variable to change. As in a cluster environment, GAE and Beanstalk run your application in multiple JVM. If a the value of your static variable has changed in JVM, it will not be propagated to the cluster therefore leading to inconsistencies. I recommend that you avoid static variable unless that set as &quot;final&quot; and their values are hard-coded so there is no way to change their values are runtime.&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;Caching Objects&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;/ol&gt;
&lt;div&gt;
This one is related to performance in order to avoid expensive operations such as running database queries and others. Sometimes we need to cache objects in memory and therefore we implement our own caching strategy through the use of simple HashMap or some other caching solutions available outthere. Caching has many benefits but implementing a caching strategy should be approached with care. This is because caching has the same problem as static objects. Your cache will be in the local JVM therefore not it will not be visible in the cluster. There are some solutions, for example, GAE uses &lt;a href=&quot;http://memcached.org/&quot; target=&quot;_blank&quot;&gt;Memcached &lt;/a&gt;and Beanstalk can make use of &lt;a href=&quot;http://aws.amazon.com/elasticache/&quot; target=&quot;_blank&quot;&gt;Amazon ElastiCache&lt;/a&gt; which is compliant with Memcached. When developing for a PaaS environment, make sure to not implement your own caching system but look for one that is supported by the vendor. I know this can lead to vendor lock-ins.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;Server-side Session&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;/ol&gt;
&lt;div&gt;
Something we do take for granted in single environment is storing application session data on the server. Based on experiences, mainly using GAE, I encountered multiple issues with session management. Since then, Google has fixed alot of the issues with the way GAE handle sessions for Java application. To minimize writing session to a datastore, we store application state in memory. Most application are written without any vendor approach in mind; so we use JEE as-is. This approach would work in you deploy in any self hosted clustered environment but Google PaaS. &lt;a href=&quot;https://developers.google.com/appengine/docs/java/config/appconfig&quot; target=&quot;_blank&quot;&gt;Google implements their own session management&lt;/a&gt; which is off by default therefore you need to enable it in appengine-web.xml and make sure that all your objects implements the java.io.Serializable interface.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;b style=&quot;color: #333333; font-family: Arial, sans-serif; font-size: 13px; line-height: 21px; text-align: -webkit-auto;&quot;&gt;Note:&lt;/b&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; font-family: Arial, sans-serif; font-size: 13px; line-height: 21px; text-align: -webkit-auto;&quot;&gt;&amp;nbsp;Note, session data is always written synchronously to memcache. If a request tries to read the session data when memcache is not available (or the session data has been flushed), it will fail over to the datastore, which may not yet have the most recent session data. This means that asynchronous session persistence may cause your application to see stale session data. However, for most applications the latency benefit far outweighs the risk.&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;Event-driven Execution&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;/ol&gt;
&lt;div&gt;
This is more about running a process at a given time such as Scheduling task. Again, in a managed environment, it is straightforward to implement a timer or scheduler service. But this is a clustered environment which is not managed by yourself and their stack his different to yours. I personally use &lt;a href=&quot;http://quartz-scheduler.org/&quot; target=&quot;_blank&quot;&gt;Quartz Scheduler&lt;/a&gt; when working in a single server environment. In a clustered environment such as Beanstalk or GAE, it is difficult to know which instance will be triggered and execute the task only once. The folks at Google have provided another solution with their own implementation of &lt;a href=&quot;https://developers.google.com/appengine/docs/java/config/cron&quot; target=&quot;_blank&quot;&gt;Cron for Java&lt;/a&gt; which can be used. At the time of writing, Amazon Beanstalk didn&#39;t have a solution yet. Therefore, consider before-hand when designing your system, which approach to take in order to create scheduled tasks for your application.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;JRE white list&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;/ol&gt;
&lt;div&gt;
I believe this related to GAE J only. &lt;a href=&quot;https://developers.google.com/appengine/docs/java/jrewhitelist&quot; target=&quot;_blank&quot;&gt;Google App Engine for Java&lt;/a&gt; doesn&#39;t allow the use for all available API in Java, especially if they do require access to the file system. The fact that there is a such a restriction impose by the Google has led us to look elsewhere for some of our projects. The cost of re-developing our application to please them is much higher than deploying them elsewhere. Also, another downside of GAE J is doesn&#39;t fully support JEE servlet specification. You cannot implement custom security for your application through your web.xml therefore pushing you to use Google own security mechanism. I would recommedn using GAE J when developing a greenfield project which can be built with these restrictions &lt;a href=&quot;https://developers.google.com/appengine/docs/java/runtime&quot; target=&quot;_blank&quot;&gt;here &lt;/a&gt;&amp;nbsp;and &lt;a href=&quot;http://code.google.com/p/googleappengine/wiki/WillItPlayInJava&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&amp;nbsp;in mind. If you want to be locked-in using GAE J for your application, then I recommend it as a cost efficient way to testing your application otherwise, look somewhere else.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I hope this was helpful and if there&#39;s mistake, feel free to get back to me and I make any corrections. Also, I am sure that I am missing some other points, add them to the comments sections.&lt;br /&gt;
&lt;br /&gt;
P.S.&lt;a href=&quot;http://www.ibm.com/developerworks/library/j-paasshootout/&quot; target=&quot;_blank&quot;&gt; here is a nice comparison from IBM&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Cheers and Happy Coding.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/980284987273672478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2012/04/5-things-all-java-developer-should-know.html#comment-form' title='617 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/980284987273672478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/980284987273672478'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2012/04/5-things-all-java-developer-should-know.html' title='5 Things all Java developer should know when developing for the cloud'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEeAk0kZIxSuGOC66DwJy6IemC8rGdtqtd9-7MiECeYKP9RFJDPFFSS4lOQ3rAj6bWl7c7B1OkN39luhZ_bXr4y0RwIAdqvESYCCxkYto5nY35aWi9vbRXGm29j7Wsi1rZCRsLPwMzx0zu/s72-c/vodafone-top-6.jpg" height="72" width="72"/><thr:total>617</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-8860765531041339635</id><published>2012-04-25T17:54:00.000+01:00</published><updated>2014-09-04T19:35:55.486+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="algorithm"/><category scheme="http://www.blogger.com/atom/ns#" term="complex algorithm"/><category scheme="http://www.blogger.com/atom/ns#" term="data structure"/><category scheme="http://www.blogger.com/atom/ns#" term="dynamic programming"/><category scheme="http://www.blogger.com/atom/ns#" term="fastest execution time"/><category scheme="http://www.blogger.com/atom/ns#" term="problem solving"/><category scheme="http://www.blogger.com/atom/ns#" term="traveling robot"/><title type='text'>The traveling robot problem</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I am currently between contracts and for first time in many years, I am requested to write some complex code from home so I took the liberties to share my result on my blog.&lt;br /&gt;
&lt;br /&gt;
A startup based in London sent me this problem:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Problem:&lt;/b&gt;&lt;br /&gt;
A robot can be programmed to run 1, 2, 3, 5 and 10 kilometers and it takes 10, 5, 3, 2 and 1 minutes, respectively. Once it runs to programmed kilometers, it must be turned off for 2 minutes. After 2 minutes it can again be programmed to run for a further 1, 2, 3, 5 or 10 kilometers. How would you program this robot to go exactly 43 kilometers in minimum amount of time.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX-7y27O5UQPdhdjOx0tJ5elr6k87YIlO8vRsJvCgSH8c7IDrTI4mCWlv1IjDdj7yBueSozyui7qEd1l4IPKtz3UNE8w1NQXeZe1-IUMr05m3_vPNcwiNVQq_r0hyphenhypheniu085AUe-k2F0zTGp/s1600/bad_robot.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX-7y27O5UQPdhdjOx0tJ5elr6k87YIlO8vRsJvCgSH8c7IDrTI4mCWlv1IjDdj7yBueSozyui7qEd1l4IPKtz3UNE8w1NQXeZe1-IUMr05m3_vPNcwiNVQq_r0hyphenhypheniu085AUe-k2F0zTGp/s1600/bad_robot.jpg&quot; height=&quot;234&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Please write a java program that solves the problem by finding the minimum time required to travel 43 kilometers. Your solution should print out the correct sequence of distances to be programmed into the robot: for example (10,5,10 and so on...)&lt;br /&gt;
When coding your solution please pay special attention to design, data structures, dynamic programming, faster execution time and creating generic solutions. (it should be fairly easy to change the parameters) Compute and provide Big O notation for main piece of your solution too.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;END-OF-QUESTION&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Before you look at my answers, it will be cool for you to try the exercise too so that we can share feedback in the comments section.&lt;br /&gt;
&lt;br /&gt;
The question brought back memory of my Computer Sciences days, especially Data Structure and Algorithm lectures. At first glance, this looks like a simple problem but it goes deeper than that. Like artists, there are multiple ways to write code but once you look at someone else code, then it becomes difficult to be original ( IP patent law suit anyone?). Any experience developer can write code that would work perfectly for this problem, looking closely to what is being requested and you will notice that there is an extra requirement; &lt;b&gt;dynamic
programming&lt;/b&gt;. For those who needs more information about what dynamic programming is, I suggest the following &lt;a href=&quot;http://en.wikipedia.org/wiki/Dynamic_programming&quot; target=&quot;_blank&quot;&gt;wikipedia article&lt;/a&gt;. I had to spend sometimes reading the article to refresh my memories and off-I-went-hacking-away. Bear in mind that you could solve this problem by rewriting a recursive application but that is not a dynamic programming approach.&lt;br /&gt;
&lt;br /&gt;
Anyway, here are my results ( the algorithm was inspired by a similar problem set).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/2491107.js&quot;&gt;
 
&lt;/script&gt;I hope this helps someone in the future in any ways.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Happy Coding&lt;br /&gt;
&lt;br /&gt;
You can download the source code this github https://github.com/armelnene/the-traveling-robot-problem&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/8860765531041339635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2012/04/traveling-robot-problem.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/8860765531041339635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/8860765531041339635'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2012/04/traveling-robot-problem.html' title='The traveling robot problem'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX-7y27O5UQPdhdjOx0tJ5elr6k87YIlO8vRsJvCgSH8c7IDrTI4mCWlv1IjDdj7yBueSozyui7qEd1l4IPKtz3UNE8w1NQXeZe1-IUMr05m3_vPNcwiNVQq_r0hyphenhypheniu085AUe-k2F0zTGp/s72-c/bad_robot.jpg" height="72" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-5294524229821785536</id><published>2012-04-20T21:48:00.000+01:00</published><updated>2012-04-20T21:48:14.518+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ajax"/><category scheme="http://www.blogger.com/atom/ns#" term="armel nene"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="jquery"/><category scheme="http://www.blogger.com/atom/ns#" term="jsf"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile app"/><category scheme="http://www.blogger.com/atom/ns#" term="primefaces"/><category scheme="http://www.blogger.com/atom/ns#" term="web applications"/><title type='text'>Primefaces Mobile - Weather App Example</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
As a Java developer, I usually get requests of building mobile apps. I like building Java application; enterprise, web and mobile. The latest projects that I have been involved with make heavy use of JSF and &lt;a href=&quot;http://www.primefaces.org/&quot; target=&quot;_blank&quot;&gt;Primefaces&lt;/a&gt; in particular.&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/2431221.js&quot;&gt;
 
&lt;/script&gt;

I am quite confortable with JSF and therefore I decided to build a mobile application using JSF and Primefaces Mobile. Primefaces Mobile wraps &lt;a href=&quot;http://jquerymobile.com/&quot; target=&quot;_blank&quot;&gt;JQuery &lt;/a&gt;as a JSF component so that you do not have to write any Javascript. This approach has huge benefits: JQuery is a well tested framework used by large companies such as Google and Microsoft.&lt;br /&gt;
&lt;br /&gt;
I will make this post quite brief. I wanted to know how easy it would be to recreate the demo from the &lt;a href=&quot;http://www.primefaces.org/showcase-labs/mobile/index.jsf&quot; target=&quot;_blank&quot;&gt;Primefaces Mobile labs&lt;/a&gt; page.&lt;br /&gt;
&lt;br /&gt;
Here is a screenshot of the final application running in Firefox 11 (Windows 7 64 Bit). &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheHXkqFKLar4IY1pM-zUlUEEq7levaAL1MRNm0li7-D11JuTCKdJbVBzRXs-QVj015dnIhY0FjxB0F3SkuQd16K5vmUc-nEzpxiK_iegQx_GU22jAVjcJYPXJDO8T-Jv2R9dn_lWlr8BzV/s1600/primefaces-mobile-weather-app.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheHXkqFKLar4IY1pM-zUlUEEq7levaAL1MRNm0li7-D11JuTCKdJbVBzRXs-QVj015dnIhY0FjxB0F3SkuQd16K5vmUc-nEzpxiK_iegQx_GU22jAVjcJYPXJDO8T-Jv2R9dn_lWlr8BzV/s320/primefaces-mobile-weather-app.PNG&quot; width=&quot;246&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This was a simple example taken directly from the website therefore I was expecting to a short exercise to make build and make it run. Well not so fast.&lt;br /&gt;
&lt;br /&gt;
I created a Maven based Java EE 6 project using Netbeans IDE 7.1.1. After browsing Google for a bit, I spent a few minutes getting the right repository and dependency in place.&lt;br /&gt;
&lt;br /&gt;
Once the dependency where in the place, I had to create the beans required for the actual JSF page to work. I found the Primefaces Mobile backing beans on &lt;a href=&quot;http://code.google.com/p/primefaces/source/search?q=weathercontroller&amp;amp;origq=weathercontroller&amp;amp;btnG=Search+Trunk&quot; target=&quot;_blank&quot;&gt;Google Code&lt;/a&gt;. So now I had everything setup and running. At first glance, the application seemed to running fine and working. Then I tried the application on my iPad and the Android Emulator, and nothing was working. The user interface was displayed but the &quot;get forecast&quot; button was not making any Ajax calls.&lt;br /&gt;
&lt;br /&gt;
So I started to debug the application everytime I had some spare time. I also noticed that, while running on a desktop browser, the application would be able to an Ajax called and updated the screen with the values (see screenshot above) but you wanted to make another to find out the temparature of let&#39;s say London, the nothing would actually unless you refresh the page and try again. OK, so it&#39;s not working as expected but the example on Primefaces Mobile labs worked fine on my iPad, emulator and desktop browser (IE 9 excluded).&lt;br /&gt;
&lt;br /&gt;
So I ran the application using the NetBeans debugger and decided to look through Firebug. The first call goes through and stops at the breakpoint but subsquent calls do not even get to the managed bean. Firebug shows that the other code are being retrieve from the cache. I manually set all the HTTP headers so that it does not cache any content but this is still the same result NOT WORKING!&lt;br /&gt;
&lt;br /&gt;
I have uploaded the code to &lt;a href=&quot;https://github.com/armelnene/PrimefacesMobileWeather&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt; click on the link to download it.&lt;br /&gt;
&lt;br /&gt;
In conclusion, it&#39;s not plug-and-play to make the examples on Primefaces.org labs work. The documentation for the examples are quite poor and I hope that the good folks from Primefaces can take look at my code and tell us what I am doing wrong.&lt;br /&gt;
&lt;br /&gt;
A part from that, Primefaces is a good JSF framework that I use on a daily basis on multiple projects therefore I cannot really put them down but I wished the mobile examples work and tell us what is needed to make it work.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Please share your experience in the comments below or advice on how to fix it. Feel free to download the code from GitHub and have a look to.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Happy coding :)&lt;br /&gt;
&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/5294524229821785536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2012/04/primefaces-mobile-weather-app-example.html#comment-form' title='504 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/5294524229821785536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/5294524229821785536'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2012/04/primefaces-mobile-weather-app-example.html' title='Primefaces Mobile - Weather App Example'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheHXkqFKLar4IY1pM-zUlUEEq7levaAL1MRNm0li7-D11JuTCKdJbVBzRXs-QVj015dnIhY0FjxB0F3SkuQd16K5vmUc-nEzpxiK_iegQx_GU22jAVjcJYPXJDO8T-Jv2R9dn_lWlr8BzV/s72-c/primefaces-mobile-weather-app.PNG" height="72" width="72"/><thr:total>504</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-8804978086796813771</id><published>2012-04-19T16:42:00.000+01:00</published><updated>2014-09-04T19:45:33.932+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="interview question"/><category scheme="http://www.blogger.com/atom/ns#" term="mental algorithm"/><category scheme="http://www.blogger.com/atom/ns#" term="parachute"/><category scheme="http://www.blogger.com/atom/ns#" term="parachutist dilemma"/><category scheme="http://www.blogger.com/atom/ns#" term="philosoper dilemma"/><category scheme="http://www.blogger.com/atom/ns#" term="problem solving"/><title type='text'>Parachutist Dilemma - a parallel programming problem</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Here is a little mental problem solving exercise for you to try to do in 30 seconds; that was the time I was allowed. So I had a telephone interview from a company today and this guy asked me this question utilizing a parrallel programming algorithm. Here are the details:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjINW_JNON6jVGORI668xuoXDPNIqFlDb3UrTvChxZCShSl3bqoYBcRHH6PJQtO0ZvBcVZNxFgJ3Ampavcwd_egLyPoUeL-F00RwyfQLWddXBEz53HYDvSvX_4RdS3goal-Tt4YRZd4eAgg/s1600/670px-Cope-With-a-Double-Parachute-Failure-Step-3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjINW_JNON6jVGORI668xuoXDPNIqFlDb3UrTvChxZCShSl3bqoYBcRHH6PJQtO0ZvBcVZNxFgJ3Ampavcwd_egLyPoUeL-F00RwyfQLWddXBEz53HYDvSvX_4RdS3goal-Tt4YRZd4eAgg/s1600/670px-Cope-With-a-Double-Parachute-Failure-Step-3.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;i&gt;Two parachutist (A and B: A is in front of B) land on single line; one behind the other. Their parachutes also lands behind them respectively.&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;We have a set of instructions which are as follow (all instructions are executed, meaning A and B will executed instructions at the same time).&lt;/i&gt;&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;i&gt;move forward 1 step&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;move back 1 step&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;if standing on a parachute go to (1 | 2) &lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Question:&lt;br /&gt;
&lt;i&gt; &lt;/i&gt;&lt;br /&gt;
&lt;i&gt;We need our parachutist to somehow meet each other, what are the sets of instructions that can make that happen?&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
Please try to answer before reading my answer below&lt;br /&gt;
&lt;br /&gt;
My answer:&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;execute 2&lt;/li&gt;
&lt;li&gt;execute 3&lt;/li&gt;
&lt;/ol&gt;
Explanation:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;When both parachutist move back 1 step, they will both be on their parachutes&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;when parachutist A stands on his parachute, he will move back 1 step therefore go to 1&lt;/li&gt;
&lt;li&gt;when parachutist B lands on his parachute, he will move forward 1 step&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
Therefore our two parachutist will meet in B original position. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;NB&lt;/b&gt; I had to change the original questions as the interviewer explanations led to the parachutist to never meet.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/8804978086796813771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2012/04/parachutist-dilemma-parallel.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/8804978086796813771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/8804978086796813771'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2012/04/parachutist-dilemma-parallel.html' title='Parachutist Dilemma - a parallel programming problem'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjINW_JNON6jVGORI668xuoXDPNIqFlDb3UrTvChxZCShSl3bqoYBcRHH6PJQtO0ZvBcVZNxFgJ3Ampavcwd_egLyPoUeL-F00RwyfQLWddXBEz53HYDvSvX_4RdS3goal-Tt4YRZd4eAgg/s72-c/670px-Cope-With-a-Double-Parachute-Failure-Step-3.jpg" height="72" width="72"/><thr:total>4</thr:total><georss:featurename>London, UK</georss:featurename><georss:point>51.5081289 -0.128005</georss:point><georss:box>51.350006900000004 -0.443862 51.6662509 0.187852</georss:box></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-132992156248239008</id><published>2011-02-20T23:23:00.000+00:00</published><updated>2011-02-25T10:57:59.640+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cio"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud computing"/><category scheme="http://www.blogger.com/atom/ns#" term="discussion"/><category scheme="http://www.blogger.com/atom/ns#" term="iaas"/><category scheme="http://www.blogger.com/atom/ns#" term="linkedin"/><category scheme="http://www.blogger.com/atom/ns#" term="London Startups Group"/><category scheme="http://www.blogger.com/atom/ns#" term="news"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="paas"/><category scheme="http://www.blogger.com/atom/ns#" term="saas"/><category scheme="http://www.blogger.com/atom/ns#" term="technology"/><title type='text'>Cloud computing vs Open Source - Most CIO cannot tell the difference</title><content type='html'>&lt;span style=&quot;font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 1pt;&quot;&gt;&lt;/span&gt;   &lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;Few weeks ago, I posted a discussion &lt;a href=&quot;http://lnkd.in/yPr3MV&quot;&gt;here&lt;/a&gt; in a CIO forum on LinkedIn and frankly some of the comments are very interesting to say the least. Now I decided to bring some technical guys to the discussion table. My argument was and still is as follow&lt;/div&gt;&lt;div class=&quot;MsoQuote&quot;&gt;“I have been reading many threads about Cloud computing and I came to conclude that most CIO (maybe because of their business background) do not know the difference or real benefits of Cloud computing or Open Source software.&lt;br /&gt;
&lt;br /&gt;
Hi, I am not expecting everyone to agree with me but here is my argument. Most CIOs are interested in Cloud computing because of cost. COST!!? That&#39;s very interesting because to my humble opinion, this only applies to IaaS (Infrastructure as a Service). If you do not want to spend money on hardware and be left with redundant system then IaaS is a good approach but that&#39;s about it. I work with Cloud computing (specifically SaaS) and this next one might hurt my business but it has to be said; SaaS is not cost saving when you comparing it Open Source alternatives that you can host on your IaaS system…. &lt;a href=&quot;http://lnkd.in/yPr3MV&quot;&gt;Read more here&lt;/a&gt;”&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;I am not sure that they understood the argument. I was not expecting anybody too agree with me and I wanted CIOs in the group to share their insight not sound like a copy of a Gartner report. Before making any conclusion, keep in mind that I am talking here about Software as a Service (SaaS), as defined &lt;a href=&quot;http://en.wikipedia.org/wiki/Software_as_a_service&quot;&gt;here&lt;/a&gt;. In network architecture design, the external network&amp;nbsp; is represented by the “cloud” symbol therefore I would have to agree Wikipedia’s definition of cloud.&amp;nbsp; It is a software served over an external network regardless of a private network (private cloud) or public network (public cloud). YES – the internet was built on cloud technology. If you use any software over the internet; be it email, search, video or social network, the system is hosted by an external party which you do not have control over. The name cloud is just a marketing gimmick because hosted applications have been around for more than 20 years since Compuserve and Internet Relay Chat (IRC &amp;amp; BBS). So you see, “cloud” is definitely not new. Therefore software delivered over the internet such as Google apps and Salesforce can be also deployed using Open Source alternative. Cloud promises the following: scalability, peace of mind as it maintained by the providers and lower cost. CIO, I will tell you that your software, that it is deployed in the cloud or not will not be able to scale beyond the hardware and network capacity. I have another question for CIOs:&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Do CIOs care or know where all their applications are running?&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;That question is usually left to the technical team to decide within the budgets of the project and any other company politics. The biggest failures of IT projects is due to the fact that the CIO (or “the business” as it is usually referred as) do not know what they are trying to achieve (lack or misunderstandings of requirements) therefore it goes past the delivery and budget.&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;So where does Open Source fits in, one might ask? Open Source software allows a business to take best of breed software and customised them to their own needs for free (as in free beer). If you do not want to support the Open Source software you can get support services but the software is hosted on your own system including your private cloud (Infrastructure as a Service). Let’s put it in to context; if a company requires a CRM system - they can download vTiger, customise it and either support it themselves or buy support. The same goes for an ERP system like Apache Ofbiz and MySQL for database. I am in favour of SaaS offering, after all I run a SaaS-based company. Nevertheless, CIOs do not confuse SaaS as being cheap, if you want something that has a low cost of ownership, then I suggest you go for an Open Source alternative if it exists. So why do I say that most CIO cannot tell the difference; SaaS is not cheap and does not have a lower cost of ownership when comparing it to Open Source alternatives. And by the way, you do not need to have an army of developers to build and customise your Open Source software. Do you really want the SaaS provider on a shared system to have access to your LDAP system? What happens when you want to integrate or port your existing data to your new fancy cloud based system? CIOs should not try to lie to me. I attended many meetings and conferences to know that most of them just want to please the board. What are the differences between cloud and virtualisation? What happens to your existing hardware once you moved your applications to cloud, have you thought of using them for virtualisation? So please do not make uneducated comments as “&lt;span class=&quot;comment-body&quot;&gt;I don&#39;t know a single CIO who can&#39;t tell the difference between Cloud Computing &amp;amp; Open Source - maybe I move in different circles.&lt;/span&gt;” I am not talking about dictionary or Gartner definitions.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;comment-body&quot;&gt;CIOs, after reading this and before replying you should go and sit down with your technical team and ask them the difference, only after that you can provide a good educated comment. If you want to be on the “cloud” train then you are free to do so but if SaaS is not part of cloud offerings, please feel free to enlighten me as I am always willing to learn something new. &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;comment-body&quot;&gt;Who should make the decisions to go cloud or not? You are the CIOs, you tell me. Is it the developer, the architect, the project manager or the almighty CIOs from his ivory tower? There is no trickery here, every fool can define a word – just do this; think of a word then Google using the following “what is ‘the word’” then voila your definition. If you need someone to school you up then drop me an email. Based on the comments on LinkedIn, all I can say is WOW. Leave the technical aspect to the technical guys and you can focus on playing golf.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/132992156248239008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2011/02/cloud-computing-vs-open-source-most-cio.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/132992156248239008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/132992156248239008'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2011/02/cloud-computing-vs-open-source-most-cio.html' title='Cloud computing vs Open Source - Most CIO cannot tell the difference'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-8747045884187239813</id><published>2010-04-12T00:20:00.001+01:00</published><updated>2010-04-12T00:20:22.932+01:00</updated><title type='text'>Apple vs Geeks - is this the end of a love affair?</title><content type='html'>&lt;div xmlns=&#39;http://www.w3.org/1999/xhtml&#39;&gt;This isn&#39;t &lt;a href=&#39;http://mashable.com/2010/04/10/steve-jobs-adobe/&#39;&gt;news&lt;/a&gt; anymore but I wanted to wait for more light on the subject before I made any comments. &lt;img height=&#39;128&#39; width=&#39;192&#39; src=&#39;http://i207.photobucket.com/albums/bb109/josecarlo1129/apple_flash.jpg&#39; style=&#39;max-width: 800px;&#39;/&gt;Apple vs Adobe is actually an understatement. Actually, this is no surprise as Apple has always been a control freak. I mean, just take a look around you. How many PCs do you see running Apple MacOS which has not been branded by Apple Inc? Anybody trying to build a PC which runs their OS gets &lt;a href=&#39;http://news.cnet.com/8301-13860_3-9991572-56.html&#39; target=&#39;_blank&#39;&gt;sued&lt;/a&gt;. Seriously, Microsoft may be evil but they have created an economy which in Steve Jobs world would have never existed. History is about to repeat itself; Apple Inc introduces a great idea/ products but would eventually become a niche player (well, only time will tell!!!). &lt;br/&gt;&lt;br/&gt;I don&#39;t actually believe that real geeks use MacOS; Linux or if you work for a company this would MS Windows. Let&#39;s face it, Apple PCs (or Book, G5 or whatever) look very good on the receptionist desk and that&#39;s about it. Steve doesn&#39;t want you to innovate, he wants you to follow him to whatever **** he introduces (ipad anybody?). &lt;br/&gt;&lt;br/&gt;Let me get back to the subject. Being software developer and I have invested time and money to build knowledge and skills. I cannot possibly learn every single programming language and therefore would welcome any tools that help me to cross-compile my code. I am not even a flash developer and seriously I don&#39;t care less about what they do. But the new Apple mobile SDK TOS affects more than just Adobe, take a look at the &lt;a href=&#39;http://phonegap.com/&#39; target=&#39;_blank&#39;&gt;Open Source PhoneGap&lt;/a&gt; where you develop native mobile applications by programming using (the most popular language???) HTML + JavaScript. Thanks to the control freaks at Apple Inc, now this would not be possible. This is the same as saying that when you go on holiday to another country, you cannot use a translator to communicate and that you better go learn whatever language they speak in that country or STAY OUT!!! &lt;br/&gt;&lt;br/&gt;First they didn&#39;t want Flash and Java to run on the iPhone. To be fair to them, those virtual apps kills the phone performance (so they say.). Therefore if you wanted to run any other program on their platform, you needed to translate it into a native app. EVEN THAT&#39;S NOT LEGALLY POSSIBLE ANYMORE!!!! This is a big **** YOU to all the other programming languages. Can you imagine if Oracle said that Groovy, JRuby or Jython were not allowed to run on the JVM anymore? Or Microsoft saying Java app are not allowed to run on any MS platform through an intermediary (JVM)? Well, this is exactly what Apple Inc. is doing?&lt;br/&gt;&lt;br/&gt;This is the best part; THERE IS NOTHING YOU OR I CAN DO ABOUT IT!!! Right now, the iPhone is the market leader for new generation of smartphones ( there are not the market leader in smartphone, that crown goes to Nokia) supported by its ecosystem of developer providing more than 150k apps in the App Store.&lt;br/&gt;&lt;br/&gt;Look there is no way I am going to learn Objective-C unless I am getting paid for it. All we can do that is hope for Android, RIM and Windows Phone 7 to gain a large enough market share and we would see history repeat itself again. I am definitely not saying that you should boycott their products but if you are looking to build a company and make profit developing software for mobile devices, maybe you should think twice about venturing on the iPhone (off course, unless you know Objective-C).&lt;br/&gt;&lt;br/&gt;Feel free to let me know your thoughts and I am sure that the Apple fanatics would not hold their thoughts on this one.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/8747045884187239813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2010/04/apple-vs-geeks-is-this-end-of-love.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/8747045884187239813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/8747045884187239813'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2010/04/apple-vs-geeks-is-this-end-of-love.html' title='Apple vs Geeks - is this the end of a love affair?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-5150467403568857188</id><published>2010-02-26T23:59:00.001+00:00</published><updated>2010-02-27T00:04:55.432+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="armel nene"/><category scheme="http://www.blogger.com/atom/ns#" term="ATOM"/><category scheme="http://www.blogger.com/atom/ns#" term="bebo"/><category scheme="http://www.blogger.com/atom/ns#" term="facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="networking"/><category scheme="http://www.blogger.com/atom/ns#" term="RSS"/><category scheme="http://www.blogger.com/atom/ns#" term="social networking"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Patent"/><category scheme="http://www.blogger.com/atom/ns#" term="twitter"/><category scheme="http://www.blogger.com/atom/ns#" term="youtube"/><title type='text'>Facebook Patents RSS-like Technology - Is That a Joke?</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://images.huffingtonpost.com/gen/110479/thumbs/s-FACEBOOK-POKE-JAIL-large.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://images.huffingtonpost.com/gen/110479/thumbs/s-FACEBOOK-POKE-JAIL-large.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;First thing first, Facebook did not patent RSS but their news feed on their site!!! I have to admit, this is a quite neat feature and what would be the point of&amp;nbsp; a social (networking) site if you did not know what your entourage were upto. So Facebook included a friends activity log (news stream) to make it easy for people to find out. Thats a good feature but it&#39;s by no means an innovative technology. DZone, a developer social &quot;networking&quot; site provides a log about news that users have posted, commented on and rated. This is to show that there&#39;s nothing innovative about that feature but a convenience.&lt;br /&gt;
&lt;br /&gt;
I have been very busy lately and did not have time to check my Google Reader but I did today. And voila! I see the news flash from Mashable - &lt;a href=&quot;http://mashable.com/2010/02/25/facebook-news-feed-patent/&quot; target=&quot;_blank&quot;&gt;Facebook Secures Patent for News Feed&lt;/a&gt;. My first reaction, based on the title before I even read the article, was WOW!!! Facebook managed to patent RSS or ATOM or anything else on that scale. Then came the joke when I started to read the article specially the abstract of the patent:&lt;br /&gt;
&lt;blockquote&gt;“A method for displaying a news feed in a social network environment is described. The method includes generating news items regarding activities associated with a user of a social network environment and attaching an informational link associated with at least one of the activities, to at least one of the news items, as well as limiting access to the news items to a predetermined set of viewers and assigning an order to the news items. The method further may further include displaying the news items in the assigned order to at least one viewing user of the predetermined set of viewers and dynamically limiting the number of news items displayed.”&lt;/blockquote&gt;&lt;br /&gt;
I don&#39;t know about you genius guys but I could not make much sense of the abstract but I did pickup a few keywords such as:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;News Feed&lt;/li&gt;
&lt;li&gt;Social Networking&lt;/li&gt;
&lt;/ul&gt;That&#39;s it! Everything else is just pure jibberish. I can summarized their abstract as follow:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;We know about RSS/ ATOM which are real news feed. RSS provides real-time (depending on how often you poll) updates; can that be classified as a site master activity update. It also includes links and media about the site or users generating the feeds. That&#39;s a cool feature and we copied the idea and implemented in our site, now we are the biggest community site in the western hemisphere&lt;/i&gt; &lt;i&gt;so we are telling not to use any RSS or derivated technology when building a community site (social networking).&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Let&#39;s face it, I feel sorry for the smaller community sites but I do not think that patent will affect Twitter or Google but watch out MySpace. I did not even know you could patent someone else already patented technology. This is not a new way of doing something but more like patenting the environment where the technology is applied. To be very geeky about this, Facebook News Feed are just a bunch of SQL queries displaying latest records on a User Interface. I did not know you could even dare trying to patent that. To be frank, I am not sure that they could have patented that in Europe. I am looking forward to seeing how to will now exercise their new POWER. What would happen to Ning, BuddyPress and Elg, those are software and platform used to create social site but what about Youtube and UStream. Anyway site operating within the US and implementing the patent features of Facebook will have to pay them. But outside the US territoty, those company would be free to operate. How to you control access to the Internet without censoring like China and Iran?&lt;br /&gt;
&lt;br /&gt;
Anyway, this is just my opinion but you are welcomed to share yours with the rest of us. For now, why not read about RSS &lt;a href=&quot;http://en.wikipedia.org/wiki/RSS&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; and see exatly what I am talking about.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;zemanta-pixie&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;zemanta-pixie-img&quot; src=&quot;http://img.zemanta.com/pixy.gif?x-id=2af6b620-10a2-8111-aea5-48700ff888bc&quot; /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/5150467403568857188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2010/02/facebook-patents-rss-like-technology-is.html#comment-form' title='36 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/5150467403568857188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/5150467403568857188'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2010/02/facebook-patents-rss-like-technology-is.html' title='Facebook Patents RSS-like Technology - Is That a Joke?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>36</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-2011825434986048458</id><published>2010-01-31T11:58:00.001+00:00</published><updated>2014-09-04T19:57:51.235+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apache Foundation"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="etapix"/><category scheme="http://www.blogger.com/atom/ns#" term="IBM"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="java developer"/><category scheme="http://www.blogger.com/atom/ns#" term="javafx"/><category scheme="http://www.blogger.com/atom/ns#" term="JDeveloper"/><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="plug-ins"/><category scheme="http://www.blogger.com/atom/ns#" term="plugins"/><category scheme="http://www.blogger.com/atom/ns#" term="sun"/><title type='text'>Will Oracle really make NetBeans the BEST IDE for Java</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif-3EwcFEmKbLCUK50eb713U6XhK_68MYtv7HcWV-R5-Gnhji2zidVbDk_t05jtwZFyvtXLFjiZRCk9vgd6RSywdiE-CSsEscuKLLDCcxIv2OEmJ7czO17Qv3mjqGr8OlD9wbPYY3jgoPu/s1600/20090420-oracle-buys-sun.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif-3EwcFEmKbLCUK50eb713U6XhK_68MYtv7HcWV-R5-Gnhji2zidVbDk_t05jtwZFyvtXLFjiZRCk9vgd6RSywdiE-CSsEscuKLLDCcxIv2OEmJ7czO17Qv3mjqGr8OlD9wbPYY3jgoPu/s1600/20090420-oracle-buys-sun.jpg&quot; height=&quot;422&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Not yet!!! But according to their webcast they want to make &lt;a href=&quot;http://oracle.com.edgesuite.net/ivt/4000/8104/9236/12627/lobby_external_flash_clean_480x360/default.htm&quot; target=&quot;_blank&quot;&gt;NetBeans the best Java IDE&lt;/a&gt;. This is a statement not to be taken lightly. Oracle are now investing in three IDEs which are all established in different ways. JDeveloper is Oracle&#39;s IDE of choice, I am currently using it in my current project as I am developing for Oracle WebCenter. Oracle is also a strategic developer and board member of the &lt;a href=&quot;http://www.oracle.com/technology/tech/eclipse/index.html&quot; target=&quot;_blank&quot;&gt;Eclipse foundation&lt;/a&gt;. I do not understand what exactly is a strategic developer but I know that JDeveloper is their strategic IDE. Now, introducing NetBeans, Oracle has inherited NetBeans as part of Sun acquisitions (and a ton of products and services). Until now, Oracle has never made any plug-ins for the NetBeans platform but now they promise to make it the best IDE for Java, how will they make that happen?&lt;br /&gt;
&lt;br /&gt;
I am a NetBeans evangelist and as the rest of the community, it was good news to actually know where it stands in the &quot;Oracle&quot; vision. So Oracle will never drop JDeveloper therefore the real fight is between Eclipse and NetBeans (as it always has been). In the first step of making NetBeans the best IDE, Oracle shold immediately start porting all their Eclipse plug-ins to NetBeans. Eclipse has strength in its alliance which also includes IBM (fierce rival to Oracle). Something has to give and Eclipse will not never close shop because Oracle has left them which is not as worse as lack of investment in the NetBeans community. It would also be a foolish decision to give NetBeans to the Apache Foundation (no disrespect here but it seems that public funds do not grow on trees).&lt;br /&gt;
&lt;br /&gt;
There is something funny about Oracle &quot;choice&quot; statement. Did anybody tried to develop for WebCenter using NetBeans or Eclipse? That&#39;s a nightmare!!! There is no choice given, they literally forced us to use JDeveloper (Do you require any Oracle support?) in our company which is the largest in its field in Europe (I am avoiding to mention the company name but you should get it from my twitter stream).&lt;br /&gt;
&lt;br /&gt;
Eclipse and NetBeans are direct competitors with Eclipse being the de facto IDE for Java, dropping Eclipse support would close doors to millions of developers and dropping NetBeans will disaster for many paying customers (Sun&#39;s partners).&amp;nbsp; I am not sure what is going to happen in the NetBeans/ Eclipse and JDeveloper saga but something has to give.&lt;br /&gt;
&lt;br /&gt;
Let me know what you think.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;zemanta-pixie&quot;&gt;
&lt;img alt=&quot;&quot; class=&quot;zemanta-pixie-img&quot; src=&quot;http://img.zemanta.com/pixy.gif?x-id=cbee6e0c-fff5-88c2-aab0-5031bb1dbd58&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/2011825434986048458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2010/01/will-oracle-really-make-netbeans-best.html#comment-form' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/2011825434986048458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/2011825434986048458'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2010/01/will-oracle-really-make-netbeans-best.html' title='Will Oracle really make NetBeans the BEST IDE for Java'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif-3EwcFEmKbLCUK50eb713U6XhK_68MYtv7HcWV-R5-Gnhji2zidVbDk_t05jtwZFyvtXLFjiZRCk9vgd6RSywdiE-CSsEscuKLLDCcxIv2OEmJ7czO17Qv3mjqGr8OlD9wbPYY3jgoPu/s72-c/20090420-oracle-buys-sun.jpg" height="72" width="72"/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-2633843173549521185</id><published>2010-01-05T18:48:00.001+00:00</published><updated>2010-01-05T18:48:44.395+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="business intelligence for web site"/><category scheme="http://www.blogger.com/atom/ns#" term="free analytics"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="google analytics"/><category scheme="http://www.blogger.com/atom/ns#" term="real time analytics"/><category scheme="http://www.blogger.com/atom/ns#" term="website report"/><category scheme="http://www.blogger.com/atom/ns#" term="website traffic analyser"/><category scheme="http://www.blogger.com/atom/ns#" term="woopra"/><title type='text'>Google Analytics vs Woopra</title><content type='html'>&lt;div xmlns=&#39;http://www.w3.org/1999/xhtml&#39;&gt;As you can see by reading my blog that I am not the type to compare and endorse products as I think the products owners surely must have a marketing department for that. Anyway, as a blogger, I like to be aware about how well my entries are doing. For awhile, I have been using Google Analytics (so as the top 100+ websites) as it is free and provides me with enough information on the state of my blog, corporate and client&#39;s sites. The problem with Google Analytics is that it gives me late news (same as BBC, CNN, TF1 and Sky News and every other news @ 10 channels). I have been working in Business Intelligence for past three years and let me tell you that old news is what caused the current economy downturn. You should not based future goals on outdated data (information), you need to have information at your fingertips on demand and this is where &lt;a href=&#39;http://www.woopra.com/&#39; target=&#39;_blank&#39;&gt;Woopra &lt;/a&gt;fits in.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#39;http://www.woopra.com/&#39; target=&#39;_blank&#39;&gt;Woopra&lt;/a&gt; is not free but they do provide a free version (basic) which is enough for most website. I believe if you need more than what they provide, I am sure that you could afford the fee. Anyway, what I really like with this software is its real-time ability and I think that it is something that the folks at Google can easily implement. So I decided to give it a try (last night) and see what was the &quot;big&quot; deal:&lt;br/&gt;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;This is what we call real-time data, the fact that I could see where my visitors (to my blog) where coming from, what they were currently looking at (which article) and then where they went next in real-time. This is not a breathrough but the fact that it was available for free made it even better.&lt;/li&gt;&lt;li&gt;Visitors tagging; they are so many sites which is used to tag content on the internet (Digg, Delicious, DZone, Reddit and etc...) so that you can share and easily found what you were looking at before. Ok, Woopra tagging cannot be shared but you can tag a visitor so that you can &quot;spy&quot; on his activity: how many times did it visit the site, which articles is he more interested in, track the comments and more. This is an important feature in profiling your audiences.&lt;/li&gt;&lt;li&gt;Real-time chat; this is a good feature and I think that is indispensable for those running an E-Commerce site. Users are not forced to install any software, no plugins, nothing in order to chat with the site&#39;s owner (Any security concern, contact Woopra). I tried it on my blog and to be frank, I haven&#39;t been successful initiating a chat with visitors on my blog (they all refused the request :( ) but I can see it being successful on E-commerce site. Another aspect of this feature is the ability for the site owner to start the chat. So you can see what the user doing and which page he&#39;s currently looking at and therefore offer your help. I call it the virtual shop assistant. Users can also start a conversation so it&#39;s two-way.&lt;/li&gt;&lt;/ul&gt;I know I did not go into details about &lt;a href=&#39;https://www.google.com/analytics/&#39; target=&#39;_blank&#39;&gt;Google Analytics &lt;/a&gt;but you can register for free and see for yourself. Google Analytics seems out of date, Twitter is real-time, Google and Bing are implementing real-time features; don&#39;t you think that you need to be able to track your website performance in realtime too.&lt;a href=&#39;http://www.flickr.com/photos/21841907@N05/4248023115&#39;&gt;&lt;img src=&#39;http://farm3.static.flickr.com/2768/4248023115_9d7988e4ef.jpg&#39;/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Another thing, how come Woopra shows some countries as EU when UK, France, Italy, Greece, Germany, Ireland, Spain, Belgium and Poland are shown as their respective countries. What does the European Union means in that case? Also, it is a shame that Woopra is not a web based application (the current web version is so weak you might aswell use Google Analytics ;). &lt;br/&gt;&lt;br/&gt;Anyway, if you have use it before or have a different view, feel free to leave your comments.&lt;br/&gt;&lt;br/&gt;&lt;span class=&#39;status&#39;&gt;N265Q9AKMDFZ&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class=&#39;zemanta-pixie&#39;&gt;&lt;img src=&#39;http://img.zemanta.com/pixy.gif?x-id=3830e394-2500-8cd3-9c55-cb02fb4c6d18&#39; alt=&#39;&#39; class=&#39;zemanta-pixie-img&#39;/&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/2633843173549521185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2010/01/google-analytics-vs-woopra.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/2633843173549521185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/2633843173549521185'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2010/01/google-analytics-vs-woopra.html' title='Google Analytics vs Woopra'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2768/4248023115_9d7988e4ef_t.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-104985193890012283</id><published>2009-12-31T15:00:00.001+00:00</published><updated>2014-09-04T19:48:25.200+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="armel nene"/><category scheme="http://www.blogger.com/atom/ns#" term="google app engine"/><category scheme="http://www.blogger.com/atom/ns#" term="gwt"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javafx"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="plugins"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="ria"/><category scheme="http://www.blogger.com/atom/ns#" term="twitter"/><category scheme="http://www.blogger.com/atom/ns#" term="wave"/><category scheme="http://www.blogger.com/atom/ns#" term="web 2.0"/><category scheme="http://www.blogger.com/atom/ns#" term="web applications"/><category scheme="http://www.blogger.com/atom/ns#" term="youtube"/><title type='text'>Happy New Year Techies!!!</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDtjmvOgYDGhsL-BvV2WF1zcQr9XX9rkidUr463kn8dHQHIPBKuiBZsIO1_NJsyOGg1HPPdCHtP4dIbQz_4flPot20iwc_wjs7ZR8xd2G5sSna5JfPcz-rlfGn_Ss82Et8Q7-FuRp-ucmg/s1600/happy2010.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDtjmvOgYDGhsL-BvV2WF1zcQr9XX9rkidUr463kn8dHQHIPBKuiBZsIO1_NJsyOGg1HPPdCHtP4dIbQz_4flPot20iwc_wjs7ZR8xd2G5sSna5JfPcz-rlfGn_Ss82Et8Q7-FuRp-ucmg/s1600/happy2010.jpg&quot; height=&quot;512&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I just wanted to say happy new year to the community, without you guys, we would still be living in the dark ages. Here are a few that I am looking forward to in the new year:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Oracle Sun merger:- The untold future of NetBeans, MySQL, Swing and every open source that Sun has been working on in the past. What would happen to Sun Open Source (SOS!!!) Movement.&lt;/li&gt;
&lt;li&gt;Looking forward to JavaFX1.3 release, Authoring tool and improved Composer plugin.&lt;/li&gt;
&lt;li&gt;Android uprise against iPhone (not because I can easily write Android based application) and hopefully with Visual XML builder to build Android UI. JavaFX running on Android, anybody????&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Looking forward to seeing real-world JavaFX application and possibly a showcase linked to the JavaFX.com site.&lt;/li&gt;
&lt;li&gt;Java EE 6 support in Google App Engine&lt;/li&gt;
&lt;li&gt;Google Wave open to the public and how well it does against Twitter and Facebook&lt;/li&gt;
&lt;li&gt;Java Store open to Europe (well this is where I am based and want to sell applications not just provide free).&lt;/li&gt;
&lt;li&gt;My new video blog ( well that&#39;s me trying to be more Armel 2.0 - the sequel) to better engage with the community.&lt;/li&gt;
&lt;li&gt;looking forward to networking with fellow developers and techies.&lt;/li&gt;
&lt;li&gt;looking forward to the new buzzwords (old technology, new name)&lt;/li&gt;
&lt;/ol&gt;
Well, 2009 is was good year for Java and tech scene. I hope that you all enjoyed the year as much as I did. Why not share what wish list with me (comment box). Subscribe to follow my blog as I will try to bring more interesting articles in the new year.&lt;br /&gt;
&lt;br /&gt;
Happy 2010 New Year, wish you all; success, properity, fame (yup) and fortune. Don&#39;t forget, if you need a server-side, UI, Android or JavaFx developer, just mail me.&lt;br /&gt;
&lt;br /&gt;
&lt;object height=&quot;340&quot; width=&quot;560&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/zdU-YUSzkUI&amp;hl=en_GB&amp;fs=1&amp;&quot;&gt;&lt;/param&gt;
&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;
&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;
&lt;embed src=&quot;http://www.youtube.com/v/zdU-YUSzkUI&amp;hl=en_GB&amp;fs=1&amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;560&quot; height=&quot;340&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;zemanta-pixie&quot;&gt;
&lt;img alt=&quot;&quot; class=&quot;zemanta-pixie-img&quot; src=&quot;http://img.zemanta.com/pixy.gif?x-id=63052a8a-3e32-838f-a42b-2b85ed972685&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/104985193890012283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2009/12/happy-new-year-techies.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/104985193890012283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/104985193890012283'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2009/12/happy-new-year-techies.html' title='Happy New Year Techies!!!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDtjmvOgYDGhsL-BvV2WF1zcQr9XX9rkidUr463kn8dHQHIPBKuiBZsIO1_NJsyOGg1HPPdCHtP4dIbQz_4flPot20iwc_wjs7ZR8xd2G5sSna5JfPcz-rlfGn_Ss82Et8Q7-FuRp-ucmg/s72-c/happy2010.jpg" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-2470613226431775672</id><published>2009-12-23T00:50:00.001+00:00</published><updated>2009-12-23T01:01:28.840+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="api"/><category scheme="http://www.blogger.com/atom/ns#" term="armel nene"/><category scheme="http://www.blogger.com/atom/ns#" term="facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="google app engine"/><category scheme="http://www.blogger.com/atom/ns#" term="gwt"/><category scheme="http://www.blogger.com/atom/ns#" term="j2se"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javscript"/><category scheme="http://www.blogger.com/atom/ns#" term="openid"/><category scheme="http://www.blogger.com/atom/ns#" term="web 2.0"/><title type='text'>Dummies Guide to GWT and OpenID - with example code</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;Once (?) in awhile, we developers browse the web for some quick and dirty solutions to some of our coding problems (sometimes not even problems, right?). This is another of those days, everything was going fine on this project I am currently working on. This is not a social networking sites but a site for sharing and comunicating (how I missed the days of the chatrooms) similar in many aspect to Digg and DZone but which also allows users to communicate in realtime and leave comments. So the back-end was sort of completed but so now time to focus on the user registration. &lt;br /&gt;
&lt;br /&gt;
The sites needed to be open and avoid repeatitive tasks such registering users. The way forward was to implement some authentication to allow users to register with some sort of universally accessible ID (or sort of). Facebook Connect, OpenSocial and Google Accounts have their advantages but to me personally; the disadvantages outweight the pros. These are some of the disadvantages of those platform:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Facebook is a popular site hence is its platform, Facebook Connect, in mostly Europe and America but not everybody in Europe and America have a Facebook account.&lt;/li&gt;
&lt;li&gt;OpenSocial, when it comes to single logon, has more advantages than Facebook. I supposed that if we do take into consideration all the OpenSocial sites, we might have apossible larger user based than supporting Facebook alone. Even that was too limited.&lt;/li&gt;
&lt;li&gt;Google Accounts, one thing Google does not advertise its user base. I could be wrong but do anybody actually knows how many people uses the various Google services (excluding search). Google has the same disadvantages as Facebook.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Enter &lt;a href=&quot;http://openid.net/&quot; target=&quot;_blank&quot;&gt;OpenID. OpenID&lt;/a&gt; has been around longer than most Internet-based decentralised authentication platform. The beauty of this platform is that it also supported by most (if not all) large site on the Internet. From AOL, BBC, CNN to YAHOO and ZIMBRA, as I said most sites (based on the alphabet) support OpenID, check the &lt;a href=&quot;http://openiddirectory.com/&quot; target=&quot;_blank&quot;&gt;OpenID Directory&lt;/a&gt;. It was recently announced that OpenID has reached 1Billion enabled accounts (&lt;a href=&quot;http://www.webmonkey.com/blog/OpenID%3A_Over_One_Billion_%28Potentially%29_Served&quot; target=&quot;_blank&quot;&gt;read here&lt;/a&gt;). Based on those figures, I decided that OpenID for now was the authentication choice for this application. I will not be discussing any security issues in this entry, there are plenty of resources available on the Internet for that.&lt;br /&gt;
&lt;br /&gt;
OK, so I am a Java developer and I am developing the front-end using GWT and Java on the server-side. I searched on the Internet for solutions on how to implement the authentication as GWT RPC are different to normal servlet call. I spent more time reading about the OpenID specification and implementations examples on the Internet. I have to admit that some of tutorials that I found on the Internet were somehow confusing and not helpful at all. Therefore I decided to write my own Dummies Guide to GWT and OpenID.&lt;br /&gt;
&lt;br /&gt;
&lt;big&gt;&lt;b&gt;Dummies Guide to GWT and OpenID&lt;/b&gt;&lt;/big&gt;&lt;br /&gt;
&lt;br /&gt;
First of all, it is important to know how OpenID works (please check the &lt;a href=&quot;http://www.openid.net/&quot; target=&quot;_blank&quot;&gt;OpenID&lt;/a&gt; site for more info).&lt;br /&gt;
&lt;br /&gt;
In a nutshell, OpenID allows you to authenticate with website (supporting the standard) with just an URL and voila. Your URL has to be hosted by an OpenID provider in order for it to work. For example, my blog is hosted by Google on blogspot.com. Google supports OpenID authentication therefore if a reader wanted to leave a comment on my blog, he does not have to have a Google Account as he can log-in with his Yahoo or AOL or Facebook or Wordpress or any other OpenID provider sites, and then leave a comment, that simple.&lt;br /&gt;
&lt;br /&gt;
&lt;big&gt;&lt;b&gt;GWT to OpenID and back&lt;/b&gt;&lt;/big&gt;&lt;br /&gt;
&lt;br /&gt;
There are two ways to authenticate a user with an OpenID provider and GWT supports both. When authenticating a user, the relaying site (the site the user is trying to access) redirects to user to the OpenID provider (i.e. Google) login page.&lt;br /&gt;
&lt;img height=&quot;391&quot; src=&quot;http://i.zdnet.com/blogs/openid-1.jpg&quot; style=&quot;max-width: 800px;&quot; width=&quot;624&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
The problem will be with the GWT RPC mechanism. GWT RPC calls are asynchronous and you cannot make any redirections. Therefore we need a way to execute the redirection from the client side, here is the code (I use &lt;a href=&quot;http://code.google.com/p/openid4java/&quot; target=&quot;_blank&quot;&gt;OpenID for Java&lt;/a&gt; to handle the openID discovery from the RPC servlet), I then used USER object (just a simple POJO which only stores the redirection URL and the parameters) to be sent back and forth between the front-end and back-end.&lt;br /&gt;
&lt;br /&gt;
#######################################################&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;public&amp;nbsp;User&amp;nbsp;authenticateOpenId(String&amp;nbsp;provider_url)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ConsumerManager&amp;nbsp;manager&amp;nbsp;=&amp;nbsp;new&amp;nbsp;ConsumerManager();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;This&amp;nbsp;is&amp;nbsp;the&amp;nbsp;URL&amp;nbsp;where&amp;nbsp;the&amp;nbsp;OpenID&amp;nbsp;provider&amp;nbsp;will&amp;nbsp;redirect&amp;nbsp;the&amp;nbsp;user&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;once&amp;nbsp;logged&amp;nbsp;in.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;returnToUrl&amp;nbsp;=&amp;nbsp;&quot;&lt;a class=&quot;smarterwiki-linkify&quot; href=&quot;http://localhost:8084/GwtOpenId&quot;&gt;http://localhost:8084/GwtOpenId&lt;/a&gt;&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;the&amp;nbsp;provider&amp;nbsp;URL&amp;nbsp;will&amp;nbsp;be&amp;nbsp;used&amp;nbsp;to&amp;nbsp;identify&amp;nbsp;the&amp;nbsp;user&amp;nbsp;OpenID&amp;nbsp;provider&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;nbsp;discoveries&amp;nbsp;=&amp;nbsp;manager.discover(provider_url);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DiscoveryInformation&amp;nbsp;discovered&amp;nbsp;=&amp;nbsp;manager.associate(discoveries);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;OpenID&amp;nbsp;4&amp;nbsp;Java&amp;nbsp;needs&amp;nbsp;to&amp;nbsp;&amp;nbsp;have&amp;nbsp;an&amp;nbsp;HttpServletRequest&amp;nbsp;object,&amp;nbsp;GWT&amp;nbsp;sevlet&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;have&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;convenient&amp;nbsp;methods&amp;nbsp;to&amp;nbsp;retrieve&amp;nbsp;the&amp;nbsp;HttpServletRequest&amp;nbsp;object&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;and&amp;nbsp;manipulate&amp;nbsp;its&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;parameters&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.getThreadLocalRequest().setAttribute(&quot;openid-disc&quot;,&amp;nbsp;discovered);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.getThreadLocalRequest().setAttribute(&quot;openid.mode&quot;,&amp;nbsp;&quot;popup&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AuthRequest&amp;nbsp;authReq&amp;nbsp;=&amp;nbsp;manager.authenticate(discovered,&amp;nbsp;returnToUrl);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FetchRequest&amp;nbsp;fetch&amp;nbsp;=&amp;nbsp;FetchRequest.createFetchRequest();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;I&amp;nbsp;want&amp;nbsp;to&amp;nbsp;exchange&amp;nbsp;the&amp;nbsp;following&amp;nbsp;attributes&amp;nbsp;from&amp;nbsp;the&amp;nbsp;OpenID&amp;nbsp;provider&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;remember&amp;nbsp;that&amp;nbsp;teh&amp;nbsp;attribute&amp;nbsp;will&amp;nbsp;be&amp;nbsp;returned&amp;nbsp;only&amp;nbsp;if&amp;nbsp;it&amp;nbsp;exits&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fetch.addAttribute(&quot;email&quot;,&quot;&lt;a class=&quot;smarterwiki-linkify&quot; href=&quot;http://schema.openid.net/contact/email&quot;&gt;http://schema.openid.net/contact/email&lt;/a&gt;&quot;,true);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;authReq.addExtension(fetch);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Simple&amp;nbsp;POJO&amp;nbsp;to&amp;nbsp;persist&amp;nbsp;the&amp;nbsp;data&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;User&amp;nbsp;user&amp;nbsp;=&amp;nbsp;new&amp;nbsp;User();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;In&amp;nbsp;a&amp;nbsp;normal&amp;nbsp;servlet&amp;nbsp;development,&amp;nbsp;the&amp;nbsp;following&amp;nbsp;statement&amp;nbsp;would&amp;nbsp;make&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;a&amp;nbsp;redirect&amp;nbsp;call&amp;nbsp;but&amp;nbsp;this&amp;nbsp;would&amp;nbsp;not&amp;nbsp;work&amp;nbsp;when&amp;nbsp;using&amp;nbsp;GWT&amp;nbsp;RPC&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!discovered.isVersion2()){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user.setRedirect(authReq.getDestinationUrl(true));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;fakes&amp;nbsp;the&amp;nbsp;redirect&amp;nbsp;by&amp;nbsp;sending&amp;nbsp;the&amp;nbsp;POJO&amp;nbsp;with&amp;nbsp;the&amp;nbsp;required&amp;nbsp;parameters&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;to&amp;nbsp;make&amp;nbsp;a&amp;nbsp;client-side&amp;nbsp;redirect&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;user;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user.setParams(authReq.getParameterMap());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user.setRedirect(authReq.getDestinationUrl(false));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;fakes&amp;nbsp;the&amp;nbsp;redirect&amp;nbsp;by&amp;nbsp;sending&amp;nbsp;the&amp;nbsp;POJO&amp;nbsp;with&amp;nbsp;the&amp;nbsp;required&amp;nbsp;parameters&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;to&amp;nbsp;make&amp;nbsp;a&amp;nbsp;client-side&amp;nbsp;redirect&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;user;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(MessageException&amp;nbsp;ex)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Logger.getLogger(GWTServiceImpl.class.getName()).log(Level.SEVERE,&amp;nbsp;null,&amp;nbsp;ex);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;null;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(DiscoveryException&amp;nbsp;ex)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Logger.getLogger(GWTServiceImpl.class.getName()).log(Level.SEVERE,&amp;nbsp;null,&amp;nbsp;ex);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;null;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(ConsumerException&amp;nbsp;ex)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Logger.getLogger(GWTServiceImpl.class.getName()).log(Level.SEVERE,&amp;nbsp;null,&amp;nbsp;ex);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;null;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
#############################################################&lt;br /&gt;
&lt;br /&gt;
The above codes will format the request in order for the front-end to execute a redirect and allow the user to authenticate with his OpenID provider. Now here is the front-end code which executes the authentication and reads the data back.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#################################################################&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt; //&amp;nbsp;This&amp;nbsp;is&amp;nbsp;an&amp;nbsp;extract&amp;nbsp;from&amp;nbsp;the&amp;nbsp;openidEntryPoint.java&lt;br /&gt;
&lt;br /&gt;
//&amp;nbsp;This&amp;nbsp;is&amp;nbsp;where&amp;nbsp;the&amp;nbsp;magic&amp;nbsp;happens&amp;nbsp;-&amp;nbsp;This&amp;nbsp;code&amp;nbsp;is&amp;nbsp;only&amp;nbsp;usefull&amp;nbsp;when&amp;nbsp;the&amp;nbsp;OpenID&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;provider&lt;br /&gt;
//&amp;nbsp;redirects&amp;nbsp;the&amp;nbsp;user&amp;nbsp;back&amp;nbsp;to&amp;nbsp;your&amp;nbsp;site&amp;nbsp;-&amp;nbsp;please&amp;nbsp;visit&amp;nbsp;openid.net&amp;nbsp;for&amp;nbsp;valid&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;parameters.&lt;br /&gt;
//&amp;nbsp;The&amp;nbsp;&quot;if&quot;&amp;nbsp;statement&amp;nbsp;checks&amp;nbsp;to&amp;nbsp;make&amp;nbsp;sure&amp;nbsp;that&amp;nbsp;it&amp;nbsp;is&amp;nbsp;a&amp;nbsp;valid&amp;nbsp;response&amp;nbsp;from&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;the&amp;nbsp;OpenID&lt;br /&gt;
//&amp;nbsp;provider&amp;nbsp;-&amp;nbsp;You&amp;nbsp;can&amp;nbsp;do&amp;nbsp;anything&amp;nbsp;you&amp;nbsp;want&amp;nbsp;with&amp;nbsp;the&amp;nbsp;results&amp;nbsp;here&amp;nbsp;such&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;as&amp;nbsp;verifying&amp;nbsp;the&lt;br /&gt;
//&amp;nbsp;response&amp;nbsp;with&amp;nbsp;the&amp;nbsp;server-side&amp;nbsp;code&lt;br /&gt;
if(Window.Location.getParameter(&quot;openid.rpnonce&quot;)&amp;nbsp;!=&amp;nbsp;null){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;s&amp;nbsp;=&amp;nbsp;Window.Location.getParameter(&quot;openid.mode&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;executes&amp;nbsp;this&amp;nbsp;if&amp;nbsp;the&amp;nbsp;user&amp;nbsp;cancels&amp;nbsp;the&amp;nbsp;authentication&amp;nbsp;process&amp;nbsp;and&amp;nbsp;the&amp;nbsp;OpenID&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;providers&amp;nbsp;returns&amp;nbsp;to&amp;nbsp;the&amp;nbsp;your&amp;nbsp;site&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(s.equals(&quot;cancel&quot;)){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sign.setText(&quot;Server&amp;nbsp;returned&amp;nbsp;openid.mode=cancel&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;openIdUrl.setText(&quot;You&amp;nbsp;need&amp;nbsp;to&amp;nbsp;Accept&amp;nbsp;not&amp;nbsp;Cancel&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Here,&amp;nbsp;I&amp;nbsp;am&amp;nbsp;assuming&amp;nbsp;that&amp;nbsp;everything&amp;nbsp;is&amp;nbsp;fine&amp;nbsp;and&amp;nbsp;that&amp;nbsp;the&amp;nbsp;user&amp;nbsp;has&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;been&amp;nbsp;sucessfully&amp;nbsp;logged&amp;nbsp;in&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sign.setText(&quot;You&amp;nbsp;have&amp;nbsp;successfully&amp;nbsp;signed&amp;nbsp;in&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vp.setVisible(false);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
}&lt;br /&gt;
RootPanel.get().add(contentPanel);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private&amp;nbsp;class&amp;nbsp;UserAsyncCallback&amp;nbsp;implements&amp;nbsp;AsyncCallback&amp;lt;User&amp;gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;onFailure(Throwable&amp;nbsp;caught)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Window.alert(caught.getLocalizedMessage());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;onSuccess(User&amp;nbsp;result)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(result&amp;nbsp;!=&amp;nbsp;null)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Window.open(result.getRedirect(),&amp;nbsp;&quot;_blank&quot;,&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&quot;height=200,width=400,left=100,&quot;&amp;nbsp;+&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;top=100,resizable=no,scrollbars=no,&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;toolbar=no,status=yes&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;this&amp;nbsp;the&amp;nbsp;most&amp;nbsp;important&amp;nbsp;line&amp;nbsp;in&amp;nbsp;order&amp;nbsp;to&amp;nbsp;make&amp;nbsp;the&amp;nbsp;authentication.&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;Here,&amp;nbsp;I&amp;nbsp;am&amp;nbsp;redirecting&amp;nbsp;the&amp;nbsp;user&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;from&amp;nbsp;the&amp;nbsp;client&amp;nbsp;side&amp;nbsp;to&amp;nbsp;the&amp;nbsp;OpenID&amp;nbsp;provider&amp;nbsp;URL&amp;nbsp;with&amp;nbsp;the&amp;nbsp;discovery&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;data&amp;nbsp;generated&amp;nbsp;from&amp;nbsp;the&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;RPC&amp;nbsp;call&amp;nbsp;to&amp;nbsp;the&amp;nbsp;servlet.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Window.Location.assign(result.getRedirect());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Window.alert(&quot;Ooops!!!&amp;nbsp;Couldn&#39;t&amp;nbsp;find&amp;nbsp;your&amp;nbsp;provider&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
#######################################################################################################&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
I have attached the full NetBeans project with dependencies. The code is provided as-is and use at your own risk ;). Here is a screenshot of the working application:&lt;br /&gt;
&lt;br /&gt;
Step1: Authenticate on the site (enter the URL)&lt;br /&gt;
&lt;a href=&quot;http://www.flickr.com/photos/21841907@N05/4206902391/&quot; title=&quot;moz-screenshot-6 by nene world, on Flickr&quot;&gt;&lt;img alt=&quot;moz-screenshot-6&quot; height=&quot;271&quot; src=&quot;http://farm3.static.flickr.com/2551/4206902391_876b1bbe5e.jpg&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Step2: Redirect to OpenID provider (Google is my provider :) ), authenticate with your provider&lt;br /&gt;
&lt;a href=&quot;http://www.flickr.com/photos/21841907@N05/4207644210/&quot; title=&quot;moz-screenshot-7 by nene world, on Flickr&quot;&gt;&lt;img alt=&quot;moz-screenshot-7&quot; height=&quot;230&quot; src=&quot;http://farm3.static.flickr.com/2643/4207644210_3ed4305a68.jpg&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Step3: Allow the application to access your OpenID details and redirect back to the original site&lt;br /&gt;
&lt;a href=&quot;http://www.flickr.com/photos/21841907@N05/4206885115/&quot; title=&quot;moz-screenshot-8 by nene world, on Flickr&quot;&gt;&lt;img alt=&quot;moz-screenshot-8&quot; height=&quot;230&quot; src=&quot;http://farm3.static.flickr.com/2795/4206885115_14234926b2.jpg&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Step4: final step, check the parameters from the provider and proceeds accordingly&lt;br /&gt;
&lt;a href=&quot;http://www.flickr.com/photos/21841907@N05/4206885159/&quot; title=&quot;moz-screenshot-9 by nene world, on Flickr&quot;&gt;&lt;img alt=&quot;moz-screenshot-9&quot; height=&quot;279&quot; src=&quot;http://farm3.static.flickr.com/2519/4206885159_ee43d5718f.jpg&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Take a look at the URL in each of the above step to see the OpenID data. OK, so my code actually works (yuppie), now you know that it is possible form GWT to OpenID and it&#39;s not as complicated as many other sites are trying to show. The code is just for authentication but once authenticated, you can retrieve any parameters that you need. In this example, the query is sent through the browser URL (GET) but you can change it to be encoded in a form submit action. Iwrote some of the code to allow the user to authenticate via a popup window, the code is not complete and maybe someone else might want to have a go. My only problem is getting the redirect back to the original window but apart from that it works.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://cid-55ee1481ce36f98f.skydrive.live.com/self.aspx/Tutorial/GwtOpenId.7z&quot; target=&quot;_blank&quot;&gt;Download the source code&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I hope you guys enjoyed it and Happy Coding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;zemanta-pixie&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;zemanta-pixie-img&quot; src=&quot;http://img.zemanta.com/pixy.gif?x-id=e3a0b81a-7545-8c67-9a1c-89bc12c0bfb4&quot; /&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/2470613226431775672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2009/12/dummies-guide-to-gwt-and-openid-with.html#comment-form' title='210 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/2470613226431775672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/2470613226431775672'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2009/12/dummies-guide-to-gwt-and-openid-with.html' title='Dummies Guide to GWT and OpenID - with example code'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2551/4206902391_876b1bbe5e_t.jpg" height="72" width="72"/><thr:total>210</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-205296371327316487</id><published>2009-12-17T22:54:00.001+00:00</published><updated>2009-12-20T18:04:49.363+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Adobe Flash"/><category scheme="http://www.blogger.com/atom/ns#" term="armel nene"/><category scheme="http://www.blogger.com/atom/ns#" term="chrome"/><category scheme="http://www.blogger.com/atom/ns#" term="IE8"/><category scheme="http://www.blogger.com/atom/ns#" term="Internet Explorer"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javafx"/><category scheme="http://www.blogger.com/atom/ns#" term="opera"/><category scheme="http://www.blogger.com/atom/ns#" term="plug-ins"/><category scheme="http://www.blogger.com/atom/ns#" term="plugins"/><category scheme="http://www.blogger.com/atom/ns#" term="safari"/><category scheme="http://www.blogger.com/atom/ns#" term="web browser"/><category scheme="http://www.blogger.com/atom/ns#" term="youtube"/><title type='text'>Firefox IE8 Chrome Opera Safari - best browser for Java?</title><content type='html'>&lt;div xmlns=&#39;http://www.w3.org/1999/xhtml&#39;&gt;Initially, I was not going to write up about browsers until I had to download all the known web browsers to test a project front-end. I already had Firefox, IE8 and Chrome installed therefore all I had to do was to download and install Opera and Safari. There might be other browsers outthere but this what I am working with for the moment. So what&#39;s the problem? You might ask. Well, I decided to see how simple it would be for a normal user without much computer experience to view a Java-enabled application embedded in a web app or simple HTML page.&lt;br /&gt;
&lt;br /&gt;
Before I go on about what I think, first let me give you an idea of the PC I am currently using:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Dell PC with a dual 22&quot; screen (customised version of Inspiron 530)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;4Gb of RAM&lt;/li&gt;
&lt;li&gt;Intel Pentium Dual 1.80GHz (looking to upgrade this after xmas)&lt;/li&gt;
&lt;li&gt;Windows Vista Ultimate (how rubbish is that?)&lt;/li&gt;
&lt;li&gt;Java RE version 1.6.0_17&lt;/li&gt;
&lt;li&gt;and a few other hardware and software.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;So as you can see, my personal PC is quite simple in settings. Ok, for some reasons, I decided to launch all the browsers at once and load the JavaFx homepage (http://www.javafx.com) and all I wanted to do was to compare which one loaded the fastest. Here are my findings, in brief:&lt;br /&gt;
&lt;br /&gt;
&lt;big&gt;&lt;b&gt;Firefox&lt;/b&gt;&lt;/big&gt;&lt;br /&gt;
This is probably the best browser outthere but lately it has been crashing on me. And btw, it does not cope well with Google Wave. Anyway, here is what Firefox gave (see screenshot):&lt;br /&gt;
&lt;img width=&#39;567&#39; height=&#39;409&#39; alt=&#39;&#39; src=&#39;http://farm3.static.flickr.com/2644/4193869276_1c43c12a9a.jpg&#39; title=&#39;&#39;/&gt;&lt;br /&gt;
&lt;br /&gt;
As you can see on the above screenshot, the JavaFx homepage loads in its entirety. To be quite honest, the page was loaded without any fuss but bear in mind, I already had Java installed. The &quot;Demos &amp;amp; Samples&quot; box in blue requires Java to be installed as it a JavaFx applet. As I already have the JRE installed, the browser did not ask me for any plug-ins ( I could be wrong feel free to share your experience).&lt;br /&gt;
&lt;br /&gt;
&lt;big&gt;&lt;b&gt;Internet Explorer 8&lt;/b&gt;&lt;/big&gt;&lt;br /&gt;
&lt;img width=&#39;567&#39; height=&#39;409&#39; alt=&#39;&#39; src=&#39;http://farm3.static.flickr.com/2744/4193869504_76c6223511.jpg&#39; title=&#39;&#39;/&gt;&lt;br /&gt;
&lt;br /&gt;
I am not a great fan of IE in general, but for this simple test; IE8 loaded the page faster than Firefox. Also, it did not ask me to install a specific plugin in order to load the JavaFx portion of the page. IE handles Google Wave much better than Firefox, so this is the browser I use to interact on the Wave. &lt;br /&gt;
&lt;br /&gt;
&lt;big&gt;&lt;b&gt;Google Chrome&lt;/b&gt;&lt;/big&gt;&lt;br /&gt;
&lt;img width=&#39;567&#39; height=&#39;409&#39; alt=&#39;&#39; src=&#39;http://farm3.static.flickr.com/2495/4193869682_28e9ee3899.jpg&#39; title=&#39;&#39;/&gt;&lt;br /&gt;
&lt;br /&gt;
Google Chrome, like Firefox and IE, did not cause any problem and it was the fastest at loading the JavaFx page including the Java applet. So far, it is the best performing browser but it is not my personal choice so I rarely use it. Also, I like the fact that Chrome scales the page to fit nicely in its window.&lt;br /&gt;
&lt;br /&gt;
&lt;big&gt;&lt;b&gt;Opera&lt;/b&gt;&lt;/big&gt;&lt;br /&gt;
&lt;img width=&#39;567&#39; height=&#39;409&#39; alt=&#39;&#39; src=&#39;http://farm3.static.flickr.com/2511/4193110665_4818060883.jpg&#39; title=&#39;&#39;/&gt;&lt;br /&gt;
&lt;br /&gt;
As you can see in the above screenshot, it seems as if the applet was not fully loaded. Indeed, Opera has loaded some portions of the JavaFx applet but I do not know what is happening here now. This page has been the same since I loaded the browser until now. Again, Opera did not ask me for any plugins to be installed nor did it ask for anything else. I suppose this is not an issue from Sun ;) but something that the Opera team should look at. I know Opera can find the JRE on my system (see screenshot below) but it seems not to be a big fan of Java. In the screenshot below, you can see the JavaFx splash screen but this is all you will see and nothing else. Off-subject, I really like the user interface and I might start using it for a bit longer just to see if it can convert me. &lt;br /&gt;
&lt;img width=&#39;567&#39; height=&#39;409&#39; alt=&#39;&#39; src=&#39;http://farm3.static.flickr.com/2496/4193869896_0d54ce2f97.jpg&#39; title=&#39;&#39;/&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;big&gt;&lt;b&gt;Safari&lt;/b&gt;&lt;/big&gt;&lt;br /&gt;
&lt;img width=&#39;567&#39; height=&#39;409&#39; alt=&#39;&#39; src=&#39;http://farm3.static.flickr.com/2535/4193110893_061d5db47c.jpg&#39; title=&#39;&#39;/&gt;&lt;br /&gt;
&lt;br /&gt;
Ha! what the hell happened here. I have my JRE installed, the previous four browsers did not ask me to install Java (again!!!). The demo applet did not even load, this is Safari running on Windows machine not Mac. So I did what it has asked me for the thousandth time. I clicked on the provided link, takes me to the Java RE download page and I did all the required and look!!!!&lt;br /&gt;
&lt;img alt=&#39;&#39; src=&#39;http://farm3.static.flickr.com/2590/4193110911_9e48deb95c.jpg&#39; title=&#39;&#39;/&gt;&lt;br /&gt;
&lt;br /&gt;
Java!!!!! This is the confirmation that I already have the software installed so what&#39;s the big idea? The Apple team are not doing a good job to support Java but I can browse to Youtube and watch video without installing Flash player (it recognises that it&#39;s already installed). Well I do not think I will be using this browser again anytime soon.&lt;br /&gt;
&lt;br /&gt;
&lt;big&gt;&lt;b&gt;Final words&lt;/b&gt;&lt;/big&gt;&lt;br /&gt;
When it comes to browser to support, you have to test your application on multiple browser ( and OS platform too) to make sure it will not affect the expected user experience that we are so accustomed to. &lt;br /&gt;
&lt;br /&gt;
I do not know why Opera and Safari have issues with the JavaFx site, it could be anything from the site designers to the respective browsers&#39; team. I believe that Java is probably the best Cloud computing platform currently outthere (when it comes to high performance applications) and that browser providers should make sure that at least they do support the platform.&lt;br /&gt;
&lt;br /&gt;
I have a question:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;Who should be to blame if Java or any other plugins such Flash is not supported in the browser? The plug-ins developer or the browser developer?&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
I believe the plug-ins developer should be to blame as they can be a million plug-ins on the net and you cannot possibly cater for all of them. But on the other hand, as in Java &#39;s case, the plug-in is supported without any major issues by the top 3 which accounts for &lt;a href=&#39;http://www.w3schools.com/browsers/browsers_stats.asp&#39; target=&#39;_blank&#39;&gt;93.9% percent of the market&lt;/a&gt; (based on November 2009), should you as the plugin developer care? I say yes at least for the Mac users&#39; sake. We can overlook opera for now but I am sure that all the Apple fans still use Safari as their prefered browser. Do not try to leave them out, they brought us the iPhone.&lt;br /&gt;
&lt;br /&gt;
Anyway, based on my simple test, I think the best browser for Java applet is (in order of best performance):&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Google Chrome&lt;/li&gt;
&lt;li&gt;Internet Explorer (make sure you do support this browser as a priority)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Mozilla Firefox (this should also be supported right after IE)&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;The other two browsers are not included as they did not even successfully launch the applet. I am not saying that you guys are going to have the exact same issue as me and therefore looking forward to your comments.&lt;br /&gt;
&lt;br /&gt;
&lt;img width=&#39;567&#39; height=&#39;409&#39; alt=&#39;&#39; src=&#39;http://farm3.static.flickr.com/2567/4193111397_fa22878d42.jpg&#39; title=&#39;&#39;/&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&#39;zemanta-pixie&#39;&gt;&lt;img src=&#39;http://img.zemanta.com/pixy.gif?x-id=06e89755-f438-8cc9-a077-af469c481169&#39; alt=&#39;&#39; class=&#39;zemanta-pixie-img&#39;/&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/205296371327316487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2009/12/firefox-ie8-chrome-opera-safari-best.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/205296371327316487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/205296371327316487'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2009/12/firefox-ie8-chrome-opera-safari-best.html' title='Firefox IE8 Chrome Opera Safari - best browser for Java?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2644/4193869276_1c43c12a9a_t.jpg" height="72" width="72"/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-8494824973098053702</id><published>2009-12-16T12:12:00.001+00:00</published><updated>2009-12-16T12:12:16.877+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Adobe Flash"/><category scheme="http://www.blogger.com/atom/ns#" term="Adobe Flex"/><category scheme="http://www.blogger.com/atom/ns#" term="armel nene"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="java developer"/><category scheme="http://www.blogger.com/atom/ns#" term="javafx"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaFx Composer plugin"/><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="RAD"/><category scheme="http://www.blogger.com/atom/ns#" term="ria"/><category scheme="http://www.blogger.com/atom/ns#" term="sun"/><title type='text'>JavaFX Composer RAD Tool - First Review</title><content type='html'>&lt;div xmlns=&#39;http://www.w3.org/1999/xhtml&#39;&gt;Just over a week ago, Sun announced a RAD tool for JavaFx built on the Matisse framework, I believe. I was very critical of JavaFx for its lack of tool for building UI and I think this is a step in the right direction. The tool was made available through the NetBeans Update Center on the 14/12/2009. OK, so I have installed the plugin and here are my views; not just on the tools but also on other stuff I think would benefit the JavaFx community:&lt;br/&gt;&lt;br/&gt;When comparing something, it only makes sense when we use a benchmark; here my benchmark will be Adobe Flash Builder (formerly known as Flex Builder). Over the years, Adobe had made it easy for the designer to build impressive user interface with minimal coding. Sun, in the other hand, made it easier for developers to build application, yes I am aware of some nice UI in Java but they still do not compare to the eye candy of Flash/ Flex.&lt;br/&gt;&lt;br/&gt;I am going to look at the tools; Flash Builder and JavaFx Composer plugin, from a developer perspective.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;&lt;big&gt;Components:&lt;/big&gt;&lt;/b&gt;&lt;br/&gt;A key feature of RAD tools is the amount of components they make available to developers without having to write too many codes. I understand the plugin is at a &quot;preview&quot; stage, whatever that mean (alpha?), but there are alot of missing components; as an example, this release version was meant to be a &quot;preview&quot; of what to look forward to but I cannot drag a &quot;combox&quot; from the components palette into my form, no data grid, no chart, no menu bar, no date components and can&#39;t even draw a rectangle which is possible but only through coding. I hope the JavaFx team add all the components available in JavaFx plugin to the Composer. &lt;br/&gt;&lt;br/&gt;&lt;a title=&#39;moz-screenshot-2 by nene world, on Flickr&#39; href=&#39;http://www.flickr.com/photos/21841907@N05/4190189872/&#39;&gt;&lt;img width=&#39;500&#39; height=&#39;245&#39; alt=&#39;moz-screenshot-2&#39; src=&#39;http://farm3.static.flickr.com/2553/4190189872_6bb23523e5.jpg&#39;/&gt;&lt;/a&gt;NetBeans JavaFx UI Composer&lt;br/&gt;&lt;br/&gt;&lt;a title=&#39;moz-screenshot-4 by nene world, on Flickr&#39; href=&#39;http://www.flickr.com/photos/21841907@N05/4189429727/&#39;&gt;&lt;img width=&#39;231&#39; height=&#39;500&#39; alt=&#39;moz-screenshot-4&#39; src=&#39;http://farm3.static.flickr.com/2587/4189429727_b9155da035.jpg&#39;/&gt;&lt;/a&gt;Adobe Flex/ Flash Builder&lt;br/&gt;&lt;br/&gt;&lt;b&gt;&lt;big&gt;Round-trip code update&lt;/big&gt;&lt;/b&gt;&lt;br/&gt;One thing I dislike with Java IDE&#39;s (or most of them) is the inability to change the generated code without requiring you to write more code. The Adobe team actually made a good job in giving more freedom to the developer. In Flash Builder, you can design your UI through drag-n-drop but also customise it directly through the XML file (MXML). This feature was not available in NetBeans Matisse, I could be wrong, but and again Matisse was not really used in large project (no comments, thanks), at least not were I worked. Why all the fuss, you might ask? Try to create a simple interface and add a &quot;rectangle&quot; object to it which you will use as a toolbar and tell me how simple that was.&lt;br/&gt;&lt;br/&gt;The coding style in JavaFx is very similar to Flex/ Flash ActionScript (so why the &quot;V&quot;oid instead of void, but that&#39;s another issue) and very easy to learn. So far, I found it easier to actually code the canvas then using the Composer plugin. Another thing, when inspecting object properties; not all properties are available, for example: the gradient properties are not available, which will require you to write more lines of code.&lt;br/&gt;&lt;br/&gt;&lt;big&gt;&lt;b&gt;UI Preview Panel&lt;/b&gt;&lt;/big&gt;&lt;br/&gt;Again, a feature which Adobe Flex/ Flash builder excels at (I feel like I am starting to sound like an Adobe salesman) is the synchronize preview of codes. This is not a due to JavaFx Composer plugin but this seems as a bug as sometimes, you might have to restart the IDE in order for the UI Preview panel to start working again. Hopefully the introduction of the RAD (or not so much RAD) tool, will fix this issue.&lt;br/&gt;&lt;br/&gt;&lt;big&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/big&gt;&lt;br/&gt;You might feel that I was on a JavaFx bashing quest but this is not the case. JavaFx might not have a large components set (well what about all the SWING components available which you can use? You might not be able to &quot;skin&quot; them to your application look and feel but they still availabe to you) but I still think it has a good future. If you take a look at the screenshot below which was built with Adobe Flex, it took me less than five (5) minutes to build. Now time to synchronize your watches and tell me how fast it will take you to build the same interface using JavaFx Composer plugin. It will probably take me less than five (5) minutes if I was designing it with Matisse. My point is; a RAD tool is supposed to promote productivity and YES!!! I have realized this is a &quot;PREVIEW&quot; release but can you actually use it? I know I will still be coding JavaFx for the foreseable future and I would love it to succeed. If you are going to call a tool &quot;a RAD tool for building Form-based JavaFx UI&quot; then I suggest that you provide most of the form components.&lt;br/&gt;&lt;br/&gt;&lt;blockquote&gt;Should JavaFx UI RAD tools be based on XML like Android and Adobe Flash Builder?&lt;br/&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;a title=&#39;moz-screenshot-5 by nene world, on Flickr&#39; href=&#39;http://www.flickr.com/photos/21841907@N05/4190189850/&#39;&gt;&lt;img width=&#39;500&#39; height=&#39;360&#39; alt=&#39;moz-screenshot-5&#39; src=&#39;http://farm5.static.flickr.com/4048/4190189850_9f23a84d97.jpg&#39;/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;big&gt;&lt;b&gt;5 components I like to have on JavaFx&lt;/b&gt;&lt;/big&gt;&lt;br/&gt;&lt;ol&gt;&lt;li&gt;Menu and tool bar (come on guys, this was there in previous release)&lt;/li&gt;&lt;li&gt;Grids (even just a simple table will do. For now I use JTable)&lt;/li&gt;&lt;li&gt;Date picker, Rich Text and Navigator components&lt;br/&gt;&lt;/li&gt;&lt;li&gt;HTML panel (something that display HTML and can also be used as iFrames)&lt;/li&gt;&lt;li&gt;Panels similar to JInternalFrame (this will be useful in portlet-like applications)&lt;/li&gt;&lt;/ol&gt;I know it&#39;s not really 5 things but they will make a difference. Thanks for reading and tell me what you think about JavaFx and its UI Composer.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class=&#39;zemanta-pixie&#39;&gt;&lt;img src=&#39;http://img.zemanta.com/pixy.gif?x-id=7df463a9-04d5-8386-949e-d107d0409638&#39; alt=&#39;&#39; class=&#39;zemanta-pixie-img&#39;/&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/8494824973098053702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2009/12/javafx-composer-rad-tool-first-review.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/8494824973098053702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/8494824973098053702'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2009/12/javafx-composer-rad-tool-first-review.html' title='JavaFX Composer RAD Tool - First Review'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2553/4190189872_6bb23523e5_t.jpg" height="72" width="72"/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-8181301710418306921</id><published>2009-12-02T11:59:00.001+00:00</published><updated>2009-12-02T12:25:27.767+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="armel nene"/><category scheme="http://www.blogger.com/atom/ns#" term="gwt"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="javafx"/><category scheme="http://www.blogger.com/atom/ns#" term="javscript"/><category scheme="http://www.blogger.com/atom/ns#" term="ria"/><category scheme="http://www.blogger.com/atom/ns#" term="web 2.0"/><title type='text'>JavaFX vs GWT - A developer dilemma in building a RIA application</title><content type='html'>&lt;div xmlns=&#39;http://www.w3.org/1999/xhtml&#39;&gt;For the past few days, I have been working on a simple proof of concept; a web based stock streaming application with a community theme to it. I set myself to building the backend first. As you can guess, I am developing in Java and here are some of the requirements that I have to meet, at least:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;The application shall allow the user to query a stock (quotes) either using the stock ticker or the company name and display the following: stream stock price with basic info, stock historical price; tabular view and financial chart analysis.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;The ability to rate, comments and share stock information.&lt;/li&gt;
&lt;li&gt;provide a real-time chat features for users of the application to interact together.&lt;/li&gt;
&lt;li&gt;single sign-on integration with OpenSocial, OpenID and Facebook connect.&lt;/li&gt;
&lt;/ol&gt;The above are some basic features in order for people to actually use the site. As you can see, they are mostly front-end requirements. Here is another important requirement:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The application will be hosted on a Cloud-based service, the application shall keep to a minimum the load on the server as CPU and memory use will be charged per request.&lt;/li&gt;
&lt;/ul&gt;I believe that last requirement was the key decision factor. I needed something that will make use of the user resources instead of stressing the server. Something that would execute on the browser, client-side. Being a Java developer, it is only normal for me to look for something that I can grasp easily and freely available on the market. I looked at a few RIA frameworks and tools but I needed something that can integrate within my development environment without the need switch between IDEs.&lt;br /&gt;
&lt;br /&gt;
I had a look at JavaFX and GWT. Having worked on GWT in the past, I found that I could implement most of the requirements. GWT has a rich api and components sets (widgets). I could use the Google search, map, visualization... to build the front-end and implement the client side code.&lt;br /&gt;
&lt;br /&gt;
It took me about two days to implement the basic front-end and back-end features; mostly concentrating requirements 1 and the last. But then I hit a brick wall, something that all Javascript developers already knew but I just came across:&lt;br /&gt;
&lt;br /&gt;
The application is a mashup of different services from around the net. Some of those services were available for free and others were not available at all but I will still be connecting and parsing the relevant data to displayed on the screen. As requirement &quot;1&quot; was working fine, there was a disaster about to happen. Here is the basic architecture:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;when a user queries a stock, the data is sent to the back-end services.&lt;/li&gt;
&lt;li&gt;the back-end services queries a third-party web service which I do not have control over. ZERO.&lt;/li&gt;
&lt;li&gt;when the third-party web service returns, the data is then parsed into a format understood by the front-end and sent to the front-end services to display. &lt;/li&gt;
&lt;/ul&gt;The services was working fine until I had about 12 stocks displayed on my screen for testing purpose. The data was being streamed with a 1 minute interval. After about 30minutes later (and 360 requests = 12 *1 pm * 36m), I have noticed that the stock data was not being updated anymore and some screens were blank. No errors were logged and some other queries were still working such as the historical data. As I could not see the errrors from my debugging session, I therefore decided to query the third-party service manually through Firefox and IE and VOILA! The service provider had put a temporary &lt;b&gt;ban on my IP&lt;/b&gt; address for making too many requests, it says. This was a major blocker as it seems that I could not access my primary data anymore. This left me questioning the feasibility of the project. &lt;br /&gt;
&lt;blockquote&gt;If a single user gets banned for tracking 12 stocks, what would happen when 100 or more users start watching their stocks?&lt;br /&gt;
&lt;/blockquote&gt;OK, so I did not give up, at least not without a fight!&lt;br /&gt;
&lt;br /&gt;
I looked at the problem from another perspective, the third-party view. How do they track my request as I do not have to register or sign-in? The obvious answer is my IP. So I thought, instead of making the request to their services from the back-end, I should send the request directly from the front-end. If each users make the same request, the third-party services would register different IP addresses for each one of them. Correct indeed but one big problem:&lt;br /&gt;
&lt;br /&gt;
The front-end code is written in GWT which is then compiled to Javascript. Being a Java developer, I was not aware of the limitation of using AJAX in a mashup such as mine. After making the necessary changes, I then run the app just to get hit with another blocker - SOP (&lt;a href=&#39;http://en.wikipedia.org/wiki/Same_origin_policy&#39; target=&#39;_blank&#39;&gt;Javascript Same Origin Policy&lt;/a&gt;). What&#39;s in a monkey name was this all about? So after researching it - Google and Wikipedia, I knew what I was dealing with and I am sure all Javascript developers already knew that but not me :(. I never give up, it is not part of my nature, therefore I decided to look for ways around it and came across a &lt;a href=&#39;http://code.google.com/webtoolkit/tutorials/1.6/Xsite.html&#39; target=&#39;_blank&#39;&gt;tutorial on GWT &lt;/a&gt;site that shows you how to implement a workaround. Did the tutorial, implemented some basic methods and that worked fine but implementing the third-party service, did not work :(. The problem was simple, the workaround needs to be in JSON format which I coded but the third-party service needs to be able to send the request back to a &quot;callback&quot; method. This is it!!! Remember that I mentioned that I had ZERO control over the thrid-party service and therefore I could not implement this feature.&lt;br /&gt;
&lt;br /&gt;
Remember, I never give up; when there&#39;s a will there&#39;s a way. So I hit a major blocker due to the technology, in this case it was Javascript. I know that if I was working on a pure java front-end GUI, this would have never occurred and Flex allows you to query other third-party services but I have no knowledge of ActionScript. I decided to go for JavaFX just because it is Java and allows me to connect and get my data (actually it&#39;s not mine). My options were Webstart, Applet and JavaFX. First of all, it has to be part of the site so my real options were Applet and JavaFX. Applet do not have a rich set of tools such as Map, Chart and everything else that JavaFX provides and I do not want to waste time coding them.&lt;br /&gt;
&lt;br /&gt;
So same adventure but different episode; I am currently looking to implement the JavaFX UI so stay tune for the sequel and screenshot. I could have never anticipated those problems with the third-party and then Javascript but believe me it was a good experience and my Javascript just went +1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&#39;zemanta-pixie&#39;&gt;&lt;img src=&#39;http://img.zemanta.com/pixy.gif?x-id=9fac04a4-ac46-8036-8976-c55cd0770c6c&#39; alt=&#39;&#39; class=&#39;zemanta-pixie-img&#39;/&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/8181301710418306921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2009/12/javafx-vs-gwt-developer-dilemma-in.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/8181301710418306921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/8181301710418306921'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2009/12/javafx-vs-gwt-developer-dilemma-in.html' title='JavaFX vs GWT - A developer dilemma in building a RIA application'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-153190513670248022</id><published>2009-11-22T12:29:00.001+00:00</published><updated>2009-11-22T12:29:34.138+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="annotated"/><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="api"/><category scheme="http://www.blogger.com/atom/ns#" term="armel nene"/><category scheme="http://www.blogger.com/atom/ns#" term="chart"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="gwt"/><category scheme="http://www.blogger.com/atom/ns#" term="j2se"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="java developer"/><category scheme="http://www.blogger.com/atom/ns#" term="jsr168"/><category scheme="http://www.blogger.com/atom/ns#" term="line"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="portlet"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="server"/><category scheme="http://www.blogger.com/atom/ns#" term="time"/><category scheme="http://www.blogger.com/atom/ns#" term="visualization"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>GWT Visualization Example - Annotated Time Line Chart Tutorial</title><content type='html'>&lt;div xmlns=&#39;http://www.w3.org/1999/xhtml&#39;&gt;If you are a server-side Java developer such as myself, I am sure you want an easy way to create AJAX based application but pure JavaScript (ECMAScript) is not your strong skills. The beauty of JavaScript is that it runs on any web server, no need for a servlet container or anything of that sort.&lt;br/&gt;&lt;br/&gt;So, I have been writing AJAX based UI using the GWT framework for the past year and half. I am still not a web developer but I understand enough CSS to spice up my site. Anyway, I am writing this tutorial because I think that the GWT Visualization team, even tough they did a good job, over complicates the creation of charts in their tutorial. I was trying to create an Annotated Time Line chart so I looked up my previous code I wrote for the GWT Portlet JSR-168, &lt;a href=&#39;http://armelnene.blogspot.com/2009/08/building-portlet-10-jsr168-with-gwt-17.html&#39;&gt;see here&lt;/a&gt;. I also decided to run a search (don&#39;t be evil, Google is your friend) to try to find different examples and hopefully some nice custom charts. First of all, based on the search result; I thought that some of examples, including Google&#39;s own, were confusing and over complex. Most examples uses AJAXLoader to load the Visualization API, but you shouldn&#39;t have to use this. This is the simplest way to create a GWT Annotated Time Line Chart.&lt;br/&gt;&lt;br/&gt;&lt;a title=&#39;gwt annotated time line chart by nene world, on Flickr&#39; href=&#39;http://www.flickr.com/photos/21841907@N05/4124677046/&#39;&gt;&lt;img width=&#39;500&#39; height=&#39;179&#39; alt=&#39;gwt annotated time line chart&#39; src=&#39;http://farm3.static.flickr.com/2753/4124677046_69aa7a07b3.jpg&#39;/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;1. Using your favorite development tool with support for GWT framework, create a new Java web application, you can export the compiled JavaScript later to a non-based web application, if you use an IDEW you should code-completion support.&lt;br/&gt;&lt;br/&gt;2. Make you sure you have included the &lt;a href=&#39;http://code.google.com/docreader/#p=gwt-google-apis&amp;amp;s=gwt-google-apis&amp;amp;t=Visualization&#39;&gt;GWT Visualization API&lt;/a&gt; module in your classpath.&lt;br/&gt;&lt;br/&gt;3. In your project source code root directory, you should &amp;lt;AppNamexxxx&amp;gt;.gwt.xml file. make sure to add teh following line to it in order to make the  module available to your application.&lt;br/&gt;&lt;br/&gt;&amp;lt;inherits name=&quot;com.google.gwt.visualization.Visualization&quot;/&amp;gt;&lt;br/&gt;&lt;br/&gt;4. In order to keep this tutorial short and straight to point, I have included the chart creation code in my &amp;lt;AppNamexxxx&amp;gt;EntryPoint.java class&lt;br/&gt;&lt;br/&gt;&lt;hr/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;code&gt;&lt;span style=&#39;color: rgb(0, 0, 0);&#39;&gt;&lt;br/&gt;public class MainEntryPoint implements EntryPoint&lt;br/&gt;{&lt;br/&gt;    &lt;br/&gt;    &lt;br/&gt;    /**&lt;br/&gt;    * Creates a new instance of MainEntryPoint&lt;br/&gt;    */&lt;br/&gt;    public MainEntryPoint()&lt;br/&gt;    {&lt;br/&gt;        &lt;br/&gt;        &lt;br/&gt;    }&lt;br/&gt;    &lt;br/&gt;    &lt;br/&gt;    &lt;br/&gt;    /**&lt;br/&gt;    * The entry point method, called automatically by loading a module&lt;br/&gt;    * that declares an implementing class as an entry-point&lt;br/&gt;    */&lt;br/&gt;    public void onModuleLoad()&lt;br/&gt;    {&lt;br/&gt;        &lt;br/&gt;        Runnable onLoadCallback = new Runnable()&lt;br/&gt;        {&lt;br/&gt;            &lt;br/&gt;            &lt;br/&gt;            public void run()&lt;br/&gt;            {&lt;br/&gt;                &lt;br/&gt;                DataTable data = createHistoryTable(result);&lt;br/&gt;                AnnotatedTimeLine.Options options = AnnotatedTimeLine.Options.create();&lt;br/&gt;                options.setDisplayAnnotations(true);&lt;br/&gt;                options.setDisplayZoomButtons(true);&lt;br/&gt;                options.setScaleType(AnnotatedTimeLine.ScaleType.ALLFIXED);&lt;br/&gt;                options.setLegendPosition(AnnotatedTimeLine.AnnotatedLegendPosition.SAME_ROW);&lt;br/&gt;                AnnotatedTimeLine atl = new AnnotatedTimeLine(data, options, &quot;600px&quot;, &quot;200px&quot;);&lt;br/&gt;                RootPanel.get().add(atl);&lt;br/&gt;                &lt;br/&gt;            }&lt;br/&gt;            &lt;br/&gt;            &lt;br/&gt;            &lt;br/&gt;        }       &lt;br/&gt;        ;&lt;br/&gt;        VisualizationUtils.loadVisualizationApi(onLoadCallback, AnnotatedTimeLine.PACKAGE);&lt;br/&gt;        &lt;br/&gt;    }&lt;br/&gt;    &lt;br/&gt;    &lt;br/&gt;    &lt;br/&gt;    // This method will create the Data used by the chart&lt;br/&gt;    private DataTable createHistoryTable()&lt;br/&gt;    {&lt;br/&gt;        &lt;br/&gt;        DataTable data = DataTable.create();&lt;br/&gt;        data.addColumn(AbstractDataTable.ColumnType.DATE, &quot;Date&quot;);&lt;br/&gt;        data.addColumn(AbstractDataTable.ColumnType.NUMBER, &quot;Price&quot;);&lt;br/&gt;        data.addColumn(AbstractDataTable.ColumnType.NUMBER, &quot;Low&quot;);&lt;br/&gt;        data.addColumn(AbstractDataTable.ColumnType.NUMBER, &quot;High&quot;);&lt;br/&gt;        data.addRows(5);&lt;br/&gt;                   &lt;br/&gt;            DateTimeFormat dtf = DateTimeFormat.getFormat(&quot;yyyy-MM-dd&quot;);&lt;br/&gt;            data.setValue(0, 0, dtf.parse(&quot;2009-11-21&quot;));&lt;br/&gt;            data.setValue(0, 1, 100);&lt;br/&gt;            data.setValue(0, 2, 120);&lt;br/&gt;            data.setValue(0, 3, 90);&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&#39;color: rgb(0, 0, 0);&#39;&gt;&lt;br/&gt;            data.setValue(1, 0, dtf.parse(&quot;2009-11-22&quot;));&lt;br/&gt;            data.setValue(1, 1, 90);&lt;br/&gt;            data.setValue(1, 2, 110);&lt;br/&gt;            data.setValue(1, 3, 100);&lt;/span&gt;&lt;/code&gt;&lt;br/&gt;&lt;code&gt;&lt;span style=&#39;color: rgb(0, 0, 0);&#39;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&#39;color: rgb(0, 0, 0);&#39;&gt;&lt;br/&gt;            data.setValue(2, 0, dtf.parse(&quot;2009-11-23&quot;));&lt;br/&gt;            data.setValue(2, 1, 100);&lt;br/&gt;            data.setValue(2, 2, 180);&lt;br/&gt;            data.setValue(2, 3, 80);&lt;/span&gt;&lt;/code&gt;&lt;br/&gt;&lt;code&gt;&lt;span style=&#39;color: rgb(0, 0, 0);&#39;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&#39;color: rgb(0, 0, 0);&#39;&gt;&lt;br/&gt;            data.setValue(3, 0, dtf.parse(&quot;2009-11-20&quot;));&lt;br/&gt;            data.setValue(3, 1, 130);&lt;br/&gt;            data.setValue(3, 2, 100);&lt;br/&gt;            data.setValue(3, 3, 130);&lt;/span&gt;&lt;/code&gt;&lt;br/&gt;&lt;code&gt;&lt;span style=&#39;color: rgb(0, 0, 0);&#39;&gt;           &lt;br/&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&#39;color: rgb(0, 0, 0);&#39;&gt;&lt;br/&gt;            data.setValue(4, 0, dtf.parse(&quot;2009-11-19&quot;));&lt;br/&gt;            data.setValue(4, 1, 130);&lt;br/&gt;            data.setValue(4, 2, 170);&lt;br/&gt;            data.setValue(4, 3, 150);&lt;/span&gt;&lt;/code&gt;&lt;br/&gt;&lt;code&gt;&lt;span style=&#39;color: rgb(0, 0, 0);&#39;&gt;            &lt;br/&gt;        }&lt;br/&gt;        return data;   &lt;br/&gt;    }   &lt;br/&gt;}&lt;br/&gt;&lt;/span&gt;&lt;/code&gt;&lt;hr class=&#39;jump&#39;/&gt;&lt;br/&gt;Don&#39;t forget to import all the necessary classes and voila!&lt;br/&gt;&lt;br/&gt;I hope this will save you some time in creating your charts.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt; &lt;br/&gt;                &lt;img width=&#39;9&#39; height=&#39;9&#39; alt=&#39;&#39; src=&#39;kleider/blue-sand/images/main_leftdown.gif&#39;/&gt;&lt;br/&gt;                &lt;br/&gt;                &lt;img width=&#39;9&#39; height=&#39;9&#39; alt=&#39;&#39; src=&#39;kleider/blue-sand/images/main_rightdown.gif&#39;/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class=&#39;zemanta-pixie&#39;&gt;&lt;img src=&#39;http://img.zemanta.com/pixy.gif?x-id=dac6eeb3-a389-8071-ae90-15f66dc00b1d&#39; alt=&#39;&#39; class=&#39;zemanta-pixie-img&#39;/&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/153190513670248022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2009/11/gwt-visualization-example-annotated.html#comment-form' title='327 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/153190513670248022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/153190513670248022'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2009/11/gwt-visualization-example-annotated.html' title='GWT Visualization Example - Annotated Time Line Chart Tutorial'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2753/4124677046_69aa7a07b3_t.jpg" height="72" width="72"/><thr:total>327</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-7527436741047599252</id><published>2009-11-12T20:40:00.000+00:00</published><updated>2009-11-12T20:40:47.050+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="database"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipseLink"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="java developer"/><category scheme="http://www.blogger.com/atom/ns#" term="jmeter"/><category scheme="http://www.blogger.com/atom/ns#" term="jpa"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="rest web services"/><category scheme="http://www.blogger.com/atom/ns#" term="web 2.0"/><category scheme="http://www.blogger.com/atom/ns#" term="web applications"/><category scheme="http://www.blogger.com/atom/ns#" term="web services"/><title type='text'>Develop High Transaction Web Applications with Java MySQL &amp;amp; NetBeans</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;This entry is a brief tutorial on how to develop high transactional web application. I will be looking at how to develop a high transactional application while maintaining data integrityFor the purpose of keeping this entry simple, I will be using some RAD tools, the NetBeans IDE, to generate most of the code. &lt;br /&gt;
&lt;br /&gt;
In order to follow the tutorial, you will need the following:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;http://netbeans.org/&quot;&gt;NetBeans IDE 6.7+&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://java.sun.com/&quot;&gt;Java JDK 1.6+&lt;/a&gt; (my version is 1.6.0_17)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dev.mysql.com/downloads/&quot;&gt;MySQL 5.1+&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dev.mysql.com/doc/sakila/en/sakila.html&quot;&gt;MySQL Sakila database&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tomcat.apache.org/&quot;&gt;Apache Tomcat 6.x&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;An understanding of &lt;a href=&quot;http://www.javapassion.com/j2ee/jpatransaction.pdf&quot;&gt;JPA&lt;/a&gt; transactions and &lt;a href=&quot;https://metro.dev.java.net/&quot;&gt;ReSTful&lt;/a&gt; web services&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;This is my definition of High Transaction Applications:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;A high transaction application is one that can serve multiple simultaneous requests from clients and keep them secure from each other. The application has only two purposes: read or write data to/from a repository either JMS or DB. The transactions have to meet the &lt;a href=&quot;http://en.wikipedia.org/wiki/ACID&quot;&gt;ACID&lt;/a&gt; criteria in order to be deployed in the real world.&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
Ok, the above is my definition and you are free to redefine it. I am going to build a web application that will be an n-tier application:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Database back-end (MySQL)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Entity classes&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;ReSTful Web Services to allow other developers to integrate the application with theirs&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;A web based front-end&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;For the simplicity of the article, I will not implement any security such as user or application level security (authentication and database table privileges). This tutorial is mostly geared toward the newbies but I am sure that more advanced developers would benefit too.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s get coding.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Make sure that you have loaded the MySQL Sakila database into your MySQL database. You can download the Sakila database from the NetBeans plugin centre (&lt;a href=&quot;http://davidvancouvering.blogspot.com/2008/08/sakila-sample-database-plugin-now.html&quot;&gt;see here&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Create a new web application and name whatever you like. I have named mine &quot;WebApplication&quot;. I will now refer the application as WebApplication. Make sure to choose Tomcat as your deployment server&lt;/li&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://farm3.static.flickr.com/2731/4099041220_b0ccec7f10.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;219&quot; src=&quot;http://farm3.static.flickr.com/2731/4099041220_b0ccec7f10.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;


&lt;li&gt;Add the MySQL driver &quot;mysql-connector-java-5.0.7-bin&quot; to the WebApplication libraries. NetBeans will work and connect to the DB even without the driver but once you deploy your application to a server, the application will not be able to connect to the DB and throw a ClassNotFoundException com.mysql.jdbc.driver.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;We are going to develop the back-end first. NetBeans makes it very easy for us to create Entity classes from database. I would recommend newbies to learn how to manually create Entity classes and configure the persistence.xml file. This tutorial makes use of JPA but one should ignore the drawbacks of JPA/ ORM frameworks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;Right click on the project name and choose Entity Classes from Database... On the next screen choose the &quot;filmActor&quot; table and click on the Add button. Make sure that &quot;Include Related Tables&quot; box is checked underneath the Selected Tables panel. The screenshot does not show the &quot;filmActor&quot; table as I have previously generated the Entity class but I am sure you get the idea. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://farm3.static.flickr.com/2553/4099041336_6f83fd88d5.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;210&quot; src=&quot;http://farm3.static.flickr.com/2553/4099041336_6f83fd88d5.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;If you are required to create a Persistence Unit, click on the persistence button -&amp;gt; you can accept the default name -&amp;gt; choose your Persistence Library -&amp;gt; choose your database connection -&amp;gt; choose &quot;None&quot; for Table Generation Strategy -&amp;gt; click Finish&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://farm3.static.flickr.com/2719/4099041434_5dfa14e24d.jpg&quot; style=&quot;max-width: 800px;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;After choosing the table to generate the Entity from click next -&amp;gt; fill Package name -&amp;gt; tick Generate Name Query... -&amp;gt; click Finish&lt;/li&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;img src=&quot;http://farm3.static.flickr.com/2757/4099041520_bfd2a7ce85.jpg&quot; style=&quot;max-width: 800px;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
NetBeans generates all the Entity classes based on the database table that you have chosen. The next thing that we want to do is generate a set of ReSTful web services from the generated Entity classes. Again, NetBeans facilitates the work for us (it is important that you also know how to create the classes manually or you will not know how to debug them if there is any problem in the future).&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;Right click on the project name &quot;WebApplication&quot; -&amp;gt; RESTful Web Services from Entity Classes... -&amp;gt; Choose the Entity Classes that you would like to generate the WS for and click add or add all -&amp;gt; click next -&amp;gt; on the following screen, accept the default values and click Finish&lt;br /&gt;
&lt;img height=&quot;198&quot; src=&quot;http://farm3.static.flickr.com/2716/4099041610_dec56967a8.jpg&quot; style=&quot;max-width: 800px;&quot; width=&quot;277&quot; /&gt;&lt;img height=&quot;198&quot; src=&quot;http://farm3.static.flickr.com/2594/4099041710_3b56a3d37b.jpg&quot; style=&quot;max-width: 800px;&quot; width=&quot;276&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;You can go ahead and test your ReSTFul Web Services by right clicking on the name of the application and click on Test RESTful Web Services &lt;br /&gt;
&lt;img height=&quot;257&quot; src=&quot;http://farm3.static.flickr.com/2557/4098286767_b540c13506.jpg&quot; style=&quot;max-width: 800px;&quot; width=&quot;339&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;The previous step will launch your web browser within which you can test your web services (click on the node on the left and see the queries on the right)&lt;br /&gt;
&lt;br /&gt;
&lt;img height=&quot;287&quot; src=&quot;http://farm3.static.flickr.com/2643/4098286919_75b36958d9.jpg&quot; style=&quot;max-width: 800px;&quot; width=&quot;385&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Back in the NetBeans IDE; right click on the project name &quot;WebApplication&quot; -&amp;gt; click on JSF Pages from Entity Classes... (The JSF pages will not use the web services as there are packaged together with the Entity Classes. This will improve performances and still allow external applications to integrate). Choose the Entity Classes that you would like to generate the pages for -&amp;gt; click next. On the final screen, fill in the package name for the JPA Controller and JSF Classes -&amp;gt; click finish&lt;br /&gt;
&lt;br /&gt;
&lt;img height=&quot;240&quot; src=&quot;http://farm3.static.flickr.com/2741/4098287001_f485a858bf.jpg&quot; style=&quot;max-width: 800px;&quot; width=&quot;350&quot; /&gt;&lt;img height=&quot;234&quot; src=&quot;http://farm3.static.flickr.com/2612/4099042192_0f84d14662.jpg&quot; style=&quot;max-width: 800px;&quot; width=&quot;340&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NetBeans will generate the necessary files to create a CRUD application with a user interface. I suggest that you familiarize yourself with the generated code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Expand the Configuration folder under your project name &quot;WebApplication&quot; and the web.xml file. At around line 38, change the content of the welcome-file-list to look as follow&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoListParagraphCxSpFirst&quot;&gt;&amp;lt;welcome-file-list&amp;gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;welcome-file&amp;gt;faces/welcomeJSF.jsp&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpLast&quot;&gt;&amp;lt;/welcome-file-list&amp;gt;&lt;br /&gt;
&lt;/div&gt;&lt;welcome-file-list&gt;&lt;welcome-file&gt;&lt;/welcome-file&gt;This will make the generate JSF page to be the landing page for the application when requested. Make sure that you do have a &quot;welcomeJSF.jsp&quot; file before making the change.&lt;br /&gt;
&lt;br /&gt;
&lt;/welcome-file-list&gt; &lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Right click on the application name -&amp;gt; Run. The application should load in your web browser. Now go on, play around with the application. And why not create a client to send request to the web services? (not today)&lt;br /&gt;
&lt;img height=&quot;225&quot; src=&quot;http://farm3.static.flickr.com/2628/4099042284_6bd3f70d0c.jpg&quot; style=&quot;max-width: 800px;&quot; width=&quot;328&quot; /&gt;&lt;img height=&quot;223&quot; src=&quot;http://farm3.static.flickr.com/2793/4098287281_454b0c31c4.jpg&quot; style=&quot;max-width: 800px;&quot; width=&quot;328&quot; /&gt;&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;/ol&gt;
You can load test your application by using &lt;a href=&quot;http://jakarta.apache.org/jmeter/&quot;&gt;Apache JMeter&lt;/a&gt;. It is easy to run and configure. If you want to take a look at how JPA implements the ACID features, browse to your controller classes. &lt;a href=&quot;http://www.javapassion.com/j2ee/jpatransaction.pdf&quot;&gt;Here&lt;/a&gt; is a short introduction to JPA transaction. 

Hope you enjoyed and if you need any clarification, just leave me a comment and try to get back to you ASAP (if time permits).

&lt;div class=&quot;zemanta-pixie&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;zemanta-pixie-img&quot; src=&quot;http://img.zemanta.com/pixy.gif?x-id=fa137127-9e46-8867-8382-5f2988781628&quot; /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/7527436741047599252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2009/11/develop-high-transaction-web.html#comment-form' title='64 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/7527436741047599252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/7527436741047599252'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2009/11/develop-high-transaction-web.html' title='Develop High Transaction Web Applications with Java MySQL &amp;amp; NetBeans'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2731/4099041220_b0ccec7f10_t.jpg" height="72" width="72"/><thr:total>64</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7746035232350865175.post-32257287500758446</id><published>2009-11-09T19:05:00.000+00:00</published><updated>2009-11-09T19:45:22.447+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="api"/><category scheme="http://www.blogger.com/atom/ns#" term="armel nene"/><category scheme="http://www.blogger.com/atom/ns#" term="enterprise search"/><category scheme="http://www.blogger.com/atom/ns#" term="file indexer"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="j2se"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="liferay"/><category scheme="http://www.blogger.com/atom/ns#" term="lucene"/><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="nutch"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="solr"/><category scheme="http://www.blogger.com/atom/ns#" term="web applications"/><category scheme="http://www.blogger.com/atom/ns#" term="web crawler"/><title type='text'>Develop Your Own Google with Apache Lucene (Java Nutch Solr)</title><content type='html'>&lt;a href=&quot;http://lucene.apache.org/&quot;&gt;Apache Lucene&lt;/a&gt; is Open Source API that allows a Java developer (.Net libraries available) to write indexing and full-text search capable applications. I have been writing applications based on Lucene for the last 3 years and some of the applications have been deployed at large corporations. I know there are other libraries available to developers who wish to write indexing engine but this blog will solely focus on Apache Lucene. I will not compare it to other API.&lt;br /&gt;
&lt;br /&gt;
Lucene is a very mature API and can be found in NetBeans IDE, Liferay, JackRabbit among others. IBM has written a very good document about the &lt;a href=&quot;http://www.ibm.com/developerworks/library/wa-lucene/&quot;&gt;Lucene architecture&lt;/a&gt;, therefore I will not delve into it here.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.ibm.com/developerworks/library/wa-lucene/indexing_architecture.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://www.ibm.com/developerworks/library/wa-lucene/indexing_architecture.gif&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Lucene, alone, is pretty much useless as any other API. Let&#39;s now introduce &lt;a href=&quot;http://lucene.apache.org/nutch/&quot;&gt;Nutch&lt;/a&gt;. Nutch is a web crawler built-on top of Lucene to provide file crawling capabilities. Nutch was designed to handle large amount of data from the internet (http). Due to its plugin architecture, it was later extended to provide local network crawling such as FTP, databases and Microsoft Windows Shares (I am the author of the &lt;a href=&quot;https://issues.apache.org/jira/browse/NUTCH-427&quot;&gt;protocol-smb plugin&lt;/a&gt; and co-author of the &lt;a href=&quot;http://issues.apache.org/jira/browse/NUTCH-422&quot;&gt;index-extra plugin&lt;/a&gt; found on the Nutch site). We had extended Nutch and turned it into an Enterprise Search application but most of the source codes were locked behind closed doors (company politics).Anyway, Nutch has evolved to become but still very complex in its inner working. The initial Nutch was developed to process data in a batch but there are ways to turn it real-time but that&#39;s for another day. Ok, so Nutch is good for crawling and indexing of data but it does not handle search directly. There is a web application available with Nutch but it is quite poor so let&#39;s now introduce the Solr.&lt;br /&gt;
&lt;br /&gt;
Solr is a powerful web-based search server built-on top of Lucene. The application was developed by CNET Networks and donated to the Apache Foundation. I believe, not too sure so I might need some references here, Solr was powering the search feature on their site but it is definitely used internally by the company. Late 2009, &lt;a href=&quot;http://www.lucidimagination.com/index.php?option=com_mojo&amp;amp;Itemid=90&amp;amp;p=20&quot;&gt;Lucid Imaginations&lt;/a&gt; receives $7.5 million in funding to provide commercial services built around Solr (and Lucene possibly?). Here is a very good &lt;a href=&quot;http://people.apache.org/%7Esgoeschl/presentations/solr/index.html&quot;&gt;presentation about Solr&lt;/a&gt;. Solr is a very good indexing engine. The keyword here is &quot;indexing engine&quot;. It does not have any support for crawling data therefore requiring the developer to create applications that will feed it the data to index. I do believe that it is a good feature of the application as it gives the ability to integrate with various systems as long as they can post data over HTTP. &lt;br /&gt;
&lt;br /&gt;
Nutch is a good crawler but it does not provide an enterprise-grade search interface to its data. Solr, in the other hand, is powerful indexer and has an enterprise grade search interface but it does not know how to gather data in its own. I am sure by now it has become obvious how we can integrate them both together. &lt;br /&gt;
&lt;br /&gt;
We want Nutch to gather the data, by-pass its indexing cycle and feed the data directly to Solr. Lucid Imagination has a good tutorial about it &lt;a href=&quot;http://www.lucidimagination.com/blog/2009/03/09/nutch-solr/&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.lucidimagination.com/blog/wp-content/uploads/2009/03/solr-nutch-setup.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;159&quot; src=&quot;http://www.lucidimagination.com/blog/wp-content/uploads/2009/03/solr-nutch-setup.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
After reading the tutorial from Lucid Imagination, you will notice that Nutch is run by executing some bash files. This is something I strongly disagree with. If Nutch is based on Java (an OS independent language), why do we need to execute some UNIX/LINUX shell script. Also, the fact we need to install CygWin on MS Windows platform to be able to run is a big negative for me. I wrote a simple Java application that will launch Nutch and send the indexing to Solr but as you can see in the source code, you still need a UNIX like environment to run successfully. You can write a platform independent version by looking up Nutch API and calling the methods directly.&lt;br /&gt;
&lt;br /&gt;
Well, I hope that this entry help you understand how to use Nutch and Solr built-on top of Apache Lucene. If you need any clarification, leave comments and I will try to gave ASAP if time permits.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package com.etapix.nutchsolr;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Armel Nene
 */
public class Indexer {

    public static void main(String args[]) {
        if (args.length &amp;lt; 3) {
            System.out.println(&quot;Usage:&quot; +
                    &quot;\ncrawlName        -   This will be used to store crawler files in CrawlName directory&quot; +
                    &quot;\nurlFolder        -   The path to the folder containing the URL to crawl&quot; +
                    &quot;\nsolrUrl          -   The URL to the Solr server&quot;);
            return;
        }
        String crawlerName = args[0];
        String urlFolder = args[1];
        String solrUrl = args[2];
        String inject = &quot;bash bin/nutch2.sh inject &quot; + crawlerName + &quot;/crawldb &quot; + urlFolder;
        String generate = &quot;bash bin/nutch2.sh generate &quot; + crawlerName + &quot;/crawldb &quot; + crawlerName + &quot;/segments -topN 10 -numFetchers 5&quot;;
        String export = crawlerName + &quot;/segments/&quot;;

        String invertLinks = &quot;bash bin/nutch2.sh invertlinks &quot; + crawlerName + &quot;/linkdb -dir &quot; + crawlerName + &quot;/segments&quot;;
        String indexSolr = &quot;bash bin/nutch2.sh solrindex &quot; + solrUrl + &quot; &quot; + crawlerName + &quot;/crawldb &quot; + crawlerName + &quot;/linkdb &quot; + crawlerName + &quot;/segments/*&quot;;
        try {
            System.out.println(&quot;Injecting URLs in crawldb&quot;);
//            int state = 0;
            InputStream in = Runtime.getRuntime().exec(inject).getInputStream();
            System.out.println(convertStreamToString(in));


//            state = Runtime.getRuntime().exec(inject).waitFor();
//            System.out.println(&quot;process completed: &quot; + state);

            for (int i = 0; i &amp;lt; 3; i++) {
                System.out.println(&quot;Generating segments&quot;);
                in = Runtime.getRuntime().exec(generate).getInputStream();
                System.out.println(convertStreamToString(in));

                System.out.println(&quot;Setting environment variable $SEGMENT&quot;);
//            String segs = convertStreamToString(Runtime.getRuntime().exec(&quot;ls -tr &quot; + crawlerName + &quot;/segments|tail -1&quot;).getInputStream());

                String segments = export + lastFileModified(export).getName();
                System.out.println(&quot;$segments: &quot; + segments);
//            in = Runtime.getRuntime().exec(export + segs).getInputStream();
            System.out.println(convertStreamToString(in));

                String fetch = &quot;bash bin/nutch2.sh fetch &quot; + segments + &quot; -noParsing&quot;;
                String parse = &quot;bash bin/nutch2.sh parse &quot; + segments;
                String update = &quot;bash bin/nutch2.sh updatedb &quot; + crawlerName + &quot;/crawldb &quot; + segments + &quot; -filter -normalize&quot;;

                System.out.println(&quot;fetch segments&quot;);
                in = Runtime.getRuntime().exec(fetch).getInputStream();
                System.out.println(convertStreamToString(in));

                System.out.println(&quot;Parse segments&quot;);
                in = Runtime.getRuntime().exec(parse).getInputStream();
                System.out.println(convertStreamToString(in));

                System.out.println(&quot;Update crawldb&quot;);
                in = Runtime.getRuntime().exec(update).getInputStream();
                System.out.println(convertStreamToString(in));
            }
            System.out.println(&quot;Inverting links&quot;);
            in = Runtime.getRuntime().exec(invertLinks).getInputStream();
            System.out.println(convertStreamToString(in));

            System.out.println(&quot;Indexing contents to Solr &quot; + solrUrl);
            in = Runtime.getRuntime().exec(indexSolr).getInputStream();
            System.out.println(convertStreamToString(in));

        } catch (Exception ex) {
            Logger.getLogger(Indexer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static String convertStreamToString(InputStream is) {
        /*
         * To convert the InputStream to String we use the BufferedReader.readLine()
         * method. We iterate until the BufferedReader return null which means
         * there&#39;s no more data to read. Each line will appended to a StringBuilder
         * and returned as String.
         */
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line = null;
        System.out.println(&quot;Now converting inputstream to text&quot;);
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + &quot;\n&quot;);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        System.out.println(&quot;Finish converting to text&quot;);
        return sb.toString();
    }

    public static File lastFileModified(String dir) {
        File fl = new File(dir);
        File[] files = fl.listFiles(new FileFilter() {

            public boolean accept(File file) {
                return file.isDirectory();
            }
        });
        long lastMod = Long.MIN_VALUE;
        File choice = null;
        for (File file : files) {
            if (file.lastModified() &amp;gt; lastMod) {
                choice = file;
                lastMod = file.lastModified();
            }
        }
        return choice;
    }
}

&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://armelnene.blogspot.com/feeds/32257287500758446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://armelnene.blogspot.com/2009/11/develop-your-own-google-with-apache.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/32257287500758446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7746035232350865175/posts/default/32257287500758446'/><link rel='alternate' type='text/html' href='http://armelnene.blogspot.com/2009/11/develop-your-own-google-with-apache.html' title='Develop Your Own Google with Apache Lucene (Java Nutch Solr)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry></feed>