IT job opportunities available and ready for hire.

INTELLIJ SYSTEM SOLUTION SDN. BHD.

Currently, we have a few of job opportunities available and ready for hire.

Open Positions:
1. Senior Front End Developer (2) – RM5500 – RM10500
2. Senior PHP Developer (1) – RM7500 – RM10500
3. Senior .NET Developer (4) – Up to RM6500
4. Web Developer (2) – RM1500 – RM10500
5. Android Developer (2)​ – RM1500 – RM9000
6. Front-End Developer (3) – RM1500 – RM5500
7. Java Developer (2) – RM1500 – RM14000
8. Javascript Developer (2) – RM1500 – RM5500
9. Junior .NET Developer (2) – Up to RM5500
10. Full Stack Developer (1) – RM2500 and above
11. PHP Developer (1) – RM1500 – RM7500
12. iOS Developer (1) – RM1500 – RM9000
13. Python Developer (1) – RM2500 – RM6500

Job description – http://intellij.my/job_description.pdf

Please fill up this form for those interested ( https://goo.gl/forms/vCPd75T6oPYNmBBW2 ) if you are interested.

#Intellij #Soding

Programming Syntax

Programming Syntax

IT job opportunities available and ready for hire.

Currently, we have a few of job opportunities available and ready for hire.

Open Positions:
1. Senior Front End Developer (2) – RM9501 – RM10500
2. Senior PHP Developer (1) – RM7501 – RM8500
3. Senior .NET Developer (4) – RM7501 – RM8500
4. Web Developer (2) – RM2501 – RM3500
5. Android Developer (2)​ – RM3501 – RM4500
6. Front-End Developer (3) – RM5501 – RM6500
7. Java Developer (2) – RM3000 – RM15000
8. Javascript Developer (2) – RM2501 – RM6000
9. Junior .NET Developer (2) – RM3501 – RM4500
10. Full Stack Developer (1) – RM9501 – RM10500
11. PHP Developer (1) – RM2501 – RM3500
12. iOS Developer (0)

Job Description – Will be given after submission.

Please fill up this form for those interested ( https://goo.gl/forms/vCPd75T6oPYNmBBW2 ) if you are interested.

#Intellij #Soding

Building a Sentiment Analysis using Python

Getting Started.

Install python into your local machine. Install TextBlob >= 8.0.

pip install -U textblob nltk
TextBlob >= 8.0

TextBlob >= 8.0

Step 1
Our first classifier will be a basic sentiment analyzer trained on a sample tweets dataset. To start, we’ll import the textblob.classifiers and make some training and test data.

Step 2
We make another classifier by passing training data into the constructor for a NaiveBayesClassifier.

Step 3
We can now classify self-assertive content utilizing the NaiveBayesClassifier.classify(text) approach.

Step 4
Let’s check the accuracy on the test set.

Step 5
We can also find the most informative features.

#STEP 1
from textblob.classifiers import NaiveBayesClassifier

train = [
    ('I love this sandwich.', 'pos'),
    ('This is an amazing place!', 'pos'),
    ('I feel very good about these beers.', 'pos'),
    ('This is my best work.', 'pos'),
    ("What an awesome view", 'pos'),
    ('I do not like this restaurant', 'neg'),
    ('I am tired of this stuff.', 'neg'),
    ("I can't deal with this", 'neg'),
    ('He is my sworn enemy!', 'neg'),
    ('My boss is horrible.', 'neg')
]
test = [
    ('The beer was good.', 'pos'),
    ('I do not enjoy my job', 'neg'),
    ("I ain't feeling dandy today.", 'neg'),
    ("I feel amazing!", 'pos'),
    ('Gary is a friend of mine.', 'pos'),
    ("I can't believe I'm doing this.", 'neg')
]

#STEP 2
cl = NaiveBayesClassifier(train)

#STEP 3
cl.classify("Their burgers are amazing")  # "pos"
cl.classify("I don't like their pizza.")  # "neg"

#STEP 4
cl.accuracy(test)

#STEP 5
cl.show_informative_features(5)
Sentiment Analysis output

Sentiment Analysis output

Reference: http://stevenloria.com/how-to-build-a-text-classification-system-with-python-and-textblob/

Important of Github

Scouring for talents on GitHub, our AI engine found that this talent has the right quality for recommendation to our clients (hiring employers). After communicating with him, we found out that he just completed his diploma and will further his studies soon, so he had to reject the offer. This goes to show that your commitment and contribution on GitHub do not go unnoticed. For software developers, this should be your first reference to demonstrate how good you are with your coding skills, while resume and experience comes second.

For those who do not have GitHub profile and want to look for job, you can sign up as talent from the link below, and we will send an assessment for you to answer. But my advice is to start building your GitHub profile sooner rather than later, because from what we have seen, some employers do not only consider your GitHub profile as first reference, sometimes it can be THE ONLY reference.

https://goo.gl/forms/mM55TUglN4br427n2

Soding Candidate Testimonial

Soding Candidate Testimonial

Simple app using cordova and ratchet 2.

Download the required software packages

Download and install Eclipse Neon and Xcode 7 (if you using Mac for mobile development).

Eclipse Neon – http://www.eclipse.org/neon/
JDK 1.8 – http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Xcode 7 – https://developer.apple.com/xcode/downloads/
Sublime Text – https://www.sublimetext.com/3

Setup ADT and Android SDK into your eclipse. Then you need to setup cordova using NPM (node package manager) from that link.  Download Node.js (https://nodejs.org/en/) and install cordova after that. Open terminal/command line and type this command to install cordova into your machine.

npm install -g cordova

Download Jquery and Ratchet from their official website. You should unzip it to proper location. For this tutorial, we using Jquery 3.1.1 and Ratchet 2.0.2.

Setting up your development environment

Create a cordova project using command below in your terminal/cmd:

cordova create com.intellij.cordova.todolist.v2

Open config.xml inside com.intellij.cordova.todolist.v2 folder and replace with this code.

config.xml

config.xml

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.intellij.cordova.todolist.v2" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>ToDoList</name>
    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>
    <author email="dev@cordova.apache.org" href="http://cordova.io">
        Apache Cordova Team
    </author>
    <content src="index.html" />
    <plugin name="cordova-plugin-whitelist" spec="1" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <platform name="android">
        <allow-intent href="market:*" />
    </platform>
    <platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
    </platform>
</widget>

Add platform for iOS and android.

cordova platform add ios
cordova platform add android
cordova platform add android

cordova platform add android

 

cordova platform add ios

cordova platform add ios

Preview your app (android)

Import android project into your eclipse.

import cordova project

import cordova project

Select AndroidExisting Android Code Into Workspace.

import existing android code into workspace

import existing android code into workspace

Browse your project and click Finish.

import android project

import android project

Run android app in your mobile device.

Preview your app (ios)

Go to your project directory and browse for xcode project, platforms > ios > CordovaRatchet.xcodeproj then run xcode project. Click Play on top left side to preview the app on your simulator.

xcode project

xcode project

Learning client side API and building a multi page application

Open cordova project in Sublime Text editor. Right click js folder on your project. Select New File.

New Javascript File

Add New Javascript File

Create 4 javascript files.

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

Right click www folder and select New Folder to create a new folder. Name it pages and save it.

Add New Folder

Add New Folder

Then create a few of html pages inside page folder that we already created just now. Right click pages folder and select New File.

Add New HTML File

Add New HTML File

Create 3 html files and click Finish. Repeat.

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

Copy Jquery javascript files that you already extract from proper location into js folder. Go to extracted Ratchet directory and select/copy all folders inside ratchet-2.0.2 > dist. Then paste it inside www folder.

latest cordova project directory

latest cordova project directory

Open your index.html and replace with this code.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
 
    <!-- Sets initial viewport load and disables zooming -->
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
 
    <!-- Makes your prototype chrome-less once bookmarked to your phone's home screen -->
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
 
    <!-- Include the compiled Ratchet CSS -->
    <link href="css/ratchet.css" rel="stylesheet">
    <script src="cordova.js" type="text/javascript"></script>
    <script src="js/jquery-3.1.1.min.js"></script>
    <script src="js/ratchet.js"></script>
    <script src="js/main.js"></script>
  </head>
  <body onload="init()">
 
  </body>
</html>

Replace all codes with given codes for each javascript files.

AddPage.js

currentPage={};

currentPage.init = function() {
    console.log("AddPage :: init");
};

currentPage.back = function(){
    console.log("AddPage :: back");
    $("body").load(path + "pages/ListPage.html", function(){
        $.getScript(path + "js/ListPage.js", function() {
            if (currentPage.init) {
                currentPage.init();
            }
        });
    });
};

DetailPage.js

currentPage={};

currentPage.init = function() {
    console.log("DetailPage :: init");
};

currentPage.back = function(){
    console.log("DetailPage :: back");
    $("body").load(path + "pages/ListPage.html", function(){
        $.getScript(path + "js/ListPage.js", function() {
            if (currentPage.init) {
                currentPage.init();
            }
        });
    });
};

ListPage.js

currentPage = {};

currentPage.init = function(){
    console.log("ListPage :: init");
};

currentPage.loadPage = function(pageIndex){
    console.log("ListPage :: loadPage :: pageIndex: " + pageIndex);
    $("body").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 init(){

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

}

Replace all codes with given codes for each html files.

AddPage.html

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

<header class="bar bar-nav">
	<a class="icon icon-left-nav pull-left" onclick="currentPage.back();"></a>
  	<h1 class="title">AddPage</h1>
</header>

DetailPage.html

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

<header class="bar bar-nav">
	<a class="icon icon-left-nav pull-left" onclick="currentPage.back();"></a>
  	<h1 class="title">DetailPage</h1>
</header>

ListPage.html

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

<header class="bar bar-nav">
	<button id="LoadAddButton" class="btn pull-right" onclick="currentPage.loadPage('AddPage');">Load Add.html</button>
  	<h1 class="title">ListPage</h1>
</header>

<div class="content">
<div class="content-padded">
    <button id="LoadDetailButton" class="btn btn-positive btn-block" onclick="currentPage.loadPage('DetailPage');">Load Detail.html</button>
</div>
</div>

Preview your app using previous steps.

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

AddPage.js

currentPage = {};
currentPage.init = function() {
    console.log("AddPage :: init");
};
currentPage.back = function() {
    console.log("AddPage :: back");
    $("body").load(path + "pages/ListPage.html", function() {
        $.getScript(path + "js/ListPage.js", function() {
            if (currentPage.init) {
                currentPage.init();
            }
        });
    });
};
currentPage.add = function() {
    console.log("AddPage :: add");
    var name = $("#name").val();
    var description = $("#description").val();
    formData = {
        name: $("#name").val(),
        description: $("#description").val()
    }
    if (name == "") {
        alert("Please enter name");
    } else if (description == "") {
        alert("Please enter description");
    } else {
        $.ajax({
            type: "post",
            url: "http://demo.revivalx.com/todolist-api/create_task.php",
            data: formData,
            dataType: "json",
            success: function(data) {
                alert("Add task success");
                $("body").load(path + "pages/ListPage.html", function() {
                    $.getScript(path + "js/ListPage.js", function() {
                        if (currentPage.init) {
                            currentPage.init();
                        }
                    });
                });
            },
            error: function() {
                alert("Add task failure");
            }
        });
    }
};

DetailPage.js

currentPage = {};
currentPage.init = function() {
    console.log("DetailPage :: init");
    detailTask();
};
currentPage.back = function() {
    console.log("DetailPage :: back");
    $("body").load(path + "pages/ListPage.html", function() {
        $.getScript(path + "js/ListPage.js", function() {
            if (currentPage.init) {
                currentPage.init();
            }
        });
    });
};
currentPage.edit = function() {
    console.log("DetailPage :: edit");
    var taskId = sessionStorage.taskId;
    var name = $("#name").val();
    var description = $("#description").val();
    formData = {
        taskId: sessionStorage.taskId,
        name: $("#name").val(),
        description: $("#description").val()
    }
    if (name == "") {
        alert("Please enter name");
    } else if (description == "") {
        alert("Please enter description");
    } else {
        $.ajax({
            type: "post",
            url: "http://demo.revivalx.com/todolist-api/update_task.php",
            data: formData,
            dataType: "json",
            success: function(data) {
                alert("Edit task success");
                $("body").load(path + "pages/ListPage.html", function() {
                    $.getScript(path + "js/ListPage.js", function() {
                        if (currentPage.init) {
                            currentPage.init();
                        }
                    });
                });
            },
            error: function() {
                alert("Edit task failure");
            }
        });
    }
};

function detailTask() {
    formData = {
        taskId: sessionStorage.taskId
    }
    $.ajax({
        type: "get",
        url: "http://demo.revivalx.com/todolist-api/get_task_details.php",
        data: formData,
        dataType: "json",
        success: function(data) {
            $('#name').val(data.task[0].name);
            $('#description').val(data.task[0].description);
        },
        error: function() {
            alert("Detail task failure");
        }
    });
}
currentPage.remove = function() {
    console.log("DetailPage :: delete");
    deleteTask();
};

function deleteTask() {
    formData = {
        taskId: sessionStorage.taskId
    }
    $.ajax({
        type: "post",
        url: "http://demo.revivalx.com/todolist-api/delete_task.php",
        data: formData,
        dataType: "json",
        success: function(data) {
            alert("Delete task success");
            $("body").load(path + "pages/ListPage.html", function() {
                $.getScript(path + "js/ListPage.js", function() {
                    if (currentPage.init) {
                        currentPage.init();
                    }
                });
            });
        },
        error: function() {
            alert("Delete task failure");
        }
    });
}

ListPage.js

currentPage = {};
currentPage.init = function() {
    console.log("ListPage :: init");
    listTasks();
};
currentPage.loadPage = function(pageIndex) {
    console.log("ListPage :: loadPage :: pageIndex: " + pageIndex);
    $("body").load(path + "pages/" + pageIndex + ".html");
    $.getScript(path + "js/" + pageIndex + ".js", function() {
        if (currentPage.init) {
            currentPage.init();
        }
    });
};
currentPage.detailPage = function(taskId) {
    sessionStorage.setItem("taskId", taskId);
    $("body").load(path + "pages/DetailPage.html");
    $.getScript(path + "js/DetailPage.js", function() {
        if (currentPage.init) {
            currentPage.init();
        }
    });
};

function listTasks() {
    $.ajax({
        type: "get",
        url: "http://demo.revivalx.com/todolist-api/get_all_tasks.php",
        dataType: "json",
        success: function(data) {
            var ul = $('#taskList');
            var html = '';
            $.each(data.tasks, function(index, item) {
                html += '<li class="table-view-cell">';
                html += '<a class="navigate-right" onclick="currentPage.detailPage(' + item.taskId + ');" >';
                html += item.name;
                html += '</a></li>';
            });
            ul.append(html);
        },
        error: function() {
            alert("List task failure");
        }
    });
}

AddPage.html

<script>
    $.getScript(path + "js/AddPage.js");
</script>
  
<header class="bar bar-nav">
    <a class="icon icon-left-nav pull-left" onclick="currentPage.back();"></a>
    <h1 class="title">AddPage</h1>
</header>
<div class="content">
	<div class="card">
    <ul class="table-view">
        <li class="table-view-cell table-view-divider">Name:</li>
 
        <li class="table-view-cell"><input id="name" name="name" type="text"></li>
 
        <li class="table-view-cell table-view-divider">Description:</li>
 
        <li class="table-view-cell"><input id="description" name="description" type="text"></li>
 
        <li class="table-view-cell"></li>
    </ul>
   </div>
    <div class="card" style="margin-bottom:40px;">
    	<button class="btn btn-positive btn-block" onclick="currentPage.add();">ADD TASK</button>
    </div>
</div>

DetailPage.html

<script>
    $.getScript(path + "js/DetailPage.js");
</script>
 
<header class="bar bar-nav">
    <a class="icon icon-left-nav pull-left" onclick="currentPage.back();"></a>
    <h1 class="title">DetailPage</h1>
</header>
 
<div class="content">
	<div class="card">
    <ul class="table-view">
        <li class="table-view-cell table-view-divider">Name:</li>
 
        <li class="table-view-cell"><input id="name" name="name" type="text"></li>
 
        <li class="table-view-cell table-view-divider">Description:</li>
 
        <li class="table-view-cell"><input id="description" name="description" type="text"></li>
 
    </ul>
   </div>
   <div class="card" style="margin-bottom:40px;">
    	<button class="btn btn-positive btn-block" onclick="currentPage.edit();">EDIT TASK</button>
   </div>
   <div class="card" style="margin-bottom:40px;">
    	<button class="btn btn-negative btn-block" onclick="currentPage.remove();">REMOVE TASK</button>
   </div> 
</div>

ListPage.html

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

<header class="bar bar-nav">
	<button id="LoadAddButton" class="btn pull-right" onclick="currentPage.loadPage('AddPage');">Add</button>
  	<h1 class="title">ListPage</h1>
</header>

<div class="content">
	<ul id="userList" class="table-view"></ul>
</div>

Build and run your app. You can find the source code here: https://github.com/IntellijSys/com.intellij.cordova.todolist.v2

Building a Hybrid Mobile app using Ionic Framework

Getting started with Ionic Framework. This tutorial show you how to do simple CRUD operation using Ionic Framework. What you need for this tutorial are

Outline that cover for this tutorial:

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

Setting up your development environment

After that, install node.js to use npm for package manager. If you not install node.js, you should not be able to invoke node or npm on your command line to install Ionic Framework. Then install Ionic Framework using terminal or command prompt.

npm install -g cordova ionic

After you finish install the Ionic Framework. You can start create your project using Ionic command. Open your terminal/command prompt, type these command.

ionic start IonicToDoList tabs
ionic start IonicToDoList tabs

ionic start IonicToDoList tabs

Open Ionic project with Sublime.

Ionic project with Sublime Text

Ionic project with Sublime Text

Open config.xml and replace with this id.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<widget id="com.ionicframework.ionictodolist" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
  <name>IonicToDoList</name>
  <description>
        An Ionic Framework and Cordova project.
    </description>
  <author email="you@example.com" href="http://example.com.com/">
      Your Name Here
    </author>
  <content src="index.html"/>
  <access origin="*"/>
  <preference name="webviewbounce" value="false"/>
  <preference name="UIWebViewBounce" value="false"/>
  <preference name="DisallowOverscroll" value="true"/>
  <preference name="SplashScreenDelay" value="2000"/>
  <preference name="FadeSplashScreenDuration" value="2000"/>
  <preference name="android-minSdkVersion" value="16"/>
  <preference name="BackupWebStorage" value="none"/>
  <preference name="SplashScreen" value="screen"/>
  <feature name="StatusBar">
    <param name="ios-package" value="CDVStatusBar" onload="true"/>
  </feature>
</widget>

Build android and iOS app using this command.

cd IonicToDoList
ionic platform add android
ionic platform add ios
sudo ionic platform add android

sudo ionic platform add android

Preview your app (android)

Open your eclipse. Select File > Import.

import android project

import android project

Select Existing Android Code Into Workspace. Click Next.

import android project

import android project

Click Browse to select android project and click Finish.

import android project

import android project

Run android app in android simulator.

Preview your app (iOS)

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

Xcode

Xcode

Open app.js file in www/js folder. Replace with this code.

angular.module('starter', ['ionic', 'starter.controllers', 'starter.services'])

.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    if (window.cordova &amp;&amp; window.cordova.plugins &amp;&amp; window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
      cordova.plugins.Keyboard.disableScroll(true);

    }
    if (window.StatusBar) {
      StatusBar.styleDefault();
    }
  });
})

.config(function($stateProvider, $urlRouterProvider, $ionicConfigProvider) {
  $stateProvider

    .state('tab', {
    url: '/tab',
    abstract: true,
    templateUrl: 'templates/tabs.html'
  })

  .state('tab.list', {
      url: '/list',
      views: {
        'tab-list': {
          templateUrl: 'templates/list.html',
          controller: 'ListCtrl'
        }
      }
    })
    .state('tab.detail', {
      url: '/detail/:taskId',
      views: {
        'tab-detail': {
          templateUrl: 'templates/detail.html',
          controller: 'DetailCtrl'
        }
      }
    })

  .state('tab.add', {
    url: '/add',
    views: {
      'tab-add': {
        templateUrl: 'templates/add.html',
        controller: 'AddCtrl'
      }
    }
  });

  $urlRouterProvider.otherwise('/tab/list');

})

.directive("initFromForm", function ($parse) {
    return {
        link: function (scope, element, attrs) {
            var attr = attrs.initFromForm || attrs.ngModel || element.attrs('name'),
            val = attrs.value;
            $parse(attr).assign(scope, val);
        }
    };
});

Open services.js file in www/js folder. Replace with this code.

angular.module('starter.services', [])

.factory('todoService', function($http) {
    var baseUrl = 'http://demo.revivalx.com/todolist-api/';
    return {
        getAll: function() {
            return $http.get(baseUrl+'get_all_tasks.php');
        },
        getId: function (taskId){
            return $http.get(baseUrl+'get_task_details.php?taskId='+taskId); 
        },
        create: function (data){
            return $http.post(baseUrl+'create_task.php',data,{
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8;'
                }
            });
        },
        update: function (data){
            return $http.post(baseUrl+'update_task.php',data,{
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8;'
                }
            });
        },
        delete: function  (taskId){
            return $http.get(baseUrl+'delete_task.php?id='+taskId);
        }
    };
    
});

Open controllers.js file in www/js folder. Replace with this code.

angular.module('starter.controllers', [])

.controller('tabCtrl', function($scope){
})

.controller('ListCtrl', function($scope,$state, todoService){
    $scope.showData = function() {
      todoService.getAll().success(function(data) {
            $scope.datatodos = data;
        }).finally(function() {
            $scope.$broadcast('scroll.refreshComplete');
        });
    };
    $scope.showData();
    
    $scope.reload = function (){
        $state.go('tab.list');
    };
    
    $scope.delete = function (datatodo){
        todoService.delete(datatodo.taskId);
        $scope.datatodos.splice($scope.datatodos.indexOf(datatodo),1);
    };
})

.controller('AddCtrl', function($scope,$ionicPopup,todoService){
    $scope.showAlert = function(msg) {
      $ionicPopup.alert({
          title: msg.title,
          template: msg.message,
          okText: 'Ok',
          okType: 'button-positive'
      });
    };
    
    $scope.datatodo={};
    $scope.save = function (){
        if (!$scope.datatodo.name){
            $scope.showAlert({
                title: "Information",
                message: "Name is required"
            });
        }else if (!$scope.datatodo.description){
            $scope.showAlert({
                title: "Information",
                message: "Description is required"
            });
        }else{
            todoService.create({
                name: $scope.datatodo.name,
                description: $scope.datatodo.description,
            }).success(function(data){
                $scope.showAlert({
                    title: "Information",
                    message: "Successfully recorded"
                });
            });
        }
        
    };
       
})

.controller('DetailCtrl', function($scope,$stateParams,$ionicPopup,$ionicModal,$state,todoService){
        
    $scope.showDataId = function() {
      todoService.getId($stateParams.taskId).success(function(datatodo) {
            $scope.datatodo = datatodo;
        });
        
    };
    $scope.showDataId();
    
    $scope.back = function (){
        $state.go('tab.list');
    };
    
    $ionicModal.fromTemplateUrl('edit.html', function(modal){
        $scope.taskModal = modal;
  }, {
            scope : $scope,
            animation : 'slide-in-up' 
  });
        
        $scope.showAlert = function(msg) {
            $ionicPopup.alert({
                title: msg.title,
                template: msg.message,
                okText: 'Ok',
                okType: 'button-positive'
            });
          };
  
  $scope.editModal = function(){
            $scope.taskModal.show();
  };
  
  $scope.cancel = function(){
            $scope.taskModal.hide();
            $scope.showDataId();
  };
        
  $scope.edit = function(taskId,name,description){
            if (!taskId){
                $scope.showAlert({
                    title: "Information",
                    message: "Id is required"
                });
            }else if (!name){
                $scope.showAlert({
                    title: "Information",
                    message: "Name is required"
                });
            }else if(!description){
                $scope.showAlert({
                    title: "Information",
                    message: "Description is required"
                });
            }else{
                $scope.id = id;
                $scope.name = name;
                $scope.description = description;
                todoService.update({
                    'id' : id,
                    'name': name,
                    'description': description,
                }).then(function(resp) {
                  console.log('Success', resp);
                  $scope.showAlert({
                        title: "Information",
                        message: "Successfully updated"
                    });
                },function(err) {
                  console.error('Error', err);
                }); 
            }
  };
  
});

Delete all the html files in www/templates and create these all 4 files.

  1. add.html.
  2. detail.html.
  3. list.html.
  4. tabs.html.

Replace all codes with given codes for each html files.

tabs.html

<ion-tabs class="tabs-icon-top tabs-color-active-positive">

  <ion-tab title="Status" icon-off="ios-list" icon-on="ion-ios-pulse-strong" href="#/tab/list">
    <ion-nav-view name="tab-list"></ion-nav-view>
  </ion-tab>

  <ion-tab title="Status" icon-off="ios-add" icon-on="ion-ios-pulse-strong" href="#/tab/add">
    <ion-nav-view name="tab-add"></ion-nav-view>
  </ion-tab>

</ion-tabs>

list.html

<ion-header-bar class="bar-positive">
        <button class="button button-icon icon ion-ios7-minus-outline" ng-click="data.showDelete = 
        !data.showDelete; data.showReorder=false"></button>
        <h1 class="title">ToDo List</h1>
        <button class="button button-icon icon ion-ios7-loop" ng-click="reload()"></button>
</ion-header-bar>
<ion-view>
    <ion-content padding="false" class="has-header">
        <ion-refresher
            pulling-text="Pull to refresh..."
            on-refresh="showData()">
          </ion-refresher>
        <ion-list show-Delete = "data.showDelete" show-Reorder = "data.showReorder">
            <ion-item class="item-avatar item-icon-right" ng-repeat="datatodo in datatodos" type="item-text-wrap" href="#/tab/detail/{{datatodo.taskId}}">
                <i class="icon ion-ios7-arrow-right"></i>
                <h2>{{datatodo.name}}
                    <br> 
                    <font size="2" color="gray" >Description : {{datatodo.description}}</font>
                </h2>
                <ion-delete-button class="ion-minus-circled" ng-click="delete(datatodo);"></ion-delete-button>
            </ion-item>
        </ion-list>
    </ion-content>
</ion-view>

add.html

<ion-header-bar class="bar-positive">
        <h1 class="title">Add Task</h1>
</ion-header-bar>
<ion-content class="padding">
      <form>
        <ion-list>
            <label class="item item-input">
                <input type="text" ng-model="datatodo.name" placeholder="Name">
            </label>
            <label class="item item-input">
                <input type="text" ng-model="datatodo.description" placeholder="Description">
            </label>
        </ion-list>
        <div class="spacer" style="height: 5px;"></div>
        <button class="button icon ion-person-stalker button-balanced button-block" ng-click="save();"> Save</button>
    </form>
</ion-content>

detail.html

<ion-header-bar class="bar-positive">
        <button class="button button-icon icon ion-ios7-arrow-left" ng-click="back();">Back</button>
        <h1 class="title">Task Detail</h1>
</ion-header-bar>
<ion-content class="padding" ng-repeat="datatodo in datatodo">
    <h3>Detail :</h3>
    <p>
        <font size="2" color="gray" >Nama : {{datatodo.name}}</font>
    <br>
        <font size="2" color="gray" >Description : {{datatodo.description}}</font>
    </p>
    <button class="button button-balanced button-block" ng-click="editModal()">Edit Task</button>
</ion-content>
<script id="edit.html" type="text/ng-template">
        <div class="modal">
            <ion-header-bar class="bar-stable">
                <button class="button button-icon icon ion-ios7-close-outline" ng-click="cancel()"></button>
                <h1 class="title"> Edit Task</h1>
            </ion-header-bar>
            <ion-content ng-repeat="datatodo in datatodo">
                <form>
                    <div class="list">
                        <label class="item item-input">
                        <span class="input-label">ID :</span>
                            <input type="text" placeholder="{{datatodo.taskId}}" ng-model="id" value="{{datatodo.id}}" init-from-form>
                            <p>{{datatodo.taskId}}</p>
                        </label>
                        <label class="item item-input">
                        <span class="input-label">Name :</span>
                            <input type="text" placeholder="{{datatodo.name}}" ng-model="name" value="{{datatodo.name}}" init-from-form>
                        </label>
                        <label class="item item-input">
                        <span class="input-label">Description :</span>
                            <input type="text" placeholder="{{datatodo.description}}" ng-model="description" value="{{datatodo.description}}" init-from-form>
                        </label>
                        <button class="button button-positive button-block" ng-click="edit(taskId,name,description);">
                            Save
                        </button>
                    </div>
                </form>
        </ion-content>
        </div>
</script>

Build your project using this command and run the app.

ionic build ios
ionic build android

Swift iOS 9 iPhone Accelerator Application

Open Xcode and select Create a new Xcode project.

Welcome to Xcode

Welcome to Xcode

Select Single View Application and click Next.

Single View Application

Single View Application

For product name, use IntellijSwiftAccelerator and then fill out the Organization Name and Organization Identifier with your customary values. Enter Swift as Language and make sure only iPhone is selected in Devices. Click Next.

P.S: Don’t forget to untick Include Unit Tests and Include UI Tests.

Open Main.storyboard. Set to Compact Width | Any Height.

Compact Width | Any Height

Compact Width | Any Height

Ctrl + Drag from the Label to the File’s Owner and make the connection with the corresponding properties.

Accelerator ViewController

Accelerator ViewController

Create a new ViewController.

Cocoa Touch Class

Cocoa Touch Class

UIViewController

UIViewController

Then make sure you attach this file into view controller in Identity inspector.

Identity inspector -UIViewController

Identity inspector -UIViewController

The other properties are needed to update the Labels with the axes values. Go to ViewController.swift and add 3 UILabels to the main View.

Outlet – xAxis

Outlet – xAxis

Outlet – yAxis

Outlet – yAxis

Outlet – zAxis

Outlet – zAxis

Open AcceleratorViewController.swift and update the with this code.

import UIKit
import CoreMotion

class AccelerometerViewController: UIViewController {

    var motionManager: CMMotionManager = CMMotionManager()
    @IBOutlet weak var xAxis: UILabel!
    @IBOutlet weak var yAxis: UILabel!
    @IBOutlet weak var zAxis: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.motionManager.accelerometerUpdateInterval = 1;
        
        if (self.motionManager.accelerometerAvailable)
        {
            self.motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue()) {
                (data, error) in
                dispatch_async(dispatch_get_main_queue()) {
                    self.xAxis.text = String(data!.acceleration.x)
                    self.yAxis.text = String(data!.acceleration.y)
                    self.zAxis.text = String(data!.acceleration.z)
                }
            }
            
        } else {
            print("not active")
        }
    }
}

Swift iOS 9 iPhone Camera Application

Open Xcode and select Create a new Xcode project.

Welcome to Xcode

Welcome to Xcode

Select Single View Application and click Next.

Single View Application

Single View Application

For product name, use IntellijSwiftCamera and then fill out the Organization Name and Organization Identifier with your customary values. Enter Swift as Language and make sure only iPhone is selected in Devices. Click Next.

P.S: Don’t forget to untick Include Unit Tests and Include UI Tests.

Open Main.storyboard. Set to Compact Width | Any Height.

Compact Width | Any Height

Compact Width | Any Height

This is a very simple user interface consisting of an image view, a toolbar and two bar button items. (Don’t forget to set AutoLayout).

Camera ViewController

Camera ViewController

Create a new ViewController.

Cocoa Touch Class

Cocoa Touch Class

 

UIViewController

UIViewController

Then make sure you attach this file into view controller in Identity inspector.

Identity inspector -UIViewController

Identity inspector -UIViewController

Select the image view object in the view canvas, display the Assistant Editor panel. Ctrl-click on the image view object and drag to a position just below the class declaration line in the Assistant Editor. Release the line, and, in the resulting connection dialog, establish an outlet connection named imageView.

Outlet - imageView

Outlet – imageView

Open CameraViewController.swift and update the with this code.

import UIKit
import MobileCoreServices

class CameraViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var imageView: UIImageView!
    var newMedia: Bool?
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

With the Assistant Editor still visible, establish action connections for the two buttons to methods named useCamera and useCameraRoll respectively (keeping mind that it may be necessary to click twice on each button to select it since the first click will typically select the toolbar parent object).

Action - userCamera

Action – userCamera

 

Action - useCameraRoll

Action – useCameraRoll

Open CameraViewController.swift and update the with this code for useCamera and useCameraRoll functions.

    @IBAction func useCamera(sender: AnyObject) {
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) {
            
            let imagePicker = UIImagePickerController()
            
            imagePicker.delegate = self
            imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
            imagePicker.mediaTypes = [kUTTypeImage as String]
            imagePicker.allowsEditing = false
            
            self.presentViewController(imagePicker, animated: true, completion: nil)
            newMedia = true
        }
    }
    
    @IBAction func useCameraRoll(sender: AnyObject) {
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum) {
            let imagePicker = UIImagePickerController()
            
            imagePicker.delegate = self
            imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
            imagePicker.mediaTypes = [kUTTypeImage as String]
            imagePicker.allowsEditing = false
            self.presentViewController(imagePicker, animated: true, completion: nil)
            newMedia = false
        }
    }

Writing the Delegate methods in CameraViewController.

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        let mediaType = info[UIImagePickerControllerMediaType] as! String
        
        self.dismissViewControllerAnimated(true, completion: nil)
        
        if mediaType == kUTTypeImage as String {
            let image = info[UIImagePickerControllerOriginalImage] as! UIImage
            
            imageView.image = image
            
            if (newMedia == true) {
                UIImageWriteToSavedPhotosAlbum(image, self, #selector(CameraViewController.image(_:didFinishSavingWithError:contextInfo:)), nil)
            }
        }

    }
    
    func image(image: UIImage, didFinishSavingWithError error: NSErrorPointer, contextInfo:UnsafePointer&lt;Void&gt;) {
        
        if error != nil {
            let alert = UIAlertController(title: "Save Failed",
                                          message: "Failed to save image",
                                          preferredStyle: UIAlertControllerStyle.Alert)
            
            let cancelAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
            
            alert.addAction(cancelAction)
            self.presentViewController(alert, animated: true, completion: nil)
        }
    }

    func imagePickerControllerDidCancel(picker: UIImagePickerController) {
        self.dismissViewControllerAnimated(true, completion: nil)
    }

Results.

Screenshot 1

Screenshot 1

 

Screenshot 2

Screenshot 2