Monday, July 27, 2015

The Polarizer Pattern

A polarizer is a filter used in optics to control beams of light by blocking some light waves while allowing others to passthrough. Polarizers are found in some sunglasses, LCDs and also photographic equipment.

When it comes to managing an API there is often the need to control what bits of an API gets exposed and what does not. However, this kind of control is generally done at a Gateway that supports API Management rather than at the back-end API which may provide many more functions that never get exposed to a consumer.

A good example, is a SOAP or REST service that is designed to support a web portal which you also want to expose as an API so that 3rd parties can build their own applications based on it. Though your API may provide many functionalities in support of your web portal, you may not want all of these functionalities available to the 3rd party application developer for one of many reasons. And, based on many cases (as in this example), you’d find that this pattern is most useful if you find that you have an existing capability that is currently being used for some purpose, which also has to be exposed for another purpose but with restricted functionality.

While The Polarizer might be treated as a special kind of an Adapter, the key for differentiating the two in terms of API Management is based on how these two patterns would be implemented. While adapter may expose a new interface to an existing implementation with new capabilities or logic combining two or more existing capabilities, a polarizer will simply restrict the number of methods exposed by an existing implementation without altering any of its functionalities. The outcome of The Polarizer may also be similar to a Remote Facade. But, unlike the remote facade, the purpose of a polarizer is not to expose a convenient and performance-oriented coarse-grained interface to a fine-grained implementation with an extensive number of methods; it is to purely to restrict the methods from being accessible in a given context.

The polarizer also fits alongside patterns such as Model-View-ViewModel (MVVM) and Model-View-Presenter (MVP). Unlike these patterns, which are designed to build integration layers to connect front-ends with back-ends, the focus of the polarizer is to control what is being exposed from a back-end without making any consideration in favour of a front-end. We however may find situations where an implementation of an MVVM or MVP pattern also performing tasks of a polarizer.


The graphic below explains how The Polarizer pattern can be implemented by a typical API Management platform. In such an implementation, the Gateway component will simply polarize all incoming requests through some sort of filter, which may or may not be based on some configurable policy.


The WSO2 API Manager provides the capability to configure what API resources are being exposed to the outside world and thereby polarize the requests to the actual implementation. Polarization may not necessarily be a one-time activity for an API. You may decide on a later date to change what methods are exposed. The WSO2 API Manager allows you to do such reconfiguration via the Publisher portal.


Monday, November 24, 2014

State of Development vs. State of Availability

Runtime Governance is a broad area of focus and involves many different kinds of people and processes. The complexity of runtime governance is perhaps the main contributor to why most projects are either fully or partially unsuccessful in meeting their objectives. If you consider the people involved, there are a variety of roles including project managers, DevOps, and also C*-executives who are interested in the outcomes of runtime governance. In terms of processes yet again there are many, such as continuous integration, system monitoring, and analytics for understanding overall performance, generated value, and ROI.


While there are several aspects that require attention to get runtime governance right, one of the most important aspects is having a proper lifecycle management strategy. This is also perhaps the most misunderstood area in terms of runtime governance. The whole idea of a design/development lifecycle is to keep track of a project’s progression from Concept to Production. But once in production, such a lifecycle is not really going to help. However, more user-oriented systems such as API Stores and Gateways also require a concept of a lifecycle to manage a running system. This is not focusing on the development of a project but on its availability - for it to be used or accessed by an end-user. This is what gives rise to two separate kinds of state that you need to keep track in a system, namely, the State of Development and the State of Availability.

The State of Development is all about keeping track of whether a project is ready to go into a production or a “running live” setting. This involves lining up the development and continuous integration processes, as to whether the project is built properly, whether best practices have been followed and whether proper testing has been done. The lifecycle itself might be fully-automated, semi-automated or even manual. The level of automation does not create any harm in terms of finding answers to the kinds of questions related to readiness, however, automation can reduce a significant proportion of human error and produce more robust outputs within strict timelines. The only downside of automation is that it really leaves little room for manual override and limits the agility of the project creating a scenario where "system drives human" rather than "human drives system”.

The State of Availability is all about understanding whether your project is ready to be accessed by the outside world (or the world beyond the project team). Now, the interesting fact is that most projects become already accessible well before they go into the Production state, and you’ll often find conflicting situations with most of the all-in-one linear and continuous lifecycles that attempt to merge the concepts of development and availability together. This creates situations where process and tool don’t tend to be fitting. This leads to development teams exploring into their own sets of workarounds to make things happen. However, in a lifecycle management system that is well designed, the possibility of things available and the ability to keep track of development should both be possible at the same time. But, these concepts are not fully orthogonal, and the teams themselves should be able to decide on how these two things connect to each other.

Therefore, to solve the problem of two kinds of state, the lifecycle management of your project should be designed such that it takes both of these things into consideration. Both of these kinds of state will have multiple stages of progression and they will require concepts of checklists, validations, approvals and permissions for the model to be meaningfully governed. Therefore, from the tool’s point of view, there should exist the ability to support multiple parallel lifecycles at the same time, which can be separately tracked and monitored. Such a Governance Framework will be able to support both Continuous Integration Systems and Enterprise Asset Registries at the same time.

Saturday, August 16, 2014

API Management for OData Services

The OData protocol is a standard for creating and consuming Data APIs. While REST gives you the freedom of choice to choose how you design your API and the queries you pass to it, OData tends to be a little bit more structured but at the same time more convenient, in terms of exposing data repositories as universally accessible APIs.


However, when it comes to API Management for OData endpoints, there aren’t many good options out there. WSO2 API Manager makes it fairly straightforward for you to manage your OData APIs. In this post, we will looking how manage a WCF Data Service based on the OData protocol using WSO2 API Manager 1.7.0. The endpoint that I have used in this example is accessible at http://services.odata.org/V3/Northwind/Northwind.svc.

Open the WSO2 API Publisher by visiting https://localhost:9443/publisher on your browser. Login with your credentials and click on Add to create a new API. Set the name as northwind, the context as /northwind and the version as 3.0.0 as seen below. Once done, click on the Implement button towards the bottom of your screen. Then click Yes to create a wildcard resource entry and click on Implement again.

Please note that instead of creating a wildcard resource here, you can specify some valid resources. I have explained this towards the end of this post.


In the next step, specify the Production Endpoint as http://services.odata.org/V3/Northwind/Northwind.svc/ and click Manage. Finally, select Unlimited from the Tier Availability list box, and click Save and Publish. Once done, you should find your API created.

Now Open the WSO2 API Store by visiting https://localhost:9443/store on your browser, where you should find the northwind API we just created. Make sure you are logged in and click on the name of the northwind API, which should bring you to a screen as seen below.


You now need to click on the Subscribe button, which will then take you to the Subscriptions page. In here, you need to click on the Generate button to create an access token. If everything went well, your screen should look something similar to what you find below. Take special note of the access token. Moving forward, you will need to make a copy of this to your clipboard.


The next step is to try the API. You have several choices here. The most convinient way is to use the RESTClient tool which comes with the product. You simply need to select RESTClient from the Tools menu on the top. To use this tool, simply set the URL as http://localhost:8280/northwind/3.0.0/Customers('ALFKI')/ContactName/$value and the Headers as Authorization:Bearer TOKEN. Remember to replace TOKEN with the access token you got from the step above. Once you click Send, you should see something similar to the screenshot below.


Another easy option is to use curl. You can install curl on most machines and it is a very straightforward command line tool. After having installed curl, run the following command in your command line interface:
curl -H "Authorization:Bearer TOKEN" -X GET "http://localhost:8280/northwind/3.0.0/Customers('ALFKI')/ContactName/$value"
Remember to replace TOKEN with the access token you got from the step above.

For more challenging queries, please read through Microsoft’s guidelines on Accessing Data Service Resources (WCF Data Services). Remember to replace http://services.odata.org/Northwind/Northwind.svc with http://localhost:8280/northwind/3.0.0 in every example you find. For the RESTClient, note that you will have to replace " " with "%20" for things to work. Also, for curl note that on some command line interfaces such as the Terminal in your Mac OS X, you might have to replace "$" with "\$" and " " with "%20" for things to work.

In the very first step, note that we used wildcard resource. Instead of that, you can specify some resources to control what types of access is possible. For example, in the list of queries mentioned in the link above, if you want to allow the queries related to Customers but not the ones related to Orders, you can setup a restriction as follows.

Open the WSO2 API Publisher by visiting https://localhost:9443/publisher on your browser. First click on the northwind API and then click the Edit link. Now at the very bottom of your screen, in the Resources section, set URL Pattern to /Customers* and Resource Name to /default. Then click Add New Resource. After having this done, click on the delete icon in front of all the contexts marked /*. If everything went well your screen should look similar to the following.


Finally, click on the Save button. Now, retry some of the queries. You should find the queries related to Customers working well but the queries related to Orders failing unlike before. This is a very simple example on how to make use of these resources. More information can be found in here.

Please read the WSO2 API Manager Documentation to learn more on managing OData Services and also other types of endpoints.

Sunday, August 3, 2014

The right Governance Tools are key to the right Level of Maturity

Governance is part and parcel of any enterprise of the modern world. Knowingly or unknowingly, every single employee is a part of some form of corporate governance. Having the right tools and frameworks not only helps but also ensures that you design, develop and implement the best governance strategies for your organisation.


The types of tools and the approach required for governance varies significantly depending on the level of maturity of an organisation. The Capability Maturity Model Integration programme explains several levels of maturity an organisational process can be in. It is ideal for all organisations to eventually reach the optimum state in terms of all its processes, but it is not always required and can also be very expensive if over done.

The key to understanding what level of governance is needed is to find where your organisation is in terms of its level of maturity. And, you may choose different types of governance products for different types of process requirements. When selecting right tool or framework, you should not only focus on what the product is capable of and how much it costs, but also what types of metrics can they provide for you to iteratively improve the maturity of your organisation.

A basic registry/repository solution that can be used to capture requirements, group them into projects and provide some analytics around what they provide can only help you get past the second level of maturity. Similarly, the most advanced deployment composed of multiple products of multiple vendors in combination of a series of home-grown solutions, will not only burn a lot of your finances but also will end up taking a lot of time on establishing and maintaining these processes.

It takes a lot of thinking and planning, and the right mix of products as well as expertise will be required. To open doors for the next level of maturity, your company will need the right governance solution that is unique to your requirements. Most of the work done and organisational transformation happens within the third level of maturity and the journey beyond is not so difficult. But, this what requires proper understanding and planning. And, making the right choice of toolset will be pivotal towards taking your organisation to the most optimum level of maturity.

Therefore, it is crucial that you pay attention to requirements of later stages early enough to help you invest the right amount of time and money before starting to take your organisation to the next level of success.

Sunday, July 27, 2014

Securing the Internet of Things with WSO2 IS

The popularity of the Internet of Things (IoT) is demanding for more solutions to make it easier for users to integrate devices, with a wide-variety of on-premise and cloud services. There are many existing solutions which makes integration possible, but there are many gaps in several aspects including usability and security.


Node.js

Node.js is a runtime environment for running JavaScript applications outside a browser environment. Node.js is based on the technology of the Google Chrome Browser. Node.js runs on nearly all the popular server environments include both Linux and Windows. Node.js benefits from a efficient, light-weight, non-blocking I/O model which is event-driven. This makes it an ideal fit for applications running across distributed devices.

Node.js also features a Package Manager, npm, which makes it easier for developers to use a wide variety of third-party modules in their application with ease. The Node.js package repository boasts to have over 85,000 modules. The light-weight and lean nature of the runtime environment also makes it very convenient to develop as well as host applications.

Node-RED

Node-RED is a creation of IBM’s Emerging Technology group and is position as a visual tool for wiring the internet of things. Based on Node.js, Node-RED focuses on modelling various applications and systems in a graphical flow making it easier for developers to build ESB-like integrations. Node-RED also uses Eclipse Orion making it possible to develop, test and deploy in a browser-based environment. Node-RED uses a JSON-based configuration model.

Node-RED provides a number of out-of-the-box nodes including Social Networking Connectors, Network I/O modules, Transformations, and Storage Connectors. The project also maintains a repository of additional nodes in GitHub. The documentation is easy to understand and introducing a new module is fairly straightforward.

WSO2 Identity Server

WSO2 Identity Server is a product designed by WSO2 to manage sophisticated security and identity management requirements of enterprise web applications, services and APIs. The latest release also features an Enterprise Identity Bus (EIB), which is a backbone that connects and manages multiple identities and security solutions regardless of the standards which they are based on.

The WSO2 Identity Server provides role-based access control (RBAC), policy-based access control, and single sign-on (SSO) capabilities for on-premise as well as cloud applications such a Salesforce, Google Apps and Microsoft Office 365.

Integrating WSO2 Identity Server with IBM Node-RED

What’s good about Node-RED is that it makes it easy for you to build an integration around hardware, making it possible to wire the internet of things together. On the other hand, the WSO2 Identity Server makes it very easy to secure APIs and applications. Both products are free to download and use and is based on the enterprise-friendly Apache License, which even makes it possible for you to repackage and redistribute. The integration brings together the best of both worlds.

The approach I have taken is to introduce a new entitlement node on Node-RED. You can find the source code on GitHub. I have made use the Authentication and Entitlement administration services of WSO2 IS in my node. Both of these endpoints can be accessed via SOAP or REST. Most read-only operations can be performed using an HTTP GET call and modifications can be done using POST with an XML payload.

The code allows you to either provide credentials using a web browser (using HTTP Basic Access Authentication), or to hard-code it in the node configuration. The graphical configuration for the entitlement node allows you to choose whether either or both of authentication and entitlement. Invoking the entitlement service also requires administrative access, and these credentials can either be provided separately or the same credentials used for authentication can be passed on.

Example Use-cases

To make it easier to understand I have used Node-RED to build an API that will let me expose a the contents of a file on my filesystem. The name of the file can be configured using the browser. This is a useful technique when designing Test Cases for processing hosted files or for providing resources such as Service Contracts and Schemas. I have inserted my entitlement node into the flow to ensure access to the file is secured.
The configuration as seen below will both authenticate and authorize access to this endpoint. I have also provided the administrative credentials to access the Entitlement Service and also uploaded a basic XACML policy to the WSO2 Identity Server.
When you access the endpoint, you should now see a prompt requesting your credentials.
Only valid user accounts that have been setup on WSO2 Identity Server will be accepted. Failed login attempts, authorizations and other errors will be recorded as warnings on Node-RED. These can be observed both on the browser as well as the command prompt in which you are running the Node.js server.

Saturday, September 10, 2011

WSO2Con2011: SOA Governance with WSO2 Products

Join me to learn about SOA Governance with WSO2 Products. During this 45mins session, I'm planning to cover how WSO2's revolutionary middleware and PaaS offerings address Governance requirements of modern businesses.



Abstract:

The WSO2 Governance Registry provides end-to-end governance for enterprise applications. This session will outline will introduce key concepts of governance and then dive into a deeper discussion on how IT professionals can streamline application development, testing and deployment processes, as well as manage service lifecycles and assets using WSO2 Governance Registry. Attendees also will learn about the community and social aspects of WSO2 Governance Registry as an enabler of collaboration between distributed teams, converting traditional human-centric tasks into key assets of the governance process.

Sunday, November 21, 2010

Getting Started with WSO2 Governance as a Service (GaaS)

Stratos, WSO2's latest introduction, is an implementation of a complete middleware platform-as-a-service (PaaS) solution on top of a Service Oriented Architecture (SOA), based on WSO2 Carbon. Stratos brings about all the features available on a complete WSO2 Carbon platform deployment, on a cloud infrastructure, which provides a set of multi-tenant, on-demand services that provides you with solutions to all your SOA middleware requirements, in a matter of a few clicks. Click here to start using Stratos for free, or visit, the Stratos product page to view a detailed list of services available.

This post aims at introducing you to WSO2 Governance as a Service (GaaS), which is one of the ten different services available as a part of Stratos. WSO2 Governance Registry (G-Reg), provides a single uniform facade to your SOA metadata. G-Reg allows you to store, index, catalog and build a community around your enterprise service offerings, while making use of its easy-to-use interfaces to manage dependencies, analyze impact, enforce policies, create versions, search and drive business processes. GaaS, allows you to make use the very same features on the cloud, without having worry about setting up your own G-Reg instance.

Starting to use GaaS, is as simple as creating an account for yourself on WSO2 Stratos. Getting started is as easy as following the 5 steps below.

Step 1 : Register a new domain



Step 2 : Fill in your details



After clicking on the submit button, you will see a confirmation page as seen below.



Step 3 : Confirm E-mail address



You will then receive a confirmation e-mail, with the link to your all new account on Stratos.



You now have successfully created an account which you can use to access WSO2 Governance as a Service (GaaS). Making use of GaaS is just 2 more steps.

Step 4 : Login to your Stratos account



Step 5 : Select the Stratos Governance service



This will load your own GaaS account on the cloud. The homepage will list out some useful links to help you get started.


Feel free to try out some of the interesting features of GaaS. For more information and updates, please stay in touch with the WSO2 Stratos Development team.

Tuesday, October 14, 2008

Why use QR Code in Blogs?

QR code, or Quick Response Code is a two dimensional bar code system invented by Denso, a Japanese Corporation, in 1994. Even though it being a very popularly used alternative to the single dimensional barcode system within Japan, its usage is limited in other parts of the world. The usefulness of a QR code is its ability to store much larger amounts of information and make it possible to be decoded at much greater speeds.

QR codes were designed initially to be used to track parts built in vehicle manufacturing systems or very large scale (the reason to why Denso, a popular vehicle part manufacturer invented it). But, as of today, its usefulness is found in quite different domains, contradictory to the thoughts of the initial developers. QR codes are used in applications related to mobile phones and also as means of an alternate mechanism to store URLs in a universally decodable format.

Bloggers have found it interesting to have a QR code of their blog (some prefer having the code varied by post as well, as you see in my blog), displayed on the widget bar. Fancy looking QR codes are not easy to generate. There are several popular QR code generators including the Google Chart API. Others are, http://qrcode.kaywa.com and http://www.qrcode.es. This blog uses the latter.

Benefits of using QR codes is the possibility to print the image on some form of media (paper, magazine, contact card etc.) and have a camera phone take a photograph of that image and automatically redirect to that location, using a QR code reader application along with a suitable web browser. Thus the usefulness is immense. For instance, if you have a QR code reader, sharing your favorite blog post with a friend is as simple as sending him an image of your QR code generated using the URL.

Monday, October 13, 2008

Microsoft Committers at Apache Software Foundation

Microsoft through out the past as seen by many has been a strong opponent to the Open Source community, as it being one such company who believed 100% in the commercial aspects and development of software and related infrastructure (including services, support, add-ons and extensions etc.). However, along with the drastic change of perception, where clearly marked development models and interactions of software are now void, and rather moving towards a more globalized system including involvement of varied disciplines, Microsoft too have decided to make their move into the Open Source territory.

The change might seem rapid and sudden to some, but not to those who've been having a careful eye of the recent changes in the industry (more info here). My two previous posts (Microsoft Funds ASF, and WSO2 @ Tech.Ed 2008) of how Microsoft approached true Open Source provides a solid justification to this fact. The greatest question presented by many is whether 2008 is the turning point which breaks the prolonged and greatly spoken barrier between Open Source and Commercial worlds of software.

I was amazed to see this post which introduced the first ever committers from Microsoft to the Apache Software Foundation, who'd perhaps be the first ever contributors to broader Open Source in a manner that is publicly aware. In my personal opinion this unfolds a new era in the entire industry of IT, Systems and Software. The Apache Software Foundation is also a much admired community by many due to its openness and true contribution to create a world of freedom to use software unlike most other entities that promote the same.

The entire Open Source community would un-doubtfully be looking forward to further involvement and contribution by not only Microsoft, but also several other commercial strongholds.

Sunday, October 12, 2008

Does Technorati Do the Right Thing?

Technorati is an internet search engine that indexes blogs (over 100 million) and tagged social media (over 250 million), and claims to be the world's best blog index. The Technorati claims have been criticized by many and at the same time acknowledged by many as well. An open source based development team with several active developers is what keeps Technorati going despite heavy competition from search engines such as Google and Yahoo.

However, certain aspects of Technorati's model seem very much questionable. For instance, Technorati displays each blog indexed as a part of their website (http://technorati.com/blogs/..) and to a certain extent makes use of others work to increase the number of their pages, and thereby the number of visitors to their pages; improving the website's overall ranking and advertising revenue.

Another fact is that Technorati actually displays each post appearing on publicly visible blogs within their site and display some advertisements based on the content appearing on those particular pages. The advertisements displayed may be purely random, but the content appearing on the page seems to influence at least one such add appearing in many occasions. You can give this a try (make sure to check around 20-30 different blogs/posts instead of making conclusions based on a few).

Whatever the scenario, Technorati does make some amount of money through these advertisements posted on their website (either contextual or not). Also, even members (people who have user accounts) of Technorati can't decide whether or whether not to turn off these adds, and Technorati's making money out of your blog/post is beyond the control of an ordinary individual.

Why this is wrong is a good question. Some bloggers do allow use, re-use or re-distribution of posted content for commercial purposes. But, some don't. There are blog licenses specifically designed to enforce this requirement. The Creative Commons Non-commercial licenses are a good example. These licenses restrict the use of posted content for commercial purposes (read section 4.b of this license which is one of the least restrictive variants).

But, as of today Technorati still does not have a mechanism where they only advertise based on content appearing on blogs that allow use of content for commercial purposes. The correct way to go would be therefore to refrain from advertising on all blogs until they come up with a scheme that is intelligent enough to account for this requirement or pay compensation to affected bloggers. But, sadly Technorati is not doing it in the correct way, and thereby violating the free-right of a blogger to enforce a license that does not allow use of content for commercial purposes.

Saturday, October 11, 2008

The Better SharePoint...

Microsoft SharePoint is a browser based document management and collaboration system, that rules out traditional content management systems with its investment in the powerful interaction with Microsoft Office. SharePoint in general refers to a family of products that include, Windows SharePoint Services (WSS), Microsoft Search Server, Microsoft Office SharePoint Server (MOSS), and Microsoft Office SharePoint Designer(SPD).

Windows SharePoint Services (WSS) provides the base infrastructure that facilitates and enables the usefulness of other SharePoint family of products. The best part of WSS is that it is built upon a IIS 6 (Internet Information Server) - SQL Server - ASP.NET 2.0 infrastructure and integrates seamlessly with the .NET framework. Which means that any .NET based developer at his/her option can enhance the capabilities of WSS at their option.

WSS is formulated by a ring of services provided around some core platform services. Ian Morrish explains the WSS 3.0 Architecture in here. Among the ring of services provided are:
  1. Collaboration
  2. BI
  3. Business Processes
  4. Portal
  5. Content Management
  6. Search
However, these basic services can easily be extended or supplemented by enhancements or additions, by exploiting the flexibility of the WSS Architecture. Microsoft Office SharePoint Server and Microsoft Search Server are implemented on top of WSS and add more functionality upon the existing core. Microsoft Office Forms Server is another product that exists within the WSS based application line of sight.

The Better SharePoint comes with further extending the infrastructure to tailor corporate requirements that expose multi-divisional, geographically dispersed, large organizational information infrastructures, under a single system that provides all necessary document management and collaboration requirements. Typical systems enable employees, customers, and other interested parties interact through highly customized business systems based on SharePoint family of products.

Friday, October 10, 2008

One Year of Contribution to Axis2/C

It is quite hard to understand how fast time advances, as it has been like yesterday to me, when I made my first contribution to Axis2/C, in the form of reporting a bug on the manual (you can find the ticket here). If you are interested in understanding what I meant in this issue: I reported, the file found in here was missing, an year back.

It is quite interesting to see how I gradually got on track with Axis2/C development activities. But, to be honest I haven't been doing much ever since I started my final year at the University. I'm looking forward to re-join the contribution camp as soon as I find some free time, which is somewhat a scarce resource these days.

Axis2/C recently began its third year. More information is found on Samisa's post made here. It is quite nice to see many new names appearing on the mailing lists, and also several new contributors joining the project. A special thanks to the two participants of GSoC 2008 who worked with Axis2/C.

When I started working with Axis2/C the project had merely completed its 1.1 release and was looking forward to further additions before the next major release. It was during this era I started working on a improved scheme for HTTP Authentication on Axis2/C. A more detailed description of what it is all about is found in here. My contributions to Axis2/C helped me become a committer to the Web Services Project at the Apache Software Foundation.

Afterwards, during the latter part of my internship at WSO2, I worked on implementing support for RESTful Services on Axis2/C. This was one of the major additions to the project. I also contributed fixing a number of bugs and added few other improvements as well. Thanks to ohloh, you should be able to see some of my commits to Apache Axis2/C in here.

Many thanks to all those who helped me and supported me with my work on Axis2/C, and also to many others who were major factors that influenced my contributions to the project. Today, Axis2/C is perhaps the best and fastest Web Service engine written in C, supporting both SOAP and REST over a magnitude of transport protocols. Axis2/C is also the basis of other popular WS projects at WSO2 including WSF/PHP and WSF/C.

Thursday, October 9, 2008

FOWA Expo - London 2008 begins

The Future of Web Apps Expo - London 2008, began on the 8th October with a workshop held on the 8th followed by a 2-day conference held on 9th and 10th. What's so special about FOWA Expo 2008 are the speakers during the event who are some of the web-industry's revolutionary figures including people such as Mark Zuckerberg, Tim Bray, Kevin Rose and many more.

What FOWA is all about is explained in detail on its website. The Future of Web Apps showcases the successful web technologies and business trends of the future, delivered by the pioneers of today. Attended by all the major European and US start-ups and industry experts, it's the best place to learn directly from the developers, designers and entrepreneurs behind the web's brightest stars in a relaxed and fun environment.

FOWA, is a Carsonified based project which mainly focuses on European and United States based establishments in the web applications and web technology domain. Also, another important fact is the participation of some of the world's leading IT & Services companies (the so called big players) such as IBM, Microsoft, Intel, Google, Yahoo,  etc.

The long list of speeches during the workshops are found in here. They range from fundamental web development to large-scale deployments such as Social Networking systems and community sites. The packed conference schedule hosts a number of good talks as detailed in here. The entire workshop & conference program is designed towards creating a fun-loving developer. And, the organizers at Carsonified have not forgotten to add some fun events at the end of each conference day along with some interesting happenings.

The Expo is targeted at mainly a UK audience, the event being held in London; and, has a setup as seen in here. Workshops and events are to be held in at the ExCel center, London. The organizers are also providing state of the art facilities for the developers to make maximum use of their stay. I gotta say that this is one of those events that one should not miss. Looking forward to see some similar events happening in this part of the world as well.

Wednesday, October 8, 2008

Why Blog Licensing is important

Your blog is a way that you reveal a great deal of information to the outside world. The most important fact is that the constitutes of your blog is in fact Intellectual Property, which you own (if you don't copy others stuff :-)... ). According to WIPO, Intellectual property refers to creations of the mind: inventions, literary and artistic works, and symbols, names, images, and designs used in commerce. And, therefore, your blog deserves some legal respect if you are interested in securing ownership for your information.

But, the question is why a license is required. According to this article, a licensor may grant license under intellectual property to do something (such as copy software or use a patented invention) without fear of a claim of intellectual property infringement brought by the licensor.

Thus, the importance arises, if you are interested in claiming what you own (or in other words secure your intellectual property). Blog licensing can vary from a all rights reserved to no rights reserved. Technically, if you say nothing, depending on the Territory to which a IP infringement law is enforced, you have the chance of falling into somewhere between these two extremes.

Therefore, if you want to specifically allow, or disallow the way people interact with your information in a variety of forms, you might consider creating a your own blog license. However, there are lots of easily adoptable schemes, such as Creative Commons. This blog is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported license.

What ever scheme you may choose, the security of your information lies in the strength of the legal license document you present. You must consult a lawyer if your information requires severe protection, but in most cases a trusted third party (ex:- Creative Commons) might be helpful.

Tuesday, October 7, 2008

All new WSO2.com

The WSO2's .com site has put on a new look since last September. The new theme describes the Open Source Company in more detail. Three years ago, WSO2 began as a company with a mission to build a fully functional enterprise-grade SOA middleware platform, which has now grown to become one of the best SOA infrastructures out there, and as Dr. Weerawarana describes, WSO2 is ready to take IBM's and Oracle/BEA's seat as your SOA vendor.


WSO2's .com site combines various components of the company's SOA middleware products to formulate a one-single system that implements a better SOA, as seen in the image above, which is the spotlight of the main page. Samisa, has described the new CCCG Theme of WSO2 in this post. The products page explains how each of WSO2's key products fit into this Theme. Samisa's post better explains this fact.

WSO2 now a three year old company is looking forward for more exciting updates and introductions, enabling superior technology at the lowest costs (hey who says you gotta pay, most of it is free :-)... ).

Monday, October 6, 2008

Dynamically Changing Text Size in your Blog

Display text size is dependant on the current font and display settings of your browser in the case of most blogs. Also, some people might have difficuilty in reading your blog (especially on modern screens which support very high resolutions). Therefore, you might be interested to give your visitors the option to dynamically increase/decrease the size of text displayed on your blog.

The feature can easily be added with a least amount on effort provided that you can fulfill the basic pre-requisites. In order to get started, you will have to go to Layout -> Edit HTML. After that make sure to keep a copy of your current template in case you want to revert back. Now, identify each font-size entry that use an absolute size (size in px), and replace them with a relative size (size in em, or %). You can make use of the preview to make sure that you got the right font size.

Now, just after the <body> tag add, <div id='resize-wrapper'> and add </div> just before the closing </body> tag. After you have done this step, add this text above the ]]</skin> tag.
  #resize-wrapper {
font-size: 13px;
}
Then just after the ]]</skin> tag, add the following text:
  <script>
var r;
var current_size = 13;
if (document.all)
r = 'rules';
else if (document.getElementById)
r = 'cssRules';
function change_size(s) {
if (!s)
current_size = 13;
else
current_size = current_size + s;
if (current_size < 10)
current_size++;
else if (current_size > 16)
current_size--;
for (var i = 0;
i < document.styleSheets.length;
i++)
for (var j = 0;
j < document.styleSheets[i][r].length;
j++)
if (document.styleSheets[i][r][j].selectorText
== '#resize-wrapper') {
document.styleSheets[i][r][j].style.cssText =
document.styleSheets[i][r][j].style.cssText
.replace(/\d+/g,current_size);
return;
}
}
</script>
Once you have done that step, save your template and then tick the Expand Widget Templates check box. Now you can add the following text, anywhere on your blog, which enables the text-resize functionality.
  <div id='size-control'>
<a href='javascript:change_size(-1)'
style='font-size:16px' title='Reduce Size'>A</a>
<a href='javascript:change_size(0)'
style='font-size:20px' title='Default Size'>A</a>
<a href='javascript:change_size(1)'
style='font-size:22px' title='Increase Size'>A</a>
</div>
Now, save the template once again, and test the functionality, in order to make sure that you got all of it right. Optionally you can make use of CSS to add style attributes to the layout of the #size-control element.

Sunday, October 5, 2008

Why Should you choose WSF/PHP

Web Services Framework for PHP by WSO2 is by far the most comprehensive stack that provides most WS-* features for a typical PHP Web Services developer, having to put in the least amount of effort to get something done. The comparison of various strategies opted by PHP developers to Web Services is detailed in this post by Samisa.

Meanwhile, the WSF/PHP sphere of possibilities have gone from basic WS through SOAP to most WS-* specifications supported and also the demanding support for RESTful Web Services. Uthaiyashankar, and Katie in this video (story found in here) explains what makes WSF/PHP a well rounded product for your enterprise PHP-based Web Services applications.

Samisa also explains in this post how WSF/PHP blends well into the domain of enterprise-grade WS applications in PHP. This briefs many a feature of WSF/PHP against various expectations of the users of Web Services in PHP.

WSF/PHP's capabilities were appreciated by Andi Gutmans (CTO and Co-Founder of Zend), recently; who explained the mutual collaboration of WSO2 and Zend to make enterprise WS with PHP better as, "Zend and WSO2 are mutually dedicated to serving the diverse needs of PHP developers with world-class open-source software for implementing Web services. By bringing support for both enterprise-oriented WS-* and REST Web services to our managed PHP production environment, WSO2 joins us in empowering the developers supporting more than 20 million PHP websites with unprecedented flexibility for delivering enterprise-class Web services."

I therefore believe that the benefits of using WSF/PHP as a WS enabler in your PHP website or application is clear beyond further justification.

Friday, October 3, 2008

Richard Stallman against Cloud Computing?

Among the recent discussions on the cloud-computing group @ GoogleGroups, the most interesting thread by far seems to be the impact Richard Stallman is causing to the latest buzz in IT Services and Computing. According to the summary of Stallman's interview with the Guardian(UK) as found in here, and in the original version in here, he described Cloud Computing as "It's stupidity. It's worse than stupidity: it's a marketing hype campaign".

Adding to this, he did not forget to further elaborate on the aspect of programs available over the web as, "One reason you should not use web applications to do your computing is that you lose control. It's just as bad as using a proprietary program. Do your own computing on your own computer with your copy of a freedom-respecting program. If you use a proprietary program or somebody else's web server, you're defenseless. You're putty in the hands of whoever developed that software".

My personal belief is that what Stallman points out is in fact true in a way, to a great extent, that investment to Cloud Computing made in billions would not be justifiable if not for its gains in trillions, leaving use of software applications still a luxury and now without the possibility even to be duplicated as free software.

As Stallman describes the notion of web-enabled software, services, cloud computing etc. are all based around a concept that you pay for services obtained and not necessarily for the tools you obtain to get serviced. But, this still doesn't give you the freedom to use the tool (the software) violating one of the primary interests pointed out by the FSF.

As of now, no solid implementations of large-scale cloud based service infrastructures are available to justify the actual fact, but it is clearly evident that what Stallman believes is going to happen some day and the freedom envisaged (at least partially) in modern day software is no longer going to be a reality in the future, unless someone is really donating infrastructure in addition to time.

Thursday, October 2, 2008

HTML aware Twitter

Twitter, an online status update tool, can easily be integrated to blogger to enable live updates to your blog in the form of miniature 160 character messages. Twitter does provide a widget that can be added to your blog, which is capable of doing the hard work of fetching and publishing the required information for you. However, the widget provided by Twitter (Twitter Badge for Blogger), as of today is not HTML aware.

However, on your twitter homepage, you will notice that Twitter intelligently replaces URLs and friend names with hyperlinks. To add a friend name in your message, you will simply have to append an @ sign in front of the name (ex:- senaka -> @senaka). Once done, Twitter will create a hyperlink to your friend from your post.

The problem I'm answering here is how to bring in this functionality to your blog. This though you might believe is hard, is apparently very simple. All that needs to be done is to simply add this text under your twitter code.
  <script type='text/javascript'>
document.getElementById('twitter_update_list').innerHTML
= document.getElementById('twitter_update_list').innerHTML.replace(
/([^\"\'])(https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?)/g,
'$1<a href="$2">$2</a>');
document.getElementById('twitter_update_list').innerHTML
= document.getElementById('twitter_update_list').innerHTML.replace(
/@([a-zA-Z]+)/g,'@<a href="http://twitter.com/$1">$1</a>');
</script>
Once, you have done this, your Twitter updates will become HTML aware. The method employed here is the use of regular expressions and javascript to change the way in which the Twitter feed is published.

Saturday, September 20, 2008

Camtasia: Recording Desktop made easy

There are many tools that you can use to record your desktop, and some can be really complicating and at the same time, expensive. Camtasia is one good tool out there, which is reasonably expensive ($300), but provides a free 30-day trial version, as well. What you find at the Techsmith site is the latest version, 5.1, which has quite a lot more features than what you see in here (version 3.1, released in June 2006), which I apparently downloaded based on a link I saw in here, several months ago. The version 3, is now not supported, but link still works, if you want to give it a try.

The application provides you with a great deal of capability including:
  1. Selecting various areas in your screen.
  2. Recording/Pausing as you wish.
  3. Editing and Removing un-wanted content.
  4. Publishing in many popular video formats.


The video seen above explains how Camtasia can be used to easily record your desktop (you can find a tutorial here). The .wmv version produced is however not so good on the eye, and Windows Media Player is having it's problems even with the .avi version. However, I managed to make use of a professional video editting software, Adobe Premiere Pro (free tryout version available), which preserved the original formatting. I generated a .avi file, which I then converted back to a .wmv version with the help of Windows Movie Maker. Windows Media Player and Windows Movie Maker are a part of your Windows OS, assuming you have a version equal or greater than Windows XP.

Please note that the .avi file generated by Adobe Premiere Pro is around 100MB for a mere 100 seconds, and this means that if you need a good quality output for what you've done, you will need to have an equal amount