Saturday, April 20, 2013

Debugging Aplikasi PHP

Debugging merupakan proses yang mau-nggak-mau harus dijalani tiap kali membuat program. Ada dua garis besar metode yang bisa dilakukan:

  • Nge-print variable dengan code
  • Menggunakan tools debugger dengan IDE (Integrated Development Environment)
Cara Tebar Ranjau

Cara pertama yaitu dengan menambahkan code var_dump($var);. Dengan cara ini, isi variable $var akan terlihat di browser. Makin banyak variable yang ingin diperiksa, makin banyak pula var_dump($var) yang harus ditambahkan sehingga code semakin kotor dan berantakan. Cara ini sering juga disebut dengan "tebar ranjau" :D

Cara tebar ranjau ini makin rumit kalau kita tidak tahu variable mana dan pada kondisi apa bug muncul (misalnya dalam kasus for loop), maka metode print variable dengan var_dump($var) ini menjadi tidak efektif. Walaupun demikian, metode ini sering dipakai untuk quick n dirt debug, pada kondisi-kondisi yang simple, dan biasanya banyak dipakai oleh newbie :D.

Cara Debugging Tools

Cara debugging php menggunakan tools adalah dengan memakai XDebug. Untuk pengguna Unix/Linux bisa ikuti langkah disini http://devzone.zend.com/1120/introducing-xdebug/. Untuk pengguna Windows yang memakai XAMPP sebagai webserver-nya, cukup ikuti langkah berikut:

  • Aktifasi XDebug
  • Buka "C:/xampp/php/php.ini", pada [XDebug], uncomment zend_extension dan tambahkan beberapa setting seperti line dibawah ini:

    [XDebug]
    zend_extension = "C:\xampp\php\ext\php_xdebug.dll"

    xdebug.remote_port=9000
    xdebug.profiler_enable=1
    xdebug.idekey=netbeans-xdebug
    xdebug.remote_enable=1
    xdebug.remote_handler=dbgp
    xdebug.remote_host=127.0.0.1
    xdebug.remote_mode=req
    xdebug_break();

  • Restart Apache service
  • Buka XAMPP Control Panel, stop Apache, lalu start kembali.

  • Cek apakah XDebug sudah terinstall atau belum
  • Buka http://localhost/xampp/phpinfo.php, pastikan XDebug sudah terinstall.

Bonus: setelah XDebug terinstall, output dari var_dump($var) akan berubah menjadi lebih readable. Perhatikan perbedaan berikut ini:

XDebug tidak diaktifkan

XDebug diaktifkan

XDebug sudah terinstall, tinggal install Debugging tools (IDE)-nya. Untuk PHP saya lebih suka pakai Netbeans, yang lain mungkin lebih suka Eclipse, pilihan saja. Untuk netbeans (versi 7.1 keatas) by default sudah suppport XDebug. Break point pada line yang ingin didebug, lalu klik Debug > Debug Project (atau klik icon pada toolbar) untuk mendebug aplikasi PHP. Sekarang kita bisa lihat isi variable PHP tanpa harus menambahkan (dan mendelete lagi) var_dump($var);.

Pada contoh dibawah ini, kita bisa periksa isi variable $data tanpa harus menambahkan code var_dump($data);

By default Netbeans PHP akan berhenti di line pertama ketika di debug. Untuk mengubah settingan ini masuk ke Tools > Option, pilih PHP lalu pilih tab Debugging. Uncheck pada pilihan "Stop at first line".

Selamat mencoba :D (ya2n)

Thursday, April 11, 2013

Tutorial Membuat Software MySQL Client (Windows, Linux, Mac) Menggunakan Qt Desktop

Pada tutorial berikut, kita akan membuat software desktop (GUI) menggunakan Qt untuk menampilkan database (MySQL) dari server. Berikut skemanya:

Tutorial ini ditujukan bagi yang sudah familiar dengan Qt dan sedikit tahu tentang MySQL. Bagi yang belum familiar dengan Qt, silakan pelajari dulu tutorial memulai membuat software GUI menggunakan Qt.

Install software yang dibutuhkan

Sebelum dilanjutkan, pastikan beberapa software ini telah terinstall, jika sudah terinstall bisa langsung masuk ke tutorial:

1. MySQL server

Untuk localhost, bisa install XAMPP disini. Setelah XAMPP terinstall, pastikan Apache dan MySQL server sudah dinyalakan.

2. MySQL Qt plugin

Untuk menginstall plugin MySQL di Qt, ikuti langkah pada tutorial disini. Untuk mengecek apakah MySQL plugin sudah terinstall atau belum, jalankan code berikut di Qt:

Maka Qt akan mengeluarkan output berupa daftar DBMS yang telah terinstall (pastikan QMYSQL ada dalam daftar list tersebut).

Membuat Database

1. Buka http://localhost/phpmyadmin
2. Masuk ke Privileges, klik "Add a New User".
3. Masukkan data berikut (isi Password dengan password):

JANGAN LUPA: pilih "Create database with the same name and grant privileges", lalu "Check All" pada pilihan privileges-nya.

4. Dari home PhpMyAdmin, masuk ke database example yang sudah dibuat pada no.5
5. Masuk ke menu SQL
6. Copy/paste SQL command dibawah ini, lalu klik GO:

Maka tabel test akan muncul seperti ini:

Membuat GUI

1. Buat file MysqlExample.pro, isikan dengan code berikut:
2. Buat file main.cpp difolder yang sama dengan MysqlExample.pro, isikan dengan code berikut:
3. Jalankan aplikasinya, maka akan muncul GUI dengan tabel dimana isi tabelnya diambil dari MySQL database di localhost.

Karena software ini dibuat menggunakan Qt, maka code yang sama dapat dijalankan di WIndows, Linux, dan Mac. Enjoy! (ya2n)

Monday, February 18, 2013

C++ Driver untuk Komunikasi PC ke Smart Card via Reader

Salah satu fitur yang disupport Windows API adalah komunikasi dengan Smart Card via Smart Card Reader. Komunikasi PC ke Smart Card dilakukan dengan menggunakan protokol APDU (Application Protocol Data Unit). Untuk lebih jelasnya mengenai APDU, lihat http://en.wikipedia.org/wiki/Smart_card_application_protocol_data_unit.

Library yang dipakai untuk mengimplementasi komunikasi tersebut adalah library winscard. Berikut adalah contoh aplikasi komunikasi PC dengan Smart Card via Reader dalam C++. Code dibuat sesimple mungkin dan dalam satu file saja, dengan tujuan untuk memudahkan mempelajari dan mengadaptasinya. Code dibagi atas tiga bagian besar:
  • Scan
    • Men-scan Smart Card Reader
    • Me-list daftar Reader yang terdeteksi
  • Connect
    • Men-connect ke Reader
  • Transmit/Receive
    • Mengirim command APDU ke Reader
    • Menerima respon dan dan menampilkan responnya


Selamat mencoba (ya2n)

Saturday, January 12, 2013

Menjalankan Hello World di DSP TI C6670

Hello world, program yang biasanya dijalankan untuk mulai mempelajari bahasa baru, IDE baru, dan sejenisnya. TI C6670 adalah prosesor DSP buatan Texas Instrument yang memiliki multicore processor (4-core). Compiler yang digunakan adalah CCS (Code Composer Studio) bawaan TI (Texas Instrument). CCS sendiri berbasis Eclipse platform, jadi bagi yang sudah terbiasa pakai Eclipse sebagai IDE-nya, tidak akan sulit memulai menggunakan CCS. Lebih lengkapnya silakan baca pada link berikut: http://www.ti.com/tool/ccstudio.

Berikut step-by-step menjalankan Hello World di TI C6670. Saya berusaha menyajikan dengan se-simpel mungkin agar mudah dipahami.

Saya bagi dalam 3 tahap utama:
1. Membuat project baru
2. Membuat code dan mem-build-nya
3. Menjalankan di board DSP (emulator)

Membuat Project Baru 

1. Jalankan CCS, buat project baru. Pada menu, pilih File > New > CCS Project
2. Pada isian Project Name, masukkan nama projectnya: helloworld
3. Pilih Project Type pada C6000
4. Pada project setting, pastikan settingan seperti dibawah ini:



Membuat Code dan Mem-Build-nya

1. Buat file baru, klik kanan pada project (pada Tab C/C++ Project), pilih New > Source File, simpan dan berikan nama helloworld.c

2. Buat code Hello World seperti biasa.


3. Aktifkan RTSC support, klik kanan pada project, New > RTSC Configuration File, beri nama helloworld.cfg. Setelah RTSC support diaktifkan, akan muncul beberapa include path baru.

4. Build code-nya, klik kanan pada project, lalu Build Project, akan muncul binary helloworld.out pada folder Debug.

Menjalankan di Board DSP (Emulator)

1. Pilih perspective CCS Debug, pada menu pilih Window > Open Perspective > CCS Debug, bagi yang sudah terbiasa pakai Eclipse pasti tahu ini :D

2. Buat Target Configuration baru, pada Tab Target Configurations, klik kanan pada User Defined > New Target Configuration, masukkan nama targetnya: C6670

3. Pada Connection pilih Blackhawk XDS560v2-USB Mezzanine Emulator, pada Device pilih TMS320C6670

4. Pastikan board DSP telah terkonek dengan PC/laptop, klik kanan pada target configuration C6670.ccxml, pilih Launch Selected Configuration. Akan muncul list 4-core processor C66xx_0, C66xx_1, C66xx_2, dan C66xx_3.

10. Klik kanan pada C66xx_0, lalu Connect Target.

11. Load binary yang sudah dibuild, pada menu pilih Run > Load > Load Program. Pilih Browse Project, pilih helloworld.out

12. Jalankan program, pada menu pilih Run > Resume, akan muncul Hello World! yang ditulis oleh prosesor DSP core 0.

Mudah bukan? Selamat mencoba! (ya2n)

Friday, April 27, 2012

Setting Flag /SUBSYSTEM di Visual Studio 2010 Menggunakan CMake

Ketika membuat software GUI di Visual Studio 2010, sering kali kita membutuhkan untuk mengeset flag /SUBSYSTEM ke WINDOWS agar aplikasi tidak mengeluarkan spash screen console ketika dijalankan, terutama ketika ingin build sistem ke Release.

Solusi:
Agar CMake dapat melakukan setting flag /SUBSYSTEM ke Windows, tambahkan WIN32 pada ADD_EXECUTABLE:

ADD_EXECUTABLE(${TARGET} WIN32 ${SOURCE})

Problem:
Pada saat yang sama, kita juga ingin mengeset flag /SUBSISTEM ke CONSOLE untuk memudahkan debugging (dengan printf tentunya). Cara diatas akan membuat /SUBSYSTEM diset ke WINDOWS walaupun tipe build adalah Debug.

Sayangnya, ini memang kekurangan yang ada di CMake (lihat http://public.kitware.com/Bug/view.php?id=12566). Setidaknya sampai saat tulisan ini dibuat, bugs-nya belum closed.

Thursday, April 12, 2012

Tutorial Singkat LEDA


Hari ini saya berdiskusi dengan tim yang menemui problem pada implementasi FPGA. Desain RTL yang dia buat, jika diimplementasi di Spartan 3 (Xilinx) berjalan dengan baik, tapi jika diimplementasi di Spartan 6 gagal. Itu berarti netlist hasil sintesis ke Spartan 6 berbeda dengan Spartan 3.

Hal ini bisa terjadi karena beberapa hal, misalnya compile (ISE) salah menginterpretasi logic desain RTL-nya (hehe :D), atau mungkin juga karena coding style RTL-nya tidak type-save sehingga memungkinkan terjadinya perbedaan hasil simulasi dengan sintesis, atau ketidakkonsistenan hasil sintesis. Beberapa tulisan telah membahas hal ini dan salah satunya ada di http://www.eda.org/vlog-synth/Mills_Final.pdf

Saya jadi teringat LEDA, tools untuk mengecek RTL coding style dan mendeteksi kemungkinan terjadinya synthesis missmacth tanpa harus melakukan sintesis. Tutorial LEDA pernah saya tulis di http://yansyafri.wordpress.com/2007/11/20/leda-rtl-checker/. Berikut saya copas kembali.



Saat men-synthesis desain baik kadalam device ASIC maupun FPGA terkadang kita temui error atau warning yang tidak didapatkan ketika proses simulasi dan verifikasi baik di ModelSim, VCS, ataupun tool RTL simulation lainnya. Hal ini dikarenakan tool RTL simulation hanya menggunakan library verilog IEEE sebagai rujukan, sedangkan pada target device keadaanya adalah kasuistik tergantung devicenya itu sendiri. Hal ini menjadi botle-neck ketika desainer belum berpengalaman pada target device tersebut (saat synthesis muncul banyak error), mengingat proses synthesis memakan waktu yang cukup lama.

Synopsys menyediakan tools khusus untuk mengatasi masalah ini: LEDA. Tools ini mampu menge-check code RTL (verilog atau VHDL) berdasarkan library dari target device yang akan kita pakai (misalnya Xilinx, Altera, TSMC, MOSIS), yaitu dengan cara meng-include-kan file library *.db

Untuk memulai menggunakan LEDA, berikut adalah tutorial singkatnya, semoga bermanfaat.

1. Setting environtment Synopsys-nya terlebih dahulu.

yayan@aquila:~> source /usr/local/CAD/Synopsys/setting_aquila.sh

2. Buat folder kerja LEDA, lalu buat script TCL-nya.

yayan@aquila:~/wimax/trunks/phy/verilog/leda/receiver> emacs receiver_leda.tcl &

Berikut contohscript TCL-nya mulai dari (#include):

#include file or library path
set search_path "../../integrated \
../../inc \"

#verilog file compile
read_verilog ../../../../phy/verilog/integrated/receiverTop.v

#top level module
current_design -work receiverTop

#you can select or deselect rules here, format:
#rule_deselect/rule_select –policy [policy_name] –rule [rule_name]
rule_deselect –policy DC –rule DCHDL_115

#check syntax
check

#log file dumped into ./leda-logs/checker.log
report

# quit leda shell
quit

Deskripsi rules dapat dilihat di $/leda/Z200709/doc/user.pdf pada section C Leda Prebuilt Configuration (terdapat tabel nama rule, policy-nya, dan deskripsinya). Deskripsi warning atau error saat compilation atau elaboration dapat dilihat pada section E Error And Warning Message List. Beberapa message bisa dihilangkan jika tidak dibutuhkan (lihat Deselecteble Messages pada Section E) tambahkan script berikut pada TCL.

rule_deselect –rule [label]

3. Jalankan script TCL-nya.

yayan@aquila:~/wimax/trunks/phy/verilog/leda/receiver> leda +tcl_file receiver_leda.tcl

4. Selamat mencoba (ya2n).

Catatan tambahan:
- Ada tools lain yang dapat dipakai untuk melakukan equivalence check, yaitu Formality.
- Equivalence check adalah mengetes kesesuiaian logic hasil sintesis (netlist) dengan RTL menggunakan metode formal checking.
- Link: http://www.synopsys.com/tools/verification/formalequivalence/pages/formality.aspx

Friday, April 6, 2012

Simple Example PHP - MySQL

MySQL adalah salah satu relational database management system (RDBMS) berbasis SQL (Structured Query Language) yang paling populer dan banyak digunakan. MySQL dapat dipakai pada aplikasi web maupun software pada desktop.

Kepopuleran MySQL terutama karena dipakai pada aplikasi web yaitu yang lebih dikenal dengan aplikasi LAMP (Linux-Apache-MySQL-Perl/PHP/Python). Untuk menggunakan MySQL pada web, dibutuhkan PHP untuk men-submit command-command MySQL. Command-command pada MySQL disebut dengan Query.

Berikut adalah contoh simpel memakai MySQL dalam PHP bagi pemula.Contoh berikut menggunakan dua jenis query dasar yang banyak digunakan yaitu:

- Create table
- Insert row

Ada tiga file PHP yang kita butuhkan:
- index.php (untuk halaman muka sekaligus create table)
- insert.php (untuk melakukan query insert)
- show.php (untuk mendisplay isi database MySQL ke halaman web)



File: index.php

<?php

$con = mysql_connect("localhost","databasename","databasepassword");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

// Create database
if (mysql_query("CREATE DATABASE databasename",$con))
  {
  echo "Database created";
  }
else
  {
  echo "Error creating database: " . mysql_error();
  }

// Create table
mysql_select_db("databasename", $con);
$sql = "CREATE TABLE wi_1 
(
personID int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(personID),
Nama varchar(15),
Alamat varchar(15),
Telp int,
Email varchar(15)
)";

// Execute query
mysql_query($sql,$con);

//mysql_close($con);

?> 
 <html>
 <body>

 <form action="insert.php" method="post">

 <br>Nama: <input type="text" name="nama" />
 <br>Alamat: <input type="text" name="alamat" />
 <br>Telp: <input type="text" name="telp" />
 <br>Email: <input type="text" name="email" />
 <br><input type="submit" />

 </form>

 </body>
 </html>

File index.php terdiri dari dua bagian: yang berisi code php dan yang berisi code html. Bagian yang berisi php berfungsi untuk meng-connect ke MySQL server dan membuat database baru dengan kolom: Nama, Alamat, Telp, dan Email. Sedangkan bagian html berfungsi untuk menampilkan form yang isinya dipakai dalam MySQL query dengan perantara PHP. Perhatikan username, password, dan databasename harus benar.

File: insert.php

<?php
$con = mysql_connect("localhost","databasename","databasepassword");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("databasename", $con);

$sql="INSERT INTO wi_1 (Nama, Alamat, Telp, Email)
VALUES
('$_POST[nama]','$_POST[alamat]','$_POST[temp]','$_POST[email]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con);
?>

File insert.php berfungsi mengambil data dari isi form yaitu: nama, alamat, telp, dan email untuk dipakai dalam MySQL query.

File: show.php

<?php
$con = mysql_connect("localhost","airqecom_data","muhammad");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("airqecom_data", $con);

$result = mysql_query("SELECT * FROM wi_1");

echo "<table border='1'>
<tr>
<th>Nama</th>
<th>Alamat</th>
<th>Temp</th>
<th>Email</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['nama'] . "</td>";
  echo "<td>" . $row['alamat'] . "</td>";
  echo "<td>" . $row['Telp'] . "</td>";
  echo "<td>" . $row['Email'] . "</td>";  
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);
?>

File show.php berfungsi untuk mengambil data dari MySQL database menggunakan query fecth, lalu menampilkan datanya dalam HTML.

Simpel bukan? Selamat mencoba!

Catatan:
- Cara menampilkan code pada halaman blog saya dapatkan dari http://thoughtsomething.blogspot.com/2008/11/display-html-javascript-code-in-blogger.html