Reverse Proxy dari HTTP ke HTTPS

Masalah lain yang saya temui setelah nyadar kalo tempat saya naro file RSS blog gak bisa diakses adalah ternyata si jadul PlanetPlanet kombinasi dg Python 2.7 punya masalah saat nyedot data dari situs https ini. Entah apakah ini kasus spesifik atau ngga, saya kurang tau πŸ˜›

Saat saya menjalankan si PlanetPlanet, tiba2 dia ngeluarin exception di bawah ini.

Traceback (most recent call last):
  File "/anu/itu/planet/feedparser.py", line 1893, in _open_resource
    return opener.open(request)
  File "/usr/lib/python2.7/urllib2.py", line 400, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 418, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1215, in https_open
    return self.do_open(httplib.HTTPSConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1174, in do_open
    h.request(req.get_method(), req.get_selector(), req.data, headers)
  File "/usr/lib/python2.7/httplib.py", line 958, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 992, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 954, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 814, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 776, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 1161, in connect
    self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)
  File "/usr/lib/python2.7/ssl.py", line 381, in wrap_socket
    ciphers=ciphers)
  File "/usr/lib/python2.7/ssl.py", line 141, in __init__
    ciphers)
TypeError: must be _socket.socket, not _socketobject

Nanya2 oom google ngga membawa hasil yang menggembirakan. Berhubung saya lagi males ngecek2 lebih jauh, jadi saya putuskan tuk bikin situs blog ini tersedia dalam modus http juga walau cuma bisa diakses dari localhost πŸ˜› ehh ternyata sepertinya si wordpress kekeuh sekali https, tetap https (duh). Berhubung yg ini gagal, saya coba cara lain dg bikin reverse proxy aja πŸ˜€ proxy yang membungkus situs https tuk disediakan dalam http.

Kira2 begini konfigurasinya

<VirtualHost 127.0.0.1:12345>
    ...

    SSLProxyEngine On
    ProxyPass / https://fajran.web.id/
    ProxyPassReverse / https://fajran.web.id/

    ...
</VirtualHost>

Nyalakan modul mod_proxy dan mod_ssl dan restart/reload si apache.

Konfigurasi di atas mirip dg cara membuat reverse proxy biasa, namun ada bagian penting yang ngga boleh kelupaan ditulis: SSLProxyEngine On. Tanpa ini, proxy dari http ke https ngga bisa jalan.

Sindikasi

Setelah lama tak ditengok, ternyata tempat saya naro RSS feeds tuk blog ini tak bisa diakses πŸ˜€ dann ternyata itu gara2 lupa ngubah konfigurasi Apache saat dulu upgrade dari versi 2.2 ke 2.4 (doh)!

Satu hal yang berubah di Apache 2.4 itu adalah cara ngasih izin akses ke sebuah direktori. Kalau sebelumnya make yang berikut

Order allow,deny
allow from all

Apache versi lebih baru berubah menjadi seperti yang berikut ini

Require all granted

Kirain semua udah diubah saat dulu upgrade, ternyata ada yang ketinggalan T_T

JSON prettifier

Once in a while I need to prettify a JSON document (read: add indentations and new lines) to make it (more) readable. Usually what I will do is finding an online prettifier and copy-paste the JSON onto there. What I usually don’t realize is that I already have that tool in my toolbox! I figured this out from a post somewhere on the net, sorry I don’t remember exactly where.

If you have Python installed, that means you already have a tool that can make a JSON document pretty. Just use it as the following.

$ python -m json.tool document.json

Or if you are an stdin fan, it can also read from there.

$ python -m json.tool < document.json

There you have it!

Blokir Website dengan iptables

Ceritanya saya sedang browsing sana sini pake tablet pc. Tiba2.. si halaman web yang mestinya tampil biasa saja kalo dibuka lewat komputer biasa, skr berubah jadi ala majalah. Selidik sana selidik sini, itu ternyata gara2 si onswipe dot com.

Si tablet mestinya cukup mampu tuk menampilkan halaman web tsb apa adanya berhubung layarnya cukup luas. Tapi entah mengapa si pemilik website bekerja sama dg layanan tersebut yang malah membuat membaca menjadi tidak nyaman.

Akhirnya saya putuskan saja tuk menutup akses ke si layanan langsung di router berhubung si tablet pc gak bisa dioprek2 tuk beginian. Router yang saya pakai memakai dd-wrt yang memiliki fasilitas untuk menutup akses ke website yang kita atur. Cara mengaturnya terlihat mudah tapi entah mengapa ngga berhasil saya pakai. Kalau saya lihat, tabel iptables tidak berubah sama sekali.

Setelah mencari kesana kemari, akhirnya saya temukan juga cara memasukan isian iptables secara manual tuk kepentingan memblokir akses. Berikut inilah perintahnya..

# iptables -A FORWARD  -p tcp -m tcp -m webstr --host "onswipe.com<&nbsp;>" -j REJECT --reject-with tcp-reset

boom! akses ke layanan mengesalkan itu pun terblokir.

Mengelompokkan barisan nilai

*Sepertinya judul tulisan ini aga2 tidak menjelaskan xD*

Intinya begini. Saya punya sebuah barisan nilai, katakanlah seperti di bawah ini

nilai = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

Nah saya ingin membuat kelompok untuk setiap 2 buah nilai berurutan. Barisan di atas ingin saya ubah menjadi seperti berikut.

pasangan = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10), (11, 12)]

Bagaimana cara cepatnya?Β Salah satu trik yang saya temukan (di Internet :P) adalah dengan menggunakan fungsi zip dan iter.

Fungsi zip sudah dikenal dapat dipakai untuk menggabungkan dua atau lebih barisan untuk membuat barisan kelompok dari setiap elemen yang ada (err..?). Contohnya

>>> angka = [1, 2, 3]
>>> tulisan = ["satu", "dua", "tiga"]
>>> zip(angka, tulisan)
[(1, 'satu'), (2, 'dua'), (3, 'tiga')]

Nah yang saya mau adalah saya ingin membuat kelompok dari setiap dua elemen berurutan. Untuk ini, fungsi iter dapat kita salahgunakan πŸ˜€ Mari kembali ke contoh awal.

>>> nilai = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> iter_nilai = iter(nilai)
>>> zip(iter_nilai, iter_nilai)
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10), (11, 12)]

Hore jadi πŸ˜€

Apa yang terjadi di belakang layar? Setelah baca2 source code fungsi zip (Python 2.7.5), setiap barisan yang dimasukkan ke dalam fungsi zip akan dijadikan iterator dan nilainya akan diambil satu persatu sampai salah satu barisan tidak dapat mengeluarkan elemen berikutnya. Andaikan parameter yang dimasukkan sudah berupa iterator, saya asumsikan Python tidak akan membuat iterator baru. Nah berhubung parameter yang dimasukkan berasal dari iterator yang sama, maka nilai akan disebar selang-seling ke kelompok/tuple yang dihasilkan.

Bagaimana cara membuat kelompok dari setiap 3 bilangan berurutan? Tambahkan lagi saja parameter si zip!

>>> nilai = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> iter_nilai = iter(nilai)
>>> zip(iter_nilai, iter_nilai, iter_nilai)
[(1, 2, 3), (4, 5, 6), (7, 8, 9), (10, 11, 12)]

Setelah 5 tahun..

Ngga sengaja barusan baca tulisan yg saya buat sekitar 5 tahun yang lalu. Isinya adalah daftar “mainan” yang ada di UvA, lebih tepatnya di grup Computational Science. Setelah 5 tahun, inilah yang terjadi antara saya dan mereka πŸ˜€

  • CAVE Automatic Virtual Environment
    Sempet masuk dan nyoba selagi kuliah Scientific Visualization
  • Distributed Real-time Interactive Virtual Environment
    Mesin ini ternyata udah super jadul sehingga ngga pernah dinyalain lagi di lab. Sekarang nasibnya sudah dipretelin dan dibuang. Gosipnya, LCD projector yg dipake itu dulu harganya (setara dengan) bbrp puluh ribu euro.
  • The Personal Space Station
    Yang ini jg tergeletak begitu saja di lab, ngga pernah dipake lagi. Di bagian atas mesin ada kotak gede yang ternyata isinya adalah sebuah PC dan monitor CRT! Tampilan monitor lalu dipantulkan oleh cermin di bawahnya sehingga tampilannya bisa kita lihat. Yaa semacam yang dipake oleh ding-dong gitu lah. Kalo sekarang, LCD monitor tipis plus kompi kecil semacam MacMini pun cukup kali ya? xD
  • Multitouch Table
    Nah yang ini sempet jadi mainan pribadi selama sekitar 2-3 tahun πŸ˜›
  • WiVR: a Window into Virtual Reality
    Si tablet PC sepertinya sempet dipake sehari2 oleh supervisor saya dulu. Si (boneka) kucing tergeletak di lemari lab. Si toples entah ada di mana. Saya ngga pernah ngeliat mereka bertiga main2 bersama πŸ˜› Eksperimen apa ini?Β SchrΓΆdinger’s cat! Ini ceritanya mau ngeliat apakah si kucing masih hidup atau ngga tanpa ngebuka toples dengan melakukan X-Ray-X-Ray-an. Eh X-Ray-nya beneran deng. Cuma tuk ngeliatnya, si gambar mesti lalu lalang ke sana kemarin melintasi pulau dan negara tuk akhirnya nyampe di si tablet dari sebuah computer cluster entah di mana xD