Ijin baca/tulis bagi user lain di sshfs

Desember 16, 2010

sshfs adalah filesystem client untuk mounting direktory dan file di mesin remote. Implementasi sshfs menggunakan fuse.

Secara default user lain tidak bisa membaca dan menulis di direktory yang dimount. Namun kita bisa mengubahnya dengan beberapa langkah. Berikut langkah-langkah dalam ubuntu 10.10, dalam distro lain silahkan disesuaikan.

Pertama, pastikan user tersebut, yang melakukan mounting sshfs, tergabung dengan group fuse.

$ sudo usermod -a -G fuse komaruloh

Supaya efek penambahan group berlaku maka lakukan logout dan login ulang.

Kedua, edit file /etc/fuse.conf

$ sudo vim /etc/fuse.conf

# Set the maximum number of FUSE mounts allowed to non-root users.
# The default is 1000.
#
#mount_max = 1000

# Allow non-root users to specify the ‘allow_other’ or ‘allow_root’
# mount options.
#
#user_allow_other

Buang komentar pada baris terakhir.

# Allow non-root users to specify the ‘allow_other’ or ‘allow_root’
# mount options.
#
user_allow_other

Simpan file yang telah dirubah.

Ketiga, lakukan monting remote file/direktori menggunakan sshfs.

sshfs -o allow_other otheruser@remotehost.com:/home/otheruser/mydirectory/ /home/komaruloh/mydirectory
otheruser@remotehost.com’s password:

Perhatikan option “-o allow_other” yang membuat user lain bisa mendapatkan akses baca/tulis ke file/direktory reomte yang di mouting. Bila langkah kedua tidak kita lakukan maka kita akan mendapatkan error seperti ini :

otheruser@remotehost.com’s password:
fusermount: failed to open /etc/fuse.conf: Permission denied
fusermount: option allow_other only allowed if ‘user_allow_other’ is set in /etc/fuse.conf

 

Menginstall BIRT Viewer di Slackware 12.1

Agustus 20, 2008

Saya butuh Birt Viewer untuk menampilkan report yang saya buat di Eclipse-BIRT. Sebelumnya saya menggunakan distro Ubuntu 7.10 (Gutsy Gibbon) dan semua berjalan lancar. Saya bisa membuat laporan di BIRT dan menampilkan preview-nya.

Kemudian Ubuntu 8.04 (Hardy Heron) datang membawa harapan. Digoda dengan proses upgrade yang relatif mudah dan jaminan dukungan 5 tahunnya maka saya melakukan upgrade. Langkah yang sayangnya saya sesali.

Sebenarnya saya suka dengan Ubuntu, dengan segala kemudahan dalam penggunaan membuat Linux serasa lebih nyaman digunakan. Namun nampaknya beberapa hal yang sebelumnya berjalan lancar di Gutsy Gibbon mengalami ganguan di Hardy Heron. Salah satunya adalah tidak jalannya Birt Viewer di Hardy Heron.

Setelah menunggu cukup lama sambil mencari cara untuk mengatasinya akhirnya saya menyerah dan mengganti Ubuntu dengan distro yang ‘lebih stabil’. Keputusan saya akhirnya jatuh pada Slackware. Kenapa Slackware? Kenapa tidak.

Singkat cerita Slackware 12.1 berhasil diinstall menggantikan Ubuntu, tapi ada yang kurang. Secara default Apache-Tomcat tidak terinstall sehingga Birt Viewer tidak bisa diinstall. Birt Viewer jalan sebagai aplikasi web di Apache-Tomcat.

Untuk mengatasinya saya googling dan mendapatkan link ini. Saya install dengan installpkg :

sudo installpkg apache-tomcat-6.0.16-noarch-1mfb.tgz

Setelah install Tomcat saya harus edit /etc/apache-tomcat/tomcat-users.xml, isinya saya ubah jadi :

<?xml version=’1.0′ encoding=’utf-8′?>
<tomcat-users>
<role rolename=”manager”/>
<role rolename=”tomcat”/>
<role rolename=”admin”/>
<role rolename=”role1″/>
<user username=”both” password=”tomcat” roles=”tomcat,role1,admin,manager”/>
<user username=”tomcat” password=”tomcat” roles=”tomcat”/>
<user username=”role1″ password=”role1″ roles=”role1″/>
</tomcat-users>

Ini saya lakukan agar saya bisa mengakses aplikasi manager pada tomcat. Dengan aplikasi manager saya bisa install/upload aplikasi lainnya. Yang paling penting mungkin baris :

<user username=”both” password=”tomcat” roles=”tomcat,role1,admin,manager”/>

Sementara baris yang lain hanya default dari tomcat terdahulu yang sempat saya ingat(kalau nggak salah ingat).

Setelah Tomcat terinstall saatnya upload Birt Viewer yang bisa didapat disini.

Ekstrak file birt-runtime-2_3_0.zip ke folder favorit anda. Kemudian copy direktori “WebViewerExample” kedalam webapps Tomcat (kalau di system saya letaknya /var/lib/apache-tomcat). Mungkin nama direktori “WebViewerExample” bisa diganti menjadi “birt” agar lebih singkat penulisannya.

Aplikasi Birt Viewer sudah diinstall/upload. Saatnya melihat hasilnya, dan tampilan selamat dari Birt membuat saya tersenyum lega. Sekarang saya akan mencoba melihat contoh report yang disediakan. Dan …. error menyambut

tomcat_error_report_1219217309266

tomcat_error_report_1219217309266

Kembali konsultasi dengan paman Google. Rupanya menurut dokumentasi instalasi Birt Viewer, karena saya pakai Tomcat versi 6 maka saya harus menambahkan library common logging. Ekstrak file common logging, dan copy-kan file commons-logging-1.1.1.jar ke dalam library Tomcat (di system saya letaknya /usr/share/apache-tomcat/lib). Jangan lupa ganti ownership dari file commons-logging-1.1.1.jar menjadi milik tomcat:tomcat

sudo chown tomcat:tomcat /usr/share/apache-tomcat/lib/commons-logging-1.1.1.jar

Setelah itu restart apache-tomcat

sudo /etc/rc.d/rc.tomcat stop
sudo /etc/rc.d/rc.tomcat start

Sekarang saatnya untuk mencoba lagi. Kini giliran org.w3c.Tidy yang error :

:
noClassDefinitionFound for org/w3c/Tidy
:

Solusinya adalah download JTidy.Ekstrak jtidy-04aug2000r7-dev.zip dan copy-kan Tidy.jar ke birt/WEB-INF/lib (kalau direktory WebViewerExample sudah kita ganti dengan birt). Undeploy aplikasi Birt Viewer dan upload ulang.

Eurika… Akhirnya berhasil juga. Selamat mencoba.

Menggunakan JSON untuk transfer data/object dari PHP ke Java.

Desember 27, 2007

Pengenalan JSON

JSON (JavaScript Object Notation) adalah format transfer data yang ringan. Jika dibandingkan dengan XML JSON jauh lebih sederhana, sehingga (seharusnya) lebih ringan dari XML. Tujuan dari JSON adalah satu, yaitu mentransfer object (sebenarnya lebih mirip struct dalam bahasa C/C++).

Untuk lebih jelas tentang JSON dan spesifikasinya kunjungi http://json.org, untuk bahasan tentang perbandingan antara JSON dan XML lihat JSON and XML atau JSON vs. XML as a data interchange format.

JSON di PHP

Untuk menggunakan JSON di PHP sangatlah mudah. Syaratnya adalah ektensi JSON untuk PHP harus sudah terinstall. Secara default PHP versi 5.2.x sudah mengikutsertakan ektensi JSON. Tentu saja ada berbagai utilitas yang ditawarkan selain yang merupakan bawaan PHP. Namun tulisan ini untuk membahas penggunaan JSON dalam PHP, dan karena JSON bawaan PHP dirasa cukup sebagai pengantar maka dalam tulisan ini hanya akan digunakan JSON bawaan PHP.

PHP menyertakan dua fungsi untuk menulis dan membaca format JSON. json_encode akan mengubah variabel PHP kedalam format JSON. Contoh :

<?php $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

echo json_encode($arr);

?>

kode diatas akan menghasilkan output :

{"a":1,"b":2,"c":3,"d":4,"e":5}

Perhatikan bahwa array yang di-encode adalah associate array sehingga yang dihasilkan adalah JSON-object, bukan JSON-array. Bila kita gunakan kode berikut :

<?php $arr = array('f','g','h','i','j');

echo json_encode($arr);

?>

maka outputnya adalah JSON-array :

["f","g","h","i","j"]

Sedangkan json_decode melakukan hal sebaliknya. Contoh :

<?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));

var_dump(json_decode($json, true));

?>

kode diatas akan menghasilkan output :

object(stdClass)#1 (5) {

["a"] => int(1)

["b"] => int(2)

["c"] => int(3)

["d"] => int(4)

["e"] => int(5)

}

JSON di JAVA

Tidak seperti PHP yang mendukung JSON secara native, Java memerlukan class/paket tambahan untuk menggunakan JSON. Dalam tulisan ini akan digunakan class dari org.json. Kelas-kelas berikut harus disertakan dalam classpath :

JSONObject.java

JSONArray.java

JSONStinger.java

JSONWriter.java

JSONTokener.java

JSONException.java

JSONString.java

Selain itu ada juga beberapa kelas tambahan untuk pertukaran data dengan format lain, seperti :

CDL.java Merubah JSONArray dari/ke format CDL (comma delimited array).

XML.java Merubah JSONArray dari/ke format XML.

XMLTokener.java Menyediakan method tambahan untuk mem-parsing XML.

HTTP.java Merubah header HTTP dari/ke JSONObject.

HTTPTokener.java Menyediakan tambahan untuk mem-parsing header HTTP.

Cookie.java Merubah cookie browser menjadi JSONObject dan sebaliknya.

CookieList Merubah list (daftar) cookie browser menjadi JSONObject dan sebaliknya.


Untuk membuat sebuah JSONObject kita bisa menggunakan method put() dari
kelas JSONObject seperti :

myString = new JSONObject().put("JSON", "Hello, World!").toString();

yang menghasilkan String

{"JSON": "Hello, World"}.

Selain itu kita juga bisa membuat JSONObject dari subset(bagian) JSONObject lainnya, dari JSONTokener, java.util.map, java bean, object java dengan menggunakan reflection, dan juga dari JSON text string. Yang terakhir ini adalah kunci dari transfer data/object dari bahasa pemrograman lain, dan akan dibahas di bab tersendiri.

NOTE : Harap dibedakan antara JSONObject dengan JSON-object itu sendiri. Karena JSON-object adalah string dengan format tertentu sementara JSONObject merupakan kelas java yang mempresentasikan JSON-object.

Untuk membuat JSONArray caranya hampir sama dengan JSONObject,

JSONArray JArray = new JSONArray(); JArray.put("Hello"); JArray.put(1,"World");myString = JArray.toString();

akan menghasilkan String

["Hello","World"].

JSON Validator

Ada kalanya kita ingin memastikan JSON-object atau JSON-array yang kita buat adalah valid. Untuk itu kita memerlukan sebuah JSON Validator, salah satu yang tersedia adalah “jsonval” yang dibuat oleh Ben Spencer. Source codenya bisa diambil di sini.

Untuk menggunakannya kita harus meng-kompile file-file jsonval terlebih dahulu. Caranya adalah masuk dalam direktori jsonval dan ketik ‘make’. Bila berhasil maka akan ada sebuah file binary bernama jsonval. Cara menggunakannya dengan menyediakan nama file yang berisi JSON string.

jsonval namafile

NOTE : Saya menggunakan tool ini dalam lingkungan linux (UBUNTU 7.10), penggunaan di lingkungan lain harap disesuaikan, terutama cara compile dan menjalankan tool ini.

Memproses JSON string yang dibuat oleh PHP di Java

Kita akan menggabungkan semua ilmu yang baru saja kita dapatkan untuk mentransfer data dari PHP ke Java. Sebagai permulaan kita akan membuat sebuah file di PHP yang menyediakan JSON string.

<?php

Class JsonObject {

public $varNumberOne = "Numero uno";

public $varNumberTwo = 2;

}

$someObject = new JSonObject();

echo json_encode($someObject);

?>

Anggota kelas(variabel) harus public agar bisa dibaca oleh json_encode(). Untuk kelas dengan visibility private yang mengikuti aturan get/set ala java bean bisa menggunakan PHP reflection, keterangan lebih lanjut baca
PHP: use reflection to serilaize object data as JSON. Kode diatas menghasilkan :

{"varNumberOne":"Numero uno","varNumberTwo":2}

Untuk sisi java (potongan kode/tidak lengkap):

try {

URL jSonString = new URL("http://192.168.0.78/Json.php");

BufferedReader in = new BufferedReader(new InputStreamReader(jSonString.openStream()));

while((inputLine = in.readLine()) != null){

try{

jsonItem = new JSONObject(inputLine);

if(jsonItem.has("varNumberOne"))

System.out.println("varNumberOne : "jsonItem.get("varNumberOne");

if(jsonItem.has("varNumberTwo"))

System.out.println("varNumberTwo : "jsonItem.get("varNumberTwo");

} catch(JSONException e){

e.printStackTrace();

}

}

} catch (Exception e){

out.println(e.getMessage());

}

Potongan kode diatas akan menghasilkan :

varNumberOne : Numero uno

varNumberTwo : 2

Yang dilakukan kode tersebut adalah membaca output dari sebuah URL dan mem-parsing hasilnya kedalam sebuah JSONObject. Dengan sedikit modifikasi kita bisa membuat PHP membaca JSON string yang dikirimkan dari Java.
Selamat mencoba.

referensi:
http://json.org
http://www.json.org/java/index.html
http://code.google.com/support/bin/answer.py?answer=66848&topic=11530
http://www.oreilly.com/pub/h/5329

Negeriku bernama Indonesia

Mei 19, 2007

Nama adalah identitas, kita mengaitkan banyak hal dengan nama. Kecakapan, kredibilitas, reputasi, prestasi dan banyak hal lainnya. Saya tidak bermaksud menjawab pertanyyan Shakespeare yang terkenal itu (Apalah arti sebuah nama?), yang mungkin memiliki arti yang lebih dalam dari yang mampu saya pahami.

Tentu kita sudah diajarkan sejak duduk dibangku sekolah dasar bahwa negeri tercinta ini bernama Indonesia. Berbagai kebanggaan, kebesaran, kekayaan, keberagaman dan lain-lainnya telah diperkenalkan sejak dini. Namun tak banyak dari kita yang diajarkan mengucapkan nama negeri ini dengan benar. Mulai dari guru, orang tua, teman, bahkan tokoh masyaraka banyak yang mengucapkan nama negeri ini dengan ucapan ‘Endonesia’. Jangan-jangan Anda juga membaca judul diatas sebagai ‘Negeriku bernama Indonesia’. Memang agak jangggal bila ditulis demikian, tapi rasanya normal bila diucapkan.

Saya masih ingat peristiwa ‘Reshufle’ Kabinet Indonesia Bersatu yang kedua kalinya. Saya bukannya ingin membahas masalah politik karena saya bukanlah orang yang berkompeten dibidang ini. Yang ingin saya bahas adalah ketika presiden Republik Indonesia membaca(mengucapkan) nama negeri yang dipimpinnya ini dengan ucapan ‘Endonesia’. Sebagai orang nomor satu di negeri ini, beliau memberi contoh yang salah.

Mungkin masalah ini terdengar sepele dibandingan Reshufle yang telah digembar-gemborkan media masa. Tapi bagi saya nama bukanlah masalah sepele. Sebuah nama menujukan siapa saya, apa yang telah saya lakukan, pencapaian dalam hidup saya. Bila orang nomor satu di Indonesia bisa salah mengucapkan nama negeri ini, bagaimana dengan bawahannya. Belum lagi masyarakat luas yang menyaksikan secara langsung peristiwa ini di pesawat televisi.

Lalu apakah salah bila kita lebih memilih mengucapkan ‘Endonesia’ daripada Indonesia? Untuk ini saya pernah mendapat teguran dari guru bahasa Ingris saya. Menurut beliau negeri yang bernama ‘Endonesia’ tidak ada dalam peta dunia ini. Cukup mengejutkan bahwa yangmenegur saya adalah seorang guru bahasa asing, bukan guru bahasa Indonesia atau guru PMP(Pendidikan Moral Pancasila).

Semoga dalam semangat kebangkitan nasional kali ini kita bisa kembali mengucapkan nama negeri ini dengan benar. Karena yang namanya negara ‘Endonesia’ itu tidak pernah ada dimuka bumi. Jangan sampai kita kehilangan identitas. Selamat hari kebangkitan nasional.