IT job opportunities available and ready for hire V4

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

** Foreigner/Expat dont hesitate to apply.

Reference:

  1. Fresh – No experience or less than 1 year.
  2. Junior – 1 – 2 or 3 – 5 years
  3. Senior – >3 or >5 years

Open Positions (per month salary):

  1. iOS Mobile Developer (5) – Up to RM9500
  2. Senior Java Developer (1) – Up to RM10500
  3. Senior Front End Developer (1) – Up to RM10500
  4. Senior .NET Developer (3) – Up to RM10500
  5. Junior .NET Developer (4) – Up to RM4500
  6. Junior JAVA Developer (4) – Up to RM4500
  7. Junior PHP Developer (10) – Up to RM4500
  8. Junior Ruby Developer (3) – Up to RM4500
  9. Big Data Engineer (1) – Up to RM12000
  10. C++ Developer (1) – Up to RM10500
  11. Data Scientist (2) – Up to RM12000
  12. Junior Front End Developer (1) – Up to RM4500
  13. Golang Developer (1) – Up to RM10500
  14. Senior PHP Developer (3) – Up to RM10500
  15. Network Engineer (1) – Up to RM4500
  16. Full Stack Developer (1) – Up to RM10500
  17. Android Developer (6) – Up to RM10500
  18. React Native Developer (1) – Up to RM4500
  19. Senior Game Developer (1) – Up to RM10500
  20. Xamarin Developer (2) – Up to RM10500
  21. Senior Ruby Developer (1) – Up to RM10500
  22. Scrum Master (1) – Up to RM10500
  23. Project Manager (2) – Up to RM10500
  24. Head of Engineer (1) – Up to RM10500

Job description – http://bit.ly/2rMeTYu

Please fill up this form for those interested (http://bit.ly/2rLWbjS) if you are interested.

P.S: Selamat Hari Raya Aidilfitri.

#Intellij #Soding

Jalan TAR shopping raya midnight

Jalan TAR shopping raya midnight

IT job opportunities available and ready for hire V3

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

** Foreigner/Expat dont hesitate to apply.

Open Positions:

  1. Data Visualization Developer (1) – Up to RM5500
  2. Senior UI Developer (2) – Up to RM6500
  3. Network Engineer (1) – RM1500 – RM8500
  4. Ruby Developer (1) – Up to RM5500
  5. Senior Game Developer (1) – Up to RM10500
  6. C++ Developer (2) – Up to RM5500
  7. Senior Front End Developer (2) – RM5500 – RM10500
  8. Senior PHP Developer (1) – RM7500 – RM10500
  9. Senior .NET Developer (4) – Up to RM6500
  10. Web Developer (2) – RM1500 – RM10500
  11. Android Developer (2)​ – RM1500 – RM9000
  12. Front-End Developer (3) – RM1500 – RM5500
  13. Java Developer (2) – RM1500 – RM14000
  14. Javascript Developer (2) – RM1500 – RM5500
  15. Junior .NET Developer (2) – Up to RM5500
  16. Full Stack Developer (1) – RM2500 and above
  17. PHP Developer (1) – RM1500 – RM7500
  18. iOS Developer (1) – RM1500 – RM9000
  19. Python Developer (1) – RM2500 – RM6500
  20. Big Data Engineer (1) – RM12000

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.

P.S: This image shows that Malaysia economy in good health. Credit to Malay Mail Online.

#Intellij #Soding #TN50

Tudung Fareeda

Tudung Fareeda

Space Cluster – Search tool for data researchers on NASA datasets

Space Cluster is a search tool to help data researchers use data more efficiently. The problem is it is hard to find relevant data sets on data.nasa.gov. Making logical connections between datasets is a challenge. Its Artificial Intelligence-powered search engine to help data researchers find relevant data.It maintains data integrity between data sets using keywords frequency.Provides interactive visualization of keywords and datasets. The technology:LDA model (clustering) + D3.js (visualization).

Space Cluster.

Space Cluster.

Demo: https://spacecluster.herokuapp.com/

Android SQLite Tutorial

In this tutorial you will develop a simple to-do-list native app using SQLite for android.

Download the required software packages

Download and install Android Studio and Android SDK.

Android Studio + SDK – http://developer.android.com/sdk/index.html

Setting up your development environment

Open your Android Studio and choose Start a new Android Studio project.

Start a new Android Studio project

Start a new Android Studio project

Enter your custom Application name, Company Domain and select Project location. Click Next.

Configure your new project.

Configure your new project.

Select Phone and Tablet. Make sure API 15 selected. Click Next.

Configure your new project.

Configure your new project.

Select Empty Activity and click Next.

Add an activity to Mobile.

Add an activity to Mobile.

Click Finish.

Customize the activity.

Customize the activity.

Create a new java class. Right click on my.intellij.androidsqlite package > New >Activity > Java Class.

Create a new java class.

Create a new java class.

Name it as Task and click Ok.

Create New Class

Create New Class

Then replace with this code in Task.java. Set your Task class with all getter and setter methods to maintain single task as an object.

package my.intellij.androidsqlite;

public class Task {

    //private variables
    int taskId;
    String name;
    String description;

    // Empty constructor
    public Task(){

    }
    // constructor
    public Task(int taskId, String name, String description){
        this.taskId = taskId;
        this.name = name;
        this.description = description;
    }

    // constructor
    public Task(String name, String description){
        this.name = name;
        this.description = description;
    }
    // getting taskId
    public int getTaskId(){
        return this.taskId;
    }

    // setting taskId
    public void setID(int taskId){
        this.taskId = taskId;
    }

    // getting name
    public String getName(){
        return this.name;
    }

    // setting name
    public void setName(String name){
        this.name = name;
    }

    // getting description
    public String getDescription(){
        return this.description;
    }

    // setting description
    public void setDescription(String description){
        this.description = description;
    }
}

Create a new java class. Right click on my.intellij.androidsqlite package > New >Activity > Java Class.

Create a new java class.

Create a new java class.

Name it as DatabaseHandler and click Ok.

Create New Class

Create New Class

Write DatabaseHandler class to handle all database CRUD(Create, Read, Update and Delete) operations.

package my.intellij.androidsqlite;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;
import java.util.List;

public class DatabaseHandler extends SQLiteOpenHelper {
    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "tasksManager";

    // Tasks table name
    private static final String TABLE_TASKS = "tasks";

    // Tasks Table Columns names
    private static final String KEY_TASK_ID = "taskId";
    private static final String KEY_NAME = "name";
    private static final String KEY_DESCRIPTION = "description";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_TASKS_TABLE = "CREATE TABLE " + TABLE_TASKS + "("
                + KEY_TASK_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
                + KEY_DESCRIPTION + " TEXT" + ")";
        db.execSQL(CREATE_TASKS_TABLE);
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_TASKS);

        // Create tables again
        onCreate(db);
    }

    /**
     * All CRUD(Create, Read, Update, Delete) Operations
     */

    // Adding new task
    void addTask(Task task) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, task.getName()); // Task Name
        values.put(KEY_DESCRIPTION, task.getDescription()); // Task Description

        // Inserting Row
        db.insert(TABLE_TASKS, null, values);
        db.close(); // Closing database connection
    }

    // Getting single task
    Task getTask(int taskId) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_TASKS, new String[] { KEY_TASK_ID,
                        KEY_NAME, KEY_DESCRIPTION }, KEY_TASK_ID + "=?",
                new String[] { String.valueOf(taskId) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Task task = new Task(Integer.parseInt(cursor.getString(0)),
                cursor.getString(1), cursor.getString(2));
        // return task
        return task;
    }

    // Getting All Tasks
    public List<Task> getAllTasks() {
        List<Task> taskList = new ArrayList<Task>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_TASKS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Task task = new Task();
                task.setID(Integer.parseInt(cursor.getString(0)));
                task.setName(cursor.getString(1));
                task.setDescription(cursor.getString(2));
                // Adding task to list
                taskList.add(task);
            } while (cursor.moveToNext());
        }

        // return task list
        return taskList;
    }

    // Updating single task
    public int updateTask(Task task) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, task.getName());
        values.put(KEY_DESCRIPTION, task.getDescription());

        // updating row
        return db.update(TABLE_TASKS, values, KEY_TASK_ID + " = ?",
                new String[] { String.valueOf(task.getTaskId()) });
    }

    // Deleting single task
    public void deleteTask(Task task) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_TASKS, KEY_TASK_ID + " = ?",
                new String[] { String.valueOf(task.getTaskId()) });
        db.close();
    }


    // Getting tasks Count
    public int getTasksCount() {
        String countQuery = "SELECT  * FROM " + TABLE_TASKS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }
}

Open MainActivity and replace with this code.

package my.intellij.androidsqlite;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DatabaseHandler db = new DatabaseHandler(this);

        /**
         * CRUD Operations
         * */
        // Inserting Tasks
        Log.d("Insert: ", "Inserting ..");
        db.addTask(new Task("Breakfast", "Nasi Lemak"));
        db.addTask(new Task("Lunch", "Nasi Ayam"));
        db.addTask(new Task("Dinner", "MCD"));

        // Reading all tasks
        Log.d("Reading: ", "Reading all tasks..");
        List<Task> tasks = db.getAllTasks();

        for (Task cn : tasks) {
            String log = "TaskId: "+cn.getTaskId()+" ,Name: " + cn.getName() + " ,Description: " + cn.getDescription();
            // Writing Tasks to log
            Log.d("Name: ", log);
        }
    }
}

Build and run the app. The output will be show up like below.

Logcat output.

Logcat output.

Android (GCM) Push Notification Tutorial

In this tutorial, I will show you how to implement push notifications in your native app for android.

Download the required software packages.

  1. Download and install Android Studio and Android SDK.
  2. Android Studio + SDK – http://developer.android.com/sdk/index.html.

Go to Google Developer (https://developers.google.com/mobile/add). Click Pick a platform.

Google services.

Google services.

Click Enable services for my Android App.

Google Services.

Google Services.

Enter your App name and Android package name. Click Choose and configure services.

Google Services.

Google Services.

Select Cloud Messaging and click Enable Google Cloud Messaging.

Google Services.

Google Services.

Make a note of the server API key and press Close.

Google Services.

Google Services.

Click Generate configuration files.

Google Services.

Google Services.

Click Download google-services.json. Once the file has been generated, download it and place it inside your Android Studio project’s app directory.

Google Services.

Google Services.

Setting up your development environment

Open your Android Studio and choose Start a new Android Studio project.

Start a new Android Studio project

Start a new Android Studio project

Enter your custom Application name, Company Domain and select Project location. Click Next.

Configure your new project.

Configure your new project.

Select Phone and Tablet. Make sure API 15 selected. Click Next.

Configure your new project.

Configure your new project.

Select Empty Activity and click Next.

Configure your new project

Configure your new project

Your app must request the C2D_MESSAGE  permissions, if it isn’t doing so already. Add the following lines inside the tag in your AndroidManifest.xml:

<permission android:name="my.intellij.androidpushnotification.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="my.intellij.androidpushnotification.permission.C2D_MESSAGE" />

The notifications are received in the form of broadcasts. To handle those broadcasts, our app needs a BroadcastReceiver. However, we don’t have to create it manually. We can instead use the GcmReceiver class as the BroadcastReceiver.

The BroadcastReceiver must have an intent-filter that responds to the com.google.android.c2dm.intent.RECEIVE action and the name of its category must match your project’s package name. Add the following code to the manifest

<receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="my.intellij.androidpushnotification" />
    </intent-filter>
</receiver>

Open build.gradle (Project:AndroidPushNotification) and add into dependencies block

classpath 'com.google.gms:google-services:1.5.0'

Next, apply the plugin in the app module’s build.gradle on the top

apply plugin: 'com.google.gms.google-services'

And this code on bottom part in the app module’s build.gradle.

configurations.all {
    resolutionStrategy {
        force 'com.android.support:design:23.4.0'
        force 'com.android.support:support-v4:23.4.0'
        force 'com.android.support:appcompat-v7:23.4.0'
    }
}

To be able to use the GCM API, add com.google.android.gms:play-services as a compile dependency in the same file

compile "com.google.android.gms:play-services:8.3.0"

Create a new java class. Right click on my.intellij.androidpushnotification package > New >Activity > Java Class.

Create a new java class.

Create a new java class.

Name it as RegistrationService and click Ok.

Create New Class

Create New Class

Then replace with this code in RegistrationService.java.

package my.intellij.androidpushnotification;

import android.app.IntentService;
import android.content.Intent;
import android.util.Log;

import com.google.android.gms.gcm.GcmPubSub;
import com.google.android.gms.gcm.GoogleCloudMessaging;
import com.google.android.gms.iid.InstanceID;

import java.io.IOException;

public class RegistrationService extends IntentService {
    public RegistrationService() {
        super("RegistrationService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        InstanceID myID = InstanceID.getInstance(this);

        try {
            String registrationToken = myID.getToken(
                    getString(R.string.gcm_defaultSenderId),
                    GoogleCloudMessaging.INSTANCE_ID_SCOPE,
                    null
            );

            Log.d("Registration Token", registrationToken);

            GcmPubSub subscription = GcmPubSub.getInstance(this);
            subscription.subscribe(registrationToken, "/topics/my_little_topic", null);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Define the service in AndroidManifest.xml.

<service android:name=".RegistrationService" android:exported="false" />

Create a new java class. Right click on my.intellij.androidpushnotification package > New >Activity > Java Class.

Create a new java class.

Create a new java class.

Name it as TokenRefreshListenerService and click Ok.

Create New Class

Create New Class

Then replace with this code in TokenRefreshListenerService.java.

package my.intellij.androidpushnotification;

import android.content.Intent;
import com.google.android.gms.iid.InstanceIDListenerService;

public class TokenRefreshListenerService extends InstanceIDListenerService {
    @Override
    public void onTokenRefresh() {
        Intent i = new Intent(this, RegistrationService.class);
        startService(i);
    }
}

Define the service in AndroidManifest.xml.

<service android:name=".TokenRefreshListenerService" android:exported="false">
        <intent-filter>
            <action android:name="com.google.android.gms.iid.InstanceID" />
        </intent-filter>
    </service>

Open MainActivity.java and replace with this code.

package my.intellij.androidpushnotification;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent i = new Intent(this, RegistrationService.class);
        startService(i);
    }
}

Create a new java class. Right click on my.intellij.androidpushnotification package > New >Activity > Java Class.

Create a new java class.

Create a new java class.

Name it as NotificationsListenerService and click Ok.

Create New Class

Create New Class

Then replace with this code in NotificationsListenerService.java.

package my.intellij.androidpushnotification;

import com.google.android.gms.gcm.GcmListenerService;

public class NotificationsListenerService extends GcmListenerService {

}

Define the service in AndroidManifest.xml.

<service android:name=".NotificationsListenerService" android:exported="false" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    </intent-filter>
</service>

Go to https://material.io/icons/ and search for cloud icon. Once you download the icon, place it inside the res folder of your project. Use ic_cloud_black_48dp as the icon.

Google’s Material Design Icons Library

Google’s Material Design Icons Library

Build and run your app. You will an output like this in your android studio console.

Create send.py file and replace with this code.

from urllib2 import *
import urllib
import json
import sys

MY_API_KEY="AIzaSyCJu8pl_GmHLhM9SfFc-31vipg9rsfeD5I"

messageTitle = sys.argv[1]
messageBody = sys.argv[2]

data={
    "to" : "/topics/my_little_topic",
    "notification" : {
        "body" : messageBody,
        "title" : messageTitle,
        "icon" : "ic_cloud_black_48dp"
    }
}

dataAsJSON = json.dumps(data)

request = Request(
    "https://gcm-http.googleapis.com/gcm/send",
    dataAsJSON,
    { "Authorization" : "key="+MY_API_KEY,
      "Content-type" : "application/json"
    }
)

print urlopen(request).read()

Open terminal and run the send.py script.

python send.py “My first push notification” “GCM API is wonderful”

Running the Script

Running the Script

Android RTP (Video & Audio Stream via VLC Player)

In this tutorial, you’ll learn how to use Android Studio to start Android RTP project development. You will learn the following:

  • How to use Android Studio to create a native project.
  • How to use RTP in android project.

Download the required software packages

Open Android Studio.

Start a new Android Studio project

Start a new Android Studio project

Select Start a new Android Studio project. Enter your custom Application name, Company Domain and select Project location. Click Next.

Configure your new project.

Configure your new project.

Select Phone and Tablet. Make sure API 15 selected. Click Next.

Configure your new project.

Configure your new project.

Select Empty Activity and click Next.

Add an activity to Mobile.

Add an activity to Mobile.

Click Finish.

Customize the activity.

Customize the activity.

Import the libstreaming library (https://github.com/fyhertz/libstreaming) to Android Studio you can try this:

  • Open your project in Android Studio.
  • Download the library (using Git, or a zip archive to unzip).

Select File > New > Import Module.

New Module.

New Module.

Select library libstreaming source directory and click Next.

New Module.

New Module.

Click Finish.

New Module.

New Module.

On the root of your project directory create/modify the settings.gradle file. It should contain something like the following:

include 'app', ':libstreaming'
  • Gradle clean & build/close the project and reopen/re-import it.
  • Edit your project’s build.gradle to add this in the “depencies” section:
dependencies {
     //...
        compile project(':libstreaming')
     }

Open the MainActivity.java and replace with this code

package my.intellij.androidrtp;

import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.Window;
import android.view.WindowManager;

import net.majorkernelpanic.streaming.Session;
import net.majorkernelpanic.streaming.SessionBuilder;
import net.majorkernelpanic.streaming.audio.AudioQuality;
import net.majorkernelpanic.streaming.gl.SurfaceView;
import net.majorkernelpanic.streaming.rtsp.RtspServer;

/**
 * A straightforward example of how to use the RTSP server included in libstreaming.
 */
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, RtspServer.CallbackListener, Session.Callback{

    private final static String TAG = "MainActivity";

    private SurfaceView mSurfaceView;
    private  Session mSession;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.activity_main);

        mSurfaceView = (SurfaceView) findViewById(R.id.surface);

        
        // Sets the port of the RTSP server to 1234
        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
        editor.putString(  RtspServer.KEY_PORT, String.valueOf(1234));
        editor.commit();



        // Configures the SessionBuilder
        mSession =  SessionBuilder.getInstance()
                .setCallback(this)
                .setSurfaceView((net.majorkernelpanic.streaming.gl.SurfaceView) mSurfaceView)
                .setPreviewOrientation(90)
                .setContext(getApplicationContext())
                .setAudioEncoder(SessionBuilder.AUDIO_AAC)
                .setAudioQuality(new AudioQuality(8000, 16000))
                .setVideoEncoder(SessionBuilder.VIDEO_H264)
                //.setVideoQuality(new VideoQuality(320,240,20,500000))
                .build();

        mSurfaceView.getHolder().addCallback(this);

        ((net.majorkernelpanic.streaming.gl.SurfaceView) mSurfaceView).setAspectRatioMode(net.majorkernelpanic.streaming.gl.SurfaceView.ASPECT_RATIO_PREVIEW);
        String ip, port, path;

        // Starts the RTSP server
        this.startService(new Intent(this,RtspServer.class));

        Log.d("test", "1");



        mSession.startPreview(); //camera preview on phone surface
        mSession.start();

    }

    @Override
    public void onResume()
    {
        super.onResume();
        mSession.stopPreview();
    }

    @Override
    public void onDestroy()
    {
        super.onDestroy();
        mSession.release();
        mSurfaceView.getHolder().removeCallback(this);
    }

    //region   ----------------------------------implement methods required
    @Override
    public void onError(RtspServer server, Exception e, int error) {
        Log.e("Server", e.toString());
    }

    @Override
    public void onMessage(RtspServer server, int message) {
        Log.e("Server", "unkown message");
    }

    @Override
    public void onBitrateUpdate(long bitrate) {

    }

    @Override
    public void onSessionError(int reason, int streamType, Exception e) {

    }

    @Override
    public void onPreviewStarted() {

    }

    @Override
    public void onSessionConfigured() {

    }

    @Override
    public void onSessionStarted() {

    }

    @Override
    public void onSessionStopped() {

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }

    //endregion
}

Open activity_main.xml in app > res > layout and replace with this code.

<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="my.intellij.androidrtp.MainActivity" android:color="@android:color/background_light">

    <net.majorkernelpanic.streaming.gl.SurfaceView android:id="@+id/surface" android:layout_width="match_parent" android:layout_height="match_parent" />

</RelativeLayout>

Open AndroidManifest.xml and replace with this code.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="my.intellij.androidrtp">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name="net.majorkernelpanic.streaming.rtsp.RtspServer" />
    </application>

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

</manifest>

Build and run the Android rtp sender app. Now start the vlc player and click Media > Open Network Stream menu. Enter the following url (please update with your android ip) and click play button.

rtsp://192.168.0.113:1234

Open Network.

Open Network.

How to create a c++ library with NDK on Android Studio

In this tutorial, you’ll learn how to use Android Studio to start Android NDK project development. You will learn the following:

  • How to use Android Studio to create a native project.
  • How to build and trace native code.

Download the required software packages

Open Android Studio.

Start a new Android Studio project

Start a new Android Studio project

Select Start a new Android Studio project. Enter your custom Application name, Company Domain and select Project location. Click Next.

New Project

New Project

Select Phone and Tablet. Make sure API 15 selected. Click Next.

Configure your new project.

Configure your new project.

Click Next.

Configure your new project

Configure your new project

Select Black Activity and click Next.

Configure your new project

Configure your new project

Click Finish.

Customize the Activity.

Customize the Activity.

Select the menu File > Project Structure > SDK Location and set Android NDK Location.

Project Structure

Project Structure

Add new code inside defaultConfig block.

defaultConfig {
        applicationId "my.intellij.androidrtp"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        ndk {
            moduleName "hello-android-jni"
        }
}

Add JNI function and load jni shared lib into project. Select Android Studio Project pane > app > java > my.intellij.androidrtp > MainActivity, and add JNI function getMsgFromJni() and System.loadLibrary() to the end of class MainActivity.

static {
        System.loadLibrary("hello-android-jni");
    }
    public native String getMsgFromJni();

Configure javah. Select Android Studio > Preferences > Tools > External Tools. Click + symbol.

Create Tool for javah.

Create Tool for javah.

Configure ndk-build.

Create Tool for ndk-build.

Create Tool for ndk-build.

Configure ndk-build clean.

Create Tool for ndk-build clean.

Create Tool for ndk-build clean.

Click Ok.

Preferences.

Preferences.

Configure build.gradle to setup JNI folder location. Open build.gradle file and place this code into android block.

android {
    compileSdkVersion 24
    buildToolsVersion "25.0.0"
    defaultConfig {
        applicationId "my.intellij.androidrtp"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        ndk {
            moduleName "hello-android-jni"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets.main {
        jni.srcDirs = [] 
        jniLibs.srcDirs=['libs']
    }

}

Let’s add one line in ‘gradle.properties’.

android.useDeprecatedNdk=true

Build the project. Select MainActivity, NDK > javah.

NDK javah

NDK javah

Switch to project mode and select NewC/C++ Source File.

C/C++ Source File

C/C++ Source File

Name it as hello-android-jni and click Ok.

Create New C/C++ Source File

Create New C/C++ Source File

Replace with this code in hello-android-jni.cpp.

#include "my_intellij_androidrtp_MainActivity.h"

JNIEXPORT jstring JNICALL Java_my_intellij_androidrtp_MainActivity_getMsgFromJni(JNIEnv *, jobject){

    return (*env)->NewStringUTF(env, "Hello From Jni");
}

Create some MakeFiles. Select jni folder > New > File.

Create some MakeFiles

Create some MakeFiles

Name it as Android.mk. Click Ok.

Create some MakeFiles

Create some MakeFiles

Click Ok.

Register New File Type Association

Register New File Type Association

Repeat same process to create Application.mk file. Replace both files with these codes.

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE		:= hello-android-jni
LOCAL_SRC_FILES		:= hello-android-jni.cpp
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_MODULES := hello-android-jni

APP_ABI := all

Build NDK Library. Select jni folder > NDK > ndk-build.

Build NDK Library

Build NDK Library

Success message.

Build NDK Library

Build NDK Library

Replace MainActivity.java with this code.

package my.intellij.androidrtp;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.i("MyTag", getMsgFromJni());
    }

    static {
        System.loadLibrary("hello-android-jni");
    }
    public native String getMsgFromJni();
}

Copy all folders that contain .so files in jni folder into jniLibs folder. Build and run.

Output

Output

Output

IT job opportunities available and ready for hire V2.

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 V1.

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/