Selasa, 18 September 2007

Tutorial Javascript

Ini adalah tulisan berseri yang saya buat, dan ini adalah tulisan untuk seri pertama.



Arahan Awal Untuk Anda

Sebelum Anda membuat sebuah aplikasi web dengan teknologi yang canggih dan luar biasa dengan berbagai macam efek yang akan membuat, mungkin sebuah revolusi, terlebih dahulu Anda harus mencamkan suatu hal yang paling penting dalam pemrograman Javascript ini. Hal tersebut adalah: tidak semua browser yang nantinya akan digunakan oleh user Anda mendukung semua fitur Javascript yang Anda buat, dan walaupun browser tersebut memberikan dukungan yang semakin luas, Anda tidak dapat mengharapkan bahwa semua fitur yang Anda miliki akan didukung oleh browser yang nantinya user Anda pergunakan, dan Anda juga tidak dapat memaksakan mereka untuk menggunakan browser yang Anda inginkan.

Panjang dan mengerikan bukan? Tapi itulah kenyataan yang harus Anda dapati disaat nantinya Anda berpetualangan dengan beberapa ratus baris code di belantara web yang kejam. Camkan hal tersebut sehingga saat nantinya Anda telah selesai dengan satu buah project, Anda tidak akan menangis mengetahui bahwa beberapa ratus baris kode yang Anda telah tulis ternyata tidak dapat digunakan.

Apa itu Javascript

Dari beberapa sumber yang dapat dipercaya, Javascript diinformasikan sebagai sebuah bahasa pemrograman yang diikutkan pada sebuah halaman web dengan tujuan membuat sebuah aplikasi web yang interaktif. Menggunakan Javascript Anda bisa melakukan sebuah proses pemeriksaan masukan user pada sebuah form, dan bahkan memodifikasinya. Selain itu Anda bisa menambahkan bagian dari halaman web Anda secara interaktif, menghilangkannya, serta berbagai hal-hal menarik lainnya.

Program Javascript akan dijalankan oleh satu buah halaman web. Saat halaman web tersebut ditutup, maka Javascript juga akan berhenti dijalankan. Untuk memberikan kemampuan berkomunikasi diantara halaman web, Anda bisa mempergunakan fasilitas untuk memanipulasi Cookies yang telah tersedia sebagai fasilitas standart pada Javascript.

Javascript sendiri merupakan sebuah bahasa pemrograman yang dijalankan pada halaman web dari sisi client. Karena itu Javascript disebut bersifat Client Side. Hal ini tentunya berbeda dengan bahasa yang digunakan untuk membuat aplikasi web lainnya, seperti PHP, ASP, JSP yang bersifat Server Side, atau dijalankan di server. Sebagai tambahan, Anda jangan bingung dan menyamakan Javascript dengan bahasa Java, karena walaupun syntak yang digunakan hampir sama, Java dan Javascript merupakan bahasa yang sangat berbeda kalau dipandang dari sisi proses eksesuksi programnya.

Menambahkan Javascript Pada Halaman Web

Untuk menambahkan kode Javascript pada sebuah halaman web, Anda harus menuliskankannya diantara kode <script language=Javascript> dan </script>. Dengan cara demikianlah sebuah browser dapat memisahkan diantara bagian kode Javascript yang Anda miliki dan kode HTML pada sebuah halaman web.

Sebagai contoh:

<script language=Javascript>
// ini bagian kode javascript
</script>


Javascript Untuk Browser yang Tidak Menginginkannya

Mungkin ada beberapa browser yang tidak mengerti tentang Javascript yang biasanya merupakan sebuah browser tua (siapa tahu user Anda menggunakannya). Maka Anda bisa menambahkan tag HTML untuk komentar seperti dibawah ini.

<script language=Javascript>
<!--
// ini bagian kode javascript
-->
</script>


Selain itu apabila sebuah browser telah diset untuk tidak menjalankan perintah Javascript, namun Anda ingin user menjalankannya, maka Anda bisa menggunakan tag <noscript>.


<noscript>
<p>Aktifkan Javascript atau Anda tidak mendapatkan hasil yang Anda inginkan.</p>
</noscript>


Selalu Tambahkan Komentar Pada Kode Anda

Saat kode Anda nantinya dibagi-bagi dengan programmer lainnya, atau sebagai salah satu petunjuk bagi Anda, maka bagian-bagian penting dari kode Anda bisa tambahkan komentar. Hal ini diperlukan agar disaat Anda atau programmer lainnya yang harus melakukan perbaikan atau penambahan fitur, programmer tidak harus melakukan tracking ulang untuk mengetahui kegunaan dari kode yang sebelumnya telah Anda tulis. Selain itu adalah sebuah praktek pemrograman yang baik apabila Anda bisa menambahkan komentar pada bagian-bagian kode Anda yang penting.

Untuk menambahkan komentar, Anda tinggal menggunakan tanda “//” untuk satu baris komentar, atau “/*” yang ditutup tanda “*/” untuk menambahkan komentar dengan banyak baris.


<script language=Javascript>
<!--
// ini komentar satu baris
/*
ini komentar banyak baris
jangan lupa tutup dengan tanda ini
*/
-->
</script>


Kapankah Script Saya Dijalankan?

Saat browser me-load sebuah halaman dan mendapatkan baris perintah yang diketahuinya sebagai kode Javascript, maka saat itu juga program Anda akan dijalankannya. Misalnya sebuah kode yang akan menampilkan sebuah pesan bagi user.


<script language=Javascript>
alert(‘Hi, Anda sedang menjalankan program Javascript !’);
</script>


Namun pada beberapa kasus kita harus mengatur kapan kita menginginkan sebuah perintah Javascript dijalankan. Untuk itu kita bisa memasukkannya kedalam sebuah fungsi yang akan dijalankan nantinya bersamaan dengan terjadinya sebuah event. Misalnya kita ingin agar user diberitahu bahwa dia akan dibawa ke halaman web yang lain saat dia mengklik sebuah link url.


<script language=Javascript>
function go_further()
{
alert(‘Anda akan dibawa ke halaman web lain …’);
return true;
}
</script>

<a href=”I_Love_YOU.html” onclick=”go_further();”>I Love You</a>


Maka seperti contoh diatas kita bisa mempergunakan event dari elemen HTML untuk sebuah link (a) saat diklik, yang dalam hal ini adalah onclick, untuk kemudian menjalankan perintah Javascript kita bernama go_further().

Perhatikan bahwa perintah Javascript kita masukkan diantara double quote (“). Selain itu juga program diatas bisa kita singkat menjadi seperti ini.


<a href=”I_Love_YOU.html” onclick=”alert(‘Anda akan dibawa ke halaman web lain …’);” >I Love You</a>


Sekarang perhatikan bahwa perintah untuk menampilkan pesan tersebut ternyata bisa langsung kita ketikkan didalam event yang kita inginkan. Namun bagaimana jika kita menginginkan bahwa pesan yang tampil memiliki double quote didalamnya. Misalnya Anda ingin menampilkan pesan seperti ini: Anda akan dibawa ke halaman “I Love You”. Apabila Anda menuliskan seperti ini:


<a href=”I_Love_YOU.html” onclick=”alert(‘Anda akan dibawa ke halaman “I Love You”’);” >I Love You</a>


maka perintah tersebut tidak akan dijalankan karena browser akan kebingungan untuk menjalankan perintah Javascript, yang disebabkan karena untuk menunjukkan perintah Javascript yang kita gunakan kita harus menggunakan double quote untuk itu. Sehingga saat Anda menggunakan perintah diatas, alih-alih browser menampilan pesan seperti yang Anda inginkan, browser akan menganggap perintah Javascript kita hanya sampai ke bagian setelah kalimat halaman. Untuk memperbaikinya kita harus mengganti double quote tersebut dengan HTML tag “"e”.


<a href=”I_Love_YOU.html” onclick=”alert(‘Anda akan dibawa ke halaman "eI Love You"e’);” >I Love You</a>


Memanipulasi Sebuah Event

Kita bisa juga memanipulasi sebuah event. Misalkan merujuk pada contoh sebelumnya, kita ingin agar user diberitahukan lebih dulu kemana ia akan diantarkan dan kita ingin agar user bisa memiliki pilihan untuk mengikuti link tersebut atau tidak. Maka dengan program yang sederhana kita bisa melakukan hal tersebut.


<script language=javascript>
function go_further()
{
// Tanya user ingin di bawa ke halaman I_Love_you.htm
var ask = confirm('Anda ingin dibawa ke I_Love_you.htm?');
if(ask == true) // user mengatakan ya
return true;
return false; // lainnya dia tidak ingin
}
</script>
<a href="I_Love_you.htm" onclick="return go_further();">Ke I Love You</a>


Pada contoh diatas kita tinggal menambahkan nilai kembalian pada fungsi go_further(), sehingga saat user mengatakan tidak, kita akan mengembalikan nilai false dan true bila sebaliknya. Sedangkan pada bagian event onclick kita menambahkan perintah return yang akan memerintahkan browser untuk mengevaluasi nilai kembalian dari go_further. Sehingga saat nilai kembaliannya true browser akan melanjutkan dengan perintah selanjutnya, atau membatalkan event klik apabila nilai kembaliannya adalah false.

Namun yang harus Anda perhatikan sekali lagi, bahwa tidak semua event dikenali di semua browser. Oleh karena itu Anda harus melakukan percobaan pada browser yang kemungkinan digunakan oleh user Anda, atau Anda harus melakukan sebuah perkecualian.

Kapankah Saya Menggunakan Javascript

Pertanyaan yang gampang-gampang susah karena harus dipertanyakan pada kebutuhan aplikasi Anda. Satu fakta yang tidak bisa disangkal, dengan Javascript maka beban loading halaman page Anda akan semakin berat. Akan tetapi hal tersebut bisa dikurangi dengan membuat sebuah program yang efektif dan efisien, walaupun hal tersebut kurang bisa dinilai secara objektif. Namun karena sekarang harga koneksi internet untuk ukuran transfer data yang besar semakin murah, saya rasa hal tersebut bisa ditanggulangi.

Namun bagi saya sendiri, apabila saya menginginkan adanya halaman yang interaktif, adanya proses yang ingin saya lakukan pada browser client langsung (seperti validasi form dsb), maka saya akan memilih untuk menggunakan Javascript.

Selasa, 11 September 2007

Orang MS Pake Firefox

Bahkan orang Microsoft, Stephen Toulouse, Microsoft's security program manager, menggunakan Firefox ... trus IE dikemanain. Baca disini!
Menurut saya inilah gambaran utama tentang jargon : "tidak ada software yang sempurna" :) ...

Rabu, 05 September 2007

Kode Lama

Ini adalah beberapa kode lama yang saya bikin untuk belajar. Dibuat dengan menggunakan MS Visual Basic 6 yang saya sertakan juga tentunya source code nya ;) ....

Array Dinamis

Program ini, akan memberikan contoh penggunaan class module di VB sekaligus penggunaan array dinamis dengan VB 6.0. Dengan class yang disediakan Anda bisa men-remove, add array secara dinamis dan sangat memudahkan Anda. Sangat berguna bagi Anda yang menginginkan aplikasi stack atau list dengan menggunakan array. Plus satu project yang mensimulasikan kegunaanya. [download]

MatchPuzzle

Kalau anda menyukai game puzzle yang memusingkan maka anda perlu mencoba permainan ini. Permainan ini mangharuskan anda melakukan sorting terhadap angka yang telah diacak secara random menggunakan sebuah aturan yang unik, anda hanya bisa melakukannya dengan melakukan rotasi di tempat tertentu. Semakin banyak jumlah kolom dan barisnya, semakin sulit juga permainan ini diselesaikan. Buat anda yang suka ngoding, sebagian fitur walau sedikit masih perlu ditambah untuk mempermanis permainan ini. Tapi secara umum game ini telah siap dimainkan. ENJOY ... [download]

JST Pengenalan Huruf

Program ini dibuat untuk menyelesaikan tugas Jaringan Syaraf Tiruan. Tujuan pembuatannya hanya sebagai proof of concept, benar enggak sih bahwa komputer itu bisa mengenal huruf ??. Gunakan dengan bijak yah, jangan dipakai untuk contekan tugas kamu :).[download]

NB: Jangan complain kalo programnya gak jalan :D ....

Ambil Record Diantara Tanggal

Salah satu permasalahan klasik dalam berbagai proses query adalah mencari record diantara 2 buah tanggal. Sampai pada saat ini, hal ini banyak sekali ditanyakan kepada saya, serta merupakan permasalahan yang seringkali menyebabkan bug pada saat program dijalankan di komputer yang lain. Padahal sebenarnya hal ini bisa diatasi dengan mengetahui karakteristik dari proses query untuk format tanggal yang valid di sebagian besar program database (MSAccess dan MySQL;yang lain?).

Format penanggalan yang sejauh ini diketahui oleh penulis dan bisa berjalan dengan benar adalah menggunakan format YYYY-MM-DD. Perhatikan bahwa disini digit yang digunakan harus 2 digit untuk bulan dan tanggal serta 4 digit untuk tahun. Sehingga format tanggal MM-DD-YYYY seperti 12-01-2007 kadangkala tidak diproses dengan baik oleh parser pada mesin database, khususnya oleh MySQL. Karena itu diperlukan sebuah mekanisme yang tepat agar perintah SQL kita valid.

Sebagai contoh valid perintah SQL adalah berikut ini (untuk MSAccess).


SELECT NIP,NamaMahasiswa FROM mMahasiswa
WHERE dtLahir > #2007-12-01# AND dtLahir < #2007-12-31#


Sedangkan di MySQL ...


SELECT NIP,NamaMahasiswa FROM mMahasiswa
WHERE dtLahir > '2007-12-01' AND dtLahir < '2007-12-31'


Pada program saya untuk mengenerate perintah SQL saya biasanya menggunakan sebuah fungsi khusus, agar perintah SQL saya untuk tanggal bisa diproses dengan valid. Misalnya disini saya menggunakan fungsi gSQLDate(...) dengan vbScript


Function gSQLDate(sD,sM,sY)
gSQLDate = ""
If len(sD) = 1 Then sD = "0" & sD
If len(sM) = 1 Then sM = "0" & sM
gSQLDate = sY & "-" & sM & "-" & sD
If dbUse = "msaccess" Then _
gSQLDate = "#" & gSQLDate & "#" Else _
gSQLDate = "'" & gSQLDate & "'"
End Function


Sehingga pada program saya, saya tinggal menggunakannya seperti ini (dengan vbScript).


SQLString = "SELECT NIP,NamaMahasiswa FROM mMahasiswa " & _
" WHERE dtLahir > " & gSQLDate(1,12,2007) & _
" AND dtLahir < " & gSQLDate(31,12,2007)

Sabtu, 25 Agustus 2007

Spam Sopan ??

Tadinya rada jengkel pas dapat lagi spam di salah satu email accountku yang memberlakukan unlimited space. Cuma pas scroll agak kebawah, ada yang menarik, disitu tertulis:

This messages is an advertisement.
Please either click here or visit .... to permanently unsubscribe for all featuring mailings and offers from ....

Pas sudah diklik, kita dibawa ke sebuah halaman web dan disuruh buat ngisi alamat email kita. Cuman entah apa itu cuma akal-akalan or memang beneran bisa; tapi kalau memang benar dan semua yang bikin iklan lewat email bikin hal yang sama, pastinya email akan menjadi sesuatu yang lebih beradab :) ...

NB: Bukankah orang beradab itu sering minta izin dulu untuk masuk rumah kita ???

Jumat, 24 Agustus 2007

Makam Steve Jobs ?????

Coba aja lihat deh ...



Lebih lengkap disini ....

Wew ...Variable uses an Automation type not supported in VBScript

Bikin table seperti ini :


create table mWilayah
(
id int unsigned not null auto_increment,
name varchar(20) default '',
primary key(id)
)
type=InnoDB;


lalu mengambil kode dengan Recordset

Response.Write("Ini ID:" & Rs.Fields("id").value & "<br>")


akan didapat error seperti ini kurang lebih pesannya ....

variable uses an Automation type not supported in VBScript

Fiuh ... bingung sampe harus uninstall MySQL 5.0 ... jadi 4.xxxx, ternyata saat dicari tahu dengan coba sendiri, ketika di bagian field id jadi


....
id int not null auto_increment,
....


semuanya berjalan dengan lancar :)

NB: perhatikan sekarang bukan unsigned lagi).

Selasa, 07 Agustus 2007

MySQL Crash & Recovery

Ada bencana yang tak terduga tadi malam. Entah karena sudah terlalu mengantuk dan tangan sudah mulai gemetar, bencana yang saya takutkan terjadi. Karena saya adalah shell mania dan lebih menyukai hal-hal yang rumit, maka saya lebih suka untuk melakukan administrasi database melalui shell dan bukan tool seperti yang sering orang lain sukai; maka kelangkaan bodoh terjadi saat saya lupa untuk melakukan proses delete table tanpa tambahan perintah WHERE.


DELETE FROM user;


WEw ... akhirnya semua informasi tentang user yang ada di database SISKUM yang saya kelola habis terhapus tanpa sisa. Kepala agak pusing dan mata yang sudah mengantuk menambah gejala kronis sakit hati karena pacar yang tak mau mengerti kegiatan komputer dari pagi sampai malam semakin menjadi!! Sayapun tertidur tanpa ada rasa bersalah sama sekali!

Thanks GOD karena tulisan diatas hanya merupakan sebuah disaster drama that could be happen into your real life ... Namun sebenarnya bukan hanya kesalahan yang dikarenakan human error, tapi juga kesalahan system OS dan berbagai kemungkinan yang terjadi. Karena itulah kemampuan untuk melakukan backup DB adalah kemampuan yang harus dimiliki oleh kita para pengembang.

DI MySQL kita diperkenalkan dengan beberapa materi tentang backup dan recovery DB menggunakan berbagai tool. Tapi saya tidak ingin bersusah menuliskan dan membahas hal tersebut sendiri karena sudah ada manual resmi yang diikutsertakan di instalasi. Selain itu untuk saya sendiri, ada 2 perintah yang paling saya sukai dari pertama saya mengetahui cara backup dan recovery MySQL.

Untuk Backup database.

MSShell> mysqldump -u root -prahasia SISKUM > hasil_dump_formatnya_SQL.sql

Sekarang coba check file hasil proses diatas dan perhatikan bahwa MySQL melakukannya dengan menuliskan langsung perintah SQL yang merupakan kumpulan perintah yang sama persis dengan perintah yang kita jalankan untuk membuat database yang kita miliki. Kalau pada tempat saya file tersebut dibuat di dalam folder bin pada tempat instalasi mysql.

Sedangkan untuk restore keseluruhan database SISKUM saya mempergunakan perintah seperti dibawah ini.

MSShell> mysql -u root -prahasia < hasil_dump_formatnya_SQL.sql

Namun apabila ada error seperti ini :

ERROR 1046 at line 11: No Database Selected

Berarti kita harus menambahkan proses pembuatan database secara manual di file kita tadi. Saya biasanya menambahkan ini pada file tersebut pada bagian paling atas.

CREATE DATABASE SISKUM;
USE SISKUM;

Perintah tersebut sama saja dengan membuat database SISKUM dan kemudian memilihnya agar baris perintah SQL dibawahnya dijalankan. Tapi yang harus diperhatikan, bahwa saya sudah yakin bahwa database SISKUM tidak ada, atau Anda akan mengalami error saat melakukannya lagi.

Lalu barulah kita mengulang perintah tadi yang seharusnya dijalankan tanpa ada pesan error.

MSShell> mysql -u root -prahasia < hasil_dump_formatnya_SQL.sql

Untuk melakukan testing, masuk saja ke mysql dan seharusnya database telah ada.

Thats all ....

Printer Friendly Page

Kali ini tantangan yang muncul adalah pembuatan printer friendly page atau apapun namanya yang akan memberikan fasilitas bagi user untuk melakukan pencetakan halaman yang diinginkannya tanpa harus terlalu banyak melakukan editing dan hasilnya nanti tidak mengikutkan bagian yang tidak penting. Karena aplikasi ini adalah aplikasi berbasis web, maka bagian ini misalnya menu, header, footer dan yang lainnya.

Dimisalkan sebuah halaman web seperti ini:


*--------------------------*
| |
| HEADER SITE |
| |
*--------------------------*
| MENU |
*-----*--------------------*
| | |
| SUB | |
| MENU| DATA |
| | YG |
| | INGIN |
| | DIPRINT |
| | |
*-----*--------------------*
| FOOTER |
*--------------------------*


Sehingga permasalahan kita adalah pada saat user memilih untuk memproses halaman tersebut menjadi printer friendly page, maka yang tampil hanyalah pada bagian DATA YG INGIN DIPRINT.

Namun sebelum hal tersebut kita lanjutkan, sebenarnya terdapat beberapa cara yang dapat dilakukan untuk implementasi printer friendly page. Cara tersebut adalah menggunakan CSS atau membuat suatu mekanisme sendiri. Untuk tulisan ini saya akan menggunakan sebuah mekanisme sendiri untuk mendapatkan halaman yang printer friendly.
Misalkan untuk format halaman web diatas kita menggunakan penulisan kode seperti ini dengan menggunakan table:


<table>
<tr>
<td>
HEADER SITE
</td>
</tr>
<tr>
<td>
MENU
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td> SUB MENU </td>
<td> DATA YANG INGIN DIPRINT </td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
FOOTER
</td>
</tr>
</table>


Untuk mendapatkan kemampuan menampilkan printer friendly page itu saya harus memikirkan sebuah mekanisme untuk memberikan penanda di halaman, dimana penanda tersebut dapat memberikan garis pemisah diantara bagian halaman yang bisa dicetak dan tidak. Penanda tersebut sendiri haruslah compatible dengan syntax yang ada dan tidak akan menimbulkan error pada saat ditampilkan di layar user. Untuk itu saya menggunakan cara yang kuno dengan menggunakan syntax comments di HTML dan tulisan unique di dalamnya. Untuk kesempatan ini saya menggunakan <!--$DPS$--> untuk "Data Print Start" dan <!--$DPE$--> untuk "Data Print End".
Karena itu format halaman web tersebut kodenya ditulis seperti ini ...


...
<td> SUB MENU </td>
<td><!--$DPS$--> DATA YANG INGIN DIPRINT <!--$DPE$--><td>
...


Kemudian permasalahan selanjutnya adalah proses untuk menampilkan halaman yang hanya menampilkan bagian diantara syntax <!--$DPS$--> dan <!--$DPE$-->. Karena saya menggunakan ASP, maka saya mencari tahu dan kemudianmendapatkan cara untuk melakukan eksekusi terhadap suatu halaman dan mendapatkan hasilnya menggunakan object Microsoft.XMLHTTP. Lalu saya tinggal menggunakan property yang dimiliki: Open, Send dan ResponseBody seperti yang ditunjukkan oleh kode dibawah ini; dimana sPageTarget adalah alamat URL lengkap halaman yang ingin kita proses.


....
Set xml_http = Server.CreateObject("Microsoft.XMLHTTP")
Call xml_http.Open( "GET", sPageTarget , false )
xml_http.Send
strContent = xml_http.responseBody
Set xml_http = Nothing
...


Namun hasil proses ini masih dalam format binary, sehingga kita harus melakukan konversi ke karakter dengan membuat sebuah fungsi konversi.


Function BinaryToString(Binary, CharSet)
'--- Converts the binary content to text
Const adTypeText = 2
Const adTypeBinary = 1
'--- Create Stream object
Dim BinaryStream 'As New Stream
Set BinaryStream = CreateObject("ADODB.Stream")
'--- Specify stream type - we want To save text/string data.
BinaryStream.Type = adTypeBinary
'--- Open the stream And write text/string data To the object
BinaryStream.Open
BinaryStream.Write Binary
'--- Change stream type To binary
BinaryStream.Position = 0
BinaryStream.Type = adTypeText
'--- Specify charset For the source text (unicode) data.
If Len(CharSet) > 0 Then
BinaryStream.CharSet = CharSet
Else
BinaryStream.CharSet = "UTF-8"
End If
'--- Open the stream And get binary data from the object
BinaryToString = BinaryStream.ReadText
End Function


Hasil yang didapatkan dari proses tersebut kemudian disimpan di variable strBody lalu diproses dengan algoritma sederhana.


...
strBody = BinaryToString(strContent, "")
content_start = instr(strBody, "") + 12
content_end = instrrev(strBody, "") ' for better feature, we used inStrRev ...
...


Seperti yang Anda tebak, kita tinggal mengambil bagian dari strBody dimulai dari content_start hingga content_end.


...
strBody = mid(strBody, content_start, content_end - content_start)
...


Dari hasil tersebut akan kita dapatkan bagian halaman yang dikatakan orang-orang sebagai printer friendly page :). Tentunya itu adalah dasar dari teknik ini dan sebenarnya kita harus melakukan beberapa percobaan yang lumayan menantang ;), misalkan bagaimana agar hasil proses tersebut bisa ditampilkan sama persis formatnya dengan sebelum dia diproses!
Saya serahkan buat Anda untuk mencoba sendiri :D ...

Selesai deh ...

thanks to www.livio.net

Jumat, 03 Agustus 2007

Rule For ASP & DB Prog.

Berdasarkan pengalaman saya yang masih novice rada advance ini ;) terdapat beberapa aturan penting dalam ASP dan hubungannya dengan pemrograman Database.
Aturan itu antara lain:


  • Selalu On Error Resume Next dilanjutkan dengan On Error Goto 0
    Akan ada 1000 alasan untuk kemalasan, tapi akan ada 1 alasan untuk membuat program Anda tidak berjalan dengan baik. Memang On Error Resume next adalah syntax yang sangat powerfull untuk memerintahkan program mengeksekusi baris selanjutnya walaupun ditemukan terdapatnya error. Tapi tahukah Anda, pada program yang menggunakan database yang sangat intents hal ini merupakan sebuah mimpi buruk karena dapat mengakibatkan server anda mengalami penurunan performance ?

  • Selalu bunuh object yang sudah Anda buat
    Memang secara otomatis ASP akan menghancurkan object yang Anda buat pada akhir script. Tapi tahukah Anda pada beberapa kasus object yang Anda buat tidak demikian saja terhapus oleh ASP? Kembali lagi pada proses yang terjadi pada aplikasi dengan menggunakan database, object yang tidak dihapus dapat meninggalkan jejak tak terlihat yang akan terus didiamkan atau dieksekusi oleh server dan memakan sebagian resource server Anda

  • Pada intinya
    jadilah programmer yang konvensional, kukuh dalam menjalankan sprit aturan pemrograman yang baik, setia pada satu aturan dan tidak poligami, serta tidak mendukung partai demokrat dan juga republikan (kok kayak USA :D). Daripada Anda harus melakukan tracing terhadap beribu baris program Anda pada saat sudah di gunakan oleh user Anda tersayang :) ...

  • Terakhir
    Jangan terlalu serius dengan tulisan ini :D ... karena you are is what you are ... (duenk ... )

Paging with MySQL dan ASP

Fiuh .. hari yang berat untuk pengguna MySQL dengan ASP hari ini. Saya sudah mendapatkan cara untuk terhubung dengan server MySQL, tapi saya hanya bisa menampilkan keseluruhan isi table di database saya dalam satu halaman. Bagaimana dengan permasalahan penampilannya yang bisa dilakukan dalam halaman yang terpisah?

Pertama kali saya kira bisa dilakukan dengan cara yang sama dengan yang dilakukan dengan MS Access, dengan adoConn adalah ADODB.Connection dan adoRS adalah ADODB.Recordset serta property Recordset yaitu PageSize dan AbsolutePage.


Call adoRS.Open(SQLQuery, adoConn, 3, 1)
if NOT (adoRS.Eof OR adoRS.Bof) Then
adoRS.PageSize = mPageSize
adoRS.AbsolutePage = mCurrentPage
...

Namun saat dijalankan, data yang saya harapkan tampil malah tidak ada.

Berbagai cara saya lakukan hingga saya menggunakan cara manual dengan melakukan pengambilan jumlah record yang dihasilkan dan memanipulasi query di mySQL Query dengan menambahkan syntax LIMIT pada SQLQuery menggunakan sebuah fungsi yang saya buat sendiri bernama SetQueryTop( ... ) seperti yang terlihat dibawah ini.


Call adoRS.Open(SQLQuery, adoConn, 3, 1)
if NOT (moCommonRS.Eof or moCommonRS.Bof) Then
moCommonRS.PageSize = mPageSize
SetRsCommonPaging = moCommonRS.PageCount
qry = SetQueryTop(sQuery, ((mCurrentPage-1)*mPageSize), mPageSize)
moCommonRS.Close()
Call moCommonRS.Open(qry, moConn, 3, 1)
moCommonRS.MoveFirst()
....


Akan tetapi bisa dibayangkan kalau record yang ada berjumlah ratusan record bahkan lebih, bagaimana saya harus melakukannya dalam 2 langkah ? hingga saya ingat salah satu hukum dalam penggunaan recordset adalah pengaturan CursorLocation. Karena saya menggunakan property dari aRecordset.AbsolutePage, maka saya harus menggunakan CursorLocation = adUseClient agar property tersebut dapat digunakan; sehingga cukup menambahkan satu baris kode saja saya sudah bisa mendapatkan hasil yang saya inginkan.


adoConn.CursorLocation = 3 ' 3 = adUseClient
Call adoRS.Open(SQLQuery, adoConn, 3, 1)
if NOT (adoRS.Eof OR adoRS.Bof) Then
adoRS.PageSize = mPageSize
adoRS.AbsolutePage = mCurrentPage
...


Kemudian semua program saya berjalan sebagaimana mestinya ... Akhirnya ... :)

Pelajaran hari ini memberikan saya gambaran bahwa secara default, nilai dari CursorLocation adalah adUseServer. Sehingga untuk beberapa keperluan spesifik saya harus melakukan setting lebih lanjut. Tapi yang harus kita ingat bahwa penggunaan CursorLocation adalah READ_ONLY pada Recordset yang terbuka dan READ_WRITE pada sebuah Connection dan pada sebuah Recordset yang tertutup. Sehingga apabila kita melakukan setting CursorLocation terhadap Recordset yang sudah dibuka (sudah dieksekusi query), maka kita tidak akan mendapat hasil apa-apa.

Tapi ssssssttttt bukankah menurut Anda judul tulisan kali ini agak .. hmmm ... parno :D ... (NB:sebelumnya judulnya pagination with MySQL dan ASP)

ASP Ke MySQL

Pertama kali saya menjadikan diri saya sebagai pengguna ASP dengan rasa iri terhadap pengguna PHP yang bisa membuat dengan mudah koneksi ke MySQL. Well, tidak mengapa, karena semuanya hanya tool dan yang paling menentukan adalah si operator :D ... walau seperti sebelumnya saya adalah seorang novice yang rada advanced :) !

Untuk itu saya ingin mencari cara yang bisa dengan mudah digunakan untuk membuat koneksi dari ASP ke MySQL server. Kemudian saya mendapatkan bahwa dengan menggunakan ODBC saya bisa melakukan hal tersebut. Akan tetapi iri berubah menjadi marah lagi ketika tahu bahwa ODBC yang digunakan untuk koneksi ke MySQL versi terbaru belum dalam tahap untuk produksi !. Uh ... Tak apalah, ternyata untuk versi sebelumnya terdapat cara yang lain yang sudah dalam versi produksi. Namun sebelumnya saya harus lebih dahulu mencari tahu bagaimana koneksi tersebut dapat dilakukan. Oleh karena itu melalui pencarian yang berat di beberapa situs menggunakan google, saya mengetahui bahwa dengan perantara myODBC driver versi 3.51 saya bisa mendapatkan hal yang sama dengan para tetangga saya pengguna PHP. Untuk itu saya mendownload drivernya dari situs mySQL di http://www.mysql.com/downloads/api-myodbc-3.51.html, dan kemudian melakukan instalasi di komputer yang saya jadikan server. Kemudian pelajaran berlanjut dengan latihan membuat koneksi ke server menggunakan DSN dengan sebuah 'connection string'.

Ternyata mudah, saya tinggal mengalokasikan sebuah ADODB connection seperti yang dilakukan dengan MS Access (bagi yang sudah pernah).


set adoConn = Server.CreateObject("ADODB.Connection")




Lalu dilanjutkan dengan membuka sebuah koneksi dengan syntax string-nya menjadi:


adoConn.Open "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=mysql; UID=root;PASSWORD=rahasia; OPTION=3"




Untuk mendapatkan hasil sebuah SQL query, saya tinggal membuat object recordsetnya dan mengambil hasil eksekusi query.


Set objRS = Server.CreateObject("ADODB.Recordset")
Set objRS = objConn.Execute("SELECT * FROM users")


Lalu melakukan looping untuk mendapatkan hasil masing-masing recordnya.


objRS.movefirst
do while not objRS.EOF
for each f in objRS.Fields
Response.Write(f.name & " = " & f.value & "<BR>")
next ' f
objRS.movenext
loop


Dan seperti yang harus dilakukan di setiap pembuatan object ...


Set objRS = nothing
Set objConn = nothing


Selebihnya adalah cerita lama :D ...

Thanks buat master web dan mas Andri Darmawan dari master web untuk resourcenya.

Why ASP

Saatnya membuat program untuk implementasi alur logika dari sistem yang akan saya bangun menggunakan bahasa pemrograman untuk aplikasi web yang saya bisa. Karena latar belakang saya adalah bahasa Basic, maka secara naluriah :) saya memilih untuk menggunakan Active Server Pages. Karena selain relatif mudah digunakan untuk saya, ASP juga memberikan saya kemudahan untuk melakukan pengembangan di komputer yang saya miliki. Hal tersebut dikarenakan project saya sebelumnya di kantor juga menggunakan ASP dan dengan memilih ASP saya tidak memerlukan proses untuk menginstal bermacam-macam program tambahan. Cukup ke control panel->lalu windows component->dan kemudian saya pilih IIS. Installer kemudian meminta saya memasukkan instalasi windows; yang lainnya tinggal memenuhi petunjuk khas instalasi windows yang mudah dan simple.

Bagi saya yang bertipe penantang keterbatasan murni dan bukan orang yang terlalu fanatik dengan bahasa tertentu dan dengan berbagai jargon tertentu, bahasa pemrograman yang saya gunakan bukanlah sesuatu yang terlalu dianggap sebagai salah satu faktor penting dalam pembuatan sebuah aplikasi. Bagi saya yang novice advanced ini ;), bahasa adalah sebuah tool. Oleh karena itu sebuah tool adalah sesuatu yang relatif terhadap sang operator, dalam hal ini adalah programmer. Oleh karena itu persetan banget dengan .NET, php atau apapun namanya yang lain! Karena selama saya bisa menggunakan ASP yang simple but faster, saya tokh masih bisa membuat sebuah aplikasi yang handal. Nah, tentunya hal tersebut bukan sekedar bergantung dengan penulisan algoritma di dalam bahasa yang saya gunakan, akan tetapi lebih merupakan gabungan diantara pengalaman, kedisiplinan dan ketekunan serta pengetahuan dan insialisasi topik permasalahan dari sistem yang saya bangun. Kata singkatnya, hal tersebut haruslah lebih dahulu di rencanakan dan didalami lebih dahulu, bukan sekedar langsung terjun berperang ria tanpa tahu bagaimana medannya.

Wuek ... aku baru tahu kalau tulisan ini terlalu melebar :D ...

Nah, terkait dengan ASP, sebenarnya ini merupakan sebuah lingkungan pengembangan aplikasi yang dibuat oleh microsoft untuk pengembangan aplikasi web, sehingga kita bisa mengatakan bahwa ASP bukan merupakan sebuah bahasa pemrograman. Sedangkan bahasa yang digunakan bisa menggunakan VBScript dan juga JScript. Kalau kita pernah menggunakan Visual Basic atau mengenal bahasa turunan dari BASIC, VBScript memiliki syntax yang sama dengannya. Sedangkan bagi yang pernah menggunakan bahasa C, JScript juga memiliki syntax yang sama. Menggunakan ASP kita bisa menggabungkan syntax HTML dan native script yang kita pilih. Sedangkan untuk menunjukkan bahwa bagian kode kita adalah bagian dari ASP, kita tinggal menambahkan tag <% dan %>, atau dengan cara lain menggunakan <script language=vbscript|javascript runat=server>.

Karena sifatnya yang seperti itulah saya bisa menggunakan kemudahan syntax basic dan menggabungkannya dengan flexibilitas dan kekayaan library yang dimiliki oleh javascript, misalnya penggunaan Regular Expression yang lebih kaya di javascript dibandingkan dengan vbscript.

Sebagai contoh adalah potongan kode dari library yang saya kembangkan dan saya gunakan untuk membuat definisi tag saya sendiri.


<%
function parseTag(byval sText)
sText = killHTML(sText)
sText = setLink(sText) ' it must be link 1st
sText = setOther(sText)
sText = setQuoteCode(sText) ' then quote
sText = setFont(sText) ' set font
sText = setSmiley(sText) ' then last ! smiley
parseTag = setBR(sText)
end function
%>


Untuk parseTag(..) tersebut saya menggunakan bahasa VBScript. Akan tetapi saya menginginkan sebuah cara untuk melakukan pemrosesan dengan tag yang saya kembangkan sendiri, misalnya [b]tebal[/b] akan menghasilkan hal yang sama dengan <b>tebal</b>, dan beberapa tag spesifik yang lain. Untuk itu saya memilih menggunakan library dari bahasa JSCript yang kaya untuk melakukan hal tersebut, dengan flexibilitas yang diberikan oleh library Regular Expression nya.

Untuk itu saya tinggal menulis syntax berikut.


<script language=javascript runat=server>
....
function setLink(sText)
{
// /(\[link)(\=?)([^\]]*)(\]{1})([^\[]+)(\[\/link\])/ - since v.0.6 a
// { s1 }{ s2}{ s3 }{ s4 }{ s5 }{ s6 }
var re = /(\[link)(\=?)([^\]]*)(\]{1})([^\[]+)(\[\/link\])/gi; // [link=abc.com]ccc[/link] OR [link]abc.com[/abc]
var s = new String(sText);
s = s.replace(re,
function(str,s1,s2,s3,s4,s5,s6)
{
var linkz = s3.length == 0 ? s5 : s3;
linkz = linkz.toLowerCase();
if(linkz.substr(0,6) != 'mailto')
{
if(linkz.toString().search(/(ht|f)tp(s?)\:\/\//i) == -1)
linkz = 'http://' + linkz;
}
if(s2.length == 0)
{
return "<a target=_blank href=\"" + linkz + "\">" + s5 + "</a>";
}
return "<a target=_blank href=\"" + linkz + "\">" + s5 + "</a>";
});
return s;
}
function removeTAGG(sText)
{
return (new String(sText)).replace(/\[([^\]]+)\]/gi, "");
}
....
</script>


Dan seperti yang dilihat, fungsinya bisa dipanggil oleh bagian ASP yang menggunakan VBScript seperti memanggil fungsi dalam bahasanya sendiri (Tentu saja ada beberapa batasan dalam variable advance). Kalau dilihat, sepertinya ASP memiliki konsep yang sama dengan salah satu sifat .NET. Hal tersebut adalah kebebasan dalam menggunakan bahasa pemrograman. Tentunya dalam hal ini tidak bisa dibilang sama dengan apa yang dimiliki oleh .NET ;).

Nah cukup sudah, saya lumayan capek neh ... mau tidur dulu yah ;)...

Kamis, 02 Agustus 2007

First Night w. MySQL

Karena keperluan sebuah project Sistem Informasi yang menggunakan data yang terlalu banyak untuk Access namun tidak terlalu banyak untuk ORACLE dan tidak juga untuk memilih menggunakan MS SQL Server, maka sebuah perhitungan sederhana dilakukan dan perhatianpun dialihkan untuk menggunakan MySQL.

Pada awalnya diputuskan menggunakan MySQL v.5 yang merupakan versi terbaru. Akan tetapi karena nantinya client dan bahasa yang digunakan adalah MS Based serta mengatasnamakan maintenance dan personil yang terbatas pengetahuannya apabila menggunakan weird OS like LINUX, then permasalahan yang muncul adalah penggunaan ODBC; karena versi yang digunakan untuk versi 5 masih dalam tahap pengembangan dan belum direkomendasikan digunakan untuk keperluan produksi. Sehingga diputuskanlah untuk menggunakan MySQL versi 4.0.12 yang akan dijalankan di mesin berbasiskan NT. Tokh masalah yang akan timbul nanti biasanya lebih banyak terkait dengan proses deployment di mesin ber-OS MS dan proses pembelajaran tentang mekanisme yang ada di MySQL sendiri dibanding MS Access yang lebih sederhana.

Maka pembelajaran pertama terkait dengan penginstalan MySQL dan proses inipun berjalan dengan indah tanpa adanya kendala yang berarti, dimana MySQL ini saya install ke "C:\mysql\" dan menggunakan proses instalasi standart saja. Karena saya ini menggunakan OS berbasis NT, maka MySQL harus saya install sebagai service lebih dahulu (walau ada yang mengatakan bahwa hal ini sudah dilakukan otomatis- tapi karena saya bukan orang yang bertipe terlalu praktis maka demi pembelajaran saya juga ingin melakukannya ;) ).

MSShell> c:\mysql\bin\mysqld-nt --install

Lalu karena tidak terlihat pesan error, saya melanjutkan dengan menjalankan service tersebut yang secara default untuk instalasi saya (dan Anda ? ;) ) adalah MySQL.

MSShell> NET START mysql
The MySql service is starting.
The MySql service was started successfully.

Yah berhasil, tapi untuk meyakinkan saya bahwa saya bisa mematikannya :), maka saya mencoba perintah untuk menghetikan service mysql ini.

MSShell> NET STOP mysql
The MySql service is stopping.
The MySql service was stopped successfully.

kemudian untuk proses lebih lanjut saya menjalankan servicenya lagi ...

Kemudian pembelajaran saya masuk ke dalam proses user management; dikarenakan ini masih dalam proses development maka diputuskan untuk menggunakan super user root dengan password 'rahasia'.

MSShell> c:\mysql\bin\mysql -u root mysql
mysql> update user SET password=PASSWORD('rahasia') WHERE user='root';
mysql> FLUSH PRIVILEGES;

Langkah kemudian dilanjutkan dengan membuat database yang akan digunakan untuk SIM ini nantinya, yang diberi nama SISKUM (Dari namanya mungkin Anda sudah tahu untuk apa ini :)) ...

mysql> CREATE DATABASE SISKUM;

Sampai saat ini saya cukup paham dengan apa yang telah terjadi. Maka saya keluar untuk melihat apa yang telah terjadi dengan komputer saya.

mysql> exit;

Menggunakan explorer saya menjelajah menuju ke foder mysql dan melihat ada beberapa folder lainnya. Namun yang menarik perhatian saya adalah folder data yang kemudian ketika dibuka akan terlihat beberapa folder lainnya yang ternyata bernama sama dengan database yang telah dibuat di mysql apabila saya menggunakan perintah "SHOW DATABASES;".

Hmm ... saya rasa cukup karena hari yang kian menanjak naik dan perut sudah memanggil untuk minta isi. Paling tidak, pengalaman saya menggunakan MS SQL Server sebelumnya dan pemahaman saya akan bahasa SQL pasti akan berguna, demikian gumam saya :) ....