April 22, 2013

Menggunakan Vim Sebagai IDE Go


Untuk menggunakan Vim (http://www.vim.org), ada plugin utama serta berbagai plugin pendukung yang bisa digunakan. Sebaiknya, menggunakan pathogen untuk mempermudah pengelolaan berbagai plugin tersebut. Bagian ini akan menjelaskan berbagai konfigurasi serta instalasi yang diperlukan sehingga Vim bisa menjadi peranti untuk pengembangan aplikasi menggunakan Go.

Instalasi dan Konfigurasi Pathogen 

Pathogen adalah plugin dari Tim Pope yang digunakan untuk mempermudah pengelolaan plugin. Kode sumber dari Pathogen bisa diperoleh di   https://github.com/tpope/vim-pathogen . Untuk instalasi, ikuti langkah berikut:

$ cd
$ mkdir .vim/autoload
$ mkdir .vim/bundle
$ cd .vim/autoload
$ wget https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim
-2013-04-17 22:39:09--  https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim
Resolving raw.github.com (raw.github.com)... 199.27.75.133
Connecting to raw.github.com (raw.github.com)|199.27.75.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11730 (11K) [text/plain]
Saving to: ‘pathogen.vim’
100===================================================>] 11,730      50.3KB/s   in 0.2s

2013-04-17 22:39:11 (50.3 KB/s) - ‘pathogen.vim’ saved [11730/11730]
$ ls -la
total 20
drwxr-xr-x 2 bpdp bpdp  4096 Apr 17 22:39 .
drwxr-xr-x 5 bpdp bpdp  4096 Apr 17 22:21 ..
-rw-r--r-- 1 bpdp bpdp 11730 Apr 17 22:39 pathogen.vim
$

Setelah itu, untuk menggunakan Pathogen, letakkan aktivasinya di $HOME/.vimrc atau di $HOME/.vim/vimrc (saya piliah lokasi yang kedua) sebagai berikut:

execute pathogen#infect()

Setelah itu, semua plugin tinggal kita ambil dari repository (bisa dari github, bitbucket, dan lain-lain) langsung di-copy satu direktori ke direktori $HOME/.vim/bundle.

Instalasi dan Kofigurasi Plugin Golang dan Plugin Pendukung 

Setelah selesai melakukan instalasi Pathogen, berbagai plugin yang diperlukan bisa diambil langsung dari Internet. Berikut ini adalah daftar yang digunakan penulis:
  1. Colorschemes: untuk tema warna dari Vim. Bisa diperoleh di https://github.com/flazz/vim-colorschemes 
  2. Nerdtree: untuk menampilkan file-file dalam struktur pohon di sebelah kiri sehingga memudahkan navigasi. Bisa diperoleh di https://github.com/scrooloose/nerdtree 
  3. Golang: plugin utama agar Vim mengenali kode sumber Go. Bisa diperoleh di:https://github.com/jnwhiteh/vim-golang.git 
Cara instalasi:

$ cd
$ cd .vim/bundle
$ git clone

Hasil dari menjalankan ``vim'' atau ``gvim'' melalui shell untuk menulis kode sumber Go bisa dilihat pada gambar berikut:


Autocompletion 

Vim menyediakan fasilitas autocompletion melalui Omniautocompletion. Fasilitas ini sudah terinstall saat kita menginstall Vim. Untuk mengaktifkan fasilitas ini untuk keperluan Go, kita harus menginstall dan mengaktifkan Gocode (https://github.com/nsf/gocode). Sebaiknya kode sumber dari Gocode diambil semua karena ada script Vim yang akan kita gunakan:

$ git clone https://github.com/nsf/gocode.git
Cloning into 'gocode'...
remote: Counting objects: 2491, done.
remote: Compressing objects: 100remote: Total 2491 (delta 1323), reused 2449 (delta 1295)
Receiving objects: 100Resolving deltas: 100

Setelah itu, install Gocode menggunakan perintah go get -u github.com/nsf/gocode. Hasilnya adalah file executable binary $GOROOT/bin/gocode. Sebelum menggunakan Vim, aktifkan dulu gocode dengan mengeksekusi gocode melalui shell. Setelah itu, tambahkan satu baris di $HOME/.vim/vimrc: set ofu=syntaxcomplete#Complete di bawah baris filetype plugin indent on.
Kode sumber lengkap dari $HOME/.vim/vimrc yang penulis gunakan bisa dilihat pada Listing berikut:

execute pathogen#infect()
syntax on
filetype plugin indent on
set ofu=syntaxcomplete#Complete
if has("gui_running")
  colorscheme asma  nian_blood
else
  colorscheme slate
endif
set smartindent
set tabstop=2
set shiftwidth=2
set expandtab
autocmd vimenter * NERDTree
autocmd vimenter * if !argc() | NERDTree | endif
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif
let g:NERDTreeDirArrows=0
let g:cssColorVimDoNotMessMyUpdatetime = 1
set guifont=Liberation\ Mono\ 11
set number
set numberwidth=4
set cpoptions+=n
highlight LineNr term=bold cterm=NONE ctermfg=DarkGrey ctermbg=NONE gui=NONE guifg=DarkGrey guibg=NONE
set grepprg=grep\ -nH\ $*

Untuk mengaktifkan completion, kita harus masuk ke mode Insert dari Vim, setelah itu tekan Ctrl-X, Ctrl-O secara cepat. Hasil autocompletion bisa dilihat di gambar berikut:



Go + REST Client Untuk Mengakses URL Dengan Respon JSON Dinamis

REST merupakan pola arsitektur aplikasi yang memanfaatkan HTTP untuk mengeksploitasi layanan / services serta method dari HTTP (GET, POST, DELETE, dll) untuk berkomunikasi antara klien dengan server. REST merupakan hasil disertasi dari Roy T. Fielding, bisa dibaca lengkap di http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm. Enaknya menggunakan REST adalah kemudahan interoperabilitas data maupun layanan serta. Hal ini juga berlaku ke banyak basis data NOSQL yang biasanya menyertakan REST API sehingga implementasi driver bisa dengan mudah dibuat tanpa akses low level networking seperti halnya masa-masa pra REST. 

Go juga menyediakan akses yang cukup lengkap untuk keperluan HTTP client ini, meskipun masih tetap diperlukan thin layer untuk wrapper guna mempermudah akses ini. Jika memang tidak akan membuat wrapper, bisa menggunakan berbagai pustaka REST yang tersedia. Pada tulisan ini, saya akan menggunakan pustaka restclient (https://github.com/jmcvetta/restclient) yang dibuat oleh Jason McVetta (https://github.com/jmcvetta). 

Basis data NOSQL biasanya mempunyai fitur horizontal scalability yang memungkinkan setiap dokumen (dalam SQL bisa disamakan dengan record / row) bisa mempunyai komponen yang berbeda-beda dan scalable. Salah satu contoh yang akan saya bahas disini adalah ArangoDB (http://www.arangodb.org). ArangoDB menyediakan REST API yang dijelaskan dengan lengkap disini: http://www.arangodb.org/manuals/current/ImplementorManual.html. Untuk tulisan ini, saya akan memberikan contoh http://server:port/_api/document untuk mengambil data dokumen. Sintaks lengkap dari API ini adalah:


GET /_api/document/document-handle


Jika hasilnya bisa diprediksi, dalam artian, kita mengetahui struktur data yang akan diambil, maka struktur itu bisa kita definisikan menggunakan struct, tetapi tentu saja ini hanya pada kondisi tertentu saja. Kebanyakan, jika kita akan mengakses dokumen, fitur skalabilitas horizontal menyebabkan tiap dokumen mempunyai isi yang berbeda-beda. Jadi bisa dikatakan bahwa strukturnya berupa JSON yang dinamis. Bagaimana mengelola ini menggunakan Go?

Jika menemui kasus seperti ini, maka kita bisa mendeskripsikan isi yang akan kita akses tersebut menggunakan map[string]string. Berikut adalah program yang saya gunakan untuk mengakses dokumen di ArangoDB:

akses-doc-arangodb.go

package main
import (
  "fmt"
  "github.com/jmcvetta/restclient"
)
func main() {
  var jml int
  var s map[string]string
  r := restclient.RequestResponse{
    Url:    "http://localhost:8529/_api/document/_users/1736896",
    Method: restclient.GET,
    Data:   "",
    Result: &s,
  }
  _, err := restclient.Do(&r)
  if err != nil {
    panic(err)
  }
  jml = len(s)
  fmt.Printf("Jumlah komponen = %d\n", jml)
  fmt.Print(s)
  fmt.Println("\nUser = ", s["user"])
}

Hasilnya adalah sebagai berikut:

Jumlah komponen = 6
map[_rev:1736896 _key:1736896 active: user:root _id:_users/1736896 password:$1$0cc26832$d582f08ab0898d7d1ab2a18e221d7dc1a2ea93ff80a093678a566fae35bbfc60]
User =  root

Jadi, sekarang waktunya ancang-ancang untuk membuat driver ArangoDB untuk Go menggunakan REST API yang disediiakan ArangoDB. Stay tune!



April 19, 2013

Go for Web Application: Template and jQuery Integration

In this article I will explain about using Go to develop web application together with template and jQuery integration. Develop a web server is a trivial task in Go. Interestingly, Go which initially meant to ease the development of server software has lots of standard libraries for that purpose. Web server is not the only one, although we will explore this capability now. Before we continue, make sure that you already have jQuery (I use jquery-ui 1.9.1) and of course Go (1.0.3). For now, we do not need template engine since Go comes with html/template package. That's enough for now.

Ok, let me give an overview first. We will develop a simple Web application. Our application (let's say its name is go-jquery-example) will read the template, put a string inside the template and display the template. Wait, that's not quite complex, we will add jQuery into that page so in the future we may develop a Web application with good UI. To this end we should make a static file explorer into our Web application so that we can place jQuery into the template (like /js/jquery-ui.js).

Let's see the directory structure first.



  • assets: this directory will be used to serve static files. It consists of css (all CSS files), img (all image files), and js (all javascript files). We put jQuery into that directory.
  • gojquery.go: our main application. 
  • templates: this directory will serve all template files.
default.tpl


gojquery.go

package main

import (
 "html/template"
 "log"
 "net/http"
)

// this handler will be executed when we use web client 
// to access http://server/display
func handler(w http.ResponseWriter, req *http.Request) {

  // read the whole template
  t, err := template.ParseFiles("templates/default.tpl")

  if err != nil {
    log.Fatal(err)
  }

  // The person's name struct which will be substituted 
  // into the template
  type Person struct {
    Name string
  }

  // put the person name here
  p := Person{Name: "bpdp"}

  // put the name into the template and populate the view
  // w is the response which will be sent to web client
  t.Execute(w, p)

}

func main() {

  // assign the handler (http://server/display)
  http.HandleFunc("/display", handler)

  // put assets dir to serve static files (see dir structure below)
  http.Handle("/", http.FileServer(http.Dir("assets/")))

  // put web server to work, port 8123
  http.ListenAndServe(":8123", nil)
}

Now, to run this Web application, go to the root directory where gojquery.go reside, and run the application:

go run gojquery.go

Try access http://server:8123/ and http://server:8123/display to see the result.

Full source code available at https://github.com/bpdp/go-jquery-example. Enjoy!

April 08, 2013

Wifi Configuration for Lenovo G480 on Arch Linux

This tip probably trivial, but if you have problems in wifi connection to WAP (Wireless Access Point) using Lenovo G480 laptop, then probably this tip should make your laptop sane. Note that wifi configuration has been successfully identified at install time and modules perfectly loaded without user intervention using brcmsmac and its dependencies. The problem is on the result of this driver. In my laptop, I found that wifi connection is very unstable.

I went to Arch Linux wiki and AUR (as always), then checked the https://wiki.archlinux.org/index.php/Broadcom_wireless page, then I realized that this unstable connection problem came from the driver. So I tried broadcom-wl driver from AUR. Just do this:

# yaourt -S broadcom-wl

and wifi connection work very stable after the next reboot without configuration. This package put a configuration file at /etc/modprobe.d/broadcom-wl.conf. It consists of:

$ cat /etc/modprobe.d/broadcom-wl.conf 
blacklist b43
blacklist bcma
blacklist ssb
$

Note: If you don't use Arch Linux, grab the driver and compile it for your own distribution: http://www.broadcom.com/support/802.11/linux_sta.php

Maret 29, 2013

Idiomatic Programming


Salah satu hal yang menghambat orang untuk belajar adalah banyaknya istilah-istilah yang membingungkan. Semua domain pengetahuan biasanya memang mempunyai istilah-istilah sendiri dan meskipun ada satu istilah yang muncul di lebih dari satu domain pengetahuan, pengertiannya seringkali tidak sama sehingga pemahaman tentang istilah bersifat context-dependent (harus dilihat konteksnya). 

Memplejari pemrograman juga kurang lebih harus memahami berbagai macam istilah yang muncul. Kali ini saya akan menjelaskan sedikit tentang istilah "idiomatic programming". Jika anda sering membaca milis, newsgroup, atau berbagai macam resources di Internet, terutama yang terkait dengan pemrograman, barangkali akan sering mendengar istilah-istilah berikut:
  • Idiomatic Clojure
  • Idiomatic Go
  • Idiomatic C++
Saya petikkan berbagai pertanyaan (dalam Bahasa Inggris) di berbagai sumber di Internet terkait dengan hal ini:
Jawaban-jawaban dari pertanyaan tersebut tidak penting untuk tulisan ini, yang penting adalah pengertian dari "Idiomatic Clojure", "idiomatic way to ..... in Go". 

Kata "idiom" di luar konteks pemrograman digunakan untuk menunjukkan "bahasa yang khusus untuk suatu komunitas, orang, wilayah, atau kelas" (diambil dari http://www.merriam-webster.com/dictionary/idiom - ada beberapa arti lain yang mirip). Dalam konteks bahasa pemrograman, kata "idiom" sebenarnya mirip dengan hal-hal seperti itu. Jika kita membicarakan "Idiomatic Go" maka kita akan membicarakan pola / patterns yang dianggap baik untuk menyelesaikan masalah dengan sintaks dan semantik dari Go. Demikian juga jika menggunakan "Idiomatic Clojure", yaitu menunjukkan cara pemecahan masalah pemrograman yang baik dan sesuai dengan pola yang digunakan oleh para pemrogram Clojure. Ingat, seringkali ada banyak cara untuk melakukan suatu hal menggunakan suatu bahasa pemrograman tertentu. Bisa saja kode sumber kita betul dan menghasilkan sesuatu yang benar sesuai tujuan pembuatan program, tetapi tidak "idiomatic". Jadi, berbicara tentang hal ini sama saja berbicara tentang optimasi kode sumber. 

Dari mana mengetahui "Idiomatic Programming"? Tidak mudah memang. Yang jelas, jika ingin mempejari dari buku-buku, carilah buku atau dokumentasi semacam "Effective Java" (http://www.oracle.com/technetwork/java/effectivejava-136174.html), "Effective Go" (http://golang.org/doc/effective_go.html), atau berbagai macam buku tentang design patterns sertaprogramming patterns. Latihan serta bergaul dengan fellow programmers di seluruh dunia juga akan sangat membantu kita untuk memahami "Idiomatic Programming". 

Maret 11, 2013

Instalasi Arch Linux 2013.03.01 - Lebih Tidak Ramah dari Sebelumnya

Saat tadi menginstall Arch Linux menggunakan image tanggal 1 Maret 2013 (Arch 2013.03.01), saya cukup terkejut dengan "kemajuan" dari distro ini. Dulu pertama saya install distro ini (saya lupa tahunnya, sudah lama), masih relatif ramah dengan menu mode teks. Jika dulu ada menu dan antarmuka teks yang menuntun ke instalasi sistem Arch, saat saya mencoba kemarin, semua menu ini hilang. Semua digantikan dengan instruksi minimal dari Wiki dalam bentuk file install.txt di $ROOT_HOME/ (/root). Surprise!

Petunjuk instalasi minimal dan pada beberapa hal kurang jelas. Sangat disarankan untuk ada komputer lain yg terkoneksi ke Internet. Selain itu, bersiaplah menghadapi kekacauan. Instalasi disini saya laksanakan di Lenovo G480 dengan image iso Arch Linux dual (32 bit dan x86_64) 2013.03.01 dengan koneksi TelkomSpeedy. Langkah-langkah ini saya ambil dari petunjuk instalasi, tetapi dengan beberapa penjelasan yang lebih jelas supaya tidak terjadi kesalahan.

  • Download image .iso dari https://www.archlinux.org/download/ - saya menggunakan image dual 2013.03.01 - besarnya sekitar 500an MB.
  • Burn image tersebut kedalam CD/DVD
  • Disable UEFI dari setting BIOS (dilakukan sebelum masuk ke OS, di Lenovo G48 dilakukan dengan menekan F2)
  • Konfigurasikan di setup BIOS untuk booting dari DVD/CD.
  • Setelah booting, anda akan dihadapkan pada prompt superuser setelah otomatis login. 
  • Atur partisi lebih dulu: "# cfdisk /dev/sda", setelah itu buat partisi-partisi yang anda inginkan. Untuk kasus saya, hanya saya buat 495 GB dalam 1 partisi (/dev/sda1) serta 5 GB untuk swap.
  • Buat filesystem di partisi /dev/sda1: "# mkfs.ext4 /dev/sda1"
  • Mount partisi baru tersebut. Partisi tersebut akan kita gunakan untuk base system dari Arch Linux:  "mount /dev/sda2 /mnt".
  • Ethernet card tidak terdeteksi, tetapi WLAN0 langsung terdeteksi dan aktif, jadi tinggal kita setup saja. Pada posisi ini, kita masih berada pada mode booting CD. Pada file /etc/wpa_supplicant/wpa_supplicant.conf - isikan berikut ini (lainnya di buat sebagai baris komentar, depan diletakkan #)
network={
ssid="nama ESSID"
psk="password"
priority=1
}
  • Aktifkan WLAN0:
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf &
  • Karena DHCP sudah aktif, biasanya sudah akan bisa terkoneksi. Jika belum, matikan service DHCP:  "# systemctl stop dhcpcd.service". Setelah itu aktifkan DHCP menggunakan: "# dhcpcd wlan0".
  • Bootstrap base system: "# pacstrap /mnt base base-devel"
  • Install GRUB2: "# arch-root /mnt  -S base base-devel"
  • Install syslinux: "# arch-root /mnt -S syslinux"
  • Buat fstab (saya tambahkan untuk UUID / -U):
# genfstab -p -U  /mnt >> /mnt/etc/fstab

  • # arch-chroot /mnt
  • pacman -S elinks vim mc wpa_supplicant net-tools
  • Ikuti "Installation Guide", pada bagian "Configure the booloader: refer back to the appropriate article from the bootloader installation section", konfigurasi GRUB2 dengan cara menjalankan perintah2 berikut ini: (1) gtub-mkconfig (2) grub-install.
  • Set password untuk root: # passwd
  • Tekan Ctrl-D untuk keluar dari chroot.
  • umount /mnt
  • reboot
Berikutnya, anda tinggal mengikuti berbagai dokumentasi di wiki Arch Linux untuk instalasi software-software tambahan.





Februari 28, 2013

Pengelolaan Bibliografi di LaTeX - bagian 2 (natbib)

Bagian ini akan membahas sedikit tentang pengelolaan bibliography menggunakan paket natbib. Manual lengkap terdapat di CTAN (lihat URL natbib yang saya berikan sebelumnya). Tujuan dari materi ini adalah penggunaan model sitasi Harvard (penulis, tahun) dengan database file daftar pustaka format BibTeX yang terpisah sehingga memudahkan untuk me-reuse untuk keperluan penulisan naskah-naskah lainnya.

Dengan menggunakan database file daftar pustakan format BibTeX tersendiri, pekerjaan penulisan naskah kita akan lebih terorganisir dan memudahkan kita jika akan menggunakan daftar pustaka itu untuk keperluan-keperluan lainnya. Contoh dari file BibTeX tersebut terdapat pada repo bibliografi disertasi saya. Silahkan mengakses repo tersebut karena di dalamnya sudah terdapat contoh yang lengkap. Penjelasan dasar bisa diperoleh di situs Wikipedia.

Untuk menggunakan paket natbib serta file database daftar pustakan tersebut, perhatikan file contoh berikut ini:
...
...
\usepackage{natbib}
...
...
\begin{document}
...
...
 \bibliographystyle{plainnat}
...
...
\addcontentsline{toc}{chapter}{\numberline{}Bibliography}
 % lokasi direktori dan nama file dari file BibTeX (.bib) yang akan digunakan
 \bibliography{../bibs/web--soft-eng--semiotics--ISResearch.bib}
...
...
\end{document}



Cara melakukan sitasi untuk model Harvard adalah sebagai berikut:
...
...
Of those efforts to create the reference architecture, The Semantic Web components is considerd missing an explicit pragmatic layer addressing use of semantic resources within pragmatic context~\citep{paschkeicpw2007}. On going standards, specifications, and partial implementation are available to address this layer but still need more efforts.
...
...

Hasil di daftar isi adalah sebagai berikut:


Hasil daftar pustakan adalah sebagai berikut:



Hasil sitasi sesuai dengan dokumen di atas adalah sebagai berikut:


Untuk menggunakan paket natbib ini perlu dilakukan urutan langkah kompilasi berikut:
  1. pdflatex source.tex
  2. bibtex source.aux
  3. pdflatex source.tex
  4. pdflatex source.tex
Tulisan ini hanya menunjukkan bagian kecil dari natbib, anda masih harus membaca manual di URL yang sudah saya sebutkan di muka.

Happy LaTeXing!




Pengelolaan Bibliografi di LaTeX - bagian 1 (Embedded)

Pada umumnya, saat membuat dokumen menggunakan LaTeX, kita perlu menyertakan daftar pustaka. Ada beberapa teknik untuk mengelola bibliografi tersebut. Saat dokumen masih sederhana dan tidak kompleks serta hanya dipakai untuk satu atau sedikit dokumen, biasanya yang dilakukan hanya menyertakan bibliografi tersebut dalam file dokumen sebagai berikut:

...
...
\begin{document}
...
...
...
...
Currently, the development methodology is still lacking, especially for Semantic Web and Pragmatic Web application. One primary cause of this is lack of reference architecture on Semantic Web and also Pragmatic Web application. Without agreed-upon reference architecture for Semantic Web and Pragmatic Web, there will be confusion among Web developers. Whenever we have a strong reference architecture, then we may start to develop the methodology and software framework to realize the components in reference architecture. Therefore, it is very important to have a reference architecture for Semantic Web and Pragmatic Web as a prerequisite. This strong point is not available until now (except for Semantic Web, see the Semantic Web layer cake, SSWAP (Simple Semantic Web Architecture and Protocol) in \url{http://sswap.info/index.jsp} and Functional Semantic Web Architecture~\cite{funcsemwebarch}). Of those efforts to create the reference architecture, The Semantic Web components is considerd missing an explicit pragmatic layer addressing use of semantic resources within pragmatic context~\cite{paschkeicpw2007}. On going standards, specifications, and partial implementation are available to address this layer but still need more efforts.
...
...
...
\begin{thebibliography}{99}
\addcontentsline{toc}{chapter}{\numberline{}Bibliography}
...
...
\bibitem{paschkeicpw2007}Adrian Paschke, Harold Boley, Alexander Kozlenkov, \textit{Rule Responder: RuleML-Based Agents for Distributed Collaboration on The Pragmatic Web}, Proceedngs of the International Conference in The Pragmatic Web, 2007.
...
...
...
\end{thebibliography}
\end{document}


Pada daftar isi akan muncul sebagai berikut:


Pada daftar pustaka, akan muncul sebagai berikut:

Sitasi pada naskah akan tampak sebagai berikut:


Model pengelolaan seperti ini sebenarnya relatif sederhana, kekurangan utamanya adalah entri di daftar pustaka tidak terstruktur dan tidak praktis jika daftar pustaka itu akan digunakan di naskah / paper lain. Jika menggunakan cara ini dan akan membuat paper dengan daftar pustakan yang kurang lebih sama, maka bagian \thebibliography tersebut akan disalin ke dokumen lain. Solusi tersebut tidak memadai, boros, dan merepotkan. Selain itu, format yang digunakan adalah format angka sebagai hasil sitasi. Pada beberapa perguruan tinggi, biasanya diperlukan model lain seperti (penulis, tahun) atau dikenal juga dengan model Harvard. Bagian ini akan dibahas pada bagian berikutnya tentang natbib

Februari 16, 2013

Slide Presentasi Menggunakan Class Beamer di LaTeX


Membuat slide presentasi menggunakan LaTeX bukan hal yang sulit. Berikut ini saya berikan template yang bisa anda reuse dengan mengganti bagian-bagiannya. Penjelasan saya letakkan langsung di komentar (diawali dengan %). Slide di Beamer disebut dengan Frame. Frame ini bisa hanya satu slide saja atau bisa juga lebih dari satu slide (misalnya di contoh ini adalah di bagian "Outline" / "Table of Contents"). Pada template ini, saya tuliskan banyak frame dengan tujuan untuk contoh outline yang melebihi satu lembar tersebut, isi tidak penting (setidaknya di artikel ini :-D). Outline berisi semua yang didefinisikan di \section dan \subsection. Tiap \section berisi frame ataupun \subsection. Tiap \subsection bisa berisi satu atau lebih frame.

\documentclass{beamer}
\usepackage[latin1]{inputenc}

% tema. warna dan font utk tema juga bisa diatur
\usetheme{Warsaw}
\usecolortheme{beetle}
\usefonttheme{professionalfonts}

% bagian definisi judul 
\title[Comprehensive Examination for Ph.D Research Proposal]{A Web Engineering Methodology and Software Framework for Building Pragmatic Web Application}\author{Bambang Purnomosidi D. P. \\ 10/306654/STK/00301}\institute{STMIK AKAKOM}\date{\today}

% awal presentasi 
\begin{document}

% frame pertama: judul
\begin{frame}
\titlepage
\end{frame}

% daftar isi presentasi. lebih dari satu slide.
% slide pertama: Outline I, slide kedua: Outline II, dst
\begin{frame}[allowframebreaks]{Outline}
\frametitle{Outline}
\tableofcontents
\end{frame}

% mulai bagian ini akan berisi "daftar isi" atau "ouline".
% daftar isi terdiri dari yang tertulis di \section dan \subsection
% lihat di hasil tampilan 
\section{Introduction}

% isi slide hanya "aaa". :))
\subsection{Background}
\begin{frame}
\frametitle{Web Application}
aaa
\end{frame}

\begin{frame}
\frametitle{Web Interaction Patterns}
aaa
\end{frame}

\begin{frame}
\frametitle{The Web: Syntactic, Semantic, and Pragmatic}
aaa
\end{frame}

\subsection{Rationale and Motivating Factors}

\begin{frame}
\frametitle{Rationale and Motivating Factors}
aaa
\end{frame}

\subsection{Problem Formulation and Scope of Problems}

\begin{frame}
\frametitle{Problem Formulation and Scope of Problems}
aaa
\end{frame}

\subsection{Research Novelty}

\begin{frame}
\frametitle{Research Novelty}
aaa
\end{frame} 

\subsection{Research Contributions}

\begin{frame}
\frametitle{Research Contributions}
aaa
\end{frame}

\subsection{Future Directions}

\begin{frame}
\frametitle{Future Directions}
aaa
\end{frame}

\section{Literature Review and Theoretical Foundation}

\subsection{Literature Review}

\begin{frame}
\frametitle{Reference Model and Reference Architecture}
aaa
\end{frame}

\subsection{Web Engineering Methodology and Tool Support}

\begin{frame}
\frametitle{Web Engineering Methodology and Tool Support}
aaa
\end{frame}

\subsection{Semiotics and Web} 

\begin{frame}
\frametitle{Semiotics and Web}
aaa
\end{frame}

\subsection{Theoretical Foundation}

\begin{frame}
\frametitle{Ontology}
aaa
\end{frame} 

\begin{frame}
\frametitle{Semantic Web: Standards and Specifications}
aaa
\end{frame}

\begin{frame}
\frametitle{Research Questions}
aaa
\end{frame}

\section{Research Methodology} 

\subsection{Research Methods}

\begin{frame}
\frametitle{Research Methods}
aaa
\end{frame}

\subsection{Case Study}

\begin{frame}
\frametitle{Case Study}
aaa
\end{frame}

\section{Pilot Study} 

\begin{frame}
\frametitle{Pilot Study}
aaa
\end{frame} 

\section{Research Schedule}

\begin{frame}
\frametitle{Research Schedule}
aaa
\end{frame}

\section{Appendices}

\subsection{Resources}

\begin{frame}
\frametitle{Resources}
aaa
\end{frame}

\subsection{Publication Plan}

\begin{frame}
\frametitle{Publication Plan}
aaa
\end{frame}

\end{document}


Perhatikan hasil berikut ini:

Halaman Judul



Daftar Isi / Outline

Outline I


Outline II



Tampilan slide dengan bagian atas sebagai navigasi


Navigasi di PDF Viewer



Happy presenting!

Februari 08, 2013

Metodologi Riset untuk Rekayasa Software


Saya menulis ini karena "kegelisahan" saya dalam proses penyelesaian disertasi. Secara sederhana, sebenarnya disertasi saya terkait dengan Pragmatic Web. Penjelasan tentang PW ini sudah ada di catatan-catatan saya sebelumnya, jadi saya pikir tidak perlu saya ulang lagi disini. Inti pertanyaan di disertasi saya sebenarnya sederhana saja, bagaimana membuat sumber daya Web/Internet yang banyak sekali itu bisa bekerja untuk manusia, tanpa manusia tenggelam dalam banjir informasi dan banyak sekali hal yang tidak perlu di Web. Untuk keperluan itu, saya meneliti PW. Secara singkat, bisa dikatakan, saya akan membuat metodologi serta software framework untuk membantu para developer Web membangun aplikasi PW.

"Kegelisahan" saya bermula dari diskusi dengan salah satu co-supervisor (pak Widyawan) yang menanyakan hal yang tidak saya duga sama sekali sebelumnya: "bagaimana menentukan bahwa metodologi serta software framework yang anda buat itu valid?". Saat itu saya mulai tersadar dan mulai mencurahkan perhatian ke sisi ini. Repotnya, bagian ini ternyata sulit. Mengapa sulit? Begini, secara garis besar, ada 4 hal utama hasil riset saya nanti:
  1. Reference Model aplikasi PW
  2. Reference Architecture aplikasi PW
  3. Metodologi pengembangan software aplikasi PW
  4. Software framework untuk pengembangan aplikasi PW
Jika menggunakan riset kuantitatif, maka ada masalah dengan penentuan responden. Hasil riset ini nanti terutama akan bermanfaat untuk para pengembang aplikasi Web, sehingga dalam kasus ini, mereka menjadi responden. Dengan pendekatan kuantitatif, maka saya akan merancang survey ke minimal 30 (!) tim pengembang Web dengan 30 aplikasi PW (sampel data riset kuantitatif minimal adalah 30). Dengan keterbatasan waktu, sumber daya, biaya, serta keterbatasan-keterbatasan lainnya, hal ini tentu saja menjadi kurang memungkinkan (catatan: FYI, membangun 1 aplikasi Web "biasa" / Syntactic Web itu cukup menghabiskan waktu, bisa berbulan-bulan atau malah hitungan tahun -- dan saya sama sekali tidak bermaksud membuat disertasi yang abadi tidak selesai :p). 

Setelah mempelajari banyak paper dan buku tentang penelitian di bidang computer science dan software engineering, saya memustukan untuk menggunakan pendekatan constructive research (CR) dan action research (AR) dalam menyelesaikan pertanyaan-pertanyaan besar tadi. CR merupakan penelitian untuk membangun teknologi, software, algoritma, serta framework yang didefinisikan merupakan kontribusi baru dari penelitian tersebut. CR merupakan metodologi yang paling umum dan tidak terlalu menuntut validasi secara empiris, meski tetap "menuntut" simpulan atau hasil dari riset tersebut harus didefinisikan secara obyektif dengan argumentasi yang kuat, antara lain melalui perbandingan dengan suatu baseline tertentu atau melakukan test / benchmark menggunakan kriteria tertentu. AR bisa diaplikasikan pada rekayasa di bidang software, meski awalnya (1944, Kurt Lewin) digunakan bukan untuk keperluan itu. Penerapan AR di bidang rekayasa software menghasilkan TAR (Technical Action Research - lihat di http://www.lth.se/programvaruportalen/kalendarium/arkiv/2011_10_20/roel_wieringa/). Dengan teknik ini, peneliti mengembangkan teknologi baru sambil menyelesaikan masalah dunia nyata yang dihadapi (dengan satu atau dua studi kasus). 

Dengan pendekatan metodologi-metodologi tersebut, akhirnya saya membangun pendekatan top-down untuk hasil dan kontribusi riset saya:
  • Membangun reference model yang merupakan model umum dari aplikasi PW. Untuk keperluan ini, saya akan menggunakan pendekatan yang dirumuskan oleh Schutte (1998) berikut:
  • Berdasarkan RM di atas, saya akan merumuskan reference architecture yang sudah merupakan manfiestasi komponen-komponen riil dari RM tersebut di dunia Web. RM dan RA akan dibentuk berdasarkan patterns / pola-pola yang diperoleh dari interview dengan domain experts.
  • Dengan pendekatan TAR, mengerjakan dan merumuskan metodologi untuk membangun komponen-komponen yang telah dirumuskan di RM dan RA tersebut di atas untuk membangun aplikasi studi kasus aplikasi PW.
  • Untuk memberikan smpulan serta hasil obyektif dengan argumentasi yang kuat, saya akan menggunakan pendekatan BDD (Behaviour Driven Development) untuk membangun framework serta aplikasi untuk studi kasus. Dengan menggunakan BDD ini (BDD merupakan kelanjutan dari TDD -Test-Driven Development), setiap komponen akan dibuat unit test maupun behaviour yang diinginkan terlebih dahulu, baru kemudian source code diimplementasikan untuk membuat komponen-komponen tersebut mencapai status pass / lulus.
Saya tidak mengatakan bahwa apa yang saya tulis ini merupakan pendekatan metodologi terbaik dalam penelitian di bidang rekayasa software, Oleh karena itu, any insights will be gratefully appreciated. Terima kasih.