Posts

Showing posts from December, 2017

Alter Table Add Column Lambat?

Padahal jumlah data baru itungan ratusan ribu, tapi mau alter table rasanya lama banget, seperti nge-freeze gitu... Setelah browsing di stackoverflow, salah satu solusinya adalah dengan membuat tabel baru kosong (clone), kemudian tambahkan kolom yang baru, isi dengan data dari tabel lama, dan rename kembali...

Menggunakan Nginx sebagai Proxy untuk Aplikasi Web Flask

Berikut ini contoh nginx.conf untuk aplikasi Flask saya: server { listen 80; server_name ip_address; location / { proxy_pass http://127.0.0.1:8000; } } Dengan "hanya" menggunakan modal ini, Anda sudah dapat membuat aplikasi web Anda live, misal dengan menggunakan gunicorn: gunicorn app.views:app -b 127.0.0.1:8000 Menggunakan konfigurasi di atas, berarti kita menggunakan nginx sebagai proxy, hal ini berarti jika kita ingin mendapatkan IP Host server, maka yang muncul adalah 127.0.0.1 Untuk mendapatkan IP server "asli", kita perlu menambahkan baris di nginx config di atas: proxy_set_header Host $host; Dengan begitu, kita dapat mendapatkan IP asli host di Flask dengan: request.headers.get("Host") Ada juga kita ingin mendapatkan IP asli dari visitor, karena aplikasi kita di belakang proxy, maka ketika kita hanya akan mendapat IP 127.0.0.1 juga. Bagaimana kita mendapatkan real IP visitor? Tambahkan baris berikut di nginx conf kita, proxy_set_header

Belajar Menerapkan Flask Configuration

Kondisi: Server: menggunakan mongodb authentication Localhost: mongodb tanpa authentication Awalnya cukup merepotkan, karena harus melakukan hardcode, namun setelah baca-baca lagi, dokumentasi, ada teknik konfigurasi yang manjur. app      --- __init__.py     --- views.py     --- config/         --- config.py        --- __init__.py Didalam config.py, masukkan konfig berikut: class Config ( object ): DEBUG = False class ProductionConfig ( Config ): MONGODB_USERNAME = "username" MONGODB_PASSWORD = "password" class DevelopmentConfig ( Config ): DEBUG = True class TestingConfig ( Config ): TESTING = True Kemudian di file __init__.py yang ada di direktori app, tambahkan baris berikut: app . config . from_object ( 'app.config.config.ProductionConfig' ) Biar lebih modular lagi, saya disini menggunakan python-decouple, dan menambahkan di berkas .env saya ENVIRON= app.config.config.ProductionConfig Sehingga baris yang kita tambahkan di b

Tunnelling ke Localhost Melalui SSH

Anda tahu layanan seperti ngrox, pagekite atau sejenisnya? Ya layanan ini berguna banget kalo misal kita ingin melakukan demo apa yang sudah kita lakukan di localhost biar bisa diakses secara online. Sayangnya, layanan mereka [mungkin semua] berbayar, kalau pun free, biasanya free trial, atau limit bandwidth. Nah, sebenarnya hal ini bisa kita lakukan sendiri, syaratnya Anda harus punya server dengan IP Public, dan tentu saja, Anda harus punya akses root ke server. Caranya adalah sebagai berikut: Di server: edit /etc/ssh/sshd_config Tambahkan baris berikut, di baris paling bawah: GatewayPorts yes Setelah itu restart ssh sudo service ssh restart Di PC local: ssh -N -R *:0:localhost:5000 username@ip_server Perintah ini, berarti kita ingin memforward localhost:5000 ke server dengan port yang diberikan setelah menekan enter perintah di atas. Respon server kurang lebih seperti ini: Allocated port 53409 for remote forward to localhost:5000 Dan, sekarang ketika Anda membuka URL ht

Pymongo Tips - Biar Data Bisa Digunakan Berulang di Flask Template

Biasanya, ketika menggunakan query seperti ini di pymongo data = db.collection.find({"job": "programmer"}) return render_template("template.html", data=data) Setelah di-looping sekali, variable data akan empty [], bagaimana jika kita ingin menggunakan berulang? Cukup bungkus statement di atas menjadi: data = [i for i in db.collection.find({"job": "programmer"})] Dan, sekarang data bisa digunakan berulang-ulang sesuai keinginan... Happy coding..

Python Flask Send Raw HTTP Header Response

Kalau di PHP, Anda pasti mengenal fungsi header("Location": "someurl") Dari web PHP docs, fungsi ini untuk mengirim raw http header. Bagaimana melakukan hal tersebut di python Flask? from flask import make_response from app import app @app.route("/") def index():     resp = make_response()     resp.location = "http://someurl"     resp.status = "301"     return resp Done

Data DateTime di MongoDB Tanpa MicroSecond

Kalau di MySQL, ketika insert datetime dengan format datetime . datetime . now() maka data yang masuk adalah " tahun bulan hari jam menit detik" tanpa microsecond. Hal ini berbeda ketika kita memasukkan format datetime yang sama ke MongoDB, secara otomatis, waktu microsecond ikut tercatat. Bagaimana cara biar microsecond tidak usah ikut tercatat? datetime . datetime . now() . replace(microsecond =0 ) Otomatis, data datetime akan masuk ke mongodb tanpa microsecond.

Posting ke Wordpress Menggunakan Python Wordpress XMLRPC

Berikut code snippet untuk melakukan posting ke WP: from wordpress_xmlrpc import Client, WordPressPost from wordpress_xmlrpc.methods.posts import GetPosts, NewPost from wordpress_xmlrpc.methods.users import GetUserInfo from wordpress_xmlrpc.methods import posts wp = Client("http://localhost/xmlrpc.php", "admin", "admin") # posts = wp.call(GetPosts()) # print(posts) # users = wp.call(GetUserInfo()) # print(users) post = WordPressPost() post.title = "My new python title" post.content = "This is the body of my new post." post.terms_names = { "post_tag": ["test", "firstpost"], "category": ["Introductions", "Tests"] } post.id = wp.call(NewPost(post)) post.post_status = "publish" wp.call(posts.EditPost(post.id, post)) Kenapa wordpress? Karena platform ini terkenal SEO friendly.. Tinggal bagaimana kreativitas kita aja...

stormSSH untuk manajemen SSH

Image
Ngelola banyak server? Bingung IP mana untuk server mana? Kasih nama aja, bisa dengan membuat alias di .bashrc atau kita gunakan tools seperti misalnya sshstorm ini.

[FIX] Unlimited Scroll di Gnome Terminal

Entah kenapa ini GNOME terminal di Kali Linux kok gak bisa unlimited scroll, apa karena dulu saya install GNOME nya terpisah ya... Entahlah, yang jelas persoalan sudah terselesaikan... Caranya dengan menginstall command gconftool-e yang ada di paket gconf2 sudo apt install gconf2 Kemudian jalankan perintah ini di Terminal: gconf2 -t bool --set /apps/gnome-terminal/profiles/Default/scrollback_unlimited 1 Done

Tips Mudah Membuka Blokir Reddit Tanpa VPN

Tips ini khusus bagi pengguna Linux/MacOS, caranya dengan mengedit file /etc/hosts dan tambahkan dua baris IP berikut ini: 151.101.53.140  reddit.com 151.101.53.140  www.reddit.com Atau silakan simak video dari saya berikut: [youtube https://www.youtube.com/watch?v=RguVePUsgsA&w=560&h=315]  

[NOTED] Jangan Pernah Gunakan Nama 'key' Sebagai Nama Kolom di MySQL

Dasar noob, sempat dibuat pusing karena query yang saya tulis di mysql console selalu error, setelah browsing sebentar baru tahu kalau nama kolom yang saya gunakan, yakni 'key' adalah reserved keyword yang sebaiknya dihindari penggunaannya di MySQL. Untung masih bisa diatasi dengan menambahkan tanda ` (backtick), sehingga query menjadi seperti berikut: update table set `key` =1 where id =10 ; Meski bisa diatasi, ini tetap bukan best practices, so jangan pernah ulangi kesalahan yang sama, cari tahu reserved keyword di MySQL sebelum membuat nama kolom.

Mengubah Jam Server ke Jam Lokal

Mungkin judul inggrisnya "how to convert server time to local time zone?". Yak kurang lebih begitu... Bagaimana caranya? import arrow import pytz from datetime import datetime def to_local_tz(s): """Convert UTC to local timezone (Asia/Jakarta).""" try: dt_str = datetime.strftime(s, "%Y-%m-%d %H:%M:%S") dt_arr = arrow.Arrow.strptime(dt_str, "%Y-%m-%d %H:%M:%S") return dt_arr.to("Asia/Jakarta").naive except Exception as e: pass Selamat mencoba...