Saturday, January 8, 2011

PROGRAMMER CODE REVEALED: SMS Gateway Part 2

Pada bagian kedua akan dijelaskan programming untuk fungsi-fungsinya. Isinya sebagai berikut. Skrip ini ditulis di file sms.html.php


<?
defined( '_JEXEC' ) or die ( 'Restricted access' );
jimport('joomla.application.helper');
jTable::addIncludePath(JPath_ADMINISTRATOR.DS.'components'.DS.$option.DS.'tables');

class SMS
{

function tampilan()
{
?>
<table width="100%">
<tr>
<td>
<a href="index.php?option=com_sms&task=telepon">
<img border=0 src="components/com_sms/img/bcr.gif" onMouseOver="this.src='components/com_sms/img/bcra.gif';" onMouseOut="this.src='components/com_sms/img/bcr.gif';"><br>Telepon</a>
</td>
<td>

<a href="index.php?option=com_sms&task=sms">
<img border=0 src="components/com_sms/img/sms.gif" onMouseOver="this.src='components/com_sms/img/smsa.gif';" onMouseOut="this.src='components/com_sms/img/sms.gif';"><br>Nge SMS</a>
</td>

<td>
<a href="index.php?option=com_sms&task=daftar_sms">
<img border=0 src="components/com_sms/img/daftar_sms.gif" onMouseOver="this.src='components/com_sms/img/daftar_smsa.gif';" onMouseOut="this.src='components/com_sms/img/daftar_sms.gif';"><br>Baca SMS</a>
</td>

<td>
<a href="index.php?option=com_sms&task=backup">
<img border=0 src="components/com_sms/img/backup.png" onMouseOver="this.src='components/com_sms/img/backupa.png';" onMouseOut="this.src='components/com_sms/img/backup.png';"><br>Backup SMS</a>
</td>
</tr>
</table>



<?
}

//-------------------------------------------------------------------------------------
function telepon()
{
echo"
<form method='post' action='index.php?option=com_sms&task=proses_telepon'>
Masukin nomer yang dituju : <input type='text' name='no'>
<br>
<input type='submit' value='Call'>
<form>
";
}

//-------------------------------------------------------------------------
function proses_telepon()
{
$no=$_POST['no'];
$command="gammu --dialvoice $no >telepon.txt";
exec($command);
exec("exit(0)");
echo"
<input class='button' type='button' value='Tutup' onClick="javascript:window.location='index.php?option=com_sms&task=batal_telepon';">
";
}

//-------------------------------------------------------------------------------
function batal_telepon()
{
$command="gammu --cancelcall $no >telepon.txt";
exec($command);
exec("exit(0)");
echo"Telepon Dibatalkan, <a href='index.php?option=com_sms'>Kembali</a>";
}

//--------------------------------------------------------------------------------------
function daftar_sms()
{

if(!isset($_GET['page']))
{
$page = 1;
}
else
{
$page = $_GET['page'];
}

echo"
<table width='100%' border='1'>

<tr>
<td width='13%' bgcolor='#888888' align='center'><font face='verdana' size='-1' color='#FFFFFF'>Pengirim</td>
<td width='17%' bgcolor='#888888'align='center'><font face='verdana' size='-1' color='#FFFFFF'>Nomer</td>
<td width='22%' bgcolor='#888888'align='center'><font face='verdana' size='-1' color='#FFFFFF'>Waktu</td>
<td bgcolor='#888888'align='center'><font face='verdana' size='-1' color='#FFFFFF'>Isi</td>
<td bgcolor='#888888'align='center' width='5%'><font face='verdana' size='-1' color='#FFFFFF'>Balas</td>
<td bgcolor='#888888'align='center' width='5%'><font face='verdana' size='-1' color='#FFFFFF'>Hapus</td>
</tr>
";
$max_results =64;
$from = (($page * $max_results) - $max_results);

$cari="select *from inbox order by ReceivingDateTime DESC LIMIT $from, $max_results";
$query=mysql_query($cari);
while($data=mysql_fetch_array($query))
{
echo"
<tr>
<td><font face='verdana' size='-1'>";
$telp=$data[SenderNumber];
$center=$data[SMSCNumber];
if($telp=='INDOSAT'){echo"InDoSAT";}
elseif($telp=='M-Tronik'){echo"M-Tronik";}
else
{
$cr="select *from buku_telepon where no_telp=$telp";
$q=mysql_query($cr);
While($dt=mysql_fetch_array($q))
{

echo"$dt[nama]";
}
}
echo"</td>
<td><font face='verdana' size='-1'>$data[SenderNumber]</td>
<td><font face='verdana' size='-1'>$data[ReceivingDateTime]</td>
<td><font face='verdana' size='-1'>$data[TextDecoded]</td>
<td><font face='verdana' size='-1'><a href='index.php?option=com_sms&task=menulis_sms&no_telp=$data[SenderNumber]'>Balas</td>
<td><font face='verdana' size='-1'><a href='index.php?option=com_sms&task=hapus_sms&id=$data[ID]'>Hapus</td>
";
}
echo"</tr></table></font><br>";
$total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM inbox"),0);
$total_pages = ceil($total_results / $max_results);

echo "<center>[Page]<br>";


if($page > 1)
{
$prev = ($page - 1);
echo "<a href="".$_SERVER['PHP_SELF']."?option=com_sms&task=daftar_sms&page=$prev">&lt;&lt;Kembali</a> ";
}

for($i = 1; $i <= $total_pages; $i++)
{
if(($page) == $i)
{
echo "$i ";
}
else
{
echo "<a href="".$_SERVER['PHP_SELF']."?option=com_sms&task=daftar_sms&page=$i">$i</a> ";
}
}
if($page < $total_pages)
{
$next = ($page + 1);
echo "<a href="".$_SERVER['PHP_SELF']."?option=com_sms&task=daftar_sms&page=$next">More>></a>";
}

$golek="SELECT COUNT(*) FROM inbox";
$query=mysql_query($golek);
$count=mysql_fetch_array($query);
$countnya=$count[0];
echo"<br>
<br>
Anda Mempunyai $countnya Message";

}

//--------------------------------------------------------------------------------------
function backup_sms()
{
$command="gammu --smsd MYSQL smsdrc > inboxsms33.txt";
exec($command);
## nothing worked for me until I added this next line.
exec("exit(0)");
echo"Proses Memback Up SMS Ke Computer, Sabar Yaaa.......!
<a href='index.php?option=com_sms'>Kembali</a>";
}

//--------------------------------------------------------------------------------
function nulis_sms()
{
echo"
<form action='index.php?option=com_sms&task=kirim_sms' method='post'>
<table width='100%' border='0'>
<tr>
<td width='15%'>
Isi Pesan
</td>

<td width='5%'>
:
</td>

<td>
<textarea name='isi' cols='30' rows='5'>
</textarea>
</td>
</tr>

<tr>
<td width='15%' >
No Telepon
</td>

<td width='5%'>
:
</td>

<td>
<select name='no'>
<option value=''>Cari</option>
";
$telp="select *from buku_telepon order by nama";
$query=mysql_query($telp);
while($data=mysql_fetch_array($query))
{
echo"<option value='$data[no_telp]'>$data[nama] , $data[no_telp]</option>";
}
$tgl=DATE('Y-m-d');
echo"
</select>
</td>
</tr>

<tr>
<td colspan='3' align='center'>
<input type='hidden' name='tgl' value='$tgl'>
<input type='submit' value='KIRIM'>
</td>
</tr>
</table>
</form>
";
}

//-------------------------------------------------------------------------------------
function kirim_sms()
{

$isi=$_POST['isi'];
$tgl=$_POST['tgl'];
$no=$_POST['no'];
$db=& JFactory::getDBO();
$masuk="INSERT INTO #__outbox values('', '$isi', '$no','$tgl')";
$db->setQuery( $masuk);
$masuk1=($db->query());

$command="echo $isi | gammu --sendsms TEXT $no";
exec($command);
exec("exit(0)");
if($command or $masuk1)
{
echo"SMS sudah Terkiriiiiiiiiiiimm............!!!!
<a href='index.php?option=com_sms'>Kembali</a>";
}

else
{
echo"SMS gagal terkirim";
}
}

//-----------------------------------------------------------------------
function outbox()
{

if(!isset($_GET['page']))
{
$page = 1;
}
else
{
$page = $_GET['page'];
}

echo"
<table width='100%' border='1'>

<tr>
<td width='15%' bgcolor='#888888'align='center'><font face='verdana' size='-1' color='#FFFFFF'>Tanggal</td>
<td width='50%' bgcolor='#888888'align='center'><font face='verdana' size='-1' color='#FFFFFF'>Isi</td>
<td bgcolor='#888888'align='center'><font face='verdana' size='-1' color='#FFFFFF'>Tujuan</td>
</tr>
";
$max_results = 10;
$from = (($page * $max_results) - $max_results);

$db=& JFactory::getDBO();
$golek="select *from jos_outbox order by id DESC LIMIT $from, $max_results";
//$q=mysql_query($golek);
//while($data=mysql_fetch_array($q))
$db->setQuery($golek);
$cr= $db->loadObjectList();
foreach($cr as $data)
{
echo"
<tr>
<td><font face='verdana' size='-1'>$data->tgl</td>
<td><font face='verdana' size='-1'>$data->isi</td>
<td>
<font face='verdana' size='-1'>";
$notelp=$data->no;
$a="SELECT *FROM buku_telepon where no_telp like '%$notelp%'";
$q=mysql_query($a);
while($data=mysql_fetch_array($q))
{
echo"$data[nama]";
}

echo" $notelp
</td>

";
}
echo"</tr></table></font><br>";
$total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM jos_outbox"),0);
$total_pages = ceil($total_results / $max_results);

echo "<center>[Page]<br>";


if($page > 1)
{
$prev = ($page - 1);
echo "<a href="".$_SERVER['PHP_SELF']."?option=com_sms&task=outbox&page=$prev">&lt;&lt;Kembali</a> ";
}

for($i = 1; $i <= $total_pages; $i++)
{
if(($page) == $i)
{
echo "$i ";
}
else
{
echo "<a href="".$_SERVER['PHP_SELF']."?option=com_sms&task=outbox&page=$i">$i</a> ";
}
}
if($page < $total_pages)
{
$next = ($page + 1);
echo "<a href="".$_SERVER['PHP_SELF']."?option=com_sms&task=outbox&page=$next">More>></a>";
}
$golek="SELECT COUNT(*) FROM jos_outbox";
$query=mysql_query($golek);
$count=mysql_fetch_array($query);
$countnya=$count[0];
echo"<br>
<br>
Yang Sudah Terkirim $countnya Message";

}

//---------------------------------------------------------------------------------
function buku_telepon()
{
if(!isset($_GET['page']))
{
$page = 1;
}
else
{
$page = $_GET['page'];
}

echo"
<table width='100%'>
<tr>
<td width='30%'>Nama</td>
<td>No Telpon</td>
<td width='20%'>Kirim SMS</td>
</tr>
<tr>
";
$max_results = 10;
$from = (($page * $max_results) - $max_results);
$telp="select *from buku_telepon order by nama LIMIT $from, $max_results";
$query=mysql_query($telp);
while($data=mysql_fetch_array($query))
{
echo"
<td>$data[nama]</td>
<td>$data[no_telp]</td>
<td><a href='index.php?option=com_sms&task=menulis_sms&no_telp=$data[no_telp]'>SMS</a></td>
</tr>

";
}
echo"</table>";

$total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM buku_telepon"),0);
$total_pages = ceil($total_results / $max_results);

echo "<center>[Page]<br>";


if($page > 1)
{
$prev = ($page - 1);
echo "<a href="".$_SERVER['PHP_SELF']."?option=com_sms&task=buku_telepon&page=$prev">&lt;&lt;Kembali</a> ";
}

for($i = 1; $i <= $total_pages; $i++)
{
if(($page) == $i)
{
echo "$i ";
}
else
{
echo "<a href="".$_SERVER['PHP_SELF']."?option=com_sms&task=buku_telepon&page=$i">$i</a> ";
}
}
if($page < $total_pages)
{
$next = ($page + 1);
echo "<a href="".$_SERVER['PHP_SELF']."?option=com_sms&task=buku_telepon&page=$next">More>></a>";
}
$golek="SELECT COUNT(*) FROM buku_telepon";
$query=mysql_query($golek);
$count=mysql_fetch_array($query);
$countnya=$count[0];
echo"<br>
<br>
Anda punya $countnya teman
<br>
<br>
</center>
Tambah Teman:
<br>
<form method='post' action='index.php?option=com_sms&task=tambah_buku'>
Nama : <input type='text' name='nama'>
&nbsp;&nbsp;&nbsp;
No Telpon: <input type='text' name='no_telp'>
<input type='submit' value='simpan' class='button'>
";
}
//--------------------------------------------------------------------------------

function tambah_buku()
{
$nama=$_POST['nama'];
$no_telp=$_POST['no_telp'];
$masuk=mysql_query("insert into buku_telepon values('$no_telp','$nama')");
if ($masuk)
{echo"Data Sudah Masuk, <a href='index.php?option=com_sms&task=buku_telepon'>Kembali</a>";}
else
{
echo"Data hancur";}
}

//---------------------------------------------------------------------------------
function menulis_sms()
{
$no_telp=$_GET['no_telp'];
$isi="IdulFitriBknHy UdRyakanTp u dGali.MeskiAkhirDlmPenggalianTpTdkBsMnemuknAp2.tpMaknayaAknBcucuranBrsamaanKringatYqtKluarkanKtikaQtmlakuknPenggalian";
echo"
<form action='index.php?option=com_sms&task=kirim_sms' method='post'>
<table width='100%' border='0'>
<tr>
<td width='15%'>
Isi Pesan
</td>

<td width='5%'>
:
</td>

<td>
<textarea name='isi' cols='30' rows='5'>$isi</textarea>
</td>
</tr>

<tr>
<td width='15%' >
No Telepon
</td>

<td width='5%'>
:
</td>

<td>
<input type='text' name='no' value='$no_telp'>";

$tgl=DATE('Y-m-d');

echo"
</td>
</tr>

<tr>
<td colspan='3' align='center'>
<input type='hidden' name='tgl' value='$tgl'>
<input type='submit' value='KIRIM'>
</td>
</tr>
</table>
</form>
";
}


//-------------------------------------------------------------------------------------


function proses_mengirim_sms()
{
$isi=$_POST['isi'];
$tgl=$_POST['tgl'];
$no=$_POST['no'];
$db=& JFactory::getDBO();
$masuk="INSERT INTO #__outbox values('', '$isi', '$no_telp','$tgl')";
$db->setQuery( $masuk);
$masuk1=($db->query());

$command="echo $isi | gammu --sendsms TEXT $no";
exec($command);
exec("exit(0)");
if($command or $masuk1)
{
echo"SMS sudah Terkiriiiiiiiiiiimm............!!!!
<a href='index.php?option=com_sms'>Kembali</a>";
}

else
{
echo"SMS gagal terkirim";
}
}
function hapus_sms()
{
$id=$_GET['id'];
$hapus=mysql_query("DELETE FROM inbox where ID=$id");
if($hapus){echo"Data telah Terhapus, <a href='index.php?option=com_sms&task=daftar_sms'>Kembali</a>";}
else
{echo"Data Belum Terhapus";}
}

}

Buat Komponen Joomla Part 3

Pada artikel kali ini, mungkin ruwet mungkin juga ndak. Jadi tergantung otak kalian dech. Tapi, biasanya programmer tuh emang pinter-pinter pasti ngerti.

Lihat Data:
$db2=& JFactory::getDBO();
$query="SELECT *FROM #__nyoba order by id DESC";
$db2->setQuery($query);
$brs= $db2->loadObjectList(); // seperti di php, mysql_fetch_array

Trus kalo mau nampilin datanya
foreach( $brs as $data) // ini kalo dip hp seperti: if () atau while
{
echo"
“;
}

Nyari nilai maksimal dari field contohnya gini:
$cari="SELECT MAX(id) FROM #__nyoba order by id DESC"; // MAX bisa diganti MIN, SUM, AVG, dll
$db->setQuery($cari);
$total = $db->loadResult(); // lha ini kalo di php: mysql_result

Contoh tersebut bisa saja kita cari AVG(average/rata-rata), MIN, SUM. Tinggal ganti fungsi mysql nya. (Ngerti khannn…).

Mungkin dalam pemrograman aplikasi web based via joomla fungsi-fungsi yang sering digunakan Cuma itu saja. Guampang khan???? Apanya sih yang susah.

Oke di artikel-artikel yang akan datang akan di bahas komponen-komponen joomla yang udah aku buat untuk perusahaan-perusahaan yang pernah aku kerja. Disini, di blog ini program-program besar dan kompleks dan rahasia akan diungkap.

PROGRAMMER CODE REVEALED…… coming soon….

Gak mau kalah sama acara yang ada pesulap ngungkapin rahasia para pesulap dunia. Hehehehe....

PROGRAMMER CODE REVEALED: SMS Gateway Part 1 for Joomla

Untuk membuat komponen SMS Gateway diperlukan software gammu (opensource loh). Untuk cara nyetting hp liat aja di tutorial gammu. Untuk programmingnya liat aja disini.
Catatan: baca dulu artikel-artikel sebelumnya (Cara membuat komponen joomla).

jadi ini buat komponen joomla. pertama kita buat file sms.php, yang isinya:

<?
$user=& JFactory::getUser();
$id=$user->id;
$usertype=$user->usertype;
defined( '_JEXEC' ) or die ( 'Restricted access' );
jimport('joomla.application.helper');
require_once(JApplicationHelper::getPath('html'));
jTable::addIncludePath(JPath_ADMINISTRATOR.DS.'components'.DS.$option.DS.'tables');
$task=$_GET['task'];
$id=$_GET['id'];

echo"<center><div class='componentheading'><font id='glowtext'>My SMS Gateway</font></div></center><br>";

if($usertype=='')
{
switch($task)
{
case 'tampilan':
SMS::tampilan($option);
break;

case 'telepon':
SMS::telepon($option);
break;
case 'proses_telepon':
SMS::proses_telepon($option);
break;
case 'batal_telepon':
SMS::batal_telepon($option);
break;

case 'sms':
SMS::nulis_sms($option);
break;
case 'kirim_sms':
SMS::kirim_sms($option);
break;
case 'menulis_sms':
SMS::menulis_sms($option);
break;
case 'proses_mengirim_sms':
SMS::proses_mengirim_sms($option);
break;
case 'daftar_sms':
SMS::daftar_sms($option);
break;
case 'hapus_sms':
SMS::hapus_sms($option);
break;
case 'backup':
SMS::backup_sms($option);
break;


case 'get_page':
SMS::get_page($option);
break;
case 'limit_foot':
SMS::limit_foot($option);
break;

case 'outbox':
SMS::outbox($option);
break;

case 'buku_telepon':
SMS::buku_telepon($option);
break;
case 'tambah_buku':
SMS::tambah_buku($option);
break;

default:
SMS::tampilan($option);
break;
}}
?>

Buat Komponen Joomla Part 2

Sebelumnya, buat komponen joomla secara sederhana. Nah, sekarang yuk buat komponen joomla yang manfaatin database. Guampang loh, jangan lupa baca basmallah, untuk agama lain terserah yang penting doa sebelum bekerja. Biar diberkahi sama yang di atas.

Langkah Pertama:
Buat tabel di database joomla. Karena sebelumnya kita buat komponen nyoba. Maka dari itu kita buat tabel nyoba. Tapi kita nama in tabelnya sebagai jos_nyoba. Jangan lupa.

Field-fieldnya sederhana sajalah. Id, judul, komentar.

Langkah kedua:
Buat programmingnya.
Kita urek-urek di file nyoba.php dan nyoba.html.php.

Pada file nyoba.php

Tambahkan perulangan
case 'form:
nyoba::form($option);
break;

pada file nyoba.html.php
tambahkan fungsi form:

form()
{
Echo”
<form method=’post’ action=’index.php?option=com_nyoba&task=insert’>
Masukkan judul = <input type=’text’ name=’judul’>
<br>
Masukkan komentar = <input type=’text’ name=’komentar’>
<input type=’submit’ value=’proses’>
</form>
”;
}
Langkah Ketiga
Tambahkan perulangan di file nyoba.php:
case insert:
nyoba::insert($option);
break;
tambahkan fungsi insert di file nyoba.html.php

$judul=$_POST[“judul”];
$komentar=$_POST[“komentar”];
$db=& JFactory::getDBO();

$masuk="INSERT INTO #__nyoba values('$id', '$judul', '$komentar')";
$db->setQuery( $masuk);
$mlebu=($db->query());
If($mlebu){
Echo”Data Sudah Masuk”;}

Else
{echo”ERROR”;}

<b>PENJELASAN</b>
$db=& JFactory::getDBO();
Memanggil class dan fungsi yang berfungsi koneksi ke database.
Kalo di php kayak gini: mysql_connect("localhost","root","");
mysql_select_db("jos_nyoba");

#__nyoba
Kalo di joomla #_ berarti nama depan tabel. Disini namanya jos jadi #_ = jos. Kalo teman-teman pake bukan jos (Misalnya, jono), maka setiap tabel yang kita buat sendiri pake nama kayak gini: jono_nyoba. Lebih keren khan????....

$db->setQuery( $masuk);
$mlebu=($db->query());

Nih fungsinya kayak di bahasa php mysql_query.
Untuk UPDATE, SELECT, DELETE. Sama aja khan tinggal diganti fungsi mysql.

Ada juga fungsi-fungsi pengolahan database loh. Tapi, saksikan di artikel selanjutnya yach....


Semua wanita boleh mempermainkan aku, menolak cintaku, memutuskanku. Namun, jika sudah menikah dan ada orang bertanya siapa lelaki pecinta yang terbaek??? Jangan sebut namaku.....

My Curriculum Vitae

Identitas
Nama: Muis Arghiansyah Gumawang Putra
Tempat Lahir: Bangkalan
Tanggal Lahir: 13 – 02 – 1987
Agama : Islam
Jenis Kelamin : Laki-laki
IPK : 3.06
Alamat : Griya Permata Alam DE. 17 Karangploso – Malang
No HP: 085736065416

Pendidikan Formal
1991-1993 TK Handayani 1 Kamal – Bangkalan
1993- 1997 SDN Banyuajuh 3 Kamal – Bangkalan
1997 – 1999 SDN Girimoyo 1 Karangploso – Malang
1999-2002 SLTP N 4 Malang
2002-2005 SMAN 9 Malang
2005-2008 Politeknik Negeri Malang
2009-belum lulus Universitas Gajayana Malang

Pendidikan Non Formal
2005 English (ILP Malang)

Pengalaman Kerja
1. Praktek Kerja Lapangan (PKL) di Pemerintah Kabupaten Malang Instansi Bagian Pengelolaan Data Elektronik (Juli – Agustus 2007). Sebagai programmer web.
2. CV. Duta Karya sebagai web programmer (Oktober 2008 – Februari 2009), bertanggungjawab membuat dan mengelola web online-dutakarya.com
3. CV. Radian Multi Prima sebagai web programmer (Mei 2009 – September 2009), bertanggung jawab membuat dan mengelola web rumahapel.com
4. Freelance sebagai web programmer membuat web (hiferimalang.com, pogicabangmalang.com dan pendaftaran online). (Februari 2010 – Agustus 2010).

Thursday, January 6, 2011

Buat Komponen Joomla

Kali ini ku mau kasih tau caranya bikin komponen joomla. Kalo gak mau ku kasih tau ya udah gak papa. Oke, sebetulnya bikin komponen joomla tuh guampang banget, yang penting belajar dulu, yaiyalahhhh...... alias ngerti bahasa PHP slaen ntu dikit-dikit paham OOP an pake PHP. Ya udah langsung aja yah.

Langkah Pertama:
Tentukan kita mau buat komponen apa. Namanya apa. Misalnya komponen nyoba. Kita buat folder com_nyoba di folder nama_web/components. Habis ntu, bikin file kosong dulu. 2 loh, file nyoba.php dan juga file nyoba.html.php.

Oke begini, file nyoba.php adalah file daftar class ataupun fungsi. Sedangkan fungsi-fungsinya sendiri kita buat di file nyoba.html.php. Makanya, ku kan udah bilang, emang harus ngerti dikit-dikit tentang OOP.

Langkah Kedua:
Buka pada file nyoba.php. Kita isi dengan tulisan berikut:

defined( '_JEXEC' ) or die ( 'Restricted access' );
jimport('joomla.application.helper');
require_once(JApplicationHelper::getPath('html'));
jTable::addIncludePath(JPath_ADMINISTRATOR.DS.'components'.DS.$option.DS.'tables');

Jangan lupa awal dan akhir file dikasih <?php ?>.
Tuh maksud tulisan di atas apaan sih????? Aku sendiri aja ndak tau. Hehehe.... tapi menurut pandangan ples penalaranku ples naluri programmingku itu adalah sebuah include-an. Yang mana mengarah pada nyoba.html.php.

Kesimpulan: dari 2 file nyoba.php dan nyoba.html.php bisa dijadikan satu di file nyoba.php. TETAPI, hal tersebut akan mempersulit diri programmer karena jika fungsi-fungsi yang dimuntahkan dalam skrip banyak, kalo ada yang salah siap-siap aja pusing. Maka dari itu, lebih baik dijadikan 2 file.

Dari sini Anda masih bingung??? Atau sudah mengerti? Kita lanjutkan ke langkah ketiga.

Langkah Ketiga:
Masukkan tulisan di bawah ini ke file nyoba.html.php

defined( '_JEXEC' ) or die ( 'Restricted access' );
jimport('joomla.application.helper');
jTable::addIncludePath(JPath_ADMINISTRATOR.DS.'components'.DS.$option.DS.'tables');


Langkah Keempat (Lha ini mulai seru):
Buka file nyoba.php. tulis di bawah include-an.
Kita buat semacem perulangan switch-case.

switch($task)
{


case 'home':
nyoba::home($option);
break;

default:
nyoba::home($option);
break;
}

Pasti yang pinter udah ngerti maksudnya apa. Tapi yang belum ngerti (brarti belom pinter...) ku kasih tau.
Switch($task), dianggap sebagai link ke mana.....
Baru ada case. Jika kita pilih home langsung masuk ke class nyoba fungsi home. Nah begitu penjelasannya. Masih bingung???? Coba tanyakan saja pada rumput yang bergoyang….
Sedangkan isi atau programming dari class nyoba fungsi home kita urek-urek di file nyoba.html.php.

Langkah Kelima:
Kita buat skrip di file nyoba.html.php.
Kita tulis class dan fungsi di bawah include-an.

class nyoba
{
Function home()
{
Echo”hallo…..”;
}

}

Langkah Keenam (databasenya):
Buka phpmyadmin, buka database joomla, buka table components. Pilih insert.
Name --- nama komponen (nyoba)
Link --- linknya di web (option=com_nyoba)
Menuid --- 0
Parent --- 0
admin_menu_link --- option=com_nyoba
Admin_menu_alt --- Percobaan
Option --- com_nyoba
Ordering --- 0
Admin_menu_img --- js/ThemeOffice/edit.png
Iscore --- 0
Params ---
Enabled --- 1

Lha kenapa melakukan seperti itu pada database. Agar komponen yang dibuat didaftar dimasukkan di database pada joomla. Selanjutnya, untuk memanggil komponen. Kita menuju langkah ketujuh.

Langkah Ketujuh:
Masuk ke administrator joomla. Buat eksternal link. Buat Menu baru, Nyoba. Link nya kita isi dengan index.php?option=com_nyoba.
Lha coba klik Nyoba pasti muncul. Kalo gak muncul????? Anda kurang beruntung...
Mungkin cukup segini untuk pembuatan komponen joomla tingkat database alias kompleks dapat diliat artikel selanjutnya.

Semua perusahaan, orang, instansi berhak gak nerima ku kerja. Berhak ngasih bayaran kecil. Tapi, yang ndak boleh, kalo ada orang nanya sapa sih programmer terbaek? Jangan jawab namaku......

Web Based

Web based alias aplikasi berbasis web itu gimana sich. Ne ku dapet dari wikipedia, Dalam rekayasa perangkat lunak, suatu aplikasi web (bahasa Inggris: web application atau sering disingkat webapp) adalah suatu aplikasi yang diakses menggunakan penjelajah web melalui suatu jaringan seperti Internet atau intranet. Ia juga merupakan suatu aplikasi perangkat lunak komputer yang dikodekan dalam bahasa yang didukung penjelajah web (seperti HTML, JavaScript, AJAX, Java, dll) dan bergantung pada penjelajah tersebut untuk menampilkan aplikasi.

Aplikasi web menjadi populer karena kemudahan tersedianya aplikasi klien untuk mengaksesnya, penjelajah web, yang kadang disebut sebagai suatu thin client (klien tipis). Kemampuan untuk memperbarui dan memelihara aplikasi web tanpa harus mendistribusikan dan menginstalasi perangkat lunak pada kemungkinan ribuan komputer klien merupakan alasan kunci popularitasnya. Aplikasi web yang umum misalnya webmail, toko ritel daring, lelang daring, wiki, papan diskusi, weblog, serta MMORPG.

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas

Black Box Testing

Metode ujicoba blackbox memfokuskan pada keperluan fungsional dari software. Karna itu ujicoba blackbox memungkinkan pengembang software untuk membuat himpunan kondisi input yang akan melatih seluruh syarat-syarat fungsional suatu program. Ujicoba blackbox bukan merupakan alternatif dari ujicoba whitebox, tetapi merupakan pendekatan yang melengkapi untuk menemukan kesalahan lainnya, selain menggunakan metode whitebox.

Ujicoba blackbox berusaha untuk menemukan kesalahan dalam beberapa kategori, diantaranya :

1. Fungsi-fungsi yang salah atau hilang
2. Kesalahan interface
3. Kesalahan dalam struktur data atau akses database eksternal
4. Kesalahan performa
5. kesalahan inisialisasi dan terminasi

Tidak seperti metode whitebox yang dilaksanakan diawal proses, ujicoba blackbox diaplikasikan dibeberapa tahapan berikutnya. Karena ujicoba blackbox dengan sengaja mengabaikan struktur kontrol, sehingga perhatiannya difokuskan pada informasi domain.
Ujicoba didesain untuk dapat menjawab pertanyaanpertanyaan berikut :

1. Bagaimana validitas fungsionalnya diuji?
2. Jenis input seperti apa yang akan menghasilkan kasus uji yang baik ?
3. Apakah sistem secara khusus sensitif terhadap nilai input tertentu ?
4. Bagaimana batasan-batasan kelas data diisolasi?
5. Berapa rasio data dan jumlah data yang dapat ditoleransi oleh sistem?
6. Apa akibat yang akan timbul dari kombinasi spesifik data pada operasi sistem?

Dengan mengaplikasikan ujicoba blackbox, diharapkan dapat menghasilkan sekumpulan kasus uji yang memenuhi kriteria berikut :

  • kasus uji yang berkurang, jika jumlahnya lebih dari 1, maka jumlah dari ujikasus tambahan harus didesain untuk mencapai ujicoba yang cukup beralasan

  • Kasus uji yang memberitahukan sesuatu tentang keberadaan atau tidaknya suatu jenis kesalahan, daripada kesalahan yang terhubung hanya dengan suatu ujicoba yang spesifik.



  • Equivalence Partioning

    Equivalence partioning merupakan metode ujicoba blackbox yang membagi domain input dari program menjadi beberapa kelas data dari kasus ujicoba yang dihasilkan. Kasus uji penanganan single yang ideal menemukan sejumlah kesalahan (misalnya : kesalahan pemrosesan dari seluruh data karakter) yang merupakan syarat lain dari suatu kasus yang dieksekusi sebelum kesalahan umum diamati. Equivalence partioning berusaha untuk mendefinisikan kasus uji yang menemukan sejumlah jenis kesalahan, dan mengurangi jumlah kasus uji yang harus dibuat. Kasus uji yang didesain untuk Equivalence partioning berdasarkan pada evaluasi dari ekuivalensi jenis/class untuk kondisi input. Class-class yang ekuivalen merepresentasikan sekumpulan keadaan valid dan invalid untuk kondisi input. Biasanya kondisi input dapat berupa spesifikasi nilai numerik, kisaran nilai, kumpulan nilai yang berhubungan atau kondisi boolean.
    Ekuivalensi class dapat didefinisikan dengan panduan berikut :

  • Jika kondisi input menspesifikasikan kisaran/range, maka didefinisikan 1 yang valid dan 2 yang invalid untukequivalence class

  • Jika kondisi input memerlukan nilai yang spesifik, maka didefinisikan 1 yang valid dan 2 yang invalid untuk equivalence class

  • Jika kondisi input menspesifikasikan anggota dari himpunan, maka didefinisikan 1 yang valid dan 1 yang invalid untuk equivalence class

  • Jika kondisi input adalah boolean, maka didefinisikan 1 yang valid dan 1 yang invalid untuk equivalenceclass


  • Misalkan, terdapat data terpelihara untuk sebuah aplikasi perbankan otomatis. User dapat mengaksesnya dari komputer pribadinya dengan menyediakan password 6 digit, dan mengikuti serangkaian perintah keyword yang mengakses berbagai fungsi perbankan.


    Boundary Value Analysis

    Sejumlah besar kesalahan cenderung terjadi dalam batasan domain input dari pada nilai tengah. Untuk alasan ini boundary value analysis (BVA) dibuat sebagai teknik ujicoba. BVA mengarahkan pada pemilihan kasus uji yang melatih nilai-nilai batas. BVA merupakan desain teknik kasus uji yang melengkapi equivalence partitioning. Dari pada memfokuskan hanya pada kondisi input, BVA juga menghasilkan kasus uji dari domain output.

    Panduan untuk BVA hampir sama pada beberapa bagian seperti yang disediakan untuk equivalence partitioning :

  • Jika kondisi input menspesifikasikan kisaran yang dibatasi oleh nilai a dan b, kasus uji harus dibuat dengan nilai a dan b, sedikit diatas dan sedikit dibawah a dan b

  • Jika kondisi input menspesifikasikan sejumlah nilai, kasus uji harus dibuat dengan melatih nilai maksimum dan minimum, juga nilai-nilai sedikit diatas dan sedikit dibawah nilai maksimum dan minimum tersebut.

  • Aplikasikan panduan 1 dan 2 untuk kondisi output. Sebagai contoh, asumsikan tabel temperatur VS tabel tekanan sebagai output dari program analisis engineering. Kasus uji harus didesain untuk membuat laporan output yang menghasilkan nilai maksimum(dan minimum) yang mungkin untuk tabel masukan

  • Jika struktur data program internal telah mendeskripsikan batasan (misal : array ditetapkan maks. 100), maka desain kasus uji yang akan melatih struktur data pada batasan tersebut.


  • Kebanyakan pengembang software secara intuitif melakukan BVA pada beberapa tingkatan. Dengan mengaplikasikan panduan diatas, ujicoba batasan akan lebih lengkap, selain itu memiliki kemungkinan pendeteksian kesalahan yang lebih tinggi.


    Cause-Effect Graphing Techniques

    Caeuse-effect graphing merupakan desain teknik kasus ujicoba yang menyediakan representasi singkat mengenai kondisi logikal dan aksi yang berhubungan. Tekniknya mengikuti 4 tahapan berikut :

  • Causes (kondisi input), dan Effects (aksi) didaftarkan untuk modul dan identifier yang dtujukan untuk masing-masing

  • Causes-effect graph (seperti pada gambar dibawah) dibuat

  • Graph dikonversikan kedalam tabel keputusan

  • Aturan tabel keputusan dikonversikan kedalam kasus uji


  • Versi sederhana dari simbol graph cause-effect seperti dibawah ini. Terdapat hubungan causes ci dengan effects ei. Lainnya merupakan batasan relationship yang dapat diaplikasikan pada causes maupun effects.


    Comparison Testing

    Dalam beberapa situasi (seperti : aircraft avionic, nuclear power plant control) dimana keandalan suatu software amat kritis, beberapa aplikasi sering menggunakan software dan hardware ganda (redundant). Ketika software redundant dibuat, tim pengembangan software lainnya membangun versi independen dari aplikasi dengan menggunakan spesifikasi yang sama. Setiap versi dapat diuji dengan data uji yang sama untuk memastikan seluruhnya menyediakan output yang sama. Kemudian seluruh versi dieksekusi secara paralel dengan perbandingan hasil real-time untuk memastikan konsistensi.

    Dianjurkan bahwa versi independen suatu software untuk aplikasi yang amat kritis harus dibuat, walaupun nantinya hanya satu versi saja yang akan digunakan dalam sistem. Versi independen ini merupakan basis dari teknik black box testing yang disebut comparison testing atau back-to-back testing. Ketika multiple implementasi dari spesifikasi yang sama telah diproduksi, kasus uji didesain dengan menggunakan teknik black box yang lain (misalkan equivalence partitioning) disediakan sebagai input untuk setiap versi dari software. Jika setiap outputnya sama, diasumsikan implementasinya benar, jika tidak, setiap versi di periksa untuk menentukan jika kerusakan terdapat pada satu atau lebih versi yang akan bertanggung jawab atas perbedaan tersebut.

    Jika setiap spesifikasi dari seluruh versi telah dibuat dalam kesalahan, maka seluruh versi akan merefleksikan kesalahan. Sebagai tambahan, jika setiap versi independent memberikan hasil identik, tetapi salah, ujicoba hasil dan kondisi akan gagal untuk mendeteksi kesalahan.


    Ujicoba Untuk Sistem Real Time

    Karakteristik khusus untuk sistem realtime memberikan tantangan tersendiri ketika ujicoba dilaksanakan. Ketergantungannya dengan waktu, sifat alami dari beberapa aplikasi yang tidak sinkron, menambah kesulitan baru dan potensial sebagai elemen untuk ujicoba dengan waktu beragam. Tidak hanya ujicoba whitebox maupun blackbox, tetapi juga ketepatan waktu pengiriman data dan pemrosesan paralel.

    Contohnya software realtime yang mengontrol mesin fotocopy, yang dapat menerima interupsi dari operator (berupa penekanan tombol ‘RESET’ atau ‘DARKEN’ ) dengan tanpa kesalahan ketika mesin sedang berjalan (‘COPYING’ state). Operator yang sama akan menginterupsi, ketika mesin nberada dalam posisi ‘jamned’.

    Sebegai tambahan, keterkaitan antara software real time dengan perangkat keras pendukungnya juga dapat menyebabkan masalah dalam ujicoba. Ujicoba software harus mempertimbangkan kesalahan perangkat keras yang disebabkan karena pemrosesan software. Belum ada uji kasus yang komprehensif yang dikembangkan untuk sistem realtime, tetapi 4 langkah strategi berikut dapat dilaksanakan :

  • Task Testing, yaitu dengan mengujicobakan setiap task secara independen. Dalam hal ini metode whitebox dan blckbox testing dapat digunakan untuk menemukan kesalahan logika dan kesalahan fungsional, tetapi untuk kesalahan ketepatan waktu dan prilaku software (timing or behavioral errors), tidak dapat terdeteksi.

  • Behavioral Testing, dengan menggunakan model sistem dengan CASE tool, memungkinkan untuk mensimulasikan prilaku sistem realtime dan menentukannya sebagai konsekwensi dari peristiwa eksternal. Aktivitas analisis ini dapat dilaksanakan sebagai dasar untuk desain kasus uji yang diadakan ketika sebuah sistem realtime berhasil dibuat. Dengan menggunakan teknik yang sesuai (seperti equivalence partitioning), event dikategorikan (misalnya : interrupts, control signals, data), misalkan event pada sebuah buah mesin fotocopy dapat berupa interupsi dari user (‘reset counter’), interupsi mekanikal (‘paper jamned’), interupsi sistem (‘toner low’), dan kesalahan bentuk (‘overheated’). Setiap kesalahan yang terjadi diuji secara individual, dan prolaku executable sistem diperiksa. Prilaku software diperiksa untuk menentukan apakah terdeteksi kesalahan prilaku sistem

  • Intertask Testing, ketika sebuah kesalahan dari individual task berhasil diisolasi, ujucoba berlanjut kepada kesalahan pada waktu yang terkait. Task yang tidak sinkron yang berkomunikasi dengan task lainnya diuji dengan beberapa data dan pemrosesan untuk menentukan apakah kesalahan antar task akan terjadi. Sebagai tambahan task yang berkomunikasi via antrian pesan atau penyimpanan data, diujikan untuk menemukan kesalahan ukuran penyimpanan

  • System Testing, software dan hardware telah disatukan dan diujikan dalam uji sistem sebagai satu kesatuan. Uji ini dilakukan untuk menemukan kesalahan pada software/hardware interface.



  • AUTOMATED TESTING TOOLS

    Dikarenakan ujicoba software menghabiskan sekitar 40% dari total usaha yang diperlukan untuk sebuah proyek pengembangan software, maka tools tools yang dapat mengurangi waktu uji sangat dibutuhkan. Dengan melihat manfaat potensialnya, maka dibentuklah generasi pertama dari automated test tools. Miller mendeskripsikannya menjadi beberapa kategori, diantaranya :

  • Static Analyzer, program sistem analisis ini mendukung untuk pembuktian dari pernyataan tanpa bukti statis, perintah-perintah yang lemah dalam struktur program dan format.

  • Code Auditors, sebuah filter dengan kegunaan khusus yang digunakan untuk memeriksa kualitas software untuk memastikan bahwa software tersebut telah memenuhi standars pengkodean minimum

  • Assertion Processors, sistem preprocessor/postprocessor ini digunakan untuk memberitahukan programmer dengan menyediakan klaim, yang disebut assertion, yaitu mengenai suatu perilaku program yang benar-benar ditemukan saat pelaksanaan program riil

  • Test File Generators, merupakan pembangun processor, dan dipenuhi dengan definisi awal nilai, file masukan yang serupa untuk program yang sedang diujikan.

  • Test Data Generators. merupakan sistem analisis otomatis yang membantu pengguna aplikasi dalam memilih data uji yang menyebabkan program berperilaku khusus

  • Test Verifiers, tool ini mengukur cakupan uji internal, terkadang berhubungan dengan uji struktur control dari objek uji, dan melaporkan cakupan nilai untuk para ahli jaminan kualitas

  • Test Harnesses. Tools ini mendukung pemrosesan uji coba dengan (1) meng-instal program kandidat dalam lingkungan uji, (2) berikan input data, dan (3) simulasikan dengan menggunakan stubs perilaku dari modul-modul subordinate

  • Output Comparators, tool ini membuatnya sangat memungkinkan untuk membantingkan sekumpulan output dari suatu program dengan sekumpulan output dari proses sebelumnya(yang telah diarsipkan) untuk menentukan perbedaan diantara keduanya
    Dunn menambahkan tool otomatis diatas, dantaranya :
    Symbolic Execution System, tool ini penampilkan ujicoba program dengan menggunakan input aljabar, dari pada nilai data numerik,. Software yang diuji akan menguji satu class data uji dari pada satu kasus uji spesifik. Output yang dihasilkan dalam bentuk aljabar dan dapat dibandingkan dengan output yang diharapkan yang telah ditulis dalam bentuk aljabar

    Environment Simulator, merupakan tool untuk sistem berbasis komputer khusus, yang mampu untuk menguji model lingkungan eksternal dari suatu software realtme, dan mensimulasikan kondisi operasi sesungguhnya secara dinamis.

    Data Flow Analyzer, tool ini melacak aliran data yang melewati sistem, dan berusaha untuk menemukan data reference yang belum didefinisikan , peng-indeks-an yang salah, dan kesalahan data terkait lainnya.
  • Algoritma Pemrograman

    “Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusunsecara sistematis dan logis”. Kata Logis merupakan kata kunci dalam Algoritma. Langkah-langkah dalam Algoritma harus logis dan harus dapat ditentukan bernilai salah atau benar (Alex Budiyanto. 2003).

    Melaksanakan Algoritma berarti mengerjakan langkah-langkah di dalam Algoritma tersebut. Pemroses mengerjakan proses sesuai dengan algoritma yang diberikan kepadanya. Juru masak membuat kue berdasarkan resep yang diberikan kepadanya, pianis memainkan lagu berdasarkan papan not balok. Karena itu suatu Algoritma harus dinyatakan dalam bentuk yang dapat dimengerti oleh pemroses. Jadi suatu pemroses harus;

  • Mengerti setiap langkah dalam Algoritma

  • Mengerjakan operasi yang bersesuaian dengan langkah tersebut.


  • Komputer hanyalah salah satu pemroses. Agar dapat dilaksanakan oleh komputer, algoritma hasrus ditulis dalam notasi bahasa pemrograman sehingga dinamakan program. Jadi program adalah perwujudan atau implementasi teknis Algoritma yang ditulis dalam bahasa pemrogaman tertentu sehingga dapat dilaksanakan oleh komputer (Alex Budyanto. 2003).

    Twitter Delicious Facebook Digg Stumbleupon Favorites More

     
    Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Web Hosting