Sunday, June 18, 2017

AngularJS Debugging Tools: Ng-Inspector

Dalam mengembangkan aplikasi dibutuhkan proses debugging untuk mencari dan mengurangi bug, atau kerusakan di dalam aplikasi yang kita buat. Namun bagaimana kita melakukan debugging pada AngularJS? So, let start the journey  :D
Ng-inspector adalah sebuah browser extension . Digunakan untuk inspect Angular applications pada scopes, model, function dan performances aplikasi.
Browser Plugin atau Extension ini tersedia pada browser Chrome, Firefox dan Safari
Fitur yang tersedia pada Ng-Inspector adalah sebagai berikut:
  • Scopes, Melihat keseluruhan hierarki scope aplikasi AngularJS yang dibuat pada console.
  • DOM highlighting, Saat cursor diarahkan pada suatu DOM dapat terlihat scope atau function yang terlihat dalam console.
  • Controllers, directives…, ng-inspector mengidentifikasi dan menampilkan sepanjang controller dan directive yang ada pada aplikasi AngularJS
  • Models, melihat models pada variable scope beserta tipe dan nilainya ditampilkan pada console
  • Real time, Saat melakukan interaksi terhadap aplikasi pada waktu yang bersamaan dapat dilihat action apa yang dilakukan pada function atau perubahan value dari suato variable scope pada ng-inspector
Install ng-inspector terlebih dahulu extension pada browser yang anda gunakan, seperti gambar dibawah ini:



Screenshot tampilan implementasi ng-inspector:




Tampilan pada console ketika menginspect suatu function yang ada pada page tersebut:


Nah sekian penjelasan dan sedikit tentang cara debugging aplikasi AngularJS menggunakan ng-inspector, sampai bertemu pada tulisan saya selanjutnya :D

References:
http://cubettech.com/blog/angularjs-must-have-tools-pack-for-developers/
http://ng-inspector.org/

Mengenal Ansible Playbook

Pada kesempatan ini saya akan membahas kembali tentang ansible sebagai configuration management dan provisioning. Bedanya adalah bila pada kesempatan [sebelumnya] saya fokus pada tipe ansible ad-hoc maka kali ini saya akan membahas tentang ansible-playbook.

Ansible playbook ada product ansible untuk melakukan konfigurasi Adalah automation engine yang dijalankan untuk memudahkan untuk mengelola server yang berjumlah banyak serta mampu melakukan provisioning baik di cloud maupun hypervisor.

Ansible playbook dikonfigurasi dalam bentuk file yaml. Ansible playbook bekerja dengan cara satu mesin berperan sebagai management dan mesin lain yang ingin di remote berperan sebagai target. Pada mesin manajemen perlu diinstal tool ansible. Dan sangat perlu diperhatikan semua mesin baik manajemen dan target harus diinstall software python.

Pada ansible playbook ada beberapa komponen penting diantaranya:
- Configuration file -> file yang berisi setting-setting bagaimana tool ansible memanajemen target hostnya.
- Module -> Fungsi yang di panggil oleh task untuk melakukan fungsi tertentu.
- Inventory -> Berisi kumpulan host dan group dari target yang akan di remote

Baiklah mari kita ke praktiknya saja dimana target menggunakan sistem operasi Ubuntu dan dengan skenario menginstall software glusterfs.

Sebelumnya untuk menginstall glusterfs dibutuhkan langkah2 berikut:
- Install python properties
- Add gluster ppa repository
- Update package manager
- Install glusterfs software

Konfigurasi berada dalam 1 folder project:

project-01
   - ansible.cfg (configuration file)
   - hosts (inventory)
   - site.yml (playbook file)

Isi dari file ansible.cfg (file konfigurasi)
[defaults]
hostfile = hosts

Isi dari file hosts
[datatier]
192.168.56.111 ansible_user=root
192.168.56.112 ansible_user=root
192.168.56.113 ansible_user=root
192.168.56.114 ansible_user=root
192.168.56.115 ansible_user=root
192.168.56.116 ansible_user=root
192.168.56.117 ansible_user=root
192.168.56.118 ansible_user=root
192.168.56.119 ansible_user=root
192.168.56.120 ansible_user=root

Isi dari file site.yml (file)
---
hosts: datatier
  tasks:
- name: Install GFS File Server Depedencies
apt:
name: python-software-properties
state: latest
update_cache: yes
- name: Add repo ppa from glusterfs repository
apt_repository:
repo: 'ppa:gluster/glusterfs-3.7'
- name: Install GFS File Server
apt:
name: glusterfs-server
state: latest
update_cache: yes

Untuk menjalankannya dengan menginstruksikan terminal perintah berikut:
$ cd /home/user/project-01
$ ansible-playbook site.yml

Dengan begitu seluruh server yang tergabung dalam group name datatier sudah terinstall software glusterfs. :)


Referensi :
- http://docs.ansible.com/

Update Konfigurasi Aplikasi ketika Runtimte dengan Spring Cloud

Halo kali ini Nostra akan sharing hal menarik lagi nih!

Kalian udah familiar kan dengan Spring? Seperti yang kita tau Spring punya banyak banget project, dan kesempatan kali ini Nostra mau sharing tentang Spring Cloud. Sebelum kita mulai membahas Spring Cloud, Nostra mau sharing dulu nih latar belakang dari topik ini.

Jadi begini, saat ini tren teknologi khususnya aplikasi adalah menggunakan arsitektur Microservices. Nah Spring Cloud adalah kumpulan projects dari Spring untuk memfasilitasi arsitektur tersebut. Secara spesifik sharing ini akan membahas tentang Spring Cloud Config.

Apasih benefits dari Spring Cloud Config?
Oke jadi kan Microservices adalah arsitektur dimana kita punya banyak services dengan fungsi masing-masing dan konfigurasi yang berbeda-beda. Spring Cloud Config memberikan kemudahan untuk maintain seluruh konfigurasi dari services tersebut dengan mengumpulkan seluruh konfigurasi pada "config server" atau sederhananya pada satu service tersendiri. Keuntungan lainnya adalah kita bisa mengubah konfigurasi tersebut pada config server dan kemudian services terkait cukup memanggil satu API dari Spring Actuator, yaitu dengan menggunakan method POST ke alamat http://{service-url}:{services-port}/refresh. API Call ke alamat tersebut akan memberikan balikan, apa saja yang berubah dari konfigurasi milik service tersebut.
Contoh Kembalian '/refresh'
Wow, jadi gimana cara implementasi Spring Cloud Config ini?
Spring Cloud Config memiliki tiga komponen utama, yaitu config server, client, dan file config yang disimpan dengan Git. Mekanisme yang digunakan Spring Cloud Config untuk mengetahui perubahan pada client config adalah dengan membaca commit pada Git untuk config file terkait. Melalui Git setiap commit akan mengubah versi dari file tersebut, dimana pada contoh '/refresh' tersebut kita bisa melihat bahwa terjadi perubahan pada 'config.client.version' dimana sebenarnya config file itu hanya memiliki config 'message' dan telah diubah.
Config File
Config Server
Service yang akan menjadi config server harus menggunakan anotasi '@EnableConfigServer' pada aplikasi, dimana untuk dapat menggunakan anotasi tersebut kita memasukkan dependensi terhadap Spring Cloud Config Server. Setelah kita menggunakan anotasi tersebut, selanjutnya kita perlu menyatakan pada config dari config server ini, yaitu mengenai port berapa yang akan digunakan dan dimana config dari services akan disimpan.
Contoh Penggunaan Anotasi '@EnableConfigServer'
Dependensi Terhadap Spring Cloud Config Server
Contoh Config Server Properties
Client
Lalu bagaimana cara konfigurasi client untuk mengambil konfigurasi pada config server? Hal ini dilakukan melalui properties yang ada pada client. Apabila kita telah berhasil menghubungkan client dengan config server maka kita dapat mengakses seluruh konfigurasi untuk client dengan menyimpannya pada config server. Bagaimana cara client bisa reload perubahan yang terjadi pada konfigurasi di config server? Well untuk melakukannya kita cukup menggunakan anotasi '@RefreshScope' pada bean yang mengakses konfigurasi pada config server.
Contoh Properties pada Client
Contoh Penggunaan Anotasi '@RefreshScope'
Oke, kalau kalian melihat kembali contoh-contoh di atas maka kalian akan menemukan ada sedikit trick disini, yaitu pada client terdapat property 'spring.application.name' dan itu isinya sama seperti nama file konfigurasi yang dimonitor pada configu server. Jadi Spring Cloud Config ini dapat menentukan config file mana yang diperuntukkan kepada suatu service, yaitu dengan membandingkan isi dari 'spring.application.name' dengan nama config file di Git yang dimonitor oleh config server.

et voila, cukup sederhana cara implementasinya akan tetapi perlu diperhatikan bahwa ketiga komponen tersebut harus terhubung agar dapat berjalan sebagaimana diinginkan.

That's all folks. Selamat mencoba dan berkarya!

Regards.


Sumber:





Saturday, June 17, 2017

Realm - An Alternative to SQLite

Introduction:
Realm Mobile Database adalah sebuah open source mobile database yang dibuat sebagai alternatif SQLite dan Core Data. Realm lebih cepat dari SQLite dan ORM library lainnya. Realm lebih mudah digunakan, mempunyai API yang simple. Realm juga support untuk beberapa bahasa yaitu Java, Obj-C, Swift, React Native (JavaScript), dan Xamarin.

Keuntungan:
  • Fast!
  • Cross-Platform
  • Easy to use
  • Reduce dev time
  • Good documentation
Berikut adalah grafik perbandingan kecepatan dengan SQLite

 

Pada tulisan ini, saya hanya menunjukkan cara menggunakan Realm dalam Android saja.

Getting Started:
Pertama, pada project build.gradle dalam Android Studio tambahkan library berikut
  Screen Shot 2017-06-15 at 23.17.05.png
Selanjutnya, pada app build.gradle dalam Android Studio tambahkan plugin berikut
Screen Shot 2017-06-15 at 23.17.14.png 
Kemudian buat sebuah class dengan meng-extend aplication untuk membuat konfigurasi Realm yang nantinya ditambahkan kedalam file manifest project. Berikut contoh kofigurasi Realm
Screen Shot 2017-06-15 at 23.32.52.png
  
Selanjutnya konfigurasi tersebut bisa digunakan dimana saja. 
Screen Shot 2017-06-16 at 00.01.52.png 
 
SQLite vs Realm:
Misalnya kita ingin membuat sebuat tabel contact yang berisi kolom id, nama, dan nomor telepon. Dengan SQLite kita bisa membuat tabel seperti ini
 
Screen Shot 2017-06-15 at 14.43.22.png
Bayangkan jika kolom ada lebih dari 10 dst, pasti akan repot sekali ketik satu-satu. Dengan Realm kita tidak perlu repot-repot mengetik seperti SQLite. Kita hanya perlu membuat model class dengan meng-extend RealmObject dan generate getter-setter. Kekurangannya primary key ID pada Realm tidak tersedia auto-increment, sehingga kita harus membuat custom auto-increment atau menggunakan UUID pada java. Contoh model class Realm seperti ini

Screen Shot 2017-06-15 at 14.33.11.png

Selanjutnya untuk contoh method retrieve dalam SQLite seperti berikut
 
Screen Shot 2017-06-15 at 19.53.46.png

SQLite menggunakan cursor untuk mendapatkan hasil query, selanjutnya dikonversi kembali kedalam object java. Hal ini cukup merepotkan, ketika tabel mempunyai kolom yang banyak dan juga kita harus teliti dengan tipe variabel yang akan dikonversikan. Dengan Realm kita hanya perlu beberapa kode baris saja, contohnya seperti 
 
Screen Shot 2017-06-15 at 19.55.32.png
Untuk method add, update, delete tidak jauh berbeda baik SQLite dan Realm.
 
More Features:
Fitur-fitur lain dalam Realm, sebagai berikut
 
1. Query Options
- Conditions:
between(), greaterThan(), lessThan(),
greaterThanOrEqualTo() & lessThanOrEqualTo() 
equalTo() & notEqualTo() 
contains(), beginsWith() & endsWith() 
isNull() & isNotNull() 
beginsWith() & endsWith() & contains()
 
- Conditions Grouping: 
beginGroup() & endGroup() & not() & or()
 
- Sorting 
RealmResults<User> result = realm.where(User.class).findAll(); 
result.sort("age", RealmResults.SORT_ORDER_DESCENDING); 
 
- Querying 
findAll() & findFirst() & findAllSorted() 
 
2. Annotations 
@Required: Memberlakukan pemeriksaan untuk tidak membolehkan nilai null.
@Ignore: Kolom tidak harus disimpan.
@Index: Menambahkan index pencarian pada kolom.
@PrimaryKey: Identifikasi unik pada tiap database.
 
3. And Many More Features . . . .
Masih banyak lagi fitur-fitur yang disediakan oleh Realm, seperti enkripsi, schema, migrations, asynchronous transactions, dynamic realm, UI control,  browser, dll. 
 
Lebih lengkapnya silahkan buka docs realm :))

Terima kasih :D

Referensi: