Wednesday, June 11, 2008

Run your web applications on Google's infrastructure!

Google App Engine lets you run your web applications on Google's infrastructure. App Engine applications are easy to build, easy to maintain, and easy to scale as your traffic and data storage needs grow. With App Engine, there are no servers to maintain: You just upload your application, and it's ready to serve your users.

You can serve your app using a free domain name on the appspot.com domain, or use Google Apps to serve it from your own domain. You can share your application with the world, or limit access to members of your organization.

App Engine costs nothing to get started. Sign up for a free account, and you can develop and publish your application for the world to see, at no charge and with no obligation. A free account can use up to 500MB of persistent storage and enough CPU and bandwidth for about 5 million page views a month.

During the preview release of Google App Engine, only free accounts are available. In the near future, you will be able to purchase additional computing resources.

Find more from here

Thursday, April 10, 2008

Make Windows Installer for your application

Recently, my project is using a window installer script called NSIS to make windows executable exe file for product distribution which brings me to a post that comparing the similar products out there.

"Many of you know that Windows Installer is the preferred method of distributing software, according to Microsoft. However, Windows Installer has the serious flaw of requiring the OS to support the Windows Installer Runtime. This can be a problem on older operating systems, such as Windows 95 Gold and Windows NT SP0-SP3. ... If your program is designed to work on all Win32 systems, then you cannot use Windows Installer. You could use something such as Inno Setup or Nullsoft Scriptable Install System. Both are very good, but I believe that NSIS is much more versatile and expandable, due to its widespread support and many various plugins to make it more professional. The only thing NSIS is missing is Visual Studio plugins. At least for VS6 it would be good, since the InstallShield for VC++6 is very bad. Also, many installers that I built with that version of InstallShield do not work on XP due to the old structure of the installer. If you do not want to shell out $300+ for a good installer with universal support and still have a professional look, I recommend three things in combination: NSIS, HM NIS Edit, and ExperienceUI SDK. All three together allow you to build installers that look as good as the latest InstallShield installers, but with smaller overhead and much more flexibility. I see more good coming from open-source each day. NSIS is currently at 2.14 release, HM NIS Edit is at 2.0.3, and ExperienceUI SDK is at 1.1 release. The major advances in all three make things easier for the lower budgeted programmers to make nice installers for their projects. I think that Inno Setup should get its fair end of praise. Inno Setup is designed to be very similar in style to InstallShield, and does a good job of it. Inno Setup's ability to go silent install is very useful for automated runtime installs, making it as good as an automated Windows Installer installation. However, NSIS has advanced SILENT ONLY capabilities, forcing network install styles. Inno Setup already has 64-bit installations, while most others do not yet have this capability. I think NSIS may be able to be recompiled to build 64-bit installs, but I am not quite sure on that. InstallShield has one advantage that would make someone who needs this feature to shell out for it: The ability to make cross-platform installers. InstallShield can make RPMs for Linux apps and binary installers for Windows, MSI files for Windows Installer, and more. That would be the only reason I would shell out for it, if I had a program developed cross platform and need easy installer development. However, recently I came across another installer: InstallerBuilder Enterprise... This version does the one thing that would have tied me to InstallShield, ....
"

References

Find the original post (1 | 2)

External Links:

NSIS Users Manual

Windows Installer Authoring Tools

MSI / EXE UnAttended Installation

Thursday, January 17, 2008

JTS Topology Suite & GeoTools

Both are java open source tools for spatial data management.

The Open Source Java GIS Toolkit

The JTS Topology Suite is an API of 2D spatial predicates and functions. It has the following design goals:

* JTS conforms to the Simple Features Specification for SQL published by the Open GIS Consortium
* JTS provides a complete, consistent, robust implementation of fundamental 2D spatial algorithms
* JTS is fast enough for production use
* JTS is written in 100% pure JavaTM
* JTS is open source (under the LGPL license)

Find more information, you can find it from here.


Geo Tools is an open source (LGPL) Java code library which provides standards compliant methods for the manipulation of geospatial data, for example to implement Geographic Information Systems (GIS) . The Geo Tools library implements Open Geospatial Consortium (OGC) specifications as they are developed, in close collaboration with the GeoAPI and GeoWidgets projects. The capabilities of Geotools are presented in the feature list.

For more information, you can find it from here ( 1|2 ).

Understanding insurance

Having this post is because i am working some projects for insurance and need to have the domain knowledge of insurance.

Term life insurance

Term life insurance is the original form of life insurance and is considered to be pure insurance protection because it builds no cash value. This is in contrast to permanent life insurance such as whole life, universal life, and variable universal life.

Permanent life insurance

Permanent life insurance is a form of life insurance such as whole life or endowment, where the policy is for the life of the insured, the payout is assured at the end of the policy (assuming the policy is kept current) and the policy accrues cash value.

Here are the main characteristics of permanent life insurance:

* Permanent insurance protection.
* More expensive to own.
* Builds cash value.
* Loans are permitted against the policy.
* Favorable tax treatment of policy earnings.
* Level premiums.

There are three basic types of permanent insurance: whole life, variable life and universal life. The two most common are whole life and universal life. Whole life insurance provides lifetime protection, for which you pay a predetermined premium. Cash values usually have a minimum guaranteed rate of interest and the death benefit is a fixed amount. Whole life insurance is the most expensive life-insurance product available.

Universal life insurance separates the investment and the death benefit portions. The investment choices available usually include some type of equity investments, which may make your cash value accumulate quicker. As the you can usually change your premiums and death benefits to suit your current budget.

What i feel that variable and universal life insurance are all variation of whole life insurance policy and differences are:

Variable life insurance policy is something like death benefit + flexible investment options and much more expensive and risky as there are investment risk.

Universal life insurance policy is something like death benefit + saving component + loan facility as insurer will pay fixed amount regularly against to the interest rate or certain managed fund. It is much cheaper than whole and variable life insurance policy.

You can find more from here

Participating Policy

An insurance contract that pays dividends to the policy holder. Dividends are generated from the profits of the insurance company that sold the policy and are typically paid out on an annual basis over the life of the policy. Most policies also include a final or terminal payment that is paid out to the holder when the contract matures. Some participating policies may include a guaranteed dividend amount, which is determined at the onset of the policy.

Also referred to as a "with-profits policy".

Investopedia Says:
Participating policies are typically life insurance contracts such as a whole life participating policy. The dividend received by the policy holder can be used in several different ways. First, the policy holder can apply the dividend proceeds to the insurance policy's premium payment. Second, the dividend can be kept with the insurance as a deposit in order to generate interest much like a savings account at a bank. Finally, the policy holder can simply receive the dividend payment in cash, much like a dividend payment on a stock.

Nonparticipating Life Insurance Policy

Life insurance policy that does not pay dividends. Policyholders thus do not participate in the interest, dividends, and capital gains earned by the insurer on premiums paid. In contrast, Participating Insurance Policies pay dividends to policyholders from earnings on investments.

Frequently used Insurance Term

Term Life Insurance :: definition
Noted, there is no cash value with this policy.

Permanent Life Insurance :: definition
There are cash values with this set of policies.

Substandard Premium Rate :: definition

This is an extra premium (a substandard premium rate) charged a policy owner as a result of the insured being classified as having a higher-than-average risk of death. Reasons may include the person's physical condition, health, occupation and/or life-style. The premium rate charged is higher than a standard premium rate.

Cash Surrender Value :: definition

Indemnity :: definition

Long Term Care Insurance :: definition

Projected Dividend

Estimated future dividends to be paid by a Participating Insurance Policy. These dividend estimations cannot be part of the policy since they are not guaranteed. They are normally shown in a separate computer printout and are only as accurate as the basic interest rate assumptions made.

Reference and recommended links

Let Life Insurance Riders Drive Your Coverage?

Five Insurance Policies Everyone Should Have

Fifteen Insurance Policies You Don't Need

Understand Your Insurance Contract

Exploring Advanced Insurance Contract Fundamentals

Insurance Glossary (1 | 2)

Tuesday, November 20, 2007

Why Wiki , Blogging & Social Computing

Blogging and wiki is something about the knowledge management, one step further than the information management. There are many ways of knowledge management, blogging and wiki are just one of them.

why we bother to blog or wiki it rather than make a phone call, send a email or book a meeting room? Like it or not, social computing is part of how organization works today and an even larger part of how it will work tomorrow.

Social computing is what happens when people selectively consume, produce, and share online content in new ways. Technologies like blogs, peer-to-peer networking, RSS, wikis, and other collaboration tools continue to grow, evolve, and feed the demand for new methods of interaction. The challenges that you face today as a result of access to online information, software, and communities will intensify, with new challenges emerging over time. To maintain influence in this new world, you must embrace social computing, not fight it. You must become a facilitator for this kind of collaboration and a full member of the social computing community.

Develop your interest in using these forces to do your job more effectively, rather than letting them just make your job more difficult. Instead of seeing this as a new onslaught of back-door paths for unwanted change to reach your organization, adopt a leadership role in using these tools to create a more collaborative and productive organization.

Don't fight this trend, embrace it. You should become an advocate and facilitator for social computing. Make sure people can get what they need within the organization so that they won't have to go elsewhere. Make yourself part of the social computing community, and use that insider advantage to help the organization succeed.

As we take advantage of social computing, don't neglect traditional means of communicating and promoting collaboration. Face-to-face idea sharing remains an important tool in building and nurturing critical relationships, and we should continue to use it for communication.

KM Tool - Wiki

Wikis are tools that allow for collaborative editing and publishing and hence the creation of user generated content. Wikis are another example of social software - software that encourages people to work together.

Wikis are a useful tool when you want people to collaborate and work together on creating a common document, e.g. a project document, a manual, and so on or to work on a common strategy or event, e.g. a conference programme.

In corporate and general use they can be used to create collaborative documents, manuals e.g. WikiHow (a collaborative Manual)

The most obvious and famous example of a wiki is of course Wikipedia, which is an encyclopaedia that has been created by thousands of individuals. Every page in Wikipedia can be edited, which means it is constantly evolving and growing and can be kept up to date.

In the commercial tools market there are a number of enterprise wiki tools available, for example, e.g. Confluence

But there are also a number of free tools, for example:

* MediaWiki is the software used for Wikipedia and the other Wikimedia Foundation websites. Compared to other wikis, it has an excellent range of features and support for high-traffic websites using multiple servers (Wikipedia peaks in the 2500+ requests per second range as of June 2005).
* pbWiki is another hosted service and allows you to set up a wiki very quickly, as are Wikispaces and Wetpaint
* If you are looking for a personal, notepad-type wiki to download onto your own computer, then TiddlyWiki is a useful tool

Reference list

Mediawiki Installation & File Upload HowTO
http://www.washington.edu/computing/web/publishing/mediawiki.html

MediaWiki Comparison Matrix
http://www.wikimatrix.org/show/MediaWiki

How to install PHP and MySQL
http://www.ozzu.com/ftopic56303.html

Wikis - and how to create them quickly and easily

http://c4lpt.co.uk/handbook/wikis.html

Wednesday, November 14, 2007

CVS vs SVN

For CVS, Things like tags and rolling back to older versions is far easier with CVS. And the lack of 'all or nothing' transactions is not a big problem. just add a 'build-****' tag regularly. This makes regressions very easy to track. The 'Revision Graph' in TortoiseCVS is also worth gold.

In CVS, multiple versions can get the same tag, which is logical, but with SVN it would have to 'version' the tags. A tag is a tag in CVS, but it's a folder in SVN.

Operationally speaking, maintenance of repositories and modules are easier in SVN than in CVS, in my opinion.

For development, the Tags & Branches function is very important which CVS is better than SVN. As SVN is actually using different approaches for tagging ( Basically, a tag and a branch, for that matter in SVN is kind of like a copy. However, it's more of a "smart" copy).

CVS Convention and Best Practice
http://tldp.org/REF/CVS-BestPractices/html/index.html

How to install CVS in RedHat Enterprise
http://personal.vsnl.com/sureshms/linuxindex.html
http://www.michael-amorose.com/articles/computers/cvs/6_1.html
http://www.taursys.com/howto/cvs/
http://www.faqs.org/docs/ldev/0130091154_198.htm

CVS Installation for Windows
http://www.devguy.com/fp/cfgmgmt/cvs/cvs_admin_nt.htm

useradd -r -c "CVS user" cvs
passwd cvs
cvs -d /usr/local/cvsroot init
chown -R cvs.cvs /usr/local/cvsroot
cvs -d :pserver:daps@localhost:/usr/local/cvsroot login

CVS Tutorial Link
http://www.cvshome.org/
http://www.developingprogrammers.com/index.php/2005/11/24/cvs-and-subversion-combined-tutorial/

CVS vs SVN reference Link

http://www.pushok.com/soft_svn_vscvs.php
http://www.devmaster.net/forums/showthread.php?t=7394
http://svn.haxx.se/users/archive-2006-10/1382.shtml
http://lists.danga.com/pipermail/mogilefs/2006-June/000336.html
http://wiki.scummvm.org/index.php/CVS_vs_SVN
http://www.gigascale.org/softdevel/faq/27.html
http://users.footprints.net/~kaz/mcvs-svn-comparison.html

Monday, November 5, 2007

SOA, Web Services & BPEL - Tech Forum in Singapore

Recently, i gave a talk and BPEL demo to singapore partners for Oracle BPEL & SOA suites. Introducing them idea of SOA, BPEL and Web Services and how to make use of oracle technology in their applications.

SOA stands for service oriented architecture, it is a architecture model.

Talk about architecture, we need to understand basic building block of each application and system.

Like we build a real house, we use mortar and brick. Every application / system was built with business logic and process. Business process weaves all business logics into one application to achieve business goals. Process and logic weave seamlessly and hard coded into a monolithic application. Like we cook soup, we put all ingredients into water and hard for us to separate each out in the end, by which it reduce reusability of standard process and logics.

In traditional application, when people wanna change the process or integrated with other application / system, especially it is a heterogeneous platform or technology integration, that will be very hard and time-consuming.

For SOA applications, applications also build with process and so-called business logic (have been wrapped into self-contained services). Process and services are loosely coupled, people can easily add or remove services from process, not like traditional applications (process & logic fuse into one). Other than that, people can easily design & program the business process with a advanced IDE. Overall experience for process design and implementation will be a drag-and-drop exercise.

SOA process should be standard, easily extensible and composable. When build an SOA application, we start from building a portfolio of services , follow with well-defined business process to orchestrate services to achieve business goal. This is where BPEL comes in for business process implementation and web service for business service implementation.

Many people equate web services with Service-Oriented Architectures (SOA), but web services are just one element of SOA - they're about service invocation. SOA's scope is broader than just invocation. It's a complete software component architectural model, a way to organize, manage, deploy, discover, and expose software components, and to consume these over the Internet. From the software life-cycle perspective, in addition to the typical software development phases of design, development, and deployment, SOA defines web services-specific phases that include service publishing, discovery, binding and consumption, and management.

Note, SOA != web service+bpel

ESB vs BPEL

Both ESB and BPEL can be used for SOA implementation.

ESB (Enterprise Service Bus) implement messaging to enable services to be integrated in a message-based paradigm: both synchronous and asynchronous styles. ESB moves data via different adaptors (WebServices, FTP,File,JDBC etc) and protocols (HTTP,JMS) and enriches and transform data using XSL & domain value mapping lookups.

Oracle BPEL provides a comprehensive, standards-based and easy to use solution for creating, deploying, and managing cross-application business processes with both automated and human workflow steps.

ESB is good for routing messages to multiple destinations. It is also good for doing transformations that have little to no business rules. The footprint is much smaller and incurs minimal overhead therefore the performance is much better.

BPEL is used for bringing together multiple services. There is much more functionality and allows implementation of complex business logic.

• BPEL data transformations enrich and perform complex changes whereas ESB perform only simple transformations.
BPEL can use Business rules, Human Workflow and Notifications, exception handling can be done in BPEL.

Use ESB when you want a really low cost solution, Only need connectivity, simple transformations and routing.

BPEL is primarily used for servies orchestration, data enrichment and human interaction.


Use BPEL+ESB when, You need to code complex business logic, integration with Workflow, complex transforms potentially involving the database or having long running processes which may or may not be stateful.

With an appropriately layered SOA architecture, one would look at ESB as a repository of services that BPEL orchestrates. At deployment time, this layered approach provides you the flexibility to dedicate servers to individual tiers (BPEL and ESB) and thereby maximize the resource usage for your particular use case.

Friday, November 2, 2007

Io exception: The Network Adapter could not establish the connection

Recently, i did an RAC validation with our oracle partner and encountered this weird exception called "Io exception: The Network Adapter could not establish the connection".

Two client machine were running same java code (using jdbc thin driver & oracle datasource) in the same LAN as RAC servers, but they came out with differen behaviour. One could connect to RAC database, the other one always got io exception mentioned above.

The only difference between two machines was one of clients' host file having rac ip & hostname mapping entry, which is able to connect to oracle rac db.

Something weird is that all db clients and servers were actually sitting in the same LAN. I could ping and telnet db rac with rac ip address (virtual and real ) from client machines, but when i use ip address in the java class to lookup the db connection, i could not get connected to db if rac ip & hostname mapping entries were not available in the client host file.

Here is the sample Codes for RAC FCF connection:

OracleDataSource ods = new OracleDataSource();
OracleConnectionCacheManager occm = null;
ods.setUser("user-name");
ods.setPassword("password");
String cacheName = "cache";
String dbURL="jdbc:oracle:thin:@"+
"(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=ON)" +
"(ADDRESS=(PROTOCOL=TCP)" +
"(HOST=rac1-vip-address)(PORT=1521))" +
"(ADDRESS=(PROTOCOL=TCP)" +
"(HOST=rac2-vip-address)(PORT=1521)))" +
"(CONNECT_DATA=(SERVICE_NAME=orcl.abc.com)))";
ods.setURL(dbURL); System.out.println("Url=" + dbURL ); ods.setConnectionCachingEnabled(true);
Properties prop = new Properties();
prop.setProperty("MinLimit", "5");
prop.setProperty("MaxLimit", "40");
prop.setProperty("InitialLimit", "10");
prop.put (oracle.net.ns.SQLnetDef.TCP_CONNTIMEOUT_STR,"" + (5000)); // 5000ms ods.setConnectionCacheProperties(prop);
ods.setFastConnectionFailoverEnabled(true);
ods.setONSConfiguration("nodes=rac1-ip-address:6200,rac2-ip-address:6200"); ods.setConnectionCacheName(cacheName);
//occm = OracleConnectionCacheManager.getConnectionCacheManagerInstance();
Connection conn = ods.getConnection();

It looks somewhere JDBC driver looking up db connection with rac hostname instead of ip address and I have to put the rac ip & hostname mapping in the client host file for jdbc driver to resolve them.

´