Posts

Showing posts from 2014

Can Facebook takeoff as an eCommerce Platform?

In app purchases - video games started this. Gamers could buy super powers or add-ons for their avatars without leaving the game. When games moved from consoles to Facebook, they retained this flavour. Though retailers failed to capitalize on this. Most retailers think of Facebook value as a "Like" button on their website or a "Page" in Facebook. Unless one has read Facebook developer documentation (https://developers.facebook.com/docs/payments/overview), little does one realise that Facebook provides the user management and payment APIs to enable a retailer to sell their products within Facebook app just like those games' in-app purchases. Some service providers like StoreYa.com or storefrontsocial.com are already enabling small retailers to sell online using Facebook. So the question is - will Facebook compete as an eCommerce Platform in near future?

Managing DB evolution with Alembic

Any application evolves over time and so does the entities in the application. To start with, simple DDL scripts are written to create the DB. In each release, a new table is introduced or a current one modified. You are lucky if you can push the same version of application to all your customers. Since in real world this is not possible, soon one feels the need for managing DB for various releases of the application. While for managing code, there are excellent tools available (e.g. git, svn etc.), the same is lacking for DB management. Alembic aims to mitigate this problem. The website introduces Alembic as: Alembic is a lightweight database migration tool for usage with the SQLAlchemy Database Toolkit for Python. This is slightly misleading as it also supports MySQL and pgsql. Asterisk project has started using it for managing Realtime DB tables using MySQL. Though it's still in 0.7.1 version, the progress seems to be very promising. It's very easy to use which you c

Creating Customer Delight

While reaching out to customer care these days, it's common to go through a series of questions on IVR before one gets to talk to a person. Even then, if it's your follow-up call on an issue, you have to start with several digits of a request number. How about using some technology to ease customer's pain? The IVR software should begin with checking if there is any past record of interaction from the particular telephone number. If not, present the user with normal set of options. If yes, it should directly connect the user to support staff simultaneously pulling up the concerned record on the display for support staff to refer to. What more, in eCommerce scenario most customers call up to find out their order details. Retailers can use this technology to give out order status before asking them if they want to talk to customer care.

IBM Watson Analytics: First impression

Image
Statistics is boring but computationally intensive. Hence for a long time, data warehousing and business intelligence (DWH & BI) was a specialized job. The contradiction being - folks who could understand pattern in data (business users) didn't know how to mine it; on the other hand, folks who could crunch data (engineers) didn't know what to look for.  Needless to say, anybody who could do both were looked up as wizards (Excel wizard!!). People learnt to live with it by compromising on a standard set of reports. IBM Watson Analytics aims to change this. It's a cloud based predictive analytics application. The cloud platform gives it the number crunching prowess resulting in instantaneous feedback. The beautifully designed application brings out the most important information out of humungous data at once. Further analysis can be done using drag-n-drop making analytics a playful exercise. After spending a couple of hours on the beta application, I must admit an

Evaluating Order Management System (OMS)

For a retailer, order and inventory management used to be a simple exercise. Keep track of what sells in which store and replenish based on those statistics. Not any more. While multiple channels have ensured larger customer base and greater turnover, it has made managing orders all the more complex. However, with challenges comes opportunities. As a retailer, this increased scale allows one to differentiate oneself in the market and become more cost effective. An efficient order management system allows a retailer to achieve the following: - Minimize transport cost - Minimize inventory cost Below is a list of basic features under the above listed categories that an OMS should support. Minimize transport cost Pick up nearest DC based on shipping address Avoid splitting of an order by sourcing it from a DC which has all the line items Distribute fulfillment across DCs considering their capacity to ensure efficient utilization Club multiple orders in single shipment whereve

Migrating to Grails 2.4.3

A lot has changed since I last used Grails (v1.3.2). I had developed a project that I want to use with latest Grails version. The migration isn't easy. So here's a list of steps to perform the migration (cf. http://grails.org/doc/2.4.x/guide/upgradingFrom23.html):  Change Grails version required by application in application.properties. app.grails.version=2.4.3  Dependencies are no longer managed in application.properties; instead BuildConfig.groovy is used. Make sure Maven repositories are NOT commented.   repositories {         grailsPlugins()         grailsHome()         grailsCentral()         // uncomment the below to enable remote dependency resolution         // from public Maven repositories         mavenLocal()         mavenCentral()                       } Dependencies naming follows Maven style - groupId:artifactId:version. groupId of "org.grails.plugins" seems to work in most of the cases.  dependencies {         // specif

ThingDoc: Automated instruction manual

Image
 Java world has used Javadocs for variety of purposes for a long time. It has served the developers well for technical references. What if the same concept is used to generate instruction booklet as well? ThingDoc allows you to achieve this for more generic use-cases like installation steps for software, building steps for hardware and even recipe book for food enthusiasts!! Source: https://github.com/josefprusa/ThingDoc

CoAP compliant wifi enabled IoT prototype

TI launchpad based on MSP430 low power MCU and CC3000 wifi chip provide an excellent platform for an IoT prototype. The demo shows Copper (a CoAP client available as a firefox plugin) on laptop communicating with simple CoAP server on MSP430 launchpad. Code : https://github.com/atamariya/iot Demo : https://www.youtube.com/watch?v=pLq7TKQihKI

Internet of Things -2 (Security)

IoT devices have a variety of protocols to interact with each other. These include bluetooth, X10, zigbee, insteon, Radio frequency (RF), NFC, Infrared(IR) etc. Traditionally to bridge the gap between internet and IoT,  people came up with Gateway architecture. The devices talk to the gateway using proprietary protocols. The gateway then relays this information on the internet. I call this hammer and nail architecture to highlight the deficiency of the design. One always need both hammer and nail to get started. And since each manufacturer uses his own proprietary protocol and no manufacturer produces all the devices that you might need, one ended up with several gateway devices. And if the maufacturer goes bankrupt or stop producing/supporting those devices, the devices end up as garbage. Additionally, one would like complete control over access to a device restricting usage only to authorized users. Security wasn't a major issue when you had only single device

Internet of Things

Internet started as a network of computers talking to each other. As evolution goes, each network defined it's own languare for effective communication (targetting a specific purpose) leading to a plethora of protocols like FTP, telnet, SMTP, POP3, IMAP, SNMP etc. This was fine till there were only a handful of hosts providing these services. But how could one talk to hosts if one didn't know about their existence? With number of hosts growing, a need to organize the information was felt. Hence came Archie, gopher and WAIS. However, it wasn't till HTTP or the World Wide Web (WWW) that Internet reached its full potential. Before that, as popular perception goes, computer, and by extension, Internet was only meant for Geeks / programmers. So what was it about WWW that changed how people looked at computers. - It is easy to get started One need not remember the host. One get started from a portal like Yahoo or search engine like google and reach their destinat

mbed API support for MSP430

I've started an effort to port mbed API to MSP430 https://github.com/atamariya/mbed . Though mbed is primarily targeted towards ARM, the API is still useful. - The C++ API is very clean promoting understanding and re-usability (e.g. SPI example here https://mbed.org/handbook/SPI ) - Good documentation and community involvement in developing libraries. - Code size and performance are important. However, the first focus is functionality. The good thing is - once performance improvement is done at HAL or API layer, it is immediately available to all the programs using it with just one re-compile.

IoT - Lightweight application framework

The technology landscape is changing fast and for good. With HTML5 becoming standard and protocols for M2M like MQTT getting wider acceptance, it's about time an application framework was designed using these. I've done a PoC with these components and am excited with the outcome. The framework consists of the following:   Lightweight HTML5 client with only MQTT JS library dependency. This allows easy customization of UI with simple HTML and CSS. It uses Websockets to communicate with broker. MQTT broker. I used HiveMQ (27 MB). Any other MQTT broker supporting websockets, even cloud based, would do. Device client based on MQTT API. I used Java API. However, C API is also available  which can be used to run the logic in low-powered microcontroller; or Python API  running on RPi. This involves two Java classes: SerialClient - Interacts with device implementing device specific calls for 0 , 1 and range messages TestDevice - Interacts with bro

IoT enablers

Here are some exciting technologies which will push IoT to masses: IBM teams up with mbed for IoT kit Print your own mbed circuit board with AgIC

Bean validation

Bean validation, validating the properties of a Java bean, is the most oft used pattern in any application. In the past, people have been creating their own frameworks to handle the same. JSR-309/JSR-349 strives to create a standardized way of addressing this issue. Below is an example of simplicity and elegance of this solution. import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import static org.junit.Assert.assertEquals; import org.junit.Test; /** * @author Anand.Tamariya * */ public class TestValidation { @Test public void testForm() { Validator validator = Validation.buildDefaultValidatorFactory() .getValidator(); Car car = new Car(null, "DD-AB-123", 4); Set<ConstraintViolation<Car>> constraintViolations = valid

Do customers prefer to have their loyalty rewards number looked?

Do customers prefer to have their loyalty rewards number looked up during checkout ? Here's some statistics according to an unlisted survery. What's your experience? 75% Preferred that the site would automatically lookup their Rewards Club # based on their billing address and email provided. 13% Preferred to push a button to look up their Rewards Club # and if a match was found, automatically add their rewards number. 10% Preferred to lookup their own Rewards Club # by manually entering their contact information. 2% Preferred to checkout without looking up their loyalty number.