Sunday, June 18, 2017

Getting Started Vue.JS

Vue (pronounced /vjuː/, like view) adalah progressive framework untuk membangun sebuah user interface.


Installasi Vue.JS dapat dengan menggunakan CDN,NPM, Bower, dan lain-lain. dapat dilihat pada:







Fitur pada Vue.JS:


  • Declarative Rendering, Vue.js menggunakan konsep rendering user interface secara deklaratif yang berarti tampilan yang ditampilkan ke user di deklarasikan DOMnya beserta dengan element dan attribute data masing-masing.
  • Loops, tidak jauh berbeda dengan framework front-end pada umumnya, Vue.js menyediakan fitur untuk menampilkan list data, dengan menggunakan keyword v-for="data in your-data-list" pada DOM element yang ingin ditampilkan
  • Conditionals, Fitur ini digunakan untuk melakukan operasi logika, dengan menggunakan keyword v-if="value" dan v-else
  • Data Binding, Secara default vue menggunakan konsep one way data binding, namun vue juga mempunyai fitur two way data binding. Dengan skema piramid terbalik (parent to child)
  • Directive dan Components, sama seperti AngularJS, Vue memiliki fitur directive (v-if, v-else, v-model merupakan directive bawaan dari Vue) namun kita dapat menginisiasi directive dengan logics yang dapat kita kustomisasi sendiri sesuai dengan kebutuhan. Berbeda dengan AngularJS perbedaan directive dengan component, di AngularJS kita dapat membuat sebuah component yang dengan menggunakan fitur directive. Sedangkan Component pada Vue merupakan sebuah HTML elements yang dapat di re-use codenya. Setiap component dapat dikustomisasi sesuai dengan behavior yang diinginkan.
  • Dan masih banyak fitur yang lainnya
Simple code in Vue:


Buat form seperti dibawah ini:











Source code file index.html:














Hasil setelah text field diisi inputan oleh











Sekian penjelasan sederhana saya tentang Vue.JS, sampai bertemu pada tulisan saya yang selanjutnya :D

References:

https://vuejs.org/v2/guide/index.html

https://laracasts.com/series/learn-vue-2-step-by-step/

OSB Handle Error Access-Control-Allow-Origin

Pada kesempatan kali ini saya ingin berbagi cara menghandle error Access-Control-Allow-Origin yang muncul ketika kita mengexecute REST Service yang sudah sudah selesai dibuat dari OSB. Gejalanya jika kita test dari enviroment OSB maupun Postman, error ini tidak akan muncul karena yang 1 berada dalam 1 enviroment dengan servicenya, dan Postman sudah mempunyai plugin bawaan untuk menghandle error tersebut. Jadi jika kita harus manual menambahkan pada service OSB yang sudah kita buat.

Error ini muncul karena kita tidak menambahkan header Access-Control-Allow-Origin. Untuk mengatasinya, kita cukup membuat Transport Header dan menambahkan header Access-Control-Allow-Origin yang valuenya di set *. Artinya kita mengallow semua origin bisa mengakses service itu.

Selain Access-Control-Allow-Origin kita juga harus memperhatikan header Allow, Content-Type serta Access-Control-Allow-Headers. Jadi sebaiknya jika kita menambahkan Access-Control-Allow-Origin jangan lupa untuk menambahkan 3 header lain nya. Untuk pengisian nya bisa melihat gambar dibawah.

Trasport Header yang kita buat harus berada di dalam Flow request response service itu.
Mudah bukan? Namun jika kita lupa, service OSB kita akan menjadi sia sia.
Semoga membantu !


Main Idea Using OSB To Handle Convertion From REST to SOAP

Pada beberapa waktu yang lalu kebetulan saya mendapat kesempatan untuk memberikan training kecil tentang OSB khususnya pada part Message Flow. Harapan dari training ini mereka dapat menggunakan melakukan convert dari REST ke SOAP maupun sebaliknya.

Pada dasarnya ada 2 jenis pengelompokan jika kita akan melakukan convert dari REST ke SOAP yaitu :
  • Mengirim data melalui Query Param (Method GET)
  • Mengirim data melalui Payload (Method POST,PUT)
Jika digambarkan flow untuk method GET kira kira akan seperti ini.
  1. Dapatkan HttpHeader yang dikirim.

  2. Buat Conditional Branch Untuk menghandle beberapa HttpHeader yang didapat.
  3. Dapatkan Query Param yang dikirim
  4. Buat payload yang sesuai dengan kebutuhan Business Service dan masukkan value yang didapat dari query param.
  5. Invoke Business Service
  6. Jika sudah mendapatkan response dari Business Service, olah response tersebut dengan melakukan penghilangan SOAP Envelope. Ini dapat dilakukan dengan menggunakan XSLT Resource.
  7. Jika sudah dihilangkan, lakukan convert menggunakan tools yang biasa dipergunakan, kalau dalam kasus saya, saya menggunakan Java untuk menghandle convert nya.
  8. Replace isi variable body dengan menggunakan hasil convert tersebut.
Sedangkan untuk flow method POST,PUT kira kira akan seperti berikut.
  1. Dapatkan HttpHeader yang dikirim.

  2. Buat Conditional Branch Untuk menghandle beberapa HttpHeader yang didapat.
  3. Jangan lupa tambahkan OPTIONS Method untuk menghandle agar service yang kita buat sukses diexecute. Kuncinya tambahkan Transport Header pada flow OPTIONS.
  4. Karena data ada di dalam payload dan bentuknya sudah JSON, maka kita tinggal lakukan convert dari JSON ke XML. Jika sudah maka kita akan punya payload berbentuk xml.
  5. Namun sebelum kita mengirim data ke Business Service, terlebih dahulu payload xml nya harus kita manipulasi agar bentuknya sama seperti Business Service yang akan kita invoke. Caranya dengan menambahkan namespace pada payload xml nya.
  6. Invoke Business Service
  7. Jika sudah mendapatkan response dari Business Service, olah response tersebut dengan melakukan penghilangan SOAP Envelope. Ini dapat dilakukan dengan menggunakan XSLT Resource.


  8. Jika sudah dihilangkan, lakukan convert menggunakan tools yang biasa dipergunakan, kalau dalam kasus saya, saya menggunakan Java untuk menghandle convert nya.
  9. Replace isi variable body dengan menggunakan hasil convert tersebut.
Kira kira seperti itu inti dari convert dari REST ke SOAP menggunakan OSB.
Semoga bermanfaat !

Reference sample file yang dibutuhkan:
- AddNamespace

Inline PDF Viewer dengan PDFObject

PDFObject merupakan sebuah utility javascript untuk melakukan embedding file PDF ke dalam sebuah halaman HTML. Untuk informasi dan dokumentasi lebih detail bisa dilihat pada https://pdfobject.com

Inline PDF Viewer sangat membantu untuk memenuhi kebutuhan User Experience (UX) dimana user akan melakukan input pada sebuah form yang datanya dari hasil membaca sebuah document PDF yang berasal dari web tersebut juga.

Kebutuhan UX seperti ini sebenarnya bisa di penuhi dengan beberapa cara:
  1. User mendownload file PDF. Membuka halaman form yang akan diisi pada browser. User akan melakukan Alt+Tab untuk berpindah-pindah antara browser dan aplikasi pembuka/viewer PDF (Adobe Reader, Foxit Reader, dll).
  2. File PDF dibuka pada Tab di browser. User membuka halaman form yang akan diisi pada Tab lain di browser. User akan melakukan berpindah-pindah antara Tab file PDF dan Tab form pada browser.
  3. Adanya fitur preview file PDF pada halaman form yang akan diisi. Jadi user bisa sambil melihat file PDF untuk langsung mencari data yang perlu untuk diisi ke form.

Untuk opsi no 1 dan 2, sudah bisa dilakukan tanpa menambahkan fitur apapun dalam web. Karena function basic dari web sudah bisa memenuhi kebutuhan flow ini. Tetapi user perlu bolak-balik antara 2 aplikasi berbeda (browser - pdf viewer) atau 2 tab yang berbeda pada browser.
Tetapi untuk no 3, kita perlu menambahkan fitur preview file PDF agar file PDF bisa langsung di preview di halaman yang sama dengan form yang akan diisi.

Berikut adalah sample UI nya:

Untuk sample kali ini struktur folder nya cukup simple, seperti berikut. Folder js saya isi dengan javascript dari github PDFObject.

Isi code dari index.html:
 
<h1>PDF Object Demo</h1>

<table>
 <tr>
   <td><label>Nama</label></td>
   <td>
     <input type="text" placeholder="nama">
   </td>
 </tr>
 <tr>
   <td><label>Alamat</label></td>
   <td>
     <input type="text" placeholder="alamat">
   </td>
 </tr>
 <tr>
   <td><label>Usia</label></td>
   <td>
     <input type="number" placeholder="usia">
   </td>
 </tr>
</table>

<div id="example1"></div>

<script src="/js/pdfobject.js"></script>
<script>PDFObject.embed("sample-3pp.pdf", "#example1");</script>



Cara penggunaan PDFObject ini sangat mudah. Apabila kita sudah memasukannya ke dalam project, maka kita tinggal menggunakan nya dengan code ini:
 
<div id="example1"></div>

<script src="/js/pdfobject.js"></script>
<script>PDFObject.embed("sample-3pp.pdf", "#example1");</script>


Terlihat pada code bahwa source file PDF nya adalah sample-3pp.pdf, bagian ini bisa kita pindah ke file controller jika kita menggunakan AngularJS pada project sehingga source file PDF nya bisa dinamis.

Pada sample ini saya menggunakan cara pintas dalam mengimport PDFObject kedalam project secara manual. PDFObject sendiri sudah tersedia pada Bower dan NPM, sehingga dependency management nya terjamin.

PDFObject ini sayang nya sudah tidak compatible dengan Firefox semenjak Firefox versi 52, hal ini di jelaskan oleh PDFObject pada website nya. Dijelaskan juga cara workaround agar PDF inline tetap berjalan di browser Firefox versi 52 ke atas. Workaround ini akan saya bahas pada postingan selanjutnya. :)


AngularJs : Custom ng-hide directive

Kembali bermain dengan AngularJs. Berawal karena adanya project yang membuat user memiliki kemampuan yang dinamis dan disimpan pada session storage. 

Solution 1
Pada awalnya pengecheckan dilakukan di controller masing". Hasilnya cukup merepotkan, karena setiap controller harus melakukan pengecheckan sendiri dan apabila ada perubahan membutuhkan banyak effort untuk melakukan perbaikan. 
Solution 1

Solution 2
Setelah itu saya berpikir untuk melakukan pengecheckan di satu tempat saja agar perubahan pengecheckan hanya dilakukan di satu tempat. Sehingga saya memindahkan tempat pengechekan pada service. Dengan demikian controller memiliki kewajiban untuk memanggil service untuk melakukan pengecheckan dan melemparkan hasilnya ke html.


Solution 2

Solution 3
Cara tersebut sudah terimplementasi di beberapa project hingga suatu sore saya ketika sedang merenung di taman saya mendapat pencerahan. Kenapa tidak dibuat directive saja yang melakukan pengecheckan terhadap value itu?
Akhirnya saya melakukan sedikit custom atau mengadopsi apa yang dilakukan pada directive angular yang cukup terkenal yaitu ng-hide / ng-show dengan melakukan pengecheckan variable yang ada pada session storage. 

Solution 3

Demikian secara teori solusinya. Berikut akan saya tunjukkan bentuk data yang tersimpan pada session storage dan penggunaan directivenya.

Privilege di Session Storage :
$scope.privileges = [
    {"name": "create_user"},
    {"name": "update_user"},
    {"name": "read_user"},
    {"name": "delete_user"}]

Directive
'use strict';angular.module('nostraApp')
     .directive('hasPrivilege', ['$sessionStorage', function ($sessionStorage){
            return {
                restrict: 'A',
                link: function(scope, element, attributes) {
                    scope.$watch(attributes.hasPrivilege, 
                     function(checkPrivilege){
                        var value = false;
                        if($sessionStorage.privileges){
                        var listPriv = $sessionStorage.privileges;
                        var privilege = listPriv.map(function (e) {
                            return e.name;
                        }).indexOf(checkPrivilege);
                        if (privilege != -1) {
                            value =  true;
                          }}
                       element.css('visibility', value ? 'visible' : 'hidden');
                       element.css('display', value ? 'inline' : 'none');
                   });
                }};
        }]);

HTML :
<button type="button" ng-click="addUser()" has-privilege='"create_user"'>
 Tambah User
</button>

Dengan demikian tidak ada lagi tambahan code di controller maupun service untuk melakukan pengecheckan. Tentunya hal ini tidak terikat hanya pada angular1 saja tetapi konsep juga dapat di implementasikan di angular2 ataupun angular 4.
Untuk kali ini sekian saja yang dapat saya bagikan untuk mempermudah pekerjaan kali ini. Semoga dapat berguna. Happy Coding~ :D

Kotlin on Android Studio

Sebelum didukung resmi oleh Google, Kotlin sudah cukup lama digunakan oleh programmer-programmer di berbagai platform. Pengembangan program dengan bahasa Kotlin dapat dilakukan dengan dua cara, yaitu dengan mengunakan stand-alone compiler, dan dengan mengunakan IDE yang dipasang plugin untuk bahasa Kotlin. IDE yang dapat digunakan untuk mengembangkan perangkat lunak dengan bahasa Kotlin adalah IntelliJ, Eclipse, Netbeans, dan juga Android Studio.

Sebelum resmi didukung, sudah terdapat banyak aplikasi android yang production code-nya menggunakan bahasa Kotlin. Bersamaan dengan diumumkannya Kotlin sebagai bahasa resmi pegembangan aplikasi Android, Google meluncurkan Android Studio 3.0 Preview (Canary Channel).

Android Studio 3.0 Preview (Canary Channel)

Pada Android Studio versi 3.0, terdapat banyak fitur baru dan perbaikan-perbaikan yang dapat memudahkan programmer dalam mengembangkan aplikasi Android. Fitur-fitur dan perbaikan-perbaikan tersebut diantaranya:
  • Core IDE changes
  • Kotlin language
  • Support for Java 8 language features
  • New Android Profiler
  • Instant Apps Support
  • APK Debugger
  • New Device File Explorer
  • Support for the Android O Developer Preview
  • New Templates for Android Things
  • Layout Editor Improvements
  • Layout Inspector Improvements
  • Google's Maven Repository
  • APK Analyzer Improvements
  • New Android Plugin for Gradle
  • New Android Emulator Features
Tulisan ini tidak akan membahas semua fitur-fitur baru atau perbaikan-perbaikan pada Android Studio 3.0 dan hanya akan fokus pada fitur dukungan bahasa Kotlin. Untuk pembahasan lebih lengkap mengenai fitur-fitur dan perbaikan-perbaikan di atas, dapat dilihat pada halaman ini.

Android Studio 3.0 includes support for the Kotlin language. You can incorporate Kotlin into your project by converting a Java file to Kotlin (click Code > Convert Java File to Kotlin File) or by creating a new Kotlin-enabled project using the New Project wizard. Learn more about Kotlin and Android.

Kotlin Support in Android Studio

Dukungan untuk bahasa Kotlin pada Android Studio Meliputi:
  • Kotlin Enabled Project

Dengan fitur ini, kita dapat membuat project baru pada Android Studio yang menggunakan bahasa Kotlin sebagai bahasa default yang digunakan dalam menulis program logic.
  • Pertama pilih opsi "Start a new Android Studio project" saat membuka Android Studio
  •  Setelah itu Masukan properti yang diinginkan, seperti nama aplikasi, domain perusahaan. Pada tahap ini, jangan lupa check pilihan include Kotlin support.
  •  Selanjutnya, untuk menambahkan activity dapat dilakukan seperti biasa pada menu File.
  •  Pada tahap ini pilih Kotlin sebagai source language
  •  Setelah klik Finish, Android Studio akan men-generate berkas .kt sebagai logic aplikasi dan juga berkas .xml

  •  Saat Pertama project dibuat, Android Studio otomatis membuat sebuah activity yang menggunakan bahasa kotlin.
  •  Convert Java to Kotlin

Selain membuat project baru dengan Kotlin, Android Studio 3.0 juga memiliki fitur untuk mengubah kode java yang ada menjadi kode Kotlin. Prosesnya adalah sebagai berikut:
  •  Pilih Project yang ingin diubah

  •  Setelah project berhasil dibuka, pilih kelas java yang ingin diubah menjadi Kotlin
  •  Pada menu Code, pilih opsi "Convert Java File to Kotlin File"
  •  Setelah itu akan muncul dialog proses pengkonversian kelas java ke Kotlin
  •  Pada Android Studio 3.0 masih terdapat bug yang mengharuskan kita untuk mengkoreksi pengkonversian yang belum sempurna
  •  Setelah pengkonverisan selesai, akan muncul error seperti gambar di bawah ini. Untuk dapat memperbaiki error ini, kita harus mengganti jenis deklarasi variable menjadi "protected lateinit"
  • Saat pertama kali melakukan konversi kelas java ke Kotlin, Android Studio akan meminta kita untuk mengkonfigurasi library Kotlin pada Gradle. Konfigurasi ini dilakukan secara otomatis, yang harus kita lakukan hanya menentukan cakupan kelas Kotlin pada project.


  •  Setelah menambahkan dependency untuk Kotlin (yang dilakukan secara otomatis), kita akan diminta untuk sinkronisasi ulang Gradle

  •  Setelah sinkronisasi gradle selesai, proses pengkonversian kelas java ke Kotlin telah selesai. Aplikasi dapat dijalankan seperti biasa dengan menggunakan emulator atau device Android.

Demikianlah tulisan saya mengenai Kotlin pada Android Studio, selamat mencoba :)

Reference


Android Fingerprint API

Saat ini sudah banyak smartphone android yang di lengkapi dengan fitur fingerprint scanner. Google sendiri menyediakan API untuk mengakses perangkat fingerprint scanner sejak android 6.0 (Marshmallo) yang di release sejak tahun 2015.

Fingerprint ini merupakan suatu data unik untuk setiap orang di dunia, tetapi kenapa tidak ada yang menggunakannya sebagai suatu metode login pada social media atau e-mail.

How it work

Kita akan bahas mengenai cara kerja dari perangkat fingerprint scanner terlebih dahulu. Seorang lead engineer google pernah membuat sebuah Q&A di Reddit[1] dan memberikan penjelasan,
"Fingerprint features are securely encrypted on the device, and processed in the secure TrustZone protected area of memory. The Android 6.0 fingerprint APIs do not provide any access to the fingerprint material to apps. Fingerprint features never leave the device and are not shared with Google (so for example if you setup a new phone, you need to re-enroll your fingers)."
Dan pihak google berstatement dalam Marshmallow Compatibility Definition Document (CDD)[1], bahwa OEM harus mengimplementasi sebuah hardware-backed keystore, dan melakukan proses validasi fingerprint dalam Trusted Execution Environment (TEE).

Dari beberapa penjelasan tersebut bisa kita simpulkan beberapa point penting, yaitu:
1. API Fingerprint tidak bisa memberikan kita data dari fingerprint yang di scan.
2. Data fingerprint tidak pernah meninggalkan perangkat smartphone.
3. Data fingerprint dan proses pencocokan/validasi dilakukan pada bagian khusus seperti Trusted Execution Environment (TEE).

Dari poin-poin di atas itu memberikan pemahaman bahwa API Fingerprint Android hanya bisa kita gunakan untuk melakukan validasi apakah pengguna nya adalah pemilik smartphone tersebut.

Source Code

Untuk bisa mengakses Fingerprint Authentication kita menggunakan class FingerprintManager. FingerprintManager memerlukan akses ke perangkat fingerprint scanner smartphone, jadi kita perlu manmbahkan permission-nya pada AndroidManifest.xml.

 
<uses-permission android:name="android.permission.USE_FINGERPRINT" />


FingerprintManager memiliki AuthenticationCallback yang bisa kita extend, dan memiliki beberapa method abstract seperti onAuthenticationError, onAuthenticationSucceeded, onAuthenticationFailed dan sebagainya yang bisa di override sesuai action yang diinginkan.


Fingerprint scanner akan mengirimkan data yg baru diinput/scan ke bagian TEE yang selanjutnya akan melakukan proses matching/validasi dengan data fingerprint yang sudah di daftarkan ke perangkat smartphone.
Result yg didapatkan dari hasil matching akan diolah oleh FingerprintManager dan akan mentrigger method abstract onAuthenticationError, onAuthenticationFailed, atau onAuthenticationSucceeded.

Source code lengkap bisa diakses disini (FingerprintDialog).



reference
[1] https://itsecuritything.com/google-nexus-6p-security-teardown/
[2] https://developer.android.com/about/versions/marshmallow/android-6.0.html#fingerprint-authentication

Instalasi GUI pada CentOS / RHEL 7

    Hello, kali ini saya akan sharing mengenai Instalasi GUI pada server CentOS/RHEL 7. Kenapa?, bukannya terdapat pilihan “Server with GUI” pada saat proses instalasi? Yaa, memang Ada. Tapi, bagaimana kalau pada saat proses instalasi kita memilih Minimal Install (“Server tanpa GUI”, yang artinya hanya terdapat terminal)? Nah, bukan berarti kita harus mengulangi proses instalasi server dari awal dan menghapus server yang lama.
GUI ini dibutuhkan secara mandatory contohnya pada kasus instalasi Oracle Infrastucture, SOA Suite, dll yang menampilkan Output Interface untuk tampilan program instalasi (.jar). Daripada install server dari awal, lebih baik ikuti langkah berikut :
-  Terdapat grouplist package yang ada pada linux server.
# yum grouplist
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Available Environment Groups:
   Minimal Install
   Infrastructure Server
   File and Print Server
   Basic Web Server
   Virtualization Host
   Server with GUI  “ package group GUI
Available Groups:
   Compatibility Libraries
   Console Internet Tools
   Development Tools
   Graphical Administration Tools
- Install package group dengan yum
# yum groupinstall "Server with GUI"
Transaction Summary
====================================================
Install  199 Packages (+464 Dependent packages)
Upgrade               (   8 Dependent packages) 
Total download size: 523 Ma
Is this ok [y/d/N]:y

- Nah, setelah selesai terinstall, set GUI ke target server.
# systemctl set-default graphical.target
- Start GUI tanpa reboot dan verifikasi
# systemctl start graphical.target
# systemctl get-default
graphical.target

Done. That’s all, from minimal install without GUI we change it to Server with GUI.

Referensi :

Intro to Kotlin

Sampai dengan 17 Mei 2017, java merupakan satu-satunya bahasa yang secara resmi didukung oleh Google sebagai bahasa yang digunakan untuk mengembangkan aplikasi Android. Pada Acara Google I/O 2017 yang diadakan Google di Mountain View, California, Google mengumumkan Kotlin ditambahkan sebagai bahasa resmi untuk mengembangkan aplikasi Android.

Dengan diumumkannya berita ini, saya tertarik untuk mencari tau tentang bahasa Kotlin dan ingin berbagi sedikit mengenai Kotlin dengan tulisan ini.

About Kotlin

Apa itu Kotlin? Kotlin adalah bahasa pemrograman yang dikembangkan oleh tim dari JetBrains yang dipimpin oleh Andrey Breslav. Proyek ini dimulai pada tahun 2010 dan secara resmi diumumkan ke publik pada tahun 2011. Satu tahun berikutnya sekitar Februari 2012, proyek ini dijadikan open source dan siapapun dapat berpartisipasi dalam pengembangan bahasa ini.

Sama seperti java, Kotlin diambil dari nama sebuah pulau. Pulau Kotlin terletak di Negara Rusia. Tujuan dibuatnya bahasa ini adalah sebagai bahasa umum yang dapat digunakan sebagai alat yang aman, ringkas, fleksible dan 100% interoperable dengan java. Saat ini Kotlin dapat berjalan pada JVM, Javascript compiler dan Android Dalvik Virtual Machine (DVM).

Pro & Con

Berikut ini adalah beberapa pertimbangan dalam menggunakan bahasa Kotlin. Terdapat banyak alasan mengapa kita harus menggunakan bahasa Kotlin, diantaranya adalah sebagai berikut:
  • Concise
  • Safe
  • Interoperable with java
  • Tool-friendly
  • Many cool feature:
    • Data class,
    • Multiple top level declaration,
    • Names parameter,
    • Optional semicolon,
    • Extensions,
    • Default parameter,
    • Single expression function,
    • Safe operator.
  • Officialy supported by Android
  • Kotlin/Native
Sedangkan untuk contra-nya adalah, kita membutuhkan waktu untuk mempelajari bahasa baru dan ukuran file .apk yang dihasilkan akan sedikit lebih besar jika dibandingkan dengan menggunakan bahasa java.

Overview

Berikut ini adalah overview perbandingan syntax Kotlin dengan java:

 

Try Kotlin

Dalam bagian ini saya akan sedikit menjelaskan fitur-fitur pada Kotlin yang menurut saya keren dan dapat memudahkan programmer dalam menulis program.
  • Multiple Top Level Declaration
Fitur ini memungkinkan kita untuk menulis sebuah fungsi dan kelas pada level yang sama, berbeda dengan bahasa java yang mewajibkan top level declaration-nya adalah sebuah kelas.
  • Names Parameter
Dengan Fitur ini, kita tidak perlu lagi mengingat-ingat urutan sebuah parameter dari sebuah fungsi. Fitur ini sangat berguna jika suatu fungsi memiliki banyak parameter dan kita tidak ingat urutan parameter-parameternya.
  • Optional Semicolon 
Salah satu target dari bahasa kotlin adalah programmer java. Dalam bahasa pemrograman java, semicolon merupakan suatu hal yang wajib. Pada Kotlin, keberadaan semicolon bukanlah suatu hal yang penting. Itu artinya kita dapat menulis sebuah statement dengan atau tanpa menggunakan semicolon. Hal ini sangat memudahkan dalam transisi dari bahasa yang mewajibkan semicolon di setiap statement ke Kotlin.
 
  • Default Parameter
Seringkali kita dihadapkan pada suatu objek yang memiliki lebih dari satu macam jenis deklarasi. Kotlin mengakomodasi hal ini dengan fitur default parameter.

Pada kelas Money di atas, jika kita tidak menginisalisasikan nilai amount dan atau currency, Kotlin akan otomatis menginisialisasikannya dengan default parameter yang telah kita tentukan saat mendefinisikan kelas Money. Currency akan otomatis diinisialisasikan dengan string kosong, dan amount akan diinisialisasikan dengan nol. 

Conclusion

Terdapat banyak fitur dari kotlin yang dapat meningkatkan produktivitas dalam menulis program. Sebagai Software Enginner yang lahir dan besar dengan bahasa java, bagi saya mempelajari bahasa baru untuk menulis program bukanlah hal mudah dan menyenangkan. Meskipun demikian, setelah mengenali Kotlin saya tertarik untuk mempelajari bahasa ini dan menggunakannya sebagai bahasa dalam menulis program.

Kesimpulan dari tulisan ini adalah jangan ragu atau bahkan takut untuk mempelajari sebuah bahasa baru meskipun kita sudah familiar dan mahir dengan satu bahasa. Karena pada akhirnya, bahasa pemrogramman hanyalah sebuah alat yang kita gunakan untuk membuat program.

Reference

Cockpit - Interaktif Interface untuk Server Admin

Beberapa waktu lalu saya sedang mencari penyelesaian solusi dan pada komentar pembahasan ada yang menjelaskan bahwa ada software simple untuk mengelola server bernama cockpit, setelah saya coba menggunakan ternyata software ini membantu bagi kita yang ingin mengelola server linux dengan interaktif.

Cockpit adalah software yang free dengan fungsi untuk mengelola linux server dari web browser dengan mudah. Melalui penjelasan tersebut saya rasa sudah cukup jelas fungsinya. Dengan cockpit kita dapat start/stop/restart service, ganti hostname dan memonitor disk, cpu, network traffic dan beberapa fitur lainnya. Tidak lupa, di cockpit ini juga menyediakan interface layaknya terminal sehingga bila kita sudah login di web cockpit kita tidak perlu membuka terminal dan ssh ke target tapi cukup menggunakan terminal window yang disedian oleh software cockpit.

Berikutnya bagaimana cara menginstal cockpit, cara menggunakan juga tampilan serta fitur yang ditawarkan.

Pada skenario ini saya menginstall cockpit pada sistem operasi ubuntu server dengan spesifikasi berikut:
- IP: 192.168.56.121
- Akun root : root/password1
- Akun user : zoro/password1

Untuk menginstall instruksikan command berikut :
sudo apt-get update
sudo apt-get install cockpit

Setelah selesai terinstall maka buka browser dan akses alamat alamat IP cockpit dengan port default 9090.
url : https://192.168.56.121:9090/

Pada halaman login, masukkan username/password user pada ubuntu. Sekedar informasi bila ingin memonitoring performa server saja maka dapat dilakukan dengan akun user biasa, namun bila ingin mengelola service dengan mudah atau ganti hostname maka perlu login dengan root user.

Halaman beranda setelah login
Pada halaman beranda ini kita dapat mengganti hostname, restart/shutdown dan melihat current status dari cpu, memory, disk, serta network traffic.


Halaman Logs
Pada halaman ini pengguna dapat melihat log terbaru dari status errors, warnings, notices.


Halaman Storage
Pada halaman ini pengguna dapat melihat informasi detail tentang storage server, dan bila ingin informasi lebih spesifik dan detail lagi dapat meng-klik pada opsi di dalam jendela filesystems, raid devices, drivers, dan other devices.


Halaman accounts
Pada halaman ini ditampikan daftar user yang ada pada sistem operasi dan button untuk membuat user baru.


Halaman services
Pada halaman ini ditampilkan daftar service yang terinstall, sedang aktif dan sedang non-aktif. Disini kita dapat start/stop/restart/reload service.


Halaman terminal
Pada halaman ini pengguna dapat mengeksekusi perintah-perintah pada terminal linux server tanpa harus ssh ke linux server melalui terminal laptop pengguna. Mudah bukan?

Demikianlah artikel ini saya buat, semoga bermanfaat dan mudah dipahami oleh pembaca. :)


Referensi:
- http://cockpit-project.org/
- https://github.com/cockpit-project/cockpit