Friday, August 10, 2012

Menggunakan Schedule Task Sebagai Auto Reminder Agent

Seringkali kita mendapatkan pesan baik lewat email atau sms, dimana pesan yang diperoleh dikirimkan pada waktu dimana sudah di luar jam kerja, seperti di malam hari dimana kemungkinan besar orang tidak lagi di jam kerja. Pesan yang diterima bisa berupa informasi atau reminder, seperti mengingatkan hari ulang tahun, atau waktu meeting, atau mungkin mengirimkan informasi lain yang sifatnya mengingatkan. Reminder ini biasanya terkirim secara otomatis atau disebut automatic reminder, yang tentunya menggunakan parameter waktu yang sudah dijadwalkan, sudah dibuatkan konfigurasi akan dilakukan reminder pada waktu tertentu atau dengan kondisi tertentu.

Sebagai contoh, mengirimkan reminder masa aktif akun sebuah website berlangganan misalnya website yang menyediakan sebuah layanan dan membership yang memberikan hak akses dengan durasi masa aktif. Dan ketika masa aktif sudah mulai habis, maka seminggu sebelum masa aktif, dikirimkan email pemberitahuan kepada member. Contoh lain, pernahkah Anda menerima email atau sms berisi iklan penawaran sesuatu produk. Atau contoh lainnya seperti di facebook, mengirimkan email bila ada teman-teman facebook yang akan ulang tahun beberapa hari atau beberapa minggu ke depan. Dan masih banyak contoh lainnya, reminder seperti ini dilakukan secara otomatis, bukan lagi seorang administrator yang mengirimkan, tetapi sistem yang melakukannya secara otomatis. Pengiriman reminder bisa dilakukan sesuai dengan waktu yang ditentukan, dengan kondisi-kondisi tertentu misalnya dikirimkan kepada pelanggan yang masa aktifnya tinggal seminggu lagi. Untuk mengetahui masa aktif seperti ini, menggunakan aplikasi yang melakukan query data ke member, meng-query siapa saja yang masa aktifnya akan habis seminggu lagi, lalu baru kemudian dikirimkan reminder lewat email atau sms.

Dalam kasus berikut, saya akan menampilkan contoh automatic reminder dengan menggunakan schedule task pada windows server, dan menggunakan aplikasi PHP. Contoh kasus adalah pada sistem sebuah website berlangganan, yang mengirimkan email reminder berupa notifikasi kepada member yang masa aktif akunnya tinggal 2 minggu, 1 minggu, 3 hari lagi atau yang sudah lewat dari 1 minggu. 

Yang perlu disiapkan adalah:

1. Aplikasi  (agent)  yang menjalankan tugas untuk mengirimkan email, aplikasi yang digunakan adalah php.

a. Query untuk mendapatkan kondisi,function get_active_period_accounts($before, $after)
{
    $sql = "SELECT 
                b.id,
                a.member_id,
                b.full_name,
                b.email,
                a.transaction_id,
                a.activated_date,
                a.deactivated_date,
                c.package_name,
                DATEDIFF(a.deactivated_date, DATE_FORMAT(now(),'%Y-%m-%d')) AS active_days   
            FROM trpackage a
            INNER JOIN msmember b ON a.member_id=b.member_id
            INNER JOIN mspackage c ON c.package_id=a.package_id
            WHERE     a.package_id NOT IN('0')
                    AND DATEDIFF(a.deactivated_date, date_format(now(),'%Y-%m-%d'))<='$before'
                    AND DATEDIFF(a.deactivated_date, date_format(now(),'%Y-%m-%d'))>='$after'
            ORDER BY active_days DESC";
    $rs = mysql_query($sql);
    return $rs;
    mysql_free_result($rs);
}

?>

b.  Menggunakan fungsi email pada PHP

function email_account_expiration($before=14, $after=-7)
{
    global $tvc_admin;
   
    $email_content = get_email_content(14);
    $subject = “Reminders for the active period of account”;       
    $from = “noreply@banuaguniomasio.com”;   
    $headers = "From: $from\r\n";
    $headers.= "Content-type: text/html; charset=iso-8859-1\r\n";
       
    $rs = get_active_period_accounts($before, $after);
   
    while($trpackage=mysql_fetch_object($rs))
    {   
        $days = $trpackage->active_days;
        if($days==14 || $days==7 || $days==3 || $days==-7)
        {
           
            $message = “Dear $trpackage->full_name,
We inform you that the active period of your account is $days days away. You can extend your account by clicked this link http://www.banuaguniomasio.com/activation.php.


Thank you.

Bet Regards
Banuaguniomasio.Com”;
           
            $params['full_name']=$trpackage->full_name;
            $params['active_days']=$trpackage->active_days;
               
            if(mail($trpackage->email, $subject, $message, $headers)){
                echo "Sent to $trpackage->full_name
";
            }
        }
    }
   
    mysql_free_result($rs);   
}


?>

c.    Jalankan fungsi untuk mengirimkan email
email_account_expiration();
?>
    Simpan sintak php (a,b,c) di atas dalam sebuah file php, misalnya disimpan di drive d:\webserver\banuaguniomasio\activation.php

2.    Siapkan file bat, sebagai pengeksekusi aplikasi.

-    Buat file yang bat (berextention .bat), lalu simpan misalnya di drive d:/webserver/banuaguniomasio/reminder.bat
-    Kemudian buka file reminder.bat lalu tuliskan perintah :
C:\php\php.exe D:\webserver\banuaguniomasio\activation.php
-    Dalam perintah di atas ada dua bagian, pertama adalah mengarahkan ke aplikasi php (compiler), file php.exe ini tersimpan di mana php terinstall, dalam contoh ini php disimpan di drive C. Lalu bagian yang kedua adalah file php yang akan dieksekusi, dalam hal  ini adalah fungsi yang menjalankan pengiriman email reminder, yang tadi sudah disimpan di file activation.php.

3.    Scheduled Task

Schedule Task ini adalah sebuah fitur Window, ada pada server maupun client, yang berfungsi untuk menjalankan tugas tertentu berdasarkan waktu yang ditentukan, jadi tugas yang dijalankan bisa dijadwalkan akan dieksekusi pada waktu tertentu. Dalam kasus ini, saya menggunakan Scheduled Task untuk menjalankan Auto Reminder, jadi scheduled task inilah yang digunakan sebagai agent, yang men-trigger aplikasi php yang berfungsi untuk pengiriman email tadi. Scheduled Task ini juga bukan hanya ada di Window saja, di Linux juga ada fitur seperti ini yang dikenal dengan crontab, yang tentu saja cara setingnya berbeda. Schedule tasks on Linux using crontab, untuk referensi tutorial bisa dipelajari di:


- HowTo: Add Jobs To cron Under Linux or UNIX? (http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/).
- Schedule tasks on Linux using crontab (http://kevin.vanzonneveld.net/techblog/article/schedule_tasks_on_linux_using_crontab/).
- Cron and Crontab usage and examples (http://www.pantz.org/software/cron/croninfo.html).



Berikut langkah-langkah peyetingan Scheduled Task pada Windows.




-          Masuk ke Control Panel  - Scheduled Task – Add Scheduled Task



-          Browse file bat yang sudah dibuat
-          Buat nama reminder, terserah dengan memberikan nama apa saja, misalnya yang sesuai dengan fungsi dari remimder tersebut. Ada beberapa pilihan waktu kapan task tersebut dijalankan, apakah setiap hari, setiap minggu, dan seterusnya. Dalam contoh ini, task akan dijalankan setiap hari pada pukul 03.00 AM subuh atau pagi.
 
-          Berikut setingan jam akan dijalankannya task.
 
-          Setelah itu klik Next untuk menyelesaikan tahapan penyetingan scheduled task.
-          Schedule task yang sudah sukses dibuat bisa dilihat di daftar scheduled task
 

-  Selesai. 

Pada tahap ini scheduled task sudahberhasil dibuat. Maka sistem pengiriman notifikasi lewat email akan dilakukan otomatis oleh scheduled task setiap jam 3 pagi hari.

Monday, August 6, 2012

KA Commuter Line Parung Panjang

KA Commuter Line Parung Panjang

Sekarang akses Parung Panjang - Jakarta sudah menjadi mudah sejak beroperasinya jalur ganda dari Serpong-Parung Panjang, kini KRL Commuter Line sudah banyak masuk ke stasiun Parung Panjang. Sebuah kabar baik yang memberi kemudahan bagi masyarakat khususnya Parung Panjang, sejak awal tahun 2012 rute KRL Commuter line semakin banyak menuju Parung Panjang. Ini merupakan penantian panjang masyarakat Parung Panjang bisa menikmat transportasi KRL yang ber-AC, kalau sebelumnya hanya dengan kereta api ekonomi. Sebelumnya pergi ke Parung Panjang rasanya begitu jauh, ditambah lagi dengan kondisi kereta api ekonomi yang tidak begitu nyaman bagi penumpang, sekarang kenyamanan dan keamanan penumpang sudah bisa dinikmati.

Untuk mengecek jadwal KRL commuter line, silahkan masuk ke website KRL.Co.Id: http://www.krl.co.id/Info-Jadwal-KA-Commuter.html.

Saturday, July 21, 2012

Parung Panjang

Parung Panjang adalah sebuah kecamatan yang ada di Kabupaten Bogor Jawa Barat. Parung Panjang termasuk kecamatan yang cukup luas namun jalur akses kendaraan masih sedikit. Parung Panjang bisa dikatakan sedikit terisolir dari ibu kota Bogor karena posisinya yang jauh dari pusat kota. Parung Panjang berada di perbatasan antara Bogor - Tangerang, sehingga aksesnya pun kalau misalnya mau ke Jakarta, lebih dekat bila melewati Serpong Tangerang.

Penduduk Parung Panjang mayoritas Sunda yang merupakan warga asli, tapi banyak juga warga pendatang karena di Parung Panjang  ada beberapa kompleks perumahan seperti Perumahan Griya dan Perum.  Kesan kebanyakan orang Parung Panjang itu jauh sekali dari pusat kota Jakarta, susah dijangkau. Walaupun jauh dari ibu kota, tapi lumayan bnyk pula para pendatang yang tinggalnya di Parung Panjang tapi  kerja di Ibu Kota. Memang ada benarnya, karena akses transportasi yang masih kurang, paling cepatpun kalau ke Jakarta dengan kereta. Naik kereta adalah pilihan tepat bila datang ke Parung Panjang, karena waktunya bisa lebih cepat dan ongkos perjalanan relatif murah dibandingkan naik kendaraan umum. Tinggal di Parung Panjang terasa tinggal di kampung, udara masih segar dihirup. Di sana juga cukup aman, masyarakat bisa saling berbaur dan rukun.

Jika mau ke Parung Panjang, ada beberapa alternatif transportasi dan jalur yg bisa di lalui.  Seringkali ada yang salah jalan jalan ke Parung Panjang, dikira ke Parung Sawangan Depok, yang sebenarnya masih jauh dari Depok. Kendaraan yang bisa menuju Parung Panjang:
1. Kereta
Naik kereta dari Tanah Abang Tujuan Parung Panjang.
2. Angkutan umum
Bisa lewat Tangerang, Karawaci, Curug, Serpong.

Peta Parung Panjang

Thursday, May 24, 2012

Pertimbangan Awal Dalam Melakukan Migrasi Data

Migrasi data dari database lama ke database baru merupakan pekerjaan yang gampang-gampang susah. Sudah tidak jarang kasus seperti terjadi pada sebuah sistem, ketika adanya perubahan dari sistem lama ke sistem baru yang diikuti dengan perubahan pada database. Ada beberapa alasan mengapa ada perubahan sistem, hal ini tentu berbeda antara satu dengan yang lainnya. Yang pada intinya sebuah sistem diganti dengan sistem yang baru sudah pasti memberi manfaat lebih bagi perusahaan  (pengguna sistem).

Yang menjadi tantangan bagi seorang DBA (Database Administrator) adalah bagaimana data-data yang sudah tersimpan di database lama bisa dipindahkan (ditransfer) ke database yang baru. Sistem bisa berubah tetapi data tetap, maksudnya data-data yang lama yang sebelumnya ada di sistem lama harus ada di database sistem yang baru.

Ada beberapa yang harus dipertimbangkan oleh seorang DBA sebelum melakukan migrasi data ke database yang baru, menurut saya perlu mempertimbangkan 2 hal berikut:

  1. Platform.  Maksudnya adalah apakah DBMS yang lama dengan yang baru sama atau berbeda. Jikalau sama maka pekerjaan mungkin tidak terlalu banyak karena ada di platform yang sama misalnya MSSQL Server ke MSSQL Server. Namun yang menjadi tantangan adalah kalau berbeda platform, misalnya database lama menggunakan MySQL sedangkan database baru menggunakan MSSQL Server. Kasus seperti ini tentunya memiliki pekerjaan ekstra dalam  mentransfer datanya.
  2. Data Definition.  Struktur tabel juga akan mempengaruhi pekerjaan ketika melakukan migrasi. Struktur tabel yang sama antara kedua database tentu sangat mudah untuk melakukan migrasi.  Struktur tabel yang dimaksud adalah mulai dari table name, field name, tipe data, field position, dsb. Bila sama maka pekerjaan tidak terlalu banyak, tinggal mencocokan field antar field kedua table tersebut. Namun bila tidak, maka pekerjaan tidak bisa hanya sekedar mencocokkan saja.

Lalu bagaimana solusinya bila table structure di database lama berbeda dengan yang ada di database baru?
Gunakanan View sebagai jembatan antara kedua database. Dalam kasus ini, saya menggunakan kasus dimana kedua database menggunakan platform yang sama yaitu MSSQL Server. Tentu bagi yang sudah pernah menggunakan MSSQL Server tidak asing dengan penggunaan view. View merupakan virtual table yang disupport oleh MSSQL Server.


Sebagai  contoh migrasi table mahasiswa, dengan table structure seperti berikut.


DBOld
DBNew
master_mahasiswa
MsStudent
nimhs
char(10)
StudentID
char(10)
nmmhs
varchar(50)
StudentName
varchar(100)
telp
varchar(20)
PhoneNumber
varchar(30)
kdpos
varchar(10)
ZipCode
int
tglhr
datetime
Birthday
datetime


Nationality
Int

Ada tiga kasus dari konsisi table di atas yaitu: nama field berbeda, tipe data berbeda dan jumlah field yang tidak sama. Untuk hal ini, buatlah view di antara kedua table ini, sebagai perantara, dimana dalam view ini melakukan penyesuaian terhadap struktur table pada table database baru. Struktur field atau kolom disesuaikan dengan struktur pada table database baru (destination). Fungsi dari dibuatkan view ini bisa dibilang adalah salah satu cara untuk melakukan pembersihan pada data (data cleaning), maksudnya hanya data-data dibutuhkan pada destination table saja yang akan dipindahkan.  Untuk menyesuaikan tipe data gunakan fungsi cast, sesuai dengan tipe data pada table baru (destination). Berikut adalah contoh view yang untuk kedua table di atas.

create view ViewMsStudent
as
select
nimhs as StudentID,
nmmhs as StudentName,
telp as PhoneNumber,
cast(kdpos as int) as ZipCode,
tglhr as Birthday,
0 as Nationality
from DBOld.dbo. master_mahasiswa


Simpan view yang sudah pernah dibuat, mungkin akan digunakan lagi. Untuk melakukan transfer data gunakan tools ETL pada MSSQL Server, lalu gunakan view yang sudah dibuatkan tadi.