Friday, October 29, 2010

Arsitektur Perangkat Lunak (Software Architecture)

Iseng-iseng baca buku Microsoft Application Architecture Guide v2 dari Microsoft, ternyata ada yg menarik yg ingin gw rangkum.

Pengertian Software Architecture
Adalah proses yg mendefinisikan solusi yg terstruktur yang memenuhi kebutuhan teknis dan operasional, disisi lain mengoptimasi quality dari sebuah aplikasi yg meliputi: performance, security, dan manageability.

Mendengar kata aplikasi ada beberapa hal yg perlu dipertimbangkan:
  • Bagaimana user menggunakan aplikasi tersebut?
  • Bagaimana aplikasi dideploy di production dan me-manage nya?
  • Bagaimana dengan atribut kualitas nya spt : performance, concurrency dan konfigurasi nya?
  • Bagaimana aplikasi didisain supaya memiliki fleksibilitas dan easy-to-maintain?
  • Apakah sistem bisa in-line dengan perkembangan teknologi yg akan datang?

Beberapa trend arsitektur software:
  • Desain yg fleksibel, configurable, dan berorientasi pada experience user (user empowerment).
  •  Penggunaan teknologi terupdate (market maturity)
  • Fleksibilitas dalam desain sehingga aplikasi tsb reuse dan mempermudah maintenance nya (flexible design). Teknik SOA bisa dipergunakan untuk berhubungan (interoperability) dengan aplikasi lain.
  • Mendesain aplikasi dengan memperhatikan trend masa depan (future trend)


Key Design Principle
  • Separation of concern :memisahkan layer aplikasi dari sisi fungsionalitas nya agar fitur aplikasi tidak overlap
  • Single responsibility principle :setiap komponen hanya bertanggung jawab pada 1 fungsionalitas atau gabungan fungsionalitas sejenis
  • Principle of least knowledge :komponen /object tidak perlu mengetahui detail dari object lain.
  • Don't repeat yourself :suatu fungsionalitas seharusnya hanya ada pada 1 object dan tidak dikomponen lain, sehingga menghindari copy-paste.
  • Minimize upfront design :hanya mendisain yg dibutuhkan saja


Design Practise
  • Menjaga pattern desain konsisten setiap layer.
  • Tidak melakukan duplikasi fungsionalitas dalam sebuah aplikasi
  • "Prefer composition to inheritance" karena inheritance menimbulkan ketergantungan yg lebih kepada parrent class, sehingga membuat reuse dari child class terbatas.
  • Menerapkan style coding dan naming convention dalam development nya.
  • Memaintain system QA selama proses development
  • Memperhatikan sisi operation
Key Architecture Style
  • Client/Server : memisahkan aplikasi menjadi 2 dimana client membuat request ke server. Dalam banyak kasus sebuah server adalah database dengan fungsionalitas direpresentasikan dalam sebuah storeprocedure. Yg termasuk style ini diantaranya: Client-Queue-Client System (komunikasi client berbasis queuing server), Peer-to-Peer application, Application Server (server host and execute application)
  • Component Base Architecture: memisahkan komponen aplikasi berdasarkan fungsionalitas yg reusable. Pertimbangan yg mendasarinya: reusable, replaceable, not context spesific, extensible, encapsulated & independent. 
  • Domain Driven Design: mendefinisikan object-2 bisnis ke dalam 1 domain bisnis.
  • Layered Architecture: memecah concern ke dalam beberapa layer aplikasi. Pertimbangannya: abstraction, encapsulation, clearly defined functional layer, high cohesion, reusable, loose coupling.
  • Message Bus: sebuah style yg menyediakan aplikasi yg bisa berinteraksi dengan menggunakan satu atau lebih chanel komunikasi
  • N-Tier/3-Tier: memisahkan fungsional ke dlm aplikasi yg berlokasi di beberapa komputer.
  • Object Oriented: arsitektur yg berorientasi object (memiliki karakteristik OOP)
  • Service Oriented Architecture (SOA): arsitektur yg menempatkan fungsionalitas aplikasi kedalam sebuah service. 
Overview of Layered Application Umumnya penggunaan layering dalam suatu aplikasi meliputi 3 layer utama: Presentation, Business & Data Layer.
Sedangkan untuk Services Layer ada diantara Business & Presentation Layer. Langkah -2 mendisain untuk sistem berbasis layer ini adalah:
  • Memilih strategi layer yg tepat / yg diperlukan
  • Memutuskan cara mendistribusikan layer dan komponen
  • Menentukan apakah akan memecah layer
  • Merumuskan aturan interaksi masing-masing layer
  • Mengidentifikasikan Crosscutting Concern (Fungsional umum) spt: logging, caching, validation, authentication, & exception management
  • Mendefinisikan interface masing-2 layer
  • Memilih strategy deployment
  • Memilih protokol komunikasi

Layer Presentation

 

UI Component: Elemen visual untuk mendisplay informasi ke user dan menerima input.
UI Process Component: Menyediakan code yg berisi behavior & struktur aplikasi yg penempatannya terpisah dari UI.
Beberapa hal yg patut dipertimbangkan dalam mendesain layer ini:

  • Communication
  • Caching
  • Composition
  • Exception Management
  • Navigation
  • User Experience
  • User Experience
  • User Interface
  • Validation
Layer Bisnis  
Terdiri dari: 1. Application Facade : (Optional) Menyediakan interface ke komponen business logic, diantaranya dengan menggabungkan beberapa operasi bisnis ke sebuah operation. Ini mengurangi dependency krn  external caller tidak perlu mengetahui detail komponen bisnis dan teknik interaksinya.
2. Business Logic Component : Fokus pada retrieving, processing, transformation & management data.     Termasuk dalam kategori ini adalah:
    • Business Workflow Component
    • Business Entity Component

        Step untuk membuat business Layer adalah:
    • Membuat high level design nya
    • Design kompoenen bisnisnya
    • Design komponen entiti bisnis
    • Design workflow nya

     

Thursday, October 28, 2010

Programmable Logic Controller (Part 1)

A programmable logic controller (PLC) / programmable controller adalah komputer yg digunakan untuk otomisasi proses elektromekanik, seperti mengkontrol mesin dalam sebuah pabrik, assembly atau  wahana hiburan. PLC banyak digunakan di berbagai industri dan mesin. Tidak seperti komputer General Purpose, PLC didesain untuk menerima banyak masukan dan pengaturan output, memanage range temperatur, mengatasi noise, dan mengatasi akibat dari getaran. Program tsb umum nya disimpan di non-volatile memory spt ROM.

Sejarah
PLC awalnya diciptakan sebagai respons atas kebutuhan perusahaan industri otomotif Amerika. PLC diadopsi oleh perusahaan industri otomotif dimana sistim ini menggantikan re-wiring dari proses hard-wiring ketika ada perubahan model produksi.
Sebelum PLC, proses control, sequencing dan interlock logic dijalankan oleh ratusan atau ribuan relay, timer, dan closed-loop controller.

Di 1968 GM Hydramatic (Divisi transmisi otomatis dari General Motor) mendapatkan winning proposal dari Bedrord Associates, Massachusetts. PLC pertama yg didesain adalah 084 diambil dari nama projectnya,

 Bedford Associates kemudian membuat perusahaan baru untuk develop, merakit, menjual dan maintain produk baru ini yakni Modicon (MOdular DIgital CONtroller). Salah satu orang yg bekerja di perushaan tsb adalah Dick Morley, yg dikenal sebagai "bapak PLC". Modicon ini kemudian masuk ke market Ground Electronics dan kemudian oleh perushaan Jerman AEG dan Scheider Electric (Prancis) sebagai ower saat ini.
North Andover, Massachusetts.

Salah satu dari model 084 saat ini bisa dilihat di  models built. Ini membuktikan industri otomotif masih satu dari banyak user

Pengembangan
Awalnya PLC didisain untuk menggantikan sistem relay. PLC ini diprogram dalam "ladder logic", yang mana menerapkan skema diagram dari logika relay. Notasi program ini dipilih untuk mengurangi kebutuhan training bagi para teknisi. This program notation was chosen to reduce training demands for the existing technicians.
Selain itu awalnya PLC menggunakan list instruksi pemrograman berbasiskan logika stack .

PLC modern saat ini bisa diprogram dalam berbagai cara, dari ladder logic sampai bahasa pemrogramman lainnya seperti BASIC dan C. Metode lainnya adalah State Logic, bahasa pemrograman high level yg didesain untuk program PLC berbasiskan state transtition diagram.

Beberapa PLC awalnya tidak dapat memproses logika secara grafis, dan logika tidak direpresentasikan sebagai kumpulan ekspresi dalam versi boolean. Sebagai terminal terprogram, lalu berevolusi untuk mengoperasikan ladder logic. Format terbaru spt State Logic dan Function Block disediakan, namun belum sepopuler ladder logic. Alasan utamanya adalah PLC menyelesaikan logic dalam sebuah sekuence yg bisa di prediksi dan diulang, dan ladder logic memungkinkan programmer untuk menemukan masalah yg berhubungan dengan sequence dengan lebih mudah.

Pemrograman
Awalnya PLCs, sampa dengan pertengahan 1980, diprogram dengan menggunakan panel atau terminal khusus yang kadang memiliki fungsi / key yg merepresentasikan berbagai logika program PLC. Program disimpan dalam tape catridge. Fasilitas printing dan dokumentasi sangat minimal dikarenakan keterbatasan memory. PLC generasi pertama menggunakan used non-volatile magnetic core memory.

Saat ini, PLC diprogram menggunakan software dalam PC. PC terkoneksi dengan PLC melalui Ethernet, RS-232, RS-485, atau RS-422. Software programming tsb memberikan fasilitas untuk entry dan edit ladder-style logic. Umumnya aplikasi menyediakan fungsi untuk debug dan troubleshoot aplikasi PLC, sebagai contoh, dengan meng 'highlight'  beberapa logic untuk menunjukkan status selama operasi atau dengan batuan simulator. Aplikasi akan mengupload dan mendownload program PLC, untuk backup dan restore. Dalam beberapa model PLC, program ditransfer ke dalam PC ke PLC melalui proggramming board yg menulis program ke dalam chip yg bisa diremove spt EEPROM atau EPROM.

Wednesday, October 27, 2010

Membuat sebuah installer (Cab) untuk windows mobile (Smart Device Application) .

Hollaa....

Sedikit yg ingin saya share mengenai .net untuk Smart Devices Application. Setelah membuat sebuah device application, yg akan kita lakukan tentunya adalah bagaimana mendistribusikannya ke device kita.
Aplikasi harus disimpan dalam cab file untuk bisa diinstal dan digunakan.

Sebuah Cab file adalah format setup default untuk Windows CE & Windows Mobile devices (similar to windows .msi files).  Anda mungkin telah menginstal beberapa aplikasi menggunakan .cab . Kurang lebih konsep nya sama.

Satu hal yg mungkin kita perlu tahu adalah cab file tsb diproses dengan wceloader.exe, dan cab tsb hanya dapat diinstal satu cab dalam satu waktu. That means we cannot have nested .cab files.
Ini bukan berarti bahwa kita tidak dapat membuat cab file yg berisi cab file lainnya. Tapi isi dari cab tsb, tidak dapat diinstal selama instalasi cab induknya. Kita harus menginstall nya secara manual.

Cara tradisional untuk membuat (.Cab) file adalah dengan memanfaatkan command line tool yg disebut CAB Wizard (cabwiz.exe). Kita tidak membahas teknik ini karena menurut saya kurang "user-friendly".

Cara yg termudah adalah dengan menggunakan Visual Studio IDE, yg memungkinkan kita untuk membuat
Smart Device CAB Projects, yg mencakup "internal project outputs", "external files", "resource files", "required registry entries", "shortcuts" dll, dan disimpan dalam sebuah  file cabinet setelah di "build".

Let's see an example:

Walkthrough: How to create a Smart Device CAB Project
Misalkan kita memiliki project sbb:

image
dan kita ingin meng -include- project tsb untuk membuat cab installer.
Caranya:
1) Copy DeviceCoolApp.exe,  assembly MyDeviceLibrary.dll dan resource file SampleKindOfResourceFile.xml ke folder aplikasi.
2) Selanjutnya, membuat sebuah shortcut in the Programs folder di device &
3) Set the string value HKLM\Software\Mobile Practices\DeviceCoolApp\Version to "1.0".
First of all, kita harus menambah project baru (Smart Device CAB Project) di solution: Right click on the solution, Add - New Project...
image
Call it DeviceCoolAppInstaller and press OK. Project baru tsb akan tampil di Solution Explorer.
Sekarang, saya sarankan kita untuk merubah properti nya untuk mendapatkan produk instalasi yg "good looking".
 Set the Manufacturer (Mobile Practices) and Product Name (DeviceCoolApp) as follows:
image
Sekarang saat nya menambah DeviceCoolApp.exe (the DeviceCoolApp project output) di CAB Project. Right click di  DeviceCoolAppInstaller - Add - Project Output...
image
Pilih DeviceCoolApp di Project selector, & Primary Output , & click OK.
image
Visual Studio akan secara otomatis mendeteksi dependency DeviceCoolApp. Dalam kasus ini ia akan mendeteksi MyLibrary.dll
image
**bila tidak terdeteksi, rebuild solution & Right Click di Detected Dependencies - Refresh Dependencies.
Sewaktu mendeteksi secara otomatis, kt tidak butuh untuk menambah  MyDeviceLibrary  sebagai Project Output di DeviceCoolAppInstaller.

Now it's time to add the resource file SampleKindOfResourceFile.xml .. yg mana seharusnya diinstal di folder instalasi. Gunakah File System Editor, saat DeviceCoolAppInstaller project dipilih tekan tombol File System Editor (btw, it's probably already open).
image
Now, right click on Application Folder - Add - File....
image
Browse and find SampleKindOfResourceFile.xml and press OK.
image
Selamat! sekarang kita sudah memiliki file yg siap diinstal. Step selanjutnya adalah menambahkan shortcut.

Sayangnya, Programs Folder tidak di-include di File System Editor, & kita butuh untuk memasukkannya secara manual: Right click di File System on Target Machine - Add Special Folder - Programs Folder.
image
And now, pilih Programs Folder di File System tree, klik kanan di panel kanan yg kosong   dan pilih Create New Shortcut
image
Selanjutnya pilih Application Folder - Primary output from DeviceCoolApp (Active) and press OK.
image
Dan rename menjadi "Device Cool App"
image
Ini akan menjadi shortcut di group Program pada Smart Device setelah instalasi. Sekarang kita tinggal menambahkan registry. Tekan Registry Editor button:
image
Lalu tambahkan nilai string "HKLM\Software\Mobile Practices\DeviceCoolApp\Version".
Anda butuh untuk membuat path key by key, dan menambahkan string value di panel sebelah kanan.
image
Name it "Version" lalu, pilih, dan masukkan "1.0" ke dalam field Value pada Properties Window
image
Dan  Smart Device CAB Project is done! Kita siap untuk "build" the solution, klik kanan pada DeviceCoolAppInstaller project dan pilih Build.
Anda dapat menemukan DeviceCoolAppInstaller.cab file dalam DeviceCoolAppInstaller\debug folder.
image
Sekarang aplikasi kita sudah siap didistribusikan. Disarankan sebelumnya untuk di test terlebih dahulu dengan menggunakan emulator atau langsung di device nya.

Salam.

Tuesday, October 26, 2010

Cara Berpikir Kreatif

Kali ini, gw mau sedikit share mengenai berpikir kreatif, spt berpikirnya artists, business man, ilmuwan dsb....(walau sebenernya gw masih belum menjadi semuanya, tapi share aja ga papa ya :d).
Tanpa basa-basi kita langsung saja ya....

Definisi Kreatif
Kreatif menurut yg saya tahu adalah "out of the box", yaitu berpikir tidak spt orang kebanyakan, agak nyeleneh namun OK untuk jadi trend, minimal bisa memecahkan masalah yg kita alami.
Kita dituntuk kreatif agar ide-ide kita tidak spt ide kebanyakan orang. Aha....!!! what is an idea?

Ide & Konsep
Ide adalah bentuk nyata "how-to" dari target/konsep yg  akan kita cari pemecahannya.
Misal:  Konsep: mencari penghasilan tambahan. Idenya: Mencari penghasilan tambahan dengan membuka counter pulsa online.

Lalu bagaimana caranya mendapatkan ide kreatif atau brilian?
Yang saya paling suka adalah dengan menentukan suatu kata secara acak. Coba tutup mata anda lalu berputar-putar lalu buka mata anda, lalu tuliskan kata yg anda lihat pertama kali, seperti mobil. List beberapa kata yg berhubungan dengan mobil, spt: bengkel, ban, speedometer, cepat, balap, dll....
Selanjutnya list beberapa kata yg berhubungan dengan bengkel, ban, speedometer, cepat, tsb. Begitu seterusnya, sampai anda menemukan apa yg anda inginkan. Percayalah ide ini akan membuat anda tercengang.
Hal yg perlu anda perhatikan, ide anda harus menjawab permasalahan anda, jangan mengambil ide sembarangan. Untuk itu setelah anda menemukan beberapa ide, coba list kekurangan dan kelebihannya dan ambil yg terbaik. Simple Kan ? Silahkan mencoba.

Welcome Guys :D

Finally gw buat blog jg akhirnya :d
Untuk urusan sharing gini awalnya males banget, mungkin karena gw lebih suka baca blog orang lain.
Namun akhirnya gw berpikir ga rugi maintain blog, malah untung. Gw ga perlu nulis semua yg gw takut nantinya bakal lupa, krn ada di blog gw sendiri. Begitu juga sharing ilmu, krn gw yakin makin banyak gw share bakal lebih banyak lagi gw dapet.
Di blog ini gw akan share apapun yg gw rasa perlu gw keep supaya ga lupa, spt: knowledge (anything of knowledge), experience, dll.
Thanks atas perhatian semuanya, bila ada yg kurang atau ingin berkomentar, feel free aja ya....
Salam,

Zydney