Monday, June 22, 2015

Redis Geo Module

Merupakan module tambahan yang berkaitan dengan informasi lokasi yaitu koordinat latitude dan longitude. Module ini memiliki command tambahan yang tidak ada di Redis, yaitu :
  1. geoadd
  2. georadius
  3. georadiusbymember
  4. geoencode
  5. geodecode 
Dengan module tambahan ini kita dapat memanfaatkannya untuk menyimpan data lokasi (koordinat) dari banyak tempat, dan melakukan pencarian dari koordinat tertentu dan dalam radius tertentu.

Misalnya seperti ini, kita memiliki data beberapa mall di sekitar Bekasi Barat sebagai berikut :
  1. Mall Metropolitan Bekasi (-6.248632,106.990887)
  2. Bekasi Cyber Park (-6.246803,106.991201)
  3. Giant Mega Bekasi (-6.249384,106.993084)
  4. Grand Metropolitan Bekasi (-6.249152,106.984512)
  5. Bekasi Square (-6.254469,106.989780)
 Seandainya kita sedang berada di pintu keluar tol Bekasi Barat (-6.249051,106.991700) dan ingin mencari tahu mall yang ada di sekitar lokasi dalam radius 500 m. Bagaimana caranya ?

Lokasi Pin Point (-6.249051,106.991700)

Hmmm.. Tentu saja, kita bisa mengandalkan Google Map untuk mencarinya.
Tapi, bagaimana kita mencari tahun dengan bantuan Redis Geo Module ?

Sebelum kita dapat melakukan pencarian dengan Redis Geo Module, kita perlu meng-load data lokasi mall ke dalam Redis, seperti ini :

geoadd mall_bekasi -6.248632 106.990887 "Mall Metropolitan Bekasi"
geoadd mall_bekasi -6.246803 106.991201 "Bekasi Cyber Park"
geoadd mall_bekasi -6.249384 106.993084 "Giant Mega Bekasi"
geoadd mall_bekasi -6.249152 106.984512 "Grand Metropolitan Bekasi"
geoadd mall_bekasi -6.254469 106.989780 "Bekasi Square"

Lalu lakukan pencarian seperti ini :

georadius mall_bekasi -6.249051 106.991700 500 m

dan hasilnya :

1) "Giant Mega Bekasi"
2) "Mall Metropolitan Bekasi"
3) "Bekasi Cyber Park"

Sekian dan semoga blog ini menginspirasi teman-teman.

Say Hello to Ionic Framework

Di postingan sebelumnya kami sempat membahas bagaimana membuat mobile apps menggunakan hybrids technology (phonegap). Dimana Phonegap memungkinkan kita membuat mobile apps hanya dengan menggunakan HTML, CSS dan Javascript.

Tetapi pada saat kita melakukan development menggunakan phonegap, kita masih diharuskan untuk melakukan design dan menambahkan framework javascript sendiri untuk mendukung proses development.

Dikesempatan kali ini kita akan membahas membuat aplikasi mobile menggunakan Ionic Framework. Ionic adalah HTML5 native app development framework yang membantu kita untuk membuat hybrids mobile apps.

Ionic Framework berfokus pada meningkatkan tampilan dari mobile apps dan juga meningkatkan fungsional dari UI interaction dari aplikasi. Ionic sendiri bekerja diatas cordova dan phonegap, hanya saja Ionic menambahkan beberapa component yang dibutuhkan dalam melakukan development mobile apps.  Berikut beberapa component yang disediakan oleh Ionic:


  1. CSS Components, dengan memanfaatkan css component dari Ionic kita dimudahkan untuk membuat tamplate yang berorientasi mobile.
  2. Sass, Ionic juga menginclude Sass, sehingga kita akan jauh lebih dimudahkan dalam menghandle css diaplikasi.
  3. Javascript extension, Tidak hanya menggunakan AngularJs sebagai javascript framework, Ionic juga menambahkan beberapa javascript component yang nantinya berguna untuk menghandling event-event di aplikasi yang sifatnya lebih mobile oriented.
  4. CLI, Ionic juga menyediakan beberapa perintah command line yang nantinya berguna untuk membuild, run dan testing aplikasi.
  5. Ionicons, Kumpulan Icon yang disediakan oleh ionic. 

Berikut langkah-langkah yang untuk instalasi dan membuat sample app menggunakan Ionic Framework.

  1. Pastikan kalau Node.js sudah terinstal di komputer kalian.
  2. Masuk ke command line dan jalankan perintah berikut:  
  3. sudo npm install -g cordova ionic,
  4. Setelah menginstall Cordova dan Ionic, kita akan masuk ke proses membuat sample app. berikut adalah perintah untuk membuat sample app.
    ionic start [Nama aplikasi] [Template].
    Di Ionic kita dapat menggunakan beberapa jenis template pada aplikasi kita, yaitu Tabs, Sidemenu, dan Blank.

  5. Setelah itu ionic akan mengenerate mobile app kita dan membuat struktur code seperti berikut: 
  6. Selanjutnya kita akan menjalankan aplikasi yang barusan kita buat. Pada contoh kali ini saya akan menjalankan aplikasi untuk iOS jadi yang harus saya lakukan adalah menambahkan platform di aplikasi kita untuk iOs, jalankan perintah berikut di command line: 
    $ cd [nama_aplikasi]/
    $ ionic platform add ios
  7. Selanjutnya build aplikasi:
    $ ionic build ios
  8. dan jalankan aplikasi:
    $ ionic emulate ios
    dan voilĂ , aplikasi kita langsung bisa dijalankan di iOS simulator


note: jika terjadi error pada saat menjalankan apikasi ke simulator, jalankan perintah berikut: 
$ npm install -g ios-sim

Customize listview android

Pada blog kali ini saya akan membahas bagaimana customize listview di android.  List view adalah widget untuk menampilkan data dalam bentuk list yang dapat di-scroll.
  1. Langkah pertama buat new Android project.
  2. Pada activity.xml tambahkan komponen listview
  3. Create file list_item_adapter.xml
  4. Create class SampleAdapter
  5. Sisipkan code seperti gambar dibawah pada MainActivity.java 
  6. Langkah terakhir, jalankan di emulator:
Sekian blog singkat saya, semoga bermanfaat :)

Source code:
https://github.com/andywiranata/SampleCustomListview


Mengontrol Aksi dari Pointer Kursor Mouse

Action dari pointer cursor mouse ternyata bisa di atur secara programatical, dan sepertinya semua bahasa pemograman memiliki library nya masing-masing untuk hal ini.

Menurut saya ini merupakan salah satu komponen yang bisa dikembangkan menjadi beberapa ide menarik karena action dari pointer mouse itu bersifat universal jadi bisa di terima oleh semua window, shortcut, file, dll.

Mungkin saja dengan sebuah algoritma pada image processing menggunakan webcam pada notebook ditambah komponen ini bisa menghadirkan bentuk interaksi baru yang lebih atraktif, seperti beberapa Smart TV yang menggunakan gesture tangan sebagai controller-nya.

Untuk mengontrol aksi dari kursor mouse dalam pemrograman java bisa menggunakan java.awt.Robot dan sebagai signal input gunakan java.awt.event.InputEvent. Kedua library tersebut sudah tersedia pada library default java, dan bisa langsung di import pada aplikasi dekstop yang akan kita buat.

public class ControlMouse {
    public static void main(String[] args){

        try {
            Robot robot= new Robot();
            // untuk memindahkan ordinat mouse
            robot.mouseMove(640,480);
           
            // untuk klik kiri
            robot.mousePress(InputEvent.BUTTON1_MASK);
            // untuk melepas klik
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
           
            // untuk klik kanan
            robot.mousePress(InputEvent.BUTTON3_MASK);
            // untuk melepas klik
            robot.mouseRelease(InputEvent.BUTTON3_MASK);
           
        } catch (AWTException e) {
            // dibutuhkan sebuah catch yaitu AWTException
            e.printStackTrace();
        }
    }
}

dari 3 action di atas (berpindah koordinat, klik kiri, dan klik kanan) bisa dikombinasikan menjadi aksi men-drag atau aksi lainnya yang bisa dilakukan oleh perangkat mouse.





Phonegap tutorial


Saya akan membahas pembuatan aplikasi mobile menggunakan hybrid teknologi yaitu Cordova. Cordova adalah tools untuk pengembangan aplikasi mobile menggunakan teknologi Web (HTML, CSS & JavaScript) dan cross platform development (ios, android dll) . Cordova juga menyediakan API untuk mengakases native device seperti camera / accelerometer. 

Berikut langkah - langkah untuk instalasi cordova dan sample app:
  1. Pastikan anda sudah menginstall nodejs, silahkan download di https://nodejs.org/
  2. Buka cmd dan jalankan instruksi ini :
    sudo npm install -g cordova
  3. Langkah berikutnya mari kita buat sample project :
    cordova create sampleApp com.nostratech.sample HelloWorld
    Setelah menjalankan instruksi diatas akan struktur folder seperti berikut:
    sampleApp/
        config.xml
        hooks
        platforms
        plugins
        www
            
  4. Tambahkan platform (ios, amazon-fireos, android dll), pada kali ini saya hanya menambahkan platform android:
    cordova platform add android

  5. Langkah terakhir mari kita build & jalankan di emulator android
    cordova build cordova emulate build
Sample App

Nah untuk melakukan development kalian bisa menaruh file js, html , css dan img di folder www.

Sekian blog dari saya :)

Why Go Programming ? (Not Java)

Mungkin ini selalu terbesit di benak kita apabila kita belajar Go. Apa yang membedakan Go dibandingkan bahasa pemrograman yang lain. Karena saya dari Java Programmer, saya selalu membandingkan Java dengan Go. Apa sih kehebatan Go dibanding dengan Java.

Mari kita bahasa dari :
  • Object Oriented Programming
  • Concurrent
  • Library and Tools
  • Performance

Object Oriented Programming
Semua orang mengenal Java as Object Oriented Programming. Dan biasanya selalu meng-anak tirikan Functional Programming atau Procedure Programming. Itulah yang ada di benak sebagai orang, termasuk saya.
Cemen kalau loe gak pake OOP. Yups, sekali lagi itulah yang ada di benak saya. Hingga akhirnya saya mempelajari Go dan mengambil keputusan, apa salahnya dengan function programming.
Ya, apa salahnya dengan functional programming. Go bisa dibuat seperti OOP namun dia sendiri tidak mempunyai class. Yang di pakai di Go adalah struct, sama seperti C.

Concurrent
Nah inilah kelebihan dari Go, karena dia sudah dilengkapi dengan concurrent. Dengan adanya concurrent kita bisa memanfaatkan core dari processor dengan optimal.
Lalu apakah Java tidak ada concurrent ? Tentu di Java ada, namun saya sendiri belum mencoba apakah concurrent di Java lebih baik atau sebaliknya.

Library and Tools
Untuk ini Java lebih bagus, karena library and tools lebih banyak. Secara Java sudah ada lebih dulu di bandingkan Go. Terlebih lagi Java di dukung oleh komunitas dan vendor-vendor besar seperti IBM, HP, Oracle dan lain-lainnya. Bagi programmer Go jangan berkecil hati, karena library Go cukup banyak.

Performance
Untuk yang ini menurut saya pribadi Go lebih baik. Karena Go berjalan langsung di atas OS, tidak seperti Java yang berjalan di atas Virtual Machine. Walaupun Java VM di claim performance nya tidak jauh berbeda dengan native.

Banyak hal lagi yang bisa kita bahas disini, namun dari semua itu saya mengambil kesimpulan "Language just a tools to solve the problem". Yups, apapun bahasa pemrogramannya mereka semua adalah alat yang kita gunakan untuk memecahkan masalah.

Untuk saya pribadi Go merupakan salah satu bahasa pemrograman terbaik dan layak kita gunakan untuk production melihat performance cukup bagus.

Tutorial Go Programming Part 2

Pembahasan kali ini masih berkisar tentang pengenalan di bahasa pemrograman go. Dan tutorial kita ini melanjutkan tutorial kita sebelumnya, dimana yang akan kita bahas adalah :
  1. Create your library.
  2. Create a testing.
Tanpa berlama-lama mari kita mulai dengan :

Create your library
Yuk, kita buat library reverse word. Membalikkan kalimat dari kanan ke kiri.
Contoh : Ayunda Buwana menjadi anawuB adnuyA

Langkah-langkah yang harus di lakukan adalah :
  • Buat folder stringutil
$ mkdir $GOPATH/src/yukibuwana.com/demo/stringutil
  • Buat file dengan nama reverse.go
$ vi $GOPATH/src/yukibuwana.com/demo/stringutil/reverse.go
  • Untuk code nya adalah
// Package stringutil contains utility functions for working with strings.
package stringutil

// Reverse returns its argument string reversed rune-wise left to right.
func Reverse(s string) string {
 r := []rune(s)
        for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
  r[i], r[j] = r[j], r[i]
 } 
        return string(r)
}
  • Simpan file tersebut dan compile dengan cara
$ go install $GOPATH/src/yukibuwana.com/demo/stringutil
  • Ubah filenya menjadi hello.go menjadi
package main

import (
 "fmt"
 "yukibuwana.com/demo/stringutil"
)

func main() {
 s := "Ayunda Buwana"
 fmt.Println(stringutil.Reverse(s))
}
  • Untuk menjalankannya dengan cara
$ go install $GOPATH/src/yukibuwana.com/yuki/hello.go
  • Dan hasilnya adalah
$ anawuB adnuyA

Testing

Go menyediakan framework untuk testing dengan menggunakan go test.
Sebelumnya ada kondisi yang harus di perhatikan, yaitu :
  1. Nama file harus di akhir _test.go
  2. Nama fungsi harus di awali dengan TestXXX
Tanpa berlama-lama lagi mari kita coba langkah-langkah berikut :
  • Tambahkan file reverse_test.go
$ vi $GOPATH/src/yukibuwana.com/demo/stringutil/reverse_test.go
  • Untuk code nya adalah 
package stringutil

import "testing"

func TestReverse(t *testing.T) {
 cases := []struct {
  in, want string
 }{
  {"Hello, world", "dlrow ,olleH"},
  {"Hello, 世界", "界世 ,olleH"},
  {"", ""},
 }
 for _, c := range cases {
  got := Reverse(c.in)
  if got != c.want {
   t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
  }
 }
}
  • Sedangkan cara menjalankannya adalah
$ go test $GOPATH/src/yukibuwana.com/demo/stringutil
ok   yukibuwana.com/demo/stringutil 0.004s
Lihat, begitu mudahnya menggunakan Go. Dan hebatnya sendiri Go sudah build up dengan testing framework. Testing sangat di perlukan dalam proses Development.

Nantikan blog saya selanjutnya tentang go.


Thanks.

Referensi : http://golang.org/doc/code.html

Mendefinisikan Organizational Unit di Oracle BPM

Dalam Oracle BPM, kita biasanya menggunakan Role untuk melakukan assignment sebuah task. Sebagai contoh, proses berikut memiliki activity Input Data dan Put Attachment. Dalam swimlane, pelaku/assignee dari task tersebut adalah Role Finance. Seluruh orang dalam role Finance akan menerima dan dapat melakukan action (Approve, Submit, Reject). Kelemahannya adalah seluruh orang dalam Role Finance akan mendapat assignment tersebut, padahal belum tentu semua orang diijinkan untuk melakukan action terhadap assignment tersebut.


Sebagai contoh, dalam role Finance, akan ada breakdown Staff, Manager, GM dan Director. Tentunya hak akses Staff dan GM dapat berbeda, dan sangat tidak efektif apabila kita mendefinisikan role tambahan Staff Finance, Manager Finance dsb untuk meng-cater kebutuhan akses ini. Untuk itulah kita menggunakan Organizational Unit, dimana sebuah role dapat dibagi lagi hak aksesnya ke bagian yang lebih kecil.

Blog ini akan menjelaskan bagaimana cara mendefinisikan OU dalam BPM.

1. Masuk ke <<host:port>>/bpm/workspace, log in sebagai Administrator. Buka tab administration.


2. Pilih Organizational Unit hingga layar berikut terbuka. Layar ini menampilkan OU yang telah kita definisikan, dan tempat mem-manage OU (create, edit, delete). Klik Create New -> Masukkan nama OU.


 3. Kita akan mendefiniskan OU Manager dengan childnya Staff.



 4. Di layar sebelah kanan, kita dapat menentukan siapa saja yang termasuk dalam OU Manager/Staff. Dalam kotak Members, klik tanda + hingga layar Select Member terbuka. Pilih member yang sesuai untuk OU tersebut.



5. Di step terakhir, anda dapat melihat seluruh OU yang telah didefinisikan dan dapat melakukan perubahan yang diperlukan. Misal: apabila terjadi mutasi jabatan karyawan, karyawan yang resign, kita dapat melakukan adjustment yang diperlukan, dan secara otomatis Task yang relevan akan diassign ke pengganti dari user tersebut.


Dalam blog berikutnya saya akan menjelaskan cara menggunakan OU dalam pembuatan aplikasi BPM di Jdeveloper.

Menggunakan Organizational Unit (OU) untuk Assignment User

Melanjutkan post sebelumnya tentang Organizational Unit (OU), sebelumnya kita membahas bagaimana cara membuat Organizational Unit di BPM. Dalam post kali ini, saya akan membahas bagaimana cara menggunakan/memanfaatkan OU ini dalam pembuatan aplikasi di BPM.

1. Buat aplikasi BPM anda di JDeveloper. Dalam aplikasi saya, akan terdapat sebuah swimlane dengan 2 User Activity: Input Data dan Put Attachment dengan Role assignment Finance. Apabila kita men-deploy aplikasi ini, task Input Data dan Put Attachment hanya akan dapat dilakukan oleh user-user dengan role Finance. 


2. Kita akan mencoba meng-assign task Put Attachment hanya pada user Finance dengan OU Manager. Klik kanan pada task Input Data -> Properties -> Implementation -> Data Association hingga layar berikut terbuka.




 3. Di layar Data Association, Pilih Output. Drag tombol 'fx' di kanan atas ke organizationalUnit. Masukkan OU yang akan diassign. Disini, setelah task Input Data selesai, BPM akan mengassign value ini ke dalam field Organizational Unit. Engine BPM akan membaca value ini, kemudian meng-assign task berikut hanya user dengan Organizational Unit yang ditentukan.


4. Sebagai contoh, kita akan mengassign task tersebut pada role Finance dengan OU Manager, maka definisikan value "Manager" pada Data Association -> Organizational Unit.


5. Sebagai contoh, kita akan mengassign task tersebut pada role Finance dengan OU Staff, maka definisikan value "Manager/Staff" pada Data Association -> Organizational Unit.


6. Yang paling penting adalah untuk mengosongkan value OU apabila task berikutnya tidak memerlukan OU lagi. Assign value "" pada OrganizationalUnit sebagai berikut. Hal ini harus dilakukan, karena apabila anda lupa mengosongkan OrganizationalUnit, value tersebut akan terus terbawa sepanjang Process berjalan sehingga mengacaukan assignment dari task-task anda.


Silahkan deploy aplikasi anda berdasarkan sample diatas. Sesuaikan value2 OU berdasarkan kebutuhan anda. Semoga membantu!

Sunday, June 21, 2015

Implement Restful API In Oracle Service Bus 12c Part 2

Pada part 1 kita sudah membuat Proxy Service & Business Service, maka selanjutnya kita akan membuat pipeline untuk memproses data dari Proxy ke Business kemudian dikembalikan ke Proxy lagi. Untuk membuat Pipeline, kita tinggal mendrag component Pipeline ke bagian Pipeline/Split Joins. Kemduan beri nama Pipeline tersebut, lalu klik Next.
Uncheck bagian Expose as a Proxy Service, kemudian pilih Service Typenya WSDL, kemudian browse WSDL yang tadi telah tergenerate dari Proxy Service yang telah kita buat.


Berikut tampilan nya jika sudah selesai. Kemudia klik Finish.


Pipeline sudah berhasil kita buat, langkah selanjutnya adalah menyambungkan Proxy Service ke Pipeline lalu Pipeline ke Business Service.



Jika sudah, langkah selanjutnya adalah kita akan membuat XQuery untuk memproses aliran data dari Proxy ke Business serta dari Business ke Proxy. Caranya adalah dengan mengklik kanan pada Folder Resources, kemudian pilih New lalu pilih XQuery File ver 1.0


Beri nama file XQuery nya dengan format :

  • XqueryName_PS2BS untuk Xquery yang menggunakan Resources dari Proxy Service menuju ke Business Service
  • XqueryName_BS2PS untuk Xquery yang menggunakan Resources dari Business Service menuju ke Proxy Service.
Sekarang kita akan membuat yang XqueryName_PS2BS terlebih dahulu, jika sudah memberi nama, pada bagian Sources klik tanda tambah.




Pada window Function Paramenter, isi nama paramenternya sesuai dengan keinginan anda, kalau saya akan memakai nama input. Kemudian pada Sequence Type, klik icon pensil untuk menspesifikan schema yang akan digunakan.


Klik browse file, kemudian pilih Proxy Schema yang telah kita buat dari Native Schema pada part 1. Lalu pilih Root Element nya Request.


Jika sudah klik Ok.


Jika sudah klik Ok.


Jika sudah, Klik icon pensil pada bagian Target.

Browse Schema yang akan kita target yaitu Schema yang telah kita import ketika akan membuat Business Service. Jika sudah pilih Root Element Request. Kemudian klik Ok.


 

Jika sudah bisa klik Ok. Maka akan muncul XQuery Mapper.


Tarik element dari Resource ke Target sesuai dengan keinginan mapping. Pada kasus ini, kita akan memapping dengan nama element yang sama.


Jika sudah bisa di save. Maka Xquery pertama yaitu XqueryName_PS2BS telah berhasil dibuat. Selanjutnya kita akan membuat XQueryName_BS2PS.


Caranya mirip seperti yang telah kita lakukan tadi, hanya berbeda pada penamaan serti pemilihan Resource Schema & Target. Kali ini Resource Schema yang akan kita pakai adalah Schema dari Business Service yang telah kita import tadi & Root Elemen nya Response. Sedangkan Targetnya adalah Native Schema yang telah kita buat tadi dan Root Element nya adalah Response.






Jika sudah selesai, maka Xquery Mapper akan muncul, lakukan mapping seperti yang telah kita lakukan tadi, namun kali ini jangan lupa mapping induk array elemen ke induk array element.

Dengan ini Xquery yang kita butuhkan sudah selesai dibuat. Selanjutnya kita akan memakai Xquery yang sudah dibuat itu di dalam Pipeline untuk memproses data. Buka pipeline, maka tampilan nya akan seperti dibawah.
Drag and drop komponen Replace pada bagian Request Action & Response Action. Klik Replace yang ada dibagian Request Action, kemudian isi Propertinya sebagai berikut.
Location : body
Value : pilih Xquery Resource kemudian pilih Xquery yang ada initial PS2BS
Replace Options : Replace Node Contents


Jika sudah memilih XQuery nya, klik bagian function. Kemudian pilih tab Namespace.


Tambahkan namespace mulai dari namespace Proxy Service yang sudah dibuat, maupun namespace Business Service yang telah ada.
Contoh :
Namespace Proxy Service
Prefix : type
URI : http://www.nostratech.com/demo/getDoctorListProxyService/type
Namespace Business Service
Prefix : xmnls
URI : http://www.nostratech.org/hie/uorder/getDoctorList/type





Jika sudah menambah namespace nya. Maka pada kolom binding awal kita bisa isi dengan $body/type:request Maksud dari kode ini adalah, kita mendefinisikan inputan dari variable body yang memiliki namespace type dengan elemen request.


Jika sudah, maka kita lanjut pada Replace yang berada pada Response Action. Lakukan hal yang sama seperti pada Replace sebelum nya, namun XQuery yang kita gunakan sekarang adalah Xquery yang memiliki initial BS2PS.


Pada kolom binding, kita isi dengan $body/xmnls:response Maksud dari kode disamping adalah, kita mendefinisikan inputan dari variable body yang memiliki namespace xmnls dengan elemen response.


Jika sudah, kalian bisa deploy ke OSB Server dan bisa test dengan menggunakan OSB Console maupun dengan langsung URL seperti contoh dibawah.



Dengan ini kita sudah berhasil mengimplement REST Service pada OSB dengan menggunakan Method GET. Sekian dulu dari saya, semoga membantu dan selamat mencoba !

Resource : http://www.ateam-oracle.com/creating-a-mobile-optimized-rest-api-using-oracle-service-bus-part-1/