Jumat, 23 Desember 2011

Mengenal Kriptografi

Maraknya pemberitaan tentang penyadapan ikut mempopulerkan kriptografi kepada masyarakat Indonesia. Walaupun kriptografi bukanlah hal baru, tetapi untuk masyarakat Indonesia kriptografi masih jarang sekali dibicarakan secara umum.

Kriptografi di Indonesia disebut persandian yaitu secara singkat dapat berarti seni melindungi data dan informasi dari pihak-pihak yang tidak dikehendaki baik saat ditransmisikan maupun saat disimpan. Di Indonesia instansi pemerintah yang secara resmi menangani kriptografi nasional adalah Lembaga Sandi Negara.

Sedangkan ilmu persandiannya disebut kriptologi yaitu ilmu yang mempelajari tentang bagaimana tehnik melindungi data dan informasi tersebut beserta seluruh ikutannya. Ilmu ini di Indonesia dapat dipelajari di Sekolah Tinggi Sandi Negara (STSN) yang merupakan satu-satunya perguruan tinggi kriptografi di Indonesia.

Aplikasi kriptologi pada kehidupan sehari-hari

Mungkin tidak disadari bahwa saat ini benda-benda teknologi dalam kehidupan sehari-hari sudah menggunakan kriptografi. Telepon seluler, kartu ATM, kartu kredit, internet, LAN, mesin absensi atau GPS dan masih banyak lagi telah ditempeli kriptografi dengan intensitas yang berbeda. Dalam mengoperasikan kriptografi jenis ini, pengguna (end-user) tidak memerlukan pengetahuan khusus tentang kriptografi, karena aplikasi kriptografinya sudah langsung dapat dipakai (tanpa terasa).

Dalam kondisi khusus, penerapan kriptografi membutuhkan operator kripto, seperti penyampaian berita rahasia dari satu tempat ke tempat lain (kurir), penyimpanan data dan informasi rahasia ke dalam database atau pengoperasian mesin-mesin khusus kripto. Operator kripto ini diperlukan karena untuk mengelola kegiatan-kegiatan khusus tersebut membutuhkan manajemen kripto dan orang-orang terpercaya yang telah mempunyai sertifikat kripto.

Aplikasi kriptografi ini dipakai sebagai pengamanan informasi yaitu untuk :

1. menjaga kerahasiaan/privacy/confidentiality informasi terhadap akses pihak-pihak yang tidak memiliki kewenangan terhadap informasi tersebut.

2. menjaga keutuhan informasi (integrity) sehingga informasi yang ditransmisikan tidak mengalami perubahan baik oleh pihak yang tidak berhak ataupun sesuatu hal lain (misalnya transmisi yang buruk).

3. memastikan identitas (otentikasi) baik orang, mesin, program ataupun kartu bahwa memang pihak yang benar-benar berhak/asli/yang dimaksud. Otentikasi dapat juga digunakan untuk menyamarkan identitas (anonimity) terhadap yang tidak berhak.

4. mencegah penyangkalan (non-repudiation) bahwa data tersebut memang benar adalah data yang dikirimkan oleh pihak pengirim.

Pengertian Dasar

Suatu pesan yang tidak disandikan disebut sebagai plaintext ataupun dapat disebut juga sebagai cleartext. Proses yang dilakukan untuk mengubah plaintext ke dalam ciphertext disebut encryption atau encipherment. Sedangkan proses untuk mengubah ciphertext kembali ke plaintext disebut decryption atau decipherment. Secara sederhana istilah-istilah di atas dapat digambarkan sebagai berikut :



Cryptography adalah suatu ilmu ataupun seni mengamankan pesan, dan dilakukan oleh cryptographer. Sedang, cryptanalysis adalah suatu ilmu dan seni membuka (breaking) ciphertext dan orang yang melakukannya disebut cryptanalyst.

Cryptographic system atau cryptosystem adalah suatu fasilitas untuk mengkonversikan plaintext ke ciphertext dan sebaliknya. Dalam sistem ini, seperangkat parameter yang menentukan transformasi pencipheran tertentu disebut suatu set kunci. Proses enkripsi dan dekripsi diatur oleh satu atau beberapa kunci kriptografi. Secara umum, kunci-kunci yang digunakan untuk proses pengenkripsian dan pendekripsian tidak perlu identik, tergantung pada sistem yang digunakan.

Secara umum operasi enkripsi dan dekripsi dapat diterangkan secara matematis sebagai berikut :
  EK (M) = C (Proses Enkripsi)
  DK (C) = M (Proses Dekripsi)

Pada saat proses enkripsi kita menyandikan pesan M dengan suatu kunci K lalu dihasilkan pesan C. Sedangkan pada proses dekripsi, pesan C tersebut diuraikan dengan menggunakan kunci K sehingga dihasilkan pesan M yang sama seperti pesan sebelumnya.

Dengan demikian keamanan suatu pesan tergantung pada kunci ataupun kunci-kunci yang digunakan, dan tidak tergantung pada algoritma yang digunakan. Sehingga algoritma-algoritma yang digunakan tersebut dapat dipublikasikan dan dianalisis, serta produk-produk yang menggunakan algoritma tersebut dapat diproduksi massal. Tidaklah menjadi masalah apabila seseorang mengetahui algoritma yang kita gunakan. Selama ia tidak mengetahui kunci yang dipakai, ia tetap tidak dapat membaca pesan.

Cryptographic system (cryptosystem)

Suatu cryptosystem terdiri dari sebuah algoritma, seluruh kemungkinan plaintext, ciphertext dan kunci-kunci. Secara umum cryptosystem dapat digolongkan menjadi dua buah, yaitu :

1. Symmetric Cryptosystem

Dalam symmetric cryptosystem ini, kunci yang digunakan untuk proses enkripsi dan dekripsi pada prinsipnya identik, tetapi satu buah kunci dapat pula diturunkan dari kunci yang lainnya. Kunci-kunci ini harus dirahasiakan. Oleh karena itulah sistem ini sering disebut sebagai secret-key ciphersystem. Jumlah kunci yang dibutuhkan umumnya adalah :
nC2  = n . (n-1)
          --------
       2
dengan n menyatakan banyaknya pengguna.
Contoh dari sistem ini adalah Data Encryption Standard (DES), Blowfish, IDEA.

2. Assymmetric Cryptosystem

Dalam assymmetric cryptosystem ini digunakan dua buah kunci. Satu kunci yang disebut kunci publik (public key) dapat dipublikasikan, sedang kunci yang lain yang disebut kunci privat (private key) harus dirahasiakan. Proses menggunakan sistem ini dapat diterangkan secara sederhana sebagai berikut : bila A ingin mengirimkan pesan kepada B, A dapat menyandikan pesannya dengan menggunakan kunci publik B, dan bila B ingin membaca surat tersebut, ia perlu mendekripsikan surat itu dengan kunci privatnya. Dengan demikian kedua belah pihak dapat menjamin asal surat serta keaslian surat tersebut, karena adanya mekanisme ini. Contoh sistem ini antara lain RSA Scheme dan Merkle-Hellman Scheme.

Setiap cryptosytem yang baik harus memiliki karakteristik sebagai berikut :

- Keamanan sistem terletak pada kerahasiaan kunci dan bukan pada kerahasiaan algoritma yang digunakan.
- Cryptosystem yang baik memiliki ruang kunci (keyspace) yang besar.
- Cryptosystem yang baik akan menghasilkan ciphertext yang terlihat acak dalam seluruh tes statistik yang   dilakukan terhadapnya.
 
Cryptosystem yang baik mampu menahan seluruh serangan yang telah dikenal sebelumnya

Namun demikian perlu diperhatikan bahwa bila suatu cryptosystem berhasil memenuhi seluruh karateristik di atas belum tentu ia merupakan sistem yang baik. Banyak cryptosystem lemah yang terlihat baik pada awalnya. Kadang kala untuk menunjukkan bahwa suatu cryptosystem kuat atau baik dapat dilakukan dengan menggunakan pembuktian matematika.

Hingga saat ini masih banyak orang yang menggunakan cryptosystem yang relatif mudah dibuka, alasannya adalah mereka tidak mengetahui sistem lain yang lebih baik serta kadang kala terdapat motivasi yang kurang untuk menginvestasikan seluruh usaha yang diperlukan untuk membuka suatu sistem.

Cryptographic Protokol

Pengertian

Suatu protokol adalah serangkaian langkah yang melibatkan dua pihak atau lebih dan dirancang untuk menyelesaikan suatu tugas. Dari definisi ini dapat diambil beberapa arti sebagai berikut :
  • protokol memiliki urutan dari awal hingga akhir;
  • setiap langkah harus dilaksanakan secara bergiliran;
  • suatu langkah tidak dapat dikerjakan bila langkah sebelumnya belum selesai;
  • diperlukan dua pihak atau lebih untuk melaksanakan protokol;
  • protokol harus mencapai suatu hasil;
Selain itu, suatu protokol pun memiliki karakteristik yang lain, yaitu :
  • setiap orang yang terlibat dalam protokol harus mengetahui terlebih dahulu mengenai protokol dan seluruh langkah yang akan dilaksanakan;
  • setiap orang yang terlibat dalam protokol harus menyetujui untuk mengikutinya;
  • protokol tidak boleh menimbulkan kerancuan;
  • protokol harus lengkap;


Cryptographic protocol adalah suatu protokol yang menggunakan kriptografi. Protokol ini melibatkan sejumlah algoritma kriptografi, namun secara umum tujuan protokol lebih dari sekedar kerahasiaan. Pihak-pihak yang berpartisipasi mungkin saja ingin membagi sebagian rahasianya untuk menghitung sebuah nilai, menghasilkan urutan random, atau pun menandatangani kontrak secara bersamaan. Penggunaan kriptografi dalam sebuah protokol terutama ditujukan untuk mencegah atau pun mendeteksi adanya eavesdropping dan cheating.

Fungsi Protokol

Dalam kehidupan kita sehari-hari terdapat banyak sekali protokol tidak resmi, misalnya saja dalam permainan kartu, pemungutan suara dalam pemilihan umum. Akan tetapi tidak ada seorang pun yang memikirkan mengenai protokol-protokol ini, protokol-protokol ini terus berkembang, semua orang mengetahui bagaimana menggunakannya.

Saat ini, semakin banyak interaksi antar manusia dilakukan melalui jaringan komputer. Komputer ini tentu saja memerlukan suatu protokol formal agar dapat melakukan hal yang biasa dilakukan manusia tanpa berpikir. Bila kita berpindah dari satu daerah ke daerah lain dan mengetahui bahwa kartu pemilihan suaranya berbeda dengan yang biasa kita gunakan, kita dapat beradaptasi dengan mudah. Akan tetapi kemampuan ini belum dimiliki oleh komputer, sehingga diperlukan suatu protokol.

Protokol digunakan untuk mengabtraksikan proses penyelesaian suatu tugas dari mekanisme yang digunakan. Protokol komunikasi adalah sama meskipun diimplementasikan pada PC atau VAX. Bila kita yakin bahwa kita memiliki protokol yang baik, kita dapat mengimplementasikannya dalam segala benda mulai dari telepon hingga pemanggang roti cerdas.

Penyerangan terhadap protokol
Penyerangan cryptographic dapat ditujukan pada beberapa hal berikut :

  • algoritma cryptographic yang digunakan dalam protokol;
  • teknik cryptographic yang digunakan untuk mengimplementasikan algoritma dan protokol;
  • protokol itu sendiri;
Seseorang dapat mencoba berbagai cara untuk menyerang suatu protokol. Mereka yang tidak terlibat dalam protokol dapat menyadap sebagian atau seluruh protokol. Tindakan ini disebut penyerangan pasif, karena si penyerang tidak mempengaruhi atau mengubah protokol, ia hanya mengamati protokol dan berusaha untuk memperoleh informasi.

Selain itu, seorang penyerang dapat berusaha untuk mengubah protokol demi keuntungannya sendiri. Ia dapat mengirimkan pesan dalam protokol, menghapus pesan, atau bahkan mengubah informasi yang ada di dalam suatu komputer. Tindakan-tindakan ini disebut sebagai penyerangan aktif, karena ia membutuhkan suatu campur tangan aktif.

Seorang penyerang tidaklah hanya berasal dari lingkungan luar protokol, namun ia mungkin juga berasal dari dalam protokol itu sendiri, ia dapat merupakan salah satu pihak yang terlibat dalam protokol. Tipe penyerang semacam ini disebut sebagai cheater. Passive cheater mengikuti protokol, tetapi berusaha memperoleh informasi lebih banyak daripada yang diperbolehkan protokol bagi dirinya. Active cheater mengubah protokol dalam usahanya untuk berbuat curang.

Usaha untuk menjaga keamanan protokol akan semakin sulit apabila pihak-pihak yang terlibat umumnya merupakan active cheater, oleh karena itu suatu protokol yang baik harus mampu atau pun harus aman terhadap kemungkinan passive cheating.

Berbagai macam basic cryptanalytic attacks

Tujuan cryptanalytic attack adalah untuk mengetahui beberapa plaintext yang sesuai dengan ciphertext yang ada dan berusaha menentukan kunci yang memetakan satu dengan yang lainnya. Plaintext ini dapat diketahui karena ia merupakan standar atau karena pendugaan. Jika suatu teks diduga berada di dalam suatu pesan, posisinya mungkin tidak diketahui, tetapi suatu pesan lazimnya cukup pendek sehingga memungkinkan cryptanalyst menduga plaintext yang diketahui dalam setiap posisi yang mungkin dan melakukan penyerangan pada setiap kasus secara paralel.

Suatu algoritma enkripsi yang kuat tidak hanya mampu bertahan terhadap serangan plaintext yang dikenal tetapi juga mampu bertahan terhadap adaptive chosen plaintext. Dalam penyerangan ini, cryptanalyst berkesempatan memilih plaintext yang digunakan dan dapat melakukannya secara berulang kali, memilih plaintext untuk tahap N+1 setelah menganalisis hasil tahap N.

Yang dimaksud cryptanalytic attacks adalah usaha-usaha yang dilakukan seseorang untuk memperoleh informasi ataupun data yang telah dienkripsi. Secara ringkas terdapat tujuh macam basic cryptanalytic attacks berdasarkan tingkat kesulitannya bagi penyerang, dimulai dari yang paling sulit adalah :
  • Ciphertext-only attack. Dalam penyerangan ini, seorang cryptanalyst memiliki ciphertext dari sejumlah pesan yang seluruhnya telah dienkripsi menggunakan algoritma yang sama.
  • Known-plaintext attack. Dalam tipe penyerangan ini, cryptanalyst memiliki akses tidak hanya ke ciphertext sejumlah pesan, namun ia juga memiliki plaintext pesan-pesan tersebut.
  • Chosen-plaintext attack. Pada penyerangan ini, cryptanalyst tidak hanya memiliki akses atas ciphertext dan plaintext untuk beberapa pesan, tetapi ia juga dapat memilih plaintext yang dienkripsi.
  • Adaptive-chosen-plaintext attack. Penyerangan tipe ini merupakan suatu kasus khusus chosen-plaintext attack. Cryptanalyst tidak hanya dapat memilih plaintext yang dienkripsi, ia pun memiliki kemampuan untuk memodifikasi pilihan berdasarkan hasil enkripsi sebelumnya. Dalam chosen-plaintext attack, cryptanalyst mungkin hanya dapat memiliki plaintext dalam suatu blok besar untuk dienkripsi; dalam adaptive-chosen-plaintext attack ini ia dapat memilih blok plaintext yang lebih kecil dan kemudian memilih yang lain berdasarkan hasil yang pertama, proses ini dapat dilakukannya terus menerus hingga ia dapat memperoleh seluruh informasi.
  • Chosen-ciphertext attack. Pada tipe ini, cryptanalyst dapat memilih ciphertext yang berbeda untuk didekripsi dan memiliki akses atas plaintext yang didekripsi.
  • Chosen-key attack. Cryptanalyst pada tipe penyerangan ini memiliki pengetahuan tentang hubungan antara kunci-kunci yang berbeda.
  • Rubber-hose cryptanalysis. Pada tipe penyerangan ini, cryptanalyst mengancam, memeras, atau bahkan memaksa seseorang hingga mereka memberikan kuncinya.
Analisis berbagai tipe penyerangan secara matematis

Suatu penyerangan pasif atas cryptosystem adalah semua metode untuk mengungkapkan informasi tentang plaintext dan ciphertextnya dengan tanpa mengetahui kunci. Secara matematis :


Diberikan fungsi F, G, dan H yang terdiri dari n variabel.

Diberikan sistem enkripsi E.
Diberikan suatu distribusi plaintext dan kunci.

Suatu penyerangan atas E dengan menggunakan G dengan mengasumsikan F membagi H dengan probabilitas p adalah suatu algoritma A dengan sepasang input f,g dan satu buah output h sedemikian hingga terdapat probabilitas p atas h = H(P1, …, Pn), jika kita memiliki f = F(P1, …, Pn) dan g = G(EK(P1), …, EK(Pn)). Perlu diperhatikan bahwa probabilitas ini tergantung pada distribusi vektor-vektor (K,P1,…,Pn).

Penyerangan akan merupakan suatu trivial bila terdapat probabilitas paling sedikir p untuk h = H(P1, …, Pn) jika f = F (P1,…,Pn) dan g = G (C1,…,Cn). Di sini C1,…,Cn terletak pada ciphertext yang mungkin, dan tidak memiliki hubungan tertentu dengan P1,…,Pn. Dengan kata lain, suatu serangan akan merupakan trivial bila ia tidak benar-benar menggunakan enkripsi EK(P1),…,EK(Pn).
Dengan merumuskan penyerangan secara matematis, kita dapat secara tepat memformulasikan dan bahkan membuktikan pernyataan bahwa suatu cryptosystem itu kuat. Kita katakan, sebagai contoh, bahwa suatu cryptosystem adalah aman terhadap seluruh penyerangan pasif jika sembarang penyerangan nontrivial terhadapnya tidak praktis. Jika kita dapat membuktikan pernyataan ini maka kita akan memiliki keyakinan bahwa cryptosystem kita akan bertahan terhadap seluruh teknik cryptanalytic pasif. Jika kita dapat mereduksi pernyataan ini hingga pada beberapa masalah yang tidak terpecahkan maka kita masih tetap memiliki keyakinan bahwa cryptosystem kita tidak mudah dibuka.

Ciphertext-only attack

Dengan menggunakan notasi di atas, suatu ciphertext-only attack adalah suatu penyerangan dengan F adalah konstanta. Diberikan hanya beberapa informasi G(EK(P1),..EK(Pn)) tentang n ciphertext, penyerangan harus memiliki kesempatan menghasilkan beberapa informasi H(P1,…,Pn) tentang plaintext. Penyerangan akan merupakan suatu trivial bila ia hanya menghasilkan H(P1,…,Pn) ketika diberikan G(C1,…,Cn) untuk C1,…,Cn acak.

Sebagai contoh, misalkan G ( C ) = C dan misalkan H(P) adalah bit pertama P. Kita dapat secara mudah menulis suatu penyerangan, pendugaan, yang menduga bahwa H(P) adalah 1. Penyerangan ini adalah trivial karena tidak menggunakan ciphertext, probabilitas keberhasilannya adalah 50 %. Di lain pihak, terdapat penyerangan atas RSA yang memproduksi satu bit informasi tentang P, dengan probabilitas keberhasilan 100 %, menggunakan C. Jika diberikan suatu C acak maka tingkat kesuksesan turun menjadi 50%. Inilah yang disebut penyerangan nontrivial.

Known-plaintext attack

Penyerangan known-plaintext klasik memiliki F(P1,P2) = P1, G(C1,C2) = (C1,C2), dan H(P1,P2) tergantung hanya pada P2. Dengan kata lain, bila diberikan dua ciphertext C1 dan C2 dan satu dekripsi P1, penyerangan known-plaintext seharusnya menghasilkan informasi tentang dekripsi P2.

Brute-force attack

Umpamakan penyerangan known-plaintext berikut. Kita diberikan sejumlah plaintext P1,…,Pn-1 dan ciphertext C1,…,Cn-1. Kita juga diberikan sebuah ciphertext Cn. Kita jalankan seluruh kunci K. Bila kita temukan K sedemikian sehingga EK(P1) = Ci untuk setiap I

Mengenal Adobe Flash



Adobe Flash (dahulu bernama Macromedia Flash) adalah salah satu perangkat lunak komputer yang merupakan produk unggulan Adobe Systems. Adobe Flash digunakan untuk membuat gambar vektor maupun animasigambar tersebut. Berkas yang dihasilkan dari perangkat lunak ini mempunyai file extension .swf dan dapat diputar di penjelajah webyang telah dipasangi Adobe Flash Player. Flash menggunakan bahasa pemrograman bernama ActionScript yang muncul pertama kalinya pada Flash 5.

Sebelum tahun 2005, Flash dirilis oleh Macromedia. Flash 1.0 diluncurkan pada tahun 1996 setelah Macromedia membeli program animasi vektor bernama FutureSplash. Versi terakhir yang diluncurkan di pasaran dengan menggunakan nama ‘Macromedia’ adalah adalah Macromedia Flash 8. Pada tanggal 3 Desember 2005 Adobe Systems mengakuisisi Macromedia dan seluruh produknya, sehingga nama Macromedia Flash berubah menjadi Adobe Flash.

Adobe Flash merupakan sebuah program yang didesain khusus oleh Adobe dan program aplikasi standar authoring tool professional yang digunakan untuk membuat animasi dan bitmap yang sangat menarik untuk keperluan pembangunan situs web yang interaktif dan dinamis. Flash didesain dengan kemampuan untuk membuat animasi 2 dimensi yang handal dan ringan sehingga flash banyak digunakan untuk membangun dan memberikan efek animasi pada website, CD Interaktif dan yang lainnya. Selain itu aplikasi ini juga dapat digunakan untuk membuat animasi logo, movie, game, pembuatan navigasi pada situs web, tombol animasi, banner, menu interaktif, interaktif form isian, e-card, screen saver dan pembuatan aplikasi-aplikasi web lainnya. Dalam Flash, terdapat teknik-teknik membuat animasi, fasilitas action script, filter, custom easing dan dapat memasukkan video lengkap dengan fasilitas playback FLV. Keunggulan yang dimiliki oleh Flash ini adalah ia mampu diberikan sedikit code pemograman baik yang berjalan sendiri untuk mengatur animasi yang ada didalamnya atau digunakan untuk berkomunikasi dengan program lain seperti HTML, PHP, dan Database dengan pendekatan XML, dapat dikolaborasikan dengan web, karena mempunyai keunggulan antara lain kecil dalam ukuran file outputnya

Movie-movie Flash memiliki ukuran file yang kecil dan dapat ditampilkan dengan ukuran layar yang dapat disesuaikan dengan keingginan. Aplikasi Flash merupakan sebuah standar aplikasi industri perancangan animasi web dengan peningkatan pengaturan dan perluasan kemampuan integrasi yang lebih baik. Banyak fiture-fiture baru dalam Flash yang dapat meningkatkan kreativitas dalam pembuatan isi media yang kaya dengan memanfaatkan kemampuan aplikasi tersebut secara maksimal. Fiture-fiture baru ini membantu kita lebih memusatkan perhatian pada desain yang dibuat secara cepat, bukannya memusatkan pada cara kerja dan penggunaan aplikasi tersebut. Flash juga dapat digunakan untuk mengembangkan secara cepat aplikasi-aplikasi web yang kaya dengan pembuatan script tingkat lanjut. Di dalam aplikasinya juga tersedia sebuah alat untuk men-debug script. Dengan menggunakan Code hint untuk mempermudah dan mempercepat pembuatan dan pengembangan isi ActionScript secara otomatis.

Kamis, 22 Desember 2011

Qadha Jodoh ku



Dengan nama Allah,
Yang Maha Pengasih lagi Maha Penyayang.
Ya Allah...
Seandainya telah Engkau catatkan,
Dia milikku tercipta buatku,
Satukanlah hatinya dengan hatiku,
Titipkanlah kebahagiaan antara kami,
Agar kemesraan itu abadi ...

Ya Allah...
Ya Tuhanku yang Maha Mengasihi,
Seiringkanlah kami melayari hidup ini,
Ketepian yang sejahtera dan abadi,
Maka jodohkanlah kami...

Tetapi Ya Allah...
Seandainya telah Engaku takdirkan,
Dia bukan milikku,
Bawalah dia jauh dari pandanganku,
Luputkanlah dia dari ingatanku,
Dan peliharalah aku dari kekecewaan...

Ya Allah ya Tuhanku yang Maha Mengerti...
Berikanlah aku kekuatan,
Menolak bayangannya jauh ke dada langit,
Hilang bersama senja yang merah,
Agar ku senantiasa tenang,
Walaupun tanpa bersama dengannya...

Ya Allah yang tercinta...
Pasrahkanlah aku dengan takdirMu,
Sesungguhnya apa yang telah Engkau Takdirkan,
Adalah yang terbaik untukku,
Sesungguhnya Engkau Maha Mengetahui,
Segala yang terbaik buat hamba-Mu ini...

Ya Allah...
Cukupkanlah Engkau saja yang menjadi pemeliharaku,
Di dunia dan di akhirat,
Dengarlah rintihan dari hamba-Mu yang dhaif ini,
Janganlah Engkau biarkan aku sendiri,
Di dunia ini maupun di akhirat,
Menjuruskan aku ke arah kemaksiatan dankemungkaran,
Maka kurniakanlah aku seorang pasangan yang beriman,
agar aku dan dia sama-sama dapat membina kesejahteraan hidup,
Ke jalan yang Engaku redhai,
Dan kurniakanlah padaku keturunan yang soleh dan solehah...
Ya Allah...
Berilah kami kebahagiaan di dunia dan kebahagiaan di akhirat,
Dan peliharalah kami dari azab api neraka,

AMIN... YaRabbal'aalamiin...

Belajar Memaafkan

Belajar memaafkan...
ya.. itulah kata yang mungkin terlintas pada siapapun yang
pernah merasa hancur di masa lalu
Masa kelam yang penuh penyesalan
Atau bahkan saat merasa gagal melakukan sesuatu

Memaafkan orang lain mungkin mudah, tapi memaafkan diri sendiri butuh keberanian yang besar
Banyak orang yang tidak menerima dirinya, kecewa dengan nasib buruk yang menimpa dirinya, atau banyak mengeluh dengan kondisi keluarganya yang serba kekurangan.

Belajarlah memaafkan..
Memaafkan masa lalu yang kelam
Memaafkan diri yang salah memilih
Memaafkan diri yang tidak berani melangkah

Memaafkan pendidikan orang tua yang membuat kita bertabi'at seperti ini
Memaafkan tindakan orang lain yang membuat kita terhina atau bahkan dilecehkan

Hanya mereka yang mampu memaafkan dirinya
yang mampu menemukan secercah cahaya cinta di tengah kegelapan
yang mampu tersenyum optimis walau kondisi tak mendukung

Mari...
Berhentilah sejenak....
Ambil air wudhu... Lalu
Rasakan kesejukan air suci yang menjalar ke seluruh pori-pori tubuhmu
Mengembalikan smangat, mengumpulkan energi yang terserak

Lalu bersujudlah...
Mohon ampun dan akui kekurangan
Jujurlah pada dosa dan kesalahan
Karena pintu taubatNya terbuka lebar
karena pertolonganNya terbentang luas
Maafkanlah dirimu, keluargamu, kondisi sekelilingmu

Karena dengan itu kau dapat dengan bebas melangkah
menggapai impian
mewujudkan harapan dan
berlari mengejar RidhoNya...

Mother (forgive me)


Blessed is your face
Blessed is your name
My beloved
Blessed is your smile
Which makes my soul want to fly
My beloved
All the nights
And all the times
That you cared for me
But I never realised it
And now it’s too late
Forgive me
Now I’m alone filled with so much shame
For all the years I caused you pain
If only I could sleep in your arms again
Mother I’m lost without you
You were the sun that brightened my day
Now who’s going to wipe my tears away
If only I knew what I know today
Mother I’m lost without you
Ummahu, ummahu, ya ummi
wa shawqahu ila luqyaki ya ummi
Ummuka, ummuka, ummuka ummuka
Qawlu rasulika
Fi qalbi, fi hulumi
Anti ma’i ya ummi
Mother… Mother… O my mother
How I long to see O mother
“Your mother, Your mother, Your mother”
Is the saying of your Prophet
In my heart, in my dreams
You are always with me mother
Ruhti wa taraktini
Ya nura ‘aynayya
Ya unsa layli
Ruhti wa taraktini
Man siwaki yahdhununi
Man siwaki yasturuni
Man siwaki yahrusuni
‘Afwaki ummi
Samihini…
You went and left me
O light of my eyes
O comfort of my nights
You went and left me
Who, other than you, will embrace me?
Who, other than you, will cover me?
Who, other than you, will guard over me?
Your pardon mother, forgive me..

Kamis, 15 Desember 2011

Tombol Akselerator dan Tombol Sistem Jendela

Tombol Akselerator

Akselerator adalah tombol shortcut ke salah satu menu, misalnya pada kebanyakan program pengolah kata menekan tombol dan S artinya menyimpan teks yang sedang diedit. Akselerator biasanya berupa rangkaian tombol yang ditekan bersamaan, bisa 2 tombol seperti contoh di atas atau mungkin lebih, misalnya pada Firefox, tombol + + J membuka konsol kesalahan (error console).

Akselerator selalu berhubungan dengan menu, sehingga akselerator bersifat global, yang berarti kita bisa menekan tombol akselerator dari dalam widget manapun yang sedang aktif pada saat itu. Ketika akselerator dipanggil, maka tombol-tombol yang ditekan akan dikonsumsi langsung oleh aplikasi dan tidak diberikan kepada widget apa-apa.

Akselerator direpresentasikan pada SWT dalam bentuk kode integer tertentu. Kode integer tersebut berisi gabungan beberapa tombol, yaitu tombol pengubah (seperti , , ) dan satu tombol lain yang berupa karakter atau keyCode (seperti tanda panah, F1 hingga F15, , dll). Lihat bahasan tentang fokus kontrol untuk mengerti lebih jauh tentang bagaimana penanganan tombol pada SWT. Tombol akselerator tidak bisa hanya terdiri dari tombol pengubah saja.

Berikut ini adalah beberapa contoh akselerator.

AkseleratorRangkaian Tombol
SWT.CONTROL + 'A' +
SWT.SHIFT + SWT.ARROW_UP + tombol panah ke atas
SWT.MOD1 + 'S'Tombol pengubah pertama (biasanya atau ) +
SWT.MOD1 + SWT.MOD2 + 'B'Tombol pengubah pertama + Tombol pengubah kedua +
Akselerator diberikan kepada menu atau toolbar dengan menggunakan metode setAccelerator(int kodeAkselerator) di mana kodeAkselerator adalah kode akselerator seperti dicontohkan pada tabel di atas. Untuk mereset akselerator, isikodeAkselerator dengan 0.

Untuk mengambil tombol akselerator suatu menu atau toolbar bisa digunakan dengan menggunakan metodegetAccelerator() yang mengembalikan nilai integer.

Misalnya jika item adalah suatu item pada menu, maka potongan kode berikut akan menambahkan akselerator pada item tersebut :
item.setText("Pilih &Semua\tCtrl+S");
item.setAccelerator(SWT.MOD1 + 'S');
item.addListener(SWT.Selection, new Listener() {
    public void handleEvent(Event e) {
        System.out.println("Item dipilih.");
    }
});
Karakter '\t' di dalam setText memberi tahu SWT bahwa karakter setelah itu adalah tombol akseleratornya. Perlu dicatat bahwa hanya menambahkan teks akselerator pada metode setText() tidak membuat tombol akselerator otomatis ditambahkan dalam metode setAccelerator(). Menambahkan teks akselerator pada setText() berfungsi untuk membetulkan kesalahan yang terjadi jika tombol akselerator tidak terdapat pada platform yang dituju. Misalnya pada contoh di atas, tombol tidak ada pada Macintosh, akan tetapi SWT akan mengganti tampilan Ctrl-S menjadi -S.

Tombol Sistem Jendela

Tombol yang diproses oleh sistem jendela tidak akan sampai pada aplikasi kita. Misalnya, tombol Alt-F4 pada beberapa sistem akan menutup jendela yang aktid. Manager jendela akan melakukan aksi terlebih dahulu dan tombol tersebut akan dikonsumsi oleh manager jendela. Manager jendela tidak sama dengan sistem operasi. Pada Windows, manager jendela itu terintegrasi dengan sistem operasi. Pada Linux misalnya manager jendela bisa bermacam-macam, misalnya KDE dan Gnome.

Tombol-tombol mana yang akan dimanage oleh manager jendela berbeda-beda, tergantung dari sistem jendela tersebut. Karena tidak adanya kesamaan pada setiap manager jendela, maka kita tidak bisa mencegat penekenan tombol ini misalnya dialihkan untuk melakukan fungsi lain.

Traversal

Traversal atau penelusuran berarti memindahkan fokus dari satu kontrol ke kontrol lain. Tombol traversal berbeda dengan tombol akselerasi dan tombol sistem jendela (yang akan dibahas nanti), yaitu : Suatu kontrol bebas memilih apakah akan menjalankan operasi traversal atau mengolah tombol yang ditekan. Jika kontrol memilih untuk menjalankan operasi traversal maka tombol tersebut tidak akan diproses lebih lanjut.

Ada dua jenis traversal, yaitu mnemonik dan tab.

Traversal Mnemonik

Mnemonik biasanya tertulis sebagai karakter yang diberi garis bawah pada label suatu widget. Suatu aksi akan dilakukan jika user menekan kombinasi tombol yang cocok dengan mnemonik tersebut, biasanya dengan menekan tombol bersamaan dengan karakter yang digaris bawah tersebut.

Gambar berikut adalah contoh mnemonik pada program OpenOffice ketika kita membuka kotak dialog Format Font


Jika kita menekan + H maka tampilan Help akan ditampilkan.

Menekan tombol kombinasi untuk memanggil mnemonik sama dengan mengaktifkan widget tersebut. Pada contoh di atas, mnemonik + H diterapkan pada tombol, yang artinya ketika kita menekan + H, sama dengan kita menekan tombol Help. Beberapa widget yang tidak bisa menerima pilihan, seperti label dan kotak grup masih bisa menerima mnemonik, akan tetapi fungsinya hanya untuk memindahkan fokus ke widget tersebut.

Bagaimana caranya menambahkan mnemonik? Mudah saja. Cukup tambahkan '&' di depan karakter yang akan kita tandai sebagai mnemonik, kemudian masukkan string ini sebagai argumen pada metode setText() suatu widget. Misalnya pada perintah berikut :
Button tombol1 = new Button(shell, SWT.PUSH);
tombol1.setText("&Klik saya");
akan membuat tombol dengan mnemonik + K, seperti pada gambar berikut ini :

Untuk membuat mnemonik pada karakter '&' sendiri, gunakan '&&', misalnya "Ini && Itu" akan menghasilkan "Ini & Itu"

Traversal Tab

Traversal tab didukung pada semua platform. Tidak seperti pada mnemonik, pada traversal tab, kita tidak perlu mendefinisikan apa-apa, karena setiap platform memiliki cara sendiri bagaimana memindahkan fokus dari satu widget ke widget lain. Misalnya, ketika kita menekan tombol , maka fokus akan otomatis pindah ke widget berikutnya. Ketika sampai pada widget terakhir, maka fokus akan diulang dari widget pertama.

Nama traversal tab mungkin agak sedikit salah sasaran, karena sepertinya hanya tombol saja yang bisa digunakan untuk memindahkan fokus dari satu widget ke widget lain. Pada beberapa platform, menekan tombol panah juga memindahkan fokus.

Beberapa tombol lain seperti digunakan untuk menutup kotak dialog, dan sebenarnya termasuk dalam tombol traversal tab juga.

Berikut ini adalah daftar event dan listener yang berkaitan dengan traversal.
Kelas Event (event bertipe)Interface/Kelas Listener(listener bertipe)Metode (listener bertipe)Jenis event (event tanpa tipe)Penjelasan
TraverseEventTraverseListenerkeyTraversed(TraverseEvent)SWT.TraverseNavigasi pada keyboard dideteksi
Berikut ini adalah isi event ketika event traversal terjadi.
Nama FieldPenjelasan
detailDetail traversal yang terjadi
doitSuatu boolean yang bisa digunakan untuk membatalkan aksi traversal
detail berisi salah satu dari nilai-nilai berikut.
isi detailPenjelasan
SWT.TRAVERSE_ESCAPETraversal yang terjadi ditutupnya suatu kotak dialog, misalnya dengan menekan tombol Cancel atau tombol
SWT.TRAVERSE_RETURNTraversal yang terjadi ketika kotak dialog selesai diisi misalnya setelah menekan tombol OK atau tombol
SWT.TRAVERSE_TAB_PREVIOUSTraversal yang terjadi ketika fokus pindah ke group tab sebelumnya
SWT.TRAVERSE_TAB_NEXTTraversal yang terjadi ketika fokus pindah ke group tab sesudahnya
SWT.TRAVERSE_ARROW_PREVIOUSTraversal yang terjadi ketika fokus pindah ke item sebelumnya
SWT.TRAVERSE_ARROW_NEXTTraversal yang terjadi ketika fokus pindah ke item sesudahnya
SWT.TRAVERSE_MNEMONICTraversal mnemonik terjadi
SWT.TRAVERSE_PAGE_PREVIOUSTraversal yang terjadi ketika untuk pindah ke halaman sebelumnya pada kotak dialog
SWT.TRAVERSE_PAGE_NEXTTraversal yang terjadi ketika untuk pindah ke halaman berikutnya pada kotak dialog
SWT.TRAVERSE_NONETraversal tidak terjadi
Variabel detail bukan hanya untuk dibaca akan tetapi kita juga bisa mengisinya apabila kita ingin mengubah jenis traversal. Misalnya kita ingin mengubah tombol bukan untuk menutup dialog akan tetapi untuk memindahkan fokus ke widget lain, kita bisa mengisi variabel detail dengan SWT.TRAVERSE_ARROW_PREVIOUS.

doit digunakan untuk membatalkan traversal jika variabel ini diisi false. Akan tetapi lihat bahwa pada variabel detail juga bisaSWT.TRAVERSE_NONE. Apa perbedaannya? Ingat bahwa tombol yang tidak digunakan untuk traversal akan diberikan kepada widget yang menerima traversal untuk diolah lebih lanjut.

Artinya jika event doit kita isi dengan true, traversal akan dilakukan dan tombol akan "dikonsumsi" (tidak diberikan kepada widget untuk diproses kembali). Jika doit kita isi denga false, traversal tidak dilakukan dan tombol akan diberikan kepada widget untuk diproses.

Apa yang terjadi jika detail juga diisi dengan SWT.TRAVERSE_NONE? Jika detail diisi dengan SWT.TRAVERSE_NONE maka widget tidak akan melakukan traversal, tidak peduli apakah isi doit berisi true atau false. Akan tetapi, variabel doitmenentukan apakah tombol akan diberikan kepada widget untuk diproses.

Jadi jika doit berisi false dan detail berisi SWT.TRAVERSE_NONE, maka tombol akan diberikan kepada widget, dan traversal tidak dilakukan. Akan tetapi jika doit berisi true dan detail berisi SWT.TRAVERSE_NONE, maka traversal tidak dilakukan, dan tombol akan dikonsumsi dan tidak akan diberikan kepada widget.

Berikut ini adalah contoh penggunaan traversal.
Program ini akan membuat 6 tombol. Coba tekan tombol . Fokus akan pindah ke tombol berikutnya setiap kali Anda menekan tombol . Ketika Anda melewati tombol 4 atau tombol 6, akan tercetak "Button {4} ditelusuri". Jika Anda menekan tombol + fokus akan berpindah ke tombol sebelumnya. Akan tetapi jika Anda sampai pada tombol 4 atau tombol 6, event traversal yang terjadi akan ditangkap dan traversal akan diabaikan. Akibatnya Anda tidak akan bisa pindah dari tombol 4 ke tombol 3 atau tombol 6 ke tombol 5. Pada saat yang sama di konsol akan tercetak "Anda tidak bisa kembali!".

Program lengkapnya adalah sebagai berikut, yang bisa diunduh di sini.
package com.lyracc.traversalkustom;
 
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
 
public class TraversalKustom {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setSize(300, 200);
 
        Button b1 = new Button(shell, SWT.PUSH);
        Button b2 = new Button(shell, SWT.PUSH);
        Button b3 = new Button(shell, SWT.PUSH);
        Button b4 = new Button(shell, SWT.PUSH);
        Button b5 = new Button(shell, SWT.PUSH);
        Button b6 = new Button(shell, SWT.PUSH);
        b1.setBounds(10,10,50,50);
        b2.setBounds(100,10,50,50);
        b3.setBounds(200,10,50,50);
        b4.setBounds(10,100,50,50);
        b5.setBounds(100,100,50,50);
        b6.setBounds(200,100,50,50);
        b1.setText("1");
        b2.setText("2");
        b3.setText("3");
        b4.setText("4");
        b5.setText("5");
        b6.setText("6");        
 
        TraverseListener traverseListener = new TraverseListener() {
            public void keyTraversed(TraverseEvent e) {
                if (e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
                    System.out.println("Anda tidak bisa kembali!");
                    e.doit = false;
                }
                System.out.println(e.widget + " ditelusuri");
            }
        };
        b4.addTraverseListener(traverseListener);
        b6.addTraverseListener(traverseListener);
 
        shell.open();
        while (!shell.isDisposed())
            if (!display.readAndDispatch()) 
                display.sleep();
        display.dispose();        
    }
}