<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1582567513223046165</id><updated>2011-07-28T06:55:48.340-07:00</updated><category term='presto'/><category term='mac'/><title type='text'>Raj's Reflections</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1582567513223046165.post-1274643167043407383</id><published>2009-04-07T10:49:00.000-07:00</published><updated>2009-09-29T11:08:05.350-07:00</updated><title type='text'>EMML Best practices</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/EMML"&gt;EMML&lt;/a&gt; is a DSL (domain-specific language) for creating data-mashup services. Here are my thoughts on some of best-practices to follow for architecting EMML-based Mashup data services.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__8AwzF6miD8/SduamBuq-pI/AAAAAAAAAgk/fjGCJtSEoaA/s1600-h/EMMLBestPractices.png"&gt;&lt;img style="cursor: pointer; width: 269px; height: 320px;" src="http://4.bp.blogspot.com/__8AwzF6miD8/SduamBuq-pI/AAAAAAAAAgk/fjGCJtSEoaA/s320/EMMLBestPractices.png" alt="" id="BLOGGER_PHOTO_ID_5322017362758269586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EMML Virtual Services&lt;/span&gt; &lt;br /&gt;A re-usable services layer consisting of EMML service wrappers for complex web services &amp;amp; other data-sources.  This helps create high-level facades for complex web-service interfaces.  It allows helps in loosely-coupling Mashup Services with native Web/Data services. This layer can also help with service infrastructure policies i.e., rate-limiting, data-caching, service versioning, etc. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EMML Utility Services&lt;/span&gt;&lt;br /&gt;Utility service layer contain reusable, non-business logic services. This avoids occurunces of common redundant logic in higher-level Mashup Services layer.&lt;br /&gt;Common candidates for common utility services are&lt;br /&gt;Persistence Service&lt;br /&gt;Web clipping service&lt;br /&gt;Domain-specific authentication services [e.g. Salesforce / Google authentication]&lt;br /&gt;Data validation/transformation service&lt;br /&gt;Notification service&lt;br /&gt;Logging service&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EMML Mashup Services&lt;/span&gt;&lt;br /&gt;EMML Mashup services contain core data-mashup logic. Data originating from down-stream service layers are combined in interesting ways. Data produced by Mashup services are typically consumed and rendered by Mashlets / Widgets. Since it is a composable service layer, Mashup services also consume other Mashup services. Depending on the complexity of mashup logic, these services may be created in eclipse-based Mashup Studio or visually-composed using Wires.&lt;br /&gt;&lt;br /&gt;EMML offers a rich-set of declarative primitives for filtering, merging, joining, annotating, sorting, transforming data. There is a rich-set of XPath functions available for use in these declarative EMML statements. Category of functions include comprehensive string, date, number, aggregate functions. Refer http://www.w3.org/TR/xpath-functions/ for the full list.&lt;br /&gt;All these functions are available for use in EMML statements. In addition to these standard functions, Presto provides ability to create Domain-specific custom functions to  XPath library. Once added, all these custom functions can be accessed similar to standard XPath functions. This provides a powerful mechanism to create a library of re-usable logic. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EMML Macros&lt;/span&gt;&lt;br /&gt;Macros provide power to extend EMML language with domain-specific vocabulary. These are eseentially re-usable EMML snippets that contain finer-grained logic than EMML utility services.  Additionally, Macros may be made available in Wires for performing user actions. Thus Macros enrich Wires-based visual-style of programming. &lt;br /&gt;Macros can be created at global or package scope. This provides for Macro reuse across and within business organizations.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;XPath functions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Most needs for Java-style imperative logic with Mashup services can be eliminated by using standard XPath functions in EMML statements. In addition custom-XPath functions specific to business domain can be created and added to Presto XPath Library. Subsequently these domain-specific functions can be used as any standard XPath functions in EMML statements.  This provides a very powerful mechanism to encapsulate &amp;amp; re-use logic  across Mashup Services. Custom XPath functions are written in Java.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EMML Refactoring&lt;/span&gt;&lt;br /&gt;During development life-cycle, it can typically be observed that programming artifacts(EMML in this instance) tend to grow larger. At certain point, they become incomprehensible and tedious to maintain. It is essential to refactor such large EMML scripts into more modular, reusable EMML services. In a refactoring process extracted artifacts may include Utility EMML services, EMML Macros or Custom XPath functions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EMML Policy&lt;/span&gt;&lt;br /&gt;By setting appropriate configurations, it is feasible to disable usage of SQL, directinvoke or scripting logic in EMML scripts.  This is a good way to constraint arbitrary usage of specific resources. This can typically be enforced for EMML scripts in Mashup Services layer.  Any required complex logic in Mashup Services layer can be addressed by leveraging EMML Macros, Utility Services or XPath functions.  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EMML Parallel&lt;/span&gt;&lt;br /&gt;Parallel construct in EMML provides mechanism for executing coarse-grained parallel tasks. The EMML concurrency model must be viewed as message-passing concurrency model, rather than shared-state, lock-based model. So, typically parallel tasks must be used for performing isolated tasks that involve no sharing of data between them. For example they may be used to invoke multiple parallel services and subsequently merge returned data from multiple services. Importantly avoid usage of a same,shared variable across Parallel tasks.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EMML namespaces&lt;/span&gt;&lt;br /&gt;A frequent, common error encountered is not accounting for namespace specification in XPath expressions when used in various EMML statements.  Hence, ensure specification of appropriate namespace prefix/uri in xpath expressions. If you choose to ignore namespaces, a ‘*’ wildcard namespace may be used in XPath expression.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A wildcard namespace in filter expression may be specified as follows :&lt;br /&gt;&lt;filter inputvariable="”customersData”" filterexpr="”//*:Customer”" outputvariable="”filteredCustomerData”/"&gt;&lt;br /&gt;&lt;br /&gt;Note the usage of ‘*” wildcard for namespace prefix in the above xpath expression.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EMML ‘nanny’ scripts&lt;/span&gt;&lt;br /&gt;EMML offers a rich declarative vocabulary for doing data-mashups. However, it is easy/natural for Java developers to fall-back on imperative programming style for coding data mashup logic. They need to be informed/educated about EMML language features and XPath function library available to them. Scripting logic should be considered only as the last option. Even so, it would be ideal to create EMML Service wrappers that contains such scripting logic.  The higher-level EMML mashup services can then reuse the scripting logic &lt;br /&gt;In addition, ‘nanny’ EMML scripts can be written to monitor the usage of Scripting logic in every EMML mashup script. Since, EMML is encoded in XML this EMML-on-EMML approach is feasible.&lt;br /&gt;&lt;br /&gt;Such ‘nanny’ scripts would traverse EMML scripts to enforce sample policy constraints i.e.,&lt;br /&gt;check if script, sql tags are being used.&lt;br /&gt;check if any dis-allowed Java Interfaces/classes are being consumed in script&lt;br /&gt;check if any dis-allowed endpoints are being accessed using directinvoke&lt;br /&gt;check if any dis-allowed databases are being accessed using datasource &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EMML Error Handling&lt;/span&gt;&lt;br /&gt;Service invocations to external entities are fraught with reliability issues related to communication failure or poor providers QoS metrics. Hence, its best to be prudent about error handling / fault-tolerance. &lt;br /&gt;When invoking a service using invoke or directinvoke, specify a timeout attribute. This ensures that the service invocation does not wait forever, and is aborted beyond a certain time period. Upon invocation error, it would be best to fail-over to any semantically equivalent alternate service. Typically, this fail-over service may be hosted in-house with previously cached or fall-back data. EMML offers primitives like onerror=continue/abort; faultcode, faultexception variables to handle Error processing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EMML Testing&lt;/span&gt;&lt;br /&gt;All Mashup Services are exposed using REST or JUMP (HTTP + JSON) interface. Any HTTP Client-based Load-Testing tool can be used for automated, regression and load-testing Mashup Services.&lt;/filter&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1582567513223046165-1274643167043407383?l=raj-rajmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/1274643167043407383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1582567513223046165&amp;postID=1274643167043407383' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/1274643167043407383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/1274643167043407383'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/2009/04/emml-best-practices.html' title='EMML Best practices'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__8AwzF6miD8/SduamBuq-pI/AAAAAAAAAgk/fjGCJtSEoaA/s72-c/EMMLBestPractices.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1582567513223046165.post-3969642126336262166</id><published>2009-02-11T13:07:00.000-08:00</published><updated>2009-02-11T13:08:28.989-08:00</updated><title type='text'>BI vs Mashups Analogy</title><content type='html'>"The difference between BI and Mashups is the same as the windows in your&lt;br /&gt;car - they are similar yet they serve different purpose.  BI, like your side&lt;br /&gt;and rear windows, provides a lot of info about what has passed - but you&lt;br /&gt;would never drive by looking only out the sides and rear.  Mashups, like&lt;br /&gt;your windshield, give you real-time info so as to make timely decisions&lt;br /&gt;based on what is happening now. All of the info combined allows you to make&lt;br /&gt;the necessary corrections instead of making misinformed choices based only&lt;br /&gt;on the past. See, they are not competitive, they are complementary!"&lt;br /&gt;&lt;br /&gt;- Luis Derechin, JackBe&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1582567513223046165-3969642126336262166?l=raj-rajmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/3969642126336262166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1582567513223046165&amp;postID=3969642126336262166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/3969642126336262166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/3969642126336262166'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/2009/02/bi-vs-mashups-analogy.html' title='BI vs Mashups Analogy'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1582567513223046165.post-997974731113212301</id><published>2009-02-09T13:34:00.000-08:00</published><updated>2009-02-09T13:49:07.924-08:00</updated><title type='text'>Yahoo BOSS + Twitter</title><content type='html'>Aggregating search results from Yahoo &amp;amp; Twitter Search API:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/61029.js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1582567513223046165-997974731113212301?l=raj-rajmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/997974731113212301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1582567513223046165&amp;postID=997974731113212301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/997974731113212301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/997974731113212301'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/2009/02/yahoo-boss-twitter.html' title='Yahoo BOSS + Twitter'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1582567513223046165.post-2176537835658354998</id><published>2009-01-28T09:48:00.000-08:00</published><updated>2009-01-28T09:49:34.726-08:00</updated><title type='text'>Difficult decisions ?</title><content type='html'>&lt;span class="comment"&gt;&lt;span style="color:#000000;"&gt;"When you have a difficult and important decision to make, flip a coin. Not because flipping a coin is a good way to make important decisions, but because in the moments while it is spinning in the air you will know which way you want it to land." - Anonymous&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1582567513223046165-2176537835658354998?l=raj-rajmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/2176537835658354998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1582567513223046165&amp;postID=2176537835658354998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/2176537835658354998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/2176537835658354998'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/2009/01/difficult-decisions.html' title='Difficult decisions ?'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1582567513223046165.post-3378472219053411824</id><published>2008-12-25T19:29:00.000-08:00</published><updated>2008-12-25T19:31:54.378-08:00</updated><title type='text'>Embarking on a new journey</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__8AwzF6miD8/SVRQEbwbJzI/AAAAAAAAAgc/_uTXkZ5w91g/s1600-h/Picture+3.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 167px;" src="http://3.bp.blogspot.com/__8AwzF6miD8/SVRQEbwbJzI/AAAAAAAAAgc/_uTXkZ5w91g/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5283936299912996658" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1582567513223046165-3378472219053411824?l=raj-rajmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/3378472219053411824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1582567513223046165&amp;postID=3378472219053411824' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/3378472219053411824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/3378472219053411824'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/2008/12/embarking-on-new-journey.html' title='Embarking on a new journey'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__8AwzF6miD8/SVRQEbwbJzI/AAAAAAAAAgc/_uTXkZ5w91g/s72-c/Picture+3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1582567513223046165.post-6945479333686521728</id><published>2008-12-20T01:49:00.000-08:00</published><updated>2008-12-20T02:00:17.223-08:00</updated><title type='text'>Google Reader Subscription API</title><content type='html'>Sample script for accessing Google Reader subscription feeds programmatically using our &lt;a href="http://www.jackbe.com/enterprise-mashup/videos/enterprise-mashup-markup-language-emml-introduction"&gt;Mashup Domain Language&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gist.github.com/38275"&gt;http://gist.github.com/38275&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here's the sample response&lt;br /&gt;&lt;a href="http://gist.github.com/38277"&gt;http://gist.github.com/38277&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pretty slick huh ?!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1582567513223046165-6945479333686521728?l=raj-rajmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/6945479333686521728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1582567513223046165&amp;postID=6945479333686521728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/6945479333686521728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/6945479333686521728'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/2008/12/google-reader-subscription-api.html' title='Google Reader Subscription API'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1582567513223046165.post-7965089597799711203</id><published>2008-10-22T00:38:00.000-07:00</published><updated>2008-10-22T00:48:57.434-07:00</updated><title type='text'>Great Milestone!</title><content type='html'>Yay! we released our &lt;a href="http://www.jackbe.com/enterprise-mashup/"&gt;development edition&lt;/a&gt; today!  Presto developer edition is a free, open &amp;amp; pragmatic mashup development platform. It provides Ajax-based UI tools for high-level rapid-mashup development and a sophisticated mashup language (EMML) for developing advanced mashups.&lt;br /&gt;And I am the creator of  Presto's &lt;a href="http://www.jackbe.com/enterprise-mashup/videos/enterprise-mashup-markup-language-emml-introduction"&gt;Mashup DSL&lt;/a&gt; :) Sweet!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1582567513223046165-7965089597799711203?l=raj-rajmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/7965089597799711203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1582567513223046165&amp;postID=7965089597799711203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/7965089597799711203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/7965089597799711203'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/2008/10/great-milestone.html' title='Great Milestone!'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1582567513223046165.post-8412576559554419930</id><published>2008-10-22T00:26:00.000-07:00</published><updated>2008-10-22T00:28:34.770-07:00</updated><title type='text'>My Workspace - Loving it!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__8AwzF6miD8/SP7WBx_0M5I/AAAAAAAAAf4/riKtq-y2CWc/s1600-h/workspace.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/__8AwzF6miD8/SP7WBx_0M5I/AAAAAAAAAf4/riKtq-y2CWc/s320/workspace.jpg" alt="" id="BLOGGER_PHOTO_ID_5259876740904530834" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1582567513223046165-8412576559554419930?l=raj-rajmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/8412576559554419930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1582567513223046165&amp;postID=8412576559554419930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/8412576559554419930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/8412576559554419930'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/2008/10/my-workspace-loving-it.html' title='My Workspace - Loving it!'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/__8AwzF6miD8/SP7WBx_0M5I/AAAAAAAAAf4/riKtq-y2CWc/s72-c/workspace.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1582567513223046165.post-2977144550831853716</id><published>2008-10-15T17:07:00.001-07:00</published><updated>2008-10-15T17:09:44.966-07:00</updated><title type='text'>Now, that's Dedication!</title><content type='html'>&lt;a href="http://videogames.yahoo.com/featurescreenshot?eid=1255557&amp;amp;index=0"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1582567513223046165-2977144550831853716?l=raj-rajmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/2977144550831853716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1582567513223046165&amp;postID=2977144550831853716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/2977144550831853716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/2977144550831853716'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/2008/10/now-thats-dedication.html' title='Now, that&apos;s Dedication!'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1582567513223046165.post-773951423676834502</id><published>2008-10-08T00:30:00.000-07:00</published><updated>2008-10-08T00:40:27.590-07:00</updated><title type='text'>How-to keep iPhone CAPS Lock On</title><content type='html'>Settings &gt; General &gt; Keyboard &gt; Enable Caps Lock  [ON]&lt;br /&gt;&lt;br /&gt;and double-tap Shift to leave Caps Lock on and type ALL CAPS words like AAPL :)  I am surprised Apple did not turn this on by default.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1582567513223046165-773951423676834502?l=raj-rajmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/773951423676834502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1582567513223046165&amp;postID=773951423676834502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/773951423676834502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/773951423676834502'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/2008/10/how-to-keep-iphone-caps-lock-on.html' title='How-to keep iPhone CAPS Lock On'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1582567513223046165.post-4003550138308915964</id><published>2008-09-15T13:56:00.000-07:00</published><updated>2008-09-15T14:12:44.108-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='presto'/><title type='text'>'Statistically Improbable Phrases' for advertising Mashups</title><content type='html'>Amazon has a cool feature called &lt;a href="http://www.amazon.com/gp/search-inside/sipshelp.html/ref=sib_sip_help"&gt;"Statistically Improbable Phrases"&lt;/a&gt;.&lt;br /&gt;It basically mines for unique &amp;amp; repeatable phrase occurrences in a book and  provides buyers a different (unique) perspective about the book.&lt;br /&gt;&lt;br /&gt;For example, Given a Book about &lt;a href="http://www.amazon.com/Virtual-Machines-Iain-D-Craig/dp/1852339691/ref=pd_bxgy_b_text_b%20"&gt;Virtual Machines&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SIP for this book are&lt;br /&gt;runtime constant pool, constant pool index, stack organization, literal pool, replace return address, local variable array, entire virtual machine, alt rules, virtual machine instructions, suspend instruction, current stack frame, virtual machine code, process descriptor, global event queue, termination flag, initialization code, new stack frame, top stack element, threaded code, instruction pointer, runtime representation, static chain, machine organization, register machine, control stack&lt;br /&gt;&lt;br /&gt;Another way is to look at them are as auto-discovered Tags (i.e. mined from related contents)&lt;br /&gt;&lt;br /&gt;A similar feature would be very useful in &lt;a href="http://www.jackbe.com/products/index.php"&gt;Presto Mashup Platform&lt;/a&gt;.  SIPs can be mined and created for various Services &amp;amp; Mashups registered in Presto. The Mashup / Service content to be mined would include its associated data &amp;amp; meta-data. These SIPs would help give users a unique perspective of Mashups &amp;amp; Services registered in Presto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1582567513223046165-4003550138308915964?l=raj-rajmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/4003550138308915964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1582567513223046165&amp;postID=4003550138308915964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/4003550138308915964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/4003550138308915964'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/2008/09/statistically-improbable-phrases-for.html' title='&apos;Statistically Improbable Phrases&apos; for advertising Mashups'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1582567513223046165.post-1516407111469405452</id><published>2008-08-27T18:00:00.000-07:00</published><updated>2008-08-27T18:11:17.438-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Sketches</title><content type='html'>I am a visual kind of person - sketches help clarify my thoughts and comprehend complex subject matter. OmniGraffle is my favorite sketching tool and can't live without it. To my surprise I ran into &lt;a href="http://www.graffletopia.com/"&gt;Graffletopia&lt;/a&gt; a vibrant stencils community for OmniGraffle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1582567513223046165-1516407111469405452?l=raj-rajmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://raj-rajmohan.blogspot.com/feeds/1516407111469405452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1582567513223046165&amp;postID=1516407111469405452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/1516407111469405452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1582567513223046165/posts/default/1516407111469405452'/><link rel='alternate' type='text/html' href='http://raj-rajmohan.blogspot.com/2008/08/sketches.html' title='Sketches'/><author><name>raj</name><uri>http://www.blogger.com/profile/03584748439527492755</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
