19 September 2013

Sinkronisasi Data SMSGatway (2)

Tulisan ini adalah lanjutan dari Sinkronisasi Data Smsgateway sebelumnya.

Tujuannya adalah membangun sistem agar publik dapat mengakses hasil perolehan suara, tanpa harus mengakses langsung ke server smsgateway.

Untuk membangun sistem seperti itu, skenario sinkronisasi data yang akan dilakukan adalah sbb:


  1. SMSGateway mengirimkan data perolehan suara secara periodik melalui form interface yang disediakan pada webserver. Cara yang paling mudah, data perolehan suara sebaiknya dalam bentuk array yang diserialize dan sudah diencryipt. Data tersebut dikirimkan menggunakan curl, sehingga dapat dijalankan dari terminal tanpa perlu adanya interaksi dengan operator.
  2. Setelah submit, data yang diterima didecrypt, diunserialize, kemudian disimpan dalam bentuk file/cache. Langkah nomor 1 dan 2 berulang terus secara periodik hingga operator memutuskan untuk stop. 
  3. Client melakukan request hasil perolehan data ke webserver.
  4. Setelah ada request, webserver membaca file/cache hasil yang dibentuk pada langkah ke-2.
  5. Data perolehan suara diproses oleh webserver untuk ditampilkan sebagai grafik.
  6. Grafik perolehan suara dikirimkan kepada client.
Enam langkah tersebut sangat mudah, tampilah hasil perolehan suara seperti berikut:


17 September 2013

Sinkronisasi Data SMSGateway

Kami membangun sebuah program berbasis web dan sms, yang kami beri nama Smsgateway untuk broadcast, polling, survey dan pilkada. Program kami kembangkan dengan script PHP dan dengan Smstools untuk menerima dan mengirim sms melalui modem.

Modul Pilkada adalah modul yang paling kompleks dan menantang sejak awal program dikembangkan. Selain untuk memproses data melalui format sms tertentu, fitur-fitur lainnya termasuk fungsi pemilihan sampel TPS yang akan dihitung dengan metode quick-count, memantau pemasukan data, input manual serta report hasil quick-count.

Modul Pilkada diuji coba pertama kali untuk menghitung quick-count pada Pilkada Karawang 2005. Hingga kini (September 2013), selanjutnya telah digunakan pada pilkada-pilkada berikut ini:
  • Pilkada Gubernur dan 19 Kabupaten/Kota di Nanggroe Aceh Darussalam 2006
  • Pilkada Kabupaten Bekasi 2007, 20012
  • Pilkada Kabupaten Purwakarta 2007
  • Pilkada Gubernur Jawa Barat 2008, 2013
  • Pilkada Walikota Bogor 2008, 2013
  • Pilkada Gubernur Riau 2013
Meski dibangun sejak tahun 2005, tetap saja selalu ada kekurangan yang terus kami tambahkan dan kembangkan. Yang terakhir yang kami tambahkan adalah sistem sinkronisasi data.

Maksudnya adalah data hasil report quick-count secara berkala dan otomatis dikirim ke suatu server website untuk ditampilkan, sehingga dapat diakses oleh publik. Sebelumnya, hasil quick-count diakses melalui query by sms, yang tentu saja memakan pulsa sms pada server Smsgateway untuk membalasnya.


Dengan pemisahan server ini, ada beberapa keuntungan yang kami dapatkan:
  • Beban server semakin ringan, karena akses protokol http ke server semakin berkurang.
  • Kemudahan administrasi. Untuk mengatur supaya server dibelakang router dapat diakses secara publik melalui http, membutuhkan kemampuan admin untuk mengakses control-panel router dan mengatur port forwarding. Padahal kta ketahui tidak semua pengguna pelangggan internet berbayar dapat mengatur routernya supaya komputernya dapat diakses oleh publik.
  • Resiko keamaan lebih kecil bila server terpisah dibandingkan menyatu membiarkan publik mengakses Smsgateway langsung.
  • Operator dapat memulai dan menghentikan sinkronisasi kapan saja dianggap bahwa angka perolehan dianggap sudah final. Sehingga ketika diadakan Press Release, angka sudah fix tidak berubah lagi. Padahal barangkali mungkin di server Smsgateway masih berproses.
Metode sinkronisasi data di atas, akan saya bahas pada tulisan berikutnya, menggunakan php script dan bash script.

03 September 2013

Mengaktifkan Modul Userdir di Ubuntu

Setelah selesai menginstall Ubuntu untuk web server, kita dapat mensetup agar setiap linux user dapat memiliki personal web sendiri. Dengan demikian setiap username --misalnya otong-- dapat membuat halaman website yang diletakkan di folder /home/otong/public_html/. Sehingga halaman website tersebut dapat diakses menggunakan web browser pada alamat url: http://localhost/~otong/index.html

Perhatikan, ada tanda tilde (~) di depan username untuk mengakses website yang dimiliki username tsb.

Cara yang demikian itu adalah dengan mengaktifkan modul apache 'userdir'. Karena secara default, modul userdir pada apache Ubuntu tidak aktif.

Untuk mengaktifkan modul userdir, berikut langkah yang harus dilakukan:

Langkah 1. Aktifkan modul userdir dengan mengetikkan perintah sbb pada terminal

$ sudo a2enmod userdir

a2enmod adalah perintah untuk meng-enable-kan modul apache, sedangkan
a2dismod perintah untuk men-disable-kan modul apache.

Pada dasarnya mengaktifkan suatu modul pada apache adalah membuat symlink modul yang dimaksud yang ada pada folder /etc/apache2/mods-available ke folder /etc/apache2/mods-enabled. Kita dapat saja membuat secara manual tanpa bantuan e2enmod.

Langkah 2. Sunting konfigurasi modul php agar php apache dapat menghandle script php yang diletakkan di /home/username/public_html. File konfigurasi yang dimaksud terletak di folder /etc/apache2/mods-available.

$ sudo vim /etc/apache/mods-available/php5.conf

vim adalah editor untuk file berbasis teks. Bila anda tidak terbiasa menggunakan vim, dapat juga menggunakan nano.

Pada Ubuntu 12.04 LTS isi file php5.conf default adalah sebagai berikut:

<IfModule mod_php5.c>
    <FilesMatch "\.ph(p3?|tml)$">
    SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
    </FilesMatch>
    # To re-enable php in user directories comment the following lines
    # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
    # prevents .htaccess files from disabling it.
    <IfModule mod_userdir.c>
        <Directory /home/*/public_html>
            php_admin_value engine Off
        </Directory>
    </IfModule>
</IfModule>


Berikan remark (tanda #) pada awal setiap baris yang ditunjukan mulai baris <ifModule mod_userdir.c> sampai </IfModule> berikutnya, seperti ditunjukkan pada gambar berikut:



Langkah 3. Restart service apache dengan  memberi perintah sbb:

$ sudo service apache2 restart


Selesai sudah!

Sekarang bila username meletakkan suatu file --index.php misalnya-- pada folder /home/username/public_html/, maka file tersebut dapat diakses menggunakan web browser pada alamat url http://localhost/~username/index.php

Semoga bermanfaat!

01 September 2013

Mesin Virtual

Yang saya maksud mesin virtual adalah mesin bohongan, mesin berbasis software yang seolah-olah ada di dalam komputer kita. Namanya juga mesin virtual, semua spesifikasi hardware nya juga bohongan, alias diemulasikan.

Untuk apa saya punya mesin virtual?

Bagi saya mesin virtual itu sangat berguna dalam pekerjaan sehari-hari. Dengan adanya mesin virtual, saya bisa melakukan hal-hal sbb:

1. Menjalankan aplikasi berbasis Windows di Linux

Linux adalah dunia saya. Saya sudah menggunakannya sejak tahun 1997, sejak Linux masih berbasis text. Sulit sekali menerapkan Linux supaya berbais GUI saat itu. Kalaupun bisa, paling banter cuma dapat resolusi rendah 800x600. Kecuali kalau sedang beruntung karena kartu video-nya sudah disupport.


Jika saya mendapat tugas kantor mengolah data dengan aplikasi berbasis windows,
masa sih saya tolak dengan mengatakan 'Komputer saya tidak sanggup!' Emang..

Dulu saya menggunakan dual-boot, artinya saat booting saya bisa memilih mau menjalankan sistem operasi apa, Linux atau Windows misalnya. Sekarang tidak lagi. Cukup sediakan mesin virtual dengan sistem operasi Windows di dalam Linux. Kemudian instal aplikasi yang dibutuhkan, lalu siap bekerja seperti biasa.

 2. Sebaliknya, menjalankan Linux dari dalam Windows

Server di kantor saya sudah terpasang sistem operasi Windows Server dan MSSql Server dari sananya. Pamali dan beresiko kalau saya format ulang dan digunakan sebagai server Linux. Untungya ada mesin virtual. Saya bisa pasang Linux disana untuk develop aplikasi berbasis web. Juga saya bisa bikin mesin virtual satu lagi untuk Windows XP yang terhubung ke mesin presensi sidik jari. Daripada install aplikasi yang beresiko di mesin utama, lebih baik install aplikasi di mesin virtual. Kalau bermasalah tidak akan menyebar ke mesin utama.

3. Sebagai sandbox

Mesin virtual dapat digunakan sebagai sandbox, sebagai tempat untuk develop aplikasi dan uji coba software. Tidak usah takut virus menyerang, toh bila bermasalah tinggal hapus dan bikin lagi.
 
4. Bernostalgia dengan program-program berbasis MS-DOS

Program-program berbasis MS-DOS yang dulu terkenal era tahun 80-an, ternyata masih bisa dijalankan pada komputer jaman sekarang lho. Tentu dengan perantara mesin virtual. Ingat WordStar, Lotus 1-2-3, PrintShop dll? Bahkan game-gamenya masih asyik untuk dimainkan. Hmm, bila sudah tidak punya copy-nya, masih bisa cari untuk didownload dengan kata kunci abandoned software.



 Bagaimana, apa sekarang anda tertarik dengan mesin virtual?



29 Agustus 2013

Memperbaiki PDF yang Rusak di Linux

Malam ini saya mendownload file KBKI (Klasifikasi Baku Komoditi Indonesia) Tahun 2010 yang diterbitkan oleh Badan Pusat Statistik di alamat http://www.bps.go.id/download_file/KBKI_2010.pdf. File tersebut berisi kode-kode komoditi seluruh barang/jasa yang diproduksi, yang disusun secara sistematis, yang diklasifikasikan berdasarkan kegiatan ekonomi.  File tersebut berisi 151 halaman, dengan ukurannya file 8MB.

Namun setelah didownload, meski sukses, tidak berhasil dibaca oleh evince - PDF Viewer standar pada Ubuntu saya. Sementara Mozilla (dengan plugin pdf viewer) yang saya pakai dapat membaca halaman-halaman awal saja.

Menggunakan pdf viewer dengan tools mc (midnight commander) favorit saya, juga menampilkan error seperti pada gambar berikut:



Ternyata file yang dimaksud mengalami kerusakan alias corrupt.

Untuk memperbaiki file tersebut, dapat dlakukan dengan perintah sbb:

$ gs -o nama_filehasil.pdf \
  -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress \
  nama_file_rusak.pdf

Catatan: gs adalah software Ghostscript, merupakan free software untuk mengolah file berbasis Adobe Postscript dan Portable Document Format.

Setelah perintah dijalankan, file berhasil diperbaiki dan dapat dibaca keseluruhanya. Namun yang mengherankan, ukurannya menjadi 3MB, jauh dari aslinya yang 8MB. Berkurangnya ukuran file tersebut belum saya ketahui pengaruhnya.




Menjalankan Perintah Linux di Terminal Secara Background

Untuk menjalankan perintah pada terminal Linux secara background dapat dilakukan dengan menambahkan '&' (ampersan)  di akhir perintah. Contoh:

$ ./myscript.sh &

Bila tidak ada tanda '&', prompt akan menunggu proses selesai. Namun dengan adanya '&', prompt langsung dikembalikan kepada user, sehingga user dapat melanjutkan kegiatan yang lain.

Sementara untuk menjalankan perintah background secara remote, dapat dilihat pada halaman ini http://gagas9.blogspot.com/2013/08/perintah-shell-linux-agar-proses-tidak.html

Nohup, Perintah Shell Linux Agar Proses Tidak Terputus

Seringkali saya melakukan koneksi ssh pada malam hari ke remote computer yang berada di tempat kerja untuk melakukan suatu proses yang memakan waktu lama, misalnya melakupan updating system, mendownload file yang besar seperti ISO, melakukan data scrapping, mengenerate tabel-tabel dari data yang besar, dll. Dengan cara begitu saya banyak menghemat paket internet saya, karena seluruh proses tidak dilakukan di komputer saya. Kemudian baru besoknya saya tinggal mengambil hasilnya di tempat kerja.

Namun bila koneksi terputus, maka proses yang dilakukan di remote computer juga terhenti. Saya harus masuk lagi dan kembali mengulangi atau melanjutkan proses yang terhenti tadi. Sangat mengesalkan, bukan?

Untuk itu, agar proses tidak terhenti meskipun kita disconnect, maka dapat digunakan perintah nohup. Contohnya sebagai berikut:

$ nohup wget http://anyhost.tld/anybigfile.iso &

Dengan perintah demikan, maka proses akan dikerjakan oleh system secara background dan tidak terhenti saat kita memutuskan koneksi.

Namun dengan nohup, output suatu proses disimpan pada file nohup.out. Sehingga untuk melihat proses sudah berlangsung sampai dimana, kita tinggal beri perintah:

$ tail nohup.out


Berikut ini adalah format penulisan perintah nohup:

$ nohup perintah_yang_akan_dieksekusi &

Semoga bermanfaat.