Careers | Blog | Sitemap  
   
   
  Wanna try working with us?  
  email: info@hibiscustech.com  
     
 

Top Outsourcing Countries For IT

May 7th, 2012

The global services market is highly dynamic environment and selecting the best outsourcing location for your operation can have a significant long-term impact. SourcingLine has compiled the most comprehensive online database of outsourcing country statistics to aid your decision making. Each country has been scored across dozens of key statistics which fall into three broad areas of Cost Competitiveness, Resources & Skills, and Business & Economic Environment.

India, ranked first in our survey, provides the best mix of factors, but it is not a leader across all dimensions. It is still a highly cost competitive location, but recent wage inflation has impacted its position relative to other countries. India also has a massive resource and skill base, but educational challenges are impacting the skills of graduates and the business & economic environment can prove taxing. Other leaders in the survey include numerous other countries from Asia, but also Latin America and Europe.

Overall ranksort icon Country Overall outsourcing index Cost competitveness index Resources & skills index Business & economic environment index
1 India 7.1 8.3 6 4.2
2 Indonesia 6.7 8.6 4.3 4.4
3 Estonia 6.6 7.5 5.2 6.9
4 Singapore 6.5 6.4 5.7 9.4
5 China 6.4 7 5.6 5.6
6 Bulgaria 6.4 8.8 2.9 5.2
7 Philippines 6.3 9 2.8 3.9
8 Thailand 5.9 8.2 2.3 5.9
9 Lithuania 5.9 7 3.9 6.5
10 Malaysia 5.8 7.9 2.2 6.9
11 Jordan 5.7 7.6 2.7 5.7
12 Chile 5.7 7.2 3 6.9
13 Egypt 5.7 9 0.9 4.3
14 Hungary 5.6 6.9 3.4 6.3
15 Czech Republic 5.6 6.9 3.2 6.5
16 Poland 5.6 6.8 3.6 5.5
17 Vietnam 5.4 7.4 2.5 4.5
18 Sri Lanka 5.4 8.3 1.2 4.3
19 Latvia 5.4 7 2.7 5.6
20 Argentina 5.4 7.5 2.5 4.4
21 Costa Rica 5.3 7.3 2.3 4.8
22 Mexico 5.3 6.9 2.8 5.3
23 Romania 5.2 6.8 2.7 5.2
24 Russia 5.2 6.4 3.4 4.7
25 Jamaica 5.2 6.2 3.7 4.7
26 Ukraine 5 6.3 3.2 3.8
27 Ghana 4.9 7.5 0.9 4.3
28 Israel 4.7 3.8 5.5 7
29 South Africa 4.6 6.9 0.6 6.3
30 Kenya 4.5 6.7 1.3 3.6
31 Canada 4.4 2.5 6.3 8.3
32 Panama 4.4 5.8 1.9 5.6
33 Senegal 4.3 7.1 0.2 3.3
34 Pakistan 4.2 6.6 0.8 3.1
35 United States 4.2 1.7 6.9 8.3
36 United Arab Emirates 4 2.8 4.7 7.9
37 Tunisia 3.9 4.7 1.9 6.3
38 Brazil 3.6 4.3 2.4 4.1

BlackBerry App Development – Overriding of Menu button

February 15th, 2012

By using this piece of code you can override the blackberry default menu. What you all need to get is the ID of a particular item in the code. The code given below is to override the close button (in this case id is 9). On click of close you can perform your own task.

====================================================================

protected void onMenuDismissed(Menu menu) {

super.onMenuDismissed(menu);

if (menu.getSelectedItem().getId() == 9) {

//TODO Something

//System.exit(0);

}

}

BlackBerry Application Development – Geo Coding

February 15th, 2012

By using Locator class one can get the location information of a given latitude and longitude. But for OS 7 if one uses locator class, it will give an exception. So in that case, one can use Google APIs to get the location address. The code given below is all about how to use the Google APIs to get complete address details of a given latitude and longitude.

===================================================================

public class Geocoder {

private static String networkString = “”;

private double[] coord = new double[2];

private String name = “”;

public double[] getAddressCordinate(String name) {

name = Split(name);

String url = “http://maps.googleapis.com/maps/api/geocode/xml?address=”

+ name + “&sensor=true”;

try {

if (getnetworkString()) {

HttpConnection connection = (HttpConnection) Connector.open(url

+ networkString);

connection.setRequestMethod(HttpConnection.GET);

InputStream istream = connection.openInputStream();

SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser sp = spf.newSAXParser();

sp.parse(istream, new LocationParser(this, false));

istream.close();

connection.close();

}

} catch (Exception e) {

}

return coord;

}

private String Split(String name) {

String newName = “”;

for (int i = 0; i < name.length(); i++) {

if (name.charAt(i) == ‘ ‘)

newName += “%20″;

else

newName += name.charAt(i);

}

return newName;

}

private boolean getnetworkString() {

if (DeviceInfo.isSimulator()) {

networkString = “;deviceside=true;ConnectionTimeout=20000″;

return true;

}

else if (WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) {

networkString = “;interface=wifi”;

return true;

}

else if ((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_DIRECT) == CoverageInfo.COVERAGE_DIRECT) {

String carrierUid = getCarrierBIBSUid();

if (carrierUid == null) {

networkString = “;deviceside=true”;

return true;

} else {

networkString = “;deviceside=false;connectionUID=” + carrierUid

+ “;ConnectionType=mds-public”;

return true;

}

}

else if ((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_MDS) == CoverageInfo.COVERAGE_MDS) {

networkString = “;deviceside=false”;

return true;

}

else if (CoverageInfo.getCoverageStatus() == CoverageInfo.COVERAGE_NONE) {

return false;

}

else {

networkString = “;deviceside=true”;

return true;

}

}

private String getCarrierBIBSUid() {

ServiceRecord[] records = ServiceBook.getSB().getRecords();

int currentRecord;

for (currentRecord = 0; currentRecord < records.length; currentRecord++) {

if (records[currentRecord].getCid().toLowerCase().equals(“ippp”)) {

if (records[currentRecord].getName().toLowerCase()

.indexOf(“bibs”) >= 0) {

return records[currentRecord].getUid();

}

}

}

return null;

}

public void upDateLocation(double latitude, double longitude) {

coord[0] = latitude;

coord[1] = longitude;

}

public String reverseGeocode(double lat, double lng) {

String url = “http://maps.google.com/maps/api/geocode/xml?sensor=false&latlng=”

+ lat + “,” + lng;

try {

if (getnetworkString()) {

HttpConnection connection = (HttpConnection) Connector.open(url

+ networkString);

connection.setRequestMethod(HttpConnection.GET);

InputStream istream = connection.openInputStream();

SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser sp = spf.newSAXParser();

sp.parse(istream, new LocationParser(this, true));

istream.close();

connection.close();

}

} catch (Exception e) {

}

return name;

}

public void setName(String name) {

this.name = name;

}

}

public class LocationParser extends DefaultHandler {

private boolean getName = false;

private boolean lat = false;

private boolean longi = false;

private double latitude = 0;

private double longitude = 0;

Geocoder geocoder;

private String address = “”;

private boolean addressfound = false;

public LocationParser(Geocoder geocoder, boolean getName) {

this.getName = getName;

this.geocoder = geocoder;

}

public void startDocument() throws SAXException {

super.startDocument();

}

public void startElement(String uri, String localName, String qName,

Attributes attributes) throws SAXException {

super.startElement(uri, localName, qName, attributes);

if (localName.equals(“lat”))

lat = true;

if (localName.equals(“lng”))

longi = true;

if (localName.equals(“formatted_address”))

addressfound = true;

}

public void characters(char[] ch, int start, int length)

throws SAXException {

super.characters(ch, start, length);

if (lat) {

lat = false;

latitude = Double.parseDouble(new String(ch, start, length));

}

if (longi) {

longi = false;

longitude = Double.parseDouble(new String(ch, start, length));

}

if (addressfound) {

if (address.equals(“”))

address = new String(ch, start, length);

addressfound = false;

}

}

public void endElement(String uri, String localName, String qName)

throws SAXException {

super.endElement(uri, localName, qName);

}

public void endDocument() throws SAXException {

super.endDocument();

if (getName == false)

geocoder.upDateLocation(latitude, longitude);

else

geocoder.setName(address);

}

}

Blackberry App Development – Map – Achieving map pin click for non touch devices – scrolling of map for touch devices.

February 15th, 2012

One can draw pin over the map and click on each pin to perform a particular task like going to the subsequent screen, view address etc. It’s easy to achieve this task on touch devices but performing same task in non touch device has its own difficulties associated with it. To achieve this, one can use the code given below.

We are showing a small circle (a PNG image) in the centre of the map. One need to scroll top / bottom or right / left and place a pin in the centre of the map then on click you will be able to perform a particular task .

Now coming to touch device, if you are using your own map class, I have read in many forum and blog that it’s not possible and very difficult to scroll the map. Here is a simple solution to achieve this. You can scroll the entire map by using the code given below.

Blackberry Non Touch Device Mapping Pins

Blackberry Non Touch Device Mapping Pins

===================================================================

public class MapScreen extends MainScreen implements

FocusChangeListener, FieldChangeListener {

private DemoMapField _mapField;;

public MapScreen(){

// TODO something.

}

protected boolean keyChar(char c, int status, int time) {

if (c == ‘!’) {// Zoom In

_mapField.setZoom(Math.max(_mapField.getZoom() – 1,

_mapField.getMinZoom()));

}

return true;

} else if (c == ‘@’) {// Zoom out

_mapField.setZoom(Math.min(_mapField.getZoom() + 1,

_mapField.getMaxZoom()));

}

return true;

}

return super.keyChar(c, status, time);

}

protected boolean navigationMovement(int dx, int dy, int status, int time)    {

return _mapField.navigationMovement(dx, dy, status, time, this);

}

return true;

}

protected boolean navigationClick(int status, int time) {

// Call : _mapField.getHighlightedLocation();

//TODO Something

return true;

}

protected boolean touchEvent(TouchEvent message) {

boolean isConsumed = false;

try{

if (message.getEvent() == TouchEvent.CLICK) {

super.touchEvent(message);

_ mapField.setFocus();

HandleMapClick(message);

}

}

}catch (Exception e) {

}

try{

TouchGesture touchGesture = message.getGesture();

if (touchGesture!=null && touchGesture.getEvent() == TouchGesture.SWIPE)

{

if (touchGesture.getSwipeDirection() == TouchGesture.SWIPE_EAST) {

for (int index = 0; index < 6; index++)

navigationMovement(-index, 0, 1, 0);

return true;

}

if (touchGesture.getSwipeDirection() == TouchGesture.SWIPE_NORTH) {

for (int index = 0; index < 6; index++)

navigationMovement(0, index, 1, 0);

return true;

}

if (touchGesture.getSwipeDirection() == TouchGesture.SWIPE_SOUTH) {

for (int index = 0; index < 6; index++)

navigationMovement(0, -index, 1, 0);

return true;

}

if (touchGesture.getSwipeDirection() == TouchGesture.SWIPE_WEST) {

for (int index = 0; index < 6; index++)

navigationMovement(index, 0, 1, 0);

return true;

}

}

}catch (Throwable e) {

}

return isConsumed;

}

private void HandleMapClick(TouchEvent message) {

try {

_mapField.setClick(message);

// Call : _mapField.getHighlightedLocation();

//TODO Something

} catch (Exception e) {

}

}

***************************************************************************

public class DemoMapField extends MapField{

private Vector _allLocations = new Vector();

private MapLocation _highlightedLocation;

private Bitmap bmpCursor = Bitmap.getBitmapResource(“highlighted circle image”);

private Bitmap bmpPinRed = Bitmap.getBitmapResource(“an png image- pin”);

private Bitmap bmpPinBlue = Bitmap.getBitmapResource(“an png image-pin “);

protected void paint(Graphics g) {

g.setDrawingStyle(Graphics.DRAWSTYLE_AAPOLYGONS, true);

super.paint(g);

if (!Touchscreen.isSupported()) {

determineSelectedLocation(new XYPoint(getWidth() >> 1,

getHeight() >> 1));

g.drawBitmap((getWidth() – bmpCursor.getWidth()) >> 1,

(getHeight() – bmpCursor.getHeight()) >> 1, getWidth(),

getHeight(), bmpCursor, 0, 0);

}

if (this.currentLocation != null) {

MapLocation currentSite = new MapLocation(this.currentLocation[0],

this.currentLocation[1], “”, “”, “”, “”);

drawSite(g, currentSite, bmpPinRed);

}

for (int count = 0; count < _allLocations.size(); count++) {

MapLocation currentSite = (MapLocation) _allLocations

.elementAt(count);

drawSite(g, currentSite, bmpPinBlue);

}

g.setColor(Color.BLACK);

g.drawText(“Use ‘!’ to zoom in”, 1,

g.getFont().getHeight() + 2);

g.drawText(“Use ‘@’ to zoom out”, 1,

(g.getFont().getHeight() * 2) + 4);

}

public void determineSelectedLocation(XYPoint colisionWith) {

if (_allLocations == null || _allLocations.size() == 0)

return;

XYPoint[] locationsXY = new XYPoint[_allLocations.size()];

for (int count = 0; count < locationsXY.length; count++) {

MapLocation currentSite = (MapLocation) _allLocations

.elementAt(count);

Coordinates co = new Coordinates(currentSite.getLatitude(),

currentSite.getLongitude(), 0);

XYPoint p = new XYPoint();

convertWorldToField(co, p);

locationsXY[count] = p;

}

int closerIndex = 0;

int closerValue = getDiff(colisionWith, locationsXY[0]);

for (int i = 1; i < locationsXY.length; i++) {

int diff = getDiff(colisionWith, locationsXY[i]);

if (diff < closerValue) {

closerValue = diff;

closerIndex = i;

}

}

if (closerValue <= 60) {

_highlightedLocation = (MapLocation) _allLocations

.elementAt(closerIndex);

} else {

_highlightedLocation = null;

}

}

private int getDiff(XYPoint p1, XYPoint p2) {

return Math.abs(Math.abs(p1.x) – Math.abs(p2.x))

+ Math.abs(Math.abs(p1.y) – Math.abs(p2.y));

}

void drawSite(Graphics g, MapLocation currentSite, Bitmap bmp) {

Coordinates co = new Coordinates(currentSite.getLatitude(),

currentSite.getLongitude(), 0);

XYPoint point = new XYPoint();

convertWorldToField(co, point);

if (!(point.x < 0 || point.x > getWidth() || point.y < 0 || point.y > getHeight())) {

g.drawBitmap(point.x – 5, point.y – bmp.getHeight() + 10,

bmp.getWidth(), bmp.getHeight(), bmp, 0, 0);

}

}

public void setZoom(int zoom) {

super.setZoom(zoom);

}

public boolean navigationMovement(int dx, int dy, int s, int t,

MainScreen mainScreen) {

int zoom = getZoom();

int latitude = getLatitude() – ((dy << 3) << zoom); // << 3 is

int longitude = getLongitude() + ((dx << 3) << zoom);

{

moveTo(latitude, longitude);

}

return true;

}

private boolean FindMaximum(double latitude, int dx, int dy, int zoom) {

double minLat = Double.MAX_VALUE;

for (int i = 0; i < _allLocations.size(); i++) {

MapLocation location = (MapLocation) _allLocations.elementAt(i);

if (location.getLatitude() < minLat)

minLat = location.getLatitude();

}

if (minLat < latitude)

return false;

else

return true;

}

private boolean FindMinimum(double latitude, int dx, int dy, int zoom) {

double maxLat = Double.MIN_VALUE;

for (int i = 0; i < _allLocations.size(); i++) {

MapLocation location = (MapLocation) _allLocations.elementAt(i);

if (location.getLatitude() > maxLat)

maxLat = location.getLatitude();

}

if (maxLat > latitude)

return false;

else

return true;

}

protected boolean touchEvent(TouchEvent message) {

if (message.getEvent() == TouchEvent.CLICK) {

int x = message.getX(1) – getLeft();

int y = message.getY(1) – getTop();

determineSelectedLocation(new XYPoint(x, y));

return true;

}

return super.touchEvent(message);

}

void addSite(MapLocation site) {

_allLocations.addElement(site);

}

public void setLocations(Vector allLocations) {

this._allLocations = allLocations;

}

public MapLocation getHighlightedLocation() {

return _highlightedLocation;

}

private double[] currentLocation = null;

public void setCurrentLocation(double[] currentLocation) {

this.currentLocation = currentLocation;

}

public void setClick(TouchEvent message) {

touchEvent(message);

}

}

Global Smartphone Statistics

November 8th, 2011

Top Mobile Phone manufacturers as of 2010:

Top Smartphone Manufacturers:

Smartphone Operating Systems:

Hibiscus Releases Its New Board Game on iStore

September 6th, 2011

Get ready to revisit the History with Hibiscus’s latest release on iStore. We have release the latest Board game Shakuni for iPad on iStore.

Shakuni is a fun dice board game. Shakuni was one of the greatest player of ancient Indian dice game called Chausar (aka Dayakattai, Pakatai), which is the inspiration behind this app.
The game Shakuni can be played by up to four players at a time. User rolls over the dice and moves his coins accordingly,
first user who moves all of his/her coins back to home is the winner. To users’ delight Shakuni comes with very rich user interface and easy to understand rules.
Features:
* Auto saves whenever game exits
* Dice roll animation
* Rich User Interface

Also called Dhayam, Dhayakattai(Tamil), Pagade (Kannada, Malayalam), Pagadai, Chausar (Hindi)

Please visit http://itunes.apple.com/us/app/shakuni/id460060446?ls=1&mt=8 to download this app for FREE.

Web Hosting Companies In India

October 14th, 2010
Company Features
net4india.com Disk Size 1GB 2GB 4GB 10 GB
Bandwidth Transfer in GB Unlimited Unlimited Unlimited Unlimited
No. of domain names that can be hosted 1 1 1 1
*Allocate username and password to folders on web Yes Yes Yes Yes
*Website write permission Yes Yes Yes Yes
Windows Free Sub-domain 3 3 3 3
Windows Microsoft Windows 2003 w/IIS 6.0 Yes Yes Yes Yes
Windows Microsoft Windows 2008 w/IIS 7.0 Yes Yes Yes Yes
Linux Linux Redhat Yes Yes Yes Yes
Control Panel Yes Yes Yes Yes
Raw log files Yes Yes Yes Yes
*MS FrontPage Server Extensions Yes Yes Yes Yes
24/7 access via FTP Yes Yes Yes Yes
Web traffic reporting Yes Yes Yes Yes
Price Price/ Year Rs. 3,649 Rs. 7,298 Rs. 14,596 Rs. 29,499
e2enetworks.com Plan VPS-HDD-S VPS-HDD-1 VPS-HDD-2
RAM 768MB 1536MB 3072MB
Diskspace 40GiB 75GiB 150GiB
IP Addresses 1 1 1
Monthly Data Transfer 200 GB 400 GB 800 GB
Control Panel Virtualmin Virtualmin Virtualmin (Unlimited)
Price Monthly Fee Rs. 1999 Rs. 3700 Rs. 6850
Price Monthly Fee(6 month prepay) Rs. 1899 Rs. 3515 Rs. 6500
Price Monthly Fee(12 month prepay) Rs. 1799 Rs. 3330 Rs. 6165
Esds.co.in Hard Disk ESDS – Cloud B I ESDS – Cloud B II ESDS – DC Cloud SI
RAM Allocation 0.8Ghz 1.6Ghz Single Core
Operating System 20GB 40GB 160GB
Control Panel 512MB RAM 1GB RAM 1GB RAM
Bandwidth Linux Linux Linux
Server Access cPanel / Plesk (Linux) cPanel / Plesk (Linux) cPanel / Plesk (Linux)
Cloud Server Management 100GB Bndwdth/ Month 200GB Bndwdth/ Month 50GB Bndwdth Month
Network Uptime 2 IP’s 2 IP’s 2 IP’s
24×7 Server Monitoring Fully Managed Cloud Server Fully Managed Cloud Server Fully Managed Cloud Server
24×7 Phone Support 100% Uptime 100% Uptime 100% Uptime
24×7 Live Chat Support YES YES YES
24×7 Email Support YES YES YES
YES YES YES
YES YES YES
Setup Fee Free Free Free
Price Monthly Pricing Rs. 2,199 Rs. 3,299 Rs. 3,480

ZNet.com No. Of Pages 1 15 50
Web Space 1GB 5GB 25GB
Email 1 10 50
MySQL database 0 5 10
Price Rs. 100/Mnth Rs.1299/Mnth Rs.2500/Mnth
Total Disk Space 50GB 100GB 200GB
Data transfer/Mo. Unlimited Unlimited Unlimited
Websites Unlimited Unlimited Unlimited
POP Email ID Unlimited Unlimited Unlimited
Sub Domain (sub.domain.com) Unlimited Unlimited Unlimited
MS SQL 2005/2008 Databases Unlimited Unlimited Unlimited
MY SQL Databases Unlimited Unlimited Unlimited
Price Rs. 1399/mo. Rs. 2399/mo. Rs. 4199/mo.
Indialinks.com Web Space 500 Mb 1000 Mb 2500 Mb
Mailboxes 5 Mail Boxes(2.5Gb) Do Do
Monthly Bandwidth 100 Gb Data Transfer Do Do
MySQL Database(s) 1 Do Do
Price Rs.8000/Year Rs.9500/Year Rs.16000/Year
ewebguru.com Budget Reseller Advance Reseller Power Reseller Ultimate Reseller
Web Space 10 GB 20 GB 30 GB 40 GB
Monthly Bandwidth 100 GB 200 GB 300 GB 400 GB
Domain Limit Unlimited Unlimited Unlimited Unlimited
cPanel/WHM
Subdomains Unlimited Unlimited Unlimited Unlimited
FTP Accounts Unlimited Unlimited Unlimited Unlimited
MySQL Databases Unlimited Unlimited Unlimited Unlimited
POP3 Mail accounts Unlimited Unlimited Unlimited Unlimited
Price Monthly Price Rs.995/- Rs.1995/- Rs.2995/- Rs.3995/-
Half Yearly Price Rs.5595/- Rs.11195/- Rs.16995/- Rs.22395/-
Yearly Price Rs.9950/- Rs.19950/- Rs.29950/- Rs.39950/-
Brainpulse.com Disk Space 1 GB 5 GB 15 GB Unlimited
Bandwidth/mo Unlimited Unlimited Unlimited Unlimited
Domain Hosting 1 2 5 10
Sub Domains Unlimited Unlimited Unlimited Unlimited
MySQl Databases 2 Unlimited Unlimited Unlimited
FTP Accounts Unlimited Unlimited Unlimited Unlimited
Email Accounts 50 100 200 Unlimited
Price / Year
Price Rs. 899 Rs. 1999 Rs. 3999 Rs. 8500
hostrightnow.com Dedicated RAM 384 MB 1 GB 2GB
Disk Space 10 GB 30 GB 60 GB
Monthly Traffic 100 GB 300 GB 600 GB
Usable IP addresses 1 1 2
24×7 live chat and phone support Yes Yes Yes
24×7 server monitoring Yes Yes Yes
24×7 port monitoring Yes Yes Yes
Easy Upgrade Options Yes Yes Yes
Setup Fees Rs. 500.00 Rs. 900.00 Rs. 900.00
Price Monthly cost Rs. 1450.00 Rs. 2800.00 Rs. 3900.00

Platforms for developing SaaS applications – A Comparison

August 23rd, 2010

Force.com

Two huge benefits start to come into focus when you look across Force.com platform apps in general: they’re both data-centric and collaborative.

Data-Centric Apps

Because the platform is centered on a database, it allows you to write apps that are data-centric. A data-centric app is an application that is based on structured, consistent information such as you might find in a database or an XML file. We can find these data-centric apps everywhere, in small desktop databases like Microsoft Access or FileMaker, all the way to the huge systems running on database management systems like Oracle or MySQL. Unlike applications that are built around unstructured data, like plain text documents or HTML files, data-centric apps make it easy to control, access, and manage data.

For example, consider an exercise such as trying to determine the total sales for a month from a set of Microsoft Word-based contracts versus a set of contracts in a simple database. Whereas it takes a lot of effort to open each Word document, find the contract total, and then add them all together, if this data is stored in the database of a data-centric app, we can more efficiently get the same result by issuing a single query. While most people don’t need a data-centric application to keep track of anything other than contacts, photos, or possibly music, companies of all sizes constantly need to query and aggregate their large amounts of data to make fast business decisions. As a result, the data-centric nature of the Force.com platform makes it the perfect platform to build and host business applications.

Collaborative Apps

Because the platform can be accessed by multiple users at the same time, it also allows you to write apps that are collaborative. A collaborative app is an application with data and services that are shared by multiple users in different locations. Unlike more traditional forms of software that are installed on a single machine and are hard to access from a distance, collaborative apps on the platform can be accessed from anywhere in the world with only a Web browser. This makes it easy for teams to work together on activities like selling a product, managing a project, or hiring an employee.

In addition to easy access over a Web browser, a number of built-in platform features also facilitate productive group collaboration:

· The platform’s security and sharing model allows you to finely control a user’s access to different data

· Workflow rules allow you to automatically assign tasks, update data, or send email alerts when certain business events occur, such as the creation of a new record or a change in the value of a record field

· Approval processes allow you to set up a sequence of steps necessary for a record to be approved, including who must approve it at each step

Collectively, these features provide a framework for sharing apps across groups, divisions, and entire corporations without relinquishing administrative control over sensitive data.

The Technologies Behind a Force.com

Technology

Description

Multitenant architecture

An application model in which all users and apps share a single, common infrastructure and code base

Metadata-driven development model

An app development model that allows apps to be defined as declarative “blueprints”, with no code required. Data models, objects, forms, workflows, and more are defined by metadata.

Force.com Web Services API

An application programming interface that defines a Web service that provides direct access to all data stored in the Force.com platform from virtually any programming language and platform.

Apex

The world’s first on-demand programming language, which runs in the cloud on the Force.com platform servers.

Visualforce

A framework for creating feature-rich user interface for apps in the cloud.

Force.com sites

Public websites and applications that are directly integrated with your Salesforce.com organization – without requiring users to log in with a username and password.

AppExchange directory

A web directory where hundreds of Force.com apps are available to Salesforce.com customers to review, demo, common upon, and/or install. Developers can submit their apps for listing on the AppExchange directory if they want to share them with the community.

Microsoft Windows Azure Platform

One of the main functions of Microsoft Azure is to provide platform for Software as a Service (SaaS) applications and with increasing customer demand, IT Solution Providers are turning to SaaS versions of their products. The creation of an efficient SaaS application requires the support of an efficient cloud- based service that can be used simultaneously by various customer organizations. Azure performs its role creditably in this aspect.

· Cloud computing is versatile, wherein it can be an add-on service to existing on-premises application. This method is comparatively cheaper and increases operational functionality of the existing system.

· Azure definitely provides ease of use and administration with a minimal up-front commitment and ability to increase or decrease computing resources used by the client applications. This ensures availability of better technology with lower costs.

Technology:

Windows Azure consists of 3 main parts

1. A compute service, which runs applications

2. A storage service, which stores data

3. A fabric, which supports the compute and storage services

In order to use the compute service, a developer creates an application using combinations like C#/VB and .NET framework and is later implemented as Web roles, worker roles or both. Web roles accept web requests and are created using a technology like ASP.net which works with Internet Information Services (IIS).

Irrespective of technology, Azure provides built-in hardware load balancing across all Web role instances in a particular application. Worker role instances are for functions that doesn’t respond directly to web requests and is just a Windows application with a main (), running indefinitely. This model allows creating scalable applications where Web role instances accept requests, then pass them to Worker role instances to be processed.

It is to be noted that each instance irrespective of Web or Worker roles runs on its own Virtual Machine (VM). This provides for isolation and clear knowledge of application performance as there is a definite mapping between VMs and processor cores. The developer simply uploads an application to Windows Azure with an XML configuration file specifying the number of instances that need to be run. Subsequently, it is Windows Azure and not the developer who creates the required number of VMs and monitors their execution. In the event of failure of an instance, Azure will start a new one ensuring that the specified numbers of role instances are always running. This work is done by the Fabric Controller software that’s in charge of all machines in a particular instance of the Fabric. When an application owner increases or decreases the value of instances in the configuration, Azure automatically creates or shuts down VMs to match the new setting.

Being Windows apps, developers could provide templates for creating cloud applications as Web roles, Worker roles or both using Visual Studio IDE. The developers can also use Development Fabric, which is a part of Azure and run on the local machine, to create the code and do testing, before uploading the application onto Windows Azure.

Azure provides its own mechanisms for storage and retrieval of data. The 3 available storage options can be accessed via standard HTTP GETs, PUTs, and DELETEs.

The three kinds of Windows Azure storage are:

1. Blobs: This allows storage of large binary objects, such as videos and images.

2. Tables: provides for storage of highly scalable entities (not relational tables).

3. Queues: allows sending and receiving of messages, such as between an application’s Web role instances and Worker role instances.

It has to be noted that all these storages can be accessed by applications that are not on Azure Compute Service. On-premises or hosted applications can also store and access data like large video files, as Azure storage blobs.

The Windows Azure platform also contains SQL Azure Database (earlier known as SQL Data Services), which provides standard relational storage based on SQL server technology.

EC2 for SaaS

iWay Software’s robust, enterprise-scale integration solutions are available on demand. With iWay SaaS on Amazon Elastic Cloud Computing (EC2), organizations can more conveniently and economically leverage powerful, cutting-edge integration technologies – without the need to install them on-site or devote IT resources to ongoing maintenance.

Fast Deployment with Minimal Administration

iWay’s SaaS-based solutions will be pre-installed and pre-configured as Amazon Images (AMIs) and fully hosted by Amazon, where they can then be made immediately available to subscribers. Clients simply select the desired operating system (Windows or Linux), choose the tools and components they wish to use, and indicate their virtual hardware preferences, such as CPU, memory configuration, and storage sizes.

Unparalleled Security

iWay SaaS on Amazon EC2 offers end-to-end integration in a highly secure environment. The iWay RVI Secure Proxy Service – using the secure AS2 protocol – allows for fully protected robust and secure connections between Amazon EC2 instances of iWay solutions and all internal corporate back-end applications and systems – such as SAP or DB2. All integration activities are processed and executed across well-regulated channels, which utilize proxy gateways, firewalls, virtual private networks (VPNs), and other proven techniques to preserve the integrity of client data at all times.

A Flexible and Scalable Deployment Model

On-demand solutions from iWay Software are not just powerful and economical; they’re also flexible and scalable. All instances of iWay Software have already been installed and tested, so clients can begin using new tools and components, cancel services they have already subscribed to, or add new users to their environment at any time.

iWay SaaS supports various integration models, to allow for:

· Secure connections to internal applications, systems, and databases within the corporate firewall

· Access to Internet-based Web servers and databases

· Integration with other SaaS-based solutions such as Salesforce.com

Additionally, iWay SaaS for Amazon EC2 solutions are fully customizable, and can be quickly and easily configured by iWay consultants to address unique or specific client requirements. As demand increases, additional instances may be brought online in a very short amount of time.

Convenient Any Time, Anywhere Access

Our SaaS-based tools can be easily deployed as Web-based applications. This provides users with access at any time, from any Internet-enabled location around the globe. Leverage the integrated services from any enabled device regardless of location.

Maximum Affordability

Unlike on-site integration solutions, which impose licensing fees for each user no matter how infrequently they use them, iWay’s SaaS-based tools offer a budget-friendly fee structure based solely on hourly system usage.

WebFOCUS Business Intelligence Integration

Advanced reporting features using Information Builders’ WebFOCUS business intelligence (BI) platform are readily available via the iWay SaaS solution. Leverage the capabilities of BI and integration with the simplicity of a cloud solution.

Wipro w-SaaS platform

Wipro has built w-SaaS, a platform for rapid SaaS enablement and deployment on cloud, using some of the commonly accepted trends in software engineering and open standards. The w-SaaS platform comprises of the following components:

· SOA-based services framework for SaaS enablement

· A Cloud Provisioning Fabric (CPF) to enable seamless portability between different clouds

· Unified Admin Console for platform services management, cloud management and tenant provisioning

Oracle offers a comprehensive, open and integrated set of technologies to build, deploy and manage applications to ISVs. It is also the platform of choice for SaaS deployments with eight out of ten leading SaaS vendors delivering business critical applications on Oracle.

The w-SaaS platform offers the following features:

Non-intrusive SaaS enablement

The SOA based framework services are available outof-the-box for SaaS features like multi-tenancy, usage metering, billing, user management etc. These services can be consumed by the application in a non-intrusive way to operate in the SaaS model.

Seamless Cloud Deployment

The CPF provides features to create deployable images of the application and deploy them on a cloud infrastructure. The images created can be converted from one format to another thus allowing portability between different underlying clouds. The CPF also provides ability to provision hardware nodes into the cloud and to dynamically provision virtual machines on these hardware nodes.

Easy Platform Administration

The unified admin console provides the ability to administer and manage both the cloud platform and the SaaS applications. This also gives a unified look-and-feel for cloud management regardless of the underlying cloud.

Wolf

WOLF is a browser based On Demand Platform-as-a-Service (PaaS) for rapidly designing and delivering database driven multi-tenant Software-as-a-Service (SaaS) applications. WOLF is a Cloud Computing platform architected to help you design, deliver and use Software as a Service (SaaS) applications using only a web browser.

SaaS applications developed on the platform are endowed with a single instance multi-tenant architecture. They are instantly integrated into an automated provisioning system which handles the allocation of network resources, database creation and account information. The robust User-Role management system makes it easy to create users & roles and assign rights to various modules of your application.

WOLF Environments

Browser-based 128-bit encrypted secure Designer and RunTime environments.

Technology

WOLF Platform-as-a-Service (PaaS) uses the power of the following technologies: AJAX, XML, C# Engine, IIS and Microsoft .NET environment and supports Microsoft SQL Server and MySQL database.

OnDemand Infrastructure

Hosted & managed by i-web, a recognized leader in high-end secured hosting with more than 12,500 customers spread across 130 countries. WOLF also offers application licenses for private server deployment of your own choice.

Forms

  • Point and click interface to quickly create forms
  • Organize form layout into tabs, sections and multiple columns
  • Add sub tables(Master/Details section) in forms
  • Master/Details section with grids for inline editing
  • Custom edit screens to present data in multiple formats
  • Custom “action” buttons can be added to a form
  • Auto-validated field types for text, date, numbers, checkboxes and more.
  • Custom validations on fields like read only, mandatory, etc.
  • Auto-generated alphanumeric data type
  • Conditional styles can be applied to form fields
  • Support for image maps
  • Multiple file and image upload, download and display
  • Configurable dynamic, linked drop downs
  • Ready-made system drops downs for countries, users, etc.
  • Integrate with external web pages and third party widgets
  • Keyboard shortcuts
  • Instant preview
  • Printable forms

Search

  • Data mining tools like Search, Sort and Filter based on custom criteria
  • Role/User level permissions for add, edit and delete actions
  • Grids for inline editing of data
  • Set automatic criteria for filtering data
  • Link Search to custom forms
  • Quick view of records
  • Custom actions to export to Excel and CSV
  • Selective exporting of data

Business Logic

  • English language like Business Rules
  • Define workflow & business logic without writing procedural code
  • Ready to use actions for standard programming constructs such as if-then, for-each, etc.
  • Invoke rules on save of records or for validation and calculation
  • Business logic can be added to standard or custom actions
  • Multi Level master detail relationships- 1:M, M:1, M:M
  • Relationships are handled without having to specify keys
  • Multi-level grouping supported
  • Nesting of business rules and actions
  • Invoke different rule sets for a decision management process
  • View reference of the rules written around data elements
  • Automatic emails for notification and acknowledgement
  • Auto user simulation

Display Modes

  • Forms
  • Search Screens
  • Reports
  • Charts
  • Dashboards
  • Custom HTML pages
  • External web pages

Reports & Charts

  • Graphic charts (line, bar, pie, etc.)
  • Multiple report formats such as drill downs, advanced search screens, etc.
  • Reports and charts can include data from multiple related tables
  • Criteria for filtering reports and charts
  • Automatic summary functions such as subtotalling, average, etc.
  • Drill downs for multi-level data report
  • Configurable user dashboards
  • Ready actions for exporting data to Excel and Word
  • Ready actions for printing of reports and charts
  • Schedulable reports via email
  • Custom HTML reports
  • Custom styling of reports using HTML and CSS
  • Color coding

Integration

  • Embed forms, reports and charts in your website, forums, blogs or any other user interface
  • Ready Business Rule actions to call a GET, POST or SOAP request
  • Ability to communicate with OnPremise as well as cloud based applications
  • Data can be imported from RSS feeds
  • Ready SMTP integration
  • Ready integration with PayPal
  • Ready gateway service to send text messages

Customization

  • Complete custom branding and white labelling of applications
  • Template personalization
  • Application styling and skinning
  • Position company logo, footer, copyright & attach a ‘Terms of use’ document
  • Customize access URL

Security

  • Hosted in a 100 percent uptime guaranteed, load balanced– SAS 70 data center
  • Accessible over 128-bit encrypted secured SSL connection
  • User name and password for authentication
  • Access restriction by IP address and range
  • Record level information about date created/last modified and user who created/last modified
  • Transaction history / audit trail
  • SSO

Scheduling

  • Automate tasks, reminders, emails, etc.
  • Call scheduled actions linked to Business Rules

Administration

  • Robust security management module to create & manage folders (tenants), roles and users
  • Assign control over different views, changes and data additions
  • Permissions at table/entity level, navigation level (screens, charts, reports, dashboards etc.) and field level

Minimized Lock-in

  • Single click data backup in RDBMS format
  • Single click design backup for business design in a portable XML format
  • Hybrid hosting options: Private server or WOLF Cloud.

Building Mobile Website

August 23rd, 2010

There exists a wide range of mobile device user agents (browsers), each rendering markup in different ways. The choice to use WML, XHTML Mobile Profile, XHTML Basic, or cHTML can be an overwhelming decision, to say the least.

All mobile web development strategy must begin with an understanding of the target audience and what they want from a site or app, and what the contextual relevance of such a site or app is, what is relevant to the users and the tasks, the problems, and the needs, the users may encounter while being mobile?

WAP 2.0: An XHTML Environment

WAP 2.0, XHTML Mobile Profile (XHTML-MP) is generally the preferred mark-up language, with mandated backward compatibility for WML.

Nearly, all devices today are WAP 2.0 devices with XHTML Mobile Profile, which will be familiar to anyone who has worked with XHTML Transitional or Strict is the official mark-up language for such devices.

Finally, because XHTML-MP is a subset of XHTML, initial testing and validation are done within most desktop browsers. Thorough, final testing will certainly need to be conducted using actual devices, but one may test on the desktop initially to see if the mark-up renders correctly and semantically.


Design Strategy

Opt for web standards and a flexible layout and then with the reference design and adaptation rules in place, the final strategy builds flexibility into the mark-up through the use of generic, standards based XHTML and CSS. In practice, this means creating mark-up that uses the tags and structures inherent in HTML (i.e. headers, paragraphs, lists and divs) to define the structure of the page. The immediate benefit—any browser that can read HTML will be able to display your content and will assign it with (albeit rudimentary) visual style. Given the vast number of mobile devices, this benefit cannot be underestimated as it ensures your content will be accessible to a large number of users without too much higgery-jiggery on the part of developers. One will then be in a great position to progressively enhance the design for different device groupings through the use of browser and/or device-specific CSS, graphics and scripting.

The BBC web site is an ideal example as it shows how simple it can be to combine clean mark-up with well conceived styles and strategic editorial decisions to achieve a great experience on a wide range of devices. Ultimately, the design, adaptation and editorial choices will be based on many factors including the budget, target audience and the functionality of the mobile web site. In the end, it’s all about striking a balance between the creation of a well optimized, fast-loading site and the delivery of great, targeted content to the users.


Development Strategy

A mobile-optimized site addresses first how content is accessed and second what it looks like. In other words, it means context before aesthetics, function before form. Pages are leaner, which means users are spared excessive bandwidth costs and generally enjoy a faster browsing experience.

The development follows the W3C’s Mobile Web Best Practices 1.0 document.

ASP.NET version of HAWHAW can be used in creating such mobile website.


Testing Strategy

There are almost 30+ different mobile browsers and many more. With these kinds of numbers, it is highly impossible to test the Web site across all devices? What can be done is test the site on at least one device from all popular manufacturers, and on as many of the mobile browsers as possible. This will give a good idea of how the site works on different devices and will also help in resolving issues. The catch is in making sure that there is access to all of the necessary devices and mobile browsers. Testing is usually possible in one or two physical devices – not enough to adequately test on but emulators can be used instead to simulate testing on the real device or browser. The benefits of this approach are many-fold:

· No data browsing charges are incurred, as all browsing is performed via your standard Web connection

· Quicker access to devices – starting an emulator is faster than switching sim cards and rebooting devices

· Provides access to a potentially large number of devices/browsers – the number of devices is only limited by hard disk space and the number of emulators that can be found

· Inexpensive – many emulators are available for free

Fortunately, Mozilla Firefox supports some great extensions that can make testing of mobile sites a piece of cake. Firefox is probably the best browser out there for mobile Web site testing. To make Firefox imitate a mobile device, the following are required:

· The Firefox Web browser (obviously)

· The Modify Headers add-on

· The User Agent Switcher add-on

· At least one mobile device user agent

· A UA Profile HTTP Header

After the add-ons have been installed, Firefox is ready for mobile site testing.


Mobile websites can be developed for the following devices:

Apple (iPhone)

Blackberry

BlackBerry® World Edition™

BlackBerry® Tour™

BlackBerry® Storm™

BlackBerry® Pearl™

BlackBerry® Curve™

BlackBerry® Bold™

BlackBerry® 88(00,20,30)

Palm

Palm Pixi

Palm Pixi Plus

Palm Pre

Palm Pre Plus

Android

Nexus One

Passion / Bravo

GW880

Xperia X10a

Eve / GW620

Eris / Desire

One

Streak

Calgary / Motus

Liquid / A1

Moment

Behold II

DROID / Milestone

Archos Phone

CLIQ / DEXT

O1

Spica / Galaxy Lite / i5700

Pulse

Mini 3i

Sprint Hero

Tattoo

Hero

Galaxy / i7500

Magic / myTouch 3G

Dream / G1

Samsung

Android Phones

Windows Phones(z105)

Nokia

All N Series

LG

Android Phones

Motorola

V3i

Sony Ericsson

K750i

Mobile websites will have to be compatible across the following mobile browsers:

·Blazer ·Bolt browser ·Deepfish ·Firefox for mobile ·IbisBrowser ·Internet Explorer Mobile ·Iris Browser ·JOCA ·Konqueror Embedded ·MicroB ·Minimo ·NetFront ·Obigo Browser ·Opera Mobile ·Pixo ·S60 web browser ·Safari ·Skyfire ·Steel ·Teashark ·ThunderHawk ·UCWEB ·uZard Web ·WinWAP

Dynamic Javascript and Cross Domain AJAX

November 13th, 2009

For those of you who’ve been frustrated by the XMLHTTPRequest object’s inability to make cross domain requests, there is a way out. This method does away with the XMLHTTPRequest object and uses a technique called dynamic javascript. Here’s how it works.

You would normally define a script tag something like this:

What if you replaced it with this piece of code?

But that can’t possibly work right? The browser will know right away that something’s off, right? Actually your browser won’t find out if your backend script (yourscript.php here) returns what it expects – Javascript code. There are two things you need to do with your backend script to achieve this. First you put in a header that tells the browser that the data returned is of type javascript.

This effectively fools the browser into thinking it’s reading a .js file. From then on print all the javascript statements you want wrapped within php strings. You will do something like -

That’s it! Try it out. Put the script tag in an HTML page, and the php file on the server, and on opening the page in the browser you should be able to see the dialog box. Of course this simple example does not convey the true power of this technique – that you can make database calls in the script and modify the javascript accordingly.

Suppose you have three clickable images on the screen. Each time one of them is clicked, you have to go back to the database, pick up a message associated with that image and display it. How would you do it? One solution would be to prepopulate hidden divs or javascript variables in the page using a server side scripting language. This idea immediately fails if you do not have control over the web page’s preprocessing. Perhaps you are only supplying a piece of javascript that ‘decorates’ the existing page with the required message, without assuming anything about the content. Then you have to make database calls on your server through the only entry point available to you: the javascript code.

A sample code would look something like this:

This function creates a script tag on clicking the image and that script tag calls a php file that returns the content. First it checks that a dynamically created script tag designed to do precisely this does not already exist. A large number of clicks would create a large number of script tags and that would not do site performance any good. What will the backend php code look like?

There you go, simple and powerful. A combination of dynamic script creation and .js file imitation using a server side script can, to a certain extent, simulate the AJAX effect of updating parts of a page without a complete refresh.


  Home | About Us | Web Development | Mobile Apps | Portfolio | Work with us | Careers | Blog | Sitemap