Showing posts with label Andreas Yusup Kurniawan. Show all posts
Showing posts with label Andreas Yusup Kurniawan. Show all posts

Saturday, December 16, 2017

Angular Command Line Interface

Pada kesempatan ini saya ingin mencoba menjelaskan sedikit yang saya tahu tentang Command yang ada pada Angular. Pertama tama pada versi Angular (4) sudah bisa menjalankan Command Line Interface (CLI) untuk membuat Component, Service, Routing dll, yang pada AngularJS masi harus dilakukan secara manual. Sebelum kita lebih jauh, untuk menjalankan CLI, kita harus terlebih dahulu menginstall Library Angular-CLI secara global terlebih dahulu.


Setelah menginstall kita sudah bisa menjalankan CLI nya. Pertama tama untuk membuat project Angular baru, kita bisa jalankan command berikut


Kemudian masuk ke project directory my-app, kemudian jalankan ng serve --open. Maksudnya adalah untuk menjalankan project angular tersebut dan flag --open untuk otomatis membuka browser nya. Jika sudah, maka akan terlihat seperti ini.


Setelah itu, mari kita membuat Component, Service dan Routing. Untuk membuat component, jalankan command berikut. 


Command di atas dipakai untuk membuat Heroes Component. Secara otomatis, app.module.ts akan terupdate jika kita membuat component baru. Kalau untuk membuat Service, bisa gunakan command berikut.


Command di atas dipakai untuk membuat Hero Service. Untuk membuat Routing, bisa gunakan command berikut.


Command di atas dipakai untuk membuat routing, flag --flat berarti file yang digenerate akan berada dalam folder src/app. Sedangkan flag --module=app dipakai untuk secara otomatis file yang digenerate mengupdate app.module.ts

Sekian command yang biasa digunakan pada Angular 4. Semoga bermanfaat !

Angular Version History

Baru baru ini saya mencoba tentang Angular 4, namun ada sebuah pertanyaan yang terlintas di benak saya ketika mencoba Angular 4. Apakah perbedaan antara AngularJS, Angular 2 dan Angular 4? Dan kenapa harus Angular 4? 2 Pertanyaan itu sedikit menganggu dan akhirnya saya memutuskan untuk mencoba mencari tahu sejarah nya.

Pada 2010 AngularJS dibuat sebagai Javascript framework, dan pada pertengahan 2016 Angular 2 dibuat dengan menggunakan Typescript untuk melengkapi kekurangan yang ada pada AngularJS, meskipun keduanya sangat berbeda. Seiring berjalan nya waktu, Angular Team mengupdate versi. Namun ketika sudah mencapai versi Angular 2.3, versi selanjutnya yang di rilis adalah Angular 4. Disini saya sempat menjadi jengkel dimana saat itu saya baru terjun di Angular 2 dan tiba tiba di update menjadi Angular 4. Saya sempat memutuskan untuk meninggalkan Angular karena dalam waktu dekat mereka mengupdate 2 Major versi, namun disaat itu saya tidak mencari tahu tentang alasan nya. Hingga pada saat saya mencoba Angular 4, saya merasa familiar dengan syntax nya yang mirip dengan Angular 2.

Setelah mencari tahu, ternyata Angular 4 tidak mengalami major update dari Angular 2.3. Yang terjadi sebenarnya dikarenakan Angular Libraries yang digunakan pada Angular 2.3 ada sedikit perbedaan versi, dan agar tidak membuat developer bingung, Angular Team memutuskan untuk mengupdate menjadi Angular 4.

Selanjutnya, agar tidak membuat tambah bingung, Angular Team memutuskan untuk menghilangkan Version Suffix yang awalnya Angular 4, menjadi Angular. Jadi hanya ada 2 jenis Angular. AngularJS(1.x) dan Angular (2+). 

Sekian dulu penjelasan saya, semoga mencerahkan.

Sunday, September 17, 2017

Fix Bootcamp Error Install Windows 10 Detect MBR Partition On EFI System

Kemarin ketika saya akan menginstall Windows pada Macbook saya, saya menemui error pada saat akan memilih disk yang akan di install Windows, error nya bisa dilihat pada gambar dibawah.



Setelah menjelajah berbagai macam forum, saya menemukan solusi untuk masalah tersebut. Hal di atas terjadi karena partisi yang dibuat Bootcamp memiliki attribute MBR Hybrid. Seharusnya attributenya bernilai MBR Protective. Untuk mensolve nya, pada saat Bootcamp selesai membuat partisi Windows dan melakukan restart, kita tahan option/alt key untuk memilih disk yang akan di boot, lalu pilih MacOs lagi kemudian siapkan beberapa langkah berikut:
  1. Download latest version of GPT fdisk.
  2. Install GPT fdisk dengan menjalankan installer yang sudah di download.
  3. Buka terminal dan ketik
    sudo gdisk /dev/disk0
    
  4. Jika MBR partition terset ke hybrid, lanjutkan ke step 5, namun jika sudah terset ke protective, bisa di skip semua step dibawah ini. Ketik q & enter untuk keluar dari GPT fdisk.
  5. Ketik p untuk melihat existing partition table dan pastikan kita sudah memilih disk yang benar.
  6. Ketik x untuk memilih expert menu.
  7. Ketik n untuk membuat protective MBR.
  8. Ketik w untuk menyimpan perubahan dan pastikan di konfirmasi perubahan nya.
  9. Ketik q untuk keluar dari GPT fdisk.
  10. Jalankan code pada step 3 dan pastikan hasilnya seperti gambar dibawah.

Jika sudah, restart MacOs nya lalu lanjutkan instalasi Bootcamp. Finally error di atas sudah tidak keluar lagi dan sukses menginstall windows 10 pada Macbook saya.

Semoga membantu !

Angular Directive Data Binding Tips

Pada kesempatan ini saya ingin berbagi tips ketika bermain dengan Directive component pada AngularJs. Sebelum kita bermain, kita harus tahu terlebih dahulu directive yang ingin kita buat hanya membutuhkan load 1 kali saja atau setiap ada perubahan data akan melakukan perubahan view. 

Biasanya secara default directive yang dibuat hanya meload 1 kali saja pada saat initial load, namun ada juga directive yang membutuhkan logic tambahan jika ada perubahan data, maka bisa langsung menyesuaikan datanya. 

Sebagai contoh, kita mempunyai directive seperti gambar dibawah. 


Directive di atas untuk membuat network graphic pada VisJs. Pada directive di atas mempunyai 3 variable yang harus dipassing kedalam directive. 
  1. ngModel : data utama yang diperlukan untuk membuat graphic vis network
  2. onSelect  : merupakan method untuk mengambil properties pada nodes yang kita pilih
  3. options    : berupa data yang dipakai untuk style ing vis network 

Variable network dipakai untuk membuat graphic network pada VisJs.
Pada directive ini kita tidak menambahkan logic apa apa yang hasilnya hanya menampilkan data sesuai dengan yang pertama di load. 

Bagaimana bentuk directive yang sudah ditambahkan logic agar jika terjadi perubahan data maka akan langsung membuat graphic yang baru? 


Pertama kita define variable network dengan null. Kemudian kita buat scope.$watch yang dipakai untuk memantau perubahan data pada variable ngModel. Jika ngModel nya null, maka tidak akan melakukan apa apa, dan jika variable network nya tidak null, maka graphic yang sudah ada akan di destroy, kemudian akan di create lagi network yang baru dengan data yang baru pula.

Dengan logic seperti di atas kita sudah bisa membuat directive yang dinamis, dimana jika ada perubahan maka akan langsung di implement.

Semoga membantu dan mencerahkan ide !
Happy coding


Sunday, June 18, 2017

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

Friday, March 17, 2017

NgMap-Angular Google Maps Directive Part 2

Pada part 1 kita masih menggunakan basic nya ngmap. Bagaimana kalau kita akan menambahkan fungsi add marker ketika klik di map? Bagaimana juga jika ingin menampilkan streetview pada saat berbarengan dengan add marker untuk melihat situasi sekitar marker? Yup kita akan membahas itu pada kesempatan ini. Jika pada part 1 kita hanya bermain dengan html, maka pada part 2 kita akan bermain pada controller juga.

Pertama tama kita ubah dulu konsep hardcode yang ada pada part 1 menjadi sebuah variable yang bisa control dari controller.

 <ng-map zoom="17" scrollwheel="true"   
              zoom-to-include-markers="false" center="{{lat}},{{long}}"  
              on-click="addMarker()" default-style="true">  
         <marker   
          position="[{{lat}},{{long}}]">  
         </marker>  
         <street-view-panorama container="streetview"  
          click-to-go="false"  
          disable-default-u-i="false"  
          disable-double-click-zoom="false"  
          position="[{{lat}},{{long}}]"  
          pov="{heading: {{heading}}, pitch: {{pitch}}}"  
          scrollwheel="false"  
          enable-close-button="true"  
          visible="true">  
         </street-view-panorama>  
        </ng-map>  
        <div id="streetview"></div>  
 <style>  
  map, #streetview {display:inline-block !important;width:45%;height: 400px}  
 </style>  
Jika pada part 1 kita langsung isi center pada ng-map dan position pada street-view-panorama, sekarang kita ubah menjadi lat untuk lattitude dan long untuk longitude. Serta pada ng-map kita tambahkan function on-click untuk merubah posisi marker. Oke, untuk part html sudah cukup, sekarang kita akan bermain di Controllernya.


 angular.module('testingggApp').  
 controller('MainCtrl', [  
   '$scope', 'NgMap',  
   mainCtrl  
 ]);  
 function mainCtrl($scope, NgMap) {  
   $scope.heading = 90;  
   $scope.pitch = 0;  
   $scope.lat = -6.175392999999987;  
   $scope.long = 106.82702100000006;  
   $scope.addMarker = function(event) {  
     var ll = event.latLng;  
     $scope.lat = ll.lat();  
     $scope.long = ll.lng();  
   };  
 };  
Pada awal controller, variable lat & long terlebih dahulu kita define variable nya. Sebagai contoh kita tetap menggunakan monas sebagai base lat & long nya. Untuk merubah posisi marker kita sudah menambahkan method addMarker. Cara kerjanya adalah ketika kita klik di random posisi maps, maka kita akan memanggil method addMarker yang ketika kita klik akan mengisi parameter event untuk mengambil lat dan long. Kemudian jika sudah dapat posisi lat long yang baru, maka kita akan assign value itu ke variable lat & long yang sudah ada. Resultnya akan seperti ini.


Oke sekarang posisi marker sudah berpindah, namun bagaimana untuk membuat streetview mengikuti posisi marker ?
Untuk merubah posisi streetview, kita harus mengambil instance map terlebih dahulu, kemudian cukup mengikuti aturan Google Maps API untuk mengeset streetview panorama nya. Jadi dengan menggunakan ngmap kita tidak perlu repot repot menghafal syntax orang yang membuat, kita cukup menggunakan panduan global yang sudah disediakan Google.
Untuk mengambil instance map kita bisa pergunakan line berikut.
  NgMap.getMap().then(function(map) {  
       $scope.map = map;  
     });  
Setelah dapat, kita bisa pergunakan variable map untuk mengeset streetview.

 NgMap.getMap().then(function(map) {  
       $scope.map = map;  
       var fenway = {  
         lat: ll.lat(),  
         lng: ll.lng()  
       };  
       var panorama = new google.maps.StreetViewPanorama(  
         document.getElementById('streetview'), {  
           position: fenway,  
           pov: {  
             heading: 34,  
             pitch: 10  
           }  
         });  
       map.setStreetView(panorama);  
     });  
Hasilnya akan menjadi seperti ini.
 angular.module('testingggApp').  
 controller('MainCtrl', [  
   '$scope', 'NgMap',  
   mainCtrl  
 ]);  
 function mainCtrl($scope, NgMap) {  
   $scope.heading = 90;  
   $scope.pitch = 0;  
   $scope.lat = -6.175392999999987;  
   $scope.long = 106.82702100000006;  
   $scope.addMarker = function(event) {  
     var ll = event.latLng;  
     $scope.lat = ll.lat();  
     $scope.long = ll.lng();  
     NgMap.getMap().then(function(map) {  
       $scope.map = map;  
       var fenway = {  
         lat: ll.lat(),  
         lng: ll.lng()  
       };  
       var panorama = new google.maps.StreetViewPanorama(  
         document.getElementById('streetview'), {  
           position: fenway,  
           pov: {  
             heading: 34,  
             pitch: 10  
           }  
         });  
       map.setStreetView(panorama);  
     });  
   };  
 };  

Mudah bukan?
Semangat & Keep Coding guys !
See ya


https://github.com/allenhwkim/angularjs-google-maps
https://ngmap.github.io/

NgMap-Angular Google Maps Directive Part 1

Pada kesempatan ini saya ingin membahas tentang Google Maps Directive. Di salah satu project yang saya tangani, membutuhkan maps sebagai komponen utama. Namun ketika ingin mengimplemen maps secara standart itu membutuhkan banyak coding dan menurut saya tidak efisien jika kita menggunakan angular namun cara penyelesaiian nya menggunakan javascript. Akhirnya saya menemukan module ngMap. 

Module ini merupakan Google Maps Directive yang sudah membundle semua Google Maps v3 api didalamnya dan module ini juga tidak mengharuskan kita coding javascript hanya untuk menampilkan maps. Bukan berarti kita benar-benar tidak coding yah, namun porsi coding nya menjadi sangat minim dan hanya disaat kondisi tertentu saja. Pada kesempatan ini pula saya ingin menjelaskan cara pasang & penggunaan tanpa melakukan coding javascript. Langsung saja kita coba pasang ngMap.

Pertama-tama jika kalian bower users, jalankan command 
 bower install ngmap  
  1. Include ng-map.min.js<script src="/bower_components/ngmap/build/scripts/ng-map.min.js"></script>
  2. Include Google maps:
    <script src="http://maps.google.com/maps/api/js"></script>
  3. Tambahkan ngMap pada angular module
    var myApp = angular.module('myApp', ['ngMap']);
Jika sudah, kalian cukup tambahkan sample html berikut di dalam html mu untuk me-load map yang centernya berada di Monas, Jakarta.
 <map center="[-6.175392999999987, 106.82702100000006]" zoom="18" />  

Bagaimana jika ingin tampilan map nya menggunakan Satelite View? Cukup tambahkan parameter map-type-id="MapTypeId.SATELLITE" di dalam html diatas sehingga menjadi 
 <map center="[-6.175392999999987, 106.82702100000006]" zoom="18"   
 map-type-id="MapTypeId.SATELLITE" >  

Bagaimana jika ingin menambahkan marker?
 <map center="[-6.175392999999987, 106.82702100000006]" zoom="18"   
 map-type-id="MapTypeId.SATELLITE" >  
 <marker position="[-6.175392999999987, 106.82702100000006]" />  

Kalau Streetview?
 <map id="sv" street-view="StreetViewPanorama(document.querySelector('map#sv'),   
 {position:new google.maps.LatLng(-6.175392999999987, 106.82702100000006)})" />  

Terlihat mudah bukan? Bagaimana jika ingin menampilkan maps beserta streetview bersamaan?
 <ng-map zoom="18" center="[-6.175392999999987, 106.82702100000006]"  
   default-style="false"  
   map-type-id="MapTypeId.SATELLITE" tilt="45">  
   <street-view-panorama container="streetview">  
   </street-view-panorama>  
  </ng-map>  
  <div id="streetview"></div>   
 <style>  
  map, #streetview {display:inline-block !important;width:45%;height: 400px}  
 </style>  


Sekian dulu untuk kesempatan ini, next kita akan membahas modifikasi menggunakan ngMap pada kesempatan berikutnya.

https://github.com/allenhwkim/angularjs-google-maps
https://ngmap.github.io/

Saturday, December 17, 2016

Implement Authentication Service in Angular 2 Routing

Pada saat mendevelop web, pasti kita mempunyai private menu dan public menu. Pada private menu mekanisme nya kita di cek terlebih dahulu apakah kita diperbolehkan untuk mengakses menu itu atau tidak, jika boleh maka menu itu akan bisa kita akses, namun jika tidak maka akan di redirect ke sebuah url.

Tentu ini merupakan hal yang penting, namun bagiamana cara kita mengimplement hal tersebut pada Angular 2?

Pertama tama kita buat terlebih dahulu simple service yang diberi nama class AuthService. Service ini isinya mengecek apakah kita mempunyai access_token atau tidak. Sebelum nya kita mengimplement SessionStorageService dari ng2-webstorage.


Kemudian buat sebuah service baru yang diberi nama class AuthGuard yang mengimplement class @angular/router. Di dalam nya kita buat sebuah method yang nantinya akan dipanggil dari router component kita. Jangan lupa kita import AuthService yang sudah kita define sebelum nya,karena disini kita akan memanggil service dari method itu.


Pada routing, kita cukup menambahkan canActivate:[AuthGuard].


Hasilnya, maka jika kita mengakses path tertentu maka secara langsung router memanggil service yang di dalam nya dia mengecek apakah kita punya token atau tidak.

Semoga membantu !

Implement GET Method in Angular 2

Pada kesempatan kali ini saya ingin berbagi tentang bagaimana mengimplement GET method pada Angular 2. 


Pertama tama kita buat dahulu 1 buah simple component lalu kita beri nama person.ts. Di dalam component ini kita akan membuat sebuah directive yang bernama 'my-person' yang nantinya akan dipanggil dari maincomponent.



Kemudian kita buat 1 buah service dan diberi nama peopleService.ts. Kita akan menghit service itu untuk mendapatkan data. Sample GET Service yang akan dipakai diambil dari 
 https://jsonplaceholder.typicode.com/posts  





Setelah membuat service jangan lupa mengimport  service & component yang sudah kita define. Untuk Component kita register di dalam declarations sedangkan service kita register di dalam providers.


Simple component dan service yang sudah kita buat akan dipanggil dari main component.


Berikut isi dari get.component.html. Dengan menggunakan selector 'my-person' kita harus memprovide data yang dibutuhkan.


[name]="person.title"
maksud dari potongan coding di atas adalah kita mengisi name (yang sudah di define di person.ts) dari person.title

(hello)="saidHello($event)"
maksud dari potongan coding di atas adalah kita mengisi hello menjadi sebuah Event Emmiter yang sudah di define di person.ts yang isinya diambil dari method saidHello yang sudah di define di mainComponent.

ngFor dipakai sebagai looping atau seperti component ng-repeat pada angular 1 yang value nya diambil dari variable people.

Berikut hasil dari html yang sudah tergenerate.


Semoga membantu !


Sunday, September 18, 2016

Cara Merubah Layout Pada Webcenter Portal

Pada kesempatan ini saya ingin berbagi cara untuk merubah tampilan layout pada suatu page tertentu di webcenter portal.

  1. Pertama tama masuk ke menu administer portal yang sudah kalian buat



  2. kemudian pada bagian Edit Portal, kalian pilih page mana yang ingin kalian edit layout nya.
    Jika sudah klik edit page pada bagian atas kanan
  3. Klik change layout
  4. Pilih layout yang akan kalian gunakan

  5. Save
Layout yang bisa dipakai itu sangat banyak, tidak terbatas dari apa yang sudah di sediakan saja, namun kita jg bisa membuat sendiri layout seperti apa yang ingin kita inginkan.

Selamat mencoba !