• Programming

    Scripting (lagi)

    Kemaren lagi iseng pengen tau nilai kurs USD-IDR, karena dari tiap website beda2, akhirnya bikin script BASH untuk ngambil info kurs dari beberapa website. Bekelnya cuma WGET, CAT, GREP, CUT. Ini source-code nya:

    [code lang=”BASH” title=”Source-code: kurs.sh”]
    #!/bin/bash

    # Info Kurs Ekstraktor
    # Agustus 2013 oleh sedjat1
    # Lisensi : GNU GPL v.3.0

    merah="\e[31m"
    hijau="\e[32m"
    kuning="\e[33m"
    biru="\e[34m"
    magenta="\e[35m"
    cyan="\e[36m"
    normal="\e[39m"

    mtu="$cyan"
    svc="$kuning"

    echo -e "Info kurs ${mtu}USD${normal}"

    echo -n -e "${svc}Bank Mandiri ${normal}= "
    wget -q -Osrc.txt "http://www.bankmandiri.co.id/resource/kurs.asp"
    readarray kurs < <(cat src.txt | grep ‘USD</option>’ | cut -d"\"" -f2)
    te="Beli "
    for item in "${kurs[@]}"
    do
    usd=`echo "${item/$’\n’/}" | cut -d. -f1`
    echo -n -e "${te}${usd}"
    te=" ; Jual ${merah}"
    done
    echo -n -e "${normal} ; "
    cat src.txt | grep ‘Last Updated:’ | cut -d"<" -f2 | cut -d">" -f2
    rm src.txt

    echo -n -e "${svc}Yahoo! Finance ${normal}= "
    wget -q -Osrc.txt "http://download.finance.yahoo.com/d/quotes.csv?s=USDIDR=X&f=sl1d1t1c1ohgv&e=.csv"
    usd=`cat src.txt | cut -d, -f2 | cut -d. -f1`
    tgl=`cat src.txt | cut -d"\"" -f4`
    jam=`cat src.txt | cut -d"\"" -f6`
    echo -e "${merah}${usd} ${normal}@ $tgl $jam"
    rm src.txt

    echo -n -e "${svc}Google Finance ${normal}= "
    wget -q –no-check-certificate -Osrc.txt "https://www.google.com/finance?q=USDIDR"
    usd=`cat src.txt | grep ‘1 USD =’ | cut -d. -f1 | cut -d">" -f2`
    jam=`cat src.txt | grep ‘class=time’ | cut -d">" -f2 | cut -d"<" -f1`
    echo -e "${merah}${usd} ${normal}@ $jam"
    rm src.txt
    [/code]

    Hasilnya begini:
    kurs.sh

  • Programming

    SeRem

    Ini paket program yang baru saya selesaikan versi beta-nya. SeRem adalah kependekan dari Semi Remote. Kenapa Semi Remote? Karena paket program yang saya buat ini bukan benar2 me-remote komputer dari jauh, melainkan menjalankan beberapa fungsi yang telah didaftarkan dulu sebelumnya. Fungsi2 tersebut bisa di-trigger melalui email.

    Kenapa saya buat SeRem. Karena kadang kala saya perlu melakukan sesuatu di komputer kantor saat saya tidak berada di kantor. Tetapi karena di kantor banyak lapisan security nya, saya tidak bisa (dan tidak mau) berbuat banyak, saya tidak mau membuka celah keamanan sedikitpun.

    Sepengetahuan saya, bisa saja saya menjalankan TeamViewer. Tapi kok rasanya kurang pas, karena terus terang saja koneksi internet saya amat sangat terbatas. Dengan menggunakan SeRem, saya bisa menggunakan email client untuk mengirim perintah ke komputer lain dengan “ongkos” yang minim.

    Perintah dikirim lewat email, dan hasilnya pun diterima lewat email, karena “remote” nya tidak secara langsung (real-time) maka saya namakan “Semi Remote”. Awalnya saya mau buat dengan melakukan query ke sebuah website (bikin sendiri) untuk mengambil request dan mengepost hasil eksekusinya, tapi terlalu banyak yang harus saya kerjakan, karena saya programmer males akhirnya jadi deh yg sekarang ini. Awalnya pengen dikasih nama M2M-RC (Mail To Mail Remote Control), tapi karena “lebih Indonesia” kata2 SeRem ya udah jadinya SeRem aja.

    Pada versi beta ini, saya cuma mendaftarkan 3 perintah: Screenshot, File List, Youtube Downloader. Masing2 perintah mempunyai file eksekusi-nya sendiri2, makanya saya katakan SeRem sebagai Paket Program. Ini dia isinya:

    1. Progam GETMAIL. Ini adalah program console yang fungsinya untuk mengambil email dari server pop3, dan menyimpannya dalam format txt. Sebenarnya saya bisa bikin sendiri, tapi males, udah ada yang bikin bagus.
    2. Progam sendEmail yang saya buat sendiri. Kebalikan dari GETMAIL (pop3) program console ini mengirim email (smtp) untuk menjawab/response dari perintah yang diterima. Yang ini sudah saya buat lama (waktu saya masih rajin)
    3. Youtube-dl.py yaitu script python untuk mendownload video dari beberapa server video terkenal termasuk Youtube, Metacafe, dll. Tentu saja program ini membutuhkan instalasi Python.
    4. Program Screenshot (dibuat pake AutoIt3) tentu saja fungsinya untuk mengambil screenshot komputer dan mengirimkan hasilnya lewat email.
    5. Program FileList (dibuat pake AutoIt3) sesuai namanya untuk mengambil list file di folder tertentu dan mengirimkan hasilnya lewat email.
    6. Program yang saya namai Commander (dibuat pake AutoIt3) yang fungsinya untuk mengecek email dan memparsing isinya, lalu menjalankan program sesuai instruksi dari dalam email tsb.

    Nantinya koleksi program untuk menjalankan perintahnya akan ditambah, dan tentunya SeRem akan menjadi lebih komplit lagi. Karena ini kumpulan program yang sebagian besar jalan di console (dengan output yang tidak menarik) dan sebagian lagi memang tanpa GUI, maka saya tidak bisa memberikan screenshotnya.

  • Programming

    HTML Table with Fixed Header

    Banyak hal yang terlihat sederhana tapi ternyata bikin sakit kepala, salah satunya adalah “Scrollable HTML Table”. Apasih susahnya bikin table pake HTML, tinggal pake tag <table>, <tr> dan <td> aja? Susahnya adalah kalo kita mau bikin yang fieldnya banyak, kalo cuma row-nya yang banyak saya sudah bikin html table pake paging dengan javascript.

    Saya mendambakan html table sederhana dengan scroll vertikal dan horizontal yang punya fixed header biar kalo table nya di-scroll headernya gak hilang, pokoknya mirip komponen Grid di desktop application.

    Sebagai seorang programmer yg malas, saya langsung nyari solusinya pake google. Ternyata saya tdk menemukan satupun solusi mudah dan murah (maksudnya kalo pake javascript gak usah yg gede2 kaya’ jquery, mootools, dll).

    Saya nemuin beberapa solusi yang sudah ada, diantaranya:

    • Jawaban di stackoverflow.com: , yg ini kalo gak salah pake JQuery, bisa bikin table yang rumit, ada field yang pake colspan atau rowspan, udah gitu juga selain fixed header ngedukung fixed column juga. Tapi kalo ngeliat source-code nya kok ada pengaturan lebar tiap kolom (field), padahal ini yg mau saya hindari. Saya mau table nya seperti layaknya HTML table biasa yang bisa ngatur sendiri berapa lebarnya.
    • Ada lagi di imaputz.com, cssbakery.com, dan di cssplay.co.uk tapi semuanya gak punya horizontal scroll. Sedangkan saya mau yg pake horizontal scroll maupun vertical scroll, pokoknya saya mau terima beres, saya cuma bikin table biasa trus nanti dia bisa otomatis scroll nya muncul.

    Akhirnya karena tidak menemukan solusi yang tepat guna, berbekal teori2 dari table2 di atas dengan terpaksa saya bikin sendiri deh html table sederhana yg cuma punya 1 fixed row dengan sedikit javascript+css.

    Kekurangannya ada banyak, yaitu: cuma punya 1 fixed row, tidak punya fixed column, fungsi fix() harus dijalankan berkali-kali untuk dapat menyinkronisasi lebar cell pada header dan data tanpa mengorbankan sisi visual table[2].

    Yang fungsi fix() ini yg saya masih kurang ngerti[1], waktu saya coba hitung berapa kali fungsi fix() dijalanin ternyata browser yg pake Webkit (Safari & Chrome) harus menjalankan antara 30x sampai 40x baru sinkron lebar kolom antara header dan data, sedangkan Firefox (pake Gecko) cuma dibawah 12x sama seperti Opera (pake Presto).

    Untuk sekarang saya gak mau repot, biarin aja mau dieksekusi 100x juga gak apa2, yg penting kepala udah gak pusing lagi gara2 html table.

    Udah ah.

    — Edit 1 : Misteri yang menyelimuti fungsi fix() sudah terkuak. Ternyata di CSS nya harus ditambah box-sizing: border-box; -moz-box-sizing: border-box;. Di Google Chrome fungsi fix() cuma dijalanin 1x sementara di Mozilla Firefox dijalanin 2x. Tapi anehnya justru di Mozilla Firefox ukuran kolomnya jadi beda antara header dan data kalo di pinggir kanan header dikasih garis (border). Aneh, ada bug?

    — Edit 2 : Kekurangan yang lain adalah tidak mendukung colspan dan rowspan untuk header dan data baris pertama. Sebenarnya tidak susah untuk modifikasi agar bisa colspan dan atau rowspan tapi saya belum bisa (baca: malas) bikin yang fleksibel.

  • Komputer,  Programming

    Tak Kenal Maka Tak Sayang

    Pepatah tidak terlahir begitu saja, pasti ada banyak kisah sehingga akhirnya tercetuslah sebuah pepatah yang maknanya mewakili banyak kisah sebelumnya itu. Tak kenal maka tak sayang. Maknanya sederhana, tidak perlu memahami filosofinya, karena sudah terkandung dalam arti tiap katanya.

    Sebelumnya saya tidak pernah mengenal SQLite, karenanya saya tidak pernah berfikir untuk menggunakan SQLite untuk program2 saya. Tapi begitu saya mengenal SQLite, sekarang saya mau semua data saya simpan dalam database SQLite. Koleksi mangascan saya adalah yang pertama saya buat databasenya. Karena tiap halaman mangascan (yang berupa file gambar) saya simpan dalam database, sekarang saya sudah punya tabel standar untuk menyimpan file.

    Sasaran kedua adalah koleksi file HTML saya. Saya banyak menyimpan halaman web dgn menggunakan extension Single File di Google Chrome, karena bisa menyimpan HTML full script dan imagenya. Hasilnya, halaman html yg saya simpan besarnya jadi membengkak karena semua image disimpan dalam BASE64 encoding. Sesudah saya menerapkan kompresi zip untuk storage file, saya bisa menghemat sekitar 38%, lumayan…

    Sasaran berikutnya adalah data Kamus Besar Bahasa Indonesia yang pernah saya sedot dari KBBI Daring lalu data Quran yang saya ambil dari Tanzil.net

    Sasaran berikutnya lagi belum saya tetapkan, tapi pasti tiap program yang akan saya buat (kalau sasaran usernya adalah personal) akan menggunakan SQLite. Dulu gak kenal, makanya gak sayang, sekarang…

  • Omong Kosong,  Programming

    Scripting

    Saya mulai belajar programming sekitar tahun 1995, waktu itu saya masih di SMP kelas 3. Saya inget banget pake komputer dgn prosesor 486DX4, ram nya 4MB, tanpa harddisk. Keren kan?

    Sebelum saya tau apa itu sistem operasi, apa itu DOS dan lain2, saya sudah belajar bikin program pake Turbo Pascal, saya langsung bikin program dalam modus grafik (pake EGAVGA.BGI). Tidak seperti yang lain, saya belajar dasar2 programming dalam modus grafik yang indah, tidak sekadar angka2. Saya lupa kapan saya mulai membuat program mode teks, yang saya ingat kelas 1 SMA saya sudah membuat program enkripsi sederhana (pake xor) lengkap dengan progress bar dalam mode teks.

    Saat awal belajar, dan tahun2 berikutnya saya “tidak sudi” memakai interpretered language karena menurut saya sangat aneh jika kita butuh program lain untuk menjalankan program yang kita buat (dulu sempat heran kok ada yg bikin QBasic).

    Tapi teknologi komputer (baik software maupun hardware) berkembang dengan kecepatan yang luar biasa, dan sekarang saya tidak peduli apakah itu native application, interpretered language (scripting), byte code, dll. Sekarang moto saya: Do whatever you wanna do with everything you have.

    Untuk web-based program saya pernah pake ASP dan untuk membuat pie-chart di halaman web yg saya buat, saya pake Delphi. PHP juga saya pelajari, saya pernah membuat blog pake php, beberapa modul untuk back-office di kantor juga saya buat dgn PHP.

    Untuk ngambil manga online dan komik strip saya pake scripting di BASH. Dan terakhir (waktu libur Idul Fitri) saya belajar Python. Untuk sekarang ini python hanya saya pake untuk membuat storage komik dalam database SQLite, dan untuk viewernya saya pake PHP (biar indah). Dulu saya simpan manga2 dalam file ISO yang bagi saya kurang fleksibel. Rencananya saya mau bikin manga online downloader dan viewer nya dengan Python.

    Yang lebih keren lagi, baru aja tadi malem saya install SL4A: Scripting Layer for Android di Xperia Mini dan berjalan dengan baik. Bisa ditebak, saya pasti pengen bikin manga downloader dan viewer pake python yang bisa jalan di Android. Uhuy….