Introduction to GIS for devs

What is GIS?

Basemap and Geocoding

Operation Layer and GIS Services

Visualize Data

Spatial Analysis

Suitability Analysis

GIS Analysis Performance & Network Analysis & Spatial Analysis Solution

GIS and Community


Ref: A good course from Pluralsight

[Book] The Richest Man in Babylon

The Richest Man in Babylon is definitely one of the most valuable books that I’ve read. It’s teaching finance through a plot from an ancient historical record. The stories are inspiring and although it’s using dated-English, it’s still fairly easy to grasp. Some quick notes that I’ve taken from this book:

Income distribution:
10% pay yourself first
20% pay off debt (if any)
70% living expanse

Own your home. The book suggests buying your own property because it is treated as an investment. Instead of spending money on rent, own your house and spend the money to pay mortgage as your property might inflate in the future. If it doesn’t, just think of it as you were paying rent. Continue reading

Typescript Basics

Static typing

let name: string; 
let id: number; 
let now: date;


interface IStudent {
    name: string, 
    id: number

// The following will give error coz it's missing id property
let john:IStudent = {
    name: 'John'

// To make the above statement to true, we add optional question 
// mark to id
interface IStudent {
    name: string, 
    id?: number


class Student {
    name: string;
    id: number;
    constructor (name) { = name;

// Equivalent form
class Student {
    constructor (name, id)

// By default, all properties and members are public if not 
// specified. If private members intended, we need to add the 
// keyword
class Student {
    private name: string; 
    private id: number;
    constructor (name, id) { = name; = id;

// Equivalent form
class Student {
    constructor (private name, private id)

let john = new Student ('John', 123)

Cross Shield Pendant

Quick review of the necklace:
Stainless Steel Two-Tone Cubic Zirconia Guardian Cross Shield with 24” Curb Chain

Not really sponsoring this necklace, but if anyone came for the review instead of some stupid paragraphs, the pendant just feels a bit heavy to around my neck after a few hours of wearing. Otherwise, it looks great to me (might not apply to you since art is too perspective and both my parents think it’s ugly 🙂 )

Continue reading

Protractor – elementexplorer.js

elementexplorer.js is a bonus tool from protractor that helps you debug your selectors on page objects live! It’ll make your life on writing protractor tests a lot easier! This post assumes that you have worked with protractor before and have it installed on your machine.

Start selenium

Before starting elementexplorer.js, you need to first start selenium:

> webdriver-manager update
> webdriver-manager start

# or you can start webdriver with a specific port; default is 4444
> webdriver-manager start --seleniumPort XXXX

In the browser opened by selenium, navigate to your angular web app.

Assuming that you have the following binding in your application:

$scope.yourName = "Wahaha" 
<input ng-model="yourName" />


Use elementexplorer

Open a new terminal. Then locate it in node_modules folder and run the following command

> ./node_modules/protractor/bin/elementexplorer.js

Using list() in elementexplorer:

> list(by.model('yourName'))

> list(by.model('notExisted'))

> list(by.binding('yourName'))
['Wahaha']  //Note: this value can be changed on page



How To Master The Perfect Voice

The referenced video of this post is an interview done by Stefan James with Roger Love.

Just to take note and apply it to my next speaking sessions, here are the three main points that may immediately applicable for me:

1. Three range of tone of speaking to make the talk more interesting: (should be lower and slower for me)

2. Pause and breathe in with nose instead of mouth between sentences or commas.

3. Don’t limit my voice to the microphone; Project my voice to vibrate the bodies of the far audience.


Self-confidence Formula

1. I know that I have the ability to achieve the object of my Define Purpose in life. Therefore I demand of myself persistent, continuous action towards its attainment, and I here and now promise to take such action.

2. I realize the dominating thoughts of my mind will eventually reproduce themselves in outward, physical action and gradually transform themselves into physical reality. Therefore I will concentrate my thoughts for 30 minutes daily upon the task of thinking of the person I intend to become, thereby creating in my mind a clear mental picture fo that person.

3. I know through the principle of autosuggestion that any desire I persistently hold in my mind will eventually seek expression through some practical means of attaining the object. Therefore I will devote 10 minutes daily to demanding of myself the development of self-confidence.

4. I have clearly written down a description of my Definite Chief Aim in life. I will never stop trying until I have developed sufficient self-confidence for its attainment.

5. I fully realize that no wealth or position can long endure unless built upon truth and justice. Therefore I will engage in no transaction that does not benefit all whom it affects. I will succeed by attracting myself the forces I wish to use, and the cooperation of other people. I will induce others to serve me because of my willingness to serve others. I will eliminate hatred, envy, jealousy, selfishness and cynicism by developing love for all humanity because I know that a negative attitude towards others can never bring me success. I will cause others to believe in me, because I will believe in them, and in myself. I will sign my name to this formula, and commit it to memory and repeat it aloud once a day, with full faith that it will gradually influence my thoughts and actions so that I will become a self-reliant and successful person.


This post is extracted from “Think and Grow Rich by Napoleon Hill p53”