Blogku ter-hack!

Beberapa waktu lalu, aku menyunting entry di so-called blog utama www.cubicless.com yang sok pakai bahasa Inggris (yang akhirnya bikin males nulis, yang akhirnya bikin aku corat-coret di sini.). Kebetulan, berkas yang hasil tutorial yang ditulis, aku unggah ke pixel.cubicless.com, supaya ngumpul semua disitu dan gampang manage-nya. Tapi bikin kaget ketika ternyata halaman utamanya, dan setiap halaman yang ada, diisi oleh hasil deface dari seorang so-called hacker (sebut saja hekeng).

Tampian pixel.cubicless.com yang ter-deface

Hal yang bikin sebel lagi, halaman tersebut memunculkan autoplay untuk lagu gajelas. Sayang sekali lupa tak aku unduh.

Masalah yang jadi pikiran adalah aku ingat adalah mengapa setiap page dari pixel ter-deface? Apakah ini juga mempengaruhi setiap direktori di shared hosting yang sama? Jika iya, maka ini hal buruk, sebab subdomain pixel adalah situs web yang static, sehingga kemungkinan besar ada orang yang mengunggah shell. Itu berita yang sangat buruk, sebab bisa jadi ini terjadi karena ada situs web pada shared hosting yang mengajak masuk tamu tak diundang. Sambil panik, aku coba membuka index.html dari pixel dan ternyata isinya masih sama seperti yang aku buat terakhir kali. Tak ada yang salah.

Isi dari index.html pada pixel.cubicless.com.

Oke, tak ada yang salah dengan berkas index.html. Jadi, mengapa tampilannya beda? Mungkin DNS attack! Kemudian saya alamat servernya melalui dashboard cPanel untuk dicocokkan ke DNS records.

Informasi umum pada cPanel
Record pada cPanel

Oke. Ternyata sama alamat IP-nya (xxx.xxx.xxx.145) ! Jadi bukan DNS-nya diganti sama si hekeng! Jadi kok bisa ya? Tiba-tiba inget kebiasaan kalo daftarin domain, DNS-nya pakai milik CloudFlare, karena dulu pernah pengalaman ada DDOS pada situs web milik teman. Dan ternyata…

Record pada CloudFlare

Dan ternyata alamat IP-nya salah! Kok bisa sih? Padahal dulu santai-santai aja. Kemungkinan shared hosting yang aku pakai maintenance dan melakukan penggantian alamat IP ke xxx.xxxx.xxx.145, dan kebetulan, host yang ditunjuk dengan alamat IP yang lama yaitu xxx.xxx.xxx.143 diserang oleh si hekeng. Kasian…

Setelah DNS record di CloudFlare aku betulin, tampilan pixel.cubicless.com kembali seperti mula-mula.

Tampilan dari pixel.cubicless.com yang sebenarnya

Begitupula halaman hasil dari tutorial di www.cubicless.com:

King County house price cluster

Hal ini membuatku semakin yakin untuk menggunakan layanan wordpress.com daripada harus hosting mandiri. Juga sebenarnya mempertimbangkan untuk menggunakan Jekyll. Ada ide? Sampaikan di kolom komentar.

Mendapatkan kombinasi dari beberapa list di Python

Beberapa bulan lalu, saya mengerjakan skripsi yang menerapkan grid search *sigh* dengan beberapa kombinasi hyperparameter/hyperparams. Tentu tak menyenangkan jika saya harus membuat kombinasi secara manual.

learning_rate_list = [0.001, 0.01, 0.1, 1.0, 10, 100]
decay_rate_list = [0.00005, 0.0001, 0.001, 0.01, 0.1]
momentum_rate_list = [0.1, 0.2, 0.4, 0.8, 1]
batch_size_list = [64, 128, 256, 512, 1024, 2048]

Dari 4 list di atas, harus dibuat kombinasi hyperparams untuk dimasukkan sebagai argumen saat membuat model di Keras. (Btw, saya tahu bahwa batch size bukanlah hyperparams.) Misalnya salah satu kombinasi adalah:

learning_rate = 0.1
decay_rate = 0.001
momentum_rate = 0.1
batch_size = 64

Berarti jika ada 4 list dengan masing-masing memiliki elemen sejumlah 6, 5, 5, dan 6, maka akan muncul 900 kombinasi dari keempat list tersebut. Sungguh tak menyenangkan jika saya harus memasukkan satu per satu kombinasi hyperparams ke dalam model. Not good. Jadi yang saya lakukan adalah membuat daftar kombinasi sebanyak 900 itu terlebih dahulu.

import itertools
import random

combination_list = list(itertools.product(*[learning_rate_list, decay_rate_list, momentum_rate_list, batch_size_list]))

print(len(combination_list))
print(combination_list[:3])

Jika kode di atas dijalankan, maka konsol Python akan menampilkan jumlah elemen dari daftar kombinasi yaitu 900 dan 3 kombinasi pertama. Saya juga tak lupa untuk mengacak daftar kombinasi tersebut agar nantinya pemrosesan grid search tidak urut dari kombinasi (0.001, 0.00005, 0.1, 64) sampai (100, 0.1, 1, 2048).

random.shuffle(combination_list)

Good luck!

How to concatenate two numpy arrays

Two-dimensional array

a = np.array([[1,5,9],[2,6,10]])
b = np.array([[3,7,11],[4,8,12],[13,14,15]])
np.concatenate((a,b))
np.vstack((a,b))

Both concatenate and vstack return same output:

array([[ 1, 5, 9],
      [ 2, 6, 10],
      [ 3, 7, 11],
      [ 4, 8, 12],
      [13, 14, 15]])
array([[ 1, 5, 9],
       [ 2, 6, 10],
       [ 3, 7, 11],
       [ 4, 8, 12],
       [13, 14, 15]])

One dimensional array

a = np.array([1,5,3])
b = np.array([3,7,11])
np.concatenate((a,b))
np.vstack((a,b))

concatenate returns:

array([ 1, 5, 3, 3, 7, 11])

but vstack returns:

array([[ 1, 5, 3],
       [ 3, 7, 11]])

pgAdmin4, No Module Called Encoding

If you ended up here, probably you curiously have opened pgAdmin4 config dialog, change nothing and poof! pgAdmin4 throws an error next time you open it.

[bit@bitwise ~]$ pgadmin4
Python path:  "" 
Python Home:  "/usr/lib/pgadmin4/venv"
Fatal Python error: initfsencoding: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
Current thread 0x00007f438e486c80 (most recent call first):
Aborted (core dumped)

I reinstall pgAdmin4 many times using pacman, change PYTHONHOME and PYTHONPATH variables, but no luck. Frustated, in the next day, an epiphany flow into my head, if pgAdmin4 throws an error after the config altered, why i don’t delete the config file?

[bit@bitwise ~]$ mv ~/.config/pgadmin/pgadmin4.conf  ~/.config/pgadmin/pgadmin4.conf.old

Setup Indonesian Jamu Herbs

Setup DB

[postgres@bitwise ~]$ sudo -u postgres -i
[postgres@bitwise ~]$ createuser --interactive -P
Enter name of role to add: ijah
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
[postgres@bitwise ~]$ createdb -O ijah IJAH

continued