Antara tidak mengerti dan tidak mau berusaha

Pagi tadi saya memberikan kuis mata kuliah Aplikasi Bergerak di kelas saya. Pesertanya mahasiswa tingkat 3 dan 4. Sebetulnya pada kuliah ini, kita akan belajar lebih banyak mengenai berbagai macam platform yang bisa digunakan untuk membuat aplikasi bergerak seperti : Android, Blackberry, MeeGo, Windows Phone, dsb. Tapi memang lebih terfokus pada Android saat ini karena sebelumnya sudah ada mata kuliah Pemrograman Berorientasi Objek.

Namun, saya agak bingung dengan apa yang nanti akan saya sampaikan. Permasalahannya bukannya di materi, tapi bagaimana membuat mereka itu mau berusaha untuk mengerti. Pada awal kuliah saya mereview lagi pemahaman mereka tentang pemrograman berorientasi objek, tapi ternyata mereka lupa (atau ngga ngerti dulunya?) Akhirnya saya mereview lagi dasar-dasar pemrograman berorientasi objek dan tadi memberikan kuis kepada mereka. Tapi nampaknya harus kecewa, karena sempat tadi melihat sedikit mereka masih tidak mengerti cara membuat program berbasis objek dengan java 😦

Mereka tidak mengerti, tapi mereka juga tidak mau berusaha untuk mengerti. Sering saya sampaikan bahwa belajar memang ngga harus langsung ngerti, tapi proses untuk belajar menjadi mengerti itu harus selalu berjalan. Proses menggali apa yang tidak dimengerti lalu dicari jawabannya. Dosen mungkin masih dianggap terlalu menakutkan sehingga banyak mahasiswa tidak berani untuk bertanya padahal saya sudah memberi kesempatan untuk bertanya apa pun yang mereka masih belum paham. Bisa jadi tidak ada yang bertanya karena mereka tidak tau apa yang harus ditanyakan 🙂 dan mengapa tidak juga mengerti apa yang mau ditanyakan? ya gimana mau ngerti kalo apa yang didapat tidak pernah dicoba untuk diterapkan.

Sebagai contoh, kalo mereka mendapatkan kuliah pemrograman berorientasi objek harus mereka juga mencoba untuk mengeksplore berbagai macam sifat, method, dan pola pikir konsep menjadi sebuah program. Mau untuk selalu `ngoprek` program, mulai dari yang mudah sampai yang sulit. Kalo ngga pernah dicoba saya yakin pasti ngga akan pernah menemukan masalah, lha ngga pernah nyoba kok. Padahal kemampuan aplikatif itu bisa didapat dari `ngoprek` dan tidak bisa dalam waktu singkat. Tapi rasanya mahasiswa sekarang pengennya jago tapi ngga mau `ngoprek`, ingin paham tapi tidak mau berusaha untuk paham.

Advertisements

Sharing artikel pada facebook dan twitter

Apa sih fungsinya manggil url yang aktif pada saat membuka sebuah halaman browser?? Kalo buat saya pribadi, biasanya saya gunakan untuk sharing artikel via facebook, twitter, myspace, etc, pada web-web yang biasanya saya buat. Lalu bagaimana caranya untuk mengambil url tersebut?? Oke, disini saya akan memberikan dua contoh fungsi yang bisa digunakan untuk mengambil url pada halaman browser sekaligus membaginya (share, agak aneh juga kalo pake bahasa Indonesia ya??) ke jejaring-jejaring sosial.

1. Fungsi untuk mengambil url aktif (current url), sebetulnya ini fungsi tidak saya buat sendiri tapi saya ambil dari sini.

function curPageURL() {
	$pageURL = 'http';
	if ($_SERVER["HTTPS"] == "on") {
		$pageURL .= "s";
	}
	$pageURL .= "://";

	if ($_SERVER["SERVER_PORT"] != "80") {
		$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
	} else {
		$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
	}

	return $pageURL;
}

Untuk menggunakan fungsi ini kita cukup menuliskan:

echo curPageURL();

Jika kita membuka halaman web dengan url https://osmd.wordpress.com, maka ketika kita menjalankan fungsi curPageURL() hasilnya akan berisi https://osmd.wordpress.com sesuai dengan halaman yang kita buka.

2. Fungsi untuk sharing artikel ke facebook dan twittter, kalo yang ini fungsi buatan sendiri dan masih bisa dikembangkan lebih lanjut. Saya hanya mencoba untuk membuat fungsi yang sederhana. Kira-kira fungsinya sbb:

function sharethis($platform = 'facebook,twitter', $url = '') {

	$render = '';
	$platform = explode(',', $platform);

	foreach ($platform as $m) {
		if ($m == 'facebook') {
			$render .= '<a href="http://facebook.com/share.php?u='.$url.'" target="_blank"><img src="./images/ico_fb.gif"></a>&nbsp;';
		}

		if ($m == 'twitter') {
			$render .= '<a href="http://twitter.com/home?status='.$url.'" target="_blank"><img src="./images/ico_twitter.png"></a>&nbsp;';
		}
	}

	return $render;
}

Untuk menggunakannya kita tinggal menuliskannya:

echo sharethis('facebook,twitter', curPageURL());

Hasilnya akan menampilkan icon sharing beserta urlnya. Mudah bukan??

Ayuk Coding : Tutorial CI untuk meresize dan membuat thumbnail pada upload file

CodeIgniter memang framework yang cukup populer dan banyak digunakan (termasuk saya juga) walau rilis tiap versinya cukup lama 😀 Di sini saya akan mencoba berbagi pengetahuan tentang mengupload, meresize, dan membuat thumbnail menggunakan library yang ada di CI. Seringkali ketika kita membuat website/aplikasi web yang menggunakan gambar pasti mendefinisikan dulu ukurannya (mis: 300×300), lalu jika ada kebutuhan untuk membuat thumbnail baru sekalian kita buat thumbnailnya. Hanya saja, pengguna biasanya malas untuk menyesuaikan gambar dengan ukuran yang telah didefinisikan tadi, jadilah developernya yang harus repot.. hehehehe.. Tapi untungnya di CI sudah disediakan library yang mudah digunakan untuk memanipulasi file image ini. Bagaimana cara kerjanya?? Continue reading

Ayuk coding : Memanfaatkan runonreceive pada Gammu untuk SMS autoreply

Sebelumnya, tutorial ini menggunakan gammu 1.27.90 versi Windows karena banyak tutorial – tutorial yang yang dibuat pada saat menggunakan gammu versi lama sehingga tidak bisa dijalankan pada saat menggunakan gammu versi yang lebih baru. Gammu memang sangat mudah digunakan dan mendukung banyak sekali fitur yang bisa dimanfaatkan, support untuk berbagai macam handphone juga sangat bagus, belum lagi lisensinya yang GPL membuat saya lebih jatuh cinta dengan gammu 🙂

Ada banyak pilihan ketika kita ingin membuat aplikasi SMS Gateway yang bisa autoreply. Mas Stieven Kalengkian menawarkan pendekatan dengan memanfaatkan scheduler task pada windows, sedangkan mas Rosihan Ari menawarkan pendekatan dengan memanfaatkan file php yang berjalan pada browser. Semuanya bisa berjalan dengan kelebihan dan kekurangannya masing – masing. Jika kita memanfaatkan scheduler task pada windows, maka pengecekan hanya bisa dilakukan untuk waktu yang telah diset. Apabila kita menambahkan file batch pada scheduler tiap menit rasanya itu sangat kurang efektif karena tidak real time dan itu juga menambah beban pada sisi server. Di sisi lain apabila kita memanfaatkan browser yang akan menjalankan file php dengan refresh per beberapa detik itu juga sangat memberatkan dari sisi browser, belum lagi banyak memori yang dihabiskan pada browser. Hal – hal seperti menjadi isu tersendiri bukan??

Saya mencoba untuk menawarkan pendekatan yang lebih baik lagi, yaitu dengan memanfaatkan fitur runonreceive pada file smsdrc yang ada pada gammu. Bagaimana cara kerjanya?? Oke, saya asumsikan file gammurc sudah dikonfigurasi. Selanjutnya kita buka file smsdrc, maka kita akan menemukan baris berikut :

# Script to be executed when new message has been received
#runonreceive = /some/script

Kita aktifkan opsi runonreceive tersebut kita isikan dengan sebuah batch file

# Script to be executed when new message has been received
runonreceive = D:/exec.bat #misalnya diisi seperti ini

Selanjutnya kita tinggal membuat file batch yang akan mengeksekusi file php yang akan membuat autoreply. Kita bisa menggunakan php CLI dalam file exec.bat tersebut.

# Isi file exec.bat
C:\wamp\php\php -f C:\wamp\www\proses.php

Oke, batch file sudah selesai dibuat dan konfigurasi smsdrc sudah selesai. Harusnya autoreply sudah bisa berjalan, sekarang kita hanya perlu membuat file proses.php yang akan mengirimkan balasan otomatis ketika ada sms masuk.

<?php
# File proses.php digunakan untuk mengirimkan reply ketika ada sms masuk
# Ini merupakan file POC, bisa disesuaikan sesuai kebutuhan
$sql = "SELECT ID, SenderNumber, TextDecoded FROM inbox WHERE processed = 'false'";
$qry = mysql_query($sql) or die(mysql_error());

while ($arr = mysql_fetch_array($qry)) {
       mysql_query("INSERT INTO outbox(DestinationNumber, TextDecoded) VALUES ('".$arr['SenderNumber']."', 'Halo, ini balasan sms anda.')") or die(mysql_error());

       mysql_query("UPDATE inbox SET processed='true' WHERE ID='".$arr['ID']."'");
}
?>

Setelah semuanya siap, kita tinggal jalankan saja servis Gammu secara default lewat perintah berikut :

gammu-smsd -c smsdrc

Lalu kita coba mengirim SMS, apa yang terjadi selanjutnya??? Jika ternyata SMS anda dibalas berarti anda sukses menerapkan runonreceive pada Gammu. Bila tidak?? silakan ulangi lagi tutorial diatas.

Semoga bermanfaat

Ayuk coding : Mengatasi error “Wrong datatype for second argument” pada fungsi in_array PHP

Mungkin error “Wrong datatype for second argument” pernah kita jumpai pada saat kita menggunakan fungsi in_array() pada PHP. Pertanyaannya adalah, mengapa error itu bisa terjadi padahal secara logika harusnya jalan?? Salah satu kekurangan pada PHP adalah tidak adanya strong data type sehingga kita bebas membuat variabel tanpa menentukan tipe datanya terlebih dahulu. Pada fungsi in_array(), error “Wrong datatype for second argument” akan dimunculkan apabila variabel yang kita cek dalam array bernilai NULL atau empty. Mengapa bisa terjadi demikian?? ini dikarenakan karena PHP tidak bisa mengenali tipe data yang digunakan pada saat kita membuat array.

Untuk mengatasi error ini, ada beberapa cara yang bisa dilakukan:

1. Membuat array sebagai variabel global. Kita tinggal menambahkan kata global di depan variabel array yang kita buat. Ada yang berhasil ketika menggunakan array sebagai variabel global akan tetapi ini sangat tidak disarankan karena berhubungan dengan masalah keamanan. Ex :

global $arr_buah = array('jeruk', 'pisang');

2. Memanfaatkan metode lain yang sama dengan fungsi in_array

$fast = array('apple' => 'apple', 'banana' => 'banana', 'orange' => 'orange');

if (isset($fast['banana']))
    echo 'wow,banana!';

Kalo saya biasanya lebih suka menggunakan metode yang kedua jika mengalami error pada saat menggunakan in_array() pada PHP. Pada metode yang kedua, dilakukan pengecekan terhadap array yang dicari, jika ditemukan maka akan dimunculkan, sebaliknya jika array yang dicari itu NULL atau empty maka bisa dijalankan error handling.

Semoga artikel yang sederhana ini bisa bermanfaat, happy coding 😀

Ayuk coding : Membuat Format Tanggal Indonesia dalam PHP

Mungkin seringkali terpikir oleh kita bagaimana cara menampilkan tanggal dari sebuah record tabel yang formatnya ‘YYYY-mm-dd’ ke dalam bentuk ‘Hari, tanggal bulan tahun’ ?  Sebagai contoh : di MySQL tanggal ‘2010-01-24′ dan kita ingin menampilkannya sebagai ‘Minggu, 24 Januari 2010′.

Banyak cara yang bisa digunakan, tinggal pilih mau yang susah atau yang mudah. Kalo yang susah bagaimana?? disini saya tidak mencoba untuk membahas yang susah karena biasanya yang susah sudah dilakukan oleh saudara – saudara sekalian.. hehehehe.. Di sini saya akan membahas bagian mudahnya, dengan mengadopsi script PHP dari Joomla.

Untuk menentukan format data tanggal kita tinggal membuat fungsi sebagai berikut :

function date2Ind($str) {
setlocale (LC_TIME, 'id_ID');
$date = strftime( "%A, %d %B %Y", strtotime($str));
return $date;
}

Kita hanya menggunakan beberapa fungsi dari PHP untuk membuat format tanggal yang kita inginkan, yaitu : setlocale, strftime, dan strtotime. Tidak terlalu sulit bukan?? Hanya ada beberapa sedikit konfigurasi pada bagian setlocale(), pada server windows LC_TIME menggunakan ‘Indonesian’ sedangkan pada server Linux LC_TIME menggunakan ‘id_ID’. Lalu bagaimana memanggilnya?? kita tinggal masukkan saja parameter fungsinya. Contoh penggunaannya sebagai berikut :

$date = date('Y-m-d');
echo(date2Ind($date));

Cukup mudah bukan?? semoga script sederhana ini bermanfaat dan bisa dimodifikasi sesuai dengan kebutuhan.

[POC] Menghitung kata terbanyak dalam artikel

Dari blognya mas Jimmi Kembaren saya mendapatkan source code untuk menghitung kata terbanyak dalam sebuah blog / website. Sourcenya kira – kira seperti ini :

$dt = array_count_values(explode(’ ‘,str_replace(’,',”,str_replace(’.',”,strtolower(strip_tags(implode(” “, file(’http://planet.kronologger.net’))))))));
arsort($dt);
print_r(array_slice($dt,0, 30));

Dari situ kita bisa mendapatkan daftar kata terbanyak dalam bentuk array. Lalu apakah yang bisa kita manfaatkan dari sini?? Dari source code itu saya mencoba untuk membuat meta keywords secara dinamis pada suatu artikel. Jadi ketika kita menjalankan request ke sebuah artikel tertentu maka meta keywords yang digunakan juga akan berubah.

Contoh POC-nya sebagai berikut :

<?php
function set_keywords($content) {
$dt = array_count_values(explode(' ',str_replace(',','',str_replace('.','',strtolower(strip_tags($content))))));
arsort($dt);

$ss = array_slice($dt,0, 30);

$str = '';
foreach ($ss as $m => $n) {
	if ($n >= 20) {
		$str .= $m.' ';
	}
}

$data = str_replace(array('{','=','()', '//'),'', $str);

return $data;
}
?>

saya buat fungsi set_keywords() dengan parameter $content yang merupakan isi artikel. Dalam source code itu saya cek jumlah kata – katanya apakah lebih besar dari 20, jika iya maka dimasukkan ke dalam meta keywords.

Contoh penggunaannya sebagai berikut :

<?php
$sql = mysql_query("SELECT * FROM artikel WHERE id='".$id."'") or die(mysql_error());
$row = mysql_fetch_array($sql);

$key = set_keywords($row['isi_artikel']);
?>

Mudah bukan?? semoga POC sederhana ini bisa bermanfaat bagi kita semua.

regards,