Maklumat

Tulisan-tulisan terkini dapat juga didapatkan di halaman Kompasiana di alamat https://kompasiana.com/didikaha

Khusus untuk konten-konten sastra seperti puisi, cerpen dan esai silahkan kunjungi http://blog.edelweis-art.com. Terima kasih (Penulis)

Sabtu, Oktober 17, 2009

Analogi Huruf

Gagalnya sebuah komunikasi, pada banyak kasus, merupakan penyebab fatal dari gagalnya suatu proyek, pekerjaan ataupun program. Semisal karena adanya komunikasi yang tidak jelas antara petugas customer service sebuah toko dengan seorang pelanggan tentang pencatatan alamat pengiriman barang untuk si pelanggan hingga terjadi kesalahan pengiriman ke alamat yang bukan merupakan alamat yang disebutkan si pelanggan sebelumnya. Contoh lain adalah bocornya sebuah dokumen rahasia karena kesalahan pengiriman email ke alamat yang tidak semestinya yang juga dikarenakan kesalahan komunikasi soal pencatatan alamat email.

Pada kedua contoh di atas, sebenarnya kesalahan pencatatan alamat bisa dihindari jika kedua pihak tidak tergesa-gesa, namun sebaliknya lebih berhati-hati dalam berkomunikasi. Aksentuasi penyebutan huruf dan juga kejelasan penerimaan ucapan (baca: pendengaran) audiennya biasanya merupakan faktor penyebab kegagalan komunikasi ini. Dalam hal ini, analogi huruf adalah cara ampuh untuk menghindari kesalahan pencatatan, entah email, nomor seri, nama jalan dan sebagainya, yang sebenarnya sudah sejak lama ada dan digunakan.

Berikut ini adalah daftar analogi huruf dari A sampai Z. Pemakaiannya untuk mengejakan huruf depan yang ada. Misal Charlie adalah analogi untuk huruf C. Oscar adalah analogi untuk huruf O. Hingga kata dhani bisa diejakan dengan delta hotel alpha november india. Dhani yang tentu saja berbeda dengan dani ataupun danny. Semoga bermanfaat.

A - Alpha
B - Beta
C - Charlie
D - Delta
E - Echo
F - Foxtrot
G - Golf
H - Hotel
I - India
J - Juliet
K - Kilo
L - Lima
M - Mike
N - November
O - Oscar
P - Papa
Q - Quebec
R - Romeo
S - Serria
T - Tango
U - Uniform
V- Victor
W - Whiskey
X- X-Ray
Y - Yankee
Z- Zulu

Jumat, September 11, 2009

Setiabudi 17

: sm

meski sejenak
meski sepapas
namun tapak langkah
yang pernah kita jejakkan
masih berbekas kini
dan aku masih melihat
namamu
terpatri di hatiku

bukan aku ingin
mengubah arah sejarah
tidak
biarlah anak-anak kita
tumbuh ceria
bersama ayah-bundanya yang sejati
aku tak ingin melukai siapapun
karena aku tahu
cinta sejati telah kita dapatkan
dari orang-orang yang telah setia
menyayangi kita
memberi kebahagiaan kita
akan sebuah keluarga
tapi biarkan aku mengenangmu
mengenang waktu
yang pernah kita semai
meski sejenak
meski sepapas
sambil aku belajar
tuk menghargai cinta
dari orang-orang yang setia
mencintai kita

BSD, 21:30 110909/210930

Hanya Soal Kata ..

YA, hanya soal kata. Tapi, persoalan ini bisa merubah persepsi dan keadaan berbalik 180 derajat dari yang diharapkan.

Semisal Anda sebagai orangtua yang senantiasa menginginkan anak-anak Anda tumbuh dan berkembang sebagai anak-anak yang baik. Namun, setiap kali Anda mendapati kesalahan-kesalahan dan kekeliruan-kekeliruan yang mereka lakukan (sekecil apapun!), seolah itu adalah ketololan-ketololan yang selalu mereka perbuat, yang memang menjadi tabiat mereka. Di mana, dalam ceramah-ceramah Anda terhadap mereka--atas kekeliruan-kekeliruan yang mereka lakukan itu--sama sekali Anda tidak pernah memberi applaus atas perbuatan-perbuatan baik yang telah mereka lakukan, namun sebaliknya senantiasa mengungkapkan kekeliruan-kekeliruan sebelumnya yang mereka lakukan.

"Kakak tuh 'gak ada benernya deh. Udah tau embernya bocor, masih aja dipake. Kan ember yang lain ada ..." atau "Merah lagi, merah lagi raportnya. Dibilangin belajar, belajar .. eh, malah main game terus ..."

Dua contoh "ceramah" di atas sungguh dapat menimbulkan dampak negatif yang besar bagi pertumbuhan mental si anak. Seolah si anak yang diceramahi, memang tak pernah berbuat benar. Memang tak pernah melakukan prestasi apapun. Pada masa mendatang, jika pola-pola seperti ini yang terus dilakukan si orangtua, si anak dapat "mencap" dirinya sendiri sebagai seorang yang tidak berguna. Ketika orangtua tak pernah berempati terhadapnya, yang ada kemudian adalah dendam. Dia bisa tumbuh menjadi seorang penjahat kelas kakap layaknya Joker dalam film Batman. Atau, jika tidak, dia akan kehilangan kepercayaan dirinya, hingga dia akan selalu gagap dan gamang melakukan sesuatu, yang bahkan remeh dan sebenarnya bisa dia lakukan dengan mudah.

Kasus lain, jika Anda adalah seorang supervisor yang setiap pagi mereview dan membuat planning kegiatan tim Anda, ketika Anda senantiasa mencaci setiap pekerjaan mereka, ketika Anda hanya bisa melihat sisi buruk pekerjaan mereka, maka jangan Anda harapkan pekerjaan mereka akan dapat menjadi lebih baik. Percayalah. Apalah susahnya berkata, "Bagus, pekerjaan kalian kemarin sudah rapi. Hanya ada beberapa bagian yang mesti diselesaikan dengan lebih baik ..." daripada "Gimana sih kalian, kerja 'gak pernah becus. Timbang masang gitu aja 'gak bisa ..."

Sebagai orangtua, sebagai supervisor, sebagai leader, guru, pejabat, pimpinan, .. kata-kata dan cara sikap kita sungguh akan sangat berpengaruh. Bahkan terkadang, inilah yang menjadi kunci sukses tidaknya sesuatu. Maka, marilah kita membiasakan diri dengan kata-kata dan sikap-sikap positif.

Memang, sebagai manusia, seperti mereka pernah melakukan kesalahan, bisa dimaklumi jika sekali dua kali kita keceplosan memarahi ataupun mencaci mereka. Tapi, sekali lagi, jangan sampai itu menjadi kebiasaan. Karena hal positif (seperti sukses) lahir dan tumbuh dari hal yang positif pula, dari kebiasaan-kebiasaan yang positif.

Selasa, September 01, 2009

Ruang Tengah Rumah Petak Tiga Nomor 4

pulpen. buku. hp. dompet. blackberry. laptop. secangkir kopi. sprei lusuh. sebungkus rokok. korek api. remot tivi. asbak. flash disk. amplop coklat. kipas angin. senter. rak buku. jam dinding. lampu remang. spidol. rak tivi. tivi. dvd player. lampu emergensi. peniti. selembar ribuan. bedak bayi. sikat gigi anak. gesper. kalender dinding. buku-buku berserakan. album foto perkawinan. kasur. bantal-bantal. guling. bodrex migra. struk atm. tisu. sumpit pangsit. karet gelang. charger. brosur btn. betadine. kabel-kabel. dispenser. koper. setrika. lemari-lemari. kardus. sajadah. cermin. qur'an berdebu. tembok-tembok gelap. suara-suara tivi. detak jarum jam. malam. sunyi.

bsd, 22.47, 010909

Senin, Agustus 10, 2009

Usia

USIA. Atau bahasa lainnya umur. Merupakan waktu yang diberikan oleh Gusti kang Murbeng Dumadi, Allah SWT, kepada kita, makhluk hidup (baik manusia, jin, hewan, tumbuhan, ..) untuk menjalankan syariat-Nya, mengisi kehidupan di dunia ini. Mengisi kehidupan dengan peran yang telah kita "sepakati" sebelumnya dengan Dia. Syahdan, menurut sebuah hikayat, sebelum semua makhluk hidup "diturunkan" ke dunia, di "sana" masing-masing telah dibaiat oleh-Nya, apa-apa yang akan harus dijalankan; peranan apa yang akan diembannya, dan seberapa lama waktu yang diberikan kepadanya. Namun, syahdan pula, setelah melewati "perjalanan" panjang dari "sana" menuju ke dunia ini, di mana secara kasat mata proses itu berupa kehamilan di rahim ibunya, manusia seperti mengalami "amnesia" atas segala yang telah diperbincangkan dengan sang Rabbi tersebut. Ketika hadir (terlahir) ke dunia ini, manusia seperti tidak memiliki pengetahuan dan ingatan apa-apa. Segala baginya adalah baru.

Dengan tertatih-tatih, kita, manusia, mencoba merengkuhi keping demi keping pengetahuan. Dan dengan keping-keping pengetahuan itu, mencoba mereka-reka kembali tentang hakikat keberadaan kita. Darimana kita berasal. Akan kemana kita setelah sekarang ini. apakah akan selamanya di sini. Apakah akan hilang begitu saja setelah pergi dari sini (baca: mati). Dan, yang terpenting, apakah kita terlahir dengan sendirinya di sini. Apakah moyang pertama kita, ada dengan secara sendirinya.

Sebagian dari kita akhirnya bisa menemukan kembali ingatan tentang "perjanjian" itu. Hingga kemudian bisa membenahi kehidupan, seperti apa yang telah diwajibkan. Menjalankan peran yang semestinya. Namun ada juga yang telah mengingatnya, namun tidak bisa memahaminya. Sebagian yang lain, masih terus meraba-raba, terus mengingat-ingat, terus mencari-cari. Sebagian yang lain lagi, akhirnya enggan dan berhenti untuk mengingat-ingat, dan menjalani kehidupan dengan sesuai yang ada di benaknya sendiri.

Tanpa terasa, 29 tahun hampir sudah saya melewatkan perjalanan hidup ini. Ingatan itu telah begitu kuat di kepala saya. Saya bersyukur. Meski, barangkali, saya masih sering melalaikan kewajiban itu.

29 tahun. Ya, tahun demi tahun tanpa terasa bertambah usia. Meski dari sisi yang lain, berarti waktu saya untuk berada di sini, semakin berkurang. Bisa jadi tahun depan saya mesti kembali. Bisa jadi malam ini, saya harus kembali kepada-Nya. Bisa jadi, sesudah postingan ini selesai saya unggah.

Namun doa saya, semoga dalam perjalanan pulang nanti, saya tidak akan tersasar kemanapun. Dan orang-orang yang saya tinggal di sini, anak-anak tercinta, istri tercinta, dapat selalu menjaga ingatannya, tentang kewajiban itu, tentang hakikat kehidupan ini, tentang arah pulang nanti, tentang Gusti kang Murbeng Dumadi, Allah SWT ...

Ilahi lastu lil firdausi ahlan. Wa la aqwa 'alan-naril jahimi. Fa habli taubatan wa-ghfir dzunubi. Fa innaKa Ghafirudz-dzanbil 'adzimi ...

"Demi Masa, sesungguhnya manusia berada dalam kerugian. , kecuali mereka yang beriman dan berbuat kebajikan, dan saling mengingatkan akan kebenaran dan kesabaran ... Shadaqallahul 'adzim"

Sabtu, Juni 06, 2009

Cek Keabsahan ID YM dan Online tidaknya ID tersebut

Meski chatting kini tidak lagi melulu dilakukan melalui Yahoo! Messenger (YM), namun bisa juga melalui media yang lain seperti Facebook yang sedang ramai belakangan ini, tetap saja YM mempunyai nilai plus. Selain terintegrasi dengan layanan Yahoo! lainnya seperti email, YM juga kini mempunyai versi webnya yang tidak lagi mengharuskan kita menginstal aplikasinya di komputer kita untuk dapat melakukan chatting. Juga, YM dapat terintegrasi dengan layanan-layanan instant messaging semacam eBuddy, dan bisa langsung diakses dari ponsel. Satu lagi, status online dan offline kita dapat kita tampilkan di situs atau blog kita yang tentu hal ini dapat membantu orang lain menghubungi kita, karena selain tampilan status, orang lain juga dapat langsung menghubungi kita dengan mengklik ikon status yang ada, dengan syarat, pada komputer tempat mengakses situs atau blog kita, telah tersedia aplikasi YM.

Untuk memasang ikon tampilan status di web ataupun blog kita, caranya sangat mudah. Cukup copy & paste script berikut di halaman web ataupun blog Anda:

<a href="ymsgr:sendIM?ID_YM_ANDA"><img style="border: 0px" src="http://opi.yahoo.com/online?u=ID_YM_ANDA&m=g&t=2" alt="YM STATUS" /></a>

Setelah Anda tempel script tersebut (jangan lupa ganti kata ID_YM_ANDA dengan ID YM Anda), maka pada tempat tersebut akan muncul gambar di bawah ini. Gambar sebelah kiri adalah tampilan jika status kita sedang online, sedang gambar di sebelah kanan adalah tampilan saat kita sedang offline.




Mengetahui Status ID YM Orang Lain

Nah, sekarang bagaimana, kalau kita yang ingin tahu status ID YM teman kita (tanpa kita harus login ke YM) dan ternyata dia tidak memasang statusnya di web atau blognya (karena memang tidak punya web ataupun blog :D)?

Mudah saja, cukup copy bagian script di atas: http://opi.yahoo.com/online?u=ID_YM_ANDA&m=g&t=2, ganti ID_YM_ANDA dengan ID YM teman kita, lalu paste di kotak address browser kita, enter ... Cling!! Gambar status seperti di atas pun akan muncul.

By the way, namun coba, ID YM yang Anda masukkan sembarang atau keliru, yang mana ID tersebut ternyata tidak atau belum ada yang menggunakan (misal ID teman kita bocah_ganteng tapi kita salah ketik jadi bovah_ganteng), upss.. ternyata gambarnya nongol juga dengan status offline (padahal kalau kita masukkan ID-nya dengan dengan benar, ternyata dia sedang online) dan parahnya, kita tidak sempat mengkoreksi apakah ID yang kita masukkan benar atau salah. What happened??

Setelah coba-coba browsing sana browsing sini, don't worry, ada kok cara atau script untuk mengetahui ID seseorang bener-bener merupakan ID Yahoo! atau cuman rekaan saja. Dan setelah saya kombinasikan dengan script lain, jadilah class php di bawah ini. Output dari class ini adalah memberitahukan apakah ID Yahoo! yang kita masukkan valid atau tidak. Jika valid, maka akan ada tambahan statusnya, online atau offline.

<?php

# this class is used to check validity and online status of a YM ID
# this class in developed base on script at http://www.gsdesign.ro/blog/how-to-check-if-a-yahoo-user-exits-using-php & http://www.rumahweb.com/journal/yahoo-messenger-indikator-bag-2.htm

# developed by usman didi khamdani at usmankhamdani@gmail.com

class YM {

var $ID; // YM ID will be checked

function Status() {
// firstly, check the validity of ID
$check = file_get_contents('https://edit.yahoo.com/reg_json?PartnerName=yahoo_default&AccountID='.$this->ID.'&ApiName=ValidateFields');
if ( strpos($check,'SUCCESS')===false ) { // if ID is valid, then check the status
$open = fopen("http://opi.yahoo.com/online?u=".$this->ID."&m=t","r");

if(!$open) {
die ("<img src=\"http://opi.yahoo.com/online?u=".$id."&m=g&t=2\"/>");
}

while($read = fread($open, 2048)) {
$status .= $read;
}
fclose($open);

if($status == $this->ID." is ONLINE"){ // output if status is online
echo "<b>".$this->ID."</b> is a valid Yahoo! ID and now is <span style=\"color:#0000ff\">online</span>";
} else {
// output if status is offline
echo "<b>".$this->ID."</b> is a valid Yahoo! ID and now is <span style=\"color:#ff0000\">offline</span>";
}
} else {
// output if ID is not valid
echo "<span style=\"color:#ff0000\"><b>".$this->ID."</b> is not a valid Yahoo! ID</span>";
}
}
}

?>

Simpan terlebih dahulu class tersebut dalam sebuah file, misalnya check_ym.class.php. Untuk menggunakannya, kita tinggal memanggil class tersebut, seperti contoh berikut:

<?php include("check_ym.class.php"); ?>

<!DOCTYPE HTML>
<html>
<head>
<title>Check The Validity and Status of a Yahoo! ID</title>
<meta name="keywords" content="ym,yahoo,yahoo messenger,yahoo!,yahoo! messenger,check,status" />
<meta name="description" content="Script to check if someone has a valid Yahoo! ID or not and to check if someone online or not in YM" />
</head>
<body>
<h3>Check The Validity and Status of a Yahoo! ID</h3>
<hr />

<?php

if(isset($_POST['ID'])) {
$YM = new YM();
$YM->ID = $_POST['ID'];
$status = $YM->Status()."<hr />";
} else {
}

if(isset($status)) {
echo $status;
} else {
}

?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<p>Yahoo! ID: <input type="text" name="ID" /> <input type="submit" value="Check" />
</form>
</body>
</html>

Klik di sini untuk download source file-nya.

Jumat, Mei 29, 2009

Visual Basic 6.0: Cek Port Serial yang Sedang Aktif dan Bisa Digunakan

Adakalanya untuk aplikasi yang kita buat, memerlukan perangkat pendukung yang terhubung melalui port serial pada komputer, seperti perangkat modem dan atau ponsel untuk aplikasi sms server. Sebenarnya, untuk mengetahui apakah suatu perangkat sudah terhubung atau tidak, kita bisa "membacanya" dari Device Manager yang ada (klik start->Control Panel->System->Hardware->Device Manager atau klik start->run ketik devmgmt.msc lalu OK). Toh, pada kenyataannya, seringkali hal ini dirasa kurang praktis, terlebih jika penggunaan aplikasi, melibatkan operator atau orang yang tidak begitu familiar dengan sistem komputer.

Device Manager

Pada Visual Basic, persoalan ini bisa ditanggulangi dengan memanfaatkan kontrol MSComm, yang memang disediakan sebagai sarana komunikasi berbasis comm-port. Dengan kontrol ini, dimungkinkan terjadinya pengiriman data dari atau melalui suatu port serial ke aplikasi yang kita buat dan sebaliknya. Seperti misalnya membaca sms yang masuk ke ponsel dan sekaligus melakukan pengiriman sms dari aplikasi kita melalui ponsel tersebut, yang terhubung melalui suatu port serial.

Berikut adalah salah satu cara yang bisa kita gunakan untuk mengecek pada port yang mana suatu perangkat dihubungkan. Jika nantinya perangkat tersebut sudah digunakan untuk aplikasi yang lain, maka hasil yang ada adalah nihil, artinya perangkat tersebut tidak bisa digunakan untuk aplikasi kita. Sebaliknya, jika perangkat tersebut sudah terhubung secara benar dan masih free, akan dihasilkan output berupa nilai COM-nya, misal COM1, COM4 atau COM6. Basis penulisan menggunakan Visual Basic 6.0 dengan output berupa array yang akan ditampilkan pada combo-box.

Untuk menggunakan kontrol MSComm, terlebih dahulu kita harus memasukkannya ke Toolbox, karena secara default kontrol ini tidak ditampilkan di Toolbox.

Pertama, kita buka window Components. Ada beberapa cara untuk membukanya:
1. Klik menu Project->Components
2. Klik Ctrl+T
3. Klik kanan pada Toolbox, lalu pilih Components

Window Components

Selanjutnya akan terbuka window Components. Pada tab Control, cari dan centang Microsoft Comm Control 6.0, lalu klik OK. Nah, sekarang kontrol MSComm telah ditampilkan di Toolbox, dengan ikon berupa gambar telepon. Klik dan seret gambar telepon tersebut ke dalam area form. Pada penggunaannya, kontrol ini tidak akan ditampilkan saat aplikasi dijalankan, tidak seperti ComboBox, TextBox ataupun ButtonCommand. Jadi, tidak masalah mau menempatkan kontrol ini di mana saja.

Kontrol MSComm di Toolbox

Berikutnya, dikarenakan nantinya output akan ditampilkan pada ComboBox, kita perlu memasukkan kontrol ini pula ke dalam form.

Form

Setelah kontrol MSComm dan ComboBox masuk ke dalam form, sekarang kita buka editor Code. Untuk membukanya, ada beberapa cara:
1. Klik ganda pada sembarang area form atau klik ganda pada salah satu kontrol yang ada di form
2. Klik menu View->Code
3. Klik ikon View Code di pojok kanan atas window Project

Setelah editor Code terbuka, pada combo-box Object di bagian kanan atas editor, pilih form hingga pada kotak editor akan muncul:

Private Sub Form_Load()

* tulis kode perintah di sini

End Sub


Ketikkan kode perintah berikut di dalamnya:

    On Error Resume Next

Dim i As Integer

For i = 1 To 100
MSComm1.CommPort = i
MSComm1.PortOpen = True

If MSComm1.PortOpen Then
Combo1.AddItem "COM" & i
MSComm1.PortOpen = False
Else
End If
Next


Sekarang coba klik F5 untuk melihat preview aplikasi. Lihat pada combo-box. Kosong?
Tutup preview aplikasi. Sekarang kita sambungkan kabel data atau sejenisnya ke salah satu port serial. Klik lagi F5. Lihat pada combo-box. Bagaimana??



Penjelasan:

Metode yang kita lakukan adalah mengecek satu persatu port yang ada. Saat port tersebut ditemukan aktif dan masih free (belum dipakai aplikasi apapun), akan ditampilkan nilai COM-nya, sebaliknya, nilai tampilan adalah kosong.

Pertama, kita definisikan variable untuk nilai portnya. Kita gunakan variable i yang kita definisikan sebagai integer: Dim i As Integer

Nilai variable ini adalah dari 1 hingga 100. Sebenarnya tidak harus 100. Angka ini (100) hanya untuk memastikan kemungkinan keberadaan port yang aktif. Jika ragu atau tidak diperlukan, angka ini bisa ditambahkan, atau sebaliknya, dikurangi.

Kedua, dengan menggunakan perintah pengulangan For .. Next, kita lakukan pengecekan melalui perintah: MSComm1.CommPort = i dan MSComm1.PortOpen = True

Perintah MSComm1.CommPort = i menunjuk port mana yang akan dieksekusi (dimulai dari COM1 hingga COM100). Sementara perintah MSComm1.PortOpen = True untuk menguji apakah port tersebut aktif. Jika benar port tersebut aktif dan bisa digunakan, akan dilanjutkan dengan perintah Combo1.AddItem "COM" & i dan MSComm1.PortOpen = False. Sebaliknya, jika ternyata salah (error; port tersebut tidak aktif atau sedang aktif tapi telah digunakan oleh aplikasi lain), tidak ada tindak eksekusi apa-apa.

Perintah
Combo1.AddItem "COM" & i menyatakan untuk menampilkan port yang bersangkutan dalam daftar combo-box. Sementara perintah MSComm1.PortOpen = False adalah untuk mengakhiri uji koneksi terhadap port tersebut.

Agar proses pengujian keberadaan port aktif bisa terus dilakukan berulang hingga port terakhir, kita tambahkan perintah On Error Resume Next. Sebab jika tidak, misalkan ternyata COM1 tidak aktif maka proses akan terhenti hanya sampai pengujian port tersebut.

(Berbagai Sumber)

Kamis, April 16, 2009

Ode kepada Tuhan

setelah perjalanan panjang ini
aku masih saja selalu getir
menapaki takdirmu
maafkan aku, tuhan
dzikirku selalu patah
di setiap takbiratul-ihram
aku masih saja selalu gagap
melafal asmamu
sujudku tak menyentuh
maafkan aku, tuhan
tapi sungguh
nuraniku teramat kering
oleh nawaitu kepadamu
aku selalu saja gamang
...
tuhan
tapi pun sungguh
sebenar hatiku
aku selalu merindukan kasihmu
mengusap kotor kalbuku
aku selalu merindukan kasihmu
memberi daya bagi diri
yang tertatih menyusuri jalan
takdirmu
ini

ilahii lastu lil-firdausi ahlaa
wa laa aqwaa `alan-naaril-jahiimi
fahab lii taubatan waghfir dzunuubii
fainnaka ghaafirudz-dzanbil-`adziimi*

sinari selalu jalanku, tuhan
berilah cahayamu
bukakan mata batinku
berilah petunjukmu selalu
jangan sesatkan jalanku, tuhan
beri arti bagi kembaraku ini
sepenuh keridhaan dan ampunanmu
amin

011024/251103

* doa abu nawas

ps. hari ini aku merasa begitu letih. perjalanan ini begitu melelahkanku. aku hanya semakin menjadi pecundang di hadapan-Mu. maafkan aku, Tuhan. maafkan aku ................

Senin, Maret 30, 2009

Class untuk Menghitung Waktu Suatu Peristiwa

Banyak jalan menuju Roma. Banyak cara pula yang bisa dilakukan untuk menghitung waktu kejadian suatu peristiwa, seperti berapa lama perjalanan yang telah ditempuh Kang Rohim dari Brebes ke Jakarta menggunakan kereta api kemarin (siapa Kang Rohim?? ;) Just sample..), atau berapa lama seorang karyawan hadir di kantor melakukan pekerjaannya selama satu bulan.

Class PHP di bawah ini hanyalah satu cara yang dapat dimanfaatkan untuk melakukan penghitungan waktu tersebut. Class Count Hour atau Penghitung Jam (CountHour.class.php).

Class Count Hour ini mempunyai fungsi pokok yaitu untuk menghitung lama kejadian suatu peristiwa dan juga menghitung jumlah waktu kejadian beberapa peristiwa. Contoh paling sederhana dari penerapan class ini adalah untuk menghitung absensi karyawan dalam satu minggu atau satu bulan.

class CountHour {

function
check_time($time) { // mengecek input waktu, format waktu harus JJ:MM:DD
$pattern = '^([0-9]{2}):([0-9]{2}):([0-9]{2})$';
if(
ereg($pattern,$time)) {
return
true;
} else {
die(
'Error. Format '.$time.' seharusnya JJ:MM:DD.');
}
}

function
check_time2($time) {
// mengecek input waktu, format waktu harus J:M:D
$pattern = '^([0-9]{1,100}):([0-9]{1,2}):([0-9]{1,2})$';
if(
ereg($pattern,$time)) {
return
true;
} else {
die(
'
Error. Format '.$time.' seharusnya J:M:D.');
}
}

function
seconds($time) { // merubah satuan waktu menjadi detik
$this->check_time($time);

$time = explode(':',$time);
$hour = $time[0]*3600;
$minute = $time[1]*60;
$second = $time[2];

$seconds = $hour+$minute+$second;
return
$seconds;
}

function
std($time) { // merubah waktu dengan satuan detik ke format JJ:MM:DD
if($time<0) {
return
'tidak terdefinisikan';
} elseif(
$time<3600) {
$hour = 0;
$hourr = $time;
} else {
$hour = $time/3600;
$hour = floor($hour);
$hourr = $time%3600;
}
if(
$hourr<60) {
$minute = 0;
$second = $hourr;
} else {
$minute = $hourr/60;
$minute = floor($minute);
$second = $hourr%60;
}

if(
strlen($hour)==1) {
$hour = '0'.$hour;
} else {
$hour = $hour;
}
if(
strlen($minute)==1) {
$minute = '0'.$minute;
} else {
$minute = $minute;
}
if(
strlen($second)==1) {
$second = '0'.$second;
} else {
$second = $second;
}

$time = $hour.':'.$minute.':'.$second;
return
$time;
}

function
diff_seconds($first,$last) { // menghitung lama waktu dalam satuan detik
$first1 = $this->seconds($first);
$last1 = $this->seconds($last);
if(
$last1<$first1 || $last1==$first1) {
die(
'error. '.$first.' lebih besar daripada '.$last);
} else {
return
$last1-$first1;
}
}

function
diff($first,$last) { // menghitung lama waktu dan menampilkannya dengan format JJ:MM:DD
$diff = $this->diff_seconds($first,$last);
return
$this->std($diff);
}

function
define_hour($time) { // mendefinisikan jam, menit dan detik
$this->check_time2($time);

$time_array = explode(':',$time);
$hourr = $time_array[0];
$minutee = $time_array[1];
$secondd = $time_array[2];

if(
$hourr==0) {
$hourr = '';
} elseif(
$hourr<10) {
$hourr = str_replace('0','',$hourr).' jam ';
} else {
$hourr = $hourr.' jam ';
}
if(
$minutee==0) {
$minutee = '';
} elseif(
$minutee<10) {
$minutee = str_replace('0','',$minutee).' menit ';
} else {
$minutee = $minutee.' menit ';
}
if(
$secondd==0) {
$secondd = '';
} elseif(
$secondd<10) {
$secondd = str_replace('0','',$secondd).' detik';
} else {
$secondd = $secondd.' detik';
}

return
trim($hourr.$minutee.$secondd);
}
}

Contoh penggunaan (1):

include('CountHour.class.php');
$time = new CountHour();

$first = '12:57:23';
$last = '21:09:04';
$time_difference = $time->diff($first,$last);
$time_difference2 = $time->define_hour($time_difference);

echo 'Waktu Mulai = '.$first.' Selesai =
'.$last.' Lama kejadian = '.$time_difference.' ('.$time_difference2.')';

Contoh penggunaan (2):

// menghitung absensi selama satu minggu

include('CountHour.class.php');
$time = new CountHour();

$day[0] = '08:00:27,17:05:23'; // variabel jam masuk dan pulang hari ke-1
$day[1] = '07:50:25,17:12:12'; // variabel jam masuk dan pulang hari ke-2
$day[2] = '07:55:34,17:05:00'; // variabel jam masuk dan pulang hari ke-3
$day[3] = '08:01:22,17:03:54'; // variabel jam masuk dan pulang hari ke-4
$day[4] = '08:03:14,17:02:28'; // variabel jam masuk dan pulang hari ke-5
$day[5] = '07:59:07,17:11:11'; // variabel jam masuk dan pulang hari ke-6
$day[6] = '08:10:43,16:01:20'; // variabel jam masuk dan pulang hari ke-7

// jam istirahat
$rest_time = '01:00:00'; // lama waktu istirahat, dalam hal ini 1 jam
$rest_time1 = $time->seconds($rest_time); // konversi jam istirahat ke satuan detik

// mendefinisikan jam, menit, detik
$restt = $time->define_hour($rest_time);

// menghitung jumlah hari kerja
$count_day = count($day);

for($i=0;$i<$count_day;$i++) {
// mengambil waktu absen masuk dan absen pulang
$hour[$i] = explode(',',$day[$i]);

// menghitung lama jam kerja
$diff_seconds[$i] = $time->diff_seconds($hour[$i][0],$hour[$i][1])-$rest_time1;
$diff[$i] = $time->std($diff_seconds[$i]);

$j = $i+1;
echo 'Hari ke-'.$j.'. Masuk = '.$hour[$i][0].' Pulang = '.$hour[$i][1].' Jam kerja = '.$diff[$i].' ';
}

// menghitung total jam kerja
$total_seconds = array_sum($diff_seconds);
$total = $time->std($total_seconds);
$totall = $time->define_hour($total);

echo 'Total jam kerja = '.$total.' ('.$totall.') => Jam kerja = jumlah jam di antara absen datang dan pulang dikurangi jam istirahat ('.$restt.')';

Silahkan klik di sini untuk mendownload Class Count Hour di atas.

Rabu, Februari 04, 2009

Enkripsi Data dengan Script PHP

Dalam pengiriman paket data yang bersifat rahasia, seperti halnya password, tentu kita membutuhkan keamanan agar data tersebut tidak sampai jatuh dan dimanfaatkan oleh pihak lain yang tidak berwenang.

Bekerja dengan PHP, kita bisa memanfaatkan fungsi hashing untuk mengenkripsi data.

Berikut ini adalah fungsi-fungsi hashing yang disediakan oleh PHP di mana masing-masing fungsi akan menghasilkan data enkripsi yang berbeda-beda:

md2
md4
md5
sha1
sha256
sha384
sha512
ripemd128
ripemd160
ripemd256
ripemd320
whirlpool
tiger128,3
tiger160,3
tiger192,3
tiger128,4
tiger160,4
tiger192,4
snefru
gost
adler32
crc32
crc32b
haval128,3
haval160,3
haval192,3
haval224,3
haval256,3
haval128,4
haval160,4
haval192,4
haval224,4
haval256,4
haval128,5
haval160,5
haval192,5
haval224,5
haval256,5

Untuk mengengkripsi data, script-nya adalah hash($method,$source); di mana $method adalah metode atau fungsi hashing tersebut di atas yang akan dipakai, sedangkan $source adalah adalah kata yang akan dienkripsi.

Ingin instan? Silahkan gunakan form di bawah!!

Jumat, Januari 09, 2009

Menyiasati Persoalan Background Editor (TinyMCE) pada Web Joomla!

Bagi pengguna web Joomla! 1.0.x, mungkin pernah mengalami persoalan, di mana saat ingin menuliskan artikel ataupun mengeditnya (menggunakan mode TinyMCE editor), merasa terganggu gara-gara background editornya berwarna gelap atau bahkan hitam yang menyebabkan tulisannya tidak dapat dibaca. Dalam hal ini jika pemilik atau desainer template web tersebut memilih warna gelap atau hitam untuk background halaman webnya. Ini tidak lain karena background TinyMCE editor menggunakan warna background halaman (body) yang ada pada file template_css.css yang sedang aktif.

Beberapa artikel yang bisa didapatkan via Google, memang telah memberikan solusi untuk hal ini, seperti yang dibahas di Forum Joomla!. Namun kebanyakan harus melakukan perubahan pengaturan pada beberapa file yang mesti diakses via "backdoor" (cpanel) web. Ini bukan masalah jika admin ataupun desainer web mempunyai akses untuk itu. Toh, beberapa pemilik dan pengelola situs hanya memberikan hak akses kepada desainer web, atau tepatnya desainer template, sebatas menginstalasikan templatenya via halaman administrator (back-end) Joomla!, sementara admin web yang ada hanya difokuskan pada pengelolaan konten web.

So?

Coba sekarang kita menggunakan pendekatan terbalik. Jika dicermati, yang menjadi sandungan persoalan yang ada adalah bahwa Joomla! memberlakukan pengaturan tunggal untuk background halaman web (front-end) dan juga editor (TinyMCE) termasuk halaman print preview. Seperti pada pengaturan di bawah ini:

body { background-color: #0000ff; }

Pengaturan ini akan menjadikan semua background berwarna biru.

Secara langsung, dari file template_css.css, kita tidak bisa melakukan pengaturan khusus untuk background editor. Namun, jangan lupa, kita 100% bisa melakukan pengaturan background halaman front-end.

Untuk itu, yang perlu kita lakukan adalah memberikan pengaturan khusus untuk background halaman front-end berupa class ataupun id. Katakanlah secara umum background berwarna putih dan tanpa dekorasi ataupun gambar apapun. Namun untuk halaman front-end yang dikunjungi orang umum, kita ingin background-nya berwarna hitam dengan gambar latar burung garuda di tengah-tengahnya. Simak pengaturan berikut:

body { background-color: #ffffff; }

body.frontend {
background-color: #000000;
background-image: url(../images/garuda.png);
background-position: center center;
background-repeat: no-repeat;
background-attachment: fixed;
}

Pengaturan body yang pertama akan memberikan efek atau style secara umum berupa background yang berwarna putih. Sementara pengaturan di bawahnya (dengan diberi class frontend) akan memberikan pengaturan khusus berupa background yang berwarna hitam dengan latar gambar garuda yang akan tetap berada di tengah-tengah halaman meski saat discroll sekalipun.

Namun pengaturan ini tidak akan langsung memberikan efek tersebut di atas terhadap halaman front-end. Sementara ini, tetap saja halaman front-end akan mempunyai background berwarna putih.

Untuk menjalankannya, buka file index.php untuk template yang kita buat atau sedang digunakan. Edit baris atau tag:

body

Sisipkan class yang telah kita buat menjadi:

body class="frontend"

atau menggunakan id misalnya:

body id="khusus"

Jangan lupa save file tersebut.

Sekarang coba buka halaman front-end dan editor (TinyMCE). Bagaimana?

Sederhana, bukan?