Saturday, December 28, 2013

Menjalankan Aplikasi Berbasis Library GMP (GNU Multi Precision) di Windows Menggunakan MPIR

GMP (GNU Multi Precision) adalah library untuk operasi aritmatika dengan kepresisian tak terbatas. Dengan library ini, kita dengan mudah dapat melakukan perkalian bilangan yang sangat besar seperti:

7612058254738945 x 9263591128439081 = 70514995317761165008628990709545

Angka tersebut jelas tidak dapat direpresentasikan dalam tipe data standard, int, long int, double, dan selainnya. GMP memakai tipe data mpz_t sebagai container-nya. Secara teori, tingkat kepresisian operasi tidak terbatas dan dibatasi oleh besar memory (RAM) komputer yang dipakai. Operasi angka besar seperti ini banyak dijumpai pada algoritma cryptography, yang sering menggunakan angkat biner dengan jumlat bit sampai 1024-bit bahkan lebih.

GMP di Windows 

Salah satu kekurangan library GMP adalah tidak adanya solusi yang out-of-the-box untuk Windows. Untuk memakai GMP, harus melakukan porting Makefile terlebih dahulu sehingga dapat dicompile di Visual Studio, dan ini cukup memakan waktu.

Untungnya, sudah ada orang yang membuat fork dari repository GMP dan membuat versi sendiri yaitu: MPIR (Multi Precision Integer and Rational, http://www.mpir.org/). Berbeda dengan GMP, library ini sejak awal didesain agar support untuk platform Linux, Windows, MAC OS, dan Solaris.

Membuild Library MPIR di Visual Studio

Untuk mem-build library MPIR di Windows, dibutuhkan berikut:

  • Visual Studio (bisa memakai Visual Studio 10 Express)
  • Windows SDK 7.1

Langkah pertama adalah pastikan Windows SDK v7.1 sudah terinstall, cek folder "C:\Program Files\Microsoft SDKs\Windows\v7.1", jika belum ada maka perlu diinstall terlebih dahulu. Download di http://www.microsoft.com/en-us/download/details.aspx?id=8279 untuk online installer, atau http://www.microsoft.com/en-us/download/details.aspx?id=8442 untuk offline installer. Pilih installer yang cocok dengan platform yang dipakai:
  • GRMSDK_EN_DVD.iso untuk Windows x86 32-bit
  • GRMSDKX_EN_DVD.iso untuk Windows x64 64-bit
  • GRMSDKIAI_EN_DVD.iso untuk Intel Itanium Architecture 64-bit

Setelah Windows SDK v7.1 sudah terinstall, download source code MPIR di http://www.mpir.org/mpir-2.6.0.tar.bz2 (pada contoh ini versi 2.6.0).

Extract source code tersebut, lalu masuk ke folder "mpir-2.6.0\build.vc10". Buka "mpir.sln" menggunakan Visual Studio, lalu build project berikut: dll_mpir_gc, lib_mpir_gc, dan  lib_mpir_cxx. Library hasil build akan muncul di "mpir-2.6.0\lib\Win32\Debug" atau "mpir-2.6.0\lib\Win32\Release" tergantung dibuild dengan target Debug atau Release.


Setelah semua dicompile, dapat ditest apakah MPIR sudah berhasil di-build atau belum. Buka command prompt, masuk ke "mpir-2.6.0/build.vc10/", build semua project di mpir-test.sln. Setelah semua test project dibuild jalankan run-tests.py dari command prompt (harus install Python terlebih dahulu, download di www.python.org/getit/windows/).


Menjalankan aplikasi GMP menggunakan MPIR

Untuk menjalankan aplikasi GMP pada Windows menggunakan GMP, cukup masukkan path "mpir-2.6.0\lib\Win32\Debug" atau "mpir-2.6.0\lib\Win32\Release" pada Additional Library Directories, dan path "mpir-2.6.0\" pada Additional Dependencies.

Ambil contoh penggunaan GMP dari http://en.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library, untuk perkalian bilangan besar.

Berikut hasilnya:


Library GMP banyak dipakai untuk membuat algoritma cryptography, misalnya pada algoritma RSA, untuk melakukan kalkulasi ciphertext = plaintext ^ e mod m, cukup gunakan mpz_powm(ciphertext, plaintext, e, e). Selamat mencoba ;-) (Yayan)

Catatan:
Library GMP termasuk sudah lama dan kemungkinan akan out-dated digantikan dengan library baru seperti MPIR, libgcrypt (untuk cryptography), dan sebagainya.

Jump Start RTL Project (Simulasi dan Sintesis) Menggunakan CMake

Dalam membuat project RTL, biasanya kita akan berhadapan dengan beberapa kebutuhan berikut:
  • Mixed language (Verilog/VHDL)
  • Scripting (Modelsim, Quartus, ISE, dll)
  • Multiple target (Altera, Xilinx, Artisan, dll.)
  • Repeatable process (design, simulation, synthesis, field testing, back to design, ..)
Untuk itu diperlukan environment project yang flexible dan mendukung kebutuhan diatas. Untuk memulai project RTL dengan environment flexible tersebut, bisa dicoba dengan menggunakan CMake:


Berikut struktur directoy-nya:


Environment tersebut dibuat menggunakan CMake. Untuk mulai menggunakannya, build dulu makefile-nya dengan CMake atau CMake-GUI (download dari http://www.cmake.org/cmake/resources/software.html).

Info selengkapnya dapat dibaca di: http://www.cmake.org/cmake/help/runningcmake.html

Quick Guide:
  1. Untuk menjalankan simulasi: make sim
  2. Untuk menjalankan simulasi dengan GUI (melihat waveform): make sim_gui
  3. Untuk menjalankan sintesis (otomatis memilih QUartus atau ISE): make syn
  4. Untuk mengubah target ke Altera, Xilinx, atau RTL model, modifikasi file /CMakeLists.txt, pada baris: set(TARGET "xilinx"), ganti "xlilinx" dengan "altera" atau "model"
  5. Untuk menambahkan desain Verilog, modifikasi file /src/CMakeLists.txt, pada baris: set(VERILOG_SYN_SRC_FILES buffer.v), tambahkan jadi set(VERILOG_SYN_SRC_FILES buffer.v file1.v file2.v), dan seterusnya.
  6. Untuk menambahkan desain VHDL, modifikasi file /src/CMakeLists.txt, pada baris: set(VHDL_SYN_SRC_FILES adder.vhd), tambahkan jadi set(VHDL_SYN_SRC_FILES adder.vhd file1.vhd file2.vhd), dan seterusnya.
  7. Untuk menambahkan Xilinx Core, modifikasi file /src/xilinx/CMakeLists.txt, tambahkan pada baris: set(XILINX_VERILOG_SYN_SRC_FILES ) untuk file Verilog, atau set(XILINX_VHDL_SYN_SRC_FILES ) untuk file VHDL.
  8. Untuk menambahkan Altera Core, modifikasi file /src/altera/CMakeLists.txt, tambahkan pada baris: set(ALTERA_VERILOG_SYN_SRC_FILES ) untuk file Verilog, atau set(ALTERA_VHDL_SYN_SRC_FILES ) untuk file VHDL.
Dengan enviroment ini, maka ada beberapa keuntungan:
  1. Project langsung dapat disetup dengan cepat tanpa harus membuat manual di Modelsim, Quartus, maupun ISE.
  2. Tidak perlu membuat script yang terpisah antara simulasi dan sintesis sehingga menghindari kesalahan file / perbedaan file yang disintesis.
  3. Dapat dijalankan disegala platform dan IDE.
  4. Dapat diintegrasi dengan sistem lain, misalnya Jenkins untuk continuous integration (baca: http://www.design-reuse.com/articles/23424/continuous-integration-complex-reconfigurable-system.html).
Tutorial selengkapnya dapat dilihat pada video berikut ini:


Selamat mencoba & jumpt start your RTL project ;-) (Ya2n)

Sunday, December 15, 2013

Menjalankan Simulasi IP Core Altera di Modelsim

Pada artikel sebelumnya, dijelaskan bagaimana mencompile library IP Core Xilinx untuk simulasi Modelsim. Pada artikel kali ini, akan dijelaskan bagaimana mengcompile library IP Core Altera untuk simulasi Modelsim. Perlu diketahui bahwa Altera juga menyediakan Modelsim Altera, dimana pada Modelsim versi tersebut, sudah diinclude library ALtera sehingga tidak perlu mengompile sendiri library tersebut. Tapi untuk modelsim versi biasa, perlu dilakukan langkah untuk mengcompile nya, berikut caranya:

1. Download TCL script untuk mencompile library (ada dia pilihan script: compile Verilog atau VHDL) dari sini:

http://www.altera.com/support/examples/tcl/tcl-modelsim.html

2. Modifikasi script untuk disesuaikan dengan instalasi Altera, dan pilihan library. Pada contoh ini, saya hanya akan mengcompile library untuk simulasi fungsional (tanpa timing, dsb.)

TCL script
3. Buka Modelsim, pilih "Tools > TCL > Ecexute Macro", lalu masukkan TCL script yang telah didownload dan dimodifikasi sebelumnya.

Execute TCL script dari Modelsim
4. Tunggu proses compile selesai, maka library Altera akan muncul di Modelsim. Untuk selanjutnya proses ini tidak perlu diulang setiap kali akan melakukan simulasi.

Library Altera di Modelsim
Selamat mencoba ;-) (Ya2n)

Menjalankan Simulasi IP Core Xilinx di Modelsim

FPGA (Field Programmable Gate Array) adalah IC yang terdiri dari gerbang logika (NAND, NOR, dsb.) dan blok memory yang dapat dikonfigurasi ulang (diprogram ulang) koneksinya. Bahasa pemogramannya menggunakan Verilog atau VHDL.

Pada FPGA, umumnya tersedia juga IP core, berupa desain hardware yang dapat digunakan langung tanpa harus membuat program Verilog/VHDL-nya. IP core yang umum digunakan adalah clock generator (PLL) dan memory blcok (RAM, ROM, FIFO, dsb). IP core lainnya seperti DSP block (filter, FFT, dsb.), interface block (USB, PCI, RapidIO, dsb.). Untuk IP core jenis ini biasanya memerlukan license sendiri.

Bentuknya IP core adalah macrocell, dimana kita tidak dapat melihat isinya dalam bentuk Verilog/VHDL, tapi biasanya disediakan modelnya, untuk keperluan simulasi. Model Verilog/VHDL IP Core tersebut dapat berupa behavioral model, gate level, sampai timing.

Untuk dapat menggunkan model IP core untuk simulasi Xilinx di Modelsim, ikuti langkah-langkah berikut:

1. Buka "Xilinx Library Compilation Wizard", atau ketik compxlibgui pada start menu atau command prompt. Pilih simulator yang dipakai (pada contoh ini Modelsim SE), pastikan path "Simulator Executable Location" sudah benar.

Xilinx Library Compilation Wizard
 2. Klik Next, pilih both VHDL and Verilog, tunggu proses selesai.


3. Setelah proses selesai, compxlibgui akan menghasilkan modelsim.ini. Copy bagian path library Xilinx ke modelsim.ini yang ada di folder instalasi modelsim (pada contoh ini di C:\modeltech_6.5\modelsim.ini)

modelsim.ini
4. Selesai, buka Modelsim, maka library Xilinx akan terlihat di "Library" modelsim.

Modelsim dengan library Xilinx

Mudah kan, selamat mencoba ;-) (Ya2n)

Tuesday, October 22, 2013

Menjalankan OSMDroid di API 18: Mengatasi Error NoClassDefFoundError

Saat menjalankan OSMDroid di API 18 (Android 4.3 Jelly Bean), akan muncul error berikut:

10-22 21:23:56.038: E/AndroidRuntime(28372): java.lang.NoClassDefFoundError: org.osmdroid.tileprovider.util.CloudmadeUtil

Untuk mengatasinya, lakukan langkah berikut:

1. Pastikan semua library *.jar ditempatkan pada folder libs, bukan lib atau yang lainnya, lalu hilangkan dari Java Build-Path.

Semenjak API 17, ADT akan secara otomatis mendeteksi semua library *.jar yang ditempatkan dalam folder libs, lalu secara otomatis library tersebut akan ditempatkan di "Android Private Libraries". Jadi meng-add secara manual semua library *.jar sudah tidak diperlukan lagi.


2. Pastikan check pada "Android Private Libraries" di Java Build-Path > Order and Export.


3. Bersihkan project, Project > Clean.

4. Jalankan aplikasinya... Voila! OSMDroid bisa berjalan lancar di Android 4.3 Jelly Bean (API 18).


Selamat mencoba (Ya2n).

Wednesday, May 22, 2013

Meng-Compile Beberapa Fungsi C/MEX dalam Satu File MEX di Matlab

Atau dengan kata lain: Membuat Library MEX

Salah satu kemelahan MEX adalah setiap fungsi C yang akan dicompile, harus di-wrap dalam sebuah fungsi beranama mexFunction, dan nama file yang berisi mexFunction harus sama dengan nama fungsi yang diinginkan. Misalnya, kita ingin membuat fungsi "adder: di MEX berikut:

FIle tersebut jika dicompile menggunakan MEX, akan menghasilkan file .mex (atau .mexgw, .mexw64, dsb), dimana namafungsi sama dengan nama file-nya. Agar fungsi hasil compileasi bisa dipanggil di Matlab dengan cara berikut:

>> adder(2,3)
adder
Adder from MEX function

ans =

     5

Maka file tersebut harus disimpan dengan nama file adder.c, sehinggal ketika dicompile menghasilkan file adder.mex (lihat keterangan diatas).

Demikian juga kalau kita punya beberapa fungsi C lainnya yang ingin dicompile ke MEX, maka tiap fungsi harus disimpan dalam nama file yang sesuai dengan nama fungsi yang dimaksud. Ini menjadi drawback ketika kita punya banyak sekali fungsi, sehingga terpaksa dicompile dalam banyak file MEX (misal: adder.mex, mult.mex, div.mex, dsb.). Bisakah kita mengcompile semua fungsi MEX tersebut dalam satu file MEX saja, sebutlah library.mex? Bisa.

Berikut workaround-nya:

1. Buat satu fungsi MEX (library.c) yang berfungsi untuk memparsing nama fungsi.

Masukkan nama-nama fungsi sebagai header, misalnya:

void mexAdder( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] );
void mexMult( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] );

Lihat code library.c berikut:

2. Sesuaikan nama fungsi pada masing-masing file sesuai nama yang ada di header (poin 1).

Misalnya untuk adder.c jadi begini:

3. Compile library.c bersamaan dengan fungsi-fungsi lainnya.

>> mex library.c adder.c mult.c

4. Selesai! Untuk memanggil fungsi, caranya:

>> library('adder', 2, 3)
adder
Adder from MEX function

ans =

     5

Sekarang kita punya satu file MEX (library.mex) yang berisi semua fungsi C/MEX. Mudah kan!? (ya2n) :D

Referensi:
- http://www.mathworks.com/help/matlab/matlab_external/building-mex-files.html
- http://is.muni.cz/th/256594/fi_m/thesis.pdf

Membuat Aplikasi Smart Poster Writer/Reader Menggunakan Android NFC dan Mifare Classic

Smart Poster merupakan teknologi yang mengubah poster yang tadinya hanya "statis" menjadi "dinamis", yaitu dengan meng-embed sebuah URL pada poster tersebut sehingga alih-alih membaca keterangan yang tertera pada poster, pembaca akan membuka link URL yang tentunya isinya dapat berubah-ubah sesuai kebutuhan.

Teknologi ini diimplementasikan dengan dua cara: QR Code (barcode 2 dimensi), dan NFC. Ada perdebatan mengenai teknologi smart poster ini.

Pertama, secara natural, orang tidak tertarik untuk melihat poster yang sama berulang kali, walaupun sebenarnya isi URL-nya berubah-ubah, lagipula bagaimana kita bisa tahu kalau isi URL-nya telah berubah?

Kedua, masalah security. Orang dapat mengganti gambar QR code, atau menyusupkan kartu NFC tanpa sepengetahuan pemilik poster karena keduanya tidak mencolok (sulit membedakan secara visual). Dengan cara ini, orang dapat memanfaatkan smart poster orang lain untuk meredirect ke URL dia.

Ketiga, masalah harga tag NFC. Perbedaan harga smart poster NFC dengan poster biasa sangat jauh. Apakah memang tambahan harga itu worth it untuk kebutuhan bisnis.

Terlepas dari tiga masalah diatas, smart poster sudah mulai dipakai terutama pada poster informasi publik di bandara, stasiun, terminal, dsb. Juga sudah diimplementasi di restoran-restoren (untuk pesan makanan), dan juga diimplementasikan di etalase virtual (orang melihat etalase produk berupa smart poster, lalu dari URL semart poster, orang tersebut membeli produknya).

Berikut contoh code aplikasi smart poster writer pada Android:

Pada code diatas, kita mengimport library NFC dan Mifare, lalu membuat variable berupa Tag, NFC, dan MifareClassic. Pada saat onCreate, semua variable ini diinisialisasi, dan fungsi handlernya juga diinisialisasi. Saya membuat dua fungsi handler yang dipanggil berdasarkan intent-nya. Yang akan saya jelaskan adalah createTag(getIntent()). Berikut isi createTag(getIntent()):

Code akan dieksekusi ketika muncul trigger berupa terdeteksinya NFC card/tag ke Android. Lihat line berikut:

mTagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);.

Variable mTagFromIntent di-bind dengan intent, ika intent tidak NULL, maka jalankan thread, dimana thread akan menjalankan fungsi writePoster() di background. Fungsi writePoster() adalah untuk melakukan koneksi dan transaksi data dengan NFC card/tag. Lihat code dibawah ini:

Pada code diatas, kita menulis data (NdefRecord) ke NFC card/tag berupa URI, sehingga ketika card ini dideteksi oleh Android, secara otomatis Android akan membuka web-bowser dan redirect page ke URI yang tertulis pada card/tag tersebut. Lihat line berikut:

NdefRecord uriRecord = NdefRecord.createUri(url);
NdefMessage message = new NdefMessage(uriRecord);

Adapun untuk jenis data yang lain, cara penulisannya berbeda. Jenis-jenis data yang bisa ditulis ke NFC dijelaskan pada spesifikasi NDEF (NFC Data Exchange Format), atau bisa juga dicek di Android SDK API berikut: http://developer.android.com/reference/android/nfc/NdefRecord.html

OK, sampai disini kita bisa melakukan fungsi write ke NFC tag berupa data URL. Selebihnya, code yang ada adalah bagian User Interface. Sebagai bonusnya, saya berikan contoh code sleek User Interface dengan fitur-fitur berikut:

  • Card Sliding Animation - mirip animasi card-nya Google Now
  • Tranparent Image Overlay - bisa dipakai untuk membuat UI tutorial, biasanya ditampilkan ketika user baru pertama buka aplikasi
  • Web View - web browser yang diembed di aplikasi
  • Multiple Page/Actvity with PushButton Intent - ini sih standard, yaitu perpindahan page/activity yang ditrigger PushButton

Code bisa didownload di https://github.com/yansyaf/android-smartposter-writer. Kalau ada pertanyaan, silakan comment dibawah. Enjoy! (ya2n)

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

Thursday, April 5, 2012

How to Solve Error GLIBCXX_3.4.xx Not Found in Matlab Ubuntu

Untuk mengcompile kode matlab (.m) ke shared library (.dll atau .so), seperti yang telah dijelaskan di postingan sebelumnya, akan muncul error berikut di Ubuntu 10.4 atau versi lebih baru:



Warning: You are using gcc version "4.5.2-8ubuntu4)".  The earliest gcc version supported
with mbuild is "4.0.0".  The latest version tested for use with mbuild is "4.2.3".
To download a different version of gcc, visit http://gcc.gnu.org 
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/cc1: /opt/matlab/sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /usr/lib/libppl_c.so.2)
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/cc1: /opt/matlab/sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/libppl_c.so.2)
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/cc1: /opt/matlab/sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /usr/lib/libppl.so.7)
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/cc1: /opt/matlab/sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/libppl.so.7)
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/cc1: /opt/matlab/sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/libgmpxx.so.4)

Hal ini disebabkan karena Matlab mem-bundled software-nya dengan versi Gcc yang lama dan tidak kompatibel dengan versi Gcc yang dipakai Ubuntu.

Cara mengatasinya:

- Cukup hilangkan atau rename file yang error tersebut dari folder instalasi Matlab, dengan sendirinya yang dipakai adalah yang ada di Ubuntu :D

Contoh:
mv /opt/matlab/sys/os/glnxa64/libstdc++.so.6 /opt/matlab/sys/os/glnxa64/libstdc++.so.6.BAK

Thursday, February 9, 2012

Install Altera Linux Di Ubuntu

Pertama ubuntu defaultnya dash bukan bash. Maka ./setup dijalankan dengan :

bash ./setup --gui
Kedua, akan ada error sbb :

altera_installer_cmd: symbol lookup error: /usr/lib/i386-linux-gnu/libXi.so.6: undefined symbol: XESetWireToEventCookie

rename dulu file-nya :

sudo mv /usr/lib/i386-linux-gnu/libXi.so.6 /usr/lib/i386-linux-gnu/libXi.so.6.bak

jalankan lagi :

bash ./setup --gui

kalau sudah bisa run altera-nya, balikin lagi :

sudo mv /usr/lib/i386-linux-gnu/libXi.so.6.bak /usr/lib/i386-linux-gnu/libXi.so.6

oh yah installer-nya dalam *.iso, misalnya altera.iso :

sudo mkdir /media/iso

sudo mount altera.iso /media/isoimage/ -t iso9660 -o loop

Passing dan Calling C/C++ Struct di Matlab menggunakan Wrapper MEX-function

Matlab merupakan tools yang sangat powerful untuk melakukan komputasi matematis dan visualisasi grafik, termasuk pada aplikasi Digital Signal Processing (DSP). Dalam aplikasi DSP, kita sering bekerja pada dua domain bahasa, yaitu: C/C++ dan Matlab, karena kedua bahasa tersebut mempunyai kelebihan dan kekurangan masing-masing. C/C++ sangat portable, dieksekusi dengan cepat, dan dapat dijalankan di hampir semua platform, tapi tidak mudah melakukan visualisasi grafik. Sedangkan Matlab dapat dengan mudah melakukan visualisasi grafik, tapi lambat dalam proses eksekusinya, dan sangat tidak portable. Untuk menggabungkan C/C++ dan Matlab ada dua cara: penggabungan dilakukan di C/C++, atau penggabungan dilakukan di Matlab.

Untuk menggabungkan Matlab di C/C++, sudah dijelaskan pada tulisan sebelumnya. Untuk menggabungkan C/C++ di Matlab, digunakan MEX sebagai wrappernya. Tulisan ini menjelaskan penggunaan MEX untuk mewrap fungsi yang menggunakan C/C++ struct sebagai parameternya.

Selengkapnya baca di halaman Download atau ke link berikut.

Wednesday, February 8, 2012

Menjalankan Fungsi Matlab dengan Compiler C

Berikut ini kita akan belajar bagaimana membuat sebuah fungsi matlab (.m) bisa dijalankan di compiler C dengan platform Windows. Dalam hal ini kita menggunakan platform Microsoft Visual Studio. Cara ini akan memudahkan bagi kita apabila sebuah fungsi sudah cukup advance di matlab, dan kita hanya perlu memanfaatkannya (dalam bentuk shared library) tanpa perlu mengconvert code tersebut seluruhnya ke dalam platform C/C++. Kali ini kita akan membuat contoh sederhana sebuah code matlab yang akan dicoba dimanfaatkan dalam platform C (dalam bentuk shared library) kemudian bisa menghasilkan file .exe.

1. Pertama kita membuat fungsi matlab. Sebagai contoh fungsi coffeebreak.m sebagai berikut :

function coffeebreak
% Load the topographical data for the globe
load('topo.mat', 'topo', 'topomap1');

% Create a unit sphere with 50 facets. This sphere is the Earth.
[x,y,z] = sphere(50);

% Establish initial viewing and lighting parameters. Use Phong shading
% and texture mapping to wrap the topo map data around the sphere.

props.FaceColor= 'texture';
props.EdgeColor = 'none';
props.FaceLighting = 'phong';
props.CData = topo;

% Set the viewpoint to look at the Atlantic Ocean.
view(-130, 10);

% Draw the sphere, with the topo data texture mapped to the surface.
s=surface(x,y,z,props);
set(gcf, 'Color', 'white');  % White background
axis square
axis off
axis equal

title('Coffee Break  at Indonesian Chip Engineer.', 'FontSize', 14, 'FontWeight', 'Bold');
end

referensi code : http://blogs.mathworks.com/loren/2010/11/18/deploying-standalone-applications/

2. Kemudian jalankan program coffeebreak.m diatas di platform matlab dengan sintax berikut ini. Ini bertujuan untuk membuat file 'shared library'.
mcc -t -L C -W lib:mylib -T link:lib -h coffeebreak.m libmmfile.mlib

maka pada folder/directory tempat kita menyimpan, akan ada tambahan beberapa file sebagai berikut :
- mccExcludedFiles (text document)
- mylib.c
- mylib.dll
- mylib (export library file)
- mylib.exports
- mylib.h
- mylib (object file library)
- mylib.prj
- mylib_mcc_component_data.c
- readme.txt
3. Buka software Microsoft Visual Studio (MVS) dan membuat code C yang sesuai dengan mylib.dll yang sudah dihasilkan pada poin 2 diatas. Untuk membuat code C, kita membutuhkan software dependency walker untuk membaca fungsi-fungsi apa saja yang ada dalam mylib.dll.
4. Kalau belum memilki dependency walker, silahkan download di internet. Setelah file mylib.dll dibuka di software ini maka akan didapatkan fungsi-fungsi yang bisa kita gunakan sebagai fungsi code C kita. Dan berikut main.c yang bisa kita hasilkan :
#include 
#include < windows>
#include "mylib.h"

int main ()
{
mylibInitialize();       
mlfCoffeeBreak();
mylibTerminate();
/* ketiga sintac diatas diambil dari hasil extraksi mylib.dll dengan menggunakan software dependency walker */
}
5. Pada software Microsoft visual studio, bagian header files, silahkan ambil dari mylib.h yang sudah dihasilkan pada point 2.
6. Pada software Microsoft visual studio , klik pada bagian nama project, kemudian klik kanan. Pilih bagian properties. Pada bagian C/C++pilih bagian ‘general’ dan tambahkan ‘additional include directories’ dengan $MATLABROOT\extern\include\cpp;$MATLAB\extern\include
7. Pada bagian ‘preprocessor’ kita bisa tambahkan _MBCS, MSVC, MSWIND, IBMPC
8. Pada bagian ‘code generation’, pastikan untuk runtime library sudah tersetting : Multi-threaded Debug DLL (/MDd)
9. Pada bagian resource files, masukkan mylib.lib.
10. Pada folder computer kita, pastikan seluruh file pada poin 2 sudah berada satu directory dengan main.c.
11. Balik lagi ke software MVS, kita bisa compile project dengan cara ‘Build’ or ‘Rebuild’.
12. Setelah decompile, nanti pada bagian directory debug di computer kita bisa ditemukan file .exe.
13. Sebelum dijalankan, copy mylib.dll ke folder tempat .exe berada. Dan jalankan code exe-nya !!... maka hasilnya adalah sebagai berikut :


Silahkan mencoba ^_^

(fin / yan)


Referensi :
1. http://www.mathworks.com/support/solutions/en/data/1-18CBI/index.html?solution=1-18CBI
2. http://goffconcepts.com/techarticles/development/cpp/calldll.html

Tuesday, May 10, 2011

14th IEEJ International Analog VLSI Conference in Indonesia 2011


First Call For Paper

2011 IEEJ International Analog VLSI Workshop
November 2 - 4, 2011 Bali, Indonesia

INTRODUCTION
The Research Committee on Electronic Circuits of the Institute of Electrical Engineers of Japan (IEEJ) is sponsoring and cooperating with Bandung Institute of Technology and IEEE Indonesia Section to hold the 2011 International Analog VLSI Workshop in Bali, Indonesia, on November 2-4, 2011. The purpose of the workshop is to exchange information, ideas and recent research results on analog VLSI circuits and their applications. This workshop has formed a long-standing community for various analog VLSI circuit specialists from both industry and academia worldwide, and promoted active brainstorming among them at the site.

TOPICS:

   * Analog and Mixed Analog-Digital Integrated Circuits (Amplifiers,
      Filters, Comparators, Oscillators, Multipliers, Voltage/Current
      References, Sample-And-Hold Circuits, A/D and D/A Converters, PLL,
      High speed IO Interface, DC-DC converters)

   * Analog Signal and Information Processing  Applications
      (Telecommunication, Multimedia, Automotive Electronics, Biomedical
      Electronics, Consumer Electronics, Neural Networks, Sensing and
      Sensor Networks, Space and Military Electronics)

   * Analog VLSI Design Automation (Layout Techniques, Simulation
      Techniques, AHDL, Analog IP)   

   * Digital Circuits and Digital Signal Processing   

   * Biomedical Circuits and System   

   * Power Electronics   

   * VLSI Architecture

SUBMISSION
Authors are required to send their manuscripts written in English within 4-6 pages, along with information which includes the complete title, author name(s), affiliation(s) of author(s), and corresponding author (name, postal and e-mail addresses, telephone/fax numbers), via online submission at our website (to be announced) by June 10, 2011. After peer reviewing by experts, notification of acceptance will be sent via e-mail by August, 2011.

Camera ready manuscript should be prepared in the workshop format which is provided on the website. The deadline for camera-ready manuscript submission is August 19, 2011. At least one of the authors must register by September 2, 2011. Otherwise the paper will not be included in the workshop proceedings. It is mandatory that all accepted papers must be presented at the workshop.

IMPORTANT DATES
Deadline for Paper Submission : June 10, 2011
Notification of Acceptance : August 1, 2011
Deadline of Camera Ready Manuscript Submission : August 19, 2011
Deadline for Author Registration : September 2, 2011
Deadline for Early Registration (Non-Authors) : September 30, 2011

CONTACT PERSON
General Secretary: EVA MUCHTAR (Bandung Institute of Technology)
secretary@avw2011.stei.itb.ac.id

TPC Secretary: MICHITAKA YOSHINO (Hosei University)
michitaka.yoshino.43@adm.hosei.ac.jp 

*) Please contact TPC Secretary for technical matter, and ask other else to General Secretary.

Tuesday, May 3, 2011

Debugging di Eclipse: Memeriksa Element Pointer Array

Sebagai IDE, Eclipse bisa digunakan sebagai editor, builder/compiler, sekaligus debugger. Debugger di Eclipse berbasiskan GDB (GNU Debugger). Pada awalnya, GDB dibuat oleh Richard Stallman, penggagas open source software. Debugging menggunakan GDB saja tidak cukup, terutama karena set breakpoint pada GDB kurang intuitif, dan GDB tidak bisa menampilkan perjalanan step proses pada source code, ini juga berhubungan erat dengan intuisi debugging. Oleh karena itu, diperlukan front-end tools yang berbasis GDB untuk debugging, salah satunya Eclipse.

Sebagaimana layaknya tools GUI debugger, Eclipse menyediakan window khusus untuk menampilkan variable-variable dan nilainya. Bahkan jika nilai dalam variable berubah, Eclipse langsung memberikan tanda kuning pada variable tersebut, agar lebih eye catching. Tapi tetap saja debugging di Eclipse tidak se-"handy" Matlab, terutama karena ada tipe variabel yang nilainya tidak bisa langsung dilihat dengan mudah, yaitu pada kasus pointer. 


Jika pointer dimanfaatkan sebagai array, nilai masing-masing element dalam array tidak bisa terlihat dalam variable browser Eclipse. Berbeda jika array dibuat menggunakan static array. 

Untuk bisa memeriksa nilai element dalam pointer array, buka console GDB. Lalu ketikkan perintah GDB berikut.

print *([nama_pointer]+[index_awal])@[jumlah_element_yg_diperiksa]

Misalnya:


int *array;
array = malloc(5 * sizeof(int));
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;

Maka, untuk melihat nilai element array data, sejumlah 5 element, ketikkan perintah berikut di console GDB Eclipse:


print *(array)@5

Bisa juga disingkat menjadi:

p *(array)@5

Berikut contoh beberapa command untuk memeriksa nilai element array (real case).

1. Memeriksa nilai array mulai index pertama sampai sejumlah 5 element array.

p *code_deconcat1_row.data@5

2. Memeriksa nilai array mulai index kedua.

p *(code_deconcat1_row.data+2)

3. Memeriksa nilai array mulai index kedua sampai sejumlah 4 element array.

p *(code_deconcat1_row.data+2)@4

Selamat mencoba =)