Sabtu, 13 September 2014

“Bash script untuk meng-automatisasi hidup Anda”

Pada dasarnya, hampir semua perintah/aplikasi Linux/Ubuntu* dapat dijalankan melalui terminal. Perintah-perintah tersebut dapat di automatisasi dengan membuat aplikasi script yang dalam hal ini sedang dibahas adalah bash script.


Untuk memulai bash script, pada section pertama ini saya akan bahas mengenai perintah dasar pada Linux;
1. Asumsi Anda telah mengerti syntax dasar Linux sehingga saya tidak menuliskannya, seperti;
buat file,
buat direktori,
menghapus file,
menghapus direktori
mengganti owner file
mengganti mode file
dan perintah dasar lainnya

Jika Anda menguasai perintah diatas, lanjut pada perintah dibawah.


2. Membersihkan terminal
$ clear


3. Mendefinisikan variabel dan memanggil variabel dari terminal
$ bolang=”ini variabel bolang”
$ echo $bolang
ini variabel bolang


4. Membuat funcion langsung pada terminal
$ function kambiang { echo “ini memanggil kambiang”; }
$ kambiang
ini memanggil kambiang
$

$ function kambiangGadang() { echo “ini kambiang gadang”; }
$ kambiangGadang
ini kambiang gadang
$


5. List file berdasarkan ekstensi
Asumsi didalam folder ada 3 file, yaitu: file01.jpg, file02.txt, file03.zip

Untuk melihat file, pasti menggunakan
$ ls
file01.jpg
file02.txt
file03.zip

Melihat file berdasarkan ekstensi;
$ ls *.jpg
file01.jpg

Melihat file lengkap dengan atribut dan ditambahkan array esktensi;
$ ls -l *.{jpg,txt,zip}
file01.jpg
file02.txt
file03.zip


6. Menjalankan beberapa perintah dengan 'satu kali enter'
Disini saya menggunakan sebuah contoh kasus git yang perintahnya berulangkali dilakukan sampai koding selesai. Saya pikir ini sangat menjengkelkan.
Perintah tersebut dapat diserderhanakan cukup dengan operator &&
$ git add . && git commit . && git push origin master

Jika perintah diatas dijalankan, maka pertama kali akan membuka 'editor CLI' default Anda untuk membuat keterangan commit. Setelah Anda menyimpannya, perintah akan dilanjutkan kepada git push.


Setelah mengenal beberapa perintah dasar seperti diatas, berikut saya akan membuat beberpa bash script sebagai contoh aplikatif;

1. Cek path interpreter bash script
$ which bash
/bin/bash


2. Membuat bash script pertama
Langkah pada CLI berikut adalah; membuat folder, berpindah ke folder yang dibuat, membuat file
$ mkdir bash_tut
$ cd bash_tut
$ nano hello_kambing.sh

Ketikkan dalam nano script berikut dan simpan;
#!/bin/bash
echo "hello kambing"

Selanjutnya ganti menjadi executable dan jalankan
$ chmod +x hello_kambing.sh
$ ./hello_kambing.sh
hello kambing
$

Atau dengan perintah lain, Anda bisa memanggil seperti berikut;
$ sh hello_kambing.sh
hello kambing
$


3. Operator && untuk membuat beberapa command dijalankan dalam satu kali eksekusi
Disini kembali saya menggunakan contoh git.
Jika pada point diatas Anda tetap mengetik beberapa kata untuk menjalankannya, sekarang Anda dapat membuat lebih sederhana dengan membuat sebuah aplikasi script.
Ketik kode berikut, berikan nama, jadikan executable dan jalankan;

#!/bin/bash
git add . && git commit . && git push origin master


4. Membaca input dari user
#!/bin/bash
clear
echo "Nama"
read nama
echo "Password"
read password
echo "Nama Anda adalah $nama, password $password"


5. Logical dan comparison
#!/bin/bash
clear
echo "Nama"
read nama
echo "Password"
read password
if [ $nama = "Nitza" ] && [ $password = "ganteng" ]
then echo "Anda memang ganteng"
else
echo "Anda tidak ganteng"
fi


6. Checking file/folder
#!/bin/bash
if test -f /home/nitza/kambiang
then
echo "kambiang ada"
else
echo "kambiang tidak ada"
fi


Beberapa command line untuk 'test'
- d Mengetahui direktori
-e Mengetahui file exist
-f Check regular file
-g SGI permission
-r Check readable
-s Check if file size != 0
-u SUID permission
-w Check writable
-x Check executable


7. Mempersingkat copy log file pada server
Terkadang Anda tidak malas mengetik command, tetapi hanya lupa mengingat folder/file path tempat beberapa log yang Anda butuhkan. Sementara pekerjaan ini tiap hari harus Anda kerjakan. Yap...buatlah bash script-nya dan tentu saja ini menggunakan perintah scp. Berikut contohnya;

#!/bin/bash
scp root@server.com:/usr/share/webserver_app/logs/log_file.txt /your_local_computer/home && gedit log_file.txt


8. Menjalankan modem

Hampir semua modem dapat berjalan dengan cara ini. Beberapa modem CDMA dan GSM yang tidak disupport oleh Ubuntu, ketika saya jalankan perintah ini dapat berjalan dengan sangat baik.

Hal yang pertama Anda lakukan adalah melihat usb Anda, memberikan modprobe yang terkait
$ lsusb

Perintah diatas dapat memberikan Anda vendor dan product modem Anda. Ingat kodenya untuk diisikan pada aplikasi bash script.

Ganti beberapa konfigurasi untuk wvdial. Jika belum ada aplikasi wvdial, silahkan install terlebih dahulu.
$ nano /etc/wvdial.conf
Ganti username dan password sesuai dengan ISP Anda

Buat bash script berikut.

#!/bin/bash
#beberpa modem auto run sebagai cd, dan eject dengan perintah berikut
sudo eject /dev/sr1

sleep 3
#modprobe sesuai dengan kode yang didapat dari lsusb
sudo modprobe usbserial vendor=0x19d2 product=0xfffe
sleep 10
#konfigurasi akan dijalankan otomatis berkaitan dengan /dev/ttyUSB[n]
sudo wvdialconf

sleep 3
#menjalankan wvdial (menyambungkan dengan ISP)
sudo wvdial


Masih banyak fungsi bash script yang dapat Anda tulis. Silahkan buat bash script Anda sendiri untuk meng-automatisasi pekerjaan Anda.

Selasa, 02 September 2014

Memahami Cara Kerja Web dan HTTP

Pendahuluan

Aplikasi berbasis web telah berkembang pesat pada masa ini menjadikan orang awam paling tidak mengetahui bagaimana web itu bekerja.

Berbasis web bukan berarti hanya website, berbasis web artinya dapat terkoneksi melalui protokol web untuk mengakses data, mengendalikan sesuatu dari jarak jauh.

Telpon pintar, Internet banking, rumah pintar, GPS, komputasi awan (cloud computing) merupakan hanya beberapa aplikatif dari teknologi web. Sehingga ini mematahkan paradigma aplikasi desktop lebih hebat dari aplikasi web. Dan tulisan pendahuluan ini ingin mengedukasi sebagian besar orang yang berpandangan bahwa lulusan IT hanya dapat membuat website, benerin printer dan benerin komputer.

Jika melihat konsep penerapan web lebih jauh, teknologi informasi secara umum dan web secara lebih khusus  adalah enabler bagi sebuah organisasi baik itu pemerintahan, organisasi non profit dan organisasi profit. Dikatakan enabler karena web/teknologi informasi merupakan inti bisnis sehingga tanpa web/teknologi informasi tidak dapat berjalan. Bandingkan dengan pada masa lalu dimana web/sistem informasi yang hanya merupakan sebuah support bagi sebuah organisasi.

Kita sebagai pribadi secara tidak sadar telah tergantung kepada teknologi web. Memposting status di media sosial, meng-upload photo pada iCloud, mencari berita tentang photo leak artis Hollywood yang sedang marak diberitakan dan lain sebagainya.

Dengan teknologi web, organisasi dapat membangun business intelligence, decission support system (DSS), sistem pakar, Service Oriented Architecture (SOA) dan lain sebagainya.

Tulisan diatas cukup menggambarkan bahwa mengetahui teknologi web cukup penting pada kehidupan dewasa ini. Tetapi saya tidaka akan menulis topik yang sangat luas seperti diatas. Tulisan berikut akan lebih spesifik membahas bagaimana cara kerja web dan HTTP.


Gambaran sedernhana dari kehidupan sehari-hari

Seseorang sebut saja namanya Tumbuang duduk memegang sebuah telpon pintar. Si Tumbuang ingin membuat curhat pada website sobatcurhat.com. Si Tumbuang mengetikkan sebuah Uniform Resource Locator (URL) pada browser mobile-nya.

Gambaran diatas cukup sederhana, tetapi bagaimana itu bekerja dapat dituliskan dengan sebuah tulisan yang relatif panjang seperti berikut.


Bagaimana proses yang terjadi?

Dengan gambaran yang sederhana tersebut, proses yang terjadi adalah URL mencari alamat yang ada pada internet. Bisa saja alamat tersebut ada pada belahan bumi yang jauh disana, berbeda benua, berbeda negara atau dimana saja.

Seperti namanya Uniform Resource Locator; komputer/browser client akan me-request resource yang dapat saja berupa tulisan, gambar atau suara dimana saja resource tersebut berada.

Secara teknikal, client browser akan me-request data yang ada pada web server dan web server akan memberikan response terhadap request tersebut.

Secara sederhana, sebenarnya setiap komputer adalah sebuah server. Komputer yang diberikan/di-set/diinstall sebagai web server akan dapat memberikan layanan web dan bisa berfungsi sebagai web server.

Request dan response diberikan oleh sebuah protokol yang dinamanakan dengan HyperText Transfer Protocol (HTTP) dan HTTP merupakan protokol stateles.

HTTP meminta komunikasi yang dengan bahasa yang sama antara browser dan web server sehingga mereka saling mengerti.

Berikut proses yang terjadi secara teknikal ketika browser mengakses sebuah URL;

1. Parsing URL

URL mempunyai format seperti berikut: [protocol]://[domain]/[request-URI]

URL yang di-request sebenarnya bukan hanya berasal dari browser. URL yang di-request dapat saja dilakukan melalui terminal atau robot. Alat untuk me-request URL ini disebut sebagai user agent sehingga kedepannya saya akan menyebut user agent untuk jenis ini.

Jika pada format diatas, protocol saya tuliskan sebagai array []. Ini saya maksudkan karena masih ada protokol lain yang bisa bekerja dengan format tersebut seperti FTP, JDBC:MySQL atau yang lainnya yang tidak dibahas disini.


2. HTTP Request

User agent akan mengirimkan request pada web server. Metode yang paling banyak digunakan pada tahapan ini adalah GET.

Method yang lain pada HTTP Request adalah HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT (HTTPS) dan PATCH.

Berikut adalah sebuah contoh request yang dilakukan.


Terlihat diatas; Accept, Accept-Encoding, Cookie dll merupakan properti yang dapat ditambahkan ketikan melakukan request oleh user agent.

Jika ingin mengirimkan request melalui terminal, dapat menggunakan perintah curl seperti berikut;

$ curl -d "nama=Nitza" \
> -d "alamat=Jakarta" \
> server.com


3. HTTP Response

Pada tahap ini, user agent akan menerima response dari web server. Response tersebut biasanya akan terlihat seperti berikut;



Diatas, terlihat jenis response yang diterima melalui Content-Type sehingga user agent yang biasanya adalah browser mem-parsing dan render sesuai dengan Content-Type tersebut.

Ragam dari Content-Type dapat dilihat pada link berikut http://en.wikipedia.org/wiki/Internet_media_type

Jika menggunakan user agent dengan jenis terminal, berikut syntax untuk melihat response HTTP yang di-request;

$ curl -I http://domain.com

Jika tidak menggunakan opsi -I, maka semua response akan ditampilkan pada terminal/user agent.

Saya rasa pembahsan tentang curl cukup menarik karena dapat mengirimkan parameter, merequest dan melihat response tanpa bantuan user interface. Tidak adanya bantuan user interface dan berjalan pada terminal menjadikannya lebih seksi karena bisa dipanggil melalui java runtime dan bash script sehingga kita bisa membuat aplikasi baru untuk keperluan spesifik; bisa saja sebagai tester aplikasi (umumnya dipakai untuk lingkungan java) dan hacking**.


Apa itu stateless protokol?

HTTP merupakan stateless protokol yang artinya HTTP tidak mengingat data yang kita kirim melalui browser. Setiap kali pengguna me-request HTTP, web server akan me-response dengan data baru setiap waktu diminta sehingga HTTP request dan response selalu dibuat per-akses. Dalam arti sederhana, tidak ada hubungan antara request & response yang lama dengan request & response yang baru.

Jadi, bagaimana cara menyajikan data terkait jika HTTP tidak mengingat data yang kita minta sebelumnya?

Untuk menjawab ini, saya berikan ilustrasi sebagai berikut; ketika Anda berkungjung ke website penjualan misalnya e-bay, maka setiap kali Anda melihat barang, data barang tersebut dijadikan barang favorit oleh aplikasi untuk ditampilkan kembali sebagai suggest untuk pilihan yang akan Anda beli.

Proses tersebut terjadi, karena pada user agent diciptakan sebuah session dan cookie sehingga web server dapat mengingat hal tersebut dan memberikan data yang berhubungan dengan request sebelumnya. Session dan cookie adalah key-value pair data pada web server. Penjelasan lebih lanjut tentang session dan cookie mungkin akan dijabarkan pada tulisan berikutnya


Jika Anda pernah melihat kode error pada sebuah halaman, maka Anda cukup beruntung mengetahuinya karena kode response jarang ditampilkan jika kode tersebut untuk iformasi, sukses dan redirection. Berikut adalah code status respon secara garis besar;
1xx ditujukan sebagai informasi
2xx sukses. Jika Anda sering bermain dengan Ajax, biasanya success response ini sering digunakan dengan kode sukses 200.
3xx redirection
4xx client error
5xx server error


Penutup

Dengan mengetahui cara kerja website bagi awam dapat mengetahui apa itu sebenarnya web sehingga menambah pengetahuan akan web dan bisa saja mendapat ide baru sebagai enabler bagi pribadi sendiri atau organisasinya. Sebuah contoh penerapan web adalah sebuah aplikasi Android yang saya buat untuk kepentingan keluarga yang juga saya share pada goole play sehingga ribuan orang bisa memakainya.

Sendangkan dengan mengetahui cara kerja website/http ini bagi para web developer, dapat mengerti tentang trouble shooting dan  membuat arsitektur yang lebih baik pada sistem yang sedang dibuat. (keamanan, ketangguhan dll).


Sumber
http://www.w3.org/Protocols/rfc1341/4_Content-Type.html
http://en.wikipedia.org/wiki/Internet_media_type
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes


*) Request dan response sebaiknya tidak dijadikan Bahasa Indonesia pada tulisan ini
**) Hacking sebenarnya tidak untuk tujuan jahat. Tetapi kata ini sering disalah artikan sehinga menjadi konotasi yang negatif.

Senin, 01 September 2014

Akses database MySQL dari komputer lokal menggunakan terminal

Judul dari tulisan ini memang sedikit kuno terutama pada zaman serba visual ini. Sebagian orang tidak membutuhkan ini karena menjadi coder praktis. Tetapi banyak hal yang didapat jika mengetahui perintah yang sangat dasar ini terutama untuk membuat aplikasi yang berhubungan dengan database dengan konsep yang lebih baik tanpa interpreter aplikasi lain seperti ODBC atau JDBC dan memahami konsep bagaimana koneksi tercipta sehingga mencegah serangan terhadap database.

Berapa contoh keuntungan mengetahui penggunaan perintah dasar ini;
- Jika tidak dapat menggunakan browser untuk database bisa menggunakan perintah ini,
- Jika koneksi sangat lamban, bisa menggunakan perintah ini,
- Jika tidak dapat masuk ke server sementara port MySQL (default 3306) dapat diakses,
- Jika ingin membuat aplikasi yang dapat memanggil perintah melalui terminal,
- Jika ingin berbuat jahat untuk meyerang server lain*,
- Dan banyak jika yang lainnya sesuai dengan kasus Anda.

Perlu diperhatikan disini, untuk dapat menggunakan perintah ini dari komputer lokal, port yang berhubungan dengan MySQL pada server harus diaktifkan.

Untuk melihat port yang aktif pada server Anda, ketik perintah berikut;

$ nmap ServerAnda.com

Jika port MySQL Anda terbuka, maka Anda dapat lanjut pada syntax selanjutnya. Jika tidak, Anda dapat mengaktifkan port tersebut seperti yang ada pada tulisan ini.

Berikut adalah syntax untuk mengakses database MySQL pada langsung dari terminal pada komputer lokal;

$ mysql -h ServerAnda.com -u username -p

Setelah perintah tersebut dieksekusi, maka Anda diminta memasukkan password dan jika akses granted, Anda dapat mengelola database melalui terminal.

Cukup mudah bukan? :)


*) Contoh yang buruk, berhati-hatilah terhadap port database Anda.