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:

Introduction to Oracle Managed File Transfer

     Hello, kali ini saya akan sharing tentang salah satu product dari Oracle yaitu Managed File Transfer (MFT). Pada dasarnya MFT bertujuan untuk menangani proses transfer data end to end antar client/server maupun web service. File transfer dapat di design, deploy, monitor dan audit melalui Web Application yang disediakan MFT. Proses transfer file akan lebih efisien karena akan diproses terpisah oleh MFT dengan banyak fungsi tambahan seperti compress dan enkripsi.

Berikut overview dan feature dari MFT :


Oracle MFT mempunyai fitur untuk design, deploy, dan monitor transfer data end-to-end
- Menggunakan FTP(S)/SSH, FTP
- File transfer auditing
- Integrasi SOA/B2B
- Web UI
Dashboard: Metrics, Find File, Activity Deliveries, Recent Errors, Flow instance Reports
- Large files, encryption, auditing, monitoring, pass-by-reference
- Scheduling – Advanced Management: Pause, Resume, Resubmit
- Compress, Decompress

Functional Use Case dari MFT :

 - Direct Transfer using MFT



     - Creates an SOA SCA Service from MFT



Contoh kasus penggunaan MFT :

Case : Request izin mendirikan bangunan dengan mengirimkan formulir web dan (diperlukan) lampiran

     Skenario Seseorang atau perusahaan dapat meminta izin bangunan secara online. Saat mengirimkan formulir, require : file lampiran. Data formulir web dikirim ke web service(SOA Suite) yang akan diproses di backend. File yang diupload disimpan ke file share dimana MFT mengambilnya dan mentransfernya secara terpisah ke web service SOA Suite kedua berdasarkan service MFT yang telah dibuat. Referensi file yang diterima berkorelasi dengan kasus ini dapat diteruskan ke Konten Webcenter.

Keuntungan : 
-  File yang dilampirakan tidak menggangu transaksi dan menghemat resource
-  File dapat di compress dan di enkripsi
-  Dapat di monitoring dan di submit ulang

Architecture :

šFront-end
   -ADF Web / Mobile Application with Web Forms
šNetwork File Share
  -File store for files uploaded when sending Web Form
šSOA Suite
  -Web services for Case and Document management
šDatabase
  -PL/SQL packages for storing/selecting Case data
šManaged File Transfer (MFT)
  -Transfer files, uploaded through Front-end, to DocumentService (Pass-By-Reference)
šWebcenter Content
  -Collect and store files from MFT using received reference


Referensi :
-http://www.oracle.com/technetwork/middleware/mft/overview/index.html
-https://docs.oracle.com/middleware/1213/mft/mft-user-guide/GUID-E68C24F1-C51C-4863-805C-73331A6E6374.htm#MFTUG250
-http://www.esentri.com/blog/2014/09/10/oracle-mft-soa-integration

Wednesday, June 14, 2017

Implementasi Logging pada Aplikasi

Hi Guys! kembali lagi di sesi sharing bersama Nostra.

Pada kesempatan sharing kali ini Nostra akan sharing tentang bagaimana sih penggunaan Logging yang baik pada aplikasi dan berbagai hal terkait logging tersebut, seperti tujuan dan tips dalam konfigurasi logging. Oh iya logging yang akan kita bahas adalah dengan menggunakan Logback ya guys.

Mari kita mulai dengan membahas apa sih logging itu? dan kenapa logging itu penting?
Jadi logging adalah proses atau kegiatan dimana sistem akan mencatat berbagai hal sesuai yang kita definisikan. Kenapa kita perlu melakukan logging? Well, sederhananya adalah untuk meninjau aplikasi kita dan khususnya untuk mempermudah para developer untuk melakukan proses debugging ketika aplikasi sudah masuk environment production.

Kok bisa gitu? maksudnya 'kita definisikan' itu gimana ya?
Jelas bisa dong, karena ketika aplikasi udah naik ke production tentunya kita ngga selalu melihat console dari aplikasi kita dong? Yep, dan kalaupun kita liat console tapi ngga ada logging di aplikasi maka kita cuma bisa tau informasi ketika ada error atau exception saja melalui console tersebut. Nah dengan adanya logging maka kita akan terbantu karena selain kita bisa tau proses apa yang sedang berjalan melalui console, kita juga bisa melihat log tersebut melalui file yang dihasilkan. Semua itu bisa kita konfigurasi melalui file logback.xml pada aplikasi.
Contoh Konfigurasi 'logback.xml'
Gimana praktik yang baik dalam implementasi logging ini?
Pada dasarnya kita harus tau dulu nih, logging itu punya lima level yang berbeda, yaitu:

  • ERROR --------> Biasanya level ini digunakan untuk logging exception ketika sedang menjalankan suatu proses bisnis atau logic. Idealnya adalah pada saat kita melakukan try-catch terhadap suatu exception, kita melakukan logging dan kemudian throw kembali exception tersebut tanpa harus membuat aplikasi crash.
Contoh Penggunaan Log Level 'ERROR'
  • WARN ---------> Biasanya level ini digunakan untuk logging kondisi dimana terjadi exception pada system process seperti pada contoh di bawah.
Contoh Log Level 'WARN'
  • TRACE -------> Level ini biasanya digunakan ketika proses development, dimana developer sedang melakukan proses tracing terhadap suatu fungsi dan biasanya level ini akan di lepas ketika aplikasi naik ke production. Hal tersebut dikarenakan level ini biasanya digunakan dengan menyertakan informasi sangat detail terkait proses tracing yang sedang dilakukan.
  • DEBUG -------> Level ini biasanya digunakan untuk menandakan method mana yang sedang berjalan, dengan argumen apa, dan apa hasil dari method tersebut. Pada level debug kita tidak perlu melakukan logging sangat detail seperti pada level trace, sebenarnya kita cukup melakukan logging terhadap hal-hal tersebut hanya untuk menunjukkan bahwa proses tersebut telah berjalan. Terkait informasi apa yang akan di log, sebenarnya ini kembali lagi pada kesepakatan tim.
  • INFO ----------> Level ini paling sering digunakan dan sebaiknya digunakan untuk melakukan summary atau review terhadap setiap bisnis proses yang dilakukan, sehingga bisa dilakukan proses auditing dengan membaca log files.

Jadi berangkat dari kelima level itu, gini nih tips maupun saran dalam mengimplementasikan proses logging ke dalam aplikasi.

  1. Manfaatkan kelima level tersebut dengan sebaik-baiknya. Implementasi atau aturan dalam penggunaan level tersebut sebaiknya disesuaikan dengan kesepakatan tim, sehingga seluruh anggota tim dapat membuat log yang konsisten satu dengan lainnya.
  2. Tentukan dan sepakati bersama informasi apa saja yang akan dimasukkan ke dalam log, sehingga proses logging ini akan berdampak positif. Jangan sampai kita melakukan logging terhadap hal-hal yang tidak diperlukan dan malah berdampak negatif ke aplikasi, seperti memberatkan performance atau bisa saja malah log kita memunculkan exception yang akan membuat aplikasi berhenti atau crash.
  3. Berkaitan dengan poin pertama dan kedua, kombinasikan level yang tepat dengan informasi yang tepat ke dalam log. Hal tersebut akan sangat membantu ketika ada proses debugging maupun auditing terhadap aplikasi kita.
  4. Manfaatkan logging pattern pada konfigurasi kalian, dan cobalah untuk membuat pattern yang baik, dengan cara melakukan tuning apabila merasa logging pattern saat ini berdampak negatif pada aplikasi atau mulai terasa pattern tersebut sulit untuk dibaca.
So?
Kesimpulannya adalah logging bersifat penting bagi para tim developer, support, hingga pengguna. Oleh karena itu sebaiknya developer mulai memperhatikan hal tersebut dan terus membiasakan diri untuk membangun aplikasi dengan prinsip clean code, clean log. Selain prinsip tersebut ada juga beberapa prinsip yang juga bagus untuk di adopsi oleh para developer, seperti KISS dan YAGNI.

Akhir kata, sekian dulu sharing tentang logging kali ini. Semoga bermanfaat dan semangat untuk membangun sistem yang lebih baik!

Regards.


Sumber:
https://www.javacodegeeks.com/2011/01/10-tips-proper-application-logging.html
http://blog.schauderhaft.de/2009/09/16/good-logging-practices/
https://www.versionone.com/agile-101/agile-software-programming-best-practices/
http://blog.takipi.com/how-to-instantly-improve-your-java-logging-with-7-logback-tweaks/