Sunday, December 16, 2007
Emerging technologies such as Google Gears, Microsoft Sync Framework and Microsoft Volta provide programming paradigms around online/offline synchronization and an execution context. As you may already know Google Gears opens the possibility of the synchronizing content with browser plugin to provide seamless offline experience of online content. For example services like Google Reader and Zoho Writer leverage this today in their offerings. Microsoft Sync Framework opens the possibility of data synchronization across any device and data format. While Microsoft Volta promises to decoratively allow developers to execute content both online and offline.
As stated earlier the concern of the user data having to live in the cloud can be eliminated by architecting applications to load data locally. The web essentially becoming a platform for software delivery while data may be securely stored locally. The user has the choice of storing data in a medium of his choice, for example in USB drive or local hard-drive or just online. Technology support for encryption capabilities to securely store content should be just a matter of time.
Also the service providers wanting to provide data-sensitive contextual user services/experience may leverage paradigms provided by Volta. This will ensure that any user concerns around Privacy are addressed as well.
As the concept of web as a platform continues to grow so will the user's concern of Privacy and data security. Emergence of technologies and their application in creative ways may help address such inevitable concerns.
Google Gears Enabled Sites
Saturday, September 08, 2007
Internationalization is one of the common requirements in web applications. One of the challenges faced by a team is the non-availability of translated resource bundles during development (mostly due to logistical reasons). But it is important to test various scenarios during the application development.
In this post I will present a simple idea which utilizes Google Translate to auto-generate translated Java Resource Bundles for the language of choice. Just send a HTTP GET request with the text to be translated to Google Translate URL and read the translated text by parsing the response. In order to translate an entire resource bundle just pass a source bundle (For example, English) and read each property and write to target language resource bundle file.
Here is the URL for translating "welcome" from English to Spanish http://www.google.com/translate_t?langpair=en|es&text=welcome
Here is a snippet of Java code which utilizes Apache Commons HttpClient library :
String url = "http://www.google.com/translate_t? langpair=en|es&text=";
String text = "welcome";
HttpClient client = new HttpClient();
GetMethod getMethod = new GetMethod(url + text);
String xml = getMethod.getResponseBodyAsString();
xml = xml.substring(xml.lastIndexOf("<div id=result_box dir=ltr>"));
String translated_text = xml.substring(27, xml.indexOf("</div>"));
Monday, August 27, 2007
I received the much awaited mylivesearch.com beta release invite few minutes before.
Here is a screen shot
The real-time search is obviously slower than the Google search and also not ranked. Filtering by website feature is pretty helpful.
UPDATE: I just observed everytime you search for something mylivesearch hits the website explicitly. I confirmed this using my web analytics (StatCounter -- used for this blog) to test.
Sunday, August 19, 2007
Google Reader is one of the most popular web services and I personally use it everyday. One of the features that I miss using a RSS reader is the ability to view comments. In this post I would share a simple hack to help with this issue and to more importantly serve as a proof-of-concept for possibilities around web application extensions. It is written on a framework called Chickenfoot for Firefox that I recently stumbled upon.
What is Chickenfoot?
Google Reader Hack
While reading a post in Google Reader there will be only one expanded view of the post which lives under the <div> with id='current-entry'. This hack leverages this to identify the post that user is currently reading and loads that page in another tab automatically. If you're interested in quickly checking/leaving a comment for the post, then you can switch to the other tab and do so immediately without having to click and wait for it to load.
Chickenfoot programming paradigm could be used to enhance web experience for user's convenience. Also the intersection of Chickenfoot with concepts like Programming Collective Intelligence will fuel greater innovation by allowing user to be more in control of the experience.
Sunday, August 12, 2007
Applications are generally built with an expected user base but soon might be overwhelmed due to business demand. This is especially particularly true in the context of consumer facing applications. Caching is one of the most important aspect to improve application performance by storing object in Cache (memory) reducing database load.
Caching in a clustered environment requires a Distributed Caching solution which can support failover scenarios and data reliability. In this post I would like to explore the capabilities of Memcached and Terracotta as distributed caching solutions.
Memcached is a high-performance distributed object caching system with client APIs for Perl, PHP, Python, Ruby and Java. Here are some of its capabilities and limitations (using Java client API):
- Requires objects to be Serializable
- Object Identity is NOT preserved
- Supports cache expiration
- Does NOT handle failover scenarios
- For a given object selects a server from a pool of cache server based on hash of the key
- Easy to configure (through SockIOPool class)
Terracotta is an open-source Java based clustering solution for JVM. Distributed Caching can be achieved using Terracotta by using a java.util.HashMap or open-source caching solutions like EHCache, OSCache and JBoss TreeCache.
- Preserves Object identity
- Manages memory efficiently through Virtual Heap
- Declarative requirement for lock support
- Simple configuration file with Eclipse Tool support
- Good documentation, support and active development
- Due to the nature of its implementation certain classes are not Portable and hence cannot be used
- Hard to determine which third-party classes are portable
- Does NOT require classes to be serializable
- Easy to configure and get started!
Thursday, August 09, 2007
Basically the idea is to return XML(or JSON, etc) whenever we encounter a request to the controller with parameter returnData=XML. This can be accomplished by writing a HandlerInterceptorAdapter with postHandle method to do the following:
void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
if ( request.getParamter("returnData") != null && request.getParamter("returnData")="XML" )
// add a XML Serializer to the model
// Find the model object names and add the list to model attribute "xmlModules"
// Set the view name to "xmlView"
In your xmlView (JSP or Velocity Template) for each attribute in xmlModules use the XML Serializer to generate XML and render it. There are few applications for this approach:
1. Enable front-end to readily use AJAX for existing controllers
2. Use this as a strategy to get a debug view of model data during development
3. Based on some additional key use this to get debug view from production for troubleshooting purpose
1. XStream for XML Serialization
Tags: java spring ajax
Wednesday, August 08, 2007
Saturday, June 30, 2007
Morfik , Backbase and Aptana have released AJAX based development tool (platform) for building iPhone applications. There is also an impressive list of iPhone applications here
Tags: technology apple iphone
Friday, June 22, 2007
Monday, June 11, 2007
Friday, June 01, 2007
Thursday, May 31, 2007
Today Google released its Mashup Editor as limited beta. I'm on the line for invite :)
Ofcourse Yahoo Pipe pioneered this Mela originally!
Tags: technology microsoft google popfly pipes
I'm very excited and impressed by reading through the developer documentation and demonstrations. The architecture employs a switch based on a installed browser plugin and decide whether to retrieve the data from server or from a local database installed on the client.
I played around with the demo's a bit and it seems that the browser database seems to be specific to the browser. For instance if you browse a particular site using Firefox and create local copy and then open IE for offline browsing it wont be available offline. I'm curious to research more and see if developers can actually take advantage of the API and bring offline sync support to multiple browsers. Overall I am impressed and excited about the technology.
Also there is a offline version of Google Reader released recently.
UPDATE: Google Developer Day -- Google Gears Intro Video
Monday, April 30, 2007
The SliverLight Live Dev page points to several resources and REST based API for accessing the service itself. There are also references of tools to perform media transcoding. That said SilverLight and the companion service has opened up several possibilities by allowing an efficient time to market and a worry free infrastructure. A transcoding service with an API will be a great add-on and will eliminate the need for users (devs) to maintain inftrastructure for transcoding.tags: technology, silverlight, microsoft
Saturday, March 24, 2007
I built a Google Co-op Search for searching e-books on Scribd and here is the link for it:
Some of the features that I would love to see in Scribd includes:
- Quote on a selected text and link to it from comments (dynamic highlighting)
- Facilitate more user discussions by improving comments feature
- Allow users to recommend similar/related documents
- Allow Pin-n-Publish of reading list in RSS
Saturday, March 17, 2007
Basically one can create a worksheet and set the publishing option to output RSS (or ATOM or any format of your choice) and select an appropriate publishing frequency. Once this is done whatever you add to your worksheet is available for anyone who subscribes. Also there is an option to customize and publish a select range of cells and not an entire sheet.
Now it is possible for Clickables (Google Gadget that I developed few months back) to use spreadsheets and provide persistence bookmarking of shared links. Also, integration with Yahoo Pipes! can bring about a lot of data mashup feeds.
Sunday, March 04, 2007
- Apply design patterns as modules
- Application security architecture
- Transaction, Logging, Stats, etc.
- Enforce architectural design standard for application development by leveraging AOP tool support
- JVM Clustering
AOP allows modularization of application and provides manageability and loose coupling from a software architecture perspective. From a product perspective, it allows to easily plug in features by allowing various implementation of aspects to be plugged-in quite easily.
Saturday, February 24, 2007
As we know OpenID is an open, decentralized, free framework for user-centric identity. The goal is to have the user remember one user name and password and login to any site which supports the protocol. It is light-weight and supports SSO.
In the past few days there has been a lot of traction to OpenID adoption with the announcement for its support from the giants AOL, Microsoft and Digg. So if you have an AOL account then your open id is http://openid.aol.com/username and you can login to any website that supports OpenID. With the growing number of startups the adoption rate for OpenID is poised to grow rapidly.
To start using OpenID you will need to obtain one. If you already have an AOL account you could use that if you like. Or you can obtain one from http://www.myopenid.com/. For a quick overview of OpenID here is a video.
From a developer perspective for you to support OpenID either as client or server there are several resources available as noted below:
OpenID Enabled - OpenID community
OpenID Client/Server Libraries - C#, Java, Perl, C++, PHP, Ruby, ColdFusion
BotBouncer - A CAPTCHA service for OpenID
I was looking at OpenID4Java API - Consumer side and is pretty straight forward.
OpenID and CardSpace
Here is a post explaining how these two complementary technologies can work together. Its interesting.
Friday, February 23, 2007
Saturday, February 10, 2007
I just built my first Pipe - a translation pipe for German version of Reddit using the Babel Fish module. One could clone this and use this for any feed translation from any language. Click here to access the Pipe!
I expected this kind of service for a while and there could be a new/similar service to create Widgets/Gadgets in a similar fashion. Apple Dashboard, Google Gadget IDE, Visual Studio Gadget API provide this on a proprietary platform but more generic ones will emerge.
Friday, February 02, 2007
I wrote a little crawler to crawl on my diggs and found some interesting results. One could try this manually too and here is how:
1. Goto one of your Diggs and click on "Who Dugg or Blogged this?"
2. Click on each user to see their Diggs and find a user whose diggs you like
3. Subscribe to his/her Digg Feed (RSS)
4. Now, even if you're not an actively digging you will not miss out on interesting links
Saturday, January 20, 2007
Friday, January 05, 2007
Importance of going Green and reducing fuel consumption has never been more important considering geo-political reasons and the sheer limitation of oil resources. These are some tips on how technology can be used:
- Shop Online - Avoid a car ride to bookstore. You get slick deals too!
- Pay your bills online
- Sign up for electronic statements instead of paper statements for credit card, bank, etc.
- Look for a book online in Google Books, Text Archive, etc.
- Get your TimeSelect or ePaper online subscription avoid buying real newspaper
- Avoid face-to-face meetings by using online conference tools like WebEx, Microsoft Live Communicator
- Use mapping tools to find most efficient route : MapQuest, Google Maps , Live Local
- Use Power off / Hibernate features of your OS. There are some many "choices" for this..
I believe technology is bringing significant impact in reducing fuel consumption. I believe with the spread of social awareness for conserving energy, we will see new and innovative patterns in generation/delivery/consumption of energy