^_^ W E L C O M E 2 M Y L I V E S ^_^

Selamat datang di blog saya yang lucu ni...

Semoga Anda Menikmati...

Sajian tulisan ini...

Thank You...

^_^
⊆ 00.00 by BaciL | ˜ 0 komentar »


Test DNA yang Selalu Dibicarakan

PADA situasi pelacakan forensik konvensional buntu, akibat ciri biometri rusak, pelacakan dengan tes DNA masih dapat diharapkan membantu. Tes DNA juga dimanfaaftkan untuk melacak risiko penyakit keturunan. Ledakan bom di depan kedutaan Australia di Jakarta beberapa bulan lalu, mencuatkan tema tes DNA, untuk identifikasi jatidiri korban yang hancur.
Apa itu tes DNA ? Mengapa tes ini begitu canggih, hingga dapat menentukan jatidiri korban ledakan bom yang sudah hancur ? Sejak awal abad ke-20 para ahli forensik atau pihak kepolisian menggunakan berbagai ciri khas pada manusia, yang disebut biometri sebagai sarana untuk identifikasi jatidiri. Yang paling populer dan merupakan standar forensik sejak lama, adalah identifikasi sidik jari. Sebab diketahui nyaris tidak ada yang sidik jarinya identik. Juga kembar identik biasanya memiliki sidik jari yang berbeda.
Selain metode identifikasi sidik jari juga dikembangkan metode identifikasi ciri biometri lainnya, misalnya dengan sidik retina mata, catatan susunan gigi, bentuk tengkorak kepala atau yang lainnya. Namun dalam kondisi tertentu metode identifikasi ciri biometri sulit diterapkan. Misalnya, untuk kasus korban ledakan bom atau jatuhnya pesawat terbang yang mengakibatkan tubuh korban hancur terpotong-potong. Atau juga dalam kasus kejahatan, misalnya pembunuhan yang tidak meninggalkan jejak atau tanda apa pun.
Rekayasa Genetika
Sampai 20 tahun lalu memang amat sulit melakukan identifikasinya. Namun semua berobah ketika pada tanggal 10 September tahun 1984, Profesor Alec Jeffrey pakar genetika dari Universitas Leicester di Inggris mengumumkan penemuannya, yakni pelacakan jatidiri menggunakan sidik jari DNA. Pada saat itu, Alec Jeffrey sedang melakukan rangkaian penelitian genetika. Seperti diketahui, manusia tersusun dari sekitar 30 milyar kode genetika yang disebut Deoxyribo Nucleic Acid (DNA) yang merupakan rangkaian pasangan basa Thymin, Adenin, Guanin dan Cytosin. Setiap orang, memiliki ciri kode DNA yang berbeda. Ibaratnya sidik jari, maka sidik jari DNA ini juga bisa dibaca. Bentuknya berupa garis-garis yang mirip seperti bar-code di kemasan makanan atau minuman.
Dengan membandingkan kode garis-garis DNA itu dengan DNA anggota keluarga terdekatnya, jatidiri korban ledakan bom atau jatuhnya pesawat terbang yang hancur masih dapat dilacak. Misalnya dalam kasus korban ledakan bom, serpihan tubuh para korban yang sulit dikenali diambil sekuens genetikanya. Biasanya antara 30 sampai 100 sekuens rantai kode genetika. Kemudian dibandingkan dengan sekuens kode genetika keluarga terdekatnya, biasanya ayah atau saudara kandungnya. Jika nyaris identik dalam arti banyak sekali kode yang sama, maka jatidiri korban dapat dipastikan.
Teknologi Tinggi
Memang logikanya terdengar mudah. Sebetulnya metode tes DNA itu amat rumit dan tergolong teknologi tinggi. Prosedurnya dimulai dengan mengisolasi sekuens DNA dari sel, biasanya dari darah, kulit atau rambut. Sejenis enzym khusus kemudian digunakan untuk ibaratnya menggunting DNA itu pada tempat yang tepat. Potongan DNA ini kemudian disortir besarnya, menggunakan teknik yang disebut elektro-phoresis. Kemudian sekuens DNA dipindahkan ke lembaran nylon yang sebelumnya dicelupkan ke dalam gel khusus. Dengan membubuhkan bahan pewarna atau unsur radioaktif, barulah akan kelihatan pola garis-garis yang merupakan sidik jari DNA.
Setelah Sir Alec Jeffrey memperkenalkan metode sidik jari genetika itu, banyak pihak menggunakannya untuk kepentingan masing-masing. Akan tetapi, memang yang terutama memanfaatkan sidik jari genetika, adalah pihak kepolisian. Sejak akhir tahun 80-an, di sejumlah negara maju dikembangkan apa yang disebut bank data sidik jari genetika. Terutama yang disimpan di sana, adalah data dari para penjahat atau mereka yang pernah dihukum. Tujuannya tentu saja untuk memastikan dengan tepat, dugaan atau tersangka pelaku dalam tindak kejahatan. Seperti juga metode pencocokan sidik jari, metode tes DNA terbukti dapat melacak pelaku kejahatan.
Forensik Non-Konvensional
Pelacakan menggunakan sidik jari genetika, biasanya diterapkan jika pelaku kejahatan tidak meninggalkan jejak forensik konvensional, seperti sidik jari. Tentu saja pelacakan kejahatan semacam ini, tidak semudah seperti dalam film. Namun jelas amat membantu menemukan pelaku kejahatan. Misalnya sebuah kasus pembunuhan di kota Koeln di Jerman, pelakunya dapat terungkap 12 tahun kemudian, setelah polisi menerapkan tes DNA. Pakar biologi forensik dari Jerman, Mark Benecke mengatakan, kejahatan selalu meninggalkan jejak, sekecil apa pun.
Jika metode pelacakan konvensional selalu mencari jejak yang nyata, pelacakan dengan tes DNA cukup dengan jejak kecil atau jejak mikro. Pelaku pembunuhan di kota Koeln di Jerman itu tertangkap karena di kuku jari korban yang melawan dan meronta, terdapat jejak kulit pelaku. Prosedur yang memakan waktu dan sulit, adalah untuk menyamakan kode sidik jari genetika yang ditemukan, dengan data di bank data genetika. Untunglah dengan peralatan komputer yang semakin canggih, prosedur identifikasi dan perbandingan dapat dipercepat.
Diagnosis Risiko
Tentu saja sidik jari genetika ini, tidak hanya berguna bagi pihak kepolisian. Terutama juga kalangan kedokteran memetik banyak manfaat. Seperti untuk mendiagnosis kelainan genetika yang diturunkan pada bayi yang baru dilahirkan di rumah sakit. Penyakit keturunan yang dilacak, antara lain hempofilia, penyakit Huntington, cystic fibrosis, alzheimer, anemia sel sabit atau thalasemia.
Dengan deteksi dini adanya penyakit keturunan semacam itu, para dokter, perawat dan orang tua bayi dapat mengantisipasi dan mengambil tindakan yang tepat. Juga, para dokter seringkali menggunakan data sidik jari genetika ini, untuk memberikan konsultasi kepada calon orang tua, yang anaknya memiliki risiko mendapat penyakit keturunan.
Juga sidik jari DNA dapat digunakan untuk menentukan ayah biologis seorang bayi. Terdapat banyak kasus, seperti sengketa dalam rumah tangga akibat keraguan menyangkut siapa ayah biologis seorang bayi. Untuk itu juga dapat dilakukan tes identifikasi menggunakan sidik jari DNA. Caranya, dengan membandingkan sekuens DNA bayi dengan sekuens DNA orang-orang yang diduga ayah biologisnya. Tes DNA semacam ini, terutama di negara maju amat diperlukan untuk menetapkan vonis bagi perwalian anak, pembagian warisan, atau perkara hukum lainnya.
Penyalahgunaan
Setelah menggambarkan keunggulannya pasti dipertanyakan bagaimana akurasinya ? Apakah betul, tidak ada orang yang kode sidik jari genetiknya identik ? Memang diakui, seperti juga pada metode forensik memanfaatkan sidik jari, terdapat kemungkinan kemiripan. Disebutkan, kemungkinan kemiripannya satu banding lima juta. Jadi hitungan matematikanya jika di Indonesia terdapat 200 juta penduduk ada kemungkinan kemiripan sidik jari genetika itu pada 40 orang.
Namun dalam melacak kejahatan atau untuk tujuan lain, polisi, pakar forensik atau pakar rekayasa genetika, memiliki metode yang terpercaya, yang dapat mereduksi kesalahan. Masalah lainnya yang dihadapi, justru datang dari ketakutan penyalahgunaan sidik jari genetika ini. Prof. Jeffrey mengakui bisa saja data basis genetika itu dimanfaatkan untuk merugikan seseorang, berdasarkan pelacakan asal-usul keturunan atau penyakitnya. Pihak asuransi, misalnya dapat menolak menanggung risiko akibat penyakit genetika. Atau sebuah kantor memecat pegawainya, gara-gara diketahui memiliki potensi penyakit keturunan.

 
⊆ 23.50 by BaciL | ˜ 0 komentar »

MEMBACA TANGAN DAN DARAH

Pengenalan wajah, sidik jari, dan iris kini merupakan favorit biometri. Sebenarnya, ada ciri-ciri lain yang juga dapat digunakan untuk identifikasi.

Pengenalan tangan: Sistem ini mengukur geometri seluruh tangan. Dari panjang jari, lebar sendi, bentuk tangan, dan ciri-ciri lainnya dihasilkan sebuah paket data.

Analisis DNA: Sidik genetis adalah ciri pengenalan yang sangat bagus-saat ini telah digunakan untuk melacak pelaku kejahatan. Pertimbangan etis dan perlindungan data menghalangi penerapan analisis DNA di bidang lainnya.

Pola vena: Pembuluh darah balik (vena) pada tangan juga tidak berubah bentuk seumur hidup-hanya menjadi lebih tebal. Dalam cahaya inframerah, polanya tampak lebih jelas.

Pengenalan suara: Pita suara, tenggorokan, rongga mulut, dan rahang secara bersama-sama menghasilkan pola suara yang dapat digunakan untuk proses verifikasi melalui telepon.

Karena faktor gangguan seperti ketergantungan pada sudut dan cahaya dapat disingkirkan, Busch menganggap metoda 3D ini lebih tepat dibandingkan pengenalan 2D yang biasa. Di samping itu, ada aspek lain yang memperbesar minat pada sistem pengenalan 3D. Dengan data foto 3D sebagai template, wajah orang dalam kerumunan yang menghadap ke suatu arah lebih mudah diidentifikasi.

Sehandal apa sistem tersebut bekerja. Saat ini para ahli sedang meneliti dalam sebuah eksperimen internal di IGD, di mana sekitar seratus peserta berpartisipasi dalam proyek yang disebut 'BioFace V'. "Penuaan manusia sulit kami simulasikan, tetapi kami tidak sabar menunggu hasil eksperimen pada anak-anak kecil," ungkap Ulrich Pinsdorf, salah seorang peneliti di Fraunhofer.


Dr. Christoph Busch, Fraunhofer IGD.
»Pengenalan wajah 3D memungkinkan dibuatnya sistem identifikasi yang handal.

Sistem pengenalan biometrik pada dasarnya memang mengandalkan ciri-ciri yang tidak berubah, tetapi bisa saja dengan berjalannya waktu ciri-ciri tersebut menjadi sulit dikenali. Karena itu, trend bergeser pada penggunaan beberapa metoda sekaligus. Di samping peningkatan keamanan, cara ini juga akan memberikan ketepatan yang lebih tinggi dalam pemakaian yang terus menerus. Setidaknya, salah satu dari beberapa metoda-demikian gagasan di baliknya-sangat mungkin memberi hasil yang jelas.

Dalam sebuah paket biometri kombinasi biasanya terdapat sistem pengenalan sidik jari. Metoda yang telah matang ini digunakan sejak lebih dari 100 tahun dalam dunia kriminologi dan belum lama ini juga diterapkan untuk pemberian akses ke notebook dan PC. Jika sistem lain bekerja dengan algoritma analisis, pengenalan sidik jari biometrik mengandalkan analisis garis Papillar yang telah teruji. Komputer membandingkan titik-titik karakteristik tersebut yang dapat berupa percabangan, awal dan akhir garis, lingkaran, patahan, atau pusaran.

Untuk merekam sidik jari digunakan berbagai sensor yang semuanya menghasilkan gambar hitam-putih berpola garis. Perangkat yang paling populer adalah sensor optik. Di sini jari diletakkan pada sebuah keping kaca, disinari oleh LED melalui sebuah prisma, dan difoto dengan digicam. Pada sensor kapasitif, permukaan sensor dan permukaan jari membentuk sebuah kapasitor yang kapasitasnya berubah sesuai pola permukaan kulit.

Sistem sensor lainnya mengukur medan listrik atau pola panas dari jari. Untuk membedakan jari palsu-misalnya dari silikon-sistem tertentu juga mengukur detak jantung, aliran darah, kandungan oksigen dalam darah, dan suhu jari.

Sayangnya, tak satu pun metoda biometri yang sepenuhnya aman dari pemalsuan. Untuk mencegah orang lain ikut lewat bersama orang yang telah di-scan, petugas perbatasan atau bandara tidak akan tergantikan oleh mesin.

 
⊆ 23.46 by BaciL | ˜ 0 komentar »

Imigrasi Terapkan Sistem Biometri

Antisipasi Paspor Ganda
BATAM CENTRE-Untuk mengantisipasi kepemilikan paspor ganda, maka Imigrasi Kota Batam menerapkan Sistem Biometri. Dimana dengan menerapkan Sistem Biometri ini dapat memperkecil celah untuk melakukan penyalahgunaan fungsi paspor untuk melakukan tindak kejahatan.
Demikian dikatakan Kepala Imigrasi Kota Batam I Gede Widiartha, Rabu ( 22/3) di ruang kerjanya. "Kami berharap dengan diterapkanya Sistem Biometri ini dapat memperkecil celah orang untuk memiliki paspor ganda. Karena dengan menggunakan Sistem Biometri ini seseorang tidak dapat menyembunyikan identitasnya karena bisa langsung terlacak dengan Sistem Biometri ini," ujarnya.
Dijelaskanya dalam Sistem Biometri yang diterapkan Imigrasi, orang yang akan memohon membuat paspor harus mengisi biodata dan difota serta dilakukan tes sidik jari. Data identitas pembuat paspor itu dimasukan ke komputer. Saat Imigrasi mencek apakah yang bersangkutan sudah memiliki paspor atau belum, dengan mengetik namanya saja maka akan muncul foto yang bersangkutan serta sidik jari yang bersangkutan jika yang bersangkutan pernah mengurus paspor sebelumnya.
Ia mengatakan dengan Sistem Biometri ini sangat kecil kemungkinan masyarakat memiliki paspor ganda. Kendati nama dan foto dari pembuat paspor dipalsukan namun yang bersangkutan tidak akan bisa mengubah sidik jarinya. Sehingga ketika dengan mengubah identitasnya maka imigrasi akan dapat melacak bahwa yang bersangkutan adalah orang yang sama kendati nama dan fotonya dipalsukan.
"Saya optimis dengan menggunakan Sistem Biometri ini penggunaan paspor ganda yang beredar di tangan masyarakat dapat diberantas atau paling tidak dapat dikurangi. Saya yakin kalau hanya pemalsuan identitas dengan mengubah nama dan foto dapat mudah terlacak sistem. Kecuali jika yang diatas sana menghendaki baru tidak dapat dilacak oleh sistem, tapi selagi itu masih atas pikiran manusia saya yakin masih bisa dideteksi," ucapnya. (sm/as)

 
⊆ 23.37 by BaciL | ˜ 0 komentar »

Sistem Biometri Cegah Paspor Ganda

Jakarta-RoL--

Pembuatan paspor dengan menggunakan sistem biometrik (sidik jari), yang kini diterapkan oleh Imigrasi telah mencegah modus pembuatan paspor ganda (duplikasi paspor). Penjelasan itu disampaikan oleh Kepala Biro Humas dan Hubungan Luar Negeri Depkum dan HAM, Taswem Tarib, di Jakarta, Senin, saat memberikan penjelasan tentang keunggulan paspor biometri. Pembuatan paspor dengan sistem biometri yang mulai diterapkan pada 6 Pebruari 2006, dan secara serentak dilakukan di seluruh Kantor Imigrasi di seluruh Indonesia pada 12 Juni 2006, telah berhasil mendeteksi upaya pembuatan paspor ganda sebanyak 1800 paspor. "Sistem ini mampu menemukan orang yang mencoba memiliki paspor ganda," kata Taswem yang saat menyampaikan penjelasan kepada wartawan didampingi Kepala Bagian Humas Ditjen Imigrasi, Soepriyatna Anwar. "Sampai saat ini Imigrasi sudah menerbitkan 700 ribu paspor biometri. Dan lebih 1800 kasus duplikasi paspor," katanya. Sedangkan dari tanggal 12 Juni hingga 16 Juni ditemukan kasus duplikasi paspor sebnyak 181 kasus yang tersebar di 46 Kantor Imigrasi. Ketika ditanya, siapa yang banyak melakukan praktek pembuatan paspor ganda, Taswem menjawab pada umumnya untuk keperluan para TKI (Tenaga Kerja Indonesia -red). Terhadap pihak-pihak yang terlibat dalam pembuatan paspor ganda itu, menurut Taswem, saat ini masih dalam pengusutan. Data tersebut menunjukkan bahwa sistem pembuatan paspor dengan sistem biometri mampu mencegah orang yang mencoba melakukan tindakan pembuatan paspor ganda. Selain itu, sistem biometri itu juga mengurangi praktik pemalsuan paspor. "Kita bisa mengurangi secara signifikan kasus pemalsuan paspor dan pembuatan paspor ganda. Dan sistem ini telah berjalan dengan baik, hal itu terbukti dengan telah terdeteksinya praktek pemalsuan paspor dan kasus paspor ganda," katanya. Keunggulan lain dari sistem paspor biometri itu antara lain sistem ini menyimpan data biometri si pemegang paspor sesuai dengan sistim yang diterapkan oleh Internasional (Organisasi Penerbagangan Sipil Internasional/ICAO). Sistemnya on line pada Kantor Pusat dan 103 Kantor Imigrasi yang tersebar di seluruh Indonesia, yang menyediakan fasilitas sistem pencekalan secara tersentralisasi. "Sistem paspor biometri ini pertama kali di Indonesia menerapkan jaminan adanya `single identity`. Sistem ini juga meningkatkan kredibilitas paspor RI di mata internasional karena telah sesuai dengan standar Internasional," demikian Taswem. antara/pur

 
⊆ 23.30 by BaciL | ˜ 0 komentar »

Biometrics
From Wikipedia, the free encyclopedia
Ten things you may not know about images on Wikipedia
Jump to: navigation, search

At Walt Disney World, biometric measurements are taken from the fingers of guests to ensure that the person's ticket is used by the same person from day to day
For the use of statistics in biology, see Biostatistics.
Biometrics (ancient Greek: bios ="life", metron ="measure") is the study of methods for uniquely recognizing humans based upon one or more intrinsic physical or behavioral traits.
Some researchers,[1] have coined the term behaviometrics for behavioral biometrics such as typing rhythm or mouse gestures where the analysis can be done continuously without interrupting or interfering with user activities

 
⊆ 23.25 by BaciL | ˜ 0 komentar »

Komputasi terdistribusi
Dari Wikipedia Indonesia, ensiklopedia bebas berbahasa Indonesia.
(Dialihkan dari Sistem terdistribusi)
Langsung ke: navigasi, cari
Dalam ilmu komputer, komputasi terdistribusi mempelajari penggunaan terkoordinasi dari komputer yang secara fisik terpisah atau terdistribusi. Sistem terdistribusi membutuhkan perangkat lunak yang berbeda dengan sistem terpusat.
Tujuan
Tujuan dari komputasi terdistribusi adalah menyatukan kemampuan dari sumber daya (sumber komputasi atau sumber informasi) yang terpisah secara fisik, ke dalam suatu sistem gabungan yang terkoordinasi dengan kapasitas yang jauh melebihi dari kapasitas individual komponen-komponennya.
Tujuan lain yang ingin dicapai dalam komputasi terdistribusi adalah transparansi. Kenyataan bahwa sumber daya yang dipakai oleh pengguna sistem terdistribusi berada pada lokasi fisik yang terpisah, tidak perlu diketahui oleh pengguna tersebut. Transparansi ini memungkinkan pengguna sistem terdistribusi untuk melihat sumber daya yang terpisah tersebut seolah-olah sebagai satu sistem komputer tunggal, seperti yang biasa digunakannya.
Salah satu masalah yang dihadapi dalam usaha menyatukan sumber daya yang terpisah ini antara lain adalah skalabilitas, dapat atau tidaknya sistem tersebut dikembangkan lebih jauh untuk mencakup sumber daya komputasi yang lebih banyak.
Arsitektur
Banyak arsitektur perangkat lunak dan keras yang bervariasi yang digunakan untuk komputasi terdistribusi. Pada tingkat yang lebih rendah, penghubungan beberapa CPU dengan menggunakan jaringan sangat dibutuhkan. Pada tingkat yang lebih tinggi menghubungkan proses yang berjalan dalam CPU tersebut dengan sistem komunikasi juga dibutuhkan.
Arsitektur umum yang memungkinkan sistem terdistribusi antara lain:
klien-server: klien menghubungi server untuk pengambilan data, kemudian server memformatnya dan menampilkannya ke pengguna.
arsitektur 3-tier: Kebanyakan aplikasi web adalah 3-Tier.
arsitektur N-tier: N-Tier biasanya menunjuk ke aplikasi web yang menyalurkan lagi permintaan kepada pelayanan enterprise. Aplikasi jenis ini paling berjasa bagi kesuksesan server aplikasi.
Tightly coupled: biasanya menunjuk kepada satu set mesin yang sangat bersatu yang menjalankan proses yang sama secara paralel, membagi tugas dalam bagian-bagian, dan kemudian mengumpulkan kembali dan menyatukannya sebagai hasil akhir.
Peer-to-peer: sebuah arsitektur di mana tidak terdapat mesin khusus yang melayani suatu pelayanan tertentu atau mengatur sumber daya dalam jaringan. Dan semua kewajiban dibagi rata ke seluruh mesin, yang dikenal sebagai peer.
Service oriented di mana sistem diatur sebagai satu set pelayanan yang dapat diberikan melalui antar-muka standar.
Mobile code: berdasarkan prinsip arsitektur mendekatkan pemrosesan ke sumber data
Replicated repository: Di mana repository dibuat replikanya dan disebarkan ke dalam sistem untuk membantu pemrosesan online/offline dengan syarat keterlambatan pembaharuan data dapat diterima.
Infrastruktur komputasi terdistribusi
Moab Grid Suite — Cluster workload management, reporting tools, and end user submission portal
Remote procedure call — This high-level communication mechanism allows processes on different machines to communicate using procedure calls even though they don't share the same address space.
Distributed objects — Systems like CORBA, Microsoft D/COM, Java RMI, ReplicaNet [1]
SOAP
XML-RPC
GLOBE
Acute [2] — Distributed functional programming with migration based on OCaml.
PYROPython Remote Objects
BOINC — Berkeley Open Infrastructure for Network Computing
GLOBUS — Home of the Globus Toolkit

 
⊆ 23.22 by BaciL | ˜ 0 komentar »

Transparansi (komputasi)

Untuk kegunaan lain dari Transparansi, lihat Transparansi.
Transparansi dalam ilmu komputer agak berbeda dengan penggunaan kata transparan dalam bahasa Indonesia yang digunakan sehari-hari. Saat kita mengharapkan transparansi dalam pengelolaan dana lembaga pemerintah kita ingin melihat lebih jauh bagaimana lembaga tersebut mengelola dana. Saat kita mengharapkan "transparansi" pada suatu sistem terdistribusi kita justru tidak ingin tahu detail sumber daya yang tergabung dalam sistem terdistribusi tersebut, kita hanya ingin menggunakannya sebagai satu sumber daya tunggal, seperti kita menggunakan PC yang kita miliki di rumah. Transparansi dalam sistem terdistribusi berarti kita menginginkan ada suatu lapisan yang menyembunyikan mekanisme yang ingin kita abaikan.
Beberapa jenis transparansi dalam ilmu komputer terutama dalam sistem terdistribusi:
Transparansi
Keterangan mekanisme/kenyataan yang disembunyikan
Akses
Kenyataan bahwa representasi data yang di akses dan cara mengakses yang dilakukan berbeda, tidak perlu diketahui pengguna
Lokasi
Kenyataan bahwa lokasi sumber daya yang diakses berbeda-beda, tidak perlu diketahui pengguna
Migrasi
Kenyataan bahwa sumber daya komputasi yang digunakan mungkin berpindah, tidak perlu diketahui pengguna
Relokasi
Kenyataan bahwa sumber daya komputasi yang digunakan mungkin berpindah saat sedang digunakan, tidak perlu diketahui pengguna
Konkurensi
Kenyataan bahwa sumber daya yang digunakan, mungkin juga sedang digunakan pada saat yang bersamaan oleh pengguna lain, tidak perlu diketahui pengguna
Kegagalan/Failure
Kenyataan bahwa terjadi kegagalan dan proses perbaikan dari kegagalan ini, tidak perlu diketahui pengguna

 
⊆ 23.07 by BaciL | ˜ 0 komentar »

Pengenalan
Secara umumnya,antaramuka adalah kaedah untuk membolehkan pengguna berinteraksi dengan sistem.Mereka bentuk antaramuka boleh menjadi satu aspek yang kritikal di dalam pembangunan sistem karena:

i.Antaramuka adalah apa yang terlihat oleh pengguna.


ii.Rekabentuk yang efektif adalah mengikut disiplin yang ditentukan didalam Interaksi Manusia Komputer yang menggabungkan teknik psikologi dan ergonomik dengan sistem komputer.Reka bentuk antara muka yang baik mestilah mempunyai ciri-ciri seperti:


i.objek yang sama dikekalkan walaupun pada bahagian berlainan.


ii.setiap tindakan mestilah ada tindakan balas atau maklum balas.


iii.mempunyai kebolehan untuk pulih daripada kesilapan dan


iv.pengguna mempunyai kawalan ke atas antara muka.

Grafik dalam Antara Muka
Membaca dan menterjemah maklumat yang mengarahkan pengguna bagaimana untuk menggunakan sistem.Antara muka yang baik dengan perwakilan grafik yang dapat membantu pengguna dalam menjangka dan memahami fungsi dan sesuatu perwakilan tersebut adalah sangat-sangat diperlukan.Merujuk Rajah 1,adalah diantara contoh perwakilan operasi “print” atau cetak yang menggunakan gambar pencetak yang mana bagi menyatakan fungsinya.Belbagai perwakilan grafik digunakan untuk mewakilkan objek sebenar ke atas paparan komputer.Ia dapat membantu pengguna dalam menjangka dan memahami fungsi sesuatu perwakilan.
Ada dua jenis perwakilan bergambar iaitu:


a.Perwakilan 2 D


b.Perwakilan 3 D atau 3 dimensi.


Diketahui perwakilan dua dimensi mudah dibuat berbanding dengan tiga dimensi.
.Saiz dapat memberikan jarak objek yang sama bentuk berada dari pengguna.


.Interposisi atau tindanan yang mana mengambarkan satu objek berada di hadap an berbanding objek yang berdekatan.Dari sudut penjelasan,kecerahan dan perbezaan warna sesuatu objek dapat memperlihatkan berlakunya perbezaan jarak.
Di mana objek yang jauh akan terhasil penglihatan yang kabur dan berwarna cerah.Manakala objek yang dekat nampak jelas mahupun dari segi warna,bentuk dan strukturnya.
Kesan perbezaan,penjelasan dan kecerahan objek terhadap penglihatan.
.Kesan bayang-bayang ke atas posisi objek juga boleh menampakkan
sesuatu objek itu seakan objek yang sebenarnya.


Kesan bayang-bayang ke atas posisi objek
.Dalam animasi, bila menggunakan pergerakan objek untuk ke lihatan lebih menarik dan cantik.Objek yang berada di hadapan akan bergerak laju relatif kepada objek yang berada di belakang yang pertama tadi.

Kesan jarak objek terhadap animasi
.Stereoskopik adalah keadaan di mana objek di lihat seperti menjurus kesuatu titik

 
⊆ 22.51 by BaciL | ˜ 0 komentar »

Stereoskopik
Bunyi dan pendengaran

Tujuan bunyi digunakan adalah untuk mendapatkan perhatian,memberikan amaran dan sebagai maklum balas kepada pengguna.Kebanyakan bunyi yang diguna pakai adalah berbentuk muzik atau bentuk suara percakapan.Bunyi adalah sebagai pelengkap antara muka visual yang piawai.Bunyi yang digunakan seharusnya sesuai dan mempunyai perbezaan yang nyata dan tidak membosan pengguna.
Sentuhan
Bagi pengguna yang kurang upaya ini mereka mempunyai deria sentuhan dan pendengaran yang sangat sensitif.Walau bagaimana pun sentuhan tidak meluas diamalkan dalam situasi interaksi manusia dengan komputer.

Skrin Sentuhan
Pemilihan penggunaan antara muka bergantung kepada banyak faktor yang dikaji.Di dalam merekabentuk antara muka yang baik,antara faktor yang penting adalah:
a.Menyelidik latarbelakang pengguna

Latarbelakang pengguna memainkan peranan penting memandangkan mereka adalah pengguna akhir sistem yang telah dibangunkan.Pemilihan antaramuka perlu bersesuaian dengan semua aspek berkaitan dengan isu kepenggunaan.Isu ini termasuklah umur,pengetahuan komputer,pengalaman dan kepakaran,keperluan,janti na dan sebagainya
b.Penggunaan warna

Penggunaan warna sebagai mewakili mesej tertentu sering digunakan.Contohnya,menggunakan warna merah sebagai tanda amaran atau menunjukkan kesilapan.Ciri ini mungkin boleh diaplikasikan dan diterima konsepnya.Tetapi,perlu diingat bahawa ada segenlintir manusia yang tidak dapat membezakan warna-warna tertentu.Manusia biasa hanya boleh membezakan dengan tepat 8-10 warna saja.Biru sesuai dijadikan warna latar belakang,terutama jika paparan bersaiz besar.Sementara warna-warna sejuk seperti biru dan hijau menyebabkan sesuatu objek itu kelihatan jauh .
Bagi pengguna yang menghadapi buta warna mereka ini tidak dapat membezakan warna merah dan hijau.Oleh yang demikian pereka antara muka seharusnya tidak menggunakan warna berkenaan untuk golongan ini.Manakala pula pengguna yang sudah berumur atau orang tua mereka tidak sensitif kepada warna biru pula..Oleh itu dengan paparan monokrom dua warna hitam dan putih adalah amat sesuai.

Penggunaan warna monokrom untuk orang-orang tua.

c.Kecerahan
Kesesuaian antara muka perlu diselaraskan dengan kekerapan penggunaan.Paparan yang terlalu terang menyebabkan pengguna boleh nampak imbasan kilauan.


d.Menyediakan maklum balas

Maklum balas atas segala tindakan perlu telus dengan pengguna.Maklum balas ini boleh dilaksanakan dalam berbagai bentuk seperti paparan visual,audio atau kotak dialog.Misalannya,pengguna memilih untuk menyimpan dokumen.Pengguna perlu tahu status semasa dan apakah yang sedang dilakukan sistem setelah pemilihan di buat.Maklum balas penting kerana tanpanya,pengguna akan merasa keliru dan jika maklum balas yang diberikan tidak tepat,maka pengguna akan melakukan kesilapan lagi.


e.Susun Atur Maklumat pada paparan
Jika pengguna sukar mengesan di manakah dia berada,ataupun bagaimana untuk keluar dari paparan semasa,kita mungkin tidak menyediakan laluan navigasi yang berkesan.Reka bentuk antara muka yang baik bagi pengguna mencari maklumat adalah seperti di bawah ini:


.Tidak mempamerkan terlalu banyak maklumat.


.Tidak mempamerkan terlalu sedikit maklumat.


.Maklumat berkaitan dikumpulkan dalam satu kumpulan.


.Susunan yang bermakna.


.Maklumat yang penting berada pada bahagian utama.


.Maklumat kurang penting berada pada bahagian lain.


.Bahagian yang tidak aktif disembunyikan.


Kesimpulan

Di dalam mereka bentuk antara muka,gunakan ciri-ciri antara muka yang baik berdasarkan prinsip yang telah dikaji oleh pakar di dalam bidang antara muka pengguna.Setiap sistem yang sudah dibangunkan perlu disediakan manual sebagai panduan pengguna sama ada panduan teknikal atau panduan penggunaan biasa.Jika kita berjaya menghasilkan antara muka yang baik,pengguna akan dapat menggunakan sistem dengan lebih cepat dan meninimakan proses pembelajaran.Penilaian antara muka harus dilakukan bersama-sama dengan pengguna akhir.Melalui proses ini,pengguna dapat memberi komen dan cadangan bagi memperbaiki antara muka semasa.

 
⊆ 22.46 by BaciL | ˜ 0 komentar »


Pengertian dari IMK
Sekarang ini tidak ada definisi yang disetujui menyangkut topik yang membentuk area interaksi manusia dan komputer. Walaupun begitu kita perlu suatu pengetahuan tenteng bidang pentingnya hubungan antara manusia dan komputer, hal ini berguna karena jika kita ingin memperoleh dan mengembangkan materi pendidikan atau menciptakan suatu software maupun hardware. Oleh karena itu saya akan menyajikan suatu artikel tentang definisi Interaksi Manusia dan Komputer.
Interaksi Manusia dan Komputer adalah suatu disiplin ilmu yang berkaitan dengan disain, implementasi dan evaluasi dari sistem komputasi yang interaktip untuk digunakan oleh manusia dan studi tentang ruang lingkupnya.
Dari suatu ilmu pengetahuan tentang perspektif dari komputer, Maksud dari interaksi dan secara rinci pada interaksi antara satu atau lebih manusia dan satu atau lebih komputasi mesin. Yang menggontrol sebuah mesin tersebut adalah seseorang, dengan menggunakan suatu program grafik interaktip yang ada pada suatu stasiun kerja. Disini bisa kita lihat bahwa ada bermacam-macam arti dengan apa yang dimaksud dengan interaksi, manusia, dan mesin, Makanya, kita tidak mungkin untuk meniadakan bagian dari Interaksi Manusia dan Komputer, meskipun demikian kita ingin mengidentifikasi ruang lingkupnya, serta topik lain yang lebih umum tenteng Interaksi Manusia dan Komputer
Sebab Interaksi Manusia dan Komputer mempelajari antara suatu manusia dan suatu mesin didalam sebuah komunikasi, yang mendukung pengetahuan dari kedua-duanya antara sisi mesin dan sisi manusia. Pada sisi mesin, teknik dalam komputer grafik, sistem operasi, bahasa programan, dan lingkungan pengembangannya. Sedangkan pada sisi manusia antara lain, teori komunikasi, disain industri dan grafis, linguistik, ilmu-ilmu sosial, psikologi, dan tujuan manusia relevan. Dan tentu saja perancangan sistem dan metoda lain yang sesuai.

 
⊆ 22.44 by BaciL | ˜ 0 komentar »

Kecerdasan buatan
Dari Wikipedia Indonesia, ensiklopedia bebas berbahasa Indonesia.
Langsung ke: navigasi, cari
Kecerdasan Buatan (bahasa Inggris: Artificial Intelligence atau AI) didefinisikan sebagai kecerdasan yang ditunjukkan oleh suatu entitas buatan. Sistem seperti ini umumnya dianggap komputer. Kecerdasan diciptakan dan dimasukkan ke dalam suatu mesin (komputer) agar dapat melakukan pekerjaan seperti yang dapat dilakukan manusia. Beberapa macam bidang yang menggunakan kecerdasan buatan antara lain sistem pakar, permainan komputer (games), logika fuzzy, jaringan syaraf tiruan dan robotika.
Banyak hal yang kelihatannya sulit untuk kecerdasan manusia, tetapi untuk Informatika relatif tidak bermasalah. Seperti contoh: mentransformasikan persamaan, menyelesaikan persamaan integral, membuat permainan catur atau Backgammon. Di sisi lain, hal yang bagi manusia kelihatannya menuntut sedikit kecerdasan, sampai sekarang masih sulit untuk direalisasikan dalam Informatika. Seperti contoh: Pengenalan Obyek/Muka, bermain Sepakbola.
Walaupun AI memiliki konotasi fiksi ilmiah yang kuat, AI membentuk cabang yang sangat penting pada ilmu komputer, berhubungan dengan perilaku, pembelajaran dan adaptasi yang cerdas dalam sebuah mesin. Penelitian dalam AI menyangkut pembuatan mesin untuk mengotomatisasikan tugas-tugas yang membutuhkan perilaku cerdas. Termasuk contohnya adalah pengendalian, perencanaan dan penjadwalan, kemampuan untuk menjawab diagnosa dan pertanyaan pelanggan, serta pengenalan tulisan tangan, suara dan wajah. Hal-hal seperti itu telah menjadi disiplin ilmu tersendiri, yang memusatkan perhatian pada penyediaan solusi masalah kehidupan yang nyata. Sistem AI sekarang ini sering digunakan dalam bidang ekonomi, obat-obatan, teknik dan militer, seperti yang telah dibangun dalam beberapa aplikasi perangkat lunak komputer rumah dan video game.
'Kecerdasan buatan' ini bukan hanya ingin mengerti apa itu sistem kecerdasan, tapi juga mengkonstruksinya.
Tidak ada definisi yang memuaskan untuk 'kecerdasan':
kecerdasan: kemampuan untuk memperoleh pengetahuan dan menggunakannya
atau kecerdasan yaitu apa yang diukur oleh sebuah 'Test Kecerdasan'

 
⊆ 22.42 by BaciL | ˜ 0 komentar »

Kecerdasan buatan
Kecerdasan Buatan (bahasa Inggeris: Artificial Intelligence) atau lebih dikenali sebagai AI merujuk kepada mesin yang mampu untuk berfikir, menimbangkan tindakan yang akan diambil, dan mampu mengambil keputusan sepertimana yang dilakukan oleh manusia.
Terdapat beberapa cara yang digunakan untuk membina kecerdasan buatan buat masa ini. Contoh-contoh utama termasuk :
Logik Kabur : Menggunakan logik kabur untuk mencapai pilihan optimum. Berdasarkan intuisi manusia dan sangat mudah untuk direka.
Jaringan Neural (bahasa Inggeris: Neural Network): Dimodel dari interaksi antara neuron sebenar. Berkemampuan untuk belajar dari set data-data sedia ada untuk meramal output.
Pengiraan Evolusi : Menggunakan model berasaskan konsep evolusi (mutasi, perkongsian genetic, keupayaan hidup) untuk menghasilkan penyelesaian termudah untuk sesuatu masalah.
Oleh kerana bidang ini masih muda berbanding dengan cabang-cabang sains lain masih tiada jaminan cara yang mana yang akan boleh menghasilkan AI yang sebenar (true AI); AI yang mampu meniru 100% cara manusia berfikir.

 
⊆ 22.39 by BaciL | ˜ 0 komentar »

KECERDASAN BUATAN DALAM ROBOTIK
Kecerdasan Buatan (Artificial Intelligence) dalam robotik adalah suatu algorithma (yang dipandang) cerdas yang diprogramkan ke dalam kontroler robot. Pengertian cerdas di sini sangat relatif, karena tergantung dari sisi mana sesorang memandang.
Para filsuf diketahui telah mulai ribuan tahun yang lalu mencoba untuk memahami dua pertanyaan mendasar: bagaimanakah pikiran manusia itu bekerja, dan, dapatkah yang bukan-manusia itu berpikir? (Negnevitsky, 2004). Hingga sekarang, tak satupun mampu menjawab dengan tepat dua pertanyaan ini. Pernyataan cerdas yang pada dasarnya digunakan untuk mengukur kemampuan berpikir manusia selalu menjadi perbincangan menarik karena yang melakukan penilaian cerdas atau tidak adalah juga manusia. Sementara itu, manusia tetap bercita-cita untuk menularkan Ă¯¿½kecerdasan manusiaĂ¯¿½ kepada mesin.
Dalam literatur, orang pertama yang dianggap sebagai pionir dalam mengembangkan mesin cerdas (intelligence machine) adalah Alan Turing, sorang matematikawan asal Inggris yang memulai karir saintifiknya di awal tahun 1930-an. Di tahun 1937 ia menulis paper tentang konsep mesin universal (universal machine). Kemudian, selama perang dunia ke-2 ia dikenal sebagai pemain kunci dalam penciptaan Enigma, sebuah mesin encoding milik militer Jerman. Setelah perang, Turing membuat Ă¯¿½automatic computing engineĂ¯¿½. Ia dikenal juga sebagai pencipta pertama program komputer untuk bermain catur, yang kemudian program ini dikembangkan dan dimainkan di komputer milik Manchester University. Karya-karyanya ini, yang kemudian dikenal sebagai Turing Machine, dewasa ini masih dapat ditemukan aplikasi-aplikasinya. Beberapa tulisannya yang berkaitan dengan prediksi perkembangan komputer di masa datang akhirnya juga ada yang terbukti. Misalnya tentang ramalannya bahwa di tahun 2000-an komputer akan mampu melakukan percakapan dengan manusia. Meski tidak ditemukan dalam paper-papernya tentang istilah Ă¯¿½resmiĂ¯¿½: artificial intelligence, namun para peneliti di bidang ini sepakat untuk menobatkan Turing sebagai orang pertama yang mengembangkan kecerdasan buatan.
Secara saintifik, istilah kecerdasan buatan Ă¯¿½ untuk selanjutnya disebut sebagai AI (artificial intelligence) Ă¯¿½ pertama kali diperkenalkan oleh Warren McCulloch, seorang filsuf dan ahli perobatan dari Columbia University, dan Walter Pitts, seorang matematikawan muda pada tahun 1943, (Negnevitsky, 2004). Mereka mengajukan suatu teori tentang jaringan saraf tiruan (artificial neural network, ANN) Ă¯¿½ untuk selanjutnya disebut sebagai ANN Ă¯¿½ bahwa setiap neuron dapat dipostulasikan dalam dua keadaan biner, yaitu ON dan OFF. Mereka mencoba menstimulasi model neuron ini secara teori dan eksperimen di laboratorium. Dari percobaan, telah didemonstrasikan bahwa model jaringan saraf yang mereka ajukan mempunyai kemiripan dengan mesin Turing, dan setiap fungsi perhitungan dapat dapat diselesaikan melalui jaringan neuron yang mereka modelkan.
Kendati mereka meraih sukses dalam pembuktian aplikasinya, pada akhirnya melalui eksperimen lanjut diketahui bahwa model ON-OFF pada ANN yang mereka ajukan adalah kurang tepat. Kenyataannya, neuron memiliki karakteristik yang sangat nonlinear yang tidak hanya memiliki keadaan ON-OFF saja dalam aktifitasnya. Walau demikian, McCulloch akhirnya dikenal sebagai orang kedua setelah Turing yang gigih mendalami bidang kecerdasan buatan dan rekayasa mesin cerdas. Perkembangan ANN sempat mengalami masa redup pada tahun 1970-an. Baru kemudian pada pertengahan 1980-an ide ini kembali banyak dikaji oleh para peneliti.
Sementara itu, metoda lain dalam AI yang sama terkenalnya dengan ANN adalah Fuzzy Logic (FL) Ă¯¿½ untuk selanjutnya ditulis sebagai FL. Kalau ANN didisain berdasarkan kajian cara otak biologis manusia bekerja (dari dalam), maka FL justru merupakan representasi dari cara berfikir manusia yang nampak dari sisi luar. Jika ANN dibuat berdasarkan model biologis teoritis, maka FL dibuat berdasarkan model pragmatis praktis. FL adalah representasi logika berpikir manusia yang tertuang dalam bentuk kata-kata.
Kajian saintifik pertama tentang logika berfikir manusia ini dipublikasikan oleh Lukazewicz, seorang filsuf, sekitar tahun 1930-an. Ia mengajukan beberapa representasi matematik tentang Ă¯¿½kekaburanĂ¯¿½ (fuzziness) logika ketika manusia mengungkapkan atau menyatakan penilaian terhadap tinggi, tua dan panas (tall, old, & hot). Jika logika klasik hanya menyatakan 1 atau 0, ya atau tidak, maka ia mencoba mengembangkan pernyataan ini dengan menambahkan faktor kepercayaan (truth value) di antara 0 dan 1.
Di tahun 1965, Lotfi Zadeh, seorang profesor di University of California, Berkeley US, mempublikasikan papernya yang terkenal, Ă¯¿½Fuzzy SetsĂ¯¿½. Penelitian-penelitian tentang FL dan fuzzy system dalam AI yang berkembang dewasa ini hampir selalu menyebutkan paper Zadeh itulah sebagai basis pijakannya. Ia mampu menjabarkan FL dengan pernyataan matematik dan visual yang relatif mudah untuk dipahami. Karena basis kajian FL ini kental berkaitan dengan sistem kontrol (Zadeh adalah profesor di bidang teknik elektro) maka pernyataan matematiknya banyak dikembangkan dalam konteks pemrograman komputer.
Metoda AI lain yang juga berkembang adalah algorithma genetik (genetic algorithm, GA) Ă¯¿½ untuk selanjutnya disebut sebagai GA. Dalam pemrograman komputer, aplikasi GA ini dikenal sebagai pemrograman berbasis teori evolusi (evolutionary computation, EC) Ă¯¿½ untuk selanjutnya disebut sebagai EC. Konsep EC ini dipublikasikan pertama kali oleh Holland (1975). Ia mengajukan konsep pemrograman berbasis GA yang diilhami oleh teori Darwin. Intinya, alam (nature), seperti manusia, memiliki kemampuan adaptasi dan pembelajaran alami Ă¯¿½tanpa perlu dinyatakan: apa yang harus dilakukanĂ¯¿½. Dengan kata lain, alam memilih Ă¯¿½kromosom yang baikĂ¯¿½ secara Ă¯¿½butaĂ¯¿½/alami. Seperti pada ANN, kajian GA juga pernah mengalami masa vakum sebelum akhirnya banyak peneliti memfokuskan kembali perhatiannya pada teori EC.
GA pada dasarnya terdiri dari dua macam mekanisme, yaitu encoding dan evaluation. Davis (1991) mempublikasikan papernya yang berisi tentang beberapa metoda encoding. Dari berbagai literatur diketahui bahwa tidak ada metoda encoding yang mampu menyelesaikan semua permasalahan dengan sama baiknya. Namun demikian, banyak peneliti yang menggunakan metoda bit string dalam kajian-kajian EC dewasa ini.
Aplikasi AI dalam kontrol robotik dapat diilustrasikan sebagai berikut,
Gambar 4.1: Kontrol robot loop tertutup berbasis AI
Penggunaan AI dalam kontroler dilakukan untuk mendapatkan sifat dinamik kontroler Ă¯¿½secara cerdasĂ¯¿½. Seperti telah dijelaskan di muka, secara klasik, kontrol P, I, D atau kombinasi, tidak dapat melakukan adaptasi terhadap perubahan dinamik sistem selama operasi karena parameter P, I dan D itu secara teoritis hanya mampu memberikan efek kontrol terbaik pada kondisi sistem yang sama ketika parameter tersebut di-tune. Di sinilah kemudian dikatakan bahwa kontrol klasik ini Ă¯¿½belum cerdasĂ¯¿½ karena belum mampu mengakomodasi sifat-sifat nonlinieritas atau perubahan-perubahan dinamik, baik pada sistem robot itu sendiri maupun terhadap perubahan beban atau gangguan lingkungan.
Banyak kajian tentang bagaimana membuat P, I dan D menjadi dinamis, seperti misalnya kontrol adaptif, namun di sini hanya akan dibahas tentang rekayasa bagaimana membuat sistem kontrol bersifat Ă¯¿½cerdasĂ¯¿½ melalui pendekatan-pendekatan AI yang populer, seperti ANN, FL dan EC atau GA.
Gambar 4.1 mengilustrasikan tentang skema AI yang digunakan secara langsung sebagai kontroler sistem robot. Dalam aplikasi lain, AI juga dapat digunakan untuk membantu proses identifikasi model dari sistem robot, model lingkungan atau gangguan, model dari tugas robot (task) seperti membuat rencana trajektori, dan sebagainya. Dalam hal ini konsep AI tidak digunakan secara langsung (direct) ke dalam kontroler, namun lebih bersifat tak langsung (indirect).

 
⊆ 22.20 by BaciL | ˜ 0 komentar »

Aplikasi Kecerdasan Buatan Untuk Identifikasi Sidik Jari Minyak Bumi

Kecerdasan Buatan ?… wakkks…. !!! :-o

'



[serius_mode=”on”]
Mendengar kata ‘kecerdasan buatan’ mungkin bagi sebagian orang akan terdengar ‘menyeramkan’, atau bagi beberapa orang lainnya akan langsung teringat film Matrix atau I-Robot. Itu tidak bisa disalahkan, karena memang kecerdasan buatan hampir selalu mempunyai konotasi fiksi ilmiah, meskipun pada kenyataannya kecerdasan buatan bukanlah suatu khayalan, tapi memang benar-benar ada dalam kehidupan kita sehari-hari dan kita juga sering menggunakannya.
Kecerdasan Buatan, yang dalam bahasa Walanda disebut sebagai Artificial Intelligence atau AI didefinisikan sebagai kecerdasan yang ditunjukkan oleh suatu entitas buatan. Sistem seperti ini umumnya dianggap komputer. Kecerdasan diciptakan dan dimasukkan ke dalam suatu mesin (komputer) agar dapat melakukan pekerjaan seperti yang dapat dilakukan manusia.


Aplikasi Kecerdasan Buatan di Laboratorium Minyak Bumi
Ada banyak jenis kecerdasan buatan, setidaknya ada lima jenis kecerdasan buatan yang sering kita temui, yaitu :
Jaringan Syaraf Buatan (Artificial Neural Networks),Dalam industri minyak bumi AI ini dapat digunakan untuk membuat pola waktu, misal produksi suatu sumur minyak pada waktu tertentu.
Logika Fuzzy (Fuzzy Logics),Logika ini untuk menentukan nilai diantara dua keadaan biner (1 dan 0). Logika inilah yang saya pakai untuk identifikasi suatu minyak bumi sama (1) atau tidak (0) yang akan dibahas lebih lanjut.
Algoritma Genetik (Genetic Algorithms),Algoritma Genetik biasanya digunakan dibidang kedokteran, misal untuk menganalisis DNA.
Robotika (Robotics),AI ini banyak digunakan di pabrik. Biasanya dibuat untuk melakukan kegiatan otomatisasi, misal dalam PLC (Programmable Logic Control).
Permainan Komputer (Games),AI jenis ini yang paling disukai oleh anak-anak saya, misal untuk memainkan game Age of Mythology atau Counter Strike…
Dari contoh-contoh diatas, yang akan saya bahas kali ini adalah Logika Fuzzy, yaitu untuk menentukan apakah suatu minyak bumi sama atau tidak berdasarkan hasil analisis spektrum minyak bumi menggunakan Spektrofotometer FTIR (Fourier Transform Infra Red) yang saya lakukan di Laboratorium Molekuler LEMIGAS, Jakarta selama bulan Januari - Februari 2006 yang lalu.

 
⊆ 22.16 by BaciL | ˜ 0 komentar »

Sejarah Kecerdasan Buatan

Pada awal abad 17, René Descartes mengemukakan bahwa tubuh hewan bukanlah apa-apa melainkan hanya mesin-mesin yang rumit. Blaise Pascal menciptakan mesin penghitung digital mekanis pertama pada 1642. Pada 19, Charles Babbage dan Ada Lovelace bekerja pada mesin penghitung mekanis yang dapat diprogram.
Bertrand Russell dan Alfred North Whitehead menerbitkan Principia Mathematica, yang merombak logika formal. Warren McCulloch dan Walter Pitts menerbitkan “Kalkulus Logis Gagasan yang tetap ada dalam Aktivitas ” pada 1943 yang meletakkan pondasi untuk jaringan syaraf.
Tahun 1950-an adalah periode usaha aktif dalam AI. Program AI pertama yang bekerja ditulis pada 1951 untuk menjalankan mesin Ferranti Mark I di University of Manchester (UK): sebuah program permainan naskah yang ditulis oleh Christopher Strachey dan program permainan catur yang ditulis oleh Dietrich Prinz. John McCarthy membuat istilah “kecerdasan buatan ” pada konferensi pertama yang disediakan untuk pokok persoalan ini, pada 1956. Dia juga menemukan bahasa pemrograman Lisp. Alan Turing memperkenalkan “Turing test” sebagai sebuah cara untuk mengoperasionalkan test perilaku cerdas. Joseph Weizenbaum membangun ELIZA, sebuah chatterbot yang menerapkan psikoterapi Rogerian.
Selama tahun 1960-an dan 1970-an, Joel Moses mendemonstrasikan kekuatan pertimbangan simbolis untuk mengintegrasikan masalah di dalam program Macsyma, program berbasis pengetahuan yang sukses pertama kali dalam bidang matematika. Marvin Minsky dan Seymour Papert menerbitkan Perceptrons, yang mendemostrasikan batas jaringan syaraf sederhana dan Alain Colmerauer mengembangkan bahasa komputer Prolog. Ted Shortliffe mendemonstrasikan kekuatan sistem berbasis aturan untuk representasi pengetahuan dan inferensi dalam diagnosa dan terapi medis yang kadangkala disebut sebagai sistem pakar pertama. Hans Moravec mengembangkan kendaraan terkendali komputer pertama untuk mengatasi jalan berintang yang kusut secara mandiri.

 

Teknik Kompiler baGian 1

⊆ 21.31 by BaciL | ˜ 0 komentar »

Refactoring : Sebuah Konsep
Salah satu faktor yang menghabiskan sumber daya terbesar dalam sebuah proses pengembangan aplikasi adalah saat menjaga kelangsungan hidupnya. Seiring dengan diimplementasikannya dalam lingkungan operasi secara riil, sebuah aplikasi atau lebih luas lagi, sebuah sistem dituntut agar senantiasa mampu memenuhi kebutuhan yag terus berkembang, jauh dari saat aplikasi tersebut dibangun, dusamping tuntutan untuk beroperasi secara baik dan benar.
Untuk memebuhi tuntutan kebutuhan tersebut, perbaikan, penyesuaian atas rule yang digunakan, ataupun fitur-fitur baru ditambahkan ke dalam aplikasi tersebut. Permasalahannya, hal-hal tersebut menyebabkan tingkat kompleksitas kode atas aplikasi tersebut menjadi semakin tinggi, dan tingginya kompleksitas tersebut membuat semakin sulit bagi developer untuk terus menjaga kelangsungan hidup aplikasi tersebut.Kompleksitas ini menjadi semakin bertambah lagi dengan dirilisnya kompiler yang lebih baru ataupun software development kit (SDK) / third-party library yang kerap kali membawa perbaikan, penyesuaian, perubahan, ataupun penambahan fitur-fitur baru yang bahkan bisa saja hingga merubah perilaku kerjanya. Hal ini disebabkan tuntutan untuk memenuhi kebutuhan yang juga berkembang atas tool-tool tersebut.
Bagi para developer Delphi tentunya masih bisa mengingat bagaimana perubahan yang terjadi ketika Borland merilis Delphi 6 atau bila aktif mengunakan library Developer Express ataupun FastReport masih bisa membayangkan bagaimana repotnya ketika hendak bermigrasi ke QGrid 4 dari versi sebelumnya ataupun migrasi dari FR 2.X ke versi 3 yang lebih baru.
Ditambah lagi dengan kebiasaan kita sebagai developer yang umumnya cenderung mengguakan metode extreme programming yang secara lokal lebih dikenal sebagai HB (hajar bleh) programming, yang cenderung mempertinggi tingkat kompleksitas kode yang ada dan mengakibatkan aplikasi yang dibangun menjadi semakin sulit untuk dijaga kelangsungannya.
Untuk mengurangi kompleksitas kode yang semakin tinggi ini, tentunya harus ada suatu teknik yang bisa digunakan developer agar dapat senantiasa menjaga aplikasi yang dibangun bisa tetap beradaptasi dengan kebutuhan yang terus berkembang dalam tingkat kompleksitas yang sedapat mungkin dijaga tetap rasional. Ada beberapa teknik yang dikenal saat ini, metode yang terbaru adalah dengan memanfaatkan modelling atau lebih dikenal dengan UML (unified modelling language), sementara konsep yang telah ada sebelumnya dikenal sebagai refactoring. Namun jika dilihat dari situasi dimana aplikasi sudah ada dan terdapat keharusan agar dapat senantiasa responsif/tanggap menjawab tuntutan pemenuhan kebutuhan yang berkembang dalam waktu yang relatif singkat, metode refactoring sepertinya bisa menjadi jawaban yang lebih rasional atas permasalahan-permasalahan di atas.
Refactoring sederhananya merupakan teknik untuk memecahkan tingkat kompleksitas kode ke dalam layer-layer class abstraction yang lebih sederhana dan rasional. Proses penyederhanaan ini pun bisa berbagai macam tingkatannya, dimulai dari yang terkecil, memecah sebuah fungsi yang kompleks ke dalam fungsi-fungsi yang lebih sederhana, merestrukturisasi class abstraction dalam sebuah object class yang kompleks, ataupun memecah sebuah modul ke dalam sub-sub modul yang lebih sederhana.
Namun demikian, sedapat mungkin diusahakan agar proses penyederhanaan ini tidak mempengaruhi atau bahkan merubah perilaku kerja aplikasi secara keseluruhan. Hal ini sangat penting karena tidak jarang keinginan untuk memecah kompleksitas kode dengan cara refactoring ini justru malah membuat kode menjadi semakin kompleks dan menyulitkan developer untuk melakukan tracking saat akan melakukan perubahaan terhadap kode tersebut di kemudian hari. Refactoring harus diusahakan sedapat mungkin tidak merubah perilaku ataupun code-visibility dari sisi developer, hal ini bisa dihindari jika dalam proses refactoring tersebut developer bisa secara cermat meletakkan fungsi/method dalam tingkatan visibility dan abstraction yang sesuai sehingga tetap mudah jika suatu saat harus melakukan penyesuaian atas kode tersebut.
Dalam implementasinya di Delphi, untuk manajemen code-visibility atas sebuah/beberapa fungsi pada tipikal procedural programming bisa dilakukan dengan cara menghindari deklarasi atas sub-fungsi yang hanya terkait dalam unit tersebut pada blok Interface. Kompiler delphi sebenarnya mendukung fungsi di dalam fungsi, namun jika tidak benar-benar pada kasus yang spesifik, sebaiknya hindari cara seperti ini karena cenderung membuat sulit developer dalam melakukan tracing atas kode tersebut.
Pada impelementasi dengan kompiler modern saat ini, sedapat mungkin gunakan model OOP dalam menyelesaikan permasalahan anda, tidak hanya karena karena fitur-fitur yang dimiliki oleh model OOP tersebut, melainkan pula OOP sangat membantu mempermudah developer memanajemen code-visibility atas object yang dibuatnya. Sedapat mungkin hanya meletakkan field-field yang benar-benar bersifat spesifik pada blok private declaration dan secara gunakan property untuk mengakses field tersebut. Bilamana dibutuhkan action atas read ataupun write value terhadap field tersebut, hendaknya diatur agar fungsi yang terkait bersifat expandable untuk meningkatkan fleksibilitas kode yang dibuat tersebut. sebagai contoh:
TAppType = (atUnknown, atGLedger, atAcctRcv, atAcctPyb, atPayroll);
TMyCustomClass = class(TMyBaseClass)privatefunction GetAppType: TAppType;protectedfunction InternalGetAppType: TAppType; virtual;publicproperty ApplicationID: TAppType read GetAppType;end;
function TMyCustomClass.InternalGetAppType: TAppType; virtual;beginResult := atUnknown;end;
function TMyCustomClass.GetAppType: TAppType;beginResult := InternalGetAppType;end;
Dari contoh di atas kode terlihat semakin panjang dan inefisien untuk mendapatkan nilai atas property ApplicationID, namun keuntungan model seperti ini adalah jika suatu saat anda harus menambahkan level abstraksi baru atas class tersebut dan membutuhkan tambahan task atas fungsi pada property tersebut, hal ini masih bisa anda lakukan dengan cara menginherit fungsi InternalGetAppType, anda tidak bisa menginherit fungsi GetAppType secara langsung karena kompiler mensyaratkan fungsi yang digunakan pada sebuah property bersifat static function.
Sebenarnya ada banyak hal lagi yang bisa teknik-teknik yang bisa dilakukan untuk memecahkan tingkat kompleksitas ini, dan saya yakin untuk hal ini anda bisa mencoba mengeksplorasinya secara lebih baik.

 

teknik Kompiler ke 2

⊆ 21.28 by BaciL | ˜ 0 komentar »

Pemrograman Pascal 01
BAHASA PASCAL
1. Sejarah PASCAL

merupakan pengembangan dari bahasa ALGOL 60, bahasa pemrograman untuk sains komputasi. Tahun 1960, beberapa ahli komputer bekerja untuk mengembangkan bahasa ALGOL, salah satunya adalah Dr. Niklaus Wirth dari Swiss Federal Institute of Technology (ETH-Zurich), yang merupakan anggota grup yang membuat ALGOL. Tahun 1971, dia menerbitkan suatu spesifikasi untuk highly-structured language (bahasa tinggi yang terstruktur) yang menyerupai ALGOL. Dia menamainya dengan PASCAL (seorang filsuf dan ahli matematika dari Perancis) Pascal bersifat data oriented, yaitu programmer diberi keleluasaan untuk mendefinisikan data sendiri. Pascal juga merupakan teaching language (banyak dipakai untuk pengajaran tentang konsep pemrograman). Kelebihan yang lain adalah penulisan kode Pascal yang luwes, tidak seperti misalnya FORTRAN, yang memerlukan programmer untuk menulis kode dengan format tertentu. Bentuk dasar program Pascal adalah seperti berikut:
program TITLE ;begin pernyataan;pernyataanend.
2. PASCAL
sebagai bahasa terstrukturSebagai bahasa terstruktur, PASCAL mempunyai ciri-ciri sebagai berikut:1. BerurutanSusunan dari kode-kode dalam teks Pascal harus ditulis secara urut dari atas, pernyataan-pernyataan yang ditulis lebih awal akan dieksekusi lebih dahulu. Oleh karena itu, suatu pernyataan yang menyangkut suatu variabel di dalam program, maka variable itu harus terdefinisi dahulu sebelumnya. Hal ini terutama menyangkut pada pemanggilan sub-program oleh sub-program yang lain. Bisa dibaca lebih lanjut pada bagian sub-program.2. Blok dengan batas-batas yang jelas.Pascal memberikan pembatas yang jelas pada tiap-tiap blok, seperti pada blok program utama, sub-program, struktur kontrol (pengulangan/ pemilihan), dll. Pemakaian kata kunci begin untuk mengawali operasi pada blok dan end untuk menutupnya memudahkan programmer menyusun programnya dengan mudah. Seperti contoh:
If X>0 thenbegin Write ( ‘ bilangan positif’);Writeln ( ‘ program selesai’);end;
3. Satu pintu masuk dan satu pintu keluar pada blok pemilihan dan pengulangan. Contoh di atas juga mengilustrasikan pintu masuk tunggal pada suatu blok pemilihan yaitu suatu test logika X>0, dengan pintu keluaran yang satu pula (satu disini maksudnya bukan dua baris perintah output tapi suatu paket perintah yang dirangkai dengan begin .. end.3. Bakuan PASCALDibakukan oleh ISO pada tahun 1983 dan dikembangkan dalam beberapa versi, diantaranya: USCD PASCAL, MS PASCAL, TURBO PASCAL dll. Dengan semakin berkembangnya teknologi dalam komputasi, Pascal dimanfaatkan untuk pengembangan DELPHI (berasal dari nama suatu kota di masa Yunani kuno), suatu bahasa pemrograman visual yang menonjolkan pada efek grafis dan orientasi pada objek-objek yang siap dipakai, karena memiliki Visual Component Library (VCL).
4. Struktur Bahasa PASCAL
secara umumPascal mempunyai struktur sebagai berikut:1. Bagian Judul Program2. Bagian Deklarasia. Deklarasi tipe data (TYPE)b. Deklarasi variabel (VAR)c. Deklarasi konstanta (CONST)d. Deklarasi label (LABEL)e. Deklarasi sub-program (PROCEDURE dan FUNCTION)3. Bagian Program Utama Perintah-perintah.
Teks Pascal setidaknya memiliki bagian Judul Program, bagian Deklarasi, dan Bagian Program Utama yang berupa perintah-perintah. Sedangkan untuk bagian deklarasi menyesuaikan dengan isi dari program itu sendiri. Contoh program PASCAL:
program TAMBAH_00; { Menjumlahkan dua bilangan yang nilainya diberikan dalam perintah}var X, Y, Z: integer; { Deklarasi variabel X,Y dan Z sebagai bilangan bulat }BEGIN { Program Utama Mulai }X := 50; { Perintah memberikan nilai 50 pada var. X }Y := 25; { Perintah memberikan nilai 25 pada var. Y }Z := X + Y; { Perintah menjumlahkan X dan Y serta menyimpan hasilnya ke Z}END. { Akhir Program Utama }
Pada contoh ini nilai X dan Y tidak bisa sembarang, karena didefiniskan tertentu. Agar nilai X dan Y bisa bebas ditentukan, nilai X dan Y dibaca dari default input.
program TAMBAH_01; { Menjumlahlan dua buah bilangan yang dibaca dari default input }var X, Y, Z: integer; { Deklarasi variabel X,Y dan Z sebagai bilangan bulat }BEGIN { Program Utama Mulai }read(X); { Membaca nilai X lewat key-board }read(Y); { Membaca nilai Y lewat key-board }Z := X + Y; { Menjumlahkan X dan Y serta menyimpan hasilnya ke Z }write(Z); { Menyajikan Z ke layar monitor }END. { Akhir Program Utama }
Dasar Bahasa PASCAL
Unsur-unsur Pemrogramana. Mendapatkan data dengan membaca data dari default input (key board, file atau sumber data lainnya).b. Menyimpan data ke dalam memori dengan struktur data yang sesuai,c. Memproses data dengan instruksi yang tepat.d. Menyajikan atau mengirimkan hasil olahan data ke default output (monitor, file atau tujuan lainnya).
Dalam mengolah data diperlukan pengelolaan instruksi terstruktur:a. Beberapa instruksi dikelompokkan dalam satu blok atau model yang mengerjakan tugas tertentu.b. Beberapa perintah dilaksanakan dengan persyaratan tertentu.c. Beberapa perintah dilaksanakan berulang dengan jumlah pengulangan tertentu. Identifier Digunakan untuk nama: Program, Sub-program (procedure dan function),nama: Variable, Constant, Type, Label.Nama-nama ini digunakan untuk pemakaian dan pemanggilan dalam program. Ketentuan penulisan identifiera. Nama identifier harus dimulai dengan karakter huruf alfabet: a sampai z, A sampai Z atau karakter ‘_’ (underscore - garis bawah)b. Karakter berikutnya boleh karakter numerik (0 .. 9) atau kombinasi alphanumerik (huruf-numerik).c. Panjang nama, pada berbagai versi Pascal umumnya antara 32 - 63.d. Tidak boleh menggunakan karakter istimewa: + - * / \ = < > [ ] . , ; : ( ) ^ @ { } $ # ~ ! % & ` ” ‘ dan ? Contoh penulisan:Penulisan yang benar: X _PQR Beta Sudut_Alpha luasLingkaranPenulisan yang salah: 3D sisi-Kanan B#
Jenis identifiera. Identifier umumMerupakan identifier yang didefinisikan sendiri oleh pemrogram. Pemrogram mempunyai kebebasan untuk menentukan nama identifiernya, dengan syarat nama tersebut tidak sama dengan identifier standar dan reserved word yang akan dibahas lebih lanjut. Hal ini untuk mencegah kesalahan yang bisa timbul akibat tumpang tindih identifier dalam program.b. Identifier Standar (Baku)Merupakan identifier yang didefinisikan oleh pembuat kompiler Pascal. Biasanya pembuat kompiler menyediakan suatu library yang sudah ada didalam kompiler. Library berisi berbagai procedure, fungsi atau unit yang sudah siap pakai. Misalnya Turbo Pascal Windows 1.5 memiliki suatu unit untuk memproses output yaitu wincrt, gotoxy, yang dengan mudah bisa dipakai oleh programmer di dalam menuliskan kode-kode programnya. Dinamai Identifier Standar karena suatu kompiler tidak harus memilikinya, masing-masing kompiler dimungkinkan mempunyai identifier yang berbeda untuk suatu tugas yang hampir sama. Misalnya Turbo Pascal versi DOS menggunakan crt untuk melakukan fungsi yang sama dengan wincrt (TPW 1.5). Beberapa Identifier Standar yang dimiliki oleh kompiler-kompiler Pascal antara lain:
abs arctan boolean char cos dispose eof eoln exp false input integer ln maxint new odd ord output pack page pred read readln real reset rewrite round sin sqr sqrt succ text true trunc write writeln
c. Identifier “reserved word”, yaitu yang sudah didefinisikan dan digunakan oleh bahasa PASCAL sendiri (Kita tidak bisa menamai identifier kita dengan ini).
and array begin case const div do downto else end file for forward function goto if in label mod nil not of or packed procedure program record repeat set then to type until var while with
Deklarasi Variable:Mendeklarasikan varibel adalah:a. Memberikan nama variabel sebagai identitas pengenalb. Menentukan tipe data variabelContoh deklarasi variabel:
var K : integer;R : real;C : char;T : boolean;
Beberapa identifier yang sejenis bisa dideklarasikan bersamaan.
var i, j, k : integer;{Variabel i, j dan k sebagai integer}namaMHS, alamatMHS : char; {Nama dan alamat mahasiswa }
Deklarasi Konstanta:Mendeklarasikan konstanta adalah:a. Memberikan nama konstanta sebagai identitas pengenalb. Menentukan nilai konstantaContoh deklarasi konstanta:
const MaximumSize = 100; {integer }ExitCommand = ‘Q’; {char }
Tipe Data
Tipe data yang disediakan oleh PASCAL meliputi:1. Tipe Data Sederhanamerupakan tipe data dasar yang sering dipakai oleh program, meliputi: integer (bilangan bulat), real (bilangan pecahan), char (alphanumerik dan tanda baca), dan boolean (logika). Untuk data integer dan real masing-masing terbagi menjadi beberapa kategoria. Bilangan Integermerupakan tipe data berupa bilangan bulat, terbagi atas beberapa kategori seperti terlihat dalam tabel 1. tabel 1 menunjukkan jenis data, ukuran dalam memori dan rentang nilainya.
tabel 1. Tipe Data Bilangan Integer
Tipe Data
Ukuran Tempat
Rentang Nilai
Byte
1 byte
0 s/d +255
Shortint
1 byte
-28 s/d +127
integer
2 bytes
-32768 s/d 32767
Word
2 bytes
0 s/d 65535
Longint
4 bytes
2147483648 s/d 2147483647
Contoh bilangan integer adalah: 34 6458 -90 0 1112 Penggolongan tipe data integer tersebut dimaksudkan untuk membatasi alokasi memori yang dibutuhkan misalkan untuk suatu perhitungan dari suatu variabel bilangan diperkirakan nilai maksimumnya 32767 kita cukup mendeklarasikan variabel bilangan sebagai integer (2 byte), daripada sebagai longint(4 byte). Di dalam kompilernya, Pascal menyediakan konstanta untuk bilangan Integer yaitu: MaxInt and MaxLongInt, pemrogram bisa menggunakannya di dalam programnya tanpa harus terlebih dahulu mendefinisikannya.-MaxInt bernilai 32.767-MaxLongint bernilai 2.147.483.647.contoh:
Program display_maxint;uses wincrt;begin writeln (maxint)end.
Hasilnya: 32.767
b. Bilangan RealBilangan real atau nyata merupakan jenis bilangan pecahan, dapat dituliskan secara biasa atau model scientific . Contoh bilangan real: 34.265 -3.55 0.0 35.997E+11, dimana E merupakan simbol perpangkatan 10. Jadi 452.13 mempunyai nilai sama dengan 4.5213e2. Penggolongan tipe data bilangan real dapat dilihat pada tabel 2.tabel 2. Bilangan Real
Tipe Data
Ukuran Tempat
Rentang Nilai
real
6 bytes
2.9 x 10-39 s/d 1.7 x1038
single
4 bytes
1.5 x 1045 s/d 3.4 x 1038
double
8 bytes
5.0 x 10-324 s/d 1.7 x 10308
extended
10 bytes
3.4 x 10-4932 s/d 1.1 x 104932
comp
8 bytes
-9.2x 1018 s/d 9.2x 1018
c. Chartipe data ini menyimpan karakter yang diketikkan dari keyboard, memiliki 266 macam yang terdapat dalam tabel ASCII (American Standard Code for Information Interchange). Contoh: ‘a’ ‘B’ ‘+’, dsb. Yang perlu diingat bahwa dalam menuliskannya harus dengan memakai tanda kutip tunggal. Jenis data ini memerlukan alokasi memori sebesar 1(satu) byte untuk masing-masing data.

 

tEknik kOmpiler bagian ke 3

⊆ 21.25 by BaciL | ˜ 0 komentar »

Simulator Prosesor
Di samping simulator mesin teori, seringkali dalam memahami proses kompilasi perlu penjelasan dari tingkat instruksi di level prosesor. Untuk itu penjelasan akan lebih mudah dilakukan bila memanfaatkan suatu simulator prosesor. Memang sebetulnya pengetahuan instruksion set design ataupun simulator ini diperoleh di Arsitektur Komputer. Akan tetapi simulator prosesor ini dapat juga dimanfaatkan untuk memberikan pemahaman teknik pembuatan dan ekseskusi suatu kompilasi. Sehingga tahapan "menjalankan kompiler, dan hasil kompilasi yang dibentuk dapat berupa" : Program aplikasi bahasa A V Kompiler/interpreter bahasa A V Bahasa mesin prosesor X V Simulator prosesor X V Sistem Operasi "Host" (misal Windows, Linux dll)
Dengan cara itu mahasiswa dapat mempelajari bagaimana proses kompilasi dilakukan dan bagaimana dijalankan pada mesin virtualnya. Sehingga pengamatan dapat dilakukan dg mudah. Faktor lain adalah dg menggunakan "prosesor virtual" maka kita dapat mendefinisikan :
Prosesor X adalah suatu prosesor virtual yg sederhana
Bahasa A merupakan bahasa yg didisain mahasiswa secara sederhana (misal hanya bisa interger, dan operasi sederhana saja)
Kompiler yg disusun akan menghasilkan "kode biner" untuk proesor X yg sederhana tersebut (misal register terbatas, dan metoda pengalamatan terbatas)
Dengan cara di atas, student tidak dihadapi oleh "instruction set" yang kompleks, dan architecture processor, dan juga bahasa pemorgraman yg rumit. Tetapi konsep kompilasi dapat lebih mudah dipahami secara mendasar. ketimbang harus menggunakan prosesor "real" dan bahasa "real" yang jelas memiliki scope sangat luas.
Berikut ini adalah beberapa simulator prosesor yang dapat dimanfaatkan dalam memberikan pemahaman lebih dalam mengenai teori dan praktis kepada para mahasiswa.
mic1. mic1 ini berbasiskan Java yang mengimplementasikan arsitektur mikro Mic-1 pada Bab 4 buku Andrew S. Tanenbaum, Structured Computer Organization,http://www.ontko.com/mic1/
DLXOS. Merupakan suatu sistem "komputer" yang dijelaskan pada buku Arsitektur oleh Hennessy & Patterson. Sistem ini terdiri dari DLX Processor (instruction set dan spesifikasi), DLX hardware simulator, DLX compiler dan assembler, DLX Operating System. Karena semua tersedia source code, jadi dapat menjelaskan secara gamblang, bagaimana suatu sistem komputer dibangun, dari "prosesor" hingga "sistem operasi".http://www.cse.ucsc.edu/~elm/Software/Dlxos/index.shtml
MIX. Emulator ini ditulis oleh David A Smallberg (1982), dan mensimulasikan prosesor MIX (yang diteragnkan dalam buku milik Donald Knuth).http://www.swiss.ai.mit.edu/~adler/MIX/
MIXAL. Merupakan lingkungan mensimulasikan kerja MIX, MIX adalah model komputer yang merupakan penyederhanaan model CISC (Complex Instruction Set Computer), assembly dari model ini mirip dengan komputer sesungguhnya. Di situ ini terdapat tutorial dan juga SIMULASI GRAFIS.http://www.gnu.org/software/mdk/mdk.html
MMIX MMIX merupakan prosesor teoritis ciptaan Prof. Donald Knuth, yang merupakan penmgembangan dari MIX. Prosesor bertipe Reduced Instruction Set Computer (RISC).http://bitrange.com/mmix/Untuk informasi lainnya tentang prosesor ini dapat dibaca di URL berikut inihttp://www-cs-faculty.stanford.edu/~knuth/mmix.htmlhttp://mmixmasters.sourceforge.net/

 

teknik kompilasi ke 4

⊆ 21.23 by BaciL | ˜ 0 komentar »

Compiler Construction
Teknik kompilasi telah lama diberikan di lingkungan pendidikan tinggi bidang komputer di Indonesia. Pembahasan dalam mata kuliah ini biasanya berkisar pada teori automata, teori kompilasi, teori grammar. Praktek teknik kompilasi pun telah diberikan di lingkungan laboratorium, walau biasanya masih terbatas pada demonstrasi hal teori, ataupun sekedar pengenalan kompiler yang ada atau banyak digunakan. Beberapa universitas telah mulai memperkenalkan penggunaan perangkat pembangun kompiler.
Telah banyak mahasiswa menggunakan dan memanfaatkan compiler/interpreter, tapi saat ini masih belum banyak muncul nama programmer Indonesia yang terlibat dalam proyek pembuatan compiler/interpreter. Mungkin hanya KILANG nya Prof. Dali S Naga (BASIC Indonesia), yang sempat terdengar, sayang sekarang sudah tidak ada jejaknya. Mungkin merilis KILANG dalam bentuk GPL seperti BWBASIC, adalah suatu langkah menarik untuk terus mengembangkan KILANG ini lebih lanjut.
Memang ada sekelompok programmer Indonesia yang sempat akan merilis bahasa pemrograman "BATAK" tetapi hingga saat ini belum terdengar kembali. Bahasa pemrograman, JAVA, BALI, MADURA, hanyalah namanya saja yang berbau Indoensia, tapi sedikit atau malah tidak ada keterlibatan pengembang dari Indonesia.
Tentu saja akan timbul pertanyaan "apa yang salah dalam pengajaran kompilasi ???" (INGAT SAYA TIDAK INGIN MENDISKREDITKAN SIAPAPUN DALAM PERNYATAAN INI). Hanya mencoba mencari langkah perbaikan yang mungkin bisa diterapkan.
Walaupun sedikit sekali atau nyaris tidak ada "lowongan pekerjaan" yang membutuhkan kemampuan mengembangkan compiler ini (silahkan baca di koran ataupun majalah), bukan berarti pengetahuan itu sama sekali tak dibutuhkan dalam dunia pemrograman sehari-hari. Pada dasarnya pengetahuan pembuatan kompiler (compiler construction) ini merupakan pengetahuan dasar komputasi yang sangat baik sekali. Pengetahuan ini dimanfaatkan pada beragam aplikasi nantinya. Misal teknik parsing, pengenalan pola teks, optimasi kode dan lain sebagainya. Bahkan suatu database engine pun di bagian "front end" selalu menggunakan parsing ini. Pengetahuan tentang kompilasi akan dapat memberikan landasan bagi programmer untuk menyusun program yang efektif dan efisien.
Ketika seseorang melakukan pemrograman, sebetulnya secara tidak sadar dia akan melakukan proses penambahan suatu bahasa. Misal pembuatan suatu fungsi (ataupun prosedur) pada dasarnya merupakan suatu proses "penambahan kosa-kata" dari bahasa pemrograman tersebut. Dari yang tadinya tidak memiliki fungsi tersebut hingga akhirnya ditambahkan suatu "vocabulary" untuk melakukan suatu fungsi tersebut. Untuk itulah pemahaman penyusunan kompiler merupakan suatu dasar yang utama dalam bidang ilmu komputer.

 

teknik kompiler bagian 5

⊆ 21.18 by BaciL | ˜ 0 komentar »

Menulis Program dengan Teknik Dynamic Loading
Home Halaman Muka

Semua plug-ins di Netscape atau modul di Apache memakai teknik yang sama, yaitu Dynamic Loading (DL). Ada beberapa terminologi lain untuk menyebutkan teknik ini, seperti DSO (Dynamic Shared Object) atau DLL (Dynamic Link Library). Tulisan ini akan memberikan pengantar tentang bagaimana membuat program dengan memakai teknik ini.
1.Pendahuluan Dalam pembuatan sebuah program, terkadang kita tidak ingin semua fungsi diimplementasikan langsung pada program utama, karena kita mungkin belum tahu fungsi apa saja yang harus disediakan. Atau kita menginginkan pemakai program ini harus mempunyai kemungkinan untuk menambahkan fungsi-fungsi yang belum ada pada program yang akan kita tulis. Tentu saja semua itu harus dapat dilakukan tanpa harus melakukan proses rekompilasi program utama dari awal. Teknik Dynamic Loading adalah solusi yang tepat untuk merealisasikan keinginan di atas. Yang harus kita kerjakan hanyalah menulis program pokok yang mempunyai kemampuan memuatkan (loading) fungsi tambahan dan menginterpretasikan fungsi ini dengan benar. Sebelum kita membahas lebih jauh, kita harus mengetahui terlebih dahulu bagaimana tahapan proses dari file source code menjadi file yang bisa dieksekusi. Kita akan memulai dengan menulis program yang sudah tidak asing lagi bagi para pemrogram bahasa C yaitu Hello World.
#include
int main(int argc, char** argv) { printf("Hello World"); } Untuk melakukan proses kompilasi dapat dipakai perintah:
$ gcc -o hello hello.c Instruksi di atas akan melakukan proses berikut:
1.Proses kompilasi Source code hello.c dikompilasi menghasilkan file objek hello.o. Karena fungsi printf() tidak diimplementasikan di file ini, maka kompiler akan memberi catatan di tabel file objek ini bahwa fungsi printf() belum mempunyai referensi. 2.Proses linking Linker akan mencari di librari standard pengimplementasi fungsi yang tidak dapat ditemukan pada saat proses kompilasi, dalam hal ini pengimplementasi fungsi printf(). Perintah di atas secara implisit memanggil linker dan menambahkan beberapa librari standar sebagai parameter. Di sini pengimplementasi fungsi dari printf() akan ditemukan di libc yang juga ditambahkan tanpa sepengetahuan sang pemrogram. Proses linking librari ke program utama dibedakan menjadi dua tergantung dari caranya: 2.Proses linking statis (static linking). Di sini jika pengimplementasi fungsi printf() ditemukan, maka akan dikopikan ke dalam file objek hello. 3.Proses linking dinamis (dynamic linking). Di sini libc diimplementasikan sebagai shared library. Linker hanya akan mencatatkan referensi ke simbol pengimplementasi fungsi printf() pada file objek hello. Jika file program hello hasil dari proses linking statis dieksekusi, maka objek file program akan dimuatkan ke memori. Kemudian fungsi pertama, yang nama simbolnya tergantung dari sistem (contohnya __main), akan dipanggil. Fungsi ini, yang biasanya didefinisikan oleh kompiler atau librari akan melakukan seting dan initialisasi internal dan akhirnya akan memanggil fungsi utama main() yang didefinisikan oleh user. Pada cara kedua, jika program hello dieksekusi, maka objek file ini mula-mula juga akan dimuatkan ke memori. Kemudian linker dinamis (dynamic linker) akan membaca catatan referensi yang ada di file program hello yang dihasilkan oleh linker sebelumnya. Jika objek file shared library yang berisi pengimplementasi fungsi yang dibutuhkan belum dimuatkan ke memori, maka linker dinamis akan secara rekursif memuatkan objek file shared library ini ke memori. Rekursif berarti, jika suatu file shared library mempunyai referensi ke file shared library lainnya, maka objek file shared library yang lain ini juga akan dimuatkan ke memori (jika belum dimuat) dan seterusnya. Selanjutnya semua referensi yang merujuk ke simbol pengimplementasi fungsi akan diperbaharui ke posisi simbol yang aktual. Ini disebabkan posisi simbol pengimplementasi baru dapat ditentukan setelah objek file shared library dimuatkan ke memori (runtime). Dan posisi ini selalu berubah-ubah, tergantung dari banyak hal, seperti kapan objek file shared library ini dimuatkan ke memori, objek file shared library apa saja yang sudah dimuatkan ke memori dan sebagainya. Karena kita hanya akan membahas cara yang kedua, maka untuk selanjutnya terminologi librari dimaksudkan untuk merujuk ke shared library. 1.Shared Library Seperti disebutkan di atas, setiap kali objek file librari dimuatkan ke memori tidak selalu mempunyai posisi yang sama. Maka posisi simbol di dalam file libraripun mempunyai alamat yang selalu berubah. Oleh karena itu untuk mereferensi sebuah simbol, dilakukan pengalamatan berbasis zero, yaitu pengalamatan yang relatif terhadap posisi awal dari file librari. Setelah alamat posisi awal dapat ditentukan, maka referensi semua simbol di file librari dapat dihitung pada saat waktu eksekusi (runtime). Pada Program Library HOWTO [#!Wheeler!#] disebutkan tiga jenis librari, selain librari statis (static library) dan shared library masih ada dynamic loaded library. Dilihat dari arsitektur filenya, tidak ada perbedaan antara shared library dan dynamic loaded library. Pembedaan ini hanya dipandang dari sisi pemrogramnya saja. Pada shared library, proses loading dari objek file librari terjadi saat program utama dimuatkan ke memori (proses linking dinamis seperti diuraikan di atas). Sedang pada dynamic loaded library, proses loading dari file librari dapat berlangsung kapan saja selama program utama dijalankan. Proses linking ini juga sering disebut dengan runtime linking. Kita akan menamakan teknik yang memanfaatkan runtime linking ini dengan nama Dynamic Loading. Sebelum teknik ini dibahas, ada baiknya kita mengetahui aturan pemberian nama pada sebuah shared library, walaupun aturan ini tidak sepenuhnya berlaku pada dynamic loaded library. Penggunaan terminologi shared library untuk selanjutnya berlaku juga pada dynamic loaded library. Berbeda dengan jenis librari statis, shared library mempunyai dua jenis nama, yaitu soname dan real name. Soname terdiri dari awalan lib, nama dari librari, kata .so diikuti tanda titik (".") dan nomor versi mayor, seperti contohnya libhello.so.1. Real name adalah nama file librari sebenarnya yang disusun dari soname ditambah tanda titik ("."), nomor minor, dan kalau ada diikuti tanda titik (".") dan nomor release, seperti contohnya libhello.so.1.1 atau libhello.so.1.1.5. Selain kedua jenis nama di atas, masih ditambahkan satu jenis nama lagi yaitu linker name yang sama dengan soname tanpa nomor versi mayor, seperti contohnya libhello.so. Program yang membutuhkan file shared library akan melakukan referensi menggunakan jenis nama ini. Secara umum linker name adalah link ke soname dan soname adalah link ke real name. 2.API dari Dynamic Loading Kebanyakan sistem operasi menyediakan API (Application Program Interface) untuk penggunaan teknik Dynamic Loading. Sayangnya, nama-nama API ini belum ada standarnya, sehingga secara umum setiap sistem operasi menggunakan nama API sendiri-sendiri. Di sini kita akan menggunakan API dari sistem operasi Linux. Sebelum kita mulai dengan contoh program, kita akan membahas terlebih dahulu fungsi-fungsi API yang ditulis dalam bahasa program C. Deklarasi dari fungsi-fungsi ini terdapat di file header . void* dlopen(const char* filename, int flag); Fungsi ini bertujuan untuk memuatkan objek file filename ke memori. Jika pemanggilan fungsi berhasil atau file objek filename sudah ada di memori, maka fungsi akan mengembalikan sebuah handle sebagai hasilnya. Pada prinsipnya handle ini dapat dibayangkan sebagai referensi yang merujuk ke file objek filename. Namun demikian handle ini tidak boleh diinterpretasikan sebagai apapun juga, tapi hanya boleh digunakan sebagai parameter waktu pemanggilan fungsi lainnya seperti dlsym() atau dlclose(). Setiap kali fungsi ini dipanggil dengan sukses, maka librari dl akan memanajemen jumlah pemakai handle ini dengan cara menginkrementasi variabel. Parameter flag menentukan bagaimana dlopen() menangani simbol yang ada di objek filename. RTLD_LAZY dan RTLD_NOW dengan kombinasi RTLD_GLOBAL atau RTLD_LOCAL dapat digunakan untuk parameter ini. Intinya, pada RTLD_LAZY relokasi objek shared library baru dilakukan pada saat referensi di shared library untuk pertama kalinya dipanggil. Sedang pada RTLD_NOW proses relokasi dari semua objek shared library yang dibutuhkan dilakukan setelah objek filename dimuatkan ke memori. Dengan RTLD_GLOBAL, maka simbol di file shared library yang dimuatkan akan dapat dipakai oleh shared library lainnya. Kalau hal ini tidak dikehendaki maka dapat dipakai nilai RTLD_LOCAL yang juga merupakan nilai default. char* dlerror(void); Dengan fungsi ini, informasi tentang sebab-sebab terjadinya kesalahan pada proses linking dinamis dapat diakses. Pada terjadinya kesalahan, fungsi ini akan mengembalikan null-terminated character string sebagai hasilnya. Jika pada pemrosesan terakhir tidak terjadi kesalahan maka nilai NULL akan dikembalikan sebagai hasilnya. void* dlsym(void* handle, char* simbol); Setelah objek file filename dimuatkan ke memori, maka simbol-simbol di dalamnya dapat diakses dengan menggunakan fungsi dlsym(). Sebagai parameter pertama adalah handle yang merupakan hasil dari pemanggilan fungsi dlopen(). Parameter kedua simbol adalah nama fungsi atau nama variabel yang akan diakses. Jika simbol tidak ditemukan, maka fungsi akan mengembalikan NULL sebagai hasilnya. Pada kasus simbol ditemukan, maka sebuah pointer akan dikembalikan oleh fungsi ini sebagai hasilnya. Tergantung dari jenis simbol, pointer ini dapat diinterpretasikan sebagai pointer dari suatu fungsi atau variabel. Ada hal yang perlu mendapat perhatian di sini, jika fungsi mengembalikan nilai NULL. Di sini ada dua kemungkinan, yaitu simbol tidak ditemukan seperti diuraikan di atas, atau simbol ditemukan, tetapi mempunyai nilai NULL. Untuk mendapatkan informasi yang benar, dapat dilakukan dengan cara memanggil fungsi dlerror(), setelah pemanggilan fungsi ini. Jika fungsi dlerror() mengembalikan nilai bukan NULL, maka dapat dipastikan bahwa simbol tidak ditemukan. void* dlclose(void* handle); Fungsi ini adalah kebalikan dari fungsi dlopen(). Setiap kali fungsi ini dipanggil dengan sukses, maka librari dl akan memanajemen jumlah pemakai handle ini dengan cara mendekrementasi variabel. File objek yang direferensi oleh handle baru akan dihapuskan (unload) dari memori, jika sudah tidak ada lagi yang menggunakan handle ini (jumlahnya nol). 3.Contoh pemakaian Dynamic Loading Cara pemakaian API dari Dynamic Loading akan diperlihatkan di sini dengan menggunakan program demo yang sederhana. Source code program terdiri dari dua file, yaitu main.c dan simple_dl.c (Lihat list program: script-1 adalah main.c, script-2 adalah simple_dl.c dan script-3 adalah Makefile). File main.c adalah program utama yang mempunyai fungsi main(). Sedangkan file simple_dl.c adalah file modul yang berisi simbol variabel dan simbol pengimplementasi fungsi yang akan diakses dari fungsi main() dengan menggunakan fasilitas API Dynamic Loading. Dua simbol didefinisikan di dalam simple_dl.c. Yang pertama adalah simbol variabel yang didefinisikan sebagai berikut: char* info_linux = "Info Linux!"; Nama simbol variabel ini adalah info_linux yang merupakan pointer dari tipe data char. Pada pointer ini juga secara langsung dialokasikan sejumlah memori yang berisikan karakter string "Info Linux!". Simbol kedua adalah hello_world yang merupakan simbol dari pengimplementasi fungsi hello_world(). Pada prinsipnya nama simbol tidak selalu sama dengan nama pengimplementasi fungsi. Kita akan membahas hal ini secara ringkas pada bagian akhir dari artikel ini pada kasus penulisan program menggunakan C++. Simbol fungsi ini didefinisikan sebagai berikut: void hello_world(void); Fungsi ini hanya akan menampilkan kalimat "Hello world!" di layar monitor. Sebelum kita membahas kode di file main.c, kita akan mencoba untuk mengkompilasi file simple_dl.c. Untuk dapat menghasilkan shared library, pada proses kompilasi harus digunakan parameter -fPIC. PIC adalah kepanjangan dari position independent code. Dengan instruksi berikut:
$ gcc -fPIC -c simple_dl.c akan dihasilkan file objek simple_dl.o. Untuk mendapatkan file shared library simple_dl.so dari file objek ini dapat digunakan instruksi:
$ gcc -shared -o simple_dl.so simple_dl.o Untuk lebih yakin lagi, bahwa kedua simbol info_linux dan hello_world terdapat di file shared library simple_dl.o dapat digunakan program nm. Program ini adalah salah satu tools terdapat pada binutils yang dapat menampilkan simbol dari sebuah objek file. Instruksi
$ nm -g --defined-only -n simple_dl.so hanya akan menampilkan simbol global yang sudah terdefinisi. Daftar simbol akan ditampilkan secara berurutan menurut alamat relatif simbol, seperti yang terlihat di bawah ini:
00000618 ? _init 000007a0 T hello_world 00000840 A _etext 00000840 ? _fini 00001880 D info_linux 00001898 A _GLOBAL_OFFSET_TABLE_ 000018cc A _DYNAMIC 00001964 A __bss_start 00001964 A _edata 0000197c A _end Kolom kedua di atas menunjukkan tipe dari simbol. Huruf T mempunyai arti bahwa posisi simbol yang bersangkutan berada di bagian kode atau text, seperti halnya pada simbol hello_world yang adalah pengimplementasi fungsi. Sedangkan huruf D seperti pada simbol info_linux menandakan bahwa posisi simbol yang bersangkutan berada di bagian data yang terinitialisasi. Sekarang kita akan beralih membahas kode di dalam file main.c. Di sini kita mendefinisikan beberapa variabel. Dua diantaranya adalah void (*pFuncSimbol)(); dan char** pVarSimbol; Yang pertama adalah variabel pointer dari fungsi yang tidak mempunyai parameter (void) dan tidak mempunyai nilai kembali(void). Sedangkan variabel kedua adalah pointer dari character string. Sekarang kita akan membahas fungsi-fungsi yang dipakai di sini satu persatu.
handle = dlopen("./simple_dl.so", RTLD_NOW); if (!handle) { printf("Failed: %s\n", dlerror()); return 1; } Pertama-tama fungsi dlopen() akan dipanggil untuk memuatkan objek file shared library simple_dl.so ke memori. Program akan berakhir jika file ini tidak ditemukan. Jika objek file ini dapat dimuatkan ke memori dengan sukses, maka variabel handle selanjutnya dapat dipakai sebagai parameter untuk memanggil fungsi lainnya.
pFuncSimbol = (void (*)())dlsym(handle, "hello_world"); error = dlerror(); if (error) { printf("Failed(2): %s\n", error); return 1; } Fungsi dlsym() di atas dipanggil untuk mendapatkan referensi dari simbol hello_world. Jika simbol ini tidak ditemukan maka program akan berakhir. Informasi ini didapatkan dengan cara memanggil fungsi dlerror() yang akan mengembalikan hasil bukan NULL(lihat di atas tentang dlsym()). Jika simbol ditemukan, maka variabel pFuncSimbol sekarang mempunyai referensi ke simbol hello_world dari shared library simple_dl.so.
pFuncSimbol(); Dengan instruksi di atas, maka fungsi yang direferensi oleh variabel pFuncSimbol yang tak lain adalah fungsi hello_world di simple_dl.so akan dipanggil. Hasilnya dapat dilihat di layar monitor, yaitu penampilan character string "Hello world!".
pVarSimbol = (char**)dlsym(handle, "info_linux"); error = dlerror(); if (error) { printf("Failed(2): %s\n", error); return 1; } Seperti sebelumnya, di sini fungsi dlsym() dipakai untuk mendapatkan referensi dari simbol info_linux. Jika simbol ditemukan, maka sekarang pVarSimbol mempunyai referensi ke simbol info_linux yang isinya tidak lain adalah character string "Info Linux!".
printf("%s\n", *pVarSimbol); Di sini isi dari referensi pVarSimbol "Info Linux!" akan ditampilkan di layar monitor.
dlclose(handle); Setelah kita tidak membutuhkan lagi, maka kita harus menutup handle yang telah kita buka sebelumnya. Untuk menghasilkan file program main yang dapat dieksekusi, dapat digunakan instruksi seperti berikut:
$ gcc -o main main.c -ldl Dengan parameter -ldl maka pada proses linking shared library libdl.so yang mengimplementasi API Dynamic Loading akan ditambahkan. Setelah berhasil, jika program main dieksekusi maka di layar monitor akan ada tampilan sebagai berikut:
$ ./main Hello world! Info Linux! 4.Memanggil Fungsi di Program Utama dari Objek shared library Pada banyak kasus kita akan memerlukan fungsi yang sudah diimplementasikan di program utama untuk dipanggil dari objek shared library. Dari sisi objek shared library sendiri tidak ada masalah, selama fungsi ini sudah terimplementasi di program utama, karena pembuatan file shared library tidak membutuhkan proses linking. Yang menjadi kunci pokok di sini adalah, bahwa simbol fungsi di program utama harus ditambahan ke tabel simbol dinamik (dynamic symbol table). Tabel ini memuat semua simbol yang akan dapat diakses oleh semua objek shared library pada saat runtime. Hal ini dapat dilakukan dengan menambahkan parameter -rdynamic pada proses pembuatan file program utama. Parameter ini akan menginstruksikan kompiler untuk melewatkan parameter -export-dynamic pada proses linking oleh ld. Jika parameter ini tidak ditambahkan, maka tabel simbol dinamik hanya akan berisi simbol yang direferensi oleh objek shared library saat proses linking pada pembuatan file program utama. Kita akan menambahkan beberapa baris pada file main.c dan simple_dl.c untuk menunjukkan hal di atas. Pada file main.c ditambahkan sebuah fungsi hello_main() yang akan dipanggil dari file simple_dl.c.
/*============================== * Fungi tambahan di file main.c */
void hello_main(const char* txt) { printf("%s\n", txt); } Fungsi hello_main() hanya akan menampilkan isi string txt yang dilewatkan melalui parameter.
void hello_world(void) { printf("Hello world!\n");
/* ======================================== * Memanggil fungsi yang ada di file main.c */ hello_main("Saya simple_dl"); } Fungsi hello_main() di program utama akan dipanggil setelah fungsi helllo_world() ini dipanggil oleh program utama. Proses pembuatan objek shared library simple_dl.so sama seperti diterangkan sebelumnya. Pada pembuatan objek program utama, harus ditambahkan parameter -rdynamic seperti berikut:
$ gcc -rdynamic -o main main.c -ldl Hasil dari pengeksekusian program main dapat dilihat pada tampilan monitor:
$ ./main Hello world! Saya simple_dl Info Linux! 5.Fungsi _init() dan _fini() Fungsi _init() dan _fini() adalah dua fungsi khusus pada sebuah file shared library. Fungsi _init() akan dipanggil oleh librari dl setelah sebuah objek file shared library dimuatkan ke memori dengan instruksi dlopen(). Sedang sebelum shared library dihapuskan(unload) dari memori lewat instruksi dlclose(), librari dl akan memanggil fungsi _fini(). Kita dapat memanfaatkan kedua fungsi ini dengan cara mengimplementasikan kedua fungsi tersebut dalam shared library yang kita tulis. Pada umumnya fungsi _init() digunakan untuk menginitialisasi variabel ataupun mengalokasi memori. Fungsi _fini() sebaliknya dapat digunakan untuk menghapuskan memori yang dialokasi sebelumnya. Untuk menghindari pengimplementasian ganda, pada saat proses kompilasi pembuatan shared library harus ditambahkan parameter -nostartfiles, seperti contohnya:
$ gcc -shared -nostartfiles -o simple_dl.so simple_dl.o 6.Penggunaan C++ Pada penggunaan bahasa C++ ada beberapa aspek yang perlu mendapat perhatian. Salah satu hal yang membedakan antara C++ dan C adalah, bahwa di C++ kita dapat mempunyai beberapa fungsi dengan nama yang sama tetapi parameter yang berbeda. Terminologi yang sering dipakai untuk ini pada bahasa yang mendukung object oriented adalah overloading. Lain dengan bahasa C, di sini nama fungsi saja tidak cukup untuk dijadikan sebagai identitas yang unik (unique identifier) di tabel simbol. Untuk mendapatkan identitas yang unik ini, akan dilakukan proses mangling terhadap nama fungsi di C++ yang menyertakan informasi parameternya. Misalnya saja dengan memakai gcc, simbol fungsi foobar dengan parameter tunggal int akan berubah menjadi foobar__Fi. Proses mangling ini bergantung kepada jenis kompiler, sehingga pada pemakaian kompiler yang berbeda akan dihasilkan identitas unik yang berbeda juga. Dengan menggunakan program c++filt yang juga terdapat dalam paket binutils, kita dapat melakukan proses demangling, yaitu proses kebalikan dari mangling. Contohnya dengan intruksi
c++filt foobar__Fi maka dari simbol foobar__Fi kita akan mendapatkan kembali nama fungsi dengan parameternya foobar(int). Hal di atas akan membuat masalah pada pembuatan program yang memakai bahasa C dan C++, karena simbol fungsi program yang ditulis dengan C juga akan dilakukan proses mangling. Sebagai contoh kita ingin menulis program yang memakai librari dari pihak ketiga yang hanya memberikan file header dan file objek shared library yang ditulis dengan bahasa C. Sedangkan program yang kita tulis menggunakan bahasa C++ yang akan memanggil beberapa fungsi di librari ini. Pada proses kompilasi, simbol fungsi di file header akan dilakukan proses mangling, sehingga pada proses linking akan mengakibatkan kesalahan, karena simbol tidak dapat ditemukan. Untuk mencegahnya, simbol fungsi pada file header tidak boleh dilakukan proses mangling oleh kompiler. Ini dapat dilakukan dengan menambahkan deklarasi extern "C" di file header yang akan membuat kompiler untuk memakai konvensi nama C (C name convention). Karena pada kompiler C++ biasanya didefinisikan makro __cplusplus maka penambahan header dapat dilakukan sbb:
#ifdef __cpluplus extern "C" { #endif
......
#ifdef __cpluplus } #endif Jika librari dimuatkan menggunakan Dynamic Loading dan fungsi di librari dipanggil dengan memakai fungsi dlsym(), maka masalah di atas tidak akan terjadi, karena pada simbol fungsi di librari tidak dilakukan proses mangling. Masalah lain yang timbul sehubungan dengan pemakaian bahasa C++ adalah kita tidak dapat memakai fungsi dlsym() untuk memanggil fungsi di librari yang ditulis memakai bahasa C++. Hal ini diakibatkan karena pada semua simbol akan dilakukan proses mangling, sehingga kita tidak akan tahu nama simbol dari fungsi yang kita inginkan. 7.Penutup Penerapan teknik Dynamic Loading akan memudahkan pengembangan suatu aplikasi besar yang dilakukan oleh sekelompok pemrogram seperti halnya aplikasi web server Apache. Program utamanya hanya mengimplementasi fungsi pokok saja, sedang fungsi-fungsi lainnya ditambahkan dalam bentuk modul secara fleksibel bergantung dari keperluan. Salah satu faktor yang tidak menguntungkan adalah lamanya waktu proses pemuatan file shared library ke memori dan proses pereferensian dari simbol. Jika modul-modul dimuatkan hanya pada saat awal saja, maka faktor di atas tidak terlalu penting. Aplikasi bot irc eggdrop memakai teknik lain untuk menghindari faktor di atas. Pengaksesan ke simbol dilakukan dengan melalui tabel yang berisikan pointer statis dari simbol. Akhir kata, semoga artikel ini bermanfaat dan dapat menambah wacana teknik pemrograman bagi pembaca.