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.

Februari 04, 2013

An Overview of Rule-Based System

Rule-Based System has slowly become an important part of Web application. This fact has been realized by many since a tremendous amount of resources start to appear on the Web. As this high volume of data and information availability appear on the Web, confusion among Web users increased. This confusion is attributed to information flood, experienced by users. Not only information flood, a lot of different things and inconsistencies happened on the Web, not to mention too many Web browsers with different capabilities in implementing standards and specifications. Different services (see *anything* as a Service) offered on the Internet. All of those things basically trigger a simple question: how can we use Internet effectively and efficiently without drowning ourselves into those confusion? Can we use something like agent (in the real world) to represent us on the Internet and doing many things automatically without our intervention?

Those questions basically are simple questions but the answers have an immense impact and involve multidisciplinary approach. Surely I can not approach the answers from all disciplines, instead I will concentrate on my background in Web Engineering although I will also include other things as well when needed. We will focus our discussion into automated jobs -- done by software agent, be it in integrated into Web application, or as a stand alone headless software agent -- so that the benefit for human is real.

Currently, to answer those important questions, people and researcher from computer science and information systems make use of techniques and methods from Artificial Intelligence field. This advancement in Web is not necessarily a new phenomenon or new method or other new things. It is merely an application of many Artificial Intelligence methods and techniques to the new platform: Web. These things are different in Artificial Intelligence era where data, knowledge, and facts are integrated internally into the system, isolated from external access. On the Web, things are much more uncontrollable, even with many hard work in the field of standards and specifications (see W3C website for more info about this). Web provides data, information, knowledge, and facts, but they seem to be much more uncontrollable and provide bigger uncertainty level (resources probably exist today, but tomorrow they will disappear without notice, resulting DNS lookup failure or 404 HTTP status or probably 500 Internal Server Error). Therefore, working with Web means that we have to understand that we may not have 100 percent success and we may also hope that we still have some successful efforts.

To benefit its users, Web need to be provide resources. In this sense we may have three categories:

  1. Syntactic Web: this Web application is a kind of Web application which only provide resources for human consumable resources. It does not provide (or if provide, it will provide very minimal) machine understandable data. Users can understand what has been written on the Web browser application, but we may not use automatic agent to process them, provide automatic job processing for human.
  2. Semantic Web: this Web application provide machine understandable data format. It enables software agent to understand the data inside so that we may then use software agent to automate job processing.
  3. Pragmatic Web: this Web application provides not only semantic content, but also integrate context into the application, therefore it enables the software agent to understand context of the resources and then enable them to communicate further towards social commitments. Rule-based system is very important in this context.
Now we should understand the importance of semantic content and rules which are integrated into Web application. Therefore, it is important for Web developers to understand how to integrate rule-based system into the Web application. 

To understand the Rule-based system, until now, there are some important Rule-based System which may be used on the Web. 
  1. Deductive Databases System: this system works by making deductions (conclusion) based on rules and facts which is stored in a databases system. One example of this system is Datalog which is syntactically a subset of Prolog.
  2. Rule engines for triples: triple here is RDF data model (Subject-Predicate-Object). RDF is used to make a statement about resources, something like "Bambang creates an article on Pragmatic Web" which consists of resources "Bambang" and "an article on Pragmatic Web" with "creates" as the predicate. 
  3. Prolog-based System: introduces logic programming, took a restricted form of first-order logic.
  4. Production Rule System: in production rule system, the application will implements a notion set of rules and each rule has a condition and a consequential action.
  5. Reactive Rule System: in reactive rule system, the application has the ability to detect an event and then react to that event automatically.
  6. Knowledge-based System: provide knowledge base so that it enables software agent to make intelligent reasoning.
I will discuss those Rule-based system more detail later. Stay tuned.






Pragmatic Web: Tinjauan Arsitektural, LAP, dan Rule-Based System


Pragmatic Web merupakan perkembangan selanjutnya dari visi Semantic Web, meskipun ada banyak tulisan serta riset yang menyatakan bahwa yang dimaksud oleh Tim Berners-Lee pada saat mencetuskan visi Semantic Web ini merupakan hal yang ingin diwujudkan oleh Pragmatic Web ini. Pragmatic Web sebenarnya masih merupakan suatu hal yang baru dan tidak hanya terbatas pada mewujudkan sumber daya di Web yang mempunyai nilai semantik, tetapi sudah sampai ke arah pemanfaatan sumber daya semantik di Web untuk menghasilkan komitmen sosial serta kolaborasi. Dari pengertiak tersebut, kita bisa memahami bahwa Pragmatic Web tidak akan mendapatkan hasil yang maksimal tanpa sumber daya semantic di Web. Secara sederhana, kita bisa mengatakan bahwa Pragmatic Web menambahkan informasi kontekstual yang memungkinkan adalah komunikasi antara aplikasi Pragmatic Web tersebut dengan aplikasi Pragmatic Web lain maupun intelligent agent di Web. Tidak hanya komunikasi, dengan adanya konteks tersebut, bisa dilakukan aksi / action sehingga bisa terjadi komitmen sosial maupun tidak terjadi komitmen sosial.

Secara arsitektural, Pragmatic Web masih menggunakan interaksi dasar client-server di Internet serta berbagai macam infrastruktrur hardware maupun software. Pragmatic Web memperoleh banyak insight dari penelitian tentang LAP (Language/Action Perspective) yang dipelopori oleh Terry Winograd. LAP menunjuk pada adanya keterkaitan antara bahasa dengan aksi yang diharapkan dari komunikasi bahasa tersebut. Winograd menyatakan bahwa LAP ini bisa menjadi suatu paradigma baru untuk merancang sistem informasi. Sebagai trigger dari action, bahasa yang terdiri atas 3 bagian, yaitu sintaks, semantik, serta pragmatik, menjadi tiga hal utama yang diperhatikan dalam merancang dan mengimplementasikan suatu sistem komputer. Bahasa mempunyai keterkaitan erat dengan aksi yang akan dilakukan oleh pihak yang diajak berkomunikasi. Searle mendefinisikan 5 hal fundamental dari kalimat bahasa yang diucapkan:
  • Assertive: ketegasan dalam menyatakan kebenaran suatu hal
  • Directive: menyatakan perintah yang harus dilaksanakan oleh pihak yang diajak berkomunikasi (baik 'keras' maupun halus).
  • Commissive: pihak yang mengkomunikasikan akan berkomitmen melaksanakan suatu hal yang akan dikerjakan di masa yang akan datang.
  • Declaration: mengumumkan suatu hal.
  • Expressive: ekspresi tentang suatu hal, misalnya sedih, gembira, memuji, dan lain-lain.
Insight dari LAP ini bisa diterapkan dalam dunia Web. Web pada dasarnya merupakan sistem tanda (dilihat dari sisi semiotika) yang berfungsi untuk mengkomunikasikan sesuatu. Klien (browser maupun headless software agent) adalah pihak-pihak yang berkomunikasi dengan aplikasi Web. Meski demikian, ada hal yang harus dipahami, bahwa Pragmatic Web terkait dengan komunikasi antar aplikasi, bukan antara manusia dengan komputer (HCI). Ini diperlukan karena terlalu banyak sumber daya di Internet dan manusia akan kerepotan dengan hal tersebut. Otomatisasi merupakan hal yang harus diperjuangkan di Internet. Pragmatic Web memungkinkan adanya interaksi serta komunikasi dan komitmen sosial secara otomatis antar aplikasi on behalf of human.

Jika demikian, bagaimana suatu aplikasi Web bisa membentuk Pragmatic Web? Pragmatic Web, secara sederhana merupakan aplikasi Web biasa dengan penambahan pada kandungan semantik dari data / informasi yang dieksploitasi untuk keperluan klien, serta mekanisme yang memungkinkan adanya komunikasi antar aplikasi dan komitmen sosial antar aplikasi tersebut. Mekanisme yang sampai saat ini dirasakan penting dan masih diteliti oleh banyak peneliti adalah integrasi dari Rule-based System ke dalam aplikasi Web. Hal ini memungkinkan agent memahami konteks dari informasi yang terdapat dalam suatu sumber daya dan kemudian bisa melakukan hal-hal tertentu berdasarkan definisi validitas pada Rule-based System tersebut. Integrasi ini memungkinkan implementasi dari insight LAP di atas ke dalam Web. Dengan menggunakan sumber daya semantik serta Rule-based System, suatu aplikasi Pragmatic Web bisa mendefinisikan 5 hal fundamental seperti yang ditulis oleh Searle di atas. 

Masih ada banyak hal yang harus dibenahi dan diimplementasikan dalam hal ini, diantaranya adalah:
  1. Interoperability antar Rule-based System. W3C sudah mendefinisikan RIF untuk keperluan interchange format dari sekian banyak format dan teknologi (RuleML, JSON-Rule, F-Logic, Datalog, SWRL, dan lain-lain). Interoperability ini merupakan hal yang kompleks dan barangkali bisa menjadi suatu disertasi sendiri.
  2. Desain arsitektural dari aplikasi Pragmatic Web. Kandidat untuk keperluan ini adalah memanfaatkan arsitektur yang dikembangkan oleh Roy T. Fielding: REST. Penggabungan REST dengan teori dari Searle di atas akan memungkinkan implementasi LAP di Web.
  3. Service Discovery. Jika aplikasi Pragmatic Web sudah dibuat, bagaimana agent bisa menemukan service yang ditawarkan oleh aplikasi tersebut?
  4. Bagaimana metodologi untuk mengembangkan aplikasi Pragmatic Web tersebut? 
Problem-problem di atas akan banyak terbantu dengan adanya referensi arsitektur dari aplikasi Pragmatic Web. Saat ini saya sedang mengembangkan arsitektur referensi berdasarkan model referensi berikut:


Model referensi awal ini akan dirinci ke dalam suatu referensi arsitektur. Referensi arsitektur sudah menyertakan komponen-komponen nyata dan akan saya tuliskan seiring dengan berkembangnya disertasi saya. 


Desember 04, 2012

Tema skripsi untuk JavaScript Ninja wannabe


Berikut saya berikan daftar mengenai tema skripsi bagi mahasiswa yang akan mengambil skripsi, khususnya bagi yang berminat di dunia JavaScript. Semua yang saya uraikan disini meliputi JavaScript di sisi server maupun di sisi client. Istilah JavaScript ninja sebenarnya merupakan istilah informal yang merujuk pada seorang developer dengan kemampuan pemrograman JavaScript yang sangat bagus. Istilah ini bahkan digunakan dalam buku yang ditulis oleh John Resig (you know him, right?): Secrets of the JavaScript Ninja (http://jsninja.com). Nah, jika anda ingin menjadi JavaScript ninja, mengapa tidak mulai mendalami dari saat kuliah dan mengambil materi skripsi tentang JavaScript? Silahkan ambil yang anda sukai dari daftar berikut ini dan gunakan kreativitas anda untuk membuat daftar ini menjadi judul yang lengkap:
  1. Membuat plugin Node.js menggunakan node-gyp (https://github.com/TooTallNate/node-gyp)
  2. Interoperabilitas Google Dart dengan JavaScript (http://www.dartlang.org/articles/js-dart-interop/)
  3. Behaviour-Driven Development menggunakan Jasmine (http://pivotal.github.com/jasmine/)
  4. Headless full-stack testing di Node.js menggunakan ZombieJS (http://zombie.labnotes.org/)
  5. Asynchronous testing menggunakan Mocha (http://visionmedia.github.com/mocha/)
  6. Headless testing menggunakan PhantomJS (http://www.phantomjs.org danhttps://github.com/ariya/phantomjs/wiki/Headless-Testing)
  7. Pengembangan aplikasi berbasis pattern Resourve-View-Presenter menggunakan FlatironJS (http://flatironjs.org)
  8. Aplikasi CLI (Command Line Interface) menggunakan FlatironJS (http://blog.jit.su/writing-cli-apps-with-flatiron)
  9. Navigation scripting dan utilitas testing menggunakan CasperJS (http://casperjs.org)
  10. Semantic template menggunakan Handlebars (http://handlebarsjs.com/)
  11. Modernizr sebagai peranti bantu pengembangan aplikasi HTML5 dan CSS3 (http://modernizr.com)
  12. Asynchronous web testing menggunakan Mocha (http://visionmedia.github.com/mocha/)
  13. Pengembangan aplikasi cloud menggunakan Node.js
  14. Pengembangan aplikasi web menggunakan NoSQL: studi kasus Node.js dan Mongoose
  15. Teknologi middleware Connect - termasuk pengembangan plugin Connect (http://www.senchalabs.org/connect/)
  16. Cross-browser websocket untuk aplikasi realtime menggunakan Socket.IO (http://socket.io)
  17. Pengembangan plugin GruntJS (http://gruntjs.com)
  18. Framework / Pustaka MVC di JavaScript (lihat daftarnya di http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/)
  19. Pengembangan aplikasi web menggunakan ExpressJS (http://expressjs.com/)
  20. Membangun aplikasi dengan teknologi obyek di JavaScript menggunakan oolib (http://idya.github.com/oolib/)
  21. Membangun aplikasi desktop berbasis HTML5, CSS3, dan JavaScript menggunakan TideSDK (http://www.tidesdk.org/)
Tentu saja ini bukan daftar yang lengkap di dunia JavaScript yang sedemikian kompleks. Jika ada tambahan lagi, catatan ini akan saya edit. Jadi, selamat menikmati proses menjadi JavaScript ninja!

Oktober 02, 2012

Git dan Github: Petunjuk Awal

Mengambil dari repo
  • git clone [lokasi]
Contoh:
  • git clone https://github.com/bpdp/buku-cloud-nodejs.git (jika menggunakan https)
  • git clone git://github.com/bpdp/buku-cloud-nodejs.git (jika menggunakan git)
Membuat repo baru di lokal
  • Buat direktori baru
  • Masuk ke direktori baru tersebut
  • Menambahkan semua file:
    • git add -A
  • Commit:
    • git commit -m "First commit - initializing empty repo"
Melihat status repo lokal
    • git status
File baru di repo
  • Menambahkan file
    • git add [file]
  • Commit:
    • git commit -m "Menambahkan file untuk ..."
  • push ke github
Mengedit file
  • Edit file
  • Commit:
    • git commit -m "Pesan"
  • push ke github
Push ke github
  • Menetapkan repo:
    • git remote add origin
      • contoh: git remote add origin https://github.com/bpdp/buku-cloud-nodejs.git
  • Push:
    • git push origin master