Hybrid mobile developer for banking project

We are looking for front end devs and designers for hybrid mobile banking project (6 months contract).
 
You are expected to be:
– Smart and get job done.
– 1+ year designing and developing intuitive, real-time web applications.
– Able to translate user requests to live applications.
– Ability to discern between what users want, and what they need.
– Full-stack, production-level programming skills
– Have UX design sensibility.
– HTML, CSS and JavaScript (including JQuery and related libraries).
– Experience with Git, feature branching, and SCRUM development. (must)
– Excellent written and verbal communication skills.
– Malaysian.
 
Advantages if you know:
– IBM MobileFirst 7, Websphere.
– Android or Objective-C.
 
Benefit
– KWSP, socso
– self time management, as long as you deliver
IBM MobileFirst

IBM MobileFirst

iOT expertise needed

Want to work with IntelliJ?
We are HIRING FOR IOT AND AI PROJECTS.
==============================================

IntelliJ is looking for freelance electrical and software engineers.

Requirement applicants:
==================
1. Electrical engineer for IOT development
– Smart and get job done.
– Translating user requests to IOT applications.
– Ability to discern between what users want, and what they need.
– Python, C++ or C (Caffe and CUDA).
– Experience with Git, feature branching, and SCRUM development.
– Excellent written and verbal communication skills.
– Must know how to use Jetson TX1 for computer vision and intelligence system purpose.
– Malaysian

2. Software engineer for cloud system.
– Smart and get job done.
– Translating user requests to web applications.
– Ability to discern between what users want, and what they need.
– Python (Google Map V3).
– Experience with Git, feature branching, and SCRUM development.
– Excellent written and verbal communication skills.
– Know how to integrate with IOT application.
– Malaysian(edited)

Will disclose after selection.

Please send cvs to nurdin@intellij.my.

RM 1000 commission will be given straight to the ‘whistle blower’ as token of thanks for finding us those hidden industrial gems.

Jetson TX1

Jetson TX1

Simple App (CRUD) using IBM MobileFirst

Getting started with IBM MobileFirst V7.1. This tutorial show you how to do simple CRUD operation using IBM MobileFirst. What you need for this tutorial are

Outline that cover for this tutorial:

  • Set up your development environment
  • Preview your app
  • Learn MobileFirst client side API
  • Build a multi page application
  • Learn MobileFirst server side API

Setting up your development environment

Step 1

Visit this link to install MobileFirst into your eclipse.

http://intellij.my/2016/02/04/ibm-mobilefirst-installation-on-eclipse/

Open up your eclipse. Go to File > New > Other.

eclipse new project

eclipse new project

Step 2

Choose MobileFirst Project. Click Next.

select wizard

select wizard

Step 3

Type CRUD-MobileFirst or your own project name in name textbox. Click Next.

new MobileFirst project

new MobileFirst project

Step 4

Type CRUDMobileFirst or your own for application name. Click Finish. A popup will show up. Tick Remember my decision and click Yes.

open associated perspective

open associated perspective

Step 5

Open application-descriptor.xml.

application descriptor

application descriptor

Step 7

Change author details. (optional).

application descriptor

application descriptor

Step 8

Right click MobileFirst project , go to New > MobileFirst Environment. This part is when we want to add platform into our MobileFirst project such as iOS, android and windows mobile.

MobileFirst environment

MobileFirst environment

Step 9

Select your project and application/component. For this tutorial I will cover only for iOS and android. For windows mobile you need a windows machine to run the project using Visual Studio Express in Windows 10 operating system. Tick iphone and android phones and tablets. Click Finish.

MobileFirst environment

MobileFirst environment

Step 10

Your project directory will be like this.

MobileFirst directory

MobileFirst directory

Preview your app (android)

Step 11

import android project

import android project

Step 12

Select Existing Android Code Into Workspace. Click Next.

import android project

import android project

Step 13

Click Browse to select android project and click Finish.

import android project

import android project

Step 16

Run android app in android simulator.

Preview your app (iOS)

Step 17

Right click on iphone folder and go to Run AsXcode Project.

Run As Xcode Project

Run As Xcode Project

Step 18

Click Play on top left side to preview the app on your iphone.

Xcode 7

Xcode 7

Learning MobileFirst client side API and Building a multi page application

Step 19

Right click js folder inside common folder in your MobileFirst project. Go to NewOther.

Javascript File

Javascript File

Step 20

Create 3 javascript files.

  • AddPage.js – to add user details.
  • ListPage.js – to retrieve user list.
  • DetailPage.js – to retrieve user details.

Click Finish.

JavaScript Source File

JavaScript Source File

 

new javascript file

new javascript file

Step 21

You latest project directory will be like this.

Project Directory

Project Directory

Step 22

Right click common folder and go to New > Folder to create a new folder.

add folder

add folder

Step 23

Then create a few of html pages inside page folder that we already created just now. Right click pages folder and go to New > Other.

HTML Files

HTML Files

Step 24

Create 3 html files.

  • AddPage.html – to add user details.
  • ListPage.html – to retrieve user list.
  • DetailPage.html – to retrieve user details.
new html file

new html file

 

new html file

new html file

Step 25

You latest project directory will be like this for html files.

new html files

new html files

Step 26

Open your main.css file and replace with this code.

a, abbr, address, article, aside, audio, b, blockquote, body, canvas, caption, cite, code, dd, del, details, dfn, dialog, div, dl, dt, em, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, html, i, iframe, img, ins, kbd, label, legend, li, mark, menu, nav, object, ol, p, pre, q, samp, section, small, span, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, time, tr, ul, var, video {
margin: 0;
padding: 0;
}

/* MobileFirst container div */
body {
min-height: 460px;
margin: 0 auto;
/*width: 320px;*/
}

h1 {
font-size: 18px;
}

#AppBody {
min-height: 460px;
margin: 0 auto;
/*width: 320px;*/
background-color: #ccc;
overflow: hidden;
overflow-y: auto;
}

#header {
text-align: center;
background-color: #1D4D90;
color: #F9FAFB;
font-size: 16px;
height: 38px;
line-height: 38px;
border-bottom: 1px solid #BBBBBB;
}

#wrapper {
padding: 10px;
}

p{
padding: 10px;
}

#itemsList{
margin-top: 38px;
}

#itemsList li {
border-bottom: 1px solid #bbb;
min-height: 40px;
padding: 0 25px 0 15px;
cursor: pointer;
}

#itemsList li .pubDate {
color: #555;
font-size: 10px;
font-family: Arial;
}

#itemsList li:hover {
background-color: #EFEFEF;
}
replace main.css

replace main.css

Step 27

Open your index.html and replace with this code.

<!DOCTYPE HTML>
<html>
        <head>
            <meta charset="UTF-8">
            <title>index</title>
            <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
            <link rel="shortcut icon" href="images/favicon.png">
            <link rel="apple-touch-icon" href="images/apple-touch-icon.png">
            <link rel="stylesheet" href="css/main.css">
            <script>window.$ = window.jQuery = WLJQ;</script>
        </head>
        <body style="display: none;">
            <div id="AppBody">
                <!-- This is static header, it will be shown always -->
                <div id="header">
                    <h1>CRUD MobileFirst</h1>
                </div>        
 
                <!-- This is a placeholder for dynamic page content -->
                <div id="pagePort"></div>
            </div>
            <script src="js/initOptions.js"></script>
            <script src="js/main.js"></script>
            <script src="js/messages.js"></script>
        </body>
</html>
replace index.html

replace index.html

Step 28

Replace all codes with given codes for each javascript files.

currentPage={};

currentPage.init = function() {
	WL.Logger.debug("AddPage :: init");
};

currentPage.back = function(){
	WL.Logger.debug("AddPage :: back");
	$("#pagePort").load(path + "pages/ListPage.html", function(){
		$.getScript(path + "js/ListPage.js", function() {
			if (currentPage.init) {
				currentPage.init();
			}
		});
	});
};

DetailPage.js

currentPage={};

currentPage.init = function() {
	WL.Logger.debug("DetailPage :: init");
	detailUser();
};

currentPage.back = function(){
	WL.Logger.debug("DetailPage :: back");
	$("#pagePort").load(path + "pages/ListPage.html", function(){
		$.getScript(path + "js/ListPage.js", function() {
			if (currentPage.init) {
				currentPage.init();
			}
		});
	});
};

ListPage.js

currentPage = {};
var busyIndicator = null;

currentPage.init = function(){
	WL.Logger.debug("ListPage :: init");
	busyIndicator = new WL.BusyIndicator('AppBody');
	listUsers();
};

currentPage.loadPage = function(pageIndex){
	WL.Logger.debug("ListPage :: loadPage :: pageIndex: " + pageIndex);
	$("#pagePort").load(path + "pages/" + pageIndex + ".html");
	$.getScript(path + "js/" + pageIndex +".js", function() {
		if (currentPage.init) {
			currentPage.init();
		}
	});
};

main.js

var pagesHistory = [];
var currentPage = {};
var path = "";

function wlCommonInit(){
	// Special case for Windows Phone 8 only.
	if (WL.Client.getEnvironment() == WL.Environment.WINDOWS_PHONE_8) {
	    path = "www/default/";
	}

	$("#pagePort").load(path + "pages/ListPage.html", function(){
		$.getScript(path + "js/ListPage.js", function() {
			if (currentPage.init) {
				currentPage.init();
			}
		});
	});

}
replace javascript files

replace javascript files

Step 29

Replace all codes with given codes for each html files.

AddPage.html

<script>
    $.getScript(path + "js/AddPage.js");
</script>
<p>
    Currently <b>AddPage.html</b> page is loaded.
</p>
 
<input type="button" value="BACK" onclick="currentPage.back();" />

DetailPage.html

<script>
    $.getScript(path + "js/DetailPage.js");
</script>
<p>
    Currently <b>DetailPage.html</b> page is loaded.
</p>
 
<input type="button" value="BACK" onclick="currentPage.back();" />

ListPage.html

<script>
    $.getScript(path + "js/ListPage.js");
</script>
<p>
    Currently <b>ListPage.html</b> page is loaded.
</p>
<input type="button" value="Load Add.html" id="LoadAddButton" onclick="currentPage.loadPage('AddPage');" />
<input type="button" value="Load Detail.html" id="LoadAddButton" onclick="currentPage.loadPage('DetailPage');" />

replace html files

replace html files

Step 30

Right click on CRUDMobileFirst folder > Run As > Build All Environments.

Build All Environments

Build All Environments

Step 31

Repeat step 16 (android) and step 17-19 (iOS) to preview your app.

Step 32

Now we create a MobileFirst adapter for this project. Right clickMobileFirst project and go to New > MobileFirst Adapter.

MobileFirst Adapter

MobileFirst Adapter

Step 33

Select project and adapter type. Enter your adapter name. USERAdapter. Click Finish.

MobileFirst Adapter

MobileFirst Adapter

Step 34

You latest project directory will be like this for MobileFirst adapter.

MobileFirst Adapter

MobileFirst Adapter

Step 35

We will using there URLs for our HTTP request/response. Refer to this tutorial for more understanding.

Step 36

Open USERAdapter.xml. Replace code inside USERAdapter.xml and USERAdapter-impl.js.

USERAdapter.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed Materials - Property of IBM
    5725-I43 (C) Copyright IBM Corp. 2011, 2013. All Rights Reserved.
    US Government Users Restricted Rights - Use, duplication or
    disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
-->
<wl:adapter name="USERAdapter"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:wl="http://www.ibm.com/mfp/integration"
	xmlns:http="http://www.ibm.com/mfp/integration/http">

	<displayName>USERAdapter</displayName>
    <description>USERAdapter</description>
    <connectivity>
        <connectionPolicy xsi:type="http:HTTPConnectionPolicyType">
            <protocol>http</protocol>
            <domain>demo.revivalx.com</domain>
            <port>80</port>
            <!-- Following properties used by adapter's key manager for choosing specific certificate from key store
            <sslCertificateAlias></sslCertificateAlias>
            <sslCertificatePassword></sslCertificatePassword>
            -->
        </connectionPolicy>
    </connectivity>
 
    <procedure name="listUsers"/>
    <procedure name="addUser"/>
    <procedure name="detailUser"/>
    <procedure name="editUser"/>
    <procedure name="deleteUser"/>
</wl:adapter>

USERAdapter-impl.js

function listUsers() {

	var input = {
		    method : 'get',
		    returnedContentType : 'json',
		    path : "worklight/get_all_users.php"
		};

	return WL.Server.invokeHttp(input);
}

function addUser(name,officeNumber,phoneNumber,email) {

	var input = {
		    method : 'get',
		    returnedContentType : 'json',
		    path : "worklight/create_user.php",
		    parameters : {
		    	name:name,
		    	officeNumber:officeNumber,
		    	phoneNumber:phoneNumber,
		    	email:email
		    }
		};

	return WL.Server.invokeHttp(input);
}

function detailUser(userId) {
	var userIdS = userId.toString();
	var input = {
		    method : 'get',
		    returnedContentType : 'json',
		    path : "worklight/get_user_details.php",
		    parameters : {
		    	userId:userIdS
		    }
		};

	return WL.Server.invokeHttp(input);
}

function editUser(userId,name,officeNumber,phoneNumber,email) {
	var userIdS = userId.toString();
	var input = {
		    method : 'get',
		    returnedContentType : 'json',
		    path : "worklight/update_user.php",
		    parameters : {
		    	userId:userIdS,
		    	name:name,
		    	officeNumber:officeNumber,
		    	phoneNumber:phoneNumber,
		    	email:email
		    }
		};

	return WL.Server.invokeHttp(input);
}

function deleteUser(userId) {
	var userIdS = userId.toString();
	var input = {
		    method : 'get',
		    returnedContentType : 'json',
		    path : "worklight/delete_user.php",
		    parameters : {
		    	userId:userIdS
		    }
		};

	return WL.Server.invokeHttp(input);
}

Step 37

Now we deploy MobileFirst adapter and invoke it.

Deploy MobileFirst Adapter

Deploy MobileFirst Adapter

Step 38

Right click on USERAdapter and go to Run As > Call MobileFirst Procedure.

Call MobileFirst Procedure

Call MobileFirst Procedure

Step 39

Select getUsers procedure and Click Run.

Call MobileFirst Procedure

Call MobileFirst Procedure

Step 40

Below is result from http header after we call MobileFirst adapter.

Call MobileFirst Procedure

Call MobileFirst Procedure

Step 41

Now we want to integrate MobileFirst adapter with app. You need to replace all html files and js files so we can call MobileFirst adapter from there.

AddPage.js

currentPage={};

currentPage.init = function() {
	WL.Logger.debug("AddPage :: init");
};

currentPage.back = function(){
	WL.Logger.debug("AddPage :: back");
	$("#pagePort").load(path + "pages/ListPage.html", function(){
		$.getScript(path + "js/ListPage.js", function() {
			if (currentPage.init) {
				currentPage.init();
			}
		});
	});
};

currentPage.add = function(){
	WL.Logger.debug("AddPage :: add");
	busyIndicator = new WL.BusyIndicator('AppBody');
	var name = $("#name").val();
	var officeNumber = $("#officeNumber").val();
	var phoneNumber = $("#phoneNumber").val();
	var email = $("#email").val();
	if(name == ""){
		WL.SimpleDialog.show("Alert","Please enter name",[{text:'OK'}]);
	} else if(officeNumber == ""){
		WL.SimpleDialog.show("Alert","Please enter office number",[{text:'OK'}]);
	} else if(phoneNumber == ""){
		WL.SimpleDialog.show("Alert","Please enter phone number",[{text:'OK'}]);
	} else if(email == ""){
		WL.SimpleDialog.show("Alert","Please enter email",[{text:'OK'}]);
	} else{
		createUser(name,officeNumber,phoneNumber,email);
	}
};

function createUser(name,officeNumber,phoneNumber,email){
	busyIndicator.show();
	var invocationData = {
			adapter : 'USERAdapter',
			procedure : 'addUser',
			parameters : [name,officeNumber,phoneNumber,email]
		};

	WL.Client.invokeProcedure(invocationData,{
		onSuccess : addUserSuccess,
		onFailure : addUserFailure
	});
}

function addUserSuccess(result){
	WL.Logger.debug("Add user success");
	WL.SimpleDialog.show("Success","Add user success",[{text:'OK'}]);
	busyIndicator.hide();
	currentPage.back();
}

function addUserFailure(result){
	WL.Logger.error("Add user failure");
	busyIndicator.hide();
}

DetailPage.js

currentPage={};

currentPage.init = function() {
	WL.Logger.debug("DetailPage :: init");
	detailUser();
};

currentPage.back = function(){
	WL.Logger.debug("DetailPage :: back");
	$("#pagePort").load(path + "pages/ListPage.html", function(){
		$.getScript(path + "js/ListPage.js", function() {
			if (currentPage.init) {
				currentPage.init();
			}
		});
	});
};

currentPage.edit = function() {
	WL.Logger.debug("DetailPage :: edit");
	busyIndicator = new WL.BusyIndicator('AppBody');

	var userId = sessionStorage.userId;
	var name = $("#name").val();
	var officeNumber = $("#officeNumber").val();
	var phoneNumber = $("#phoneNumber").val();
	var email = $("#email").val();
	if(name == ""){
		WL.SimpleDialog.show("Alert","Please enter name",[{text:'OK'}]);
	} else if(officeNumber == ""){
		WL.SimpleDialog.show("Alert","Please enter office number",[{text:'OK'}]);
	} else if(phoneNumber == ""){
		WL.SimpleDialog.show("Alert","Please enter phone number",[{text:'OK'}]);
	} else if(email == ""){
		WL.SimpleDialog.show("Alert","Please enter email",[{text:'OK'}]);
	} else{
		editUser(userId,name,officeNumber,phoneNumber,email);
	}

};

currentPage.remove = function() {
	WL.Logger.debug("DetailPage :: delete");
	busyIndicator = new WL.BusyIndicator('AppBody');
	deleteUser();
};

function detailUser(){
	var userId = sessionStorage.userId;
	busyIndicator.show();
	var invocationData = {
			adapter : 'USERAdapter',
			procedure : 'detailUser',
			parameters : [userId]
		};

	WL.Client.invokeProcedure(invocationData,{
		onSuccess : detailUserSuccess,
		onFailure : detailUserFailure
	});
}

function detailUserSuccess(result){
	WL.Logger.debug("Detail retrieve success");
	busyIndicator.hide();
	if (result.invocationResult.user.length>0) {
		displayUsers(result.invocationResult.user);
	} 

	else
		detailUserFailure();
}

function detailUserFailure(result){
	WL.Logger.error("Detail retrieve failure");
	busyIndicator.hide();
	WL.SimpleDialog.show("CRUD MobileFirst", "Cannot retrieve detail. Please check your internet connectivity.",
	[{
		text : 'Reload App',
		handler : WL.Client.reloadApp
	}]);
}

function displayUsers(user){
	$('#name').val(user[0].name);
	$('#officeNumber').val(user[0].officeNumber);
	$('#phoneNumber').val(user[0].phoneNumber);
	$('#email').val(user[0].email);
}

function editUser(userId,name,officeNumber,phoneNumber,email){
	busyIndicator.show();
	var invocationData = {
			adapter : 'USERAdapter',
			procedure : 'editUser',
			parameters : [userId,name,officeNumber,phoneNumber,email]
		};

	WL.Client.invokeProcedure(invocationData,{
		onSuccess : editUserSuccess,
		onFailure : editUserFailure
	});
}

function editUserSuccess(result){
	WL.Logger.debug("Edit success");
	busyIndicator.hide();
	WL.SimpleDialog.show("Success","Edit user success",[{text:'OK'}]);
	busyIndicator.hide();
	currentPage.back();
}

function editUserFailure(result){
	WL.Logger.error("Edit failure");
	busyIndicator.hide();
	WL.SimpleDialog.show("CRUD MobileFirst", "Cannot edit. Please check your internet connectivity.",
	[{
		text : 'Reload App',
		handler : WL.Client.reloadApp
	}]);
}

function deleteUser(){
	var userId = sessionStorage.userId;
	busyIndicator.show();
	var invocationData = {
			adapter : 'USERAdapter',
			procedure : 'deleteUser',
			parameters : [userId]
		};

	WL.Client.invokeProcedure(invocationData,{
		onSuccess : deleteUserSuccess,
		onFailure : deleteUserFailure
	});
}

function deleteUserSuccess(result){
	WL.Logger.debug("Detail retrieve success");
	busyIndicator.hide();
	WL.SimpleDialog.show("Success","Delete user success",[{text:'OK'}]);
	busyIndicator.hide();
	currentPage.back();
}

function deleteUserFailure(result){
	WL.Logger.error("Delete failure");
	busyIndicator.hide();
	WL.SimpleDialog.show("CRUD MobileFirst", "Cannot delete. Please check your internet connectivity.",
	[{
		text : 'Reload App',
		handler : WL.Client.reloadApp
	}]);
}

ListPage.js

currentPage = {};
var busyIndicator = null;

currentPage.init = function(){
	WL.Logger.debug("ListPage :: init");
	busyIndicator = new WL.BusyIndicator('AppBody');
	listUsers();
};

currentPage.loadPage = function(pageIndex){
	WL.Logger.debug("ListPage :: loadPage :: pageIndex: " + pageIndex);
	$("#pagePort").load(path + "pages/" + pageIndex + ".html");
	$.getScript(path + "js/" + pageIndex +".js", function() {
		if (currentPage.init) {
			currentPage.init();
		}
	});
};

currentPage.detailPage = function(userId){
	sessionStorage.setItem("userId", userId);
	$("#pagePort").load(path + "pages/DetailPage.html");
	$.getScript(path + "js/DetailPage.js", function() {
		if (currentPage.init) {
			currentPage.init();
		}
	});
};

function listUsers(){
	busyIndicator.show();
	var invocationData = {
			adapter : 'USERAdapter',
			procedure : 'listUsers',
			parameters : []
		};

	WL.Client.invokeProcedure(invocationData,{
		onSuccess : listUsersSuccess,
		onFailure : listUsersFailure
	});
}

function listUsersSuccess(result){
	WL.Logger.debug("List retrieve success");
	busyIndicator.hide();
	if (result.invocationResult.users.length>0) {
		displayUsers(result.invocationResult.users);
	} 

	else
		listUsersFailure();
}

function listUsersFailure(result){
	WL.Logger.error("List retrieve failure");
	busyIndicator.hide();
	WL.SimpleDialog.show("CRUD MobileFirst", "Cannot retrieve list. Please check your internet connectivity.",
	[{
		text : 'Reload App',
		handler : WL.Client.reloadApp
	}]);
}

function displayUsers(users){
	var ul = $('#itemsList');
	var html ='';
	$.each(users, function(index, item) {
		html += '

<li><a onclick="currentPage.detailPage('+item.userId+');" >';
		html += '

<h4>' + item.name + '</h4>


';
		html += '

' + item.email + '

';
		html += '</a></li>


';

	});

	ul.append(html);
}

Main.js

var pagesHistory = [];
var currentPage = {};
var path = "";

function wlCommonInit(){
	// Special case for Windows Phone 8 only.
	if (WL.Client.getEnvironment() == WL.Environment.WINDOWS_PHONE_8) {
	    path = "www/default/";
	}

	$("#pagePort").load(path + "pages/ListPage.html", function(){
		$.getScript(path + "js/ListPage.js", function() {
			if (currentPage.init) {
				currentPage.init();
			}
		});
	});

}

AddPage.html

<script>
 	$.getScript(path + "js/AddPage.js");
</script>


	Currently <b>AddPage.html</b> page is loaded.



<input type="button" value="BACK" onclick="currentPage.back();" />



<div id="addUser">
	Name:
	<input name="name" type="text" id="name"/>
	Office Number:
	<input name="officeNumber" type="text" id="officeNumber"/>
	Phone Number:
	<input name="phoneNumber" type="text" id="phoneNumber"/>
	Email:
	<input name="email" type="text" id="email"/>
</div>





<div id="addButton">
	<input type="button" value="ADD USER" onclick="currentPage.add();">
</div>


DetailPage.html

<script>
 	$.getScript(path + "js/DetailPage.js");
</script>


	Currently <b>DetailPage.html</b> page is loaded.



<input type="button" value="BACK" onclick="currentPage.back();" />



<div id="addUser">
	Name:
	<input name="name" type="text" id="name"/>
	Office Number:
	<input name="officeNumber" type="text" id="officeNumber"/>
	Phone Number:
	<input name="phoneNumber" type="text" id="phoneNumber"/>
	Email:
	<input name="email" type="text" id="email"/>
</div>





<div id="editButton">
	<input type="button" value="EDIT USER" onclick="currentPage.edit();">
</div>





<div id="deleteButton">
	<input type="button" value="DELETE USER" onclick="currentPage.remove();">
</div>


ListPage.html

<script>
	$.getScript(path + "js/ListPage.js");
</script>


	Currently <b>ListPage.html</b> page is loaded.


<input type="button" value="Load Add.html" id="LoadAddButton" onclick="currentPage.loadPage('AddPage');" />


<ul id="itemsList"></ul>


Step 42

Repeat step 31 to preview your app.

You can find the source code here: https://github.com/IntellijSys/CRUD-MobileFirst

IBM MobileFirst Installation on Eclipse

Before you start this setup, you must have eclipse Juno SR2, Luna or Mars. Eclipse Keplar not compatible with MobileFirst. Eclipse Helios is only for PHP development, not suitable for MobileFirst. Same go to ADT bundle tool (Android Development Tool). Open your eclipse (for this tutorial we will using Mars).

https://eclipse.org/downloads/

Click Help and select Eclipse Marketplace.

Eclipse Marketplace

Eclipse Marketplace

Search for mobilefirst and click Install for IBM MobileFirst Platform Studio 7.1.0.

eclipse marketplace

eclipse marketplace

Select all and click Confirm.

eclipse marketplace

eclipse marketplace

Select I accept the terms of the license agreement. Click Finish.

eclipse marketplace

eclipse marketplace

Wait until it finish installing.

installing software

installing software

Click Yes to restart.

restart eclipse

restart eclipse

Your MobileFirst is ready use.

OpenCV training using Python

Introduction to Computer Vision for Robotics

Course Overview:

Computer vision is fast becoming a major component of a robotics system. With the capability to process and analyse visual data, the robot is able to ‘see’ and perceive its surrounding, thus completing tasks that are beyond imaginable limits of non-visual robots. Incorporating computer vision is the crucial next step in advancing your robotics systems.

This course will introduce the basic principles of computer vision, with emphasis on applications in robotics. The participants will learn the theories behind how computers capture 2D images and translate them into meaningful 3D information. Hands-on, practical exercises will be plenty, where participants will develop algorithms and control a mobile robot to perform tasks such as obstacle avoidance, ball tracking and target recognition, using no other sensors but a webcam.

Participants will be using the OpenCV library in the Python programming language. OpenCV is widely used in computer vision developments, as it hosts a large number of useful tools and algorithms. Python is the preferred language as it is easy to learn, and has great integration with OpenCV. This combination also has a world-wide supportive online community, providing contents, guidelines and tutorials for our advantage.

opencv-python

opencv-python

More details: https://www.eventbrite.com/e/opencv-training-using-python-tickets-21141781638