Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan |...

30
TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial www.infolinux.web.id 52 INFOLINUX SEPTEMBER 2003 Gambas dan MySQL P ucuk dicinta ulam tiba, inilah yang dirasakan penulis ketika dikenalkan oleh InfoLINUX tentang Gambas pada edisi April 2003 yang lalu. Karena selama ini penulis telah mempelajari bahasa Visual Basic dan tak ingin keahlian itu hilang sewaktu berpindah ke Linux, akhirnya bertemu dengan Gambas (Gambas Almost Mean Basic). Berdasarkan rujukan yang diberikan, penulis langsung mempelajari dokumentasi Gambas di situs http:// gambas.sourceforge.net. Salut dan terimakasih untuk Benoit Minisini yang telah membuat Gambas dalam waktu luangnya dan melepasnya dalam bentuk lisensi GPL yang free. Gambas memang memiliki kemudahan Visual Basic dan kekuatan OOP dari Java. Dari alamat situs di atas, Anda dapat mengambil versi terakhir Gambas 0.58. Penulis menggunakan versi Gambas 0.57 dengan Linux Red Hat 7.3. Proses instalasi program cukup mudah, tidak ada kendala sama sekali sesuai dengan petunjuk InfoLINUX edisi April 2003. Meskipun Gambas masih dalam tahap pengembangan, sampai saat ini penulis belum menemukan Bug Program yang signifikan. Ok, tanpa panjang lebar, kita akan coba mempelajari salah satu komponen yang disediakan Gambas untuk pengolahan database, yaitu Connection Class. Connection Class adalah sebuah kelas yang digunakan untuk dapat mengakses database server seperti MySql atau PgSql, yang terdiri dari beberapa Property dan Method seperti terlihat pada Tabel 1. Untuk dapat menggunakan Connection Class, kita harus mendeklarasikan sebuah variabel objek dan merujuk Connection Class ke variabel tersebut, kemudian memberi nilai untuk properti-properti yang diperlukan dan menjalankan metode .Open untuk membuka koneksi ke database server. Setelah koneksi terbentuk, kita dapat mengolah data pada satu tabel atau lebih dengan menggunakan metode .Exec(sql_statement). Metode .Exec() akan mengembalikan hasil eksekusinya ke sebuah variabel object bertype Result, variabel tersebut boleh dikatakan sebagai variabel object yang bertipe Recordset di VB. Contoh program Koneksi Ke database server MySql: PUBLIC MyConn AS Connection PUBLIC SUB Koneksi() MyConn = New Connection MyConn.Type= “mysql” MyConn.Host= “localhost” MyConn.Login= “root” MyConn.Password=”” MyConn.Name=”sahabat” ‘buka koneksi MyConn.Open Tampilkan messagebox bila ada kesalahan CATCH Message.error(Error.text) END Mengambil Data Tertentu: PUBLIC SUB ambildata() Dim sql AS String DIM MyRS AS Result Dim vNama AS String Dim vTelp AS String Sql = “select nama, telp from tsahabat where id = 1” MyRS = MyConn.Exec(sql) ‘pindahkan data ke variable vNama = MyRS!nama vTelp = MyRS!telp CATCH Message.error(Error.text) END Menghapus data tertentu: PUBLIC SUB hapusdata() DIM sql AS String DIM MyRS AS Result Bagi Anda yang ‘maniak’ Visual Basic, jangan ragu-ragu lagi untuk terjun bebas ke Linux. Sekarang sudah ada Gambas yang masih muda dan cepat kemajuannya, sehingga Anda dapat mengikuti perkembangan dan mendalaminya betul-betul dari awal. Database Programming dengan Gambas dan MySQL Connection Class Property KEGUNAAN .Host String untuk nama komputer / Host (“localhost”) .Login String untuk nama user pada MySql (“root”) .Password String untuk kata sandi pada MySql (“”) .Type String untuk jenis server database (“mysql” / “pgsql”) .Name String untuk nama database (“sahabat”) Method KEGUNAAN .Open Membuka Koneksi ke Server Database .Exec Mengeksekusi Perintah SQL Tabel 1. Gambar 1. Startup class, Constructor, dan Destructor

Transcript of Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan |...

Page 1: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id52 INFOLINUX SEPTEMBER 2003

Gambas dan MySQL

Pucuk dicinta ulam tiba, inilah

yang dirasakan penulis ketika

dikenalkan oleh InfoLINUX tentang

Gambas pada edisi April 2003 yang lalu.

Karena selama ini penulis telah

mempelajari bahasa Visual Basic dan tak

ingin keahlian itu hilang sewaktu

berpindah ke Linux, akhirnya bertemu

dengan Gambas (Gambas Almost Mean

Basic). Berdasarkan rujukan yang

diberikan, penulis langsung mempelajari

dokumentasi Gambas di situs http://

gambas.sourceforge.net.

Salut dan terimakasih untuk Benoit

Minisini yang telah membuat Gambas

dalam waktu luangnya dan melepasnya

dalam bentuk lisensi GPL yang free.

Gambas memang memiliki kemudahan

Visual Basic dan kekuatan OOP dari Java.

Dari alamat situs di atas, Anda dapat

mengambil versi terakhir Gambas 0.58.

Penulis menggunakan versi Gambas 0.57

dengan Linux Red Hat 7.3. Proses

instalasi program cukup mudah, tidak ada

kendala sama sekali sesuai dengan

petunjuk InfoLINUX edisi April 2003.

Meskipun Gambas masih dalam tahap

pengembangan, sampai saat ini penulis

belum menemukan Bug Program yang

signifikan. Ok, tanpa panjang lebar, kita

akan coba mempelajari salah satu

komponen yang disediakan Gambas

untuk pengolahan database, yaitu

Connection Class.

Connection Class adalah sebuah kelas

yang digunakan untuk dapat mengakses

database server seperti MySql atau PgSql,

yang terdiri dari beberapa Property dan

Method seperti terlihat pada Tabel 1.

Untuk dapat menggunakan Connection

Class, kita harus mendeklarasikan sebuah

variabel objek dan merujuk Connection

Class ke variabel tersebut, kemudian

memberi nilai untuk properti-properti yang

diperlukan dan menjalankan metode .Open

untuk membuka koneksi ke database

server. Setelah koneksi terbentuk, kita

dapat mengolah data pada satu tabel atau

lebih dengan menggunakan metode

.Exec(sql_statement).

Metode .Exec() akan mengembalikan

hasil eksekusinya ke sebuah variabel

object bertype Result, variabel tersebut

boleh dikatakan sebagai variabel object

yang bertipe Recordset di VB.

Contoh program� Koneksi Ke database server MySql:

PUBLIC MyConn AS Connection

PUBLIC SUB Koneksi()

MyConn = New Connection

MyConn.Type= “mysql”

MyConn.Host= “localhost”

MyConn.Login= “root”

MyConn.Password=””

MyConn.Name=”sahabat”

‘buka koneksi

MyConn.Open

‘Tampilkan messagebox bila ada kesalahan

CATCH

Message.error(Error.text)

END

� Mengambil Data Tertentu:

PUBLIC SUB ambildata()

Dim sql AS String

DIM MyRS AS Result

Dim vNama AS String

Dim vTelp AS String

Sql = “select nama, telp from tsahabat

where id = 1”

MyRS = MyConn.Exec(sql)

‘pindahkan data ke variable

vNama = MyRS!nama

vTelp = MyRS!telp

CATCH

Message.error(Error.text)

END

� Menghapus data tertentu:

PUBLIC SUB hapusdata()

DIM sql AS String

DIM MyRS AS Result

Bagi Anda yang ‘maniak’ Visual Basic, jangan ragu-ragu lagi untukterjun bebas ke Linux. Sekarang sudah ada Gambas yang masihmuda dan cepat kemajuannya, sehingga Anda dapat mengikutiperkembangan dan mendalaminya betul-betul dari awal.

Database Programming denganGambas dan MySQL

Connection ClassProperty KEGUNAAN.Host String untuk nama komputer / Host (“localhost”)

. Log in String untuk nama user pada MySql (“root”)

.Password String untuk kata sandi pada MySql (“”)

.Type String untuk jenis server database (“mysql” / “pgsql”)

.Name String untuk nama database (“sahabat”)

Method KEGUNAAN.Open Membuka Koneksi ke Server Database

.Exec Mengeksekusi Perintah SQL

Tabel 1.

� Gambar 1. Startup class,Constructor, dan Destructor

Page 2: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

53INFOLINUX SEPTEMBER 2003www.infolinux.web.id

Gambas dan MySQL

Sql=”delete from tsahabat where id = 1”

MyRS = MyConn.Exec(sql)

CATCH

Message.error(Error.text)

END

� Menambah data:

PUBLIC SUB tambahdata()

DIM sql AS String

DIM MyRS AS Result

Sql=”insert into tsahabat

(nama,almt1,almt2,telp) values (‘Tamrin

Syah’, ‘Jl. Patimura No. 77’, ‘Kec.

Telanaipura – Jambi’, ‘(0741) 60852’)

MyRS = MyConn.Exec(sql)

CATCH

Message.error(Error.text)

END

� Memperbaiki data tertentu:

PUBLIC SUB editdata()

DIM sql AS String

DIM MyRS AS Result

Sql=”update tsahabat set nama = ‘Yudi

Fitra’, telp = ‘207277’ where id = 1”

MyRS = MyConn.Exec(sql)

CATCH

Message.error(Error.text)

END

Database sahabatPada tulisan ini, penulis menggunakan

database server MySql untuk mengolah

data sahabat. Buatlah sebuah database

dengan nama “SAHABAT” yang terdiri

atas satu tabel “TSAHABAT”

menggunakan MySql Client. Isi beberapa

data. Pada console atau “jendela command

sheel” ketik perintah-perintah berikut:

#mysql -u root -p

Masukkan password untuk user “root”

mysql>create database sahabat;

mysql >use sahabat;

mysql >create table tsahabat (id int(7)

AUTO_INCREMENT, nama char(25), almt1

char(25), almt2 char(25), telp char(10),

PRIMARY KEY (id))

mysql >insert into tsahabat

(nama,almt1,almt2,telp) values (‘Tamrin

S’,’Jl. Raden Mattaher No. 96’,’Kel. Pasar –

Jambi’,’0741-22105’)

mysql >insert into tsahabat

(nama,almt1,almt2,telp) values (‘Yudi

Fitra’,’Jl. Patimura No. 77’,’Kel. Jelutung –

Jambi’,’0741-27277’)

mysql >insert into tsahabat

(nama,almt1,almt2,telp) values (‘Siti

Nirwana’,’Jl. Barau-barau No. 07’,’Kel. Pasir

Putih – Jambi’,’0741-65028’)

Membuat programSetelah proses pembuatan database

SAHABAT di MySql selesai, kita mulai

membuat interface untuk pengolahan

datanya dengan Gambas. Jalankan

program Gambas dari command shell:

#/usr/bin/gambas

� Pilih New Project, ketik nama proyek:

sahabat, lalu tentukan direktori mana

proyek tersebut disimpan dan klik OK.

� Pada jendela utama proyek, klik kanan

pada nama proyek “sahabat”, pilih

New – Form, ketik nama form:

“fsahabat”, dan tentukan tipe form

tersebut sebagai: Startup class,

Constructor, dan Destructor. Seperti

terlihat pada Gambar 1.

Letakkan beberapa objek label dan

textbox ke dalam form tersebut sesuai

dengan Gambar 2 dan atur properties

seperti pada Tabel 2.

Seletelah selesai setting objek-objek di

atas, tiba saatnya mengetik kode

program yang diperlukan. Aktifkan

jendela kode dengan cara mengklik

ganda Classes “fsahabat” dan mulailah

mengetik kode program seperti listing

lengkap yang cukup panjang berikut ini:

‘ Gambas class file

PUBLIC MyConn AS Connection

PUBLIC MyRS AS Result

PUBLIC vCari AS String

STATIC PUBLIC SUB Main()

DIM oForm AS form

oForm = NEW fsahabat

oForm.showModal()

END

PUBLIC SUB _new()

ME.Title=”Buku Sahabat”

ME.center

koneksi

ambildata

pindahkan

isilistbox

END

PUBLIC SUB koneksi()

MyConn = NEW Connection

MyConn.Close

MyConn.Type = “mysql”

MyConn.Host = “localhost”

MyConn.Login = “root”

MyConn.Password = “”

MyConn.Name = “sahabat”

Setting PropertiesOBJECT PROPERTIES VALUELabel1 Text Nama :

Label2 Text Alamat :

Label3 Text Telpon :

Label4 Text DATA SAHABAT

Textbox NameBackground Textbox1&H55AAFF&

Textbox NameBackground Textbox2&H55AAFF&

Textbox NameBackground Textbox3&H55AAFF&

Textbox NameBackground Textbox4&H55AAFF&

Button NameText btnTambahTambah

Button NameText btnSimpanSimpan

Button NameText BtnHapusHapus

Button NameText BtnBatalBatal

Frame NameText Frame1Navigator

L istBox NameBackground ListBox1&H55AAFF&

Tabel 2.

Page 3: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id54 INFOLINUX SEPTEMBER 2003

MyConn.Open

CATCH

Message.error(Error.text)

END

PUBLIC SUB ambildata()

DIM sql AS String

sql = “select * from tsahabat order by id”

MyRS = MyConn.Exec(sql)

CATCH

Message.error(Error.text)

END

PUBLIC SUB pindahkan()

vCari = Str(MyRS!id)

textbox1.text = MyRS!nama

textbox2.text = MyRS!almt1

textbox3.text = MyRS!almt2

textbox4.text = MyRS!telp

CATCH

Message.error(Error.text)

END

PUBLIC SUB isilistbox()

DIM i AS Integer

DIM vKode AS String

listbox1.Clear

FOR i = 1 TO MyRS.Count

vKode = Space$( 7 - Len(Str(MyRS!id))

) & Str(MyRS!id)

listbox1.add(vKode & “ | “ &

MyRS!nama)

MyRS.MoveNext

NEXT

CATCH

Message.error(Error.text)

END

PUBLIC SUB listbox1_Click()

DIM sql AS String

vCari = Trim(Left$(listbox1.text,7))

sql = “select * from tsahabat where id =

“ & vCari

MyRS = MyConn.Exec(sql)

pindahkan

CATCH

Message.Error(Error.Text)

END

PUBLIC SUB btnTambah_Click()

kosongkan

btnTambah.Enabled = FALSE

END

PUBLIC SUB btnSimpan_Click()

DIM sql AS String

IF btnTambah.Enabled = FALSE THEN

sql = “insert into tsahabat

(nama,almt1,almt2,telp) values (‘“ &

textbox1.text & “‘,’” & textbox2.text & “‘,’”

& textbox3.text & “‘,’” & textbox4.text &

“‘)”

MyRS = MyConn.Exec(sql)

btnTambah.Enabled = TRUE

ELSE

sql = “update tsahabat set “

sql = sql & “nama = ‘“ &

textbox1.text

sql = sql & “‘,almt1 = ‘“ &

textbox2.text

sql = sql & “‘,almt2 = ‘“ &

textbox3.text

sql = sql & “‘,telp = ‘“ & textbox4.text

& “‘ where id = “ & vCari

MyRS = MyConn.Exec(sql)

ENDIF

ambildata

isilistbox

CATCH

Message.Error(Error.Text)

END

PUBLIC SUB btnHapus_Click()

DIM sql AS String

sql = “delete from tsahabat where id = “

& vCari

MyRS = MyConn.Exec(sql)

ambildata

pindahkan

isilistbox

END

PUBLIC SUB btnBatal_Click()

DIM sql AS String

vCari = Trim(Left$(listbox1.text,7))

btnTambah.Enabled = TRUE

sql = “select * from tsahabat where id =

“ & vCari

MyRS = MyConn.Exec(sql)

pindahkan

CATCH

Message.Error(Error.Text)

END

PRIVATE SUB kosongkan()

textbox1.text = “”

textbox2.text = “”

textbox3.text = “”

textbox4.text = “”

END

PUBLIC SUB _free()

MyConn.Close

Message.Info(“Terimakasih..., Salam

Linux”)

END

‘End of program

Selanjutnya untuk mencoba program,

Anda dapat menjalankannya dengan

menekan tombol F5. Apabila tidak ada

kesalahan yang muncul, akan tampak

seperti Gambar 3, dan program sudah

dapat Anda kompilasi dengan memilih

menu Project – Compile.�

Tamrin Syah, S.Kom

([email protected])

Gambas dan MySQL

� Gambar 2. Form Gambas untuk DataSahabat

� Gambar 3. Contoh aplikasi databasedengan Gambas

Page 4: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

55INFOLINUX SEPTEMBER 2003www.infolinux.web.id

Deteksi Hardware

Bukan cerita baru kalau orang

menanyakan apakah hardware

yang dimiliki dapat dikenali baik

oleh Linux. Bukan cerita baru pula orang

tidak berani menginstal Linux hanya

karena ketakutan kalau-kalau hardware-

nya ternyata belum didukung. Dan

sudah cerita lama kalau hal yang satu ini

digunakan oleh para saingan Linux untuk

menjelek-jelekkan Linux. Dan kita tidak

akan membiarkan itu terjadi, Sekali lagi,

tidak akan!

Sekilas cerita untuk plugand playBeberapa tahun yang lalu, setelah

melewati usaha yang cukup rumit,

akhirnya tibalah seperangkat komputer

dengan CPU Intel Pentium 133 MHz di

kamar penulis. Masih teringat bahwa

RAM yang terpasang hanyalah 8 MB.

Dan karena sistem operasi Microsoft

Windows 95 sangat umum dipakai oleh

teman-teman (beberapa sekolah masih

berjaya dengan MSDOS 6 dan Microsoft

Windows 3.1), maka penulis pun segera

meminjam CD-ROM installer sistem

operasi tersebut. Ada satu istilah yang

sangat menarik: pnp atau plug and play.

Teorinya, tancapkan saja hardware Anda

dan hardware tersebut akan langsung

bekerja. Karena ingin menikmati suara

dan saat itu tidak memiliki sound card,

maka langkah menghemat uang jajan pun

segera dilakukan.

Akhirnya, sebuah sound card pun

nongol di komputer penulis dan rasa

bahagia pun menyelimuti ketika pada

akhirnya game Street Fighter yang

menjadi idola saat itu mulai bisa

bersuara. Istilah plug and play benar-

benar dapat dipercaya! Penulis bahkan

hanya perlu memasukkan sebuah disket

berisi driver. Dan semuanya selesai!

Betapa mudahnya hidup.

Di saat itu, sistem operasi Windows

benar-benar pujaan. Penulis bahkan

sempat sinis ketika melihat sebuah iklan

tempel OS/2. Lebih sinis lagi ketika

beberapa mahasiswa bertandang ke

sekolah dan menawarkan Linux. Bahkan,

saking sinisnya, penulis sempat berjanji

setia untuk tidak akan menggunakan

Linux. Alasannya? Karena Windows bisa

plug and play.

Waktu pun berlalu. Saatnya kuliah

dan meninggalkan kampung halaman.

Tidak lupa komputer pun diangkut.

Sampai di Jakarta, penulis pun segera

memilih Mangga Dua sebagai tempat

wisata kali pertama. Keliling sana sini,

akhirnya penulis kembali menemukan

Linux. Linux lagi , Linux lagi! Dengan

pengenalan hardware yang menjijikkan,

begitulah pemikiran waktu itu.

Setengah tahun kemudian, penulis

pun mencoba Linux karena kabarnya

yang cukup santer terdengar, sekadar

iseng, dan rupanya masih sama juga,

kurang ramah dengan hardware. Waduh!

Sampai sekarang pun, isu bahwa Linux

kurang ramah dengan hardware masihlah

tedengar.

Linux dulu dan sekarangKalau ada lirik lagu yang menyatakan

bahwa “Aku masih seperti yang dulu”,

maka Linux sepertinya tidak setia-setia

amat, tentunya dalam arti yang positif.

Linux masih setia dengan keandalannya,

Linux masih setia dengan kebebasannya,

Linux masih setia dengan komitmen

untuk terus maju. Tapi Linux tidak setia

untuk kurang ramah pada hardware.

Linux kini jauh lebih ramah kalau

berhubungan dengan hardware. Kernel

2.6 yang akan keluar jelas akan lebih

ramah lagi dengan hardware.

Anda mungkin mengalami apa yang

pernah penulis alami ketika hardware

yang telah dibeli dengan uang tabungan

ternyata belum didukung oleh Linux.

Tapi itu dulu.

Sekarang, lihatlah dukungan vendor.

Lihatlah OSDL tempat Linus sekarang

bekerja penuh. Lihatlah siapa yang

mendukung OSDL. Lihatlah seberapa

banyak hacker Linux yang bekerja pada

perusahaan hardware terkemuka. Dan

sebagai hasilnya, seberapa sering Anda

membutuhkan driver ketika Anda

menambahkan hardware baru?

Penulis tidak pernah menambahkan

driver tertentu hanya supaya sebuah

hardware dapat bekerja. VGA card,

sound card, ethernet, dan lain

sebagainya. Apa yang penulis lakukan

adalah mencari dukungan kernel

(umumnya telah ada), melakukan

kompilasi ulang kernel atau modul kalau

perlu dan meminta kepada Debian agar

load modul tersebut pada saat boottime.

Semua beres. Di penyimpanan CD-ROM

milik penulis, tidak ada satupun CD-ROM

driver dari vendor. Semuanya hanyalah

CD-ROM data , CD-RW, CD-R kosong,

dan Debian Woody/Sarge. Kadang-

kadang tentunya ada juga beberapa

VCD.

Linux mungkin belum mengenali

semua hardware. Akan tetapi, masih

tegakah seseorang berpendapat bahwa

Linux tidak ramah dengan hardware?

Pendeteksian hardwarePrinsip pengenalan hardware sebenarnya

bersumber pada kernel. Pada sistem

operasi closed source seperti Microsoft

Windows, kernel mereka telah dilengkapi

dengan berbagai modul (lebih dikenal

dengan istilah driver) yang mereka buat

sendiri atau disumbangkan oleh vendor

hardware. Apabila ternyata hardware

baru dirilis ketika sistem operasi telah

Bertahun-tahun lamanya masalah pengenalanhardware di Linux menghantui calon penggunaatau bahkan pengguna Linux sekalipun. Sekarangtidak lagi. Anda ingin bukti? Mari kita buatfrontend untuk discover agar deteksi perangkatkeras menjadi jauh lebih mudah.

Deteksi Hardwaredengan discover

Page 5: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id56 INFOLINUX SEPTEMBER 2003

dirilis dan digunakan banyak orang, maka

umumnya hardware tersebut datang

dengan CD-ROM Driver.

Pengguna tetap butuh untuk

menginstal driver yang terdapat di dalam

CD-ROM tersebut. Dan dengan

demikian, pihak marketing lantas

menyebutnya sebagai plug and play.

Suatu pujian untuk pihak marketing.

Namun terkadang, istilah plug and play

tersebut dapat juga bertransformasi

menjadi plug and pray (tancapkan dan

berdoalah agar bisa bekerja).

Pada sistem operasi open source

seperti Linux, kernel umumnya juga telah

dilengkapi dengan berbagai modul untuk

dukungan hardware. Modul-modul

tersebut umumnya dibuat oleh para kernel

hacker di seluruh dunia ataupun

disumbangkan oleh perusahaan tertentu.

Sangat wajar pula apabila suatu hardware

dirilis ketika kernel Linux tersebut telah

dirilis dan digunakan oleh orang banyak.

Apabila vendor tidak menyediakan driver

(modul)-nya, maka kita masih punya

harapan karena sistem rilis bazaar yang

dianut oleh komunitas free software

menyebabkan suatu kernel Linux bisa

dirilis dalam tempo yang sangat cepat.

Kita pun dapat menikmati hardware baru.

Rasa-rasanya, kita tidak perlu khawatir.

Pada dasarnya, ketika Anda

menggunakan kernel terbaru, maka

hampir kebanyakan hardware telah

didukung. Apabila belum, Anda mungkin

perlu melakukan kompilasi ulang kernel

atau modul. Untuk hardware, cukup

gunakan saja Xserver terbaru. Rasa-

rasanya semuanya akan beres. Untuk

printer, gunakan saja CUPS. Pada saat

artikel ini ditulis, rekan penulis baru saja

menguji printer Lexmark E323 dan

bekerja dnegan sangat mulus.

Deteksi hardware dari sisipenggunaPermasalahannya, apakah orang yang

baru saja menggunakan Linux perlu sibuk

melakukan kompilasi kernel atau modul

kernel? Atau perlukan seorang pemula

mengutak atik /proc untuk mendapatkan

informasi real time kernel? Atau katakanlah

seseorang membeli ethernet X dan tahu

persis bahwa ethernet X tersebut telah

didukung oleh kernel. Lantas apakah

beliau harus berbengong ria untuk

mencari tahu apa yang harus dilakukan

agar ethernet tersebut bekerja, karena

ketika ditancapkan ethernet tersebut belum

bisa digunakan?

Saat ini, beberapa pendeteksi

hardware seperti Kudzu (oleh Red Hat),

Detect (MandrakeSoft), dan Discover

(Progeny, berbasis pada Detect) memang

cukup diandalkan. Secara umum, Kudzu

sudah sangat memuaskan. Lantas,

bagaimana dengan Discover? Untuk

fleksibilitas, Discover dijalankan pada

Command Line Interface. Di artikel ini,

kita akan menjadikan Discover jauh lebih

indah dan mudah untuk digunakan.

Menggunakan discoverDiscover, merujuk ke situsnya, http://

hackers.progeny.com/discover/, adalah

program pendeteksi hardware yang

menggunakan modul-modul kernel dalam

pendeteksiannya. Discover dapat Anda

gunakan untuk mendeteksi hardware di

sistem Anda. Penulis mencoba Discover

pada berbagai perangkat yang berbeda,

dan secara umum memberikan hasil yang

sangat memuaskan.

Sebelum kita membuat interface yang

ramah dengan Discover, kita akan

melihat bagaimana menyenangkannya

menggunakan Discover. Anda dapat

men-download Discover di http://

archive.progeny.com/progeny/discover/.

Bagi pengguna Debian, Anda dapat

menginstal Discover dengan memberikan

perintah:

apt-get install discover.

Untuk menjalankan Discover,

berikanlah perintah sebagai berikut:

discover

Discover dapat mengenali bus dengan

tipe berikut ini: pci, isa, pcmcia, usb, ide,

scsi, parallel, dan serial. Untuk device,

Discover dapat mendeteksi bridge,

cdrom, ide, scsi, usb, ethernet, modem,

sound, dan video. Selain itu, Discover

dapat pula menampilkan informasi

seputar vendor, model, modul kernel,

nama device, dan xserver serta modul

untuk xserver. Luar biasa, bukan? Berikut

ini adalah beberapa contoh penggunaan

Discover yang penulis coba di komputer

redaksi InfoLINUX.

Pendeteksian VGA card:# discover —vendor video

ATI Technologies, Inc.

# discover —model video

3D Rage IIc [264GT2c GV]

� Interface disco

Deteksi Hardware

Page 6: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

57INFOLINUX SEPTEMBER 2003www.infolinux.web.id

IKLAN

Page 7: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id58 INFOLINUX SEPTEMBER 2003

# discover —xserver video

XFree86

# discover —xdriver video

ati

Pendeteksian ethernet:# discover —vendor ethernet

Compaq Computer Corporation

# discover —model ethernet

ProLiant Integrated Netelligent 10/100

# discover —module ethernet

tlan

Dengan demikian, dengan Discover,

kita bagaikan seorang Sherlock Holmes.

Luar biasa! Khusus untuk video,

tentunya kita tidak mendeteksi modul

kernel. Demikian pula kita tidak akan

mendeteksi xserver dan modul untuk

xdriver pada ethernet.

Interface Discover yanglebih ramahDiscover sendiri telah datang dengan

interface yang sangat memudahkan,

terutama ketika Anda menggunakannya

dalam pembuatan instalasi distro.

Sayangnya, bagi pengguna akhir yang

ingin melihat informasi hardware,

interface CLI seperti ini akan sedikit

merepotkan. Sekarang, bagaimana kalau

kita membuatnya lebih ramah?

Pada prinsipnya, kita akan menampil-

kan segala hal yang dapat dideteksi oleh

Discover pada interface utama kita. Kita

akan menampilkan pendeteksian bridge,

cdrom, ide, scsi, usb, ethernet, modem,

sound, dan video. Setelah pengguna

memilih salah satunya, kita akan

melakukan pendeteksian semua hal yang

berhubungan dengan device-device

tersebut, mulai dari informasi seputar

vendor, model, modul kernel, nama

device, dan xserver serta modul untuk

xserver. Tentunya, untuk mempersingkat

waktu deteksi, kita hanya akan

mendeteksi informasi yang relevan saja.

Sebagai contoh, kita tidak akan

mendeteksi xserver untuk ethernet.

Andaikata apa yang berhasil kita deteksi

ternyata memiliki modul kernel, maka kita

akan menanyakan kepada user untuk

memasukkan modul tersebut ke dalam

kernel. Dan idealnya, apabila apa yang

berhasil kita deteksi adalah VGA card,

maka kita akan menyusun sebagian isi dari

file konfigurasi X Server. Sayangnya, yang

terakhir ini tidak akan dibahas di artikel ini.

Kita akan segera mulai. Berikut ini

adalah langkah-langkah pembuatannya:

1. Variabel-variabel pentingBerikut ini adalah beberapa variabel

penting yang didefinisikan:

PROGNAME=”Disco”

VERSION=”0.1a”

COPYRIGHT=”$PROGNAME $VERSION, (c)

Noprianto, July 2003. GPL”

alias dialog=”dialog —backtitle \”$COPY

RIGHT\””

TEMP=/tmp/$$.disco

ALL=”bridge cdrom ide scsi usb ethernet

modem sound video”

2. Pengecekan ketersediaanprogram dan prasyarat lain

Apa yang akan kita periksa adalah user

yang menjalankannya, ketersediaan

program dan status /proc. Kita akan

menuangkannya dalam fungsi-fungsi:

Kita mulai dengan fungsi checkUser():

function checkUser()

{

superuser=$(grep -e :0:0: /etc/

passwd | cut -d: -f1)

test -z $superuser &&

superuser=”super user”

who=$(id -u)

if [ $who -ne 0 ]

then

echo “You are not $superuser.

Please login as $superuser first”

exit 1

fi

}

Fungsi ini akan memeriksa apakah

user yang menjalankan adalah root atau

bukan. Ada baiknya program ini

dijalankan oleh root. Oleh karena itu, kita

perlu memeriksanya terlebih dahulu.

superuser=$(grep -e :0:0: /etc/

passwd | cut -d: -f1)

test -z $superuser &&

superuser=”super user”

who=$(id -u)

Baris yang pertama akan mencoba

untuk mendapatkan nama user root

(terkadang, ada pengguna yang tidak

menggunakan root sebagai super user,

� Hasil deteksi Discover

Deteksi Hardware

Page 8: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

59INFOLINUX SEPTEMBER 2003www.infolinux.web.id

dan lebih memilih nama user lain

misalnya. Dan disinilah kita akan

memeriksannya). Umumnya, baik user

dan group root memiliki id 0. Maka kita

mengambil informasinya dari /etc/

passwd. Andaikata group dari root

bukanlah 0, maka kita tidak akan

mendapatkan apapun juga.

Dengan demikian, kita mengasumsi-

kan nama dari user root adalah “super

user”. Baris terakhir berguna untuk

memeriksa apakah user yang sedang

aktif adalah root (super user) atau bukan.

Fungsi kedua adalah pemeriksaan

ketersediaan program dan status /proc:

function checkDeps()

{

w_discover=$(which discover)

if [ -z $w_discover ]

then

echo “I cant find discover.

Sorry.”

exit 1

fi

w_dialog=$(which dialog)

if [ -z $w_dialog ]

then

echo “I cant find dialog. Sorry.”

exit 1

fi

m_proc=$(grep -w proc /etc/mtab| tr

-d [:space:])

if [ -z $m_proc ]

then

echo “/proc is not mounted.

Sorry.”

exit 1

fi

}

Secara umum, kita menggunakan

which untuk memeriksa ketersediaan

program. Untuk itu, Anda dapat saja

mengatur $PATH. Program-program

yang kita periksa ketersediaannya pun

belum lengkap karena kita tidak

memeriksa ketersediaan modprobe yang

akan kita gunakan nanti. Untuk

memeriksa apakah /proc di mount atau

tidak, kita akan membaca informasi dari /

etc/mtab. Apa yang kita lakukan di sini

mungkin bukan cara terbaik. Akan tetapi,

dalam sebagian besar kasus, cara seperti

ini cukup memadai.

3. Pembuatan fungsi pembantufunction del()

{

rm -rf $TEMP

rm -rf /tmp/*.disco

}

Fungsi del tersebut berfungsi untuk

mempersingkat pengetikan.

4. Pembuatan fungsi utamafunction main()

{

checkUser

checkDeps

for i in $ALL

do

MENUITEMS=”$MENUITEMS $i

$i”

done

while [ 1 ]

do

dialog —menu “Select device”

20 40 10 $MENUITEMS 2>$TEMP

test $? -eq 1 && break

SELECTED=‘cat $TEMP‘

del

tput reset

tput cup 10 10

echo -n “Please wait [$SE

LECTED detection in progress] ...”

echo “Information for $SE

LECTED” > $TEMP

echo >> $TEMP

detect $SELECTED

dialog —textbox $TEMP 20 60

configureDevice $SELECTED

del

done

del

}

Pertama-tama, kita akan memeriksa

user yang menjalankan dan berbagai

prasyarat lain, Setelah itu, kita akan

membuat menu untuk program dialog.

Kemudian, pada interface program

dialog, kita akan mengulang sampai

pengguna memilih tombol cancel. Untuk

setiap pilihan yang user tentukan,

sebelum melewatkannya ke fungsi lain,

kita akan menampilkan informasi tunggu

terlebih dahulu karena proses pende-

teksian cukup memakan waktu.

Setelah fungsi detect() melaporkan

hasilnya ke dalam file, maka kita akan

menampilkannya kepada user. Setelah

itu, kita akan memanggil fungsi

configureDevice untuk memeriksa apakah

ada yang bisa dilakukan untuk device

tersebut. Load modul kalau ada modul

kernel yang tersedia, atau pembuatan file

konfigurasi X Server yang saat ini belum

tersedia.

5. Fungsi detect()function detect()

{

bridge=”model vendor module”

cdrom=”model vendor device module”

ide=”model vendor device module”

scsi=”model vendor device module”

usb=”model vendor device module”

ethernet=”model vendor module”

modem=”model vendor device

module”

sound=”model vendor module”

video=”model vendor xserver xdriver”

pretest=$(discover $1 2>/dev/null)

if [ -z “$pretest” ]

then

echo -n “[not found] “

echo “NOT FOUND” >> $TEMP

return

fi

echo -n “[found] “

case $1 in

bridge) for i in $bridge

do

echo -n “$i “

Deteksi Hardware

Page 9: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id60 INFOLINUX SEPTEMBER 2003

temp=$(discover —$i $1

2>/dev/null)

test ! -z “$temp” && echo

“$i: $temp” >> $TEMP

done

;;

cdrom) for i in $cdrom

do

echo -n “$i “

temp=$(discover —$i $1

2>/dev/null)

test ! -z “$temp” && echo

“$i: $temp” >> $TEMP

done

;;

ide) for i in $ide

do

echo -n “$i “

temp=$(discover —$i $1

2>/dev/null)

test ! -z “$temp” && echo

“$i: $temp” >> $TEMP

done

;;

scsi) for i in $scsi

do

echo -n “$i “

temp=$(discover —$i $1

2>/dev/null)

test ! -z “$temp” && echo

“$i: $temp” >> $TEMP

done

;;

usb) for i in $usb

do

echo -n “$i “

temp=$(discover —$i $1

2>/dev/null)

test ! -z “$temp” && echo

“$i: $temp” >> $TEMP

done

;;

ethernet) for i in $ethernet

do

echo -n “$i “

temp=$(discover —$i $1

2>/dev/null)

test ! -z “$temp” && echo

“$i: $temp” >> $TEMP

done

;;

modem) for i in $modem

do

echo -n “$i “

temp=$(discover —$i $1

2>/dev/null)

test ! -z “$temp” && echo

“$i: $temp” >> $TEMP

done

;;

sound) for i in $sound

do

echo -n “$i “

temp=$(discover —$i $1

2>/dev/null)

test ! -z “$temp” && echo

“$i: $temp” >> $TEMP

done

;;

video) for i in $video

do

echo -n “$i “

temp=$(discover —$i $1

2>/dev/null)

test ! -z “$temp” && echo

“$i: $temp” >> $TEMP

done

;;

esac

}

Fungsi yang satu ini jelas tidak efisien

dari sisi pemrograman. Apabila

menggunakan associative array,

tentunya tidak akan perlu menjadi

sepanjang ini. Prinsip kerjanya, pertama-

tama kita mendefinisikan terlebih dahului

apa-apa saja yang akan diperiksa yang

relevan dengan device.

Penulis mungkin membuat kesalahan

dan untuk itu penulis memohon maaf.

Setelah itu, kita akan mencoba untuk

mendeteksi keberadaan device secara

umum. Apabila device tersebut tidak

ditemukan, maka kita akan segera keluar

dari fungsi ini. Apabila device ditemukan,

barulah kita mendeteksi apa-apa saja

yang telah ditentukan dan relevan

dengan device tersebut. Setiap

pemeriksaan akan ditulis ke dalam suatu

file sementara dan akan dilaporkan.

6. Fungsi configureDevice()function configureDevice()

{

module=$(grep module: $TEMP | awk

‘{print $2}’)

xdriver=$(grep xdriver: $TEMP | awk

‘{print $2}’)

if [ ! -z $module ]

then

dialog —yesno “Configure $1?”

10 40

if [ $? -eq 0 ]

then

modprobe $module 1>/

dev/null 2>&1

if [ $? -ne 0 ]

then

RESULT=”failed”

else

RESULT=”succeded”

fi

dialog —msgbox “Configure

$RESULT” 10 40

fi

fi

if [ ! -z $xdriver ]

then

dialog —msgbox “X Server

configuration is not implemented at this time.

sorry.” 10 40

fi

}

Apa yang dilakukan oleh fungsi ini

adalah memeriksa apa saja yang bisa

dilakukan dengan device tersebut, Untuk

saat ini, ada dua hal yang akan diperiksa.

Ketersediaan modul kernel atau modul

untuk xserver. Apabila kita menemukan

bahwa device tersebut memiliki modul

kernel, kita akan meminta konfirmasi

kepada user untuk memasukkannya ke

dalam kernel.

Demikianlah, kini Discover menjadi

lebih meriah dan murah digunakan. Ganti

dialog dengan gdialog (kemudian berikan

beberapa perubahan) dan tampilan Anda

akan jauh lebih menyenangkan. Walau,

masih terdapat banyak sekali kekurangan

pada program ini. Berniat untuk

mengembangkannya?�

Noprianto ([email protected])

Deteksi Hardware

Page 10: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

61INFOLINUX SEPTEMBER 2003www.infolinux.web.id

Saat ini, bahasa pemrograman web

semakin menjamur dan semakin

menjanjikan berbagai kemudahan

yang tidak pernah akan terbayang

beberapa saat yang lalu. Sebut saja

PHP. Bahasa yang satu ini, setidaknya

menurut penulis, sangat menyenangkan

untuk digunakan dalam pemrograman

web. Situs-situs web di dunia juga

banyak yang mengandalkan bahasa

yang satu ini. Belum lagi aplikasi-

aplikasi siap pakai lain yang dibuat

dengan PHP.

Web hosting pun tidak mau kalah.

Dukungan PHP jarang sekali absen dalam

layanan mereka. Sebuah fenomena yang

luar biasa. Anda tidak suka PHP? Baik.

Masih ada JSP. Penggemar Java akan

berbahagia sekali dengan alat bantu yang

satu ini. Kemudian, pengguna Python

mungkin akan berbahagia dengan Zope,

termasuk penulis.

Baiklah, sekarang coba kita simak

beberapa hal berikut. Anda butuh untuk

menampilkan informasi sistem via web

browser. Anda mungkin butuh untuk

menyimpan informasi pengunjung. Anda

mungkin perlu menampilkan isi berbagai

file di sistem via web browser. Atau

Anda ingin menyulap berbagai tool

sistem menjadi aplikasi Internet.

Lantas, apakah untuk tugas-tugas

seperti itu, kita perlu menginstal PHP,

atau menginstal JSP, atau menginstal

Zope? Menggunakan PHP mungkin bisa

saja. Akan tetapi, kalau Anda sering

berkutat dengan shell script, kenapa

tidak menggunakan shell script saja?

Tidak ada software tambahan yang

perlu diinstal. Dan yang penting, untuk

tugas-tugas tersebut di atas, Anda

bahkan dapat membuatnya dalam waktu

yang sangat singkat.

Aplikasi CGIPada dasarnya, apa yang akan kita buat

adalah aplikasi CGI. Bicara teori, aplikasi

CGI dapat dibangun dengan bahasa

apapun juga, selama bahasa tersebut

dapat menampilkan output. Dan boleh

dikatakan, hampir semua bahasa

pemrograman tentunya dapat

menampilkan output. Dan apapun

bahasa favorit Anda, Anda dapat

membuat aplikasi web dengan mudah.

Walau alangkah baiknya apabila bahasa

yang Anda gunakan memiliki fungsi

pemrosesan string yang cukup baik. Perl

atau Python adalah contoh yang baik

dalam pemrosesan string. Shell script

dengan tool-tool pendukung seperti awk

akan sangat membantu.

Secara umum, Anda perlu mencetak

header tertentu untuk dikenal sebagai

aplikasi CGI. Untuk menampilkan output

dalam format hypertext, Anda akan

mencetak header berikut ini:

Content-type: text/html

<baris kosong>

Sementara, untuk menampilkan

output berupa teks biasa, Anda akan

mencetak header berikut ini:

Content-type: text/plain

<baris kosong>

Copy-kan program yang Anda buat

di direktori CGI Apache (umumnya

direktori cgi-bin di instalasi Apache

Anda. Untuk Debian, direktori CGI

terletak di /usr/lib/cgi-bin). Jangan lupa

untuk memastikan program Anda

memiliki permission executable. Secara

default, akseslah aplikasi CGI Anda di

alamat http://<HOST>/cgi-bin/

<PROGRAM_ANDA>.

Sebagai perbandingan, berikut ini

adalah contoh aplikasi dalam beberapa

bahasa.

Bahasa C#include <stdio.h>

int main(void)

{

printf(“Content-type: text/plain”);

printf(“\n\n”);

printf(“Hello World”);

return 0;

}

Lakukanlah kompilasi dan akseslah

lewat web browser Anda. Maka Anda

telah sukses membuat aplikasi CGI

dengan bahasa C.

Bahasa PERL#!/usr/bin/perl

print “Content-type: text/plain”;

print “\n\n”;

print “Hello World”;

- bahasa python

#!/usr/bin/python

print “Content-type: text/plain”

print “\n”

print “Hello World”

- shell script

#!/bin/sh

Pemrograman Webdengan Shell ScriptShell script tidak hanya dapat digunakan administrasi sistem.Dengan beberapa baris kode shell script, Anda bahkan dapatmenghasilkan aplikasi web yang mengagumkan. Tidak perluinstal macam-macam software, hanya Apache dan shell yangmenuruti standar POSIX saja yang diperlukan.

Shell Script

Page 11: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id62 INFOLINUX SEPTEMBER 2003

� Program x2web� Informasi internal web server

echo “Content-type: text/plain”

echo

echo “Hello World”

Dengan demikian, Anda dapat melihat

bahwa betapa menyenangkannya

melakukan pemrograman CGI, walau

untuk orang-orang yang hidup di

teknologi terkini, boleh jadi CGI akan

ditertawakan.

CGI dan informasi internalweb serverDalam suatu aplikasi web, terkadang

kita perlu mengetahui informasi-

informasi seperti browser apa yang

digunakan oleh pengguna, dari alamat

mana pengguna kita mengakses aplikasi

kita dan berbagai variabel penting

lainnya. Untuk itu, Anda tidak perlu

repot-repot. Web server akan

menyediakannya untuk Anda.

Anda bisa mendapatkan informasi-

informasi tertentu dengan mengakses

variabel yang di-export oleh web server.

Cara lain untuk mendapatkan informasi-

informasi tersebut adalah mengambil

hasil yang dikeluarkan oleh program

env. Keluaran dari program env akan

lebih rumit untuk dipecah-pecah.

Document root $DOCUMENT_ROOT

HTTP accept $HTTP_ACCEPT

HTTP accept charset

$HTTP_ACCEPT_CHARSET

HTTP accept encoding

$HTTP_ACCEPT_ENCODING

HTTP connection $HTTP_CONNECTION

HTTP host $HTTP_HOST

HTTP keep alive $HTTP_KEEP_ALIVE

HTTP user agent $HTTP_USER_AGENT

Path $PATH

Remote address $REMOTE_ADDR

Remote port $REMOTE_PORT

Script filename $SCRIPT_FILENAME

Server address $SERVER_ADDR

Server admin $SERVER_ADMIN

Server name $SERVER_NAME

Server port $SERVER_PORT

Server signature $SERVER_SIGNATURE

Server software $SERVER_SOFTWARE

Unique id $UNIQUE_ID

Gateway interface

$GATEWAY_INTERFACE

Server protocol $SERVER_PROTOCOL

Request method $REQUEST_METHOD

Query string $QUERY_STRING

Request URI $REQUEST_URI

Script name $SCRIPT_NAME

Berikut ini adalah contoh program

untuk mendapatkan informasi-informasi

tersebut:

#!/bin/sh

echo “Content-type: text/plain”

echo

echo “Greetings: Halo Superman !”

echo

echo “Apache Environment:”

echo “Document root: $DOCUMENT_ROOT”

echo “HTTP accept: $HTTP_ACCEPT”

echo “HTTP accept charset:

Shell Script

$HTTP_ACCEPT_CHARSET”

echo “HTTP accept encoding:

$HTTP_ACCEPT_ENCODING”

echo “HTTP connection:

$HTTP_CONNECTION”

echo “HTTP host: $HTTP_HOST”

echo “HTTP keep alive:

$HTTP_KEEP_ALIVE”

echo “HTTP user agent:

$HTTP_USER_AGENT”

echo “Path: $PATH”

echo “Remote addr: $REMOTE_ADDR”

echo “Remote port: $REMOTE_PORT”

echo “Script filename: $SCRIPT_FILENAME”

echo “Server addr: $SERVER_ADDR”

echo “Server admin: $SERVER_ADMIN”

echo “Server name: $SERVER_NAME”

echo “Server port: $SERVER_PORT”

echo “Server signature:

$SERVER_SIGNATURE”

echo “Server software:

$SERVER_SOFTWARE”

echo “Unique id: $UNIQUE_ID”

echo “Gateway interface:

$GATEWAY_INTERFACE”

echo “Server protocol:

$SERVER_PROTOCOL”

echo “Request method:

$REQUEST_METHOD”

echo “Query string: $QUERY_STRING”

echo “Request URI: $REQUEST_URI”

echo “Script name: $SCRIPT_NAME”

echo

echo “Sleeping time, superman !”

#Try to use echo ‘env‘. Looks more

complicated, but more informative !

Page 12: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

63INFOLINUX SEPTEMBER 2003www.infolinux.web.id

Informasi sistemUntuk kesempatan ini, keamanan sistem

akan kita abaikan terlebih dahulu.

Pernahkah Anda ingin melihat informasi

ruang kosong penyimpanan Anda, daftar

proses, informasi memori, informasi

CPU, informasi partisi harddisk, informasi

file sistem yang dimunt, informasi kernel,

user-user dan group-group di sistem via

web browser? Bagaimana kalau kita

membuatnya sendiri?

Sebutlah program yang akan kita buat

ini dengan nama x2web. Program x2web

ini memiliki kemampuan untuk

menampilkan hal-hal yang telah

disebutkan sebelumnya via web browser.

Interface-nya akan ditampilkan cukup

ramah dengan bantuan hyperlink. Dan

untuk mempermudah peng-copy-an,

x2web hanya akan memiliki satu file saja.

Untuk setiap tugas yang dikerjakan,

kita akan memproses variabel

$QUERY_STRING. Apabila variabel

yang satu ini belum diset, maka sebuah

menu akan ditampilkan. Sementara

apabila $QUERY_STRING memiliki nilai

tertentu, maka kita akan melakukan

parsing sederhana dan melakukan tugas

yang bersesuaian.

Kita akan memiliki sebuah fungsi

penting, yang kita beri nama wrapper().

Fungsi ini akan melakukan parsing

$QUERY_STRING dan melakukan tugas

yang bersesuaian. Fungsi lain seperti

fungsi signature() hanya akan menampilkan

informasi seputar web server. Berikut ini

adalah source code selengkapnya.

Penjelasan akan diberikan setelahnya.

#!/bin/sh

PROGNAME=”x2web”

VERSION=”0.1a”

COPYRIGHT=”$PROGNAME $VERSION, (c)

Noprianto, July 2003. GPL.”

function wrapper()

{

TASK=$(echo $QUERY_STRING |

awk -F= ‘{print $2}’)

echo “<a

href=$SCRIPT_NAME>back to menu</a>”

echo “<pre>”

case $TASK in

df) df

;;

psax) ps ax

;;

meminfo) cat /proc/meminfo

;;

cpuinfo) cat /proc/cpuinfo

;;

part) cat /proc/partitions

;;

mtab) cat /etc/mtab

;;

uname) uname -a

;;

userlist) sum=$(cat /etc/passwd

| wc -l)

echo “found $sum

users<hr>”

cat /etc/passwd | cut -d: -

f1

;;

grouplist) sum=$(cat /etc/group |

wc -l)

echo “found $sum

groups<hr>”

cat /etc/group | cut -d: -f1

;;

esac

echo “</pre>”

echo “<a

href=$SCRIPT_NAME>back to menu</a>”

signature

}

function signature()

{

echo “<hr>”

echo “$COPYRIGHT”

echo “$SERVER_SIGNATURE”

}

echo “Content-type: text/html”

echo

echo “<hr>”

if [ -z $QUERY_STRING ]

then

echo “<body>”

echo “<ul>”

echo “<li><a

href=$SCRIPT_NAME?task=df>disk free</

a></li>”

Shell Script

Page 13: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id64 INFOLINUX SEPTEMBER 2003

� Statistik pengunjung� Program x2web sedang menampilkan daftar proses

echo “<li><a

href=$SCRIPT_NAME?task=psax>process

list</a></li>”

echo “<li><a

href=$SCRIPT_NAME?task=meminfo>Memory

information</a></li>”

echo “<li><a

href=$SCRIPT_NAME?task=cpuinfo>CPU

information</a></li>”

echo “<li><a

href=$SCRIPT_NAME?task=part>Partition

information</a></li>”

echo “<li><a

href=$SCRIPT_NAME?task=mtab>Mounted

filesystem</a></li>”

echo “<li><a

href=$SCRIPT_NAME?task=uname>Kernel

information</a></li>”

echo “<li><a

href=$SCRIPT_NAME?task=userlist>All

users in system</a></li>”

echo “<li><a

href=$SCRIPT_NAME?task=grouplist>All

groups in system</a></li>”

echo “</ul>”

signature

echo “</body>”

else

wrapper $QUERY_STRING

fi

Bagaimana? Bukanlah source

programnya pun cukup singkat dan

sederhana?

if [ -z $QUERY_STRING ]

then

echo “<body>”

echo “<ul>”

echo “<li><a

href=$SCRIPT_NAME?task=df>disk free</

a></li>”

echo “<li><a

href=$SCRIPT_NAME?task=psax>process

list</a></li>”

...

...

...

echo “<li><a

href=$SCRIPT_NAME?task=grouplist>All

groups in system</a></li>”

echo “</ul>”

signature

echo “</body>”

else

wrapper $QUERY_STRING

fi

Blok kode ini bertugas untuk

menampilkan menu apabila variabel

$QUERY_STRING belum diset. Kita

menggunakan penguji -z untuk

mengetahui apakah suatu string adalah

string kosong atau tidak.

function wrapper()

{

TASK=$(echo $QUERY_STRING |

awk -F= ‘{print $2}’)

echo “<a

href=$SCRIPT_NAME>back to menu</a>”

echo “<pre>”

case $TASK in

df) df

;;

psax) ps ax

;;

meminfo) cat /proc/meminfo

;;

cpuinfo) cat /proc/cpuinfo

;;

...

...

...

grouplist) sum=$(cat /etc/group |

wc -l)

echo “found $sum

groups<hr>”

cat /etc/group | cut -d: -f1

;;

esac

echo “</pre>”

echo “<a

href=$SCRIPT_NAME>back to menu</a>”

signature

}

Kita akan membahas fungsi wrapper()

tersebut. Pertama-tama, kita akan

memroses $QUERY_STRING dengan

memisahkannya menjadi dua bagian

dengan token pemisah adalah tanda sama

dengan (=). Untuk itu, kita meminta

bantuan kepada program awk. Setelah itu,

apa yang kita lakukan hanyalah membaca

/proc ataupun file-file lain di sistem.

Dengan demikian, kita dapat melihat

betapa mudahnya menampilkan informasi

sistem Anda ke web browser.

Shell Script

Page 14: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

65INFOLINUX SEPTEMBER 2003www.infolinux.web.id

Kembali ke masalah keamanan.

Adalah sangat berbahaya apabila

program ini Anda jalankan di lingkungan

di mana setiap orang dapat dengan

mudah mengaksesnya. Apakah Anda

rela apabila setiap orang mengetahui

proses apa saja yang sedang berjalan

dan kemudian memanfaatkan kelemahan

salah satu dari program tersebut? Atau

relakah jika setiap orang mengintip setiap

rahasia dapur Anda? Tidak. Pembuatan

password bisa Anda gunakan.

Selain itu, pembuatan direktori

terproteksi menggunakan .htaccess juga

mungkin akan membantu. Namun,

apabila Anda ingin membuat administrasi

via web, pelajarilah prinsip kerja webmin.

Statistik pengunjungMengetahui jumlah pengunjung situs kita

selalu menjadi hal yang menyenangkan.

Tentunya, setelah bercapai-capai ria

membuat website, senyum lebar akan

semakin merekah ketika semakin banyak

pengunjung yang menyibukkan web

server kita. Terkadang, kita perlu untuk

mencatat informasi pengunjung seperti

tanggal dan waktu, alamat pengunjung

dan user agent yang digunakan. Dan

sekarang, bagaimana kalau kita

membuatnya sendiri?

Pertama-tama, apa yang perlu kita

lakukan adalah mendefinisikan file untuk

menampung semua informasi tersebut.

Tempatkan file tersebut di lokasi yang

cukup aman dan pastikan user yang

menjalankan Apache memiliki hak tulis di

lokasi tersebut. Di contoh kali ini, kita

akan menyimpannya di /tmp. Setelah itu,

kita perlu pula memastikan token yang

kita gunakan untuk memisahkan setiap

field informasi yang kita simpan. Contoh

ini akan menggunakan field ::: (tiga buah

titik dua) sebagai pemisah.

Prinsip kerjanya sangatlah sederhana.

Script akan membaca $QUERY_STRING

dan menentukan tugas apa yang akan

dikerjakan. Apabila $QUERY_STRING

bernilai stat, maka kita akan menulis ke

dalam ‘database’. Sementara, apabila

$QUERY_STRING adalah show, maka

kita akan menampilkan semua isinya ke

web browser. Berikut ini adalah source

code selengkapnya.

Shell Script

#!/bin/sh

FSTAT=/tmp/stats

function do_stat()

{

test ! -f $FSTAT && touch $FSTAT

echo

“$(date):::$REMOTE_ADDR:::$HTTP_USER_

AGENT:::” >> $FSTAT

}

function do_show()

{

echo “<pre>”

sum=$(cat $FSTAT | wc -l 2>/dev/

null)

echo “$sum records found”

echo “<hr>”

test -f $FSTAT && cat $FSTAT | sed

-e “s/:::/<br>/g”

echo “</pre>”

}

function wrapper()

{

case $1 in

stat) do_stat;;

show) do_show;;

esac

}

echo “Content-type: text/html”

echo

if [ ! -z $QUERY_STRING ]

then

wrapper $QUERY_STRING

fi

exit 0

Bagaimana pendapat Anda tentang

pemrograman CGI dengan shell script?

Apabila seseorang benar-benar

mendalami seni pemrograman shell,

maka aplikasi CGI yang berkualitas tinggi

pun dapat diciptakan. Hanya, aspek-

aspek keamanan pun harus senantiasa

diperhatikan agar aplikasi tersebut tidak

menjadi senjata makan tuan.�

Noprianto ([email protected])

Page 15: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id66 INFOLINUX SEPTEMBER 2003

Statistik Lagu XMMS

Hampir semua penikmat musik di

Linux pasti mengenal XMMS.

Wajar adanya karena XMMS

menawarkan kemiripan yang luar biasa

dengan Winamp, salah satu pemutar

audio dan video paling terkenal di dunia

ini. Selain itu, tentunya XMMS pun

sangat andal untuk digunakan.

Untuk koleksi musik, hampir semua

penikmat musik mengoleksi musik-

musiknya baik secara manual ataupun

menggunakan program pengatur dan

pendata lagu. Penulis sendiri

mengaturnya secara manual.

Dari pengalaman penulis sebagai

penikmat musik blues dan lagu-lagu

lama, semua lagu yang dimasukkan di

dalam playlist hanya akan didengarkan

saja. Akan tetapi, terkadang ada lagu

yang dalam situasi dan kondisi tertentu

menjadi sangat menarik untuk didengar

sehingga didengar berulang-ulang.

Beberapa saat yang lalu, penulis merasa

ingin mengetahui lagu-lagu apa aja yang

sebenarnya paling sering di dengarkan.

Dan tentu saja juga lagu yang paling

jarang didengarkan. Suatu hari, lagu-lagu

yang paling jarang didengarkan akan

menghilang dari harddisk.

Song ChangeXMMS sendiri sebenarnya menyediakan

sarana bagi kita untuk mencatat lagu-lagu

apa saja yang telah kita dengarkan. Hal

tersebut dapat dilakukan dengan

mencatatkan nama file lagu atau judul

lagu setiap kali terjadi pergantian lagu.

Dengan plug-in song change, semua hal

tersebut dapat dilakukan dengan mudah.

Bukalah XMMS dan bukalah window

Preferences (bisa Anda lakukan dengan

menekan kombinasi tombol CTRL+p).

Masih di window Preferences, pilihlah

tab Effects/General Plugins. Kemudian, di

bagian bawah tab tersebut, pilihlah

General plugin Song Change, dan kliklah

tombol Configure. Jangan lupa untuk

mengaktifkan pilihan Enable plugin

sesudahnya. Sebuah window dengan

judul Song Change Configuration akan

terbuka untuk Anda. Di bagian song

change, Anda akan menjumpai sebuah

input box di mana perintah shell script

dapat diberikan begitu pergantian lagu

terjadi.

Apa yang akan kita lakukan adalah

mencatat informasi lagu tersebut.

Sebagai contoh, pemberian perintah:

echo “%f” >> ~/xmms.log

akan mengisi file xmms.log di home

directory Anda dengan semua nama file

lagu yang telah Anda dengarkan. Apa

saja selain nama file yang bisa

dimasukkan? Berikut ini adalah daftar

selengkapnya:

� %F – Frekuensi (dalam hertz)

� %c – Jumlah channel

� %f – Nama file dengan path

� %l – panjang lagu dalam milidetik

� %n – Nama lagu

� %r – Rating lagu

� %s – Nama lagu

� %t – Posisi dalam playlist

Artikel ini akan memfokuskan pada

nama file lagu yang telah didengarkan.

Struktur dataKarena kita akan mengurutkan lagu-lagu

mana saja yang paling sering didengar

sampai yang paling jarang didengar,

maka kita tidak dapat memasukkan lagu-

lagu apa saja yang telah kita dengar

begitu saja ke dalam suatu file.

Alasannya, kita perlu menambahkan

jumlah lagu tersebut setelah didengarkan.

Apabila yang satu ini telah dikerjakan,

maka penampilan dan pengurutannya

akan menjadi jauh lebih mudah.

Untuk mudahnya, kita akan membuat

sebuah program yang akan menulis dan

membaca dari sebuah file database.

Format dari file database tersebut

adalah:

<jumlah_didengarkan>:::<nama_file_lagu>

Kita memiliki dua field dengan

pemisah field adalah tiga buah tanda titik

dua (:::). Field <jumlah_didengarkan>

akan selalu ditambahkan ketika lagu yang

sama diputar kembali. Dengan demikian,

kita memiliki entri yang unik di dalam

database tersebut. Penampilan datanya,

baik ke console, ataupun ke web, akan

menjadi sangat mudah.

Cara kerja programProgram yang akan kita bangun adalah

program shell script dengan sedikit

penggunaan awk. Kita akan memberikan

nama xmmsstat untuk program ini.

Selain dapat menampilkan laporan di

console, program juga siap menjadi

aplikasi CGI dan dapat menampilkan

laporan di web.

Apa yang pertama-tama kita periksa

adalah variabel $QUERY_STRING.

Apabila variabel ini di-set atau bukan

merupakan string kosong, maka kita akan

menganggapnya aplikasi CGI dan akan

memanggil fungsi yang bersesuaian

untuk menampilkan laporan di web.

Apabila tidak ada variabel

$QUERY_STRING, maka kita akan

memeriksa keberadaan parameter pertama

pada program. Apabila tidak ada

Senang mendengarkan lagu MP3 atau OGGmenggunakan XMMS? Lagu mana yangpaling sering Anda dengarkan? Lagu manayang paling jarang Anda dengarkan? Tidakingat? Mari catat dengan membuat statistiklagu-lagu yang diputar dengan XMMS!

Statistik Lagu XMMS

� Window Preferences XMMS

Page 16: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

67INFOLINUX SEPTEMBER 2003www.infolinux.web.id

Statistik Lagu XMMS

parameter apapun yang diberikan dan

$QUERY_STRING bernilai kosong, maka

kita akan menampilkan laporan di

console. Sebaliknya, apabila ada

parameter pertama, maka kita akan

melakukan pengubahan pada database.

Untuk fungsi pengubahan database,

pertama-tama kita akan menyaring

database asli dan menampilkan isinya ke

file sementara kecuali record nama file

yang ingin dimasukkan. Apabila nama

file tersebut ternyata diberikan untuk kali

pertama, maka isi file sementara akan

sama persis dengan database asli.

Kemudian, langkah kedua adalah

menyaring isi database asli dan

mengambil record yang bersesuaian

dengan nama file yang dimasukkan.

Apabila ternyata nama file tersebut

diberikan untuk pertama kalinya, maka

secara sederhana kita akan memasukkan

record 1:::<nama_file_lagu> karena

lagu tersebut diputar untuk pertama

kalinya. Apabila ternyata lagu yang ingin

dimasukkan sudah pernah diputar

sebelumnya, maka kita akan memisahkan

kedua field tersebut, kemudian

menambahkan nilai untuk field

<jumlah_didengarkan> dan kemudian

memasukkan kembali record tersebut ke

database.

Sementara untuk penampilan laporan,

sederhananya, kita hanya menampilkan

isi database dalam keadaan terurut dan

memisahkan setiap barisnya berdasarkan

token pemisah field, yaitu tiga buah

tanda titik dua (:::). Menggunakan awk,

kita akan mencetak karakter # sejumlah

field <jumlah_didengarkan> diikuti

dengan nama file lagu.

Untuk fungsi aplikasi CGI, secara

sederhana kita hanya menambahkan

header dan kemudian memanggil fungsi

penampilan laporan.

Kode! Kode! Kode!Kode yang akan kita buat sangatlah

pendek. Efektifnya, tidak akan melebihi

50 baris. Kita akan memulainya langkah

demi langkah:

1. Definisi variabel pentingPROGNAME=”XmmsStat”

VERSION=”0.1a”

COPYRIGHT=”$PROGNAME $VERSION, (c)

Noprianto, July 2003. GPL.”

DATA=”/home/users/nop/xmmsstatdata”

TEMP=/tmp/$$.xmmsstat

Jangan lupa untuk mengatur variabel

DATA agar sesuai dengan konfigurasi

Anda.

2. Definisi fungsi yang diperlukanfunction del()

{

rm -rf $TEMP

rm -rf /tmp/*.xmmsstat

}

Fungsi del() bertugas untuk

melakukan pembersihan file-file

sementara.

function stat()

{

cat $DATA | grep -wvi “$1” > $TEMP

UPDATE=”$(cat $DATA | grep -wi

“$1”)”

mv $TEMP $DATA

del

if [ ! -z “$UPDATE” ]

then

SONG=”$(echo “$UPDATE” |

awk -F”:::” ‘{print $2}’)”

FREQ=”$(expr $(echo “$UP

DATE” | awk -F”:::” ‘{print $1}’) + 1)”

UPDATE=”$FREQ:::$SONG”

else

UPDATE=”1:::$1"

fi

echo “$UPDATE” >> $DATA

}

Fungsi stat() bertugas untuk

mengubah database. Di sini,

penggunaan program grep sangatlah

membantu. Dengan memberikan opsi -v

pada program grep, kita bisa

mendapatkan hasil inversi penyaringan.

Dengan opsi -w, kita dapat

menyaringnya perkata. Untuk

menambahkan field

<jumlah_didengarkan>, kita

menggunakan program expr.

function show()

{

cat $DATA | sort -r | awk -F”:::” ‘

{

ORS=””

for (i = 1 ; i <= $1 ; i++ )

{

print “#”;

}

print “ “$2”\n”;

}

}

� Window konfigurasi Song Change

Page 17: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id68 INFOLINUX SEPTEMBER 2003

Fungsi show() bertugas untuk

menampilkan laporan. Sederhananya,

kita hanya menampilkan isi database

dan memberikan keluarannya ke

program sort yang telah siap menerima

dengan senang hati. Kemudian, dengan

program awk, kita pun memisahkan

fieldnya dengan token tiga buah tanda

titik dua (:::). Sintaks awk yang mirip

dengan bahasa C cukup fleksibel untuk

digunakan. Dengan awk, kita

menampilkan karakter # sejumlah field

<jumlah_didengarkan>.

function become_cgi()

{

test $QUERY_STRING != “show” &&

return

echo “Content-type: text/plain”

echo

show

}

Fungsi yang satu ini benar-benar tidak

berguna. Hanya memeriksa apakah

$QUERY_STRING bernilai show.

menampilkan header sebagai aplikasi CGI

dan kemudian memanggil fungsi show().

Berbagai perbaikan seperti pembuatan

grafik batang dengan penggunaan tabel

dapat ditambahkan di masa mendatang.

3. Fungsi utamatest ! -f $DATA && touch $DATA

if [ -z $QUERY_STRING ]

Statistik Lagu XMMS

then

test -z “$1” && show && exit 0

test “$1” != “%f” && stat “$1”

exit 0

else

become_cgi

exit 0

fi

del

Pertama-tama, kita memeriksa

keberadaan database. Apabila database

tidak tersedia, maka kita akan

membuatnya dengan program touch.

Selanjutnya, kita akan memeriksa apakah

variabel $QUERY_STRING diset atau

tidak. Dan seperti yang telah dibahas,

kita akan mendelegasikan setiap tugas

kepada fungsi yang bersesuaian.

PenggunaanLetakkanlah program tersebut di direktori

cgi web server (penulis menggunakan

Apache) Anda agar dapat dengan mudah

diakses bagi Anda yang ingin

menampilkan juga laporan di web. Lokasi

cgi umumnya di bawah direktori instalasi

Apache (/usr/lib/cgi-bin untuk distro

Debian). Apabila Anda hanya ingin

menjadikannnya sebagai aplikasi console

biasa, penting juga untuk menambahkan

lokasi program ini ke dalam $PATH atau

mengopikan program ini ke lokasi yang

telah termasuk dalam $PATH. Membuat

link file mungkin merupakan alternatif

yang aman dan tidak mengotori sistem.

� Laporan di web � Laporan di console

Semuanya kembali kepada pengaturan

sistem Anda masing-masing.

Setelah itu, buka kembali window

konfigurasi untuk plugin Song Change

dan berikan perintah berikut ini pada

input box yang telah disediakan:

/usr/lib/cgi-bin/xmmsstat “$(basename “%f”)”

Program basename digunakan untuk

mendapatkan nama filenya saja.

Bagi Anda yang ingin mengakses

laporan via web browser, berikanlah

alamat berikut ini:

http://<HOST>/cgi-bin/xmmsstat?show

Bagi Anda yang ingin menampilkan

laporan di console, berikanlah perintah

berikut ini:

/usr/lib/cgi-bin/xmmsstat

Gantilah /usr/lib/cgi-bin sesuai dengan

konfigurasi Anda masing-masing.

Demikianlah, kini kita dapat melihat

lagu apa saja yang paling sering kita buka.

Lagu mana yang paling jarang dibuka pun

dapat dipertimbangkan untuk dihapus.

Program ini masih memiliki banyak

kekurangan, terutama pada penampilan

untuk halaman web. Selain itu, ada

baiknya juga bagi kita untuk menampilkan

tanggal dan waktu pemutaran untuk

setiap lagu. Hal tersebut akan

menjadikannya lebih informatif. Program

ini tersedia bebas untuk dimodifikasi dan

disebarluaskan. Sebagai mana halnya

kebebasan di dunia free software.�Noprianto ([email protected])

Page 18: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

69INFOLINUX SEPTEMBER 2003www.infolinux.web.id

Dengan tool-tool standar seperti bash dan dialog, kita dapat membanguninterface yang ramah untuk manajemen modul kernel. Karena insmod danrmmod terkadang merepotkan.

Membangun ManajemenModul Kernel yang Ramah

Manajemen Modul Kernel

Kehadiran sistem modul di kernel

dalam beberapa hal sangatlah

membantu kita. Dengan mudah

kita dapat menambahkan apa yang

dibutuhkan oleh kernel maupun

mengurangi apa yang sudah tidak

dibutuhkan lagi. Kernel tidak lagi menjadi

sebesar raksasa dan begitu rakus.

Walau demikian, terkadang proses

memasukkan atau menghapus modul

kernel dapat menjadi cukup merepotkan.

Salah satu contohnya adalah ketika Anda

ingin memasukkan modul dengan fungsi

tertentu, namun nama modulnya tidak

Anda ketahui. Anda pun segera menuju

direktori /lib/modules/

<VERSI_KERNEL> dan mulai mencari-

cari. Karena modul kernel diletakkan

dalam berbagai direktori, maka

navigasinya akan cukup merepotkan.

Menggunakan utiliti seperti Midnight

Commander mungkin bisa membantu.

Pada distro Debian, sebuah program

dengan nama modconf sangatlah

bermanfaat untuk melakukan navigasi

pada modul-modul kernel dan sekaligus

melakukan manajemen sederhana.

Dengan menjalankan modconf, Anda

akan diberikan daftar modul kernel dan

keterangan apakah modul tersebut telah

diinstal atau belum. Di program ini pula,

Anda dapat memasukkan atau

menghapus modul kernel dengan satu

dua kali penekanan tombol ENTER.

Siapkan editor teks Anda dan kita

akan segera memulai pekerjaan kita.

Berikut ini adalah langkah-langkahnya:

1. Fitur programPertama-tama, tentunya kita perlu

mengetahui dahulu apa yang akan kita

buat. Secara umum, program yang kita

bangun mampu untuk mendeteksi versi

kernel yang digunakan, kemudian akan

mendaftar seluruh modul kernel. Hal

tersebut bisa didapat menggunakan

program uname dan ls. Kemudian,

dengan program dialog, kita akan

membuat navigasi modul per direktori.

Dalam artian, pengguna dapat masuk

ke suatu direktori yang dapat

mengandung direktori lain atau modul

kernel. Apabila pengguna memilih

suatu direktori, maka tindakan default

dari program adalah masuk ke direktori

tersebut dan mandaftar seluruh

modulnya. Dalam mendaftar seluruh

modul tersebut, program akan mencoba

mengetahui apakah modul tersebut

telah dimasukkan ke dalam kernel. Kita

akan menginformasikan hal tersebut

kepada pengguna.

Apabila pengguna memilih suatu

modul, maka tindakan default dari

program adalah memeriksa apakah

modul tersebut telah dimasukkan ke

dalam kernel. Apabila modul tersebut

telah dimasukkan, maka kita akan

menanyakan apakah pengguna akan

menghapus modul tersebut dari kernel.

Apabila modul tersebut belum

dimasukkan ke kernel, maka kita akan

menanyakan apakah pengguna ingin

memasukkan modul tersebut ke dalam

kernel.

Kekurangan utama dari program ini

adalah langsung melakukan terminasi

(keluar) apabila pengguna menekan

tombol Cancel.

Program ini akan kita beri nama

mymodconf.

2. Membuat beberapa variabel awalyang dibutuhkan

Sebagai suatu aplikasi standar, kita akan

mendefinisikan beberapa variabel seperti

informasi versi dan hak cipta. Kemudian,

kita juga perlu untuk membuat file

sementara yang dibutuhkan oleh

program dialog. Berikut ini adalah

beberapa variabelnya:

TEMP=/tmp/$$.mymodconf

VERSION=0.1a

COPYRIGHT=”(c) Noprianto, June 2003.

GPL”

Setelah itu, kita akan mencoba untuk

mendapatkan versi kernel dan direktori

modul kernel. Setelah itu, apa yang kita

dapatkan akan diasosiasikan ke variabel-

variabel berikut:

KERNEL_VERSION=$(uname -r)

KERNEL_MODULES_DIR=/lib/modules/

$KERNEL_VERSION/kernel/

selected=””

WORKING=$KERNEL_MODULES_DIR/

$selected

Variabel KERNEL_VERSION

dimaksudkan sebagai versi kernel yang

sedang digunakan. Versi kernel perlu

didapatkan untuk mengetahui lokasi

direktori modul kernel yang disimpan

dalam variabel KERNEL_MODULES_

DIR.

Variabel selected dimaksudkan untuk

mendapatkan apa yang dipilih oleh

pengguna. Variabel selected juga akan

mempengaruhi lokasi direktori kerja kita

yang disimpan dalam variabel WORK-

ING.

Selanjutnya, untuk memperindah

program kita, kita akan membuat alias

untuk program dialog berikut agar

program kita memiliki tampilan yang

seragam:

alias dialog=”dialog —backtitle ‘My Kernel

Module Configurator v$VERSION

($KERNEL_VERSION)’”

Page 19: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id70 INFOLINUX SEPTEMBER 2003

� mymodconf � Mendaftar modul dan statusnya

Manajemen Modul Kernel

3. Mendefinisikan beberapa fungsiyang diperlukan

Berikutnya adalah mendefinisikan fungsi

yang dibutuhkan dalam program kita.

Dalam hal ini, kita akan mendefinisikan

tiga fungsi: deltemp(), is_installed() dan

getfiles(). Masing-masing akan

menghapus file sementara, mengetahui

apakah suatu modul telah dimasukkan

dalam kernel atau belum dan

mendapatkan file-file dalam direktori

modul kernel.

Kita akan memulai dengan fungsi

yang paling sederhana: deltemp(). Fungsi

ini hanya memiliki satu perintah untuk

menghapus file sementara. Fungsi ini

tidak memerlukan penjelasan lebih lanjut.

function deltemp()

{

rm -rf $TEMP

}

Berikutnya adalah fungsi is_installed(),

yang berfungsi untuk mengetahui apakah

suatu modul telah dimasukkan ke dalam

kernel atau belum. Perlu dicatat, fungsi

ini belumlah sempurna dan terkadang

mengembalikan hasil yang tidak sesuai.

Penjelasan fungsi akan diberikan

setelahnya.

function is_installed()

{

MODULE=‘echo $i | awk -F. ‘{print $1}’‘

INSTALLED=‘lsmod | grep -w $MODULE

| wc -l 2>/dev/null‘

return $INSTALLED

}

Kita akan membahas baris pertama:

MODULE=‘echo $i | awk -F. ‘{print $1}’‘

Baris ini dimaksudkan untuk

menghilangkan ekstensi .o dari nama file

yang diterima sebagai parameter pertama

fungsi ini. Dengan menggunakan

program awk, kita memisahkan nama file

tersebut dan mengambil bagian

pertamanya. Hal ini sejauh ini bekerja,

walau perlu diperhatikan dan diperbaiki

apabila nama file modul memiliki lebih

dari satu karakter titik. Sejauh ini, nama

file modul umumnya hanya memiliki satu

karakter titik.

INSTALLED=‘lsmod | grep -w $MODULE |

wc -l 2>/dev/null‘

Kemudian, variabel INSTALLED

dimaksudkan untuk mengetahui apakah

modul telah dimasukkan ke dalam kernel.

Cara ini bahkan lebih berbahaya daripada

baris sebelumnya. Saran dan kritik

diharapkan. Untuk mengetahui suatu

modul telah dimasukkan ke kernel atau

belum, secara sederhana, kita hanya

menjalankan perintah lsmod yang akan

mendaftar modul-modul kernel yang

telah dimasukkan. Hasil keluaran tersebut

kita saring sesuai dengan nama modul

yang ingin diperiksa. Untuk

meningkatkan akurasi, kita akan

memberikan opsi -w pada program grep

yang berfungsi untuk melakukan

saringan per kata (dalam beberapa

kondisi, opsi -w ini justru akan

merepotkan).

Kemudian, kita akan sampai pada

fungsi berikutnya: getfiles(). Fungsi ini

akan mendaftar file-file dalam direktori.

Apabila yang didapatkan adalah file,

maka fungsi ini juga akan memeriksa

apakah modul tersebut telah

dimasukkan ke dalam kernel. Secara

umum, fungsi ini dimaksudkan untuk

menyusun rangkaian parameter bagi

program dialog.

function getfiles()

{

files2=””

files=”$(ls $1)”

for i in $files

do

if [ -d $1/$i ]

then

files2=”$files2 $i $i”

else

is_installed $i

if [ $? -eq 0 ]

then

files2=”$files2 $i

not-installed”

else

files2=”$files2 $i

installed”

fi

fi

done

}

Baris berikut ini dimaksudkan untuk

mendapatkan file-file dalam direktori yang

diberikan:

files2=””

files=”$(ls $1)”

Page 20: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

71INFOLINUX SEPTEMBER 2003www.infolinux.web.id

Kemudian, kita akan membahas blok

kode berikut ini:

for i in $files

do

if [ -d $1/$i ]

then

files2=”$files2 $i $i”

else

is_installed $i

if [ $? -eq 0 ]

then

files2=”$files2 $i not-

installed”

else

files2=”$files2 $i

installed”

fi

fi

done

Algoritmanya adalah:

Untuk setiap file dalam suatu direktori,

periksalah apakah file tersebut adalah file

biasa atau direktori. Apabila file tersebut

adalah direktori, maka susunlah nilai

kembalian berikut ini:

files2=”$files2 $i $i”

Dalam penampilan menu di program

dialog, kita butuh memberikan pasangan

<nama> <definisi> untuk setiap item

menu. Untuk itulah, kita perlu menyusun

nilai kembalian tersebut.

Akan tetapi, apabila jika file tersebut

adalah sebuah file biasa, maka kita

akan memeriksa apakah modul tersebut

telah dimasukkan ke dalam modul atau

belum. Apabila telah dimasukkan, maka

kita akan menyusun nilai kembalian

berikut ini:

files2=”$files2 $i installed”

sebaliknya, kita akan menyusun nilai

kembalian berikut ini:

files2=”$files2 $i not- installed”

4. Program utamaPada prinsipnya, program utama

hanyalah berfungsi sebagai navigator

yang akan bekerja terus menerus

sampai pengguna menekan tombol

cancel. Untuk itu, kita akan meletakkan

semua kode dalam blok perulangan

berikut ini:

while [ 1 ]

do

kode

kode

done

Hal berikut yang harus diperhatikan

adalah perlakuan ketika pengguna

memilih suatu file atau direktori.

Tentunya, apabila pengguna memilih

suatu file, maka kita akan memeriksa

modul tersebut. Apabila pengguna

memilih direktori, maka kita akan masuk

ke direktori tersebut dan mendaftar

semua modulnya.

Untuk itu, blok while [ 1 ] kita akan

berkembang menjadi demikian:

while [ 1 ]

do

WORKING=”$WORKING/$selected”

if [ -d $WORKING ]

then

kode

kode

else

kode

kode

fi

done

Selanjutnya, kode-kode apakah yang

harus dimasukkan apabila pengguna

memilih direktori? Intinya, kode-kode

tersebut akan masuk ke direktori dan

mendaftar file-file di dalamnya. Dengan

demikian, blok while [ 1 ] kita akan

bertambah panjang menjadi berikut:

while [ 1 ]

do

WORKING=”$WORKING/$selected”

if [ -d $WORKING ]

then

getfiles $WORKING

dialog —menu “category:

$selected” 20 60 10 $files2 2>

$TEMP

if [ $? -ne 0 ]

then

exit 1

else

selected=‘cat $TEMP‘

deltemp

fi

else

kode

kode

fi

done

Manajemen Modul Kernel

� Keberhasilan instalasi� Konfirmasi instalasi modul

Page 21: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id72 INFOLINUX SEPTEMBER 2003

Untuk mendaftar file di direktori yang

dipilih pengguna, kita akan memanggil

fungsi getfiles() dengan parameter

adalah variabel $WORKING.

getfiles $WORKING

Kemudian, kita akan menampilkan

menu dengan item-item sesuai kembalian

dari fungsi getfiles() tersebut.

dialog —menu “category:

$selected” 20 60 10 $files2 2>

$TEMP

Tanda 2>$TEMP dimaksudkan agar

segala sesuatu yang dipilih pengguna

dimasukkan dalam file yang namanya

disimpan di variabel $TEMP. Hal ini

adalah ciri khas program dialog yang

menyimpan pilihan pada stderr.

Tidak lupa, kita juga memeriksa

tombol apa yang ditekan oleh

pengguna. Program dialog akan

mengembalikan nilai 0 apabila penekan

menekan tombol OK dan

mengembalikan nilai 1 apabila penekan

menekan tombol Cancel. Apabila

penekan menekan tombol cancel, maka

kita akan segera mengakhiri hidup

program. Hal yang satu ini bukanlah hal

yang baik. Seharusnya, kita akan

kembali ke menu utama. Namun apabila

pengguna memilih tombol OK, maka

kita akan mengambil item menu yang

dipilih dengan membaca file yang

namanya disimpan di dalam variabel

$TEMP. Kemudian, file $TEMP segera

kita hapus dengan memanggil fungsi

deltemp().

Sekarang, bagaimana kalau pengguna

memilih file dan bukannya direktori?

Kode-kode apa yang harus dimasukkan

pada blok while [ 1 ] kita yang masih

kosong? Pada prinsipnya, kita akan

memeriksa apakah modul tersebut telah

dimasukkan ke dalam kernel atau belum.

Apabila telah dimasukkan ke dalam

kernel, maka aksi yang akan ditawarkan

ke pengguna adalah uninstall.

Sebaliknya, aksi yang akan ditawarkan

adalah install. Berikut ini adalah kode

programnya:

is_installed $i

if [ $? -eq 0 ]

then

TODO=”install”

else

TODO=”uninstall”

fi

kemudian, kita akan menampilkan kotak

dialog dan menanyakan kepada user

untuk melakukan aksi yang ditawarkan.

Apabila pengguna memilih tidak, maka

kita akan segera melakukan terminasi

program. Sekali lagi, yang satu ini harus

diperbaiki.

dialog —yesno “$TODO module

$selected? “ 10 40

if [ $? -ne 0 ]

then

exit 1

else

kode

kode

fi

Apabila pengguna memilih tombol

Yes, maka kita akan memeriksa aksi yang

dilakukan pada modul tersebut. Sekali

lagi kita akan memeriksa status modul

kernel tersebut. Apabila aksinya adalah

install (berarti modul belum dimasukkan

ke dalam kernel), maka kita akan

menampilkan sebuah kotak dialog di

mana pengguna bisa memasukkan

informasi tambahan sebagai parameter

bagi program insmod. Setelah itu, kita

kana menjalankan program insmod

dengan segala informasi yang telah kita

kumpulkan.

Apabila aksi yang akan dilakukan

adalah uninstall (berarti modul telah

dimasukkan ke dalam kernel), maka kita

akan menghapus modul tersebut dari

kernel dengan program rmmod.

Dan selanjutnya, kita akan memeriksa

apakah program insmod dan rmmod

tersebut telah bekerja dengan baik.

Informasi tersebut kemudian akan kita

tampilkan kepada pengguna. Berikut

adalah blok kode programnya:

if [ $INSTALLED -eq 0 ]

then

dialog —nocancel —

inputbox “additional information for \

$selected” 10

40 2>$TEMP

if [ $? -ne 0 ]

then

exit 1

else

addinfo=‘cat $TEMP‘

deltemp

insmod

$MODULE $addinfo 1>/dev/null 2>&1

fi

else

rmmod $MODULE

1>/dev/null 2>&1

fi

if [ $? -ne 0 ]

then

RESULT=”failed”

EXIT=1

else

RESULT=”succeded”

EXIT=0

fi

dialog —msgbox “$TODO

$selected $addinfo: $RESULT” 10 40

exit $EXIT

Berikut ini adalah source code

selengkapnya dari program

mymodconf:

#!/bin/sh

TEMP=/tmp/$$.mymodconf

VERSION=0.1a

COPYRIGHT=”(c) Noprianto, June 2003. GPL”

KERNEL_VERSION=$(uname -r)

KERNEL_MODULES_DIR=/lib/modules/

$KERNEL_VERSION/kernel/

selected=””

WORKING=$KERNEL_MODULES_DIR/

$selected

alias dialog=”dialog —backtitle ‘My Kernel

Module Configurator v$VERSION

($KERNEL_VERSION)’”

function deltemp()

{

rm -rf $TEMP

}

function is_installed()

{

MODULE=‘echo $i | awk -F. ‘{print

$1}’‘

Manajemen Modul Kernel

Page 22: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

73INFOLINUX SEPTEMBER 2003www.infolinux.web.id

INSTALLED=‘lsmod | grep -w

$MODULE | wc -l 2>/dev/null‘

return $INSTALLED

}

function getfiles()

{

files2=””

files=”$(ls $1)”

for i in $files

do

if [ -d $1/$i ]

then

files2=”$files2 $i $i”

else

is_installed $i

if [ $? -eq 0 ]

then

files2=”$files2 $i

not-installed”

else

files2=”$files2 $i

installed”

fi

fi

done

}

while [ 1 ]

do

WORKING=”$WORKING/$selected”

if [ -d $WORKING ]

then

getfiles $WORKING

dialog —menu “category:

$selected” 20 60 10 $files2 2>

$TEMP

if [ $? -ne 0 ]

then

exit 1

else

selected=‘cat $TEMP‘

deltemp

fi

else

is_installed $i

if [ $? -eq 0 ]

then

TODO=”install”

else

TODO=”uninstall”

fi

dialog —yesno “$TODO module

$selected? “ 10 40

if [ $? -ne 0 ]

then

exit 1

else

if [ $INSTALLED -eq 0 ]

then

dialog —nocancel —

inputbox “additional information for \

$selected” 10

40 2>$TEMP

if [ $? -ne 0 ]

then

exit 1

else

addinfo=‘cat

$TEMP‘

deltemp

insmod

$MODULE $addinfo 1>/dev/null 2>&1

fi

else

rmmod $MODULE

1>/dev/null 2>&1

fi

Manajemen Modul Kernel

if [ $? -ne 0 ]

then

RESULT=”failed”

EXIT=1

else

RESULT=”succeded”

EXIT=0

fi

dialog —msgbox “$TODO

$selected $addinfo: \

$RESULT” 10 40

exit $EXIT

fi

fi

done

Demikianlah proses pembuatan

mymodconf. Apabila fungsi-fungsi

pemeriksaan modul dan antar muka

program ini dibuat lebih ramah, kemudian

program dialog kita gantikan dengan

gdialog, maka sebuah aplikasi GUI yang

ramah akan kita hasilkan. Bagaimana

pendapat Anda? Apakah program ini

mempermudah Anda untuk bekerja

dengan modul kernel?�

Noprianto ([email protected])

Page 23: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id74 INFOLINUX SEPTEMBER 2003

Clam AntiVirus

Penyebaran virus melalui e-mail

menempati urutan pertama

menurut Symantec Security

Response dengan tiga dari empat Top

Virus Threat setengah tahun 2003

pertama ini adalah virus atau worm yang

menyebar melalui e-mail. Dengan

demikian, instalasi antivirus pada mail

server seharusnya menjadi kewajiban

bagi setiap administrator mail server.

Harga antivirus komersial yang bisa

digunakan pada mail server bervariasi

dari mulai US$149. Itu pun hitungannya

bervariasi mulai dari per domain, per

mailbox atau per instalasi, dan harga

tersebut belum termasuk biaya untuk

langganan update basis data virus. Harga

tersebut akan terasa berat jika

penggunaannya bukan untuk komersial.

Clam AntiVirus (ClamAV) hadir

sebagai solusi baik untuk pengguna

nonkomersial maupun komersial yang

memerlukan solusi antivirus yang tidak

mahal. Sekarang ClamAV terbaru adalah

versi 0.54.

ClamAV adalah antivirus yang

dipublikasikan menggunakan lisensi

GNU GPL2 dan menggunakan basis data

virus dari OpenAntiVirus, sebuah

antivirus yang juga gratis. Akan tetapi,

berbeda dengan OpenAntiVirus yang

ditulis dalam Java, ClamAV ditulis dalam

C dan basis datanya secara teratur di-

update. ClamAV juga mampu mendeteksi

virus–virus polymorphic.

ClamAV dapat digunakan di Linux,

Solaris, FreeBSD, OpenBSD, NetBSD,

AIX, Mac OS X, Cygwin B20 pada

berbagai arsitektur seperti Intel, Alpha,

Sparc, Cobalt MIPS, PowerPC, dan RISC

6000. MTA (Mail Transfer Agent) yang

didukung (dan/atau mendukung)

ClamAV juga semakin lama semakin

banyak.

Dalam artikel ini, penulis hanya akan

membahas instalasi ClamAV di Linux

dengan MTA Postfix. Sedangkan untuk

pengguna MTA qmail dan qmail-scanner,

silakan membaca artikel http://

people.cakraweb.com/~asfik/writings/

qmail-scanner-clam.html.

PersiapanDownload ClamAV dari http://

www.clamav.org/stable/index.html.

Anda memerlukan Perl dan Amavis-ng

sebagai interface dari Postfix ke

ClamAV. Biasanya Perl sudah terinstall

pada sebuah sistem Linux. Bila belum

terinstal, Perl dapat di-download dari

http://www.perl.org. Download dan

instal Amavis-ng dari http://

www.sourceforge.net/projects/amavis.

Anda juga memerlukan modul–modul

perl sebagai berikut:

Archive::Tar

Archive::Zip

Compress::Zlib

Config::IniFiles

Convert::TNEF

Convert::Uulib

File::Mmagic

IO::Stringy

MIME::tools

MailTools

Libnet

Modul–modul di atas diperlukan

untuk mengolah e-mail dan memecahnya

menjadi bagian–bagian yang akan

diperiksa ClamAV. Untuk menginstalasi

modul–modul tersebut, penulis

menyarankan untuk menggunakan modul

perl CPAN (biasanya juga sudah

terinstal), yaitu dengan menjalankan

perintah:

Perl –MCPAN –eshell

Bila Anda belum pernah mengguna-

kannya, Anda akan diminta untuk

memasukkan beberapa parameter.

Setelah selesai akan keluar prompt seperti

di bawah:

cpan>

Kemudian pada prompt tuliskan install

<nama_modul>. Keuntungannya adalah

Anda akan memperoleh modul versi

terbaru dan proses instalasinya otomatis,

termasuk apabila ada modul tambahan

yang perlu diinstal lebih dahulu.

Bila Anda lebih suka mencari modul–

modul tersebut sendiri dan

menginstalnya dari rpm, silakan

mencarinya di http://rpmfind.net. Bila

Anda lebih suka menggunakan source

file berbentuk tar.gz untuk diinstal

manual, silakan mencari modul–modul

tersebut di http://cpan.perl.org.

Kemudian agar bisa memindai

attachment terkompres, Amavis-ng juga

membutuhkan paket–paket kompresi arc,

lha, unarj, unrar, dan zoo.

Proses instalasiJika menginstal ClamAV untuk kali

pertama, Anda perlu membuat user

account dan group account untuk

ClamAV. Kita namakan saja clamav.

# groupadd clamav

# useradd -g clamav -s /bin/false -c “Clam

AntiVirus” clamav

# passwd –l clamav

Baris terakhir untuk memastikan

bahwa user clamav terkunci dan account

Clam AntiVirus untukMail Server di LinuxLinux memang tahan terhadap virus Windows. Tapi sebagai e-mail server, Linux tidak mampu menahan virus jika tidak adaprogram antivirus. Anda tidak perlu khawatir, karena denganmudah dan murah Anda dapat menginstalasi Clam AntiVirus.

Page 24: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

75INFOLINUX SEPTEMBER 2003www.infolinux.web.id

Clam AntiVirus

tidak dapat digunakan untuk login.

Jangan tambahkan user atau group

account ini ke group khusus manapun.

Kemudian, extract, configure, compile

dan install Clam AV:

$ tar zxpvf clamav-x.yz.tar.gz

$ cd clamav-x.yz

$ ./configure; make

$ su -c “make install”

Setelah selesai, coba memindai file

source clamAV.

[root@office mail]# clamscan clamav-

x.yz.tar.gz

clamav-x.yz.tar.gz: ClamAV-Test-Signature

FOUND

Akan terdeteksi adanya satu virus

dalam paket ClamAV-x.yz.tar.gz. Ini

bukan virus sungguhan, melainkan

hanya sebagai alat untuk menguji kerja

anti virus yang baru kita instalasi.

ClamAV menyediakan utility freshclam

untuk memperbaharui basis data virus.

Ada dua cara untuk secara rutin

menjalankannya. Pertama menggunakan

menjalankan freshclam sebagai daemon.

# freshclam -d -c 2 -l /var/log/clam-

update.log

Jangan lupa tambahkan baris ini ke

startup script agar utiliti tersebut

dijalankan saat restart system.

Cara kedua adalah menggunakan cron

untuk menjalankan utiliti tersebut.

Tambahkan baris seperti di bawah ke

crontab milik root atau clamav:

0 8 * * * /usr/local/bin/freshclam —quiet -l /

var/log/clam-update.log

Kemudian extract, compile dan install

Amavis-ng dengan langkah berikut ini:

$ tar xvfz amavis-ng_0.1.6.4.orig.tar.gz

$ cd amavis-ng-0.1.6.4.orig/

$ perl Makefile.PL

$ make

$ su -c “make install”

$ cp amavis-ng-0.1.6.4.orig/etc/amavis.conf

/etc/amavis-ng/amavis.conf

Berikut adalah baris yang perlu Anda

sesuaikan di amavis.conf:

mail-transfer-agent = Postfix

virus-scanner = CLAM

Dan akhirnya sesuaikan path ke

clamscan dalam bagian [CLAM]:

clamscan = /usr/local/bin/clamscan

Menggunakan antivirus ini sebagai

content-filtering pada Postfix sangat

mudah. Edit file /etc/postfix/master.cf

dan tambahkan baris berikut:

filter unix - n n - - pipe

flags=Rq user=mail argv=/usr/bin/amavis

${sender} — ${recipient}

Dan ubah baris di bawah ini:

smtp inet n - n - - smtpd

menjadi:

smtp inet n - n - - smtpd -o

content_filter=filter:

Bila Anda ingin antivirus hanya

memindai e-mail masuk, tapi tidak

memindai e-mail keluar atau yang di

relay, bisa juga baris di atas menjadi

seperti berikut:

192.168.0.1:smtp inet n - n - - smtpd -o

smtpd_client_restrictions=permit_mynetworks,reject

127.0.0.1:smtp inet n - n - - smtpd -o

smtpd_client_restrictions=permit_mynetworks,reject

212.212.212.xxx:smtp inet n - n - -

� Website Clam AntiVirus

smtpd -o

content_filter=filter:

Konfigurasi seperti di atas adalah pada

mail gateway yang akan me-relay e-mail

dari LAN dengan alamat IP 192.168.0.0/

24 dan localhost tanpa dipindai (scan-

ning). Hanya e-mail yang masuk melalui

interface 212.212.212.xxx, yang akan

dipindai oleh anti virus. Reload Postfix

dan sekarang e-mail server Anda sudah

dilengkapi dengan antivirus.

Antivirus lain di Linux:1. AmaViS Virus Scanner

(www.amavis.org)

2. AntiVir (www.hbedv.com)

3. Bitdefender (www.bitdefender.com)

4. Central Command

(www.centralcommand.com)

5. F-Prot Antivirus (www.f-prot.com)

6. Kaspersky (www.kaspersky.com)

7. Ravantivrus (www.ravantivirus.com)

8. Shopos Antivirus

(www.sophos.com)

9. Vexira Antivirus

(www.warpedsystems.sk.ca)

10. Dan lain-lain.�

Dapid Candra ([email protected])

Page 25: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id76 INFOLINUX SEPTEMBER 2003

LYX adalah salah satu front-end

LATEX yang berbasis GUI, yang

dapat dijalankan pada hampir

semua platform sistem operasi. LATEX

sudah cukup lama dikenal sebagai alat

untuk menata tata letak (layout) buku atau

majalah yang berkaitan dengan ilmu pasti.

Dengan munculnya LYX yang dapat

dioperasikan secara intuitif, hampir semua

bidang dapat memanfaatkan LATEX

sebagai alat untuk menata tampilan buku/

majalah. Sistem desktop publishing (DTP)

digunakan untuk mengedit teks dan

gambar yang dimasukkan pada suatu

halaman penuh. Jadi, secara prinsip

hampir semua jenis word processor atau

document-processor dapat dijadikan salah

satu komponen masukan dari sistem

DTP. Apa keunggulan LYX pada sisi

aplikasi DTP?

LATEX yang bekerja di balik aplikasi

LYX merupakan text-processor yang

memiliki banyak keunggulan

dibandingkan word processor, di

antaranya adalah konsistensi, referensi-

silang dan penempatan gambar/tabel

secara otomatis, serta penyusunan

pustaka yang konsisten. Konsistensi

tata letak ini disebabkan karena semua

komponen tata letak dikontrol oleh

suatu makro atau paket LATEX. Dengan

kata lain, sekali suatu makro

didefinisikan maka akan didapatkan tata

letak yang sangat konsisten.

Komponen aplikasi DTPSyarat suatu aplikasi word processor

atau document-processor dapat dijadikan

aplikasi DTP adalah sebagai berikut:

� Ketersediaan jenis huruf/tipografi.

� Dapat mencampur format satu dan

dua kolom.

� Dapat memasukkan banyak grafik

terutama jenis raster.

� Ukuran gambar bervariasi dan dapat

diletakan secara fleksibel.

� Format yang kompak.

� Judul sebagai huruf normal atau

sebagai gambar.

� Mendukung huruf kaligrafi, dapat

dilakukan dengan menggunakan paket

chancery.

� Dapat menghasilkan PDF dengan

kualitas yang baik.

LYX sebagai aplikasi DTPBerbeda dengan program khusus

aplikasi DTP yang berbasis bingkai

(frame), LYX/LATEX tidak mempunyai

fasilitas semacam ini. Peletakan bingkai

pada naskah LYX/LATEX ditentukan

oleh definisi pada makro atau paket

yang digunakan. Namun demikian,

pengaturan letak bingkai pada suatu

halaman pada program LYX dapat

dikontrol secara langsung dengan

menambahkan perintah TEX atau

LATEX dalam bentuk ERT (Evil Red

Text) dengan menekan perintah

pendek Ctrl+l. Bagaimana LYX

dapat dijadikan sebagai aplikasi DTP

akan dibahas tiap-tiap komponen

DTP pada LYX berikut ini.

Jenis huruf atau tipografiHingga perkembangan saat ini, hampir

semua jenis huruf bisa digunakan di

pada DTP-LYX/LATEX. Namun yang

paling mudah diinstal adalah jenis

huruf Type1. Huruf TrueType di

Windows dapat juga dikonversi ke

dalam huruf Type1. Banyak software

gratis/open source yang dapat

digunakan untuk konversi ini, misalnya

ttf2* (ttf2afm, ttf2bdf, ttf2pfa, ttf2pfb,

ttf2pk, ttf2pt1, dan ttf2tfm) yang

berbasis CLI atau PfaEdit yang berbasis

GUI.

Di lingkungan LATEX terdapat cukup

banyak jenis huruf yang sudah terinstal

secara default. Jika ingin

menambahkan jenis huruf pada basis

Membuat skripsi, buku, brosur, atau makalah tidak hanya bisadilakukan dengan word processor atau aplikasi desktop pub-

lishing canggih seperti PageMaker. Anda dapat menggunakanLYX dan LATEX.

LYX Sebagai AplikasiDesktop Publisher

� Gambar 1. Daftar contoh font

LYX (Aplikasi Desktop Publisher)

Page 26: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

77INFOLINUX SEPTEMBER 2003www.infolinux.web.id

data LATEX dapat men-download dari

CTAN. Variasi jenis huruf yang terdapat

di LATEX yang berhasil penulis instalasi

dapat dilihat pada Gambar 1.

Format kolomBerbeda dengan buku yang biasanya

tersusun dengan format satu kolom,

hampir semua majalah dan beberapa

buku lebar disusun dengan format dua

kolom atau lebih. Pada suatu aplikasi

DTP diperlukan fleksibilitas penentuan

jumlah kolom pada satu halaman tata

letak. Program LYX memberikan fasilitas

untuk mendefinisikan format kolom

(satu kolom atau lebih) dalam beberapa

cara:

1. Mengunakan pilihan twocolumn atau

onecolumn. Pilihan ini adalah standard

naskah LATEX, yang dapat

ditentukan pada menu tata letak:

Document -> Page -> Twocolumn.

Secara default adalah onecolumn.

2. Menggunakan paket multicol. Paket ini

bisa digunakan untuk men-setting

aneka macam jumlah kolom dan dapat

digunakan dengan perintah

\usepackage{multicol}

� pada preambul

dan

\begin{multicols}{jumlah_kolom} ...

\end{multicols}

� pada teks

Pada majalah yang tidak banyak

gambar, pemakaian paket ini sangat

baik.

3. Menggunakan paket sttools yang

terdiri dari paket flushend, midfloat

dan cuted. Paket ini merupakan hasil

modifikasi kernel LATEX yang khusus

didesain untuk aplikasi DTP dua-

kolom dan dapat digunakan dengan

menambahkan perintah

\usepackage{flushend,cuted}

� pada preambul

dan

\begin{strip} ... \end{strip}

� pada teks yang akan dijadikan satu-

kolom.

Memasukkan grafik/gambarLYX terbaru memberikan fasilitas untuk

memasukkan aneka jenis gambar baik

raster maupun vektor. Format gambar

yang dapat disisipkan langsung pada

LYX dapat diketahui dengan perintah:

$lyx -dbg graphics

Akan muncul list format gambar

apa saja yang dapat di-support oleh

LYX (di luar format postscript, pdf,

tex/pstex, tgif, dan fig): “Of these,

LYX recognises the following formats:

bmp, fits, gif, jpg, ppm, pgm, pbm,

sgi, tiff, xbm, xwd”

Penentuan posisi gambar pada teks

dapat dibagi dua macam, yaitu gambar

sebagai objek gambar (mengambang

atau tidak) atau gambar sebagai latar

belakang dari teks. Untuk mengatur

gambar secara fleksibel (posisi tidak

tergantung kepada LATEX) sebaiknya

gambar diletakkan pada posisi tidak

mengambang. Pada program LYX

terbaru, tidak dibutuhkan paket

tambahan untuk menambah gambar

pada teks, kecuali jika diinginkan

tampilan yang sangat khusus, misalnya:

� eso-pic dan graphicx untuk

menambahkan latar belakang secara

berulang-ulang.

� epigraph untuk menambahkan gambar

atau kutipan pada halaman pertama

bab, setelah judul, biasanya dipakai

pada tata letak buku-buku karya

sastra.

� overpic untuk menambahkan teks atau

gambar di atas gambar.

Berhubung paket ini belum

sepenuhnya didukung oleh LYX, maka

pemakaian paket ini dapat dilakukan baik

dengan cara menambahkan perintah

LATEX pada preambul atau dalam

bentuk ERT. Untuk menambah latar

belakang gambar satu halaman penuh

dapat dilakukan dengan menuliskan

perintah berikut ini pada preambul:

\usepackage{eso-pic,graphicx}

\newcommand\BackgroundPicture[2]{%

\setlength{\unitlength}{1pt}%

default \put(0,\strip@pt\paperheight){%

\parbox[t][\paperheight]{\paperwidth}{%

\ v f i l l

\centering\includegraphics[angle=#2]{#1}

\ v f i l l

}}}

\AddToShipoutPicture{\BackgroundPicture{rose}{0}}

Sebagai catatan, gambar yang

digunakan harus sebesar ukuran kertas

(ukuran gambar dapat diatur dengan

program GIMP). Paket overpic dapat

digunakan dengan cara menambahkan

perintah \usepackage[abs]{overpic} pada

preambul dan menuliskan perintah

berikut ini pada teks dalam ERT.

\begin{overpic}[scale=2.25,unit=1mm]{Emperors.eps}

\put(3,3){\huge\textcolor{white}{ \LaTeX}}

\put(10,5){\includegraphics[scale=1.25]{Emperors.eps}}

\end{overpic}

Paket epigraph, eso-pic, graphicx

dan overpic biasanya akan terdapat

pada paket LATEX yang sudah

terinstal. Jika tidak tersedia pada sistem

LATEX Anda, paket ini dapat di-

download dari CTAN.

Keluaran PS atau PDFNaskah LYX dapat diekspor untuk

keperluan pre-press dalam format DVI,

PS dan/atau PDF. Masing-masing

format ini mempunyai keunggulan

LYX (Aplikasi Desktop Publisher)� LYX di Red Hat 9

� Gambar 2. Contoh brosur

Page 27: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id78 INFOLINUX SEPTEMBER 2003

sendiri-sendiri. Format yang terbaik

untuk dicetak pada printer sebelum

dibuatkan plate adalah DVI (device

independent), karena format ini akan

menggunakan resolusi printer secara

optimum. Berbeda dengan format DVI

yang mengoptimalkan resolusi printer

saat mencetak, format PS dan PDF

secara default hanya diset pada

resolusi 600 dpi. Resolusi ini biasanya

diset secara otomatis pada perintah

dvips. Format PDF dapat dikatakan

relatif sama dengan PS. Bedanya hanya

terletak pada ukuran berkas yang

sangat kecil.

Berkas PDF dapat juga dihasilkan

dengan program pdflatex. Sejauh

pengalaman penulis naskah PDF yang

dihasilkan dari program ps2pdf dan

pdflatex mempunyai kualitas yang relatif

sama. Penulis sendiri tidak sering

memakai program pdflatex, karena ada

beberapa grafik tertentu yang tidak

dapat dikompilasi dengan program ini.

Contoh tata letak denganLYX/LATEX

BrosurMendesain brosur sederhana dengan

latar belakang warna atau gambar

sangat mudah dilakukan dengan LYX.

Paket LATEX yang dibutuhkan untuk

mendukung pekerjaan ini misalnya

multicol untuk membuat tiga kolom

atau dapat juga menggunakan

minipage yang lebih fleksibel, eso-pic

dan graphicx untuk menambah latar

belakang gambar, color dan colortbl

untuk pewarnaan pada teks dan tabel.

EnsiklopediaMenata letak ensiklopedia hampir sama

dengan menata letak buku atau majalah

dengan dua kolom yang dikombinasi

dengan satu kolom. Untuk mendesain

tata letak seperti contoh di bawah ini

dibutuhkan beberapa paket LATEX

tambahan, seperti flushend, cuted,

eso-pic, dan graphicx. Paket floatflt,

fancyhdr, dan color secara default

sudah didukung oleh LYX.

Paket floatflt digunakan untuk

menempatkan gambar mengambang di

antara teks. Untuk menyisipkan gambar

dengan paket ini dapat dilakukan

dengan perintah Insert —> Float —>

Floatflt figure. Paket fancyhdr

digunakan untuk mengontrol header

atau footer pada halaman teks.

Penggunaan tiap-tiap paket ini dapat

dibaca pada dokumentasi dari masing-

masing paket ini.

Kartu namaAda dua paket yang dapat digunakan

untuk mendesain kartu nama dengan

LYX/LATEX, yaitu bizcard dan ticket.

Berbeda dengan paket bizcard yang

memang khusus untuk membuat

kartunama, paket ticket dapat juga

digunakan untuk menata letak tiket dan

kartu pin. Kedua paket ini dapat di-

download secara gratis di CTAN.

Selain kedua paket itu juga dibutuhkan

paket tambahan untuk membuat

tampilan menjadi labih baik, misalnya

paket eso-pic dan graphicx atau

overpic kalau ingin dibuat dalam format

latar belakang gambar penuh.

MajalahMajalah yang kompleks agak sulit

didesain pakai LYX, namun ada satu

paket yang bisa digunakan untuk

mendesain majalah sederhana, yaitu

� Gambar 3. Contoh ensiklopedia � Gambar 4. Contoh kartu nama � Gambar 5. Contoh majalah

LYX (Aplikasi Desktop Publisher)

franzine yang dibuat oleh Kathryn

Andersen. Paket ini dapat di-download

dari URL pada referensi di bawah ini.

Tata letak majalah tiga kolom dapat

memanfaatkan kombinasi dua kolom

ditambah catatan pinggir (marginpar).

Pada contoh gambar di bawah ini dibuat

dengan menggunakan tata letak dua-

kolom plus catatan pinggir (dicontoh

dari model tata letak majalah Bauen &

Wohnen). Paket LATEX yang digunakan

telah dijelaskan pada bagian

sebelumnya.

Rangkuman

LYX pada prinsipnya dapat digunakan

untuk mendukung aplikasi desktop

publishing (DTP). Untuk menghasilkan

tata letak yang baik, dibutuhkan

beberapa paket tambahan di luar

paket yang sudah didukung oleh LYX,

yaitu bizcard, colortbl, eso-pic,

epigraph, graphicx, multicol, overpic,

sttools dan ticket. Semua paket ini

dapat di-download dari CTAN (http://

www.ctan.org/).

Di samping program LATEX beserta

paket-paketnya, juga dibutuhkan

program lain untuk melengkapi LYX/

LATEX, seperti GIMP/ImageMagick

untuk mengolah gambar raster, Sketch/

Xfig/Tgif untuk menambahkan sketsa

atau gambar vektor pada teks, pstricks

dan pdftricks untuk memodifikasi

gambar yang telah disisipkan pada LYX

dan juga barangkali dibutuhkan paket

CMS (Color Management System)

untuk mendefinisikan warna supaya

apa yang dilihat di layar sama persis

dengan apa yang akan dicetak melalui

printer berwarna.�

I Wayan Warmada

([email protected])

Page 28: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

79INFOLINUX SEPTEMBER 2003www.infolinux.web.id

Mengamati informasi suatu file

terkadang dapat menjadi hal

yang menyenangkan.

Menggunakan program file, kita dapat

menelanjangi file tersebut dan melihat

tipenya. Hampir tidak ada file yang luput

dari kemampuan program file ini.

Sayangnya, sampai saat ini, kebanyakan

program seperti Konqueror ataupun

Nautilus lebih senang untuk

menampilkan tipe suatu file dalam format

singkat dan padat. Hal tersebut dirasa

wajar-wajar saja karena mereka

menawarkan fungsi lain yang jauh lebih

kompleks daripada hanya sekadar

menampilkan keluaran dari program file.

Sementara itu, kemampuan Apache

dalam menampilkan daftar file dan

direktori sangatlah menyenangkan untuk

diamati dan dipelajari. Begitu Anda

meminta apache untuk menampilkan

daftar tersebut, maka Anda dapat dengan

mudah men-download ataupun sekedar

membaca isi file tersebut. Sayang beribu

sayang, Apache tidak akan menampilkan

deskripsi semua file.

Dengan sebuah shell script sederhana,

sebenarnya kemampuan untuk

bertingkah laku seperti kemampuan

menampilkan daftar file dan direktori

seperti Apache dapat dibuat asalkan

fungsi url encoding dan decoding telah

disediakan. Hal tersebut diperlukan

karena nama file dapat mengandung

karakter-karakter yang harus di-encode

dahulu sebelum dikirimkan dan harus di-

decode ketika akan diproses. Sayangnya,

url encoding dan decoding tidak

disediakan oleh program-program

standar. Membuatnya jelas

membutuhkan waktu. Menggunakan

program url encoding dan url decoding

yang dibuat oleh Heiner Steven

([email protected]), kita akan

menampilkan informasi internal suatu file

dalam navigasi ala Apache.

Aplikasi CGI yang kita buat ini tidak

dimaksudkan untuk menggantikan

Apache dalam menampilkan daftar file

dan direktori. Apa yang kita lakukan

hanyalah menampilkan keluaran dari

program file untuk file tersebut. Apabila

file tersebut merupakan suatu direktori,

maka direktori tersebut akan kita jadikan

hyperlink. Berikut ini adalah langkah-

langkah pembuatannya.

1. Mendefinisikan beberapavariabel penting

PROGNAME=”file2web”

VERSION=”0.1a”

COPYRIGHT=”$PROGNAME $VERSION, (c)

Noprianto, July 2003. GPL.”

COPYRIGHT2=”Urlencode and Urldecode by

Heiner Steven ([email protected])”

URLENCODE=/usr/lib/cgi-bin/urlencode

URLDECODE=/usr/lib/cgi-bin/urldecode

Variabel URLENCODE and

URLDECODE menunjuk ke lokasi

program urlencode dan urldecode.

2. Mendefinisikan fungsi-fungsitambahan

function signature()

{

echo “$COPYRIGHT”

echo “$COPYRIGHT2”

echo “$SERVER_SIGNATURE”

}

function urlencode()

Anda pernah tertarik dengan kemampuan program file? Andatertarik dengan kemampuan web server untuk menampilkandaftar file di web browser? Tertarik membuat aplikasi CGIuntuk menampilkan daftar file dan informasi file-nya?

Menjalankan ProgramFile di Web

Program File di Web� File2web menampilkan root direktori

Page 29: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

www.infolinux.web.id80 INFOLINUX SEPTEMBER 2003

{

echo $(echo $1 | $URLENCODE)

}

function urldecode()

{

echo $(echo $1 | $URLDECODE)

}

Fungsi signature() akan menampilkan

informasi hak cipta dan informasi web

server. Fungsi urlencode akan menjalankan

program urlencode dan fungsi urldecode

akan menjalankan program urldecode.

3. Program utamaPertama-tama yang akan kita lakukan

tentunya mencetak header untuk aplikasi

CGI. Setelah itu, kita akan memeriksa isi

dari variabel $QUERY_STRING. Apabila

$QUERY_STRING ternyata adalah string

kosong atau belum diset, maka kita akan

mengasumsikan bahwa direktori aktif

adalah root direktori (/). Dan apabila

$QUERY_STRING tidak kosong, kita

akan melakukan proses decoding dengan

menggunakan program urldecode.

Sebagai langkah antisipatif ketika user

memasukkan nama direktori secara asal-

asalan, maka kita akan memeriksa apakah

direktori terdapat di dalam file sistem. Hal

tersebut juga berlaku untuk direktori di

mana user yang menjalankan Apache

tidak memiliki hak untuk masuk ke dalam

dan mendaftar isinya.

Tidak lupa, kita juga perlu

mendapatkan direktori orang tua dari

direktori aktif saat ini. Hal ini secara

sederhana kita dapatkan dengan masuk

ke direktori orang tua (cd ..), kemudian

mengambil nilai dari program pwd,

kemudian masuk kembali ke direktori

aktif. Untuk cara lain, Anda dapat

menggunakan program pushd dan popd

dengan logika tersendiri.

Selanjutnya, permainan pun dimulai.

Kita akan mendaftar isi dari suatu direktori

dan akan memeriksa setiap isinya. Apabila

isinya adalah direktori, maka seperti yang

telah disebutkan, kita akan menjadikannya

sebagai hyperlink. Sementara, apabila

isinya adalah file, maka kita akan

mencetak keluaran program file atas

dirinya. Untuk memperindah tampilan, kita

menampilkannya dalam tabel.

Berikut ini adalah source code

selengkapnya:

#!/bin/sh

PROGNAME=”file2web”

VERSION=”0.1a”

COPYRIGHT=”$PROGNAME $VERSION, (c)

Noprianto, July 2003. GPL.”

COPYRIGHT2=”Urlencode and Urldecode by

Heiner Steven ([email protected])”

URLENCODE=/usr/lib/cgi-bin/urlencode

URLDECODE=/usr/lib/cgi-bin/urldecode

function signature()

{

echo “$COPYRIGHT”

echo “$COPYRIGHT2”

echo “$SERVER_SIGNATURE”

}

function urlencode()

{

echo $(echo $1 | $URLENCODE)

}

function urldecode()

{

echo $(echo $1 | $URLDECODE)

}

echo “Content-type: text/html”

echo

echo “<head>”

echo “<title>File type explorer</title>”

echo “</head>”

echo “<body>”

echo “<pre>”

if [ -z $QUERY_STRING ]

then

BASE=/

else

BASE=$(echo $QUERY_STRING |

awk -F= ‘{print $2}’)

BASE=$(urldecode $BASE)

fi

echo “<b>$(basename “$BASE”)</b>”

echo “<hr>”

echo “<table>”

Program File di Web

� File2web dan informasi file � Antisipasi untuk direktori yang tidak eksis

Page 30: Gambas dan MySQL Database Programming dengan ... - … · TUTORIAL Ulasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

TUTORIALUlasan CD | Klinik | Ulasan | Linux Ready | Utama | Bisnis | Feature | Tutorial

81INFOLINUX SEPTEMBER 2003www.infolinux.web.id

Program File di Web

cd “$BASE”

if [ $? -ne 0 ]

then

echo “Directory cannot be found or

permission denied. <a

href=$SCRIPT_NAME>go to /</a>”

echo “<hr>”

signature

exit 1

fi

cd ..

UP=”$PWD”

cd “$BASE”

echo “<tr><td><a

href=$SCRIPT_NAME?dir=$(urlencode

$UP)>up</a></td><td>one level up</

td></tr>”

for i in *

do

echo “<tr>”

echo “<td>”

if [ ! -e $i ]

then

echo “</td>”

echo “</tr>”

echo “</table>”

echo “<hr>”

signature

exit 1

fi

if [ -d “$BASE/$i” ]

then

echo “<a

href=$SCRIPT_NAME?dir=$BASE/

$(urlencode “$i”)>”$i”</a>”

else

echo “$i”

fi

echo “</td>”

echo “<td><font size=-1>$(file -b

“$i”)</font></td>”

echo “</tr>”

done

echo “</table>”

echo “<hr>”

signature

echo “</pre>”

echo “</body>”

Program urlencode dan urldecode bisa

Anda copy dari CD-ROM InfoLINUX atau

dapat di-download di http://www.

shelldorado.com/scripts/cmds/urlencode

dan http://www.shelldorado.com/scripts/

cmds/urldecode.

Kini, kita dapat mengamati informasi

file-file di harddisk kita via web browser.

Terimakasih kepada Heiner Steven untuk

urlencode dan urldecode yang telah

sangat membantu. Tentunya, program

ini masih terdapat kekurangan.

Penyempurnaan di sana sini sangatlah

diharapkan. Kembangkanlah dan

sebarkanlah. Kembangkanlah dan

sebarkanlah lagi. Lagi dan lagi. Itulah

indahnya dunia free software.�

Noprianto ([email protected])

IKLAN