java phpmysql

21
APLIKASI J2ME PADA WEB (MENAMPILKAN WEB DAN APLIKASI DATABASE MySQL PADA EMULATOR J2ME) 1. TUJUAN Setelah membuat aplikasi j2me ini, diharapkan mampu: - Memahami cara mengkakses web PHP kita menggunakan J2ME emulator - Membuat program java dan PHP 2. DASAR TEORI J2ME (Java 2 Micro Edition) Java 2 Micro Edition (J2ME), merupakan bagian dari Java 2J2ME Standar Edition (J2SE) yang menyediakan lingkungan pengembangan yang kaya fitur, stabil, aman, dan cross-platform. Edisi ini mendukung konektivitas basis data, rancangan user interface, masukkan/ keluaran (input/ output), dan pemrograman jaringan (network programming), dan termasuk sebagai paket-paket dasar bahasa Java. J2ME selain menyedikan bahasa Java yang sama, unggul dalam portabilitas (kemampuan dapat dijalankan dimanapun), safe network delivery, seperti J2SE dan J2EE. Aplikasi-aplikasi dapat diskalakan (dimampukan) agar dapat bekerja dengan J2SE dan J2EE. J2ME adalah untuk beragam consumer electronic product, seperti pager, smart card, cell phone, handheld PDA, dan set-top box.

Upload: rudy-rudyansyah

Post on 08-Apr-2016

109 views

Category:

Documents


2 download

DESCRIPTION

cara koneksi java application dengan database phpmysql

TRANSCRIPT

Page 1: java phpmysql

APLIKASI J2ME PADA WEB (MENAMPILKAN WEB DAN APLIKASI DATABASE MySQL PADA EMULATOR J2ME)

1. TUJUAN Setelah membuat aplikasi j2me ini, diharapkan mampu:- Memahami cara mengkakses web PHP kita menggunakan J2ME emulator- Membuat program java dan PHP

2. DASAR TEORI

J2ME (Java 2 Micro Edition)

Java 2 Micro Edition (J2ME), merupakan bagian dari Java 2J2ME Standar Edition (J2SE) yang menyediakan lingkungan pengembangan yang kaya fitur, stabil, aman, dan cross-platform. Edisi ini mendukung konektivitas basis data, rancangan user interface, masukkan/ keluaran (input/ output), dan pemrograman jaringan (network programming), dan termasuk sebagai paket-paket dasar bahasa Java.

J2ME selain menyedikan bahasa Java yang sama, unggul dalam portabilitas (kemampuan dapat dijalankan dimanapun), safe network delivery, seperti J2SE dan J2EE. Aplikasi-aplikasi dapat diskalakan (dimampukan) agar dapat bekerja dengan J2SE dan J2EE. J2ME adalah untuk beragam consumer electronic product, seperti pager, smart card, cell phone, handheld PDA, dan set-top box.

Page 2: java phpmysql

Paparan singkat di atas adalah penjelasan singkat mengenai Java dan sedikit gambaran dimana paket J2ME digunakan. Sebenarnya masih panjang penjelasan tentang Java dan paket J2ME, tetapi tidak dibahas disini.

Komponen-komponen J2ME terdiri dari Java Virtual Machine (JVM) yang digunakan untuk menjalankan aplikasi Java pada emulator atauhandheld device, Java API (Aplication Programming Interface) dan tools lain untuk pengembangan aplikasi Java semacam emulator Java Phone, emulator Motorolla dari J2ME wireless toolkit.

J2ME adalah satu set spesifikasi dan teknologi yang fokus kepada perangkat konsumen. Perangkat ini memiliki jumlah memori yang terbatas, menghabiskan sedikit daya dari baterei,layar yang kecil dan bandwith jaringan yang rendah.

Program J2ME, seperti semua program JAVA adalah diterjemahkan oleh VM. Program-program tersebut dikompile ke dalam bytecode dan diterjemahkan denga Java Virtual Machine(JVM).Ini berarti bahwa program-program tersebut tidak berhubungan langsung dengan perangkat.

J2ME menyediakan suatu interface yang sesuai dengan perangkat. Aplikasi-aplikasi tersebut tidak harus dikompile ulang supaya mampu dijalankan pada mesin yang berbeda. Inti dari J2ME terletak pada configuration dan profile-profile. Suatu configuration menggambarkan lingkungan runtime dasar dari suatu sistem J2ME. Ia menggambarkan core library, virtual machine, fitur keamanan dan jaringan.

Bekerja dengan FormBekerja dengan Form memungkinkan Anda untuk menampilkan beberapa komponen

GUI semacam daftar pilihan, masukan teks (textbox) dalam satu layar. Form diimplementasikan oleh class javax.microedition.lcdui.Form. Form dapat menampung komponen-komponen yang disebut item dalam satu layar. Item tersebut adalah textfield, image, date field, gauge dan choice group. Item-item tersebut merupakan implementasi dari class turunan Item(javax.microedition.lcdui.Item). public Form(String title) public Form(String title, Item[] items)

Konstruktor pertama, menyediakan sebuah form dengan judul form seperti parameter title yang diberikan, sedangkan konstruktor kedua mendefinisikan item-item apa saja yang akan ada di form yang akan dibuat. Komponen Form :• ChoiceGroup Class ini menyediakan komponen yang mirip dengan list, yakni menyediakan daftar pilihan. • DateField Class ini menyediakan komponen untuk memasukkan informasi tanggal dan waktu. • Gauge Class ini menyediakan komponen grafik horisontal yang biasanya digunakan untuk memberikan gambaran berapa persen proses berjalan. • Image dan ImageItem Class ini menyediakan komponen grafik untuk manipulasi gambar. • StringItem Class ini menyediakan komponen teks string yang tidak bisa diedit oleh pengguna. • TextField Class ini menyediakan komponen untuk masukan teks string oleh pengguna.

Page 3: java phpmysql

Ada beberapa nilai yang bisa digunakan untuk parameter ini yaitu : TextField.ANY : Artinya Anda bisa memasukkan sembarang karakter teks TextField.EMAILADDR : Artinya Anda bisa memasukkan teks yang merupakan

alamat email. Misalnya : [email protected] TextField.NUMERIC : Artinya Anda hanya bisa memasukkan teks berupa angka

saja TextField.PHONENUMBER : Artinya Anda hanya bisa memasukkan teks berupa

nomor telepon saja misalnya +6281234567 TextField.URL : Artinya Anda hanya bisa memasukkan teks berupa alamat web

atau URl lain, misalnya http://java.sun.com TextField.PASSWORD : Seperti memasukkan password pada saat login ke

Windows, masukan Anda akan ditampilkan dengan karakter tertentu, misalnya *.

ChoiceGroup Class ChoiceGroup(javax.microedition.lcdui.ChoiceGroup) merupakan class turunan dari class abstract javax.microedition.lcdui.Item yang menyediakan masukan pilihan (multiple choice) pada layar. Konstruktor dari class ChoiceGroup ini ada dua yaitu:

public ChoiceGroup(String title, int choiceType) public ChoiceGroup(String title, int choiceType, String[] choiceElement, Image[] choiceImages)

Parameter-parameter: • String title Untuk memberikan title pada daftar pilihan yang ditampilkan. • int choiceType Tipe pilihan yang digunakan dapat berisi: Choice.EXCLUSIVE Berarti setiap saat hanya bisa dipilih 1 buah pilihan saja. Choice.MULTIPLE Berarti pengguna bisa memilih lebih dari 1 pilihan. Choice.POPUP Pilihan dalam bentuk popup, dan user hanya bisa memilih 1 pilihan.

TickerTicker merupakan teks yang berjalan pada bagian atas layer aplikasi MIDlet. Sebuah ticker dapat ditempatkan pada objek-objek turunan class Screen yang telah disebutkan yaitu TextBox, List, Form dan Alert. Untuk menambahkan ticker ke screen lakukan seperti berikut:

Ticker t = new Ticker("J2ME") ; t.setTicker(tick); Display.getDisplay(this).setCurrent(t);

keterangan : t adalah Objek dari Textbox, sedangkan display adalah Objek Display.

Page 4: java phpmysql

3. PROGRAM J2ME

databasee.javaimport java.io.*;import javax.microedition.io.*;import javax.microedition.lcdui.*;import javax.microedition.midlet.*;import java.util.*;

/** * @author Zulfikar cahya */public class databasee extends MIDlet implements CommandListener {

Display d = Display.getDisplay(this); List ls1; TextField nama1,email,komentar,nama2,nama; Command ok = new Command("Proses", Command.OK, 1); Command ok1 = new Command("Proses", Command.OK, 1); Command ok2 = new Command("Proses", Command.OK, 1); Form form1,form4,f3,f4,f5,f1; Alert alert1; Command cmExit = new Command("Exit", Command.EXIT, 1); Command cmOK = new Command("Pilih", Command.OK, 2); Command cmBack = new Command("Back",Command.OK,1); Command go = new Command("Search",Command.OK,1);

public void startApp() { awal(); }

public void pauseApp() { }

public void destroyApp(boolean unconditional) {

} public void awal() { d=Display.getDisplay(this); ls1 = new List ("Pilihan", Choice.IMPLICIT); ls1.append("1.Beri Komentar\n", null); ls1.append("2.Search Komentar\n", null); ls1.append("3.Delete Komentar\n", null); ls1.append("4.Tampilkan Komentar\n", null); ls1.append("5.Ubah Komentar\n", null); ls1.addCommand(cmExit); ls1.addCommand(cmOK); ls1.setCommandListener(this); d.setCurrent(ls1); } public void daftar(){ form1 = new Form("Pendaftaran"); nama = new TextField("Nama", null, 25, TextField.ANY); email = new TextField("Email", null, 25, TextField.ANY); komentar = new TextField("Komentar",null, 200, TextField.ANY); d=Display.getDisplay(this); form1.append(nama); form1.append(email); form1.append(komentar);

Page 5: java phpmysql

form1.addCommand(ok); form1.addCommand(cmBack); form1.setCommandListener(this); Display.getDisplay(this).setCurrent(form1); }

public void delete(){ form4 = new Form("DELETE"); nama = new TextField("Nama",null, 12, TextField.ANY); d=Display.getDisplay(this); form4.append(nama); form4.addCommand(ok1); form4.addCommand(cmBack); form4.setCommandListener(this); Display.getDisplay(this).setCurrent(form4); } public void proses(){ Form form2 = new Form("Konfirmasi"); try { HttpConnection con = null; InputStream masuk = null; String pesan = ""; String p1,p2; StringBuffer sb = new StringBuffer(); String URL = "http://127.0.0.1/j2me/konek.php?"; p1="nama="+nama.getString(); p2="&email="+email.getString()+"&komentar="+komentar.getString(); con = (HttpConnection)Connector.open(URL+p1+p2); masuk = con.openInputStream(); int cek; while ((cek = masuk.read()) != -1 ) { sb.append((char)cek); } pesan = sb.toString(); form2.append(pesan); form2.addCommand(cmBack); form2.setCommandListener(this); Display.getDisplay(this).setCurrent(form2); }catch (IOException e){ } } public void tampil(){ f3 = new Form("Search Data"); nama2 = new TextField("Masukkan Nama",null,15,TextField.ANY); f3.append(nama2); f3.addCommand(go); f3.addCommand(cmBack); f3.setCommandListener(this); d.setCurrent(f3); } public void tampil2(){ f4 = new Form("Info Anda"); String pesan1 = ""; String URLsite = "http://127.0.0.1/j2me/lihat.php?"; String p; p="nama="+nama2.getString(); HttpConnection con = null; InputStream in = null; StringBuffer sb1 = new StringBuffer();;

Page 6: java phpmysql

try{ con = (HttpConnection)Connector.open(URLsite+p); in = con.openDataInputStream(); int ch; while((ch = in.read()) != -1){ sb1.append((char)ch); } pesan1 = sb1.toString(); f4.append(pesan1); f4.addCommand(cmBack); f4.setCommandListener(this); Display.getDisplay(this).setCurrent(f4);

} catch(IOException e){ }

} public void prosesdelete(){ Form form2 = new Form("Konfirmasi"); try { HttpConnection con = null; InputStream masuk = null; StringBuffer sb2 = new StringBuffer(); String pesan2 = ""; String URL = "http://127.0.0.1/j2me/hapusdata.php?"; String p1; p1="Nama="+nama.getString(); con = (HttpConnection) Connector.open(URL+p1); masuk = con.openInputStream(); int cek; while ((cek = masuk.read()) != -1 ) { sb2.append((char)cek); } pesan2 = sb2.toString(); form2.append(pesan2); form2.addCommand(cmBack); form2.setCommandListener(this); Display.getDisplay(this).setCurrent(form2); }catch (IOException e){ } }

public void view(){ Form form2 = new Form("Konfirmasi"); try { HttpConnection con = null; InputStream masuk = null; StringBuffer sb3 = new StringBuffer(); String pesan3 = ""; String URL = "http://127.0.0.1/j2me/tampil.php?"; con = (HttpConnection) Connector.open(URL); masuk = con.openInputStream(); int cek; while ((cek = masuk.read()) != -1 ) { sb3.append((char)cek); } pesan3 = sb3.toString(); form2.append(pesan3); form2.addCommand(cmBack);

Page 7: java phpmysql

form2.setCommandListener(this); Display.getDisplay(this).setCurrent(form2); }catch (IOException e){ } } public void formupdate(){ f1 = new Form("Ubah Komentar Anda"); nama = new TextField("Nama", null, 25, TextField.ANY); email = new TextField("Email", null, 25, TextField.ANY); komentar = new TextField("Komentar",null, 200, TextField.ANY); d=Display.getDisplay(this); f1.append(nama); f1.append(email); f1.append(komentar); f1.addCommand(ok2); f1.addCommand(cmBack); f1.setCommandListener(this); Display.getDisplay(this).setCurrent(f1); }

public void prosesupdate(){ Form form2 = new Form("Konfirmasi"); try { HttpConnection con = null; InputStream masuk = null; String pesan = ""; String p1,p2; StringBuffer sb = new StringBuffer(); String URL = "http://127.0.0.1/j2me/update.php?"; p1="nama="+nama.getString(); p2="&email="+email.getString()+"&komentar="+komentar.getString(); con = (HttpConnection)Connector.open(URL+p1+p2); masuk = con.openInputStream(); int cek; while ((cek = masuk.read()) != -1 ) { sb.append((char)cek); } pesan = sb.toString(); form2.append(pesan); form2.addCommand(cmBack); form2.setCommandListener(this); Display.getDisplay(this).setCurrent(form2); }catch (IOException e){ } } public void Exit(){ notifyDestroyed(); }

public void commandAction (Command c, Displayable di ){ // public void commandAction(Command c, Displayable di) { // String selek=c.getLabel(); //System.out.println (selek); if (c == cmOK){ if(ls1.isSelected(0)) daftar(); else if(ls1.isSelected(1)) tampil(); else if(ls1.isSelected(2))

Page 8: java phpmysql

delete(); else if(ls1.isSelected(3)) view(); else if(ls1.isSelected(4)) formupdate(); } else if(c == go){ tampil2(); } else if (c == ok){ proses(); } else if (c == ok1){ prosesdelete(); }else if (c == ok2){ prosesupdate(); } else if (c == cmBack) awal(); else if (c == cmExit) Exit(); }

}

lihat.php -> cari data<?php$dtnama = $_GET["Nama"];echo "Nama yang anda cari: $dtnama \n";$conn=mysql_connect("localhost","root","") or die("koneksi gagal");mysql_select_db("sendcerpen",$conn);$hasil=mysql_query("select * from daftartamu where Nama='$dtnama'",$conn);if($hasil) {while($row=mysql_fetch_row($hasil)) {echo "Nama : " . $row[1];echo "\n";echo "Email : " . $row[2];echo "\n";echo "Comment : ".$row[3];echo "\n\n";}}else echo "maaf, Data yang anda cari tidak ada \n"?>

tampil.php -> tampilkan data<?php$conn=mysql_connect("localhost","root","") or die("koneksi gagal");mysql_select_db("sendcerpen",$conn);$hasil=mysql_query("select * from daftartamu",$conn);if($hasil) {while($row=mysql_fetch_row($hasil)) {echo "Nama : " . $row[1];echo "\n";echo "Email : " . $row[2];

Page 9: java phpmysql

echo "\n";echo "Comment : ".$row[3];echo "\n\n";} }

update.php -> edit data<?php$Nama = $_GET['Nama'];$Email = $_GET['Email'];$Comment = $_GET['Comment'];$koneksi=mysql_connect("localhost","root","");mysql_select_db("sendcerpen",$koneksi);$query=mysql_query("update daftartamu set Nama='$Nama',Email='$Email',Comment='$Comment' where Nama='$Nama'", $koneksi);if($query)echo "DATA SUDAH TERUPDATE";else echo "DATA GAGAL UPDATE ATAU NAMA ANDA BELUM TERDAFTAR/ SALAH"?>

hapusdata.php -> hapus data<?php

$Nama = "";if(isset($_GET['Nama'])){ $Nama = $_GET['Nama'];}$koneksi = mysql_connect("localhost","root","");mysql_select_db("sendcerpen",$koneksi);$sql = "DELETE FROM `sendcerpen`.`daftartamu` WHERE `daftartamu`.`Nama` = '$Nama'";mysql_query($sql);if(mysql_errno() == 0){

echo "KOMENTAR TELAH DIHAPUS";}else{

echo "KOMENTAR GAGAL DIHAPUS";}

?>

konek.php -> simpan<?php$Nama = $_GET["Nama"];$Email = $_GET["Email"];$Comment = $_GET["Comment"];

$conn=mysql_connect("localhost","root","") or die ("Koneksi gagal");mysql_select_db("sendcerpen",$conn);

$query = "INSERT INTO `sendcerpen`.`daftartamu`(`Nama`,`Email`,`Comment`)VALUES('$Nama', '$Email','$Comment')";

$hasil = mysql_query($query);if ($hasil) echo "Komentar telah terkirim\n";

else echo "Komentar gagal dikirim\n";

echo "Nama : $Nama\n";

Page 10: java phpmysql

echo "Email : $Email\n";echo "Komentar : $Comment\n\n";?>

4. Tampilan Emulator Tampilan awal J2ME : Pilihan Registrasi:

Registrasi berhasil: Edit User:

Update Berhasil: Tampilkan User yg terdaftar:

Page 11: java phpmysql

Delete User: Delete berhasil:

Tampilkan user: Search user:

Database Akhir :

Page 12: java phpmysql
Page 13: java phpmysql

5. ANALISA

Pada percobaan kelima praktikum Internet Programming yang berjudul

APLIKASI J2ME PADA WEB ini dibuatlah aplikasi J2ME dengan koneksi database.

Dengan pemrograman java ini ditampilkanlah halaman web secara sederhana pada

emulator yang telah tersedia bersama NetBeans IDE6.9 sebagai software pemrograman

java. Database yang digunakan pada pemrograman java ini tetap menggunakan database

seperti pada WAP dan WEB yaitu database berbasis phpmyadmin.

Pertama-tama, dibuatlah project pada NetBeans -> Mobile App -> Midlet. Lalu

akan terbentuk file deengan ekstensi *.java. Disini nama filenya adalah insyaallah.java.

Disinilah segala program java ditulis seperti tampak pada program yang terdiri dari beberapa

fungsi.import java.io.*;import javax.microedition.io.*;import javax.microedition.lcdui.*;import javax.microedition.midlet.*;import java.util.*;

public class p1 extends MIDlet implements CommandListener {

Display d = Display.getDisplay(this); List ls1; TextField nama1,password,email,nama2,nama; Command cmNext = new Command("Masuk", Command.OK, 1); Form form1,form4,f3,f4,f5,f1,form2, form21, form41; Alert alert1;

public void startApp() { awal(); }

public void awal() {

d=Display.getDisplay(this);

ls1 = new List ("Pilihan", Choice.IMPLICIT);

ls1.append("1.Registrasi\n", null);

ls1.append("2.Search User\n", null);

ls1.append("3.Delete User\n", null);

membuat alert

untuk menampilkan form-variable d

variable textfield utk inputan datamembuat list

p1 sesuai nama .java. Disini berisi command yg akan dijalankan pada program

memulai aplikasi dari public void awal()

Page 14: java phpmysql

ls1.append("4.Tampilkan User\n", null);

ls1.append("5.Edit Data\n", null);

ls1.addCommand(cmExit);

ls1.addCommand(cmOK);

ls1.setCommandListener(this);

d.setCurrent(ls1);

public void awal() merupakan halaman utama pada tampilan aplikasi,

halaman ini berisi list pilihan menu registrasi, edit, delete, tampilkan, dan search user

public void daftar(){ form1 = new Form("Pendaftaran"); nama = new TextField("nama", null, 25, TextField.ANY); password = new TextField("password", null, 25, TextField.ANY); email = new TextField("email",null, 200, TextField.ANY); d=Display.getDisplay(this); form1.append(nama); form1.append(password); form1.append(email); form1.addCommand(ok); form1.addCommand(cmBack); form1.setCommandListener(this); Display.getDisplay(this).setCurrent(form1);

public void daftar() merupakan halaman untuk registrasi/ pendaftaran user baru dengan textfield nama, password, dan email

public void delete(){ form4 = new Form("DELETE"); nama = new TextField("nama",null, 12, TextField.ANY); d=Display.getDisplay(this); form4.append(nama); form4.addCommand(ok1); form4.addCommand(cmBack); form4.setCommandListener(this); Display.getDisplay(this).setCurrent(form4);

public void delete() dan public void prosesdelete()merupakan program untuk menampilkan textfield nam dan proses yang menghapus database berdasarkan nama yang diinputkan. Program ini terhubung dengan proses hapusdata.php.

public void prosesdelete(){ Form form2 = new Form("DATA USER"); try { HttpConnection con = null; InputStream masuk = null; StringBuffer sb2 = new StringBuffer(); String pesan2 = ""; String URL = "http://202.57.9.234/uas/cucuk/j2me/hapusdata.php?"; String p1;

Page 15: java phpmysql

p1="nama="+nama.getString(); con = (HttpConnection) Connector.open(URL+p1); masuk = con.openInputStream(); int cek; while ((cek = masuk.read()) != -1 ) { sb2.append((char)cek); } pesan2 = sb2.toString(); form2.append(pesan2); form2.addCommand(cmBack); form2.setCommandListener(this); Display.getDisplay(this).setCurrent(form2); }catch (IOException e){ }

public void view(){ Form form2 = new Form("DATA USER"); try { HttpConnection con = null; InputStream masuk = null; StringBuffer sb3 = new StringBuffer(); String pesan3 = ""; String URL = "http://202.57.9.234/uas/cucuk/j2me/tampil.php?"; con = (HttpConnection) Connector.open(URL); masuk = con.openInputStream(); int cek; while ((cek = masuk.read()) != -1 ) { sb3.append((char)cek); } pesan3 = sb3.toString(); form2.append(pesan3); form2.addCommand(cmBack); form2.setCommandListener(this); Display.getDisplay(this).setCurrent(form2); }catch (IOException e){ }

public void view(){ adalah program untuk menampilkan data user yang telah terdaftar dalam database

public void formupdate(){

f1 = new Form("Ubah data Anda");

nama = new TextField("nama", null, 25, TextField.ANY);

password = new TextField("password", null, 25, TextField.ANY);

email = new TextField("email",null, 200, TextField.ANY);

d=Display.getDisplay(this);

f1.append(nama);

f1.append(password);

f1.append(email);

f1.addCommand(ok2);

Page 16: java phpmysql

f1.addCommand(cmBack);

f1.setCommandListener(this);

Display.getDisplay(this).setCurrent(f1);

}

public void prosesupdate(){

Form form2 = new Form("DATA USER");

try {

HttpConnection con = null;

InputStream masuk = null;

String pesan = "";

String p1,p2;

StringBuffer sb = new StringBuffer();

String URL =

"http://202.57.9.234/uas/cucuk/j2me/update.php?";

p1="nama="+nama.getString();

p2="&password="+password.getString()

+"&email="+email.getString();

con = (HttpConnection)Connector.open(URL+p1+p2);

masuk = con.openInputStream();

int cek;

while ((cek = masuk.read()) != -1 ) {

sb.append((char)cek);

}

pesan = sb.toString();

form2.append(pesan);

form2.addCommand(cmBack);

form2.setCommandListener(this);

Display.getDisplay(this).setCurrent(form2);

}catch (IOException e){

}

Formupdate dan prosesupdate adalah program untuk edit database yang terhubung dengan

file update.php.

Selanjutnya, untuk program PHP sama dengan proses pada WEB.

Page 17: java phpmysql

6. Kesimpulan

Pembuatan Aplikasi WEB dengan J2ME menggunakan koneksi database dan

PHP yang sama dengan WEB dan WAP. Yang berbeda adalah bahasa

pemrograman yang menggunakan java.

7. Daftar Pustaka

Modul Praktikum Internet Programming Modul 5

Modul Praktikum Internet Programming Modul 9, 10 J2ME – Zen Hadi