tag:blogger.com,1999:blog-64058657588086182502024-03-05T15:53:43.292-08:00bpdp's changelogsOn complexities of FOSS and Web.Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.comBlogger65125tag:blogger.com,1999:blog-6405865758808618250.post-83808149858354783722016-03-30T20:36:00.001-07:002016-03-30T20:36:26.141-07:00Arch Linux, Mplayer, and Chromium Sound ProblemThis post is just a reminder whenever one day I get the same problem: no sound in browser (in this case: Chromium) while the sound is normal using mplayer (or any other command line player). Some configurations:<div>
<br /></div>
<div>
<b>$HOME/.asoundrc</b></div>
<div>
<blockquote class="tr_bq">
# Use PulseAudio by default<br />pcm.!default {<br /> type pulse<br /> fallback "sysdefault"<br /> hint {<br /> show on<br /> description "Default ALSA Output (currently PulseAudio Sound Server)"<br /> }<br />}<br />ctl.!default {<br /> type pulse<br /> fallback "sysdefault"<br />}</blockquote>
<div style="font-weight: bold;">
/etc/mplayer/mplayer.conf</div>
</div>
<div>
<blockquote class="tr_bq">
ao=pulse</blockquote>
<div>
<div style="font-weight: bold;">
/etc/pulse/default.pa</div>
<blockquote class="tr_bq">
.ifexists module-udev-detect.so<br />load-module module-udev-detect tsched=0<br />.else<br />load-module module-detect<br />.endif</blockquote>
<div>
Restart pulseaudio:</div>
</div>
</div>
<blockquote class="tr_bq">
pulseaudio -k<br />pulseaudio --start</blockquote>
<div>
Restart browser. There you go. Enjoy the sound!</div>
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-7194123510049007122016-02-20T20:29:00.000-08:002016-02-20T20:29:44.576-08:00Multiple Go versions in LinuxCurrently, there are trends on software development that tend to release their SDK on regular basis. Rust for example, also Go with 6 month release cycle. This predictable release is good and I personally like it since I can predict on features availability and use them for my software development project. The downside of this approach is there are many versions availablle that install them using OS package manager is proved to be pain in the ass.<br />
<br />
Some of developers then create tools to manage multiple versions of the SDK, see <a href="https://github.com/moovweb/gvm" target="_blank">GVM (Go Version Manager)</a> and <a href="https://github.com/brson/multirust" target="_blank">multirust</a> (for Rust) for example. They are good of course but I probably choose not to use them since probably someday they won't be developed (see the latest commit if you want). My approach is simpler but only for Linux with Bash. If you use Windows, you may adopt my approach using SET to setup env variables and put them in batch file (.BAT). Explanation follows.<br />
<br />
<b>Directory Setup</b><br />
<br />
I put all of my Go related software inside <b>/opt/software/go-dev-tools</b>. Here's the structure:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAqtdiGYhLE79itODK0Tr6cgwUnwM_4MOP2LcXyJSw63NzaxTzZ20Hi4P_azR9kHAV_B4FFHI0-xV6nhbrbAm1pCLyVv2sz55KEXEDo9Oh7NTeeqleR1XoEuBSVeGIsZIsezTJOIP1NfDj/s1600/dir.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAqtdiGYhLE79itODK0Tr6cgwUnwM_4MOP2LcXyJSw63NzaxTzZ20Hi4P_azR9kHAV_B4FFHI0-xV6nhbrbAm1pCLyVv2sz55KEXEDo9Oh7NTeeqleR1XoEuBSVeGIsZIsezTJOIP1NfDj/s1600/dir.png" /></a> </div>
<br />
<b>Directory Contents</b><br />
<br />
I put Go SDK inside <b>go</b>, all Go related tools inside <b>go-tools</b>, <b>liteide</b> for LiteIDE, and <b>tmp </b>for temporary pkg dir whenever I want to compile and put <b>Go tools</b> inside <b>go-tools</b>.<br />
<br />
Inside go-version (go1.2.2, go1.3.3, etc), I extract all of downloaded SDK from <a href="http://golang.org/dl" target="_blank">Go download page</a>.<br />
<br />
<b>Environment Variables</b><br />
<br />
In my $HOME/env dir, I created <b>go</b> directory to manage environment variables for my Go version. They usually have the same env variables, except for version pre 1.5, 1.5 (for vendor experimentation) and 1.6.<br />
<br />
<u>Pre 1.5 and > 1.6</u><br />
<br />
<blockquote class="tr_bq">
$ cat ~/env/go/go1.2.2 <br />
GODEVTOOLS_HOME=/opt/software/go-dev-tools<br />
<br />
GO_HOME=$GODEVTOOLS_HOME/go/go1.2.2<br />
LITEIDE_HOME=$GODEVTOOLS_HOME/liteide<br />
GOTOOLS=$GODEVTOOLS_HOME/go-tools<br />
<br />
export GOROOT=$GO_HOME<br />
export GOOS=linux<br />
export GOARCH=amd64<br />
export GOHOSTOS=linux<br />
export GOHOSTARCH=amd64<br />
export GOBIN=$GOROOT/bin<br />
<br />
export PATH=$PATH:$GO_HOME/bin:$LITEIDE_HOME/bin:$GOTOOLS<br />
<br />
alias go=colorgo$ </blockquote>
<br />
<u>1.5</u><br />
<br />
<blockquote class="tr_bq">
$ cat ~/env/go/go1.5.3 <br />
GODEVTOOLS_HOME=/opt/software/go-dev-tools<br />
<br />
GO_HOME=$GODEVTOOLS_HOME/go/go1.5.3<br />
LITEIDE_HOME=$GODEVTOOLS_HOME/liteide<br />
GOTOOLS=$GODEVTOOLS_HOME/go-tools<br />
<br />
export GOROOT=$GO_HOME<br />
export GOOS=linux <br />
export GOARCH=amd64<br />
export GOHOSTOS=linux <br />
export GOHOSTARCH=amd64<br />
export GOBIN=$GOROOT/bin<br />
<br />
export PATH=$PATH:$GO_HOME/bin:$LITEIDE_HOME/bin:$GOTOOLS<br />
<br />
alias go=colorgo<br />
<br />
export GO15VENDOREXPERIMENT=1<br />
$</blockquote>
<br />
<b>Usage</b> <br />
Open new shell - terminal, and source environment variables:<br />
<br />
<blockquote class="tr_bq">
$ source env/go/go1.2.2 <br />
11:25:22-bpdp@archer:~$ go version<br />
go version go1.2.2 linux/amd64<br />
11:25:25-bpdp@archer:~$ </blockquote>
<br />
Open another new shell - terminal, and source env vars:<br />
<br />
<blockquote class="tr_bq">
$ source env/go/go1.6.0 <br />
11:25:59-bpdp@archer:~$ go version<br />
go version go1.6 linux/amd64<br />
11:26:01-bpdp@archer:~$ </blockquote>
<br />
and so on.<br />
<br />
<b>Go Tools</b><br />
<br />
When you see something interesting for your Go project, just go to <b>/opt/software/go-dev-tools/tmp</b> and the Go get them and copy the files inside <b>/opt/software/go-dev-tools/go-tools</b>:<br />
<br />
$ cd /opt/software/go-dev-tools/tmp/<br />
$ export GOPATH=`pwd`<br />
$ go get github.com/smartystreets/goconvey<br />
$ mv ../go/go1.6/bin/goconvey ../go-tools/ <br />
$ which goconvey<br />
/opt/software/go-dev-tools/go-tools/goconvey<br />
$<br />
<br />
I don't know whether my approach is the best, but it proves to be comfortable for me. As always, YMMV. Happy hacking!<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-72925703355050442892016-02-08T06:44:00.002-08:002016-02-08T06:44:42.775-08:00Supervisor Dengan Multiple Workers pada ElixirBeberapa hari ini saya mencoba otak atik Elixir setelah sekian lama mengamati. Untuk yang sudah terbiasa dengan Erlang, barangkali menyesuaikan diri tidak akan terlalu sulit, sementara bagi yang belum pernah mengenal Erlang, konsep <b>let it crash</b> dari Erlang untuk <i>fault tolerant systems</i> perlu proses pembelajaran yang lumayan.<br />
<br />
Konsep <i>supervisor tree</i> untuk proses di Elixir tidak ada hubungannya dengan proses di sistem operasi. Persamaannya hanya pada struktur <i>tree</i>. Pada proses di sistem operasi, tidak ada mekanisme untuk mengelola proses-proses tersebut, sedangkan pada Elixir, proses-proses tersebut dikelola menggunakan proses supervisi: ada proses untuk me-<i>restart</i> secara otomatis proses anak yang mati. Bagian ini mempunyai banyak pilihan, tetapi di tulisan ini saya hanya akan menampilkan mekanisme untuk membuat software menggunakan Elixir dengan banyak proses anak (sering disebut <i>child process</i>, sering juga disebut <i>worker</i>). Saya menulis ini karena tidak ada penjelasan yang jelas untuk materi ini. Pemula biasanya akan merasa kebingungan.<br />
<br />
Program yang akan dibuat ini sebenarnya sederhana saja: membuat 3 <i>worker process</i> yang akan melakukan proses penambahan, pembagian, dan perkalian. Kode sumber bisa diperoleh di <a href="https://github.com/bpdp/elixir-playground">https://github.com/bpdp/elixir-playground</a>. Pada dasarnya, hal-hal yang perlu diperhatikan pada repo tersebut adalah:<br />
<ol>
<li>Repo <b>workers</b> saya buat menggunakan <b>mix new workers --sup</b> karena sejak awal dimaksudkan untuk membangun aplikasi menggunakan beberapa worker dengan supervisi.</li>
<li>Tidak ada perubahan pada hasil <b>mix new </b>di atas kecuali pada file-file berikut ini:</li>
</ol>
<ul><ul>
<li>lib/workers.ex => saya ubah hanya berisi satu callback function (start, sudah ketentuan dari Elixir bahwa callback function bernama start dengan 2 argumen). Di callback function ini saya definisikan beberapa worker yang saya letakkan di file lib/workers/worker1.ex - sampai worker3.ex. Sesuai ketentuan dari Elixir, penamaan file dan nama module harus sesuai: workers/worker1.ex => Workers.Worker1</li>
<li><i>Worker process</i> saya letakkan pada workers/worker1.ex - worker3.ex. Setiap worker menggunakan GenServer yang mengharuskan adanya function start_link dan init.</li>
</ul>
</ul>
Untuk menjalankan:<br />
<br />
<blockquote class="tr_bq">
<pre><code>$ mix run
Elixir.Workers.Worker1 started
7
Elixir.Workers.Worker2 started
3.0
Elixir.Workers.Worker3 started
60</code></pre>
</blockquote>
Silahkan melihat halaman-halaman manual untuk penjelasan lebih lanjut.<br />
<br />
<blockquote class="tr_bq">
</blockquote>
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com1tag:blogger.com,1999:blog-6405865758808618250.post-42036633698198703942015-12-04T09:58:00.000-08:002015-12-04T10:04:03.348-08:00Swift in Arch LinuxFollowing its open source release, Swift can be downloaded at <a href="http://www.swift.org/">http://www.swift.org</a>. I am lucky enough to see that there is Linux version available for download. The binary version was developed in Ubuntu, so I tried to grab the binary release and then have them installed to no luck. It was some problems with some libraries: libpanel (from ncurses5), libedit.so.2 and libicuuc. Being a bleeding edge distro does mean that I may not be able to run binary files from older libs in my Arch box. That was the case with Swift, it was compiled under Ubuntuwith older libs.<br />
<br />
Here's what I did to make Swift able to run without recompiling in Arch Linux:<br />
<ol>
<li>Whenever Swift complain about no libs available, go to rpmfind.net and then find one. Here's an example: <a href="http://www.rpmfind.net/linux/RPM/mageia/cauldron/x86_64/media/core/release/lib64ncurses5-5.9-24.mga6.x86_64.html">http://www.rpmfind.net/linux/RPM/mageia/cauldron/x86_64/media/core/release/lib64ncurses5-5.9-24.mga6.x86_64.html</a>. Get the rpm, rpmextract.sh rpmfile, the put all of the files inside, let's say $HOME/lib/swift</li>
<li>Exception for libedit, just make a symlink from /usr/lib/libedit.so to libedit.so.2 (this should be done inside $HOME/lib/swift.</li>
<li>Create a file, mine is $HOME/env/swift:</li>
</ol>
<blockquote class="tr_bq">
export PATH=$PATH:/opt/software/swift/bin<br />
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/lib/swift</blockquote>
That's all. Now, just "source ~/env/swift" to use Swift.<br />
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-63736288724636322282015-05-03T21:45:00.000-07:002015-05-03T21:51:24.836-07:00ArangoDB for Arch Linux - Binary Version Without Manual Compilation (AUR)I was once the maintainer of ArangoDB package in AUR. While the package was fine (I think), I am quite tired of having it compiled myself. It's just I am getting older, I guess. Then I prefer binary version after leaving maintainer role. Now I can use it using RPM file of OpenSuSE Factory version - available from <a href="https://www.arangodb.com/download/" target="_blank">ArangoDB download page</a>. Some tweaks are needed anyway. I will give you some tweaks that I successfully use to make it works. In this post, I put all of installation files under <b>/home/bpdp/software/arangodb</b> (a.k.a $ARANGO_HOME).<br />
<br />
<ul>
<li>cd $ARANGO_HOME</li>
<li>Install rpmextract<b> </b>package: <b># pacman -S rpmextract</b></li>
<li>Extract RPM file: <b>$ rmpextract.sh path/to/arangodb-2.5.3-12.1.i586.rpm</b></li>
<li>Move conf files into etc: <b>$ mv etc/arangodb/*.conf etc/</b></li>
<li>Delete init.d dir (we don't need that): <b>$ rm -rf etc/int.d</b></li>
<li>All database will reside in <b>db</b>, so: <b>$ mkdir db</b></li>
<li>Here's the dir structure:</li>
</ul>
<br />
<blockquote class="tr_bq">
$ ls<br />
total 48<br />
drwxr-xr-x 9 bpdp bpdp 4096 May 4 10:31 .<br />
drwxr-xr-x 91 bpdp bpdp 4096 May 4 10:16 ..<br />
drwxr-xr-x 2 bpdp bpdp 4096 May 4 10:12 bin<br />
drwxr-xr-x 2 bpdp bpdp 4096 May 4 10:19 db<br />
drwxr-xr-x 2 bpdp bpdp 4096 May 4 10:30 etc<br />
drwxr-xr-x 4 bpdp bpdp 4096 May 4 10:12 lib<br />
drwxr-xr-x 2 bpdp bpdp 4096 May 4 10:12 sbin<br />
drwxr-xr-x 5 bpdp bpdp 4096 May 4 10:12 share<br />
drwxr-xr-x 4 bpdp bpdp 4096 May 4 10:12 var<br />
$</blockquote>
<br />
<ul>
<li>Create all needed dirs: cluster and mri (ruby): <b>$ mkdir -p share/arangodb/mr/client/modules; mkdir -p shar/arangodb/mr/common/modules</b>.</li>
<li><b>$ mkdir -p var/log/arangodb/cluster; mkdir -p lib/arangodb/cluster</b></li>
<li>Edit etc/*.conf to reflect all of those dir location.</li>
<li>Delete unneeded dirs/files: <b>$ rm -rf lib/systemd/; rm -rf etc/init.d/; rm -rf sbin/rcarango</b>.</li>
<li>Set PATH and MANPATH. You may put this inside <b>$HOME/.bashrc</b>:</li>
</ul>
<br />
<blockquote class="tr_bq">
export ARANGO_HOME=$HOME/software/arangodb<br />
export PATH=$PATH:$ARANGO_HOME/bin:$ARANGO_HOME/sbin<br />
export MANPATH=$MANPATH:$ARANGO_HOME/share/man</blockquote>
Installation finish. You should source .bashrc or open another terminal and then you may active the server daemon and / or arango shell:<br />
<br />
<ul>
<li>Activate arango daemon: <b>$ arangod -c ~/software/arangodb/etc/arangod.conf</b></li>
<li>Enter arango shell: <b>$ arangosh -c ~/software/arangodb/etc/arangosh.conf</b></li>
</ul>
<div>
That's all I guess, you may now use ArangoDB. </div>
<div>
<br /></div>
<br />
<div>
<ctrl-d></ctrl-d></div>
<div>
<div>
Uf wiederluege! Na shledanou! Auf Wiedersehen! Bye Bye! Adiau! ¡Hasta luego! Au revoir!</div>
<div>
Arrivederci! להתראות! Tot ziens! Adjö! Εις το επανιδείν! さようなら До свидания!</div>
</div>
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com1tag:blogger.com,1999:blog-6405865758808618250.post-18218916450206450852015-04-26T04:24:00.002-07:002015-04-26T14:39:42.539-07:00Atom for 32bit Arch Linux (or other Linux 32bit distros)Actually, there's a package in AUR (<a href="https://aur.archlinux.org/packages/atom-editor/">https://aur.archlinux.org/packages/atom-editor/</a>) but I am too lazy to compile it myself, so here it goes.<br />
<br />
Atom is available in binary releases for 64bit only for Linux. Luckily, WebUpd8 team provides binary packages for 64bit and 32bit Ubuntu. Get the package here: <a href="https://launchpad.net/~webupd8team/+archive/ubuntu/atom/+packages">https://launchpad.net/~webupd8team/+archive/ubuntu/atom/+packages</a>. For this article, I downloaded 32bit binary for Vivid. We will convert this file using deb2targz utility. You should get it first. If you are in Arch Linux, get from AUR (<b>yaourt -S deb2targz</b>), if you are not from Arch fame (:p) get it here: <a href="http://www.miketaylor.org.uk/tech/deb/deb2targz">http://www.miketaylor.org.uk/tech/deb/deb2targz</a>. The .deb file that was just downloaded:<br />
<br />
<blockquote class="tr_bq">
-rw-r----- 1 bpdp bpdp 49547144 Apr 26 17:16 atom_0.194.0-1-webupd8-1_i386.deb</blockquote>
<br />
Put it somewhere wherever you like. Once you get deb2targz working, follow these steps:<br />
<ol>
<li>Convert .deb to tar.xz: <b>$ deb2targz atom_0.194.0-1-webupd8-1_i386.deb</b></li>
<li>Extract .xz file:<b> $ tar -zvf atom_0.194.0-1-webupd8-1_i386.tar.xz</b>. You will have two dirs: <b>usr </b>and <b>opt</b>. In <b>opt </b>dir, extract file atom/atom-linux32.tar.xz: <b>$ tar -xvf atom-linux32.tar.xz</b>.</li>
<li>Put those two dirs inside whatever dir you like, mine is <b>/home/bpdp/software/atom</b>. We call this $ATOM_DIR (not necessarily exist, just for this article only).</li>
<li>This .deb package search <b>atom</b> binary at /tmp/atom-build/atom, which is surely doesn't exist. To make it works, we should edit <b>usr/bin/atom</b> file. Find the line which says <b>[ -x "$ATOM_PATH" ] || ATOM_PATH="/tmp/atom-build/atom"</b> and change it to <b>[ -x "$ATOM_PATH" ] || ATOM_PATH="/home/bpdp/software/atom/opt/atom/atom"</b> (well of course you should put your own location of atom binary (mine is /home/bpdp/software/atom/opt/atom/atom).</li>
<li>Now you should be able to run <b>atom</b> from $ATOM_DIR/usr/bin: <b>$ ./atom</b>. If you want, you may also put that dir in your PATH env variable: <b>export PATH=$PATH:/home/bpdp/software/atom/usr/bin</b> inside $HOME/.bashrc.</li>
</ol>
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-17453661251308146212015-04-26T03:43:00.000-07:002015-04-26T03:43:08.856-07:00Setting Printer Network HP LaserJet P2035n di Arch Linux<div style="background-color: white; color: #141823; font-family: 'helvetica neue', helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 20px;">
Install paket: hplip dan cups</div>
<div style="background-color: white; color: #141823; font-family: 'helvetica neue', helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #141823; font-family: 'helvetica neue', helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 20px;">
Aktifkan CUPS dengan menjalankan daemon:</div>
<div style="background-color: white; color: #141823; font-family: 'helvetica neue', helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #141823; font-family: 'helvetica neue', helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 20px;">
# cupsd</div>
<div style="background-color: white; color: #141823; font-family: 'helvetica neue', helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #141823; font-family: 'helvetica neue', helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 20px;">
Install driver HP. Siapkan file ppd (hp-laserjet_p2035n-hpijs-pcl3.ppd), diperoleh di /usr/share/ppd/HP/hp-laserjet_p2035n-hpijs-pcl3.ppd.gz. Ekstrak file tersebut di suatu lokasi, setting permission access ke user. Untuk kasus ini, saya meletakkan file tersebut di /home/bpdp/ppd/hp-laserjet_p2035n-hpijs-pcl3.ppd. Ikuti langkah2 berikut:</div>
<div style="background-color: white; color: #141823; font-family: 'helvetica neue', helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<blockquote class="tr_bq" style="background-color: white; color: #141823; font-family: 'helvetica neue', helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 20px;">
[root@bpdp-arch ~]# hp-setup -i<br />HP Linux Imaging and Printing System (ver. 3.15.2)<br />Printer/Fax Setup Utility ver. 9.0<br />Copyright (c) 2001-15 Hewlett-Packard Development Company, LP<br />This software comes with ABSOLUTELY NO WARRANTY.<br />This is free software, and you are welcome to distribute it<br />under certain conditions. See COPYING file for more details.<br />(Note: Defaults for each question are maked with a '*'. Press <enter> to accept the default.)<br />--------------------------------<br />| SELECT CONNECTION (I/O) TYPE |<br />--------------------------------<br /> Num Connection Description <br /> Type <br /> -------- ---------- ----------------------------------------------------------<br /> 0* usb Universal Serial Bus (USB) <br /> 1 net Network/Ethernet/Wireless (direct connection or JetDirect)<br /> 2 par Parallel Port (LPT:) <br />Enter number 0...2 for connection type (q=quit, enter=usb*) ? 1<br />Using connection type: net<br />Using device: hp:/net/HP_LaserJet_P2035n?ip=172.17.51.109<br />Setting up device: hp:/net/HP_LaserJet_P2035n?ip=172.17.51.109<br /><br />---------------------<br />| PRINT QUEUE SETUP |<br />---------------------<br />Please enter a name for this print queue (m=use model name:'HP_LaserJet_P2035n'*, q=quit) ?<br />Using queue name: HP_LaserJet_P2035n<br />Locating PPD file... Please wait.<br />error: No PPD found for model laserjet_p2035n using old algorithm.<br />error: Unable to find an appropriate PPD file.<br />Would you like to specify the path to the correct PPD file to use (y=yes, n=no*, q=quit) ? /home/bpdp/ppd/hp-laserjet_p2035n-hpijs-pcl3.ppd<br />error: Please press <enter> or enter 'y', 'n', or 'q'.<br />Would you like to specify the path to the correct PPD file to use (y=yes, n=no*, q=quit) ? y<br />Please enter the full filesystem path to the PPD file to use (q=quit) :/home/bpdp/ppd/hp-laserjet_p2035n-hpijs-pcl3.ppd<br />Description for the file: HP LaserJet p2035n hpijs pcl3, 3.15.2, requires proprietary plugin<br />Use this file (y=yes*, n=no, q=quit) ? y<br />Enter a location description for this printer (q=quit) ?Ruang SI Jaringan<br />Enter additonal information or notes for this printer (q=quit) ?<br />Adding print queue to CUPS:<br />Device URI: hp:/net/HP_LaserJet_P2035n?ip=172.17.51.109<br />Queue name: HP_LaserJet_P2035n<br />PPD file: /home/bpdp/ppd/hp-laserjet_p2035n-hpijs-pcl3.ppd<br />Location: Ruang SI Jaringan<br />Information:<br /><br />---------------------<br />| PRINTER TEST PAGE |<br />---------------------<br />Would you like to print a test page (y=yes*, n=no, q=quit) ? n<br />Done.<br />[root@bpdp-arch ~]#</enter></enter></blockquote>
<div style="background-color: white; color: #141823; font-family: 'helvetica neue', helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #141823; font-family: 'helvetica neue', helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 20px;">
Setelah itu, setiap kali print, akan muncul printer tersebut. Enjoy!</div>
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com1tag:blogger.com,1999:blog-6405865758808618250.post-90245552251575334542014-11-15T18:07:00.000-08:002014-11-15T18:11:28.266-08:00Mengakses Engine Prolog (tuProlog) dari ScalaProlog merupakan bahasa pemrograman komputer generasi awal, dibuat oleh <a href="http://alain.colmerauer.free.fr/">Alain Colmerauer</a> pada sekitar awal tahun 1970-an dan dikembangkan oleh Alain bersama dengan Phillipe Roussel pada tahun 1972. Prolog pada awalnya memang dikembangkan untuk aplikasi AI (Artificial Intelligence) dengan kekhususan pada formalisme linguistik. Prolog banyak digunakan pada berbagai universitas dan pendidikan tinggi dan seakan-akan jauh dari industri meskipun banyak cerita kesuksesan dari Prolog (misalnya penggunaan Sicstus Prolog atau SWI Prolog). Di Indonesia, bisa dibilang Prolog memang murni masih berada di "dunia imajinasi" karena hanya digunakan pada banyak mata kuliah di berbagai perguruan tinggi tetapi jauh dari dunia industri (as always, CMIIW).<br />
<br />
Saat ini Prolog mulai banyak dikembangkan untuk aplikasi tingkat lanjut karena kemampuan internal dari bahasa pemrograman tersebut yang sesuai untuk pemecahan masalah kompleks yang melibatkan reasoning serta berbagai fasilitas lainnya yang sesuai untuk keperluan aplikasi terdistribusi di Intenet (DCG untuk parsing dan menghasilkan list, pemrosesan data, declarative programming untuk komunikasi dan interaksi agent, dan lain-lain). Interpreter dan compiler Prolog juga banyak dikembangkan dan tersedia untuk berbagai platform. Untuk tulisan ini kita akan menggunakan <a href="http://apice.unibo.it/xwiki/bin/view/Tuprolog/">tuProlog</a>. tuProlog merupakan sistem Prolog yang dikembangkan untuk Java (dan .NET). Hal yang menarik dari tuProlog, sistem ini menyediakan sistem Prolog yang ringan dan hanya mengkonsentrasikan diri pada fitur standar (ISO Prolog) sedangkan bagian lainnya bisa menggunakan Java. Untuk artikel ini kita akan menggunakan <a href="http://scala-lang.org">Scala</a> yang merupakan bahasa obyek-fungsional untuk aplikasi yang dijalankan di atas JVM.<br />
<br />
Untuk mengikuti artike ini, ada beberapa yang harus dipersiapkan:
<br />
<br />
<ol>
<li>Install JDK (saya menggunakan versi 1.8.0_25)</li>
<li>Install Scala (saya menggunakan versi 2.11.4)</li>
<li>Download tuProlog (saya menggunakan versi 2..9.1)</li>
<li>Hmm ... saya menggunakan Linux - bash, jika anda menggunakan tools selain itu silahkan buat penyesuaian sendiri.</li>
</ol>
<br />
<br />
Artikel ini hanya menjelaskan cara mengakses Prolog engine melalui Scala. Setelah memahami artikel ini, anda bisa menggunakan fitur dari sistem tuProlog, menuliskan kode Prolog yang dijalankan melalui tuProlog dan kemudian menjalankan engine Prolog melalui Scala sekaligus mengambil hasil dari hasil eksekusinya. Untuk artikel ini, kita belum menggunakan <b>sbt</b> sehingga setting <b>CLASSPATH </b>harus dilakukan secara manual. Artikel menggunakan <b>sbt </b>semoga bisa segera menyusul.
<br />
<br />
<b>Copy file 2p.jar dan tuprolog.jar</b>
<br />
<br />
<pre class="prettyprint">
$ ls
total 744
drwxr-xr-x 2 bpdp bpdp 4096 Nov 16 08:04 .
drwxr-xr-x 19 bpdp bpdp 4096 Nov 16 07:58 ..
-rw-r--r-- 1 bpdp bpdp 547424 Nov 16 08:00 2p.jar
-rw-r--r-- 1 bpdp bpdp 392 Nov 16 08:04 HelloProlog.scala
-rw-r--r-- 1 bpdp bpdp 198340 Nov 16 08:00 tuprolog.jar
$
</pre>
<br />
<br />
<b>Setting CLASSPATH</b>
<br />
<br />
<pre class="prettyprint">
$ export CLASSPATH=$CLASSPATH:.:2p.jar:tuprolog.jar
$
</pre>
<br />
<br />
<b>Kode Sumber</b>
<div>
<br /></div>
<div>
File Scala berikut ini (HelloProlog.scala) saya terjemahkan dari manual untuk kode sumber Java hal 166. Interoperabilitas Scala dan Java sangat bagus sehingga penggunaan tuProlog engine berjalan dengan baik dan kode sumber Scala relatif lebih mudah dipahami.</div>
<div>
<br /></div>
<br />
<pre class="prettyprint">
import alice.tuprolog._
import scala.util.control._
object HelloProlog {
def main(args: Array[String]) {
val pEngine = new Prolog
var info = pEngine.solve("append(X,Y,[1,2]).")
val loop = new Breaks
loop.breakable {
while (info.isSuccess()) {
println("solution: " + info.getSolution() +
" - bindings: " + info)
if (pEngine.hasOpenAlternatives()) {
info = pEngine.solveNext()
} else {
loop.break
}
}
}
}
}
</pre>
<br />
<br />
Penggunaan tuProlog engine sesederhana mendefinisikan engine Prolog (new Prolog) dan kemudian menggunakan method solve untuk mengeksekusi kode sumber Prolog.
<br />
<br />
<b>Kompilasi</b>
<br />
<br />
<pre class="prettyprint">
$ scalac HelloProlog.scala
$ ls -la
total 756
drwxr-xr-x 2 bpdp bpdp 4096 Nov 16 08:43 .
drwxr-xr-x 19 bpdp bpdp 4096 Nov 16 07:58 ..
-rw-r--r-- 1 bpdp bpdp 547424 Nov 16 08:00 2p.jar
-rw-r--r-- 1 bpdp bpdp 1930 Nov 16 08:16 HelloProlog$$anonfun$main$1.class
-rw-r--r-- 1 bpdp bpdp 657 Nov 16 08:16 HelloProlog.class
-rw-r--r-- 1 bpdp bpdp 1140 Nov 16 08:16 HelloProlog$.class
-rw-r--r-- 1 bpdp bpdp 520 Nov 16 08:16 HelloProlog.scala
-rw-r--r-- 1 bpdp bpdp 198340 Nov 16 08:00 tuprolog.jar
$
</pre>
<br />
<br />
<b>Running</b>
<br />
<br />
<pre class="prettyprint">
$ scala HelloProlog
solution: append([],[1,2],[1,2]) - bindings: yes.
X / [] Y / [1,2]
solution: append([1],[2],[1,2]) - bindings: yes.
X / [1] Y / [2]
solution: append([1,2],[],[1,2]) - bindings: yes.
X / [1,2] Y / []
</pre>
<br />
<br />
Menggunakan tuProlog akan memungkinkan aplikasi kita menggunakan berbagai fitur AI yang bermanfaat untuk memperbaiki kinerja software yang kita aplikasikan. Happy hacking!Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-2019253668668284032014-05-23T12:59:00.002-07:002014-05-23T13:00:18.225-07:00Maven repository priority in GradleIf you get an error like this when you execute <b>gradle build</b>, it means that there is something wrong with your maven repository priority (just an example):
<br />
<br />
<pre class="prettyprint">
Checksum missing at http://www.systap.com/maven/releases/org/semanticweb/yars/nxparser/1.2.3/nxparser-1.2.3.pom.sha1 due to: For input string: "<!"
Download http://www.systap.com/maven/releases/org/semanticweb/yars/nxparser/1.2.3/nxparser-1.2.3.pom
[Fatal Error] nxparser-1.2.3.pom:2:10: Already seen doctype.
</pre>
<br />
<br />
Below is a snapshot of my <b>build.gradle</b>:
<br />
<br />
<pre class="prettyprint">
// maven repo for BigData - as embedded RDF database
// we are looking for BigData with Blueprints also
// needed by BigData: nxparser
maven { url "http://www.systap.com/maven/releases" }
maven { url "http://nxparser.googlecode.com/svn/repository" }
</pre>
<br />
<br />
My BigData repository need nxparser, but the problem is, maven repo for nxparser reside after BigData repo, so gradle doesn't know that it has to fetch nxparser from repository below. Change the order into this to fix the problem:
<br />
<br />
<pre class="prettyprint">
// maven repo for BigData - as embedded RDF database
// we are looking for BigData with Blueprints also
// needed by BigData: nxparser
maven { url "http://nxparser.googlecode.com/svn/repository" }
maven { url "http://www.systap.com/maven/releases" }
</pre>
<br />
<br />
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-3152608473460648892014-04-13T02:04:00.001-07:002014-04-13T02:04:43.734-07:00Gradle Untuk Mengelola Repo Lokal MavenSaat pertama kali menggunakan Gradle, saya cukup kerepotan mempelajari tool ini karena dokumentasinya lebih mirip dengan manual. Tantangan yang pertama saya peroleh adalah menggunakan repository maven di komputer saya karena kadang kala software yang saya kembangkan berupa API (Application Programming Interface). Keinginan saya sederhana:<br />
<br />
<ol>
<li>Develop pustaka (API)</li>
<li>Kompilasi dan build API dalam format .jar</li>
<li>Push .jar ke repositori lokal maven (API, Javadoc, dan source code)</li>
<li>API (.jar) di repositori lokal tersebut siap digunakan untuk pengembangan software berikutnya</li>
</ol>
<br />
Membaca manual Gradle cukup merepotkan untuk hal sederhana tersebut, jadi saya akan uraikan cara sederhana untuk keperluan tersebut. Pada dasarnya ada 3 file yang akan banyak digunakan:<br />
<br />
<ol>
<li>build.gradle di proyek pustaka API</li>
<li>gradle.properties untuk berbagai properties yang diperlukan di proyek pustaka API</li>
<li>build.gradle di proyek yang akan menggunakan file .jar tersebut</li>
</ol>
<br />
<b>build.gradle di proyek pustaka API</b><br />
<br />
Perhatikan, plugin yang digunakan adalah 'maven'. Perhatikan juga di bagian bawah mulai dari bagian untuk mengkonfigurasi POM.<br />
<br />
<pre class="prettyprint">
apply plugin: 'java'
apply plugin: 'maven'
sourceCompatibility = '1.8'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
repositories {
mavenLocal()
mavenCentral()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
// definisi URL utk repo lainnya ...
}
dependencies {
// contoh dependency untuk compile
compile group: 'com.bigdata', name: 'bigdata', version: '1.3.0'
// dependency untuk test
testCompile group: 'junit', name: 'junit', version: '4.10'
}
test {
/* Configure which tests are included
include 'org/foo/**'
exclude 'org/boo/**'
*/
maxParallelForks = 5
maxHeapSize = '1024m'
}
// bagian ini ke bawah yang penting untuk mengkonfigurasi POM
configure(install.repositories.mavenInstaller) {
pom.project {
groupId 'name.bpdp'
artifactId 'turgo'
inceptionYear '2014'
packaging 'jar'
licenses {
license {
name 'Eclipse Public License (Version 1.0)'
url 'http://www.eclipse.org/legal/epl-v10.html'
distribution 'repo'
}
}
}
}
// untuk sources.jar
task sourcesJar(type: Jar, dependsOn:classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
// untuk javadoc.jar
task javadocJar(type: Jar, dependsOn:javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
// artifacts yang di-push selain .jar API
artifacts {
archives sourcesJar
archives javadocJar
}
</pre>
<br />
<b>gradle.properties</b><br />
<br />
Berisi properties dari proyek. Isinya adalah sebagai berikut:<br />
<br />
<pre class="prettyprint">
version=0.0.1
group=name.bpdp.turgo
</pre>
<br />
Perhatikan, tidak boleh menggunakan tanda petik string untuk value karena akan menyebabkan error di task javadoc:<br />
<br />
<pre class="prettyprint">
Illegal package name: "0.0.1"
Illegal package name: " API"
</pre>
<br />
Error ini seringkali membingungkan karena tidak jelas, jadi jika menemui error seperti itu, periksa gradle.properties.<br />
<br />
Setelah itu, task "install" (<i>$ gradle install)</i> akan mem-build API, menghasilkan .jar, menghasilkan .jar untuk javadoc dan sources, kemudian mem-push semua .jar ke repo lokal seperti berikut ini:<br />
<br />
<b>build.gradle di proyek yang akan menggunakan .jar</b><br />
<br />
Sederhana saja, jika sudah di-push, tinggal cantumkan mavenLocal() di repositories dan deklarasikan dependency compile untuk .jar tersebut. Berikut ini adalah contohnya:<br />
<br />
<pre class="prettyprint">
pply plugin: 'java'
apply plugin: 'application'
sourceCompatibility = 1.8
version = '1.0'
mainClassName = 'turgo.examples.hello.HelloTurgo'
repositories {
mavenLocal()
mavenCentral()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
}
dependencies {
compile group: 'name.bpdp', name: 'turgo', version: '0.0.1'
testCompile group: 'junit', name: 'junit', version: '4.11'
}
</pre>
<br />
That's all there is to say. :)Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-83343450254194175522013-10-21T06:37:00.000-07:002013-10-21T06:37:05.779-07:00Awesome Window Manager (3.5.2) and Java 7 GUI ProblemSome complaints have been reported about Java GUI (AWT/Swing) that does not behave correctly under Java GUI. This problem come in the form of empty contents in Java GUI window and also some weird behaviour in Java GUI menu (wrong cursor pointer position, menu doesn't want to display its contents without click and hold mouse button).<br />
<br />
This problem usually only happens in some exotic non-reparenting window manager such as <a href="http://awesome.naquadah.org/" target="_blank">awesome</a>, <a href="http://dwm.suckless.org/" target="_blank">dwm</a>, <a href="http://subforge.org/projects/subtle" target="_blank">subtle</a>, and probably others. I use only awesome so this is my experience in awesome window manager. Even when since release 3.5.x, awesome has become a reparenting window manager, the weird behaviour above still exists (the menu problem). <a href="http://awesome.naquadah.org/wiki/Problems_with_Java" target="_blank">Uncommit source code</a> is not an option for me. <br />
<br />
If you experience this, there are two things that can be done:<br />
<ol>
<li>Change JDK from Oracle JDK to OpenJDK. I tested with OpenJDK 2.4.2 (IcedTea) and Awesome 3.5.2. This works very well without any extra steps.</li>
<li>Use <a href="http://tools.suckless.org/wmname" target="_blank">wmname</a> and execute "<b>wmname LG3D</b>" from shell before running Java GUI application. This option is needed if we use Oracle JDK. I tested this with Oracle JDK 1.7.0_u45.</li>
</ol>
If you want to use OpenJDK and are so awfully lazy to compile it by yourself (just like myself), you may grab the latest binary for Linux in <a href="https://github.com/alexkasko/openjdk-unofficial-builds" target="_blank">OpenJDK unofficial build</a>. This works very well.<br />
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-6993695924446882542013-10-01T21:35:00.000-07:002013-10-01T21:35:23.822-07:00Introspeksi Untuk Rekayasa Web: Aplikasi Web atau Sistem Web?Selama ini kita cenderung menyebut istilah software yang ada di
Internet dan menggunakan infrastruktur dari W3C untuk antarmuka dengan
manusia melalui browser sebagai <b>aplikasi Web</b>. Istilah ini
mempunyai konotasi sendirian dan hanya dimaksudkan untuk berinteraksi
dengan manusia saja. Secara normal, kondisi ini seperti kondisi manusia
yang egois: "ini yang saya punyai, silahkan kalau kamu mau berkomunikasi
dengan saya, sesuaikan dengan kondisi saya". Tentu tidak se-ekstrim
itu, tetapi secara konsep memang demikian. Perhatikan, selama ini saat
kita melakukan rekayasa, yang kita pikirkan adalah software itu sendiri
serta bagaimana software tersebut bisa dibaca dan mempermudah navigasi
manusia saat menggunakan software tersebut. Hasil dari ini bisa ditebak:
<br />
<ol>
<li>Standarisasi komponen antarmuka Web di browser: HTML, CSS, PNG, dll</li>
<li>Masalah kesesuaian
browser dengan standar tersebut (para desainer antarmuka Web pasti
ingat dengan sulitnya membuat antarmuka Web mereka bisa bekerja lintas
browser, dan muncullah berbagai macam kutukan terutama terhadap salah
satu browser dari perusahaan besar).</li>
<li>JavaScript overkill:
merancang dan mengimplementasikan halaman Web yang dinamis tentu tidak
bisa menggunakan HTML (saja), tetapi memerlukan JavaScript. Jaman dahulu
(sekitar tahun 2000-an), jauh lebih parah lagi karena ada masalah
standarisasi JavaScript sehingga akhirnya diserahkan ke ECMA dan dibuat
spesifikasi menjadi ECMAScript. Saat itu ada JavaScript (Netscape) dan
JScript (Microsoft), belum lagi setelah itu Microsoft juga membuat
VBScript. Ini masa-masa gelap untuk para perancang halaman Web. Meski
sekarang tidak seperti itu lagi, hanya ada JavaScript, masalah
standarisasi ini juga masih menjadi masalah turunan (belum termasuk
Google yang mengeluarkan Dart, meski bisa dikompilasi ke JavaScript).
Buka kode sumber dari halaman Web, biasanya akan muncul banyak sekali
snippet JavaScript.</li>
</ol>
Sebenarnya kita perlu berpikir lebih
sederhana, bahwa software di Web adalah software yang digunakan untuk
mendukung interaksi sosial manusia (silahkan baca kembali note saya
sebelum ini). Dengan menggunakan pola pikir seperti itu, maka kita
seharusnya mulai mencurahkan pemikiran ke bagaimana membuat software
tersebut bisa membantu interaksi sosial manusia. Domain ini yang
sekarang dikenal dengan istilah Pragmatic Web. <br /><br />Pada domain
Pragmatic Web, tidak ada lagi (hanya) aplikasi Web. Mengapa? Sederhana
saja, software yang akan dikembangkan merupakan software untuk mendukung
interaksi sosial manusia sehingga harus bersifat kontekstual, atau <i>context-aware Web</i>. Dalam konteks ini, kita harus membedakan antara <i>web services</i> dengan <i>services</i>. <i>Web services</i> berada pada ruang lingkup lapisan informasi sedangkan <i>services</i>
berada pada ruang lingkup kehidupan nyata. Dalam kondisi seperti ini,
rekayasa software di Web tidak mungkin hanya berada pada sisi penyedia
(server), tetapi juga harus memikirkan bagaimana <i>software agent</i> di sisi klien bisa berkomunikasi dengan <i>software agent</i> di sisi penyedia.<br /><br />Menggeser
paradigma software di Web dari software yang egois menjadi suatu sistem
adalah salah satu kunci untuk mengurai benang kusut di ranah rekayasa
Web yang sudah terlalu banyak menghabiskan waktu di sisi (hanya)
aplikasi Web. Semoga.Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-8989990990550839212013-10-01T06:18:00.001-07:002013-10-01T06:18:59.448-07:00Aplikasi Web di Masa Depan: Semakin Konvergen dengan Teknologi AgenAgen bukan merupakan hal baru di dunia informatika. Sejak perkembangan AI (<i>Artificial Intelligence</i>
- Kecerdasan Buatan), agen sebenarnya merupakan inti dari pembahasan.
Jika dirunut sejak awal, kita bisa melihat teori agensi pada pemodelan
ekonomi (<i>principal-agents</i>). Teori agensi pada pemodelan tersebut mendasarkan pada pemikiran bahwa <i>principal</i> selaku pemilik merekrut, menggaji, mempekerjakan <i>agents</i> untuk melakukan pekerjaan-pekerjaan tertentu. Tentu saja para <i>agents</i>
tersebut harus mempunyai kecerdasan (keahlian) tertentu dan bisa
bersikap serta mengambil keputusan (dalam ruang lingkupnya) terkait
dengan tujuan kerjasama tersebut. Dalam kerjasama tersebut, dipastikan
tidak akan muncul <i>agency problems</i>, yaitu konflik yang muncul karena perbedaan <i>goals</i>
di antara mereka. Konsep inilah yang sebenarnya ingin dikerjakan pada
AI. Sederhana dalam penggambaran, tetapi sangat sulit dalam
implementasi. Agen itu sendiri bisa berupa agen tunggal serta MAS (<i>Multi-Agent Systems</i>). Agen tunggal tentu lebih mudah diimplementasikan. MAS merupakan topik yang sangat sulit (jaman dulu disebut sebagai DAI - <i>Distributed Artificial Intelligence</i>). Kompleksitas MAS disebabkan karena adanya interaksi antar agen. <br /><br />Sementara
itu, perkembangan teknologi jaringan yang sudah sampai tingkat
konektivitas di seluruh dunia ternyata membuat perkembangan tuntutan
pengguna aplikasi menjadi lebih kompleks. Ingat, semakin ringan dan
semakin ingin dimanjakan, semakin sulit pekerjaan para pengembang
aplikasi. Pada era ini, aplikasi pada dasarnya bisa kita bagi menjadi
aplikasi yang <i>headless</i> serta aplikasi berbasis Web. Aplikasi <i>headless</i> adalah aplikasi yang tidak menggunakan <i>user interface</i>
untuk si pemakai karena memang tidak dikhususkan untuk pemakai biasa.
Pemakai menggunakan aplikasi ini, tetapi tidak menyadari jika aplikasi
ini ada. Contoh sederhana aplikasi ini antara lain aplikasi <i>crawler </i>dari
berbagai situs mesin pencari. Pemakai hanya perlu ke (misalnya) google,
dan mencari kata kunci yang dikehendaki. Mekanisme dan penyediaan
infrastruktur dari aplikasi tersebut kebanyakan tidak diketahui dan
dipahami pemakai biasa. Aplikasi Web pada dasarnya menyediakan <i>user interface</i> untuk berkomunikasi dengan pemakai. <br /><br />Apa
keterkaitan antara kedua hal itu? Web menyedian berbagai macam sumber
daya yang sangat melimpah ruah, mulai dari sumber daya yang hanya bisa
dipahami oleh manusia (era Syntactic Web dengan HTML tanpa kandungan
semantik) maupun sumber daya yang berupa sumber daya yang bisa
"dipahami" mesin (dikenal dengan istilah sumber daya semantik - Semantic
Web). Nah sekarang, kondisi seperti ini bisa memungkinkan orang untuk
berpikir dalam kerangka teori agensi di atas. Pemakai menjadi <i>pincipal</i>, sementara <i>agents</i>
akan berupa software: "saya ingin sesuatu dari Web, kerjakan dan
berikan ke saya hasilnya" dengan seminimal mungkin intervensi ke
software tersebut. Tugas para pengembang barangkali untuk memungkinkan
hal-hal di atas bisa terjadi serta memungkinkan otomasi di Internet/Web
seperti yang dicetuskan oleh Tim Berners-Lee pada tahun 2001:<br />
<ol>
<li>Merealisasikan <i>software agent</i>, dalam konteks ini <i>sofware agent </i>yang bisa berkomunikasi dengan si pemakai. Riset di bidang <i>human-agent</i><i> communication</i> ini juga diperlukan, bersamaan dengan NLP (<i>Natural Language Processing</i>). Pemakai "berbicara" dan menyuruh agen untuk mengerjakan sesuatu <i>on behalf of its owner</i>. Pada konteks ini, penelitian yang dulu pernah dikembangkan oleh Terry Winograd menjadi penting (LAP - <i>Language-Action Perspective</i>).</li>
<li>Merealisasikan
aplikasi Web yang juga sebenarnya merupakan salah satu agen pada suatu
masyarakat MAS. Agent ini mempunyai dua "muka", satu merupakan aplikasi
Web dengan <i>user interface </i>HTML-CSS-JavaScript-etc, muka yang lain adalah agen. Agen ini merupakan wakil dari pemilik Web yang siap berkolaborasi dengan <i>software agent </i>dari pemakai. Komunikasi <i>Agent-to-Agent</i> ini juga merupakan hal yang kompleks dan merupakan salah satu standar yang dihasilkan oleh FIPA (<a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.fipa.org&h=EAQEIngSo&s=1" rel="nofollow" target="_blank">http://www.fipa.org</a>) berupa ACL (<i>Agent Communication Language</i>). </li>
</ol>
Nah,
silahkan mulai bersiap-siap jika memang (berniat) terjun ke dunia
pengembangan software. That should be pretty interesting. :pAnonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-29969604345558257092013-07-21T06:00:00.001-07:002013-07-21T06:00:27.629-07:00Using Vim for Java + GradleShort posting. I've created a repo so that I can clone it everytime I want to create new project. See here:<br />
<br />
https://github.com/bpdp/vim-java<br />
<br />Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-26688412658057512642013-07-19T16:55:00.000-07:002013-07-19T16:55:20.431-07:00Basis Data Graf: Titan dengan Apache Cassandra Sebagai Storage BackendTulisan ini merupakan kelanjutan dari tulisan sederhana tentang basis data graf sebelumnya. Kali ini saya akan menuliskan sedikit tentang memulai menggunakan Titan [1] yang merupakan basis data graf dengan kapabilitas penyimpanan dan pemrosesan data masif (web scale atau big data). Titan adalaha softwae bebas dengan lisensi Apache [2].<br />
<br />
Titan sebenarnya terdiri atas 2 bagian:<br />
<br />
<ol>
<li>Distribusi Titan</li>
<li>Storage backend</li>
</ol>
<br />
<b>Distribusi Titan</b><br />
<br />
Titan bisa diperoleh dari repositori Titan [3]. Versi rilis terakhir adalah 0.3.1. Hasil download adalah sebagai berikut:<br />
<br />
<pre class="prettyprint">
$ ls
total 74744
drwxr-xr-x 2 bpdp bpdp 4096 Jul 11 06:57 .
drwxr-xr-x 25 bpdp bpdp 4096 Jul 18 10:37 ..
-rw-r--r-- 1 bpdp bpdp 76521205 May 14 22:48 titan-all-0.3.1.zip
-rw-r--r-- 1 bpdp bpdp 64 Jun 24 12:43 url
$ cat url
http://s3.thinkaurelius.com/downloads/titan/titan-all-0.3.1.zip
$
</pre>
<br />
<br />
Mendownload distribusi ini saja tidak cukup, karena distribusi ini "hanya" menyediakan core dari Titan, tidak ada komponen dari software yang berfungsi sebagai native storage backend. Secara umum, penggunaan Titan meliputi aktivasi storage backend (baik secara lokal maupun cluster) kemudian mengkonfigurasi Titan untuk menggunakan storage backend tersebut.<br />
<br />
<b>Storage Backend</b><br />
<br />
Titan menggunakan basis data lainnya sebagai "tempat" untuk menyimpan data. Software yang bisa digunakan untuk keperluan ini adalah:<br />
1. Apache Cassandra [4]<br />
2. Apache HBase [5]<br />
3. Oracle BerkeleyDB [6]<br />
Mempelajari Titan saja tidak cukup, pemahaman yang memadai tentang storage backend juga diperlukan. Titan adalah basis data untuk data yang masif sehingga storage backend-nya pun juga software basis data kelas berat. Tingkat kompleksitas dari storage backend bervariasi, tetapi Apache HBase barangkali merupakan storage backend yang paling kompleks.<br />
<br />
<b>Memulai Storage Backend</b><br />
<br />
Storage backend yang akan digunakan disini adalah Apache Cassandra. Versi yang digunakan adalah versi terakhir saat tulisan ini ditulis: 1.2.6. Langkah untuk memulai Apache Cassandra sangat mudah dan pada dasarnya hanya meliputi konfigurasi PATH serta file konfigurasi cassandra.yaml. Tarball dari Apache Cassandra pada tulisan ini akan diekstrak di $HOME/software/apache-cassandra-1.2.6 (direktori ini akan dirujuk dengan variabel $CASSANDRA_HOME). Data akan disimpan di $HOME/db/cassandra. Konfigurasi:<br />
<br />
<u>$HOME/.bash_profile</u><br />
<br />
<pre class="prettyprint">
...
...
$CASSANDRA_HOME=$HOME/software/apache-cassandra-1.2.6
export PATH=$PATH:$CASSANDRA_HOME/bin
...
...
</pre>
<br />
<br />
<u>cassandra.yaml</u><br />
<br />
Ada banyak konfigurasi yang bisa diatur pada file ini [7], tetapi pada bagian ini hanya 4 saja yang akan saya ubah:<br />
<br />
<pre class="prettyprint">
cluster_name: 'KintamaniCluster'
data_file_directories:
- /home/bpdp/db/cassandra/data
# commit log
commitlog_directory: /home/bpdp/db/cassandra/commitlog
saved_caches_directory: /home/bpdp/db/cassandra/saved_caches
</pre>
<br />
<br />
Catatan: direktori-direktori diatas dibuat dulu jika belum ada.<br />
<br />
Setelah itu, untuk memulai Apache Cassandra, login ke shell baru, setelah itu:<br />
<br />
<pre class="prettyprint">
$ cassandra -f<br />
</pre>
<br />
Argumen -f digunakan untuk menampilkan hasil eksekusi di latar depan sehingga kita bisa melihat jika terjadi masalah. Hasilnya nanti akan banyak sekali, saya tampilkan bagian akhirnya saja:<br />
<br />
<pre class="prettyprint">
...
...
INFO 05:07:53,670 Node localhost/127.0.0.1 state jump to normal
INFO 05:07:53,686 Startup completed! Now serving reads.
INFO 05:07:53,948 Starting listening for CQL clients on localhost/127.0.0.1:9042...
INFO 05:07:54,010 Binding thrift service to localhost/127.0.0.1:9160
INFO 05:07:54,083 Using TFramedTransport with a max frame size of 15728640 bytes.
INFO 05:07:54,090 Using synchronous/threadpool thrift server on localhost : 9160
INFO 05:07:54,090 Listening for thrift clients...
INFO 05:12:51,681 Compacting [SSTableReader(path='/home/bpdp/db/cassandra/data/system/schema_columnfamilies/system-schema_columnfamilies-ic-15-Data.db'), SSTableReader(path='/home/bpdp/db/cassandra/data/system/schema_columnfamilies/system-schema_columnfamilies-ic-13-Data.db'), SSTableReader(path='/home/bpdp/db/cassandra/data/system/schema_columnfamilies/system-schema_columnfamilies-ic-16-Data.db'), SSTableReader(path='/home/bpdp/db/cassandra/data/system/schema_columnfamilies/system-schema_columnfamilies-ic-14-Data.db')]
INFO 05:12:52,233 Compacted 4 sstables to [/home/bpdp/db/cassandra/data/system/schema_columnfamilies/system-schema_columnfamilies-ic-17,]. 20,712 bytes to 6,933 (~33% of original) in 550ms = 0.012021MB/s. 10 total rows, 4 unique. Row merge counts were {1:2, 2:0, 3:0, 4:2, }
</pre>
<br />
<br />
<b>Titan</b><br />
<br />
Setelah men-donwload Titan, ekstrak hasil download tersebut di suatu direktori tertentu (penulis menempatkan di $HOME/software/titan, selanjutnya akan disebut $TITAN_HOME). Saya juga menempatkan variabel lingkungan PATH di .bash_profile sebagai berikut:<br />
<br />
<pre class="prettyprint">
...
...
$TITAN_HOME=$HOME/software/titan
export PATH=$PATH:$TITAN_HOME/bin
...
...
</pre>
<br />
<br />
Titan mendukung penuh TinkerPop stack sehingga kita bisa menggunakan tools dari TinkerPop stack, baik untuk REPL (menggunakan Gremlin) maupun dalam source code. Contoh sesi REPL dari Gremlin adalah sebagai berikut:<br />
<br />
<pre class="prettyprint">
$ gremlin.sh
\,,,/
(o o)
-----oOOo-(_)-oOOo-----
gremlin> conf = new BaseConfiguration();
==>org.apache.commons.configuration.BaseConfiguration@13015e8
gremlin> conf.setProperty("storage.backend","cassandra");
==>null
gremlin> conf.setProperty("storage.hostname","127.0.0.1");
==>null
gremlin> g = TitanFactory.open(conf);
13/07/20 06:29:02 INFO impl.ConnectionPoolMBeanManager: Registering mbean: com.netflix.MonitoredResources:type=ASTYANAX,name=ClusterTitanConnectionPool,ServiceType=connectionpool
13/07/20 06:29:02 INFO impl.CountingConnectionPoolMonitor: AddHost: 127.0.0.1
13/07/20 06:29:02 INFO impl.ConnectionPoolMBeanManager: Registering mbean: com.netflix.MonitoredResources:type=ASTYANAX,name=KeyspaceTitanConnectionPool,ServiceType=connectionpool
13/07/20 06:29:02 INFO impl.CountingConnectionPoolMonitor: AddHost: 127.0.0.1
==>titangraph[cassandra:127.0.0.1]
gremlin> bambang = g.addVertex(null);
==>v[360004]
gremlin> domain = g.addVertex(null);
==>v[360008]
gremlin> bambang.setProperty("name", "Bambang Purnomosidi");
==>null
gremlin> domain.setProperty("name", "Pragmatic Web");
==>null
gremlin> e = g.addEdge(null, bambang, domain, "researching");
==>e[7ygD-1vEw-2F0LaTPQTs][360004-researching->360008]
gremlin> print e.getVertex(Direction.OUT).getProperty("name") + "---" + e.getLabel() + "-->" + e.getVertex(Direction.IN).getProperty("name");
Bambang Purnomosidi---researching-->Pragmatic Web==>null
gremlin>
</pre>
<br />
<br />
Jika ingin membuat program yang memanfaatkan Titan dan storage backend-nya ini, pengetahuan yang diperlukan akan lebih kompleks dan memerlukan tulisan tersendiri. We'll talk about it later. Stay tune.<br />
<br />
<b>Proses Selanjutnya</b><br />
<br />
Setelah berbagai setting ini, jika komputer mati (untuk server seharusnya tidak :-D), setiap kali login, kita sudah bisa langsung mengeksekusi Apache Cassandra, setelah itu mengaktifkan Titan (tidak perlu konfigurasi ribet lagi):<br />
<br />
<pre class="prettyprint">
$ cassandra -f
$ gremlin.sh
</pre>
<br />
<br />
Hanya itu saja, kecuali anda ingin coding, tentu perlu langkah lain.<br />
<br />
So, Enjoy big data!<br />
<br />
<b>Referensi</b><br />
<br />
[1] http://titan.thinkaurelius.com<br />
[2] http://www.apache.org/licenses/LICENSE-2.0.html<br />
[3] http://s3.thinkaurelius.com/downloads/titan/titan-all-0.3.1.zip<br />
[4] http://cassandra.apache.org<br />
[5] http://hbase.apache.org<br />
[6] http://www.oracle.com/technetwork/database/berkeleydb/overview/index-093405.html<br />
[7] http://wiki.apache.org/cassandra/StorageConfigurationAnonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-15933287946858349822013-07-15T07:11:00.000-07:002013-07-15T07:11:17.480-07:00Menggunakan Gradle untuk Grizzly<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Tulisan sederhana ini akan menjelaskan penggunaan Gradle dalam konteks sebagai build tool, khususnya untuk membangun aplikasi server yang scalable berbasis NIO. NIO atau lebih lengkapnya NIO.2 adalah pustaka untuk I/O di Java yang dispesifikasikan pada JSR 203. Jika dulu pilihan untuk membangun aplikasi server - khususnya server web - terbatas pada penggunaan JSP dan Servlet container seperti Tomcat, Jetty, atau Resin, sekarang pilihan lebih luas lagi karena tersedia berbagai macam framework yang disediakan (dan kebanyakan software bebas!) untuk membangun aplikasi server yang scalable. Beberapa framework yang bisa digunakan antara lain adalah:</div>
<ol style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px; padding: 0px 10px 0px 25px;">
<li>Apache MINA [1]</li>
<li>Grizzly [2]</li>
<li>Netty [3]</li>
<li>xSocket [4]</li>
</ol>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<b>Sekilas Grizzly</b></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Grizzly adalah software bebas untuk membangun aplikasi server yang scalable. Grizzly digunakan juga dalam proyek Glassfish. Grizzly menggunakan Java NIO dan menyediakan berbagai macam pustaka untuk mengembangkan aplikasi server yang menurut saya relatif lengkap:</div>
<ol style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px; padding: 0px 10px 0px 25px;">
<li>Aplikasi web dengan HTTP maupun HTTPS</li>
<li>Ajax</li>
<li>Comet (untuk teknologi push)</li>
<li>WebSocket</li>
<li>JAXWS (Web Services)</li>
<li>AJP (Apache JServ Protocol)</li>
<li>SPDY [5], protokol dalam tahap eksperimen dari proyek Chromium untuk mengurangi latensi dari halaman Web.</li>
</ol>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Artikel ini tidak bermaksud untuk melakukan komparasi antara berbagai framework NIO sehingga saya tidak akan menguraikan perbandingan antar framework tersebut. Pembaca yang berminat bisa melihat pada tulisan yang dibuat oleh Trustin Lee [6]. Meskipun demikian, perlu diingat bahwa perbandingan-perbandingan seperti ini biasanya hanya akan menimbulkan flame wars sehingga saya lebih menyarankan untuk memahami kebutuhan software yang akan dibuat dan kemudian menggunakan tools yang sesuai dengan kebutuhan.</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<b>Tentang Gradle</b></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Gradle [5] merupakan software yang menurut pembuatnya (Gradleware) merupakan software bebas yang digunakan sebagai "The Enterprise Automation Tool". Software seperti ini berfungsi untuk peranti otomatisasi dalam berbagai tahap pengembangan software, mulai dari pengelolaan source code di komputer lokal developer, mengelola dependensi pustaka, testing, deployment, dan lain-lain. Software ini menarik bagi saya karena script yang digunakan dalam mendefinisikan berbagai tasks dalam pengembangan software merupakan kode sumber Groovy sehingga jika diperlukan kita bisa menggunakan berbagai fasilitas dari Groovy untuk mengelola proyek kita. Ini berbeda dengan Apache Ant [] + Ivy yang berfungsi sebagai build tools sekaligus mengelola dependensi pustaka serta Apache Maven yang mempunyai fungsi sama dengan Gradle tetapi menggunakan XML untuk mengelola dan mendefinisikan berbagai tasks. </div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Meski tersedia untuk berbagai macam IDE besar dalam bentuk plugin (Eclipse, Netbeans, Intellij IDEA), saya merasa lebih nyaman menggunakan perintah di shell karena lebih fleksibel (that's YMMV!). Untuk mengikuti tulisan ini, pastikan anda sudah menginstall Gradle menggunakan langkah-langkah yang telah diuraikan di manual [7]. Untuk memeriksa apakah instalasi anda sudah betul atau belum, ketikkan perintah berikut:</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<blockquote style="background-color: white; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; padding: 0px 15px;">
$ gradle --version<br />------------------------------------------------------------<br />Gradle 1.6<br />------------------------------------------------------------<br />Gradle build time: Tuesday, May 7, 2013 9:12:14 AM UTC<br />Groovy: 1.8.6<br />Ant: Apache Ant(TM) version 1.8.4 compiled on May 22 2012<br />Ivy: 2.2.0<br />JVM: 1.7.0_25 (Oracle Corporation 23.25-b01)<br />OS: Linux 3.9.9-1-ARCH i386<br />$</blockquote>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Tentu bagian-bagian tertentu akan berbeda (misalnnya OS dan/atau versi JVM). Lainnya seharusnya sama. Jika sudah berada pada posisi ini, kita siap menggunakan Gradle. </div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<b><br class="Apple-interchange-newline" />Contoh Source Code Aplikasi Grizzly</b></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Untuk keperluan artikel ini, saya akan menggunakan contoh source aplikasi semacam echo server yang bersifat blocking / synchronous. Aplikasi ini terdapat dalam contoh yang terdapat pada distribusi Gradle [8]. Struktur direktori dari aplikasi ini adalah sebagai berikut:</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG9IOyru_FVrLvJlAaUL4UUyn4HAZuoORGE4UGBEsXRQGn9NehbBDKOuq45QlowmFBMSKL7E4MHh8nm19ojf8j52ZrXGIKNkDhYDio3TWrhNrWCVK6MqvFEXELwDh1sGX-3sdv-HFT1g5n/s1600/dir-awal.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG9IOyru_FVrLvJlAaUL4UUyn4HAZuoORGE4UGBEsXRQGn9NehbBDKOuq45QlowmFBMSKL7E4MHh8nm19ojf8j52ZrXGIKNkDhYDio3TWrhNrWCVK6MqvFEXELwDh1sGX-3sdv-HFT1g5n/s1600/dir-awal.png" /></a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Gradle menggunakan file build.gradle untuk mengelola proyek (kelak jika sudah lebih kompleks, ini bisa dikembangkan menjadi lebih dari satu file konfigurasi). Jika melihat struktur direktori tersebut, kita akan melihat letak dari source code (BlockingHttpHandlerSample.java) di direktori $PROJECT_ROOT_DIR/src/main/name/bpdp/grizzly/. Secara default, source code akan diletakkan pada direktori $PROJECT_ROOT_DIR/src/main/java/. Pada struktur diatas, source code diletakkan pada paket name.bpdp.grizzly sehingga source code BlockingHttpHandlerSample,java perlu diubah sedikit pada bagian package dengan isi berikut: </div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<blockquote style="background-color: white; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; padding: 0px 15px;">
package name.bpdp.grizzly;</blockquote>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<b>File build.gradle</b></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
File build.grade digunakan untuk mengelola proyek. Proyek pada contoh ini berada pada direktori $HOME/kerjaan/src/java/grizzly/ dan setiap penyebutan $PROJECT_ROOT_DIR akan mengacu ke lokasi tersebut. Isi dari file tersebut adalah sebagai berikut:</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<blockquote style="background-color: white; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; padding: 0px 15px;">
apply plugin: 'java'<br /><br />version = "0.0.1"<br />group = "name.bpdp.grizzly"<br /> <br />dependencies {<br /> compile group: 'org.glassfish.grizzly', name: 'grizzly-framework', version: '2.3.3'<br /> compile group: 'org.glassfish.grizzly', name: 'grizzly-http-server', version: '2.3.3'<br /> testCompile group: 'junit', name: 'junit', version: '4.11'<br /> testCompile group: 'org.glassfish.grizzly', name: 'grizzly-framework', version: '2.3.3'<br /> testCompile group: 'org.glassfish.grizzly', name: 'grizzly-http-server', version: '2.3.3'<br />}<br />repositories {<br /> mavenCentral()<br />}<br />task(runApp, dependsOn: 'classes', type: JavaExec) {<br /> main = 'name.bpdp.grizzly.BlockingHttpHandlerSample'<br /> classpath = sourceSets.main.runtimeClasspath<br />}<br />test {<br /> maxParallelForks = 5<br /> maxHeapSize = '1024m'<br />}</blockquote>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Source code Groovy di atas relatif lebih mudah dipahami. Untuk mengelola proyek Java, kita perlu menggunakan plugin java kemudian didefinisikan berbagai dependensi pustaka yang digunakan dalam proyek. Lihat pada bagian dependencies, yang kita tulis disitu mirip dengan definisi XML dari repositori Maven (silahkan lihat di website Grizzly pada bagian download). Kita juga menggunakan repositori Maven untuk mengambil berbagai dependensi pustaka, kemudian membuat task 'runApp' untuk menjalankan aplikasi yang telah kita build. Pada bagian 'runApp' kita definisikan nama kelas main yang akan dijalankan dengan classpath sesuai dengan classpath runtime (lokasi dari berbagai hasil kompilasi).</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<b>Membangun (Build) Aplikasi</b></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Untuk membangun aplikasi tersebut, kita hanya perlu menjalankan perintah dari shell: 'gradle build' dan Gradle akan mengambil berbagai pustaka yang kita perlukan dari repositori Maven kemudian mengkompilasi. Jika menjalankan ini untuk pertama kali, mungkin akan sedikit lama apalagi jika pustaka yang akan diambil banyak. Pustaka-pustaka tersebut nantinya akan diletakkan di $HOME/.gradle.</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<blockquote style="background-color: white; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; padding: 0px 15px;">
$ gradle build<br />:compileJava<br />Download <a href="http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-framework/2.3.3/grizzly-framework-2.3.3.pom" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-framework/2.3.3/grizzly-framework-2.3.3.pom</a><br />Download <a href="http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-project/2.3.3/grizzly-project-2.3.3.pom" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-project/2.3.3/grizzly-project-2.3.3.pom</a><br />Download <a href="http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-bom/2.3.3/grizzly-bom-2.3.3.pom" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-bom/2.3.3/grizzly-bom-2.3.3.pom</a><br />Download <a href="http://repo1.maven.org/maven2/net/java/jvnet-parent/3/jvnet-parent-3.pom" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/net/java/jvnet-parent/3/jvnet-parent-3.pom</a><br />Download <a href="http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-http-server/2.3.3/grizzly-http-server-2.3.3.pom" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-http-server/2.3.3/grizzly-http-server-2.3.3.pom</a><br />Download <a href="http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-http/2.3.3/grizzly-http-2.3.3.pom" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-http/2.3.3/grizzly-http-2.3.3.pom</a><br />Download <a href="http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-rcm/2.3.3/grizzly-rcm-2.3.3.pom" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-rcm/2.3.3/grizzly-rcm-2.3.3.pom</a><br />Download <a href="http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-framework/2.3.3/grizzly-framework-2.3.3.jar" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-framework/2.3.3/grizzly-framework-2.3.3.jar</a><br />Download <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Frepo1.maven.org%2Fmaven2%2Forg%2Fglassfish%2Fgrizzly%2Fgrizzly-http-server%2F2.3.3%2Fgrizzly-http-server-2.3.3.jar&h=1AQGdkH1l&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-http-server/2.3.3/grizzly-http-server-2.3.3.jar</a><br />Download <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Frepo1.maven.org%2Fmaven2%2Forg%2Fglassfish%2Fgrizzly%2Fgrizzly-http%2F2.3.3%2Fgrizzly-http-2.3.3.jar&h=mAQFMnI3V&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-http/2.3.3/grizzly-http-2.3.3.jar</a><br />Download <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Frepo1.maven.org%2Fmaven2%2Forg%2Fglassfish%2Fgrizzly%2Fgrizzly-rcm%2F2.3.3%2Fgrizzly-rcm-2.3.3.jar&h=zAQEWyGYx&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/glassfish/grizzly/grizzly-rcm/2.3.3/grizzly-rcm-2.3.3.jar</a><br />:processResources UP-TO-DATE<br />:classes<br />:jar<br />:assemble<br />:compileTestJava UP-TO-DATE<br />:processTestResources UP-TO-DATE<br />:testClasses UP-TO-DATE<br />:test<br />Download <a href="http://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.pom" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.pom</a><br />Download <a href="http://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.pom" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.pom</a><br />Download <a href="http://repo1.maven.org/maven2/org/hamcrest/hamcrest-parent/1.3/hamcrest-parent-1.3.pom" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/hamcrest/hamcrest-parent/1.3/hamcrest-parent-1.3.pom</a><br />Download <a href="http://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar</a><br />Download <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Frepo1.maven.org%2Fmaven2%2Forg%2Fhamcrest%2Fhamcrest-core%2F1.3%2Fhamcrest-core-1.3.jar&h=tAQE0yyvO&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar</a><br />:check<br />:build<br />BlUILD SUCCESSFUL<br />Total time: 48.44 secs<br />$</blockquote>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Hasil proses build di atas akan diletakkan pada direktori build sebagai berikut:</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZOeM2sMJw9bfJvJ7MEdQfRAtKN4JWJim_GHR-SgV-NQF4OOLcoxjpCOE4_VlM-q_kumvmeDNsnCpYs-jBEJwGU8rhGBTBj3TaT_duciD1sRNMcd4Ly9bEgMN6K0PCBlxDNQ0dHZxeubIX/s1600/dir-hasil-build.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZOeM2sMJw9bfJvJ7MEdQfRAtKN4JWJim_GHR-SgV-NQF4OOLcoxjpCOE4_VlM-q_kumvmeDNsnCpYs-jBEJwGU8rhGBTBj3TaT_duciD1sRNMcd4Ly9bEgMN6K0PCBlxDNQ0dHZxeubIX/s1600/dir-hasil-build.png" /></a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Jika sudah mengkompilasi tanpa error, kita bisa menjalankan aplikasi tersebut menggunakan task yang telah kita definisikan (runApp):</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<blockquote style="background-color: white; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; padding: 0px 15px;">
$ gradle runApp<br />:compileJava UP-TO-DATE<br />:processResources UP-TO-DATE<br />:classes UP-TO-DATE<br />:runApp<br />Jul 15, 2013 8:39:56 PM org.glassfish.grizzly.http.server.NetworkListener start<br />INFO: Started listener bound to [0.0.0.0:8080]<br />Jul 15, 2013 8:39:56 PM org.glassfish.grizzly.http.server.HttpServer start<br />INFO: [HttpServer] Started.<br />Client connected!<br />Writing request:<br />HttpRequestPacket (<br /> method=POST<br /> url=/echo<br /> query=null<br /> protocol=HTTP/1.1<br /> content-length=-1<br /> headers=[<br /> Host=localhost:8080]<br />)<br />contentA-<br />contentB-<br />contentC-<br />contentD<br /><br /><br />Echoed POST Data: contentA-contentB-contentC-contentD<br />Jul 15, 2013 8:39:56 PM org.glassfish.grizzly.http.server.NetworkListener stop<br />INFO: Stopped listener bound to [0.0.0.0:8080]<br />BUILD SUCCESSFUL<br />Total time: 7.916 secs<br />$</blockquote>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
And that's the end of this simple story. Happy hacking!</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<b>Referensi</b></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[1] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fmina.apache.org&h=yAQHRIU_4&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://mina.apache.org</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[2] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fgrizzly.java.net&h=dAQFRMenm&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://grizzly.java.net</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[3] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fnetty.io&h=lAQGN2myL&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://netty.io</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[4] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fxsocket.org&h=oAQEEpuW3&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://xsocket.org</a> - tidak dikembangkan lagi, hanya sebatas bug fixes.</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[5] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.chromium.org%2Fspdy&h=BAQEs-_5o&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://www.chromium.org/spdy</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[6] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fgleamynode.net%2Farticles%2F2232%2F&h=KAQEeucIF&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://gleamynode.net/articles/2232/</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[7] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.gradle.org%2Fdocs%2Fcurrent%2Fuserguide%2Finstallation.html&h=WAQHxDmrZ&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://www.gradle.org/docs/current/userguide/installation.html</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[8] <a href="https://maven.java.net/content/repositories/releases/org/glassfish/grizzly/samples/" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">https://maven.java.net/content/repositories/releases/org/glassfish/grizzly/samples/</a> - atau yang spesifik digunakan pada tulisan ini adalah BlockingHttpHandlerSample.java di file grizzly-http-server-samples-2.3.3-sources.jar.</div>
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-59318224694118885202013-07-14T17:49:00.001-07:002013-07-14T17:58:08.355-07:00Pengantar Teknologi Basis Data Graf<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Artikel ini merupakan pengantar ke basis data graf yang sekarang mulai marak dibicarakan dan diimplementasikan. Pengantar ini diperlukan sebelum membahas software basis data graf terdistribusi menggunakan Titan [1]. Jika akan dikategorikan, Titan ini masuk ke dalam kategori basis data NOSQL (Not Only SQL) untuk membedakan dengan basis data relasional (RDBMS) seperti PostgreSQL, MySQL, Oracle Database 10g yang menggunakan SQL sebagai bahasa untuk query (DDL maupun DML). Jika sudah terbiasa dengan "standar" SQL, bersiap-siaplah kaget dengan dunia NOSQL yang sangat bervariasi [2]. Artikel ini akan terdiri atas beberapa seri dan nantinya akan lebih dikonsentrasikan ke penggunaan Titan.</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<b>Big Data</b></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Tulisan ini sama sekali tidak untuk menunjukkan bahwa RDBMS adalah teknologi yang sudah usang dan tidak pantas dipakai, tapi saya lebih meyakini bahwa setiap kreasi itu mempunyai kesesuaian dalam menyelesaikan masalah tertentu. Demikian juga dengan NOSQL yang kebanyakan berasal dari kebutuhan dari pengelolaan data yang masif. Pengelolaan data yang masih ini dikenal juga dengan 2 istilah:</div>
<ol style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px; padding: 0px 10px 0px 25px;">
<li>"Web scale" untuk menunjukkan kemampuan skalabilitas pada aplikasi yang memerlukan data sangat besar yaitu aplikasi Web. Tentu ini bukan aplikasi Web yang bersifat personal (seperti wiki sederhana, CMS dengan ruang lingkup kecil, dan sejenisnya), tetapi lebih pada aplikasi Web skala besar dengan akses dan keanggotaan sampai ke seluruh dunia (misal: Facebook, Twitter).</li>
<li>"Big data", untuk menunjukkan kebutuhan data yang sangat masif karena seringkali data bersifat realtime dan berjumlah sangat besar sehingga harus dikelola dalam cluster-cluster. Istilah ini mulai populer seiring dengan paper dari Google: MapReduce (framework untuk model pemrograman bagi pemrosesan data yang sangat besar) [3] dan BigTable [4].</li>
</ol>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<b>Basis Data Graf</b></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Basis data graf (Graph Database) adalah basis data yang menggunakan graf dalam pemodelan data. Graf merupakan cabang ilmu dari matematika yang dikenal mempunyai keterkaitan aplikasi dengan banyak disiplin ilmu lainnya. Teori graf sudah berumur panjang. Teori graf ini pertama kali dikenal sejak Leonhard Euler menulis paper "Seven Bridges of Königsberg" pada tahun 1736. Dalam matematika, graf ini merupakan bagian utama dari Matematika Diskrit. Meski banyak buku yang ditulis terkait dengan teori graf, buku dari Frank Harary tentang teori graf pada 1969 membuat banyak peneliti dari berbagai disiplin ilmu menyadari pentingnya teori graf terkait dengan berbagai macam disiplin ilmu. Teori graf ini juga dikembangkan di dunia software untuk pemodelan data, terutama untuk pemodelan dan analisis yang memerlukan keterkaitan dalam bentuk graf. Perkembangan akhir-akhir ini menunjukkan bahwa teori graf ini bisa diterapkan untuk basis data dan membentuk basis data graf. </div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Pada basis data graf, data akan dimodelkan dalam bentuk graf (terdiri atas sekumpulan vertex (node) dan dihubungkan dengan dengan edge / arc) yang memungkinkan berbagai macam operasi dilakuan pada struktur data tersebut, misalnya traversal, pattern matching, penemuan "knowledge" baru (reasoning), dan lain-lain. Banyak aspek kehidupan manusia pada dasarnya bisa dimodelkan dengan graf. Contoh paling sederhana, fasilitas rekomendasi teman pada Facebook adalah hasil dari penerapan teori graf: saya mengenal A, A mengenal B, B mengenal C, C mengenal D, dan seterusnya, kemudian dicari pola yang sama antar individu tersebut sehingga bisa dihasilkan rekomendasi bahwa saya mungkin juga mengenal D.</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Beberapa basis data yang menggunakan graf untuk pemodelan data antara lain:</div>
<ol style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px; padding: 0px 10px 0px 25px;">
<li>OrientDB [5]</li>
<li>Neo4J [6]</li>
<li>AangoDB [7]</li>
<li>HyperGraphDB [8]</li>
<li>InfiniteGraph [9]</li>
<li>Titan</li>
</ol>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Kebanyakan basis data graf disediakan untuk keperluan Big Data, meski ada juga in-memory graph database yang cocok untuk pemrosesan yang cepat dan tidak untuk keperluan pengelolaan data masif.</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<b>Bentuk Spesifik dari Basis Data Graf: TripleStore dan QuadStore</b></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
TripleStore merupakan pemodelan data yang berdasarkan pada spesifikasi dari W3C yaitu RDF (Resource Description Framework). Pada pemodelan ini, pemodelan akan didasarkan pada S-P-O (Subyek Predikat Obyek), misalnya "Bambang menulis artikel". QuadStore adalah TripleStore yang menyertakan dukungan Named Graph yang memungkinkan suatu graf diidentifikasikan berdasarkan pada URI. Contoh dari basis data QuadStore ini adalah OpenLink Virtuoso [10]. Beberapa contoh TripleStore:</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
1. Bigdata [11]</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
2. AllegroGraph [12]</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
3. Meronymy - sekarang berganti nama menjadi SparkleDB [13] - sekaligus QuadStore</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<b>"Standar" Basis Data Graf: Tinkerpop Stack</b></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Dengan adanya banyak implementasi tersebut, tentu akan mulai banyak kesulitan karena akan muncul berbagai macam implementasi dan pada akhirnya menyebabkan para pengguna dan developer untuk mempelajari basis data tersebut secara spesifik. Saat ini, dikembangkan "standar" untuk pengelolaan basis data graf tersebut. Saya tulis "standar" menggunakan tanda petik karena standar disini tidak diimplementasikan dalam suatu organisasi standar seperti ANSI atau ISO, tetapi lebih ke aarah kesepakatan antara banyak developer yang bekerja dengan basis data graf dan dilakukan oleh komunitas. Standar yang banyak dianut saat ini dikembangkan oleh Tinkerpop [14] dan mempunyai standar paling mendasar yang dikenal dengan sebutan Blueprints [15].</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Standar dari Tinkerpop ini terdiri atas berbagai lapisan (sehingga sering disebut sebagai 'stack'). Standar paling mendasar adalah Blueprints. Standar lainnya bisa dilihat di website Tinkerpop. Pada artikel ini saya lebih menekankan pada kedudukan dari berbagai macam standar tersebut. Standar Tinkerpop ini jika diibaratkan dalam dunia pemrograman yang melibatkan SQL di Java, mempunyai kedudukan yang setara dengan JDBC. Dengan demikian, skema dari standar ini adalah sebagai berikut:</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Source code <-----> Tinkerpop API <-----> basis data graf<!---------><!---------></-----></-----></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Dengan demikian, source code akan bersifat portable dan tidak terlalu tergantung pada basis data graf tertentu. Vendor basis data graf perlu mengimplementasikan "driver" Tinkerpop supaya bisa diakses menggunakan API Tinkerpop. Pada saat ini, banyak sekali software basis data graf yang mengimplementasikan API tersebut [16].</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<b>Bagaimana dengan TripleStore dan QuadStore pada Tinkerpop?</b></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
Sebagai bagian dari basis data graf, TripleStore dan QuadStore juga mendapatkan perhatian dari Tinkerpop. Tinkerpop menyediakan Ouplementations [17] yang menggunakan SAIL dari Sesame [18] sehingga RDF ini juga bisa diakses melalui stack Tinkerpop meskipun relatif lebih rumit. </div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<b>Referensi</b></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[1] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Ftitan.thinkaurelius.com&h=qAQFIkTgR&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://titan.thinkaurelius.com</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[2] Lihat misalnya di <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.nosql-databases.org&h=mAQFMnI3V&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://www.nosql-databases.org</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[3] <a href="http://www.facebook.com/l.php?u=https%3A%2F%2Fwww.usenix.org%2Flegacy%2F%2Fevents%2Fosdi06%2Ftech%2Fchang%2Fchang_html%2F&h=tAQE0yyvO&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">https://www.usenix.org/legacy//events/osdi06/tech/chang/chang_html/</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[4] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fresearch.google.com%2Farchive%2Fbigtable-osdi06.pdf&h=VAQG2zdlz&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://research.google.com/archive/bigtable-osdi06.pdf</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[5] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Forientdb.org&h=VAQG2zdlz&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://orientdb.org</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[6] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fneo4j.org&h=OAQEbbOiq&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://neo4j.org</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[7] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.arangodb.org&h=XAQGad0SF&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://www.arangodb.org</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[8] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.hypergraphdb.org&h=LAQEs3mxl&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://www.hypergraphdb.org</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[9] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.infinitegraph.com&h=8AQFfSDwd&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://www.infinitegraph.com</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[10] <a href="http://www.openlinksw.com/">http://www.openlinksw.com/</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[11] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.systap.com%2Fbigdata.htm&h=EAQHu8boS&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://www.systap.com/bigdata.htm</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[12] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.franz.com%2Fagraph%2Fallegrograph%2F&h=gAQEJE3fa&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://www.franz.com/agraph/allegrograph/</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[13] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.sparkledb.net%2F&h=zAQEWyGYx&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://www.sparkledb.net/</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[14] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Ftinkerpop.com&h=9AQFG3a8A&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://tinkerpop.com</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[15] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fblueprints.tinkerpop.com&h=pAQFwp_SK&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://blueprints.tinkerpop.com</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[16] <a href="http://www.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Ftinkerpop%2Fblueprints%2Fwiki%2FImplementations&h=DAQG9gl0N&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">https://github.com/tinkerpop/blueprints/wiki/Implementations</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[17] <a href="https://github.com/tinkerpop/blueprints/wiki/Ouplementations" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">https://github.com/tinkerpop/blueprints/wiki/Ouplementations</a></div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 20px;">
[18] <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.openrdf.org&h=vAQE9Lkk9&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://www.openrdf.org</a></div>
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-22764069871894170032013-06-18T22:56:00.000-07:002013-06-18T22:56:33.157-07:00Battery Warning Notification for Awesome Window ManagerJust a quick hack for my <a href="http://awesome.naquadah.org/" target="_blank">awesome window manager</a> configuration. There are some widget libraries for awesome that can be used, but this configuration doesn't need them. If you have awesome, then you are set. What I did was reading battery status ("Discharging" or "Charging") and also battery capacity and then put them in awesome timer, call it every 2 minutes. In each call, it will detect the status and capacity. If below 10% and Discharging, then awesome will notify user using <a href="http://awesome.naquadah.org/wiki/Naughty" target="_blank">Naughty</a> (comes preinstalled in awesome 3.5). Here's the relevant part of the rc.lua:<br />
<br />
<br />
<pre class="prettyprint">
-- battery warning
-- created by bpdp
local function trim(s)
return s:find'^%s*$' and '' or s:match'^%s*(.*%S)'
end
local function bat_notification()
local f_capacity = assert(io.open("/sys/class/power_supply/BAT0/capacity", "r"))
local f_status = assert(io.open("/sys/class/power_supply/BAT0/status", "r"))
local bat_capacity = tonumber(f_capacity:read("*all"))
local bat_status = trim(f_status:read("*all"))
if (bat_capacity <= 10 and bat_status == "Discharging") then
naughty.notify({ title = "Battery Warning"
, text = "Battery low! " .. bat_capacity .."%" .. " left!"
, fg="#ff0000"
, bg="#deb887"
, timeout = 15
, position = "bottom_left"
})
end
end
battimer = timer({timeout = 120})
battimer:connect_signal("timeout", bat_notification)
battimer:start()
-- end here for battery warning
</pre>
<br />
<br />
In my laptop, I put rc.lua in $XDG_CONFIG_HOME/.awesome/ (usually it will reside in $HOME/.config/awesome/rc.lua). Just put the script above at the end of rc.lua and you are all set. When awesome detects that battery capacity fall below or the same with 10% and the status is "Discharging" (means the laptop has not been charged), then it will show this notification in the bottom of the monitor, left side:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUXZHSbpMRvrDaJwCkIhRpSRat0mm-0ndd5x_4xXWvdKQdaykU-txOlCEiZ8LIbWx4LGK4KxpQX04m6J1OdzBPhNaBqtLWAHaGicEENh0wcpgpwFaw896hmFLgTBfPt_q9fHhYkmbj-_i4/s1600/battery-warning-result.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUXZHSbpMRvrDaJwCkIhRpSRat0mm-0ndd5x_4xXWvdKQdaykU-txOlCEiZ8LIbWx4LGK4KxpQX04m6J1OdzBPhNaBqtLWAHaGicEENh0wcpgpwFaw896hmFLgTBfPt_q9fHhYkmbj-_i4/s320/battery-warning-result.jpg" width="320" /></a></div>
<br />
You may change some properties of naughty.notify if you want.<br />
<br />Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-35041030284139378242013-05-15T18:48:00.000-07:002013-05-15T18:48:21.716-07:00IDE dan Pengajaran Pemrograman<br />
Tulisan ini berangkat dari pengalaman saya mengajar pemrograman selama bertahun-tahun (kurang lebih sekitar 13 tahun). Pemrograman memang sering menjadi momok bagi mahasiswa Informatika. Cukup menggelikan, karena kalau tidak mau bertemu dengan pemrograman seharusnya mahasiswa tidak masuk ke Informatika, but you know ...<br />
<br />
Selama bertahun-tahun, barangkali para mahasiswa saya mengenal saya sebagai dosen yang "kejam" dalam hal mengajarkan semua hal yang terkait dengan pemrograman. Alasannya apa, akan saya uraikan nanti. Saya sebenarnya prihatin dengan kondisi kemampuan mahasiswa serta rekan-rekan akademisi yang sering menggunakan IDE (Integrated Development Environment) dalam proses pengajaran. Saya tidak anti software IDE karena saya sendiri juga menggunakan software-software tersebut, yang akan saya uraikan disini adalah IDE seharusnya tidak digunakan dalam proses pendidikan.<br />
<br />
IDE merupakan software yang mengintegrasikan berbagai macam tools untuk pengembangan software. IDE merupakan software besar monolothic (hence, against UNIX philosophy), biasanya secara minimal akan berisi editor (untuk menulis source code), user interface designer, help / documentation, refactoring tool, build system, debugger, compiler / interpreter, class browser, profiler, dan project management. Mempelajari IDE memerlukan waktu dan biasanya mahasiswa tidak akan memahami sampai dalam.<br />
<br />
Saat mengajar, saya memang cenderung keras: saya selalu memakai Linux dan tidak suka melihat para mahasiswa menggunakan IDE. Mahasiswa selalu saya paksa menggunakan text editor biasa (karena kebanyakan memakai Windows, mereka saya suruh memakai NotePad, NotePad++, TextPad, atau yang ngepet-ngepet lainnya). Ketidaksukaan saya terhadap penggunakan IDE ini dilatarbelakangi oleh beberapa alasan:<br />
<br />
<ol>
<li>IDE mengotomatiskan banyak proses yang seharusnya dipahami oleh seseorang yang belajar pemrograman. Ini akan menyebabkan mahasiswa tidak mau memperhatikan internal working, algoritma, optimasi, dan lain-lain. Pernahkah anda menanyakan arti dari build.xml ke mahasiswa yang biasa menggunakan NetBeans? Lihat jawaban mereka. :)</li>
<li>IDE membuat mahasiswa menjadi manja dan cenderung tergantung dengan IDE. Jadi kalau pakai Text Editor biasa, mahasiswa tidak tergantung? ya tetap tergantung, namanya juga menggunakan komputer, mereka harus tergantung pada komputer. Yang saya maksud disini adalah penggunaan IDE tanpa pemahaman konsepsual yang kuat terhadap algoritma dan proses rekayaasa software akan membuat mereka tidak bisa apa-apa saat IDE tersebut tidak ada di komputer.</li>
<li>IDE sering membuat mahasiswa berpikir menurut IDE tersebut, sehingga jika di industri mereka bekerja menggunakan IDE yang lain, tentu akan memerlukan investasi waktu yang signifikan untuk hal tersebut. Cobalah menyuruh mahasiswa yang menggunakan NetBeans untuk berpindah ke Eclipse (standar JSE) jika ingin menguji :). </li>
</ol>
<br />
<br />
IDE biasanya memang digunakan di industri pengembangan software, oleh sebab itu, dalam proses pendidikan seharusnya penggunaan IDE dilarang, tetapi menjelang kelulusan harus ada workshop penggunaan IDE. Saya yakin, jika ini dikerjakan, para mahasiswa yang mendapatkan workshop itu akan mengatakan "nah, lha ini gampang ternyata menggunakan NetBeans untuk proses refactoring". Tidak akan ada lagi (atau kalaupun ada, semoga minimal) mahasiswa yang hobi menggunakan NetBeans, pada saat wawancara kerja ditanyakan "Refactoring itu apa?" dan si mahasiswa hanya diam tidak bisa menjawab, sementara dia sering menggunakan fasilitas itu secara "tidak sadar".<br />
<br />
Tantangannya? sederhana: kemampuan SDM (dosen terutama). This one I can not be sure ...<br />
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com1tag:blogger.com,1999:blog-6405865758808618250.post-32777090573070064302013-05-09T18:50:00.002-07:002013-05-09T18:59:32.723-07:00Add MIME types into LiteIDE editorThis is just simply a note to myself. <a href="https://code.google.com/p/golangide/" target="_blank">LiteIDE</a> uses some text files for its configuration. Using <b>View - Options </b>menu, one can update LiteIDE configuration, but not all of its configurations can be changed this way. One example is the MIME types. I use "*.<b>tpl</b>" for my template file's pattern. This extension file name is not exist in MIME Types from <b>View - Options - LiteEditor - File Types</b> menu, so this kind of file is render as a plain text file without syntax coloring while I want them to be rendered as HTML file. You know how painful it is, right?<br />
<br />
LiteIDE uses a file to configure file types. It resides in $LITEIDE_HOME//share/liteide/liteapp/mimetype. The file is <b>liteeditor.xml</b>. Change that file:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVYvhciNthxaw29mw7zO0SWVu0gvDaoklws7TNOQKPVJDx0SzD7mpn_IlIdB3jiGSysGDwLoOXSImxYuWW-oUOHkImIKj6tKd41f3v3kgzMOrapuo2Zpv4oC4Xe6YTxmJMMDYj-X7U8a0a/s1600/add-mime-types.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVYvhciNthxaw29mw7zO0SWVu0gvDaoklws7TNOQKPVJDx0SzD7mpn_IlIdB3jiGSysGDwLoOXSImxYuWW-oUOHkImIKj6tKd41f3v3kgzMOrapuo2Zpv4oC4Xe6YTxmJMMDYj-X7U8a0a/s1600/add-mime-types.jpg" /></a></div>
<pre>
</pre>
<pre>
</pre>
<div>
Very simple indeed. A very nice and good IDE for Go (and Lua also). :)</div>
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-83125202659798234762013-04-29T20:22:00.001-07:002013-04-29T20:48:44.190-07:00Mengakses Java dari SWI PrologSWI Prolog mempunyai fasilitas <i>bi-directional</i> untuk menghubungkan program Java yang kita buat dengan Prolog dan sebaliknya, jadi kita bisa mengakses Java melalui SWI Prolog, demikian juga Java bisa menggunakan kemampuan <i>rule-based system</i> dan fasilitas-fasilitas dari SWI Prolog. Fasilitas ini akan disertakan secara langsung saat mengkompilasi SWI Prolog jika kita mempunyai JDK (baik Oracle JDK maupun OpenJDK). Hasil dari proses kompilasi tersebut adalah JPL.<br />
<br />
Membahas mengenai <i>interfacing</i> ini relatif kompleks, tetapi bisa dimulai dari konfigurasi. Standar konfigurasi dari $JAVA_HOME dan lain-lain masih harus ditambahkan lagi. Jika menggunakan instalasi JDK dari disto, barangkali akan berbeda, tetapi yang saya uraikan ini adalah konfigurasi dari instalasi manual JDK. Pada instalasi manual JDK, masih harus ditambahkan <i>environment variable</i> LD_LIBRARY_PATH. Jika tidak dikonfigurasi, ada <i>error</i> tidak ditemukan pustaka-pustaka yang diperlukan seperti berikut ini:<br />
<br />
<blockquote class="tr_bq">
09:43:27-bpdp@bpdp-arch:/usr/lib/swipl-6.3.14/doc/packages/examples/jpl/prolog$ swipl<br />
Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.3.14)<br />
Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam<br />
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,<br />
and you are welcome to redistribute it under certain conditions.<br />
Please visit http://www.swi-prolog.org for details.<br />
For help, use ?- help(Topic). or ?- apropos(Word).<br />
?- [jpl_versions_demo].<br />
ERROR: /usr/lib/swipl-6.3.14/library/jpl.pl:4637:<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>'$open_shared_object'/3: libjvm.so: cannot open shared object file: No such file or directory<br />
ERROR: /usr/lib/swipl-6.3.14/library/jpl.pl:4637:<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>library `java' does not exist (Please add directory holding libjava.so to $LD_LIBRARY_PATH)<br />
Warning: /usr/lib/swipl-6.3.14/library/jpl.pl:4637:<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Goal (directive) failed: jpl:initialization(setup_jvm,now)<br />
ERROR: /usr/lib/swipl-6.3.14/doc/packages/examples/jpl/prolog/jpl_versions_demo.pl:1:<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Exported procedure jpl:jpl_c_lib_version/1 is not defined<br />
% library(jpl) compiled into jpl 0.06 sec, 1,947 clauses<br />
ERROR: /usr/lib/swipl-6.3.14/doc/packages/examples/jpl/prolog/jpl_versions_demo.pl:22:<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>jpl:jFindClass/2: Undefined procedure: jpl:jni_func/3<br />
Warning: /usr/lib/swipl-6.3.14/doc/packages/examples/jpl/prolog/jpl_versions_demo.pl:22:<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Goal (directive) failed: user:jpl_versions_demo<br />
% jpl_versions_demo compiled 0.07 sec, 1,953 clauses<br />
true.<br />
?- </blockquote>
<br />
<div>
File-file yang diperlukan terdapat pada instalasi JDK. Pada komputer saya, $JAVA_HOME=/home/bpdp/software/jdk. Export <i>environment variable LD_LIBRARY_PATH</i> bisa dilakukan di <b>.bashrc</b> maupun di tempat lain sebagai berikut:</div>
<div>
<br /></div>
<blockquote class="tr_bq">
$ cat $HOME/.bashrc<br />
...<br />
...<br />
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_HOME/jre/lib/i386:$JAVA_HOME/jre/lib/i386/client<br />
...<br />
...<br />
$</blockquote>
<div>
Hasilnya adalah sebagai berikut:</div>
<div>
<br /></div>
<div>
<blockquote class="tr_bq">
?- [jpl_versions_demo].<br />
% library(jpl) compiled into jpl 0.06 sec, 1,978 clauses<br />
prolog library version: 3.1.4-alpha<br />
java library version: 3.1.4-alpha<br />
c library version: 3.1.4-alpha<br />
BINGO! you appear to have the same version of each library installed<br />
% jpl_versions_demo compiled 0.18 sec, 2,030 clauses<br />
true.<br />
?- </blockquote>
</div>
<div>
<br /></div>
<div>
BINGO! It works! Mari kita lihat contoh JTable:</div>
<div>
<br /></div>
<div>
<blockquote class="tr_bq">
?- [jpl_table_demo].<br />
% jpl_table_demo compiled 0.69 sec, 1,619 clauses<br />
true.<br />
?- </blockquote>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipPUhB8QIfy9swRyCBR21H3wvQ7G8Sf1_k1t8snrpBp5zmxZ35a1mVe-90F0WEHceadKiTvh_AbMApkLAX5FMeMPwlOLv4oeVn3JNhRRDzf_1bVgT-jNnYMo277mTB4yv963Nuz9b6d52h/s1600/jtable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipPUhB8QIfy9swRyCBR21H3wvQ7G8Sf1_k1t8snrpBp5zmxZ35a1mVe-90F0WEHceadKiTvh_AbMApkLAX5FMeMPwlOLv4oeVn3JNhRRDzf_1bVgT-jNnYMo277mTB4yv963Nuz9b6d52h/s1600/jtable.png" /></a></div>
<div>
<br /></div>
<div>
Silahkan melihat ke <b>/usr/lib/swipl-6.3.14/doc/packages/examples/jpl/</b> untuk contoh-contoh lainnya. </div>
<div>
<br /></div>
<div>
Selamat berkarya!</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-35403395094786136712013-04-24T10:06:00.002-07:002013-04-24T10:06:53.366-07:00LiteIDE X: IDE Cross Platform untuk GoIDE (<i>Integrated Development Environment</i>)<i> </i>adalah komponen penting dalam pengembangan software. Dengan software ini, pengembang bisa menggunakan komponen-komponen yang terintegrasi ke dalam satu software sehingga memudahkan pengembangan untuk fokus pada pekerjaan pengembangan software. Jika pada beberapa waktu yang lalu saya sudah membahas penggunaan Vim sebagai IDE dari Go, sekarang ini saya akan membahas IDE lainnya yang saya pikir mempunyai fitur bagus dan merupakan software bebas.<br />
<br />
Pada dasarnya ada beberapa IDE yang bisa digunakan selain Vim. LiteIDE X dibuat oleh <b>visualfc</b> dan tersedia dalam bentuk source code maupun <i>binary</i>:<br />
<br />
Source code:<br />
<ul style="background-color: white; font-family: arial, sans-serif; font-size: 13px; max-width: 62em; padding-left: 25px;">
<li style="margin-bottom: 0.3em;"><a href="http://code.google.com/p/liteide" rel="nofollow" style="color: #0000cc;">http://code.google.com/p/liteide</a></li>
<li style="margin-bottom: 0.3em;"><a href="https://github.com/visualfc/liteide" rel="nofollow" style="color: #0000cc;">https://github.com/visualfc/liteide</a></li>
</ul>
<div>
<span style="font-family: arial, sans-serif; font-size: x-small;">Binary:</span></div>
<div>
<ul>
<li><a href="https://code.google.com/p/golangide/downloads/list">https://code.google.com/p/golangide/downloads/list</a></li>
</ul>
</div>
<div>
Jika akan men-download versi binary, ada 2 kategori yang bisa dipilih yaitu LiteIDE X dan LiteIDE X + WebKit. Jenis kedua diperlukan jika kita akan menggunakan LiteIDE X untuk membuat file-file Markdown (.md).</div>
<div>
<br /></div>
<div>
<b>Instalasi</b></div>
<div>
<b><br /></b></div>
<div>
Instalasi di Linux sangat mudah, hanya tinggal mengekstrak file yang kita download (saat ini versi terakhir adalah versi X17) pada suatu direktori dan jika ingin menjalankan cukup dengan mengeksekusi file <b>$LITEIDEX_HOME/bin/liteide </b>(cd $LITEIDEX_HOME/bin; ./liteide &):</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj30JVsotR1JujYigNtOsN_EbHLumxuHQ63SapDkb1x9X2oOW7I2lgWLf0qzzi6xIVRHkp3hf5RpICTQGEdXG7gQXgdJ2ke8YKezQMh6YwWHeYGUHn34NsCaXX9M2qS3LYXKcz8ciaiGCvF/s1600/liteIDE-utama-awal.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj30JVsotR1JujYigNtOsN_EbHLumxuHQ63SapDkb1x9X2oOW7I2lgWLf0qzzi6xIVRHkp3hf5RpICTQGEdXG7gQXgdJ2ke8YKezQMh6YwWHeYGUHn34NsCaXX9M2qS3LYXKcz8ciaiGCvF/s400/liteIDE-utama-awal.png" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b>Konfigurasi GOPATH</b></div>
<div>
<b><br /></b></div>
<div>
Saat pertama kali menggunakan software ini, GOPATH akan ditentukan berada di $GOROOT (di tempat saya: <b>/home/bpdp/software/go</b>). Konfigurasi ini disebut <i>system GOPATH</i>. Kita bisa menambahkan konfigurasi <i>Custom GOPATH</i> dengan memilih menu berikut:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibCJdkoh1u_LaloepbaP0TVVDu2JgAvk8ARk4UJo0HqJaixLMahLBKhrUfes7r8xN_ke44FNY0BuTi902XlORi2zJF46hZRtIaSKvFrX5rs9TS2CcVoI4mG4cRw9FbwSzKSCrQ5993jZTT/s1600/liteIDE-setup-gopath.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibCJdkoh1u_LaloepbaP0TVVDu2JgAvk8ARk4UJo0HqJaixLMahLBKhrUfes7r8xN_ke44FNY0BuTi902XlORi2zJF46hZRtIaSKvFrX5rs9TS2CcVoI4mG4cRw9FbwSzKSCrQ5993jZTT/s1600/liteIDE-setup-gopath.png" /></a></div>
<div>
<br /></div>
<div>
Setelah itu akan muncul dialog untuk mengisikan <i>Custome GOPATH</i>, isikan direktori tempat kita membuat proyek software:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikKQSl55Lm9O3fm15fhYHu4nz3rj3gUCD8yEQa-9AEKThpvqpWPi4ZWMmFVH7JJIlPZ829Rb7nFosj6uTEU-rpeQ1-SWojUmGIvGfzHOKfyVsDUcbVYQcgKcrj9ZcCGD9nGRjbj2rfT4QE/s1600/liteIDE-setup-gopath-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikKQSl55Lm9O3fm15fhYHu4nz3rj3gUCD8yEQa-9AEKThpvqpWPi4ZWMmFVH7JJIlPZ829Rb7nFosj6uTEU-rpeQ1-SWojUmGIvGfzHOKfyVsDUcbVYQcgKcrj9ZcCGD9nGRjbj2rfT4QE/s1600/liteIDE-setup-gopath-1.png" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b>Membuat Proyek</b></div>
<div>
<b><br /></b></div>
<div>
Untuk membuat proyek baru, pilih menu <b>File - New...</b> akan muncul dialog berikut:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr7f95ScaVxvJ8f0MoiFGmUwKrOsktrLwZIqTHRGiBO48xdLs-bLfVsYBLU0S4EoNyvULQiifPsB8VdIvnqQgPWMKZZpTolB8RhiknkzCohTVjNea63nogkKxFRw4meVKdgVrQx9p9OiZA/s1600/liteIDE-new-project.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr7f95ScaVxvJ8f0MoiFGmUwKrOsktrLwZIqTHRGiBO48xdLs-bLfVsYBLU0S4EoNyvULQiifPsB8VdIvnqQgPWMKZZpTolB8RhiknkzCohTVjNea63nogkKxFRw4meVKdgVrQx9p9OiZA/s1600/liteIDE-new-project.png" /></a></div>
<div>
<br /></div>
<div>
Pada <b>Name, </b>isikan nama proyek. Nama ini akan menjadi file executable jika kita akan membuat proyek yang berjenis <i>Command Project</i>. Ada beberapa pilihan disini:</div>
<div>
<ol>
<li><i>Empty File</i>: file kosong</li>
<li><i>Go Source File</i>: Source code aplikasi Go kita</li>
<li>LUA: untuk bahasa pemrograman Lua (seharusnya Lua, bukan LUA).</li>
<li><i>Markdown File</i>: membuat file .md (biasanya README.md atau dokumentasi-dokumentasi dibuat dalam format ini).</li>
<li><i>Command Project</i>: menghasilkan <i>executable binary file</i>, jika tanpa GOPATH, kita bisa memilih di direktori mana saja</li>
<li><i>Package Project</i>: menghasilkan pustaka</li>
</ol>
<div>
Untuk pertama ini, kita buat <i>Command Project</i> pada GOPATH, isikan nama, kemudian klik OK, akan muncul:</div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7TiKHRqCaVgTQ11zUXIAfTxWGz8b3UqKtX0okOUXvyeygdT1_tj3KKu1NbPCywVPJAaGGmx7P2y0_XC6SGpZ2148QZN9h6CV9M3wmaMW-YOgL660tMKYFIKCYlaHtaXmIqNw9XXXYtMPv/s1600/liteIDE-new-project-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7TiKHRqCaVgTQ11zUXIAfTxWGz8b3UqKtX0okOUXvyeygdT1_tj3KKu1NbPCywVPJAaGGmx7P2y0_XC6SGpZ2148QZN9h6CV9M3wmaMW-YOgL660tMKYFIKCYlaHtaXmIqNw9XXXYtMPv/s1600/liteIDE-new-project-1.png" /></a></div>
<div>
<br /></div>
<div>
Pilih <b>Yes</b> untuk mengaktifkan proyek baru kita. Saat proyek di-load, ada beberapa file yang dibuatkan oleh LiteIDE X:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXidEqnAh2wQrrfiNO4jlamc-tCI93fsRpXvcPTqYpR6rHpDekpzZsEAIWGSPzHeSny_gZ6wipNS4_aMKrb0mWliYo-_riIJ0LiJV80k3FIQShtzNck-B2YjnXsHlkUwKmuIM0jIfcABYo/s1600/liteIDE-new-project-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXidEqnAh2wQrrfiNO4jlamc-tCI93fsRpXvcPTqYpR6rHpDekpzZsEAIWGSPzHeSny_gZ6wipNS4_aMKrb0mWliYo-_riIJ0LiJV80k3FIQShtzNck-B2YjnXsHlkUwKmuIM0jIfcABYo/s1600/liteIDE-new-project-2.png" /></a></div>
<div>
<br /></div>
<div>
Jika ingin melihat struktur dari file yang kita edit, kita bisa melihat ke <b>Outline</b><i style="font-weight: bold;"> </i>di sebelah kanan:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj21rQyG0vsERo0ymNWxs7rmfmP-C-xSVUtk4rU8JppYr_Wh6bxab1ZRHEzQj0J8DdUUwIgUr4QaDeSNvw-3-Fg1P1uGQumpuiaIHXlTVnRGLWPjB5moDSHQCT_K8Qj-FnRclmoP1mBCLlC/s1600/liteIDE-outline-source-code.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj21rQyG0vsERo0ymNWxs7rmfmP-C-xSVUtk4rU8JppYr_Wh6bxab1ZRHEzQj0J8DdUUwIgUr4QaDeSNvw-3-Fg1P1uGQumpuiaIHXlTVnRGLWPjB5moDSHQCT_K8Qj-FnRclmoP1mBCLlC/s1600/liteIDE-outline-source-code.png" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b>Mengkompilasi dan Menjalankan</b></div>
<div>
<b><br /></b></div>
<div>
Program yang kita buat dijalankan dengan menggunakan <i>Ctrl-R</i> atau menu berikut:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEAmqu-yeMi-qsBsIk2rOksMZ8J43KdxciU-g5Xs7rE8f4DDq229_V_gmjxk-_WXJ0KeBYOEIKCg1qXnG4Ar7pW_-KDa1fgFAp9vnMXVZEKqgQzMzGdsfWQvKDK6IIVP4bnz6vMs606osJ/s1600/liteIDE-build-n-run.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEAmqu-yeMi-qsBsIk2rOksMZ8J43KdxciU-g5Xs7rE8f4DDq229_V_gmjxk-_WXJ0KeBYOEIKCg1qXnG4Ar7pW_-KDa1fgFAp9vnMXVZEKqgQzMzGdsfWQvKDK6IIVP4bnz6vMs606osJ/s1600/liteIDE-build-n-run.jpg" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Hasilnya ada pada <b>Build Output </b>sebagai berikut:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbb0zP5tOOUsC0rQbUyhcboeqizQiCTzCaEYW74QKzJKOXibjRDXq-8gALUAENoUuf31NUL3lR8emCY15ehPFuNgHrQlNLj5pmYCxE6JzNTGMl7QNT1dued0BUmweNk03Ud4DAqSRIRM1N/s1600/liteIDE-build-n-run-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbb0zP5tOOUsC0rQbUyhcboeqizQiCTzCaEYW74QKzJKOXibjRDXq-8gALUAENoUuf31NUL3lR8emCY15ehPFuNgHrQlNLj5pmYCxE6JzNTGMl7QNT1dued0BUmweNk03Ud4DAqSRIRM1N/s1600/liteIDE-build-n-run-1.jpg" /></a></div>
<div>
<br /></div>
<div>
<b><i>Code Completion</i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
Dengan menginstall dan menjalankan <b>gocode</b> (<a href="https://github.com/nsf/gocode">https://github.com/nsf/gocode</a>), maka kita bisa menggunakan <i>code completion </i>di LiteIDE X. Gocode merupakan <i>daemon</i>, artinya program yang berjalan di latar belakang. Ikuti instalasinya di URL tersebut setelah itu, aktifkan sebelum masuk ke LiteIDE X. Tanpa konfigurasi, <i>code completion</i> akan langsung berfungsi (lihat juga artikel saya http://bpdp.blogspot.com/2013/04/menggunakan-vim-sebagai-ide-go.html sebelumnya yang membahas instalasi <b>gocode</b>).</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuSzR0aaG1pnR2eqTpgiupudVdRq4oV49qN6iKKLdwEN7gWARiyeemJPyCGkLBOACbsTPEw072cwZ7swYx0E6AOe9A6SEHPCQzL5h9GnHTnQ218if76s8p-bdJG9frEGaIlHNPvRbnZaL8/s1600/liteIDE-completion.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuSzR0aaG1pnR2eqTpgiupudVdRq4oV49qN6iKKLdwEN7gWARiyeemJPyCGkLBOACbsTPEw072cwZ7swYx0E6AOe9A6SEHPCQzL5h9GnHTnQ218if76s8p-bdJG9frEGaIlHNPvRbnZaL8/s1600/liteIDE-completion.png" /></a></div>
<div>
<br /></div>
<div>
Sebenarnya masih banyak fasilitas lain, tetapi untuk permulaan uraian ini saya pikir mencukupi. Saya akan menambahkan beberapa kelengkapan lagi di posting-posting berikutnya.</div>
<div>
<br /></div>
<div>
Happy hacking!</div>
<div>
<br /></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><i><br /></i></b></div>
<div>
<b><br /></b></div>
<div>
<b><br /></b></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<span style="font-family: arial, sans-serif; font-size: x-small;"><br /></span></div>
<div>
<span style="font-family: arial, sans-serif; font-size: x-small;"><br /></span></div>
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-33798522825478824472013-04-24T02:21:00.000-07:002013-04-24T02:21:15.436-07:00Best Practices untuk Organisasi Direktori Proyek Go di Github / BitBucket / Assembla / etc<br />
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
Saat sudah membuat proyek pengembangan software menggunakan Go dan akan dipublikasikan ke server penyedia repository Git (seperti github.com, bitbucket.org, atau assembla.com), kita harus menentukan struktur direktori yang baik dari proyek kita. Berdasarkan panduan dari <b>How to Write Go Code </b>(<a href="http://golang.org/doc/code.html" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://golang.org/doc/code.html</a>), tiap proyek kita bagi menjadi beberapa direktori:</div>
<ol style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; padding: 0px 10px 0px 25px;">
<li>src: berisi source code</li>
<li>pkg: berisi paket object code yang telah dikompilasi (pustaka)</li>
<li>bin: <i>binary executable</i></li>
</ol>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<b></b></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
Jika untuk diri sendiri, barangkali ini sudah selesai. Jika proyek akan kita publikasikan ke git repo, struktur akan sangat berpengaruh. Initialisasi <b>git </b>seharusnya tidak dilakukan di $GOPATH, tetapi di src/. Perhatikan, pada contoh berikut ini $GOPATH adalah root directory dari proyek tempat file <b>test.go</b> berada:</div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHkr4pAL8Cx0bPIMngNXwaweIiWtYmxZWlJh0ee4rt4LTNjg9EJj51o42-Q7fNt-XabmmmKo0ceo8iN_yJfBaM7wNmliLRC4SJHXZfbCuk9xI4rxBhwZmEBvEQW9ws_Y9kjPq4keQHzeJ3/s1600/dir-structure.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHkr4pAL8Cx0bPIMngNXwaweIiWtYmxZWlJh0ee4rt4LTNjg9EJj51o42-Q7fNt-XabmmmKo0ceo8iN_yJfBaM7wNmliLRC4SJHXZfbCuk9xI4rxBhwZmEBvEQW9ws_Y9kjPq4keQHzeJ3/s1600/dir-structure.jpg" /></a></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
</div>
Saya sudah mempunyai account github, dan root directory saya di github adalah <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fgithub.com%2Fbpdp&h=gAQEovAjf&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://github.com/bpdp</a>, dengan demikian, saat membuat proyek, misalnya namanya adalah <b>goarangodb</b>, maka proyek tersebut akan berada di <a href="http://github.com/bpdp/goarangodb" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://github.com/bpdp/goarangodb</a>. Untuk kasus seperti ini, source code dari proyek kita sebaiknya diletakkan di <b>$GOPATH/src/github.com/bpdp/goarangodb</b>, sekaligus <b>goarangodb</b> menjadi nama paket. Inisialisasi <b>git </b>dilakukan di direktori <b>$GOPATH/src/github.com/bpdp/goarangodb</b>.<br />
<br />
Mengapa harus demikian? Pada saat melakukan <b>go get</b><b> <a href="http://github.com/bpdp/goarangodb" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://github.com/bpdp/goarangodb</a></b>, artiffak dari proyek tersebut (source code, README, dll) akan diletakkan di direktori <b>$GOPATH/src/github.com/bpdp/goarangodb</b>. Dengan demikian, kita sebagai pengembang akan mempunyai situasi yang sama dengan deevloper yang meng - <b>go get</b> proyek kita.<br />
<div>
<br /></div>
<br />
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-18436946186512155482013-04-22T21:24:00.003-07:002013-04-22T21:24:59.228-07:00Menggunakan Vim Sebagai IDE Go<br />
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
Untuk menggunakan Vim (<a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.vim.org&h=dAQHr52n7&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">http://www.vim.org</a>), ada plugin utama serta berbagai plugin pendukung yang bisa digunakan. Sebaiknya, menggunakan <b>pathogen</b> 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.</div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /><b>Instalasi dan Konfigurasi Pathogen </b></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<b><br /></b></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<b>Pathogen</b> adalah plugin dari Tim Pope yang digunakan untuk mempermudah pengelolaan plugin. Kode sumber dari Pathogen bisa diperoleh di <a href="http://www.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Ftpope%2Fvim-pathogen&h=DAQE6PhRe&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">https://github.com/tpope/vim-pathogen</a> . Untuk instalasi, ikuti langkah berikut:</div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<blockquote style="background-color: white; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; margin: 0px; padding: 0px 15px;">
$ cd<br />$ mkdir .vim/autoload<br />$ mkdir .vim/bundle<br />$ cd .vim/autoload<br />$ wget <a href="https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim</a><br />-2013-04-17 22:39:09-- <a href="http://www.facebook.com/l.php?u=https%3A%2F%2Fraw.github.com%2Ftpope%2Fvim-pathogen%2Fmaster%2Fautoload%2Fpathogen.vim&h=oAQHUpbU7&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim</a><br />Resolving raw.github.com (raw.github.com)... 199.27.75.133<br />Connecting to raw.github.com (raw.github.com)|199.27.75.133|:443... connected.<br />HTTP request sent, awaiting response... 200 OK<br />Length: 11730 (11K) [text/plain]<br />Saving to: ‘pathogen.vim’<br />100===================================================>] 11,730 50.3KB/s in 0.2s <br /><br />2013-04-17 22:39:11 (50.3 KB/s) - ‘pathogen.vim’ saved [11730/11730]<br />$ ls -la<br />total 20<br />drwxr-xr-x 2 bpdp bpdp 4096 Apr 17 22:39 .<br />drwxr-xr-x 5 bpdp bpdp 4096 Apr 17 22:21 ..<br />-rw-r--r-- 1 bpdp bpdp 11730 Apr 17 22:39 pathogen.vim<br />$</blockquote>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
Setelah itu, untuk menggunakan Pathogen, letakkan aktivasinya di $HOME/.vimrc atau di $HOME/.vim/vimrc (saya piliah lokasi yang kedua) sebagai berikut:</div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<blockquote style="background-color: white; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; margin: 0px; padding: 0px 15px;">
execute pathogen#infect()</blockquote>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
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.</div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<b>Instalasi dan Kofigurasi Plugin Golang dan Plugin Pendukung </b></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<b><br /></b></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
Setelah selesai melakukan instalasi Pathogen, berbagai plugin yang diperlukan bisa diambil langsung dari Internet. Berikut ini adalah daftar yang digunakan penulis:</div>
<ol style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; padding: 0px 10px 0px 25px;">
<li>Colorschemes: untuk tema warna dari Vim. Bisa diperoleh di <a href="http://www.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Fflazz%2Fvim-colorschemes&h=nAQElkyjV&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">https://github.com/flazz/vim-colorschemes</a> </li>
<li>Nerdtree: untuk menampilkan file-file dalam struktur pohon di sebelah kiri sehingga memudahkan navigasi. Bisa diperoleh di <a href="https://github.com/scrooloose/nerdtree" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">https://github.com/scrooloose/nerdtree</a> </li>
<li>Golang: plugin utama agar Vim mengenali kode sumber Go. Bisa diperoleh di:<a href="http://www.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Fjnwhiteh%2Fvim-golang.git&h=3AQG3ggF_&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">https://github.com/jnwhiteh/vim-golang.git</a> </li>
</ol>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
Cara instalasi:</div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<blockquote style="background-color: white; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; margin: 0px; padding: 0px 15px;">
$ cd<br />$ cd .vim/bundle<br />$ git clone</blockquote>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
Hasil dari menjalankan ``vim'' atau ``gvim'' melalui shell untuk menulis kode sumber Go bisa dilihat pada gambar berikut:</div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg92VoZvolQozpe4wcbh5Emo0yjMheaYnPaWsJ-bHo8gfIzcVxpjia3aWREKTvLLaYaRTSpv4N0B7ZkeQa5G7CoiULap2W5dUvwLRwbgOR21MT3yi2GPU2P0fhcaQxYc27qMXSH9czCJbup/s1600/vim-go.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg92VoZvolQozpe4wcbh5Emo0yjMheaYnPaWsJ-bHo8gfIzcVxpjia3aWREKTvLLaYaRTSpv4N0B7ZkeQa5G7CoiULap2W5dUvwLRwbgOR21MT3yi2GPU2P0fhcaQxYc27qMXSH9czCJbup/s1600/vim-go.jpg" /></a></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<div>
<b>Autocompletion </b></div>
<div>
<b><br /></b></div>
<div>
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 (<a href="http://www.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Fnsf%2Fgocode&h=GAQFx4EYj&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">https://github.com/nsf/gocode</a>). Sebaiknya kode sumber dari Gocode diambil semua karena ada script Vim yang akan kita gunakan:</div>
<div>
<br /></div>
<blockquote style="border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; margin: 0px; padding: 0px 15px;">
$ git clone <a href="http://www.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Fnsf%2Fgocode.git&h=3AQG3ggF_&s=1" rel="nofollow" style="color: #3b5998; cursor: pointer; text-decoration: none;" target="_blank">https://github.com/nsf/gocode.git</a><br />Cloning into 'gocode'...<br />remote: Counting objects: 2491, done.<br />remote: Compressing objects: 100remote: Total 2491 (delta 1323), reused 2449 (delta 1295)<br />Receiving objects: 100Resolving deltas: 100</blockquote>
<div>
<br /></div>
<div>
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.</div>
<div>
Kode sumber lengkap dari $HOME/.vim/vimrc yang penulis gunakan bisa dilihat pada Listing berikut:</div>
<div>
<br /></div>
<blockquote style="border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; margin: 0px; padding: 0px 15px;">
execute pathogen#infect()<br />syntax on<br />filetype plugin indent on<br />set ofu=syntaxcomplete#Complete<br />if has("gui_running")<br /> colorscheme asma nian_blood<br />else<br /> colorscheme slate<br />endif<br />set smartindent<br />set tabstop=2<br />set shiftwidth=2<br />set expandtab<br />autocmd vimenter * NERDTree<br />autocmd vimenter * if !argc() | NERDTree | endif<br />autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif<br />let g:NERDTreeDirArrows=0<br />let g:cssColorVimDoNotMessMyUpdatetime = 1<br />set guifont=Liberation\ Mono\ 11<br />set number<br />set numberwidth=4<br />set cpoptions+=n<br />highlight LineNr term=bold cterm=NONE ctermfg=DarkGrey ctermbg=NONE gui=NONE guifg=DarkGrey guibg=NONE<br />set grepprg=grep\ -nH\ $*</blockquote>
<div>
<br /></div>
<div>
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:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcuHxC4XLydFdAd5IqoHfFH0jynlSq0i4DmJwBCSZ34ZhQnrFY57u7RA6FBlPv4CuHXdQi5YfbPH8fsUh6t-j2uH_MrwUKatn56NhhJzxnFDdYHB3L8EBUFTjv0Q6KgfDE8X3wqk5OUuBS/s1600/vim-go-completion.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcuHxC4XLydFdAd5IqoHfFH0jynlSq0i4DmJwBCSZ34ZhQnrFY57u7RA6FBlPv4CuHXdQi5YfbPH8fsUh6t-j2uH_MrwUKatn56NhhJzxnFDdYHB3L8EBUFTjv0Q6KgfDE8X3wqk5OUuBS/s1600/vim-go-completion.jpg" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
</div>
Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0tag:blogger.com,1999:blog-6405865758808618250.post-76198259250262295292013-04-22T07:27:00.002-07:002013-04-22T07:27:59.936-07:00 Go + REST Client Untuk Mengakses URL Dengan Respon JSON Dinamis<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">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 </span><a href="https://www.facebook.com/notes/bambang-purnomosidi-d-p/go-rest-client-untuk-mengakses-url-dengan-respon-json-dinamis/10151631964496807#" style="background-color: white; color: #3b5998; cursor: pointer; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; text-decoration: none;"></a><a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm" rel="nofollow" style="background-color: white; color: #3b5998; cursor: pointer; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; text-decoration: none;" target="_blank">http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm</a><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">. 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 </span><i style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">low level networking</i><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;"> seperti haln</span><i style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">y</i><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">a masa-masa pra REST. </span><br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">Go juga menyediakan akses yang cukup lengkap untuk keperluan HTTP client ini, meskipun masih tetap diperlukan </span><i style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">thin layer</i><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;"> untuk </span><i style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">wrapper</i><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;"> guna mempermudah akses ini. Jika memang tidak akan membuat </span><i style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">wrapper</i><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">, bisa menggunakan berbagai pustaka REST yang tersedia. Pada tulisan ini, saya akan menggunakan pustaka </span><b style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">restclient</b><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;"> (</span><a href="https://www.facebook.com/notes/bambang-purnomosidi-d-p/go-rest-client-untuk-mengakses-url-dengan-respon-json-dinamis/10151631964496807#" style="background-color: white; color: #3b5998; cursor: pointer; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; text-decoration: none;"></a><a href="http://www.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Fjmcvetta%2Frestclient&h=9AQE6EZoW&s=1" rel="nofollow" style="background-color: white; color: #3b5998; cursor: pointer; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; text-decoration: none;" target="_blank">https://github.com/jmcvetta/restclient</a><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">) yang dibuat oleh Jason McVetta (</span><a href="https://www.facebook.com/notes/bambang-purnomosidi-d-p/go-rest-client-untuk-mengakses-url-dengan-respon-json-dinamis/10151631964496807#" style="background-color: white; color: #3b5998; cursor: pointer; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; text-decoration: none;"></a><a href="https://github.com/jmcvetta" rel="nofollow" style="background-color: white; color: #3b5998; cursor: pointer; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; text-decoration: none;" target="_blank">https://github.com/jmcvetta</a><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">). </span><br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">Basis data NOSQL biasanya mempunyai fitur </span><i style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">horizontal scalability</i><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;"> yang memungkinkan setiap dokumen (dalam SQL bisa disamakan dengan record / row) bisa mempunyai komponen yang berbeda-beda dan </span><i style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">scalable</i><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">. Salah satu contoh yang akan saya bahas disini adalah ArangoDB (</span><a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.arangodb.org&h=WAQHQmUEE&s=1" rel="nofollow" style="background-color: white; color: #3b5998; cursor: pointer; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; text-decoration: none;" target="_blank">http://www.arangodb.org</a><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">). ArangoDB menyediakan REST API yang dijelaskan dengan lengkap disini: </span><a href="https://www.facebook.com/notes/bambang-purnomosidi-d-p/go-rest-client-untuk-mengakses-url-dengan-respon-json-dinamis/10151631964496807#" style="background-color: white; color: #3b5998; cursor: pointer; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; text-decoration: none;"></a><a href="http://www.arangodb.org/manuals/current/ImplementorManual.html" rel="nofollow" style="background-color: white; color: #3b5998; cursor: pointer; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; text-decoration: none;" target="_blank">http://www.arangodb.org/manuals/current/ImplementorManual.html</a><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">. Untuk tulisan ini, saya akan memberikan contoh </span><b style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">http://server:port/_api/document</b><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;"> untuk mengambil data dokumen. Sintaks lengkap dari API ini adalah:</span><br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;"><br /></span>
<br />
<blockquote style="background-color: white; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; margin: 0px; padding: 0px 15px;">
<a href="https://www.facebook.com/notes/bambang-purnomosidi-d-p/go-rest-client-untuk-mengakses-url-dengan-respon-json-dinamis/10151631964496807#" style="color: #3b5998; cursor: pointer; text-decoration: none;">GET /_api/document/document-handle</a></blockquote>
<br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">Jika hasilnya bisa diprediksi, dalam artian, kita mengetahui struktur data yang akan diambil, maka struktur itu bisa kita definisikan menggunakan </span><b style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">struct</b><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">, 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?</span><br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">Jika menemui kasus seperti ini, maka kita bisa mendeskripsikan isi yang akan kita akses tersebut menggunakan </span><b style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">map[string]string</b><span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">. Berikut adalah program yang saya gunakan untuk mengakses dokumen di ArangoDB:</span><br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><b style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;"><u>akses-doc-arangodb.go</u></b><br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><blockquote style="background-color: white; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; margin: 0px; padding: 0px 15px;">
package main<br />import (<br /> "fmt"<br /> "github.com/jmcvetta/restclient"<br />)<br />func main() {<br /> var jml int<br /> var s map[string]string<br /> r := restclient.RequestResponse{<br /> Url: "http://localhost:8529/_api/document/_users/1736896",<br /> Method: restclient.GET,<br /> Data: "",<br /> Result: &s,<br /> }<br /> _, err := restclient.Do(&r)<br /> if err != nil {<br /> panic(err)<br /> }<br /> jml = len(s)<br /> fmt.Printf("Jumlah komponen = %d\n", jml)<br /> fmt.Print(s)<br /> fmt.Println("\nUser = ", s["user"])<br />}</blockquote>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">Hasilnya adalah sebagai berikut:</span><br style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;" /><br /><blockquote style="background-color: white; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 5px; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px; margin: 0px; padding: 0px 15px;">
Jumlah komponen = 6<br />map[_rev:1736896 _key:1736896 active: user:root _id:_users/1736896 password:$1$0cc26832$d582f08ab0898d7d1ab2a18e221d7dc1a2ea93ff80a093678a566fae35bbfc60]<br />User = root</blockquote>
<div style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">
<br /></div>
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;">Jadi, sekarang waktunya ancang-ancang untuk membuat driver ArangoDB untuk Go menggunakan REST API yang disediiakan ArangoDB. Stay tune!</span><br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 19.5px;"><br /></span>Anonymoushttp://www.blogger.com/profile/05886523652774291207noreply@blogger.com0