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

Archive for the ‘Technology’ Category

BlackBerry App Development - Overriding of Menu button

Wednesday, 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

Wednesday, 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.

Wednesday, 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);

}

}

Hibiscus Releases Its New Board Game on iStore

Tuesday, 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.

Platforms for developing SaaS applications – A Comparison

Monday, 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.

Finding Latitude and Longitude for a place

Monday, September 7th, 2009

I was looking for a quick reference to find the latitude and longitude for any destination. I found a few sites that lists popular city’s lat, long, but what about not so popular ones, what about places inside cities - I searchd for a while and gave up.

Everyone know this is trivial as all travel sites, google maps, google map tools do this.

So I have written this piece of code, that would takee in a place and give out the lat and long. This would work for most places - Thanx to Google API!

Click here to get the latitude and longitude of your place

Installing SVN and Redmine in HostMonster

Wednesday, July 29th, 2009

Installing SVN in HostMonster is really simple. (Please DO NOT ask for support to HostMonster)

1) wget www.sharpstep.com/Articles/HostMonster-svn/svn-install.sh

2) chmod a+x svn-install.sh

3) ./svn-install.sh

Installing RedMine in HostMonster

wget http://rubyforge.org/frs/download.php/49319/redmine-0.8.0.tar.gz

gunzip redmine0.8.0.tar.gz

tar xvf redmine0.8.0.tar

rake db:migrade RAILS_ENV=’production’

Follow instructions in my previous blog RoR & HostMonster

create dispatch.cgi; dispatch.fcgi; dispatch.rb and .htaccess

Good to Go!

15 Simple SEO Tricks

Friday, July 17th, 2009

All our customers have at some point in time been really concerned about the search engine results. It is always difficult to pin point exactly why the result show what we are expecting.

Some simple steps you can do with google are

1) Descriptive URLs - URLs that contain keywords always provide in better results

2) All links in the web site should be accessible from the home page - Do not hide all your contents and show only logged in users; crawlers wont see it.

3) Use http instead of https; use https only where it is necessary; and not for the entire site

4) Providing a sitemap (there are a lot of sitemap generators!)

5) Use only relevant keywords in meta tags

6) Meaingful title, Description in the meta tag

7) use of <a href..> instead of window.location

8 ) Server uptime - obviously!

9) Pages need to be focussed; dont confuse the page with too many topics; split into multiple pages instead

10) Do not duplicate content; dont have multiple pages showing the same/similar contents (may be considered spam)

11) Use more texts than images

12) Have permanent/accessible link even to show contents from the DB - dont have pages that can come only out of search results (for eg.)

13) Avoid repetition of keywords (may be considered spam)

14) Anchor tags with relevant keywords/phrases. (avoid image tags)

15) H1 tags are considered more relevant than others <p> for eg.

And last but not least, make sure a lot of sites refer to your site. Make your URL’s presence in popular blogging sites, bookmarking sites, etc.
Hope This Helps!

  Home | About Us | Products | Portfolio | Work with us | Careers | Blog | Sitemap