• Tidak ada hasil yang ditemukan

Heriyadi adalah programer yang

N/A
N/A
Protected

Academic year: 2021

Membagikan "Heriyadi adalah programer yang"

Copied!
32
0
0

Teks penuh

(1)

H

eriyadi adalah programer yang bekerja satu tim dengan Lely. Dalam pembuatan program, ada kalanya mereka bekerja pada file yang sama, walaupun hal tersebut jarang terjadi. Sewaktu masih dalam satu kantor, mereka dengan senang hati menggunakan server internal untuk saling bertukar file dan melakukan berbagai kegiatan kolaboratif lainnya.

Pada suatu hari, Heriyadi dikirim ke Rusia untuk memperdalam ilmunya. Selama belajar ke Rusia, Heriyadi tetap

bertanggung jawab sebagai programer yang bekerja sama dengan Lely. Karena berjauhan secara geografis, adalah tidak mungkin bagi Heriyadi untuk berhadapan muka dengan Lely. Kegiatan pun dipindahkan ke server publik yang kebetulan berada dalam satu gedung. Heriyadi mendambakan cara untuk mengirimkan file dengan mudah. Dan terkadang, heriyadi menginginkan Lely untuk tidak mengedit file tertentu yang sedang diedit oleh Heriyadi. Apakah solusi untuk kebutuhan Heriyadi tersebut?

Menggunakan e-mail dan mengirimkan attachment jelas tidak praktis karena Lely

harus menerima dan meletakkan attach-ment Heriyadi ke tempat yang bersesuaian. Menggunakan ftp? Kedengarannya keren dan memenuhi kebutuhan. Tapi, ftp jelas tidak cukup keren untuk kebutuhan strong authentication, encryption, proxy support, dan caching. Selain itu, fasilitas locking sangat diperlukan oleh Heriyadi.

Solusi untuk Heriyadi dan Lely adalah penggunaan WebDAV untuk bekerja secara kolaboratif. Dengan penggunaan WebDAV yang baik, Heriyadi dan Lely dapat saling kirim mengirim file dengan aman, cepat, dan mudah. Heriyadi dan Lely dapat pula menggunakan versioning untuk menjaga perubahan yang mereka kerjakan. Dan mereka mendapatkan segala kemampuan HTTP. Bahkan, dengan penggunaan Davfs di Linux, mereka dapat bekerja pada WebDAV server seperti halnya bekerja dengan folder biasa. Tertarik?

Apa itu WebDAV?

Beberapa pihak lebih menyukai istilah DAV dibandingkan dengan WebDAV. DAV sendiri adalah singkatan dari Distributed Authoring and Versioning, suatu perluasan protokol HTTP yang memungkinkan

pengguna untuk bekerja secara terdistribusi. Pengertian bekerja di sini tentunya juga melibatkan penulisan atas file tertentu. Dengan demikian, apabila tanpa WebDAV kita akan mendapatkan kemampuan read-only dari HTTP, maka dengan hadirnya WebDAV, kita akan mendapatkan fasilitas read-write.

DAV menambahkan method dan header untuk HTTP. DAV menspesifikasikan bagaimana menggunakan segala penambahan fasilitas, cara untuk menformat request dan response serta segala perubahan pada tingkah laku HTTP.

Seperti kasus Heriyadi dan Lely, DAV sangat berguna untuk bekerja jarak jauh. Setiap pelaku yang terlibat dapat langsung bekerja, bahkan dalam beberapa kondisi dapat langsung bekerja di web. Dalam bentuk yang lebih nyata, DAV seringkali digunakan oleh CMS (Content Manage-ment System) untuk meningkatkan kemudahan penggunaan.

WebDAV diramalkan dapat menggan-tikan beberapa protokol yang aktif bekerja. Seperti halnya adalah protokol POP3 dan IMAP. Percaya atau tidak, Anda bisa membaca e-mail dengan WebDAV client!

Protokol HTTP adalah protokol luar biasa yang memiliki sejumlah fitur.

Salah satu fiturnya adalah dapat dikembangkan sedemikian rupa sehingga

dapat memenuhi kebutuhan lebih lanjut. WebDAV adalah salah satu

perluasan HTTP yang luar biasa berguna!

WebDAV di Linux

WebDAV di Linux

 Melihat isi direktori dari Zope

(2)

Bahkan salah satu contoh di dokumentasi resmi cadaver (salah satu WebDAV client) menggambarkan cara untuk membaca e-mail dari server Hote-mail.

Dan satu lagi yang paling menguntung-kan, DAV adalah teknologi terbuka. Sistem operasi mana saja yang ingin mengikuti teknologi terbaru sepertinya harus mendukung protokol ini. Windows, Linux, dan Mac OS telah terbukti sangat mendukung.

WebDAV dan FTP

Kalau hanya untuk transfer file, kenapa harus sampai menggunakan WebDAV? Bukankah FTP berfungsi untuk melakukan transfer file? Ada beberapa kelemahan FTP yang membuat FTP kurang layak untuk dipakai.

Yang pertama-tama adalah DAV mengambil segala keuntungan dari HTTP. Hal tersebut termasuk otentikasi yang kuat, enkripsi, dukungan proxy, dan caching. Yang kedua, transfer pada HTTP dapat dilakukan secara lebih efisien karena beberapa transfer dapat di-pipeline melalui sebuah koneksi TCP tunggal, sementara, setiap transfer pada FTP memerlukan koneksi baru.

WebDAV kini banyak didukung oleh web server terkemuka, di antaranya Apache dan komponen Zope.

Server WebDAV

Untuk mencoba WebDAV, kita memerlukan sebuah server. Bagi fanatik Apache, Anda bisa mempergunakan

mod_dav. Dalam artikel ini, kita akan mempergunakan Zope. Zope siap untuk bekerja dalam protokol DAV. Jalankanlah Zope Anda.

Client untuk WebDAV

Saat ini, terdapat banyak sekali client untuk WebDAV yang bisa digunakan. Sebagian di antaranya adalah free software, dan sebagian lagi adalah software proprietary. Salah satu client berbasiskan teks yang luar biasa adalah cadaver. Cadaver

menggunakan interface teks dan

tampilannya sangat mirip dengan tampilan ftp client berbasis teks lainnya.

Sebagai WebDAV client berbasis teks, kemampuan cadaver sangat patut diberikan acungan jempol. Dengan cadaver, kita dapat melakukan upload ataupun download file. Selain itu, fasilitas help yang diberikan juga cukup memadai, walaupun tidak berlebihan. Operasi namespace seperti copy dan move juga didukung dengan baik. Begitupun dengan fasilitas untuk bekerja dengan collection/direktori. Property manipulation dan recource locking adalah fasilitas tambahan yang sangat berguna.

Apabila Anda menggunakan Debian, installah cadaver dengan perintah berikut ini:

apt-get install cadaver

Untuk distro lain, carilah ke dalam cdrom distro Anda. Apabila tidak didapatkan, carilah rpm yang dipaketkan untuk distro Anda oleh pihak ketiga. Apabila masih tidak tersedia, lakukan

kompilasi dengan men-download source code-nya terlebih dahulu di http:// www.webdav.org/cadaver/.

Setelah terinstal, jalankanlah cadaver dengan perintah:

cadaver

Sebuah prompt akan ditampilkan untuk Anda. Sampai saat ini, Anda menjumpai prompt seperti halnya prompt pada beberapa ftp client berbasis teks. Segala perubahan akan langsung dikerjakan pada server.

Melakukan koneksi

Berikanlah perintah open <host> untuk membuka koneksi dengan server yang mendukung WebDAV.

Contoh: open http://localhost:8080/

Tanda seru pada prompt akan digantikan dengan path aktif.

Melihat isi direktori/collection

Sama seperti halnya pada FTP ataupun file sistem, berikanlah perintah ls.

Contoh: ls

Membuat direktori/collection

Untuk membuat direktori/collection, berikanlah perintah mkcol. Anda harus melalui proses authentikasi terlebih dahulu. Masukkanlah username dan password. Contoh: mkcol A

Masuk ke dalam direktori

Berikanlah perintah cd untuk masuk ke

WebDAV di Linux

 File a.pdf di ZMI terkunci

(3)

dalam suatu direktori Contoh: cd A

Melihat direktori aktif

Berikanlah perintah pwd untuk melihat direktori aktif

Contoh:pwd

Melihat isi file teks

Gunakanlah perintah less untuk melihat isi dari suatu file teks di server.

Contoh: less index_html

Men-download file

Sama seperti halnya FTP, cadaver pun mendukung perintah get untuk men-download file.

Contoh: get index_html

Meng-upload file

Berikanlah perintah put untuk meng-upload file.

Contoh: put index_html

Menghapus file

Berikanlah perintah delete untuk menghapus file.

Contoh: delete index_html

Meng-copy file

Meng-copy file dapat dengan mudah dikerjakan dengan perintah copy. Contoh: copy index_html index_html2

Mengunci sebuah resource

Dalam bekerja secara kolaboratif, ada kalanya kita perlu mengunci sebuah

resource agar tidak dimodifikasi oleh pihak lain terlebih dahulu. Berikanlah perintah lock untuk mengunci sebuah resource.

Contoh: lock a.pdf

Membebaskan resource

Untuk membebaskan resource yang terkunci, berikanlah perintah unlock. Contoh: unlock a.pdf

DAVFS

Penggunaan DAVfs memungkinkan Anda untuk mengakses DAV Server seperti halnya mengakses file sistem. Untuk menggunakan Dav file system, pastikan Anda mengaktifkan dukungan coda file system di kernel Anda. Coda file system dapat diaktifkan pada File

Systems|Network File Systems|Coda file system support. Untuk mengetahui apakah sistem Anda telah memiliki dukungan Coda file system, berikanlah perintah berikut ini:

$ grep coda /proc/filesystems nodev coda

Apabila perintah grep menampilkan hasil seperti pada contoh, maka Anda telah mengaktifkan dukungan Coda pada kernel. Lanjutlah ke langkah berikutnya. Apabila perintah tersebut kembali ke prompt tanpa menampilkan hasil apapun, maka jangan khawatir terlebih dahulu. Umumnya, coda telah diaktifkan dalam modul. Beberapa distro hadir dengan dukungan coda file system. Berikan perintah berikut ini apabila perintah grep sebelumnya tidak

memberikan output apapun juga:

# modprobe coda

Apabila masih terjadi kesalahan, sepertinya kompilasi ulang kernel dengan pengaktifan Coda harus dilakukan.

Langkah berikutnya, download-lah source code DAVFS2 terlebih dahulu di http;//dav.sourceforge.net. Setelah itu, lakukanlah perintah-perintah berikut ini:

tar zxvf davfs2-0.2.1.tar.gz cd davfs2-0.2.1/ ./configure make su make install

Berikut ini adalah contoh-contoh penggu-naan mount.davfs untuk proses mounting:  mount.davfs http://localhost:8080 /mnt/  mount.davfs http://localhost:8080 /mnt/

-o username=nopri,password=nopri

Untuk unmounting, lakukanlah seperti biasa:

umount /mnt

Kini Anda dapat mengakses WebDAV di direktori lokal Anda. Luar biasa, bukan?

Selesai sudah perkenalan kita dengan WebDAV, sebuah protokol yang sangat berguna. Dengan WebDAV, perbedaan jarak tidak membuat pekerjaan menjadi lebih susah dan merepotkan. Bekerja secara kolaboratif pun menjadi lebih seru dan menyenangkan. Tetap berkarya! Noprianto (noprianto@infolinux.co.id)

WebDAV di Linux

 Penggunaan DAVFS

(4)

Linked List pada C

B

ekerja dengan data yang besar tidak dapat kita hindari. Dan tidak jarang pula, data besar tersebut memiliki hubungan yang erat. Sebagai contoh, kita akan bekerja dengan file yang menyimpan sangat banyak record, di mana setiap record juga memiliki banyak field. Tugas kita tidak hanya sekadar

menampilkan setiap record-nya, melainkan harus pula menambahkan record, menghapus beberapa record sesuai keinginan user, sampai mengurutkan record! Kondisi tersebut mengharuskan kita memiliki satu rantai data yang panjang dan saling berhubungan. Rantai data tersebut harus mampu menampung semua data yang kita miliki. Penggunaan array saja jelas tidak bisa, karena kita bekerja dengan barisan data heterogen.

Kita perlu menggunakan union ataupun struct. Namun, kita juga tidak dapat semena-mena menggunakan array of struct dalam jumlah besar. Karena lokasi

penampungan memory untuk alokasi konvensional tidak akan mempu mencukupi kebutuhan memory kita. Selain itu, kita mungkin akan melakukan alokasi dan dealokasi beberapa kali di dalam program untuk mengoptimasi penggunaan memory. Solusi yang lebih baik adalah menggunakan linked list, baik singly (single) linked list ataupun doubly (double) linked list.

Pembuatan struct

Apa yang harus kita lakukan kali pertama adalah mengerti penggunaan struct di C. Bagi pengguna Pascal, struct adalah istilah di C untuk record. Penggunaan struct memungkinkan kita bekerja dengan satu record yang memiliki banyak field. Kita akan mulai dengan penggunaan struct sederhana. #include <stdio.h> int main() { struct Test { int x; char c; };

struct Test test1;

test1.x = 10; test1.c = ‘A’;

printf(“Isi dari test1.x: %d\n”, test1.x);

printf(“Isi dari test1.c: %c\n”, test1.c);

return 0; }

Program sederhana tersebut akan mem-buat satu struct bernama Test, kemudian membuat variabel test1 yang bertipe Struct Test. Setelah itu, nilai 10 dan ‘A’ masing-masing akan diisikan ke field x dan c untuk test1 tersebut. Terakhir, program mencetak isi dari test1.x dan test1.c.

Perhatikanlah kode berikut ini: 1. struct Test

{ int x; char c; };

2. struct Test test1;

3. test1.x = 10; test1.c = ‘A’;

Bagian (1) memperlihatkan bagaimana mendeklarasikan sebuah struct dengan nama Test. Sementara, bagian (2) mem-perlihatkan bagaimana mendeklarasikan variabel test1 yang bertipe Struct Test. Bagian terakhir, memperlihatkan bagaimana cara mengakses field di dalam test1.

Struct adalah salah satu dasar penggunaan linked list. Apabila

pemahaman akan struct sudah baik, maka penggunaan linked list akan semakin mudah. Berikutnya, kita akan membahas lebih jauh tentang alokasi memory dinamis.

Alokasi memory dinamis

Setelah memahami penggunaan struct, kita akan bergerak ke pengalokasian memory secara dinamis. Setelah yang satu ini beres, maka kita akan melangkah dengan tenang ke linked list.

Anda membutuhkan sebuah array of character yang begitu panjang. Dan sayangnya, array tersebut mungkin tidak Anda perlukan sepanjang program berjalan. Memesan memory secara konvensional seperti char s[10000] mungkin mudah dipakai. Sayangnya, kita akan kehilangan kebebasan untuk mendealokasikan memory yang sudah tidak terpakai. Sementara, C bukanlah Java atau Python yang cukup pemaaf dan sangat mengerti kelalaian programer dalam menggunakan memory. Apa yang akan terjadi apabila Anda memiliki banyak variabel sejenis char s[10000] tanpa pengalokasian dinamis?

Melangkah lebih jauh, apa yang akan terjadi dengan memory sistem apabila kita menggunakan array of struct besar dalam jumlah banyak? Kita menjadi begitu boros dengan sumber daya yang cukup terbatas! Kita butuh alokasi memory secara dinamis. Pengalokasian memory secara dinamis dapat dilakukan dengan salah satu fungsi alokasi memory yaitu malloc(). Sementara, lawannya, dealokasi memory , dapat dilakukan dengan memanggil fungsi free().

Fungsi malloc()

void *malloc(size_t size);

Fungsi ini dideklarasikan di dalam header stdlib.h. Dengan demikian, jangan lupa untuk meng-include header tersebut. Fungsi

Akan bekerja dengan record dalam jumlah besar? Barangkali Anda

membutuhkan alokasi memory dinamis dengan penggunaan linked list.

Alokasi memory konvensional tidak lagi bisa diandalkan.

(5)

ini akan meminta memory sebanyak size bytes, dan apabila sukses, pointer ke lokasi memory yang dipesan akan dikembalikan. Apabila gagal, fungsi ini akan

mengembalikan NULL. Memory yang dialokasikan tidak akan dibersihkan. Hal ini berbeda dengan fungsi calloc().

Linux mengikuti prinsip optimistic memory allocation strategy. Hal ini berarti, apabila malloc() sukses dan mengembalikan nilai bukan NULL, tidak akan ada jaminan bahwa memory selalu tersedia. Pustaka libc (di atas 5.4.23) dan GNU Libc (2.x) datang bersama mallloc() yang dapat dipengaruhi oleh variabel environment.

Umumnya, kita juga melibatkan penggunaan typecasting.

Fungsi free()

void free(void *ptr);

Fungsi ini dideklarasikan di dalam header stdlib.h. Dengan demikian, jangan lupa untuk meng-include header tersebut. Fungsi ini akan membebaskan memory teralokasi yang ditunjuk oleh variabel ptr. Apabila ptr adalah NULL, maka tidak ada operasi yang akan dilakukan. Fungsi ini tidak

mengembalikan nilai.

Contoh:

Sebagai contoh, kita akan mengalokasikan array of character sejumlah 50000 buah secara dinamis. Untuk itu, kita akan menggunakan kode berikut ini:

#include <stdio.h> #include <stdlib.h>

int main() {

char *s = (char *) malloc (50000 * sizeof (char));

free(s); return 0; }

Program ini tidak melakukan tindakan yang visible terhadap pengguna. Berikut ini adalah penjelasan untuk fungsi malloc() dan free() yang digunakan.

1. char *s = (char *) malloc (50000 * sizeof (char));

2. free(s);

Pada bagian (1), kita memesan memory sejumlah 50000 kali ukuran char. Setelah itu, kita melakukan typecasting ke bentuk char *. Sementara pada bagian (2), kita membahaskan memory teralokasi.

Contoh berikut mungkin akan sedikit lebih dekat kepada penggunaan linked list. Kita akan memesan sebuah struct secara dinamis. #include <stdio.h> #include <stdlib.h> int main() { struct Test { int x; char c; };

struct Test * test1 = (struct Test *) malloc (sizeof (struct Test));

test1 -> x = 10; test1 -> c = ‘A’;

printf(“Isi dari test1->x: %d\n”, test1->x);

printf(“Isi dari test1->c: %c\n”, test1->c);

free(test1);

return 0; }

Sama seperti contoh struct sebelumnya, program ini mengisikan nilai 10 dan A kepada masing-masing field x dan c struct test1. Setelah itu, pencetakan dilakukan. Bedanya, contoh yang satu ini menggu-nakan alokasi memori secara dinamis yang ditandai dengan pemanggilan fungsi malloc(). Perhatikanlah bagian berikut ini: 1. struct Test

{ int x; char c; };

2. struct Test * test1 = (struct Test *) malloc (sizeof (struct Test));

3. test1 -> x = 10; test1 -> c = ‘A’;

4. free(test1);

Pada bagian (1), seperti contoh terdahulu, kita mendeklarasikan Struct Test. Pada Bagian (2), kita memesan memori secara dinamis yang akan digunakan oleh struct test1. Kita memesan sejumlah ukuran Struct Test, dan hasilnya akan digunakan untuk menyimpan test1. Perhatikan bagian (3). Apabila sebelumnya kita menggunakan notasi titik untuk mengakses field, maka dalam pengalokasian dinamis ini, kita

menggunakan notasi ->. Bagian terakhir akan membebaskan memory teralokasi.

Saatnya untuk terbang ke singly linked list.

Singly linked list

Secara teori, linked list adalah sejumlah node yang dihubungkan secara linier dengan bantuan pointer. Dikatakan singly (single) linked apabila hanya ada satu pointer yang menghubungkan setiap node.

Setiap node akan berbentuk struct dan memiliki satu buah field bertipe struct yang sama, yang berfungsi sebagai pointer. Dalam menghubungkan setiap node, kita dapat menggunakan cara first-create-first-access ataupun first-create-last-first-create-first-access. Dalam artikel ini, kita hanya akan membahas cara first-create-first-access.

Kita akan mulai dengan deklarasi struct untuk node.

struct tnode {

int x;

struct tnode *next; }

Yang berbeda dengan deklarasi struct sebelumnya adalah satu field bernama next, yang bertipe struct tnode. Hal ini sekilas dapat membingungkan. Namun, satu hal yang jelas, variabel next ini akan menghubungkan kita dengan node di sebelah kita, yang juga bertipe struct tnode. Hal inilah yang menyebabkan next harus bertipe struct tnode.

Asumsikan kita memiliki sejumlah node yang selalu menoleh ke sebelah dalam arah yang sama. Atau, sebagai alat bantu, Anda bisa mengasumsikan beberapa orang yang bermain kereta api. Yang belakang akan

(6)

memegang yang depan, dan semuanya menghadap arah yang sama. Setiap pemain adalah node. Dan tangan pemain yang digunakan untuk memegang bahu pemain depan adalah variabel next. Sampai di sini, kita baru saja mendeklarasikan tipe data dasar sebuah node.

Selanjutnya, kita akan mendeklarasikan beberapa variabel pointer bertipe struct tnode. Beberapa variabel tersebut akan kita gunakan sebagai awal dari linked list, node aktif dalam linked list, dan node sementara yang kita gunakan dalam pembuatan node di linked list. Berikan nilai awal NULL kepada mereka.

Berikan deklarasi seperti berikut ini: struct tnode *head=NULL, *curr=NULL, *node=NULL;

Dengan demikian, sampai saat ini, kita telah memiliki tiga node. Satu sebagai kepala (head), satu sebagai node aktif dalam linked list (curr) dan satu lagi node sementara (node).

Kita telah siap untuk membuat singly linked list. Untuk itu, kita akan

memasukkan nilai tertentu sebagai nilai untuk field x dengan cara melakukan perulangan sehingga campur tangan user tidak diperlukan.

Seperti yang dikemukakan sebelumnya, kita akan membuat singly linked list dengan cara first-create-first-access. Dengan cara ini, node yang dibuat pertama akan menjadi head. Node-node yang dibuat setelahnya akan menjadi node-node pengikut. Untuk mempermudah pengingatan, ingatlah gambar anak panah yang mengarah ke kanan. Head akan berada pada pangkal anak panah, dan node-node berikutnya akan berbaris ke arah bagian anak panah yang tajam.

[head]->[node1]->[node2]->[node3]... [noden]->NULL

———————————————————>

Apabila kita perhatikan, setiap node memiliki petunjuk untuk node sebelahnya. Bagaimana dengan node terakhir? Kita berikan nilai NULL. Dengan demikian, setiap node kebagian jatah.

int i;

for (i=0; i<5; i++)

{

node = (struct tnode *) malloc (sizeof(struct tnode)); node -> x = i; if (head == NULL) { head = node; curr = node; }else {

curr -> next = node; curr = node; }

}

curr -> next = NULL;

Berikut adalah penjelasan kode-kode pembuatan singly linked list tersebut. Pertama-tama, kita membuat perulangan dari 0 sampai 4, yang dimaksudkan untuk membuat lima buah node yang masing-masing field x nya berisikan nilai dari 0 sampai 4. Pembuatan node dilakukan dengan fungsi malloc().

for (i=0; i<5; i++) {

node = (struct tnode *) malloc (sizeof(struct tnode)); node -> x = i;

... ...

}

Setelah itu, kita perlu membuat node dan penghubung. Pertama-tama, kita akan menguji apakah head bernilai NULL. Kondisi head bernilai NULL hanya terjadi apabila kita belum memiliki satu node pun. Dengan demikian, node tersebut akan kita jadikan sebagai head. Node aktif (curr), juga kita dapat dari node tersebut.

Sekarang, bagaimana kalau head tidak bernilai NULL alias kita telah memiliki satu atau lebih node? Yang pertama kita lakukan adalah menghubungkan pointer next dari node aktif (curr) ke node yang baru saja kita buat. Dengan demikian, kita baru saja membuat penghubung antara rantai lama dengan mata rantai baru. Atau, dalam permainan kereta api, pemain paling depan dalam barisan lama akan menempelkan tangannya pada bahu pemain yang baru bergabung. Node aktif (curr) kemudian kita pindahkan ke node yang baru dibuat.

if (head == NULL) { head = node; curr = node; }else {

Linked List pada C

(7)

curr -> next = node; curr = node; }

Setelah semuanya dibuat, sudah saatnya bagi kita untuk menghubungkan pointer next untuk mata rantai terakhir ke NULL.

curr -> next = NULL;

Dan bravo! Singly linked list baru saja kita ciptakan. Ada yang terlupa? Ada. Bagai-mana kita tahu bahwa linked list yang kita ciptakan adalah linked list yang benar? Salah satu cara untuk mengetahuinya adalah dengan mencetak field x untuk semua node. Dari head sampai node terakhir.

curr = head; while (curr != NULL) {

printf(“%d “, curr -> x); curr = curr -> next; }

printf(“\n”);

Pertama-tama, kita meletakkan node aktif (curr) ke posisi head. Setelah itu, kita akan pindahkan kunjungi satu per satu node dengan memindahkan node aktif (curr) ke posisi sebelahnya. Semua kunjungan tersebut akan kita lakukan apabila node aktif (curr) tidak menemui NULL. Anda mungkin ingin menambahkan pemanggilan free() untuk melakukan dealokasi.

Kode selengkapnya: #include <stdio.h> #include <stdlib.h> int main() { struct tnode { int x;

struct tnode *next; };

struct tnode *head=NULL, *curr=NULL, *node=NULL;

int i;

for (i=0; i<5; i++) {

node = (struct tnode *)

malloc (sizeof(struct tnode)); node -> x = i; if (head == NULL) { head = node; curr = node; }else {

curr -> next = node; curr = node; }

}

curr -> next = NULL;

curr = head; while (curr != NULL) {

printf(“%d “, curr -> x); curr = curr -> next; }

printf(“\n”);

return 0; }

Singly linked list pun selesai. Siap terbang lebih tinggi untuk doubly (double) linked list?

Doubly linked list

Apabila dalam singly linked list setiap node memiliki satu pointer yang menunjuk ke node sebelahnya, maka doubly linked list lebih serakah dengan membuat setiap node memiliki dua buah pointer: ke sebelah kiri (sebelum) dan ke sebelah kanan (setelah).

Gambarkan sekali lagi dalam anak panah berikut ini:

NULL<-[head]-><-[node1]-><-[node2]->...<-[tail]->NULL

———————————————————>

Bertambah lagi komponen yang akan kita gunakan. Apabila dalam singly linked list kita hanya memiliki head, curr dan node, maka untuk doubly linked list, kita menambahkan satu penunjuk yang berfungsi sebagai akhir dari list: tail. Bagian kiri dari head akan menunjuk ke NULL. Demikian pula dengan bagian kanan dari tail. Setiap node saling terhubung dengan pointer kanan dan kiri.

Bagaimana dengan permainan kereta api kita yang populer tersebut? Sayang sekali. Kita tidak dapat memainkannya lagi. Sebagai gantinya, kita akan memainkan sesuatu yang lebih menarik. Saling berpegangan tangan, kemudian membuat barisan. Setiap pemain memegang teman di sebelah kirinya dengan tangan kiri, dan memegang teman di sebelah kanannya dengan tangan kanan. Bagaimana dengan pemain-pemain paling ujung yang kese-pian? Pemain paling kiri akan memegang udara dengan tangan kirinya, dan pemain paling kanan akan memegang udara dengan tangan kanannya.

Seperti biasa, kita mulai dengan pem-buatan struct tnode. Harap diperhatikan bahwa kini kita juga memiliki pointer prev selain next.

struct tnode {

int x;

struct tnode *prev; struct tnode *next; };

Kemudian, tiba saatnya bagi kita untuk mendeklarasikan beberapa node yang akan kita gunakan sebagai head, tail, node aktif (curr) dan node sementara (node).

struct tnode *head=NULL, *curr=NULL, *node=NULL, *tail=NULL;

Sama seperti pada pembuatan singly linked list, dalam pembuatan doubly linked list ini, kita akan membuat sebuah perulangan sebanyak 5 kali untuk mengisikan nilai 0 sampai 4 ke dalam field x untuk masing-masing node.

int i;

for (i=0;i<5;i++) {

node = (struct tnode *) malloc (sizeof(struct tnode)); node -> x = i;

if (head == NULL) {

head = node; head -> prev = NULL; curr = node;

}else {

curr -> next = node;

(8)

node -> prev = curr; curr = node; }

}

curr -> next = NULL; tail = curr;

Secara umum, kode yang kita buat hampir sama dengan pembuatan singly linked list. Hanya bedanya, pada doubly linked list, kita menghubungkan pointer kiri dan kanan suatu node.

if (head == NULL) {

head = node; head -> prev = NULL; curr = node;

}else {

curr -> next = node; node -> prev = curr; curr = node; }

Pertama-tama, tentunya kita perlu menguji apakah head bernilai NULL yang artinya belum ada satu node pun yang tercipta. Apabila demikian, maka node yang kita buat akan menjadi head. Node aktif (curr) pun di set sesuai node yang dibuat. Dan sebagai konsekuensi dari doubly linked list, kita mengatur pointer prev pada head menunjuk ke NULL. Pada permainan gandeng menggandeng tangan kita, kita meminta satu orang untuk mulai membuat barisan, dengan tangan kirinya memegang udara dan tangan kanannya siap untuk menggandeng pemain berikut.

Bagaimana kalau head tidak NULL? Hal tersebut berarti kita telah memiliki satu atau lebih node yang terhubungan secara double. Yang perlu kita lakukan adalah membuat pointer next pada node aktif (curr) untuk menunjuk ke node yang baru saja kita buat. Dan tidak lupa, sebagai konsekuensi dari doubly linked list, kita juga membuat pointer prev pada node yang baru saja kita buat untuk menunjuk kepada node aktif (curr). Setelah keduanya saling tahu kiri dan kanan masing-masing, kita memindahkan node aktif (curr) ke node yang baru saja dibuat. Pada permainan kita, satu atau lebih pemain telah membentuk barisan. Lalu datang pemain baru. Pemain

kesepian di barisan akan menggandeng pemain yang baru bergabung tersebut dengan tangan kanannya. Sementara, pemain baru akan menyambut dengan tangan kirinya. Maka pemain baru telah tergabung ke dalam barisan. Dan tidak lupa, pemain aktif (yang akan meggandeng) kita pindahkan ke pemain baru tersebut.

Setelah semuanya terbentuk, saatnya untuk menutup doubly linked list. Pemain baru dilarang masuk dulu. Ekor (tail) akan kita pindahkan ke node terakhir.

curr -> next = NULL; tail = curr;

Untuk menguji keberhasilan doubly linked kita, kita akan mencetak dari awal list sampai akhir list:

curr = head; while (curr != NULL) {

printf(“%d “, curr -> x); curr = curr -> next; }

printf(“\n”);

Dan karena apa yang kita buat adalah doubly linked list, maka kita juga dapat mencetak dari tail sampai head. Berikut ini adalah caranya:

curr = tail;

while (curr != NULL) {

printf(“%d “, curr -> x); curr = curr -> prev; }

printf(“\n”);

Anda mungkin ingin membebaskan memori teralokasi dengan pemanggilan fungsi free(). Kode selengkapnya: #include <stdio.h> #include <stdlib.h> int main() { struct tnode { int x;

struct tnode *prev; struct tnode *next; };

Linked List pada C

struct tnode *head=NULL, *curr=NULL, *node=NULL, *tail=NULL;

int i;

for (i=0;i<5;i++) {

node = (struct tnode *) malloc (sizeof(struct tnode)); node -> x = i;

if (head == NULL) {

head = node; head -> prev = NULL; curr = node;

}else {

curr -> next = node; node -> prev = curr; curr = node; }

}

curr -> next = NULL; tail = curr;

curr = head; while (curr != NULL) {

printf(“%d “, curr -> x); curr = curr -> next; }

printf(“\n”); curr = tail;

while (curr != NULL) {

printf(“%d “, curr -> x); curr = curr -> prev; }

printf(“\n”); return 0; }

Operasi pada linked list tidak hanya pembuatan dan pencetakan. Suatu saat, Anda mungkin perlu untuk menghapus node yang terletak di tengah-tengah list. Atau bahkan Anda mungkin perlu menyelipkan node di tengah-tengah node. Sama seperti halnya permainan gandeng-menggandeng tangan tersebut, sangat mungkin apabila tiba-tiba ada pemain baru yang ingin menyelipkan dirinya di tengah-tengah barisan. Tertantang? Selamat mencoba! Noprianto (noprianto@infolinux.co.id)

(9)

Software RAID di Linux

B

ayangkanlah skenario berikut ini. Perusahaan Anda menyimpan hampir segalanya secara tersen-tralisasi. Hampir semua data di simpan di dalam satu server. Dan di dalam satu harddisk. Backup dilakukan per minggu dan kemudian datanya disimpan ke dalam CDROM secara otomatis. Pada suatu hari, tanpa diduga, harddisk tersebut tiba-tiba berdemonstrasi mogok kerja seperti fenomena yang belakangan ini mudah ditemui di belantara ketenagakerjaan Indonesia. Apa yang pertama-tama terbayang sebagai solusi? Beli harddisk baru. Kembalikan data hasil back-up terakhir. Dan kalau cukup berminat, harddisk lama diserahkan ke tukang servis. Cukup banyak waktu yang terbuang. Dan cukup banyak darah yang mengalir ke otak karena stress.

Apabila Anda rajin melakukan back-up, hal tersebut tentunya sudah menjadi modal untuk mencegah kehilangan data. Namun, dengan investasi sekitar Rp1 juta atau kurang, dan membeli satu atau dua harddisk baru, kita dapat membuat RAID secara software. Walaupun dalam praktik ada harddisk yang harus dikorbankan dan hanya menjadi mirror bagi harddisk pertama, data yang kita miliki akan relatif lebih aman lagi karena apabila salah satu harddisk rusak, harddisk tersebut tinggal dicabut dan digantikan dengan harddisk baru. Proses mirroring kemudian dilakukan, dan kini Anda memiliki dua harddisk yang saling mirror. Sekali lagi: satu rusak, ganti, mirror, dan Anda pun tenang kembali. Mirror hanyalah salah satu dari cara kerja RAID. Masih terdapat beberapa cara lainnya. Artikel ini difokuskan pada RAID level 1 yang bekerja secara mirroring.

Untuk RAID Level 1 atau RAID1 untuk lebih singkat, kita perlu menyediakan dua atau lebih harddisk yang kemudian akan saling menyamakan isinya dalam block level. Artinya, apabila Anda memiliki dua

buah harddisk masing-masing berukuran 20 GB, maka kedua harddisk tersebut akan melakukan mirroring sehingga total kapasitas Anda hanyalah 20 GB. Apabila Anda menggunakan tiga harddisk, maka total kapasitas Anda tetap 20 GB. Sebuah pengorbanan memang. Satu lagi kabar buruk. Semua elemen RAID1 harus memiliki ukuran yang sama. Apabila ada ukuran yang tidak sama, maka kapasitas total adalah kapasitas yang paling kecil. Pemborosan terjadi di sana sini.

Anda masih dapat mempergunakan spare disk, yang berarti penggunaan harddisk akan menjadi lebih boros lagi. Namun, keamanan data akan lebih terjaga karena proses rekonstruksi data/mirroring akan segera dilakukan apabila salah satu dari mirror mengalami kerusakan.

Bagaimana dengan kecepatan penulisan pada RAID1? Kecepatannya akan sedikit di bawah kecepatan penulisan pada harddisk tunggal karena data yang ditulis harus di-copy-kan ke setiap elemen RAID. Begitupun dengan kecepatan baca. Untuk kernel 2.4, kecepatan baca/tulis telah dikembangkan sangat lanjut sehingga faktor kecepatan tidak perlu dikhawatirkan lebih lanjut.

Barangkali pertanyaan yang lebih mendasar. Kenapa harus menggunakan RAID? Jawabannya bisa sangat bervariasi. Salah satunya adalah karena keamanan data lebih terjamin. Backup saja tidak cukup karena umumnya ada selisih waktu yang cukup berarti. Dan selain itu, Anda bisa mempergunakan gabungan dari beberapa harddisk yang mungkin tidak terpakai. RAID tidak selalu harus mirroring (RAID1) yang boros.

Tertarik? Kalau ya, ternyata RAID cukup manja. Anda harus mempersiapkan segala sesuatu yang diperlukan. Kita akan bekerja dengan RAID1.

Yang pertama-tama, siapkan satu harddisk untuk percobaan. Atau, dalam

bentuk yang lebih jelek lagi, siapkan dua partisi kosong berukuran sama apabila Anda tidak memiliki harddisk ekstra. Penulis menggunakan satu harddisk pinjaman yang penulis bagi menjadi dua partisi berukuran sama besar. Harap diperhatikan bahwa seharusnya penggunaan RAID tidak dilakukan pada harddisk yang sama karena fungsinya akan menjadi tidak jelas. Performa pun akan turun dengan drastis. Kita mempergunakan harddisk yang sama hanya sebagai contoh.

Dua elemen RAID1 yang dibuat harus memiliki tipe partisi Linux RAID Autodetect, yang memiliki kode fd.

Yang kedua, dan yang paling merepot-kan, adalah mengaktifkan dukungan RAID pada kernel. Saat ini, di kernel 2.4, peng-gunaan software RAID telah mengalami banyak peningkatan performa dan kemudian. Pastikan Anda memiliki dukungan RAID diaktifkan di dalam kernel Anda. Apabila belum, maka kompilasi kernel harus dilakukan. Aktifkan dukungan RAID pada bagian Multi-device

support|Multiple devices driver support (RAID and LVM). Saat ini, kernel

mendukung mode Linier, stripping (RAID0), mirroring (RAID1), RAID4/5, Multipath. Sebaiknya, masukkan fasilitas ini sebagai fasilitas built-in.

Yang terakhir, siapkan program mdadm. Beberapa saat yang lalu, penulis sibuk menggunakan kumpulan program raidtools. Akan tetapi, ternyata mdadm lebih mudah untuk digunakan. Apabila Anda

menggunakan Debian, berikan perintah berikut ini untuk melakukan instalasi mdadm:

apt-get install mdadm

Untuk distro lain, carilah terlebih dahulu paket untuk distro Anda. Apabila tidak ditemukan, downloadlah mdadm di http:// www.cse.unsw.edu.au/~neilb/source/ mdctl/. Mdadm dahulu bernama mdctl. Apabila ketiga persyaratan tersebut telah dipenuhi, maka kita siap untuk bekerja dengan RAID.

Penulis menggunakan contoh yang jelek dengan penggunaan partisi-partisi dalam satu harddisk. Device /dev/hdb1 dan /dev/ hdb2 akan penulis korbankan sebagai

Software RAID di Linux

Data adalah bagian yang sangat penting dalam

komputasi. Kehilangan data harus senantiasa

dicegah. Berbagai cara bisa ditempuh.

Menggunakan RAID adalah salah satunya.

(10)

Software RAID di Linux

elemen-elemen dalam RAID1. Device RAID sendiri tidak akan menggunakan lagi nama device setiap elemennya, melainkan menggunakan nama device /dev/mdx, di mana x dimulai dari 0. Dengan demikian, mulai saat ini, kita tidak lagi bicara /dev/ hdb1 ataupun /dev/hdb2. Kita akan bicara / dev/md0.

Untuk menggunakan RAID, kita harus membuatnya terlebih dahulu. Berikan perintah berikut ini untuk membuat RAID1 bernama /dev/md0 yang berisikan 2 elemen, /dev/hdb1 dan /dev/hdb2:

# mdadm —create /dev/md0 —level=1 — raid-devices=2 /dev/hdb1 /dev/hdb2

Apabila harddisk Anda tiba-tiba bekerja cukup keras, maka proses konstruksi/ mirroring sedang dilakukan. Lihat prosesnya dengan membaca file /proc/mdstat.

# cat /proc/mdstat Personalities : [raid1] read_ahead 1024 sectors md0 : active raid1 hdb2[1] hdb1[0] 511936 blocks [2/2] [UU] [===>...] resync = 15.6% (80384/511936) finish=5.2min speed=1356K/sec

unused devices: <none>

Setelah file sistem dibuat di /dev/md0, maka untuk selanjutnya, device tersebut telah siap digunakan. Anda dapat melakukan proses mount seperti halnya proses mount pada device biasa. Berikut ini adalah contoh keluaran program df -h untuk /dev/md0 yang telah di-mount ke /mnt.

# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/hda1 3.5G 3.2G 264M 93% /

/dev/md0 1.2G 47M 1.2G 4% /mnt

Tertarik melihat informasi seputar /dev/ md0 kita? Cobalah berikan perintah berikut ini:

# mdadm —query —detail /dev/md0

Informasi akan ditampilkan dengan sangat mendetail. Dari informasi yang ditampilkan, telitilah memperhatikan State, Active Devices, Working Devices, dan

Failed Devices. Terkadang, salah satu elemen dalam RAID Anda mungkin mengalami masalah.

Lanjut untuk penggunaan RAID lebih lanjut. Terkadang kita ingin menghentikan penggunaan RAID karena sesuatu alasan. Oleh karena itu, berikanlah perintah seperti berikut ini:

# mdadm —stop /dev/md0

Untuk menjalankan kembali, berikanlah perintah berikut ini:

# mdadm —assemble /dev/md0 /dev/hdb1 /dev/hdb2

Sampai di sini, kita telah melihat penggunaan dasar dari RAID1. Dalam setiap contoh sebelumnya, kita bisa melihat bahwa semuanya bekerja dengan baik. Tidak ada error yang terjadi. Namun, terkadang di dunia nyata kita harus berurusan dengan rusaknya salah satu elemen array sehingga elemen tersebut harus dihentikan, atau RAID harus dijalankan dengan 1 elemen saja. Kita akan menyimulasikan kerusakan pada /dev/hdb2 sehingga /dev/md0 kini hanya memiliki elemen /dev/hdb1.

# mdadm —assemble —run /dev/md0 /dev/ hdb1

mdadm: /dev/md0 has been started with 1 drive (out of 2). # cat /proc/mdstat Personalities : [raid1] read_ahead 1024 sectors md0 : active raid1 hdb1[0] 511936 blocks [2/1] [U_]

unused devices: <none>

Tiba-tiba, elemen kedua telah diperbaiki atau digantikan dengan yang baru. Kita bisa saja memasukkan kembali elemen tersebut ke dalam array yag sedang aktif dengan perintah berikut ini:

# mdadm -a /dev/md0 /dev/hdb2 mdadm: hot added /dev/hdb2

# cat /proc/mdstat Personalities : [raid1] read_ahead 1024 sectors md0 : active raid1 hdb2[2] hdb1[0] 511936 blocks [2/1] [U_] [>...] recovery = 2.8% (14528/511936) finish=6.2min speed=1320K/sec unused devices: <none>

Program mdadm juga dilengkapi dengan fasilitas untuk melakukan monitoring. Pada saat monitoring dilakukan, mdadm akan melaporkan event yang terjadi dalam periode waktu tertentu. Setiap laporan dapat dikirimkan kepada e-mail yang telah ditentukan.

Mdadm adalah program yang sangat kompleks. Rujuklah kepada manualnya untuk cara penggunaan lebih lanjut.

Bermacam-macam level

RAID

Selain level 1, kita mengenal bermacam-macam level RAID. Tidak perlu harus menggunakan semuanya. Nomor level yang lebih tinggi tidak menunjukkan peningkatan kinerja atau peningkatan performa secara langsung. Pilih satu yang cocok Anda gunakan. Dalam beberapa kasus, RAID1 dan RAID5 adalah dua jenis RAID yang paling sering digunakan.

Pertama-tama, kita mengenal mode linear. Pada mode ini, beberapa harddisk akan ditambahkan sehingga kapasitas membesar. Tidak ada redundansi pada mode ini megakibatkan risiko kehilangan data cukup besar. Berikutnya adalah RAID0 yang juga tidak mengenal redundansi data. Beda antara RAID0 dengan linear adalah cara penulisan pada RAID0 yang dilakukan secara paralel dengan membagi dalam stripe-stripe dan menuliskannya ke setiap elemen. RAID1 telah kita bahas. Sementara RAID4 dan RAID5, terutama RAID5, direncanakan sebagai RAID yang paling cocok digunakan. Menggunakan sistem parity yang tersebar ke setiap elemen, RAID5 lebih sering digunakan daripada RAID4 yang menyimpan parity dalam satu elemen.

RAID adalah salah satu cara untuk meminimasi risiko hilangnya data. Walaupun sedikit boros, hati akan lebih tenang. Setiap ada kerusakan, proses rekonstruksi secara otomatis akan dilakukan. Sampai di sini perkenalan kita dengan RAID di Linux. Selamat mencoba! Noprianto (noprianto@infolinux.co.id)

(11)

D

ata adalah hal terpenting dalam komputasi. Kehilangan data adalah musibah besar. Dan cara menge-lola data secara berantakan adalah pemicu kehilangan data. Apabila data Anda cukup banyak dan merupakan data rahasia, maka Anda membutuhkan sebuah database server yang layak untuk menyimpannya. Menyimpan data ke dalam sebuah file text adalah tindakan konyol yang dapat memicu berbagai risiko hilangnya data.

Puluhan tahun sudah sistem database mengalami perubahan. Mungkin sudah terlalu banyak sistem database dan aplikasinya yang telah tumbuh dan kemudian berubah sesuai dengan perkembangan teknologi. Salah satu yang memegang peranan besar adalah sistem database yang dikenal dengan nama POSTGRES, yang dikembangkan di University of California at Berkeley pada tahun 1986. Waktu itu, POSTGRES mencetak perubahan besar yang segera membuat berbagai pihak tertarik. Setelah satu tahun dikembangkan, lahirlah versi demo-nya pada tahun 1987, yang segera dipertunjukkan di berbagai konferensi teknologi komputer saat itu.

Dan akhirnya, pada tahun 1989, lahirlah POSTGRES versi 1. Versi 2 yang datang dengan banyak perubahan desain pun diluncurkan satu tahun kemudian. Berkembang dan berkembang terus, pada tahun 1991, lahirlah POSTGRES 3, yang waktu itu menjadi begitu populer dan segera digunakan oleh banyak aplikasi bisnis. Pada tahun 1993, database ini makin populer lagi. Basis penggunanya bertambah secara dramatis. Dan karena POSTGRES menjadi terlalu kompleks, dan jauh melebihi kebutuhan riset database, maka secara resmi proyek ini dihentikan setelah mencapai versi 4.2.

Pada tahun 1994, Andrew Yu dan Jolly Chen menambahkan kemampuan SQL ke dalam POSTGRES, yang kemudian

berubah menjadi proyek baru dengan nama Postgres95. Sistem database berbasiskan kode POSTGRES tersebut kemudian dilempar sebagai proyek open source, dan segera mendapatkan banyak tanggapan. Postgres95 memiliki banyak kelebihan dibandingkan dengan POSTGRES. Salah satunya adalah kecepatan dan kestabilan.

Pada tahun 1996, nama Postgres95 segera menjadi nama yang kadaluarsa. Kuno. Para pembuatnya kemudian mencari nama baru dan lahirlah PostgreSQL, yang mengacu kepada originasi dari POSTGRES yang memiliki kemampuan SQL. Dan uniknya, proyek ini dirilis langsung pada versi 6.0, mengacu kepada pengembangan POSTGRES yang seharusnya.

PostgreSQL adalah object-relational database management system yang datang dengan banyak fitur, di antaranya multi-version concurrency control (MVCC), mendukung hampir semua atura SQL, dan memiliki banyak dukungan bahasa pemrograman lain seperti C/C++, TCL, Java, Perl, dan Python. Dengan berbagai fitur tersebut, layaknya PostgreSQL mengklaim dirinya sebagai most advanced database system.

Proyek open source yang hebat umumnya relatif susah digunakan. Begitu pun dengan PostgreSQL. Dibandingkan dengan MySQL, PostgreSQL relatif lebih susah digunakan karena kompleksitasnya yang begitu besar. Namun, bagi Anda yang lebih peduli untuk merancang database yang bagus dan hanya sekadar menggunakannya, maka PostgreSQL tetap layak digunakan dan dapat dipelajari dalam waktu yang singkat, asalkan Anda telah mengerti konsep database dan SQL secara umum.

Apabila Anda menggunakan Debian (atau distro turunannya), maka berikanlah perintah berikut ini untuk menginstal postgreSQL:

apt-get install postgresql postgresql-client postgresql-doc

PostgreSQL pun akan duduk dengan tenang di dalam sistem Anda. Untuk distro lain, gunakanlah managemen paket dari distro Anda, atau carilah berbagai paket untuk postgreSQL server, client, dan dokumentasi. Umumnya, hampir setiap distro telah datang bersama database server ini. Anda juga dapat melakukan kompilasi sendiri dari source dengan men-download source code-nya terlebih dahulu dari www.postgresql.org.

Umumnya, server dari postgresql yang bernama postmaster akan dijalankan oleh user postgres. Menjalankan sebagai user nobody atau root sangat tidak disarankan. Sebagai contoh, kita menjalankan postmas-ter sebagai user postgres. Gantilah user ini dengan user apapun yang digunakan oleh distro Anda sebagai user yang menjalankan server postgresql.

Untuk berlatih, kita akan menggunakan program client psql terlebih dahulu, setelah itu, kita akan menggunakan phppgadmin. Psql lebih susah digunakan karena berbasis teks, sementara phppgadmin dijalankan lewat web browser.

PostgreSQL dapat menggunakan ident-based authentication dalam mengenali user yang akan menggunakan database server-nya. Untuk mudahnya, apabila Anda sedang login dengan user nop misalnya, maka kita juga akan membuat user di postgresql dengan nama nop. Gantilah user nop dengan user lain sesuai keinginan Anda. Sebagai catatan, user authentication pada postgresql sangatlah kompleks dan di luar cakupan artikel ini. Bacalah administrator guide yang datang bersamanya untuk otentikasi lanjutan.

Untuk membuat user nop di postgresql, jadilah root, kemudian, jadilah user

Belajar Cepat PostgreSQL

Apabila Anda memerlukan sistem penyimpanan data yang luar biasa di

Linux, maka gunakanlah PostgreSQL. Walaupun merupakan sistem yang

kompleks, kita tetap bisa menggunakannya dengan mudah.

(12)

postgres. Berikut ini adalah perintahnya: $ su

Password: # su postgres $

Setelah itu, gunakan program createuser untuk membuat user nop di postgresql.

$ createuser nop

Shall the new user be allowed to create databases? (y/n) y

Shall the new user be allowed to create more new users? (y/n) n

Apabila kita menjawab y pada pertanyaan pertama, maka user yang kita buat akan dapat membuat database sendiri. Kemudian, apabila kita menjawab y pada pertanyaan kedua, maka user yang dibuat akan dapat membuat user lain. Apabila program createuser berhasil, maka tulisan berikut ini akan tampil di layar:

CREATE USER

Login-lah kembali sebagai user nop. Kita akan membuat database baru dengan nama nop. Untuk itu, Anda bisa

mempergunakan program createdb. Berikut ini adalah contohnya penggunaannya:

createdb nop

Apabila berhasil, maka tulisan berikut ini akan tampil di layar:

CREATE DATABASE

Pada saat pembuatan user nop oleh user postgres, kita mengizinkan nop untuk membuat database. Oleh karena itu, user nop bisa membuat banyak database. Untuk menghapus database, program dropdb dapat digunakan. Berikut ini adalah contoh penggunaan program dropdb:

dropdb nop2

Apabila berhasil, maka tulisan berikut ini akan tampil di layar:

DROP DATABASE

Kita telah memiliki database dengan nama nop. Sebentar lagi, kita akan masuk ke shell postgresql sebagai user nop.

Menggunakan psql

PostgreSQL datang dengan satu client

berbasis teks dengan nama psql. Apabila Anda login sistem dengan user nop, dan akan menggunakan database nop untuk bekerja, maka berikanlah perintah berikut ini untuk masuk ke server postgresql:

$ psql nop

Welcome to psql 7.3.3, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands

\g or terminate with semicolon to execute query

\q to quit

nop=#

Selanjutnya, Anda dapat memberikan perintah khas postgresql ataupun perintah SQL sesuai keinginan Anda. Berikut ini adalah beberapa perintah khas dan keguna-annya, yang diberikan pada program psql.

Mencari bantuan

\?

Melihat daftar database

\l

contoh keluaran:

List of databases Name | Owner | Encoding ————— + ——————+ nop | nop | SQL_ASCII template0 | postgres | SQL_ASCII template1 | postgres | SQL_ASCII (3 rows)

Melihat daftar user

\du

contoh keluaran:

List of database users User name| User ID | Attributes ————— + ———— + ———————— nop | 100 | create database postgres | 1 | superuser, create

database test | 101 | create database (3 rows)

Melihat daftar tabel

\dt

Belajar Cepat PostgreSQL

(13)

Contoh keluaran:

List of relations Schema | Name | Type | Owner ———— + ——— + ——— + public | test | table | nop (1 row)

Keluar dari psql

\q

Berikut ini kita akan membuat tabel A yang memiliki dua field, yaitu nama dan hobi, yang masing-masing bertipe varchar.

CREATE TABLE A( nama varchar(50), hobi varchar(100) );

Apabila perintah tersebut berhasil, maka tulisan CREATE TABLE akan ditampilkan ke layar.

Setelah itu, kita akan mengisikan dua record ke dalam tabel A tersebut. Berikut ini adalah pemberian perintah dan

keluarannya:

nop=# INSERT INTO A(nama, hobi) VALUES (‘nop’,’terbang’);

INSERT 16995 1

nop=# INSERT INTO A(nama, hobi) VALUES (‘nop2’,’makan’);

INSERT 16996 1

Perintah berikut ini berguna untuk me-nampilkan semua record di dalam tabel A:

nop=# SELECT * FROM A; nama | hobi ——— + nop | terbang nop2 | makan (2 rows)

Menggunakan phppgadmin

Apabila psql dirasa terlalu susah, kita dapat mempergunakan phppgadmin, yang jelas jauh lebih mudah untuk digunakan. Berikan perintah berikut ini untuk menginstal phppgadmin. Anda akan membutuhkan Apache dan PHP.

Berikan perintah berikut ini untuk menginstall phppgadmin:

apt-get install phppgadmin

Jalankanlah apache Anda. Kemudian bukalah URL http://localhost/phppgadmin/

dengan web browser Anda. Pertama-tama, lakukan otentikasi terlebih dahulu. Secara default, Anda tidak perlu memasukkan password.

Setelah masuk, Anda dapat

mempergunakan phpphadmin sebagai client untuk bekerja dengan server postgresql. Dengan phppgadmin, pengguna akan sangat banyak terbantu karena phppgadmin sangat menyederhanakan penggunaan postgresql. Klik sana, klik sini, isi beberapa nilai, dan Anda pun selesai. Bandingkan dengan program psql.

Sebagai contoh, kita akan membuat tabel baru, masih di dalam database nop. Kliklah tanda tambah pada database nop di frame kiri. Klik sekali lagi tanda tambah pada public. Seharusnya, Anda akan menjumpai tulisan Tables di sana. Kliklah Tables tersebut, dan lihatlah pada frame kanan.

Frame kanan akan mendaftar segala tabel Anda. Untuk membuat tabel baru, kliklah link create table. Anda akan diminta untuk mengisikan nama tabel dan jumlah field-nya. Setelah semua langkah selesai, maka sebuah tabel baru telah Anda miliki.

Untuk menghapus tabel, kembalilah pada tampilan daftar tabel, kemudian kliklah tombol Drop untuk tabel yang

bersangkutan.

Phppgadmin adalah salah satu client postgresql yang cukup mudah untuk digunakan. Apabila Anda malas menginstal Apache dan PHP, maka Anda dapat mempergunakan client lain yang berbasis GUI, seperti pgaccess.

Belajar Cepat PostgreSQL

 Lebih mudah dengan PHPPgAdmin

 Program Psql, susah namun fleksibel

Dump ke file teks

Apabila Anda hendak melakukan back-up, Anda tidak dapat meng-copy-kan begitu saja file-file database Anda. Sebagai gantinya, Anda dapat memasukkan semua isi database ke dalam sebuah file teks. File teks tersebut yang akan Anda bawa ke mana-mana.

PostgreSQL menyediakan program pg_dump untuk memasukkan semua isi database ke file teks. Berikut ini adalah contoh penggunaannya:

pg_dump nop > nop.sql

Apabila Anda hanya ingin memasukkan isi tabel tertentu saja (misalnya tabel A pada database nop), maka berikanlah perintah berikut ini:

pg_dump nop —table=A> nop.A.sql

Selanjutnya, apabila Anda ingin mema-sukkan semua data yang telah didump ke dalam database server, gunakan kembali program psql, dengan cara sebagai berikut:

psql nop < nop.sql

PostgreSQL memang lebih susah dibandingkan dengan MySQL. Akan tetapi, fitur yang datang bersamanya juga sangat banyak, dibandingkan dengan MySQL. Namun, postgreSQL juga tidak cocok digunakan untuk segala situasi. Tidak semua data perlu disimpan di dalam postgreSQL. Gunakan postgreSQL apabila Anda benar-benar memerlukannya. Seperti kata pepatah, “gunakan alat yang sesuai untuk menyelesaikan masalah”. Noprianto (noprianto@infolinux.co.id)

(14)

Python dan PostgreSQL

A

plikasi bisnis umumnya berhubu-ngan database. Kita dapat me-milih salah satu dari sekian sistem database open source yang tersebar di belantara free software. Salah satu yang sangat populer adalah MySQL. MySQL adalah database server yang cukup mudah digunakan. Sayangnya, MySQL bukanlah sistem database yang lengkap. Apabila Anda butuh sistem yang lebih lengkap dan kaya fitur, namun tetap gratis, gunakanlah PostgreSQL. Yang satu ini memang lebih susah untuk digunakan. Instalasinya juga cukup rumit. Namun, yang jelas, PostgreSQL adalah sistem database object-relational yang luar biasa. Untuk kebutuhan bisnis serius, gunakan PostgreSQL. Tidak perlu mengeluarkan banyak uang untuk membeli sistem database saja. PostgreSQL umumnya sudah lebih dari cukup.

Sama dengan pilihan sistem database, pilihan bahasa pemrograman juga cukup banyak. Silakan saja pilih mulai dari yang low level seperti C/C++ sampai yang high level seperti PHP, Perl, Java, atau Python. Semua memiliki kekurangan dan kelebihan sendiri. Kali ini, kita akan menggunakan Python. Python adalah bahasa pemrograman yang cukup lengkap dan mudah digunakan. Pemula sekalipun cenderung mudah untuk mempelajari bahasa yang satu ini.

Dengan Python, kita dapat dengan mudah terhubung ke PostgreSQL. Pilihan modulnya pun cukup banyak. Salah satu yang akan kita gunakan adalah PyGreSQL atau python-pygresql. Setelah melakukan analisis kebutuhan dengan benar dan membuat desain yang benar pula, kita dapat menerapkan aplikasi bisnis kita dengan Python dan menggunakan postgresql untuk mengatur penyimpanan data.

Persiapan PostgreSQL

Pertama-tama, Anda dapat menggunakan paket-paket di distro Anda untuk menginstal PostgreSQL. Jarang sekali ada distro umum yang tidak menyertakan postgreSQL di dalamnya. Kalaupun tidak, download-lah paket untuk distro Anda yang dibuat oleh pihak ketiga. Bagi yang menggunakan Debian, berikan perintah berikut ini untuk instalasi:

apt-get install postgresql postgresql-client postgresql-doc

Bagi Anda yang lebih menyukai kompilasi sendiri, download-lah source code postgresql dari http://

www.postgresql.org, kemudian ekstraklah dan masuklah ke direktori hasil ekstrak tersebut. Setelah itu, lakukanlah langkah-langkah berikut ini.

./configure make su make install adduser postgres mkdir /usr/local/pgsql/data

chown postgres /usr/local/pgsql/data su - postgres

/usr/local/pgsql/bin/initdb -D /usr/local/ pgsql/data

/usr/local/pgsql/bin/postmaster -D /usr/ local/pgsql/data >logfile 2>&1 & /usr/local/pgsql/bin/createdb test /usr/local/pgsql/bin/psql test

Instalasi PostgreSQL lebih neko-neko dan kompleks apabila dibandingkan dengan instalasi MySQL.

Salah satu hal yang sedikit berbeda dengan MySQL adalah sistem otentikasi client-nya. PostgreSQL memiliki berbagai cara dalam melakukan otentikasi. Cara yang termudah adalah membuat user di PostgreSQL yang memiliki nama sama

dengan user di sistem.

Jalankanlah database server (postmas-ter) Anda dengan user postgres. Saat ini, kita akan membuat user dengan nama test. Harap diperhatikan, untuk lebih mudahnya, Anda telah membuat dan login dengan user test di Linux Anda.

Jadilah root, dan kemudian jadilah user postgres. Kita akan membuat user dengan nama test, yang dapat membuat database dan tidak bisa membuat user baru lagi.

$ su Password: # su postgres $ createuser test

Shall the new user be allowed to create databases? (y/n) y

Shall the new user be allowed to create more new users? (y/n) n

CREATE USER

Apabila Anda melihat pesan CREATE USER tersebut, maka pembuatan user test telah berhasil. Untuk menghapus seorang user, gunakan program dropuser.

Aktiflah kembali sebagai user test. Kita akan melanjutkan ke persiapan Python untuk melakukan koneksi ke PostgreSQL.

Persiapan Python

Terdapat beberapa modul untuk melakukan koneksi ke PostgreSQL dari Python. Salah satu yang populer adalah PyGreSQL atau umumnya terdapat di distro dengan nama python-pygresql. Anda bisa men-download modul tersebut di http://www.druid.net/ pygresql/.

Bagi Anda yang menggunakan distro dengan manajemen paket RPM, dowload-lah paketnya di ftp://ftp.druid.net/pub/ distrib/pygresql.i386.rpm. Bagi Anda yang menggunakan Debian atau turunannya, berikan perintah berikut ini untuk melakukan instalasi:

apt-get install python-pygresql

Setelah instalasi sukses, kita akan mengujinya dengan menjalankan modul pg di interpreter Python. Harap diingat, jalankanlah Python sebagai user test.

$ python2.2

Python 2.2.3+ (#1, Aug 10 2003, 10:11:23)

[GCC 3.3.1 (Debian)] on linux2

PostgreSQL adalah database server yang gratis,

andal dan kaya fitur. Untuk aplikasi bisnis,

umumnya PostgreSQL dapat diandalkan.

Koneksi dari Python pun dapat dilakukan

dengan mudah.

(15)

Type “help”, “copyright”, “credits” or “license” for more information. >>> import pg >>> from pg import DB >>> dir(pg) [‘DB’, ‘INV_READ’, ‘INV_WRITE’, ‘RESULT_DDL’, ‘RESULT_DML’, ‘RESULT_DQL’, ‘RESULT_EMPTY’, ‘SEEK_CUR’, ‘SEEK_END’, ‘SEEK_SET’, ‘__builtins__’, ‘__doc__’, ‘__file__’, ‘__name__’, ‘_quote’, ‘connect’, ‘error’, ‘get_defbase’, ‘get_defhost’, ‘get_defopt’, ‘get_defport’, ‘get_deftty’, ‘get_defuser’, ‘re’, ‘set_defbase’, ‘set_defhost’, ‘set_defopt’, ‘set_defpasswd’,

‘set_defport’, ‘set_deftty’, ‘set_defuser’, ‘string’, ‘sys’, ‘version’]

>>> dir(DB)

[‘__doc__’, ‘__init__’, ‘__module__’, ‘clear’, ‘delete’, ‘get’, ‘get_attnames’, ‘get_databases’, ‘get_tables’, ‘insert’, ‘pkey’, ‘query’, ‘update’]

>>>

Apabila Anda mendapatkan tampilan serupa, maka instalasi PyGreSQL telah berhasil. Namun, apabila tampilan yang Anda dapat adalah seperti berikut ini, maka instalasi belum berhasil atau sistem Anda belum memiliki PyGreSQL.

>>> import pg

Traceback (most recent call last): File “<stdin>”, line 1, in ? ImportError: No module named pg >>>

Koneksi Python dan PostgreSQL Pertama-tama, sekali lagi, aktiflah sebagai user test di sistem anda. Kita akan membuat sebuah database dengan nama test di postgreSQL. Berikanlah perintah createdb sebagai berikut:

$ createdb test CREATE DATABASE

Apabila Anda mendapati tampilan serupa, maka pembuatan database test telah berhasil. Kita akan membuat sebuah tabel dengan nama tbl_test dengan dua field: f1 dan f2, masing-masing bertipe integer.

Gunakan client psql untuk masuk ke dalam database server. Berikanlah perintah berikut ini:

$ psql test

Welcome to psql 7.3.3, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands

\g or terminate with semicolon to execute query

\q to quit test=>

Selanjutnya, berikan perintah berikut ini untuk membuat tabel tbl_test tersebut.

test=> CREATE TABLE tbl_test (f1 integer, f2 integer);

CREATE TABLE test=>

Apabila Anda ingin melihat daftar table, ketikkanlah perintah berikut ini:

test=> \dt

List of relations

Schema | Name | Type | Owner ———— + —————+ ————+ ———— public | tbl_test | table | test (1 row)

test=>

Untuk melihat deskripsi tabel test, berikanlah perintah berikut ini:

test=> \d tbl_test Table “public.tbl_test” Column | Type | Modifiers ———— + —————+ f1 | integer |

f2 | integer |

test=>

Kini, jalanlankah interpreter Python Anda. Mulai saat ini sampai seterusnya, kita akan menggunakan modul pg untuk bekerja dengan database postgreSQL. Kita akan mulai dengan meng-import class DB dari modul pg. Kemudian, kita membuat instance dari pg.DB dengan nama mydb, yang menunjuk ke database test.

>>> from pg import DB >>> mydb = DB(‘test’) >>>

Selanjutnya, kita akan melihat tabel-tabel apa saja yang terdapat di dalam database test tersebut. Berikanlah kode berikut ini:

>>> mydb.get_tables() [‘tbl_test’]

Untuk melihat atribut database test, tulislah kode berikut ini:

>>> mydb.get_attnames(‘test’) {‘oid’: ‘int’}

Apabila Anda ingin melihat atribut tabel tbl_test, tulislah kode berikut ini:

>>> mydb.get_attnames(‘tbl_test’) {‘f1’: ‘int’, ‘f2’: ‘int’, ‘oid’: ‘int’}

Kita akan melanjutkan ke tahap manipulasi data. Anda dapat memilih untuk menggunakan method dari mydb, ataupun

Python dan PostgreSQL

 Psql2, client PostgreSQL ala Python

(16)

memberikan sintaks SQL langsung. Untuk mudahnya, kita akan memberikan sintaks SQL langsung.

Contoh pertama kita adalah memasuk-kan record baru ke dalam tbl_test:

>>> mydb.query(‘insert into tbl_test values(1,1)’)

17003 >>>

Kemudian, saatnya bagi kita untuk melihat semua record di dalam tabel tbl_test: >>> r = mydb.query(‘select * from tbl_test’) >>> r f1 | f2 ——+ —— 1 | 1 (1 row) >>> dir(r)

[‘dictresult’, ‘fieldname’, ‘fieldnum’, ‘getresult’, ‘listfields’, ‘ntuples’] >>> r.dictresult() [{‘f1’: 1, ‘f2’: 1}] >>> r.fieldname(1) ‘f2’ >>> r.getresult() [(1, 1)] >>> r.listfields() (‘f1’, ‘f2’) >>> r.ntuples() 1

Kita amati, r, yang merupakan nilai kembalian dari query tersebut memiliki sejumlah method. Semuanya kembali kepada Anda untuk memilih method mana yang akan digunakan. Dalam bentuk sederhana, dengan mengakses r saja, Anda sudah mendapatkan nilai kembalian query tersebut. Umumnya, programer menggu-nakan method dictresult() ataupun getresult().

Kita juga bisa mengunakan variabel dalam pemberian sintaks SQL seperti berikut ini:

>>> for i in range(0,1000L):

>>> mydb.query(‘insert into tbl_test values(%d,%d)’ %(i,i))

Untuk operasi lain seperti update dan delete, Anda bisa memberikan perintah SQL yang bersesuaian. Contoh program: psql2.

Berbekal contoh-contoh di atas, kita akan belajar membuat sebuah client postgreSQL sederhana, yang mirip dengan tampilan psql.

Psql2.py: #!/usr/bin/python2.2 import sys from pg import DB def main(db): try: mydb = DB(db) except: sys.exit(‘error’) while 1: buff = raw_input(‘[%s]> ‘ %db) if buff == ‘’: continue r = mydb.query(buff) print r if __name__ == ‘__main__’: if len(sys.argv) == 2: main(sys.argv[1]) else: sys.exit(‘usage: %s <DBNAME>’ %sys.argv[0])

Pertama-tama, kita perlu memeriksa terlebih dahulu jumlah parameter yang dilewatkan ke program ini. Apabila jumlah paramaternya benar, kita akan mengirimkan parameter terakhir ke fungsi main(), yang kemudian akan membuat koneksi. Kita memberikan penanganan kesalahan di sini. Setelah koneksi terjadi, kita akan meng-ulang terus menerus sambil meminta input. Setiap input yang berisi akan dikirimkan sebagai query ke postgreSQL.

Program yang satu ini jelas sangat sederhana. Penanganan kesalahannya juga masih sangat minim. Sebenarnya, kita pun dapat menambahkan beberapa perintah spesial seperti \dt untuk menampilkan daftar table, dengan memanggil method get_tables() dari mydb.

Kombinasi antara PostgreSQL dan Python akan menghasilkan aplikasi bisnis yang luar biasa. Resource free software yang tersedia sebenarnya sangat banyak. Bagaimana kita menyikapinya adalah hal yang paling. Apabila kita mampu, kita bisa membuat TI di negara kita jauh lebih berkembang. Selamat berkarya! Noprianto (noprianto@infolinux.co.id)

Python dan PostgreSQL

(17)

B

erbeda dengan Windows, interface grafis di Linux bukanlah bagian integral dari sistem yang harus selalu tersedia. Sederhananya, interface grafis hanyalah aplikasi biasa. Bisa diinstal atau tidak, dan tidak akan mempengaruhi sistem secara keseluruhan. Bentuk desktop pun bisa diubah-ubah sesuai keinginan.

Interface grafis atau GUI di Linux hadir dengan bantuan sebuah X Server. Umumnya, kita menggunakan Xfree86 sebagai X Server. Apabila Anda menginstal distro-distro populer, umumnya paket untuk X Server telah disertakan pada instalasi desktop. Apa yang bisa kita ubah sesuai keinginan pada level ini sangatlah terbatas. Apabila Anda ingin X Server yang terasa lebih ringan, barangkali pengubahan nice value pada proses sistem bisa Anda lakukan agar memberi X Server prioritas sesuai harapan Anda.

Namun, perubahan yang terjadi tidak akan terlalu tampak di mata pengguna. Pengubahan lain yang bisa kita lakukan barangkali memilih modul-modul mana saja yang akan dijalankan. Tapi sekali lagi, efeknya juga tidak akan terlalu tampak di mata pengguna. Kesimpulannya, kita tidak akan banyak mengubah-ubah pengaturan di X Server.

X Server sendiri hanyalah program yang melayani pengguna. X Server menyediakan infrastruktur dan fasilitas, namun tidak menyediakan kosmetik ataupun dekorasi yang indah bagi kita. Apabila Anda hanya menjalankan X Server dan kemudian sebuah emulasi terminal, maka apa yang Anda dapatkan adalah sebuah emulasi terminal yang tidak dapat digeser-geser. Emulasi terminal tersbeut juga tidak akan memiliki dekorasi window seperti title bar yang bagus. Pokoknya, tugas dari X Server adalah memungkinkan tampilan GUI untuk

Anda. Kemudian, melayani input dan output di atasnya.

Agar emulasi terminal tersebut memiliki title bar yang indah plus tombol-tombol di atasnya, kemudian window tersebut dapat Anda drag ke mana-mana, maka sebuah window manager mutlak diperlukan. Tugas dari window manager adalah mengatur window tersebut, mulai dari aktivasi sampai deaktivasi, kemudian pengaturan fokus dan cara penampilan, pengaturan berbagai window di layar, dekorasi window, dan lain sebagainya.

Pada sistem operasi Windows, window manager yang datang bersamanya hanya satu jenis, yang dipaketkan bersama sistem operasinya. Di Linux, kita mengenal puluhan window manager, dari yang ringan sampai yang berat. Dari yang mirip dengan Windows, sampai yang mirip dengan tampilan sistem operasi tahun 50-an.

Sebuah window manager tidak akan peduli bagaimana Anda melakukan drag and drop. Juga tidak akan peduli dengan sistem clipboard yang canggih. Tidak juga peduli dengan operasi copy, cut, dan paste yang fleksibel. Tidak peduli dengan pengaturan aplikasi secara umum dan lain sebagainya. Untuk suatu lingkungan kerja yang terintegrasi tersebut di atas, Anda membutuhkan Desktop environment atau desktop untuk lebih singkatnya.

Sebuah desktop yang baik haruslah menyediakan lingkungan kerja yang komplit seperti pada Microsoft Windows. Desktop juga umumnya datang bersama window manager sendiri. Dan terkadang, menyediakan control center, sama seperti halnya control panel pada windows. Beberapa desktop juga menyertakan program otentikasi berbasis GUI yang lebih dikenal dengan istilah display manager. Dengan mengaktifkan display manager,

Anda tidak perlu lagi menghadapi login prompt berbasis teks. Anda juga tidak perlu lagi menjalankan X Window secara manual.

Tidak semua desktop ataupun window manager enak digunakan. Ada yang benar-benar mirip windows seperti KDE. Ada pula yang lebih mirip sistem operasi lain. Ada yang berat. Ada pula yang ringan. Apabila Anda menginginkan banyak fitur, indah, dan mudah digunakan, maka umumnya, konsekuensinya adalah berat dan membutuhkan banyak resource. Distro-distro populer juga umumnya datang bersama desktop dan window manager yang kaya fitur.

Anda mungkin ingin mencoba-coba desktop atau window manager yang lebih ringan dan sesuai kebutuhan Anda. Kita akan membahas beberapa desktop dan window manager, mulai dari yang ringan dan miskin fitur, sampai yang berat dan kaya fitur. Anda bebas memilih yang paling cocok dengan selera. Pada akhirnya, walaupun Anda menggunakan distro yang sama dengan rekan Anda, tampilan GUI Anda mungkin jauh berbeda.

Display manager

Kita akan mulai dengan display manager. Beberapa desktop seperti KDE dan GNOME datang bersama display manager masing-masing. Apabila Anda ingin menggunakan KDE atau GNOME, maka tentunya Anda dapat memilih untuk tetap menggunakan KDM (display manager bawaan KDE) ataupun GDM (display manager bawaan GNOME). Permasalahannya adalah, barangkali Anda menyukai KDM, namun tidak mau menggunakan KDE. Atau Anda tidak akan menggunakan desktop yang berat, namun tetap ingin memiliki layar login berbasis GUI yang indah.

Memilih Desktop dan Window Manager

Apabila desktop yang disertakan bersama distro tidak memuaskan Anda,

entah terlalu kompleks atau terlalu lambat, gantilah ke desktop atau

window manager lain. Karena Anda berhak akan sistem yang terbaik.

Memilih Desktop dan

Window Manager

Referensi

Dokumen terkait

Peserta didik Tidak Tuntas.. peserta didik juga mengalami peningkatan, terbukti persentase ketuntasan pada post test II adalah 88% yang lebih baik dari

Sumber Djantin Sambas selama ini mempergunakan metode alokasi biaya tradisional, yang terlihat pada cara pembebanan biaya bahan baku dan biaya tenaga kerja yang

Klasifikasi morfokonser- vasi/arahan umum peng-gunaan lahan terhadap 119 satuan lahan di daerah Saran yang diberikan berdasarkan hasil penelitian ini adalah: (a)

Kandang untuk menampung ternak dan istirahat harus memenuhi persyaratan: lokasi aharus jauh dari daearah bersih, dirancang agar tidak terdapat lekukan tajam, lantai licin

Tahap eksternalisasi budaya mengemis pada keluarga ini terjadi saat ayah dan ibu mulai tinggal di lingkungan yang mayoritas penduduknya berprofesi sebagai pengemis,

seberkas sinar-X di jatuhkan pada sampel kristal, maka bidang kristal itu akan membiaskan sinar-X yang memiliki panjang gelombang sama dengan jarak antar kisi

Kondisi ketenagakerjaan di Kalimantan Timur (Kaltim) pada Agustus 2014 tercatat lebih baik dibandingkan dengan periode yang sama tahun lalu didorong oleh tingginya

Mata kuliah ini membahas tentang ruang lingkup sosiologi dan kebudayaan pertanian, proses sosial, konsep dasar budaya dan masyarakat, kelembagaan sosial, kelompok